From 5b42095f37e19510d29f2f9dd24d62266d935a62 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 9 Apr 2024 00:03:44 +0000 Subject: [PATCH] Rebuild pages at 018db8238bc256c1dba73747ae3988ce8fa29843 --- CATcher-org_WATcher_main/authorship.json | 2 +- CATcher-org_WATcher_main/commits.json | 2 +- TEAMMATES_teammates_master/authorship.json | 2 +- TEAMMATES_teammates_master/commits.json | 2 +- archive.zip | Bin 1269105 -> 1516387 bytes markbind_markbind_master/authorship.json | 2 +- markbind_markbind_master/commits.json | 2 +- reposense-logs/reposense.log.0 | 1672 ++++++++++---------- summary.json | 2 +- 9 files changed, 843 insertions(+), 843 deletions(-) diff --git a/CATcher-org_WATcher_main/authorship.json b/CATcher-org_WATcher_main/authorship.json index e63f1bd..e5ce3d9 100644 --- a/CATcher-org_WATcher_main/authorship.json +++ b/CATcher-org_WATcher_main/authorship.json @@ -1 +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/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 { ActivityDashboardModule } from \u0027./activity-dashboard/activity-dashboard.module\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { AuthModule } from \u0027./auth/auth.module\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { AuthGuard } from \u0027./core/guards/auth.guard\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { ParseUrlParamsGuard } from \u0027./core/guards/parse-url-params.guard\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { IssuesViewerModule } from \u0027./issues-viewer/issues-viewer.module\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"const routes: Routes \u003d ["},{"lineNumber":10,"author":{"gitId":"-"},"content":" { path: \u0027\u0027, loadChildren: () \u003d\u003e AuthModule },"},{"lineNumber":11,"author":{"gitId":"-"},"content":" { path: \u0027issuesViewer/:org/:repo\u0027, canActivate: [ParseUrlParamsGuard], children: [] },"},{"lineNumber":12,"author":{"gitId":"-"},"content":" { path: \u0027issuesViewer\u0027, loadChildren: () \u003d\u003e IssuesViewerModule, canLoad: [AuthGuard] },"},{"lineNumber":13,"author":{"gitId":"-"},"content":" { path: \u0027activityDashboard\u0027, loadChildren: () \u003d\u003e ActivityDashboardModule, canLoad: [AuthGuard] }"},{"lineNumber":14,"author":{"gitId":"-"},"content":"];"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"@NgModule({"},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":" imports: [RouterModule.forRoot(routes, { relativeLinkResolution: \u0027legacy\u0027 })],"},{"lineNumber":18,"author":{"gitId":"-"},"content":" exports: [RouterModule]"},{"lineNumber":19,"author":{"gitId":"-"},"content":"})"},{"lineNumber":20,"author":{"gitId":"-"},"content":"export class AppRoutingModule {}"}],"authorContributionMap":{"MadLamprey":1,"-":19}},{"path":"src/app/app.module.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { HttpClientModule } from \u0027@angular/common/http\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { ErrorHandler, NgModule, NgZone } from \u0027@angular/core\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { BrowserModule, Title } from \u0027@angular/platform-browser\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { BrowserAnimationsModule } from \u0027@angular/platform-browser/animations\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { Router } from \u0027@angular/router\u0027;"},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":"import { ApolloLink, InMemoryCache, PossibleTypesMap } from \u0027@apollo/client/core\u0027;"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":"import { setContext } from \u0027@apollo/client/link/context\u0027;"},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":"import { Apollo } from \u0027apollo-angular\u0027;"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":"import { HttpLink } from \u0027apollo-angular/http\u0027;"},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import \u0027reflect-metadata\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import graphqlTypes from \u0027../../graphql/graphql-types\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import \u0027../polyfills\u0027;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import { ActivityDashboardModule } from \u0027./activity-dashboard/activity-dashboard.module\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { AppRoutingModule } from \u0027./app-routing.module\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { AppComponent } from \u0027./app.component\u0027;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import { AuthModule } from \u0027./auth/auth.module\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import { UserConfirmationComponent } from \u0027./core/guards/user-confirmation/user-confirmation.component\u0027;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import { AuthService } from \u0027./core/services/auth.service\u0027;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027./core/services/error-handling.service\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027./core/services/error-message.service\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import { AuthServiceFactory } from \u0027./core/services/factories/factory.auth.service\u0027;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import { GithubServiceFactory } from \u0027./core/services/factories/factory.github.service\u0027;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import { IssueServiceFactory } from \u0027./core/services/factories/factory.issue.service\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./core/services/github.service\u0027;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027./core/services/githubevent.service\u0027;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027./core/services/issue.service\u0027;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027./core/services/label.service\u0027;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027./core/services/logging.service\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import { RepoSessionStorageService } from \u0027./core/services/repo-session-storage.service\u0027;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import { UserService } from \u0027./core/services/user.service\u0027;"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027./core/services/view.service\u0027;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import { IssuesViewerModule } from \u0027./issues-viewer/issues-viewer.module\u0027;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import { LabelDefinitionPopupComponent } from \u0027./shared/label-definition-popup/label-definition-popup.component\u0027;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import { HeaderComponent } from \u0027./shared/layout\u0027;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import { RepoChangeFormComponent } from \u0027./shared/repo-change-form/repo-change-form.component\u0027;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import { SharedModule } from \u0027./shared/shared.module\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"@NgModule({"},{"lineNumber":40,"author":{"gitId":"Arif-Khalid"},"content":" declarations: [AppComponent, HeaderComponent, UserConfirmationComponent, LabelDefinitionPopupComponent, RepoChangeFormComponent],"},{"lineNumber":41,"author":{"gitId":"-"},"content":" imports: ["},{"lineNumber":42,"author":{"gitId":"-"},"content":" BrowserModule,"},{"lineNumber":43,"author":{"gitId":"-"},"content":" BrowserAnimationsModule,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" AuthModule,"},{"lineNumber":45,"author":{"gitId":"-"},"content":" IssuesViewerModule,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ActivityDashboardModule,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" SharedModule,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" HttpClientModule,"},{"lineNumber":49,"author":{"gitId":"MadLamprey"},"content":" AppRoutingModule"},{"lineNumber":50,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":51,"author":{"gitId":"-"},"content":" providers: ["},{"lineNumber":52,"author":{"gitId":"-"},"content":" {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" provide: GithubService,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" useFactory: GithubServiceFactory,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" deps: [ErrorHandlingService, Apollo, LoggingService]"},{"lineNumber":56,"author":{"gitId":"-"},"content":" },"},{"lineNumber":57,"author":{"gitId":"-"},"content":" {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" provide: AuthService,"},{"lineNumber":59,"author":{"gitId":"-"},"content":" useFactory: AuthServiceFactory,"},{"lineNumber":60,"author":{"gitId":"-"},"content":" deps: ["},{"lineNumber":61,"author":{"gitId":"-"},"content":" Router,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" NgZone,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" GithubService,"},{"lineNumber":64,"author":{"gitId":"-"},"content":" UserService,"},{"lineNumber":65,"author":{"gitId":"-"},"content":" IssueService,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" LabelService,"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" ViewService,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" GithubEventService,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" Title,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" ErrorHandlingService,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" LoggingService"},{"lineNumber":72,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":73,"author":{"gitId":"-"},"content":" },"},{"lineNumber":74,"author":{"gitId":"-"},"content":" {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" provide: IssueService,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" useFactory: IssueServiceFactory,"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" deps: [GithubService, UserService, ViewService]"},{"lineNumber":78,"author":{"gitId":"-"},"content":" },"},{"lineNumber":79,"author":{"gitId":"-"},"content":" {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" provide: ErrorHandler,"},{"lineNumber":81,"author":{"gitId":"-"},"content":" useClass: ErrorHandlingService"},{"lineNumber":82,"author":{"gitId":"-"},"content":" },"},{"lineNumber":83,"author":{"gitId":"-"},"content":" ErrorMessageService,"},{"lineNumber":84,"author":{"gitId":"-"},"content":" RepoSessionStorageService"},{"lineNumber":85,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":86,"author":{"gitId":"-"},"content":" bootstrap: [AppComponent]"},{"lineNumber":87,"author":{"gitId":"-"},"content":"})"},{"lineNumber":88,"author":{"gitId":"-"},"content":"export class AppModule {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" constructor(private apollo: Apollo, private httpLink: HttpLink, private authService: AuthService, private logger: LoggingService) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" const URI \u003d \u0027https://api.github.com/graphql\u0027;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" const log \u003d new ApolloLink((operation, forward) \u003d\u003e {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" operation.setContext({ start: performance.now() });"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AppModule: GraphQL request\u0027, operation.getContext());"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return forward(operation).map((result) \u003d\u003e {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" const time \u003d performance.now() - operation.getContext().start;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AppModule: GraphQL response\u0027, operation.getContext(), `in ${Math.round(time)}ms`);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" const repo \u003d operation.getContext().response.body.data.repository;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" const item \u003d Object.keys(repo)[0];"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.logger.debug(\u0027AppModule: GraphQL response body\u0027, item, repo[item].edges.length, repo[item].edges);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" return result;"},{"lineNumber":101,"author":{"gitId":"-"},"content":" });"},{"lineNumber":102,"author":{"gitId":"-"},"content":" });"},{"lineNumber":103,"author":{"gitId":"-"},"content":" const basic \u003d setContext(() \u003d\u003e {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" return { headers: { Accept: \u0027charset\u003dutf-8\u0027 } };"},{"lineNumber":105,"author":{"gitId":"-"},"content":" });"},{"lineNumber":106,"author":{"gitId":"-"},"content":" const auth \u003d setContext(() \u003d\u003e {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" return { headers: { Authorization: `Token ${this.authService.accessToken.getValue()}` } };"},{"lineNumber":108,"author":{"gitId":"-"},"content":" });"},{"lineNumber":109,"author":{"gitId":"-"},"content":" const link \u003d ApolloLink.from([log, basic, auth, this.httpLink.create({ uri: URI })]);"},{"lineNumber":110,"author":{"gitId":"MadLamprey"},"content":" const possibleTypes: PossibleTypesMap \u003d {};"},{"lineNumber":111,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":112,"author":{"gitId":"MadLamprey"},"content":" graphqlTypes.__schema.types.forEach((type: any) \u003d\u003e {"},{"lineNumber":113,"author":{"gitId":"MadLamprey"},"content":" if (type.kind \u003d\u003d\u003d \u0027UNION\u0027 || type.kind \u003d\u003d\u003d \u0027INTERFACE\u0027) {"},{"lineNumber":114,"author":{"gitId":"MadLamprey"},"content":" possibleTypes[type.name] \u003d type.possibleTypes.map((possibleType: any) \u003d\u003e possibleType.name);"},{"lineNumber":115,"author":{"gitId":"MadLamprey"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":" });"},{"lineNumber":117,"author":{"gitId":"MadLamprey"},"content":" const cache \u003d new InMemoryCache({ possibleTypes });"},{"lineNumber":118,"author":{"gitId":"-"},"content":" this.apollo.create({"},{"lineNumber":119,"author":{"gitId":"-"},"content":" link: link,"},{"lineNumber":120,"author":{"gitId":"-"},"content":" cache: cache"},{"lineNumber":121,"author":{"gitId":"-"},"content":" });"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":3,"Arif-Khalid":1,"MadLamprey":13,"-":106}},{"path":"src/app/auth/auth.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, NgZone, OnDestroy, OnInit } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Observable, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { filter, flatMap, map } from \u0027rxjs/operators\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { AppConfig } from \u0027../../environments/environment\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { STORAGE_KEYS } from \u0027../core/constants/storage-keys.constants\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { GithubUser } from \u0027../core/models/github-user.model\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { ApplicationService } from \u0027../core/services/application.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { AuthService, AuthState } from \u0027../core/services/auth.service\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../core/services/error-handling.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027../core/services/error-message.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../core/services/logging.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../core/services/user.service\u0027;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../core/services/view.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":17,"author":{"gitId":"-"},"content":" selector: \u0027app-auth\u0027,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" templateUrl: \u0027./auth.component.html\u0027,"},{"lineNumber":19,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./auth.component.css\u0027]"},{"lineNumber":20,"author":{"gitId":"-"},"content":"})"},{"lineNumber":21,"author":{"gitId":"-"},"content":"export class AuthComponent implements OnInit, OnDestroy {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" authState: AuthState;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" accessTokenSubscription: Subscription;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" authStateSubscription: Subscription;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" currentUserName: string;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" urlEncodedSessionName: string;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" urlEncodedRepo: string;"},{"lineNumber":28,"author":{"gitId":"-"},"content":" sessionInformation: string;"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":31,"author":{"gitId":"-"},"content":" public appService: ApplicationService,"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private authService: AuthService,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private userService: UserService,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private errorHandlingService: ErrorHandlingService,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private router: Router,"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" private viewService: ViewService,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private ngZone: NgZone,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private activatedRoute: ActivatedRoute,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private logger: LoggingService"},{"lineNumber":40,"author":{"gitId":"-"},"content":" ) {}"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.logger.startSession();"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" const oauthCode \u003d this.activatedRoute.snapshot.queryParamMap.get(\u0027code\u0027);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" const state \u003d this.activatedRoute.snapshot.queryParamMap.get(\u0027state\u0027);"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" if (this.authService.isAuthenticated()) {"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" this.router.navigate([this.viewService.currentView]);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":" this.initAccessTokenSubscription();"},{"lineNumber":53,"author":{"gitId":"-"},"content":" this.initAuthStateSubscription();"},{"lineNumber":54,"author":{"gitId":"-"},"content":" this.createProfileFromUrlQueryParams();"},{"lineNumber":55,"author":{"gitId":"-"},"content":" this.getRepoFromUrlQueryParams();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" if (oauthCode) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" // runs upon receiving oauthCode from the redirect"},{"lineNumber":58,"author":{"gitId":"-"},"content":" this.authService.changeAuthState(AuthState.AwaitingAuthentication);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" // this.restoreOrgDetailsFromLocalStorage();"},{"lineNumber":60,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AuthComponent: Obtained authorisation code from Github\u0027);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.fetchAccessToken(oauthCode, state);"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" return;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" this.authService.startOAuthIfHasNext();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Will fetch the access token from GitHub."},{"lineNumber":69,"author":{"gitId":"-"},"content":" * @param oauthCode - The authorisation code obtained from GitHub."},{"lineNumber":70,"author":{"gitId":"-"},"content":" * @param state - The state returned from GitHub."},{"lineNumber":71,"author":{"gitId":"-"},"content":" */"},{"lineNumber":72,"author":{"gitId":"-"},"content":" fetchAccessToken(oauthCode: string, state: string) {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" if (!this.authService.isReturnedStateSame(state)) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" this.logger.info(`AuthComponent: Received incorrect state ${state}, continue waiting for correct state`);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" this.logger.info(`AuthComponent: Retrieving access token from Github`);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" const accessTokenUrl \u003d `${AppConfig.accessTokenUrl}/${oauthCode}/client_id/${AppConfig.clientId}`;"},{"lineNumber":81,"author":{"gitId":"-"},"content":" fetch(accessTokenUrl)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" .then((res) \u003d\u003e res.json())"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .then((data) \u003d\u003e {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" if (data.error) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" throw new Error(data.error);"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" this.authService.storeOAuthAccessToken(data.token);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" this.logger.info(`AuthComponent: Sucessfully obtained access token`);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" })"},{"lineNumber":90,"author":{"gitId":"-"},"content":" .catch((err) \u003d\u003e {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" this.logger.info(`AuthComponent: Error in data fetched from access token URL: ${err}`);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(err);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.authService.changeAuthState(AuthState.NotAuthenticated);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" });"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" ngOnDestroy() {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" if (this.authStateSubscription) {"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.authStateSubscription.unsubscribe();"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":" if (this.accessTokenSubscription) {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" this.accessTokenSubscription.unsubscribe();"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Checks whether the current version of WATcher is outdated."},{"lineNumber":108,"author":{"gitId":"-"},"content":" */"},{"lineNumber":109,"author":{"gitId":"-"},"content":" checkAppIsOutdated(): Observable\u003cany\u003e {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return this.appService.isApplicationOutdated().pipe("},{"lineNumber":111,"author":{"gitId":"-"},"content":" map((isOutdated: boolean) \u003d\u003e {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" if (isOutdated) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.applicationVersionOutdatedMessage());"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":" })"},{"lineNumber":116,"author":{"gitId":"-"},"content":" );"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" updateSession(sessionEvent: string) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" this.sessionInformation \u003d sessionEvent;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" goToSessionSelect() {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" this.authService.changeAuthState(AuthState.NotAuthenticated);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" isUserNotAuthenticated(): boolean {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" return this.authState \u003d\u003d\u003d AuthState.NotAuthenticated;"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" isUserAuthenticating(): boolean {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return this.authState \u003d\u003d\u003d AuthState.AwaitingAuthentication;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" isAwaitingOAuthUserConfirm(): boolean {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" return this.authState \u003d\u003d\u003d AuthState.ConfirmOAuthUser;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" isUserAuthenticated(): boolean {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" return this.authState \u003d\u003d\u003d AuthState.Authenticated;"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" isRepoSet(): boolean {"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" return this.viewService.isRepoSet();"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" get currentSessionOrg(): string {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" if (!this.sessionInformation) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" // Retrieve org details of session information from local storage"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return window.localStorage.getItem(STORAGE_KEYS.ORG);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return this.getOrgDetails(this.sessionInformation);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Extracts the Organization Details from the input sessionInformation."},{"lineNumber":157,"author":{"gitId":"-"},"content":" * @param sessionInformation - string in the format of \u0027orgName/dataRepo\u0027"},{"lineNumber":158,"author":{"gitId":"-"},"content":" */"},{"lineNumber":159,"author":{"gitId":"-"},"content":" private getOrgDetails(sessionInformation: string) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return sessionInformation.split(\u0027/\u0027)[0];"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" private initAuthStateSubscription() {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" this.authStateSubscription \u003d this.authService.currentAuthState.subscribe((state) \u003d\u003e {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" this.ngZone.run(() \u003d\u003e {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" this.authState \u003d state;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" });"},{"lineNumber":168,"author":{"gitId":"-"},"content":" });"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" private initAccessTokenSubscription() {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" this.accessTokenSubscription \u003d this.authService.accessToken"},{"lineNumber":173,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":174,"author":{"gitId":"-"},"content":" filter((token: string) \u003d\u003e !!token),"},{"lineNumber":175,"author":{"gitId":"-"},"content":" flatMap(() \u003d\u003e this.userService.getAuthenticatedUser())"},{"lineNumber":176,"author":{"gitId":"-"},"content":" )"},{"lineNumber":177,"author":{"gitId":"-"},"content":" .subscribe((user: GithubUser) \u003d\u003e {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" this.ngZone.run(() \u003d\u003e {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" this.currentUserName \u003d user.login;"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" if (this.authService.hasNext()) {"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" this.authService.completeLoginIfHasNext(this.currentUserName);"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" this.authService.changeAuthState(AuthState.ConfirmOAuthUser);"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":" });"},{"lineNumber":186,"author":{"gitId":"-"},"content":" });"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" private createProfileFromUrlQueryParams() {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" const urlParams \u003d this.activatedRoute.snapshot.queryParamMap;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" if (urlParams.has(\u0027session\u0027)) {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" this.urlEncodedSessionName \u003d urlParams.get(\u0027session\u0027);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" private getRepoFromUrlQueryParams() {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" const urlParams \u003d this.activatedRoute.snapshot.queryParamMap;"},{"lineNumber":198,"author":{"gitId":"-"},"content":" if (urlParams.has(\u0027repo\u0027)) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" this.urlEncodedRepo \u003d urlParams.get(\u0027repo\u0027);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }"},{"lineNumber":202,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":6,"NereusWB922":4,"-":192}},{"path":"src/app/core/guards/auth.guard.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { ActivatedRouteSnapshot, CanActivate, CanLoad, Route, Router, RouterStateSnapshot, UrlSegment } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { AuthService } from \u0027../services/auth.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":7,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":8,"author":{"gitId":"-"},"content":"})"},{"lineNumber":9,"author":{"gitId":"-"},"content":"export class AuthGuard implements CanActivate, CanLoad {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" constructor(private auth: AuthService, private router: Router) {}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":" canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable\u003cboolean\u003e | Promise\u003cboolean\u003e | boolean {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" if (this.auth.isAuthenticated()) {"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" this.auth.clearNext();"},{"lineNumber":15,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" this.auth.storeNext(state);"},{"lineNumber":18,"author":{"gitId":"-"},"content":" this.router.navigate([\u0027\u0027]);"},{"lineNumber":19,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" }"},{"lineNumber":21,"author":{"gitId":"-"},"content":" }"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" canLoad(route: Route, segments: UrlSegment[]): Observable\u003cboolean\u003e | Promise\u003cboolean\u003e | boolean {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" if (this.auth.isAuthenticated()) {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.router.navigate([\u0027\u0027]);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":2,"-":29}},{"path":"src/app/core/models/github-user.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027./github/group.interface\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Represents raw data returned from the GitHub API about a user."},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"export interface RawGithubUser {"},{"lineNumber":7,"author":{"gitId":"-"},"content":" avatar_url: string;"},{"lineNumber":8,"author":{"gitId":"-"},"content":" created_at: string;"},{"lineNumber":9,"author":{"gitId":"-"},"content":" html_url: string;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" login: string;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" name: string;"},{"lineNumber":12,"author":{"gitId":"-"},"content":" node_id: string;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" two_factor_authentication: boolean;"},{"lineNumber":14,"author":{"gitId":"-"},"content":" site_admin: false;"},{"lineNumber":15,"author":{"gitId":"-"},"content":" type: string;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" updated_at: string;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" url: string;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * Represents a GitHub user in WATcher"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"export class GithubUser implements RawGithubUser, Group {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" static NO_ASSIGNEE: GithubUser \u003d new GithubUser({"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" avatar_url: \u0027\u0027,"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" created_at: \u0027\u0027,"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" html_url: \u0027\u0027,"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" login: \u0027Unassigned\u0027,"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" name: \u0027\u0027,"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" node_id: \u0027\u0027,"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" two_factor_authentication: false,"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" site_admin: false,"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" type: \u0027\u0027,"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u0027\u0027,"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" url: \u0027\u0027"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" avatar_url: string;"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" created_at: string;"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" html_url: string;"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" login: string;"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" name: string;"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" node_id: string;"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" two_factor_authentication: boolean;"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" site_admin: false;"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" type: string;"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" updated_at: string;"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" url: string;"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" constructor(rawData: RawGithubUser) {"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" Object.assign(this, rawData);"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" equals(other: any) {"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" if (!(other instanceof GithubUser)) {"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" return false;"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" return this.login \u003d\u003d\u003d other.login;"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":48,"-":12}},{"path":"src/app/core/models/github/group.interface.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" * Represents a group used for grouping purposes."},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" * Groups can be used to organize issues/prs based on certain criteria,"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * such as milestones, assignees, or other properties."},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"export interface Group {"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" equals(other: any): boolean;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":8}},{"path":"src/app/core/models/issue.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import * as moment from \u0027moment\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { GithubComment } from \u0027./github/github-comment.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { GithubIssue } from \u0027./github/github-issue.model\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { GithubLabel } from \u0027./github/github-label.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { HiddenData } from \u0027./hidden-data.model\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Milestone } from \u0027./milestone.model\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"export class Issue {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" /** Basic Fields */"},{"lineNumber":10,"author":{"gitId":"-"},"content":" readonly globalId: string;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" readonly id: number;"},{"lineNumber":12,"author":{"gitId":"-"},"content":" readonly created_at: string;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" readonly githubIssue: GithubIssue;"},{"lineNumber":14,"author":{"gitId":"-"},"content":" githubComments: GithubComment[];"},{"lineNumber":15,"author":{"gitId":"-"},"content":" title: string;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" description: string;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" hiddenDataInDescription: HiddenData;"},{"lineNumber":18,"author":{"gitId":"-"},"content":" updated_at: string;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" closed_at: string;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" milestone: Milestone;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" state: string;"},{"lineNumber":22,"author":{"gitId":"-"},"content":" stateReason: string;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" issueOrPr: string;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" author: string;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" isDraft: boolean;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" /** Depending on the view, assignees attribute can be derived from Github\u0027s assignee feature OR from the Github\u0027s issue description */"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assignees?: string[];"},{"lineNumber":29,"author":{"gitId":"-"},"content":" labels?: string[];"},{"lineNumber":30,"author":{"gitId":"-"},"content":" githubLabels?: GithubLabel[];"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Formats the text to create space at the end of the user input to prevent any issues with"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * the markdown interpretation."},{"lineNumber":35,"author":{"gitId":"-"},"content":" *"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Brought over from comment-editor.component.ts"},{"lineNumber":37,"author":{"gitId":"-"},"content":" */"},{"lineNumber":38,"author":{"gitId":"-"},"content":" static formatText(text: string): string {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" if (text \u003d\u003d\u003d null) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" if (text \u003d\u003d\u003d undefined) {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return undefined;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" const newLinesRegex \u003d /[\\n\\r]/gi;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" const textSplitArray \u003d text.split(newLinesRegex);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" if (textSplitArray.filter((split) \u003d\u003e split.trim() !\u003d\u003d \u0027\u0027).length \u003e 0) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return `${text}\\n\\n`;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return text;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Processes and cleans a raw issue description obtained from user input."},{"lineNumber":58,"author":{"gitId":"-"},"content":" */"},{"lineNumber":59,"author":{"gitId":"-"},"content":" static updateDescription(description: string): string {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" const defaultString \u003d \u0027No details provided by bug reporter.\u0027;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return Issue.orDefaultString(Issue.formatText(description), defaultString);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Given two strings, returns the first if it is not an empty string or a false value such as null/undefined."},{"lineNumber":66,"author":{"gitId":"-"},"content":" * Returns the second string if the first is an empty string."},{"lineNumber":67,"author":{"gitId":"-"},"content":" */"},{"lineNumber":68,"author":{"gitId":"-"},"content":" private static orDefaultString(stringA: string, def: string): string {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" if (!stringA) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return def;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return stringA.length !\u003d\u003d 0 ? stringA : def;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" protected constructor(githubIssue: GithubIssue) {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" /** Basic Fields */"},{"lineNumber":77,"author":{"gitId":"-"},"content":" this.globalId \u003d githubIssue.id;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" this.id \u003d +githubIssue.number;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.created_at \u003d moment(githubIssue.created_at).format(\u0027lll\u0027);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" this.updated_at \u003d moment(githubIssue.updated_at).format(\u0027lll\u0027);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" this.closed_at \u003d moment(githubIssue.closed_at).format(\u0027lll\u0027);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.title \u003d githubIssue.title;"},{"lineNumber":83,"author":{"gitId":"-"},"content":" this.hiddenDataInDescription \u003d new HiddenData(githubIssue.body);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" this.description \u003d Issue.updateDescription(this.hiddenDataInDescription.originalStringWithoutHiddenData);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.state \u003d githubIssue.state;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.stateReason \u003d githubIssue.stateReason;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" this.issueOrPr \u003d githubIssue.issueOrPr;"},{"lineNumber":88,"author":{"gitId":"-"},"content":" this.author \u003d githubIssue.user.login;"},{"lineNumber":89,"author":{"gitId":"-"},"content":" // this.githubIssue \u003d githubIssue;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" this.isDraft \u003d githubIssue.isDraft;"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" this.assignees \u003d githubIssue.assignees.map((assignee) \u003d\u003e assignee.login);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.githubLabels \u003d githubIssue.labels;"},{"lineNumber":94,"author":{"gitId":"-"},"content":" this.labels \u003d githubIssue.labels.map((label) \u003d\u003e label.name);"},{"lineNumber":95,"author":{"gitId":"MadLamprey"},"content":" this.milestone \u003d githubIssue.milestone"},{"lineNumber":96,"author":{"gitId":"MadLamprey"},"content":" ? new Milestone(githubIssue.milestone)"},{"lineNumber":97,"author":{"gitId":"MadLamprey"},"content":" : this.issueOrPr \u003d\u003d\u003d \u0027Issue\u0027"},{"lineNumber":98,"author":{"gitId":"MadLamprey"},"content":" ? Milestone.IssueWithoutMilestone"},{"lineNumber":99,"author":{"gitId":"MadLamprey"},"content":" : Milestone.PRWithoutMilestone;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" public static createPhaseBugReportingIssue(githubIssue: GithubIssue): Issue {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return new Issue(githubIssue);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" createGithubIssueDescription(): string {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" return `${this.description}\\n${this.hiddenDataInDescription.toString()}`;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":"}"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":"export interface Issues {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" [id: number]: Issue;"},{"lineNumber":113,"author":{"gitId":"-"},"content":"}"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":"export const IssuesFilter \u003d {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" issuesViewer: {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" Student: \u0027NO_FILTER\u0027,"},{"lineNumber":118,"author":{"gitId":"-"},"content":" Tutor: \u0027NO_FILTER\u0027,"},{"lineNumber":119,"author":{"gitId":"-"},"content":" Admin: \u0027NO_FILTER\u0027"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"NereusWB922":1,"MadLamprey":5,"-":115}},{"path":"src/app/core/models/label.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":2,"author":{"gitId":"-"},"content":" * Represents a label and its attributes."},{"lineNumber":3,"author":{"gitId":"-"},"content":" */"},{"lineNumber":4,"author":{"gitId":"-"},"content":"export class Label implements SimpleLabel {"},{"lineNumber":5,"author":{"gitId":"-"},"content":" readonly name: string;"},{"lineNumber":6,"author":{"gitId":"-"},"content":" color: string;"},{"lineNumber":7,"author":{"gitId":"-"},"content":" definition?: string;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":" constructor(label: { name: string; color: string; definition?: string }) {"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" this.name \u003d label.name;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" this.color \u003d label.color;"},{"lineNumber":12,"author":{"gitId":"-"},"content":" this.definition \u003d label.definition;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" }"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Represents a simplified label with name and color"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"export type SimpleLabel \u003d {"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" name: string;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" color: string;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"nknguyenhc":2,"-":20}},{"path":"src/app/core/models/milestone.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027./github/group.interface\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":4,"author":{"gitId":"-"},"content":" * Represents a milestone and its attributes fetched from Github."},{"lineNumber":5,"author":{"gitId":"-"},"content":" */"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"export class Milestone implements Group {"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":" static IssueWithoutMilestone: Milestone \u003d new Milestone({ title: \u0027Issue without a milestone\u0027, state: null });"},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":" static PRWithoutMilestone: Milestone \u003d new Milestone({ title: \u0027PR without a milestone\u0027, state: null });"},{"lineNumber":9,"author":{"gitId":"-"},"content":" title: string;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" state: string;"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" deadline?: Date;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" constructor(milestone: { title: string; state: string; due_on?: string }) {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" this.title \u003d milestone.title;"},{"lineNumber":15,"author":{"gitId":"-"},"content":" this.state \u003d milestone.state;"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" this.deadline \u003d milestone.due_on ? new Date(milestone.due_on) : undefined;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" }"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" public equals(other: any) {"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" if (!(other instanceof Milestone)) {"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" return false;"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" return this.title \u003d\u003d\u003d other.title;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":3,"NereusWB922":8,"MadLamprey":2,"-":12}},{"path":"src/app/core/models/repo-change-response.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"/**"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":" * Represents the response of the repo-change-form component"},{"lineNumber":3,"author":{"gitId":"Arif-Khalid"},"content":" */"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":"export type RepoChangeResponse \u003d {"},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":" repo: string;"},{"lineNumber":6,"author":{"gitId":"Arif-Khalid"},"content":" keepFilters: boolean;"},{"lineNumber":7,"author":{"gitId":"Arif-Khalid"},"content":"};"}],"authorContributionMap":{"Arif-Khalid":7}},{"path":"src/app/core/models/session.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { pipe } from \u0027rxjs\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { throwIfFalse } from \u0027../../shared/lib/custom-ops\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Repo } from \u0027./repo.model\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027./view.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * Session repository comprises the view and its corresponding repository array."},{"lineNumber":8,"author":{"gitId":"-"},"content":" */"},{"lineNumber":9,"author":{"gitId":"-"},"content":"export interface SessionRepo {"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" view: View;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" repos: Repo[];"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * Session data comprises an array of session repositories."},{"lineNumber":16,"author":{"gitId":"-"},"content":" */"},{"lineNumber":17,"author":{"gitId":"-"},"content":"export interface SessionData {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" sessionRepo: SessionRepo[];"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"export const SESSION_DATA_UNAVAILABLE \u003d \u0027Session data does not exist.\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"export const SESSION_DATA_MISSING_FIELDS \u003d \u0027Session data does not contain any repositories.\u0027;"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"export const NO_VALID_OPEN_VIEWS \u003d \u0027Invalid views in Session data.\u0027;"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"export const OPENED_VIEW_REPO_UNDEFINED \u003d \u0027View has no repo defined.\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"export function assertSessionDataIntegrity() {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" return pipe("},{"lineNumber":28,"author":{"gitId":"-"},"content":" throwIfFalse("},{"lineNumber":29,"author":{"gitId":"-"},"content":" (sessionData) \u003d\u003e sessionData !\u003d\u003d undefined,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" () \u003d\u003e new Error(SESSION_DATA_UNAVAILABLE)"},{"lineNumber":31,"author":{"gitId":"-"},"content":" ),"},{"lineNumber":32,"author":{"gitId":"-"},"content":" throwIfFalse(hasSessionRepo, () \u003d\u003e new Error(SESSION_DATA_MISSING_FIELDS)),"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" throwIfFalse(areViewsValid, () \u003d\u003e new Error(NO_VALID_OPEN_VIEWS)),"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" throwIfFalse(areReposDefined, () \u003d\u003e new Error(OPENED_VIEW_REPO_UNDEFINED))"},{"lineNumber":35,"author":{"gitId":"-"},"content":" );"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Checks if Session Data has all its crucial fields present."},{"lineNumber":40,"author":{"gitId":"-"},"content":" * @param sessionData"},{"lineNumber":41,"author":{"gitId":"-"},"content":" */"},{"lineNumber":42,"author":{"gitId":"-"},"content":"function hasSessionRepo(sessionData: SessionData): boolean {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return sessionData.sessionRepo !\u003d null \u0026\u0026 Array.isArray(sessionData.sessionRepo) \u0026\u0026 sessionData.sessionRepo.length \u003e 0;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * Checks if Views belong to a pre-defined View."},{"lineNumber":48,"author":{"gitId":"-"},"content":" * @param sessionData"},{"lineNumber":49,"author":{"gitId":"-"},"content":" */"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":"function areViewsValid(sessionData: SessionData): boolean {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return sessionData.sessionRepo.reduce("},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" (isViewValidSoFar: boolean, currentViewRepo: SessionRepo) \u003d\u003e isViewValidSoFar \u0026\u0026 currentViewRepo.view in View,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" true"},{"lineNumber":54,"author":{"gitId":"-"},"content":" );"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" * Checks if each View has an associated repo defined as well."},{"lineNumber":59,"author":{"gitId":"-"},"content":" * @param sessionData"},{"lineNumber":60,"author":{"gitId":"-"},"content":" */"},{"lineNumber":61,"author":{"gitId":"-"},"content":"function areReposDefined(sessionData: SessionData): boolean {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" return sessionData.sessionRepo.reduce("},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" (isViewRepoDefinedSoFar: boolean, currentViewRepo: SessionRepo) \u003d\u003e"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" isViewRepoDefinedSoFar \u0026\u0026 !!currentViewRepo.repos \u0026\u0026 Array.isArray(currentViewRepo.repos) \u0026\u0026 currentViewRepo.repos.length \u003e 0,"},{"lineNumber":65,"author":{"gitId":"-"},"content":" true"},{"lineNumber":66,"author":{"gitId":"-"},"content":" );"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":13,"-":54}},{"path":"src/app/core/models/view.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"export enum View {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" issuesViewer \u003d \u0027issuesViewer\u0027,"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" activityDashboard \u003d \u0027activityDashboard\u0027"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":4}},{"path":"src/app/core/services/auth.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Injectable, NgZone } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Title } from \u0027@angular/platform-browser\u0027;"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import { Router, RouterStateSnapshot } from \u0027@angular/router\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { BehaviorSubject, from, Observable, of } from \u0027rxjs\u0027;"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import { catchError, map, mergeMap } from \u0027rxjs/operators\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { AppConfig } from \u0027../../../environments/environment\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { generateSessionId } from \u0027../../shared/lib/session\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { uuid } from \u0027../../shared/lib/uuid\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../models/view.model\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027./error-handling.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027./githubevent.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027./issue.service\u0027;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027./label.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027./logging.service\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { UserService } from \u0027./user.service\u0027;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027./view.service\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"export enum AuthState {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u0027NotAuthenticated\u0027,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u0027AwaitingAuthentication\u0027,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u0027ConfirmOAuthUser\u0027,"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u0027Authenticated\u0027"},{"lineNumber":24,"author":{"gitId":"-"},"content":"}"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":27,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":28,"author":{"gitId":"-"},"content":"})"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Responsible for initiating the authentication process and querying or"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * updating the application state with regards to authentication."},{"lineNumber":33,"author":{"gitId":"-"},"content":" */"},{"lineNumber":34,"author":{"gitId":"-"},"content":"export class AuthService {"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" private static readonly DEFAULT_NO_PERMISSION_TO_PRIVATE_REPOS \u003d false;"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" private static readonly SESSION_NEXT_KEY \u003d \u0027next\u0027;"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" authStateSource \u003d new BehaviorSubject(AuthState.NotAuthenticated);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" currentAuthState \u003d this.authStateSource.asObservable();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" accessToken \u003d new BehaviorSubject(undefined);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private state: string;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" ENABLE_POPUP_MESSAGE \u003d \u0027Please enable pop-ups in your browser\u0027;"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":46,"author":{"gitId":"-"},"content":" private router: Router,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" private ngZone: NgZone,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private githubService: GithubService,"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private userService: UserService,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private issueService: IssueService,"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private labelService: LabelService,"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" private viewService: ViewService,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private githubEventService: GithubEventService,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" private titleService: Title,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private errorHandlingService: ErrorHandlingService,"},{"lineNumber":56,"author":{"gitId":"-"},"content":" private logger: LoggingService"},{"lineNumber":57,"author":{"gitId":"-"},"content":" ) {}"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" * Stores the data about the next route in the session storage."},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" storeNext(next: RouterStateSnapshot) {"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" sessionStorage.setItem(AuthService.SESSION_NEXT_KEY, next.url);"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" * Checks if there is a next route to be redirected to after login,"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" * by checking the session storage."},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" hasNext(): boolean {"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" return sessionStorage.getItem(AuthService.SESSION_NEXT_KEY) !\u003d\u003d null;"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" * Checks if there is a next route to be redirected to after login,"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" * and start OAuth process automatically if there is."},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" startOAuthIfHasNext() {"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" if (this.hasNext()) {"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" this.logger.info(`AuthService: Start OAuth because there is a next route`);"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" this.startOAuthProcess(AuthService.DEFAULT_NO_PERMISSION_TO_PRIVATE_REPOS);"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" * Checks if there is a next route to be redirected to after login,"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" * and complete the login process if there is."},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" * Assuming that user has authenticated on Github, and the app is awaiting confirmation."},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" completeLoginIfHasNext(username: string) {"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" if (!this.hasNext()) {"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" return;"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" this.logger.info(`AuthService: Automatically complete login because there is a next route`);"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" this.changeAuthState(AuthState.AwaitingAuthentication);"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" this.userService.createUserModel(username).subscribe("},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" () \u003d\u003e {"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" this.changeAuthState(AuthState.Authenticated);"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" },"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" (err) \u003d\u003e {"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" this.changeAuthState(AuthState.NotAuthenticated);"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" this.errorHandlingService.handleError(err);"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" this.logger.info(`AuthService: Automatic completion of login failed with an error: ${err}`);"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" );"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" * Clears the next route from the session storage."},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" clearNext() {"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" sessionStorage.removeItem(AuthService.SESSION_NEXT_KEY);"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" * Redirect to the URL indicating the next route."},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" redirectToNext() {"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" const next \u003d sessionStorage.getItem(AuthService.SESSION_NEXT_KEY);"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" this.viewService"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" .setupFromUrl(next)"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" .pipe("},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" mergeMap(() \u003d\u003e this.setRepo()),"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" this.logger.info(`AuthService: Failed to redirect to next URL with error: ${err}`);"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" this.errorHandlingService.handleError(err);"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" this.clearNext();"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" return of(false);"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" )"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" .subscribe((isSetupSuccesssful) \u003d\u003e {"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" if (isSetupSuccesssful) {"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" this.router.navigateByUrl(next);"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"-"},"content":" * Will store the OAuth token."},{"lineNumber":140,"author":{"gitId":"-"},"content":" */"},{"lineNumber":141,"author":{"gitId":"-"},"content":" storeOAuthAccessToken(token: string) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" this.githubService.storeOAuthAccessToken(token);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" this.accessToken.next(token);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" reset(): void {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AuthService: Clearing access token and setting AuthState to NotAuthenticated.\u0027);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" this.accessToken.next(undefined);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" this.changeAuthState(AuthState.NotAuthenticated);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" this.ngZone.run(() \u003d\u003e this.router.navigate([\u0027\u0027]));"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" logOut(): void {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" this.githubService.reset();"},{"lineNumber":155,"author":{"gitId":"-"},"content":" this.userService.reset();"},{"lineNumber":156,"author":{"gitId":"-"},"content":" this.issueService.reset(true);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.labelService.reset();"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" this.viewService.reset();"},{"lineNumber":159,"author":{"gitId":"-"},"content":" this.githubEventService.reset();"},{"lineNumber":160,"author":{"gitId":"-"},"content":" this.logger.reset();"},{"lineNumber":161,"author":{"gitId":"-"},"content":" this.setLandingPageTitle();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" this.issueService.setIssueTeamFilter(\u0027All Teams\u0027);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" this.reset();"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":" setTitleWithViewDetail(): void {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" const appSetting \u003d require(\u0027../../../../package.json\u0027);"},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":" const title \u003d `${appSetting.name} ${appSetting.version} - ${this.viewService.getCurrentRepositoryURL()}`;"},{"lineNumber":169,"author":{"gitId":"-"},"content":" this.logger.info(`AuthService: Setting Title as ${title}`);"},{"lineNumber":170,"author":{"gitId":"-"},"content":" this.titleService.setTitle(title);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" setLandingPageTitle(): void {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" const appSetting \u003d require(\u0027../../../../package.json\u0027);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" const title \u003d `${appSetting.name} ${appSetting.version}`;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" this.logger.info(`AuthService: Setting Title as ${title}`);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" this.titleService.setTitle(title);"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" isAuthenticated(): boolean {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return this.authStateSource.getValue() \u003d\u003d\u003d AuthState.Authenticated;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" changeAuthState(newAuthState: AuthState) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" if (newAuthState \u003d\u003d\u003d AuthState.Authenticated) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" const sessionId \u003d generateSessionId();"},{"lineNumber":187,"author":{"gitId":"-"},"content":" this.issueService.setSessionId(sessionId);"},{"lineNumber":188,"author":{"gitId":"-"},"content":" this.logger.info(`AuthService: Successfully authenticated with session: ${sessionId}`);"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":" this.authStateSource.next(newAuthState);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":194,"author":{"gitId":"-"},"content":" * Generates and assigns an unguessable random \u0027state\u0027 string to pass to Github for protection against cross-site request forgery attacks"},{"lineNumber":195,"author":{"gitId":"-"},"content":" */"},{"lineNumber":196,"author":{"gitId":"-"},"content":" generateStateString() {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" this.state \u003d uuid();"},{"lineNumber":198,"author":{"gitId":"-"},"content":" sessionStorage.setItem(\u0027state\u0027, this.state);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" isReturnedStateSame(returnedState: string): boolean {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" const state \u003d sessionStorage.getItem(\u0027state\u0027);"},{"lineNumber":203,"author":{"gitId":"-"},"content":" return returnedState \u003d\u003d\u003d state;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * Will start the Github OAuth web flow process."},{"lineNumber":208,"author":{"gitId":"-"},"content":" */"},{"lineNumber":209,"author":{"gitId":"-"},"content":" startOAuthProcess(hasPrivateConsent: boolean) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AuthService: Starting authentication\u0027);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" // Available OAuth scopes https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"},{"lineNumber":212,"author":{"gitId":"-"},"content":" let permissionLevel \u003d \u0027public-repo\u0027;"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" if (hasPrivateConsent) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" // grants WATcher access to private repos if user allows"},{"lineNumber":216,"author":{"gitId":"-"},"content":" permissionLevel \u003d \u0027repo\u0027;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" const githubRepoPermission \u003d permissionLevel; // don\u0027t allow changes after logging ins"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" this.changeAuthState(AuthState.AwaitingAuthentication);"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" this.generateStateString();"},{"lineNumber":224,"author":{"gitId":"-"},"content":" this.redirectToOAuthPage("},{"lineNumber":225,"author":{"gitId":"-"},"content":" encodeURI("},{"lineNumber":226,"author":{"gitId":"-"},"content":" `${AppConfig.githubUrl}/login/oauth/authorize?client_id\u003d${AppConfig.clientId}\u0026scope\u003d${githubRepoPermission},read:user\u0026state\u003d${this.state}`"},{"lineNumber":227,"author":{"gitId":"-"},"content":" )"},{"lineNumber":228,"author":{"gitId":"-"},"content":" );"},{"lineNumber":229,"author":{"gitId":"-"},"content":" this.logger.info(`AuthService: Redirecting for Github authentication`);"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":233,"author":{"gitId":"-"},"content":" * Handles the clean up required after authentication and setting up of repository is completed."},{"lineNumber":234,"author":{"gitId":"-"},"content":" */"},{"lineNumber":235,"author":{"gitId":"nknguyenhc"},"content":" handleSetRepoSuccess(repoName: string) {"},{"lineNumber":236,"author":{"gitId":"NereusWB922"},"content":" this.setTitleWithViewDetail();"},{"lineNumber":237,"author":{"gitId":"NereusWB922"},"content":" this.router.navigate([View.issuesViewer], {"},{"lineNumber":238,"author":{"gitId":"nknguyenhc"},"content":" queryParams: {"},{"lineNumber":239,"author":{"gitId":"NereusWB922"},"content":" [ViewService.REPO_QUERY_PARAM_KEY]: repoName"},{"lineNumber":240,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":241,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Setup repository after authentication."},{"lineNumber":246,"author":{"gitId":"-"},"content":" */"},{"lineNumber":247,"author":{"gitId":"-"},"content":" setRepo(): Observable\u003cboolean\u003e {"},{"lineNumber":248,"author":{"gitId":"NereusWB922"},"content":" return from(this.viewService.initializeCurrentRepository()).pipe("},{"lineNumber":249,"author":{"gitId":"-"},"content":" map(() \u003d\u003e {"},{"lineNumber":250,"author":{"gitId":"NereusWB922"},"content":" if (!this.viewService.currentRepo) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":" this.githubEventService.setLatestChangeEvent();"},{"lineNumber":254,"author":{"gitId":"NereusWB922"},"content":" this.handleSetRepoSuccess(this.viewService.currentRepo.toString());"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":256,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":257,"author":{"gitId":"-"},"content":" catchError((error) \u003d\u003e {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(error);"},{"lineNumber":259,"author":{"gitId":"nknguyenhc"},"content":" this.clearNext();"},{"lineNumber":260,"author":{"gitId":"-"},"content":" return of(false);"},{"lineNumber":261,"author":{"gitId":"-"},"content":" })"},{"lineNumber":262,"author":{"gitId":"-"},"content":" );"},{"lineNumber":263,"author":{"gitId":"-"},"content":" }"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":266,"author":{"gitId":"-"},"content":" * Will redirect to GitHub OAuth page"},{"lineNumber":267,"author":{"gitId":"-"},"content":" */"},{"lineNumber":268,"author":{"gitId":"-"},"content":" private redirectToOAuthPage(url: string): void {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" if (url \u003d\u003d null) {"},{"lineNumber":270,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }"},{"lineNumber":272,"author":{"gitId":"-"},"content":" window.location.href \u003d url;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":88,"NereusWB922":14,"-":172}},{"path":"src/app/core/services/error-message.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":4,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":5,"author":{"gitId":"-"},"content":"})"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * Contains all error message prompts to user."},{"lineNumber":9,"author":{"gitId":"-"},"content":" */"},{"lineNumber":10,"author":{"gitId":"-"},"content":"export class ErrorMessageService {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" public static repositoryNotPresentMessage() {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" return \u0027Invalid repository name. Please provide Github repository URL or the repository name in the format Org/Repository Name.\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" }"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" public static invalidUrlMessage() {"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" return \u0027URL is invalid, or repository does not exist, please indicate the repository you wish to view to continue.\u0027;"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static unableToFetchIssuesMessage() {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch issue.\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" }"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static unableToFetchMilestoneMessage() {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch milestones.\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static unableToFetchLabelsMessage() {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch labels.\u0027;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static usersUnassignableMessage(assignee: string) {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" return `Cannot assign ${assignee} to the issue. Please check if ${assignee} is authorized.`;"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static unableToFetchUsersMessage() {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch assignable users for repository\u0027;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" public static unableToFetchEventsMessage() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch issue events for repository\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static unableToFetchActivityEventsMessage() {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch activity events for repository\u0027;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" public static unableToFetchDataFileMessage() {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch data file.\u0027;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static unableToFetchLatestReleaseMessage() {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch latest release.\u0027;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" public static unableToFetchSettingsFileMessage() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch settings file.\u0027;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static unableToFetchAuthenticatedUsersMessage() {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch authenticated user.\u0027;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" public static unableToOpenInBrowserMessage() {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return \u0027Unable to open this issue in Browser\u0027;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" public static applicationVersionOutdatedMessage() {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" return \u0027Please update to the latest version of WATcher.\u0027;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" public static multipleDropdownOptionsErrorMessage() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return \u0027Supply either Dropdown option number or text, not both.\u0027;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" public static noDropdownOptionsErrorMessage() {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" return \u0027No Dropdown identification parameters supplied.\u0027;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":4,"-":74}},{"path":"src/app/core/services/factories/factory.auth.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { NgZone } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Title } from \u0027@angular/platform-browser\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Router } from \u0027@angular/router\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"// import { AppConfig } from \u0027../../../../environments/environment\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { AuthService } from \u0027../auth.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../error-handling.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../github.service\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027../githubevent.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../issue.service\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../label.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../logging.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"// import { MockAuthService } from \u0027../mocks/mock.auth.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../user.service\u0027;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../view.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"export function AuthServiceFactory("},{"lineNumber":17,"author":{"gitId":"-"},"content":" router: Router,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" ngZone: NgZone,"},{"lineNumber":19,"author":{"gitId":"-"},"content":" githubService: GithubService,"},{"lineNumber":20,"author":{"gitId":"-"},"content":" userService: UserService,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" issueService: IssueService,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" labelService: LabelService,"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" viewService: ViewService,"},{"lineNumber":24,"author":{"gitId":"-"},"content":" githubEventService: GithubEventService,"},{"lineNumber":25,"author":{"gitId":"-"},"content":" titleService: Title,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" errorHandlingService: ErrorHandlingService,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" logger: LoggingService"},{"lineNumber":28,"author":{"gitId":"-"},"content":") {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" // TODO: Write Mocks"},{"lineNumber":30,"author":{"gitId":"-"},"content":" // if (AppConfig.test) {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // return new MockAuthService("},{"lineNumber":32,"author":{"gitId":"-"},"content":" // router,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // ngZone,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" // githubService,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" // userService,"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // issueService,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" // labelService,"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" // viewService,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // githubEventService,"},{"lineNumber":40,"author":{"gitId":"-"},"content":" // titleService,"},{"lineNumber":41,"author":{"gitId":"-"},"content":" // logger"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // );"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // }"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return new AuthService("},{"lineNumber":45,"author":{"gitId":"-"},"content":" router,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ngZone,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" githubService,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" userService,"},{"lineNumber":49,"author":{"gitId":"-"},"content":" issueService,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" labelService,"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" viewService,"},{"lineNumber":52,"author":{"gitId":"-"},"content":" githubEventService,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" titleService,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" errorHandlingService,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" logger"},{"lineNumber":56,"author":{"gitId":"-"},"content":" );"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":4,"-":53}},{"path":"src/app/core/services/factories/factory.github.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Apollo } from \u0027apollo-angular\u0027;"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"// import { AppConfig } from \u0027../../../../environments/environment\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../error-handling.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../github.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../logging.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"// import { MockGithubService } from \u0027../mocks/mock.github.service\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"export function GithubServiceFactory(handling: ErrorHandlingService, apollo: Apollo, logger: LoggingService) {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" // TODO: Write Mocks"},{"lineNumber":11,"author":{"gitId":"-"},"content":" // if (AppConfig.test) {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" // return new MockGithubService();"},{"lineNumber":13,"author":{"gitId":"-"},"content":" // }"},{"lineNumber":14,"author":{"gitId":"-"},"content":" return new GithubService(handling, apollo, logger);"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"MadLamprey":1,"-":14}},{"path":"src/app/core/services/factories/factory.issue.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"// import { AppConfig } from \u0027../../../../environments/environment\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../github.service\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../issue.service\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"// import { MockIssueService } from \u0027../mocks/mock.issue.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../user.service\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../view.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"export function IssueServiceFactory(githubService: GithubService, userService: UserService, viewService: ViewService) {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" // TODO: Write Mocks"},{"lineNumber":10,"author":{"gitId":"-"},"content":" // if (AppConfig.test) {"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" // return new MockIssueService(githubService, viewService, dataService);"},{"lineNumber":12,"author":{"gitId":"-"},"content":" // }"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" return new IssueService(githubService, userService, viewService);"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":4,"-":10}},{"path":"src/app/core/services/filters.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":"import { Sort } from \u0027@angular/material/sort\u0027;"},{"lineNumber":3,"author":{"gitId":"Arif-Khalid"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":"import { BehaviorSubject, pipe } from \u0027rxjs\u0027;"},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":"import { SimpleLabel } from \u0027../models/label.model\u0027;"},{"lineNumber":6,"author":{"gitId":"Arif-Khalid"},"content":"import { Milestone } from \u0027../models/milestone.model\u0027;"},{"lineNumber":7,"author":{"gitId":"Arif-Khalid"},"content":"import { LoggingService } from \u0027./logging.service\u0027;"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import { MilestoneService } from \u0027./milestone.service\u0027;"},{"lineNumber":9,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":10,"author":{"gitId":"Arif-Khalid"},"content":"export type Filter \u003d {"},{"lineNumber":11,"author":{"gitId":"Arif-Khalid"},"content":" title: string;"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" status: string[];"},{"lineNumber":13,"author":{"gitId":"Arif-Khalid"},"content":" type: string;"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":" sort: Sort;"},{"lineNumber":15,"author":{"gitId":"Arif-Khalid"},"content":" labels: string[];"},{"lineNumber":16,"author":{"gitId":"Arif-Khalid"},"content":" milestones: string[];"},{"lineNumber":17,"author":{"gitId":"Arif-Khalid"},"content":" hiddenLabels: Set\u003cstring\u003e;"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: Set\u003cstring\u003e;"},{"lineNumber":19,"author":{"gitId":"Arif-Khalid"},"content":"};"},{"lineNumber":20,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":21,"author":{"gitId":"Arif-Khalid"},"content":"@Injectable({"},{"lineNumber":22,"author":{"gitId":"Arif-Khalid"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":23,"author":{"gitId":"Arif-Khalid"},"content":"})"},{"lineNumber":24,"author":{"gitId":"Arif-Khalid"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"Arif-Khalid"},"content":" * Responsible for centralising filters"},{"lineNumber":26,"author":{"gitId":"Arif-Khalid"},"content":" * Filters are subscribed to and emitted from this service"},{"lineNumber":27,"author":{"gitId":"Arif-Khalid"},"content":" */"},{"lineNumber":28,"author":{"gitId":"Arif-Khalid"},"content":"export class FiltersService {"},{"lineNumber":29,"author":{"gitId":"Arif-Khalid"},"content":" public static readonly PRESET_VIEW_QUERY_PARAM_KEY \u003d \u0027presetview\u0027;"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" readonly presetViews: {"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" [key: string]: () \u003d\u003e Filter;"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" } \u003d {"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" currentlyActive: () \u003d\u003e ({"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" title: \u0027\u0027,"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" status: [\u0027open pullrequest\u0027, \u0027merged pullrequest\u0027, \u0027open issue\u0027, \u0027closed issue\u0027],"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" type: \u0027all\u0027,"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" sort: { active: \u0027status\u0027, direction: \u0027asc\u0027 },"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" labels: [],"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" milestones: this.getMilestonesForCurrentlyActive().map((milestone) \u003d\u003e milestone.title),"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" hiddenLabels: new Set\u003cstring\u003e(),"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: new Set\u003cstring\u003e()"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" }),"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" contributions: () \u003d\u003e ({"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" title: \u0027\u0027,"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" status: [\u0027open pullrequest\u0027, \u0027merged pullrequest\u0027, \u0027open issue\u0027, \u0027closed issue\u0027],"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" type: \u0027all\u0027,"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" sort: { active: \u0027id\u0027, direction: \u0027desc\u0027 },"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" labels: [],"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" milestones: this.milestoneService.milestones.map((milestone) \u003d\u003e milestone.title),"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" hiddenLabels: new Set\u003cstring\u003e(),"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: new Set\u003cstring\u003e()"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" }),"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" custom: () \u003d\u003e this.filter$.value"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" };"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" // List of keys in the new filter change that causes current filter to not qualify to be a preset view."},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" readonly presetChangingKeys \u003d new Set\u003cstring\u003e([\u0027status\u0027, \u0027type\u0027, \u0027milestones\u0027, \u0027labels\u0027, \u0027deselectedLabels\u0027]);"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" readonly defaultFilter \u003d this.presetViews.currentlyActive;"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" public filter$ \u003d new BehaviorSubject\u003cFilter\u003e(this.defaultFilter());"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" // Either \u0027currentlyActive\u0027, \u0027contributions\u0027, or \u0027custom\u0027."},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" public presetView$ \u003d new BehaviorSubject\u003cstring\u003e(\u0027currentlyActive\u0027);"},{"lineNumber":63,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":64,"author":{"gitId":"Arif-Khalid"},"content":" // Helps in determining whether all milestones were selected from previous repo during sanitization of milestones"},{"lineNumber":65,"author":{"gitId":"Arif-Khalid"},"content":" private previousMilestonesLength \u003d 0;"},{"lineNumber":66,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":67,"author":{"gitId":"Arif-Khalid"},"content":" constructor("},{"lineNumber":68,"author":{"gitId":"Arif-Khalid"},"content":" private logger: LoggingService,"},{"lineNumber":69,"author":{"gitId":"Arif-Khalid"},"content":" private router: Router,"},{"lineNumber":70,"author":{"gitId":"Arif-Khalid"},"content":" private route: ActivatedRoute,"},{"lineNumber":71,"author":{"gitId":"Arif-Khalid"},"content":" private milestoneService: MilestoneService"},{"lineNumber":72,"author":{"gitId":"Arif-Khalid"},"content":" ) {}"},{"lineNumber":73,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":74,"author":{"gitId":"Arif-Khalid"},"content":" private pushFiltersToUrl(): void {"},{"lineNumber":75,"author":{"gitId":"Arif-Khalid"},"content":" const queryParams \u003d { ...this.route.snapshot.queryParams };"},{"lineNumber":76,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":77,"author":{"gitId":"Arif-Khalid"},"content":" for (const filterName of Object.keys(this.filter$.value)) {"},{"lineNumber":78,"author":{"gitId":"Arif-Khalid"},"content":" const filterValue \u003d this.filter$.value[filterName];"},{"lineNumber":79,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":80,"author":{"gitId":"Arif-Khalid"},"content":" // Don\u0027t include empty or null filters"},{"lineNumber":81,"author":{"gitId":"Arif-Khalid"},"content":" // Intended behaviour to reset to default if 0 of a certain filter are selected"},{"lineNumber":82,"author":{"gitId":"Arif-Khalid"},"content":" switch (filterName) {"},{"lineNumber":83,"author":{"gitId":"Arif-Khalid"},"content":" // Strings"},{"lineNumber":84,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027title\u0027:"},{"lineNumber":85,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027type\u0027:"},{"lineNumber":86,"author":{"gitId":"Arif-Khalid"},"content":" if (!filterValue) {"},{"lineNumber":87,"author":{"gitId":"Arif-Khalid"},"content":" delete queryParams[filterName];"},{"lineNumber":88,"author":{"gitId":"Arif-Khalid"},"content":" continue;"},{"lineNumber":89,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":90,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[filterName] \u003d filterValue;"},{"lineNumber":91,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":92,"author":{"gitId":"Arif-Khalid"},"content":" // Arrays"},{"lineNumber":93,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027status\u0027:"},{"lineNumber":94,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027labels\u0027:"},{"lineNumber":95,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027milestones\u0027:"},{"lineNumber":96,"author":{"gitId":"Arif-Khalid"},"content":" if (filterValue.length \u003d\u003d\u003d 0) {"},{"lineNumber":97,"author":{"gitId":"Arif-Khalid"},"content":" delete queryParams[filterName];"},{"lineNumber":98,"author":{"gitId":"Arif-Khalid"},"content":" continue;"},{"lineNumber":99,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":100,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[filterName] \u003d filterValue;"},{"lineNumber":101,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":102,"author":{"gitId":"Arif-Khalid"},"content":" // Sets"},{"lineNumber":103,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027selectedLabels\u0027:"},{"lineNumber":104,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027deselectedLabels\u0027:"},{"lineNumber":105,"author":{"gitId":"Arif-Khalid"},"content":" if (filterValue.size \u003d\u003d\u003d 0) {"},{"lineNumber":106,"author":{"gitId":"Arif-Khalid"},"content":" delete queryParams[filterName];"},{"lineNumber":107,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":108,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[filterName] \u003d [...filterValue];"},{"lineNumber":109,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":110,"author":{"gitId":"Arif-Khalid"},"content":" // Objects"},{"lineNumber":111,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027sort\u0027:"},{"lineNumber":112,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[filterName] \u003d JSON.stringify(filterValue);"},{"lineNumber":113,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":114,"author":{"gitId":"Arif-Khalid"},"content":" default:"},{"lineNumber":115,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":116,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":117,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[FiltersService.PRESET_VIEW_QUERY_PARAM_KEY] \u003d this.presetView$.value;"},{"lineNumber":118,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":119,"author":{"gitId":"Arif-Khalid"},"content":" this.router.navigate([], {"},{"lineNumber":120,"author":{"gitId":"Arif-Khalid"},"content":" relativeTo: this.route,"},{"lineNumber":121,"author":{"gitId":"Arif-Khalid"},"content":" queryParams,"},{"lineNumber":122,"author":{"gitId":"Arif-Khalid"},"content":" replaceUrl: true"},{"lineNumber":123,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":124,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":126,"author":{"gitId":"Arif-Khalid"},"content":" clearFilters(): void {"},{"lineNumber":127,"author":{"gitId":"Arif-Khalid"},"content":" this.updatePresetView(\u0027currentlyActive\u0027);"},{"lineNumber":128,"author":{"gitId":"Arif-Khalid"},"content":" this.previousMilestonesLength \u003d 0;"},{"lineNumber":129,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":130,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":131,"author":{"gitId":"Arif-Khalid"},"content":" initializeFromURLParams() {"},{"lineNumber":132,"author":{"gitId":"Arif-Khalid"},"content":" const nextFilter: Filter \u003d this.defaultFilter();"},{"lineNumber":133,"author":{"gitId":"Arif-Khalid"},"content":" const queryParams \u003d this.route.snapshot.queryParamMap;"},{"lineNumber":134,"author":{"gitId":"Arif-Khalid"},"content":" try {"},{"lineNumber":135,"author":{"gitId":"Arif-Khalid"},"content":" const presetView \u003d queryParams.get(FiltersService.PRESET_VIEW_QUERY_PARAM_KEY);"},{"lineNumber":136,"author":{"gitId":"Arif-Khalid"},"content":" // Use preset view if set in url"},{"lineNumber":137,"author":{"gitId":"Arif-Khalid"},"content":" if (presetView \u0026\u0026 this.presetViews.hasOwnProperty(presetView) \u0026\u0026 presetView !\u003d\u003d \u0027custom\u0027) {"},{"lineNumber":138,"author":{"gitId":"Arif-Khalid"},"content":" this.updatePresetView(presetView);"},{"lineNumber":139,"author":{"gitId":"Arif-Khalid"},"content":" return;"},{"lineNumber":140,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":141,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":142,"author":{"gitId":"Arif-Khalid"},"content":" // No preset view and no other filters in params, use default view"},{"lineNumber":143,"author":{"gitId":"Arif-Khalid"},"content":" if (!presetView \u0026\u0026 Object.keys(nextFilter).every((filterName) \u003d\u003e queryParams.get(filterName) \u003d\u003d\u003d null)) {"},{"lineNumber":144,"author":{"gitId":"Arif-Khalid"},"content":" this.updatePresetView(\u0027currentlyActive\u0027);"},{"lineNumber":145,"author":{"gitId":"Arif-Khalid"},"content":" return;"},{"lineNumber":146,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":147,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":148,"author":{"gitId":"Arif-Khalid"},"content":" for (const filterName of Object.keys(nextFilter)) {"},{"lineNumber":149,"author":{"gitId":"Arif-Khalid"},"content":" // Check if there is no such param in url"},{"lineNumber":150,"author":{"gitId":"Arif-Khalid"},"content":" if (queryParams.get(filterName) \u003d\u003d\u003d null) {"},{"lineNumber":151,"author":{"gitId":"Arif-Khalid"},"content":" continue;"},{"lineNumber":152,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":153,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":154,"author":{"gitId":"Arif-Khalid"},"content":" const filterData \u003d queryParams.getAll(filterName);"},{"lineNumber":155,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":156,"author":{"gitId":"Arif-Khalid"},"content":" switch (filterName) {"},{"lineNumber":157,"author":{"gitId":"Arif-Khalid"},"content":" // Strings"},{"lineNumber":158,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027title\u0027:"},{"lineNumber":159,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027type\u0027:"},{"lineNumber":160,"author":{"gitId":"Arif-Khalid"},"content":" nextFilter[filterName] \u003d filterData[0];"},{"lineNumber":161,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":162,"author":{"gitId":"Arif-Khalid"},"content":" // Arrays"},{"lineNumber":163,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027status\u0027:"},{"lineNumber":164,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027labels\u0027:"},{"lineNumber":165,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027milestones\u0027:"},{"lineNumber":166,"author":{"gitId":"Arif-Khalid"},"content":" nextFilter[filterName] \u003d filterData;"},{"lineNumber":167,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":168,"author":{"gitId":"Arif-Khalid"},"content":" // Sets"},{"lineNumber":169,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027selectedLabels\u0027:"},{"lineNumber":170,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027deselectedLabels\u0027:"},{"lineNumber":171,"author":{"gitId":"Arif-Khalid"},"content":" nextFilter[filterName] \u003d new Set(filterData);"},{"lineNumber":172,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":173,"author":{"gitId":"Arif-Khalid"},"content":" // Objects"},{"lineNumber":174,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027sort\u0027:"},{"lineNumber":175,"author":{"gitId":"Arif-Khalid"},"content":" nextFilter[filterName] \u003d JSON.parse(filterData[0]);"},{"lineNumber":176,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":177,"author":{"gitId":"Arif-Khalid"},"content":" default:"},{"lineNumber":178,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":179,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":180,"author":{"gitId":"Arif-Khalid"},"content":" this.updateFilters(nextFilter);"},{"lineNumber":181,"author":{"gitId":"Arif-Khalid"},"content":" } catch (err) {"},{"lineNumber":182,"author":{"gitId":"Arif-Khalid"},"content":" this.logger.info(`FiltersService: Update filters from URL failed with an error: ${err}`);"},{"lineNumber":183,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":184,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":185,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":186,"author":{"gitId":"Arif-Khalid"},"content":" updateFilters(newFilters: Partial\u003cFilter\u003e): void {"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" const nextDropdownFilter: Filter \u003d {"},{"lineNumber":188,"author":{"gitId":"Arif-Khalid"},"content":" ...this.filter$.value,"},{"lineNumber":189,"author":{"gitId":"Arif-Khalid"},"content":" ...newFilters"},{"lineNumber":190,"author":{"gitId":"Arif-Khalid"},"content":" };"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":" this.filter$.next(nextDropdownFilter);"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":" this.updatePresetViewFromFilters(newFilters);"},{"lineNumber":193,"author":{"gitId":"Arif-Khalid"},"content":" this.pushFiltersToUrl();"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":" * Updates the filters without updating the preset view."},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" * This should only be called when there are new labels/milestones."},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" * The preset view will be reapplied."},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":" * @param newFilters The filters with new values"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" private updateFiltersWithoutUpdatingPresetView(newFilters: Partial\u003cFilter\u003e): void {"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" const nextDropdownFilter: Filter \u003d {"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":" ...this.filter$.value,"},{"lineNumber":205,"author":{"gitId":"nknguyenhc"},"content":" ...newFilters"},{"lineNumber":206,"author":{"gitId":"nknguyenhc"},"content":" };"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" this.filter$.next(nextDropdownFilter);"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":" this.filter$.next(this.presetViews[this.presetView$.value]());"},{"lineNumber":209,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":210,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":211,"author":{"gitId":"nknguyenhc"},"content":" private updatePresetViewFromFilters(newFilter: Partial\u003cFilter\u003e): void {"},{"lineNumber":212,"author":{"gitId":"nknguyenhc"},"content":" for (const key of Object.keys(newFilter)) {"},{"lineNumber":213,"author":{"gitId":"nknguyenhc"},"content":" if (this.presetChangingKeys.has(key)) {"},{"lineNumber":214,"author":{"gitId":"nknguyenhc"},"content":" this.presetView$.next(\u0027custom\u0027);"},{"lineNumber":215,"author":{"gitId":"nknguyenhc"},"content":" return;"},{"lineNumber":216,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":217,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":218,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":219,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":220,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":221,"author":{"gitId":"nknguyenhc"},"content":" * Updates the filter based on a preset view."},{"lineNumber":222,"author":{"gitId":"nknguyenhc"},"content":" * @param presetViewName The name of the preset view, either \u0027currentlyActive\u0027, \u0027contributions\u0027, or \u0027custom\u0027."},{"lineNumber":223,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":224,"author":{"gitId":"nknguyenhc"},"content":" updatePresetView(presetViewName: string) {"},{"lineNumber":225,"author":{"gitId":"nknguyenhc"},"content":" this.filter$.next(this.presetViews[presetViewName]());"},{"lineNumber":226,"author":{"gitId":"nknguyenhc"},"content":" this.presetView$.next(presetViewName);"},{"lineNumber":227,"author":{"gitId":"Arif-Khalid"},"content":" this.pushFiltersToUrl();"},{"lineNumber":228,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":229,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":230,"author":{"gitId":"Arif-Khalid"},"content":" sanitizeLabels(allLabels: SimpleLabel[]): void {"},{"lineNumber":231,"author":{"gitId":"Arif-Khalid"},"content":" const allLabelsSet \u003d new Set(allLabels.map((label) \u003d\u003e label.name));"},{"lineNumber":232,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":233,"author":{"gitId":"Arif-Khalid"},"content":" const newHiddenLabels: Set\u003cstring\u003e \u003d new Set();"},{"lineNumber":234,"author":{"gitId":"Arif-Khalid"},"content":" for (const hiddenLabel of this.filter$.value.hiddenLabels) {"},{"lineNumber":235,"author":{"gitId":"Arif-Khalid"},"content":" if (allLabelsSet.has(hiddenLabel)) {"},{"lineNumber":236,"author":{"gitId":"Arif-Khalid"},"content":" newHiddenLabels.add(hiddenLabel);"},{"lineNumber":237,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":238,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":239,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":240,"author":{"gitId":"nknguyenhc"},"content":" const newDeselectedLabels: Set\u003cstring\u003e \u003d new Set();"},{"lineNumber":241,"author":{"gitId":"nknguyenhc"},"content":" for (const deselectedLabel of this.filter$.value.deselectedLabels) {"},{"lineNumber":242,"author":{"gitId":"nknguyenhc"},"content":" if (allLabelsSet.has(deselectedLabel)) {"},{"lineNumber":243,"author":{"gitId":"nknguyenhc"},"content":" newDeselectedLabels.add(deselectedLabel);"},{"lineNumber":244,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":245,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":246,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":247,"author":{"gitId":"nknguyenhc"},"content":" const newLabels \u003d this.filter$.value.labels.filter((label) \u003d\u003e allLabelsSet.has(label));"},{"lineNumber":248,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":249,"author":{"gitId":"nknguyenhc"},"content":" this.updateFiltersWithoutUpdatingPresetView({"},{"lineNumber":250,"author":{"gitId":"nknguyenhc"},"content":" labels: newLabels,"},{"lineNumber":251,"author":{"gitId":"nknguyenhc"},"content":" hiddenLabels: newHiddenLabels,"},{"lineNumber":252,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: newDeselectedLabels"},{"lineNumber":253,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":254,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":255,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":256,"author":{"gitId":"Arif-Khalid"},"content":" sanitizeMilestones(allMilestones: Milestone[]) {"},{"lineNumber":257,"author":{"gitId":"MadLamprey"},"content":" const milestones \u003d allMilestones.map((milestone) \u003d\u003e milestone.title);"},{"lineNumber":258,"author":{"gitId":"MadLamprey"},"content":" milestones.push(Milestone.IssueWithoutMilestone.title, Milestone.PRWithoutMilestone.title);"},{"lineNumber":259,"author":{"gitId":"MadLamprey"},"content":" const allMilestonesSet \u003d new Set(milestones);"},{"lineNumber":260,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":261,"author":{"gitId":"Arif-Khalid"},"content":" // All previous milestones were selected, reset to all new milestones selected"},{"lineNumber":262,"author":{"gitId":"Arif-Khalid"},"content":" if (this.filter$.value.milestones.length \u003d\u003d\u003d this.previousMilestonesLength) {"},{"lineNumber":263,"author":{"gitId":"nknguyenhc"},"content":" this.updateFiltersWithoutUpdatingPresetView({ milestones: [...allMilestonesSet] });"},{"lineNumber":264,"author":{"gitId":"MadLamprey"},"content":" this.previousMilestonesLength \u003d allMilestonesSet.size;"},{"lineNumber":265,"author":{"gitId":"Arif-Khalid"},"content":" return;"},{"lineNumber":266,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":267,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":268,"author":{"gitId":"Arif-Khalid"},"content":" const newMilestones: string[] \u003d [];"},{"lineNumber":269,"author":{"gitId":"Arif-Khalid"},"content":" for (const milestone of this.filter$.value.milestones) {"},{"lineNumber":270,"author":{"gitId":"Arif-Khalid"},"content":" if (allMilestonesSet.has(milestone)) {"},{"lineNumber":271,"author":{"gitId":"Arif-Khalid"},"content":" newMilestones.push(milestone);"},{"lineNumber":272,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":273,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":274,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":275,"author":{"gitId":"Arif-Khalid"},"content":" // No applicable milestones, reset to all milestones selected"},{"lineNumber":276,"author":{"gitId":"Arif-Khalid"},"content":" if (newMilestones.length \u003d\u003d\u003d 0) {"},{"lineNumber":277,"author":{"gitId":"Arif-Khalid"},"content":" newMilestones.push(...allMilestonesSet);"},{"lineNumber":278,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":279,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":280,"author":{"gitId":"nknguyenhc"},"content":" this.updateFiltersWithoutUpdatingPresetView({ milestones: newMilestones });"},{"lineNumber":281,"author":{"gitId":"MadLamprey"},"content":" this.previousMilestonesLength \u003d allMilestonesSet.size;"},{"lineNumber":282,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":283,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":284,"author":{"gitId":"nknguyenhc"},"content":" getMilestonesForCurrentlyActive(): Milestone[] {"},{"lineNumber":285,"author":{"gitId":"nknguyenhc"},"content":" const earliestOpenMilestone \u003d this.milestoneService.getEarliestOpenMilestone();"},{"lineNumber":286,"author":{"gitId":"nknguyenhc"},"content":" if (earliestOpenMilestone) {"},{"lineNumber":287,"author":{"gitId":"NereusWB922"},"content":" return [earliestOpenMilestone, Milestone.PRWithoutMilestone];"},{"lineNumber":288,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":289,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":290,"author":{"gitId":"nknguyenhc"},"content":" const latestClosedMilestone \u003d this.milestoneService.getLatestClosedMilestone();"},{"lineNumber":291,"author":{"gitId":"nknguyenhc"},"content":" if (latestClosedMilestone) {"},{"lineNumber":292,"author":{"gitId":"NereusWB922"},"content":" return [latestClosedMilestone, Milestone.PRWithoutMilestone];"},{"lineNumber":293,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":294,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":295,"author":{"gitId":"NereusWB922"},"content":" return [...this.milestoneService.milestones, Milestone.PRWithoutMilestone];"},{"lineNumber":296,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":297,"author":{"gitId":"Arif-Khalid"},"content":"}"}],"authorContributionMap":{"nknguyenhc":97,"Arif-Khalid":192,"NereusWB922":3,"MadLamprey":5}},{"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":"MadLamprey"},"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":"MadLamprey"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { DocumentNode } from \u0027graphql\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { BehaviorSubject, forkJoin, from, merge, Observable, of, throwError } from \u0027rxjs\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { catchError, filter, flatMap, map, throwIfEmpty } from \u0027rxjs/operators\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" FetchIssue,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" FetchIssueQuery,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" FetchIssues,"},{"lineNumber":13,"author":{"gitId":"-"},"content":" FetchIssuesQuery,"},{"lineNumber":14,"author":{"gitId":"-"},"content":" FetchPullRequests,"},{"lineNumber":15,"author":{"gitId":"-"},"content":" FetchPullRequestsQuery"},{"lineNumber":16,"author":{"gitId":"-"},"content":"} from \u0027../../../../graphql/graphql-types\u0027;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import { AppConfig } from \u0027../../../environments/environment\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import { getNumberOfPages } from \u0027../../shared/lib/github-paginator-parser\u0027;"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"import { GithubUser, RawGithubUser } from \u0027../models/github-user.model\u0027;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { IssueLastModifiedManagerModel } from \u0027../models/github/cache-manager/issue-last-modified-manager.model\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import { IssuesCacheManager } from \u0027../models/github/cache-manager/issues-cache-manager.model\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import { GithubEvent } from \u0027../models/github/github-event.model\u0027;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import { GithubGraphqlIssue } from \u0027../models/github/github-graphql.issue\u0027;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import { GithubGraphqlIssueOrPr } from \u0027../models/github/github-graphql.issue-or-pr\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import RestGithubIssueFilter from \u0027../models/github/github-issue-filter.model\u0027;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import { GithubIssue } from \u0027../models/github/github-issue.model\u0027;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import { GithubResponse } from \u0027../models/github/github-response.model\u0027;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import { GithubRelease } from \u0027../models/github/github.release\u0027;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import { SessionData } from \u0027../models/session.model\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import { ERRORCODE_NOT_FOUND, ErrorHandlingService } from \u0027./error-handling.service\u0027;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027./error-message.service\u0027;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027./logging.service\u0027;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"const { Octokit } \u003d require(\u0027@octokit/rest\u0027);"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"const WATCHER_ORG \u003d \u0027WATcher-org\u0027;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"const WATCHER_REPO \u003d \u0027WATcher\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"/** Owner of Repository to watch */"},{"lineNumber":40,"author":{"gitId":"-"},"content":"let ORG_NAME \u003d \u0027\u0027; // repoOrg"},{"lineNumber":41,"author":{"gitId":"-"},"content":"/** Name of Repository to watch */"},{"lineNumber":42,"author":{"gitId":"-"},"content":"let REPO \u003d \u0027\u0027; // repoName"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"/** Owner of Settings repository, currently not used */"},{"lineNumber":45,"author":{"gitId":"-"},"content":"let MOD_ORG \u003d \u0027\u0027;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"/** Name of Settings repository, currently not used */"},{"lineNumber":47,"author":{"gitId":"-"},"content":"let DATA_REPO \u003d \u0027\u0027;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"const MAX_ITEMS_PER_PAGE \u003d 100;"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"let octokit \u003d new Octokit();"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":53,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":54,"author":{"gitId":"-"},"content":"})"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Responsible for communicating with GitHub to create, update, read and delete"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * features related to Github using GitHub API Requests."},{"lineNumber":59,"author":{"gitId":"-"},"content":" * For example, issues, issue labels and repositories."},{"lineNumber":60,"author":{"gitId":"-"},"content":" */"},{"lineNumber":61,"author":{"gitId":"-"},"content":"export class GithubService {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private static readonly IF_NONE_MATCH_EMPTY \u003d { \u0027If-None-Match\u0027: \u0027\u0027 };"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" private issuesCacheManager \u003d new IssuesCacheManager();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" private issuesLastModifiedManager \u003d new IssueLastModifiedManagerModel();"},{"lineNumber":66,"author":{"gitId":"-"},"content":" private issueQueryRefs \u003d new Map\u003cnumber, QueryRef\u003cFetchIssueQuery\u003e\u003e();"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" constructor(private errorHandlingService: ErrorHandlingService, private apollo: Apollo, private logger: LoggingService) {}"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" storeOAuthAccessToken(accessToken: string) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" octokit \u003d new Octokit({"},{"lineNumber":72,"author":{"gitId":"-"},"content":" auth() {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" return `Token ${accessToken}`;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" log: {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" debug: (message, ...otherInfo) \u003d\u003e this.logger.debug(\u0027GithubService: \u0027 + message, ...otherInfo),"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // Do not log info for HTTP response 304 due to repeated polling"},{"lineNumber":78,"author":{"gitId":"-"},"content":" info: (message, ...otherInfo) \u003d\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" /304 in \\d+ms$/.test(message) ? undefined : this.logger.info(\u0027GithubService: \u0027 + message, ...otherInfo),"},{"lineNumber":80,"author":{"gitId":"-"},"content":" warn: (message, ...otherInfo) \u003d\u003e this.logger.warn(\u0027GithubService: \u0027 + message, ...otherInfo),"},{"lineNumber":81,"author":{"gitId":"-"},"content":" error: (message, ...otherInfo) \u003d\u003e this.logger.error(\u0027GithubService: \u0027 + message, ...otherInfo)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":" });"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * Sets settings repository. Not used."},{"lineNumber":88,"author":{"gitId":"-"},"content":" * @param orgName WATcher organisation"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * @param dataRepo WATcher repository"},{"lineNumber":90,"author":{"gitId":"-"},"content":" */"},{"lineNumber":91,"author":{"gitId":"-"},"content":" storeOrganizationDetails(orgName: string, dataRepo: string) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" MOD_ORG \u003d orgName;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" DATA_REPO \u003d dataRepo;"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * Sets repository to watch. This repository is used for fetching from Github."},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" * @param viewRepoOwner Repository owner"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * @param repoName Repository name"},{"lineNumber":100,"author":{"gitId":"-"},"content":" */"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" storeViewDetails(viewRepoOwner: string, repoName: string) {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" REPO \u003d repoName;"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" ORG_NAME \u003d viewRepoOwner;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Fetches an array of filtered GitHubIssues using GraphQL query."},{"lineNumber":108,"author":{"gitId":"-"},"content":" * In WATcher, this includes pull requests."},{"lineNumber":109,"author":{"gitId":"-"},"content":" *"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * @param issuesFilter - The issue filter."},{"lineNumber":111,"author":{"gitId":"-"},"content":" * @returns An observable array of filtered GithubIssues"},{"lineNumber":112,"author":{"gitId":"-"},"content":" */"},{"lineNumber":113,"author":{"gitId":"-"},"content":" fetchIssuesGraphql(issuesFilter: RestGithubIssueFilter): Observable\u003cArray\u003cGithubIssue\u003e\u003e {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" const graphqlFilter \u003d issuesFilter.convertToGraphqlFilter();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Github Issues consists of issues and pull requests in WATcher."},{"lineNumber":117,"author":{"gitId":"-"},"content":" */"},{"lineNumber":118,"author":{"gitId":"-"},"content":" const issueObs \u003d this.toFetchIssues(issuesFilter).pipe("},{"lineNumber":119,"author":{"gitId":"-"},"content":" filter((toFetch) \u003d\u003e toFetch),"},{"lineNumber":120,"author":{"gitId":"-"},"content":" flatMap(() \u003d\u003e {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" return this.fetchGraphqlList\u003cFetchIssuesQuery, GithubGraphqlIssueOrPr\u003e("},{"lineNumber":122,"author":{"gitId":"-"},"content":" FetchIssues,"},{"lineNumber":123,"author":{"gitId":"-"},"content":" { owner: ORG_NAME, name: REPO, filter: graphqlFilter },"},{"lineNumber":124,"author":{"gitId":"-"},"content":" (result) \u003d\u003e result.data.repository.issues.edges,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" GithubGraphqlIssueOrPr"},{"lineNumber":126,"author":{"gitId":"-"},"content":" );"},{"lineNumber":127,"author":{"gitId":"-"},"content":" })"},{"lineNumber":128,"author":{"gitId":"-"},"content":" );"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const prObs \u003d this.toFetchIssues(issuesFilter).pipe("},{"lineNumber":130,"author":{"gitId":"-"},"content":" filter((toFetch) \u003d\u003e toFetch),"},{"lineNumber":131,"author":{"gitId":"-"},"content":" flatMap(() \u003d\u003e {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return this.fetchGraphqlList\u003cFetchPullRequestsQuery, GithubGraphqlIssueOrPr\u003e("},{"lineNumber":133,"author":{"gitId":"-"},"content":" FetchPullRequests,"},{"lineNumber":134,"author":{"gitId":"-"},"content":" { owner: ORG_NAME, name: REPO },"},{"lineNumber":135,"author":{"gitId":"-"},"content":" (result) \u003d\u003e result.data.repository.pullRequests.edges,"},{"lineNumber":136,"author":{"gitId":"-"},"content":" GithubGraphqlIssueOrPr"},{"lineNumber":137,"author":{"gitId":"-"},"content":" );"},{"lineNumber":138,"author":{"gitId":"-"},"content":" })"},{"lineNumber":139,"author":{"gitId":"-"},"content":" );"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" // Concatenate both streams together."},{"lineNumber":142,"author":{"gitId":"-"},"content":" return merge(issueObs, prObs);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":146,"author":{"gitId":"-"},"content":" * Checks if there are pages of filtered issues that are not cached in the cache model,"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * and updates the model to cache these new pages."},{"lineNumber":148,"author":{"gitId":"-"},"content":" * @param filter - The issue filter."},{"lineNumber":149,"author":{"gitId":"-"},"content":" * @returns Observable\u003cboolean\u003e that returns true if there are pages that do not exist in the cache model."},{"lineNumber":150,"author":{"gitId":"-"},"content":" */"},{"lineNumber":151,"author":{"gitId":"-"},"content":" private toFetchIssues(filter: RestGithubIssueFilter): Observable\u003cboolean\u003e {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" const pageFetchLimit \u003d 100;"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" let responseInFirstPage: GithubResponse\u003cGithubIssue[]\u003e;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" return this.getIssuesAPICall(filter, 1).pipe("},{"lineNumber":156,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue[]\u003e) \u003d\u003e {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" responseInFirstPage \u003d response;"},{"lineNumber":158,"author":{"gitId":"-"},"content":" return getNumberOfPages(response);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":160,"author":{"gitId":"-"},"content":" flatMap((numOfPages: number) \u003d\u003e {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" const apiCalls: Observable\u003cGithubResponse\u003cGithubIssue[]\u003e\u003e[] \u003d [];"},{"lineNumber":162,"author":{"gitId":"-"},"content":" if (numOfPages \u003e pageFetchLimit) {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" throw new Error(`Repository has too many pages (${numOfPages}), not supported.`);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":" for (let i \u003d 2; i \u003c\u003d numOfPages; i++) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" apiCalls.push(this.getIssuesAPICall(filter, i));"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":" return apiCalls.length \u003d\u003d\u003d 0 ? of([]) : forkJoin(apiCalls);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":170,"author":{"gitId":"-"},"content":" map((resultArray: GithubResponse\u003cGithubIssue[]\u003e[]) \u003d\u003e {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" const responses \u003d [responseInFirstPage, ...resultArray];"},{"lineNumber":172,"author":{"gitId":"-"},"content":" const isCached \u003d responses.reduce((result, response) \u003d\u003e {"},{"lineNumber":173,"author":{"gitId":"-"},"content":" return result \u0026\u0026 response.isCached;"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }, true);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" responses.forEach((resp, index) \u003d\u003e this.issuesCacheManager.set(index + 1, resp));"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return !isCached;"},{"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":" /**"},{"lineNumber":182,"author":{"gitId":"-"},"content":" * Checks if the specified repository exists."},{"lineNumber":183,"author":{"gitId":"-"},"content":" * @param owner - Owner of Specified Repository."},{"lineNumber":184,"author":{"gitId":"-"},"content":" * @param repo - Name of Repository."},{"lineNumber":185,"author":{"gitId":"-"},"content":" */"},{"lineNumber":186,"author":{"gitId":"-"},"content":" isRepositoryPresent(owner: string, repo: string): Observable\u003cboolean\u003e {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return from(octokit.repos.get({ owner: owner, repo: repo, headers: GithubService.IF_NONE_MATCH_EMPTY })).pipe("},{"lineNumber":188,"author":{"gitId":"-"},"content":" map((rawData: { status: number }) \u003d\u003e {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" return rawData.status !\u003d\u003d ERRORCODE_NOT_FOUND;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":191,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" return of(false);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":194,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.repositoryNotPresentMessage()))"},{"lineNumber":195,"author":{"gitId":"-"},"content":" );"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":199,"author":{"gitId":"-"},"content":" * Fetches information about an issue using GraphQL."},{"lineNumber":200,"author":{"gitId":"-"},"content":" *"},{"lineNumber":201,"author":{"gitId":"-"},"content":" * If the issue is not modified, return a `304 - Not Modified` response."},{"lineNumber":202,"author":{"gitId":"-"},"content":" *"},{"lineNumber":203,"author":{"gitId":"-"},"content":" * @param id - The issue id."},{"lineNumber":204,"author":{"gitId":"-"},"content":" * @returns Observable\u003cGithubGraphqlIssue\u003e that represents the response object."},{"lineNumber":205,"author":{"gitId":"-"},"content":" */"},{"lineNumber":206,"author":{"gitId":"-"},"content":" fetchIssueGraphql(id: number): Observable\u003cGithubGraphqlIssue\u003e {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" if (this.issueQueryRefs.get(id) \u003d\u003d\u003d undefined) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" const newQueryRef \u003d this.apollo.watchQuery\u003cFetchIssueQuery\u003e({"},{"lineNumber":209,"author":{"gitId":"-"},"content":" query: FetchIssue,"},{"lineNumber":210,"author":{"gitId":"-"},"content":" variables: {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":212,"author":{"gitId":"-"},"content":" name: REPO,"},{"lineNumber":213,"author":{"gitId":"-"},"content":" issueId: id"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" });"},{"lineNumber":216,"author":{"gitId":"-"},"content":" this.issueQueryRefs.set(id, newQueryRef);"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" const queryRef \u003d this.issueQueryRefs.get(id);"},{"lineNumber":220,"author":{"gitId":"-"},"content":" return this.toFetchIssue(id).pipe("},{"lineNumber":221,"author":{"gitId":"-"},"content":" filter((toFetch) \u003d\u003e toFetch),"},{"lineNumber":222,"author":{"gitId":"-"},"content":" flatMap(() \u003d\u003e from(queryRef.refetch())),"},{"lineNumber":223,"author":{"gitId":"-"},"content":" map((value: ApolloQueryResult\u003cFetchIssueQuery\u003e) \u003d\u003e {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return new GithubGraphqlIssue(value.data.repository.issue);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":226,"author":{"gitId":"-"},"content":" throwIfEmpty(() \u003d\u003e new HttpErrorResponse({ status: 304 }))"},{"lineNumber":227,"author":{"gitId":"-"},"content":" );"},{"lineNumber":228,"author":{"gitId":"-"},"content":" }"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":231,"author":{"gitId":"-"},"content":" * Checks if the issue has been modified since the last query, and"},{"lineNumber":232,"author":{"gitId":"-"},"content":" * updates the model to reflect the last modified time."},{"lineNumber":233,"author":{"gitId":"-"},"content":" *"},{"lineNumber":234,"author":{"gitId":"-"},"content":" * @param id - The issue id."},{"lineNumber":235,"author":{"gitId":"-"},"content":" * @returns Observable\u003cboolean\u003e that returns true if the issue has been modified."},{"lineNumber":236,"author":{"gitId":"-"},"content":" */"},{"lineNumber":237,"author":{"gitId":"-"},"content":" toFetchIssue(id: number): Observable\u003cboolean\u003e {"},{"lineNumber":238,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":239,"author":{"gitId":"-"},"content":" octokit.issues.get({"},{"lineNumber":240,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":241,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":242,"author":{"gitId":"-"},"content":" issue_number: id,"},{"lineNumber":243,"author":{"gitId":"-"},"content":" headers: { \u0027If-Modified-Since\u0027: this.issuesLastModifiedManager.get(id) }"},{"lineNumber":244,"author":{"gitId":"-"},"content":" })"},{"lineNumber":245,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":246,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue\u003e) \u003d\u003e {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" this.issuesLastModifiedManager.set(id, response.headers[\u0027last-modified\u0027]);"},{"lineNumber":248,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":250,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchIssuesMessage()))"},{"lineNumber":251,"author":{"gitId":"-"},"content":" );"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" fetchAllMilestones(): Observable\u003cArray\u003c{}\u003e\u003e {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":256,"author":{"gitId":"-"},"content":" octokit.issues.listMilestonesForRepo({"},{"lineNumber":257,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":258,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":259,"author":{"gitId":"-"},"content":" state: \u0027all\u0027,"},{"lineNumber":260,"author":{"gitId":"-"},"content":" per_page: MAX_ITEMS_PER_PAGE,"},{"lineNumber":261,"author":{"gitId":"-"},"content":" headers: GithubService.IF_NONE_MATCH_EMPTY"},{"lineNumber":262,"author":{"gitId":"-"},"content":" })"},{"lineNumber":263,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":264,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" return response[\u0027data\u0027];"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":267,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchMilestoneMessage()))"},{"lineNumber":268,"author":{"gitId":"-"},"content":" );"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" fetchAllLabels(): Observable\u003cArray\u003c{}\u003e\u003e {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":273,"author":{"gitId":"-"},"content":" octokit.issues.listLabelsForRepo({"},{"lineNumber":274,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":275,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":276,"author":{"gitId":"-"},"content":" per_page: MAX_ITEMS_PER_PAGE,"},{"lineNumber":277,"author":{"gitId":"-"},"content":" headers: GithubService.IF_NONE_MATCH_EMPTY"},{"lineNumber":278,"author":{"gitId":"-"},"content":" })"},{"lineNumber":279,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":280,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" return response[\u0027data\u0027];"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":283,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchLabelsMessage()))"},{"lineNumber":284,"author":{"gitId":"-"},"content":" );"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":288,"author":{"gitId":"-"},"content":" * Checks if the given list of users are allowed to be assigned to an issue."},{"lineNumber":289,"author":{"gitId":"-"},"content":" * @param assignees - GitHub usernames to be checked"},{"lineNumber":290,"author":{"gitId":"-"},"content":" */"},{"lineNumber":291,"author":{"gitId":"-"},"content":" areUsersAssignable(assignees: string[]): Observable\u003cvoid\u003e {"},{"lineNumber":292,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":293,"author":{"gitId":"-"},"content":" octokit.issues.listAssignees({"},{"lineNumber":294,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":295,"author":{"gitId":"-"},"content":" repo: REPO"},{"lineNumber":296,"author":{"gitId":"-"},"content":" })"},{"lineNumber":297,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":298,"author":{"gitId":"-"},"content":" map(({ data }: { data: { login: string }[] }) \u003d\u003e data.map(({ login }) \u003d\u003e login)),"},{"lineNumber":299,"author":{"gitId":"-"},"content":" map((assignables: string[]) \u003d\u003e"},{"lineNumber":300,"author":{"gitId":"-"},"content":" assignees.forEach((assignee) \u003d\u003e {"},{"lineNumber":301,"author":{"gitId":"-"},"content":" if (!assignables.includes(assignee)) {"},{"lineNumber":302,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.usersUnassignableMessage(assignee));"},{"lineNumber":303,"author":{"gitId":"-"},"content":" }"},{"lineNumber":304,"author":{"gitId":"-"},"content":" })"},{"lineNumber":305,"author":{"gitId":"-"},"content":" )"},{"lineNumber":306,"author":{"gitId":"-"},"content":" );"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" getUsersAssignable(): Observable\u003cGithubUser[]\u003e {"},{"lineNumber":310,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":311,"author":{"gitId":"-"},"content":" octokit.issues.listAssignees({"},{"lineNumber":312,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":313,"author":{"gitId":"-"},"content":" repo: REPO"},{"lineNumber":314,"author":{"gitId":"-"},"content":" })"},{"lineNumber":315,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":316,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":317,"author":{"gitId":"NereusWB922"},"content":" const data: RawGithubUser[] \u003d response[\u0027data\u0027];"},{"lineNumber":318,"author":{"gitId":"NereusWB922"},"content":" return data.map((rawGithubUser) \u003d\u003e {"},{"lineNumber":319,"author":{"gitId":"NereusWB922"},"content":" return new GithubUser(rawGithubUser);"},{"lineNumber":320,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":322,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchUsersMessage()))"},{"lineNumber":323,"author":{"gitId":"-"},"content":" );"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" fetchEventsForRepo(): Observable\u003cany[]\u003e {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" return from(octokit.issues.listEventsForRepo({ owner: ORG_NAME, repo: REPO, headers: GithubService.IF_NONE_MATCH_EMPTY })).pipe("},{"lineNumber":328,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":329,"author":{"gitId":"-"},"content":" return response[\u0027data\u0027];"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":331,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchEventsMessage()))"},{"lineNumber":332,"author":{"gitId":"-"},"content":" );"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" fetchEventsForRepoCall(pageNumber: number): Observable\u003cGithubResponse\u003cany[]\u003e\u003e {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" return \u003cObservable\u003cGithubResponse\u003cany[]\u003e\u003e\u003efrom("},{"lineNumber":337,"author":{"gitId":"-"},"content":" octokit.activity.listRepoEvents({"},{"lineNumber":338,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":339,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":340,"author":{"gitId":"-"},"content":" page: pageNumber"},{"lineNumber":341,"author":{"gitId":"-"},"content":" })"},{"lineNumber":342,"author":{"gitId":"-"},"content":" ).pipe(catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchActivityEventsMessage())));"},{"lineNumber":343,"author":{"gitId":"-"},"content":" }"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":346,"author":{"gitId":"-"},"content":" * Fetches all events of current repository for Activity Dashboard."},{"lineNumber":347,"author":{"gitId":"-"},"content":" * Adapted from getIssueApiCalls()."},{"lineNumber":348,"author":{"gitId":"-"},"content":" *"},{"lineNumber":349,"author":{"gitId":"-"},"content":" * @returns GithubEvents observable"},{"lineNumber":350,"author":{"gitId":"-"},"content":" */"},{"lineNumber":351,"author":{"gitId":"-"},"content":" fetchAllEventsForRepo(): Observable\u003cGithubEvent[]\u003e {"},{"lineNumber":352,"author":{"gitId":"-"},"content":" let responseInFirstPage: GithubResponse\u003cGithubEvent[]\u003e;"},{"lineNumber":353,"author":{"gitId":"-"},"content":" return this.fetchEventsForRepoCall(1).pipe("},{"lineNumber":354,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubEvent[]\u003e) \u003d\u003e {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" responseInFirstPage \u003d response;"},{"lineNumber":356,"author":{"gitId":"-"},"content":" return getNumberOfPages(response);"},{"lineNumber":357,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":358,"author":{"gitId":"-"},"content":" flatMap((numOfPages: number) \u003d\u003e {"},{"lineNumber":359,"author":{"gitId":"-"},"content":" const apiCalls: Observable\u003cGithubResponse\u003cGithubEvent[]\u003e\u003e[] \u003d [];"},{"lineNumber":360,"author":{"gitId":"-"},"content":" for (let i \u003d 1; i \u003c\u003d numOfPages; i++) {"},{"lineNumber":361,"author":{"gitId":"-"},"content":" apiCalls.push(this.fetchEventsForRepoCall(i));"},{"lineNumber":362,"author":{"gitId":"-"},"content":" }"},{"lineNumber":363,"author":{"gitId":"-"},"content":" return apiCalls.length \u003d\u003d\u003d 0 ? of([]) : forkJoin(apiCalls);"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":365,"author":{"gitId":"-"},"content":" map((responseArray) \u003d\u003e responseArray.map((x) \u003d\u003e x[\u0027data\u0027]))"},{"lineNumber":366,"author":{"gitId":"-"},"content":" );"},{"lineNumber":367,"author":{"gitId":"-"},"content":" }"},{"lineNumber":368,"author":{"gitId":"-"},"content":""},{"lineNumber":369,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":370,"author":{"gitId":"-"},"content":" * Not in use. Fetches data csv file from Organization repository."},{"lineNumber":371,"author":{"gitId":"-"},"content":" */"},{"lineNumber":372,"author":{"gitId":"-"},"content":" fetchDataFile(): Observable\u003c{}\u003e {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":374,"author":{"gitId":"-"},"content":" octokit.repos.getContents({ owner: MOD_ORG, repo: DATA_REPO, path: \u0027data.csv\u0027, headers: GithubService.IF_NONE_MATCH_EMPTY })"},{"lineNumber":375,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":376,"author":{"gitId":"-"},"content":" map((rawData) \u003d\u003e {"},{"lineNumber":377,"author":{"gitId":"-"},"content":" return { data: atob(rawData[\u0027data\u0027][\u0027content\u0027]) };"},{"lineNumber":378,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":379,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchDataFileMessage()))"},{"lineNumber":380,"author":{"gitId":"-"},"content":" );"},{"lineNumber":381,"author":{"gitId":"-"},"content":" }"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":384,"author":{"gitId":"-"},"content":" * Gets information of latest release of WATcher."},{"lineNumber":385,"author":{"gitId":"-"},"content":" * @returns GithubRelease observable"},{"lineNumber":386,"author":{"gitId":"-"},"content":" */"},{"lineNumber":387,"author":{"gitId":"-"},"content":" fetchLatestRelease(): Observable\u003cGithubRelease\u003e {"},{"lineNumber":388,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":389,"author":{"gitId":"-"},"content":" octokit.repos.getLatestRelease({ owner: WATCHER_ORG, repo: WATCHER_REPO, headers: GithubService.IF_NONE_MATCH_EMPTY })"},{"lineNumber":390,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":391,"author":{"gitId":"-"},"content":" map((res) \u003d\u003e res[\u0027data\u0027]),"},{"lineNumber":392,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchLatestReleaseMessage()))"},{"lineNumber":393,"author":{"gitId":"-"},"content":" );"},{"lineNumber":394,"author":{"gitId":"-"},"content":" }"},{"lineNumber":395,"author":{"gitId":"-"},"content":""},{"lineNumber":396,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":397,"author":{"gitId":"-"},"content":" * Fetches the data file that is regulates session information."},{"lineNumber":398,"author":{"gitId":"-"},"content":" * @return Observable\u003cSessionData\u003e representing session information."},{"lineNumber":399,"author":{"gitId":"-"},"content":" */"},{"lineNumber":400,"author":{"gitId":"-"},"content":" fetchSettingsFile(): Observable\u003cSessionData\u003e {"},{"lineNumber":401,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":402,"author":{"gitId":"-"},"content":" octokit.repos.getContents({ owner: MOD_ORG, repo: DATA_REPO, path: \u0027settings.json\u0027, headers: GithubService.IF_NONE_MATCH_EMPTY })"},{"lineNumber":403,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":404,"author":{"gitId":"-"},"content":" map((rawData) \u003d\u003e JSON.parse(atob(rawData[\u0027data\u0027][\u0027content\u0027]))),"},{"lineNumber":405,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchSettingsFileMessage()))"},{"lineNumber":406,"author":{"gitId":"-"},"content":" );"},{"lineNumber":407,"author":{"gitId":"-"},"content":" }"},{"lineNumber":408,"author":{"gitId":"-"},"content":""},{"lineNumber":409,"author":{"gitId":"-"},"content":" fetchAuthenticatedUser(): Observable\u003cGithubUser\u003e {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" return from(octokit.users.getAuthenticated()).pipe("},{"lineNumber":411,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":412,"author":{"gitId":"NereusWB922"},"content":" const data: RawGithubUser \u003d response[\u0027data\u0027];"},{"lineNumber":413,"author":{"gitId":"NereusWB922"},"content":" return new GithubUser(data);"},{"lineNumber":414,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":415,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchAuthenticatedUsersMessage()))"},{"lineNumber":416,"author":{"gitId":"-"},"content":" );"},{"lineNumber":417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":418,"author":{"gitId":"-"},"content":""},{"lineNumber":419,"author":{"gitId":"-"},"content":" getRepoURL(): string {"},{"lineNumber":420,"author":{"gitId":"-"},"content":" return ORG_NAME.concat(\u0027/\u0027).concat(REPO);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" }"},{"lineNumber":422,"author":{"gitId":"-"},"content":""},{"lineNumber":423,"author":{"gitId":"-"},"content":" viewIssueInBrowser(id: number, event: Event) {"},{"lineNumber":424,"author":{"gitId":"-"},"content":" if (id) {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" window.open(\u0027https://github.com/\u0027.concat(this.getRepoURL()).concat(\u0027/issues/\u0027).concat(String(id)));"},{"lineNumber":426,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(new Error(ErrorMessageService.unableToOpenInBrowserMessage()));"},{"lineNumber":428,"author":{"gitId":"-"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":" event.stopPropagation();"},{"lineNumber":430,"author":{"gitId":"-"},"content":" }"},{"lineNumber":431,"author":{"gitId":"-"},"content":""},{"lineNumber":432,"author":{"gitId":"-"},"content":" reset(): void {"},{"lineNumber":433,"author":{"gitId":"-"},"content":" this.logger.info(`GithubService: Resetting issues cache`);"},{"lineNumber":434,"author":{"gitId":"-"},"content":" this.issuesCacheManager.clear();"},{"lineNumber":435,"author":{"gitId":"-"},"content":" this.issuesLastModifiedManager.clear();"},{"lineNumber":436,"author":{"gitId":"-"},"content":" this.issueQueryRefs.clear();"},{"lineNumber":437,"author":{"gitId":"-"},"content":" }"},{"lineNumber":438,"author":{"gitId":"-"},"content":""},{"lineNumber":439,"author":{"gitId":"-"},"content":" getProfilesData(): Promise\u003cResponse\u003e {"},{"lineNumber":440,"author":{"gitId":"-"},"content":" return fetch(AppConfig.clientDataUrl);"},{"lineNumber":441,"author":{"gitId":"-"},"content":" }"},{"lineNumber":442,"author":{"gitId":"-"},"content":""},{"lineNumber":443,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":444,"author":{"gitId":"-"},"content":" * Performs an API call to fetch a page of filtered issues with a given pageNumber."},{"lineNumber":445,"author":{"gitId":"-"},"content":" *"},{"lineNumber":446,"author":{"gitId":"-"},"content":" * The request is sent with the ETag of the latest cached HTTP response."},{"lineNumber":447,"author":{"gitId":"-"},"content":" * If page requested has the same ETag, or the request results in an error,"},{"lineNumber":448,"author":{"gitId":"-"},"content":" * then the cached page is returned instead."},{"lineNumber":449,"author":{"gitId":"-"},"content":" *"},{"lineNumber":450,"author":{"gitId":"-"},"content":" * @param filter - The issue filter"},{"lineNumber":451,"author":{"gitId":"-"},"content":" * @param pageNumber - The page to be fetched"},{"lineNumber":452,"author":{"gitId":"-"},"content":" * @returns An observable representing the response containing a single page of filtered issues"},{"lineNumber":453,"author":{"gitId":"-"},"content":" */"},{"lineNumber":454,"author":{"gitId":"-"},"content":" private getIssuesAPICall(filter: RestGithubIssueFilter, pageNumber: number): Observable\u003cGithubResponse\u003cGithubIssue[]\u003e\u003e {"},{"lineNumber":455,"author":{"gitId":"-"},"content":" const apiCall: Promise\u003cGithubResponse\u003cGithubIssue[]\u003e\u003e \u003d octokit.issues.listForRepo({"},{"lineNumber":456,"author":{"gitId":"-"},"content":" ...filter,"},{"lineNumber":457,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":458,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":459,"author":{"gitId":"-"},"content":" sort: \u0027created\u0027,"},{"lineNumber":460,"author":{"gitId":"-"},"content":" direction: \u0027desc\u0027,"},{"lineNumber":461,"author":{"gitId":"-"},"content":" per_page: 100,"},{"lineNumber":462,"author":{"gitId":"-"},"content":" page: pageNumber,"},{"lineNumber":463,"author":{"gitId":"-"},"content":" headers: { \u0027If-None-Match\u0027: this.issuesCacheManager.getEtagFor(pageNumber) },"},{"lineNumber":464,"author":{"gitId":"-"},"content":" state: \u0027all\u0027"},{"lineNumber":465,"author":{"gitId":"-"},"content":" });"},{"lineNumber":466,"author":{"gitId":"-"},"content":" const apiCall$ \u003d from("},{"lineNumber":467,"author":{"gitId":"-"},"content":" apiCall.catch((err) \u003d\u003e {"},{"lineNumber":468,"author":{"gitId":"-"},"content":" return this.issuesCacheManager.get(pageNumber);"},{"lineNumber":469,"author":{"gitId":"-"},"content":" })"},{"lineNumber":470,"author":{"gitId":"-"},"content":" );"},{"lineNumber":471,"author":{"gitId":"-"},"content":""},{"lineNumber":472,"author":{"gitId":"-"},"content":" return apiCall$.pipe("},{"lineNumber":473,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":474,"author":{"gitId":"-"},"content":" // catchError does not appear to catch an error on an observable created from a promise..."},{"lineNumber":475,"author":{"gitId":"-"},"content":" this.logger.info(`GithubService: Error caught in getIssuesAPICall`);"},{"lineNumber":476,"author":{"gitId":"-"},"content":" return of(this.issuesCacheManager.get(pageNumber));"},{"lineNumber":477,"author":{"gitId":"-"},"content":" })"},{"lineNumber":478,"author":{"gitId":"-"},"content":" );"},{"lineNumber":479,"author":{"gitId":"-"},"content":" }"},{"lineNumber":480,"author":{"gitId":"-"},"content":""},{"lineNumber":481,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":482,"author":{"gitId":"-"},"content":" * Fetches a list of items using a GraphQL query that queries for paginated data."},{"lineNumber":483,"author":{"gitId":"-"},"content":" *"},{"lineNumber":484,"author":{"gitId":"-"},"content":" * @param query - The GraphQL query that queries for paginated data."},{"lineNumber":485,"author":{"gitId":"-"},"content":" * @param variables - Additional variables for the GraphQL query."},{"lineNumber":486,"author":{"gitId":"-"},"content":" * @callback pluckEdges A function that returns a list of edges in a ApolloQueryResult."},{"lineNumber":487,"author":{"gitId":"-"},"content":" * @callback Model Constructor for the item model."},{"lineNumber":488,"author":{"gitId":"-"},"content":" * @returns A list of items from the query."},{"lineNumber":489,"author":{"gitId":"-"},"content":" */"},{"lineNumber":490,"author":{"gitId":"-"},"content":" private fetchGraphqlList\u003cT, M\u003e("},{"lineNumber":491,"author":{"gitId":"-"},"content":" query: DocumentNode,"},{"lineNumber":492,"author":{"gitId":"-"},"content":" variables: {},"},{"lineNumber":493,"author":{"gitId":"-"},"content":" pluckEdges: (results: ApolloQueryResult\u003cT\u003e) \u003d\u003e Array\u003cany\u003e,"},{"lineNumber":494,"author":{"gitId":"-"},"content":" Model: new (data) \u003d\u003e M"},{"lineNumber":495,"author":{"gitId":"-"},"content":" ): Observable\u003cArray\u003cM\u003e\u003e {"},{"lineNumber":496,"author":{"gitId":"-"},"content":" return this.withPagination\u003cT\u003e(pluckEdges, query, variables, false).pipe("},{"lineNumber":497,"author":{"gitId":"-"},"content":" map((results: ApolloQueryResult\u003cT\u003e[]) \u003d\u003e {"},{"lineNumber":498,"author":{"gitId":"-"},"content":" const issues \u003d results.reduce((accumulated, current) \u003d\u003e accumulated.concat(pluckEdges(current)), []);"},{"lineNumber":499,"author":{"gitId":"-"},"content":" return issues.map((issue) \u003d\u003e new Model(issue.node));"},{"lineNumber":500,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":501,"author":{"gitId":"-"},"content":" throwIfEmpty(() \u003d\u003e {"},{"lineNumber":502,"author":{"gitId":"-"},"content":" return new HttpErrorResponse({ status: 304 });"},{"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":" /**"},{"lineNumber":508,"author":{"gitId":"-"},"content":" * Returns an observable that will continually emit the currently accumulated results, until a page that has less"},{"lineNumber":509,"author":{"gitId":"-"},"content":" * than 100 items is found, after which it performs a final emit with the full results array, and completes."},{"lineNumber":510,"author":{"gitId":"-"},"content":" *"},{"lineNumber":511,"author":{"gitId":"-"},"content":" * If `shouldAccumulate` is false, the observable will emit only the latest result, it will still complete on the"},{"lineNumber":512,"author":{"gitId":"-"},"content":" * same condition."},{"lineNumber":513,"author":{"gitId":"-"},"content":" *"},{"lineNumber":514,"author":{"gitId":"-"},"content":" * @callback pluckEdges - A function that returns a list of edges in a ApolloQueryResult."},{"lineNumber":515,"author":{"gitId":"-"},"content":" * @params query - The query to be performed."},{"lineNumber":516,"author":{"gitId":"-"},"content":" * @params variables - The variables for the query."},{"lineNumber":517,"author":{"gitId":"-"},"content":" * @params shouldAccumulate - Whether the observable should accumulate the results."},{"lineNumber":518,"author":{"gitId":"-"},"content":" * @returns an observable"},{"lineNumber":519,"author":{"gitId":"-"},"content":" */"},{"lineNumber":520,"author":{"gitId":"-"},"content":" private withPagination\u003cT\u003e("},{"lineNumber":521,"author":{"gitId":"-"},"content":" pluckEdges: (results: ApolloQueryResult\u003cT\u003e) \u003d\u003e Array\u003cany\u003e,"},{"lineNumber":522,"author":{"gitId":"-"},"content":" query: DocumentNode,"},{"lineNumber":523,"author":{"gitId":"-"},"content":" variables: { [key: string]: any } \u003d {},"},{"lineNumber":524,"author":{"gitId":"-"},"content":" shouldAccumulate: boolean \u003d true"},{"lineNumber":525,"author":{"gitId":"-"},"content":" ): Observable\u003cApolloQueryResult\u003cT\u003e[]\u003e {"},{"lineNumber":526,"author":{"gitId":"-"},"content":" const maxResultsCount \u003d 100;"},{"lineNumber":527,"author":{"gitId":"-"},"content":" const apollo \u003d this.apollo;"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" let accumulatedResults: ApolloQueryResult\u003cT\u003e[] \u003d [];"},{"lineNumber":530,"author":{"gitId":"-"},"content":" const behaviorSubject: BehaviorSubject\u003cApolloQueryResult\u003cT\u003e[]\u003e \u003d new BehaviorSubject(accumulatedResults);"},{"lineNumber":531,"author":{"gitId":"-"},"content":""},{"lineNumber":532,"author":{"gitId":"-"},"content":" async function queryWith(cursor: string): Promise\u003cvoid\u003e {"},{"lineNumber":533,"author":{"gitId":"-"},"content":" const graphqlQuery \u003d apollo.watchQuery\u003cT\u003e({ query, variables: { ...variables, cursor } });"},{"lineNumber":534,"author":{"gitId":"-"},"content":""},{"lineNumber":535,"author":{"gitId":"-"},"content":" await graphqlQuery.refetch().then(async (results: ApolloQueryResult\u003cT\u003e) \u003d\u003e {"},{"lineNumber":536,"author":{"gitId":"-"},"content":" const intermediate \u003d Array.isArray(results) ? results : [results];"},{"lineNumber":537,"author":{"gitId":"-"},"content":" const edges \u003d pluckEdges(results);"},{"lineNumber":538,"author":{"gitId":"-"},"content":" const nextCursor \u003d edges.length \u003d\u003d\u003d 0 ? null : edges[edges.length - 1].cursor;"},{"lineNumber":539,"author":{"gitId":"-"},"content":""},{"lineNumber":540,"author":{"gitId":"-"},"content":" if (shouldAccumulate) {"},{"lineNumber":541,"author":{"gitId":"-"},"content":" accumulatedResults \u003d accumulatedResults.concat(intermediate);"},{"lineNumber":542,"author":{"gitId":"-"},"content":" behaviorSubject.next(accumulatedResults);"},{"lineNumber":543,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":544,"author":{"gitId":"-"},"content":" behaviorSubject.next(intermediate);"},{"lineNumber":545,"author":{"gitId":"-"},"content":" }"},{"lineNumber":546,"author":{"gitId":"-"},"content":" if (edges.length \u003c maxResultsCount || !nextCursor) {"},{"lineNumber":547,"author":{"gitId":"-"},"content":" // No more queries to perform."},{"lineNumber":548,"author":{"gitId":"-"},"content":" behaviorSubject.complete();"},{"lineNumber":549,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":550,"author":{"gitId":"-"},"content":" }"},{"lineNumber":551,"author":{"gitId":"-"},"content":""},{"lineNumber":552,"author":{"gitId":"-"},"content":" // Use a chain of await to ensure that all recursive queries are completed before `complete` is called."},{"lineNumber":553,"author":{"gitId":"-"},"content":" await queryWith(nextCursor);"},{"lineNumber":554,"author":{"gitId":"-"},"content":" });"},{"lineNumber":555,"author":{"gitId":"-"},"content":" }"},{"lineNumber":556,"author":{"gitId":"-"},"content":""},{"lineNumber":557,"author":{"gitId":"-"},"content":" queryWith(null);"},{"lineNumber":558,"author":{"gitId":"-"},"content":""},{"lineNumber":559,"author":{"gitId":"-"},"content":" return behaviorSubject.asObservable();"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":10,"MadLamprey":2,"-":549}},{"path":"src/app/core/services/grouping/assignee-grouping-strategy.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { GithubUser } from \u0027../../models/github-user.model\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Issue } from \u0027../../models/issue.model\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { GithubService } from \u0027../github.service\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { GroupingStrategy } from \u0027./grouping-strategy.interface\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * A GroupingStrategy that groups issues/prs based on their assignees."},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"@Injectable({"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"export class AssigneeGroupingStrategy implements GroupingStrategy {"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" constructor(private githubService: GithubService) {}"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * Retrieves data for a specific assignee."},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * If it is the\"No Assignee\" group, unassigned issues are returned."},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * Otherwise, issues assigned to the specified user are returned."},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" getDataForGroup(issues: Issue[], key: GithubUser): Issue[] {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" if (key \u003d\u003d\u003d GithubUser.NO_ASSIGNEE) {"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" return this.getUnassignedData(issues);"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" return this.getDataAssignedToUser(issues, key);"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * Retrieves an Observable emitting users who can be assigned to issues,"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" * including a special \"No Assignee\" option."},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" getGroups(): Observable\u003cGithubUser[]\u003e {"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" return this.githubService.getUsersAssignable().pipe("},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" map((users) \u003d\u003e {"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" users.push(GithubUser.NO_ASSIGNEE);"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" return users;"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" })"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" );"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" * Groups other than \"No Assignee\" need to be shown on the"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" * hidden group list if empty."},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" isInHiddenList(group: GithubUser): boolean {"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" return group !\u003d\u003d GithubUser.NO_ASSIGNEE;"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" private getDataAssignedToUser(issues: Issue[], user: GithubUser): Issue[] {"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" const filteredIssues \u003d issues.filter((issue) \u003d\u003e {"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" if (this.isPullRequest(issue)) {"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" return this.isPullRequestCreatedByTarget(issue, user);"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" return this.isIssueAssignedToTarget(issue, user);"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" return filteredIssues;"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" private getUnassignedData(issues: Issue[]): Issue[] {"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" return issues.filter((issue) \u003d\u003e !this.isPullRequest(issue) \u0026\u0026 issue.assignees.length \u003d\u003d\u003d 0);"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" private isPullRequest(issue: Issue): boolean {"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" return issue.issueOrPr \u003d\u003d\u003d \u0027PullRequest\u0027;"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" private isPullRequestCreatedByTarget(issue: Issue, target: GithubUser): boolean {"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" return issue.author \u003d\u003d\u003d target.login;"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" private isIssueAssignedToTarget(issue: Issue, target: GithubUser): boolean {"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" const isAssigneesFieldDefined \u003d !!issue.assignees;"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" return isAssigneesFieldDefined \u0026\u0026 issue.assignees.includes(target.login);"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":81}},{"path":"src/app/core/services/grouping/grouping-context.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Injectable, Injector } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { BehaviorSubject, Observable } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../models/github/group.interface\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Issue } from \u0027../../models/issue.model\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { AssigneeGroupingStrategy } from \u0027./assignee-grouping-strategy.service\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { GroupingStrategy } from \u0027./grouping-strategy.interface\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { MilestoneGroupingStrategy } from \u0027./milestone-grouping-strategy.service\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"export enum GroupBy {"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" Assignee \u003d \u0027assignee\u0027,"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" Milestone \u003d \u0027milestone\u0027"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"export const DEFAULT_GROUPBY \u003d GroupBy.Assignee;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * A service responsible for managing the current grouping strategy and providing grouped data."},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"@Injectable({"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"export class GroupingContextService {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" public static readonly GROUP_BY_QUERY_PARAM_KEY \u003d \u0027groupby\u0027;"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" private currGroupBySubject: BehaviorSubject\u003cGroupBy\u003e;"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" currGroupBy: GroupBy;"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" currGroupBy$: Observable\u003cGroupBy\u003e;"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" private groupingStrategyMap: Map\u003cstring, GroupingStrategy\u003e;"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" constructor(private injector: Injector, private route: ActivatedRoute, private router: Router) {"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBy \u003d DEFAULT_GROUPBY;"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBySubject \u003d new BehaviorSubject\u003cGroupBy\u003e(this.currGroupBy);"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBy$ \u003d this.currGroupBySubject.asObservable();"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" this.groupingStrategyMap \u003d new Map\u003cstring, GroupingStrategy\u003e();"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" // Initialize the grouping strategy map with available strategies"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" this.groupingStrategyMap.set(GroupBy.Assignee, this.injector.get(AssigneeGroupingStrategy));"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" this.groupingStrategyMap.set(GroupBy.Milestone, this.injector.get(MilestoneGroupingStrategy));"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * Initializes the service from URL parameters."},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" initializeFromUrlParams() {"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" const groupByParam \u003d this.route.snapshot.queryParamMap.get(GroupingContextService.GROUP_BY_QUERY_PARAM_KEY);"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" if (groupByParam \u0026\u0026 Object.values(GroupBy).includes(groupByParam as GroupBy)) {"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" this.setCurrentGroupingType(groupByParam as GroupBy);"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" } else {"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" this.setCurrentGroupingType(DEFAULT_GROUPBY);"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" * Sets the current grouping type and updates the corresponding query parameter in the URL."},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" * @param groupBy The grouping type to set."},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" setCurrentGroupingType(groupBy: GroupBy): void {"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBy \u003d groupBy;"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBySubject.next(this.currGroupBy);"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" this.router.navigate([], {"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" relativeTo: this.route,"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" queryParams: {"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" [GroupingContextService.GROUP_BY_QUERY_PARAM_KEY]: groupBy"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" },"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027,"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" replaceUrl: true"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" * Retrieves data for a specific group."},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" * @param issues - An array of issues to be grouped."},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" * @param group - The group by which issues are to be grouped."},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" * @returns An array of issues belonging to the specified group."},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" getDataForGroup(issues: Issue[], group: Group): Issue[] {"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" const strategy \u003d this.groupingStrategyMap.get(this.currGroupBy);"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" return strategy.getDataForGroup(issues, group);"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" * Retrieves all groups available for current grouping strategy."},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" * @returns An Observable emitting an array of groups."},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" getGroups(): Observable\u003cGroup[]\u003e {"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" const strategy \u003d this.groupingStrategyMap.get(this.currGroupBy);"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" return strategy.getGroups();"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" * Determines whether a group should be shown on hidden list if it contains no issues."},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" * @param group - The group to check."},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" * @returns A boolean indicating whether the group should be shown on hidden list if empty."},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" isInHiddenList(group: Group): boolean {"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" const strategy \u003d this.groupingStrategyMap.get(this.currGroupBy);"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" return strategy.isInHiddenList(group);"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" * Resets the current grouping type to the default."},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" reset(): void {"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" this.setCurrentGroupingType(DEFAULT_GROUPBY);"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":110}},{"path":"src/app/core/services/grouping/grouping-strategy.interface.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../models/github/group.interface\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { Issue } from \u0027../../models/issue.model\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" * Represent a strategy for grouping issues/prs."},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * This interface follows the Strategy Pattern, allowing for different"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * strategies to be implemented for grouping issues/prs based on different criteria."},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"export interface GroupingStrategy {"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" * Retrieves data for a specific group."},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * @param issues - An array of issues to be grouped."},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * @param key - The group by which issues are to be grouped."},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * @returns An array of issues belonging to the specified group."},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" getDataForGroup(issues: Issue[], key: Group): Issue[];"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * Retrieves observable emitting groups available for the grouping strategy."},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * @returns An Observable emitting an array of groups."},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" getGroups(): Observable\u003cGroup[]\u003e;"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Determines whether a group should be shown on hidden list if it contains no issues."},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param group - The group to check."},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @returns A boolean indicating whether the group should be shown on hidden list if empty."},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" isInHiddenList(group: Group): boolean;"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":31}},{"path":"src/app/core/services/grouping/milestone-grouping-strategy.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { Issue } from \u0027../../models/issue.model\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Milestone } from \u0027../../models/milestone.model\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { MilestoneService } from \u0027../milestone.service\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { GroupingStrategy } from \u0027./grouping-strategy.interface\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * A GroupingStrategy that groups issues/prs based on their milestones."},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"@Injectable({"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"export class MilestoneGroupingStrategy implements GroupingStrategy {"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" constructor(private milestoneService: MilestoneService) {}"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * Retrieves data for a milestone."},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" getDataForGroup(issues: Issue[], key: Milestone): Issue[] {"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" return issues.filter((issue) \u003d\u003e issue.milestone.equals(key));"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Retrieves an Observable emitting milestones available for grouping issues."},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" getGroups(): Observable\u003cMilestone[]\u003e {"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" return this.milestoneService.fetchMilestones().pipe("},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" map((milestones) \u003d\u003e {"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" const parseMilestone \u003d this.milestoneService.parseMilestoneData(milestones);"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" parseMilestone.push(Milestone.IssueWithoutMilestone);"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" parseMilestone.push(Milestone.PRWithoutMilestone);"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" return parseMilestone;"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" })"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" );"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * Groups other than Default Milestone need to be shown on the"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" * hidden group list if empty."},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" isInHiddenList(group: Milestone): boolean {"},{"lineNumber":44,"author":{"gitId":"MadLamprey"},"content":" return group !\u003d\u003d Milestone.IssueWithoutMilestone \u0026\u0026 group !\u003d\u003d Milestone.PRWithoutMilestone;"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":45,"MadLamprey":1}},{"path":"src/app/core/services/issue.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { BehaviorSubject, Observable, of, Subscription, throwError, timer } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { catchError, exhaustMap, finalize, map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import RestGithubIssueFilter from \u0027../models/github/github-issue-filter.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubIssue } from \u0027../models/github/github-issue.model\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Issue, Issues, IssuesFilter } from \u0027../models/issue.model\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../models/view.model\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { UserService } from \u0027./user.service\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027./view.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":13,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":14,"author":{"gitId":"-"},"content":"})"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Responsible for creating and updating issues, and periodically fetching issues"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * using GitHub."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"export class IssueService {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" static readonly POLL_INTERVAL \u003d 5000; // 5 seconds"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" issues: Issues;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" issues$: BehaviorSubject\u003cIssue[]\u003e;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" private sessionId: string;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private issueTeamFilter \u003d \u0027All Teams\u0027;"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private issuesPollSubscription: Subscription;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" /** Whether the IssueService is downloading the data from Github*/"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public isLoading \u003d new BehaviorSubject\u003cboolean\u003e(false);"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" constructor(private githubService: GithubService, private userService: UserService, private viewService: ViewService) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" this.issues$ \u003d new BehaviorSubject(new Array\u003cIssue\u003e());"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" startPollIssues() {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" if (this.issuesPollSubscription \u003d\u003d\u003d undefined) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" if (this.issues$.getValue().length \u003d\u003d\u003d 0) {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.isLoading.next(true);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" this.issuesPollSubscription \u003d timer(0, IssueService.POLL_INTERVAL)"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":44,"author":{"gitId":"-"},"content":" exhaustMap(() \u003d\u003e {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return this.reloadAllIssues().pipe("},{"lineNumber":46,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(err)),"},{"lineNumber":47,"author":{"gitId":"-"},"content":" finalize(() \u003d\u003e this.isLoading.next(false))"},{"lineNumber":48,"author":{"gitId":"-"},"content":" );"},{"lineNumber":49,"author":{"gitId":"-"},"content":" })"},{"lineNumber":50,"author":{"gitId":"-"},"content":" )"},{"lineNumber":51,"author":{"gitId":"-"},"content":" .subscribe();"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" stopPollIssues() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" if (this.issuesPollSubscription) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" this.issuesPollSubscription.unsubscribe();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" this.issuesPollSubscription \u003d undefined;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" reloadAllIssues() {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return this.initializeData();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" getIssue(id: number): Observable\u003cIssue\u003e {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (this.issues \u003d\u003d\u003d undefined) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" return this.getLatestIssue(id);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return of(this.issues[id]);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" getLatestIssue(id: number): Observable\u003cIssue\u003e {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return this.githubService.fetchIssueGraphql(id).pipe("},{"lineNumber":76,"author":{"gitId":"-"},"content":" map((response: GithubIssue) \u003d\u003e {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" this.createAndSaveIssueModels([response]);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return this.issues[id];"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":80,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return of(this.issues[id]);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" })"},{"lineNumber":83,"author":{"gitId":"-"},"content":" );"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * This function will update the issue\u0027s state of the application. This function needs to be called whenever a issue is added/updated."},{"lineNumber":88,"author":{"gitId":"-"},"content":" *"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * @params issuesToUpdate - An array of issues to update the state of the application with."},{"lineNumber":90,"author":{"gitId":"-"},"content":" */"},{"lineNumber":91,"author":{"gitId":"-"},"content":" private updateLocalStore(issuesToUpdate: Issue[]) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" const newIssues \u003d { ...this.issues };"},{"lineNumber":93,"author":{"gitId":"-"},"content":" issuesToUpdate.forEach((issue) \u003d\u003e {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" newIssues[issue.id] \u003d issue;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" });"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.issues \u003d newIssues;"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" this.issues$.next(Object.values(this.issues));"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" reset(resetSessionId: boolean) {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" if (resetSessionId) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" this.sessionId \u003d undefined;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" this.issues \u003d undefined;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" this.issues$.next(new Array\u003cIssue\u003e());"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" this.stopPollIssues();"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" private initializeData(): Observable\u003cIssue[]\u003e {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" let issuesAPICallsByFilter: Observable\u003cArray\u003cGithubIssue\u003e\u003e;"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" switch (IssuesFilter[this.viewService.currentView][this.userService.currentUser.role]) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" case \u0027FILTER_BY_CREATOR\u0027:"},{"lineNumber":117,"author":{"gitId":"-"},"content":" issuesAPICallsByFilter \u003d this.githubService.fetchIssuesGraphql("},{"lineNumber":118,"author":{"gitId":"-"},"content":" new RestGithubIssueFilter({ creator: this.userService.currentUser.loginId })"},{"lineNumber":119,"author":{"gitId":"-"},"content":" );"},{"lineNumber":120,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" case \u0027NO_FILTER\u0027:"},{"lineNumber":122,"author":{"gitId":"-"},"content":" issuesAPICallsByFilter \u003d this.githubService.fetchIssuesGraphql(new RestGithubIssueFilter({}));"},{"lineNumber":123,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" case \u0027NO_ACCESS\u0027:"},{"lineNumber":125,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return of([]);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" const fetchedIssueIds: number[] \u003d [];"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" return issuesAPICallsByFilter.pipe("},{"lineNumber":132,"author":{"gitId":"-"},"content":" map((githubIssues: GithubIssue[]) \u003d\u003e {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" const issues \u003d this.createAndSaveIssueModels(githubIssues);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" for (const issue of issues) {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" fetchedIssueIds.push(issue.id);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" const outdatedIssueIds: number[] \u003d this.getOutdatedIssueIds(fetchedIssueIds);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" this.deleteIssuesFromLocalStore(outdatedIssueIds);"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" if (this.issues \u003d\u003d\u003d undefined) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" return [];"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":" return Object.values(this.issues);"},{"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":" private createAndSaveIssueModels(githubIssues: GithubIssue[]): Issue[] {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" const issues: Issue[] \u003d [];"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" for (const githubIssue of githubIssues) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" const issue \u003d this.createIssueModel(githubIssue);"},{"lineNumber":154,"author":{"gitId":"-"},"content":" issues.push(issue);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":" this.updateLocalStore(issues);"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" return issues;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":" private deleteIssuesFromLocalStore(ids: number[]): void {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" const withoutIssuesToRemove \u003d { ...this.issues };"},{"lineNumber":163,"author":{"gitId":"-"},"content":" for (const id of ids) {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" delete withoutIssuesToRemove[id];"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" this.issues \u003d withoutIssuesToRemove;"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" this.issues$.next(Object.values(this.issues));"},{"lineNumber":170,"author":{"gitId":"-"},"content":" }"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":173,"author":{"gitId":"-"},"content":" * Returns an array of outdated issue ids by comparing the ids of the recently"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * fetched issues with the current issue ids in the local store"},{"lineNumber":175,"author":{"gitId":"-"},"content":" */"},{"lineNumber":176,"author":{"gitId":"-"},"content":" private getOutdatedIssueIds(fetchedIssueIds: number[]): number[] {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":178,"author":{"gitId":"-"},"content":" Ignore for first fetch or ignore if there is no fetch result"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" We also have to ignore for no fetch result as the cache might return a"},{"lineNumber":181,"author":{"gitId":"-"},"content":" 304 reponse with no differences in issues, resulting in the fetchIssueIds"},{"lineNumber":182,"author":{"gitId":"-"},"content":" to be empty"},{"lineNumber":183,"author":{"gitId":"-"},"content":" */"},{"lineNumber":184,"author":{"gitId":"-"},"content":" if (this.issues \u003d\u003d\u003d undefined || !fetchedIssueIds.length) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" return [];"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"-"},"content":" const fetchedIssueIdsSet \u003d new Set\u003cnumber\u003e(fetchedIssueIds);"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" const result \u003d Object.keys(this.issues)"},{"lineNumber":191,"author":{"gitId":"-"},"content":" .map((x) \u003d\u003e +x)"},{"lineNumber":192,"author":{"gitId":"-"},"content":" .filter((issueId) \u003d\u003e !fetchedIssueIdsSet.has(issueId));"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" return result;"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" private createIssueModel(githubIssue: GithubIssue): Issue {"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" switch (this.viewService.currentView) {"},{"lineNumber":199,"author":{"gitId":"NereusWB922"},"content":" case View.issuesViewer:"},{"lineNumber":200,"author":{"gitId":"-"},"content":" return Issue.createPhaseBugReportingIssue(githubIssue);"},{"lineNumber":201,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":202,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" setIssueTeamFilter(filterValue: string) {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" if (filterValue) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" this.issueTeamFilter \u003d filterValue;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" setSessionId(sessionId: string) {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" this.sessionId \u003d sessionId;"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":" getIssueTeamFilter(): string {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" return this.issueTeamFilter;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":6,"-":213}},{"path":"src/app/core/services/label.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":"import { BehaviorSubject, EMPTY, Observable, of, Subject, Subscription, timer } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { catchError, exhaustMap, finalize, map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Label, SimpleLabel } from \u0027../models/label.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"/* The threshold to decide if color is dark or light."},{"lineNumber":8,"author":{"gitId":"-"},"content":"A higher threshold value will result in more colors determined to be \"dark\"."},{"lineNumber":9,"author":{"gitId":"-"},"content":"W3C recommendation is 0.179, but 0.184 is chosen so that some colors (like bright red)"},{"lineNumber":10,"author":{"gitId":"-"},"content":"are considered dark (Github too consider them dark) */"},{"lineNumber":11,"author":{"gitId":"-"},"content":"const COLOR_DARKNESS_THRESHOLD \u003d 0.184;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"const COLOR_BLACK \u003d \u0027000000\u0027; // Dark color for text with light background"},{"lineNumber":14,"author":{"gitId":"-"},"content":"const COLOR_WHITE \u003d \u0027ffffff\u0027; // Light color for text with dark background"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":17,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":18,"author":{"gitId":"-"},"content":"})"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Responsible for retrieval and parsing of label data"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * from the GitHub repository for the WATcher application."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":"export class LabelService {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" static readonly POLL_INTERVAL \u003d 5000; // 5 seconds"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" labels: Label[];"},{"lineNumber":28,"author":{"gitId":"-"},"content":" simpleLabels: SimpleLabel[];"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private labelsPollSubscription: Subscription;"},{"lineNumber":31,"author":{"gitId":"Arif-Khalid"},"content":" private labelsSubject \u003d new Subject\u003cSimpleLabel[]\u003e();"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" constructor(private githubService: GithubService) {}"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" startPollLabels() {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" if (this.labelsPollSubscription) {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.labelsPollSubscription \u003d timer(0, LabelService.POLL_INTERVAL)"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":41,"author":{"gitId":"-"},"content":" exhaustMap(() \u003d\u003e {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return this.fetchLabels().pipe("},{"lineNumber":43,"author":{"gitId":"-"},"content":" catchError(() \u003d\u003e {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return EMPTY;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" })"},{"lineNumber":46,"author":{"gitId":"-"},"content":" );"},{"lineNumber":47,"author":{"gitId":"-"},"content":" })"},{"lineNumber":48,"author":{"gitId":"-"},"content":" )"},{"lineNumber":49,"author":{"gitId":"-"},"content":" .subscribe(() \u003d\u003e {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" this.labelsSubject.next(this.simpleLabels);"},{"lineNumber":51,"author":{"gitId":"-"},"content":" });"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" stopPollLabels() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" if (this.labelsPollSubscription) {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" this.labelsPollSubscription.unsubscribe();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" this.labelsPollSubscription \u003d undefined;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" connect(): Observable\u003cSimpleLabel[]\u003e {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" return this.labelsSubject.asObservable();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * Fetch labels from Github."},{"lineNumber":67,"author":{"gitId":"-"},"content":" */"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public fetchLabels(): Observable\u003cany\u003e {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return this.githubService.fetchAllLabels().pipe("},{"lineNumber":70,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" this.labels \u003d this.parseLabelData(response);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" this.simpleLabels \u003d this.labels;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" this.labelsSubject.next(this.simpleLabels);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" return response;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" })"},{"lineNumber":76,"author":{"gitId":"-"},"content":" );"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * Parses label information and returns an array of Label objects."},{"lineNumber":81,"author":{"gitId":"-"},"content":" * @param labels - Label Information from API."},{"lineNumber":82,"author":{"gitId":"-"},"content":" */"},{"lineNumber":83,"author":{"gitId":"-"},"content":" parseLabelData(labels: Array\u003cany\u003e): Label[] {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" const labelData: Label[] \u003d [];"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" for (const label of labels) {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" labelData.push(new Label(label));"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" return labelData;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Returns true if the given color is considered \"dark\""},{"lineNumber":94,"author":{"gitId":"-"},"content":" * The color is considered \"dark\" if its luminance is less than COLOR_DARKNESS_THRESHOLD"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * @param inputColor: the color"},{"lineNumber":96,"author":{"gitId":"-"},"content":" */"},{"lineNumber":97,"author":{"gitId":"-"},"content":" isDarkColor(inputColor: string): boolean {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" const COLOR \u003d inputColor.charAt(0) \u003d\u003d\u003d \u0027#\u0027 ? inputColor.substring(1, 7) : inputColor;"},{"lineNumber":99,"author":{"gitId":"-"},"content":" const R \u003d parseInt(COLOR.substring(0, 2), 16);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" const G \u003d parseInt(COLOR.substring(2, 4), 16);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" const B \u003d parseInt(COLOR.substring(4, 6), 16);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" const RGB \u003d [R / 255, G / 255, B / 255];"},{"lineNumber":103,"author":{"gitId":"-"},"content":" const LINEAR_RGB \u003d RGB.map((col) \u003d\u003e {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (col \u003c\u003d 0.03928) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return col / 12.92;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":" return Math.pow((col + 0.055) / 1.055, 2.4);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" });"},{"lineNumber":109,"author":{"gitId":"-"},"content":" // Calculate the luminance of the color"},{"lineNumber":110,"author":{"gitId":"-"},"content":" const LUMINANCE \u003d 0.2126 * LINEAR_RGB[0] + 0.7152 * LINEAR_RGB[1] + 0.0722 * LINEAR_RGB[2];"},{"lineNumber":111,"author":{"gitId":"-"},"content":" // The color is \"dark\" if the luminance is lower than the threshold"},{"lineNumber":112,"author":{"gitId":"-"},"content":" return LUMINANCE \u003c COLOR_DARKNESS_THRESHOLD;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Returns a css style for the background and text color of the label"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * @param color: the color of the label"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * @return the style with background-color in rgb"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * @throws exception if input is an invalid color code"},{"lineNumber":120,"author":{"gitId":"-"},"content":" */"},{"lineNumber":121,"author":{"gitId":"-"},"content":" setLabelStyle(color: string) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" let textColor: string;"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" textColor \u003d this.isDarkColor(color) ? COLOR_WHITE : COLOR_BLACK;"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" const styles \u003d {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u0027background-color\u0027: `#${color}`,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" color: `#${textColor}`"},{"lineNumber":129,"author":{"gitId":"-"},"content":" };"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" return styles;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" reset() {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" this.labels \u003d undefined;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" this.simpleLabels \u003d undefined;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" this.stopPollLabels();"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":2,"-":137}},{"path":"src/app/core/services/milestone.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Milestone } from \u0027../models/milestone.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":8,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":9,"author":{"gitId":"-"},"content":"})"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * Responsible for retrieval and parsing and syncing of milestone data"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * from the GitHub repository for the WATcher application."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"-"},"content":"export class MilestoneService {"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" milestones: Milestone[] \u003d [];"},{"lineNumber":17,"author":{"gitId":"-"},"content":" hasNoMilestones: boolean;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" constructor(private githubService: GithubService) {}"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Fetch all milestones from github."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public fetchMilestones(): Observable\u003cany\u003e {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return this.githubService.fetchAllMilestones().pipe("},{"lineNumber":26,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.milestones \u003d this.parseMilestoneData(response);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.hasNoMilestones \u003d response.length \u003d\u003d\u003d 0;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" return response;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" })"},{"lineNumber":31,"author":{"gitId":"-"},"content":" );"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Parses milestone information and returns an array of Milestone objects."},{"lineNumber":36,"author":{"gitId":"-"},"content":" * @param milestones - Milestone Information from API."},{"lineNumber":37,"author":{"gitId":"-"},"content":" */"},{"lineNumber":38,"author":{"gitId":"-"},"content":" parseMilestoneData(milestones: Array\u003cany\u003e): Milestone[] {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" const milestoneData: Milestone[] \u003d [];"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" for (const milestone of milestones) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" milestoneData.push(new Milestone(milestone));"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":" milestoneData.sort((a: Milestone, b: Milestone) \u003d\u003e a.title.localeCompare(b.title));"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" return milestoneData;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" * Gets the open milestone with the earliest deadline."},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * Returns null if there is no open milestone with deadline."},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" getEarliestOpenMilestone(): Milestone {"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" let earliestOpenMilestone: Milestone \u003d null;"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" for (const milestone of this.milestones) {"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" if (!milestone.deadline || milestone.state !\u003d\u003d \u0027open\u0027) {"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" continue;"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" if (earliestOpenMilestone \u003d\u003d\u003d null) {"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" earliestOpenMilestone \u003d milestone;"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" } else if (milestone.deadline \u003c earliestOpenMilestone.deadline) {"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" earliestOpenMilestone \u003d milestone;"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" return earliestOpenMilestone;"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" * Gets the closed milestone with the latest deadline."},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" * Returns null if there is no closed milestone with deadline."},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" getLatestClosedMilestone(): Milestone {"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" let latestClosedMilestone: Milestone \u003d null;"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" for (const milestone of this.milestones) {"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" if (!milestone.deadline || milestone.state !\u003d\u003d \u0027closed\u0027) {"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" continue;"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" if (latestClosedMilestone \u003d\u003d\u003d null) {"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" latestClosedMilestone \u003d milestone;"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" } else if (milestone.deadline \u003e latestClosedMilestone.deadline) {"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" latestClosedMilestone \u003d milestone;"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" return latestClosedMilestone;"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":39,"-":47}},{"path":"src/app/core/services/view.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import { BehaviorSubject, Observable, of, Subject } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { STORAGE_KEYS } from \u0027../constants/storage-keys.constants\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Repo } from \u0027../models/repo.model\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { SessionData } from \u0027../models/session.model\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../models/view.model\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027./error-message.service\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027./logging.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { RepoUrlCacheService } from \u0027./repo-url-cache.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"export const SESSION_AVALIABILITY_FIX_FAILED \u003d \u0027Session Availability Fix failed.\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" * The title of each view that appears in the header bar."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"export const ViewDescription \u003d {"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" [View.issuesViewer]: \u0027Issues Dashboard\u0027,"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" [View.activityDashboard]: \u0027Activity Dashboard\u0027"},{"lineNumber":22,"author":{"gitId":"-"},"content":"};"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * All data of the session."},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Add accessible views here."},{"lineNumber":27,"author":{"gitId":"-"},"content":" */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"export const STARTING_SESSION_DATA: SessionData \u003d {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" sessionRepo: ["},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" { view: View.issuesViewer, repos: [] }"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" // { view: View.activityDashboard, repos: [] }"},{"lineNumber":32,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":33,"author":{"gitId":"-"},"content":"};"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"export const STARTING_VIEW \u003d View.issuesViewer;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":38,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":39,"author":{"gitId":"-"},"content":"})"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Responsible for managing the current selected feature of WATcher as well as the"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * current session data and repository details related to the session."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":"export class ViewService {"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" public static readonly REPO_QUERY_PARAM_KEY \u003d \u0027repo\u0027;"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" public currentView: View \u003d STARTING_VIEW;"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" public currentRepo: Repo; // current or main repository of current view"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" public otherRepos: Repo[]; // more repositories relevant to this view"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" repoSetSource \u003d new BehaviorSubject(false);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" repoSetState \u003d this.repoSetSource.asObservable();"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Expose an observable to track changes to currentRepo"},{"lineNumber":57,"author":{"gitId":"-"},"content":" *"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * TODO - replace all references to currentRepo to have"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * dependencies subscribe to this observable?"},{"lineNumber":60,"author":{"gitId":"-"},"content":" */"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public repoChanged$: Subject\u003cRepo | null\u003e \u003d new Subject();"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" /** Whether the ViewService is changing the repository */"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public isChangingRepo \u003d new BehaviorSubject\u003cboolean\u003e(false);"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" public sessionData \u003d STARTING_SESSION_DATA; // stores session data for the session"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" constructor("},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" private githubService: GithubService,"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" private repoUrlCacheService: RepoUrlCacheService,"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" public logger: LoggingService,"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" private route: ActivatedRoute,"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" private router: Router"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" ) {}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * Sets the current main repository and additional repos if any."},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" * Updates session data in View Service and local storage."},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Updates Github Service with current repository."},{"lineNumber":80,"author":{"gitId":"-"},"content":" * @param repo Main current repository"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * @param repos Additional repositories"},{"lineNumber":82,"author":{"gitId":"-"},"content":" */"},{"lineNumber":83,"author":{"gitId":"-"},"content":" setRepository(repo: Repo, repos?: Repo[]): void {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" this.currentRepo \u003d repo;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.otherRepos \u003d repos ? repos : [];"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" this.sessionData.sessionRepo.find((x) \u003d\u003e x.view \u003d\u003d\u003d this.currentView).repos \u003d this.getRepository();"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" this.githubService.storeViewDetails(this.currentRepo.owner, this.currentRepo.name);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" localStorage.setItem(\u0027sessionData\u0027, JSON.stringify(this.sessionData));"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" this.router.navigate([\u0027issuesViewer\u0027], {"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" queryParams: {"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" [ViewService.REPO_QUERY_PARAM_KEY]: repo.toString()"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" },"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Changes current respository to a new repository."},{"lineNumber":99,"author":{"gitId":"-"},"content":" * @param repo New current repository"},{"lineNumber":100,"author":{"gitId":"-"},"content":" */"},{"lineNumber":101,"author":{"gitId":"-"},"content":" private changeCurrentRepository(repo: Repo): void {"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" this.logger.info(`ViewService: Changing current repository to \u0027${repo}\u0027`);"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" if (this.currentView \u003d\u003d\u003d View.issuesViewer) {"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" /** Adds past repositories to view */"},{"lineNumber":106,"author":{"gitId":"-"},"content":" (this.otherRepos || []).push(this.currentRepo);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":" this.setRepository(repo, this.otherRepos);"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" this.repoUrlCacheService.cache(repo.toString());"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" this.repoChanged$.next(repo);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Change repository if a valid repository is provided"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * @param repo New repository"},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" async changeRepositoryIfValid(repo: Repo) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" this.isChangingRepo.next(true);"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" const isValidRepository \u003d await this.githubService.isRepositoryPresent(repo.owner, repo.name).toPromise();"},{"lineNumber":123,"author":{"gitId":"-"},"content":" if (!isValidRepository) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" this.isChangingRepo.next(false);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.repositoryNotPresentMessage());"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" this.changeCurrentRepository(repo);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" this.isChangingRepo.next(false);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Returns the full repository array of the current feature."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" getRepository(): Repo[] {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" return [this.currentRepo].concat(this.otherRepos);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":140,"author":{"gitId":"-"},"content":" * Retrieves the repository url from local storage and sets to current repository."},{"lineNumber":141,"author":{"gitId":"-"},"content":" */"},{"lineNumber":142,"author":{"gitId":"-"},"content":" async initializeCurrentRepository() {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" const org \u003d window.localStorage.getItem(STORAGE_KEYS.ORG);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" const repoName \u003d window.localStorage.getItem(STORAGE_KEYS.DATA_REPO);"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":" this.logger.info(`ViewService: received initial org (${org}) and initial name (${repoName})`);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" let repo: Repo;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" if (!org || !repoName) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" repo \u003d Repo.ofEmptyRepo();"},{"lineNumber":149,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" repo \u003d new Repo(org, repoName);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":" const isValidRepository \u003d await this.githubService.isRepositoryPresent(repo.owner, repo.name).toPromise();"},{"lineNumber":153,"author":{"gitId":"-"},"content":" if (!isValidRepository) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.repositoryNotPresentMessage());"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" this.logger.info(`ViewService: Repo is ${repo}`);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.setRepository(repo);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" this.repoSetSource.next(true);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" * Set items in the local storage corresponding to the next URL."},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" * This includes checking if the view is valid, and if the repo is of the correct format."},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" * @param url The partial URL without the host, e.g. `/issuesViewer?repo\u003dCATcher%2FWATcher."},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" setupFromUrl(url: string): Observable\u003cvoid\u003e {"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" return of(this.getViewAndRepoFromUrl(url)).pipe("},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":" map(([viewName, repoName]) \u003d\u003e {"},{"lineNumber":169,"author":{"gitId":"NereusWB922"},"content":" if (!this.isViewAllowed(viewName)) {"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" throw new Error(ErrorMessageService.invalidUrlMessage());"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" if (repoName \u003d\u003d\u003d null) {"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" throw new Error(ErrorMessageService.invalidUrlMessage());"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" const newRepo \u003d Repo.of(repoName);"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" if (newRepo) {"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" window.localStorage.setItem(STORAGE_KEYS.ORG, newRepo.owner);"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" window.localStorage.setItem(STORAGE_KEYS.DATA_REPO, newRepo.name);"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" this.repoUrlCacheService.cache(newRepo.toString());"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" );"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":187,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":188,"author":{"gitId":"NereusWB922"},"content":" * Initializes a repo based on the URL parameters and changes the repo if valid."},{"lineNumber":189,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":190,"author":{"gitId":"NereusWB922"},"content":" initializeRepoFromUrlParams(): void {"},{"lineNumber":191,"author":{"gitId":"NereusWB922"},"content":" const repoParams \u003d this.route.snapshot.queryParamMap.get(ViewService.REPO_QUERY_PARAM_KEY);"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":193,"author":{"gitId":"NereusWB922"},"content":" const newRepo \u003d Repo.of(repoParams);"},{"lineNumber":194,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":" this.changeRepositoryIfValid(newRepo);"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" getViewAndRepoFromUrl(url: string): [string, string] {"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" const urlObject \u003d new URL(`${location.protocol}//${location.host}${url}`);"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":" const pathname \u003d urlObject.pathname;"},{"lineNumber":201,"author":{"gitId":"NereusWB922"},"content":" const reponame \u003d urlObject.searchParams.get(ViewService.REPO_QUERY_PARAM_KEY);"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" return [pathname, reponame];"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":205,"author":{"gitId":"NereusWB922"},"content":" isViewAllowed(viewName: string) {"},{"lineNumber":206,"author":{"gitId":"NereusWB922"},"content":" return viewName \u003d\u003d\u003d \u0027/\u0027 + View.issuesViewer;"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":" isRepoSet(): boolean {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" return this.repoSetSource.getValue();"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":214,"author":{"gitId":"NereusWB922"},"content":" * Changes view and updates View Service\u0027s properties."},{"lineNumber":215,"author":{"gitId":"NereusWB922"},"content":" * @param view New view"},{"lineNumber":216,"author":{"gitId":"-"},"content":" */"},{"lineNumber":217,"author":{"gitId":"NereusWB922"},"content":" changeView(view: View) {"},{"lineNumber":218,"author":{"gitId":"NereusWB922"},"content":" this.currentView \u003d view;"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" // For now, assumes repository stays the same"},{"lineNumber":221,"author":{"gitId":"NereusWB922"},"content":" this.githubService.storeViewDetails(this.currentRepo.owner, this.currentRepo.name);"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":" public getCurrentRepositoryURL() {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" return this.currentRepo.owner.concat(\u0027/\u0027).concat(this.currentRepo.name);"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":" reset() {"},{"lineNumber":229,"author":{"gitId":"NereusWB922"},"content":" this.currentView \u003d STARTING_VIEW;"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":42,"NereusWB922":52,"-":137}},{"path":"src/app/issues-viewer/card-view/card-view.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".card-column {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" margin: 8px;"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":" height: 77vh;"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":" display: flex;"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":" flex-direction: column;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".card {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" margin: 8px 0px 8px 0px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".mat-card-title {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":14,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":15,"author":{"gitId":"-"},"content":" font-size: 12px;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" overflow: auto;"},{"lineNumber":18,"author":{"gitId":"-"},"content":" word-break: break-word;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":".column-header .mat-card-title {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" font-size: 14px;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"}"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":".mat-card {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" padding: 10px;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"}"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":":host ::ng-deep div.mat-card-header-text {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" margin: 2px;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"div.column-header .mat-card-title {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" margin: 0;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"div.column-header {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" z-index: 5;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"div.column-header .mat-card-header {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":".scrollable-container {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" margin-bottom: 2px;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":"/* Ref: https://css-scroll-shadows.vercel.app */"},{"lineNumber":56,"author":{"gitId":"-"},"content":".scrollable-container::before {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" z-index: 2;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" height: 6px;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" background-image: linear-gradient(to bottom, white 66%, transparent);"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":".scrollable-container::after {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" z-index: 2;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" top: 100%;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" height: 6px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" background-image: linear-gradient(to top, white 66%, transparent);"},{"lineNumber":77,"author":{"gitId":"-"},"content":"}"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":".scrollable-container-wrapper {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" scrollbar-width: none;"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" overflow: auto;"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" flex-grow: 1;"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container-wrapper::-webkit-scrollbar {"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" display: none;"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":".scrollable-container-wrapper::before {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":92,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":94,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":97,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" height: 5px;"},{"lineNumber":99,"author":{"gitId":"-"},"content":" background-image: radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.5), transparent);"},{"lineNumber":100,"author":{"gitId":"-"},"content":"}"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":".scrollable-container-wrapper::after {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" bottom: 0;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" height: 5px;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" background-image: radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.5), transparent);"},{"lineNumber":112,"author":{"gitId":"-"},"content":"}"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":".loading-spinner {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":118,"author":{"gitId":"-"},"content":"}"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":".mat-card-subtitle {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":122,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" font-size: 11px;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" text-align: left;"},{"lineNumber":125,"author":{"gitId":"-"},"content":" overflow: auto;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" margin: 6px 0;"},{"lineNumber":127,"author":{"gitId":"-"},"content":"}"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":".row-count {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" background-color: rgb(222, 222, 222);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" border-radius: 3px;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" cursor: default;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" padding: 6px;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" color: rgb(0, 0, 0);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" font-weight: 410;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" display: inline-flex;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" font-size: 14px;"},{"lineNumber":138,"author":{"gitId":"-"},"content":"}"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":":host ::ng-deep .pagination-hide-arrow .mat-paginator-navigation-previous {"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" display: none !important;"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":":host ::ng-deep .pagination-hide-arrow .mat-paginator-navigation-next {"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" display: none !important;"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":":host ::ng-deep .pagination-hide-arrow .mat-paginator-range-actions {"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" display: none !important;"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":"}"}],"authorContributionMap":{"nknguyenhc":22,"-":128}},{"path":"src/app/issues-viewer/card-view/card-view.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"card-column\"\u003e"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" \u003cng-container"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" [ngTemplateOutlet]\u003d\"getHeaderTemplate() || defaultHeader\""},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" [ngTemplateOutletContext]\u003d\"{ $implicit: this.group }\""},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" \u003e\u003c/ng-container\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"scrollable-container-wrapper\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"scrollable-container\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"issue-pr-cards\" *ngFor\u003d\"let issue of this.issues$ | async; index as i\"\u003e"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":" \u003capp-issue-pr-card [issue]\u003d\"issue\" [filter]\u003d\"issues.filter\" [milestoneService]\u003d\"milestoneService\"\u003e\u003c/app-issue-pr-card\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cmat-card class\u003d\"loading-spinner\" *ngIf\u003d\"this.issues.isLoading$ | async\"\u003e"},{"lineNumber":12,"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":13,"author":{"gitId":"-"},"content":" \u003c/mat-card\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-paginator"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" [pageSize]\u003d\"pageSize\""},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" [pageSizeOptions]\u003d\"[10, 20, 50]\""},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" [class]\u003d\"pageSize \u003e\u003d issueLength ? \u0027pagination-hide-arrow\u0027 : \u0027\u0027\""},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" (page)\u003d\"updatePageSize($event.pageSize)\""},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" \u003e\u003c/mat-paginator\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"\u003c!-- Template --\u003e"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #defaultHeader\u003e"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card class\u003d\"loading-spinner\"\u003e"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-progress-spinner color\u003d\"primary\" mode\u003d\"indeterminate\" diameter\u003d\"50\" strokeWidth\u003d\"5\"\u003e\u003c/mat-progress-spinner\u003e"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #assigneeHeader let-assignee\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"column-header\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cmat-card\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cmat-card-header [ngStyle]\u003d\"{ height: \u002740px\u0027 }\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":36,"author":{"gitId":"-"},"content":" mat-card-avatar"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" *ngIf\u003d\"assignee\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" [ngStyle]\u003d\"{"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" background: \u0027url(\u0027 + assignee.avatar_url + \u0027)\u0027,"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u0027background-size\u0027: \u002740px\u0027"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }\""},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003cmat-card-title\u003e"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" {{ assignee.login }}"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/mat-card-title\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row-count\"\u003e{{ this.issues.count }}\u003c/div\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003c/mat-card-header\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/mat-card\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #milestoneHeader let-milestone\u003e"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"column-header\"\u003e"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card\u003e"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-header [ngStyle]\u003d\"{ height: \u002740px\u0027 }\"\u003e"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-title\u003e"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" {{ milestone.title }}"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card-title\u003e"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"row-count\"\u003e{{ this.issues.count }}\u003c/div\u003e"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card-header\u003e"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"}],"authorContributionMap":{"nknguyenhc":6,"NereusWB922":28,"MadLamprey":1,"-":28}},{"path":"src/app/issues-viewer/card-view/card-view.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" AfterViewInit,"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" Component,"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" ElementRef,"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" EventEmitter,"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" Input,"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" OnDestroy,"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" OnInit,"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" Output,"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" TemplateRef,"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" ViewChild"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"} from \u0027@angular/core\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { MatPaginator } from \u0027@angular/material/paginator\u0027;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import { Observable, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../core/models/github/group.interface\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"import { FiltersService } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"import { GroupBy, GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../../core/services/issue.service\u0027;"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"import { MilestoneService } from \u0027../../core/services/milestone.service\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import { FilterableComponent, FilterableSource } from \u0027../../shared/issue-tables/filterableTypes\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import { IssuesDataTable } from \u0027../../shared/issue-tables/IssuesDataTable\u0027;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":25,"author":{"gitId":"-"},"content":" selector: \u0027app-card-view\u0027,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" templateUrl: \u0027./card-view.component.html\u0027,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./card-view.component.css\u0027]"},{"lineNumber":28,"author":{"gitId":"-"},"content":"})"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Displays issues as Cards."},{"lineNumber":32,"author":{"gitId":"-"},"content":" */"},{"lineNumber":33,"author":{"gitId":"-"},"content":"export class CardViewComponent implements OnInit, AfterViewInit, OnDestroy, FilterableComponent {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" @Input() headers: string[];"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" @Input() group?: Group \u003d undefined;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Input() filters?: any \u003d undefined;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027defaultHeader\u0027) defaultHeaderTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027assigneeHeader\u0027) assigneeHeaderTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027milestoneHeader\u0027) milestoneHeaderTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" issues: IssuesDataTable;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" issues$: Observable\u003cIssue[]\u003e;"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" private timeoutId: NodeJS.Timeout | null \u003d null;"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" private issuesLengthSubscription: Subscription;"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" private issuesLoadingStateSubscription: Subscription;"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":50,"author":{"gitId":"Arif-Khalid"},"content":" isLoading \u003d true;"},{"lineNumber":51,"author":{"gitId":"Arif-Khalid"},"content":" issueLength \u003d 0;"},{"lineNumber":52,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" pageSize \u003d 20;"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" @Output() issueLengthChange: EventEmitter\u003cNumber\u003e \u003d new EventEmitter\u003cNumber\u003e();"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" constructor("},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" public element: ElementRef,"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" public issueService: IssueService,"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" public groupingContextService: GroupingContextService,"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" private filtersService: FiltersService,"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" private milestoneService: MilestoneService"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" ) {}"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" this.issues \u003d new IssuesDataTable("},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" this.issueService,"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" this.groupingContextService,"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" this.filtersService,"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" this.milestoneService,"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" this.paginator,"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" this.headers,"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" this.group,"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" this.filters"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" );"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" ngAfterViewInit(): void {"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" this.timeoutId \u003d setTimeout(() \u003d\u003e {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" this.issues.loadIssues();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" this.issues$ \u003d this.issues.connect();"},{"lineNumber":82,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":83,"author":{"gitId":"Arif-Khalid"},"content":" // Emit event when issues change"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" this.issuesLengthSubscription \u003d this.issues$.subscribe(() \u003d\u003e {"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" this.issueLength \u003d this.issues.count;"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" this.issueLengthChange.emit(this.issueLength);"},{"lineNumber":87,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":88,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":89,"author":{"gitId":"Arif-Khalid"},"content":" // Emit event when loading state changes"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" this.issuesLoadingStateSubscription \u003d this.issues.isLoading$.subscribe((isLoadingUpdate) \u003d\u003e {"},{"lineNumber":91,"author":{"gitId":"Arif-Khalid"},"content":" this.isLoading \u003d isLoadingUpdate;"},{"lineNumber":92,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":93,"author":{"gitId":"-"},"content":" });"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" getHeaderTemplate(): TemplateRef\u003cany\u003e {"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" switch (this.groupingContextService.currGroupBy) {"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" case GroupBy.Assignee:"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" return this.assigneeHeaderTemplate;"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" case GroupBy.Milestone:"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" return this.milestoneHeaderTemplate;"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" default:"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" return this.defaultHeaderTemplate;"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" ngOnDestroy(): void {"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" if (this.timeoutId) {"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" clearTimeout(this.timeoutId);"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" if (this.issues) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" this.issues.disconnect();"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" if (this.issuesLengthSubscription) {"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" this.issuesLengthSubscription.unsubscribe();"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" if (this.issuesLoadingStateSubscription) {"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" this.issuesLoadingStateSubscription.unsubscribe();"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" retrieveFilterable(): FilterableSource {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return this.issues;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" updatePageSize(newPageSize: number) {"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" this.pageSize \u003d newPageSize;"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":21,"NereusWB922":59,"Arif-Khalid":10,"-":42}},{"path":"src/app/issues-viewer/hidden-groups/hidden-groups.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":".hidden-groups {"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":" margin: 8px;"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":" min-width: 150px;"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":" max-width: 300px;"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":".row-count {"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" background-color: rgb(222, 222, 222);"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" border-radius: 3px;"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" cursor: default;"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" padding: 6px;"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" color: rgb(0, 0, 0);"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" font-weight: 410;"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" display: inline-flex;"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" font-size: 14px;"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":".mat-card-header {"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" display: flex;"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" flex-direction: row;"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" align-items: center;"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" width: 100%;"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":".mat-card {"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" margin: 8px 0px;"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" height: 40px;"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" padding: 10px;"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" display: flex;"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" align-items: center;"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" justify-content: center;"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" flex-direction: row;"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":".mat-card-title {"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" font-size: 14px;"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" text-align: center;"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" margin: 0;"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" flex-grow: 1;"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" margin: 2px;"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" word-break: break-word;"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":".mat-card-avatar {"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" height: 30px;"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" width: 30px;"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":".mat-card-header .mat-card-title {"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" font-size: 12px;"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container {"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" height: 67vh;"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" overflow: auto;"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" scrollbar-width: none;"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" -ms-overflow-style: none;"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" position: relative;"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":".scrollable-containers::-webkit-scrollbar {"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" display: none;"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container::before,"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container::after {"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" pointer-events: none;"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" content: \u0027\u0027;"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" z-index: 2;"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" height: 6px;"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" width: 100%;"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" display: block;"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" background-image: linear-gradient(to bottom, white 66%, transparent);"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container::before {"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" position: absolute;"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container::after {"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" position: sticky;"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":"}"}],"authorContributionMap":{"nknguyenhc":81,"NereusWB922":1}},{"path":"src/app/issues-viewer/hidden-groups/hidden-groups.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"\u003cdiv *ngIf\u003d\"groups.length \u003e 0\" class\u003d\"hidden-groups\"\u003e"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card matTooltip\u003d\"Users that have no Issues/PRs pertaining to the current filter\" matTooltipShowDelay\u003d\"0\" matTooltipHideDelay\u003d\"0\"\u003e"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-title\u003eHidden {{ this.groupingContextService.currGroupBy }}s\u003c/mat-card-title\u003e"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"row-count\"\u003e{{ groups.length }}\u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"scrollable-container\"\u003e"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv *ngFor\u003d\"let group of groups\"\u003e"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" \u003cng-container [ngTemplateOutlet]\u003d\"getCardTemplate()\" [ngTemplateOutletContext]\u003d\"{ $implicit: group }\"\u003e\u003c/ng-container\u003e"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"\u003c/div\u003e"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"\u003c!-- Templates --\u003e"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #defaultCard let-group\u003e"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card class\u003d\"loading-spinner\"\u003e"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-progress-spinner color\u003d\"primary\" mode\u003d\"indeterminate\" diameter\u003d\"50\" strokeWidth\u003d\"5\"\u003e\u003c/mat-progress-spinner\u003e"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #assigneeCard let-assignee\u003e"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card\u003e"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" \u003cmar-card-header class\u003d\"mat-card-header\"\u003e"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" mat-card-avatar"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" [ngStyle]\u003d\"{"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" background: \u0027url(\u0027 + assignee.avatar_url + \u0027)\u0027,"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" \u0027background-size\u0027: \u002730px\u0027"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" }\""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-title\u003e{{ assignee.login }}\u003c/mat-card-title\u003e"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" \u003c/mar-card-header\u003e"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #milestoneCard let-milestone\u003e"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card\u003e"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" \u003cmar-card-header class\u003d\"mat-card-header\"\u003e"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-title\u003e{{ milestone.title }}\u003c/mat-card-title\u003e"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" \u003c/mar-card-header\u003e"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"}],"authorContributionMap":{"NereusWB922":41}},{"path":"src/app/issues-viewer/hidden-groups/hidden-groups.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Component, Input, TemplateRef, ViewChild } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../core/models/github/group.interface\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { GroupBy, GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"@Component({"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" selector: \u0027app-hidden-groups\u0027,"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" templateUrl: \u0027./hidden-groups.component.html\u0027,"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" styleUrls: [\u0027./hidden-groups.component.css\u0027]"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"export class HiddenGroupsComponent {"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" @Input() groups: Group[] \u003d [];"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027defaultCard\u0027) defaultCardTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027assigneeCard\u0027) assigneeCardTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027milestoneCard\u0027) milestoneCardTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" constructor(public groupingContextService: GroupingContextService) {}"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" getCardTemplate(): TemplateRef\u003cany\u003e {"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" switch (this.groupingContextService.currGroupBy) {"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" case GroupBy.Assignee:"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" return this.assigneeCardTemplate;"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" case GroupBy.Milestone:"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" return this.milestoneCardTemplate;"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" default:"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" return this.defaultCardTemplate;"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":29}},{"path":"src/app/issues-viewer/issues-viewer.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv\u003e"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"loading-spinner\" *ngIf\u003d\"(this.viewService.isChangingRepo | async) || this.groups.length \u003d\u003d\u003d 0; 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":"Arif-Khalid"},"content":" \u003capp-filter-bar [views$]\u003d\"views\"\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":"NereusWB922"},"content":" *ngFor\u003d\"let group of groups\""},{"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":"NereusWB922"},"content":" [group]\u003d\"group\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" [headers]\u003d\"this.displayedColumns\""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" (issueLengthChange)\u003d\"updateHiddenGroups($event, group)\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003e\u003c/app-card-view\u003e"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" \u003capp-hidden-groups [groups]\u003d\"this.hiddenGroups\"\u003e\u003c/app-hidden-groups\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/ng-template\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"NereusWB922":5,"Arif-Khalid":3,"-":14}},{"path":"src/app/issues-viewer/issues-viewer.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { AfterViewInit, Component, OnDestroy, OnInit, QueryList, ViewChildren } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { NavigationEnd, NavigationStart, Router } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { BehaviorSubject, of, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { filter } from \u0027rxjs/operators\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../core/models/github/group.interface\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Repo } from \u0027../core/models/repo.model\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027../core/services/error-message.service\u0027;"},{"lineNumber":8,"author":{"gitId":"Arif-Khalid"},"content":"import { FiltersService } from \u0027../core/services/filters.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../core/services/github.service\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { GroupingContextService } from \u0027../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../core/services/issue.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../core/services/label.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { MilestoneService } from \u0027../core/services/milestone.service\u0027;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../core/services/view.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { TABLE_COLUMNS } from \u0027../shared/issue-tables/issue-tables-columns\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { CardViewComponent } from \u0027./card-view/card-view.component\u0027;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":19,"author":{"gitId":"-"},"content":" selector: \u0027app-issues-viewer\u0027,"},{"lineNumber":20,"author":{"gitId":"-"},"content":" templateUrl: \u0027./issues-viewer.component.html\u0027,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./issues-viewer.component.css\u0027]"},{"lineNumber":22,"author":{"gitId":"-"},"content":"})"},{"lineNumber":23,"author":{"gitId":"-"},"content":"export class IssuesViewerComponent implements OnInit, AfterViewInit, OnDestroy {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" readonly displayedColumns \u003d [TABLE_COLUMNS.ID, TABLE_COLUMNS.TITLE, TABLE_COLUMNS.ASSIGNEE, TABLE_COLUMNS.LABEL];"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" /** Observes for any change in repo*/"},{"lineNumber":27,"author":{"gitId":"-"},"content":" repoChangeSubscription: Subscription;"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" groupByChangeSubscription: Subscription;"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" /** Observes for any change in the cardviews */"},{"lineNumber":32,"author":{"gitId":"-"},"content":" viewChange: Subscription;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" popStateEventSubscription: Subscription;"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" availableGroupsSubscription: Subscription;"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" popStateNavigationId: number;"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" /** Users to show as columns */"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" groups: Group[] \u003d [];"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" /** The list of users with 0 issues (hidden) */"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" hiddenGroups: Group[] \u003d [];"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" @ViewChildren(CardViewComponent) cardViews: QueryList\u003cCardViewComponent\u003e;"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" views \u003d new BehaviorSubject\u003cQueryList\u003cCardViewComponent\u003e\u003e(undefined);"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" public viewService: ViewService,"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public githubService: GithubService,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public issueService: IssueService,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public labelService: LabelService,"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" public milestoneService: MilestoneService,"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" public groupingContextService: GroupingContextService,"},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" private router: Router,"},{"lineNumber":58,"author":{"gitId":"Arif-Khalid"},"content":" private filtersService: FiltersService"},{"lineNumber":59,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" this.repoChangeSubscription \u003d this.viewService.repoChanged$.subscribe((newRepo) \u003d\u003e {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.issueService.reset(false);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" this.labelService.reset();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" this.initialize();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" });"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" this.groupByChangeSubscription \u003d this.groupingContextService.currGroupBy$.subscribe((newGroupBy) \u003d\u003e {"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" this.initialize();"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" this.popStateEventSubscription \u003d this.router.events"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" .pipe(filter((event) \u003d\u003e event instanceof NavigationEnd || event instanceof NavigationStart))"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" .subscribe((event) \u003d\u003e {"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" if (event instanceof NavigationStart \u0026\u0026 event.navigationTrigger \u003d\u003d\u003d \u0027popstate\u0027) {"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" this.popStateNavigationId \u003d event.id;"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" if (event instanceof NavigationEnd \u0026\u0026 event.id \u003d\u003d\u003d this.popStateNavigationId) {"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" this.viewService.initializeRepoFromUrlParams();"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" this.groupingContextService.initializeFromUrlParams();"},{"lineNumber":80,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.initializeFromURLParams();"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.initialize();"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" this.groupingContextService.initializeFromUrlParams();"},{"lineNumber":88,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.initializeFromURLParams();"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" ngAfterViewInit(): void {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" this.viewChange \u003d this.cardViews.changes.subscribe((x) \u003d\u003e this.views.next(x));"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" ngOnDestroy(): void {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.repoChangeSubscription.unsubscribe();"},{"lineNumber":97,"author":{"gitId":"-"},"content":" this.viewChange.unsubscribe();"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" this.popStateEventSubscription.unsubscribe();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Fetch and initialize all information from repository to populate Issue Dashboard."},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" private initialize() {"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" if (this.availableGroupsSubscription) {"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" this.availableGroupsSubscription.unsubscribe();"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" this.checkIfValidRepository().subscribe((isValidRepository) \u003d\u003e {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" if (!isValidRepository) {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.repositoryNotPresentMessage());"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":" });"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" // Fetch assignees"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" this.groups \u003d [];"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" this.hiddenGroups \u003d [];"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" this.availableGroupsSubscription \u003d this.groupingContextService.getGroups().subscribe((x) \u003d\u003e (this.groups \u003d x));"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" // Fetch issues"},{"lineNumber":122,"author":{"gitId":"-"},"content":" this.issueService.reloadAllIssues();"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":126,"author":{"gitId":"NereusWB922"},"content":" * Checks if our current repository available on view service is indeed a valid repository"},{"lineNumber":127,"author":{"gitId":"-"},"content":" */"},{"lineNumber":128,"author":{"gitId":"-"},"content":" private checkIfValidRepository() {"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" const currentRepo \u003d this.viewService.currentRepo;"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" if (Repo.isInvalidRepoName(currentRepo)) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return of(false);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" return this.githubService.isRepositoryPresent(currentRepo.owner, currentRepo.name);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" * Update the list of hidden group based on the new info."},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":" * @param issueLength The number of issues under this group."},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" * @param group The group."},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":" updateHiddenGroups(issueLength: number, target: Group) {"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" if (issueLength \u003d\u003d\u003d 0 \u0026\u0026 this.groupingContextService.isInHiddenList(target)) {"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":" this.addToHiddenGroups(target);"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":147,"author":{"gitId":"NereusWB922"},"content":" this.removeFromHiddenGroups(target);"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":" private addToHiddenGroups(target: Group) {"},{"lineNumber":152,"author":{"gitId":"NereusWB922"},"content":" const isGroupPresent \u003d this.hiddenGroups.some((group) \u003d\u003e group.equals(target));"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" if (!isGroupPresent) {"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" this.hiddenGroups.push(target);"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" private removeFromHiddenGroups(target: Group) {"},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":" this.hiddenGroups \u003d this.hiddenGroups.filter((group) \u003d\u003e !group.equals(target));"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":12,"NereusWB922":62,"Arif-Khalid":5,"-":83}},{"path":"src/app/issues-viewer/issues-viewer.module.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { NgModule } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { FilterBarModule } from \u0027../shared/filter-bar/filter-bar.module\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { IssuesPrCardModule } from \u0027../shared/issue-pr-card/issue-pr-card.module\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { SharedModule } from \u0027../shared/shared.module\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { CardViewComponent } from \u0027./card-view/card-view.component\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { HiddenGroupsComponent } from \u0027./hidden-groups/hidden-groups.component\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { IssuesViewerRoutingModule } from \u0027./issues-viewer-routing.module\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { IssuesViewerComponent } from \u0027./issues-viewer.component\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"@NgModule({"},{"lineNumber":11,"author":{"gitId":"-"},"content":" imports: [FilterBarModule, IssuesViewerRoutingModule, IssuesPrCardModule, SharedModule],"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" declarations: [IssuesViewerComponent, CardViewComponent, HiddenGroupsComponent],"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exports: [IssuesViewerComponent, CardViewComponent]"},{"lineNumber":14,"author":{"gitId":"-"},"content":"})"},{"lineNumber":15,"author":{"gitId":"-"},"content":"export class IssuesViewerModule {}"}],"authorContributionMap":{"NereusWB922":2,"-":13}},{"path":"src/app/shared/filter-bar/filter-bar.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".dropdown-filters .mat-form-field {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" margin: 8px;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" font-size: 14px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" max-width: 20%;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" width: 17%; /* depends on number of filters*/"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".search-bar {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" width: 90%;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".dropdown-filters {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":".label-filter-grid-tile {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":".submit-button {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" margin-left: 8px;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":1,"-":21}},{"path":"src/app/shared/filter-bar/filter-bar.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cmat-grid-list cols\u003d\"7\" rowHeight\u003d\"80px\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cmat-grid-tile colspan\u003d\"3\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cmat-form-field class\u003d\"search-bar\"\u003e"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":" \u003cinput"},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":" matInput"},{"lineNumber":6,"author":{"gitId":"Arif-Khalid"},"content":" value\u003d\"{{ this.filtersService.filter$.value.title }}\""},{"lineNumber":7,"author":{"gitId":"Arif-Khalid"},"content":" (keyup)\u003d\"this.filtersService.updateFilters({ title: $event.target.value })\""},{"lineNumber":8,"author":{"gitId":"Arif-Khalid"},"content":" placeholder\u003d\"Search\""},{"lineNumber":9,"author":{"gitId":"Arif-Khalid"},"content":" /\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003c/mat-grid-tile\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cmat-grid-tile colspan\u003d\"3\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"dropdown-filters\"\u003e"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-form-field appearance\u003d\"standard\"\u003e"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-label\u003eGroup by\u003c/mat-label\u003e"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-select"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" [value]\u003d\"this.groupingContextService.currGroupBy$ | async\""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" (selectionChange)\u003d\"this.groupingContextService.setCurrentGroupingType($event.value)\""},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" \u003e"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-option *ngFor\u003d\"let option of this.groupByEnum | keyvalue\" [value]\u003d\"option.value\"\u003e{{ option.key }}\u003c/mat-option\u003e"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-select\u003e"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"standard\"\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eStatus\u003c/mat-label\u003e"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-select [value]\u003d\"this.filter.status\" (selectionChange)\u003d\"this.filtersService.updateFilters({ status: $event.value })\" multiple\u003e"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterPullRequest()\" value\u003d\"open pullrequest\"\u003eOpen Pull Requests\u003c/mat-option\u003e"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterPullRequest()\" value\u003d\"merged pullrequest\"\u003eMerged Pull Requests\u003c/mat-option\u003e"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterPullRequest()\" value\u003d\"closed pullrequest\"\u003eClosed Pull Request\u003c/mat-option\u003e"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterIssue()\" value\u003d\"open issue\"\u003eOpen Issues\u003c/mat-option\u003e"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterIssue()\" value\u003d\"closed issue\"\u003eClosed Issues\u003c/mat-option\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/mat-select\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"standard\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eType\u003c/mat-label\u003e"},{"lineNumber":36,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-select [value]\u003d\"this.filter.type\" (selectionChange)\u003d\"this.filtersService.updateFilters({ type: $event.value })\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"all\"\u003eAll\u003c/mat-option\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"issue\"\u003eIssue\u003c/mat-option\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"pullrequest\"\u003ePull Request\u003c/mat-option\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/mat-select\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":42,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-form-field"},{"lineNumber":43,"author":{"gitId":"Arif-Khalid"},"content":" appearance\u003d\"standard\""},{"lineNumber":44,"author":{"gitId":"Arif-Khalid"},"content":" matSort"},{"lineNumber":45,"author":{"gitId":"Arif-Khalid"},"content":" [matSortDisableClear]\u003d\"true\""},{"lineNumber":46,"author":{"gitId":"Arif-Khalid"},"content":" (matSortChange)\u003d\"this.filtersService.updateFilters({ sort: $event })\""},{"lineNumber":47,"author":{"gitId":"Arif-Khalid"},"content":" \u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eSort\u003c/mat-label\u003e"},{"lineNumber":49,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-select [value]\u003d\"this.filter.sort.active\"\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"id\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cspan mat-sort-header\u003d\"id\"\u003eID\u003c/span\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"title\"\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cspan mat-sort-header\u003d\"title\"\u003eTitle\u003c/span\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"date\"\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003cspan mat-sort-header\u003d\"date\"\u003eDate Updated\u003c/span\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":59,"author":{"gitId":"MadLamprey"},"content":" \u003cmat-option value\u003d\"status\"\u003e"},{"lineNumber":60,"author":{"gitId":"MadLamprey"},"content":" \u003cspan mat-sort-header\u003d\"status\"\u003eStatus\u003c/span\u003e"},{"lineNumber":61,"author":{"gitId":"MadLamprey"},"content":" \u003c/mat-option\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/mat-select\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"standard\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eMilestone\u003c/mat-label\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cmat-select"},{"lineNumber":67,"author":{"gitId":"-"},"content":" #milestoneSelectorRef"},{"lineNumber":68,"author":{"gitId":"Arif-Khalid"},"content":" [value]\u003d\"this.filter.milestones\""},{"lineNumber":69,"author":{"gitId":"Arif-Khalid"},"content":" (selectionChange)\u003d\"this.filtersService.updateFilters({ milestones: $event.value })\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" [disabled]\u003d\"this.milestoneService.hasNoMilestones\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" multiple"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003cmat-select-trigger *ngIf\u003d\"this.milestoneService.hasNoMilestones\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cspan\u003eNo Milestones\u003c/span\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003c/mat-select-trigger\u003e"},{"lineNumber":76,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-option *ngFor\u003d\"let milestone of this.milestoneService.milestones\" [value]\u003d\"milestone.title\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" {{ milestone.title }}"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":79,"author":{"gitId":"MadLamprey"},"content":" \u003cmat-option *ngIf\u003d\"isFilterIssue()\" [value]\u003d\"\u0027Issue without a milestone\u0027\"\u003eIssues without a milestone\u003c/mat-option\u003e"},{"lineNumber":80,"author":{"gitId":"MadLamprey"},"content":" \u003cmat-option *ngIf\u003d\"isFilterPullRequest()\" [value]\u003d\"\u0027PR without a milestone\u0027\"\u003ePRs without a milestone\u003c/mat-option\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003c/mat-select\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003c/mat-grid-tile\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003cmat-grid-tile class\u003d\"label-filter-grid-tile\" colspan\u003d\"1\"\u003e"},{"lineNumber":87,"author":{"gitId":"Arif-Khalid"},"content":" \u003capp-label-filter-bar\u003e\u003c/app-label-filter-bar\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003c/mat-grid-tile\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003c/mat-grid-list\u003e"}],"authorContributionMap":{"nknguyenhc":6,"Arif-Khalid":18,"NereusWB922":9,"MadLamprey":5,"-":51}},{"path":"src/app/shared/filter-bar/filter-bar.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { AfterViewInit, Component, Input, OnDestroy, OnInit, QueryList, ViewChild } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { MatSelect } from \u0027@angular/material/select\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { BehaviorSubject, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import { Filter, FiltersService } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { GroupBy, GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../core/services/logging.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { MilestoneService } from \u0027../../core/services/milestone.service\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../../core/services/view.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { FilterableComponent } from \u0027../issue-tables/filterableTypes\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { LabelFilterBarComponent } from \u0027./label-filter-bar/label-filter-bar.component\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * This component is abstracted out filterbar used by both detailed-viewer page"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * and Issues-viewer"},{"lineNumber":15,"author":{"gitId":"-"},"content":" */"},{"lineNumber":16,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":17,"author":{"gitId":"-"},"content":" selector: \u0027app-filter-bar\u0027,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" templateUrl: \u0027./filter-bar.component.html\u0027,"},{"lineNumber":19,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./filter-bar.component.css\u0027]"},{"lineNumber":20,"author":{"gitId":"-"},"content":"})"},{"lineNumber":21,"author":{"gitId":"Arif-Khalid"},"content":"export class FilterBarComponent implements OnInit, OnDestroy {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Input() views$: BehaviorSubject\u003cQueryList\u003cFilterableComponent\u003e\u003e;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" repoChangeSubscription: Subscription;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" /** Selected dropdown filter value */"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" filter: Filter \u003d this.filtersService.defaultFilter();"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" groupByEnum: typeof GroupBy \u003d GroupBy;"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" /** Milestone subscription */"},{"lineNumber":32,"author":{"gitId":"-"},"content":" milestoneSubscription: Subscription;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" @ViewChild(LabelFilterBarComponent, { static: true }) labelFilterBar: LabelFilterBarComponent;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @ViewChild(\u0027milestoneSelectorRef\u0027, { static: false }) milestoneSelectorRef: MatSelect;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"Arif-Khalid"},"content":" constructor("},{"lineNumber":39,"author":{"gitId":"Arif-Khalid"},"content":" public milestoneService: MilestoneService,"},{"lineNumber":40,"author":{"gitId":"Arif-Khalid"},"content":" public filtersService: FiltersService,"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" private viewService: ViewService,"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" public groupingContextService: GroupingContextService,"},{"lineNumber":43,"author":{"gitId":"Arif-Khalid"},"content":" private logger: LoggingService"},{"lineNumber":44,"author":{"gitId":"Arif-Khalid"},"content":" ) {"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" this.repoChangeSubscription \u003d this.viewService.repoChanged$.subscribe((newRepo) \u003d\u003e this.newRepoInitialize());"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":49,"author":{"gitId":"Arif-Khalid"},"content":" this.newRepoInitialize();"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"Arif-Khalid"},"content":" // One-time initializations"},{"lineNumber":52,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.filter$.subscribe((filter) \u003d\u003e {"},{"lineNumber":53,"author":{"gitId":"Arif-Khalid"},"content":" this.filter \u003d filter;"},{"lineNumber":54,"author":{"gitId":"Arif-Khalid"},"content":" this.applyFilter();"},{"lineNumber":55,"author":{"gitId":"-"},"content":" });"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" this.views$.subscribe(() \u003d\u003e this.applyFilter());"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" ngOnDestroy(): void {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.milestoneSubscription.unsubscribe();"},{"lineNumber":62,"author":{"gitId":"-"},"content":" this.repoChangeSubscription.unsubscribe();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * Signals to IssuesDataTable that a change has occurred in filter."},{"lineNumber":67,"author":{"gitId":"-"},"content":" */"},{"lineNumber":68,"author":{"gitId":"Arif-Khalid"},"content":" applyFilter() {"},{"lineNumber":69,"author":{"gitId":"Arif-Khalid"},"content":" this.views$?.value?.forEach((v) \u003d\u003e (v.retrieveFilterable().filter \u003d this.filter));"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Checks if program is filtering by type issue."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" isFilterIssue() {"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" return this.filter.type \u003d\u003d\u003d \u0027issue\u0027 || this.filter.type \u003d\u003d\u003d \u0027all\u0027;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" isFilterPullRequest() {"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" return this.filter.type \u003d\u003d\u003d \u0027pullrequest\u0027 || this.filter.type \u003d\u003d\u003d \u0027all\u0027;"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Fetch and initialize all information from repository to populate Issue Dashboard."},{"lineNumber":85,"author":{"gitId":"Arif-Khalid"},"content":" * Re-called when repo has changed"},{"lineNumber":86,"author":{"gitId":"-"},"content":" */"},{"lineNumber":87,"author":{"gitId":"Arif-Khalid"},"content":" private newRepoInitialize() {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" // Fetch milestones and update dropdown filter"},{"lineNumber":89,"author":{"gitId":"-"},"content":" this.milestoneSubscription \u003d this.milestoneService.fetchMilestones().subscribe("},{"lineNumber":90,"author":{"gitId":"-"},"content":" (response) \u003d\u003e {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" this.logger.debug(\u0027IssuesViewerComponent: Fetched milestones from Github\u0027);"},{"lineNumber":92,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.sanitizeMilestones(this.milestoneService.milestones);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" },"},{"lineNumber":94,"author":{"gitId":"-"},"content":" (err) \u003d\u003e {},"},{"lineNumber":95,"author":{"gitId":"-"},"content":" () \u003d\u003e {}"},{"lineNumber":96,"author":{"gitId":"-"},"content":" );"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":6,"NereusWB922":6,"Arif-Khalid":17,"-":69}},{"path":"src/app/shared/filter-bar/label-filter-bar/label-filter-bar.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"::ng-deep.mat-menu-content:not(:empty) {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" /* Override mat-menu-content\u0027s non-empty default CSS. */"},{"lineNumber":3,"author":{"gitId":"-"},"content":" padding-top: 0px !important;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-bottom: 0px !important;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"::ng-deep.mat-menu-panel {"},{"lineNumber":8,"author":{"gitId":"-"},"content":" /* Override mat-menu-panel\u0027s default CSS. */"},{"lineNumber":9,"author":{"gitId":"-"},"content":" width: 280px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" max-width: none !important;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":".popup-container {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":".popupmenu {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" width: max-content;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":".scroll-container {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" max-height: 400px;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" overflow-y: auto;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" -ms-overflow-style: none; /* IE and Edge */"},{"lineNumber":27,"author":{"gitId":"-"},"content":" scrollbar-width: none; /* Firefox */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"/* Ref: https://css-scroll-shadows.vercel.app */"},{"lineNumber":31,"author":{"gitId":"-"},"content":".scroll-container::before {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":33,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" z-index: 2;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" height: 7px;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" background-image: linear-gradient(to bottom, white 66%, transparent);"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":".scroll-container::after {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" z-index: 2;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" top: 100%;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" height: 7px;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" background-image: linear-gradient(to top, white 66%, transparent);"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":".scroll-container-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":".scroll-container-wrapper::before {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" height: 5px;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" background-image: radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.7), transparent);"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":".scroll-container-wrapper::after {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" bottom: 0;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" height: 5px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" background-image: radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.7), transparent);"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".scroll-container::-webkit-scrollbar {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" display: none; /* Hide scrollbar for Chrome, Safari and Opera */"},{"lineNumber":84,"author":{"gitId":"-"},"content":"}"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":".flexbox-container {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":88,"author":{"gitId":"-"},"content":" flex-direction: row;"},{"lineNumber":89,"author":{"gitId":"-"},"content":" justify-content: flex-start;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" border-radius: 10px;"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" height: 40px;"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" padding: 0px 12px;"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" margin: 8px 4px;"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" box-sizing: border-box;"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" position: relative;"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":".flexbox-container:hover {"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" background-color: rgba(0, 0, 0, 0.04);"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":".flexbox-container-strikethrough {"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" position: absolute;"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" top: 50%;"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" width: 90%;"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" left: 50%;"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" transform: translate(-50%, -50%);"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" height: 2px;"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" background-color: black;"},{"lineNumber":111,"author":{"gitId":"-"},"content":"}"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":".input-field {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" width: calc(100% - (2 * 15px)); /* To account for left and right padding. */"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 15px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":"}"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":".mat-chip {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" height: auto;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" padding: 5.5px 7px;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" line-height: 1.1em;"},{"lineNumber":122,"author":{"gitId":"-"},"content":" position: inherit;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" border-radius: 6px;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" font-size: 12px;"},{"lineNumber":125,"author":{"gitId":"-"},"content":" min-height: 16px;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" max-height: 42px;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" margin: 0px;"},{"lineNumber":128,"author":{"gitId":"-"},"content":"}"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":".mat-stroked-button {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" font-weight: normal;"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":".hidden {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" display: none !important;"},{"lineNumber":136,"author":{"gitId":"-"},"content":"}"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":"mat-list-option {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" width: max-content;"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":".no-labels {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" /* Chosen to look similar to button above. */"},{"lineNumber":144,"author":{"gitId":"-"},"content":" padding: 0 16px;"},{"lineNumber":145,"author":{"gitId":"-"},"content":" font-size: 14px;"},{"lineNumber":146,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":20,"-":126}},{"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":"nknguyenhc"},"content":" {{ selectedLabelNames.size \u003d\u003d\u003d 0 ? \u0027All\u0027 : selectedLabelNames.size }} 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":"nknguyenhc"},"content":" \u003cdiv"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" *ngFor\u003d\"let label of this.allLabels\""},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" class\u003d\"flexbox-container\""},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" (click)\u003d\"changeLabelState(label)\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" [class.hidden]\u003d\"filter(input.value, label.name)\""},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" [style]\u003d\"{ border: \u00272px solid \u0027 + getColor(label) }\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton mat-icon-button *ngIf\u003d\"!hiddenLabelNames.has(label.name)\" (click)\u003d\"hide(label.name); $event.stopPropagation()\"\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003evisibility\u003c/mat-icon\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton mat-icon-button *ngIf\u003d\"hiddenLabelNames.has(label.name)\" (click)\u003d\"show(label.name); $event.stopPropagation()\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003evisibility_off\u003c/mat-icon\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cmat-chip"},{"lineNumber":36,"author":{"gitId":"-"},"content":" [ngStyle]\u003d\"labelService.setLabelStyle(label.color)\""},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" [disabled]\u003d\"hiddenLabelNames.has(label.name)\""},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" (click)\u003d\"changeLabelState(label)\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" {{ label.name }}"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/mat-chip\u003e"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" \u003cdiv *ngIf\u003d\"deselectedLabelNames.has(label.name)\" class\u003d\"flexbox-container-strikethrough\"\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"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/mat-menu\u003e"}],"authorContributionMap":{"nknguyenhc":12,"-":35}},{"path":"src/app/shared/filter-bar/label-filter-bar/label-filter-bar.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"import { AfterViewInit, Component, OnDestroy, OnInit, ViewChild } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":"import { Observable, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { SimpleLabel } from \u0027../../../core/models/label.model\u0027;"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":"import { FiltersService } from \u0027../../../core/services/filters.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../../../core/services/label.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../../core/services/logging.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":9,"author":{"gitId":"-"},"content":" selector: \u0027app-label-filter-bar\u0027,"},{"lineNumber":10,"author":{"gitId":"-"},"content":" templateUrl: \u0027./label-filter-bar.component.html\u0027,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./label-filter-bar.component.css\u0027]"},{"lineNumber":12,"author":{"gitId":"-"},"content":"})"},{"lineNumber":13,"author":{"gitId":"-"},"content":"export class LabelFilterBarComponent implements OnInit, AfterViewInit, OnDestroy {"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" private static readonly DEFAULT_LABEL_COLOR: string \u003d \u0027transparent\u0027;"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" private static readonly DESELECTED_LABEL_COLOR: string \u003d \u0027#b00020\u0027;"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" private static readonly SELECTED_LABEL_COLOR: string \u003d \u0027#41c300\u0027;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":" labels$: Observable\u003cSimpleLabel[]\u003e;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" allLabels: SimpleLabel[];"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" selectedLabelNames: Set\u003cstring\u003e \u003d new Set\u003cstring\u003e();"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabelNames: Set\u003cstring\u003e \u003d new Set\u003cstring\u003e();"},{"lineNumber":22,"author":{"gitId":"-"},"content":" hiddenLabelNames: Set\u003cstring\u003e \u003d new Set();"},{"lineNumber":23,"author":{"gitId":"-"},"content":" loaded \u003d false;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" labelSubscription: Subscription;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"Arif-Khalid"},"content":" constructor(private labelService: LabelService, private logger: LoggingService, private filtersService: FiltersService) {}"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" this.loaded \u003d false;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" ngAfterViewInit(): void {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" setTimeout(() \u003d\u003e {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" this.load();"},{"lineNumber":36,"author":{"gitId":"-"},"content":" this.labels$ \u003d this.labelService.connect();"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this.labels$.subscribe((labels) \u003d\u003e {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.allLabels \u003d labels;"},{"lineNumber":39,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.sanitizeLabels(this.allLabels);"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" this.selectedLabelNames \u003d new Set\u003cstring\u003e(this.filtersService.filter$.value.labels);"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" this.deselectedLabelNames \u003d this.filtersService.filter$.value.deselectedLabels;"},{"lineNumber":42,"author":{"gitId":"Arif-Khalid"},"content":" this.hiddenLabelNames \u003d this.filtersService.filter$.value.hiddenLabels;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" });"},{"lineNumber":44,"author":{"gitId":"-"},"content":" });"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" ngOnDestroy(): void {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.labelSubscription?.unsubscribe();"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" hide(label: string): void {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (this.hiddenLabelNames.has(label)) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" this.hiddenLabelNames.add(label);"},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.updateFilters({ hiddenLabels: this.hiddenLabelNames });"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" /** Show labels that were hidden */"},{"lineNumber":61,"author":{"gitId":"-"},"content":" show(label: string): void {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" if (!this.hiddenLabelNames.has(label)) {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.hiddenLabelNames.delete(label);"},{"lineNumber":66,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.updateFilters({ hiddenLabels: this.hiddenLabelNames });"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" * Change label to the next state."},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" * Label has the following state rotation: default -\u003e selected -\u003e deselected."},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" * @param label The label to change state"},{"lineNumber":73,"author":{"gitId":"-"},"content":" */"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" changeLabelState(label: SimpleLabel) {"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" if (this.selectedLabelNames.has(label.name)) {"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" this.selectedLabelNames.delete(label.name);"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" this.deselectedLabelNames.add(label.name);"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" } else if (this.deselectedLabelNames.has(label.name)) {"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" this.deselectedLabelNames.delete(label.name);"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" this.selectedLabelNames.add(label.name);"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" this.updateSelection();"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" * Returns the border color of the label."},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" * The border color represents the state of the label."},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" getColor(label: SimpleLabel): string {"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" if (this.selectedLabelNames.has(label.name)) {"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" return LabelFilterBarComponent.SELECTED_LABEL_COLOR;"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" } else if (this.deselectedLabelNames.has(label.name)) {"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" return LabelFilterBarComponent.DESELECTED_LABEL_COLOR;"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" return LabelFilterBarComponent.DEFAULT_LABEL_COLOR;"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" /** loads in the labels in the repository */"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public load() {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" this.labelService.startPollLabels();"},{"lineNumber":103,"author":{"gitId":"-"},"content":" this.labelSubscription \u003d this.labelService.fetchLabels().subscribe("},{"lineNumber":104,"author":{"gitId":"-"},"content":" (response) \u003d\u003e {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" this.logger.debug(\u0027LabelFilterBarComponent: Fetched labels from Github\u0027);"},{"lineNumber":106,"author":{"gitId":"-"},"content":" },"},{"lineNumber":107,"author":{"gitId":"-"},"content":" (err) \u003d\u003e {},"},{"lineNumber":108,"author":{"gitId":"-"},"content":" () \u003d\u003e {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" this.loaded \u003d true;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":" );"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" filter(filter: string, target: string): boolean {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" return !target.toLowerCase().includes(filter.toLowerCase());"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" hasLabels(filter: string): boolean {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" if (this.allLabels \u003d\u003d\u003d undefined || this.allLabels.length \u003d\u003d\u003d 0) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" return this.allLabels.some((label) \u003d\u003e !this.filter(filter, label.name));"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" updateSelection(): void {"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" this.filtersService.updateFilters({"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" labels: Array.from(this.selectedLabelNames),"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: this.deselectedLabelNames"},{"lineNumber":129,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" removeAllSelection(): void {"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" this.selectedLabelNames \u003d new Set\u003cstring\u003e();"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" this.deselectedLabelNames \u003d new Set\u003cstring\u003e();"},{"lineNumber":135,"author":{"gitId":"-"},"content":" this.updateSelection();"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":39,"Arif-Khalid":9,"-":89}},{"path":"src/app/shared/issue-pr-card/issue-pr-card-labels/issue-pr-card-labels.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, Input } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"import { GithubLabel } from \u0027../../../core/models/github/github-label.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../../../core/services/label.service\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":6,"author":{"gitId":"-"},"content":" selector: \u0027app-issue-pr-card-labels\u0027,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" templateUrl: \u0027./issue-pr-card-labels.component.html\u0027,"},{"lineNumber":8,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./issue-pr-card-labels.component.css\u0027]"},{"lineNumber":9,"author":{"gitId":"-"},"content":"})"},{"lineNumber":10,"author":{"gitId":"-"},"content":"export class IssuePrCardLabelsComponent {"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" @Input() labels: GithubLabel[];"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" @Input() labelSet: Set\u003cstring\u003e;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" constructor(public labelService: LabelService) {}"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":3,"-":11}},{"path":"src/app/shared/issue-pr-card/issue-pr-card-milestone/issue-pr-card-milestone.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"MadLamprey"},"content":"\u003cdiv *ngIf\u003d\"repoHasMilestones\" class\u003d\"milestone\" [ngStyle]\u003d\"{ color: milestone.state ? \u0027grey\u0027 : \u0027red\u0027 }\"\u003e"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":" \u003cspan class\u003d\"octicon-milestone\" octicon\u003d\"milestone\" [color]\u003d\"milestone.state ? \u0027grey\u0027 : \u0027red\u0027\" size\u003d\"8\"\u003e \u003c/span\u003e"},{"lineNumber":3,"author":{"gitId":"MadLamprey"},"content":" {{ milestone.state ? milestone.title : \u0027???\u0027 }}"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"MadLamprey":3,"-":1}},{"path":"src/app/shared/issue-pr-card/issue-pr-card-milestone/issue-pr-card-milestone.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, Input } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Milestone } from \u0027../../../core/models/milestone.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":5,"author":{"gitId":"-"},"content":" selector: \u0027app-issue-pr-card-milestone\u0027,"},{"lineNumber":6,"author":{"gitId":"-"},"content":" templateUrl: \u0027./issue-pr-card-milestone.component.html\u0027,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./issue-pr-card-milestone.component.css\u0027]"},{"lineNumber":8,"author":{"gitId":"-"},"content":"})"},{"lineNumber":9,"author":{"gitId":"-"},"content":"export class IssuePrCardMilestoneComponent {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" @Input() milestone: Milestone;"},{"lineNumber":11,"author":{"gitId":"MadLamprey"},"content":" @Input() repoHasMilestones: boolean;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":" constructor() {}"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"MadLamprey":1,"-":13}},{"path":"src/app/shared/issue-pr-card/issue-pr-card.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cmat-card class\u003d\"card\" [ngClass]\u003d\"getIssueOpenOrCloseColorCSSClass()\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003ca class\u003d\"no-underline link-grey-dark\" (click)\u003d\"viewIssueInBrowser($event)\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cspan [matTooltip]\u003d\"this.issue.updated_at\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003capp-issue-pr-card-header [issue]\u003d\"issue\"\u003e\u003c/app-issue-pr-card-header\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cmat-card-content\u003e"},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":" \u003capp-issue-pr-card-milestone"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":" [milestone]\u003d\"issue.milestone\""},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":" [repoHasMilestones]\u003d\"!milestoneService.hasNoMilestones\""},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":" \u003e\u003c/app-issue-pr-card-milestone\u003e"},{"lineNumber":10,"author":{"gitId":"Arif-Khalid"},"content":" \u003capp-issue-pr-card-labels [labels]\u003d\"issue.githubLabels\" [labelSet]\u003d\"filter?.hiddenLabels\"\u003e\u003c/app-issue-pr-card-labels\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003c/mat-card-content\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003c/mat-card\u003e"}],"authorContributionMap":{"Arif-Khalid":1,"MadLamprey":4,"-":9}},{"path":"src/app/shared/issue-pr-card/issue-pr-card.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, Input } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":3,"author":{"gitId":"Arif-Khalid"},"content":"import { Filter } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../../core/services/github.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../../core/services/label.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../core/services/logging.service\u0027;"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":"import { MilestoneService } from \u0027../../core/services/milestone.service\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":10,"author":{"gitId":"-"},"content":" selector: \u0027app-issue-pr-card\u0027,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" templateUrl: \u0027./issue-pr-card.component.html\u0027,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./issue-pr-card.component.css\u0027]"},{"lineNumber":13,"author":{"gitId":"-"},"content":"})"},{"lineNumber":14,"author":{"gitId":"-"},"content":"export class IssuePrCardComponent {"},{"lineNumber":15,"author":{"gitId":"-"},"content":" @Input() issue: Issue;"},{"lineNumber":16,"author":{"gitId":"Arif-Khalid"},"content":" @Input() filter?: Filter;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":" constructor("},{"lineNumber":19,"author":{"gitId":"MadLamprey"},"content":" private logger: LoggingService,"},{"lineNumber":20,"author":{"gitId":"MadLamprey"},"content":" private githubService: GithubService,"},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":" public labelService: LabelService,"},{"lineNumber":22,"author":{"gitId":"MadLamprey"},"content":" public milestoneService: MilestoneService"},{"lineNumber":23,"author":{"gitId":"MadLamprey"},"content":" ) {}"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" /** Opens issue in new window */"},{"lineNumber":26,"author":{"gitId":"-"},"content":" viewIssueInBrowser(event: Event) {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.logger.info(`CardViewComponent: Opening Issue ${this.issue.id} on Github`);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.githubService.viewIssueInBrowser(this.issue.id, event);"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" /** Returns CSS class for border color */"},{"lineNumber":32,"author":{"gitId":"-"},"content":" getIssueOpenOrCloseColorCSSClass() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" if (this.issue.state \u003d\u003d\u003d \u0027OPEN\u0027) {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" if (this.issue.isDraft) {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return \u0027grey\u0027;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return \u0027border-green\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"-"},"content":" } else if (this.issue.issueOrPr \u003d\u003d\u003d \u0027PullRequest\u0027 \u0026\u0026 this.issue.state \u003d\u003d\u003d \u0027CLOSED\u0027) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return \u0027border-red\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" } else if (this.issue.issueOrPr \u003d\u003d\u003d \u0027Issue\u0027 \u0026\u0026 this.issue.stateReason \u003d\u003d\u003d \u0027NOT_PLANNED\u0027) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return \u0027border-gray\u0027;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return \u0027border-purple\u0027;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Truncates description to fit in card content."},{"lineNumber":50,"author":{"gitId":"-"},"content":" * @param description - Description of Issue that is to be displayed."},{"lineNumber":51,"author":{"gitId":"-"},"content":" */"},{"lineNumber":52,"author":{"gitId":"-"},"content":" fitDescriptionText(): string {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" // Arbitrary Length of Characters beyond which an overflow occurs."},{"lineNumber":54,"author":{"gitId":"-"},"content":" const MAX_CHARACTER_LENGTH \u003d 72;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" const ELLIPSES \u003d \u0027...\u0027;"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" return this.issue.description.slice(0, MAX_CHARACTER_LENGTH) + ELLIPSES;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":2,"MadLamprey":7,"-":50}},{"path":"src/app/shared/issue-tables/IssuesDataTable.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { DataSource } from \u0027@angular/cdk/table\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { MatPaginator } from \u0027@angular/material/paginator\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { BehaviorSubject, merge, Observable, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../core/models/github/group.interface\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import { Filter, FiltersService } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../../core/services/issue.service\u0027;"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import { MilestoneService } from \u0027../../core/services/milestone.service\u0027;"},{"lineNumber":11,"author":{"gitId":"Arif-Khalid"},"content":"import { applyDropdownFilter } from \u0027./dropdownfilter\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { FilterableSource } from \u0027./filterableTypes\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { paginateData } from \u0027./issue-paginator\u0027;"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":"import { applySort } from \u0027./issue-sorter\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { applySearchFilter } from \u0027./search-filter\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"export class IssuesDataTable extends DataSource\u003cIssue\u003e implements FilterableSource {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public count \u003d 0;"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" private filterChange \u003d new BehaviorSubject(this.filtersService.defaultFilter());"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private issuesSubject \u003d new BehaviorSubject\u003cIssue[]\u003e([]);"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private issueSubscription: Subscription;"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" public isLoading$ \u003d this.issueService.isLoading.asObservable();"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":26,"author":{"gitId":"-"},"content":" private issueService: IssueService,"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" private groupingContextService: GroupingContextService,"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" private filtersService: FiltersService,"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" private milestoneService: MilestoneService,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private paginator: MatPaginator,"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private displayedColumn: string[],"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" private group?: Group,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private defaultFilter?: (issue: Issue) \u003d\u003e boolean"},{"lineNumber":34,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" super();"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" connect(): Observable\u003cIssue[]\u003e {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return this.issuesSubject.asObservable();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" disconnect() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.filterChange.complete();"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.issuesSubject.complete();"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" if (this.issueSubscription) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.issueSubscription.unsubscribe();"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.issueService.stopPollIssues();"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" loadIssues() {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" let page;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (this.paginator !\u003d\u003d undefined) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" page \u003d this.paginator.page;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" const displayDataChanges \u003d [this.issueService.issues$, page, this.filterChange].filter((x) \u003d\u003e x !\u003d\u003d undefined);"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" this.issueService.startPollIssues();"},{"lineNumber":60,"author":{"gitId":"-"},"content":" this.issueSubscription \u003d merge(...displayDataChanges)"},{"lineNumber":61,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":62,"author":{"gitId":"-"},"content":" // maps each change in display value to new issue ordering or filtering"},{"lineNumber":63,"author":{"gitId":"-"},"content":" map(() \u003d\u003e {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" let data \u003d \u003cIssue[]\u003eObject.values(this.issueService.issues$.getValue()).reverse();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" if (this.defaultFilter) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" data \u003d data.filter(this.defaultFilter);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // Filter by assignee of issue"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" data \u003d this.groupingContextService.getDataForGroup(data, this.group);"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"Arif-Khalid"},"content":" // Apply Filters"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" data \u003d applyDropdownFilter(this.filter, data, !this.milestoneService.hasNoMilestones);"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"Arif-Khalid"},"content":" data \u003d applySearchFilter(this.filter.title, this.displayedColumn, this.issueService, data);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" this.count \u003d data.length;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"Arif-Khalid"},"content":" data \u003d applySort(this.filter.sort, data);"},{"lineNumber":78,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (this.paginator !\u003d\u003d undefined) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" data \u003d paginateData(this.paginator, data);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return data;"},{"lineNumber":83,"author":{"gitId":"-"},"content":" })"},{"lineNumber":84,"author":{"gitId":"-"},"content":" )"},{"lineNumber":85,"author":{"gitId":"-"},"content":" .subscribe((issues) \u003d\u003e {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.issuesSubject.next(issues);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" });"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"Arif-Khalid"},"content":" get filter(): Filter {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return this.filterChange.value;"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"Arif-Khalid"},"content":" set filter(filter: Filter) {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" this.filterChange.next(filter);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":6,"NereusWB922":7,"Arif-Khalid":9,"-":75}},{"path":"src/app/shared/issue-tables/dropdownfilter.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":"import { Filter } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"type StatusInfo \u003d {"},{"lineNumber":5,"author":{"gitId":"-"},"content":" type: string;"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" status: string;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"};"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"/**"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Converts a status string into an info object"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"const infoFromStatus \u003d (statusString: string): StatusInfo \u003d\u003e {"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" const [status, type] \u003d statusString.split(\u0027 \u0027);"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" return { status, type };"},{"lineNumber":15,"author":{"gitId":"-"},"content":"};"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * This module serves to improve separation of concerns in IssuesDataTable.ts and IssueList.ts module by containing the logic for"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * applying dropdownFilter to the issues data table in this module."},{"lineNumber":20,"author":{"gitId":"-"},"content":" * This module exports a single function applyDropDownFilter which is called by IssueList."},{"lineNumber":21,"author":{"gitId":"Arif-Khalid"},"content":" * This functions returns the data passed in after all the filters of dropdownFilters are applied"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"export function applyDropdownFilter(filter: Filter, data: Issue[], isFilteringByMilestone: boolean): Issue[] {"},{"lineNumber":24,"author":{"gitId":"Arif-Khalid"},"content":" const filteredData: Issue[] \u003d data.filter((issue) \u003d\u003e {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" let ret \u003d true;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" // status can either be \u0027open\u0027, \u0027closed\u0027, or \u0027merged\u0027"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" ret \u003d"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" ret \u0026\u0026"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" filter.status.some((item) \u003d\u003e {"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" const statusInfo \u003d infoFromStatus(item);"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" return statusInfo.status \u003d\u003d\u003d issue.state.toLowerCase() \u0026\u0026 statusInfo.type \u003d\u003d\u003d issue.issueOrPr.toLowerCase();"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"Arif-Khalid"},"content":" if (filter.type \u003d\u003d\u003d \u0027issue\u0027) {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" ret \u003d ret \u0026\u0026 issue.issueOrPr \u003d\u003d\u003d \u0027Issue\u0027;"},{"lineNumber":37,"author":{"gitId":"Arif-Khalid"},"content":" } else if (filter.type \u003d\u003d\u003d \u0027pullrequest\u0027) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" ret \u003d ret \u0026\u0026 issue.issueOrPr \u003d\u003d\u003d \u0027PullRequest\u0027;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" ret \u003d ret \u0026\u0026 (!isFilteringByMilestone || filter.milestones.some((milestone) \u003d\u003e issue.milestone.title \u003d\u003d\u003d milestone));"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" ret \u003d ret \u0026\u0026 issue.labels.every((label) \u003d\u003e !filter.deselectedLabels.has(label));"},{"lineNumber":43,"author":{"gitId":"Arif-Khalid"},"content":" return ret \u0026\u0026 filter.labels.every((label) \u003d\u003e issue.labels.includes(label));"},{"lineNumber":44,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":45,"author":{"gitId":"Arif-Khalid"},"content":" return filteredData;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":18,"Arif-Khalid":8,"-":20}},{"path":"src/app/shared/issue-tables/filterableTypes.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":2,"author":{"gitId":"-"},"content":" * This module aims to abstract out classes that can be filtered"},{"lineNumber":3,"author":{"gitId":"-"},"content":" */"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":"import { Filter } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":6,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * FilterableSource is an interface that contains a source that can be filtered"},{"lineNumber":9,"author":{"gitId":"-"},"content":" * by a string filter or dropdownFilter."},{"lineNumber":10,"author":{"gitId":"-"},"content":" * The source should set filter and dropdownFilter as a getter and setter"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * and applies the filter when these variables are changed."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"export interface FilterableSource {"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":" filter: Filter;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * FilterComponent is a component that contains a FilterableSource"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"export interface FilterableComponent {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" retrieveFilterable: () \u003d\u003e FilterableSource;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":3,"-":19}},{"path":"src/app/shared/issue-tables/issue-sorter.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"import { Sort } from \u0027@angular/material/sort\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import * as moment from \u0027moment\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":"export function applySort(sort: Sort, data: Issue[]): Issue[] {"},{"lineNumber":6,"author":{"gitId":"-"},"content":" if (!sort.active) {"},{"lineNumber":7,"author":{"gitId":"-"},"content":" return data;"},{"lineNumber":8,"author":{"gitId":"-"},"content":" }"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":" const direction: number \u003d sort.direction \u003d\u003d\u003d \u0027asc\u0027 ? 1 : -1;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":" switch (sort.active) {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" case \u0027id\u0027:"},{"lineNumber":14,"author":{"gitId":"MadLamprey"},"content":" return data.sort((a, b) \u003d\u003e direction * compareByIntegerValue(a.id, b.id));"},{"lineNumber":15,"author":{"gitId":"-"},"content":" case \u0027date\u0027:"},{"lineNumber":16,"author":{"gitId":"MadLamprey"},"content":" return data.sort((a, b) \u003d\u003e direction * compareByDateValue(a.updated_at, b.updated_at));"},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":" case \u0027status\u0027:"},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":" return data.sort((a, b) \u003d\u003e direction * compareByIssueType(a, b));"},{"lineNumber":19,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":20,"author":{"gitId":"-"},"content":" // title, responseTag are string values"},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":" return data.sort((a, b) \u003d\u003e direction * compareByStringValue(a[sort.active], b[sort.active]));"},{"lineNumber":22,"author":{"gitId":"-"},"content":" }"},{"lineNumber":23,"author":{"gitId":"-"},"content":"}"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"function compareByStringValue(valueA: string, valueB: string): number {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" const orderA \u003d String(valueA || \u0027\u0027).toUpperCase();"},{"lineNumber":27,"author":{"gitId":"-"},"content":" const orderB \u003d String(valueB || \u0027\u0027).toUpperCase();"},{"lineNumber":28,"author":{"gitId":"-"},"content":" return orderA \u003c orderB ? -1 : 1;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"function compareByIntegerValue(valueA: number, valueB: number): number {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" return valueA \u003c valueB ? -1 : 1;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"function compareByDateValue(valueA: string, valueB: string): number {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" return moment(valueA).isBefore(valueB) ? -1 : 1;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}"},{"lineNumber":38,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":39,"author":{"gitId":"MadLamprey"},"content":"function compareByIssueType(valueA: Issue, valueB: Issue): number {"},{"lineNumber":40,"author":{"gitId":"MadLamprey"},"content":" const sortOrder \u003d {"},{"lineNumber":41,"author":{"gitId":"MadLamprey"},"content":" \u0027OPEN PullRequest\u0027: 0,"},{"lineNumber":42,"author":{"gitId":"MadLamprey"},"content":" \u0027OPEN Issue\u0027: 1,"},{"lineNumber":43,"author":{"gitId":"MadLamprey"},"content":" \u0027MERGED PullRequest\u0027: 2,"},{"lineNumber":44,"author":{"gitId":"MadLamprey"},"content":" \u0027CLOSED Issue\u0027: 3,"},{"lineNumber":45,"author":{"gitId":"MadLamprey"},"content":" \u0027CLOSED PullRequest\u0027: 4"},{"lineNumber":46,"author":{"gitId":"MadLamprey"},"content":" };"},{"lineNumber":47,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":48,"author":{"gitId":"MadLamprey"},"content":" const aOrder \u003d sortOrder[valueA.state + \u0027 \u0027 + valueA.issueOrPr] || -1;"},{"lineNumber":49,"author":{"gitId":"MadLamprey"},"content":" const bOrder \u003d sortOrder[valueB.state + \u0027 \u0027 + valueB.issueOrPr] || -1;"},{"lineNumber":50,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":51,"author":{"gitId":"MadLamprey"},"content":" if (aOrder \u003d\u003d\u003d bOrder) {"},{"lineNumber":52,"author":{"gitId":"MadLamprey"},"content":" return compareByStringValue(valueA.title, valueB.title);"},{"lineNumber":53,"author":{"gitId":"MadLamprey"},"content":" } else if (aOrder \u003e bOrder) {"},{"lineNumber":54,"author":{"gitId":"MadLamprey"},"content":" return 1;"},{"lineNumber":55,"author":{"gitId":"MadLamprey"},"content":" } else {"},{"lineNumber":56,"author":{"gitId":"MadLamprey"},"content":" return -1;"},{"lineNumber":57,"author":{"gitId":"MadLamprey"},"content":" }"},{"lineNumber":58,"author":{"gitId":"MadLamprey"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":2,"MadLamprey":26,"-":30}},{"path":"src/app/shared/layout/header.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":".repo-menu-footer {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" display: flex;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" justify-content: space-between;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" align-items: center;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" position: sticky;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" bottom: 0;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" z-index: 1;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" padding: 10px;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":".new-repo-button {"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" flex-grow: 1;"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":".keep-filter-button {"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" margin-left: 2px;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":".repo-options {"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" max-height: 300px;"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" overflow-y: auto;"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":".repo-options button {"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" font-size: 17px;"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":"/* Overwrite the width of the menu */"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"::ng-deep .repo-menu {"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" width: fit-content !important;"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" min-width: 320px !important;"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":32}},{"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":"NereusWB922"},"content":" \u003ca class\u003d\"mat-toolbar mat-primary\" style\u003d\"text-decoration: none\" [routerLink]\u003d\"viewService.isRepoSet() ? viewService.currentView : null\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003eWATcher v{{ this.getVersion() }}\u003c/a"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" \u003cspan id\u003d\"view-descriptor\" *ngIf\u003d\"auth.isAuthenticated()\" style\u003d\"margin-left: 70px\"\u003e"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" {{ this.presetViews[this.filtersService.presetView$.value] }}"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" \u003c!-- Gateway to activity dashboard, do not delete --\u003e"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" \u003c!--div *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 this.viewService.sessionData.sessionRepo.length \u003e 1\"\u003e"},{"lineNumber":20,"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":21,"author":{"gitId":"-"},"content":" \u003cmat-menu #menu\u003d\"matMenu\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":23,"author":{"gitId":"-"},"content":" mat-menu-item"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" *ngFor\u003d\"let sessionRepo of this.viewService.sessionData.sessionRepo\""},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" (click)\u003d\"this.routeToSelectedView(sessionRepo.view)\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cspan\u003e"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-icon [ngStyle]\u003d\"{ color: \u0027green\u0027, visibility: this.viewService.currentView \u003d\u003d\u003d sessionRepo.view ? \u0027visible\u0027 : \u0027hidden\u0027 }\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003edone\u003c/mat-icon"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" {{ this.getViewDescription(sessionRepo.view) }}"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c/mat-menu\u003e"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" \u003c/div--\u003e"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" \u003cdiv *ngIf\u003d\"auth.isAuthenticated()\"\u003e"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton mat-button [matMenuTriggerFor]\u003d\"menu\"\u003e\u003cmat-icon style\u003d\"color: white\"\u003eexpand_more\u003c/mat-icon\u003e\u003c/button\u003e"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-menu #menu\u003d\"matMenu\"\u003e"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" \u003cdiv *ngFor\u003d\"let presetView of this.presetViews | keyvalue\"\u003e"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton mat-menu-item *ngIf\u003d\"presetView.key !\u003d\u003d \u0027custom\u0027\" (click)\u003d\"this.filtersService.updatePresetView(presetView.key)\"\u003e"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" \u003cspan\u003e"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-icon"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" [ngStyle]\u003d\"{ color: \u0027green\u0027, visibility: this.filtersService.presetView$.value \u003d\u003d\u003d presetView.key ? \u0027visible\u0027 : \u0027hidden\u0027 }\""},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" \u003edone\u003c/mat-icon"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" \u003e"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" {{ presetView.value }}"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" \u003c/span\u003e"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" \u003c/button\u003e"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" \u003c/div\u003e"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" \u003c/mat-menu\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c!-- everything else --\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":"NereusWB922"},"content":" \u003cdiv *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 viewService.isRepoSet()\"\u003e"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" \u003cspan id\u003d\"view-descriptor\" style\u003d\"margin-left: 10px\"\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" {{ this.currentRepo || \u0027No Repository Set\u0027 }}"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" mat-icon-button"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" matTooltip\u003d\"{{ viewService.isRepoSet() ? \u0027Change Repository\u0027 : \u0027Select Repository\u0027 }}\""},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" [matMenuTriggerFor]\u003d\"repoMenu\""},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003eedit\u003c/mat-icon\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-menu #repoMenu xPosition\u003d\"before\" class\u003d\"repo-menu\"\u003e"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"repo-options\"\u003e"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv *ngFor\u003d\"let repo of this.repoUrlCacheService.suggestions\"\u003e"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" \u003cbutton mat-menu-item *ngIf\u003d\"repo !\u003d\u003d this.currentRepo\" (click)\u003d\"this.applyRepoDropdown(repo, true)\"\u003e"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" {{ repo }}"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" \u003c/button\u003e"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"repo-menu-footer\"\u003e"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" \u003cbutton mat-flat-button color\u003d\"primary\" class\u003d\"new-repo-button\" (click)\u003d\"this.openChangeRepoDialog()\" matTooltip\u003d\"Add new repository\"\u003e"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-icon\u003eadd\u003c/mat-icon\u003e"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" \u003c/button\u003e"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" \u003cbutton"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" mat-icon-button"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" (click)\u003d\"toggleKeepFilters($event)\""},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" class\u003d\"keep-filter-button\""},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" matTooltip\u003d\"{{ keepFilters ? \u0027Keep filter on\u0027 : \u0027Keep filter off\u0027 }}\""},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" color\u003d\"{{ keepFilters ? \u0027primary\u0027 : \u0027warn\u0027 }}\""},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" \u003e"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-icon\u003e{{ keepFilters ? \u0027filter_alt\u0027 : \u0027filter_alt_off\u0027 }}\u003c/mat-icon\u003e"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" \u003c/button\u003e"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-menu\u003e"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" \u003cspan style\u003d\"flex: 1 1 auto\"\u003e\u003c/span\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" \u003cbutton mat-button matTooltip\u003d\"Download WATcher Log\" (click)\u003d\"this.exportLogFile()\"\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003ereceipt\u003c/mat-icon\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003cbutton mat-button matTooltip\u003d\"Give feedback about WATcher\" (click)\u003d\"openIssueTracker()\"\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003email\u003c/mat-icon\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 viewService.isRepoSet() \u0026\u0026 isOpenUrlButtonShown()\""},{"lineNumber":108,"author":{"gitId":"-"},"content":" mat-button"},{"lineNumber":109,"author":{"gitId":"-"},"content":" matTooltip\u003d\"View current page on GitHub\""},{"lineNumber":110,"author":{"gitId":"-"},"content":" (click)\u003d\"viewBrowser()\""},{"lineNumber":111,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003eopen_in_new\u003c/mat-icon\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"sync-spinner\" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 (this.isLoading$ | async); else notLoading\"\u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":" \u003cmat-spinner class\u003d\"white-spinner\" [diameter]\u003d\"20\"\u003e\u003c/mat-spinner\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" \u003cng-template #notLoading\u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 viewService.isRepoSet() \u0026\u0026 isReloadButtonShown() \u0026\u0026 !this.isReloadButtonDisabled\""},{"lineNumber":122,"author":{"gitId":"-"},"content":" mat-button"},{"lineNumber":123,"author":{"gitId":"-"},"content":" matTooltip\u003d\"Synchronize with Github data\""},{"lineNumber":124,"author":{"gitId":"-"},"content":" (click)\u003d\"reload()\""},{"lineNumber":125,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":" Sync"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003erefresh\u003c/mat-icon\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"sync-spinner\" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 isReloadButtonShown() \u0026\u0026 this.isReloadButtonDisabled\"\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \u003cspan style\u003d\"font-size: 14px; margin-right: 7px\"\u003eSync\u003c/span\u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":" \u003cmat-spinner class\u003d\"white-spinner\" [diameter]\u003d\"20\"\u003e\u003c/mat-spinner\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":" \u003c/ng-template\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" \u003cbutton *ngIf\u003d\"auth.isAuthenticated()\" mat-button matTooltip\u003d\"Log out\" (click)\u003d\"openLogOutDialog(); $event.stopPropagation()\"\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":" ({{ userService.currentUser.loginId }})"},{"lineNumber":137,"author":{"gitId":"-"},"content":" \u003cmat-icon style\u003d\"margin-left: 2px\"\u003eexit_to_app\u003c/mat-icon\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003c/mat-toolbar\u003e"}],"authorContributionMap":{"nknguyenhc":21,"NereusWB922":38,"-":80}},{"path":"src/app/shared/layout/header.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Location } from \u0027@angular/common\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Component, OnInit } from \u0027@angular/core\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Router, RoutesRecognized } from \u0027@angular/router\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { filter, pairwise, switchMap } from \u0027rxjs/operators\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { AppConfig } from \u0027../../../environments/environment\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { STORAGE_KEYS } from \u0027../../core/constants/storage-keys.constants\u0027;"},{"lineNumber":8,"author":{"gitId":"Arif-Khalid"},"content":"import { RepoChangeResponse } from \u0027../../core/models/repo-change-response.model\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { Repo } from \u0027../../core/models/repo.model\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../../core/models/view.model\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { AuthService } from \u0027../../core/services/auth.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { DialogService } from \u0027../../core/services/dialog.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../../core/services/error-handling.service\u0027;"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":"import { FiltersService } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../../core/services/github.service\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027../../core/services/githubevent.service\u0027;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"import { GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../../core/services/issue.service\u0027;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../../core/services/label.service\u0027;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../core/services/logging.service\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import { RepoSessionStorageService } from \u0027../../core/services/repo-session-storage.service\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import { RepoUrlCacheService } from \u0027../../core/services/repo-url-cache.service\u0027;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../../core/services/user.service\u0027;"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"import { ViewDescription, ViewService } from \u0027../../core/services/view.service\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"const ISSUE_TRACKER_URL \u003d \u0027https://github.com/CATcher-org/WATcher/issues\u0027;"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":29,"author":{"gitId":"-"},"content":" selector: \u0027app-layout-header\u0027,"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" templateUrl: \u0027./header.component.html\u0027,"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" styleUrls: [\u0027./header.component.css\u0027]"},{"lineNumber":32,"author":{"gitId":"-"},"content":"})"},{"lineNumber":33,"author":{"gitId":"-"},"content":"export class HeaderComponent implements OnInit {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private prevUrl;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" isReloadButtonDisabled \u003d false;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" ISSUE_FILTER \u003d \u0027/issues?q\u003dis:issue+is:all\u0027; // the filtered list must be an issue and must be open"},{"lineNumber":37,"author":{"gitId":"-"},"content":" TUTORIAL_LABEL \u003d \u0027+label:tutorial.\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" TEAM_LABEL \u003d \u0027+label:team.\u0027;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" EXCLUDE_DUPLICATE \u003d \u0027+-label:duplicate\u0027; // exclude duplicate issues"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" public isLoading$: Observable\u003cboolean\u003e;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" // Messages for the modal popup window upon logging out"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private readonly logOutDialogMessages \u003d [\u0027Do you wish to log out?\u0027];"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private readonly yesButtonDialogMessage \u003d \u0027Yes, I wish to log out\u0027;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private readonly noButtonDialogMessage \u003d \"No, I don\u0027t wish to log out\";"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" readonly presetViews: {"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" [key: string]: string;"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" } \u003d {"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" currentlyActive: \u0027Currently active\u0027,"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" contributions: \u0027Contributions\u0027,"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" custom: \u0027Custom\u0027"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" };"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" /** Model for the displayed repository name */"},{"lineNumber":57,"author":{"gitId":"-"},"content":" currentRepo \u003d \u0027\u0027;"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" keepFilters \u003d false;"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":62,"author":{"gitId":"-"},"content":" private router: Router,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public auth: AuthService,"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" public viewService: ViewService,"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public userService: UserService,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" public logger: LoggingService,"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" public repoUrlCacheService: RepoUrlCacheService,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" private location: Location,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" private githubEventService: GithubEventService,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" private issueService: IssueService,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" private labelService: LabelService,"},{"lineNumber":72,"author":{"gitId":"-"},"content":" private errorHandlingService: ErrorHandlingService,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" private githubService: GithubService,"},{"lineNumber":74,"author":{"gitId":"-"},"content":" private dialogService: DialogService,"},{"lineNumber":75,"author":{"gitId":"Arif-Khalid"},"content":" private repoSessionStorageService: RepoSessionStorageService,"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" private filtersService: FiltersService,"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" private groupingContextService: GroupingContextService"},{"lineNumber":78,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" router.events"},{"lineNumber":80,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":81,"author":{"gitId":"-"},"content":" filter((e: any) \u003d\u003e e instanceof RoutesRecognized),"},{"lineNumber":82,"author":{"gitId":"-"},"content":" pairwise()"},{"lineNumber":83,"author":{"gitId":"-"},"content":" )"},{"lineNumber":84,"author":{"gitId":"-"},"content":" .subscribe((e) \u003d\u003e {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.prevUrl \u003d e[0].urlAfterRedirects;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" });"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":" this.auth.currentAuthState.subscribe(() \u003d\u003e {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (auth.isAuthenticated() \u0026\u0026 !repoSessionStorageService.hasRepoLocation()) {"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" if (!this.auth.hasNext()) {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" this.openChangeRepoDialog();"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" this.auth.redirectToNext();"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":" });"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" this.viewService.repoSetState.subscribe((state) \u003d\u003e {"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" if (auth.isAuthenticated() \u0026\u0026 viewService.isRepoSet()) {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" this.initializeRepoNameInTitle();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":" });"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" this.viewService.repoChanged$.subscribe((repo) \u003d\u003e {"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" this.initializeRepoNameInTitle();"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" this.isLoading$ \u003d this.issueService.isLoading.asObservable();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" ngOnInit() {}"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" * Replaces and resets the current view data and routes the app to the"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" * newly selected view."},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" * @param selectedView - Selected View that is selected by the user."},{"lineNumber":117,"author":{"gitId":"-"},"content":" */"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" routeToSelectedView(selectedView: string): void {"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" // Do nothing if the selected view is the current view."},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" if (this.viewService.currentView \u003d\u003d\u003d View[selectedView]) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" // Replace Current View Data."},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" this.viewService.changeView(View[selectedView]);"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" // Remove current view issues and load selected view issues."},{"lineNumber":128,"author":{"gitId":"-"},"content":" this.githubService.reset();"},{"lineNumber":129,"author":{"gitId":"-"},"content":" this.issueService.reset(false);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" this.labelService.reset();"},{"lineNumber":131,"author":{"gitId":"-"},"content":" this.reload();"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" // Route app to new view."},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":" this.router.navigateByUrl(this.viewService.currentView);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" isBackButtonShown(): boolean {"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" return `/${this.viewService.currentView}` !\u003d\u003d this.router.url \u0026\u0026 this.router.url !\u003d\u003d \u0027/\u0027 \u0026\u0026 !this.router.url.startsWith(\u0027/?code\u0027);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" isReloadButtonShown(): boolean {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" return this.router.url !\u003d\u003d \u0027/phaseBugReporting/issues/new\u0027;"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" isOpenUrlButtonShown(): boolean {"},{"lineNumber":146,"author":{"gitId":"NereusWB922"},"content":" return this.viewService.currentView \u003d\u003d\u003d View.issuesViewer || this.viewService.currentView \u003d\u003d\u003d View.activityDashboard;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" getVersion(): string {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return AppConfig.version;"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" getViewDescription(openView: string): string {"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" return ViewDescription[openView];"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" goBack() {"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" if (this.prevUrl \u003d\u003d\u003d `/${this.viewService.currentView}/issues/new`) {"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" this.router.navigateByUrl(this.viewService.currentView);"},{"lineNumber":160,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" this.location.back();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" viewBrowser() {"},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":" if (this.viewService.currentView \u003d\u003d\u003d View.activityDashboard) {"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" window.open(`https://github.com/${this.viewService.currentRepo.owner}/${this.viewService.currentRepo.name}/pulse`);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" const routerUrl \u003d this.router.url.substring(1); // remove the first \u0027/\u0027 from string"},{"lineNumber":172,"author":{"gitId":"-"},"content":" const issueUrlIndex \u003d routerUrl.indexOf(\u0027/\u0027); // find the index of second \u0027/\u0027"},{"lineNumber":173,"author":{"gitId":"-"},"content":" let issueUrl: string;"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" // If can\u0027t find the index of second \u0027/\u0027, then router is at the /issues (table list) page"},{"lineNumber":176,"author":{"gitId":"-"},"content":" if (issueUrlIndex \u003c 0) {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" // Apply filters to the issueUrl"},{"lineNumber":178,"author":{"gitId":"-"},"content":" issueUrl \u003d this.ISSUE_FILTER;"},{"lineNumber":179,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" // issueUrl will be from the second \u0027/\u0027"},{"lineNumber":181,"author":{"gitId":"-"},"content":" issueUrl \u003d routerUrl.substring(issueUrlIndex);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":" // Open the url in user\u0027s preferred browser"},{"lineNumber":184,"author":{"gitId":"-"},"content":" window.open(\u0027https://github.com/\u0027.concat(this.githubService.getRepoURL()).concat(issueUrl));"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" openIssueTracker() {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" window.open(ISSUE_TRACKER_URL);"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" reload() {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" this.isReloadButtonDisabled \u003d true;"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" this.githubEventService.reloadPage().subscribe("},{"lineNumber":195,"author":{"gitId":"-"},"content":" (success) \u003d\u003e success,"},{"lineNumber":196,"author":{"gitId":"-"},"content":" (error) \u003d\u003e {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(error, () \u003d\u003e this.githubEventService.reloadPage());"},{"lineNumber":198,"author":{"gitId":"-"},"content":" }"},{"lineNumber":199,"author":{"gitId":"-"},"content":" );"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" this.labelService.fetchLabels().subscribe("},{"lineNumber":202,"author":{"gitId":"-"},"content":" (success) \u003d\u003e success,"},{"lineNumber":203,"author":{"gitId":"-"},"content":" (error) \u003d\u003e {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(error, () \u003d\u003e this.labelService.fetchLabels());"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" );"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" // Prevent user from spamming the reload button"},{"lineNumber":209,"author":{"gitId":"-"},"content":" setTimeout(() \u003d\u003e {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" this.isReloadButtonDisabled \u003d false;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }, 3000);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" logOut() {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" this.auth.logOut();"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" openLogOutDialog() {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" const dialogRef \u003d this.dialogService.openUserConfirmationModal("},{"lineNumber":220,"author":{"gitId":"-"},"content":" this.logOutDialogMessages,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" this.yesButtonDialogMessage,"},{"lineNumber":222,"author":{"gitId":"-"},"content":" this.noButtonDialogMessage"},{"lineNumber":223,"author":{"gitId":"-"},"content":" );"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" dialogRef.afterClosed().subscribe((res) \u003d\u003e {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" if (res) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" this.logger.info(`HeaderComponent: Logging out from ${this.userService.currentUser.loginId}`);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" this.logOut();"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":" });"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" exportLogFile() {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" this.logger.exportLogFile();"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":" initializeRepoNameInTitle() {"},{"lineNumber":238,"author":{"gitId":"NereusWB922"},"content":" if (Repo.isInvalidRepoName(this.viewService.currentRepo)) {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"NereusWB922"},"content":" const currentRepoString \u003d this.viewService.currentRepo.toString();"},{"lineNumber":242,"author":{"gitId":"-"},"content":" this.logger.info(`HeaderComponent: initializing current repository name as ${currentRepoString}`);"},{"lineNumber":243,"author":{"gitId":"-"},"content":" this.currentRepo \u003d currentRepoString;"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * Change repository viewed on Issue Dashboard, if a valid repository is provided."},{"lineNumber":248,"author":{"gitId":"-"},"content":" * Re-open dialog to prompt for another repository if an invalid one is provided."},{"lineNumber":249,"author":{"gitId":"-"},"content":" */"},{"lineNumber":250,"author":{"gitId":"Arif-Khalid"},"content":" changeRepositoryIfValid(repo: Repo, newRepoString: string, keepFilters: boolean) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" if (newRepoString \u003d\u003d\u003d this.currentRepo) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":255,"author":{"gitId":"NereusWB922"},"content":" this.viewService"},{"lineNumber":256,"author":{"gitId":"-"},"content":" .changeRepositoryIfValid(repo)"},{"lineNumber":257,"author":{"gitId":"-"},"content":" .then(() \u003d\u003e {"},{"lineNumber":258,"author":{"gitId":"NereusWB922"},"content":" this.auth.setTitleWithViewDetail();"},{"lineNumber":259,"author":{"gitId":"-"},"content":" this.currentRepo \u003d newRepoString;"},{"lineNumber":260,"author":{"gitId":"NereusWB922"},"content":" if (!keepFilters) {"},{"lineNumber":261,"author":{"gitId":"NereusWB922"},"content":" this.groupingContextService.reset();"},{"lineNumber":262,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.clearFilters();"},{"lineNumber":263,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":264,"author":{"gitId":"-"},"content":" })"},{"lineNumber":265,"author":{"gitId":"-"},"content":" .catch((error) \u003d\u003e {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" this.openChangeRepoDialog();"},{"lineNumber":267,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(error);"},{"lineNumber":268,"author":{"gitId":"-"},"content":" });"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"NereusWB922"},"content":" applyRepoDropdown(repoString: string) {"},{"lineNumber":272,"author":{"gitId":"NereusWB922"},"content":" const newRepo \u003d Repo.of(repoString);"},{"lineNumber":273,"author":{"gitId":"NereusWB922"},"content":" this.changeRepositoryIfValid(newRepo, newRepo.toString(), this.keepFilters);"},{"lineNumber":274,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":275,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":276,"author":{"gitId":"NereusWB922"},"content":" toggleKeepFilters(event: MouseEvent) {"},{"lineNumber":277,"author":{"gitId":"NereusWB922"},"content":" event.stopPropagation();"},{"lineNumber":278,"author":{"gitId":"NereusWB922"},"content":" this.keepFilters \u003d !this.keepFilters;"},{"lineNumber":279,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":280,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":281,"author":{"gitId":"-"},"content":" openChangeRepoDialog() {"},{"lineNumber":282,"author":{"gitId":"-"},"content":" const dialogRef \u003d this.dialogService.openChangeRepoDialog(this.currentRepo);"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"Arif-Khalid"},"content":" dialogRef.afterClosed().subscribe((res: RepoChangeResponse | null) \u003d\u003e {"},{"lineNumber":285,"author":{"gitId":"-"},"content":" if (!res) {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"Arif-Khalid"},"content":" const newRepo \u003d Repo.of(res.repo);"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"NereusWB922"},"content":" if (this.viewService.isRepoSet()) {"},{"lineNumber":291,"author":{"gitId":"Arif-Khalid"},"content":" this.changeRepositoryIfValid(newRepo, newRepo.toString(), res.keepFilters);"},{"lineNumber":292,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":294,"author":{"gitId":"-"},"content":" * From session-selection.component.ts"},{"lineNumber":295,"author":{"gitId":"-"},"content":" *"},{"lineNumber":296,"author":{"gitId":"-"},"content":" * Persist repo information in local browser storage"},{"lineNumber":297,"author":{"gitId":"-"},"content":" * To retrieve after authentication redirects back to WATcher"},{"lineNumber":298,"author":{"gitId":"-"},"content":" *"},{"lineNumber":299,"author":{"gitId":"-"},"content":" * Since localStorage::setItem with an undefined value can result in"},{"lineNumber":300,"author":{"gitId":"-"},"content":" * the subsequent value being stored as a string being \u0027undefined\u0027, check"},{"lineNumber":301,"author":{"gitId":"-"},"content":" * if undefined before storing it. Let\u0027s reset the items before setting them."},{"lineNumber":302,"author":{"gitId":"-"},"content":" */"},{"lineNumber":303,"author":{"gitId":"-"},"content":" window.localStorage.removeItem(STORAGE_KEYS.ORG);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" window.localStorage.removeItem(STORAGE_KEYS.DATA_REPO);"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" if (newRepo) {"},{"lineNumber":307,"author":{"gitId":"-"},"content":" window.localStorage.setItem(STORAGE_KEYS.ORG, newRepo.owner);"},{"lineNumber":308,"author":{"gitId":"-"},"content":" window.localStorage.setItem(STORAGE_KEYS.DATA_REPO, newRepo.name);"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" this.repoUrlCacheService.cache(newRepo.toString());"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }"},{"lineNumber":312,"author":{"gitId":"-"},"content":" this.auth.setRepo().subscribe();"},{"lineNumber":313,"author":{"gitId":"-"},"content":" }"},{"lineNumber":314,"author":{"gitId":"-"},"content":" });"},{"lineNumber":315,"author":{"gitId":"-"},"content":" }"},{"lineNumber":316,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":12,"Arif-Khalid":9,"NereusWB922":54,"-":241}},{"path":"src/app/shared/repo-change-form/repo-change-form.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".change-repo-form-title {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"}"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":".mat-dialog-content {"},{"lineNumber":6,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":".mat-form-field {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":".mat-dialog-actions {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" justify-content: flex-end;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":17,"author":{"gitId":"Arif-Khalid"},"content":".change-repo-form-header {"},{"lineNumber":18,"author":{"gitId":"Arif-Khalid"},"content":" display: flex;"},{"lineNumber":19,"author":{"gitId":"Arif-Khalid"},"content":" justify-content: space-between;"},{"lineNumber":20,"author":{"gitId":"Arif-Khalid"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":5,"-":15}},{"path":"src/app/shared/repo-change-form/repo-change-form.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"\u003cdiv class\u003d\"change-repo-form-header\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003ch1 mat-dialog-title class\u003d\"change-repo-form-title\"\u003e{{ data.repoName ? \u0027Change repository\u0027 : \u0027Select repository\u0027 }}\u003c/h1\u003e"},{"lineNumber":3,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-checkbox *ngIf\u003d\"data.repoName\" [(ngModel)]\u003d\"this.keepFilters\"\u003eKeep Filters\u003c/mat-checkbox\u003e"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":"\u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cdiv mat-dialog-content\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cform (ngSubmit)\u003d\"onYesClick()\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"fill\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eRepository Location (Github Link or Org/Repo)\u003c/mat-label\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cinput matInput [(ngModel)]\u003d\"this.repoName\" [formControl]\u003d\"repoChangeForm\" [matAutocomplete]\u003d\"auto\" /\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cmat-autocomplete #auto\u003d\"matAutocomplete\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cmat-option *ngFor\u003d\"let suggestion of filteredSuggestions | async\" [value]\u003d\"suggestion\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" {{ suggestion }}"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003c/mat-autocomplete\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/form\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cdiv mat-dialog-actions\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cbutton mat-button (click)\u003d\"onNoClick()\" color\u003d\"warn\"\u003eCancel\u003c/button\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cbutton mat-button (click)\u003d\"onYesClick()\" color\u003d\"primary\"\u003e{{ data.repoName ? \u0027Change Repo\u0027 : \u0027Select Repo\u0027 }}\u003c/button\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"Arif-Khalid":3,"-":18}},{"path":"src/app/shared/repo-change-form/repo-change-form.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, Inject, OnInit } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { FormControl } from \u0027@angular/forms\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { MatDialogRef, MAT_DIALOG_DATA } from \u0027@angular/material/dialog\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":"import { RepoChangeResponse } from \u0027../../core/models/repo-change-response.model\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { RepoUrlCacheService } from \u0027../../core/services/repo-url-cache.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":9,"author":{"gitId":"-"},"content":" selector: \u0027app-repo-change-form\u0027,"},{"lineNumber":10,"author":{"gitId":"-"},"content":" templateUrl: \u0027./repo-change-form.component.html\u0027,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./repo-change-form.component.css\u0027]"},{"lineNumber":12,"author":{"gitId":"-"},"content":"})"},{"lineNumber":13,"author":{"gitId":"-"},"content":"export class RepoChangeFormComponent implements OnInit {"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":" public repoName: string;"},{"lineNumber":15,"author":{"gitId":"Arif-Khalid"},"content":" public keepFilters: boolean;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" filteredSuggestions: Observable\u003cstring[]\u003e;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" repoChangeForm \u003d new FormControl();"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":20,"author":{"gitId":"-"},"content":" public dialogRef: MatDialogRef\u003cRepoChangeFormComponent\u003e,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private repoUrlCacheService: RepoUrlCacheService,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Inject(MAT_DIALOG_DATA) public data"},{"lineNumber":23,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" this.repoName \u003d data.repoName;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.initRepoChangeForm();"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private initRepoChangeForm() {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" this.filteredSuggestions \u003d this.repoUrlCacheService.getFilteredSuggestions(this.repoChangeForm);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" onYesClick(): void {"},{"lineNumber":36,"author":{"gitId":"Arif-Khalid"},"content":" const response: RepoChangeResponse \u003d {"},{"lineNumber":37,"author":{"gitId":"Arif-Khalid"},"content":" repo: this.repoName,"},{"lineNumber":38,"author":{"gitId":"Arif-Khalid"},"content":" keepFilters: this.keepFilters"},{"lineNumber":39,"author":{"gitId":"Arif-Khalid"},"content":" };"},{"lineNumber":40,"author":{"gitId":"Arif-Khalid"},"content":" this.dialogRef.close(response);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" onNoClick(): void {"},{"lineNumber":44,"author":{"gitId":"Arif-Khalid"},"content":" this.dialogRef.close(null);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":9,"-":37}},{"path":"src/test.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"// This file is required by karma.conf.js and loads recursively all the .spec and framework files"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"// tslint:disable:ordered-imports"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"// Ordered-imports rule is disabled here because the import statement for \u0027zone-testing\u0027 must be"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"// at the top to prevent test setup breakage in \u0027npm run test\u0027."},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import \u0027zone.js/dist/zone-testing\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { getTestBed } from \u0027@angular/core/testing\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from \u0027@angular/platform-browser-dynamic/testing\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"declare const require: any;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"// First, initialize the Angular testing environment."},{"lineNumber":13,"author":{"gitId":"-"},"content":"getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());"},{"lineNumber":14,"author":{"gitId":"-"},"content":"// Then we find all the tests."},{"lineNumber":15,"author":{"gitId":"-"},"content":"const context \u003d require.context(\u0027../tests\u0027, true, /\\.spec\\.ts$/);"},{"lineNumber":16,"author":{"gitId":"-"},"content":"// And load the modules."},{"lineNumber":17,"author":{"gitId":"-"},"content":"context.keys().map(context);"}],"authorContributionMap":{"NereusWB922":4,"-":13}},{"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":"-"},"content":"import {"},{"lineNumber":3,"author":{"gitId":"-"},"content":" assertSessionDataIntegrity,"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" NO_VALID_OPEN_VIEWS,"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" OPENED_VIEW_REPO_UNDEFINED,"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" SESSION_DATA_MISSING_FIELDS,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" SESSION_DATA_UNAVAILABLE"},{"lineNumber":8,"author":{"gitId":"-"},"content":"} from \u0027../../../../src/app/core/models/session.model\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../../../../src/app/core/models/view.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":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":32,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":33,"author":{"gitId":"-"},"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 views\u0027, () \u003d\u003e {"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ view: \u0027invalidView\u0027 as View, 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":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(NO_VALID_OPEN_VIEWS))"},{"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: [{ view: View.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":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_VIEW_REPO_UNDEFINED))"},{"lineNumber":59,"author":{"gitId":"-"},"content":" });"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ view: View.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":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_VIEW_REPO_UNDEFINED))"},{"lineNumber":65,"author":{"gitId":"-"},"content":" });"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ view: View.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":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_VIEW_REPO_UNDEFINED))"},{"lineNumber":71,"author":{"gitId":"-"},"content":" });"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ view: View.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_VIEW_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":28,"-":58}},{"path":"tests/app/shared/filter-bar/label-filter-bar/label-filter-bar.component.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { NO_ERRORS_SCHEMA } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { ComponentFixture, fakeAsync, TestBed, tick } from \u0027@angular/core/testing\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { MatSelectionList } from \u0027@angular/material/list\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { MatMenuModule } from \u0027@angular/material/menu\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { BehaviorSubject, of } from \u0027rxjs\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { SimpleLabel } from \u0027../../../../../src/app/core/models/label.model\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { FiltersService } from \u0027../../../../../src/app/core/services/filters.service\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { LabelService } from \u0027../../../../../src/app/core/services/label.service\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import { LoggingService } from \u0027../../../../../src/app/core/services/logging.service\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { LabelFilterBarComponent } from \u0027../../../../../src/app/shared/filter-bar/label-filter-bar/label-filter-bar.component\u0027;"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"import { LABEL_NAME_SEVERITY_HIGH, LABEL_NAME_SEVERITY_LOW, SEVERITY_SIMPLE_LABELS } from \u0027../../../../constants/label.constants\u0027;"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"describe(\u0027LabelFilterBarComponent\u0027, () \u003d\u003e {"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" let component: LabelFilterBarComponent;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" let fixture: ComponentFixture\u003cLabelFilterBarComponent\u003e;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" let labelServiceSpy: jasmine.SpyObj\u003cLabelService\u003e;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" let loggingServiceSpy: jasmine.SpyObj\u003cLoggingService\u003e;"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" let filtersServiceSpy: jasmine.SpyObj\u003cFiltersService\u003e;"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" let labelsSubject: BehaviorSubject\u003cSimpleLabel[]\u003e;"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" beforeEach(async () \u003d\u003e {"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" labelServiceSpy \u003d jasmine.createSpyObj(\u0027LabelService\u0027, [\u0027connect\u0027, \u0027startPollLabels\u0027, \u0027fetchLabels\u0027]);"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" loggingServiceSpy \u003d jasmine.createSpyObj(\u0027LoggingService\u0027, [\u0027info\u0027, \u0027debug\u0027]);"},{"lineNumber":24,"author":{"gitId":"Arif-Khalid"},"content":" filtersServiceSpy \u003d jasmine.createSpyObj(\u0027FiltersService\u0027, [\u0027updateFilters\u0027, \u0027sanitizeLabels\u0027]);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" TestBed.configureTestingModule({"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" providers: ["},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" { provide: LabelService, useValue: labelServiceSpy },"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" { provide: LoggingService, useValue: loggingServiceSpy },"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" { provide: FiltersService, useValue: filtersServiceSpy }"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" ],"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" imports: [MatMenuModule],"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" declarations: [LabelFilterBarComponent],"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" schemas: [NO_ERRORS_SCHEMA]"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" }).compileComponents();"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" fixture \u003d TestBed.createComponent(LabelFilterBarComponent);"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" component \u003d fixture.componentInstance;"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" fixture.detectChanges();"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should create\u0027, () \u003d\u003e {"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" expect(component).toBeTruthy();"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027ngAfterViewInit\u0027, () \u003d\u003e {"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" // Setup labels observable"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" labelsSubject \u003d new BehaviorSubject\u003cSimpleLabel[]\u003e([]);"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" labelServiceSpy.fetchLabels.and.returnValue(of([]));"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" labelServiceSpy.connect.and.returnValue(labelsSubject.asObservable());"},{"lineNumber":52,"author":{"gitId":"Arif-Khalid"},"content":" filtersServiceSpy.sanitizeLabels.and.callThrough();"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":55,"author":{"gitId":"Arif-Khalid"},"content":" // it(\u0027should update allLabels with latest emmitted value after ngAfterViewInit\u0027, fakeAsync(() \u003d\u003e {"},{"lineNumber":56,"author":{"gitId":"Arif-Khalid"},"content":" // component.ngAfterViewInit();"},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" // tick();"},{"lineNumber":58,"author":{"gitId":"Arif-Khalid"},"content":" // labelsSubject.next(SEVERITY_SIMPLE_LABELS);"},{"lineNumber":59,"author":{"gitId":"Arif-Khalid"},"content":" // expect(component.allLabels).toEqual(SEVERITY_SIMPLE_LABELS);"},{"lineNumber":60,"author":{"gitId":"Arif-Khalid"},"content":" // }));"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027hide(label)\u0027, () \u003d\u003e {"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should add label to hidden labels set and update filter\u0027, () \u003d\u003e {"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" const label \u003d LABEL_NAME_SEVERITY_HIGH;"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" expect(component.hiddenLabelNames).not.toContain(label);"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" component.hide(label);"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" expect(component.hiddenLabelNames).toContain(label);"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" expect(filtersServiceSpy.updateFilters).toHaveBeenCalledWith({ hiddenLabels: component.hiddenLabelNames });"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027show(label)\u0027, () \u003d\u003e {"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should remove label from hidden labels set and update filter\u0027, () \u003d\u003e {"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" const label \u003d LABEL_NAME_SEVERITY_HIGH;"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" component.hide(label);"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" expect(component.hiddenLabelNames).toContain(label);"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" component.show(label);"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" expect(component.hiddenLabelNames).not.toContain(label);"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" expect(filtersServiceSpy.updateFilters).toHaveBeenCalledWith({ hiddenLabels: component.hiddenLabelNames });"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027hasLabels\u0027, () \u003d\u003e {"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" component.allLabels \u003d SEVERITY_SIMPLE_LABELS;"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should return true if any label match the filter\u0027, () \u003d\u003e {"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" const filter \u003d \u0027low\u0027;"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" const result \u003d component.hasLabels(filter);"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" expect(result).toBeTrue();"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should return false if no label match the filter\u0027, () \u003d\u003e {"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" const filter \u003d \u0027priority\u0027;"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" const result \u003d component.hasLabels(filter);"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" expect(result).toBeFalse();"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should return false if no label exists\u0027, () \u003d\u003e {"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" const filter \u003d \u0027low\u0027;"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":" component.allLabels \u003d [];"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" const result \u003d component.hasLabels(filter);"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" expect(result).toBeFalse();"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027updateSelection\u0027, () \u003d\u003e {"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should update filters service with selected labels\u0027, () \u003d\u003e {"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" const selectedLabels \u003d [LABEL_NAME_SEVERITY_HIGH, LABEL_NAME_SEVERITY_LOW];"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" component.selectedLabelNames \u003d new Set\u003cstring\u003e(selectedLabels);"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" component.updateSelection();"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" expect(filtersServiceSpy.updateFilters).toHaveBeenCalledWith({ labels: selectedLabels, deselectedLabels: new Set\u003cstring\u003e() });"},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027removeAllSelection\u0027, () \u003d\u003e {"},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should deselect all labels and update the filter\u0027, () \u003d\u003e {"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":" component.removeAllSelection();"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" expect(component.selectedLabelNames).toEqual(new Set\u003cstring\u003e());"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" expect(component.deselectedLabelNames).toEqual(new Set\u003cstring\u003e());"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":"});"}],"authorContributionMap":{"nknguyenhc":5,"NereusWB922":124,"Arif-Khalid":8}},{"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":"NereusWB922"},"content":"import { applySort } 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":"NereusWB922"},"content":" describe(\u0027applySort()\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":"-"},"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 applySort(matSort, issuesList);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" expect(sortedData).toEqual(issuesList);"},{"lineNumber":26,"author":{"gitId":"-"},"content":" });"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" it(\u0027sorts issues based on their string fields correctly\u0027, () \u003d\u003e {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" matSort.active \u003d \u0027title\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuesByTitleAsc \u003d applySort(matSort, issuesList);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuesByTitleAsc, dummyIssue, otherDummyIssue);"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuesByTitleDesc \u003d applySort(matSort, issuesList);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuesByTitleDesc, otherDummyIssue, dummyIssue);"},{"lineNumber":37,"author":{"gitId":"-"},"content":" });"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" it(\u0027sorts issues based on their id fields correctly\u0027, () \u003d\u003e {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" matSort.active \u003d \u0027id\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByIdAsc \u003d applySort(matSort, issuesList);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuedByIdAsc, otherDummyIssue, dummyIssue);"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByIdDesc \u003d applySort(matSort, issuesList);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuedByIdDesc, dummyIssue, otherDummyIssue);"},{"lineNumber":48,"author":{"gitId":"-"},"content":" });"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" it(\u0027sorts issues based on their updated date fields correctly\u0027, () \u003d\u003e {"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" matSort.active \u003d \u0027date\u0027;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByDateAsc \u003d applySort(matSort, issuesWithDifferentUpdatedDate);"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" assertOrder(sortedIssuedByDateAsc, issueUpdatedEarlier, issueUpdatedLater);"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByDateDesc \u003d applySort(matSort, issuesWithDifferentUpdatedDate);"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" assertOrder(sortedIssuedByDateDesc, issueUpdatedLater, issueUpdatedEarlier);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" });"},{"lineNumber":61,"author":{"gitId":"-"},"content":" });"},{"lineNumber":62,"author":{"gitId":"-"},"content":"});"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * This helper method helps to check if the sorted issues are in their"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * correct order based on the variable arguments provided."},{"lineNumber":67,"author":{"gitId":"-"},"content":" */"},{"lineNumber":68,"author":{"gitId":"-"},"content":"function assertOrder(sortedIssues: Issue[], ...expectedSortedIssues: Issue[]) {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c sortedIssues.length; i++) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" expect(sortedIssues[i].id).toBe(expectedSortedIssues[i].id);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":28,"-":44}},{"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/data.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { UserRole } from \u0027../../src/app/core/models/user.model\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"export const csvString \u003d"},{"lineNumber":4,"author":{"gitId":"-"},"content":" `"},{"lineNumber":5,"author":{"gitId":"-"},"content":"role,name,team"},{"lineNumber":6,"author":{"gitId":"-"},"content":"student,JunWei96,CS2103T-W12-3"},{"lineNumber":7,"author":{"gitId":"-"},"content":"admin,damithc,"},{"lineNumber":8,"author":{"gitId":"-"},"content":"tutor,anubh-v,CS2103T-W12-3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"admin,geshuming,"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"tutor,jj-lim,CS2103T-W12-3"},{"lineNumber":12,"author":{"gitId":"-"},"content":"tutor,jj-lim,CS2103T-W12-3"},{"lineNumber":13,"author":{"gitId":"-"},"content":"tutor,jj-lim,CS2103T-W12-4"},{"lineNumber":14,"author":{"gitId":"-"},"content":"tutor,q ,CS2103T-W12-4"},{"lineNumber":15,"author":{"gitId":"-"},"content":"student,003-samuel,CS2103T-W12-3"},{"lineNumber":16,"author":{"gitId":"-"},"content":"student,damithc,CS2103T-W12-3"},{"lineNumber":17,"author":{"gitId":"-"},"content":"student,RonakLakhotia,CS2103T-W12-4"},{"lineNumber":18,"author":{"gitId":"-"},"content":"student,ptvrajsk,CS2103T-W12-3` + ` `;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"// jsonData is a json representation of csvString"},{"lineNumber":21,"author":{"gitId":"-"},"content":"export const jsonData \u003d {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" roles: {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" students: {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" junwei96: \u0027true\u0027,"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u0027003-samuel\u0027: \u0027true\u0027,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" damithc: \u0027true\u0027,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" ronaklakhotia: \u0027true\u0027,"},{"lineNumber":28,"author":{"gitId":"-"},"content":" ptvrajsk: \u0027true\u0027"},{"lineNumber":29,"author":{"gitId":"-"},"content":" },"},{"lineNumber":30,"author":{"gitId":"-"},"content":" tutors: { \u0027anubh-v\u0027: \u0027true\u0027, \u0027jj-lim\u0027: \u0027true\u0027, q: \u0027true\u0027 },"},{"lineNumber":31,"author":{"gitId":"-"},"content":" admins: { damithc: \u0027true\u0027, geshuming: \u0027true\u0027 }"},{"lineNumber":32,"author":{"gitId":"-"},"content":" },"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u0027team-structure\u0027: {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u0027CS2103T-W12-3\u0027: {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" junwei96: \u0027JunWei96\u0027,"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u0027003-samuel\u0027: \u0027003-samuel\u0027,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" damithc: \u0027damithc\u0027,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" ptvrajsk: \u0027ptvrajsk\u0027"},{"lineNumber":39,"author":{"gitId":"-"},"content":" },"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u0027CS2103T-W12-4\u0027: { ronaklakhotia: \u0027RonakLakhotia\u0027 }"},{"lineNumber":41,"author":{"gitId":"-"},"content":" },"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u0027students-allocation\u0027: {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" junwei96: { teamId: \u0027CS2103T-W12-3\u0027 },"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u0027003-samuel\u0027: { teamId: \u0027CS2103T-W12-3\u0027 },"},{"lineNumber":45,"author":{"gitId":"-"},"content":" damithc: { teamId: \u0027CS2103T-W12-3\u0027 },"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ronaklakhotia: { teamId: \u0027CS2103T-W12-4\u0027 },"},{"lineNumber":47,"author":{"gitId":"-"},"content":" ptvrajsk: { teamId: \u0027CS2103T-W12-3\u0027 }"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u0027tutors-allocation\u0027: {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u0027anubh-v\u0027: { \u0027CS2103T-W12-3\u0027: \u0027true\u0027 },"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u0027jj-lim\u0027: { \u0027CS2103T-W12-3\u0027: \u0027true\u0027, \u0027CS2103T-W12-4\u0027: \u0027true\u0027 },"},{"lineNumber":52,"author":{"gitId":"-"},"content":" q: { \u0027CS2103T-W12-4\u0027: \u0027true\u0027 }"},{"lineNumber":53,"author":{"gitId":"-"},"content":" },"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u0027admins-allocation\u0027: { damithc: {}, geshuming: {} }"},{"lineNumber":55,"author":{"gitId":"-"},"content":"};"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":"export const USER_JUNWEI \u003d {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" loginId: \u0027JunWei96\u0027,"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" role: UserRole.Student"},{"lineNumber":60,"author":{"gitId":"-"},"content":"};"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"export const USER_ANUBHAV \u003d {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" loginId: \u0027anubh-v\u0027,"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" role: UserRole.Student"},{"lineNumber":65,"author":{"gitId":"-"},"content":"};"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":"export const USER_Q \u003d {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" loginId: \u0027q\u0027,"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" role: UserRole.Tutor"},{"lineNumber":70,"author":{"gitId":"-"},"content":"};"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":"export const USER_SHUMING \u003d {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" loginId: \u0027geshuming\u0027,"},{"lineNumber":74,"author":{"gitId":"-"},"content":" role: UserRole.Admin,"},{"lineNumber":75,"author":{"gitId":"-"},"content":" allocatedTeams: []"},{"lineNumber":76,"author":{"gitId":"-"},"content":"};"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"export const USER_WITH_TWO_ROLES \u003d {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" loginId: \u0027damithc\u0027,"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" role: UserRole.Admin"},{"lineNumber":81,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"NereusWB922":4,"-":77}},{"path":"tests/constants/error.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"MadLamprey"},"content":"import { HttpErrorResponse } from \u0027@angular/common/http\u0027;"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":"import { RequestError } from \u0027@octokit/request-error\u0027;"},{"lineNumber":3,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":4,"author":{"gitId":"MadLamprey"},"content":"export const STANDARD_ERROR \u003d new Error(\u0027This is a normal error\u0027);"},{"lineNumber":5,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":"export const ERROR_WITH_NO_MESSAGE \u003d new Error();"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_304_ERROR \u003d new HttpErrorResponse({ status: 304 });"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_422_ERROR \u003d new HttpErrorResponse({ status: 422 });"},{"lineNumber":11,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":12,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_500_ERROR \u003d new HttpErrorResponse({ status: 500 });"},{"lineNumber":13,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":14,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_400_ERROR \u003d new HttpErrorResponse({ status: 400 });"},{"lineNumber":15,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":16,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_401_ERROR \u003d new HttpErrorResponse({ status: 401 });"},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_404_ERROR \u003d new HttpErrorResponse({ status: 404 });"},{"lineNumber":19,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":20,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_UNKNOWN_ERROR \u003d new HttpErrorResponse({ status: 999 });"},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":22,"author":{"gitId":"MadLamprey"},"content":"export const OCTOKIT_REQUEST_ERROR \u003d new RequestError(\u0027This is an octokit request error\u0027, 400, {"},{"lineNumber":23,"author":{"gitId":"MadLamprey"},"content":" request: { method: \u0027GET\u0027, url: \u0027\u0027, headers: {} }"},{"lineNumber":24,"author":{"gitId":"MadLamprey"},"content":"});"}],"authorContributionMap":{"MadLamprey":24}},{"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":"NereusWB922"},"content":"import { USER_ANUBHAV } from \u0027./data.constants\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { EMPTY_TEAM_RESPONSE } 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":"NereusWB922"},"content":" login: USER_ANUBHAV.loginId"},{"lineNumber":34,"author":{"gitId":"-"},"content":"};"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"export const MILESTONE_ONE \u003d {"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" number: \u00271\u0027,"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" title: \u0027Milestone 1\u0027,"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" state: \u0027Open\u0027"},{"lineNumber":40,"author":{"gitId":"-"},"content":"};"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_EMPTY_DESCRIPTION \u003d new GithubIssue({"},{"lineNumber":43,"author":{"gitId":"-"},"content":" id: \u0027574085971\u0027,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" number: 92,"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":46,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" created_at: \u00272020-03-02T16:19:02Z\u0027,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":49,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":51,"author":{"gitId":"-"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":52,"author":{"gitId":"-"},"content":" updated_at: \u00272020-03-13T13:37:32Z\u0027,"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/92\u0027,"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":"});"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":"export const CLOSED_ISSUE_WITH_EMPTY_DESCRIPTION \u003d new GithubIssue({"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" id: \u0027574085971\u0027,"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" number: 92,"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" assignees: [],"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" body: \u0027\u0027,"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272020-03-02T16:19:02Z\u0027,"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" state: IssueState.Closed,"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" stateReason: IssueStateReason.Completed,"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272020-03-13T13:37:32Z\u0027,"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u00272020-03-22T15:37:32Z\u0027,"},{"lineNumber":74,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/92\u0027,"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"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":" body: \u0027\u0027,"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272020-09-02T16:19:02Z\u0027,"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" state: IssueState.Open,"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272020-09-03T13:37:32Z\u0027,"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\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":" milestone: MILESTONE_ONE,"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":"});"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":"export const ISSUE_UPDATED_LATER \u003d new GithubIssue({"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" id: \u0027000000002\u0027,"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" number: 2,"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" assignees: [],"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" body: \u0027\u0027,"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272020-10-02T16:19:02Z\u0027,"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" state: IssueState.Open,"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272020-10-22T13:37:32Z\u0027,"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/94\u0027,"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":120,"author":{"gitId":"-"},"content":"});"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_EMPTY_DESCRIPTION_LOW_SEVERITY \u003d new GithubIssue({"},{"lineNumber":123,"author":{"gitId":"-"},"content":" id: \u0027384830567\u0027,"},{"lineNumber":124,"author":{"gitId":"-"},"content":" number: 130,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":126,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" created_at: \u00272020-03-02T16:19:02Z\u0027,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FEATURE_FLAW, GITHUB_LABEL_LOW_SEVERITY],"},{"lineNumber":129,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":130,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":131,"author":{"gitId":"-"},"content":" title: \u0027App is sometimes slow\u0027,"},{"lineNumber":132,"author":{"gitId":"-"},"content":" updated_at: \u00272020-03-13T13:37:32Z\u0027,"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":134,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/130\u0027,"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":140,"author":{"gitId":"-"},"content":"});"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_EMPTY_DESCRIPTION_HIGH_SEVERITY \u003d new GithubIssue({"},{"lineNumber":143,"author":{"gitId":"-"},"content":" id: \u0027573957398\u0027,"},{"lineNumber":144,"author":{"gitId":"-"},"content":" number: 32,"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":146,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":147,"author":{"gitId":"-"},"content":" created_at: \u00272010-03-12T19:12:02Z\u0027,"},{"lineNumber":148,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_DOCUMENTATION_BUG, GITHUB_LABEL_HIGH_SEVERITY],"},{"lineNumber":149,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":150,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":151,"author":{"gitId":"-"},"content":" title: \u0027Too many typos\u0027,"},{"lineNumber":152,"author":{"gitId":"-"},"content":" updated_at: \u00272012-03-12T19:12:02Z\u0027,"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":154,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/130\u0027,"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":160,"author":{"gitId":"-"},"content":"});"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":"export const ISSUE_WITHOUT_MILESTONE \u003d new GithubIssue({"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" id: \u0027573957398\u0027,"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" number: 32,"},{"lineNumber":165,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":166,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272010-03-12T19:12:02Z\u0027,"},{"lineNumber":168,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_DOCUMENTATION_BUG, GITHUB_LABEL_HIGH_SEVERITY],"},{"lineNumber":169,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":170,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":171,"author":{"gitId":"NereusWB922"},"content":" title: \u0027Too many typos\u0027,"},{"lineNumber":172,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272012-03-12T19:12:02Z\u0027,"},{"lineNumber":173,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":174,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/130\u0027,"},{"lineNumber":175,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":176,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":177,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":178,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":179,"author":{"gitId":"-"},"content":"});"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_ASSIGNEES \u003d new GithubIssue({"},{"lineNumber":182,"author":{"gitId":"-"},"content":" id: \u0027551732011\u0027,"},{"lineNumber":183,"author":{"gitId":"-"},"content":" number: 91,"},{"lineNumber":184,"author":{"gitId":"NereusWB922"},"content":" assignees: [USER_ANUBHAV_DETAILS],"},{"lineNumber":185,"author":{"gitId":"-"},"content":" body: \u0027Screen freezes every few minutes\u0027,"},{"lineNumber":186,"author":{"gitId":"-"},"content":" created_at: \u00272020-01-18T07:01:45Z\u0027,"},{"lineNumber":187,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":188,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":189,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":190,"author":{"gitId":"-"},"content":" title: \u0027Screen freezes\u0027,"},{"lineNumber":191,"author":{"gitId":"-"},"content":" updated_at: \u00272020-03-02T12:50:02Z\u0027,"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":193,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/91\u0027,"},{"lineNumber":194,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":" comments: [EMPTY_TEAM_RESPONSE],"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":199,"author":{"gitId":"-"},"content":"});"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"export const generateIssueWithRandomData: () \u003d\u003e GithubIssue \u003d () \u003d\u003e {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" const created_and_updated_date: string \u003d randomISODate();"},{"lineNumber":203,"author":{"gitId":"-"},"content":" const issueNumber: number \u003d randomIssueNumber();"},{"lineNumber":204,"author":{"gitId":"-"},"content":" const severityLabels: GithubLabel[] \u003d [GITHUB_LABEL_LOW_SEVERITY, GITHUB_LABEL_MEDIUM_SEVERITY, GITHUB_LABEL_HIGH_SEVERITY];"},{"lineNumber":205,"author":{"gitId":"-"},"content":" const typeLabels: GithubLabel[] \u003d [GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_FEATURE_FLAW, GITHUB_LABEL_DOCUMENTATION_BUG];"},{"lineNumber":206,"author":{"gitId":"-"},"content":" return new GithubIssue({"},{"lineNumber":207,"author":{"gitId":"-"},"content":" id: randomId(),"},{"lineNumber":208,"author":{"gitId":"-"},"content":" number: issueNumber,"},{"lineNumber":209,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":210,"author":{"gitId":"-"},"content":" comments: [],"},{"lineNumber":211,"author":{"gitId":"-"},"content":" body: `Issue No.: ${issueNumber}\\nSample Content.`,"},{"lineNumber":212,"author":{"gitId":"-"},"content":" created_at: created_and_updated_date,"},{"lineNumber":213,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, typeLabels[issueNumber % 3], severityLabels[issueNumber % 3]],"},{"lineNumber":214,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":215,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":216,"author":{"gitId":"-"},"content":" title: `Random Issue: ${issueNumber}`,"},{"lineNumber":217,"author":{"gitId":"-"},"content":" updated_at: created_and_updated_date,"},{"lineNumber":218,"author":{"gitId":"-"},"content":" url: `https://api.github.com/repos/CATcher-org/pe-results/issues/${issueNumber}`,"},{"lineNumber":219,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS"},{"lineNumber":220,"author":{"gitId":"-"},"content":" });"},{"lineNumber":221,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"NereusWB922":99,"-":122}},{"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/label.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { SimpleLabel } from \u0027../../src/app/core/models/label.model\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"// Label name constants"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_VERY_LOW \u003d \u0027veryLow\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_LOW \u003d \u0027low\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_MEDIUM \u003d \u0027medium\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_HIGH \u003d \u0027high\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"// Label category constants"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"export const CATEGORY_SEVERITY \u003d \u0027severity\u0027;"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"// Label name constants"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"export const LABEL_NAME_SEVERITY_VERY_LOW \u003d CATEGORY_SEVERITY + \u0027.\u0027 + SEVERITY_VERY_LOW;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"export const LABEL_NAME_SEVERITY_LOW \u003d CATEGORY_SEVERITY + \u0027.\u0027 + SEVERITY_LOW;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"export const LABEL_NAME_SEVERITY_MEDIUM \u003d CATEGORY_SEVERITY + \u0027.\u0027 + SEVERITY_MEDIUM;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"export const LABEL_NAME_SEVERITY_HIGH \u003d CATEGORY_SEVERITY + \u0027.\u0027 + SEVERITY_HIGH;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"// Label definition constants"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"export const DEFINITION_SEVERITY_VERY_LOW \u003d"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cp\u003eA flaw that is \u003cmark\u003epurely cosmetic\u003c/mark\u003e and \u003cmark\u003edoes not affect usage\u003c/mark\u003e. For example, \u0027 +"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cul\u003e\u0027 +"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003etypo issues\u003c/li\u003e\u0027 +"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003espacing issues\u003c/li\u003e\u0027 +"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003elayout issues\u003c/li\u003e\u0027 +"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003ecolor issues\u003c/li\u003e\u0027 +"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003efont issues\u003c/li\u003e\u0027 +"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003c/ul\u003e\u0027 +"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" \"in the docs or the UI that doesn\u0027t affect usage.\u003c/p\u003e\";"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"export const DEFINITION_SEVERITY_LOW \u003d"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cp\u003eA flaw that is unlikely to affect normal operations of the product. \u0027 +"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" \u0027Appears only in very rare situations and causes a minor inconvenience only.\u003c/p\u003e\u0027;"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"export const DEFINITION_SEVERITY_MEDIUM \u003d"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cp\u003eA flaw that causes occasional inconvenience to some users but they can \u0027 + \u0027continue to use the product.\u003c/p\u003e\u0027;"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":"export const DEFINITION_SEVERITY_HIGH \u003d"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cp\u003eA flaw that affects most users and causes major problems for users.\u0027 + \u0027i.e., makes the product almost unusable for most users.\u003c/p\u003e\u0027;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"// Label color constants"},{"lineNumber":38,"author":{"gitId":"-"},"content":"export const COLOR_BLACK \u003d \u0027000000\u0027;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"export const COLOR_WHITE \u003d \u0027ffffff\u0027;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"export const COLOR_SEVERITY_VERY_LOW \u003d \u0027ffe0e0\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"export const COLOR_SEVERITY_LOW \u003d \u0027ffcccc\u0027;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"export const COLOR_SEVERITY_MEDIUM \u003d \u0027ff9999\u0027;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"export const COLOR_SEVERITY_HIGH \u003d \u0027ff6666\u0027;"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"// CSS style constants"},{"lineNumber":46,"author":{"gitId":"-"},"content":"export const DARK_BG_LIGHT_TEXT \u003d {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u0027background-color\u0027: `#${COLOR_BLACK}`,"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" color: `#${COLOR_WHITE}`"},{"lineNumber":49,"author":{"gitId":"-"},"content":"};"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"export const LIGHT_BG_DARK_TEXT \u003d {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u0027background-color\u0027: `#${COLOR_WHITE}`,"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" color: `#${COLOR_BLACK}`"},{"lineNumber":54,"author":{"gitId":"-"},"content":"};"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_LABELS \u003d ["},{"lineNumber":57,"author":{"gitId":"-"},"content":" {"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" name: LABEL_NAME_SEVERITY_VERY_LOW,"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" color: COLOR_SEVERITY_VERY_LOW,"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" definition: DEFINITION_SEVERITY_VERY_LOW"},{"lineNumber":61,"author":{"gitId":"-"},"content":" },"},{"lineNumber":62,"author":{"gitId":"-"},"content":" {"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" name: LABEL_NAME_SEVERITY_LOW,"},{"lineNumber":64,"author":{"gitId":"-"},"content":" color: COLOR_SEVERITY_LOW,"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" definition: DEFINITION_SEVERITY_LOW"},{"lineNumber":66,"author":{"gitId":"-"},"content":" },"},{"lineNumber":67,"author":{"gitId":"-"},"content":" {"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" name: LABEL_NAME_SEVERITY_MEDIUM,"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" color: COLOR_SEVERITY_MEDIUM,"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" definition: DEFINITION_SEVERITY_MEDIUM"},{"lineNumber":71,"author":{"gitId":"-"},"content":" },"},{"lineNumber":72,"author":{"gitId":"-"},"content":" {"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" name: LABEL_NAME_SEVERITY_HIGH,"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" color: COLOR_SEVERITY_HIGH,"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" definition: DEFINITION_SEVERITY_HIGH"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":"];"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_SIMPLE_LABELS: SimpleLabel[] \u003d SEVERITY_LABELS.map((label) \u003d\u003e ({"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" name: label.name,"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" color: label.color"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":"}));"}],"authorContributionMap":{"NereusWB922":49,"-":33}},{"path":"tests/constants/session.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Repo } from \u0027../../src/app/core/models/repo.model\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { SessionData, SessionRepo } from \u0027../../src/app/core/models/session.model\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../../src/app/core/models/view.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":"NereusWB922"},"content":"export const CATCHER_REPO: Repo \u003d Repo.of(\u0027CATcher-org/CATcher\u0027);"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"const ISSUES_VIEWER_SESSION_REPO: SessionRepo \u003d {"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" view: View.issuesViewer,"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" repos: [WATCHER_REPO]"},{"lineNumber":11,"author":{"gitId":"-"},"content":"};"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"const ACTIVITY_DASHBOARD_SESSION_REPO: SessionRepo \u003d {"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" view: View.activityDashboard,"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" repos: [WATCHER_REPO]"},{"lineNumber":16,"author":{"gitId":"-"},"content":"};"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"export const VALID_SESSION_DATA: SessionData \u003d {"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" sessionRepo: [ISSUES_VIEWER_SESSION_REPO, ACTIVITY_DASHBOARD_SESSION_REPO]"},{"lineNumber":20,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"NereusWB922":13,"-":7}},{"path":"tests/model/issue.model.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import * as moment from \u0027moment\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../src/app/core/models/issue.model\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { Milestone } from \u0027../../src/app/core/models/milestone.model\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { USER_ANUBHAV } from \u0027../constants/data.constants\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import {"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" CLOSED_ISSUE_WITH_EMPTY_DESCRIPTION,"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" ISSUE_WITHOUT_MILESTONE,"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" ISSUE_WITH_ASSIGNEES,"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" ISSUE_WITH_EMPTY_DESCRIPTION,"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" MILESTONE_ONE"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"} from \u0027../constants/githubissue.constants\u0027;"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import {"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_FUNCTIONALITY_BUG,"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_MEDIUM_SEVERITY,"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_TEAM_LABEL,"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_TUTORIAL_LABEL"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"} from \u0027../constants/githublabel.constants\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"describe(\u0027Issue model class\u0027, () \u003d\u003e {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" describe(\u0027.createPhaseBugReportIssue(githubIssue)\u0027, () \u003d\u003e {"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should correctly create a issue that has an empty description\u0027, async () \u003d\u003e {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" const issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION);"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" expect(issue.globalId).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.id);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" expect(issue.id).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.number);"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" expect(issue.created_at).toEqual(moment(ISSUE_WITH_EMPTY_DESCRIPTION.created_at).format(\u0027lll\u0027));"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" expect(issue.title).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.title);"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" expect(issue.description).toEqual(\u0027No details provided by bug reporter.\u0027);"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" expect(issue.updated_at).toEqual(moment(ISSUE_WITH_EMPTY_DESCRIPTION.updated_at).format(\u0027lll\u0027));"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" expect(issue.closed_at).toEqual(\u0027Invalid date\u0027);"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" expect(issue.milestone).toEqual(new Milestone(MILESTONE_ONE));"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" expect(issue.state).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.state);"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" expect(issue.stateReason).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.stateReason);"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" expect(issue.issueOrPr).toEqual(\u0027Issue\u0027);"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" expect(issue.author).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.user.login);"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" expect(issue.isDraft).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.isDraft);"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" expect(issue.assignees).toEqual([]);"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" expect(issue.labels).toEqual(["},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_TEAM_LABEL.name,"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_TUTORIAL_LABEL.name,"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_FUNCTIONALITY_BUG.name,"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_MEDIUM_SEVERITY.name"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" ]);"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" expect(issue.githubLabels).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.labels);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" });"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set close date correctly for closed issue\u0027, () \u003d\u003e {"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" const issue \u003d Issue.createPhaseBugReportingIssue(CLOSED_ISSUE_WITH_EMPTY_DESCRIPTION);"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" expect(issue.closed_at).toEqual(moment(CLOSED_ISSUE_WITH_EMPTY_DESCRIPTION.closed_at).format(\u0027lll\u0027));"},{"lineNumber":51,"author":{"gitId":"-"},"content":" });"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set milestone to default milestone for issue without milestone\u0027, () \u003d\u003e {"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" const issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITHOUT_MILESTONE);"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":56,"author":{"gitId":"MadLamprey"},"content":" expect(issue.milestone).toEqual(Milestone.IssueWithoutMilestone);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" });"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set assignees correctly for issue with assignees\u0027, () \u003d\u003e {"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" const issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_ASSIGNEES);"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" expect(issue.assignees).toEqual([USER_ANUBHAV.loginId]);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" });"},{"lineNumber":64,"author":{"gitId":"-"},"content":" });"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027.updateDescription(description)\u0027, () \u003d\u003e {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" it(\u0027correctly clean strings obtained from users\u0027, () \u003d\u003e {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" const noDetailsFromBugReporter \u003d \u0027No details provided by bug reporter.\u0027;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" expect(Issue.updateDescription(\u0027\u0027)).toBe(noDetailsFromBugReporter);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" expect(Issue.updateDescription(null)).toBe(noDetailsFromBugReporter);"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" const typicalDescription \u003d \u0027The app crashes after parsing config files.\u0027;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" expect(Issue.updateDescription(typicalDescription)).toBe(typicalDescription + \u0027\\n\\n\u0027);"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" const inputWithSpecialChars \u003d \u0027$%^!@\u0026-_test\u0027;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" expect(Issue.updateDescription(inputWithSpecialChars)).toBe(inputWithSpecialChars + \u0027\\n\\n\u0027);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" });"},{"lineNumber":78,"author":{"gitId":"-"},"content":" });"},{"lineNumber":79,"author":{"gitId":"-"},"content":"});"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"describe(\u0027Issue\u0027, () \u003d\u003e {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" const dummyIssue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION);"},{"lineNumber":83,"author":{"gitId":"-"},"content":" const otherDummyIssue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_ASSIGNEES);"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" const noReportedDescriptionString \u003d \u0027No details provided by bug reporter.\\n\u0027;"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" it(\u0027.createGithubIssueDescription() forms the correct GitHub Issue description for the issue\u0027, () \u003d\u003e {"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" expect(dummyIssue.createGithubIssueDescription()).toEqual(noReportedDescriptionString);"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" expect(otherDummyIssue.createGithubIssueDescription()).toEqual(`${otherDummyIssue.description}\\n`);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" });"},{"lineNumber":92,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":57,"MadLamprey":1,"-":34}},{"path":"tests/services/error-handling.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"MadLamprey"},"content":"import { ErrorHandlingService } from \u0027../../src/app/core/services/error-handling.service\u0027;"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":"import { FormErrorComponent } from \u0027../../src/app/shared/error-toasters/form-error/form-error.component\u0027;"},{"lineNumber":3,"author":{"gitId":"MadLamprey"},"content":"import { GeneralMessageErrorComponent } from \u0027../../src/app/shared/error-toasters/general-message-error/general-message-error.component\u0027;"},{"lineNumber":4,"author":{"gitId":"MadLamprey"},"content":"import {"},{"lineNumber":5,"author":{"gitId":"MadLamprey"},"content":" ERROR_WITH_NO_MESSAGE,"},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":" HTTP_304_ERROR,"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":" HTTP_400_ERROR,"},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":" HTTP_401_ERROR,"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":" HTTP_404_ERROR,"},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":" HTTP_422_ERROR,"},{"lineNumber":11,"author":{"gitId":"MadLamprey"},"content":" HTTP_500_ERROR,"},{"lineNumber":12,"author":{"gitId":"MadLamprey"},"content":" HTTP_UNKNOWN_ERROR,"},{"lineNumber":13,"author":{"gitId":"MadLamprey"},"content":" OCTOKIT_REQUEST_ERROR,"},{"lineNumber":14,"author":{"gitId":"MadLamprey"},"content":" STANDARD_ERROR"},{"lineNumber":15,"author":{"gitId":"MadLamprey"},"content":"} from \u0027../constants/error.constants\u0027;"},{"lineNumber":16,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":"let errorHandlingService: ErrorHandlingService;"},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":"let mockLoggingService;"},{"lineNumber":19,"author":{"gitId":"MadLamprey"},"content":"let mockSnackBar;"},{"lineNumber":20,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":"describe(\u0027ErrorHandlingService\u0027, () \u003d\u003e {"},{"lineNumber":22,"author":{"gitId":"MadLamprey"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":23,"author":{"gitId":"MadLamprey"},"content":" mockLoggingService \u003d jasmine.createSpyObj(\u0027LoggingService\u0027, [\u0027error\u0027, \u0027debug\u0027]);"},{"lineNumber":24,"author":{"gitId":"MadLamprey"},"content":" mockSnackBar \u003d jasmine.createSpyObj(\u0027MatSnackBar\u0027, [\u0027openFromComponent\u0027]);"},{"lineNumber":25,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService \u003d new ErrorHandlingService(mockSnackBar, mockLoggingService);"},{"lineNumber":26,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":27,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":28,"author":{"gitId":"MadLamprey"},"content":" describe(\u0027ErrorHandlingService: handleError()\u0027, () \u003d\u003e {"},{"lineNumber":29,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should log errors when handling errors\u0027, () \u003d\u003e {"},{"lineNumber":30,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(STANDARD_ERROR);"},{"lineNumber":31,"author":{"gitId":"MadLamprey"},"content":" expect(mockLoggingService.error).toHaveBeenCalledWith(STANDARD_ERROR);"},{"lineNumber":32,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":33,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":34,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should use the GeneralMessageErrorComponent when handling Errors\u0027, () \u003d\u003e {"},{"lineNumber":35,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(STANDARD_ERROR);"},{"lineNumber":36,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, {"},{"lineNumber":37,"author":{"gitId":"MadLamprey"},"content":" data: { message: STANDARD_ERROR.message }"},{"lineNumber":38,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":39,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":40,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":41,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should stringify Errors if there is no message before displaying\u0027, () \u003d\u003e {"},{"lineNumber":42,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(ERROR_WITH_NO_MESSAGE);"},{"lineNumber":43,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, {"},{"lineNumber":44,"author":{"gitId":"MadLamprey"},"content":" data: { message: JSON.stringify(ERROR_WITH_NO_MESSAGE) }"},{"lineNumber":45,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":46,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":47,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":48,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should not open the snackbar when handling http status 304 errors\u0027, () \u003d\u003e {"},{"lineNumber":49,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_304_ERROR);"},{"lineNumber":50,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).not.toHaveBeenCalled();"},{"lineNumber":51,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":52,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":53,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should use the FormErrorComponent when handling http status 422 errors\u0027, () \u003d\u003e {"},{"lineNumber":54,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_422_ERROR);"},{"lineNumber":55,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(FormErrorComponent, { data: HTTP_422_ERROR });"},{"lineNumber":56,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":57,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":58,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should use the GeneralMessageErrorComponent when handling other http errors\u0027, () \u003d\u003e {"},{"lineNumber":59,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_500_ERROR);"},{"lineNumber":60,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_500_ERROR });"},{"lineNumber":61,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_400_ERROR);"},{"lineNumber":62,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_400_ERROR });"},{"lineNumber":63,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_401_ERROR);"},{"lineNumber":64,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_401_ERROR });"},{"lineNumber":65,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_404_ERROR);"},{"lineNumber":66,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_404_ERROR });"},{"lineNumber":67,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_UNKNOWN_ERROR);"},{"lineNumber":68,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_UNKNOWN_ERROR });"},{"lineNumber":69,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledTimes(5);"},{"lineNumber":70,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":71,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":72,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should treat octokit request errors as http errors\u0027, () \u003d\u003e {"},{"lineNumber":73,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(OCTOKIT_REQUEST_ERROR);"},{"lineNumber":74,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: OCTOKIT_REQUEST_ERROR });"},{"lineNumber":75,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":76,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":77,"author":{"gitId":"MadLamprey"},"content":"});"}],"authorContributionMap":{"MadLamprey":77}},{"path":"tests/services/label.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { of } from \u0027rxjs\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Label } from \u0027../../src/app/core/models/label.model\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { GithubService } from \u0027../../src/app/core/services/github.service\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { LabelService } from \u0027../../src/app/core/services/label.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import * as LabelConstant from \u0027../constants/label.constants\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"let labelService: LabelService;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"let labelList: Label[];"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"let githubServiceSpy: jasmine.SpyObj\u003cGithubService\u003e;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"describe(\u0027LabelService: fetchLabels()\u0027, () \u003d\u003e {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy \u003d jasmine.createSpyObj(\u0027GithubService\u0027, [\u0027fetchAllLabels\u0027]);"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" labelService \u003d new LabelService(githubServiceSpy);"},{"lineNumber":15,"author":{"gitId":"-"},"content":" });"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should fetch labels successfully\u0027, () \u003d\u003e {"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" const mockLabels \u003d LabelConstant.SEVERITY_LABELS;"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" const parsedLabels \u003d labelService.parseLabelData(mockLabels);"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.fetchAllLabels.and.returnValue(of(mockLabels));"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" labelService.fetchLabels().subscribe((response) \u003d\u003e {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" expect(response).toEqual(mockLabels);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" expect(labelService.labels).toEqual(parsedLabels);"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" expect(labelService.simpleLabels).toEqual(parsedLabels);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" });"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" expect(githubServiceSpy.fetchAllLabels).toHaveBeenCalled();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" });"},{"lineNumber":31,"author":{"gitId":"-"},"content":"});"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"describe(\u0027LabelService: parseLabelData()\u0027, () \u003d\u003e {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" beforeAll(() \u003d\u003e {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" labelService \u003d new LabelService(null);"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" labelList \u003d labelService.parseLabelData(LabelConstant.SEVERITY_LABELS);"},{"lineNumber":37,"author":{"gitId":"-"},"content":" });"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" afterAll(() \u003d\u003e {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" labelService \u003d null;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" });"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should be severity very low label\u0027, () \u003d\u003e {"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[0].name).toBe(LabelConstant.LABEL_NAME_SEVERITY_VERY_LOW);"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[0].color).toBe(LabelConstant.COLOR_SEVERITY_VERY_LOW);"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[0].definition).toBe(LabelConstant.DEFINITION_SEVERITY_VERY_LOW);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" });"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should be severity low label\u0027, () \u003d\u003e {"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[1].name).toBe(LabelConstant.LABEL_NAME_SEVERITY_LOW);"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[1].color).toBe(LabelConstant.COLOR_SEVERITY_LOW);"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[1].definition).toBe(LabelConstant.DEFINITION_SEVERITY_LOW);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" });"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should be severity medium label\u0027, () \u003d\u003e {"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[2].name).toBe(LabelConstant.LABEL_NAME_SEVERITY_MEDIUM);"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[2].color).toBe(LabelConstant.COLOR_SEVERITY_MEDIUM);"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[2].definition).toBe(LabelConstant.DEFINITION_SEVERITY_MEDIUM);"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should be severity high label\u0027, () \u003d\u003e {"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[3].name).toBe(LabelConstant.LABEL_NAME_SEVERITY_HIGH);"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[3].color).toBe(LabelConstant.COLOR_SEVERITY_HIGH);"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[3].definition).toBe(LabelConstant.DEFINITION_SEVERITY_HIGH);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" });"},{"lineNumber":66,"author":{"gitId":"-"},"content":"});"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"describe(\u0027LabelService: isDarkColor()\u0027, () \u003d\u003e {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" labelService \u003d new LabelService(null);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" });"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" afterEach(() \u003d\u003e {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" labelService \u003d null;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" });"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" it(\u0027should be true for dark color\u0027, () \u003d\u003e {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" expect(labelService.isDarkColor(LabelConstant.COLOR_BLACK)).toBeTruthy();"},{"lineNumber":79,"author":{"gitId":"-"},"content":" });"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" it(\u0027should be false for light color\u0027, () \u003d\u003e {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" expect(labelService.isDarkColor(LabelConstant.COLOR_WHITE)).toBeFalsy();"},{"lineNumber":83,"author":{"gitId":"-"},"content":" });"},{"lineNumber":84,"author":{"gitId":"-"},"content":"});"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":"describe(\u0027LabelService: setLabelStyle()\u0027, () \u003d\u003e {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" labelService \u003d new LabelService(null);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" });"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" afterEach(() \u003d\u003e {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" labelService \u003d null;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" });"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" it(\u0027should be dark color background with light color text\u0027, () \u003d\u003e {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" expect(labelService.setLabelStyle(LabelConstant.COLOR_BLACK)).toEqual(LabelConstant.DARK_BG_LIGHT_TEXT);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" });"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" it(\u0027should be light color background with dark color text\u0027, () \u003d\u003e {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" expect(labelService.setLabelStyle(LabelConstant.COLOR_WHITE)).toEqual(LabelConstant.LIGHT_BG_DARK_TEXT);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" });"},{"lineNumber":102,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":34,"-":68}},{"path":"tests/services/milestone.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"MadLamprey"},"content":"import { of } from \u0027rxjs\u0027;"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":"import { Milestone } from \u0027../../src/app/core/models/milestone.model\u0027;"},{"lineNumber":3,"author":{"gitId":"MadLamprey"},"content":"import { GithubService } from \u0027../../src/app/core/services/github.service\u0027;"},{"lineNumber":4,"author":{"gitId":"MadLamprey"},"content":"import { MilestoneService } from \u0027../../src/app/core/services/milestone.service\u0027;"},{"lineNumber":5,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":"let milestoneService: MilestoneService;"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":"let githubServiceSpy: jasmine.SpyObj\u003cGithubService\u003e;"},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":"describe(\u0027MilestoneService\u0027, () \u003d\u003e {"},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":11,"author":{"gitId":"MadLamprey"},"content":" githubServiceSpy \u003d jasmine.createSpyObj(\u0027GithubService\u0027, [\u0027fetchAllMilestones\u0027]);"},{"lineNumber":12,"author":{"gitId":"MadLamprey"},"content":" milestoneService \u003d new MilestoneService(githubServiceSpy);"},{"lineNumber":13,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":14,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":15,"author":{"gitId":"MadLamprey"},"content":" describe(\u0027MilestoneService: fetchMilestones()\u0027, () \u003d\u003e {"},{"lineNumber":16,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should fetch all milestones\u0027, (done) \u003d\u003e {"},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":" const mockMilestones \u003d [{ title: \u0027Milestone 1\u0027 }, { title: \u0027Milestone 2\u0027 }];"},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":" githubServiceSpy.fetchAllMilestones.and.returnValue(of(mockMilestones));"},{"lineNumber":19,"author":{"gitId":"MadLamprey"},"content":" milestoneService.fetchMilestones().subscribe((response) \u003d\u003e {"},{"lineNumber":20,"author":{"gitId":"MadLamprey"},"content":" expect(githubServiceSpy.fetchAllMilestones).toHaveBeenCalled();"},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.milestones.length).toBe(2);"},{"lineNumber":22,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.milestones[0].title).toBe(\u0027Milestone 1\u0027);"},{"lineNumber":23,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.hasNoMilestones).toBeFalse();"},{"lineNumber":24,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":25,"author":{"gitId":"MadLamprey"},"content":" done();"},{"lineNumber":26,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":27,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":28,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":29,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should handle no milestones\u0027, (done) \u003d\u003e {"},{"lineNumber":30,"author":{"gitId":"MadLamprey"},"content":" githubServiceSpy.fetchAllMilestones.and.returnValue(of([]));"},{"lineNumber":31,"author":{"gitId":"MadLamprey"},"content":" milestoneService.fetchMilestones().subscribe((response) \u003d\u003e {"},{"lineNumber":32,"author":{"gitId":"MadLamprey"},"content":" expect(githubServiceSpy.fetchAllMilestones).toHaveBeenCalled();"},{"lineNumber":33,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.milestones.length).toBe(0);"},{"lineNumber":34,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.hasNoMilestones).toBeTrue();"},{"lineNumber":35,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":36,"author":{"gitId":"MadLamprey"},"content":" done();"},{"lineNumber":37,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":38,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":39,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":40,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":41,"author":{"gitId":"MadLamprey"},"content":" describe(\u0027MilestoneService: parseMilestoneData()\u0027, () \u003d\u003e {"},{"lineNumber":42,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should parse milestone data correctly\u0027, () \u003d\u003e {"},{"lineNumber":43,"author":{"gitId":"MadLamprey"},"content":" const mockMilestones \u003d [{ title: \u0027Milestone 2\u0027 }, { title: \u0027Milestone 1\u0027 }];"},{"lineNumber":44,"author":{"gitId":"MadLamprey"},"content":" const parsedMilestones \u003d milestoneService.parseMilestoneData(mockMilestones);"},{"lineNumber":45,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":46,"author":{"gitId":"MadLamprey"},"content":" for (const milestone of parsedMilestones) {"},{"lineNumber":47,"author":{"gitId":"MadLamprey"},"content":" expect(milestone).toBeInstanceOf(Milestone);"},{"lineNumber":48,"author":{"gitId":"MadLamprey"},"content":" }"},{"lineNumber":49,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":50,"author":{"gitId":"MadLamprey"},"content":" expect(parsedMilestones.length).toBe(2);"},{"lineNumber":51,"author":{"gitId":"MadLamprey"},"content":" expect(parsedMilestones[0].title).toBe(\u0027Milestone 1\u0027);"},{"lineNumber":52,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":53,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":54,"author":{"gitId":"MadLamprey"},"content":"});"}],"authorContributionMap":{"MadLamprey":54}},{"path":"tests/services/user.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { GithubService } from \u0027../../src/app/core/services/github.service\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { LoggingService } from \u0027../../src/app/core/services/logging.service\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../../src/app/core/services/user.service\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { USER_JUNWEI } from \u0027../constants/data.constants\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"let githubServiceSpy: jasmine.SpyObj\u003cGithubService\u003e;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"let loggingServiceSpy: jasmine.SpyObj\u003cLoggingService\u003e;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"let userService: UserService;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"describe(\u0027UserService\u0027, () \u003d\u003e {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" beforeAll(() \u003d\u003e {"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy \u003d jasmine.createSpyObj(\u0027GithubService\u0027, [\u0027fetchAuthenticatedUser\u0027]);"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" loggingServiceSpy \u003d jasmine.createSpyObj(\u0027LoggingService\u0027, [\u0027info\u0027]);"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" userService \u003d new UserService(githubServiceSpy, loggingServiceSpy);"},{"lineNumber":15,"author":{"gitId":"-"},"content":" });"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027createUserModel(loginId)\u0027, () \u003d\u003e {"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should create a user correctly\u0027, async () \u003d\u003e {"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" const createdUser \u003d await userService.createUserModel(USER_JUNWEI.loginId).toPromise();"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" expect(createdUser).toEqual(USER_JUNWEI);"},{"lineNumber":21,"author":{"gitId":"-"},"content":" });"},{"lineNumber":22,"author":{"gitId":"-"},"content":" });"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027reset()\u0027, () \u003d\u003e {"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set current user as undefined\u0027, async () \u003d\u003e {"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" await userService.createUserModel(USER_JUNWEI.loginId).toPromise();"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" expect(userService.currentUser).toEqual(USER_JUNWEI);"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" userService.reset();"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" expect(loggingServiceSpy.info).toHaveBeenCalledWith(\u0027UserService: Clearing current user\u0027);"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" expect(userService.currentUser).toEqual(undefined);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" });"},{"lineNumber":34,"author":{"gitId":"-"},"content":" });"},{"lineNumber":35,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":20,"-":15}},{"path":"tests/services/view.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { of } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { STORAGE_KEYS } from \u0027../../src/app/core/constants/storage-keys.constants\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { Repo } from \u0027../../src/app/core/models/repo.model\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../../src/app/core/models/view.model\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { ErrorMessageService } from \u0027../../src/app/core/services/error-message.service\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { GithubService } from \u0027../../src/app/core/services/github.service\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { LoggingService } from \u0027../../src/app/core/services/logging.service\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import { RepoUrlCacheService } from \u0027../../src/app/core/services/repo-url-cache.service\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../../src/app/core/services/view.service\u0027;"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"import { CATCHER_REPO, WATCHER_REPO } from \u0027../constants/session.constants\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"let viewService: ViewService;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"let githubServiceSpy: jasmine.SpyObj\u003cGithubService\u003e;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"let repoUrlCacheServiceSpy: jasmine.SpyObj\u003cRepoUrlCacheService\u003e;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"let loggingServiceSpy: jasmine.SpyObj\u003cLoggingService\u003e;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"let routerSpy: jasmine.SpyObj\u003cRouter\u003e;"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"let activatedRouteSpy: jasmine.SpyObj\u003cActivatedRoute\u003e;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"describe(\u0027ViewService\u0027, () \u003d\u003e {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy \u003d jasmine.createSpyObj(\u0027GithubService\u0027, [\u0027isRepositoryPresent\u0027, \u0027storeViewDetails\u0027]);"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" activatedRouteSpy \u003d jasmine.createSpyObj(\u0027ActivatedRoute\u0027, [\u0027snapshot\u0027]);"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" routerSpy \u003d jasmine.createSpyObj(\u0027Router\u0027, [\u0027navigate\u0027]);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" repoUrlCacheServiceSpy \u003d jasmine.createSpyObj(\u0027RepoUrlCacheService\u0027, [\u0027cache\u0027]);"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" loggingServiceSpy \u003d jasmine.createSpyObj(\u0027LoggingService\u0027, [\u0027info\u0027]);"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" viewService \u003d new ViewService(githubServiceSpy, repoUrlCacheServiceSpy, loggingServiceSpy, activatedRouteSpy, routerSpy);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" });"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027setRepository(Repo, Repo[])\u0027, () \u003d\u003e {"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set the current repositories and update session data\u0027, () \u003d\u003e {"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" const repos: Repo[] \u003d [CATCHER_REPO];"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" viewService.setRepository(WATCHER_REPO, repos);"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentRepo).toEqual(WATCHER_REPO);"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.otherRepos).toEqual(repos);"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" const currentSessionRepo \u003d viewService.sessionData.sessionRepo.find((x) \u003d\u003e x.view \u003d\u003d\u003d viewService.currentView);"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" expect(currentSessionRepo?.repos).toEqual([WATCHER_REPO, CATCHER_REPO]);"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should store view details via githubService and update localStorage\u0027, () \u003d\u003e {"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" const localStorageSetItem \u003d spyOn(localStorage, \u0027setItem\u0027);"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" viewService.setRepository(WATCHER_REPO);"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" expect(githubServiceSpy.storeViewDetails).toHaveBeenCalledWith(WATCHER_REPO.owner, WATCHER_REPO.name);"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" expect(localStorageSetItem).toHaveBeenCalledWith(\u0027sessionData\u0027, JSON.stringify(viewService.sessionData));"},{"lineNumber":50,"author":{"gitId":"-"},"content":" });"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should navigate to the new repository\u0027, () \u003d\u003e {"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" viewService.setRepository(WATCHER_REPO);"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" expect(routerSpy.navigate).toHaveBeenCalledWith([\u0027issuesViewer\u0027], {"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" queryParams: { repo: WATCHER_REPO.toString() },"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":60,"author":{"gitId":"-"},"content":" });"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027changeRepositoryIfValid(Repo)\u0027, () \u003d\u003e {"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set isChangingRepo to true at the start and false at the end\u0027, async () \u003d\u003e {"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(true));"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" const isChangingRepoNextSpy \u003d spyOn(viewService.isChangingRepo, \u0027next\u0027);"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" spyOn(viewService, \u0027setRepository\u0027);"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" await viewService.changeRepositoryIfValid(WATCHER_REPO);"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" expect(isChangingRepoNextSpy.calls.first().args[0]).toBe(true);"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" expect(isChangingRepoNextSpy.calls.mostRecent().args[0]).toBe(false);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" });"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error if repository is not valid\u0027, async () \u003d\u003e {"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(false));"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" await expectAsync(viewService.changeRepositoryIfValid(WATCHER_REPO)).toBeRejectedWithError("},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" ErrorMessageService.repositoryNotPresentMessage()"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" );"},{"lineNumber":82,"author":{"gitId":"-"},"content":" });"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set and navigate to new repo if repo is valid\u0027, async () \u003d\u003e {"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(true));"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" const repoChanged$Spy \u003d spyOn(viewService.repoChanged$, \u0027next\u0027);"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" await viewService.changeRepositoryIfValid(WATCHER_REPO);"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" expect(loggingServiceSpy.info).toHaveBeenCalledWith(`ViewService: Changing current repository to \u0027${WATCHER_REPO}\u0027`);"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentRepo).toEqual(WATCHER_REPO);"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" expect(routerSpy.navigate).toHaveBeenCalledWith([\u0027issuesViewer\u0027], {"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" queryParams: { repo: WATCHER_REPO.toString() },"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" expect(repoUrlCacheServiceSpy.cache).toHaveBeenCalledWith(WATCHER_REPO.toString());"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" expect(repoChanged$Spy).toHaveBeenCalledWith(WATCHER_REPO);"},{"lineNumber":99,"author":{"gitId":"-"},"content":" });"},{"lineNumber":100,"author":{"gitId":"-"},"content":" });"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027initializeCurrentRepository()\u0027, () \u003d\u003e {"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" const org \u003d WATCHER_REPO.owner;"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" const repoName \u003d WATCHER_REPO.name;"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" const localStorageGetItemSpy \u003d spyOn(window.localStorage, \u0027getItem\u0027);"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" localStorageGetItemSpy.withArgs(STORAGE_KEYS.ORG).and.returnValue(org);"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" localStorageGetItemSpy.withArgs(STORAGE_KEYS.DATA_REPO).and.returnValue(repoName);"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set and navigate to new repo if repo is valid\u0027, async () \u003d\u003e {"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(true));"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" const repoSetSourceNext \u003d spyOn(viewService.repoSetSource, \u0027next\u0027);"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" await viewService.initializeCurrentRepository();"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" expect(loggingServiceSpy.info).toHaveBeenCalledWith(`ViewService: Repo is ${WATCHER_REPO}`);"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentRepo).toEqual(WATCHER_REPO);"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" expect(routerSpy.navigate).toHaveBeenCalledWith([\u0027issuesViewer\u0027], {"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" queryParams: { repo: WATCHER_REPO.toString() },"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027"},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" expect(repoSetSourceNext).toHaveBeenCalledWith(true);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" });"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error if repository is invalid\u0027, async () \u003d\u003e {"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(false));"},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" await expectAsync(viewService.initializeCurrentRepository()).toBeRejectedWithError(ErrorMessageService.repositoryNotPresentMessage());"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027changeView(View)\u0027, () \u003d\u003e {"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set current view\u0027, () \u003d\u003e {"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" viewService.setRepository(WATCHER_REPO);"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentView).toEqual(View.issuesViewer);"},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" viewService.changeView(View.activityDashboard);"},{"lineNumber":142,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentView).toEqual(View.activityDashboard);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" });"},{"lineNumber":145,"author":{"gitId":"-"},"content":" });"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" describe(\u0027.reset()\u0027, () \u003d\u003e {"},{"lineNumber":148,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should reset the currentView of the ViewService\u0027, () \u003d\u003e {"},{"lineNumber":149,"author":{"gitId":"NereusWB922"},"content":" viewService.currentView \u003d View.activityDashboard;"},{"lineNumber":150,"author":{"gitId":"NereusWB922"},"content":" viewService.reset();"},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentView).toBe(View.issuesViewer);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" });"},{"lineNumber":153,"author":{"gitId":"-"},"content":" });"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027setupFromUrl(url)\u0027, () \u003d\u003e {"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set items in local storage if url is valid\u0027, async () \u003d\u003e {"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":" const validUrl \u003d `/issuesViewer?repo\u003d${WATCHER_REPO.owner}%2F${WATCHER_REPO.name}`;"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" const localStorageSetItemSpy \u003d spyOn(window.localStorage, \u0027setItem\u0027);"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":" await viewService.setupFromUrl(validUrl).toPromise();"},{"lineNumber":161,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":" expect(localStorageSetItemSpy).toHaveBeenCalledWith(STORAGE_KEYS.ORG, WATCHER_REPO.owner);"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" expect(localStorageSetItemSpy).toHaveBeenCalledWith(STORAGE_KEYS.DATA_REPO, WATCHER_REPO.name);"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":165,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error for url without repo paramater\u0027, (done) \u003d\u003e {"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" const urlWithoutRepo \u003d \u0027/issuesViewer\u0027;"},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":169,"author":{"gitId":"NereusWB922"},"content":" viewService.setupFromUrl(urlWithoutRepo).subscribe({"},{"lineNumber":170,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e {"},{"lineNumber":171,"author":{"gitId":"NereusWB922"},"content":" expect(err).toEqual(new Error(ErrorMessageService.invalidUrlMessage()));"},{"lineNumber":172,"author":{"gitId":"NereusWB922"},"content":" done();"},{"lineNumber":173,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":174,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":175,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":176,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":177,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error for empty url\u0027, (done) \u003d\u003e {"},{"lineNumber":178,"author":{"gitId":"NereusWB922"},"content":" const emptyUrl \u003d \u0027\u0027;"},{"lineNumber":179,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":180,"author":{"gitId":"NereusWB922"},"content":" viewService.setupFromUrl(emptyUrl).subscribe({"},{"lineNumber":181,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e {"},{"lineNumber":182,"author":{"gitId":"NereusWB922"},"content":" expect(err).toEqual(new Error(ErrorMessageService.invalidUrlMessage()));"},{"lineNumber":183,"author":{"gitId":"NereusWB922"},"content":" done();"},{"lineNumber":184,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":185,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":186,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":187,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":188,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error for url with invalid repo format\u0027, (done) \u003d\u003e {"},{"lineNumber":189,"author":{"gitId":"NereusWB922"},"content":" const urlWithInvalidRepoFormat \u003d \u0027/issuesViewer?repo\u003dInvalidRepo\u0027;"},{"lineNumber":190,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":191,"author":{"gitId":"NereusWB922"},"content":" viewService.setupFromUrl(urlWithInvalidRepoFormat).subscribe({"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e {"},{"lineNumber":193,"author":{"gitId":"NereusWB922"},"content":" expect(err).toEqual(new Error(ErrorMessageService.repositoryNotPresentMessage()));"},{"lineNumber":194,"author":{"gitId":"NereusWB922"},"content":" done();"},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":199,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":175,"-":24}}] +[{"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/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 { ActivityDashboardModule } from \u0027./activity-dashboard/activity-dashboard.module\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { AuthModule } from \u0027./auth/auth.module\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { AuthGuard } from \u0027./core/guards/auth.guard\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { ParseUrlParamsGuard } from \u0027./core/guards/parse-url-params.guard\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { IssuesViewerModule } from \u0027./issues-viewer/issues-viewer.module\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"const routes: Routes \u003d ["},{"lineNumber":10,"author":{"gitId":"-"},"content":" { path: \u0027\u0027, loadChildren: () \u003d\u003e AuthModule },"},{"lineNumber":11,"author":{"gitId":"-"},"content":" { path: \u0027issuesViewer/:org/:repo\u0027, canActivate: [ParseUrlParamsGuard], children: [] },"},{"lineNumber":12,"author":{"gitId":"-"},"content":" { path: \u0027issuesViewer\u0027, loadChildren: () \u003d\u003e IssuesViewerModule, canLoad: [AuthGuard] },"},{"lineNumber":13,"author":{"gitId":"-"},"content":" { path: \u0027activityDashboard\u0027, loadChildren: () \u003d\u003e ActivityDashboardModule, canLoad: [AuthGuard] }"},{"lineNumber":14,"author":{"gitId":"-"},"content":"];"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"@NgModule({"},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":" imports: [RouterModule.forRoot(routes, { relativeLinkResolution: \u0027legacy\u0027 })],"},{"lineNumber":18,"author":{"gitId":"-"},"content":" exports: [RouterModule]"},{"lineNumber":19,"author":{"gitId":"-"},"content":"})"},{"lineNumber":20,"author":{"gitId":"-"},"content":"export class AppRoutingModule {}"}],"authorContributionMap":{"MadLamprey":1,"-":19}},{"path":"src/app/app.module.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { HttpClientModule } from \u0027@angular/common/http\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { ErrorHandler, NgModule, NgZone } from \u0027@angular/core\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { BrowserModule, Title } from \u0027@angular/platform-browser\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { BrowserAnimationsModule } from \u0027@angular/platform-browser/animations\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { Router } from \u0027@angular/router\u0027;"},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":"import { ApolloLink, InMemoryCache, PossibleTypesMap } from \u0027@apollo/client/core\u0027;"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":"import { setContext } from \u0027@apollo/client/link/context\u0027;"},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":"import { Apollo } from \u0027apollo-angular\u0027;"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":"import { HttpLink } from \u0027apollo-angular/http\u0027;"},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import \u0027reflect-metadata\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import graphqlTypes from \u0027../../graphql/graphql-types\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import \u0027../polyfills\u0027;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import { ActivityDashboardModule } from \u0027./activity-dashboard/activity-dashboard.module\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { AppRoutingModule } from \u0027./app-routing.module\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { AppComponent } from \u0027./app.component\u0027;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import { AuthModule } from \u0027./auth/auth.module\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import { UserConfirmationComponent } from \u0027./core/guards/user-confirmation/user-confirmation.component\u0027;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import { AuthService } from \u0027./core/services/auth.service\u0027;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027./core/services/error-handling.service\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027./core/services/error-message.service\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import { AuthServiceFactory } from \u0027./core/services/factories/factory.auth.service\u0027;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import { GithubServiceFactory } from \u0027./core/services/factories/factory.github.service\u0027;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import { IssueServiceFactory } from \u0027./core/services/factories/factory.issue.service\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./core/services/github.service\u0027;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027./core/services/githubevent.service\u0027;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027./core/services/issue.service\u0027;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027./core/services/label.service\u0027;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027./core/services/logging.service\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import { RepoSessionStorageService } from \u0027./core/services/repo-session-storage.service\u0027;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import { UserService } from \u0027./core/services/user.service\u0027;"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027./core/services/view.service\u0027;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import { IssuesViewerModule } from \u0027./issues-viewer/issues-viewer.module\u0027;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import { LabelDefinitionPopupComponent } from \u0027./shared/label-definition-popup/label-definition-popup.component\u0027;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import { HeaderComponent } from \u0027./shared/layout\u0027;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import { RepoChangeFormComponent } from \u0027./shared/repo-change-form/repo-change-form.component\u0027;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import { SharedModule } from \u0027./shared/shared.module\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"@NgModule({"},{"lineNumber":40,"author":{"gitId":"Arif-Khalid"},"content":" declarations: [AppComponent, HeaderComponent, UserConfirmationComponent, LabelDefinitionPopupComponent, RepoChangeFormComponent],"},{"lineNumber":41,"author":{"gitId":"-"},"content":" imports: ["},{"lineNumber":42,"author":{"gitId":"-"},"content":" BrowserModule,"},{"lineNumber":43,"author":{"gitId":"-"},"content":" BrowserAnimationsModule,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" AuthModule,"},{"lineNumber":45,"author":{"gitId":"-"},"content":" IssuesViewerModule,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ActivityDashboardModule,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" SharedModule,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" HttpClientModule,"},{"lineNumber":49,"author":{"gitId":"MadLamprey"},"content":" AppRoutingModule"},{"lineNumber":50,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":51,"author":{"gitId":"-"},"content":" providers: ["},{"lineNumber":52,"author":{"gitId":"-"},"content":" {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" provide: GithubService,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" useFactory: GithubServiceFactory,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" deps: [ErrorHandlingService, Apollo, LoggingService]"},{"lineNumber":56,"author":{"gitId":"-"},"content":" },"},{"lineNumber":57,"author":{"gitId":"-"},"content":" {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" provide: AuthService,"},{"lineNumber":59,"author":{"gitId":"-"},"content":" useFactory: AuthServiceFactory,"},{"lineNumber":60,"author":{"gitId":"-"},"content":" deps: ["},{"lineNumber":61,"author":{"gitId":"-"},"content":" Router,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" NgZone,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" GithubService,"},{"lineNumber":64,"author":{"gitId":"-"},"content":" UserService,"},{"lineNumber":65,"author":{"gitId":"-"},"content":" IssueService,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" LabelService,"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" ViewService,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" GithubEventService,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" Title,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" ErrorHandlingService,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" LoggingService"},{"lineNumber":72,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":73,"author":{"gitId":"-"},"content":" },"},{"lineNumber":74,"author":{"gitId":"-"},"content":" {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" provide: IssueService,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" useFactory: IssueServiceFactory,"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" deps: [GithubService, UserService, ViewService]"},{"lineNumber":78,"author":{"gitId":"-"},"content":" },"},{"lineNumber":79,"author":{"gitId":"-"},"content":" {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" provide: ErrorHandler,"},{"lineNumber":81,"author":{"gitId":"-"},"content":" useClass: ErrorHandlingService"},{"lineNumber":82,"author":{"gitId":"-"},"content":" },"},{"lineNumber":83,"author":{"gitId":"-"},"content":" ErrorMessageService,"},{"lineNumber":84,"author":{"gitId":"-"},"content":" RepoSessionStorageService"},{"lineNumber":85,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":86,"author":{"gitId":"-"},"content":" bootstrap: [AppComponent]"},{"lineNumber":87,"author":{"gitId":"-"},"content":"})"},{"lineNumber":88,"author":{"gitId":"-"},"content":"export class AppModule {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" constructor(private apollo: Apollo, private httpLink: HttpLink, private authService: AuthService, private logger: LoggingService) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" const URI \u003d \u0027https://api.github.com/graphql\u0027;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" const log \u003d new ApolloLink((operation, forward) \u003d\u003e {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" operation.setContext({ start: performance.now() });"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AppModule: GraphQL request\u0027, operation.getContext());"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return forward(operation).map((result) \u003d\u003e {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" const time \u003d performance.now() - operation.getContext().start;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AppModule: GraphQL response\u0027, operation.getContext(), `in ${Math.round(time)}ms`);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" const repo \u003d operation.getContext().response.body.data.repository;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" const item \u003d Object.keys(repo)[0];"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.logger.debug(\u0027AppModule: GraphQL response body\u0027, item, repo[item].edges.length, repo[item].edges);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" return result;"},{"lineNumber":101,"author":{"gitId":"-"},"content":" });"},{"lineNumber":102,"author":{"gitId":"-"},"content":" });"},{"lineNumber":103,"author":{"gitId":"-"},"content":" const basic \u003d setContext(() \u003d\u003e {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" return { headers: { Accept: \u0027charset\u003dutf-8\u0027 } };"},{"lineNumber":105,"author":{"gitId":"-"},"content":" });"},{"lineNumber":106,"author":{"gitId":"-"},"content":" const auth \u003d setContext(() \u003d\u003e {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" return { headers: { Authorization: `Token ${this.authService.accessToken.getValue()}` } };"},{"lineNumber":108,"author":{"gitId":"-"},"content":" });"},{"lineNumber":109,"author":{"gitId":"-"},"content":" const link \u003d ApolloLink.from([log, basic, auth, this.httpLink.create({ uri: URI })]);"},{"lineNumber":110,"author":{"gitId":"MadLamprey"},"content":" const possibleTypes: PossibleTypesMap \u003d {};"},{"lineNumber":111,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":112,"author":{"gitId":"MadLamprey"},"content":" graphqlTypes.__schema.types.forEach((type: any) \u003d\u003e {"},{"lineNumber":113,"author":{"gitId":"MadLamprey"},"content":" if (type.kind \u003d\u003d\u003d \u0027UNION\u0027 || type.kind \u003d\u003d\u003d \u0027INTERFACE\u0027) {"},{"lineNumber":114,"author":{"gitId":"MadLamprey"},"content":" possibleTypes[type.name] \u003d type.possibleTypes.map((possibleType: any) \u003d\u003e possibleType.name);"},{"lineNumber":115,"author":{"gitId":"MadLamprey"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":" });"},{"lineNumber":117,"author":{"gitId":"MadLamprey"},"content":" const cache \u003d new InMemoryCache({ possibleTypes });"},{"lineNumber":118,"author":{"gitId":"-"},"content":" this.apollo.create({"},{"lineNumber":119,"author":{"gitId":"-"},"content":" link: link,"},{"lineNumber":120,"author":{"gitId":"-"},"content":" cache: cache"},{"lineNumber":121,"author":{"gitId":"-"},"content":" });"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":3,"Arif-Khalid":1,"MadLamprey":13,"-":106}},{"path":"src/app/auth/auth.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, NgZone, OnDestroy, OnInit } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Observable, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { filter, flatMap, map } from \u0027rxjs/operators\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { AppConfig } from \u0027../../environments/environment\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { STORAGE_KEYS } from \u0027../core/constants/storage-keys.constants\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { GithubUser } from \u0027../core/models/github-user.model\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { ApplicationService } from \u0027../core/services/application.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { AuthService, AuthState } from \u0027../core/services/auth.service\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../core/services/error-handling.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027../core/services/error-message.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../core/services/logging.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../core/services/user.service\u0027;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../core/services/view.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":17,"author":{"gitId":"-"},"content":" selector: \u0027app-auth\u0027,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" templateUrl: \u0027./auth.component.html\u0027,"},{"lineNumber":19,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./auth.component.css\u0027]"},{"lineNumber":20,"author":{"gitId":"-"},"content":"})"},{"lineNumber":21,"author":{"gitId":"-"},"content":"export class AuthComponent implements OnInit, OnDestroy {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" authState: AuthState;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" accessTokenSubscription: Subscription;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" authStateSubscription: Subscription;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" currentUserName: string;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" urlEncodedSessionName: string;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" urlEncodedRepo: string;"},{"lineNumber":28,"author":{"gitId":"-"},"content":" sessionInformation: string;"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":31,"author":{"gitId":"-"},"content":" public appService: ApplicationService,"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private authService: AuthService,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private userService: UserService,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private errorHandlingService: ErrorHandlingService,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private router: Router,"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" private viewService: ViewService,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private ngZone: NgZone,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private activatedRoute: ActivatedRoute,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private logger: LoggingService"},{"lineNumber":40,"author":{"gitId":"-"},"content":" ) {}"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.logger.startSession();"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" const oauthCode \u003d this.activatedRoute.snapshot.queryParamMap.get(\u0027code\u0027);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" const state \u003d this.activatedRoute.snapshot.queryParamMap.get(\u0027state\u0027);"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" if (this.authService.isAuthenticated()) {"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" this.router.navigate([this.viewService.currentView]);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":" this.initAccessTokenSubscription();"},{"lineNumber":53,"author":{"gitId":"-"},"content":" this.initAuthStateSubscription();"},{"lineNumber":54,"author":{"gitId":"-"},"content":" this.createProfileFromUrlQueryParams();"},{"lineNumber":55,"author":{"gitId":"-"},"content":" this.getRepoFromUrlQueryParams();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" if (oauthCode) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" // runs upon receiving oauthCode from the redirect"},{"lineNumber":58,"author":{"gitId":"-"},"content":" this.authService.changeAuthState(AuthState.AwaitingAuthentication);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" // this.restoreOrgDetailsFromLocalStorage();"},{"lineNumber":60,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AuthComponent: Obtained authorisation code from Github\u0027);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.fetchAccessToken(oauthCode, state);"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" return;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" this.authService.startOAuthIfHasNext();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Will fetch the access token from GitHub."},{"lineNumber":69,"author":{"gitId":"-"},"content":" * @param oauthCode - The authorisation code obtained from GitHub."},{"lineNumber":70,"author":{"gitId":"-"},"content":" * @param state - The state returned from GitHub."},{"lineNumber":71,"author":{"gitId":"-"},"content":" */"},{"lineNumber":72,"author":{"gitId":"-"},"content":" fetchAccessToken(oauthCode: string, state: string) {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" if (!this.authService.isReturnedStateSame(state)) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" this.logger.info(`AuthComponent: Received incorrect state ${state}, continue waiting for correct state`);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" this.logger.info(`AuthComponent: Retrieving access token from Github`);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" const accessTokenUrl \u003d `${AppConfig.accessTokenUrl}/${oauthCode}/client_id/${AppConfig.clientId}`;"},{"lineNumber":81,"author":{"gitId":"-"},"content":" fetch(accessTokenUrl)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" .then((res) \u003d\u003e res.json())"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .then((data) \u003d\u003e {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" if (data.error) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" throw new Error(data.error);"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" this.authService.storeOAuthAccessToken(data.token);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" this.logger.info(`AuthComponent: Sucessfully obtained access token`);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" })"},{"lineNumber":90,"author":{"gitId":"-"},"content":" .catch((err) \u003d\u003e {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" this.logger.info(`AuthComponent: Error in data fetched from access token URL: ${err}`);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(err);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.authService.changeAuthState(AuthState.NotAuthenticated);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" });"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" ngOnDestroy() {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" if (this.authStateSubscription) {"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.authStateSubscription.unsubscribe();"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":" if (this.accessTokenSubscription) {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" this.accessTokenSubscription.unsubscribe();"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Checks whether the current version of WATcher is outdated."},{"lineNumber":108,"author":{"gitId":"-"},"content":" */"},{"lineNumber":109,"author":{"gitId":"-"},"content":" checkAppIsOutdated(): Observable\u003cany\u003e {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return this.appService.isApplicationOutdated().pipe("},{"lineNumber":111,"author":{"gitId":"-"},"content":" map((isOutdated: boolean) \u003d\u003e {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" if (isOutdated) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.applicationVersionOutdatedMessage());"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":" })"},{"lineNumber":116,"author":{"gitId":"-"},"content":" );"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" updateSession(sessionEvent: string) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" this.sessionInformation \u003d sessionEvent;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" goToSessionSelect() {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" this.authService.changeAuthState(AuthState.NotAuthenticated);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" isUserNotAuthenticated(): boolean {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" return this.authState \u003d\u003d\u003d AuthState.NotAuthenticated;"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" isUserAuthenticating(): boolean {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return this.authState \u003d\u003d\u003d AuthState.AwaitingAuthentication;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" isAwaitingOAuthUserConfirm(): boolean {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" return this.authState \u003d\u003d\u003d AuthState.ConfirmOAuthUser;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" isUserAuthenticated(): boolean {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" return this.authState \u003d\u003d\u003d AuthState.Authenticated;"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" isRepoSet(): boolean {"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" return this.viewService.isRepoSet();"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" get currentSessionOrg(): string {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" if (!this.sessionInformation) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" // Retrieve org details of session information from local storage"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return window.localStorage.getItem(STORAGE_KEYS.ORG);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return this.getOrgDetails(this.sessionInformation);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Extracts the Organization Details from the input sessionInformation."},{"lineNumber":157,"author":{"gitId":"-"},"content":" * @param sessionInformation - string in the format of \u0027orgName/dataRepo\u0027"},{"lineNumber":158,"author":{"gitId":"-"},"content":" */"},{"lineNumber":159,"author":{"gitId":"-"},"content":" private getOrgDetails(sessionInformation: string) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return sessionInformation.split(\u0027/\u0027)[0];"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" private initAuthStateSubscription() {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" this.authStateSubscription \u003d this.authService.currentAuthState.subscribe((state) \u003d\u003e {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" this.ngZone.run(() \u003d\u003e {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" this.authState \u003d state;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" });"},{"lineNumber":168,"author":{"gitId":"-"},"content":" });"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" private initAccessTokenSubscription() {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" this.accessTokenSubscription \u003d this.authService.accessToken"},{"lineNumber":173,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":174,"author":{"gitId":"-"},"content":" filter((token: string) \u003d\u003e !!token),"},{"lineNumber":175,"author":{"gitId":"-"},"content":" flatMap(() \u003d\u003e this.userService.getAuthenticatedUser())"},{"lineNumber":176,"author":{"gitId":"-"},"content":" )"},{"lineNumber":177,"author":{"gitId":"-"},"content":" .subscribe((user: GithubUser) \u003d\u003e {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" this.ngZone.run(() \u003d\u003e {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" this.currentUserName \u003d user.login;"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" if (this.authService.hasNext()) {"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" this.authService.completeLoginIfHasNext(this.currentUserName);"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" this.authService.changeAuthState(AuthState.ConfirmOAuthUser);"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":" });"},{"lineNumber":186,"author":{"gitId":"-"},"content":" });"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" private createProfileFromUrlQueryParams() {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" const urlParams \u003d this.activatedRoute.snapshot.queryParamMap;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" if (urlParams.has(\u0027session\u0027)) {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" this.urlEncodedSessionName \u003d urlParams.get(\u0027session\u0027);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" private getRepoFromUrlQueryParams() {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" const urlParams \u003d this.activatedRoute.snapshot.queryParamMap;"},{"lineNumber":198,"author":{"gitId":"-"},"content":" if (urlParams.has(\u0027repo\u0027)) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" this.urlEncodedRepo \u003d urlParams.get(\u0027repo\u0027);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }"},{"lineNumber":202,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":6,"NereusWB922":4,"-":192}},{"path":"src/app/core/guards/auth.guard.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { ActivatedRouteSnapshot, CanActivate, CanLoad, Route, Router, RouterStateSnapshot, UrlSegment } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { AuthService } from \u0027../services/auth.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":7,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":8,"author":{"gitId":"-"},"content":"})"},{"lineNumber":9,"author":{"gitId":"-"},"content":"export class AuthGuard implements CanActivate, CanLoad {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" constructor(private auth: AuthService, private router: Router) {}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":" canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable\u003cboolean\u003e | Promise\u003cboolean\u003e | boolean {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" if (this.auth.isAuthenticated()) {"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" this.auth.clearNext();"},{"lineNumber":15,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" this.auth.storeNext(state);"},{"lineNumber":18,"author":{"gitId":"-"},"content":" this.router.navigate([\u0027\u0027]);"},{"lineNumber":19,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" }"},{"lineNumber":21,"author":{"gitId":"-"},"content":" }"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" canLoad(route: Route, segments: UrlSegment[]): Observable\u003cboolean\u003e | Promise\u003cboolean\u003e | boolean {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" if (this.auth.isAuthenticated()) {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.router.navigate([\u0027\u0027]);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":2,"-":29}},{"path":"src/app/core/models/github-user.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027./github/group.interface\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Represents raw data returned from the GitHub API about a user."},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"export interface RawGithubUser {"},{"lineNumber":7,"author":{"gitId":"-"},"content":" avatar_url: string;"},{"lineNumber":8,"author":{"gitId":"-"},"content":" created_at: string;"},{"lineNumber":9,"author":{"gitId":"-"},"content":" html_url: string;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" login: string;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" name: string;"},{"lineNumber":12,"author":{"gitId":"-"},"content":" node_id: string;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" two_factor_authentication: boolean;"},{"lineNumber":14,"author":{"gitId":"-"},"content":" site_admin: false;"},{"lineNumber":15,"author":{"gitId":"-"},"content":" type: string;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" updated_at: string;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" url: string;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * Represents a GitHub user in WATcher"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"export class GithubUser implements RawGithubUser, Group {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" static NO_ASSIGNEE: GithubUser \u003d new GithubUser({"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" avatar_url: \u0027\u0027,"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" created_at: \u0027\u0027,"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" html_url: \u0027\u0027,"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" login: \u0027Unassigned\u0027,"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" name: \u0027\u0027,"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" node_id: \u0027\u0027,"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" two_factor_authentication: false,"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" site_admin: false,"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" type: \u0027\u0027,"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u0027\u0027,"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" url: \u0027\u0027"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" avatar_url: string;"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" created_at: string;"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" html_url: string;"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" login: string;"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" name: string;"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" node_id: string;"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" two_factor_authentication: boolean;"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" site_admin: false;"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" type: string;"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" updated_at: string;"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" url: string;"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" constructor(rawData: RawGithubUser) {"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" Object.assign(this, rawData);"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" equals(other: any) {"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" if (!(other instanceof GithubUser)) {"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" return false;"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" return this.login \u003d\u003d\u003d other.login;"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":48,"-":12}},{"path":"src/app/core/models/github/group.interface.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" * Represents a group used for grouping purposes."},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" * Groups can be used to organize issues/prs based on certain criteria,"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * such as milestones, assignees, or other properties."},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"export interface Group {"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" equals(other: any): boolean;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":8}},{"path":"src/app/core/models/issue.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import * as moment from \u0027moment\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { GithubComment } from \u0027./github/github-comment.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { GithubIssue } from \u0027./github/github-issue.model\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { GithubLabel } from \u0027./github/github-label.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { HiddenData } from \u0027./hidden-data.model\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Milestone } from \u0027./milestone.model\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"export class Issue {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" /** Basic Fields */"},{"lineNumber":10,"author":{"gitId":"-"},"content":" readonly globalId: string;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" readonly id: number;"},{"lineNumber":12,"author":{"gitId":"-"},"content":" readonly created_at: string;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" readonly githubIssue: GithubIssue;"},{"lineNumber":14,"author":{"gitId":"-"},"content":" githubComments: GithubComment[];"},{"lineNumber":15,"author":{"gitId":"-"},"content":" title: string;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" description: string;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" hiddenDataInDescription: HiddenData;"},{"lineNumber":18,"author":{"gitId":"-"},"content":" updated_at: string;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" closed_at: string;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" milestone: Milestone;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" state: string;"},{"lineNumber":22,"author":{"gitId":"-"},"content":" stateReason: string;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" issueOrPr: string;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" author: string;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" isDraft: boolean;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" /** Depending on the view, assignees attribute can be derived from Github\u0027s assignee feature OR from the Github\u0027s issue description */"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assignees?: string[];"},{"lineNumber":29,"author":{"gitId":"-"},"content":" labels?: string[];"},{"lineNumber":30,"author":{"gitId":"-"},"content":" githubLabels?: GithubLabel[];"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Formats the text to create space at the end of the user input to prevent any issues with"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * the markdown interpretation."},{"lineNumber":35,"author":{"gitId":"-"},"content":" *"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Brought over from comment-editor.component.ts"},{"lineNumber":37,"author":{"gitId":"-"},"content":" */"},{"lineNumber":38,"author":{"gitId":"-"},"content":" static formatText(text: string): string {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" if (text \u003d\u003d\u003d null) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" if (text \u003d\u003d\u003d undefined) {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return undefined;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" const newLinesRegex \u003d /[\\n\\r]/gi;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" const textSplitArray \u003d text.split(newLinesRegex);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" if (textSplitArray.filter((split) \u003d\u003e split.trim() !\u003d\u003d \u0027\u0027).length \u003e 0) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return `${text}\\n\\n`;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return text;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Processes and cleans a raw issue description obtained from user input."},{"lineNumber":58,"author":{"gitId":"-"},"content":" */"},{"lineNumber":59,"author":{"gitId":"-"},"content":" static updateDescription(description: string): string {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" const defaultString \u003d \u0027No details provided by bug reporter.\u0027;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return Issue.orDefaultString(Issue.formatText(description), defaultString);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Given two strings, returns the first if it is not an empty string or a false value such as null/undefined."},{"lineNumber":66,"author":{"gitId":"-"},"content":" * Returns the second string if the first is an empty string."},{"lineNumber":67,"author":{"gitId":"-"},"content":" */"},{"lineNumber":68,"author":{"gitId":"-"},"content":" private static orDefaultString(stringA: string, def: string): string {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" if (!stringA) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return def;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return stringA.length !\u003d\u003d 0 ? stringA : def;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" protected constructor(githubIssue: GithubIssue) {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" /** Basic Fields */"},{"lineNumber":77,"author":{"gitId":"-"},"content":" this.globalId \u003d githubIssue.id;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" this.id \u003d +githubIssue.number;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.created_at \u003d moment(githubIssue.created_at).format(\u0027lll\u0027);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" this.updated_at \u003d moment(githubIssue.updated_at).format(\u0027lll\u0027);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" this.closed_at \u003d moment(githubIssue.closed_at).format(\u0027lll\u0027);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.title \u003d githubIssue.title;"},{"lineNumber":83,"author":{"gitId":"-"},"content":" this.hiddenDataInDescription \u003d new HiddenData(githubIssue.body);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" this.description \u003d Issue.updateDescription(this.hiddenDataInDescription.originalStringWithoutHiddenData);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.state \u003d githubIssue.state;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.stateReason \u003d githubIssue.stateReason;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" this.issueOrPr \u003d githubIssue.issueOrPr;"},{"lineNumber":88,"author":{"gitId":"-"},"content":" this.author \u003d githubIssue.user.login;"},{"lineNumber":89,"author":{"gitId":"-"},"content":" // this.githubIssue \u003d githubIssue;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" this.isDraft \u003d githubIssue.isDraft;"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" this.assignees \u003d githubIssue.assignees.map((assignee) \u003d\u003e assignee.login);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.githubLabels \u003d githubIssue.labels;"},{"lineNumber":94,"author":{"gitId":"-"},"content":" this.labels \u003d githubIssue.labels.map((label) \u003d\u003e label.name);"},{"lineNumber":95,"author":{"gitId":"MadLamprey"},"content":" this.milestone \u003d githubIssue.milestone"},{"lineNumber":96,"author":{"gitId":"MadLamprey"},"content":" ? new Milestone(githubIssue.milestone)"},{"lineNumber":97,"author":{"gitId":"MadLamprey"},"content":" : this.issueOrPr \u003d\u003d\u003d \u0027Issue\u0027"},{"lineNumber":98,"author":{"gitId":"MadLamprey"},"content":" ? Milestone.IssueWithoutMilestone"},{"lineNumber":99,"author":{"gitId":"MadLamprey"},"content":" : Milestone.PRWithoutMilestone;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" public static createPhaseBugReportingIssue(githubIssue: GithubIssue): Issue {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return new Issue(githubIssue);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" createGithubIssueDescription(): string {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" return `${this.description}\\n${this.hiddenDataInDescription.toString()}`;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":"}"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":"export interface Issues {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" [id: number]: Issue;"},{"lineNumber":113,"author":{"gitId":"-"},"content":"}"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":"export const IssuesFilter \u003d {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" issuesViewer: {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" Student: \u0027NO_FILTER\u0027,"},{"lineNumber":118,"author":{"gitId":"-"},"content":" Tutor: \u0027NO_FILTER\u0027,"},{"lineNumber":119,"author":{"gitId":"-"},"content":" Admin: \u0027NO_FILTER\u0027"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"NereusWB922":1,"MadLamprey":5,"-":115}},{"path":"src/app/core/models/label.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":2,"author":{"gitId":"-"},"content":" * Represents a label and its attributes."},{"lineNumber":3,"author":{"gitId":"-"},"content":" */"},{"lineNumber":4,"author":{"gitId":"-"},"content":"export class Label implements SimpleLabel {"},{"lineNumber":5,"author":{"gitId":"-"},"content":" readonly name: string;"},{"lineNumber":6,"author":{"gitId":"-"},"content":" color: string;"},{"lineNumber":7,"author":{"gitId":"-"},"content":" definition?: string;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":" constructor(label: { name: string; color: string; definition?: string }) {"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" this.name \u003d label.name;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" this.color \u003d label.color;"},{"lineNumber":12,"author":{"gitId":"-"},"content":" this.definition \u003d label.definition;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" }"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Represents a simplified label with name and color"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"export type SimpleLabel \u003d {"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" name: string;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" color: string;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"nknguyenhc":2,"-":20}},{"path":"src/app/core/models/milestone.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027./github/group.interface\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":4,"author":{"gitId":"-"},"content":" * Represents a milestone and its attributes fetched from Github."},{"lineNumber":5,"author":{"gitId":"-"},"content":" */"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"export class Milestone implements Group {"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":" static IssueWithoutMilestone: Milestone \u003d new Milestone({ title: \u0027Issue without a milestone\u0027, state: null });"},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":" static PRWithoutMilestone: Milestone \u003d new Milestone({ title: \u0027PR without a milestone\u0027, state: null });"},{"lineNumber":9,"author":{"gitId":"-"},"content":" title: string;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" state: string;"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" deadline?: Date;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" constructor(milestone: { title: string; state: string; due_on?: string }) {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" this.title \u003d milestone.title;"},{"lineNumber":15,"author":{"gitId":"-"},"content":" this.state \u003d milestone.state;"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" this.deadline \u003d milestone.due_on ? new Date(milestone.due_on) : undefined;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" }"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" public equals(other: any) {"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" if (!(other instanceof Milestone)) {"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" return false;"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" return this.title \u003d\u003d\u003d other.title;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":3,"NereusWB922":8,"MadLamprey":2,"-":12}},{"path":"src/app/core/models/repo-change-response.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"/**"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":" * Represents the response of the repo-change-form component"},{"lineNumber":3,"author":{"gitId":"Arif-Khalid"},"content":" */"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":"export type RepoChangeResponse \u003d {"},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":" repo: string;"},{"lineNumber":6,"author":{"gitId":"Arif-Khalid"},"content":" keepFilters: boolean;"},{"lineNumber":7,"author":{"gitId":"Arif-Khalid"},"content":"};"}],"authorContributionMap":{"Arif-Khalid":7}},{"path":"src/app/core/models/session.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { pipe } from \u0027rxjs\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { throwIfFalse } from \u0027../../shared/lib/custom-ops\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Repo } from \u0027./repo.model\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027./view.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * Session repository comprises the view and its corresponding repository array."},{"lineNumber":8,"author":{"gitId":"-"},"content":" */"},{"lineNumber":9,"author":{"gitId":"-"},"content":"export interface SessionRepo {"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" view: View;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" repos: Repo[];"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * Session data comprises an array of session repositories."},{"lineNumber":16,"author":{"gitId":"-"},"content":" */"},{"lineNumber":17,"author":{"gitId":"-"},"content":"export interface SessionData {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" sessionRepo: SessionRepo[];"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"export const SESSION_DATA_UNAVAILABLE \u003d \u0027Session data does not exist.\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"export const SESSION_DATA_MISSING_FIELDS \u003d \u0027Session data does not contain any repositories.\u0027;"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"export const NO_VALID_OPEN_VIEWS \u003d \u0027Invalid views in Session data.\u0027;"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"export const OPENED_VIEW_REPO_UNDEFINED \u003d \u0027View has no repo defined.\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"export function assertSessionDataIntegrity() {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" return pipe("},{"lineNumber":28,"author":{"gitId":"-"},"content":" throwIfFalse("},{"lineNumber":29,"author":{"gitId":"-"},"content":" (sessionData) \u003d\u003e sessionData !\u003d\u003d undefined,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" () \u003d\u003e new Error(SESSION_DATA_UNAVAILABLE)"},{"lineNumber":31,"author":{"gitId":"-"},"content":" ),"},{"lineNumber":32,"author":{"gitId":"-"},"content":" throwIfFalse(hasSessionRepo, () \u003d\u003e new Error(SESSION_DATA_MISSING_FIELDS)),"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" throwIfFalse(areViewsValid, () \u003d\u003e new Error(NO_VALID_OPEN_VIEWS)),"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" throwIfFalse(areReposDefined, () \u003d\u003e new Error(OPENED_VIEW_REPO_UNDEFINED))"},{"lineNumber":35,"author":{"gitId":"-"},"content":" );"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Checks if Session Data has all its crucial fields present."},{"lineNumber":40,"author":{"gitId":"-"},"content":" * @param sessionData"},{"lineNumber":41,"author":{"gitId":"-"},"content":" */"},{"lineNumber":42,"author":{"gitId":"-"},"content":"function hasSessionRepo(sessionData: SessionData): boolean {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return sessionData.sessionRepo !\u003d null \u0026\u0026 Array.isArray(sessionData.sessionRepo) \u0026\u0026 sessionData.sessionRepo.length \u003e 0;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * Checks if Views belong to a pre-defined View."},{"lineNumber":48,"author":{"gitId":"-"},"content":" * @param sessionData"},{"lineNumber":49,"author":{"gitId":"-"},"content":" */"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":"function areViewsValid(sessionData: SessionData): boolean {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return sessionData.sessionRepo.reduce("},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" (isViewValidSoFar: boolean, currentViewRepo: SessionRepo) \u003d\u003e isViewValidSoFar \u0026\u0026 currentViewRepo.view in View,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" true"},{"lineNumber":54,"author":{"gitId":"-"},"content":" );"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" * Checks if each View has an associated repo defined as well."},{"lineNumber":59,"author":{"gitId":"-"},"content":" * @param sessionData"},{"lineNumber":60,"author":{"gitId":"-"},"content":" */"},{"lineNumber":61,"author":{"gitId":"-"},"content":"function areReposDefined(sessionData: SessionData): boolean {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" return sessionData.sessionRepo.reduce("},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" (isViewRepoDefinedSoFar: boolean, currentViewRepo: SessionRepo) \u003d\u003e"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" isViewRepoDefinedSoFar \u0026\u0026 !!currentViewRepo.repos \u0026\u0026 Array.isArray(currentViewRepo.repos) \u0026\u0026 currentViewRepo.repos.length \u003e 0,"},{"lineNumber":65,"author":{"gitId":"-"},"content":" true"},{"lineNumber":66,"author":{"gitId":"-"},"content":" );"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":13,"-":54}},{"path":"src/app/core/models/view.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"export enum View {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" issuesViewer \u003d \u0027issuesViewer\u0027,"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" activityDashboard \u003d \u0027activityDashboard\u0027"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":4}},{"path":"src/app/core/services/auth.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Injectable, NgZone } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Title } from \u0027@angular/platform-browser\u0027;"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import { Router, RouterStateSnapshot } from \u0027@angular/router\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { BehaviorSubject, from, Observable, of } from \u0027rxjs\u0027;"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import { catchError, map, mergeMap } from \u0027rxjs/operators\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { AppConfig } from \u0027../../../environments/environment\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { generateSessionId } from \u0027../../shared/lib/session\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { uuid } from \u0027../../shared/lib/uuid\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../models/view.model\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027./error-handling.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027./githubevent.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027./issue.service\u0027;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027./label.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027./logging.service\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { UserService } from \u0027./user.service\u0027;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027./view.service\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"export enum AuthState {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u0027NotAuthenticated\u0027,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u0027AwaitingAuthentication\u0027,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u0027ConfirmOAuthUser\u0027,"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u0027Authenticated\u0027"},{"lineNumber":24,"author":{"gitId":"-"},"content":"}"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":27,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":28,"author":{"gitId":"-"},"content":"})"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Responsible for initiating the authentication process and querying or"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * updating the application state with regards to authentication."},{"lineNumber":33,"author":{"gitId":"-"},"content":" */"},{"lineNumber":34,"author":{"gitId":"-"},"content":"export class AuthService {"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" private static readonly DEFAULT_NO_PERMISSION_TO_PRIVATE_REPOS \u003d false;"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" private static readonly SESSION_NEXT_KEY \u003d \u0027next\u0027;"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" authStateSource \u003d new BehaviorSubject(AuthState.NotAuthenticated);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" currentAuthState \u003d this.authStateSource.asObservable();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" accessToken \u003d new BehaviorSubject(undefined);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private state: string;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" ENABLE_POPUP_MESSAGE \u003d \u0027Please enable pop-ups in your browser\u0027;"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":46,"author":{"gitId":"-"},"content":" private router: Router,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" private ngZone: NgZone,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private githubService: GithubService,"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private userService: UserService,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private issueService: IssueService,"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private labelService: LabelService,"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" private viewService: ViewService,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private githubEventService: GithubEventService,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" private titleService: Title,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private errorHandlingService: ErrorHandlingService,"},{"lineNumber":56,"author":{"gitId":"-"},"content":" private logger: LoggingService"},{"lineNumber":57,"author":{"gitId":"-"},"content":" ) {}"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" * Stores the data about the next route in the session storage."},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" storeNext(next: RouterStateSnapshot) {"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" sessionStorage.setItem(AuthService.SESSION_NEXT_KEY, next.url);"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" * Checks if there is a next route to be redirected to after login,"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" * by checking the session storage."},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" hasNext(): boolean {"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" return sessionStorage.getItem(AuthService.SESSION_NEXT_KEY) !\u003d\u003d null;"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" * Checks if there is a next route to be redirected to after login,"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" * and start OAuth process automatically if there is."},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" startOAuthIfHasNext() {"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" if (this.hasNext()) {"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" this.logger.info(`AuthService: Start OAuth because there is a next route`);"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" this.startOAuthProcess(AuthService.DEFAULT_NO_PERMISSION_TO_PRIVATE_REPOS);"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" * Checks if there is a next route to be redirected to after login,"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" * and complete the login process if there is."},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" * Assuming that user has authenticated on Github, and the app is awaiting confirmation."},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" completeLoginIfHasNext(username: string) {"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" if (!this.hasNext()) {"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" return;"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" this.logger.info(`AuthService: Automatically complete login because there is a next route`);"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" this.changeAuthState(AuthState.AwaitingAuthentication);"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" this.userService.createUserModel(username).subscribe("},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":" () \u003d\u003e {"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":" this.changeAuthState(AuthState.Authenticated);"},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":" },"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" (err) \u003d\u003e {"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":" this.changeAuthState(AuthState.NotAuthenticated);"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":" this.errorHandlingService.handleError(err);"},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":" this.logger.info(`AuthService: Automatic completion of login failed with an error: ${err}`);"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" );"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" * Clears the next route from the session storage."},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":111,"author":{"gitId":"nknguyenhc"},"content":" clearNext() {"},{"lineNumber":112,"author":{"gitId":"nknguyenhc"},"content":" sessionStorage.removeItem(AuthService.SESSION_NEXT_KEY);"},{"lineNumber":113,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":114,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":115,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"nknguyenhc"},"content":" * Redirect to the URL indicating the next route."},{"lineNumber":117,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":118,"author":{"gitId":"nknguyenhc"},"content":" redirectToNext() {"},{"lineNumber":119,"author":{"gitId":"nknguyenhc"},"content":" const next \u003d sessionStorage.getItem(AuthService.SESSION_NEXT_KEY);"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" this.viewService"},{"lineNumber":121,"author":{"gitId":"nknguyenhc"},"content":" .setupFromUrl(next)"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" .pipe("},{"lineNumber":123,"author":{"gitId":"nknguyenhc"},"content":" mergeMap(() \u003d\u003e this.setRepo()),"},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":" this.logger.info(`AuthService: Failed to redirect to next URL with error: ${err}`);"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" this.errorHandlingService.handleError(err);"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" this.clearNext();"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" return of(false);"},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" )"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" .subscribe((isSetupSuccesssful) \u003d\u003e {"},{"lineNumber":132,"author":{"gitId":"nknguyenhc"},"content":" if (isSetupSuccesssful) {"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" this.router.navigateByUrl(next);"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":135,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":136,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"-"},"content":" * Will store the OAuth token."},{"lineNumber":140,"author":{"gitId":"-"},"content":" */"},{"lineNumber":141,"author":{"gitId":"-"},"content":" storeOAuthAccessToken(token: string) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" this.githubService.storeOAuthAccessToken(token);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" this.accessToken.next(token);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" reset(): void {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AuthService: Clearing access token and setting AuthState to NotAuthenticated.\u0027);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" this.accessToken.next(undefined);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" this.changeAuthState(AuthState.NotAuthenticated);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" this.ngZone.run(() \u003d\u003e this.router.navigate([\u0027\u0027]));"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" logOut(): void {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" this.githubService.reset();"},{"lineNumber":155,"author":{"gitId":"-"},"content":" this.userService.reset();"},{"lineNumber":156,"author":{"gitId":"-"},"content":" this.issueService.reset(true);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.labelService.reset();"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" this.viewService.reset();"},{"lineNumber":159,"author":{"gitId":"-"},"content":" this.githubEventService.reset();"},{"lineNumber":160,"author":{"gitId":"-"},"content":" this.logger.reset();"},{"lineNumber":161,"author":{"gitId":"-"},"content":" this.setLandingPageTitle();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" this.issueService.setIssueTeamFilter(\u0027All Teams\u0027);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" this.reset();"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":" setTitleWithViewDetail(): void {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" const appSetting \u003d require(\u0027../../../../package.json\u0027);"},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":" const title \u003d `${appSetting.name} ${appSetting.version} - ${this.viewService.getCurrentRepositoryURL()}`;"},{"lineNumber":169,"author":{"gitId":"-"},"content":" this.logger.info(`AuthService: Setting Title as ${title}`);"},{"lineNumber":170,"author":{"gitId":"-"},"content":" this.titleService.setTitle(title);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" setLandingPageTitle(): void {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" const appSetting \u003d require(\u0027../../../../package.json\u0027);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" const title \u003d `${appSetting.name} ${appSetting.version}`;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" this.logger.info(`AuthService: Setting Title as ${title}`);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" this.titleService.setTitle(title);"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" isAuthenticated(): boolean {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return this.authStateSource.getValue() \u003d\u003d\u003d AuthState.Authenticated;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" changeAuthState(newAuthState: AuthState) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" if (newAuthState \u003d\u003d\u003d AuthState.Authenticated) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" const sessionId \u003d generateSessionId();"},{"lineNumber":187,"author":{"gitId":"-"},"content":" this.issueService.setSessionId(sessionId);"},{"lineNumber":188,"author":{"gitId":"-"},"content":" this.logger.info(`AuthService: Successfully authenticated with session: ${sessionId}`);"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":" this.authStateSource.next(newAuthState);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":194,"author":{"gitId":"-"},"content":" * Generates and assigns an unguessable random \u0027state\u0027 string to pass to Github for protection against cross-site request forgery attacks"},{"lineNumber":195,"author":{"gitId":"-"},"content":" */"},{"lineNumber":196,"author":{"gitId":"-"},"content":" generateStateString() {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" this.state \u003d uuid();"},{"lineNumber":198,"author":{"gitId":"-"},"content":" sessionStorage.setItem(\u0027state\u0027, this.state);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" isReturnedStateSame(returnedState: string): boolean {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" const state \u003d sessionStorage.getItem(\u0027state\u0027);"},{"lineNumber":203,"author":{"gitId":"-"},"content":" return returnedState \u003d\u003d\u003d state;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * Will start the Github OAuth web flow process."},{"lineNumber":208,"author":{"gitId":"-"},"content":" */"},{"lineNumber":209,"author":{"gitId":"-"},"content":" startOAuthProcess(hasPrivateConsent: boolean) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" this.logger.info(\u0027AuthService: Starting authentication\u0027);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" // Available OAuth scopes https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"},{"lineNumber":212,"author":{"gitId":"-"},"content":" let permissionLevel \u003d \u0027public-repo\u0027;"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" if (hasPrivateConsent) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" // grants WATcher access to private repos if user allows"},{"lineNumber":216,"author":{"gitId":"-"},"content":" permissionLevel \u003d \u0027repo\u0027;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" const githubRepoPermission \u003d permissionLevel; // don\u0027t allow changes after logging ins"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" this.changeAuthState(AuthState.AwaitingAuthentication);"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" this.generateStateString();"},{"lineNumber":224,"author":{"gitId":"-"},"content":" this.redirectToOAuthPage("},{"lineNumber":225,"author":{"gitId":"-"},"content":" encodeURI("},{"lineNumber":226,"author":{"gitId":"-"},"content":" `${AppConfig.githubUrl}/login/oauth/authorize?client_id\u003d${AppConfig.clientId}\u0026scope\u003d${githubRepoPermission},read:user\u0026state\u003d${this.state}`"},{"lineNumber":227,"author":{"gitId":"-"},"content":" )"},{"lineNumber":228,"author":{"gitId":"-"},"content":" );"},{"lineNumber":229,"author":{"gitId":"-"},"content":" this.logger.info(`AuthService: Redirecting for Github authentication`);"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":233,"author":{"gitId":"-"},"content":" * Handles the clean up required after authentication and setting up of repository is completed."},{"lineNumber":234,"author":{"gitId":"-"},"content":" */"},{"lineNumber":235,"author":{"gitId":"nknguyenhc"},"content":" handleSetRepoSuccess(repoName: string) {"},{"lineNumber":236,"author":{"gitId":"NereusWB922"},"content":" this.setTitleWithViewDetail();"},{"lineNumber":237,"author":{"gitId":"NereusWB922"},"content":" this.router.navigate([View.issuesViewer], {"},{"lineNumber":238,"author":{"gitId":"nknguyenhc"},"content":" queryParams: {"},{"lineNumber":239,"author":{"gitId":"NereusWB922"},"content":" [ViewService.REPO_QUERY_PARAM_KEY]: repoName"},{"lineNumber":240,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":241,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Setup repository after authentication."},{"lineNumber":246,"author":{"gitId":"-"},"content":" */"},{"lineNumber":247,"author":{"gitId":"-"},"content":" setRepo(): Observable\u003cboolean\u003e {"},{"lineNumber":248,"author":{"gitId":"NereusWB922"},"content":" return from(this.viewService.initializeCurrentRepository()).pipe("},{"lineNumber":249,"author":{"gitId":"-"},"content":" map(() \u003d\u003e {"},{"lineNumber":250,"author":{"gitId":"NereusWB922"},"content":" if (!this.viewService.currentRepo) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":" this.githubEventService.setLatestChangeEvent();"},{"lineNumber":254,"author":{"gitId":"NereusWB922"},"content":" this.handleSetRepoSuccess(this.viewService.currentRepo.toString());"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":256,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":257,"author":{"gitId":"-"},"content":" catchError((error) \u003d\u003e {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(error);"},{"lineNumber":259,"author":{"gitId":"nknguyenhc"},"content":" this.clearNext();"},{"lineNumber":260,"author":{"gitId":"-"},"content":" return of(false);"},{"lineNumber":261,"author":{"gitId":"-"},"content":" })"},{"lineNumber":262,"author":{"gitId":"-"},"content":" );"},{"lineNumber":263,"author":{"gitId":"-"},"content":" }"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":266,"author":{"gitId":"-"},"content":" * Will redirect to GitHub OAuth page"},{"lineNumber":267,"author":{"gitId":"-"},"content":" */"},{"lineNumber":268,"author":{"gitId":"-"},"content":" private redirectToOAuthPage(url: string): void {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" if (url \u003d\u003d null) {"},{"lineNumber":270,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }"},{"lineNumber":272,"author":{"gitId":"-"},"content":" window.location.href \u003d url;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":88,"NereusWB922":14,"-":172}},{"path":"src/app/core/services/error-message.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":4,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":5,"author":{"gitId":"-"},"content":"})"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * Contains all error message prompts to user."},{"lineNumber":9,"author":{"gitId":"-"},"content":" */"},{"lineNumber":10,"author":{"gitId":"-"},"content":"export class ErrorMessageService {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" public static repositoryNotPresentMessage() {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" return \u0027Invalid repository name. Please provide Github repository URL or the repository name in the format Org/Repository Name.\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" }"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" public static invalidUrlMessage() {"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" return \u0027URL is invalid, or repository does not exist, please indicate the repository you wish to view to continue.\u0027;"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static unableToFetchIssuesMessage() {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch issue.\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" }"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static unableToFetchMilestoneMessage() {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch milestones.\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static unableToFetchLabelsMessage() {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch labels.\u0027;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static usersUnassignableMessage(assignee: string) {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" return `Cannot assign ${assignee} to the issue. Please check if ${assignee} is authorized.`;"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static unableToFetchUsersMessage() {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch assignable users for repository\u0027;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" public static unableToFetchEventsMessage() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch issue events for repository\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static unableToFetchActivityEventsMessage() {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch activity events for repository\u0027;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" public static unableToFetchDataFileMessage() {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch data file.\u0027;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static unableToFetchLatestReleaseMessage() {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch latest release.\u0027;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" public static unableToFetchSettingsFileMessage() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch settings file.\u0027;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static unableToFetchAuthenticatedUsersMessage() {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return \u0027Failed to fetch authenticated user.\u0027;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" public static unableToOpenInBrowserMessage() {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return \u0027Unable to open this issue in Browser\u0027;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" public static applicationVersionOutdatedMessage() {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" return \u0027Please update to the latest version of WATcher.\u0027;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" public static multipleDropdownOptionsErrorMessage() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return \u0027Supply either Dropdown option number or text, not both.\u0027;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" public static noDropdownOptionsErrorMessage() {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" return \u0027No Dropdown identification parameters supplied.\u0027;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":4,"-":74}},{"path":"src/app/core/services/factories/factory.auth.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { NgZone } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Title } from \u0027@angular/platform-browser\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Router } from \u0027@angular/router\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"// import { AppConfig } from \u0027../../../../environments/environment\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { AuthService } from \u0027../auth.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../error-handling.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../github.service\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027../githubevent.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../issue.service\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../label.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../logging.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"// import { MockAuthService } from \u0027../mocks/mock.auth.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../user.service\u0027;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../view.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"export function AuthServiceFactory("},{"lineNumber":17,"author":{"gitId":"-"},"content":" router: Router,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" ngZone: NgZone,"},{"lineNumber":19,"author":{"gitId":"-"},"content":" githubService: GithubService,"},{"lineNumber":20,"author":{"gitId":"-"},"content":" userService: UserService,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" issueService: IssueService,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" labelService: LabelService,"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" viewService: ViewService,"},{"lineNumber":24,"author":{"gitId":"-"},"content":" githubEventService: GithubEventService,"},{"lineNumber":25,"author":{"gitId":"-"},"content":" titleService: Title,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" errorHandlingService: ErrorHandlingService,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" logger: LoggingService"},{"lineNumber":28,"author":{"gitId":"-"},"content":") {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" // TODO: Write Mocks"},{"lineNumber":30,"author":{"gitId":"-"},"content":" // if (AppConfig.test) {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // return new MockAuthService("},{"lineNumber":32,"author":{"gitId":"-"},"content":" // router,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // ngZone,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" // githubService,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" // userService,"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // issueService,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" // labelService,"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" // viewService,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // githubEventService,"},{"lineNumber":40,"author":{"gitId":"-"},"content":" // titleService,"},{"lineNumber":41,"author":{"gitId":"-"},"content":" // logger"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // );"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // }"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return new AuthService("},{"lineNumber":45,"author":{"gitId":"-"},"content":" router,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ngZone,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" githubService,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" userService,"},{"lineNumber":49,"author":{"gitId":"-"},"content":" issueService,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" labelService,"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" viewService,"},{"lineNumber":52,"author":{"gitId":"-"},"content":" githubEventService,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" titleService,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" errorHandlingService,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" logger"},{"lineNumber":56,"author":{"gitId":"-"},"content":" );"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":4,"-":53}},{"path":"src/app/core/services/factories/factory.github.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Apollo } from \u0027apollo-angular\u0027;"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"// import { AppConfig } from \u0027../../../../environments/environment\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../error-handling.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../github.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../logging.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"// import { MockGithubService } from \u0027../mocks/mock.github.service\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"export function GithubServiceFactory(handling: ErrorHandlingService, apollo: Apollo, logger: LoggingService) {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" // TODO: Write Mocks"},{"lineNumber":11,"author":{"gitId":"-"},"content":" // if (AppConfig.test) {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" // return new MockGithubService();"},{"lineNumber":13,"author":{"gitId":"-"},"content":" // }"},{"lineNumber":14,"author":{"gitId":"-"},"content":" return new GithubService(handling, apollo, logger);"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"MadLamprey":1,"-":14}},{"path":"src/app/core/services/factories/factory.issue.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"// import { AppConfig } from \u0027../../../../environments/environment\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../github.service\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../issue.service\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"// import { MockIssueService } from \u0027../mocks/mock.issue.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../user.service\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../view.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"export function IssueServiceFactory(githubService: GithubService, userService: UserService, viewService: ViewService) {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" // TODO: Write Mocks"},{"lineNumber":10,"author":{"gitId":"-"},"content":" // if (AppConfig.test) {"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" // return new MockIssueService(githubService, viewService, dataService);"},{"lineNumber":12,"author":{"gitId":"-"},"content":" // }"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" return new IssueService(githubService, userService, viewService);"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":4,"-":10}},{"path":"src/app/core/services/filters.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":"import { Sort } from \u0027@angular/material/sort\u0027;"},{"lineNumber":3,"author":{"gitId":"Arif-Khalid"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":"import { BehaviorSubject, pipe } from \u0027rxjs\u0027;"},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":"import { SimpleLabel } from \u0027../models/label.model\u0027;"},{"lineNumber":6,"author":{"gitId":"Arif-Khalid"},"content":"import { Milestone } from \u0027../models/milestone.model\u0027;"},{"lineNumber":7,"author":{"gitId":"Arif-Khalid"},"content":"import { LoggingService } from \u0027./logging.service\u0027;"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":"import { MilestoneService } from \u0027./milestone.service\u0027;"},{"lineNumber":9,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":10,"author":{"gitId":"Arif-Khalid"},"content":"export type Filter \u003d {"},{"lineNumber":11,"author":{"gitId":"Arif-Khalid"},"content":" title: string;"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" status: string[];"},{"lineNumber":13,"author":{"gitId":"Arif-Khalid"},"content":" type: string;"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":" sort: Sort;"},{"lineNumber":15,"author":{"gitId":"Arif-Khalid"},"content":" labels: string[];"},{"lineNumber":16,"author":{"gitId":"Arif-Khalid"},"content":" milestones: string[];"},{"lineNumber":17,"author":{"gitId":"Arif-Khalid"},"content":" hiddenLabels: Set\u003cstring\u003e;"},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: Set\u003cstring\u003e;"},{"lineNumber":19,"author":{"gitId":"Arif-Khalid"},"content":"};"},{"lineNumber":20,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":21,"author":{"gitId":"Arif-Khalid"},"content":"@Injectable({"},{"lineNumber":22,"author":{"gitId":"Arif-Khalid"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":23,"author":{"gitId":"Arif-Khalid"},"content":"})"},{"lineNumber":24,"author":{"gitId":"Arif-Khalid"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"Arif-Khalid"},"content":" * Responsible for centralising filters"},{"lineNumber":26,"author":{"gitId":"Arif-Khalid"},"content":" * Filters are subscribed to and emitted from this service"},{"lineNumber":27,"author":{"gitId":"Arif-Khalid"},"content":" */"},{"lineNumber":28,"author":{"gitId":"Arif-Khalid"},"content":"export class FiltersService {"},{"lineNumber":29,"author":{"gitId":"Arif-Khalid"},"content":" public static readonly PRESET_VIEW_QUERY_PARAM_KEY \u003d \u0027presetview\u0027;"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" readonly presetViews: {"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" [key: string]: () \u003d\u003e Filter;"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" } \u003d {"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" currentlyActive: () \u003d\u003e ({"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" title: \u0027\u0027,"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" status: [\u0027open pullrequest\u0027, \u0027merged pullrequest\u0027, \u0027open issue\u0027, \u0027closed issue\u0027],"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" type: \u0027all\u0027,"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" sort: { active: \u0027status\u0027, direction: \u0027asc\u0027 },"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" labels: [],"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" milestones: this.getMilestonesForCurrentlyActive().map((milestone) \u003d\u003e milestone.title),"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" hiddenLabels: new Set\u003cstring\u003e(),"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: new Set\u003cstring\u003e()"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" }),"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" contributions: () \u003d\u003e ({"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" title: \u0027\u0027,"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" status: [\u0027open pullrequest\u0027, \u0027merged pullrequest\u0027, \u0027open issue\u0027, \u0027closed issue\u0027],"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" type: \u0027all\u0027,"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" sort: { active: \u0027id\u0027, direction: \u0027desc\u0027 },"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" labels: [],"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" milestones: this.milestoneService.milestones.map((milestone) \u003d\u003e milestone.title),"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" hiddenLabels: new Set\u003cstring\u003e(),"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: new Set\u003cstring\u003e()"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" }),"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" custom: () \u003d\u003e this.filter$.value"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" };"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" // List of keys in the new filter change that causes current filter to not qualify to be a preset view."},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" readonly presetChangingKeys \u003d new Set\u003cstring\u003e([\u0027status\u0027, \u0027type\u0027, \u0027milestones\u0027, \u0027labels\u0027, \u0027deselectedLabels\u0027]);"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" readonly defaultFilter \u003d this.presetViews.currentlyActive;"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" public filter$ \u003d new BehaviorSubject\u003cFilter\u003e(this.defaultFilter());"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" // Either \u0027currentlyActive\u0027, \u0027contributions\u0027, or \u0027custom\u0027."},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" public presetView$ \u003d new BehaviorSubject\u003cstring\u003e(\u0027currentlyActive\u0027);"},{"lineNumber":63,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":64,"author":{"gitId":"Arif-Khalid"},"content":" // Helps in determining whether all milestones were selected from previous repo during sanitization of milestones"},{"lineNumber":65,"author":{"gitId":"Arif-Khalid"},"content":" private previousMilestonesLength \u003d 0;"},{"lineNumber":66,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":67,"author":{"gitId":"Arif-Khalid"},"content":" constructor("},{"lineNumber":68,"author":{"gitId":"Arif-Khalid"},"content":" private logger: LoggingService,"},{"lineNumber":69,"author":{"gitId":"Arif-Khalid"},"content":" private router: Router,"},{"lineNumber":70,"author":{"gitId":"Arif-Khalid"},"content":" private route: ActivatedRoute,"},{"lineNumber":71,"author":{"gitId":"Arif-Khalid"},"content":" private milestoneService: MilestoneService"},{"lineNumber":72,"author":{"gitId":"Arif-Khalid"},"content":" ) {}"},{"lineNumber":73,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":74,"author":{"gitId":"Arif-Khalid"},"content":" private pushFiltersToUrl(): void {"},{"lineNumber":75,"author":{"gitId":"Arif-Khalid"},"content":" const queryParams \u003d { ...this.route.snapshot.queryParams };"},{"lineNumber":76,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":77,"author":{"gitId":"Arif-Khalid"},"content":" for (const filterName of Object.keys(this.filter$.value)) {"},{"lineNumber":78,"author":{"gitId":"Arif-Khalid"},"content":" const filterValue \u003d this.filter$.value[filterName];"},{"lineNumber":79,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":80,"author":{"gitId":"Arif-Khalid"},"content":" // Don\u0027t include empty or null filters"},{"lineNumber":81,"author":{"gitId":"Arif-Khalid"},"content":" // Intended behaviour to reset to default if 0 of a certain filter are selected"},{"lineNumber":82,"author":{"gitId":"Arif-Khalid"},"content":" switch (filterName) {"},{"lineNumber":83,"author":{"gitId":"Arif-Khalid"},"content":" // Strings"},{"lineNumber":84,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027title\u0027:"},{"lineNumber":85,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027type\u0027:"},{"lineNumber":86,"author":{"gitId":"Arif-Khalid"},"content":" if (!filterValue) {"},{"lineNumber":87,"author":{"gitId":"Arif-Khalid"},"content":" delete queryParams[filterName];"},{"lineNumber":88,"author":{"gitId":"Arif-Khalid"},"content":" continue;"},{"lineNumber":89,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":90,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[filterName] \u003d filterValue;"},{"lineNumber":91,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":92,"author":{"gitId":"Arif-Khalid"},"content":" // Arrays"},{"lineNumber":93,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027status\u0027:"},{"lineNumber":94,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027labels\u0027:"},{"lineNumber":95,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027milestones\u0027:"},{"lineNumber":96,"author":{"gitId":"Arif-Khalid"},"content":" if (filterValue.length \u003d\u003d\u003d 0) {"},{"lineNumber":97,"author":{"gitId":"Arif-Khalid"},"content":" delete queryParams[filterName];"},{"lineNumber":98,"author":{"gitId":"Arif-Khalid"},"content":" continue;"},{"lineNumber":99,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":100,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[filterName] \u003d filterValue;"},{"lineNumber":101,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":102,"author":{"gitId":"Arif-Khalid"},"content":" // Sets"},{"lineNumber":103,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027selectedLabels\u0027:"},{"lineNumber":104,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027deselectedLabels\u0027:"},{"lineNumber":105,"author":{"gitId":"Arif-Khalid"},"content":" if (filterValue.size \u003d\u003d\u003d 0) {"},{"lineNumber":106,"author":{"gitId":"Arif-Khalid"},"content":" delete queryParams[filterName];"},{"lineNumber":107,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":108,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[filterName] \u003d [...filterValue];"},{"lineNumber":109,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":110,"author":{"gitId":"Arif-Khalid"},"content":" // Objects"},{"lineNumber":111,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027sort\u0027:"},{"lineNumber":112,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[filterName] \u003d JSON.stringify(filterValue);"},{"lineNumber":113,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":114,"author":{"gitId":"Arif-Khalid"},"content":" default:"},{"lineNumber":115,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":116,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":117,"author":{"gitId":"Arif-Khalid"},"content":" queryParams[FiltersService.PRESET_VIEW_QUERY_PARAM_KEY] \u003d this.presetView$.value;"},{"lineNumber":118,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":119,"author":{"gitId":"Arif-Khalid"},"content":" this.router.navigate([], {"},{"lineNumber":120,"author":{"gitId":"Arif-Khalid"},"content":" relativeTo: this.route,"},{"lineNumber":121,"author":{"gitId":"Arif-Khalid"},"content":" queryParams,"},{"lineNumber":122,"author":{"gitId":"Arif-Khalid"},"content":" replaceUrl: true"},{"lineNumber":123,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":124,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":125,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":126,"author":{"gitId":"Arif-Khalid"},"content":" clearFilters(): void {"},{"lineNumber":127,"author":{"gitId":"Arif-Khalid"},"content":" this.updatePresetView(\u0027currentlyActive\u0027);"},{"lineNumber":128,"author":{"gitId":"Arif-Khalid"},"content":" this.previousMilestonesLength \u003d 0;"},{"lineNumber":129,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":130,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":131,"author":{"gitId":"Arif-Khalid"},"content":" initializeFromURLParams() {"},{"lineNumber":132,"author":{"gitId":"Arif-Khalid"},"content":" const nextFilter: Filter \u003d this.defaultFilter();"},{"lineNumber":133,"author":{"gitId":"Arif-Khalid"},"content":" const queryParams \u003d this.route.snapshot.queryParamMap;"},{"lineNumber":134,"author":{"gitId":"Arif-Khalid"},"content":" try {"},{"lineNumber":135,"author":{"gitId":"Arif-Khalid"},"content":" const presetView \u003d queryParams.get(FiltersService.PRESET_VIEW_QUERY_PARAM_KEY);"},{"lineNumber":136,"author":{"gitId":"Arif-Khalid"},"content":" // Use preset view if set in url"},{"lineNumber":137,"author":{"gitId":"Arif-Khalid"},"content":" if (presetView \u0026\u0026 this.presetViews.hasOwnProperty(presetView) \u0026\u0026 presetView !\u003d\u003d \u0027custom\u0027) {"},{"lineNumber":138,"author":{"gitId":"Arif-Khalid"},"content":" this.updatePresetView(presetView);"},{"lineNumber":139,"author":{"gitId":"Arif-Khalid"},"content":" return;"},{"lineNumber":140,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":141,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":142,"author":{"gitId":"Arif-Khalid"},"content":" // No preset view and no other filters in params, use default view"},{"lineNumber":143,"author":{"gitId":"Arif-Khalid"},"content":" if (!presetView \u0026\u0026 Object.keys(nextFilter).every((filterName) \u003d\u003e queryParams.get(filterName) \u003d\u003d\u003d null)) {"},{"lineNumber":144,"author":{"gitId":"Arif-Khalid"},"content":" this.updatePresetView(\u0027currentlyActive\u0027);"},{"lineNumber":145,"author":{"gitId":"Arif-Khalid"},"content":" return;"},{"lineNumber":146,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":147,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":148,"author":{"gitId":"Arif-Khalid"},"content":" for (const filterName of Object.keys(nextFilter)) {"},{"lineNumber":149,"author":{"gitId":"Arif-Khalid"},"content":" // Check if there is no such param in url"},{"lineNumber":150,"author":{"gitId":"Arif-Khalid"},"content":" if (queryParams.get(filterName) \u003d\u003d\u003d null) {"},{"lineNumber":151,"author":{"gitId":"Arif-Khalid"},"content":" continue;"},{"lineNumber":152,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":153,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":154,"author":{"gitId":"Arif-Khalid"},"content":" const filterData \u003d queryParams.getAll(filterName);"},{"lineNumber":155,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":156,"author":{"gitId":"Arif-Khalid"},"content":" switch (filterName) {"},{"lineNumber":157,"author":{"gitId":"Arif-Khalid"},"content":" // Strings"},{"lineNumber":158,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027title\u0027:"},{"lineNumber":159,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027type\u0027:"},{"lineNumber":160,"author":{"gitId":"Arif-Khalid"},"content":" nextFilter[filterName] \u003d filterData[0];"},{"lineNumber":161,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":162,"author":{"gitId":"Arif-Khalid"},"content":" // Arrays"},{"lineNumber":163,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027status\u0027:"},{"lineNumber":164,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027labels\u0027:"},{"lineNumber":165,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027milestones\u0027:"},{"lineNumber":166,"author":{"gitId":"Arif-Khalid"},"content":" nextFilter[filterName] \u003d filterData;"},{"lineNumber":167,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":168,"author":{"gitId":"Arif-Khalid"},"content":" // Sets"},{"lineNumber":169,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027selectedLabels\u0027:"},{"lineNumber":170,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027deselectedLabels\u0027:"},{"lineNumber":171,"author":{"gitId":"Arif-Khalid"},"content":" nextFilter[filterName] \u003d new Set(filterData);"},{"lineNumber":172,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":173,"author":{"gitId":"Arif-Khalid"},"content":" // Objects"},{"lineNumber":174,"author":{"gitId":"Arif-Khalid"},"content":" case \u0027sort\u0027:"},{"lineNumber":175,"author":{"gitId":"Arif-Khalid"},"content":" nextFilter[filterName] \u003d JSON.parse(filterData[0]);"},{"lineNumber":176,"author":{"gitId":"Arif-Khalid"},"content":" break;"},{"lineNumber":177,"author":{"gitId":"Arif-Khalid"},"content":" default:"},{"lineNumber":178,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":179,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":180,"author":{"gitId":"Arif-Khalid"},"content":" this.updateFilters(nextFilter);"},{"lineNumber":181,"author":{"gitId":"Arif-Khalid"},"content":" } catch (err) {"},{"lineNumber":182,"author":{"gitId":"Arif-Khalid"},"content":" this.logger.info(`FiltersService: Update filters from URL failed with an error: ${err}`);"},{"lineNumber":183,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":184,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":185,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":186,"author":{"gitId":"Arif-Khalid"},"content":" updateFilters(newFilters: Partial\u003cFilter\u003e): void {"},{"lineNumber":187,"author":{"gitId":"nknguyenhc"},"content":" const nextDropdownFilter: Filter \u003d {"},{"lineNumber":188,"author":{"gitId":"Arif-Khalid"},"content":" ...this.filter$.value,"},{"lineNumber":189,"author":{"gitId":"Arif-Khalid"},"content":" ...newFilters"},{"lineNumber":190,"author":{"gitId":"Arif-Khalid"},"content":" };"},{"lineNumber":191,"author":{"gitId":"nknguyenhc"},"content":" this.filter$.next(nextDropdownFilter);"},{"lineNumber":192,"author":{"gitId":"nknguyenhc"},"content":" this.updatePresetViewFromFilters(newFilters);"},{"lineNumber":193,"author":{"gitId":"Arif-Khalid"},"content":" this.pushFiltersToUrl();"},{"lineNumber":194,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":195,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":196,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":197,"author":{"gitId":"nknguyenhc"},"content":" * Updates the filters without updating the preset view."},{"lineNumber":198,"author":{"gitId":"nknguyenhc"},"content":" * This should only be called when there are new labels/milestones."},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" * The preset view will be reapplied."},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":" * @param newFilters The filters with new values"},{"lineNumber":201,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" private updateFiltersWithoutUpdatingPresetView(newFilters: Partial\u003cFilter\u003e): void {"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" const nextDropdownFilter: Filter \u003d {"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":" ...this.filter$.value,"},{"lineNumber":205,"author":{"gitId":"nknguyenhc"},"content":" ...newFilters"},{"lineNumber":206,"author":{"gitId":"nknguyenhc"},"content":" };"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" this.filter$.next(nextDropdownFilter);"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":" this.filter$.next(this.presetViews[this.presetView$.value]());"},{"lineNumber":209,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":210,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":211,"author":{"gitId":"nknguyenhc"},"content":" private updatePresetViewFromFilters(newFilter: Partial\u003cFilter\u003e): void {"},{"lineNumber":212,"author":{"gitId":"nknguyenhc"},"content":" for (const key of Object.keys(newFilter)) {"},{"lineNumber":213,"author":{"gitId":"nknguyenhc"},"content":" if (this.presetChangingKeys.has(key)) {"},{"lineNumber":214,"author":{"gitId":"nknguyenhc"},"content":" this.presetView$.next(\u0027custom\u0027);"},{"lineNumber":215,"author":{"gitId":"nknguyenhc"},"content":" return;"},{"lineNumber":216,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":217,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":218,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":219,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":220,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":221,"author":{"gitId":"nknguyenhc"},"content":" * Updates the filter based on a preset view."},{"lineNumber":222,"author":{"gitId":"nknguyenhc"},"content":" * @param presetViewName The name of the preset view, either \u0027currentlyActive\u0027, \u0027contributions\u0027, or \u0027custom\u0027."},{"lineNumber":223,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":224,"author":{"gitId":"nknguyenhc"},"content":" updatePresetView(presetViewName: string) {"},{"lineNumber":225,"author":{"gitId":"nknguyenhc"},"content":" this.filter$.next(this.presetViews[presetViewName]());"},{"lineNumber":226,"author":{"gitId":"nknguyenhc"},"content":" this.presetView$.next(presetViewName);"},{"lineNumber":227,"author":{"gitId":"Arif-Khalid"},"content":" this.pushFiltersToUrl();"},{"lineNumber":228,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":229,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":230,"author":{"gitId":"Arif-Khalid"},"content":" sanitizeLabels(allLabels: SimpleLabel[]): void {"},{"lineNumber":231,"author":{"gitId":"Arif-Khalid"},"content":" const allLabelsSet \u003d new Set(allLabels.map((label) \u003d\u003e label.name));"},{"lineNumber":232,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":233,"author":{"gitId":"Arif-Khalid"},"content":" const newHiddenLabels: Set\u003cstring\u003e \u003d new Set();"},{"lineNumber":234,"author":{"gitId":"Arif-Khalid"},"content":" for (const hiddenLabel of this.filter$.value.hiddenLabels) {"},{"lineNumber":235,"author":{"gitId":"Arif-Khalid"},"content":" if (allLabelsSet.has(hiddenLabel)) {"},{"lineNumber":236,"author":{"gitId":"Arif-Khalid"},"content":" newHiddenLabels.add(hiddenLabel);"},{"lineNumber":237,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":238,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":239,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":240,"author":{"gitId":"nknguyenhc"},"content":" const newDeselectedLabels: Set\u003cstring\u003e \u003d new Set();"},{"lineNumber":241,"author":{"gitId":"nknguyenhc"},"content":" for (const deselectedLabel of this.filter$.value.deselectedLabels) {"},{"lineNumber":242,"author":{"gitId":"nknguyenhc"},"content":" if (allLabelsSet.has(deselectedLabel)) {"},{"lineNumber":243,"author":{"gitId":"nknguyenhc"},"content":" newDeselectedLabels.add(deselectedLabel);"},{"lineNumber":244,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":245,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":246,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":247,"author":{"gitId":"nknguyenhc"},"content":" const newLabels \u003d this.filter$.value.labels.filter((label) \u003d\u003e allLabelsSet.has(label));"},{"lineNumber":248,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":249,"author":{"gitId":"nknguyenhc"},"content":" this.updateFiltersWithoutUpdatingPresetView({"},{"lineNumber":250,"author":{"gitId":"nknguyenhc"},"content":" labels: newLabels,"},{"lineNumber":251,"author":{"gitId":"nknguyenhc"},"content":" hiddenLabels: newHiddenLabels,"},{"lineNumber":252,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: newDeselectedLabels"},{"lineNumber":253,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":254,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":255,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":256,"author":{"gitId":"Arif-Khalid"},"content":" sanitizeMilestones(allMilestones: Milestone[]) {"},{"lineNumber":257,"author":{"gitId":"MadLamprey"},"content":" const milestones \u003d allMilestones.map((milestone) \u003d\u003e milestone.title);"},{"lineNumber":258,"author":{"gitId":"MadLamprey"},"content":" milestones.push(Milestone.IssueWithoutMilestone.title, Milestone.PRWithoutMilestone.title);"},{"lineNumber":259,"author":{"gitId":"MadLamprey"},"content":" const allMilestonesSet \u003d new Set(milestones);"},{"lineNumber":260,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":261,"author":{"gitId":"Arif-Khalid"},"content":" // All previous milestones were selected, reset to all new milestones selected"},{"lineNumber":262,"author":{"gitId":"Arif-Khalid"},"content":" if (this.filter$.value.milestones.length \u003d\u003d\u003d this.previousMilestonesLength) {"},{"lineNumber":263,"author":{"gitId":"nknguyenhc"},"content":" this.updateFiltersWithoutUpdatingPresetView({ milestones: [...allMilestonesSet] });"},{"lineNumber":264,"author":{"gitId":"MadLamprey"},"content":" this.previousMilestonesLength \u003d allMilestonesSet.size;"},{"lineNumber":265,"author":{"gitId":"Arif-Khalid"},"content":" return;"},{"lineNumber":266,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":267,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":268,"author":{"gitId":"Arif-Khalid"},"content":" const newMilestones: string[] \u003d [];"},{"lineNumber":269,"author":{"gitId":"Arif-Khalid"},"content":" for (const milestone of this.filter$.value.milestones) {"},{"lineNumber":270,"author":{"gitId":"Arif-Khalid"},"content":" if (allMilestonesSet.has(milestone)) {"},{"lineNumber":271,"author":{"gitId":"Arif-Khalid"},"content":" newMilestones.push(milestone);"},{"lineNumber":272,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":273,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":274,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":275,"author":{"gitId":"Arif-Khalid"},"content":" // No applicable milestones, reset to all milestones selected"},{"lineNumber":276,"author":{"gitId":"Arif-Khalid"},"content":" if (newMilestones.length \u003d\u003d\u003d 0) {"},{"lineNumber":277,"author":{"gitId":"Arif-Khalid"},"content":" newMilestones.push(...allMilestonesSet);"},{"lineNumber":278,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":279,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":280,"author":{"gitId":"nknguyenhc"},"content":" this.updateFiltersWithoutUpdatingPresetView({ milestones: newMilestones });"},{"lineNumber":281,"author":{"gitId":"MadLamprey"},"content":" this.previousMilestonesLength \u003d allMilestonesSet.size;"},{"lineNumber":282,"author":{"gitId":"Arif-Khalid"},"content":" }"},{"lineNumber":283,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":284,"author":{"gitId":"nknguyenhc"},"content":" getMilestonesForCurrentlyActive(): Milestone[] {"},{"lineNumber":285,"author":{"gitId":"nknguyenhc"},"content":" const earliestOpenMilestone \u003d this.milestoneService.getEarliestOpenMilestone();"},{"lineNumber":286,"author":{"gitId":"nknguyenhc"},"content":" if (earliestOpenMilestone) {"},{"lineNumber":287,"author":{"gitId":"NereusWB922"},"content":" return [earliestOpenMilestone, Milestone.PRWithoutMilestone];"},{"lineNumber":288,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":289,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":290,"author":{"gitId":"nknguyenhc"},"content":" const latestClosedMilestone \u003d this.milestoneService.getLatestClosedMilestone();"},{"lineNumber":291,"author":{"gitId":"nknguyenhc"},"content":" if (latestClosedMilestone) {"},{"lineNumber":292,"author":{"gitId":"NereusWB922"},"content":" return [latestClosedMilestone, Milestone.PRWithoutMilestone];"},{"lineNumber":293,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":294,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":295,"author":{"gitId":"NereusWB922"},"content":" return [...this.milestoneService.milestones, Milestone.PRWithoutMilestone];"},{"lineNumber":296,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":297,"author":{"gitId":"Arif-Khalid"},"content":"}"}],"authorContributionMap":{"nknguyenhc":97,"Arif-Khalid":192,"NereusWB922":3,"MadLamprey":5}},{"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":"MadLamprey"},"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":"MadLamprey"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { DocumentNode } from \u0027graphql\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { BehaviorSubject, forkJoin, from, merge, Observable, of, throwError } from \u0027rxjs\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { catchError, filter, flatMap, map, throwIfEmpty } from \u0027rxjs/operators\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" FetchIssue,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" FetchIssueQuery,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" FetchIssues,"},{"lineNumber":13,"author":{"gitId":"-"},"content":" FetchIssuesQuery,"},{"lineNumber":14,"author":{"gitId":"-"},"content":" FetchPullRequests,"},{"lineNumber":15,"author":{"gitId":"-"},"content":" FetchPullRequestsQuery"},{"lineNumber":16,"author":{"gitId":"-"},"content":"} from \u0027../../../../graphql/graphql-types\u0027;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import { AppConfig } from \u0027../../../environments/environment\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import { getNumberOfPages } from \u0027../../shared/lib/github-paginator-parser\u0027;"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"import { GithubUser, RawGithubUser } from \u0027../models/github-user.model\u0027;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { IssueLastModifiedManagerModel } from \u0027../models/github/cache-manager/issue-last-modified-manager.model\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import { IssuesCacheManager } from \u0027../models/github/cache-manager/issues-cache-manager.model\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import { GithubEvent } from \u0027../models/github/github-event.model\u0027;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import { GithubGraphqlIssue } from \u0027../models/github/github-graphql.issue\u0027;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import { GithubGraphqlIssueOrPr } from \u0027../models/github/github-graphql.issue-or-pr\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import RestGithubIssueFilter from \u0027../models/github/github-issue-filter.model\u0027;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import { GithubIssue } from \u0027../models/github/github-issue.model\u0027;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import { GithubResponse } from \u0027../models/github/github-response.model\u0027;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import { GithubRelease } from \u0027../models/github/github.release\u0027;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import { SessionData } from \u0027../models/session.model\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import { ERRORCODE_NOT_FOUND, ErrorHandlingService } from \u0027./error-handling.service\u0027;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027./error-message.service\u0027;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027./logging.service\u0027;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"const { Octokit } \u003d require(\u0027@octokit/rest\u0027);"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"const WATCHER_ORG \u003d \u0027WATcher-org\u0027;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"const WATCHER_REPO \u003d \u0027WATcher\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"/** Owner of Repository to watch */"},{"lineNumber":40,"author":{"gitId":"-"},"content":"let ORG_NAME \u003d \u0027\u0027; // repoOrg"},{"lineNumber":41,"author":{"gitId":"-"},"content":"/** Name of Repository to watch */"},{"lineNumber":42,"author":{"gitId":"-"},"content":"let REPO \u003d \u0027\u0027; // repoName"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"/** Owner of Settings repository, currently not used */"},{"lineNumber":45,"author":{"gitId":"-"},"content":"let MOD_ORG \u003d \u0027\u0027;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"/** Name of Settings repository, currently not used */"},{"lineNumber":47,"author":{"gitId":"-"},"content":"let DATA_REPO \u003d \u0027\u0027;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"const MAX_ITEMS_PER_PAGE \u003d 100;"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"let octokit \u003d new Octokit();"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":53,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":54,"author":{"gitId":"-"},"content":"})"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Responsible for communicating with GitHub to create, update, read and delete"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * features related to Github using GitHub API Requests."},{"lineNumber":59,"author":{"gitId":"-"},"content":" * For example, issues, issue labels and repositories."},{"lineNumber":60,"author":{"gitId":"-"},"content":" */"},{"lineNumber":61,"author":{"gitId":"-"},"content":"export class GithubService {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private static readonly IF_NONE_MATCH_EMPTY \u003d { \u0027If-None-Match\u0027: \u0027\u0027 };"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" private issuesCacheManager \u003d new IssuesCacheManager();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" private issuesLastModifiedManager \u003d new IssueLastModifiedManagerModel();"},{"lineNumber":66,"author":{"gitId":"-"},"content":" private issueQueryRefs \u003d new Map\u003cnumber, QueryRef\u003cFetchIssueQuery\u003e\u003e();"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" constructor(private errorHandlingService: ErrorHandlingService, private apollo: Apollo, private logger: LoggingService) {}"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" storeOAuthAccessToken(accessToken: string) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" octokit \u003d new Octokit({"},{"lineNumber":72,"author":{"gitId":"-"},"content":" auth() {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" return `Token ${accessToken}`;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" log: {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" debug: (message, ...otherInfo) \u003d\u003e this.logger.debug(\u0027GithubService: \u0027 + message, ...otherInfo),"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // Do not log info for HTTP response 304 due to repeated polling"},{"lineNumber":78,"author":{"gitId":"-"},"content":" info: (message, ...otherInfo) \u003d\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" /304 in \\d+ms$/.test(message) ? undefined : this.logger.info(\u0027GithubService: \u0027 + message, ...otherInfo),"},{"lineNumber":80,"author":{"gitId":"-"},"content":" warn: (message, ...otherInfo) \u003d\u003e this.logger.warn(\u0027GithubService: \u0027 + message, ...otherInfo),"},{"lineNumber":81,"author":{"gitId":"-"},"content":" error: (message, ...otherInfo) \u003d\u003e this.logger.error(\u0027GithubService: \u0027 + message, ...otherInfo)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":" });"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * Sets settings repository. Not used."},{"lineNumber":88,"author":{"gitId":"-"},"content":" * @param orgName WATcher organisation"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * @param dataRepo WATcher repository"},{"lineNumber":90,"author":{"gitId":"-"},"content":" */"},{"lineNumber":91,"author":{"gitId":"-"},"content":" storeOrganizationDetails(orgName: string, dataRepo: string) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" MOD_ORG \u003d orgName;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" DATA_REPO \u003d dataRepo;"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * Sets repository to watch. This repository is used for fetching from Github."},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" * @param viewRepoOwner Repository owner"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * @param repoName Repository name"},{"lineNumber":100,"author":{"gitId":"-"},"content":" */"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" storeViewDetails(viewRepoOwner: string, repoName: string) {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" REPO \u003d repoName;"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" ORG_NAME \u003d viewRepoOwner;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Fetches an array of filtered GitHubIssues using GraphQL query."},{"lineNumber":108,"author":{"gitId":"-"},"content":" * In WATcher, this includes pull requests."},{"lineNumber":109,"author":{"gitId":"-"},"content":" *"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * @param issuesFilter - The issue filter."},{"lineNumber":111,"author":{"gitId":"-"},"content":" * @returns An observable array of filtered GithubIssues"},{"lineNumber":112,"author":{"gitId":"-"},"content":" */"},{"lineNumber":113,"author":{"gitId":"-"},"content":" fetchIssuesGraphql(issuesFilter: RestGithubIssueFilter): Observable\u003cArray\u003cGithubIssue\u003e\u003e {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" const graphqlFilter \u003d issuesFilter.convertToGraphqlFilter();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Github Issues consists of issues and pull requests in WATcher."},{"lineNumber":117,"author":{"gitId":"-"},"content":" */"},{"lineNumber":118,"author":{"gitId":"-"},"content":" const issueObs \u003d this.toFetchIssues(issuesFilter).pipe("},{"lineNumber":119,"author":{"gitId":"-"},"content":" filter((toFetch) \u003d\u003e toFetch),"},{"lineNumber":120,"author":{"gitId":"-"},"content":" flatMap(() \u003d\u003e {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" return this.fetchGraphqlList\u003cFetchIssuesQuery, GithubGraphqlIssueOrPr\u003e("},{"lineNumber":122,"author":{"gitId":"-"},"content":" FetchIssues,"},{"lineNumber":123,"author":{"gitId":"-"},"content":" { owner: ORG_NAME, name: REPO, filter: graphqlFilter },"},{"lineNumber":124,"author":{"gitId":"-"},"content":" (result) \u003d\u003e result.data.repository.issues.edges,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" GithubGraphqlIssueOrPr"},{"lineNumber":126,"author":{"gitId":"-"},"content":" );"},{"lineNumber":127,"author":{"gitId":"-"},"content":" })"},{"lineNumber":128,"author":{"gitId":"-"},"content":" );"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const prObs \u003d this.toFetchIssues(issuesFilter).pipe("},{"lineNumber":130,"author":{"gitId":"-"},"content":" filter((toFetch) \u003d\u003e toFetch),"},{"lineNumber":131,"author":{"gitId":"-"},"content":" flatMap(() \u003d\u003e {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return this.fetchGraphqlList\u003cFetchPullRequestsQuery, GithubGraphqlIssueOrPr\u003e("},{"lineNumber":133,"author":{"gitId":"-"},"content":" FetchPullRequests,"},{"lineNumber":134,"author":{"gitId":"-"},"content":" { owner: ORG_NAME, name: REPO },"},{"lineNumber":135,"author":{"gitId":"-"},"content":" (result) \u003d\u003e result.data.repository.pullRequests.edges,"},{"lineNumber":136,"author":{"gitId":"-"},"content":" GithubGraphqlIssueOrPr"},{"lineNumber":137,"author":{"gitId":"-"},"content":" );"},{"lineNumber":138,"author":{"gitId":"-"},"content":" })"},{"lineNumber":139,"author":{"gitId":"-"},"content":" );"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" // Concatenate both streams together."},{"lineNumber":142,"author":{"gitId":"-"},"content":" return merge(issueObs, prObs);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":146,"author":{"gitId":"-"},"content":" * Checks if there are pages of filtered issues that are not cached in the cache model,"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * and updates the model to cache these new pages."},{"lineNumber":148,"author":{"gitId":"-"},"content":" * @param filter - The issue filter."},{"lineNumber":149,"author":{"gitId":"-"},"content":" * @returns Observable\u003cboolean\u003e that returns true if there are pages that do not exist in the cache model."},{"lineNumber":150,"author":{"gitId":"-"},"content":" */"},{"lineNumber":151,"author":{"gitId":"-"},"content":" private toFetchIssues(filter: RestGithubIssueFilter): Observable\u003cboolean\u003e {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" const pageFetchLimit \u003d 100;"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" let responseInFirstPage: GithubResponse\u003cGithubIssue[]\u003e;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" return this.getIssuesAPICall(filter, 1).pipe("},{"lineNumber":156,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue[]\u003e) \u003d\u003e {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" responseInFirstPage \u003d response;"},{"lineNumber":158,"author":{"gitId":"-"},"content":" return getNumberOfPages(response);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":160,"author":{"gitId":"-"},"content":" flatMap((numOfPages: number) \u003d\u003e {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" const apiCalls: Observable\u003cGithubResponse\u003cGithubIssue[]\u003e\u003e[] \u003d [];"},{"lineNumber":162,"author":{"gitId":"-"},"content":" if (numOfPages \u003e pageFetchLimit) {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" throw new Error(`Repository has too many pages (${numOfPages}), not supported.`);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":" for (let i \u003d 2; i \u003c\u003d numOfPages; i++) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" apiCalls.push(this.getIssuesAPICall(filter, i));"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":" return apiCalls.length \u003d\u003d\u003d 0 ? of([]) : forkJoin(apiCalls);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":170,"author":{"gitId":"-"},"content":" map((resultArray: GithubResponse\u003cGithubIssue[]\u003e[]) \u003d\u003e {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" const responses \u003d [responseInFirstPage, ...resultArray];"},{"lineNumber":172,"author":{"gitId":"-"},"content":" const isCached \u003d responses.reduce((result, response) \u003d\u003e {"},{"lineNumber":173,"author":{"gitId":"-"},"content":" return result \u0026\u0026 response.isCached;"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }, true);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" responses.forEach((resp, index) \u003d\u003e this.issuesCacheManager.set(index + 1, resp));"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return !isCached;"},{"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":" /**"},{"lineNumber":182,"author":{"gitId":"-"},"content":" * Checks if the specified repository exists."},{"lineNumber":183,"author":{"gitId":"-"},"content":" * @param owner - Owner of Specified Repository."},{"lineNumber":184,"author":{"gitId":"-"},"content":" * @param repo - Name of Repository."},{"lineNumber":185,"author":{"gitId":"-"},"content":" */"},{"lineNumber":186,"author":{"gitId":"-"},"content":" isRepositoryPresent(owner: string, repo: string): Observable\u003cboolean\u003e {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return from(octokit.repos.get({ owner: owner, repo: repo, headers: GithubService.IF_NONE_MATCH_EMPTY })).pipe("},{"lineNumber":188,"author":{"gitId":"-"},"content":" map((rawData: { status: number }) \u003d\u003e {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" return rawData.status !\u003d\u003d ERRORCODE_NOT_FOUND;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":191,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" return of(false);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":194,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.repositoryNotPresentMessage()))"},{"lineNumber":195,"author":{"gitId":"-"},"content":" );"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":199,"author":{"gitId":"-"},"content":" * Fetches information about an issue using GraphQL."},{"lineNumber":200,"author":{"gitId":"-"},"content":" *"},{"lineNumber":201,"author":{"gitId":"-"},"content":" * If the issue is not modified, return a `304 - Not Modified` response."},{"lineNumber":202,"author":{"gitId":"-"},"content":" *"},{"lineNumber":203,"author":{"gitId":"-"},"content":" * @param id - The issue id."},{"lineNumber":204,"author":{"gitId":"-"},"content":" * @returns Observable\u003cGithubGraphqlIssue\u003e that represents the response object."},{"lineNumber":205,"author":{"gitId":"-"},"content":" */"},{"lineNumber":206,"author":{"gitId":"-"},"content":" fetchIssueGraphql(id: number): Observable\u003cGithubGraphqlIssue\u003e {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" if (this.issueQueryRefs.get(id) \u003d\u003d\u003d undefined) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" const newQueryRef \u003d this.apollo.watchQuery\u003cFetchIssueQuery\u003e({"},{"lineNumber":209,"author":{"gitId":"-"},"content":" query: FetchIssue,"},{"lineNumber":210,"author":{"gitId":"-"},"content":" variables: {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":212,"author":{"gitId":"-"},"content":" name: REPO,"},{"lineNumber":213,"author":{"gitId":"-"},"content":" issueId: id"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" });"},{"lineNumber":216,"author":{"gitId":"-"},"content":" this.issueQueryRefs.set(id, newQueryRef);"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" const queryRef \u003d this.issueQueryRefs.get(id);"},{"lineNumber":220,"author":{"gitId":"-"},"content":" return this.toFetchIssue(id).pipe("},{"lineNumber":221,"author":{"gitId":"-"},"content":" filter((toFetch) \u003d\u003e toFetch),"},{"lineNumber":222,"author":{"gitId":"-"},"content":" flatMap(() \u003d\u003e from(queryRef.refetch())),"},{"lineNumber":223,"author":{"gitId":"-"},"content":" map((value: ApolloQueryResult\u003cFetchIssueQuery\u003e) \u003d\u003e {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return new GithubGraphqlIssue(value.data.repository.issue);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":226,"author":{"gitId":"-"},"content":" throwIfEmpty(() \u003d\u003e new HttpErrorResponse({ status: 304 }))"},{"lineNumber":227,"author":{"gitId":"-"},"content":" );"},{"lineNumber":228,"author":{"gitId":"-"},"content":" }"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":231,"author":{"gitId":"-"},"content":" * Checks if the issue has been modified since the last query, and"},{"lineNumber":232,"author":{"gitId":"-"},"content":" * updates the model to reflect the last modified time."},{"lineNumber":233,"author":{"gitId":"-"},"content":" *"},{"lineNumber":234,"author":{"gitId":"-"},"content":" * @param id - The issue id."},{"lineNumber":235,"author":{"gitId":"-"},"content":" * @returns Observable\u003cboolean\u003e that returns true if the issue has been modified."},{"lineNumber":236,"author":{"gitId":"-"},"content":" */"},{"lineNumber":237,"author":{"gitId":"-"},"content":" toFetchIssue(id: number): Observable\u003cboolean\u003e {"},{"lineNumber":238,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":239,"author":{"gitId":"-"},"content":" octokit.issues.get({"},{"lineNumber":240,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":241,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":242,"author":{"gitId":"-"},"content":" issue_number: id,"},{"lineNumber":243,"author":{"gitId":"-"},"content":" headers: { \u0027If-Modified-Since\u0027: this.issuesLastModifiedManager.get(id) }"},{"lineNumber":244,"author":{"gitId":"-"},"content":" })"},{"lineNumber":245,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":246,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue\u003e) \u003d\u003e {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" this.issuesLastModifiedManager.set(id, response.headers[\u0027last-modified\u0027]);"},{"lineNumber":248,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":250,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchIssuesMessage()))"},{"lineNumber":251,"author":{"gitId":"-"},"content":" );"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" fetchAllMilestones(): Observable\u003cArray\u003c{}\u003e\u003e {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":256,"author":{"gitId":"-"},"content":" octokit.issues.listMilestonesForRepo({"},{"lineNumber":257,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":258,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":259,"author":{"gitId":"-"},"content":" state: \u0027all\u0027,"},{"lineNumber":260,"author":{"gitId":"-"},"content":" per_page: MAX_ITEMS_PER_PAGE,"},{"lineNumber":261,"author":{"gitId":"-"},"content":" headers: GithubService.IF_NONE_MATCH_EMPTY"},{"lineNumber":262,"author":{"gitId":"-"},"content":" })"},{"lineNumber":263,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":264,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" return response[\u0027data\u0027];"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":267,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchMilestoneMessage()))"},{"lineNumber":268,"author":{"gitId":"-"},"content":" );"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" fetchAllLabels(): Observable\u003cArray\u003c{}\u003e\u003e {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":273,"author":{"gitId":"-"},"content":" octokit.issues.listLabelsForRepo({"},{"lineNumber":274,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":275,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":276,"author":{"gitId":"-"},"content":" per_page: MAX_ITEMS_PER_PAGE,"},{"lineNumber":277,"author":{"gitId":"-"},"content":" headers: GithubService.IF_NONE_MATCH_EMPTY"},{"lineNumber":278,"author":{"gitId":"-"},"content":" })"},{"lineNumber":279,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":280,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" return response[\u0027data\u0027];"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":283,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchLabelsMessage()))"},{"lineNumber":284,"author":{"gitId":"-"},"content":" );"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":288,"author":{"gitId":"-"},"content":" * Checks if the given list of users are allowed to be assigned to an issue."},{"lineNumber":289,"author":{"gitId":"-"},"content":" * @param assignees - GitHub usernames to be checked"},{"lineNumber":290,"author":{"gitId":"-"},"content":" */"},{"lineNumber":291,"author":{"gitId":"-"},"content":" areUsersAssignable(assignees: string[]): Observable\u003cvoid\u003e {"},{"lineNumber":292,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":293,"author":{"gitId":"-"},"content":" octokit.issues.listAssignees({"},{"lineNumber":294,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":295,"author":{"gitId":"-"},"content":" repo: REPO"},{"lineNumber":296,"author":{"gitId":"-"},"content":" })"},{"lineNumber":297,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":298,"author":{"gitId":"-"},"content":" map(({ data }: { data: { login: string }[] }) \u003d\u003e data.map(({ login }) \u003d\u003e login)),"},{"lineNumber":299,"author":{"gitId":"-"},"content":" map((assignables: string[]) \u003d\u003e"},{"lineNumber":300,"author":{"gitId":"-"},"content":" assignees.forEach((assignee) \u003d\u003e {"},{"lineNumber":301,"author":{"gitId":"-"},"content":" if (!assignables.includes(assignee)) {"},{"lineNumber":302,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.usersUnassignableMessage(assignee));"},{"lineNumber":303,"author":{"gitId":"-"},"content":" }"},{"lineNumber":304,"author":{"gitId":"-"},"content":" })"},{"lineNumber":305,"author":{"gitId":"-"},"content":" )"},{"lineNumber":306,"author":{"gitId":"-"},"content":" );"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" getUsersAssignable(): Observable\u003cGithubUser[]\u003e {"},{"lineNumber":310,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":311,"author":{"gitId":"-"},"content":" octokit.issues.listAssignees({"},{"lineNumber":312,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":313,"author":{"gitId":"-"},"content":" repo: REPO"},{"lineNumber":314,"author":{"gitId":"-"},"content":" })"},{"lineNumber":315,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":316,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":317,"author":{"gitId":"NereusWB922"},"content":" const data: RawGithubUser[] \u003d response[\u0027data\u0027];"},{"lineNumber":318,"author":{"gitId":"NereusWB922"},"content":" return data.map((rawGithubUser) \u003d\u003e {"},{"lineNumber":319,"author":{"gitId":"NereusWB922"},"content":" return new GithubUser(rawGithubUser);"},{"lineNumber":320,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":322,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchUsersMessage()))"},{"lineNumber":323,"author":{"gitId":"-"},"content":" );"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" fetchEventsForRepo(): Observable\u003cany[]\u003e {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" return from(octokit.issues.listEventsForRepo({ owner: ORG_NAME, repo: REPO, headers: GithubService.IF_NONE_MATCH_EMPTY })).pipe("},{"lineNumber":328,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":329,"author":{"gitId":"-"},"content":" return response[\u0027data\u0027];"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":331,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchEventsMessage()))"},{"lineNumber":332,"author":{"gitId":"-"},"content":" );"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" fetchEventsForRepoCall(pageNumber: number): Observable\u003cGithubResponse\u003cany[]\u003e\u003e {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" return \u003cObservable\u003cGithubResponse\u003cany[]\u003e\u003e\u003efrom("},{"lineNumber":337,"author":{"gitId":"-"},"content":" octokit.activity.listRepoEvents({"},{"lineNumber":338,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":339,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":340,"author":{"gitId":"-"},"content":" page: pageNumber"},{"lineNumber":341,"author":{"gitId":"-"},"content":" })"},{"lineNumber":342,"author":{"gitId":"-"},"content":" ).pipe(catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchActivityEventsMessage())));"},{"lineNumber":343,"author":{"gitId":"-"},"content":" }"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":346,"author":{"gitId":"-"},"content":" * Fetches all events of current repository for Activity Dashboard."},{"lineNumber":347,"author":{"gitId":"-"},"content":" * Adapted from getIssueApiCalls()."},{"lineNumber":348,"author":{"gitId":"-"},"content":" *"},{"lineNumber":349,"author":{"gitId":"-"},"content":" * @returns GithubEvents observable"},{"lineNumber":350,"author":{"gitId":"-"},"content":" */"},{"lineNumber":351,"author":{"gitId":"-"},"content":" fetchAllEventsForRepo(): Observable\u003cGithubEvent[]\u003e {"},{"lineNumber":352,"author":{"gitId":"-"},"content":" let responseInFirstPage: GithubResponse\u003cGithubEvent[]\u003e;"},{"lineNumber":353,"author":{"gitId":"-"},"content":" return this.fetchEventsForRepoCall(1).pipe("},{"lineNumber":354,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubEvent[]\u003e) \u003d\u003e {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" responseInFirstPage \u003d response;"},{"lineNumber":356,"author":{"gitId":"-"},"content":" return getNumberOfPages(response);"},{"lineNumber":357,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":358,"author":{"gitId":"-"},"content":" flatMap((numOfPages: number) \u003d\u003e {"},{"lineNumber":359,"author":{"gitId":"-"},"content":" const apiCalls: Observable\u003cGithubResponse\u003cGithubEvent[]\u003e\u003e[] \u003d [];"},{"lineNumber":360,"author":{"gitId":"-"},"content":" for (let i \u003d 1; i \u003c\u003d numOfPages; i++) {"},{"lineNumber":361,"author":{"gitId":"-"},"content":" apiCalls.push(this.fetchEventsForRepoCall(i));"},{"lineNumber":362,"author":{"gitId":"-"},"content":" }"},{"lineNumber":363,"author":{"gitId":"-"},"content":" return apiCalls.length \u003d\u003d\u003d 0 ? of([]) : forkJoin(apiCalls);"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":365,"author":{"gitId":"-"},"content":" map((responseArray) \u003d\u003e responseArray.map((x) \u003d\u003e x[\u0027data\u0027]))"},{"lineNumber":366,"author":{"gitId":"-"},"content":" );"},{"lineNumber":367,"author":{"gitId":"-"},"content":" }"},{"lineNumber":368,"author":{"gitId":"-"},"content":""},{"lineNumber":369,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":370,"author":{"gitId":"-"},"content":" * Not in use. Fetches data csv file from Organization repository."},{"lineNumber":371,"author":{"gitId":"-"},"content":" */"},{"lineNumber":372,"author":{"gitId":"-"},"content":" fetchDataFile(): Observable\u003c{}\u003e {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":374,"author":{"gitId":"-"},"content":" octokit.repos.getContents({ owner: MOD_ORG, repo: DATA_REPO, path: \u0027data.csv\u0027, headers: GithubService.IF_NONE_MATCH_EMPTY })"},{"lineNumber":375,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":376,"author":{"gitId":"-"},"content":" map((rawData) \u003d\u003e {"},{"lineNumber":377,"author":{"gitId":"-"},"content":" return { data: atob(rawData[\u0027data\u0027][\u0027content\u0027]) };"},{"lineNumber":378,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":379,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchDataFileMessage()))"},{"lineNumber":380,"author":{"gitId":"-"},"content":" );"},{"lineNumber":381,"author":{"gitId":"-"},"content":" }"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":384,"author":{"gitId":"-"},"content":" * Gets information of latest release of WATcher."},{"lineNumber":385,"author":{"gitId":"-"},"content":" * @returns GithubRelease observable"},{"lineNumber":386,"author":{"gitId":"-"},"content":" */"},{"lineNumber":387,"author":{"gitId":"-"},"content":" fetchLatestRelease(): Observable\u003cGithubRelease\u003e {"},{"lineNumber":388,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":389,"author":{"gitId":"-"},"content":" octokit.repos.getLatestRelease({ owner: WATCHER_ORG, repo: WATCHER_REPO, headers: GithubService.IF_NONE_MATCH_EMPTY })"},{"lineNumber":390,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":391,"author":{"gitId":"-"},"content":" map((res) \u003d\u003e res[\u0027data\u0027]),"},{"lineNumber":392,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchLatestReleaseMessage()))"},{"lineNumber":393,"author":{"gitId":"-"},"content":" );"},{"lineNumber":394,"author":{"gitId":"-"},"content":" }"},{"lineNumber":395,"author":{"gitId":"-"},"content":""},{"lineNumber":396,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":397,"author":{"gitId":"-"},"content":" * Fetches the data file that is regulates session information."},{"lineNumber":398,"author":{"gitId":"-"},"content":" * @return Observable\u003cSessionData\u003e representing session information."},{"lineNumber":399,"author":{"gitId":"-"},"content":" */"},{"lineNumber":400,"author":{"gitId":"-"},"content":" fetchSettingsFile(): Observable\u003cSessionData\u003e {"},{"lineNumber":401,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":402,"author":{"gitId":"-"},"content":" octokit.repos.getContents({ owner: MOD_ORG, repo: DATA_REPO, path: \u0027settings.json\u0027, headers: GithubService.IF_NONE_MATCH_EMPTY })"},{"lineNumber":403,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":404,"author":{"gitId":"-"},"content":" map((rawData) \u003d\u003e JSON.parse(atob(rawData[\u0027data\u0027][\u0027content\u0027]))),"},{"lineNumber":405,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchSettingsFileMessage()))"},{"lineNumber":406,"author":{"gitId":"-"},"content":" );"},{"lineNumber":407,"author":{"gitId":"-"},"content":" }"},{"lineNumber":408,"author":{"gitId":"-"},"content":""},{"lineNumber":409,"author":{"gitId":"-"},"content":" fetchAuthenticatedUser(): Observable\u003cGithubUser\u003e {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" return from(octokit.users.getAuthenticated()).pipe("},{"lineNumber":411,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":412,"author":{"gitId":"NereusWB922"},"content":" const data: RawGithubUser \u003d response[\u0027data\u0027];"},{"lineNumber":413,"author":{"gitId":"NereusWB922"},"content":" return new GithubUser(data);"},{"lineNumber":414,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":415,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(ErrorMessageService.unableToFetchAuthenticatedUsersMessage()))"},{"lineNumber":416,"author":{"gitId":"-"},"content":" );"},{"lineNumber":417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":418,"author":{"gitId":"-"},"content":""},{"lineNumber":419,"author":{"gitId":"-"},"content":" getRepoURL(): string {"},{"lineNumber":420,"author":{"gitId":"-"},"content":" return ORG_NAME.concat(\u0027/\u0027).concat(REPO);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" }"},{"lineNumber":422,"author":{"gitId":"-"},"content":""},{"lineNumber":423,"author":{"gitId":"-"},"content":" viewIssueInBrowser(id: number, event: Event) {"},{"lineNumber":424,"author":{"gitId":"-"},"content":" if (id) {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" window.open(\u0027https://github.com/\u0027.concat(this.getRepoURL()).concat(\u0027/issues/\u0027).concat(String(id)));"},{"lineNumber":426,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(new Error(ErrorMessageService.unableToOpenInBrowserMessage()));"},{"lineNumber":428,"author":{"gitId":"-"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":" event.stopPropagation();"},{"lineNumber":430,"author":{"gitId":"-"},"content":" }"},{"lineNumber":431,"author":{"gitId":"-"},"content":""},{"lineNumber":432,"author":{"gitId":"-"},"content":" reset(): void {"},{"lineNumber":433,"author":{"gitId":"-"},"content":" this.logger.info(`GithubService: Resetting issues cache`);"},{"lineNumber":434,"author":{"gitId":"-"},"content":" this.issuesCacheManager.clear();"},{"lineNumber":435,"author":{"gitId":"-"},"content":" this.issuesLastModifiedManager.clear();"},{"lineNumber":436,"author":{"gitId":"-"},"content":" this.issueQueryRefs.clear();"},{"lineNumber":437,"author":{"gitId":"-"},"content":" }"},{"lineNumber":438,"author":{"gitId":"-"},"content":""},{"lineNumber":439,"author":{"gitId":"-"},"content":" getProfilesData(): Promise\u003cResponse\u003e {"},{"lineNumber":440,"author":{"gitId":"-"},"content":" return fetch(AppConfig.clientDataUrl);"},{"lineNumber":441,"author":{"gitId":"-"},"content":" }"},{"lineNumber":442,"author":{"gitId":"-"},"content":""},{"lineNumber":443,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":444,"author":{"gitId":"-"},"content":" * Performs an API call to fetch a page of filtered issues with a given pageNumber."},{"lineNumber":445,"author":{"gitId":"-"},"content":" *"},{"lineNumber":446,"author":{"gitId":"-"},"content":" * The request is sent with the ETag of the latest cached HTTP response."},{"lineNumber":447,"author":{"gitId":"-"},"content":" * If page requested has the same ETag, or the request results in an error,"},{"lineNumber":448,"author":{"gitId":"-"},"content":" * then the cached page is returned instead."},{"lineNumber":449,"author":{"gitId":"-"},"content":" *"},{"lineNumber":450,"author":{"gitId":"-"},"content":" * @param filter - The issue filter"},{"lineNumber":451,"author":{"gitId":"-"},"content":" * @param pageNumber - The page to be fetched"},{"lineNumber":452,"author":{"gitId":"-"},"content":" * @returns An observable representing the response containing a single page of filtered issues"},{"lineNumber":453,"author":{"gitId":"-"},"content":" */"},{"lineNumber":454,"author":{"gitId":"-"},"content":" private getIssuesAPICall(filter: RestGithubIssueFilter, pageNumber: number): Observable\u003cGithubResponse\u003cGithubIssue[]\u003e\u003e {"},{"lineNumber":455,"author":{"gitId":"-"},"content":" const apiCall: Promise\u003cGithubResponse\u003cGithubIssue[]\u003e\u003e \u003d octokit.issues.listForRepo({"},{"lineNumber":456,"author":{"gitId":"-"},"content":" ...filter,"},{"lineNumber":457,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":458,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":459,"author":{"gitId":"-"},"content":" sort: \u0027created\u0027,"},{"lineNumber":460,"author":{"gitId":"-"},"content":" direction: \u0027desc\u0027,"},{"lineNumber":461,"author":{"gitId":"-"},"content":" per_page: 100,"},{"lineNumber":462,"author":{"gitId":"-"},"content":" page: pageNumber,"},{"lineNumber":463,"author":{"gitId":"-"},"content":" headers: { \u0027If-None-Match\u0027: this.issuesCacheManager.getEtagFor(pageNumber) },"},{"lineNumber":464,"author":{"gitId":"-"},"content":" state: \u0027all\u0027"},{"lineNumber":465,"author":{"gitId":"-"},"content":" });"},{"lineNumber":466,"author":{"gitId":"-"},"content":" const apiCall$ \u003d from("},{"lineNumber":467,"author":{"gitId":"-"},"content":" apiCall.catch((err) \u003d\u003e {"},{"lineNumber":468,"author":{"gitId":"-"},"content":" return this.issuesCacheManager.get(pageNumber);"},{"lineNumber":469,"author":{"gitId":"-"},"content":" })"},{"lineNumber":470,"author":{"gitId":"-"},"content":" );"},{"lineNumber":471,"author":{"gitId":"-"},"content":""},{"lineNumber":472,"author":{"gitId":"-"},"content":" return apiCall$.pipe("},{"lineNumber":473,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":474,"author":{"gitId":"-"},"content":" // catchError does not appear to catch an error on an observable created from a promise..."},{"lineNumber":475,"author":{"gitId":"-"},"content":" this.logger.info(`GithubService: Error caught in getIssuesAPICall`);"},{"lineNumber":476,"author":{"gitId":"-"},"content":" return of(this.issuesCacheManager.get(pageNumber));"},{"lineNumber":477,"author":{"gitId":"-"},"content":" })"},{"lineNumber":478,"author":{"gitId":"-"},"content":" );"},{"lineNumber":479,"author":{"gitId":"-"},"content":" }"},{"lineNumber":480,"author":{"gitId":"-"},"content":""},{"lineNumber":481,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":482,"author":{"gitId":"-"},"content":" * Fetches a list of items using a GraphQL query that queries for paginated data."},{"lineNumber":483,"author":{"gitId":"-"},"content":" *"},{"lineNumber":484,"author":{"gitId":"-"},"content":" * @param query - The GraphQL query that queries for paginated data."},{"lineNumber":485,"author":{"gitId":"-"},"content":" * @param variables - Additional variables for the GraphQL query."},{"lineNumber":486,"author":{"gitId":"-"},"content":" * @callback pluckEdges A function that returns a list of edges in a ApolloQueryResult."},{"lineNumber":487,"author":{"gitId":"-"},"content":" * @callback Model Constructor for the item model."},{"lineNumber":488,"author":{"gitId":"-"},"content":" * @returns A list of items from the query."},{"lineNumber":489,"author":{"gitId":"-"},"content":" */"},{"lineNumber":490,"author":{"gitId":"-"},"content":" private fetchGraphqlList\u003cT, M\u003e("},{"lineNumber":491,"author":{"gitId":"-"},"content":" query: DocumentNode,"},{"lineNumber":492,"author":{"gitId":"-"},"content":" variables: {},"},{"lineNumber":493,"author":{"gitId":"-"},"content":" pluckEdges: (results: ApolloQueryResult\u003cT\u003e) \u003d\u003e Array\u003cany\u003e,"},{"lineNumber":494,"author":{"gitId":"-"},"content":" Model: new (data) \u003d\u003e M"},{"lineNumber":495,"author":{"gitId":"-"},"content":" ): Observable\u003cArray\u003cM\u003e\u003e {"},{"lineNumber":496,"author":{"gitId":"-"},"content":" return this.withPagination\u003cT\u003e(pluckEdges, query, variables, false).pipe("},{"lineNumber":497,"author":{"gitId":"-"},"content":" map((results: ApolloQueryResult\u003cT\u003e[]) \u003d\u003e {"},{"lineNumber":498,"author":{"gitId":"-"},"content":" const issues \u003d results.reduce((accumulated, current) \u003d\u003e accumulated.concat(pluckEdges(current)), []);"},{"lineNumber":499,"author":{"gitId":"-"},"content":" return issues.map((issue) \u003d\u003e new Model(issue.node));"},{"lineNumber":500,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":501,"author":{"gitId":"-"},"content":" throwIfEmpty(() \u003d\u003e {"},{"lineNumber":502,"author":{"gitId":"-"},"content":" return new HttpErrorResponse({ status: 304 });"},{"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":" /**"},{"lineNumber":508,"author":{"gitId":"-"},"content":" * Returns an observable that will continually emit the currently accumulated results, until a page that has less"},{"lineNumber":509,"author":{"gitId":"-"},"content":" * than 100 items is found, after which it performs a final emit with the full results array, and completes."},{"lineNumber":510,"author":{"gitId":"-"},"content":" *"},{"lineNumber":511,"author":{"gitId":"-"},"content":" * If `shouldAccumulate` is false, the observable will emit only the latest result, it will still complete on the"},{"lineNumber":512,"author":{"gitId":"-"},"content":" * same condition."},{"lineNumber":513,"author":{"gitId":"-"},"content":" *"},{"lineNumber":514,"author":{"gitId":"-"},"content":" * @callback pluckEdges - A function that returns a list of edges in a ApolloQueryResult."},{"lineNumber":515,"author":{"gitId":"-"},"content":" * @params query - The query to be performed."},{"lineNumber":516,"author":{"gitId":"-"},"content":" * @params variables - The variables for the query."},{"lineNumber":517,"author":{"gitId":"-"},"content":" * @params shouldAccumulate - Whether the observable should accumulate the results."},{"lineNumber":518,"author":{"gitId":"-"},"content":" * @returns an observable"},{"lineNumber":519,"author":{"gitId":"-"},"content":" */"},{"lineNumber":520,"author":{"gitId":"-"},"content":" private withPagination\u003cT\u003e("},{"lineNumber":521,"author":{"gitId":"-"},"content":" pluckEdges: (results: ApolloQueryResult\u003cT\u003e) \u003d\u003e Array\u003cany\u003e,"},{"lineNumber":522,"author":{"gitId":"-"},"content":" query: DocumentNode,"},{"lineNumber":523,"author":{"gitId":"-"},"content":" variables: { [key: string]: any } \u003d {},"},{"lineNumber":524,"author":{"gitId":"-"},"content":" shouldAccumulate: boolean \u003d true"},{"lineNumber":525,"author":{"gitId":"-"},"content":" ): Observable\u003cApolloQueryResult\u003cT\u003e[]\u003e {"},{"lineNumber":526,"author":{"gitId":"-"},"content":" const maxResultsCount \u003d 100;"},{"lineNumber":527,"author":{"gitId":"-"},"content":" const apollo \u003d this.apollo;"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" let accumulatedResults: ApolloQueryResult\u003cT\u003e[] \u003d [];"},{"lineNumber":530,"author":{"gitId":"-"},"content":" const behaviorSubject: BehaviorSubject\u003cApolloQueryResult\u003cT\u003e[]\u003e \u003d new BehaviorSubject(accumulatedResults);"},{"lineNumber":531,"author":{"gitId":"-"},"content":""},{"lineNumber":532,"author":{"gitId":"-"},"content":" async function queryWith(cursor: string): Promise\u003cvoid\u003e {"},{"lineNumber":533,"author":{"gitId":"-"},"content":" const graphqlQuery \u003d apollo.watchQuery\u003cT\u003e({ query, variables: { ...variables, cursor } });"},{"lineNumber":534,"author":{"gitId":"-"},"content":""},{"lineNumber":535,"author":{"gitId":"-"},"content":" await graphqlQuery.refetch().then(async (results: ApolloQueryResult\u003cT\u003e) \u003d\u003e {"},{"lineNumber":536,"author":{"gitId":"-"},"content":" const intermediate \u003d Array.isArray(results) ? results : [results];"},{"lineNumber":537,"author":{"gitId":"-"},"content":" const edges \u003d pluckEdges(results);"},{"lineNumber":538,"author":{"gitId":"-"},"content":" const nextCursor \u003d edges.length \u003d\u003d\u003d 0 ? null : edges[edges.length - 1].cursor;"},{"lineNumber":539,"author":{"gitId":"-"},"content":""},{"lineNumber":540,"author":{"gitId":"-"},"content":" if (shouldAccumulate) {"},{"lineNumber":541,"author":{"gitId":"-"},"content":" accumulatedResults \u003d accumulatedResults.concat(intermediate);"},{"lineNumber":542,"author":{"gitId":"-"},"content":" behaviorSubject.next(accumulatedResults);"},{"lineNumber":543,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":544,"author":{"gitId":"-"},"content":" behaviorSubject.next(intermediate);"},{"lineNumber":545,"author":{"gitId":"-"},"content":" }"},{"lineNumber":546,"author":{"gitId":"-"},"content":" if (edges.length \u003c maxResultsCount || !nextCursor) {"},{"lineNumber":547,"author":{"gitId":"-"},"content":" // No more queries to perform."},{"lineNumber":548,"author":{"gitId":"-"},"content":" behaviorSubject.complete();"},{"lineNumber":549,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":550,"author":{"gitId":"-"},"content":" }"},{"lineNumber":551,"author":{"gitId":"-"},"content":""},{"lineNumber":552,"author":{"gitId":"-"},"content":" // Use a chain of await to ensure that all recursive queries are completed before `complete` is called."},{"lineNumber":553,"author":{"gitId":"-"},"content":" await queryWith(nextCursor);"},{"lineNumber":554,"author":{"gitId":"-"},"content":" });"},{"lineNumber":555,"author":{"gitId":"-"},"content":" }"},{"lineNumber":556,"author":{"gitId":"-"},"content":""},{"lineNumber":557,"author":{"gitId":"-"},"content":" queryWith(null);"},{"lineNumber":558,"author":{"gitId":"-"},"content":""},{"lineNumber":559,"author":{"gitId":"-"},"content":" return behaviorSubject.asObservable();"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":10,"MadLamprey":2,"-":549}},{"path":"src/app/core/services/grouping/assignee-grouping-strategy.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { GithubUser } from \u0027../../models/github-user.model\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Issue } from \u0027../../models/issue.model\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { GithubService } from \u0027../github.service\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { GroupingStrategy } from \u0027./grouping-strategy.interface\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * A GroupingStrategy that groups issues/prs based on their assignees."},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"@Injectable({"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"export class AssigneeGroupingStrategy implements GroupingStrategy {"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" constructor(private githubService: GithubService) {}"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * Retrieves data for a specific assignee."},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * If it is the\"No Assignee\" group, unassigned issues are returned."},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * Otherwise, issues assigned to the specified user are returned."},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" getDataForGroup(issues: Issue[], key: GithubUser): Issue[] {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" if (key \u003d\u003d\u003d GithubUser.NO_ASSIGNEE) {"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" return this.getUnassignedData(issues);"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" return this.getDataAssignedToUser(issues, key);"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * Retrieves an Observable emitting users who can be assigned to issues,"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" * including a special \"No Assignee\" option."},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" getGroups(): Observable\u003cGithubUser[]\u003e {"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" return this.githubService.getUsersAssignable().pipe("},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" map((users) \u003d\u003e {"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" users.push(GithubUser.NO_ASSIGNEE);"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" return users;"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" })"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" );"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" * Groups other than \"No Assignee\" need to be shown on the"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" * hidden group list if empty."},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" isInHiddenList(group: GithubUser): boolean {"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" return group !\u003d\u003d GithubUser.NO_ASSIGNEE;"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" private getDataAssignedToUser(issues: Issue[], user: GithubUser): Issue[] {"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" const filteredIssues \u003d issues.filter((issue) \u003d\u003e {"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" if (this.isPullRequest(issue)) {"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" return this.isPullRequestCreatedByTarget(issue, user);"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" return this.isIssueAssignedToTarget(issue, user);"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" return filteredIssues;"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" private getUnassignedData(issues: Issue[]): Issue[] {"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" return issues.filter((issue) \u003d\u003e !this.isPullRequest(issue) \u0026\u0026 issue.assignees.length \u003d\u003d\u003d 0);"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" private isPullRequest(issue: Issue): boolean {"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" return issue.issueOrPr \u003d\u003d\u003d \u0027PullRequest\u0027;"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" private isPullRequestCreatedByTarget(issue: Issue, target: GithubUser): boolean {"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" return issue.author \u003d\u003d\u003d target.login;"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" private isIssueAssignedToTarget(issue: Issue, target: GithubUser): boolean {"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" const isAssigneesFieldDefined \u003d !!issue.assignees;"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" return isAssigneesFieldDefined \u0026\u0026 issue.assignees.includes(target.login);"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":81}},{"path":"src/app/core/services/grouping/grouping-context.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Injectable, Injector } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { BehaviorSubject, Observable } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../models/github/group.interface\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Issue } from \u0027../../models/issue.model\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { AssigneeGroupingStrategy } from \u0027./assignee-grouping-strategy.service\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { GroupingStrategy } from \u0027./grouping-strategy.interface\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { MilestoneGroupingStrategy } from \u0027./milestone-grouping-strategy.service\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"export enum GroupBy {"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" Assignee \u003d \u0027assignee\u0027,"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" Milestone \u003d \u0027milestone\u0027"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"export const DEFAULT_GROUPBY \u003d GroupBy.Assignee;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * A service responsible for managing the current grouping strategy and providing grouped data."},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"@Injectable({"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"export class GroupingContextService {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" public static readonly GROUP_BY_QUERY_PARAM_KEY \u003d \u0027groupby\u0027;"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" private currGroupBySubject: BehaviorSubject\u003cGroupBy\u003e;"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" currGroupBy: GroupBy;"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" currGroupBy$: Observable\u003cGroupBy\u003e;"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" private groupingStrategyMap: Map\u003cstring, GroupingStrategy\u003e;"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" constructor(private injector: Injector, private route: ActivatedRoute, private router: Router) {"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBy \u003d DEFAULT_GROUPBY;"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBySubject \u003d new BehaviorSubject\u003cGroupBy\u003e(this.currGroupBy);"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBy$ \u003d this.currGroupBySubject.asObservable();"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" this.groupingStrategyMap \u003d new Map\u003cstring, GroupingStrategy\u003e();"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" // Initialize the grouping strategy map with available strategies"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" this.groupingStrategyMap.set(GroupBy.Assignee, this.injector.get(AssigneeGroupingStrategy));"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" this.groupingStrategyMap.set(GroupBy.Milestone, this.injector.get(MilestoneGroupingStrategy));"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * Initializes the service from URL parameters."},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" initializeFromUrlParams() {"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" const groupByParam \u003d this.route.snapshot.queryParamMap.get(GroupingContextService.GROUP_BY_QUERY_PARAM_KEY);"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" if (groupByParam \u0026\u0026 Object.values(GroupBy).includes(groupByParam as GroupBy)) {"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" this.setCurrentGroupingType(groupByParam as GroupBy);"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" } else {"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" this.setCurrentGroupingType(DEFAULT_GROUPBY);"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" * Sets the current grouping type and updates the corresponding query parameter in the URL."},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" * @param groupBy The grouping type to set."},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" setCurrentGroupingType(groupBy: GroupBy): void {"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBy \u003d groupBy;"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" this.currGroupBySubject.next(this.currGroupBy);"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" this.router.navigate([], {"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" relativeTo: this.route,"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" queryParams: {"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" [GroupingContextService.GROUP_BY_QUERY_PARAM_KEY]: groupBy"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" },"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027,"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" replaceUrl: true"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" * Retrieves data for a specific group."},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" * @param issues - An array of issues to be grouped."},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" * @param group - The group by which issues are to be grouped."},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" * @returns An array of issues belonging to the specified group."},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" getDataForGroup(issues: Issue[], group: Group): Issue[] {"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" const strategy \u003d this.groupingStrategyMap.get(this.currGroupBy);"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" return strategy.getDataForGroup(issues, group);"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" * Retrieves all groups available for current grouping strategy."},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" * @returns An Observable emitting an array of groups."},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" getGroups(): Observable\u003cGroup[]\u003e {"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" const strategy \u003d this.groupingStrategyMap.get(this.currGroupBy);"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" return strategy.getGroups();"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" * Determines whether a group should be shown on hidden list if it contains no issues."},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" * @param group - The group to check."},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" * @returns A boolean indicating whether the group should be shown on hidden list if empty."},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" isInHiddenList(group: Group): boolean {"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" const strategy \u003d this.groupingStrategyMap.get(this.currGroupBy);"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" return strategy.isInHiddenList(group);"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" * Resets the current grouping type to the default."},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" reset(): void {"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" this.setCurrentGroupingType(DEFAULT_GROUPBY);"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":110}},{"path":"src/app/core/services/grouping/grouping-strategy.interface.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../models/github/group.interface\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { Issue } from \u0027../../models/issue.model\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" * Represent a strategy for grouping issues/prs."},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * This interface follows the Strategy Pattern, allowing for different"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * strategies to be implemented for grouping issues/prs based on different criteria."},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"export interface GroupingStrategy {"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" * Retrieves data for a specific group."},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * @param issues - An array of issues to be grouped."},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * @param key - The group by which issues are to be grouped."},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * @returns An array of issues belonging to the specified group."},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" getDataForGroup(issues: Issue[], key: Group): Issue[];"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * Retrieves observable emitting groups available for the grouping strategy."},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * @returns An Observable emitting an array of groups."},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" getGroups(): Observable\u003cGroup[]\u003e;"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Determines whether a group should be shown on hidden list if it contains no issues."},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param group - The group to check."},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @returns A boolean indicating whether the group should be shown on hidden list if empty."},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" isInHiddenList(group: Group): boolean;"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":31}},{"path":"src/app/core/services/grouping/milestone-grouping-strategy.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { Issue } from \u0027../../models/issue.model\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Milestone } from \u0027../../models/milestone.model\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { MilestoneService } from \u0027../milestone.service\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { GroupingStrategy } from \u0027./grouping-strategy.interface\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"/**"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * A GroupingStrategy that groups issues/prs based on their milestones."},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"@Injectable({"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"export class MilestoneGroupingStrategy implements GroupingStrategy {"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" constructor(private milestoneService: MilestoneService) {}"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * Retrieves data for a milestone."},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" getDataForGroup(issues: Issue[], key: Milestone): Issue[] {"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" return issues.filter((issue) \u003d\u003e issue.milestone.equals(key));"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Retrieves an Observable emitting milestones available for grouping issues."},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" getGroups(): Observable\u003cMilestone[]\u003e {"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" return this.milestoneService.fetchMilestones().pipe("},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" map((milestones) \u003d\u003e {"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" const parseMilestone \u003d this.milestoneService.parseMilestoneData(milestones);"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" parseMilestone.push(Milestone.IssueWithoutMilestone);"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" parseMilestone.push(Milestone.PRWithoutMilestone);"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" return parseMilestone;"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" })"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" );"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * Groups other than Default Milestone need to be shown on the"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" * hidden group list if empty."},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" isInHiddenList(group: Milestone): boolean {"},{"lineNumber":44,"author":{"gitId":"MadLamprey"},"content":" return group !\u003d\u003d Milestone.IssueWithoutMilestone \u0026\u0026 group !\u003d\u003d Milestone.PRWithoutMilestone;"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":45,"MadLamprey":1}},{"path":"src/app/core/services/issue.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { BehaviorSubject, Observable, of, Subscription, throwError, timer } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { catchError, exhaustMap, finalize, map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import RestGithubIssueFilter from \u0027../models/github/github-issue-filter.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubIssue } from \u0027../models/github/github-issue.model\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Issue, Issues, IssuesFilter } from \u0027../models/issue.model\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../models/view.model\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { UserService } from \u0027./user.service\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027./view.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":13,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":14,"author":{"gitId":"-"},"content":"})"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Responsible for creating and updating issues, and periodically fetching issues"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * using GitHub."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"export class IssueService {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" static readonly POLL_INTERVAL \u003d 5000; // 5 seconds"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" issues: Issues;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" issues$: BehaviorSubject\u003cIssue[]\u003e;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" private sessionId: string;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private issueTeamFilter \u003d \u0027All Teams\u0027;"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private issuesPollSubscription: Subscription;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" /** Whether the IssueService is downloading the data from Github*/"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public isLoading \u003d new BehaviorSubject\u003cboolean\u003e(false);"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" constructor(private githubService: GithubService, private userService: UserService, private viewService: ViewService) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" this.issues$ \u003d new BehaviorSubject(new Array\u003cIssue\u003e());"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" startPollIssues() {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" if (this.issuesPollSubscription \u003d\u003d\u003d undefined) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" if (this.issues$.getValue().length \u003d\u003d\u003d 0) {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.isLoading.next(true);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" this.issuesPollSubscription \u003d timer(0, IssueService.POLL_INTERVAL)"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":44,"author":{"gitId":"-"},"content":" exhaustMap(() \u003d\u003e {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return this.reloadAllIssues().pipe("},{"lineNumber":46,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(err)),"},{"lineNumber":47,"author":{"gitId":"-"},"content":" finalize(() \u003d\u003e this.isLoading.next(false))"},{"lineNumber":48,"author":{"gitId":"-"},"content":" );"},{"lineNumber":49,"author":{"gitId":"-"},"content":" })"},{"lineNumber":50,"author":{"gitId":"-"},"content":" )"},{"lineNumber":51,"author":{"gitId":"-"},"content":" .subscribe();"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" stopPollIssues() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" if (this.issuesPollSubscription) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" this.issuesPollSubscription.unsubscribe();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" this.issuesPollSubscription \u003d undefined;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" reloadAllIssues() {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return this.initializeData();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" getIssue(id: number): Observable\u003cIssue\u003e {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (this.issues \u003d\u003d\u003d undefined) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" return this.getLatestIssue(id);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return of(this.issues[id]);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" getLatestIssue(id: number): Observable\u003cIssue\u003e {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return this.githubService.fetchIssueGraphql(id).pipe("},{"lineNumber":76,"author":{"gitId":"-"},"content":" map((response: GithubIssue) \u003d\u003e {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" this.createAndSaveIssueModels([response]);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return this.issues[id];"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":80,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return of(this.issues[id]);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" })"},{"lineNumber":83,"author":{"gitId":"-"},"content":" );"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * This function will update the issue\u0027s state of the application. This function needs to be called whenever a issue is added/updated."},{"lineNumber":88,"author":{"gitId":"-"},"content":" *"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * @params issuesToUpdate - An array of issues to update the state of the application with."},{"lineNumber":90,"author":{"gitId":"-"},"content":" */"},{"lineNumber":91,"author":{"gitId":"-"},"content":" private updateLocalStore(issuesToUpdate: Issue[]) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" const newIssues \u003d { ...this.issues };"},{"lineNumber":93,"author":{"gitId":"-"},"content":" issuesToUpdate.forEach((issue) \u003d\u003e {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" newIssues[issue.id] \u003d issue;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" });"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.issues \u003d newIssues;"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" this.issues$.next(Object.values(this.issues));"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" reset(resetSessionId: boolean) {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" if (resetSessionId) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" this.sessionId \u003d undefined;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" this.issues \u003d undefined;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" this.issues$.next(new Array\u003cIssue\u003e());"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" this.stopPollIssues();"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" private initializeData(): Observable\u003cIssue[]\u003e {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" let issuesAPICallsByFilter: Observable\u003cArray\u003cGithubIssue\u003e\u003e;"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" switch (IssuesFilter[this.viewService.currentView][this.userService.currentUser.role]) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" case \u0027FILTER_BY_CREATOR\u0027:"},{"lineNumber":117,"author":{"gitId":"-"},"content":" issuesAPICallsByFilter \u003d this.githubService.fetchIssuesGraphql("},{"lineNumber":118,"author":{"gitId":"-"},"content":" new RestGithubIssueFilter({ creator: this.userService.currentUser.loginId })"},{"lineNumber":119,"author":{"gitId":"-"},"content":" );"},{"lineNumber":120,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" case \u0027NO_FILTER\u0027:"},{"lineNumber":122,"author":{"gitId":"-"},"content":" issuesAPICallsByFilter \u003d this.githubService.fetchIssuesGraphql(new RestGithubIssueFilter({}));"},{"lineNumber":123,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" case \u0027NO_ACCESS\u0027:"},{"lineNumber":125,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return of([]);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" const fetchedIssueIds: number[] \u003d [];"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" return issuesAPICallsByFilter.pipe("},{"lineNumber":132,"author":{"gitId":"-"},"content":" map((githubIssues: GithubIssue[]) \u003d\u003e {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" const issues \u003d this.createAndSaveIssueModels(githubIssues);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" for (const issue of issues) {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" fetchedIssueIds.push(issue.id);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" const outdatedIssueIds: number[] \u003d this.getOutdatedIssueIds(fetchedIssueIds);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" this.deleteIssuesFromLocalStore(outdatedIssueIds);"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" if (this.issues \u003d\u003d\u003d undefined) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" return [];"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":" return Object.values(this.issues);"},{"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":" private createAndSaveIssueModels(githubIssues: GithubIssue[]): Issue[] {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" const issues: Issue[] \u003d [];"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" for (const githubIssue of githubIssues) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" const issue \u003d this.createIssueModel(githubIssue);"},{"lineNumber":154,"author":{"gitId":"-"},"content":" issues.push(issue);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":" this.updateLocalStore(issues);"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" return issues;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":" private deleteIssuesFromLocalStore(ids: number[]): void {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" const withoutIssuesToRemove \u003d { ...this.issues };"},{"lineNumber":163,"author":{"gitId":"-"},"content":" for (const id of ids) {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" delete withoutIssuesToRemove[id];"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" this.issues \u003d withoutIssuesToRemove;"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" this.issues$.next(Object.values(this.issues));"},{"lineNumber":170,"author":{"gitId":"-"},"content":" }"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":173,"author":{"gitId":"-"},"content":" * Returns an array of outdated issue ids by comparing the ids of the recently"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * fetched issues with the current issue ids in the local store"},{"lineNumber":175,"author":{"gitId":"-"},"content":" */"},{"lineNumber":176,"author":{"gitId":"-"},"content":" private getOutdatedIssueIds(fetchedIssueIds: number[]): number[] {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":178,"author":{"gitId":"-"},"content":" Ignore for first fetch or ignore if there is no fetch result"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" We also have to ignore for no fetch result as the cache might return a"},{"lineNumber":181,"author":{"gitId":"-"},"content":" 304 reponse with no differences in issues, resulting in the fetchIssueIds"},{"lineNumber":182,"author":{"gitId":"-"},"content":" to be empty"},{"lineNumber":183,"author":{"gitId":"-"},"content":" */"},{"lineNumber":184,"author":{"gitId":"-"},"content":" if (this.issues \u003d\u003d\u003d undefined || !fetchedIssueIds.length) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" return [];"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"-"},"content":" const fetchedIssueIdsSet \u003d new Set\u003cnumber\u003e(fetchedIssueIds);"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" const result \u003d Object.keys(this.issues)"},{"lineNumber":191,"author":{"gitId":"-"},"content":" .map((x) \u003d\u003e +x)"},{"lineNumber":192,"author":{"gitId":"-"},"content":" .filter((issueId) \u003d\u003e !fetchedIssueIdsSet.has(issueId));"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" return result;"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" private createIssueModel(githubIssue: GithubIssue): Issue {"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" switch (this.viewService.currentView) {"},{"lineNumber":199,"author":{"gitId":"NereusWB922"},"content":" case View.issuesViewer:"},{"lineNumber":200,"author":{"gitId":"-"},"content":" return Issue.createPhaseBugReportingIssue(githubIssue);"},{"lineNumber":201,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":202,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" setIssueTeamFilter(filterValue: string) {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" if (filterValue) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" this.issueTeamFilter \u003d filterValue;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" setSessionId(sessionId: string) {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" this.sessionId \u003d sessionId;"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":" getIssueTeamFilter(): string {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" return this.issueTeamFilter;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":6,"-":213}},{"path":"src/app/core/services/label.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":"import { BehaviorSubject, EMPTY, Observable, of, Subject, Subscription, timer } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { catchError, exhaustMap, finalize, map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Label, SimpleLabel } from \u0027../models/label.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"/* The threshold to decide if color is dark or light."},{"lineNumber":8,"author":{"gitId":"-"},"content":"A higher threshold value will result in more colors determined to be \"dark\"."},{"lineNumber":9,"author":{"gitId":"-"},"content":"W3C recommendation is 0.179, but 0.184 is chosen so that some colors (like bright red)"},{"lineNumber":10,"author":{"gitId":"-"},"content":"are considered dark (Github too consider them dark) */"},{"lineNumber":11,"author":{"gitId":"-"},"content":"const COLOR_DARKNESS_THRESHOLD \u003d 0.184;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"const COLOR_BLACK \u003d \u0027000000\u0027; // Dark color for text with light background"},{"lineNumber":14,"author":{"gitId":"-"},"content":"const COLOR_WHITE \u003d \u0027ffffff\u0027; // Light color for text with dark background"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":17,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":18,"author":{"gitId":"-"},"content":"})"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Responsible for retrieval and parsing of label data"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * from the GitHub repository for the WATcher application."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":"export class LabelService {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" static readonly POLL_INTERVAL \u003d 5000; // 5 seconds"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" labels: Label[];"},{"lineNumber":28,"author":{"gitId":"-"},"content":" simpleLabels: SimpleLabel[];"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private labelsPollSubscription: Subscription;"},{"lineNumber":31,"author":{"gitId":"Arif-Khalid"},"content":" private labelsSubject \u003d new Subject\u003cSimpleLabel[]\u003e();"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" constructor(private githubService: GithubService) {}"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" startPollLabels() {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" if (this.labelsPollSubscription) {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.labelsPollSubscription \u003d timer(0, LabelService.POLL_INTERVAL)"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":41,"author":{"gitId":"-"},"content":" exhaustMap(() \u003d\u003e {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return this.fetchLabels().pipe("},{"lineNumber":43,"author":{"gitId":"-"},"content":" catchError(() \u003d\u003e {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return EMPTY;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" })"},{"lineNumber":46,"author":{"gitId":"-"},"content":" );"},{"lineNumber":47,"author":{"gitId":"-"},"content":" })"},{"lineNumber":48,"author":{"gitId":"-"},"content":" )"},{"lineNumber":49,"author":{"gitId":"-"},"content":" .subscribe(() \u003d\u003e {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" this.labelsSubject.next(this.simpleLabels);"},{"lineNumber":51,"author":{"gitId":"-"},"content":" });"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" stopPollLabels() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" if (this.labelsPollSubscription) {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" this.labelsPollSubscription.unsubscribe();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" this.labelsPollSubscription \u003d undefined;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" connect(): Observable\u003cSimpleLabel[]\u003e {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" return this.labelsSubject.asObservable();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * Fetch labels from Github."},{"lineNumber":67,"author":{"gitId":"-"},"content":" */"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public fetchLabels(): Observable\u003cany\u003e {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return this.githubService.fetchAllLabels().pipe("},{"lineNumber":70,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" this.labels \u003d this.parseLabelData(response);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" this.simpleLabels \u003d this.labels;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" this.labelsSubject.next(this.simpleLabels);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" return response;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" })"},{"lineNumber":76,"author":{"gitId":"-"},"content":" );"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * Parses label information and returns an array of Label objects."},{"lineNumber":81,"author":{"gitId":"-"},"content":" * @param labels - Label Information from API."},{"lineNumber":82,"author":{"gitId":"-"},"content":" */"},{"lineNumber":83,"author":{"gitId":"-"},"content":" parseLabelData(labels: Array\u003cany\u003e): Label[] {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" const labelData: Label[] \u003d [];"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" for (const label of labels) {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" labelData.push(new Label(label));"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" return labelData;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Returns true if the given color is considered \"dark\""},{"lineNumber":94,"author":{"gitId":"-"},"content":" * The color is considered \"dark\" if its luminance is less than COLOR_DARKNESS_THRESHOLD"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * @param inputColor: the color"},{"lineNumber":96,"author":{"gitId":"-"},"content":" */"},{"lineNumber":97,"author":{"gitId":"-"},"content":" isDarkColor(inputColor: string): boolean {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" const COLOR \u003d inputColor.charAt(0) \u003d\u003d\u003d \u0027#\u0027 ? inputColor.substring(1, 7) : inputColor;"},{"lineNumber":99,"author":{"gitId":"-"},"content":" const R \u003d parseInt(COLOR.substring(0, 2), 16);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" const G \u003d parseInt(COLOR.substring(2, 4), 16);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" const B \u003d parseInt(COLOR.substring(4, 6), 16);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" const RGB \u003d [R / 255, G / 255, B / 255];"},{"lineNumber":103,"author":{"gitId":"-"},"content":" const LINEAR_RGB \u003d RGB.map((col) \u003d\u003e {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (col \u003c\u003d 0.03928) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return col / 12.92;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":" return Math.pow((col + 0.055) / 1.055, 2.4);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" });"},{"lineNumber":109,"author":{"gitId":"-"},"content":" // Calculate the luminance of the color"},{"lineNumber":110,"author":{"gitId":"-"},"content":" const LUMINANCE \u003d 0.2126 * LINEAR_RGB[0] + 0.7152 * LINEAR_RGB[1] + 0.0722 * LINEAR_RGB[2];"},{"lineNumber":111,"author":{"gitId":"-"},"content":" // The color is \"dark\" if the luminance is lower than the threshold"},{"lineNumber":112,"author":{"gitId":"-"},"content":" return LUMINANCE \u003c COLOR_DARKNESS_THRESHOLD;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Returns a css style for the background and text color of the label"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * @param color: the color of the label"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * @return the style with background-color in rgb"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * @throws exception if input is an invalid color code"},{"lineNumber":120,"author":{"gitId":"-"},"content":" */"},{"lineNumber":121,"author":{"gitId":"-"},"content":" setLabelStyle(color: string) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" let textColor: string;"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" textColor \u003d this.isDarkColor(color) ? COLOR_WHITE : COLOR_BLACK;"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" const styles \u003d {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u0027background-color\u0027: `#${color}`,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" color: `#${textColor}`"},{"lineNumber":129,"author":{"gitId":"-"},"content":" };"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" return styles;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" reset() {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" this.labels \u003d undefined;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" this.simpleLabels \u003d undefined;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" this.stopPollLabels();"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":2,"-":137}},{"path":"src/app/core/services/milestone.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Milestone } from \u0027../models/milestone.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":8,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":9,"author":{"gitId":"-"},"content":"})"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * Responsible for retrieval and parsing and syncing of milestone data"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * from the GitHub repository for the WATcher application."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"-"},"content":"export class MilestoneService {"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" milestones: Milestone[] \u003d [];"},{"lineNumber":17,"author":{"gitId":"-"},"content":" hasNoMilestones: boolean;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" constructor(private githubService: GithubService) {}"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Fetch all milestones from github."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public fetchMilestones(): Observable\u003cany\u003e {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return this.githubService.fetchAllMilestones().pipe("},{"lineNumber":26,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.milestones \u003d this.parseMilestoneData(response);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.hasNoMilestones \u003d response.length \u003d\u003d\u003d 0;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" return response;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" })"},{"lineNumber":31,"author":{"gitId":"-"},"content":" );"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Parses milestone information and returns an array of Milestone objects."},{"lineNumber":36,"author":{"gitId":"-"},"content":" * @param milestones - Milestone Information from API."},{"lineNumber":37,"author":{"gitId":"-"},"content":" */"},{"lineNumber":38,"author":{"gitId":"-"},"content":" parseMilestoneData(milestones: Array\u003cany\u003e): Milestone[] {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" const milestoneData: Milestone[] \u003d [];"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" for (const milestone of milestones) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" milestoneData.push(new Milestone(milestone));"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":" milestoneData.sort((a: Milestone, b: Milestone) \u003d\u003e a.title.localeCompare(b.title));"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" return milestoneData;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" * Gets the open milestone with the earliest deadline."},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" * Returns null if there is no open milestone with deadline."},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" getEarliestOpenMilestone(): Milestone {"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" let earliestOpenMilestone: Milestone \u003d null;"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" for (const milestone of this.milestones) {"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" if (!milestone.deadline || milestone.state !\u003d\u003d \u0027open\u0027) {"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" continue;"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" if (earliestOpenMilestone \u003d\u003d\u003d null) {"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" earliestOpenMilestone \u003d milestone;"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" } else if (milestone.deadline \u003c earliestOpenMilestone.deadline) {"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" earliestOpenMilestone \u003d milestone;"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" return earliestOpenMilestone;"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" * Gets the closed milestone with the latest deadline."},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" * Returns null if there is no closed milestone with deadline."},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" getLatestClosedMilestone(): Milestone {"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" let latestClosedMilestone: Milestone \u003d null;"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" for (const milestone of this.milestones) {"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" if (!milestone.deadline || milestone.state !\u003d\u003d \u0027closed\u0027) {"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" continue;"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" if (latestClosedMilestone \u003d\u003d\u003d null) {"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" latestClosedMilestone \u003d milestone;"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" } else if (milestone.deadline \u003e latestClosedMilestone.deadline) {"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" latestClosedMilestone \u003d milestone;"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" return latestClosedMilestone;"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":39,"-":47}},{"path":"src/app/core/services/view.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import { BehaviorSubject, Observable, of, Subject } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { STORAGE_KEYS } from \u0027../constants/storage-keys.constants\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Repo } from \u0027../models/repo.model\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { SessionData } from \u0027../models/session.model\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../models/view.model\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027./error-message.service\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027./logging.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { RepoUrlCacheService } from \u0027./repo-url-cache.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"export const SESSION_AVALIABILITY_FIX_FAILED \u003d \u0027Session Availability Fix failed.\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" * The title of each view that appears in the header bar."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"export const ViewDescription \u003d {"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" [View.issuesViewer]: \u0027Issues Dashboard\u0027,"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" [View.activityDashboard]: \u0027Activity Dashboard\u0027"},{"lineNumber":22,"author":{"gitId":"-"},"content":"};"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * All data of the session."},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Add accessible views here."},{"lineNumber":27,"author":{"gitId":"-"},"content":" */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"export const STARTING_SESSION_DATA: SessionData \u003d {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" sessionRepo: ["},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" { view: View.issuesViewer, repos: [] }"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" // { view: View.activityDashboard, repos: [] }"},{"lineNumber":32,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":33,"author":{"gitId":"-"},"content":"};"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"export const STARTING_VIEW \u003d View.issuesViewer;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":38,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":39,"author":{"gitId":"-"},"content":"})"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Responsible for managing the current selected feature of WATcher as well as the"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * current session data and repository details related to the session."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":"export class ViewService {"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" public static readonly REPO_QUERY_PARAM_KEY \u003d \u0027repo\u0027;"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" public currentView: View \u003d STARTING_VIEW;"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" public currentRepo: Repo; // current or main repository of current view"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" public otherRepos: Repo[]; // more repositories relevant to this view"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" repoSetSource \u003d new BehaviorSubject(false);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" repoSetState \u003d this.repoSetSource.asObservable();"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Expose an observable to track changes to currentRepo"},{"lineNumber":57,"author":{"gitId":"-"},"content":" *"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * TODO - replace all references to currentRepo to have"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * dependencies subscribe to this observable?"},{"lineNumber":60,"author":{"gitId":"-"},"content":" */"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public repoChanged$: Subject\u003cRepo | null\u003e \u003d new Subject();"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" /** Whether the ViewService is changing the repository */"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public isChangingRepo \u003d new BehaviorSubject\u003cboolean\u003e(false);"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" public sessionData \u003d STARTING_SESSION_DATA; // stores session data for the session"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" constructor("},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" private githubService: GithubService,"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" private repoUrlCacheService: RepoUrlCacheService,"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" public logger: LoggingService,"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" private route: ActivatedRoute,"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" private router: Router"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" ) {}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * Sets the current main repository and additional repos if any."},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" * Updates session data in View Service and local storage."},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Updates Github Service with current repository."},{"lineNumber":80,"author":{"gitId":"-"},"content":" * @param repo Main current repository"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * @param repos Additional repositories"},{"lineNumber":82,"author":{"gitId":"-"},"content":" */"},{"lineNumber":83,"author":{"gitId":"-"},"content":" setRepository(repo: Repo, repos?: Repo[]): void {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" this.currentRepo \u003d repo;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.otherRepos \u003d repos ? repos : [];"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" this.sessionData.sessionRepo.find((x) \u003d\u003e x.view \u003d\u003d\u003d this.currentView).repos \u003d this.getRepository();"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" this.githubService.storeViewDetails(this.currentRepo.owner, this.currentRepo.name);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" localStorage.setItem(\u0027sessionData\u0027, JSON.stringify(this.sessionData));"},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" this.router.navigate([\u0027issuesViewer\u0027], {"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" queryParams: {"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" [ViewService.REPO_QUERY_PARAM_KEY]: repo.toString()"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" },"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Changes current respository to a new repository."},{"lineNumber":99,"author":{"gitId":"-"},"content":" * @param repo New current repository"},{"lineNumber":100,"author":{"gitId":"-"},"content":" */"},{"lineNumber":101,"author":{"gitId":"-"},"content":" private changeCurrentRepository(repo: Repo): void {"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" this.logger.info(`ViewService: Changing current repository to \u0027${repo}\u0027`);"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" if (this.currentView \u003d\u003d\u003d View.issuesViewer) {"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" /** Adds past repositories to view */"},{"lineNumber":106,"author":{"gitId":"-"},"content":" (this.otherRepos || []).push(this.currentRepo);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":" this.setRepository(repo, this.otherRepos);"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" this.repoUrlCacheService.cache(repo.toString());"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" this.repoChanged$.next(repo);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Change repository if a valid repository is provided"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * @param repo New repository"},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" async changeRepositoryIfValid(repo: Repo) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" this.isChangingRepo.next(true);"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" const isValidRepository \u003d await this.githubService.isRepositoryPresent(repo.owner, repo.name).toPromise();"},{"lineNumber":123,"author":{"gitId":"-"},"content":" if (!isValidRepository) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" this.isChangingRepo.next(false);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.repositoryNotPresentMessage());"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" this.changeCurrentRepository(repo);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" this.isChangingRepo.next(false);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Returns the full repository array of the current feature."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" getRepository(): Repo[] {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" return [this.currentRepo].concat(this.otherRepos);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":140,"author":{"gitId":"-"},"content":" * Retrieves the repository url from local storage and sets to current repository."},{"lineNumber":141,"author":{"gitId":"-"},"content":" */"},{"lineNumber":142,"author":{"gitId":"-"},"content":" async initializeCurrentRepository() {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" const org \u003d window.localStorage.getItem(STORAGE_KEYS.ORG);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" const repoName \u003d window.localStorage.getItem(STORAGE_KEYS.DATA_REPO);"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":" this.logger.info(`ViewService: received initial org (${org}) and initial name (${repoName})`);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" let repo: Repo;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" if (!org || !repoName) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" repo \u003d Repo.ofEmptyRepo();"},{"lineNumber":149,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" repo \u003d new Repo(org, repoName);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":" const isValidRepository \u003d await this.githubService.isRepositoryPresent(repo.owner, repo.name).toPromise();"},{"lineNumber":153,"author":{"gitId":"-"},"content":" if (!isValidRepository) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.repositoryNotPresentMessage());"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" this.logger.info(`ViewService: Repo is ${repo}`);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.setRepository(repo);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" this.repoSetSource.next(true);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":162,"author":{"gitId":"nknguyenhc"},"content":" * Set items in the local storage corresponding to the next URL."},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" * This includes checking if the view is valid, and if the repo is of the correct format."},{"lineNumber":164,"author":{"gitId":"nknguyenhc"},"content":" * @param url The partial URL without the host, e.g. `/issuesViewer?repo\u003dCATcher%2FWATcher."},{"lineNumber":165,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":166,"author":{"gitId":"nknguyenhc"},"content":" setupFromUrl(url: string): Observable\u003cvoid\u003e {"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" return of(this.getViewAndRepoFromUrl(url)).pipe("},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":" map(([viewName, repoName]) \u003d\u003e {"},{"lineNumber":169,"author":{"gitId":"NereusWB922"},"content":" if (!this.isViewAllowed(viewName)) {"},{"lineNumber":170,"author":{"gitId":"nknguyenhc"},"content":" throw new Error(ErrorMessageService.invalidUrlMessage());"},{"lineNumber":171,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":172,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":173,"author":{"gitId":"nknguyenhc"},"content":" if (repoName \u003d\u003d\u003d null) {"},{"lineNumber":174,"author":{"gitId":"nknguyenhc"},"content":" throw new Error(ErrorMessageService.invalidUrlMessage());"},{"lineNumber":175,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":176,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":177,"author":{"gitId":"nknguyenhc"},"content":" const newRepo \u003d Repo.of(repoName);"},{"lineNumber":178,"author":{"gitId":"nknguyenhc"},"content":" if (newRepo) {"},{"lineNumber":179,"author":{"gitId":"nknguyenhc"},"content":" window.localStorage.setItem(STORAGE_KEYS.ORG, newRepo.owner);"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" window.localStorage.setItem(STORAGE_KEYS.DATA_REPO, newRepo.name);"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" this.repoUrlCacheService.cache(newRepo.toString());"},{"lineNumber":182,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":183,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":184,"author":{"gitId":"nknguyenhc"},"content":" );"},{"lineNumber":185,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":186,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":187,"author":{"gitId":"NereusWB922"},"content":" /**"},{"lineNumber":188,"author":{"gitId":"NereusWB922"},"content":" * Initializes a repo based on the URL parameters and changes the repo if valid."},{"lineNumber":189,"author":{"gitId":"NereusWB922"},"content":" */"},{"lineNumber":190,"author":{"gitId":"NereusWB922"},"content":" initializeRepoFromUrlParams(): void {"},{"lineNumber":191,"author":{"gitId":"NereusWB922"},"content":" const repoParams \u003d this.route.snapshot.queryParamMap.get(ViewService.REPO_QUERY_PARAM_KEY);"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":193,"author":{"gitId":"NereusWB922"},"content":" const newRepo \u003d Repo.of(repoParams);"},{"lineNumber":194,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":" this.changeRepositoryIfValid(newRepo);"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" getViewAndRepoFromUrl(url: string): [string, string] {"},{"lineNumber":199,"author":{"gitId":"nknguyenhc"},"content":" const urlObject \u003d new URL(`${location.protocol}//${location.host}${url}`);"},{"lineNumber":200,"author":{"gitId":"nknguyenhc"},"content":" const pathname \u003d urlObject.pathname;"},{"lineNumber":201,"author":{"gitId":"NereusWB922"},"content":" const reponame \u003d urlObject.searchParams.get(ViewService.REPO_QUERY_PARAM_KEY);"},{"lineNumber":202,"author":{"gitId":"nknguyenhc"},"content":" return [pathname, reponame];"},{"lineNumber":203,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":204,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":205,"author":{"gitId":"NereusWB922"},"content":" isViewAllowed(viewName: string) {"},{"lineNumber":206,"author":{"gitId":"NereusWB922"},"content":" return viewName \u003d\u003d\u003d \u0027/\u0027 + View.issuesViewer;"},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":" isRepoSet(): boolean {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" return this.repoSetSource.getValue();"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":214,"author":{"gitId":"NereusWB922"},"content":" * Changes view and updates View Service\u0027s properties."},{"lineNumber":215,"author":{"gitId":"NereusWB922"},"content":" * @param view New view"},{"lineNumber":216,"author":{"gitId":"-"},"content":" */"},{"lineNumber":217,"author":{"gitId":"NereusWB922"},"content":" changeView(view: View) {"},{"lineNumber":218,"author":{"gitId":"NereusWB922"},"content":" this.currentView \u003d view;"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" // For now, assumes repository stays the same"},{"lineNumber":221,"author":{"gitId":"NereusWB922"},"content":" this.githubService.storeViewDetails(this.currentRepo.owner, this.currentRepo.name);"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":" public getCurrentRepositoryURL() {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" return this.currentRepo.owner.concat(\u0027/\u0027).concat(this.currentRepo.name);"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":" reset() {"},{"lineNumber":229,"author":{"gitId":"NereusWB922"},"content":" this.currentView \u003d STARTING_VIEW;"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":42,"NereusWB922":52,"-":137}},{"path":"src/app/issues-viewer/card-view/card-view.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".card-column {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" margin: 8px;"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":" height: 77vh;"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":" display: flex;"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":" flex-direction: column;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".card {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" margin: 8px 0px 8px 0px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".mat-card-title {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":14,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":15,"author":{"gitId":"-"},"content":" font-size: 12px;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" overflow: auto;"},{"lineNumber":18,"author":{"gitId":"-"},"content":" word-break: break-word;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":".column-header .mat-card-title {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" font-size: 14px;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"}"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":".mat-card {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" padding: 10px;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"}"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":":host ::ng-deep div.mat-card-header-text {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" margin: 2px;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"div.column-header .mat-card-title {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" margin: 0;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"div.column-header {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" z-index: 5;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"div.column-header .mat-card-header {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":".scrollable-container {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" margin-bottom: 2px;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":"/* Ref: https://css-scroll-shadows.vercel.app */"},{"lineNumber":56,"author":{"gitId":"-"},"content":".scrollable-container::before {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" z-index: 2;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" height: 6px;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" background-image: linear-gradient(to bottom, white 66%, transparent);"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":".scrollable-container::after {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" z-index: 2;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" top: 100%;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" height: 6px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" background-image: linear-gradient(to top, white 66%, transparent);"},{"lineNumber":77,"author":{"gitId":"-"},"content":"}"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":".scrollable-container-wrapper {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" scrollbar-width: none;"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" overflow: auto;"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" flex-grow: 1;"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container-wrapper::-webkit-scrollbar {"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" display: none;"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":".scrollable-container-wrapper::before {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":92,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":94,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":97,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" height: 5px;"},{"lineNumber":99,"author":{"gitId":"-"},"content":" background-image: radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.5), transparent);"},{"lineNumber":100,"author":{"gitId":"-"},"content":"}"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":".scrollable-container-wrapper::after {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" bottom: 0;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" height: 5px;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" background-image: radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.5), transparent);"},{"lineNumber":112,"author":{"gitId":"-"},"content":"}"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":".loading-spinner {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":118,"author":{"gitId":"-"},"content":"}"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":".mat-card-subtitle {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":122,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" font-size: 11px;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" text-align: left;"},{"lineNumber":125,"author":{"gitId":"-"},"content":" overflow: auto;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" margin: 6px 0;"},{"lineNumber":127,"author":{"gitId":"-"},"content":"}"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":".row-count {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" background-color: rgb(222, 222, 222);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" border-radius: 3px;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" cursor: default;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" padding: 6px;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" color: rgb(0, 0, 0);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" font-weight: 410;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" display: inline-flex;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" font-size: 14px;"},{"lineNumber":138,"author":{"gitId":"-"},"content":"}"},{"lineNumber":139,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":140,"author":{"gitId":"nknguyenhc"},"content":":host ::ng-deep .pagination-hide-arrow .mat-paginator-navigation-previous {"},{"lineNumber":141,"author":{"gitId":"nknguyenhc"},"content":" display: none !important;"},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":143,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":144,"author":{"gitId":"nknguyenhc"},"content":":host ::ng-deep .pagination-hide-arrow .mat-paginator-navigation-next {"},{"lineNumber":145,"author":{"gitId":"nknguyenhc"},"content":" display: none !important;"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":147,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":":host ::ng-deep .pagination-hide-arrow .mat-paginator-range-actions {"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" display: none !important;"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":"}"}],"authorContributionMap":{"nknguyenhc":22,"-":128}},{"path":"src/app/issues-viewer/card-view/card-view.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"card-column\"\u003e"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" \u003cng-container"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" [ngTemplateOutlet]\u003d\"getHeaderTemplate() || defaultHeader\""},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" [ngTemplateOutletContext]\u003d\"{ $implicit: this.group }\""},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" \u003e\u003c/ng-container\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"scrollable-container-wrapper\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"scrollable-container\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"issue-pr-cards\" *ngFor\u003d\"let issue of this.issues$ | async; index as i\"\u003e"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":" \u003capp-issue-pr-card [issue]\u003d\"issue\" [filter]\u003d\"issues.filter\" [milestoneService]\u003d\"milestoneService\"\u003e\u003c/app-issue-pr-card\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cmat-card class\u003d\"loading-spinner\" *ngIf\u003d\"this.issues.isLoading$ | async\"\u003e"},{"lineNumber":12,"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":13,"author":{"gitId":"-"},"content":" \u003c/mat-card\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-paginator"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":" [pageSize]\u003d\"pageSize\""},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" [pageSizeOptions]\u003d\"[10, 20, 50]\""},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" [class]\u003d\"pageSize \u003e\u003d issueLength ? \u0027pagination-hide-arrow\u0027 : \u0027\u0027\""},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" (page)\u003d\"updatePageSize($event.pageSize)\""},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" \u003e\u003c/mat-paginator\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"\u003c!-- Template --\u003e"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #defaultHeader\u003e"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card class\u003d\"loading-spinner\"\u003e"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-progress-spinner color\u003d\"primary\" mode\u003d\"indeterminate\" diameter\u003d\"50\" strokeWidth\u003d\"5\"\u003e\u003c/mat-progress-spinner\u003e"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #assigneeHeader let-assignee\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"column-header\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cmat-card\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cmat-card-header [ngStyle]\u003d\"{ height: \u002740px\u0027 }\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":36,"author":{"gitId":"-"},"content":" mat-card-avatar"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" *ngIf\u003d\"assignee\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" [ngStyle]\u003d\"{"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" background: \u0027url(\u0027 + assignee.avatar_url + \u0027)\u0027,"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u0027background-size\u0027: \u002740px\u0027"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }\""},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003cmat-card-title\u003e"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" {{ assignee.login }}"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/mat-card-title\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row-count\"\u003e{{ this.issues.count }}\u003c/div\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003c/mat-card-header\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/mat-card\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #milestoneHeader let-milestone\u003e"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"column-header\"\u003e"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card\u003e"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-header [ngStyle]\u003d\"{ height: \u002740px\u0027 }\"\u003e"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-title\u003e"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" {{ milestone.title }}"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card-title\u003e"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"row-count\"\u003e{{ this.issues.count }}\u003c/div\u003e"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card-header\u003e"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"}],"authorContributionMap":{"nknguyenhc":6,"NereusWB922":28,"MadLamprey":1,"-":28}},{"path":"src/app/issues-viewer/card-view/card-view.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" AfterViewInit,"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" Component,"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" ElementRef,"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" EventEmitter,"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" Input,"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" OnDestroy,"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" OnInit,"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" Output,"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" TemplateRef,"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" ViewChild"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"} from \u0027@angular/core\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { MatPaginator } from \u0027@angular/material/paginator\u0027;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import { Observable, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../core/models/github/group.interface\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":"import { FiltersService } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"import { GroupBy, GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../../core/services/issue.service\u0027;"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":"import { MilestoneService } from \u0027../../core/services/milestone.service\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import { FilterableComponent, FilterableSource } from \u0027../../shared/issue-tables/filterableTypes\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import { IssuesDataTable } from \u0027../../shared/issue-tables/IssuesDataTable\u0027;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":25,"author":{"gitId":"-"},"content":" selector: \u0027app-card-view\u0027,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" templateUrl: \u0027./card-view.component.html\u0027,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./card-view.component.css\u0027]"},{"lineNumber":28,"author":{"gitId":"-"},"content":"})"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Displays issues as Cards."},{"lineNumber":32,"author":{"gitId":"-"},"content":" */"},{"lineNumber":33,"author":{"gitId":"-"},"content":"export class CardViewComponent implements OnInit, AfterViewInit, OnDestroy, FilterableComponent {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" @Input() headers: string[];"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" @Input() group?: Group \u003d undefined;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Input() filters?: any \u003d undefined;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027defaultHeader\u0027) defaultHeaderTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027assigneeHeader\u0027) assigneeHeaderTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027milestoneHeader\u0027) milestoneHeaderTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" issues: IssuesDataTable;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" issues$: Observable\u003cIssue[]\u003e;"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" private timeoutId: NodeJS.Timeout | null \u003d null;"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" private issuesLengthSubscription: Subscription;"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" private issuesLoadingStateSubscription: Subscription;"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":50,"author":{"gitId":"Arif-Khalid"},"content":" isLoading \u003d true;"},{"lineNumber":51,"author":{"gitId":"Arif-Khalid"},"content":" issueLength \u003d 0;"},{"lineNumber":52,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" pageSize \u003d 20;"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" @Output() issueLengthChange: EventEmitter\u003cNumber\u003e \u003d new EventEmitter\u003cNumber\u003e();"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" constructor("},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" public element: ElementRef,"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" public issueService: IssueService,"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" public groupingContextService: GroupingContextService,"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" private filtersService: FiltersService,"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" private milestoneService: MilestoneService"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" ) {}"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" this.issues \u003d new IssuesDataTable("},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" this.issueService,"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" this.groupingContextService,"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" this.filtersService,"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" this.milestoneService,"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" this.paginator,"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" this.headers,"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" this.group,"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" this.filters"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" );"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" ngAfterViewInit(): void {"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" this.timeoutId \u003d setTimeout(() \u003d\u003e {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" this.issues.loadIssues();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" this.issues$ \u003d this.issues.connect();"},{"lineNumber":82,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":83,"author":{"gitId":"Arif-Khalid"},"content":" // Emit event when issues change"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" this.issuesLengthSubscription \u003d this.issues$.subscribe(() \u003d\u003e {"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":" this.issueLength \u003d this.issues.count;"},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" this.issueLengthChange.emit(this.issueLength);"},{"lineNumber":87,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":88,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":89,"author":{"gitId":"Arif-Khalid"},"content":" // Emit event when loading state changes"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" this.issuesLoadingStateSubscription \u003d this.issues.isLoading$.subscribe((isLoadingUpdate) \u003d\u003e {"},{"lineNumber":91,"author":{"gitId":"Arif-Khalid"},"content":" this.isLoading \u003d isLoadingUpdate;"},{"lineNumber":92,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":93,"author":{"gitId":"-"},"content":" });"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" getHeaderTemplate(): TemplateRef\u003cany\u003e {"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" switch (this.groupingContextService.currGroupBy) {"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" case GroupBy.Assignee:"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" return this.assigneeHeaderTemplate;"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" case GroupBy.Milestone:"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" return this.milestoneHeaderTemplate;"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" default:"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" return this.defaultHeaderTemplate;"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" ngOnDestroy(): void {"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" if (this.timeoutId) {"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" clearTimeout(this.timeoutId);"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" if (this.issues) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" this.issues.disconnect();"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" if (this.issuesLengthSubscription) {"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" this.issuesLengthSubscription.unsubscribe();"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" if (this.issuesLoadingStateSubscription) {"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" this.issuesLoadingStateSubscription.unsubscribe();"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" retrieveFilterable(): FilterableSource {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return this.issues;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":129,"author":{"gitId":"nknguyenhc"},"content":" updatePageSize(newPageSize: number) {"},{"lineNumber":130,"author":{"gitId":"nknguyenhc"},"content":" this.pageSize \u003d newPageSize;"},{"lineNumber":131,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":21,"NereusWB922":59,"Arif-Khalid":10,"-":42}},{"path":"src/app/issues-viewer/hidden-groups/hidden-groups.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":".hidden-groups {"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":" margin: 8px;"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":" min-width: 150px;"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":" max-width: 300px;"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":".row-count {"},{"lineNumber":8,"author":{"gitId":"nknguyenhc"},"content":" background-color: rgb(222, 222, 222);"},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":" border-radius: 3px;"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" cursor: default;"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" padding: 6px;"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" color: rgb(0, 0, 0);"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" font-weight: 410;"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" display: inline-flex;"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" font-size: 14px;"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":17,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":".mat-card-header {"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" display: flex;"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" flex-direction: row;"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" align-items: center;"},{"lineNumber":22,"author":{"gitId":"nknguyenhc"},"content":" width: 100%;"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":".mat-card {"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" margin: 8px 0px;"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" height: 40px;"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" padding: 10px;"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" display: flex;"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" align-items: center;"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" justify-content: center;"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" flex-direction: row;"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":".mat-card-title {"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" font-size: 14px;"},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" text-align: center;"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" margin: 0;"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" flex-grow: 1;"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" margin: 2px;"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" word-break: break-word;"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":".mat-card-avatar {"},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" height: 30px;"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" width: 30px;"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":".mat-card-header .mat-card-title {"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" font-size: 12px;"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container {"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" height: 67vh;"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" overflow: auto;"},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" scrollbar-width: none;"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" -ms-overflow-style: none;"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" position: relative;"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":".scrollable-containers::-webkit-scrollbar {"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" display: none;"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container::before,"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container::after {"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" pointer-events: none;"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" content: \u0027\u0027;"},{"lineNumber":69,"author":{"gitId":"nknguyenhc"},"content":" z-index: 2;"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" height: 6px;"},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" width: 100%;"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" display: block;"},{"lineNumber":73,"author":{"gitId":"nknguyenhc"},"content":" background-image: linear-gradient(to bottom, white 66%, transparent);"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container::before {"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" position: absolute;"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":".scrollable-container::after {"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" position: sticky;"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":"}"}],"authorContributionMap":{"nknguyenhc":81,"NereusWB922":1}},{"path":"src/app/issues-viewer/hidden-groups/hidden-groups.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"\u003cdiv *ngIf\u003d\"groups.length \u003e 0\" class\u003d\"hidden-groups\"\u003e"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card matTooltip\u003d\"Users that have no Issues/PRs pertaining to the current filter\" matTooltipShowDelay\u003d\"0\" matTooltipHideDelay\u003d\"0\"\u003e"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-title\u003eHidden {{ this.groupingContextService.currGroupBy }}s\u003c/mat-card-title\u003e"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"row-count\"\u003e{{ groups.length }}\u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"scrollable-container\"\u003e"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv *ngFor\u003d\"let group of groups\"\u003e"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" \u003cng-container [ngTemplateOutlet]\u003d\"getCardTemplate()\" [ngTemplateOutletContext]\u003d\"{ $implicit: group }\"\u003e\u003c/ng-container\u003e"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"\u003c/div\u003e"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"\u003c!-- Templates --\u003e"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #defaultCard let-group\u003e"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card class\u003d\"loading-spinner\"\u003e"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-progress-spinner color\u003d\"primary\" mode\u003d\"indeterminate\" diameter\u003d\"50\" strokeWidth\u003d\"5\"\u003e\u003c/mat-progress-spinner\u003e"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #assigneeCard let-assignee\u003e"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card\u003e"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" \u003cmar-card-header class\u003d\"mat-card-header\"\u003e"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" mat-card-avatar"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" [ngStyle]\u003d\"{"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" background: \u0027url(\u0027 + assignee.avatar_url + \u0027)\u0027,"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" \u0027background-size\u0027: \u002730px\u0027"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" }\""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-title\u003e{{ assignee.login }}\u003c/mat-card-title\u003e"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" \u003c/mar-card-header\u003e"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"\u003cng-template #milestoneCard let-milestone\u003e"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card\u003e"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" \u003cmar-card-header class\u003d\"mat-card-header\"\u003e"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-title\u003e{{ milestone.title }}\u003c/mat-card-title\u003e"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" \u003c/mar-card-header\u003e"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":"\u003c/ng-template\u003e"}],"authorContributionMap":{"NereusWB922":41}},{"path":"src/app/issues-viewer/hidden-groups/hidden-groups.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Component, Input, TemplateRef, ViewChild } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../core/models/github/group.interface\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { GroupBy, GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"@Component({"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" selector: \u0027app-hidden-groups\u0027,"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" templateUrl: \u0027./hidden-groups.component.html\u0027,"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" styleUrls: [\u0027./hidden-groups.component.css\u0027]"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"export class HiddenGroupsComponent {"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" @Input() groups: Group[] \u003d [];"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027defaultCard\u0027) defaultCardTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027assigneeCard\u0027) assigneeCardTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" @ViewChild(\u0027milestoneCard\u0027) milestoneCardTemplate: TemplateRef\u003cany\u003e;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" constructor(public groupingContextService: GroupingContextService) {}"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" getCardTemplate(): TemplateRef\u003cany\u003e {"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" switch (this.groupingContextService.currGroupBy) {"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" case GroupBy.Assignee:"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" return this.assigneeCardTemplate;"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" case GroupBy.Milestone:"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" return this.milestoneCardTemplate;"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" default:"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" return this.defaultCardTemplate;"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":29}},{"path":"src/app/issues-viewer/issues-viewer.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv\u003e"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"loading-spinner\" *ngIf\u003d\"(this.viewService.isChangingRepo | async) || this.groups.length \u003d\u003d\u003d 0; 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":"Arif-Khalid"},"content":" \u003capp-filter-bar [views$]\u003d\"views\"\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":"NereusWB922"},"content":" *ngFor\u003d\"let group of groups\""},{"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":"NereusWB922"},"content":" [group]\u003d\"group\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" [headers]\u003d\"this.displayedColumns\""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" (issueLengthChange)\u003d\"updateHiddenGroups($event, group)\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003e\u003c/app-card-view\u003e"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" \u003capp-hidden-groups [groups]\u003d\"this.hiddenGroups\"\u003e\u003c/app-hidden-groups\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/ng-template\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"NereusWB922":5,"Arif-Khalid":3,"-":14}},{"path":"src/app/issues-viewer/issues-viewer.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { AfterViewInit, Component, OnDestroy, OnInit, QueryList, ViewChildren } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { NavigationEnd, NavigationStart, Router } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { BehaviorSubject, of, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { filter } from \u0027rxjs/operators\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../core/models/github/group.interface\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Repo } from \u0027../core/models/repo.model\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { ErrorMessageService } from \u0027../core/services/error-message.service\u0027;"},{"lineNumber":8,"author":{"gitId":"Arif-Khalid"},"content":"import { FiltersService } from \u0027../core/services/filters.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../core/services/github.service\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { GroupingContextService } from \u0027../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../core/services/issue.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../core/services/label.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { MilestoneService } from \u0027../core/services/milestone.service\u0027;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../core/services/view.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { TABLE_COLUMNS } from \u0027../shared/issue-tables/issue-tables-columns\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { CardViewComponent } from \u0027./card-view/card-view.component\u0027;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":19,"author":{"gitId":"-"},"content":" selector: \u0027app-issues-viewer\u0027,"},{"lineNumber":20,"author":{"gitId":"-"},"content":" templateUrl: \u0027./issues-viewer.component.html\u0027,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./issues-viewer.component.css\u0027]"},{"lineNumber":22,"author":{"gitId":"-"},"content":"})"},{"lineNumber":23,"author":{"gitId":"-"},"content":"export class IssuesViewerComponent implements OnInit, AfterViewInit, OnDestroy {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" readonly displayedColumns \u003d [TABLE_COLUMNS.ID, TABLE_COLUMNS.TITLE, TABLE_COLUMNS.ASSIGNEE, TABLE_COLUMNS.LABEL];"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" /** Observes for any change in repo*/"},{"lineNumber":27,"author":{"gitId":"-"},"content":" repoChangeSubscription: Subscription;"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" groupByChangeSubscription: Subscription;"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" /** Observes for any change in the cardviews */"},{"lineNumber":32,"author":{"gitId":"-"},"content":" viewChange: Subscription;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" popStateEventSubscription: Subscription;"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" availableGroupsSubscription: Subscription;"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" popStateNavigationId: number;"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" /** Users to show as columns */"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" groups: Group[] \u003d [];"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" /** The list of users with 0 issues (hidden) */"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" hiddenGroups: Group[] \u003d [];"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" @ViewChildren(CardViewComponent) cardViews: QueryList\u003cCardViewComponent\u003e;"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" views \u003d new BehaviorSubject\u003cQueryList\u003cCardViewComponent\u003e\u003e(undefined);"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" public viewService: ViewService,"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public githubService: GithubService,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public issueService: IssueService,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public labelService: LabelService,"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" public milestoneService: MilestoneService,"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" public groupingContextService: GroupingContextService,"},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" private router: Router,"},{"lineNumber":58,"author":{"gitId":"Arif-Khalid"},"content":" private filtersService: FiltersService"},{"lineNumber":59,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" this.repoChangeSubscription \u003d this.viewService.repoChanged$.subscribe((newRepo) \u003d\u003e {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.issueService.reset(false);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" this.labelService.reset();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" this.initialize();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" });"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" this.groupByChangeSubscription \u003d this.groupingContextService.currGroupBy$.subscribe((newGroupBy) \u003d\u003e {"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" this.initialize();"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" this.popStateEventSubscription \u003d this.router.events"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" .pipe(filter((event) \u003d\u003e event instanceof NavigationEnd || event instanceof NavigationStart))"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" .subscribe((event) \u003d\u003e {"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" if (event instanceof NavigationStart \u0026\u0026 event.navigationTrigger \u003d\u003d\u003d \u0027popstate\u0027) {"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" this.popStateNavigationId \u003d event.id;"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" if (event instanceof NavigationEnd \u0026\u0026 event.id \u003d\u003d\u003d this.popStateNavigationId) {"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" this.viewService.initializeRepoFromUrlParams();"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" this.groupingContextService.initializeFromUrlParams();"},{"lineNumber":80,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.initializeFromURLParams();"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.initialize();"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" this.groupingContextService.initializeFromUrlParams();"},{"lineNumber":88,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.initializeFromURLParams();"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" ngAfterViewInit(): void {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" this.viewChange \u003d this.cardViews.changes.subscribe((x) \u003d\u003e this.views.next(x));"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" ngOnDestroy(): void {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.repoChangeSubscription.unsubscribe();"},{"lineNumber":97,"author":{"gitId":"-"},"content":" this.viewChange.unsubscribe();"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" this.popStateEventSubscription.unsubscribe();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Fetch and initialize all information from repository to populate Issue Dashboard."},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" private initialize() {"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" if (this.availableGroupsSubscription) {"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" this.availableGroupsSubscription.unsubscribe();"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" this.checkIfValidRepository().subscribe((isValidRepository) \u003d\u003e {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" if (!isValidRepository) {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" throw new Error(ErrorMessageService.repositoryNotPresentMessage());"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":" });"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" // Fetch assignees"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" this.groups \u003d [];"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" this.hiddenGroups \u003d [];"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" this.availableGroupsSubscription \u003d this.groupingContextService.getGroups().subscribe((x) \u003d\u003e (this.groups \u003d x));"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" // Fetch issues"},{"lineNumber":122,"author":{"gitId":"-"},"content":" this.issueService.reloadAllIssues();"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":126,"author":{"gitId":"NereusWB922"},"content":" * Checks if our current repository available on view service is indeed a valid repository"},{"lineNumber":127,"author":{"gitId":"-"},"content":" */"},{"lineNumber":128,"author":{"gitId":"-"},"content":" private checkIfValidRepository() {"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" const currentRepo \u003d this.viewService.currentRepo;"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" if (Repo.isInvalidRepoName(currentRepo)) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return of(false);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" return this.githubService.isRepositoryPresent(currentRepo.owner, currentRepo.name);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":138,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" * Update the list of hidden group based on the new info."},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":" * @param issueLength The number of issues under this group."},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" * @param group The group."},{"lineNumber":142,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":" updateHiddenGroups(issueLength: number, target: Group) {"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" if (issueLength \u003d\u003d\u003d 0 \u0026\u0026 this.groupingContextService.isInHiddenList(target)) {"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":" this.addToHiddenGroups(target);"},{"lineNumber":146,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":147,"author":{"gitId":"NereusWB922"},"content":" this.removeFromHiddenGroups(target);"},{"lineNumber":148,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":149,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":150,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":" private addToHiddenGroups(target: Group) {"},{"lineNumber":152,"author":{"gitId":"NereusWB922"},"content":" const isGroupPresent \u003d this.hiddenGroups.some((group) \u003d\u003e group.equals(target));"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" if (!isGroupPresent) {"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" this.hiddenGroups.push(target);"},{"lineNumber":156,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":157,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":158,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" private removeFromHiddenGroups(target: Group) {"},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":" this.hiddenGroups \u003d this.hiddenGroups.filter((group) \u003d\u003e !group.equals(target));"},{"lineNumber":161,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":12,"NereusWB922":62,"Arif-Khalid":5,"-":83}},{"path":"src/app/issues-viewer/issues-viewer.module.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { NgModule } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { FilterBarModule } from \u0027../shared/filter-bar/filter-bar.module\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { IssuesPrCardModule } from \u0027../shared/issue-pr-card/issue-pr-card.module\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { SharedModule } from \u0027../shared/shared.module\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { CardViewComponent } from \u0027./card-view/card-view.component\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { HiddenGroupsComponent } from \u0027./hidden-groups/hidden-groups.component\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { IssuesViewerRoutingModule } from \u0027./issues-viewer-routing.module\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { IssuesViewerComponent } from \u0027./issues-viewer.component\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"@NgModule({"},{"lineNumber":11,"author":{"gitId":"-"},"content":" imports: [FilterBarModule, IssuesViewerRoutingModule, IssuesPrCardModule, SharedModule],"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" declarations: [IssuesViewerComponent, CardViewComponent, HiddenGroupsComponent],"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exports: [IssuesViewerComponent, CardViewComponent]"},{"lineNumber":14,"author":{"gitId":"-"},"content":"})"},{"lineNumber":15,"author":{"gitId":"-"},"content":"export class IssuesViewerModule {}"}],"authorContributionMap":{"NereusWB922":2,"-":13}},{"path":"src/app/shared/filter-bar/filter-bar.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".dropdown-filters .mat-form-field {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" margin: 8px;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" font-size: 14px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" max-width: 20%;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" width: 17%; /* depends on number of filters*/"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".search-bar {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" width: 90%;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".dropdown-filters {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":".label-filter-grid-tile {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":".submit-button {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" margin-left: 8px;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":1,"-":21}},{"path":"src/app/shared/filter-bar/filter-bar.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cmat-grid-list cols\u003d\"7\" rowHeight\u003d\"80px\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cmat-grid-tile colspan\u003d\"3\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cmat-form-field class\u003d\"search-bar\"\u003e"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":" \u003cinput"},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":" matInput"},{"lineNumber":6,"author":{"gitId":"Arif-Khalid"},"content":" value\u003d\"{{ this.filtersService.filter$.value.title }}\""},{"lineNumber":7,"author":{"gitId":"Arif-Khalid"},"content":" (keyup)\u003d\"this.filtersService.updateFilters({ title: $event.target.value })\""},{"lineNumber":8,"author":{"gitId":"Arif-Khalid"},"content":" placeholder\u003d\"Search\""},{"lineNumber":9,"author":{"gitId":"Arif-Khalid"},"content":" /\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003c/mat-grid-tile\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cmat-grid-tile colspan\u003d\"3\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"dropdown-filters\"\u003e"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-form-field appearance\u003d\"standard\"\u003e"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-label\u003eGroup by\u003c/mat-label\u003e"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-select"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" [value]\u003d\"this.groupingContextService.currGroupBy$ | async\""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" (selectionChange)\u003d\"this.groupingContextService.setCurrentGroupingType($event.value)\""},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" \u003e"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-option *ngFor\u003d\"let option of this.groupByEnum | keyvalue\" [value]\u003d\"option.value\"\u003e{{ option.key }}\u003c/mat-option\u003e"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-select\u003e"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"standard\"\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eStatus\u003c/mat-label\u003e"},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-select [value]\u003d\"this.filter.status\" (selectionChange)\u003d\"this.filtersService.updateFilters({ status: $event.value })\" multiple\u003e"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterPullRequest()\" value\u003d\"open pullrequest\"\u003eOpen Pull Requests\u003c/mat-option\u003e"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterPullRequest()\" value\u003d\"merged pullrequest\"\u003eMerged Pull Requests\u003c/mat-option\u003e"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterPullRequest()\" value\u003d\"closed pullrequest\"\u003eClosed Pull Request\u003c/mat-option\u003e"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterIssue()\" value\u003d\"open issue\"\u003eOpen Issues\u003c/mat-option\u003e"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-option *ngIf\u003d\"isFilterIssue()\" value\u003d\"closed issue\"\u003eClosed Issues\u003c/mat-option\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/mat-select\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"standard\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eType\u003c/mat-label\u003e"},{"lineNumber":36,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-select [value]\u003d\"this.filter.type\" (selectionChange)\u003d\"this.filtersService.updateFilters({ type: $event.value })\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"all\"\u003eAll\u003c/mat-option\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"issue\"\u003eIssue\u003c/mat-option\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"pullrequest\"\u003ePull Request\u003c/mat-option\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/mat-select\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":42,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-form-field"},{"lineNumber":43,"author":{"gitId":"Arif-Khalid"},"content":" appearance\u003d\"standard\""},{"lineNumber":44,"author":{"gitId":"Arif-Khalid"},"content":" matSort"},{"lineNumber":45,"author":{"gitId":"Arif-Khalid"},"content":" [matSortDisableClear]\u003d\"true\""},{"lineNumber":46,"author":{"gitId":"Arif-Khalid"},"content":" (matSortChange)\u003d\"this.filtersService.updateFilters({ sort: $event })\""},{"lineNumber":47,"author":{"gitId":"Arif-Khalid"},"content":" \u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eSort\u003c/mat-label\u003e"},{"lineNumber":49,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-select [value]\u003d\"this.filter.sort.active\"\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"id\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cspan mat-sort-header\u003d\"id\"\u003eID\u003c/span\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"title\"\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cspan mat-sort-header\u003d\"title\"\u003eTitle\u003c/span\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cmat-option value\u003d\"date\"\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003cspan mat-sort-header\u003d\"date\"\u003eDate Updated\u003c/span\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":59,"author":{"gitId":"MadLamprey"},"content":" \u003cmat-option value\u003d\"status\"\u003e"},{"lineNumber":60,"author":{"gitId":"MadLamprey"},"content":" \u003cspan mat-sort-header\u003d\"status\"\u003eStatus\u003c/span\u003e"},{"lineNumber":61,"author":{"gitId":"MadLamprey"},"content":" \u003c/mat-option\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/mat-select\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"standard\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eMilestone\u003c/mat-label\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cmat-select"},{"lineNumber":67,"author":{"gitId":"-"},"content":" #milestoneSelectorRef"},{"lineNumber":68,"author":{"gitId":"Arif-Khalid"},"content":" [value]\u003d\"this.filter.milestones\""},{"lineNumber":69,"author":{"gitId":"Arif-Khalid"},"content":" (selectionChange)\u003d\"this.filtersService.updateFilters({ milestones: $event.value })\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" [disabled]\u003d\"this.milestoneService.hasNoMilestones\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" multiple"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003cmat-select-trigger *ngIf\u003d\"this.milestoneService.hasNoMilestones\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cspan\u003eNo Milestones\u003c/span\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003c/mat-select-trigger\u003e"},{"lineNumber":76,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-option *ngFor\u003d\"let milestone of this.milestoneService.milestones\" [value]\u003d\"milestone.title\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" {{ milestone.title }}"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":79,"author":{"gitId":"MadLamprey"},"content":" \u003cmat-option *ngIf\u003d\"isFilterIssue()\" [value]\u003d\"\u0027Issue without a milestone\u0027\"\u003eIssues without a milestone\u003c/mat-option\u003e"},{"lineNumber":80,"author":{"gitId":"MadLamprey"},"content":" \u003cmat-option *ngIf\u003d\"isFilterPullRequest()\" [value]\u003d\"\u0027PR without a milestone\u0027\"\u003ePRs without a milestone\u003c/mat-option\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003c/mat-select\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003c/mat-grid-tile\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003cmat-grid-tile class\u003d\"label-filter-grid-tile\" colspan\u003d\"1\"\u003e"},{"lineNumber":87,"author":{"gitId":"Arif-Khalid"},"content":" \u003capp-label-filter-bar\u003e\u003c/app-label-filter-bar\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003c/mat-grid-tile\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003c/mat-grid-list\u003e"}],"authorContributionMap":{"nknguyenhc":6,"Arif-Khalid":18,"NereusWB922":9,"MadLamprey":5,"-":51}},{"path":"src/app/shared/filter-bar/filter-bar.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { AfterViewInit, Component, Input, OnDestroy, OnInit, QueryList, ViewChild } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { MatSelect } from \u0027@angular/material/select\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { BehaviorSubject, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"import { Filter, FiltersService } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { GroupBy, GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../core/services/logging.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { MilestoneService } from \u0027../../core/services/milestone.service\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../../core/services/view.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { FilterableComponent } from \u0027../issue-tables/filterableTypes\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { LabelFilterBarComponent } from \u0027./label-filter-bar/label-filter-bar.component\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * This component is abstracted out filterbar used by both detailed-viewer page"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * and Issues-viewer"},{"lineNumber":15,"author":{"gitId":"-"},"content":" */"},{"lineNumber":16,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":17,"author":{"gitId":"-"},"content":" selector: \u0027app-filter-bar\u0027,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" templateUrl: \u0027./filter-bar.component.html\u0027,"},{"lineNumber":19,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./filter-bar.component.css\u0027]"},{"lineNumber":20,"author":{"gitId":"-"},"content":"})"},{"lineNumber":21,"author":{"gitId":"Arif-Khalid"},"content":"export class FilterBarComponent implements OnInit, OnDestroy {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Input() views$: BehaviorSubject\u003cQueryList\u003cFilterableComponent\u003e\u003e;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" repoChangeSubscription: Subscription;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" /** Selected dropdown filter value */"},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" filter: Filter \u003d this.filtersService.defaultFilter();"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" groupByEnum: typeof GroupBy \u003d GroupBy;"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" /** Milestone subscription */"},{"lineNumber":32,"author":{"gitId":"-"},"content":" milestoneSubscription: Subscription;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" @ViewChild(LabelFilterBarComponent, { static: true }) labelFilterBar: LabelFilterBarComponent;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @ViewChild(\u0027milestoneSelectorRef\u0027, { static: false }) milestoneSelectorRef: MatSelect;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"Arif-Khalid"},"content":" constructor("},{"lineNumber":39,"author":{"gitId":"Arif-Khalid"},"content":" public milestoneService: MilestoneService,"},{"lineNumber":40,"author":{"gitId":"Arif-Khalid"},"content":" public filtersService: FiltersService,"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" private viewService: ViewService,"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" public groupingContextService: GroupingContextService,"},{"lineNumber":43,"author":{"gitId":"Arif-Khalid"},"content":" private logger: LoggingService"},{"lineNumber":44,"author":{"gitId":"Arif-Khalid"},"content":" ) {"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" this.repoChangeSubscription \u003d this.viewService.repoChanged$.subscribe((newRepo) \u003d\u003e this.newRepoInitialize());"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":49,"author":{"gitId":"Arif-Khalid"},"content":" this.newRepoInitialize();"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"Arif-Khalid"},"content":" // One-time initializations"},{"lineNumber":52,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.filter$.subscribe((filter) \u003d\u003e {"},{"lineNumber":53,"author":{"gitId":"Arif-Khalid"},"content":" this.filter \u003d filter;"},{"lineNumber":54,"author":{"gitId":"Arif-Khalid"},"content":" this.applyFilter();"},{"lineNumber":55,"author":{"gitId":"-"},"content":" });"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" this.views$.subscribe(() \u003d\u003e this.applyFilter());"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" ngOnDestroy(): void {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.milestoneSubscription.unsubscribe();"},{"lineNumber":62,"author":{"gitId":"-"},"content":" this.repoChangeSubscription.unsubscribe();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * Signals to IssuesDataTable that a change has occurred in filter."},{"lineNumber":67,"author":{"gitId":"-"},"content":" */"},{"lineNumber":68,"author":{"gitId":"Arif-Khalid"},"content":" applyFilter() {"},{"lineNumber":69,"author":{"gitId":"Arif-Khalid"},"content":" this.views$?.value?.forEach((v) \u003d\u003e (v.retrieveFilterable().filter \u003d this.filter));"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Checks if program is filtering by type issue."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" isFilterIssue() {"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" return this.filter.type \u003d\u003d\u003d \u0027issue\u0027 || this.filter.type \u003d\u003d\u003d \u0027all\u0027;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" isFilterPullRequest() {"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" return this.filter.type \u003d\u003d\u003d \u0027pullrequest\u0027 || this.filter.type \u003d\u003d\u003d \u0027all\u0027;"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Fetch and initialize all information from repository to populate Issue Dashboard."},{"lineNumber":85,"author":{"gitId":"Arif-Khalid"},"content":" * Re-called when repo has changed"},{"lineNumber":86,"author":{"gitId":"-"},"content":" */"},{"lineNumber":87,"author":{"gitId":"Arif-Khalid"},"content":" private newRepoInitialize() {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" // Fetch milestones and update dropdown filter"},{"lineNumber":89,"author":{"gitId":"-"},"content":" this.milestoneSubscription \u003d this.milestoneService.fetchMilestones().subscribe("},{"lineNumber":90,"author":{"gitId":"-"},"content":" (response) \u003d\u003e {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" this.logger.debug(\u0027IssuesViewerComponent: Fetched milestones from Github\u0027);"},{"lineNumber":92,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.sanitizeMilestones(this.milestoneService.milestones);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" },"},{"lineNumber":94,"author":{"gitId":"-"},"content":" (err) \u003d\u003e {},"},{"lineNumber":95,"author":{"gitId":"-"},"content":" () \u003d\u003e {}"},{"lineNumber":96,"author":{"gitId":"-"},"content":" );"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":6,"NereusWB922":6,"Arif-Khalid":17,"-":69}},{"path":"src/app/shared/filter-bar/label-filter-bar/label-filter-bar.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"::ng-deep.mat-menu-content:not(:empty) {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" /* Override mat-menu-content\u0027s non-empty default CSS. */"},{"lineNumber":3,"author":{"gitId":"-"},"content":" padding-top: 0px !important;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-bottom: 0px !important;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"::ng-deep.mat-menu-panel {"},{"lineNumber":8,"author":{"gitId":"-"},"content":" /* Override mat-menu-panel\u0027s default CSS. */"},{"lineNumber":9,"author":{"gitId":"-"},"content":" width: 280px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" max-width: none !important;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":".popup-container {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":".popupmenu {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" width: max-content;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":".scroll-container {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" max-height: 400px;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" overflow-y: auto;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" -ms-overflow-style: none; /* IE and Edge */"},{"lineNumber":27,"author":{"gitId":"-"},"content":" scrollbar-width: none; /* Firefox */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"/* Ref: https://css-scroll-shadows.vercel.app */"},{"lineNumber":31,"author":{"gitId":"-"},"content":".scroll-container::before {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":33,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" z-index: 2;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" height: 7px;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" background-image: linear-gradient(to bottom, white 66%, transparent);"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":".scroll-container::after {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" z-index: 2;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" top: 100%;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" height: 7px;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" background-image: linear-gradient(to top, white 66%, transparent);"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":".scroll-container-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":".scroll-container-wrapper::before {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" height: 5px;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" background-image: radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.7), transparent);"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":".scroll-container-wrapper::after {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" pointer-events: none;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" content: \u0027\u0027;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" bottom: 0;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" height: 5px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" background-image: radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.7), transparent);"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".scroll-container::-webkit-scrollbar {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" display: none; /* Hide scrollbar for Chrome, Safari and Opera */"},{"lineNumber":84,"author":{"gitId":"-"},"content":"}"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":".flexbox-container {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":88,"author":{"gitId":"-"},"content":" flex-direction: row;"},{"lineNumber":89,"author":{"gitId":"-"},"content":" justify-content: flex-start;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" border-radius: 10px;"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" height: 40px;"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" padding: 0px 12px;"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" margin: 8px 4px;"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" box-sizing: border-box;"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" position: relative;"},{"lineNumber":97,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":98,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":99,"author":{"gitId":"nknguyenhc"},"content":".flexbox-container:hover {"},{"lineNumber":100,"author":{"gitId":"nknguyenhc"},"content":" background-color: rgba(0, 0, 0, 0.04);"},{"lineNumber":101,"author":{"gitId":"nknguyenhc"},"content":"}"},{"lineNumber":102,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":103,"author":{"gitId":"nknguyenhc"},"content":".flexbox-container-strikethrough {"},{"lineNumber":104,"author":{"gitId":"nknguyenhc"},"content":" position: absolute;"},{"lineNumber":105,"author":{"gitId":"nknguyenhc"},"content":" top: 50%;"},{"lineNumber":106,"author":{"gitId":"nknguyenhc"},"content":" width: 90%;"},{"lineNumber":107,"author":{"gitId":"nknguyenhc"},"content":" left: 50%;"},{"lineNumber":108,"author":{"gitId":"nknguyenhc"},"content":" transform: translate(-50%, -50%);"},{"lineNumber":109,"author":{"gitId":"nknguyenhc"},"content":" height: 2px;"},{"lineNumber":110,"author":{"gitId":"nknguyenhc"},"content":" background-color: black;"},{"lineNumber":111,"author":{"gitId":"-"},"content":"}"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":".input-field {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" width: calc(100% - (2 * 15px)); /* To account for left and right padding. */"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 15px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":"}"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":".mat-chip {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" height: auto;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" padding: 5.5px 7px;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" line-height: 1.1em;"},{"lineNumber":122,"author":{"gitId":"-"},"content":" position: inherit;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" border-radius: 6px;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" font-size: 12px;"},{"lineNumber":125,"author":{"gitId":"-"},"content":" min-height: 16px;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" max-height: 42px;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" margin: 0px;"},{"lineNumber":128,"author":{"gitId":"-"},"content":"}"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":".mat-stroked-button {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" font-weight: normal;"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":".hidden {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" display: none !important;"},{"lineNumber":136,"author":{"gitId":"-"},"content":"}"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":"mat-list-option {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" width: max-content;"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":".no-labels {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" /* Chosen to look similar to button above. */"},{"lineNumber":144,"author":{"gitId":"-"},"content":" padding: 0 16px;"},{"lineNumber":145,"author":{"gitId":"-"},"content":" font-size: 14px;"},{"lineNumber":146,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":20,"-":126}},{"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":"nknguyenhc"},"content":" {{ selectedLabelNames.size \u003d\u003d\u003d 0 ? \u0027All\u0027 : selectedLabelNames.size }} 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":"nknguyenhc"},"content":" \u003cdiv"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":" *ngFor\u003d\"let label of this.allLabels\""},{"lineNumber":24,"author":{"gitId":"nknguyenhc"},"content":" class\u003d\"flexbox-container\""},{"lineNumber":25,"author":{"gitId":"nknguyenhc"},"content":" (click)\u003d\"changeLabelState(label)\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" [class.hidden]\u003d\"filter(input.value, label.name)\""},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" [style]\u003d\"{ border: \u00272px solid \u0027 + getColor(label) }\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton mat-icon-button *ngIf\u003d\"!hiddenLabelNames.has(label.name)\" (click)\u003d\"hide(label.name); $event.stopPropagation()\"\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003evisibility\u003c/mat-icon\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton mat-icon-button *ngIf\u003d\"hiddenLabelNames.has(label.name)\" (click)\u003d\"show(label.name); $event.stopPropagation()\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003evisibility_off\u003c/mat-icon\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cmat-chip"},{"lineNumber":36,"author":{"gitId":"-"},"content":" [ngStyle]\u003d\"labelService.setLabelStyle(label.color)\""},{"lineNumber":37,"author":{"gitId":"nknguyenhc"},"content":" [disabled]\u003d\"hiddenLabelNames.has(label.name)\""},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" (click)\u003d\"changeLabelState(label)\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" {{ label.name }}"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/mat-chip\u003e"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" \u003cdiv *ngIf\u003d\"deselectedLabelNames.has(label.name)\" class\u003d\"flexbox-container-strikethrough\"\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"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/mat-menu\u003e"}],"authorContributionMap":{"nknguyenhc":12,"-":35}},{"path":"src/app/shared/filter-bar/label-filter-bar/label-filter-bar.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"import { AfterViewInit, Component, OnDestroy, OnInit, ViewChild } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":"import { Observable, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { SimpleLabel } from \u0027../../../core/models/label.model\u0027;"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":"import { FiltersService } from \u0027../../../core/services/filters.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../../../core/services/label.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../../core/services/logging.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":9,"author":{"gitId":"-"},"content":" selector: \u0027app-label-filter-bar\u0027,"},{"lineNumber":10,"author":{"gitId":"-"},"content":" templateUrl: \u0027./label-filter-bar.component.html\u0027,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./label-filter-bar.component.css\u0027]"},{"lineNumber":12,"author":{"gitId":"-"},"content":"})"},{"lineNumber":13,"author":{"gitId":"-"},"content":"export class LabelFilterBarComponent implements OnInit, AfterViewInit, OnDestroy {"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" private static readonly DEFAULT_LABEL_COLOR: string \u003d \u0027transparent\u0027;"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" private static readonly DESELECTED_LABEL_COLOR: string \u003d \u0027#b00020\u0027;"},{"lineNumber":16,"author":{"gitId":"nknguyenhc"},"content":" private static readonly SELECTED_LABEL_COLOR: string \u003d \u0027#41c300\u0027;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":" labels$: Observable\u003cSimpleLabel[]\u003e;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" allLabels: SimpleLabel[];"},{"lineNumber":20,"author":{"gitId":"nknguyenhc"},"content":" selectedLabelNames: Set\u003cstring\u003e \u003d new Set\u003cstring\u003e();"},{"lineNumber":21,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabelNames: Set\u003cstring\u003e \u003d new Set\u003cstring\u003e();"},{"lineNumber":22,"author":{"gitId":"-"},"content":" hiddenLabelNames: Set\u003cstring\u003e \u003d new Set();"},{"lineNumber":23,"author":{"gitId":"-"},"content":" loaded \u003d false;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" labelSubscription: Subscription;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"Arif-Khalid"},"content":" constructor(private labelService: LabelService, private logger: LoggingService, private filtersService: FiltersService) {}"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" this.loaded \u003d false;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" ngAfterViewInit(): void {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" setTimeout(() \u003d\u003e {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" this.load();"},{"lineNumber":36,"author":{"gitId":"-"},"content":" this.labels$ \u003d this.labelService.connect();"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this.labels$.subscribe((labels) \u003d\u003e {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.allLabels \u003d labels;"},{"lineNumber":39,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.sanitizeLabels(this.allLabels);"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" this.selectedLabelNames \u003d new Set\u003cstring\u003e(this.filtersService.filter$.value.labels);"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" this.deselectedLabelNames \u003d this.filtersService.filter$.value.deselectedLabels;"},{"lineNumber":42,"author":{"gitId":"Arif-Khalid"},"content":" this.hiddenLabelNames \u003d this.filtersService.filter$.value.hiddenLabels;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" });"},{"lineNumber":44,"author":{"gitId":"-"},"content":" });"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" ngOnDestroy(): void {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.labelSubscription?.unsubscribe();"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" hide(label: string): void {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (this.hiddenLabelNames.has(label)) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" this.hiddenLabelNames.add(label);"},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.updateFilters({ hiddenLabels: this.hiddenLabelNames });"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" /** Show labels that were hidden */"},{"lineNumber":61,"author":{"gitId":"-"},"content":" show(label: string): void {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" if (!this.hiddenLabelNames.has(label)) {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.hiddenLabelNames.delete(label);"},{"lineNumber":66,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.updateFilters({ hiddenLabels: this.hiddenLabelNames });"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":70,"author":{"gitId":"nknguyenhc"},"content":" * Change label to the next state."},{"lineNumber":71,"author":{"gitId":"nknguyenhc"},"content":" * Label has the following state rotation: default -\u003e selected -\u003e deselected."},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" * @param label The label to change state"},{"lineNumber":73,"author":{"gitId":"-"},"content":" */"},{"lineNumber":74,"author":{"gitId":"nknguyenhc"},"content":" changeLabelState(label: SimpleLabel) {"},{"lineNumber":75,"author":{"gitId":"nknguyenhc"},"content":" if (this.selectedLabelNames.has(label.name)) {"},{"lineNumber":76,"author":{"gitId":"nknguyenhc"},"content":" this.selectedLabelNames.delete(label.name);"},{"lineNumber":77,"author":{"gitId":"nknguyenhc"},"content":" this.deselectedLabelNames.add(label.name);"},{"lineNumber":78,"author":{"gitId":"nknguyenhc"},"content":" } else if (this.deselectedLabelNames.has(label.name)) {"},{"lineNumber":79,"author":{"gitId":"nknguyenhc"},"content":" this.deselectedLabelNames.delete(label.name);"},{"lineNumber":80,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":81,"author":{"gitId":"nknguyenhc"},"content":" this.selectedLabelNames.add(label.name);"},{"lineNumber":82,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":83,"author":{"gitId":"nknguyenhc"},"content":" this.updateSelection();"},{"lineNumber":84,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":85,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":86,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":87,"author":{"gitId":"nknguyenhc"},"content":" * Returns the border color of the label."},{"lineNumber":88,"author":{"gitId":"nknguyenhc"},"content":" * The border color represents the state of the label."},{"lineNumber":89,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" getColor(label: SimpleLabel): string {"},{"lineNumber":91,"author":{"gitId":"nknguyenhc"},"content":" if (this.selectedLabelNames.has(label.name)) {"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" return LabelFilterBarComponent.SELECTED_LABEL_COLOR;"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" } else if (this.deselectedLabelNames.has(label.name)) {"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" return LabelFilterBarComponent.DESELECTED_LABEL_COLOR;"},{"lineNumber":95,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":96,"author":{"gitId":"nknguyenhc"},"content":" return LabelFilterBarComponent.DEFAULT_LABEL_COLOR;"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" /** loads in the labels in the repository */"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public load() {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" this.labelService.startPollLabels();"},{"lineNumber":103,"author":{"gitId":"-"},"content":" this.labelSubscription \u003d this.labelService.fetchLabels().subscribe("},{"lineNumber":104,"author":{"gitId":"-"},"content":" (response) \u003d\u003e {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" this.logger.debug(\u0027LabelFilterBarComponent: Fetched labels from Github\u0027);"},{"lineNumber":106,"author":{"gitId":"-"},"content":" },"},{"lineNumber":107,"author":{"gitId":"-"},"content":" (err) \u003d\u003e {},"},{"lineNumber":108,"author":{"gitId":"-"},"content":" () \u003d\u003e {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" this.loaded \u003d true;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":" );"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" filter(filter: string, target: string): boolean {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" return !target.toLowerCase().includes(filter.toLowerCase());"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" hasLabels(filter: string): boolean {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" if (this.allLabels \u003d\u003d\u003d undefined || this.allLabels.length \u003d\u003d\u003d 0) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" return this.allLabels.some((label) \u003d\u003e !this.filter(filter, label.name));"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" updateSelection(): void {"},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" this.filtersService.updateFilters({"},{"lineNumber":127,"author":{"gitId":"nknguyenhc"},"content":" labels: Array.from(this.selectedLabelNames),"},{"lineNumber":128,"author":{"gitId":"nknguyenhc"},"content":" deselectedLabels: this.deselectedLabelNames"},{"lineNumber":129,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" removeAllSelection(): void {"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" this.selectedLabelNames \u003d new Set\u003cstring\u003e();"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" this.deselectedLabelNames \u003d new Set\u003cstring\u003e();"},{"lineNumber":135,"author":{"gitId":"-"},"content":" this.updateSelection();"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":39,"Arif-Khalid":9,"-":89}},{"path":"src/app/shared/issue-pr-card/issue-pr-card-labels/issue-pr-card-labels.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, Input } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"import { GithubLabel } from \u0027../../../core/models/github/github-label.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../../../core/services/label.service\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":6,"author":{"gitId":"-"},"content":" selector: \u0027app-issue-pr-card-labels\u0027,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" templateUrl: \u0027./issue-pr-card-labels.component.html\u0027,"},{"lineNumber":8,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./issue-pr-card-labels.component.css\u0027]"},{"lineNumber":9,"author":{"gitId":"-"},"content":"})"},{"lineNumber":10,"author":{"gitId":"-"},"content":"export class IssuePrCardLabelsComponent {"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" @Input() labels: GithubLabel[];"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":" @Input() labelSet: Set\u003cstring\u003e;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" constructor(public labelService: LabelService) {}"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":3,"-":11}},{"path":"src/app/shared/issue-pr-card/issue-pr-card-milestone/issue-pr-card-milestone.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"MadLamprey"},"content":"\u003cdiv *ngIf\u003d\"repoHasMilestones\" class\u003d\"milestone\" [ngStyle]\u003d\"{ color: milestone.state ? \u0027grey\u0027 : \u0027red\u0027 }\"\u003e"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":" \u003cspan class\u003d\"octicon-milestone\" octicon\u003d\"milestone\" [color]\u003d\"milestone.state ? \u0027grey\u0027 : \u0027red\u0027\" size\u003d\"8\"\u003e \u003c/span\u003e"},{"lineNumber":3,"author":{"gitId":"MadLamprey"},"content":" {{ milestone.state ? milestone.title : \u0027???\u0027 }}"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"MadLamprey":3,"-":1}},{"path":"src/app/shared/issue-pr-card/issue-pr-card-milestone/issue-pr-card-milestone.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, Input } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Milestone } from \u0027../../../core/models/milestone.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":5,"author":{"gitId":"-"},"content":" selector: \u0027app-issue-pr-card-milestone\u0027,"},{"lineNumber":6,"author":{"gitId":"-"},"content":" templateUrl: \u0027./issue-pr-card-milestone.component.html\u0027,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./issue-pr-card-milestone.component.css\u0027]"},{"lineNumber":8,"author":{"gitId":"-"},"content":"})"},{"lineNumber":9,"author":{"gitId":"-"},"content":"export class IssuePrCardMilestoneComponent {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" @Input() milestone: Milestone;"},{"lineNumber":11,"author":{"gitId":"MadLamprey"},"content":" @Input() repoHasMilestones: boolean;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":" constructor() {}"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"MadLamprey":1,"-":13}},{"path":"src/app/shared/issue-pr-card/issue-pr-card.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cmat-card class\u003d\"card\" [ngClass]\u003d\"getIssueOpenOrCloseColorCSSClass()\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003ca class\u003d\"no-underline link-grey-dark\" (click)\u003d\"viewIssueInBrowser($event)\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cspan [matTooltip]\u003d\"this.issue.updated_at\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003capp-issue-pr-card-header [issue]\u003d\"issue\"\u003e\u003c/app-issue-pr-card-header\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cmat-card-content\u003e"},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":" \u003capp-issue-pr-card-milestone"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":" [milestone]\u003d\"issue.milestone\""},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":" [repoHasMilestones]\u003d\"!milestoneService.hasNoMilestones\""},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":" \u003e\u003c/app-issue-pr-card-milestone\u003e"},{"lineNumber":10,"author":{"gitId":"Arif-Khalid"},"content":" \u003capp-issue-pr-card-labels [labels]\u003d\"issue.githubLabels\" [labelSet]\u003d\"filter?.hiddenLabels\"\u003e\u003c/app-issue-pr-card-labels\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003c/mat-card-content\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003c/mat-card\u003e"}],"authorContributionMap":{"Arif-Khalid":1,"MadLamprey":4,"-":9}},{"path":"src/app/shared/issue-pr-card/issue-pr-card.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, Input } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":3,"author":{"gitId":"Arif-Khalid"},"content":"import { Filter } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../../core/services/github.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../../core/services/label.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../core/services/logging.service\u0027;"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":"import { MilestoneService } from \u0027../../core/services/milestone.service\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":10,"author":{"gitId":"-"},"content":" selector: \u0027app-issue-pr-card\u0027,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" templateUrl: \u0027./issue-pr-card.component.html\u0027,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./issue-pr-card.component.css\u0027]"},{"lineNumber":13,"author":{"gitId":"-"},"content":"})"},{"lineNumber":14,"author":{"gitId":"-"},"content":"export class IssuePrCardComponent {"},{"lineNumber":15,"author":{"gitId":"-"},"content":" @Input() issue: Issue;"},{"lineNumber":16,"author":{"gitId":"Arif-Khalid"},"content":" @Input() filter?: Filter;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":" constructor("},{"lineNumber":19,"author":{"gitId":"MadLamprey"},"content":" private logger: LoggingService,"},{"lineNumber":20,"author":{"gitId":"MadLamprey"},"content":" private githubService: GithubService,"},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":" public labelService: LabelService,"},{"lineNumber":22,"author":{"gitId":"MadLamprey"},"content":" public milestoneService: MilestoneService"},{"lineNumber":23,"author":{"gitId":"MadLamprey"},"content":" ) {}"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" /** Opens issue in new window */"},{"lineNumber":26,"author":{"gitId":"-"},"content":" viewIssueInBrowser(event: Event) {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.logger.info(`CardViewComponent: Opening Issue ${this.issue.id} on Github`);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.githubService.viewIssueInBrowser(this.issue.id, event);"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" /** Returns CSS class for border color */"},{"lineNumber":32,"author":{"gitId":"-"},"content":" getIssueOpenOrCloseColorCSSClass() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" if (this.issue.state \u003d\u003d\u003d \u0027OPEN\u0027) {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" if (this.issue.isDraft) {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return \u0027grey\u0027;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return \u0027border-green\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"-"},"content":" } else if (this.issue.issueOrPr \u003d\u003d\u003d \u0027PullRequest\u0027 \u0026\u0026 this.issue.state \u003d\u003d\u003d \u0027CLOSED\u0027) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return \u0027border-red\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" } else if (this.issue.issueOrPr \u003d\u003d\u003d \u0027Issue\u0027 \u0026\u0026 this.issue.stateReason \u003d\u003d\u003d \u0027NOT_PLANNED\u0027) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return \u0027border-gray\u0027;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return \u0027border-purple\u0027;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Truncates description to fit in card content."},{"lineNumber":50,"author":{"gitId":"-"},"content":" * @param description - Description of Issue that is to be displayed."},{"lineNumber":51,"author":{"gitId":"-"},"content":" */"},{"lineNumber":52,"author":{"gitId":"-"},"content":" fitDescriptionText(): string {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" // Arbitrary Length of Characters beyond which an overflow occurs."},{"lineNumber":54,"author":{"gitId":"-"},"content":" const MAX_CHARACTER_LENGTH \u003d 72;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" const ELLIPSES \u003d \u0027...\u0027;"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" return this.issue.description.slice(0, MAX_CHARACTER_LENGTH) + ELLIPSES;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":2,"MadLamprey":7,"-":50}},{"path":"src/app/shared/issue-tables/IssuesDataTable.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { DataSource } from \u0027@angular/cdk/table\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { MatPaginator } from \u0027@angular/material/paginator\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { BehaviorSubject, merge, Observable, Subscription } from \u0027rxjs\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { map } from \u0027rxjs/operators\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { Group } from \u0027../../core/models/github/group.interface\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":7,"author":{"gitId":"nknguyenhc"},"content":"import { Filter, FiltersService } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../../core/services/issue.service\u0027;"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":"import { MilestoneService } from \u0027../../core/services/milestone.service\u0027;"},{"lineNumber":11,"author":{"gitId":"Arif-Khalid"},"content":"import { applyDropdownFilter } from \u0027./dropdownfilter\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { FilterableSource } from \u0027./filterableTypes\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { paginateData } from \u0027./issue-paginator\u0027;"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":"import { applySort } from \u0027./issue-sorter\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { applySearchFilter } from \u0027./search-filter\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"export class IssuesDataTable extends DataSource\u003cIssue\u003e implements FilterableSource {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public count \u003d 0;"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" private filterChange \u003d new BehaviorSubject(this.filtersService.defaultFilter());"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private issuesSubject \u003d new BehaviorSubject\u003cIssue[]\u003e([]);"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private issueSubscription: Subscription;"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" public isLoading$ \u003d this.issueService.isLoading.asObservable();"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":26,"author":{"gitId":"-"},"content":" private issueService: IssueService,"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" private groupingContextService: GroupingContextService,"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" private filtersService: FiltersService,"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" private milestoneService: MilestoneService,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private paginator: MatPaginator,"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private displayedColumn: string[],"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" private group?: Group,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private defaultFilter?: (issue: Issue) \u003d\u003e boolean"},{"lineNumber":34,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" super();"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" connect(): Observable\u003cIssue[]\u003e {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return this.issuesSubject.asObservable();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" disconnect() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.filterChange.complete();"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.issuesSubject.complete();"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" if (this.issueSubscription) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.issueSubscription.unsubscribe();"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.issueService.stopPollIssues();"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" loadIssues() {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" let page;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (this.paginator !\u003d\u003d undefined) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" page \u003d this.paginator.page;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" const displayDataChanges \u003d [this.issueService.issues$, page, this.filterChange].filter((x) \u003d\u003e x !\u003d\u003d undefined);"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" this.issueService.startPollIssues();"},{"lineNumber":60,"author":{"gitId":"-"},"content":" this.issueSubscription \u003d merge(...displayDataChanges)"},{"lineNumber":61,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":62,"author":{"gitId":"-"},"content":" // maps each change in display value to new issue ordering or filtering"},{"lineNumber":63,"author":{"gitId":"-"},"content":" map(() \u003d\u003e {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" let data \u003d \u003cIssue[]\u003eObject.values(this.issueService.issues$.getValue()).reverse();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" if (this.defaultFilter) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" data \u003d data.filter(this.defaultFilter);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // Filter by assignee of issue"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" data \u003d this.groupingContextService.getDataForGroup(data, this.group);"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"Arif-Khalid"},"content":" // Apply Filters"},{"lineNumber":72,"author":{"gitId":"nknguyenhc"},"content":" data \u003d applyDropdownFilter(this.filter, data, !this.milestoneService.hasNoMilestones);"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"Arif-Khalid"},"content":" data \u003d applySearchFilter(this.filter.title, this.displayedColumn, this.issueService, data);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" this.count \u003d data.length;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"Arif-Khalid"},"content":" data \u003d applySort(this.filter.sort, data);"},{"lineNumber":78,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (this.paginator !\u003d\u003d undefined) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" data \u003d paginateData(this.paginator, data);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return data;"},{"lineNumber":83,"author":{"gitId":"-"},"content":" })"},{"lineNumber":84,"author":{"gitId":"-"},"content":" )"},{"lineNumber":85,"author":{"gitId":"-"},"content":" .subscribe((issues) \u003d\u003e {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.issuesSubject.next(issues);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" });"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"Arif-Khalid"},"content":" get filter(): Filter {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return this.filterChange.value;"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"Arif-Khalid"},"content":" set filter(filter: Filter) {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" this.filterChange.next(filter);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":6,"NereusWB922":7,"Arif-Khalid":9,"-":75}},{"path":"src/app/shared/issue-tables/dropdownfilter.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":2,"author":{"gitId":"Arif-Khalid"},"content":"import { Filter } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"nknguyenhc"},"content":"type StatusInfo \u003d {"},{"lineNumber":5,"author":{"gitId":"-"},"content":" type: string;"},{"lineNumber":6,"author":{"gitId":"nknguyenhc"},"content":" status: string;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"};"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"nknguyenhc"},"content":"/**"},{"lineNumber":10,"author":{"gitId":"nknguyenhc"},"content":" * Converts a status string into an info object"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":12,"author":{"gitId":"nknguyenhc"},"content":"const infoFromStatus \u003d (statusString: string): StatusInfo \u003d\u003e {"},{"lineNumber":13,"author":{"gitId":"nknguyenhc"},"content":" const [status, type] \u003d statusString.split(\u0027 \u0027);"},{"lineNumber":14,"author":{"gitId":"nknguyenhc"},"content":" return { status, type };"},{"lineNumber":15,"author":{"gitId":"-"},"content":"};"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * This module serves to improve separation of concerns in IssuesDataTable.ts and IssueList.ts module by containing the logic for"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * applying dropdownFilter to the issues data table in this module."},{"lineNumber":20,"author":{"gitId":"-"},"content":" * This module exports a single function applyDropDownFilter which is called by IssueList."},{"lineNumber":21,"author":{"gitId":"Arif-Khalid"},"content":" * This functions returns the data passed in after all the filters of dropdownFilters are applied"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */"},{"lineNumber":23,"author":{"gitId":"nknguyenhc"},"content":"export function applyDropdownFilter(filter: Filter, data: Issue[], isFilteringByMilestone: boolean): Issue[] {"},{"lineNumber":24,"author":{"gitId":"Arif-Khalid"},"content":" const filteredData: Issue[] \u003d data.filter((issue) \u003d\u003e {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" let ret \u003d true;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" // status can either be \u0027open\u0027, \u0027closed\u0027, or \u0027merged\u0027"},{"lineNumber":28,"author":{"gitId":"nknguyenhc"},"content":" ret \u003d"},{"lineNumber":29,"author":{"gitId":"nknguyenhc"},"content":" ret \u0026\u0026"},{"lineNumber":30,"author":{"gitId":"nknguyenhc"},"content":" filter.status.some((item) \u003d\u003e {"},{"lineNumber":31,"author":{"gitId":"nknguyenhc"},"content":" const statusInfo \u003d infoFromStatus(item);"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" return statusInfo.status \u003d\u003d\u003d issue.state.toLowerCase() \u0026\u0026 statusInfo.type \u003d\u003d\u003d issue.issueOrPr.toLowerCase();"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" });"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"Arif-Khalid"},"content":" if (filter.type \u003d\u003d\u003d \u0027issue\u0027) {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" ret \u003d ret \u0026\u0026 issue.issueOrPr \u003d\u003d\u003d \u0027Issue\u0027;"},{"lineNumber":37,"author":{"gitId":"Arif-Khalid"},"content":" } else if (filter.type \u003d\u003d\u003d \u0027pullrequest\u0027) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" ret \u003d ret \u0026\u0026 issue.issueOrPr \u003d\u003d\u003d \u0027PullRequest\u0027;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" ret \u003d ret \u0026\u0026 (!isFilteringByMilestone || filter.milestones.some((milestone) \u003d\u003e issue.milestone.title \u003d\u003d\u003d milestone));"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" ret \u003d ret \u0026\u0026 issue.labels.every((label) \u003d\u003e !filter.deselectedLabels.has(label));"},{"lineNumber":43,"author":{"gitId":"Arif-Khalid"},"content":" return ret \u0026\u0026 filter.labels.every((label) \u003d\u003e issue.labels.includes(label));"},{"lineNumber":44,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":45,"author":{"gitId":"Arif-Khalid"},"content":" return filteredData;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":18,"Arif-Khalid":8,"-":20}},{"path":"src/app/shared/issue-tables/filterableTypes.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":2,"author":{"gitId":"-"},"content":" * This module aims to abstract out classes that can be filtered"},{"lineNumber":3,"author":{"gitId":"-"},"content":" */"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":"import { Filter } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":6,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * FilterableSource is an interface that contains a source that can be filtered"},{"lineNumber":9,"author":{"gitId":"-"},"content":" * by a string filter or dropdownFilter."},{"lineNumber":10,"author":{"gitId":"-"},"content":" * The source should set filter and dropdownFilter as a getter and setter"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * and applies the filter when these variables are changed."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"export interface FilterableSource {"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":" filter: Filter;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * FilterComponent is a component that contains a FilterableSource"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"export interface FilterableComponent {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" retrieveFilterable: () \u003d\u003e FilterableSource;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":3,"-":19}},{"path":"src/app/shared/issue-tables/issue-sorter.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"import { Sort } from \u0027@angular/material/sort\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import * as moment from \u0027moment\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":"export function applySort(sort: Sort, data: Issue[]): Issue[] {"},{"lineNumber":6,"author":{"gitId":"-"},"content":" if (!sort.active) {"},{"lineNumber":7,"author":{"gitId":"-"},"content":" return data;"},{"lineNumber":8,"author":{"gitId":"-"},"content":" }"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":" const direction: number \u003d sort.direction \u003d\u003d\u003d \u0027asc\u0027 ? 1 : -1;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":" switch (sort.active) {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" case \u0027id\u0027:"},{"lineNumber":14,"author":{"gitId":"MadLamprey"},"content":" return data.sort((a, b) \u003d\u003e direction * compareByIntegerValue(a.id, b.id));"},{"lineNumber":15,"author":{"gitId":"-"},"content":" case \u0027date\u0027:"},{"lineNumber":16,"author":{"gitId":"MadLamprey"},"content":" return data.sort((a, b) \u003d\u003e direction * compareByDateValue(a.updated_at, b.updated_at));"},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":" case \u0027status\u0027:"},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":" return data.sort((a, b) \u003d\u003e direction * compareByIssueType(a, b));"},{"lineNumber":19,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":20,"author":{"gitId":"-"},"content":" // title, responseTag are string values"},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":" return data.sort((a, b) \u003d\u003e direction * compareByStringValue(a[sort.active], b[sort.active]));"},{"lineNumber":22,"author":{"gitId":"-"},"content":" }"},{"lineNumber":23,"author":{"gitId":"-"},"content":"}"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"function compareByStringValue(valueA: string, valueB: string): number {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" const orderA \u003d String(valueA || \u0027\u0027).toUpperCase();"},{"lineNumber":27,"author":{"gitId":"-"},"content":" const orderB \u003d String(valueB || \u0027\u0027).toUpperCase();"},{"lineNumber":28,"author":{"gitId":"-"},"content":" return orderA \u003c orderB ? -1 : 1;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"function compareByIntegerValue(valueA: number, valueB: number): number {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" return valueA \u003c valueB ? -1 : 1;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"function compareByDateValue(valueA: string, valueB: string): number {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" return moment(valueA).isBefore(valueB) ? -1 : 1;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}"},{"lineNumber":38,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":39,"author":{"gitId":"MadLamprey"},"content":"function compareByIssueType(valueA: Issue, valueB: Issue): number {"},{"lineNumber":40,"author":{"gitId":"MadLamprey"},"content":" const sortOrder \u003d {"},{"lineNumber":41,"author":{"gitId":"MadLamprey"},"content":" \u0027OPEN PullRequest\u0027: 0,"},{"lineNumber":42,"author":{"gitId":"MadLamprey"},"content":" \u0027OPEN Issue\u0027: 1,"},{"lineNumber":43,"author":{"gitId":"MadLamprey"},"content":" \u0027MERGED PullRequest\u0027: 2,"},{"lineNumber":44,"author":{"gitId":"MadLamprey"},"content":" \u0027CLOSED Issue\u0027: 3,"},{"lineNumber":45,"author":{"gitId":"MadLamprey"},"content":" \u0027CLOSED PullRequest\u0027: 4"},{"lineNumber":46,"author":{"gitId":"MadLamprey"},"content":" };"},{"lineNumber":47,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":48,"author":{"gitId":"MadLamprey"},"content":" const aOrder \u003d sortOrder[valueA.state + \u0027 \u0027 + valueA.issueOrPr] || -1;"},{"lineNumber":49,"author":{"gitId":"MadLamprey"},"content":" const bOrder \u003d sortOrder[valueB.state + \u0027 \u0027 + valueB.issueOrPr] || -1;"},{"lineNumber":50,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":51,"author":{"gitId":"MadLamprey"},"content":" if (aOrder \u003d\u003d\u003d bOrder) {"},{"lineNumber":52,"author":{"gitId":"MadLamprey"},"content":" return compareByStringValue(valueA.title, valueB.title);"},{"lineNumber":53,"author":{"gitId":"MadLamprey"},"content":" } else if (aOrder \u003e bOrder) {"},{"lineNumber":54,"author":{"gitId":"MadLamprey"},"content":" return 1;"},{"lineNumber":55,"author":{"gitId":"MadLamprey"},"content":" } else {"},{"lineNumber":56,"author":{"gitId":"MadLamprey"},"content":" return -1;"},{"lineNumber":57,"author":{"gitId":"MadLamprey"},"content":" }"},{"lineNumber":58,"author":{"gitId":"MadLamprey"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":2,"MadLamprey":26,"-":30}},{"path":"src/app/shared/layout/header.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":".repo-menu-footer {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" display: flex;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" justify-content: space-between;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" align-items: center;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" position: sticky;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" bottom: 0;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" z-index: 1;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" padding: 10px;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":".new-repo-button {"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" flex-grow: 1;"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":".keep-filter-button {"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" margin-left: 2px;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":".repo-options {"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" max-height: 300px;"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" overflow-y: auto;"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":".repo-options button {"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" font-size: 17px;"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":"/* Overwrite the width of the menu */"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"::ng-deep .repo-menu {"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" width: fit-content !important;"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" min-width: 320px !important;"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":32}},{"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":"NereusWB922"},"content":" \u003ca class\u003d\"mat-toolbar mat-primary\" style\u003d\"text-decoration: none\" [routerLink]\u003d\"viewService.isRepoSet() ? viewService.currentView : null\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003eWATcher v{{ this.getVersion() }}\u003c/a"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":" \u003cspan id\u003d\"view-descriptor\" *ngIf\u003d\"viewService.isRepoSet()\" style\u003d\"margin-left: 70px\"\u003e"},{"lineNumber":15,"author":{"gitId":"nknguyenhc"},"content":" {{ this.presetViews[this.filtersService.presetView$.value] }}"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"nknguyenhc"},"content":" \u003c!-- Gateway to activity dashboard, do not delete --\u003e"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" \u003c!--div *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 this.viewService.sessionData.sessionRepo.length \u003e 1\"\u003e"},{"lineNumber":20,"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":21,"author":{"gitId":"-"},"content":" \u003cmat-menu #menu\u003d\"matMenu\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":23,"author":{"gitId":"-"},"content":" mat-menu-item"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" *ngFor\u003d\"let sessionRepo of this.viewService.sessionData.sessionRepo\""},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" (click)\u003d\"this.routeToSelectedView(sessionRepo.view)\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cspan\u003e"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-icon [ngStyle]\u003d\"{ color: \u0027green\u0027, visibility: this.viewService.currentView \u003d\u003d\u003d sessionRepo.view ? \u0027visible\u0027 : \u0027hidden\u0027 }\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003edone\u003c/mat-icon"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" {{ this.getViewDescription(sessionRepo.view) }}"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c/mat-menu\u003e"},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" \u003c/div--\u003e"},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":37,"author":{"gitId":"Arif-Khalid"},"content":" \u003cdiv *ngIf\u003d\"viewService.isRepoSet()\"\u003e"},{"lineNumber":38,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton mat-button [matMenuTriggerFor]\u003d\"menu\"\u003e\u003cmat-icon style\u003d\"color: white\"\u003eexpand_more\u003c/mat-icon\u003e\u003c/button\u003e"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-menu #menu\u003d\"matMenu\"\u003e"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" \u003cdiv *ngFor\u003d\"let presetView of this.presetViews | keyvalue\"\u003e"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton mat-menu-item *ngIf\u003d\"presetView.key !\u003d\u003d \u0027custom\u0027\" (click)\u003d\"this.filtersService.updatePresetView(presetView.key)\"\u003e"},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" \u003cspan\u003e"},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" \u003cmat-icon"},{"lineNumber":44,"author":{"gitId":"nknguyenhc"},"content":" [ngStyle]\u003d\"{ color: \u0027green\u0027, visibility: this.filtersService.presetView$.value \u003d\u003d\u003d presetView.key ? \u0027visible\u0027 : \u0027hidden\u0027 }\""},{"lineNumber":45,"author":{"gitId":"nknguyenhc"},"content":" \u003edone\u003c/mat-icon"},{"lineNumber":46,"author":{"gitId":"nknguyenhc"},"content":" \u003e"},{"lineNumber":47,"author":{"gitId":"nknguyenhc"},"content":" {{ presetView.value }}"},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" \u003c/span\u003e"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" \u003c/button\u003e"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" \u003c/div\u003e"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" \u003c/mat-menu\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c!-- everything else --\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":"NereusWB922"},"content":" \u003cdiv *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 viewService.isRepoSet()\"\u003e"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" \u003cspan id\u003d\"view-descriptor\" style\u003d\"margin-left: 10px\"\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" {{ this.currentRepo || \u0027No Repository Set\u0027 }}"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" mat-icon-button"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" matTooltip\u003d\"{{ viewService.isRepoSet() ? \u0027Change Repository\u0027 : \u0027Select Repository\u0027 }}\""},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" [matMenuTriggerFor]\u003d\"repoMenu\""},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003eedit\u003c/mat-icon\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-menu #repoMenu xPosition\u003d\"before\" class\u003d\"repo-menu\"\u003e"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"repo-options\"\u003e"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv *ngFor\u003d\"let repo of this.repoUrlCacheService.suggestions\"\u003e"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" \u003cbutton mat-menu-item *ngIf\u003d\"repo !\u003d\u003d this.currentRepo\" (click)\u003d\"this.applyRepoDropdown(repo, true)\"\u003e"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" {{ repo }}"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" \u003c/button\u003e"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"repo-menu-footer\"\u003e"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" \u003cbutton mat-flat-button color\u003d\"primary\" class\u003d\"new-repo-button\" (click)\u003d\"this.openChangeRepoDialog()\" matTooltip\u003d\"Add new repository\"\u003e"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-icon\u003eadd\u003c/mat-icon\u003e"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" \u003c/button\u003e"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" \u003cbutton"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" mat-icon-button"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" (click)\u003d\"toggleKeepFilters($event)\""},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" class\u003d\"keep-filter-button\""},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" matTooltip\u003d\"{{ keepFilters ? \u0027Keep filter on\u0027 : \u0027Keep filter off\u0027 }}\""},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" color\u003d\"{{ keepFilters ? \u0027primary\u0027 : \u0027warn\u0027 }}\""},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" \u003e"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-icon\u003e{{ keepFilters ? \u0027filter_alt\u0027 : \u0027filter_alt_off\u0027 }}\u003c/mat-icon\u003e"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" \u003c/button\u003e"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-menu\u003e"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" \u003cspan style\u003d\"flex: 1 1 auto\"\u003e\u003c/span\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" \u003cbutton mat-button matTooltip\u003d\"Download WATcher Log\" (click)\u003d\"this.exportLogFile()\"\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003ereceipt\u003c/mat-icon\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003cbutton mat-button matTooltip\u003d\"Give feedback about WATcher\" (click)\u003d\"openIssueTracker()\"\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003email\u003c/mat-icon\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 viewService.isRepoSet() \u0026\u0026 isOpenUrlButtonShown()\""},{"lineNumber":108,"author":{"gitId":"-"},"content":" mat-button"},{"lineNumber":109,"author":{"gitId":"-"},"content":" matTooltip\u003d\"View current page on GitHub\""},{"lineNumber":110,"author":{"gitId":"-"},"content":" (click)\u003d\"viewBrowser()\""},{"lineNumber":111,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003eopen_in_new\u003c/mat-icon\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"sync-spinner\" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 (this.isLoading$ | async); else notLoading\"\u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":" \u003cmat-spinner class\u003d\"white-spinner\" [diameter]\u003d\"20\"\u003e\u003c/mat-spinner\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" \u003cng-template #notLoading\u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 viewService.isRepoSet() \u0026\u0026 isReloadButtonShown() \u0026\u0026 !this.isReloadButtonDisabled\""},{"lineNumber":122,"author":{"gitId":"-"},"content":" mat-button"},{"lineNumber":123,"author":{"gitId":"-"},"content":" matTooltip\u003d\"Synchronize with Github data\""},{"lineNumber":124,"author":{"gitId":"-"},"content":" (click)\u003d\"reload()\""},{"lineNumber":125,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":" Sync"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003erefresh\u003c/mat-icon\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"sync-spinner\" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 isReloadButtonShown() \u0026\u0026 this.isReloadButtonDisabled\"\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \u003cspan style\u003d\"font-size: 14px; margin-right: 7px\"\u003eSync\u003c/span\u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":" \u003cmat-spinner class\u003d\"white-spinner\" [diameter]\u003d\"20\"\u003e\u003c/mat-spinner\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":" \u003c/ng-template\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" \u003cbutton *ngIf\u003d\"auth.isAuthenticated()\" mat-button matTooltip\u003d\"Log out\" (click)\u003d\"openLogOutDialog(); $event.stopPropagation()\"\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":" ({{ userService.currentUser.loginId }})"},{"lineNumber":137,"author":{"gitId":"-"},"content":" \u003cmat-icon style\u003d\"margin-left: 2px\"\u003eexit_to_app\u003c/mat-icon\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003c/mat-toolbar\u003e"}],"authorContributionMap":{"nknguyenhc":19,"NereusWB922":38,"Arif-Khalid":2,"-":80}},{"path":"src/app/shared/layout/header.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Location } from \u0027@angular/common\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Component, OnInit } from \u0027@angular/core\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Router, RoutesRecognized } from \u0027@angular/router\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { filter, pairwise, switchMap } from \u0027rxjs/operators\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { AppConfig } from \u0027../../../environments/environment\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { STORAGE_KEYS } from \u0027../../core/constants/storage-keys.constants\u0027;"},{"lineNumber":8,"author":{"gitId":"Arif-Khalid"},"content":"import { RepoChangeResponse } from \u0027../../core/models/repo-change-response.model\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { Repo } from \u0027../../core/models/repo.model\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../../core/models/view.model\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { AuthService } from \u0027../../core/services/auth.service\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { DialogService } from \u0027../../core/services/dialog.service\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../../core/services/error-handling.service\u0027;"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":"import { FiltersService } from \u0027../../core/services/filters.service\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../../core/services/github.service\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027../../core/services/githubevent.service\u0027;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"import { GroupingContextService } from \u0027../../core/services/grouping/grouping-context.service\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../../core/services/issue.service\u0027;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../../core/services/label.service\u0027;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../core/services/logging.service\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import { RepoSessionStorageService } from \u0027../../core/services/repo-session-storage.service\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import { RepoUrlCacheService } from \u0027../../core/services/repo-url-cache.service\u0027;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../../core/services/user.service\u0027;"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"import { ViewDescription, ViewService } from \u0027../../core/services/view.service\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"const ISSUE_TRACKER_URL \u003d \u0027https://github.com/CATcher-org/WATcher/issues\u0027;"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":29,"author":{"gitId":"-"},"content":" selector: \u0027app-layout-header\u0027,"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" templateUrl: \u0027./header.component.html\u0027,"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" styleUrls: [\u0027./header.component.css\u0027]"},{"lineNumber":32,"author":{"gitId":"-"},"content":"})"},{"lineNumber":33,"author":{"gitId":"-"},"content":"export class HeaderComponent implements OnInit {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private prevUrl;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" isReloadButtonDisabled \u003d false;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" ISSUE_FILTER \u003d \u0027/issues?q\u003dis:issue+is:all\u0027; // the filtered list must be an issue and must be open"},{"lineNumber":37,"author":{"gitId":"-"},"content":" TUTORIAL_LABEL \u003d \u0027+label:tutorial.\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" TEAM_LABEL \u003d \u0027+label:team.\u0027;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" EXCLUDE_DUPLICATE \u003d \u0027+-label:duplicate\u0027; // exclude duplicate issues"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" public isLoading$: Observable\u003cboolean\u003e;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" // Messages for the modal popup window upon logging out"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private readonly logOutDialogMessages \u003d [\u0027Do you wish to log out?\u0027];"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private readonly yesButtonDialogMessage \u003d \u0027Yes, I wish to log out\u0027;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private readonly noButtonDialogMessage \u003d \"No, I don\u0027t wish to log out\";"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" readonly presetViews: {"},{"lineNumber":49,"author":{"gitId":"nknguyenhc"},"content":" [key: string]: string;"},{"lineNumber":50,"author":{"gitId":"nknguyenhc"},"content":" } \u003d {"},{"lineNumber":51,"author":{"gitId":"nknguyenhc"},"content":" currentlyActive: \u0027Currently active\u0027,"},{"lineNumber":52,"author":{"gitId":"nknguyenhc"},"content":" contributions: \u0027Contributions\u0027,"},{"lineNumber":53,"author":{"gitId":"nknguyenhc"},"content":" custom: \u0027Custom\u0027"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" };"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" /** Model for the displayed repository name */"},{"lineNumber":57,"author":{"gitId":"-"},"content":" currentRepo \u003d \u0027\u0027;"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" keepFilters \u003d false;"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":62,"author":{"gitId":"-"},"content":" private router: Router,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public auth: AuthService,"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" public viewService: ViewService,"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public userService: UserService,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" public logger: LoggingService,"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" public repoUrlCacheService: RepoUrlCacheService,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" private location: Location,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" private githubEventService: GithubEventService,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" private issueService: IssueService,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" private labelService: LabelService,"},{"lineNumber":72,"author":{"gitId":"-"},"content":" private errorHandlingService: ErrorHandlingService,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" private githubService: GithubService,"},{"lineNumber":74,"author":{"gitId":"-"},"content":" private dialogService: DialogService,"},{"lineNumber":75,"author":{"gitId":"Arif-Khalid"},"content":" private repoSessionStorageService: RepoSessionStorageService,"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" private filtersService: FiltersService,"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" private groupingContextService: GroupingContextService"},{"lineNumber":78,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" router.events"},{"lineNumber":80,"author":{"gitId":"-"},"content":" .pipe("},{"lineNumber":81,"author":{"gitId":"-"},"content":" filter((e: any) \u003d\u003e e instanceof RoutesRecognized),"},{"lineNumber":82,"author":{"gitId":"-"},"content":" pairwise()"},{"lineNumber":83,"author":{"gitId":"-"},"content":" )"},{"lineNumber":84,"author":{"gitId":"-"},"content":" .subscribe((e) \u003d\u003e {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.prevUrl \u003d e[0].urlAfterRedirects;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" });"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":" this.auth.currentAuthState.subscribe(() \u003d\u003e {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (auth.isAuthenticated() \u0026\u0026 !repoSessionStorageService.hasRepoLocation()) {"},{"lineNumber":90,"author":{"gitId":"nknguyenhc"},"content":" if (!this.auth.hasNext()) {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" this.openChangeRepoDialog();"},{"lineNumber":92,"author":{"gitId":"nknguyenhc"},"content":" } else {"},{"lineNumber":93,"author":{"gitId":"nknguyenhc"},"content":" this.auth.redirectToNext();"},{"lineNumber":94,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":" });"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" this.viewService.repoSetState.subscribe((state) \u003d\u003e {"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" if (auth.isAuthenticated() \u0026\u0026 viewService.isRepoSet()) {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" this.initializeRepoNameInTitle();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":" });"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" this.viewService.repoChanged$.subscribe((repo) \u003d\u003e {"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" this.initializeRepoNameInTitle();"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" this.isLoading$ \u003d this.issueService.isLoading.asObservable();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" ngOnInit() {}"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" * Replaces and resets the current view data and routes the app to the"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" * newly selected view."},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" * @param selectedView - Selected View that is selected by the user."},{"lineNumber":117,"author":{"gitId":"-"},"content":" */"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" routeToSelectedView(selectedView: string): void {"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" // Do nothing if the selected view is the current view."},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" if (this.viewService.currentView \u003d\u003d\u003d View[selectedView]) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" // Replace Current View Data."},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" this.viewService.changeView(View[selectedView]);"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" // Remove current view issues and load selected view issues."},{"lineNumber":128,"author":{"gitId":"-"},"content":" this.githubService.reset();"},{"lineNumber":129,"author":{"gitId":"-"},"content":" this.issueService.reset(false);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" this.labelService.reset();"},{"lineNumber":131,"author":{"gitId":"-"},"content":" this.reload();"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" // Route app to new view."},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":" this.router.navigateByUrl(this.viewService.currentView);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" isBackButtonShown(): boolean {"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" return `/${this.viewService.currentView}` !\u003d\u003d this.router.url \u0026\u0026 this.router.url !\u003d\u003d \u0027/\u0027 \u0026\u0026 !this.router.url.startsWith(\u0027/?code\u0027);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" isReloadButtonShown(): boolean {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" return this.router.url !\u003d\u003d \u0027/phaseBugReporting/issues/new\u0027;"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" isOpenUrlButtonShown(): boolean {"},{"lineNumber":146,"author":{"gitId":"NereusWB922"},"content":" return this.viewService.currentView \u003d\u003d\u003d View.issuesViewer || this.viewService.currentView \u003d\u003d\u003d View.activityDashboard;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" getVersion(): string {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return AppConfig.version;"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" getViewDescription(openView: string): string {"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" return ViewDescription[openView];"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" goBack() {"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" if (this.prevUrl \u003d\u003d\u003d `/${this.viewService.currentView}/issues/new`) {"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" this.router.navigateByUrl(this.viewService.currentView);"},{"lineNumber":160,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" this.location.back();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" viewBrowser() {"},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":" if (this.viewService.currentView \u003d\u003d\u003d View.activityDashboard) {"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" window.open(`https://github.com/${this.viewService.currentRepo.owner}/${this.viewService.currentRepo.name}/pulse`);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" const routerUrl \u003d this.router.url.substring(1); // remove the first \u0027/\u0027 from string"},{"lineNumber":172,"author":{"gitId":"-"},"content":" const issueUrlIndex \u003d routerUrl.indexOf(\u0027/\u0027); // find the index of second \u0027/\u0027"},{"lineNumber":173,"author":{"gitId":"-"},"content":" let issueUrl: string;"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" // If can\u0027t find the index of second \u0027/\u0027, then router is at the /issues (table list) page"},{"lineNumber":176,"author":{"gitId":"-"},"content":" if (issueUrlIndex \u003c 0) {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" // Apply filters to the issueUrl"},{"lineNumber":178,"author":{"gitId":"-"},"content":" issueUrl \u003d this.ISSUE_FILTER;"},{"lineNumber":179,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" // issueUrl will be from the second \u0027/\u0027"},{"lineNumber":181,"author":{"gitId":"-"},"content":" issueUrl \u003d routerUrl.substring(issueUrlIndex);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":" // Open the url in user\u0027s preferred browser"},{"lineNumber":184,"author":{"gitId":"-"},"content":" window.open(\u0027https://github.com/\u0027.concat(this.githubService.getRepoURL()).concat(issueUrl));"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" openIssueTracker() {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" window.open(ISSUE_TRACKER_URL);"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" reload() {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" this.isReloadButtonDisabled \u003d true;"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" this.githubEventService.reloadPage().subscribe("},{"lineNumber":195,"author":{"gitId":"-"},"content":" (success) \u003d\u003e success,"},{"lineNumber":196,"author":{"gitId":"-"},"content":" (error) \u003d\u003e {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(error, () \u003d\u003e this.githubEventService.reloadPage());"},{"lineNumber":198,"author":{"gitId":"-"},"content":" }"},{"lineNumber":199,"author":{"gitId":"-"},"content":" );"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" this.labelService.fetchLabels().subscribe("},{"lineNumber":202,"author":{"gitId":"-"},"content":" (success) \u003d\u003e success,"},{"lineNumber":203,"author":{"gitId":"-"},"content":" (error) \u003d\u003e {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(error, () \u003d\u003e this.labelService.fetchLabels());"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" );"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" // Prevent user from spamming the reload button"},{"lineNumber":209,"author":{"gitId":"-"},"content":" setTimeout(() \u003d\u003e {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" this.isReloadButtonDisabled \u003d false;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }, 3000);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" logOut() {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" this.auth.logOut();"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" openLogOutDialog() {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" const dialogRef \u003d this.dialogService.openUserConfirmationModal("},{"lineNumber":220,"author":{"gitId":"-"},"content":" this.logOutDialogMessages,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" this.yesButtonDialogMessage,"},{"lineNumber":222,"author":{"gitId":"-"},"content":" this.noButtonDialogMessage"},{"lineNumber":223,"author":{"gitId":"-"},"content":" );"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" dialogRef.afterClosed().subscribe((res) \u003d\u003e {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" if (res) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" this.logger.info(`HeaderComponent: Logging out from ${this.userService.currentUser.loginId}`);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" this.logOut();"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":" });"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" exportLogFile() {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" this.logger.exportLogFile();"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":" initializeRepoNameInTitle() {"},{"lineNumber":238,"author":{"gitId":"NereusWB922"},"content":" if (Repo.isInvalidRepoName(this.viewService.currentRepo)) {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"NereusWB922"},"content":" const currentRepoString \u003d this.viewService.currentRepo.toString();"},{"lineNumber":242,"author":{"gitId":"-"},"content":" this.logger.info(`HeaderComponent: initializing current repository name as ${currentRepoString}`);"},{"lineNumber":243,"author":{"gitId":"-"},"content":" this.currentRepo \u003d currentRepoString;"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * Change repository viewed on Issue Dashboard, if a valid repository is provided."},{"lineNumber":248,"author":{"gitId":"-"},"content":" * Re-open dialog to prompt for another repository if an invalid one is provided."},{"lineNumber":249,"author":{"gitId":"-"},"content":" */"},{"lineNumber":250,"author":{"gitId":"Arif-Khalid"},"content":" changeRepositoryIfValid(repo: Repo, newRepoString: string, keepFilters: boolean) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" if (newRepoString \u003d\u003d\u003d this.currentRepo) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":255,"author":{"gitId":"NereusWB922"},"content":" this.viewService"},{"lineNumber":256,"author":{"gitId":"-"},"content":" .changeRepositoryIfValid(repo)"},{"lineNumber":257,"author":{"gitId":"-"},"content":" .then(() \u003d\u003e {"},{"lineNumber":258,"author":{"gitId":"NereusWB922"},"content":" this.auth.setTitleWithViewDetail();"},{"lineNumber":259,"author":{"gitId":"-"},"content":" this.currentRepo \u003d newRepoString;"},{"lineNumber":260,"author":{"gitId":"NereusWB922"},"content":" if (!keepFilters) {"},{"lineNumber":261,"author":{"gitId":"NereusWB922"},"content":" this.groupingContextService.reset();"},{"lineNumber":262,"author":{"gitId":"Arif-Khalid"},"content":" this.filtersService.clearFilters();"},{"lineNumber":263,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":264,"author":{"gitId":"-"},"content":" })"},{"lineNumber":265,"author":{"gitId":"-"},"content":" .catch((error) \u003d\u003e {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" this.openChangeRepoDialog();"},{"lineNumber":267,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(error);"},{"lineNumber":268,"author":{"gitId":"-"},"content":" });"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"NereusWB922"},"content":" applyRepoDropdown(repoString: string) {"},{"lineNumber":272,"author":{"gitId":"NereusWB922"},"content":" const newRepo \u003d Repo.of(repoString);"},{"lineNumber":273,"author":{"gitId":"NereusWB922"},"content":" this.changeRepositoryIfValid(newRepo, newRepo.toString(), this.keepFilters);"},{"lineNumber":274,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":275,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":276,"author":{"gitId":"NereusWB922"},"content":" toggleKeepFilters(event: MouseEvent) {"},{"lineNumber":277,"author":{"gitId":"NereusWB922"},"content":" event.stopPropagation();"},{"lineNumber":278,"author":{"gitId":"NereusWB922"},"content":" this.keepFilters \u003d !this.keepFilters;"},{"lineNumber":279,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":280,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":281,"author":{"gitId":"-"},"content":" openChangeRepoDialog() {"},{"lineNumber":282,"author":{"gitId":"-"},"content":" const dialogRef \u003d this.dialogService.openChangeRepoDialog(this.currentRepo);"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"Arif-Khalid"},"content":" dialogRef.afterClosed().subscribe((res: RepoChangeResponse | null) \u003d\u003e {"},{"lineNumber":285,"author":{"gitId":"-"},"content":" if (!res) {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"Arif-Khalid"},"content":" const newRepo \u003d Repo.of(res.repo);"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"NereusWB922"},"content":" if (this.viewService.isRepoSet()) {"},{"lineNumber":291,"author":{"gitId":"Arif-Khalid"},"content":" this.changeRepositoryIfValid(newRepo, newRepo.toString(), res.keepFilters);"},{"lineNumber":292,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":294,"author":{"gitId":"-"},"content":" * From session-selection.component.ts"},{"lineNumber":295,"author":{"gitId":"-"},"content":" *"},{"lineNumber":296,"author":{"gitId":"-"},"content":" * Persist repo information in local browser storage"},{"lineNumber":297,"author":{"gitId":"-"},"content":" * To retrieve after authentication redirects back to WATcher"},{"lineNumber":298,"author":{"gitId":"-"},"content":" *"},{"lineNumber":299,"author":{"gitId":"-"},"content":" * Since localStorage::setItem with an undefined value can result in"},{"lineNumber":300,"author":{"gitId":"-"},"content":" * the subsequent value being stored as a string being \u0027undefined\u0027, check"},{"lineNumber":301,"author":{"gitId":"-"},"content":" * if undefined before storing it. Let\u0027s reset the items before setting them."},{"lineNumber":302,"author":{"gitId":"-"},"content":" */"},{"lineNumber":303,"author":{"gitId":"-"},"content":" window.localStorage.removeItem(STORAGE_KEYS.ORG);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" window.localStorage.removeItem(STORAGE_KEYS.DATA_REPO);"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" if (newRepo) {"},{"lineNumber":307,"author":{"gitId":"-"},"content":" window.localStorage.setItem(STORAGE_KEYS.ORG, newRepo.owner);"},{"lineNumber":308,"author":{"gitId":"-"},"content":" window.localStorage.setItem(STORAGE_KEYS.DATA_REPO, newRepo.name);"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" this.repoUrlCacheService.cache(newRepo.toString());"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }"},{"lineNumber":312,"author":{"gitId":"-"},"content":" this.auth.setRepo().subscribe();"},{"lineNumber":313,"author":{"gitId":"-"},"content":" }"},{"lineNumber":314,"author":{"gitId":"-"},"content":" });"},{"lineNumber":315,"author":{"gitId":"-"},"content":" }"},{"lineNumber":316,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":12,"Arif-Khalid":9,"NereusWB922":54,"-":241}},{"path":"src/app/shared/repo-change-form/repo-change-form.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".change-repo-form-title {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"}"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":".mat-dialog-content {"},{"lineNumber":6,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":".mat-form-field {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":".mat-dialog-actions {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" justify-content: flex-end;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":17,"author":{"gitId":"Arif-Khalid"},"content":".change-repo-form-header {"},{"lineNumber":18,"author":{"gitId":"Arif-Khalid"},"content":" display: flex;"},{"lineNumber":19,"author":{"gitId":"Arif-Khalid"},"content":" justify-content: space-between;"},{"lineNumber":20,"author":{"gitId":"Arif-Khalid"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":5,"-":15}},{"path":"src/app/shared/repo-change-form/repo-change-form.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"\u003cdiv class\u003d\"change-repo-form-header\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003ch1 mat-dialog-title class\u003d\"change-repo-form-title\"\u003e{{ data.repoName ? \u0027Change repository\u0027 : \u0027Select repository\u0027 }}\u003c/h1\u003e"},{"lineNumber":3,"author":{"gitId":"Arif-Khalid"},"content":" \u003cmat-checkbox *ngIf\u003d\"data.repoName\" [(ngModel)]\u003d\"this.keepFilters\"\u003eKeep Filters\u003c/mat-checkbox\u003e"},{"lineNumber":4,"author":{"gitId":"Arif-Khalid"},"content":"\u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cdiv mat-dialog-content\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cform (ngSubmit)\u003d\"onYesClick()\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"fill\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eRepository Location (Github Link or Org/Repo)\u003c/mat-label\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cinput matInput [(ngModel)]\u003d\"this.repoName\" [formControl]\u003d\"repoChangeForm\" [matAutocomplete]\u003d\"auto\" /\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cmat-autocomplete #auto\u003d\"matAutocomplete\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cmat-option *ngFor\u003d\"let suggestion of filteredSuggestions | async\" [value]\u003d\"suggestion\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" {{ suggestion }}"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/mat-option\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003c/mat-autocomplete\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/form\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cdiv mat-dialog-actions\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cbutton mat-button (click)\u003d\"onNoClick()\" color\u003d\"warn\"\u003eCancel\u003c/button\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cbutton mat-button (click)\u003d\"onYesClick()\" color\u003d\"primary\"\u003e{{ data.repoName ? \u0027Change Repo\u0027 : \u0027Select Repo\u0027 }}\u003c/button\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"Arif-Khalid":3,"-":18}},{"path":"src/app/shared/repo-change-form/repo-change-form.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, Inject, OnInit } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { FormControl } from \u0027@angular/forms\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { MatDialogRef, MAT_DIALOG_DATA } from \u0027@angular/material/dialog\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":5,"author":{"gitId":"Arif-Khalid"},"content":"import { RepoChangeResponse } from \u0027../../core/models/repo-change-response.model\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { RepoUrlCacheService } from \u0027../../core/services/repo-url-cache.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":9,"author":{"gitId":"-"},"content":" selector: \u0027app-repo-change-form\u0027,"},{"lineNumber":10,"author":{"gitId":"-"},"content":" templateUrl: \u0027./repo-change-form.component.html\u0027,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./repo-change-form.component.css\u0027]"},{"lineNumber":12,"author":{"gitId":"-"},"content":"})"},{"lineNumber":13,"author":{"gitId":"-"},"content":"export class RepoChangeFormComponent implements OnInit {"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":" public repoName: string;"},{"lineNumber":15,"author":{"gitId":"Arif-Khalid"},"content":" public keepFilters: boolean;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" filteredSuggestions: Observable\u003cstring[]\u003e;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" repoChangeForm \u003d new FormControl();"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":20,"author":{"gitId":"-"},"content":" public dialogRef: MatDialogRef\u003cRepoChangeFormComponent\u003e,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private repoUrlCacheService: RepoUrlCacheService,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Inject(MAT_DIALOG_DATA) public data"},{"lineNumber":23,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" this.repoName \u003d data.repoName;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.initRepoChangeForm();"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private initRepoChangeForm() {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" this.filteredSuggestions \u003d this.repoUrlCacheService.getFilteredSuggestions(this.repoChangeForm);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" onYesClick(): void {"},{"lineNumber":36,"author":{"gitId":"Arif-Khalid"},"content":" const response: RepoChangeResponse \u003d {"},{"lineNumber":37,"author":{"gitId":"Arif-Khalid"},"content":" repo: this.repoName,"},{"lineNumber":38,"author":{"gitId":"Arif-Khalid"},"content":" keepFilters: this.keepFilters"},{"lineNumber":39,"author":{"gitId":"Arif-Khalid"},"content":" };"},{"lineNumber":40,"author":{"gitId":"Arif-Khalid"},"content":" this.dialogRef.close(response);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" onNoClick(): void {"},{"lineNumber":44,"author":{"gitId":"Arif-Khalid"},"content":" this.dialogRef.close(null);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":9,"-":37}},{"path":"src/test.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"// This file is required by karma.conf.js and loads recursively all the .spec and framework files"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"// tslint:disable:ordered-imports"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"// Ordered-imports rule is disabled here because the import statement for \u0027zone-testing\u0027 must be"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"// at the top to prevent test setup breakage in \u0027npm run test\u0027."},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import \u0027zone.js/dist/zone-testing\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { getTestBed } from \u0027@angular/core/testing\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from \u0027@angular/platform-browser-dynamic/testing\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"declare const require: any;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"// First, initialize the Angular testing environment."},{"lineNumber":13,"author":{"gitId":"-"},"content":"getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());"},{"lineNumber":14,"author":{"gitId":"-"},"content":"// Then we find all the tests."},{"lineNumber":15,"author":{"gitId":"-"},"content":"const context \u003d require.context(\u0027../tests\u0027, true, /\\.spec\\.ts$/);"},{"lineNumber":16,"author":{"gitId":"-"},"content":"// And load the modules."},{"lineNumber":17,"author":{"gitId":"-"},"content":"context.keys().map(context);"}],"authorContributionMap":{"NereusWB922":4,"-":13}},{"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":"-"},"content":"import {"},{"lineNumber":3,"author":{"gitId":"-"},"content":" assertSessionDataIntegrity,"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" NO_VALID_OPEN_VIEWS,"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" OPENED_VIEW_REPO_UNDEFINED,"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" SESSION_DATA_MISSING_FIELDS,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" SESSION_DATA_UNAVAILABLE"},{"lineNumber":8,"author":{"gitId":"-"},"content":"} from \u0027../../../../src/app/core/models/session.model\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../../../../src/app/core/models/view.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":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":32,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":33,"author":{"gitId":"-"},"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 views\u0027, () \u003d\u003e {"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ view: \u0027invalidView\u0027 as View, 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":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(NO_VALID_OPEN_VIEWS))"},{"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: [{ view: View.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":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_VIEW_REPO_UNDEFINED))"},{"lineNumber":59,"author":{"gitId":"-"},"content":" });"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ view: View.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":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_VIEW_REPO_UNDEFINED))"},{"lineNumber":65,"author":{"gitId":"-"},"content":" });"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ view: View.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":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_VIEW_REPO_UNDEFINED))"},{"lineNumber":71,"author":{"gitId":"-"},"content":" });"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ view: View.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_VIEW_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":28,"-":58}},{"path":"tests/app/shared/filter-bar/label-filter-bar/label-filter-bar.component.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { NO_ERRORS_SCHEMA } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { ComponentFixture, fakeAsync, TestBed, tick } from \u0027@angular/core/testing\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { MatSelectionList } from \u0027@angular/material/list\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { MatMenuModule } from \u0027@angular/material/menu\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { BehaviorSubject, of } from \u0027rxjs\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { SimpleLabel } from \u0027../../../../../src/app/core/models/label.model\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { FiltersService } from \u0027../../../../../src/app/core/services/filters.service\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { LabelService } from \u0027../../../../../src/app/core/services/label.service\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import { LoggingService } from \u0027../../../../../src/app/core/services/logging.service\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { LabelFilterBarComponent } from \u0027../../../../../src/app/shared/filter-bar/label-filter-bar/label-filter-bar.component\u0027;"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"import { LABEL_NAME_SEVERITY_HIGH, LABEL_NAME_SEVERITY_LOW, SEVERITY_SIMPLE_LABELS } from \u0027../../../../constants/label.constants\u0027;"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"describe(\u0027LabelFilterBarComponent\u0027, () \u003d\u003e {"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" let component: LabelFilterBarComponent;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" let fixture: ComponentFixture\u003cLabelFilterBarComponent\u003e;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" let labelServiceSpy: jasmine.SpyObj\u003cLabelService\u003e;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" let loggingServiceSpy: jasmine.SpyObj\u003cLoggingService\u003e;"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" let filtersServiceSpy: jasmine.SpyObj\u003cFiltersService\u003e;"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" let labelsSubject: BehaviorSubject\u003cSimpleLabel[]\u003e;"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" beforeEach(async () \u003d\u003e {"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" labelServiceSpy \u003d jasmine.createSpyObj(\u0027LabelService\u0027, [\u0027connect\u0027, \u0027startPollLabels\u0027, \u0027fetchLabels\u0027]);"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" loggingServiceSpy \u003d jasmine.createSpyObj(\u0027LoggingService\u0027, [\u0027info\u0027, \u0027debug\u0027]);"},{"lineNumber":24,"author":{"gitId":"Arif-Khalid"},"content":" filtersServiceSpy \u003d jasmine.createSpyObj(\u0027FiltersService\u0027, [\u0027updateFilters\u0027, \u0027sanitizeLabels\u0027]);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" TestBed.configureTestingModule({"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" providers: ["},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" { provide: LabelService, useValue: labelServiceSpy },"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" { provide: LoggingService, useValue: loggingServiceSpy },"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" { provide: FiltersService, useValue: filtersServiceSpy }"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" ],"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" imports: [MatMenuModule],"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" declarations: [LabelFilterBarComponent],"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" schemas: [NO_ERRORS_SCHEMA]"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" }).compileComponents();"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" fixture \u003d TestBed.createComponent(LabelFilterBarComponent);"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" component \u003d fixture.componentInstance;"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" fixture.detectChanges();"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should create\u0027, () \u003d\u003e {"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" expect(component).toBeTruthy();"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027ngAfterViewInit\u0027, () \u003d\u003e {"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" // Setup labels observable"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" labelsSubject \u003d new BehaviorSubject\u003cSimpleLabel[]\u003e([]);"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" labelServiceSpy.fetchLabels.and.returnValue(of([]));"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" labelServiceSpy.connect.and.returnValue(labelsSubject.asObservable());"},{"lineNumber":52,"author":{"gitId":"Arif-Khalid"},"content":" filtersServiceSpy.sanitizeLabels.and.callThrough();"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":55,"author":{"gitId":"Arif-Khalid"},"content":" // it(\u0027should update allLabels with latest emmitted value after ngAfterViewInit\u0027, fakeAsync(() \u003d\u003e {"},{"lineNumber":56,"author":{"gitId":"Arif-Khalid"},"content":" // component.ngAfterViewInit();"},{"lineNumber":57,"author":{"gitId":"Arif-Khalid"},"content":" // tick();"},{"lineNumber":58,"author":{"gitId":"Arif-Khalid"},"content":" // labelsSubject.next(SEVERITY_SIMPLE_LABELS);"},{"lineNumber":59,"author":{"gitId":"Arif-Khalid"},"content":" // expect(component.allLabels).toEqual(SEVERITY_SIMPLE_LABELS);"},{"lineNumber":60,"author":{"gitId":"Arif-Khalid"},"content":" // }));"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027hide(label)\u0027, () \u003d\u003e {"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should add label to hidden labels set and update filter\u0027, () \u003d\u003e {"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" const label \u003d LABEL_NAME_SEVERITY_HIGH;"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" expect(component.hiddenLabelNames).not.toContain(label);"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" component.hide(label);"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" expect(component.hiddenLabelNames).toContain(label);"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" expect(filtersServiceSpy.updateFilters).toHaveBeenCalledWith({ hiddenLabels: component.hiddenLabelNames });"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027show(label)\u0027, () \u003d\u003e {"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should remove label from hidden labels set and update filter\u0027, () \u003d\u003e {"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" const label \u003d LABEL_NAME_SEVERITY_HIGH;"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" component.hide(label);"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" expect(component.hiddenLabelNames).toContain(label);"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" component.show(label);"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" expect(component.hiddenLabelNames).not.toContain(label);"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" expect(filtersServiceSpy.updateFilters).toHaveBeenCalledWith({ hiddenLabels: component.hiddenLabelNames });"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027hasLabels\u0027, () \u003d\u003e {"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" component.allLabels \u003d SEVERITY_SIMPLE_LABELS;"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should return true if any label match the filter\u0027, () \u003d\u003e {"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" const filter \u003d \u0027low\u0027;"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" const result \u003d component.hasLabels(filter);"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" expect(result).toBeTrue();"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should return false if no label match the filter\u0027, () \u003d\u003e {"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" const filter \u003d \u0027priority\u0027;"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" const result \u003d component.hasLabels(filter);"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" expect(result).toBeFalse();"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should return false if no label exists\u0027, () \u003d\u003e {"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" const filter \u003d \u0027low\u0027;"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":" component.allLabels \u003d [];"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" const result \u003d component.hasLabels(filter);"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" expect(result).toBeFalse();"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027updateSelection\u0027, () \u003d\u003e {"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should update filters service with selected labels\u0027, () \u003d\u003e {"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" const selectedLabels \u003d [LABEL_NAME_SEVERITY_HIGH, LABEL_NAME_SEVERITY_LOW];"},{"lineNumber":122,"author":{"gitId":"nknguyenhc"},"content":" component.selectedLabelNames \u003d new Set\u003cstring\u003e(selectedLabels);"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":124,"author":{"gitId":"nknguyenhc"},"content":" component.updateSelection();"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":126,"author":{"gitId":"nknguyenhc"},"content":" expect(filtersServiceSpy.updateFilters).toHaveBeenCalledWith({ labels: selectedLabels, deselectedLabels: new Set\u003cstring\u003e() });"},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027removeAllSelection\u0027, () \u003d\u003e {"},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should deselect all labels and update the filter\u0027, () \u003d\u003e {"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":" component.removeAllSelection();"},{"lineNumber":133,"author":{"gitId":"nknguyenhc"},"content":" expect(component.selectedLabelNames).toEqual(new Set\u003cstring\u003e());"},{"lineNumber":134,"author":{"gitId":"nknguyenhc"},"content":" expect(component.deselectedLabelNames).toEqual(new Set\u003cstring\u003e());"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":"});"}],"authorContributionMap":{"nknguyenhc":5,"NereusWB922":124,"Arif-Khalid":8}},{"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":"NereusWB922"},"content":"import { applySort } 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":"NereusWB922"},"content":" describe(\u0027applySort()\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":"-"},"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 applySort(matSort, issuesList);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" expect(sortedData).toEqual(issuesList);"},{"lineNumber":26,"author":{"gitId":"-"},"content":" });"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" it(\u0027sorts issues based on their string fields correctly\u0027, () \u003d\u003e {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" matSort.active \u003d \u0027title\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuesByTitleAsc \u003d applySort(matSort, issuesList);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuesByTitleAsc, dummyIssue, otherDummyIssue);"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuesByTitleDesc \u003d applySort(matSort, issuesList);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuesByTitleDesc, otherDummyIssue, dummyIssue);"},{"lineNumber":37,"author":{"gitId":"-"},"content":" });"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" it(\u0027sorts issues based on their id fields correctly\u0027, () \u003d\u003e {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" matSort.active \u003d \u0027id\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByIdAsc \u003d applySort(matSort, issuesList);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuedByIdAsc, otherDummyIssue, dummyIssue);"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByIdDesc \u003d applySort(matSort, issuesList);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuedByIdDesc, dummyIssue, otherDummyIssue);"},{"lineNumber":48,"author":{"gitId":"-"},"content":" });"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" it(\u0027sorts issues based on their updated date fields correctly\u0027, () \u003d\u003e {"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" matSort.active \u003d \u0027date\u0027;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByDateAsc \u003d applySort(matSort, issuesWithDifferentUpdatedDate);"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" assertOrder(sortedIssuedByDateAsc, issueUpdatedEarlier, issueUpdatedLater);"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByDateDesc \u003d applySort(matSort, issuesWithDifferentUpdatedDate);"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" assertOrder(sortedIssuedByDateDesc, issueUpdatedLater, issueUpdatedEarlier);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" });"},{"lineNumber":61,"author":{"gitId":"-"},"content":" });"},{"lineNumber":62,"author":{"gitId":"-"},"content":"});"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * This helper method helps to check if the sorted issues are in their"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * correct order based on the variable arguments provided."},{"lineNumber":67,"author":{"gitId":"-"},"content":" */"},{"lineNumber":68,"author":{"gitId":"-"},"content":"function assertOrder(sortedIssues: Issue[], ...expectedSortedIssues: Issue[]) {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c sortedIssues.length; i++) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" expect(sortedIssues[i].id).toBe(expectedSortedIssues[i].id);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":28,"-":44}},{"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/data.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { UserRole } from \u0027../../src/app/core/models/user.model\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"export const csvString \u003d"},{"lineNumber":4,"author":{"gitId":"-"},"content":" `"},{"lineNumber":5,"author":{"gitId":"-"},"content":"role,name,team"},{"lineNumber":6,"author":{"gitId":"-"},"content":"student,JunWei96,CS2103T-W12-3"},{"lineNumber":7,"author":{"gitId":"-"},"content":"admin,damithc,"},{"lineNumber":8,"author":{"gitId":"-"},"content":"tutor,anubh-v,CS2103T-W12-3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"admin,geshuming,"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"tutor,jj-lim,CS2103T-W12-3"},{"lineNumber":12,"author":{"gitId":"-"},"content":"tutor,jj-lim,CS2103T-W12-3"},{"lineNumber":13,"author":{"gitId":"-"},"content":"tutor,jj-lim,CS2103T-W12-4"},{"lineNumber":14,"author":{"gitId":"-"},"content":"tutor,q ,CS2103T-W12-4"},{"lineNumber":15,"author":{"gitId":"-"},"content":"student,003-samuel,CS2103T-W12-3"},{"lineNumber":16,"author":{"gitId":"-"},"content":"student,damithc,CS2103T-W12-3"},{"lineNumber":17,"author":{"gitId":"-"},"content":"student,RonakLakhotia,CS2103T-W12-4"},{"lineNumber":18,"author":{"gitId":"-"},"content":"student,ptvrajsk,CS2103T-W12-3` + ` `;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"// jsonData is a json representation of csvString"},{"lineNumber":21,"author":{"gitId":"-"},"content":"export const jsonData \u003d {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" roles: {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" students: {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" junwei96: \u0027true\u0027,"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u0027003-samuel\u0027: \u0027true\u0027,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" damithc: \u0027true\u0027,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" ronaklakhotia: \u0027true\u0027,"},{"lineNumber":28,"author":{"gitId":"-"},"content":" ptvrajsk: \u0027true\u0027"},{"lineNumber":29,"author":{"gitId":"-"},"content":" },"},{"lineNumber":30,"author":{"gitId":"-"},"content":" tutors: { \u0027anubh-v\u0027: \u0027true\u0027, \u0027jj-lim\u0027: \u0027true\u0027, q: \u0027true\u0027 },"},{"lineNumber":31,"author":{"gitId":"-"},"content":" admins: { damithc: \u0027true\u0027, geshuming: \u0027true\u0027 }"},{"lineNumber":32,"author":{"gitId":"-"},"content":" },"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u0027team-structure\u0027: {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u0027CS2103T-W12-3\u0027: {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" junwei96: \u0027JunWei96\u0027,"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u0027003-samuel\u0027: \u0027003-samuel\u0027,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" damithc: \u0027damithc\u0027,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" ptvrajsk: \u0027ptvrajsk\u0027"},{"lineNumber":39,"author":{"gitId":"-"},"content":" },"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u0027CS2103T-W12-4\u0027: { ronaklakhotia: \u0027RonakLakhotia\u0027 }"},{"lineNumber":41,"author":{"gitId":"-"},"content":" },"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u0027students-allocation\u0027: {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" junwei96: { teamId: \u0027CS2103T-W12-3\u0027 },"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u0027003-samuel\u0027: { teamId: \u0027CS2103T-W12-3\u0027 },"},{"lineNumber":45,"author":{"gitId":"-"},"content":" damithc: { teamId: \u0027CS2103T-W12-3\u0027 },"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ronaklakhotia: { teamId: \u0027CS2103T-W12-4\u0027 },"},{"lineNumber":47,"author":{"gitId":"-"},"content":" ptvrajsk: { teamId: \u0027CS2103T-W12-3\u0027 }"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u0027tutors-allocation\u0027: {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u0027anubh-v\u0027: { \u0027CS2103T-W12-3\u0027: \u0027true\u0027 },"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u0027jj-lim\u0027: { \u0027CS2103T-W12-3\u0027: \u0027true\u0027, \u0027CS2103T-W12-4\u0027: \u0027true\u0027 },"},{"lineNumber":52,"author":{"gitId":"-"},"content":" q: { \u0027CS2103T-W12-4\u0027: \u0027true\u0027 }"},{"lineNumber":53,"author":{"gitId":"-"},"content":" },"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u0027admins-allocation\u0027: { damithc: {}, geshuming: {} }"},{"lineNumber":55,"author":{"gitId":"-"},"content":"};"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":"export const USER_JUNWEI \u003d {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" loginId: \u0027JunWei96\u0027,"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" role: UserRole.Student"},{"lineNumber":60,"author":{"gitId":"-"},"content":"};"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"export const USER_ANUBHAV \u003d {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" loginId: \u0027anubh-v\u0027,"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" role: UserRole.Student"},{"lineNumber":65,"author":{"gitId":"-"},"content":"};"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":"export const USER_Q \u003d {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" loginId: \u0027q\u0027,"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" role: UserRole.Tutor"},{"lineNumber":70,"author":{"gitId":"-"},"content":"};"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":"export const USER_SHUMING \u003d {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" loginId: \u0027geshuming\u0027,"},{"lineNumber":74,"author":{"gitId":"-"},"content":" role: UserRole.Admin,"},{"lineNumber":75,"author":{"gitId":"-"},"content":" allocatedTeams: []"},{"lineNumber":76,"author":{"gitId":"-"},"content":"};"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"export const USER_WITH_TWO_ROLES \u003d {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" loginId: \u0027damithc\u0027,"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" role: UserRole.Admin"},{"lineNumber":81,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"NereusWB922":4,"-":77}},{"path":"tests/constants/error.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"MadLamprey"},"content":"import { HttpErrorResponse } from \u0027@angular/common/http\u0027;"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":"import { RequestError } from \u0027@octokit/request-error\u0027;"},{"lineNumber":3,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":4,"author":{"gitId":"MadLamprey"},"content":"export const STANDARD_ERROR \u003d new Error(\u0027This is a normal error\u0027);"},{"lineNumber":5,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":"export const ERROR_WITH_NO_MESSAGE \u003d new Error();"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_304_ERROR \u003d new HttpErrorResponse({ status: 304 });"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_422_ERROR \u003d new HttpErrorResponse({ status: 422 });"},{"lineNumber":11,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":12,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_500_ERROR \u003d new HttpErrorResponse({ status: 500 });"},{"lineNumber":13,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":14,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_400_ERROR \u003d new HttpErrorResponse({ status: 400 });"},{"lineNumber":15,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":16,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_401_ERROR \u003d new HttpErrorResponse({ status: 401 });"},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_404_ERROR \u003d new HttpErrorResponse({ status: 404 });"},{"lineNumber":19,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":20,"author":{"gitId":"MadLamprey"},"content":"export const HTTP_UNKNOWN_ERROR \u003d new HttpErrorResponse({ status: 999 });"},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":22,"author":{"gitId":"MadLamprey"},"content":"export const OCTOKIT_REQUEST_ERROR \u003d new RequestError(\u0027This is an octokit request error\u0027, 400, {"},{"lineNumber":23,"author":{"gitId":"MadLamprey"},"content":" request: { method: \u0027GET\u0027, url: \u0027\u0027, headers: {} }"},{"lineNumber":24,"author":{"gitId":"MadLamprey"},"content":"});"}],"authorContributionMap":{"MadLamprey":24}},{"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":"NereusWB922"},"content":"import { USER_ANUBHAV } from \u0027./data.constants\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { EMPTY_TEAM_RESPONSE } 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":"NereusWB922"},"content":" login: USER_ANUBHAV.loginId"},{"lineNumber":34,"author":{"gitId":"-"},"content":"};"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"export const MILESTONE_ONE \u003d {"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" number: \u00271\u0027,"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" title: \u0027Milestone 1\u0027,"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" state: \u0027Open\u0027"},{"lineNumber":40,"author":{"gitId":"-"},"content":"};"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_EMPTY_DESCRIPTION \u003d new GithubIssue({"},{"lineNumber":43,"author":{"gitId":"-"},"content":" id: \u0027574085971\u0027,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" number: 92,"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":46,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" created_at: \u00272020-03-02T16:19:02Z\u0027,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":49,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":51,"author":{"gitId":"-"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":52,"author":{"gitId":"-"},"content":" updated_at: \u00272020-03-13T13:37:32Z\u0027,"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/92\u0027,"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":"});"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":"export const CLOSED_ISSUE_WITH_EMPTY_DESCRIPTION \u003d new GithubIssue({"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" id: \u0027574085971\u0027,"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" number: 92,"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" assignees: [],"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" body: \u0027\u0027,"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272020-03-02T16:19:02Z\u0027,"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" state: IssueState.Closed,"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" stateReason: IssueStateReason.Completed,"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272020-03-13T13:37:32Z\u0027,"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u00272020-03-22T15:37:32Z\u0027,"},{"lineNumber":74,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/92\u0027,"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"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":" body: \u0027\u0027,"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272020-09-02T16:19:02Z\u0027,"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" state: IssueState.Open,"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272020-09-03T13:37:32Z\u0027,"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\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":" milestone: MILESTONE_ONE,"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":"});"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":"export const ISSUE_UPDATED_LATER \u003d new GithubIssue({"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" id: \u0027000000002\u0027,"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" number: 2,"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" assignees: [],"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" body: \u0027\u0027,"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272020-10-02T16:19:02Z\u0027,"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" state: IssueState.Open,"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272020-10-22T13:37:32Z\u0027,"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/94\u0027,"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":120,"author":{"gitId":"-"},"content":"});"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_EMPTY_DESCRIPTION_LOW_SEVERITY \u003d new GithubIssue({"},{"lineNumber":123,"author":{"gitId":"-"},"content":" id: \u0027384830567\u0027,"},{"lineNumber":124,"author":{"gitId":"-"},"content":" number: 130,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":126,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" created_at: \u00272020-03-02T16:19:02Z\u0027,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FEATURE_FLAW, GITHUB_LABEL_LOW_SEVERITY],"},{"lineNumber":129,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":130,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":131,"author":{"gitId":"-"},"content":" title: \u0027App is sometimes slow\u0027,"},{"lineNumber":132,"author":{"gitId":"-"},"content":" updated_at: \u00272020-03-13T13:37:32Z\u0027,"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":134,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/130\u0027,"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":140,"author":{"gitId":"-"},"content":"});"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_EMPTY_DESCRIPTION_HIGH_SEVERITY \u003d new GithubIssue({"},{"lineNumber":143,"author":{"gitId":"-"},"content":" id: \u0027573957398\u0027,"},{"lineNumber":144,"author":{"gitId":"-"},"content":" number: 32,"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":146,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":147,"author":{"gitId":"-"},"content":" created_at: \u00272010-03-12T19:12:02Z\u0027,"},{"lineNumber":148,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_DOCUMENTATION_BUG, GITHUB_LABEL_HIGH_SEVERITY],"},{"lineNumber":149,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":150,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":151,"author":{"gitId":"-"},"content":" title: \u0027Too many typos\u0027,"},{"lineNumber":152,"author":{"gitId":"-"},"content":" updated_at: \u00272012-03-12T19:12:02Z\u0027,"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":154,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/130\u0027,"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":160,"author":{"gitId":"-"},"content":"});"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":"export const ISSUE_WITHOUT_MILESTONE \u003d new GithubIssue({"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" id: \u0027573957398\u0027,"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" number: 32,"},{"lineNumber":165,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":166,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272010-03-12T19:12:02Z\u0027,"},{"lineNumber":168,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_DOCUMENTATION_BUG, GITHUB_LABEL_HIGH_SEVERITY],"},{"lineNumber":169,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":170,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":171,"author":{"gitId":"NereusWB922"},"content":" title: \u0027Too many typos\u0027,"},{"lineNumber":172,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272012-03-12T19:12:02Z\u0027,"},{"lineNumber":173,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":174,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/130\u0027,"},{"lineNumber":175,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":176,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":177,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":178,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":179,"author":{"gitId":"-"},"content":"});"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_ASSIGNEES \u003d new GithubIssue({"},{"lineNumber":182,"author":{"gitId":"-"},"content":" id: \u0027551732011\u0027,"},{"lineNumber":183,"author":{"gitId":"-"},"content":" number: 91,"},{"lineNumber":184,"author":{"gitId":"NereusWB922"},"content":" assignees: [USER_ANUBHAV_DETAILS],"},{"lineNumber":185,"author":{"gitId":"-"},"content":" body: \u0027Screen freezes every few minutes\u0027,"},{"lineNumber":186,"author":{"gitId":"-"},"content":" created_at: \u00272020-01-18T07:01:45Z\u0027,"},{"lineNumber":187,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":188,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":189,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":190,"author":{"gitId":"-"},"content":" title: \u0027Screen freezes\u0027,"},{"lineNumber":191,"author":{"gitId":"-"},"content":" updated_at: \u00272020-03-02T12:50:02Z\u0027,"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":" closed_at: \u0027\u0027,"},{"lineNumber":193,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/91\u0027,"},{"lineNumber":194,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":" milestone: MILESTONE_ONE,"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":" comments: [EMPTY_TEAM_RESPONSE],"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":" issueOrPr: \u0027Issue\u0027,"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" isDraft: false"},{"lineNumber":199,"author":{"gitId":"-"},"content":"});"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"export const generateIssueWithRandomData: () \u003d\u003e GithubIssue \u003d () \u003d\u003e {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" const created_and_updated_date: string \u003d randomISODate();"},{"lineNumber":203,"author":{"gitId":"-"},"content":" const issueNumber: number \u003d randomIssueNumber();"},{"lineNumber":204,"author":{"gitId":"-"},"content":" const severityLabels: GithubLabel[] \u003d [GITHUB_LABEL_LOW_SEVERITY, GITHUB_LABEL_MEDIUM_SEVERITY, GITHUB_LABEL_HIGH_SEVERITY];"},{"lineNumber":205,"author":{"gitId":"-"},"content":" const typeLabels: GithubLabel[] \u003d [GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_FEATURE_FLAW, GITHUB_LABEL_DOCUMENTATION_BUG];"},{"lineNumber":206,"author":{"gitId":"-"},"content":" return new GithubIssue({"},{"lineNumber":207,"author":{"gitId":"-"},"content":" id: randomId(),"},{"lineNumber":208,"author":{"gitId":"-"},"content":" number: issueNumber,"},{"lineNumber":209,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":210,"author":{"gitId":"-"},"content":" comments: [],"},{"lineNumber":211,"author":{"gitId":"-"},"content":" body: `Issue No.: ${issueNumber}\\nSample Content.`,"},{"lineNumber":212,"author":{"gitId":"-"},"content":" created_at: created_and_updated_date,"},{"lineNumber":213,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, typeLabels[issueNumber % 3], severityLabels[issueNumber % 3]],"},{"lineNumber":214,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":215,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":216,"author":{"gitId":"-"},"content":" title: `Random Issue: ${issueNumber}`,"},{"lineNumber":217,"author":{"gitId":"-"},"content":" updated_at: created_and_updated_date,"},{"lineNumber":218,"author":{"gitId":"-"},"content":" url: `https://api.github.com/repos/CATcher-org/pe-results/issues/${issueNumber}`,"},{"lineNumber":219,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS"},{"lineNumber":220,"author":{"gitId":"-"},"content":" });"},{"lineNumber":221,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"NereusWB922":99,"-":122}},{"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/label.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { SimpleLabel } from \u0027../../src/app/core/models/label.model\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"// Label name constants"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_VERY_LOW \u003d \u0027veryLow\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_LOW \u003d \u0027low\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_MEDIUM \u003d \u0027medium\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_HIGH \u003d \u0027high\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"// Label category constants"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"export const CATEGORY_SEVERITY \u003d \u0027severity\u0027;"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"// Label name constants"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"export const LABEL_NAME_SEVERITY_VERY_LOW \u003d CATEGORY_SEVERITY + \u0027.\u0027 + SEVERITY_VERY_LOW;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"export const LABEL_NAME_SEVERITY_LOW \u003d CATEGORY_SEVERITY + \u0027.\u0027 + SEVERITY_LOW;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"export const LABEL_NAME_SEVERITY_MEDIUM \u003d CATEGORY_SEVERITY + \u0027.\u0027 + SEVERITY_MEDIUM;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"export const LABEL_NAME_SEVERITY_HIGH \u003d CATEGORY_SEVERITY + \u0027.\u0027 + SEVERITY_HIGH;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"// Label definition constants"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"export const DEFINITION_SEVERITY_VERY_LOW \u003d"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cp\u003eA flaw that is \u003cmark\u003epurely cosmetic\u003c/mark\u003e and \u003cmark\u003edoes not affect usage\u003c/mark\u003e. For example, \u0027 +"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cul\u003e\u0027 +"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003etypo issues\u003c/li\u003e\u0027 +"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003espacing issues\u003c/li\u003e\u0027 +"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003elayout issues\u003c/li\u003e\u0027 +"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003ecolor issues\u003c/li\u003e\u0027 +"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cli\u003efont issues\u003c/li\u003e\u0027 +"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003c/ul\u003e\u0027 +"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" \"in the docs or the UI that doesn\u0027t affect usage.\u003c/p\u003e\";"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"export const DEFINITION_SEVERITY_LOW \u003d"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cp\u003eA flaw that is unlikely to affect normal operations of the product. \u0027 +"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" \u0027Appears only in very rare situations and causes a minor inconvenience only.\u003c/p\u003e\u0027;"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"export const DEFINITION_SEVERITY_MEDIUM \u003d"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cp\u003eA flaw that causes occasional inconvenience to some users but they can \u0027 + \u0027continue to use the product.\u003c/p\u003e\u0027;"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":"export const DEFINITION_SEVERITY_HIGH \u003d"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" \u0027\u003cp\u003eA flaw that affects most users and causes major problems for users.\u0027 + \u0027i.e., makes the product almost unusable for most users.\u003c/p\u003e\u0027;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"// Label color constants"},{"lineNumber":38,"author":{"gitId":"-"},"content":"export const COLOR_BLACK \u003d \u0027000000\u0027;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"export const COLOR_WHITE \u003d \u0027ffffff\u0027;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"export const COLOR_SEVERITY_VERY_LOW \u003d \u0027ffe0e0\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"export const COLOR_SEVERITY_LOW \u003d \u0027ffcccc\u0027;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"export const COLOR_SEVERITY_MEDIUM \u003d \u0027ff9999\u0027;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"export const COLOR_SEVERITY_HIGH \u003d \u0027ff6666\u0027;"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"// CSS style constants"},{"lineNumber":46,"author":{"gitId":"-"},"content":"export const DARK_BG_LIGHT_TEXT \u003d {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u0027background-color\u0027: `#${COLOR_BLACK}`,"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" color: `#${COLOR_WHITE}`"},{"lineNumber":49,"author":{"gitId":"-"},"content":"};"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"export const LIGHT_BG_DARK_TEXT \u003d {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u0027background-color\u0027: `#${COLOR_WHITE}`,"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" color: `#${COLOR_BLACK}`"},{"lineNumber":54,"author":{"gitId":"-"},"content":"};"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_LABELS \u003d ["},{"lineNumber":57,"author":{"gitId":"-"},"content":" {"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" name: LABEL_NAME_SEVERITY_VERY_LOW,"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" color: COLOR_SEVERITY_VERY_LOW,"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" definition: DEFINITION_SEVERITY_VERY_LOW"},{"lineNumber":61,"author":{"gitId":"-"},"content":" },"},{"lineNumber":62,"author":{"gitId":"-"},"content":" {"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" name: LABEL_NAME_SEVERITY_LOW,"},{"lineNumber":64,"author":{"gitId":"-"},"content":" color: COLOR_SEVERITY_LOW,"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" definition: DEFINITION_SEVERITY_LOW"},{"lineNumber":66,"author":{"gitId":"-"},"content":" },"},{"lineNumber":67,"author":{"gitId":"-"},"content":" {"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" name: LABEL_NAME_SEVERITY_MEDIUM,"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" color: COLOR_SEVERITY_MEDIUM,"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" definition: DEFINITION_SEVERITY_MEDIUM"},{"lineNumber":71,"author":{"gitId":"-"},"content":" },"},{"lineNumber":72,"author":{"gitId":"-"},"content":" {"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" name: LABEL_NAME_SEVERITY_HIGH,"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" color: COLOR_SEVERITY_HIGH,"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" definition: DEFINITION_SEVERITY_HIGH"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":"];"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":"export const SEVERITY_SIMPLE_LABELS: SimpleLabel[] \u003d SEVERITY_LABELS.map((label) \u003d\u003e ({"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" name: label.name,"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" color: label.color"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":"}));"}],"authorContributionMap":{"NereusWB922":49,"-":33}},{"path":"tests/constants/session.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Repo } from \u0027../../src/app/core/models/repo.model\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { SessionData, SessionRepo } from \u0027../../src/app/core/models/session.model\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../../src/app/core/models/view.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":"NereusWB922"},"content":"export const CATCHER_REPO: Repo \u003d Repo.of(\u0027CATcher-org/CATcher\u0027);"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"const ISSUES_VIEWER_SESSION_REPO: SessionRepo \u003d {"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" view: View.issuesViewer,"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" repos: [WATCHER_REPO]"},{"lineNumber":11,"author":{"gitId":"-"},"content":"};"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"const ACTIVITY_DASHBOARD_SESSION_REPO: SessionRepo \u003d {"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" view: View.activityDashboard,"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" repos: [WATCHER_REPO]"},{"lineNumber":16,"author":{"gitId":"-"},"content":"};"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"export const VALID_SESSION_DATA: SessionData \u003d {"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" sessionRepo: [ISSUES_VIEWER_SESSION_REPO, ACTIVITY_DASHBOARD_SESSION_REPO]"},{"lineNumber":20,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"NereusWB922":13,"-":7}},{"path":"tests/model/issue.model.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import * as moment from \u0027moment\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../src/app/core/models/issue.model\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { Milestone } from \u0027../../src/app/core/models/milestone.model\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { USER_ANUBHAV } from \u0027../constants/data.constants\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import {"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" CLOSED_ISSUE_WITH_EMPTY_DESCRIPTION,"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" ISSUE_WITHOUT_MILESTONE,"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" ISSUE_WITH_ASSIGNEES,"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" ISSUE_WITH_EMPTY_DESCRIPTION,"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" MILESTONE_ONE"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"} from \u0027../constants/githubissue.constants\u0027;"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import {"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_FUNCTIONALITY_BUG,"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_MEDIUM_SEVERITY,"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_TEAM_LABEL,"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_TUTORIAL_LABEL"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"} from \u0027../constants/githublabel.constants\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"describe(\u0027Issue model class\u0027, () \u003d\u003e {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" describe(\u0027.createPhaseBugReportIssue(githubIssue)\u0027, () \u003d\u003e {"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should correctly create a issue that has an empty description\u0027, async () \u003d\u003e {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" const issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION);"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" expect(issue.globalId).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.id);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" expect(issue.id).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.number);"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" expect(issue.created_at).toEqual(moment(ISSUE_WITH_EMPTY_DESCRIPTION.created_at).format(\u0027lll\u0027));"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" expect(issue.title).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.title);"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" expect(issue.description).toEqual(\u0027No details provided by bug reporter.\u0027);"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" expect(issue.updated_at).toEqual(moment(ISSUE_WITH_EMPTY_DESCRIPTION.updated_at).format(\u0027lll\u0027));"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" expect(issue.closed_at).toEqual(\u0027Invalid date\u0027);"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" expect(issue.milestone).toEqual(new Milestone(MILESTONE_ONE));"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" expect(issue.state).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.state);"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" expect(issue.stateReason).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.stateReason);"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" expect(issue.issueOrPr).toEqual(\u0027Issue\u0027);"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" expect(issue.author).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.user.login);"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" expect(issue.isDraft).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.isDraft);"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" expect(issue.assignees).toEqual([]);"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" expect(issue.labels).toEqual(["},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_TEAM_LABEL.name,"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_TUTORIAL_LABEL.name,"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_FUNCTIONALITY_BUG.name,"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" GITHUB_LABEL_MEDIUM_SEVERITY.name"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" ]);"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" expect(issue.githubLabels).toEqual(ISSUE_WITH_EMPTY_DESCRIPTION.labels);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" });"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set close date correctly for closed issue\u0027, () \u003d\u003e {"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" const issue \u003d Issue.createPhaseBugReportingIssue(CLOSED_ISSUE_WITH_EMPTY_DESCRIPTION);"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" expect(issue.closed_at).toEqual(moment(CLOSED_ISSUE_WITH_EMPTY_DESCRIPTION.closed_at).format(\u0027lll\u0027));"},{"lineNumber":51,"author":{"gitId":"-"},"content":" });"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set milestone to default milestone for issue without milestone\u0027, () \u003d\u003e {"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" const issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITHOUT_MILESTONE);"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":56,"author":{"gitId":"MadLamprey"},"content":" expect(issue.milestone).toEqual(Milestone.IssueWithoutMilestone);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" });"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set assignees correctly for issue with assignees\u0027, () \u003d\u003e {"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" const issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_ASSIGNEES);"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" expect(issue.assignees).toEqual([USER_ANUBHAV.loginId]);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" });"},{"lineNumber":64,"author":{"gitId":"-"},"content":" });"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027.updateDescription(description)\u0027, () \u003d\u003e {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" it(\u0027correctly clean strings obtained from users\u0027, () \u003d\u003e {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" const noDetailsFromBugReporter \u003d \u0027No details provided by bug reporter.\u0027;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" expect(Issue.updateDescription(\u0027\u0027)).toBe(noDetailsFromBugReporter);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" expect(Issue.updateDescription(null)).toBe(noDetailsFromBugReporter);"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" const typicalDescription \u003d \u0027The app crashes after parsing config files.\u0027;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" expect(Issue.updateDescription(typicalDescription)).toBe(typicalDescription + \u0027\\n\\n\u0027);"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" const inputWithSpecialChars \u003d \u0027$%^!@\u0026-_test\u0027;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" expect(Issue.updateDescription(inputWithSpecialChars)).toBe(inputWithSpecialChars + \u0027\\n\\n\u0027);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" });"},{"lineNumber":78,"author":{"gitId":"-"},"content":" });"},{"lineNumber":79,"author":{"gitId":"-"},"content":"});"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"describe(\u0027Issue\u0027, () \u003d\u003e {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" const dummyIssue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION);"},{"lineNumber":83,"author":{"gitId":"-"},"content":" const otherDummyIssue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_ASSIGNEES);"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" const noReportedDescriptionString \u003d \u0027No details provided by bug reporter.\\n\u0027;"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" it(\u0027.createGithubIssueDescription() forms the correct GitHub Issue description for the issue\u0027, () \u003d\u003e {"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" expect(dummyIssue.createGithubIssueDescription()).toEqual(noReportedDescriptionString);"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" expect(otherDummyIssue.createGithubIssueDescription()).toEqual(`${otherDummyIssue.description}\\n`);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" });"},{"lineNumber":92,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":57,"MadLamprey":1,"-":34}},{"path":"tests/services/error-handling.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"MadLamprey"},"content":"import { ErrorHandlingService } from \u0027../../src/app/core/services/error-handling.service\u0027;"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":"import { FormErrorComponent } from \u0027../../src/app/shared/error-toasters/form-error/form-error.component\u0027;"},{"lineNumber":3,"author":{"gitId":"MadLamprey"},"content":"import { GeneralMessageErrorComponent } from \u0027../../src/app/shared/error-toasters/general-message-error/general-message-error.component\u0027;"},{"lineNumber":4,"author":{"gitId":"MadLamprey"},"content":"import {"},{"lineNumber":5,"author":{"gitId":"MadLamprey"},"content":" ERROR_WITH_NO_MESSAGE,"},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":" HTTP_304_ERROR,"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":" HTTP_400_ERROR,"},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":" HTTP_401_ERROR,"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":" HTTP_404_ERROR,"},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":" HTTP_422_ERROR,"},{"lineNumber":11,"author":{"gitId":"MadLamprey"},"content":" HTTP_500_ERROR,"},{"lineNumber":12,"author":{"gitId":"MadLamprey"},"content":" HTTP_UNKNOWN_ERROR,"},{"lineNumber":13,"author":{"gitId":"MadLamprey"},"content":" OCTOKIT_REQUEST_ERROR,"},{"lineNumber":14,"author":{"gitId":"MadLamprey"},"content":" STANDARD_ERROR"},{"lineNumber":15,"author":{"gitId":"MadLamprey"},"content":"} from \u0027../constants/error.constants\u0027;"},{"lineNumber":16,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":"let errorHandlingService: ErrorHandlingService;"},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":"let mockLoggingService;"},{"lineNumber":19,"author":{"gitId":"MadLamprey"},"content":"let mockSnackBar;"},{"lineNumber":20,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":"describe(\u0027ErrorHandlingService\u0027, () \u003d\u003e {"},{"lineNumber":22,"author":{"gitId":"MadLamprey"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":23,"author":{"gitId":"MadLamprey"},"content":" mockLoggingService \u003d jasmine.createSpyObj(\u0027LoggingService\u0027, [\u0027error\u0027, \u0027debug\u0027]);"},{"lineNumber":24,"author":{"gitId":"MadLamprey"},"content":" mockSnackBar \u003d jasmine.createSpyObj(\u0027MatSnackBar\u0027, [\u0027openFromComponent\u0027]);"},{"lineNumber":25,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService \u003d new ErrorHandlingService(mockSnackBar, mockLoggingService);"},{"lineNumber":26,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":27,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":28,"author":{"gitId":"MadLamprey"},"content":" describe(\u0027ErrorHandlingService: handleError()\u0027, () \u003d\u003e {"},{"lineNumber":29,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should log errors when handling errors\u0027, () \u003d\u003e {"},{"lineNumber":30,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(STANDARD_ERROR);"},{"lineNumber":31,"author":{"gitId":"MadLamprey"},"content":" expect(mockLoggingService.error).toHaveBeenCalledWith(STANDARD_ERROR);"},{"lineNumber":32,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":33,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":34,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should use the GeneralMessageErrorComponent when handling Errors\u0027, () \u003d\u003e {"},{"lineNumber":35,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(STANDARD_ERROR);"},{"lineNumber":36,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, {"},{"lineNumber":37,"author":{"gitId":"MadLamprey"},"content":" data: { message: STANDARD_ERROR.message }"},{"lineNumber":38,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":39,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":40,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":41,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should stringify Errors if there is no message before displaying\u0027, () \u003d\u003e {"},{"lineNumber":42,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(ERROR_WITH_NO_MESSAGE);"},{"lineNumber":43,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, {"},{"lineNumber":44,"author":{"gitId":"MadLamprey"},"content":" data: { message: JSON.stringify(ERROR_WITH_NO_MESSAGE) }"},{"lineNumber":45,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":46,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":47,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":48,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should not open the snackbar when handling http status 304 errors\u0027, () \u003d\u003e {"},{"lineNumber":49,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_304_ERROR);"},{"lineNumber":50,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).not.toHaveBeenCalled();"},{"lineNumber":51,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":52,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":53,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should use the FormErrorComponent when handling http status 422 errors\u0027, () \u003d\u003e {"},{"lineNumber":54,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_422_ERROR);"},{"lineNumber":55,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(FormErrorComponent, { data: HTTP_422_ERROR });"},{"lineNumber":56,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":57,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":58,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should use the GeneralMessageErrorComponent when handling other http errors\u0027, () \u003d\u003e {"},{"lineNumber":59,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_500_ERROR);"},{"lineNumber":60,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_500_ERROR });"},{"lineNumber":61,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_400_ERROR);"},{"lineNumber":62,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_400_ERROR });"},{"lineNumber":63,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_401_ERROR);"},{"lineNumber":64,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_401_ERROR });"},{"lineNumber":65,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_404_ERROR);"},{"lineNumber":66,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_404_ERROR });"},{"lineNumber":67,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(HTTP_UNKNOWN_ERROR);"},{"lineNumber":68,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: HTTP_UNKNOWN_ERROR });"},{"lineNumber":69,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledTimes(5);"},{"lineNumber":70,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":71,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":72,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should treat octokit request errors as http errors\u0027, () \u003d\u003e {"},{"lineNumber":73,"author":{"gitId":"MadLamprey"},"content":" errorHandlingService.handleError(OCTOKIT_REQUEST_ERROR);"},{"lineNumber":74,"author":{"gitId":"MadLamprey"},"content":" expect(mockSnackBar.openFromComponent).toHaveBeenCalledWith(GeneralMessageErrorComponent, { data: OCTOKIT_REQUEST_ERROR });"},{"lineNumber":75,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":76,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":77,"author":{"gitId":"MadLamprey"},"content":"});"}],"authorContributionMap":{"MadLamprey":77}},{"path":"tests/services/label.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { of } from \u0027rxjs\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Label } from \u0027../../src/app/core/models/label.model\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { GithubService } from \u0027../../src/app/core/services/github.service\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { LabelService } from \u0027../../src/app/core/services/label.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import * as LabelConstant from \u0027../constants/label.constants\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"let labelService: LabelService;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"let labelList: Label[];"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"let githubServiceSpy: jasmine.SpyObj\u003cGithubService\u003e;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"describe(\u0027LabelService: fetchLabels()\u0027, () \u003d\u003e {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy \u003d jasmine.createSpyObj(\u0027GithubService\u0027, [\u0027fetchAllLabels\u0027]);"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" labelService \u003d new LabelService(githubServiceSpy);"},{"lineNumber":15,"author":{"gitId":"-"},"content":" });"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should fetch labels successfully\u0027, () \u003d\u003e {"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" const mockLabels \u003d LabelConstant.SEVERITY_LABELS;"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" const parsedLabels \u003d labelService.parseLabelData(mockLabels);"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.fetchAllLabels.and.returnValue(of(mockLabels));"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" labelService.fetchLabels().subscribe((response) \u003d\u003e {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" expect(response).toEqual(mockLabels);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" expect(labelService.labels).toEqual(parsedLabels);"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" expect(labelService.simpleLabels).toEqual(parsedLabels);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" });"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" expect(githubServiceSpy.fetchAllLabels).toHaveBeenCalled();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" });"},{"lineNumber":31,"author":{"gitId":"-"},"content":"});"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"describe(\u0027LabelService: parseLabelData()\u0027, () \u003d\u003e {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" beforeAll(() \u003d\u003e {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" labelService \u003d new LabelService(null);"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" labelList \u003d labelService.parseLabelData(LabelConstant.SEVERITY_LABELS);"},{"lineNumber":37,"author":{"gitId":"-"},"content":" });"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" afterAll(() \u003d\u003e {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" labelService \u003d null;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" });"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should be severity very low label\u0027, () \u003d\u003e {"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[0].name).toBe(LabelConstant.LABEL_NAME_SEVERITY_VERY_LOW);"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[0].color).toBe(LabelConstant.COLOR_SEVERITY_VERY_LOW);"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[0].definition).toBe(LabelConstant.DEFINITION_SEVERITY_VERY_LOW);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" });"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should be severity low label\u0027, () \u003d\u003e {"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[1].name).toBe(LabelConstant.LABEL_NAME_SEVERITY_LOW);"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[1].color).toBe(LabelConstant.COLOR_SEVERITY_LOW);"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[1].definition).toBe(LabelConstant.DEFINITION_SEVERITY_LOW);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" });"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should be severity medium label\u0027, () \u003d\u003e {"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[2].name).toBe(LabelConstant.LABEL_NAME_SEVERITY_MEDIUM);"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[2].color).toBe(LabelConstant.COLOR_SEVERITY_MEDIUM);"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[2].definition).toBe(LabelConstant.DEFINITION_SEVERITY_MEDIUM);"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should be severity high label\u0027, () \u003d\u003e {"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[3].name).toBe(LabelConstant.LABEL_NAME_SEVERITY_HIGH);"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[3].color).toBe(LabelConstant.COLOR_SEVERITY_HIGH);"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" expect(labelList[3].definition).toBe(LabelConstant.DEFINITION_SEVERITY_HIGH);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" });"},{"lineNumber":66,"author":{"gitId":"-"},"content":"});"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"describe(\u0027LabelService: isDarkColor()\u0027, () \u003d\u003e {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" labelService \u003d new LabelService(null);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" });"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" afterEach(() \u003d\u003e {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" labelService \u003d null;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" });"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" it(\u0027should be true for dark color\u0027, () \u003d\u003e {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" expect(labelService.isDarkColor(LabelConstant.COLOR_BLACK)).toBeTruthy();"},{"lineNumber":79,"author":{"gitId":"-"},"content":" });"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" it(\u0027should be false for light color\u0027, () \u003d\u003e {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" expect(labelService.isDarkColor(LabelConstant.COLOR_WHITE)).toBeFalsy();"},{"lineNumber":83,"author":{"gitId":"-"},"content":" });"},{"lineNumber":84,"author":{"gitId":"-"},"content":"});"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":"describe(\u0027LabelService: setLabelStyle()\u0027, () \u003d\u003e {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" labelService \u003d new LabelService(null);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" });"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" afterEach(() \u003d\u003e {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" labelService \u003d null;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" });"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" it(\u0027should be dark color background with light color text\u0027, () \u003d\u003e {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" expect(labelService.setLabelStyle(LabelConstant.COLOR_BLACK)).toEqual(LabelConstant.DARK_BG_LIGHT_TEXT);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" });"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" it(\u0027should be light color background with dark color text\u0027, () \u003d\u003e {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" expect(labelService.setLabelStyle(LabelConstant.COLOR_WHITE)).toEqual(LabelConstant.LIGHT_BG_DARK_TEXT);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" });"},{"lineNumber":102,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":34,"-":68}},{"path":"tests/services/milestone.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"MadLamprey"},"content":"import { of } from \u0027rxjs\u0027;"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":"import { Milestone } from \u0027../../src/app/core/models/milestone.model\u0027;"},{"lineNumber":3,"author":{"gitId":"MadLamprey"},"content":"import { GithubService } from \u0027../../src/app/core/services/github.service\u0027;"},{"lineNumber":4,"author":{"gitId":"MadLamprey"},"content":"import { MilestoneService } from \u0027../../src/app/core/services/milestone.service\u0027;"},{"lineNumber":5,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":"let milestoneService: MilestoneService;"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":"let githubServiceSpy: jasmine.SpyObj\u003cGithubService\u003e;"},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":"describe(\u0027MilestoneService\u0027, () \u003d\u003e {"},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":11,"author":{"gitId":"MadLamprey"},"content":" githubServiceSpy \u003d jasmine.createSpyObj(\u0027GithubService\u0027, [\u0027fetchAllMilestones\u0027]);"},{"lineNumber":12,"author":{"gitId":"MadLamprey"},"content":" milestoneService \u003d new MilestoneService(githubServiceSpy);"},{"lineNumber":13,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":14,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":15,"author":{"gitId":"MadLamprey"},"content":" describe(\u0027MilestoneService: fetchMilestones()\u0027, () \u003d\u003e {"},{"lineNumber":16,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should fetch all milestones\u0027, (done) \u003d\u003e {"},{"lineNumber":17,"author":{"gitId":"MadLamprey"},"content":" const mockMilestones \u003d [{ title: \u0027Milestone 1\u0027 }, { title: \u0027Milestone 2\u0027 }];"},{"lineNumber":18,"author":{"gitId":"MadLamprey"},"content":" githubServiceSpy.fetchAllMilestones.and.returnValue(of(mockMilestones));"},{"lineNumber":19,"author":{"gitId":"MadLamprey"},"content":" milestoneService.fetchMilestones().subscribe((response) \u003d\u003e {"},{"lineNumber":20,"author":{"gitId":"MadLamprey"},"content":" expect(githubServiceSpy.fetchAllMilestones).toHaveBeenCalled();"},{"lineNumber":21,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.milestones.length).toBe(2);"},{"lineNumber":22,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.milestones[0].title).toBe(\u0027Milestone 1\u0027);"},{"lineNumber":23,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.hasNoMilestones).toBeFalse();"},{"lineNumber":24,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":25,"author":{"gitId":"MadLamprey"},"content":" done();"},{"lineNumber":26,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":27,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":28,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":29,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should handle no milestones\u0027, (done) \u003d\u003e {"},{"lineNumber":30,"author":{"gitId":"MadLamprey"},"content":" githubServiceSpy.fetchAllMilestones.and.returnValue(of([]));"},{"lineNumber":31,"author":{"gitId":"MadLamprey"},"content":" milestoneService.fetchMilestones().subscribe((response) \u003d\u003e {"},{"lineNumber":32,"author":{"gitId":"MadLamprey"},"content":" expect(githubServiceSpy.fetchAllMilestones).toHaveBeenCalled();"},{"lineNumber":33,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.milestones.length).toBe(0);"},{"lineNumber":34,"author":{"gitId":"MadLamprey"},"content":" expect(milestoneService.hasNoMilestones).toBeTrue();"},{"lineNumber":35,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":36,"author":{"gitId":"MadLamprey"},"content":" done();"},{"lineNumber":37,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":38,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":39,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":40,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":41,"author":{"gitId":"MadLamprey"},"content":" describe(\u0027MilestoneService: parseMilestoneData()\u0027, () \u003d\u003e {"},{"lineNumber":42,"author":{"gitId":"MadLamprey"},"content":" it(\u0027should parse milestone data correctly\u0027, () \u003d\u003e {"},{"lineNumber":43,"author":{"gitId":"MadLamprey"},"content":" const mockMilestones \u003d [{ title: \u0027Milestone 2\u0027 }, { title: \u0027Milestone 1\u0027 }];"},{"lineNumber":44,"author":{"gitId":"MadLamprey"},"content":" const parsedMilestones \u003d milestoneService.parseMilestoneData(mockMilestones);"},{"lineNumber":45,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":46,"author":{"gitId":"MadLamprey"},"content":" for (const milestone of parsedMilestones) {"},{"lineNumber":47,"author":{"gitId":"MadLamprey"},"content":" expect(milestone).toBeInstanceOf(Milestone);"},{"lineNumber":48,"author":{"gitId":"MadLamprey"},"content":" }"},{"lineNumber":49,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":50,"author":{"gitId":"MadLamprey"},"content":" expect(parsedMilestones.length).toBe(2);"},{"lineNumber":51,"author":{"gitId":"MadLamprey"},"content":" expect(parsedMilestones[0].title).toBe(\u0027Milestone 1\u0027);"},{"lineNumber":52,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":53,"author":{"gitId":"MadLamprey"},"content":" });"},{"lineNumber":54,"author":{"gitId":"MadLamprey"},"content":"});"}],"authorContributionMap":{"MadLamprey":54}},{"path":"tests/services/user.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { GithubService } from \u0027../../src/app/core/services/github.service\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { LoggingService } from \u0027../../src/app/core/services/logging.service\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { UserService } from \u0027../../src/app/core/services/user.service\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { USER_JUNWEI } from \u0027../constants/data.constants\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"let githubServiceSpy: jasmine.SpyObj\u003cGithubService\u003e;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"let loggingServiceSpy: jasmine.SpyObj\u003cLoggingService\u003e;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"let userService: UserService;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"describe(\u0027UserService\u0027, () \u003d\u003e {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" beforeAll(() \u003d\u003e {"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy \u003d jasmine.createSpyObj(\u0027GithubService\u0027, [\u0027fetchAuthenticatedUser\u0027]);"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" loggingServiceSpy \u003d jasmine.createSpyObj(\u0027LoggingService\u0027, [\u0027info\u0027]);"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" userService \u003d new UserService(githubServiceSpy, loggingServiceSpy);"},{"lineNumber":15,"author":{"gitId":"-"},"content":" });"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027createUserModel(loginId)\u0027, () \u003d\u003e {"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should create a user correctly\u0027, async () \u003d\u003e {"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" const createdUser \u003d await userService.createUserModel(USER_JUNWEI.loginId).toPromise();"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" expect(createdUser).toEqual(USER_JUNWEI);"},{"lineNumber":21,"author":{"gitId":"-"},"content":" });"},{"lineNumber":22,"author":{"gitId":"-"},"content":" });"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027reset()\u0027, () \u003d\u003e {"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set current user as undefined\u0027, async () \u003d\u003e {"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" await userService.createUserModel(USER_JUNWEI.loginId).toPromise();"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" expect(userService.currentUser).toEqual(USER_JUNWEI);"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" userService.reset();"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" expect(loggingServiceSpy.info).toHaveBeenCalledWith(\u0027UserService: Clearing current user\u0027);"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" expect(userService.currentUser).toEqual(undefined);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" });"},{"lineNumber":34,"author":{"gitId":"-"},"content":" });"},{"lineNumber":35,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":20,"-":15}},{"path":"tests/services/view.service.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { ActivatedRoute, Router } from \u0027@angular/router\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { of } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { STORAGE_KEYS } from \u0027../../src/app/core/constants/storage-keys.constants\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import { Repo } from \u0027../../src/app/core/models/repo.model\u0027;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import { View } from \u0027../../src/app/core/models/view.model\u0027;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import { ErrorMessageService } from \u0027../../src/app/core/services/error-message.service\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { GithubService } from \u0027../../src/app/core/services/github.service\u0027;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import { LoggingService } from \u0027../../src/app/core/services/logging.service\u0027;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import { RepoUrlCacheService } from \u0027../../src/app/core/services/repo-url-cache.service\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { ViewService } from \u0027../../src/app/core/services/view.service\u0027;"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"import { CATCHER_REPO, WATCHER_REPO } from \u0027../constants/session.constants\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"let viewService: ViewService;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"let githubServiceSpy: jasmine.SpyObj\u003cGithubService\u003e;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"let repoUrlCacheServiceSpy: jasmine.SpyObj\u003cRepoUrlCacheService\u003e;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"let loggingServiceSpy: jasmine.SpyObj\u003cLoggingService\u003e;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"let routerSpy: jasmine.SpyObj\u003cRouter\u003e;"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"let activatedRouteSpy: jasmine.SpyObj\u003cActivatedRoute\u003e;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"describe(\u0027ViewService\u0027, () \u003d\u003e {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy \u003d jasmine.createSpyObj(\u0027GithubService\u0027, [\u0027isRepositoryPresent\u0027, \u0027storeViewDetails\u0027]);"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" activatedRouteSpy \u003d jasmine.createSpyObj(\u0027ActivatedRoute\u0027, [\u0027snapshot\u0027]);"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" routerSpy \u003d jasmine.createSpyObj(\u0027Router\u0027, [\u0027navigate\u0027]);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" repoUrlCacheServiceSpy \u003d jasmine.createSpyObj(\u0027RepoUrlCacheService\u0027, [\u0027cache\u0027]);"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" loggingServiceSpy \u003d jasmine.createSpyObj(\u0027LoggingService\u0027, [\u0027info\u0027]);"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" viewService \u003d new ViewService(githubServiceSpy, repoUrlCacheServiceSpy, loggingServiceSpy, activatedRouteSpy, routerSpy);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" });"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027setRepository(Repo, Repo[])\u0027, () \u003d\u003e {"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set the current repositories and update session data\u0027, () \u003d\u003e {"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" const repos: Repo[] \u003d [CATCHER_REPO];"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" viewService.setRepository(WATCHER_REPO, repos);"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentRepo).toEqual(WATCHER_REPO);"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.otherRepos).toEqual(repos);"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" const currentSessionRepo \u003d viewService.sessionData.sessionRepo.find((x) \u003d\u003e x.view \u003d\u003d\u003d viewService.currentView);"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" expect(currentSessionRepo?.repos).toEqual([WATCHER_REPO, CATCHER_REPO]);"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should store view details via githubService and update localStorage\u0027, () \u003d\u003e {"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" const localStorageSetItem \u003d spyOn(localStorage, \u0027setItem\u0027);"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" viewService.setRepository(WATCHER_REPO);"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" expect(githubServiceSpy.storeViewDetails).toHaveBeenCalledWith(WATCHER_REPO.owner, WATCHER_REPO.name);"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" expect(localStorageSetItem).toHaveBeenCalledWith(\u0027sessionData\u0027, JSON.stringify(viewService.sessionData));"},{"lineNumber":50,"author":{"gitId":"-"},"content":" });"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should navigate to the new repository\u0027, () \u003d\u003e {"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" viewService.setRepository(WATCHER_REPO);"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" expect(routerSpy.navigate).toHaveBeenCalledWith([\u0027issuesViewer\u0027], {"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" queryParams: { repo: WATCHER_REPO.toString() },"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":60,"author":{"gitId":"-"},"content":" });"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027changeRepositoryIfValid(Repo)\u0027, () \u003d\u003e {"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set isChangingRepo to true at the start and false at the end\u0027, async () \u003d\u003e {"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(true));"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" const isChangingRepoNextSpy \u003d spyOn(viewService.isChangingRepo, \u0027next\u0027);"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" spyOn(viewService, \u0027setRepository\u0027);"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" await viewService.changeRepositoryIfValid(WATCHER_REPO);"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" expect(isChangingRepoNextSpy.calls.first().args[0]).toBe(true);"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" expect(isChangingRepoNextSpy.calls.mostRecent().args[0]).toBe(false);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" });"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error if repository is not valid\u0027, async () \u003d\u003e {"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(false));"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" await expectAsync(viewService.changeRepositoryIfValid(WATCHER_REPO)).toBeRejectedWithError("},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" ErrorMessageService.repositoryNotPresentMessage()"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" );"},{"lineNumber":82,"author":{"gitId":"-"},"content":" });"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set and navigate to new repo if repo is valid\u0027, async () \u003d\u003e {"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(true));"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" const repoChanged$Spy \u003d spyOn(viewService.repoChanged$, \u0027next\u0027);"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" await viewService.changeRepositoryIfValid(WATCHER_REPO);"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" expect(loggingServiceSpy.info).toHaveBeenCalledWith(`ViewService: Changing current repository to \u0027${WATCHER_REPO}\u0027`);"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentRepo).toEqual(WATCHER_REPO);"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" expect(routerSpy.navigate).toHaveBeenCalledWith([\u0027issuesViewer\u0027], {"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" queryParams: { repo: WATCHER_REPO.toString() },"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" expect(repoUrlCacheServiceSpy.cache).toHaveBeenCalledWith(WATCHER_REPO.toString());"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" expect(repoChanged$Spy).toHaveBeenCalledWith(WATCHER_REPO);"},{"lineNumber":99,"author":{"gitId":"-"},"content":" });"},{"lineNumber":100,"author":{"gitId":"-"},"content":" });"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027initializeCurrentRepository()\u0027, () \u003d\u003e {"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" const org \u003d WATCHER_REPO.owner;"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" const repoName \u003d WATCHER_REPO.name;"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" const localStorageGetItemSpy \u003d spyOn(window.localStorage, \u0027getItem\u0027);"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" localStorageGetItemSpy.withArgs(STORAGE_KEYS.ORG).and.returnValue(org);"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" localStorageGetItemSpy.withArgs(STORAGE_KEYS.DATA_REPO).and.returnValue(repoName);"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set and navigate to new repo if repo is valid\u0027, async () \u003d\u003e {"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(true));"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" const repoSetSourceNext \u003d spyOn(viewService.repoSetSource, \u0027next\u0027);"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" await viewService.initializeCurrentRepository();"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" expect(loggingServiceSpy.info).toHaveBeenCalledWith(`ViewService: Repo is ${WATCHER_REPO}`);"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentRepo).toEqual(WATCHER_REPO);"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" expect(routerSpy.navigate).toHaveBeenCalledWith([\u0027issuesViewer\u0027], {"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" queryParams: { repo: WATCHER_REPO.toString() },"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":" queryParamsHandling: \u0027merge\u0027"},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" expect(repoSetSourceNext).toHaveBeenCalledWith(true);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" });"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error if repository is invalid\u0027, async () \u003d\u003e {"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" githubServiceSpy.isRepositoryPresent.and.returnValue(of(false));"},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" await expectAsync(viewService.initializeCurrentRepository()).toBeRejectedWithError(ErrorMessageService.repositoryNotPresentMessage());"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027changeView(View)\u0027, () \u003d\u003e {"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set current view\u0027, () \u003d\u003e {"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" viewService.setRepository(WATCHER_REPO);"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentView).toEqual(View.issuesViewer);"},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" viewService.changeView(View.activityDashboard);"},{"lineNumber":142,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentView).toEqual(View.activityDashboard);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" });"},{"lineNumber":145,"author":{"gitId":"-"},"content":" });"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" describe(\u0027.reset()\u0027, () \u003d\u003e {"},{"lineNumber":148,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should reset the currentView of the ViewService\u0027, () \u003d\u003e {"},{"lineNumber":149,"author":{"gitId":"NereusWB922"},"content":" viewService.currentView \u003d View.activityDashboard;"},{"lineNumber":150,"author":{"gitId":"NereusWB922"},"content":" viewService.reset();"},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":" expect(viewService.currentView).toBe(View.issuesViewer);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" });"},{"lineNumber":153,"author":{"gitId":"-"},"content":" });"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" describe(\u0027setupFromUrl(url)\u0027, () \u003d\u003e {"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should set items in local storage if url is valid\u0027, async () \u003d\u003e {"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":" const validUrl \u003d `/issuesViewer?repo\u003d${WATCHER_REPO.owner}%2F${WATCHER_REPO.name}`;"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" const localStorageSetItemSpy \u003d spyOn(window.localStorage, \u0027setItem\u0027);"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":" await viewService.setupFromUrl(validUrl).toPromise();"},{"lineNumber":161,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":" expect(localStorageSetItemSpy).toHaveBeenCalledWith(STORAGE_KEYS.ORG, WATCHER_REPO.owner);"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" expect(localStorageSetItemSpy).toHaveBeenCalledWith(STORAGE_KEYS.DATA_REPO, WATCHER_REPO.name);"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":165,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error for url without repo paramater\u0027, (done) \u003d\u003e {"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" const urlWithoutRepo \u003d \u0027/issuesViewer\u0027;"},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":169,"author":{"gitId":"NereusWB922"},"content":" viewService.setupFromUrl(urlWithoutRepo).subscribe({"},{"lineNumber":170,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e {"},{"lineNumber":171,"author":{"gitId":"NereusWB922"},"content":" expect(err).toEqual(new Error(ErrorMessageService.invalidUrlMessage()));"},{"lineNumber":172,"author":{"gitId":"NereusWB922"},"content":" done();"},{"lineNumber":173,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":174,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":175,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":176,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":177,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error for empty url\u0027, (done) \u003d\u003e {"},{"lineNumber":178,"author":{"gitId":"NereusWB922"},"content":" const emptyUrl \u003d \u0027\u0027;"},{"lineNumber":179,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":180,"author":{"gitId":"NereusWB922"},"content":" viewService.setupFromUrl(emptyUrl).subscribe({"},{"lineNumber":181,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e {"},{"lineNumber":182,"author":{"gitId":"NereusWB922"},"content":" expect(err).toEqual(new Error(ErrorMessageService.invalidUrlMessage()));"},{"lineNumber":183,"author":{"gitId":"NereusWB922"},"content":" done();"},{"lineNumber":184,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":185,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":186,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":187,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":188,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error for url with invalid repo format\u0027, (done) \u003d\u003e {"},{"lineNumber":189,"author":{"gitId":"NereusWB922"},"content":" const urlWithInvalidRepoFormat \u003d \u0027/issuesViewer?repo\u003dInvalidRepo\u0027;"},{"lineNumber":190,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":191,"author":{"gitId":"NereusWB922"},"content":" viewService.setupFromUrl(urlWithInvalidRepoFormat).subscribe({"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e {"},{"lineNumber":193,"author":{"gitId":"NereusWB922"},"content":" expect(err).toEqual(new Error(ErrorMessageService.repositoryNotPresentMessage()));"},{"lineNumber":194,"author":{"gitId":"NereusWB922"},"content":" done();"},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":199,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":175,"-":24}}] diff --git a/CATcher-org_WATcher_main/commits.json b/CATcher-org_WATcher_main/commits.json index e24b0d5..e0d0c76 100644 --- a/CATcher-org_WATcher_main/commits.json +++ b/CATcher-org_WATcher_main/commits.json @@ -1 +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}}}]},{"date":"2024-02-13","commitResults":[{"hash":"64a68624b77c88cee70cd870e2966c1c27b89eb8","isMergeCommit":false,"messageTitle":"Add column of hidden users (#235)","messageBody":"After #192, assignees of a repo without any issues or PRs\r\nare hidden. Now, add the column to display such users\r\nwith 0 PRs and issues.\r\n\r\nCo-authored-by: Gabriel Goh \u003c77230723+gycgabriel@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"css":{"insertions":82,"deletions":0},"html":{"insertions":24,"deletions":0},"ts":{"insertions":44,"deletions":2}}}]},{"date":"2024-02-19","commitResults":[{"hash":"d6dadf4a49a6fc19e2eaa99bb37c7fe89f458a81","isMergeCommit":false,"messageTitle":"Refactor Label model (#254)","messageBody":"Previously, label full names are separated into label name\r\nand label category. However, this is not necessary for WATcher.\r\n\r\nLet\u0027s remove the separation so that filters only make use\r\nof the full name.","fileTypesAndContributionMap":{"html":{"insertions":6,"deletions":14},"ts":{"insertions":6,"deletions":14}}}]},{"date":"2024-02-26","commitResults":[{"hash":"3db1c8aa33942114acfd55af87da3d7c8d751390","isMergeCommit":false,"messageTitle":"Add shareable repo-specific URL (#255)","messageBody":"Previously, URLs are fixed upon repo change, hence URLs are not shareable.\r\n\r\nLet\u0027s make the current repo visible in the URL, so that it shareable.\r\n\r\nFurthermore, login is automated when there is such next route to be redirected to.","fileTypesAndContributionMap":{"ts":{"insertions":163,"deletions":9}}}]},{"date":"2024-03-21","commitResults":[{"hash":"6fb348ea31d05320af1ecc2e7c83dcfecf95e2f7","isMergeCommit":false,"messageTitle":"Hide redundant column pagination (#309)","messageBody":"Column pagination arrows cause unnecessary clogs\r\nif they are disabled.\r\n\r\nWe hide arrows on columns that only has one page.","fileTypesAndContributionMap":{"css":{"insertions":12,"deletions":0},"html":{"insertions":6,"deletions":1},"ts":{"insertions":8,"deletions":2}}}]},{"date":"2024-03-22","commitResults":[{"hash":"e3d4a3464879414ab4724dde0f9b4cc24aebf7df","isMergeCommit":false,"messageTitle":"Three-state labels (#282)","messageBody":"Previously, each label only has 2 states, either selected or\r\nnot selected. However, with such design,\r\nthe feature of hiding labels can be confused\r\nwith hiding issues/PRs with the label.\r\n\r\nWe implement the three-state label filters,\r\nso that each label can also be used to hide\r\nissues/PRs with the label.","fileTypesAndContributionMap":{"css":{"insertions":20,"deletions":5},"html":{"insertions":22,"deletions":26},"ts":{"insertions":48,"deletions":36}}}]},{"date":"2024-03-25","commitResults":[{"hash":"a65bb59578c4157be05f3c38fd712e411e43a155","isMergeCommit":false,"messageTitle":"Status filter checkboxes (#310)","messageBody":"We implement checkboxes for status, so that\r\nmultiple types of PRs/issues can be viewed concurrently.","fileTypesAndContributionMap":{"html":{"insertions":6,"deletions":5},"ts":{"insertions":39,"deletions":39}}}]},{"date":"2024-03-29","commitResults":[{"hash":"c3418d8d50071cde7ea19040df0ec411a0f49786","isMergeCommit":false,"messageTitle":"Add preset views (#320)","messageBody":"Currently, there are a lot of options of filters,\r\nbut there are no suggested useful preset views.\r\n\r\nWe add preset views for users to choose from,\r\nand via a button on the header.","fileTypesAndContributionMap":{"html":{"insertions":22,"deletions":2},"ts":{"insertions":156,"deletions":23}}}]},{"date":"2024-03-30","commitResults":[{"hash":"3ce551efd72e12ec9b43698d84e293892d1e4964","isMergeCommit":false,"messageTitle":"Fix for no milestone case (#326)","messageBody":"When there are no milestones in the repo,\r\nthe issue viewer shows nothing.\r\n\r\nChange is made so that if there is no milestone\r\nin the milestone service, do not apply the milestone filter.","fileTypesAndContributionMap":{"ts":{"insertions":9,"deletions":4}}}]},{"date":"2024-04-01","commitResults":[{"hash":"e7fb0f992c82b05cd5418a1e747351b4a8af254a","isMergeCommit":false,"messageTitle":"Fix preset view selection appearance (#338)","messageBody":"For the preset view selection, brackets are removed\r\nand left margin is added to increase visibility.","fileTypesAndContributionMap":{"html":{"insertions":13,"deletions":15}}}]},{"date":"2024-04-03","commitResults":[{"hash":"d356fbe192b4b4761a512afbb9ba7409cc4b1362","isMergeCommit":false,"messageTitle":"Hide column issue count (#346)","messageBody":"We hide the issue column count when there is only one page,\r\nto make space for the issues.","fileTypesAndContributionMap":{"css":{"insertions":12,"deletions":9}}}]}],"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}}}]},{"date":"2024-02-14","commitResults":[{"hash":"5031ee2e33b49d0275892849703b81a1fc028a3d","isMergeCommit":false,"messageTitle":"Remove unused models in WATcher","messageBody":"There are a few of unused models ported from CATcher.\r\n\r\nUnnecessary models contributes to code clutter and hurts understandability\r\nof code base.\r\n\r\nLet\u0027s remove these unused models from WATcher to increase code cleanliness.","fileTypesAndContributionMap":{"ts":{"insertions":0,"deletions":40}}},{"hash":"09ef51d1e360350d0d73a4a66063df59f805d3e2","isMergeCommit":false,"messageTitle":"Remove unused session-fix-confirmation component in WATcher","messageBody":"This is a component only used in CATcher.\r\n\r\nUnnecessary components contributes to code clutter and hurts understandability\r\nof code base.\r\n\r\nLet\u0027s remove this unused component from WATcher to increase code cleanliness.","fileTypesAndContributionMap":{"css":{"insertions":0,"deletions":0},"html":{"insertions":0,"deletions":9},"ts":{"insertions":1,"deletions":27}}}]},{"date":"2024-02-22","commitResults":[{"hash":"7dbc28230cf4e6d2aa3d95448a0e247b03a5fcee","isMergeCommit":false,"messageTitle":"Refactor certain filters into its own service (#259)","messageBody":"Filters are observed, subscribed and emitted in many different \r\ncomponents.\r\n\r\nThis makes the code base hard to understand\r\nand adapt for filtering in future components.\r\n\r\nLet\u0027s refactor the filters into its own centralised service.","fileTypesAndContributionMap":{"html":{"insertions":3,"deletions":3},"ts":{"insertions":73,"deletions":35}}}]},{"date":"2024-02-28","commitResults":[{"hash":"ad94663e1ac524b83b022a622544181209881c1f","isMergeCommit":false,"messageTitle":"Refactor sorting (#261)","messageBody":"MatSort is passed by reference into IssueDataTables,\r\nlifted up from filter-bar component. Changes to \r\nMatSort are detected and handled in IssueDataTables.\r\n\r\nMatSort reference in IssueDataTables performs the \r\nresponsibility of a dropdown filter outside of the \r\nfilters service.\r\nThis violates good programming practices.\r\n\r\nLet\u0027s refactor the sort filter into the filters service.","fileTypesAndContributionMap":{"html":{"insertions":8,"deletions":5},"ts":{"insertions":19,"deletions":40}}},{"hash":"ac150e0c2c69d668481bd6594339618a59ebde7c","isMergeCommit":false,"messageTitle":"Refactor milestone filters (#264)","messageBody":"","fileTypesAndContributionMap":{"html":{"insertions":2,"deletions":2}}}]},{"date":"2024-03-04","commitResults":[{"hash":"06260a9f2baada4cff35e536143ce6adae1d2c42","isMergeCommit":false,"messageTitle":"Refactor title filter (#265)","messageBody":"Title filter is handled outside of filters service\r\n\r\nThis violates the responsibility of the filters service\r\n\r\nLet\u0027s refactor the search filter to use the filters service","fileTypesAndContributionMap":{"html":{"insertions":7,"deletions":7},"ts":{"insertions":61,"deletions":83}}}]},{"date":"2024-03-12","commitResults":[{"hash":"f6a8f236d9d0b0dde9f0f97db3997e983b2b85a1","isMergeCommit":false,"messageTitle":"Refactor milestones to save by name (#289)","messageBody":"We store milestones by number.\r\n\r\nThis works when filters are confined to one repo, but\r\ndoesn\u0027t make sense when saving filters across repos.\r\n\r\nLet\u0027s refactor the milestones to save by title instead\r\nof number","fileTypesAndContributionMap":{"html":{"insertions":1,"deletions":1},"ts":{"insertions":5,"deletions":7}}}]},{"date":"2024-03-20","commitResults":[{"hash":"8817ca32edd30d76509d0f3134c3d47b90a42d92","isMergeCommit":false,"messageTitle":"Keep filters when switching repos (#281)","messageBody":"No way to keep filters when changing repos.\r\n\r\nAn option to keep the common filters will be useful for anyone\r\nmanaging multiple repositories without the hassle of reapplying \r\nthe same filters.\r\n\r\nLet\u0027s add a checkbox to the change repo dialog allowing \r\nusers to keep their filters.","fileTypesAndContributionMap":{"css":{"insertions":5,"deletions":0},"html":{"insertions":11,"deletions":3},"ts":{"insertions":89,"deletions":41}}}]},{"date":"2024-03-27","commitResults":[{"hash":"b226977751a2300b470958e5fa248edcbeb4922a","isMergeCommit":false,"messageTitle":"Keep milestones when switching repo (#311)","messageBody":"Milestones are not saved even when filters are kept.\r\n\r\nThis is inconsistent with the meaning of keeping filters.\r\n\r\nLet\u0027s implement keeping milestones across repos.","fileTypesAndContributionMap":{"ts":{"insertions":32,"deletions":1}}}]},{"date":"2024-03-30","commitResults":[{"hash":"fa69625226c3b95b08251b51d254c606d6ed888c","isMergeCommit":false,"messageTitle":"Add filters to url (#314)","messageBody":"Filters cannot be shared to among users.\r\n\r\nUsers might want to share their current view\r\nto others, consisting of their current filters.\r\n\r\nLet\u0027s pull and store filters in the URL to allow\r\nsharing of filter combinations.","fileTypesAndContributionMap":{"ts":{"insertions":71,"deletions":11}}}]},{"date":"2024-04-01","commitResults":[{"hash":"44fd3ca4c69dfd50ee8d825c5c318255530b3963","isMergeCommit":false,"messageTitle":"Fix default preset view (#334)","messageBody":"The default view is custom instead of currently active.\r\n\r\nThe default view should show the most relevant information\r\nto users. This should be the currently active preset view.\r\n\r\nLet\u0027s change the default view to be currently active.","fileTypesAndContributionMap":{"ts":{"insertions":6,"deletions":0}}}]},{"date":"2024-04-03","commitResults":[{"hash":"99d2c72e7b7ce4ccffc190e918fb0639ffe020f9","isMergeCommit":false,"messageTitle":"Remove quotation marks from url (#345)","messageBody":"Quotation marks and null parameters are present for\r\nfilters saved in url.\r\n\r\nQuotation marks are unnecessary and empty filters\r\ncan be removed from the URL in order to make it\r\nmore readable and editable by advanced users.\r\n\r\nLet\u0027s remove null params and remove quotation marks\r\nfrom the url.","fileTypesAndContributionMap":{"ts":{"insertions":65,"deletions":14}}}]}],"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}}}]},{"date":"2024-02-22","commitResults":[{"hash":"ba39c0647b5d9064fc9ccd0c4714d2eb03c9e862","isMergeCommit":false,"messageTitle":"Remove test cases for permissions service","messageBody":"The permission service has been removed. \r\n\r\nLet\u0027s remove the test cases for the permission service.","fileTypesAndContributionMap":{"ts":{"insertions":0,"deletions":74}}}]},{"date":"2024-02-26","commitResults":[{"hash":"70c883ae370d033a6ceb5edb4e42aa39e8df2b60","isMergeCommit":false,"messageTitle":"Remove constants for DataFile and Team model","messageBody":"DataFile and Team model are removed.\r\n\r\nLet\u0027s remove the constants of these models.","fileTypesAndContributionMap":{"ts":{"insertions":4,"deletions":44}}},{"hash":"2c36a3846be3987bf96ec5e482e05b96a69a1f57","isMergeCommit":false,"messageTitle":"Refactor test cases for label service","messageBody":"The test cases for the label service are outdated. \r\n\r\nLet\u0027s refactor the test cases for the label service and\r\nadd test case for fetchLabels method.","fileTypesAndContributionMap":{"ts":{"insertions":74,"deletions":241}}}]},{"date":"2024-03-02","commitResults":[{"hash":"121795c9f92a508d69c0d3490f92e161c5017eee","isMergeCommit":false,"messageTitle":"Refactor test cases for issue model","messageBody":"The GithubIssue constants and the test cases\r\nfor the issue model are outdated. \r\n\r\nLet\u0027s refactor the GithubIssue constants and the\r\ntest cases for the issue model.","fileTypesAndContributionMap":{"ts":{"insertions":133,"deletions":210}}},{"hash":"dfa05628791716d3341e4ac0f96699dca2f5362f","isMergeCommit":false,"messageTitle":"Refactor test cases for phase service","messageBody":"The test cases for the phase service are outdated. \r\n\r\nLet\u0027s refactor old test cases and add test cases for new methods.","fileTypesAndContributionMap":{"ts":{"insertions":126,"deletions":39}}}]},{"date":"2024-03-04","commitResults":[{"hash":"518ea791f4f838009c79aabed6db12d94d9ebce5","isMergeCommit":false,"messageTitle":"Fix zone testing import error (#269)","messageBody":"Npm run test will break if the import statement \r\nfor zone-testing is not at the top of test.ts file. \r\n\r\nLet\u0027s reorder the import statement and disable\r\ntslint rule for test.ts file.","fileTypesAndContributionMap":{"ts":{"insertions":4,"deletions":1}}},{"hash":"00f64fbecc6030c83f2fda114bb2a6a09e15dad2","isMergeCommit":false,"messageTitle":"Refactor test cases for issue sorter (#270)","messageBody":"The method in issue sorter has been updated.\r\n\r\nLet\u0027s refactor the test cases to match the changes.","fileTypesAndContributionMap":{"ts":{"insertions":11,"deletions":11}}},{"hash":"48b63155ba859ba7362b118740c4e40cb7785c7c","isMergeCommit":false,"messageTitle":"Refactor test cases for user service (#271)","messageBody":"The test cases for the user service are outdated. \r\n\r\nLet\u0027s refactor test cases for user service.","fileTypesAndContributionMap":{"ts":{"insertions":23,"deletions":50}}},{"hash":"8c36423a20ad868f665ef65e30d1c73cf1b2428a","isMergeCommit":false,"messageTitle":"Refactor test cases for label filter bar component (#274)","messageBody":"The test cases for the label filter bar component are outdated. \r\n\r\nLet\u0027s refactor test cases for label filter bar component","fileTypesAndContributionMap":{"ts":{"insertions":151,"deletions":60}}}]},{"date":"2024-03-08","commitResults":[{"hash":"f435ca142f7d92bcbe8651e8f4c437f13c833a50","isMergeCommit":false,"messageTitle":"Update test cases for phase service (#275)","messageBody":"Refactor and add test cases for phase service\r\n\r\nPhase service has been updated. \r\n\r\nLet\u0027s refactor and add test cases to match the changes.","fileTypesAndContributionMap":{"ts":{"insertions":71,"deletions":27}}}]},{"date":"2024-03-20","commitResults":[{"hash":"663dec3e90481c31c1411b2cd3f1829795c686f2","isMergeCommit":false,"messageTitle":"Refactor Phase Service and remove Phase (#291)","messageBody":"The concept of \"Phase\" is inherited from CATcher. Instead of \"Phase\", \r\nWATcher provides different \"Views\" of contributions in a repository.\r\n\r\nLet\u0027s replace \"Phase\" with \"View\".","fileTypesAndContributionMap":{"html":{"insertions":14,"deletions":17},"ts":{"insertions":189,"deletions":199}}}]},{"date":"2024-03-22","commitResults":[{"hash":"caadd668b7142b6efcd99080c87ac7855fc76b25","isMergeCommit":false,"messageTitle":"Setup grouping strategy and service (#308)","messageBody":"Implement GroupBy feature to allow users to group the issues/prs\r\nbased on different criteria such as milestone, status and etc.\r\n\r\nLet\u0027s set up the Grouping Strategy and Service.","fileTypesAndContributionMap":{"ts":{"insertions":259,"deletions":4}}}]},{"date":"2024-03-25","commitResults":[{"hash":"3420a738482dfb852ca23a69849b74c9c378be0e","isMergeCommit":false,"messageTitle":"Integrate Grouping Service (#313)","messageBody":"Implement GroupBy feature to allow users to group the issues/prs\r\nbased on different criteria such as milestone, status and etc.\r\n\r\nLet\u0027s integrate the grouping service in the components.","fileTypesAndContributionMap":{"css":{"insertions":2,"deletions":2},"html":{"insertions":79,"deletions":53},"ts":{"insertions":103,"deletions":58}}}]},{"date":"2024-03-29","commitResults":[{"hash":"cd4614f34a1d0707271d1782a97b3537ed32b1e5","isMergeCommit":false,"messageTitle":"Implement group by milestone (#316)","messageBody":"WATcher\u0027s default view displays issues and pull requests based solely on\r\ntheir assignees. Grouping issues and pull requests based on their\r\nassociated milestones may provide another useful view for the user.\r\n\r\nLet\u0027s implement the \"Group by Milestone\" feature.","fileTypesAndContributionMap":{"html":{"insertions":21,"deletions":0},"ts":{"insertions":61,"deletions":4}}},{"hash":"83dcdae8faa8c5ae4f8a4e73eb4ea419e88d251b","isMergeCommit":false,"messageTitle":"Include groupby params in url (#319)","messageBody":"With groupby parameters in the URL, users can easily share \r\nthe current grouping by using the URL.\r\n\r\nLet\u0027s implement initialization with URL parameters and \r\nthe ability to set groupby parameters.","fileTypesAndContributionMap":{"ts":{"insertions":93,"deletions":17}}},{"hash":"8ddcdcdb9759da81986d0d0bdb35b45b5ba39bdc","isMergeCommit":false,"messageTitle":"Reset GroupingContextService only if \"keep filter\" is selected. (#324)","messageBody":"GroupingContextService is being reset when the \"keep filter\" \r\noption is selected.\r\n\r\nLet\u0027s check if the \"keep filter\" option is selected before\r\nresetting the service.","fileTypesAndContributionMap":{"ts":{"insertions":3,"deletions":1}}},{"hash":"70bae914be0b1aae5a4ceb6a8fb1273c022797c7","isMergeCommit":false,"messageTitle":"Refactor MilestoneGroupingStrategy to match the changes in #315 (#323)","messageBody":"Special milestone groups are not added in the parseMilestoneData\r\nmethod.\r\n\r\nLet\u0027s add the special milestone groups to the result of the getGroups\r\nmethod.","fileTypesAndContributionMap":{"ts":{"insertions":4,"deletions":1}}},{"hash":"2eb2aba8980fb39dd9cfd9cd704873ed48aed0d4","isMergeCommit":false,"messageTitle":"Update repo on back and forward navigation (#322)","messageBody":"IssueViewer\u0027s repository is not updated when navigating back or forward\r\nin the URL history. This will lead to inconsistency between the URL\r\nparameters and the application state.\r\n\r\nLet\u0027s ensure that IssueViewer\u0027s repository is updated on back and forward\r\nnavigation.","fileTypesAndContributionMap":{"ts":{"insertions":18,"deletions":1}}}]},{"date":"2024-03-30","commitResults":[{"hash":"3f0aa1fac438fdc1ba505494a4b75ad1b364fa86","isMergeCommit":false,"messageTitle":"Enable npm run test in GitHub Action (#325)","messageBody":"Enabling automate testing in GitHub Actions with enhanced \r\ncode quality of the codebase.\r\n\r\nLet\u0027s enable automate testing.","fileTypesAndContributionMap":{"ts":{"insertions":8,"deletions":5}}}]},{"date":"2024-04-01","commitResults":[{"hash":"b603307a9e30e8bb74773c354fc41e1c36983df9","isMergeCommit":false,"messageTitle":"Show PRs without milestone in \"Currently Active\"","messageBody":"PRs without milestone requires urgent action from the user.\r\n\r\nLet\u0027s show it in the \"Currently Active\" preset view.","fileTypesAndContributionMap":{"ts":{"insertions":3,"deletions":3}}}]},{"date":"2024-04-03","commitResults":[{"hash":"775e59ce6371251c8ae2cb075f75ccb29ad8b6d2","isMergeCommit":false,"messageTitle":"Implement dropdown menu for repo change (#347)","messageBody":"Introduce a dropdown menu for repository selection,\r\nsimplifying the process of switching between repositories. \r\n\r\nThis enhancement offers users a quicker and more\r\nintuitive method to navigate to previously visited repositories.","fileTypesAndContributionMap":{"css":{"insertions":32,"deletions":0},"html":{"insertions":28,"deletions":2},"ts":{"insertions":15,"deletions":2}}}]}],"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}}}]},{"date":"2024-02-29","commitResults":[{"hash":"db460275c3952308858654140b7ccdbe93b33a12","isMergeCommit":false,"messageTitle":"Upgrade to Angular 11 (#252)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e\r\nCo-authored-by: Chee Hong \u003cc.h.wong2606@gmail.com\u003e","fileTypesAndContributionMap":{"ts":{"insertions":17,"deletions":13}}}]},{"date":"2024-03-12","commitResults":[{"hash":"7e68bbdaeceb5bdfcc8c09e0f3f7cbd9bd3000f4","isMergeCommit":false,"messageTitle":"Remove sorting by assignees in Issue Sorter (#286)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"ts":{"insertions":9,"deletions":24}}}]},{"date":"2024-03-21","commitResults":[{"hash":"63ed6a2329d9343bdf18afc39b44653809e3370a","isMergeCommit":false,"messageTitle":"Add tool tip for hidden users (#307)","messageBody":"Currently, there is no tool tip for the Hidden Users mat-card.\r\nIt is not immediately obvious what the column is referring to.\r\n\r\nLet\u0027s add a tool tip to make it more explanatory.\r\n\r\nCo-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"html":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-25","commitResults":[{"hash":"43ea689bd406857d7dae518ab089bf4d3029b564","isMergeCommit":false,"messageTitle":"Create tests for Error Handling service (#304)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"ts":{"insertions":101,"deletions":0}}},{"hash":"1fa6138cd5d66d33203fcab810011e9eaefab9c9","isMergeCommit":false,"messageTitle":"Create tests for Milestone service (#303)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"ts":{"insertions":55,"deletions":0}}}]},{"date":"2024-03-29","commitResults":[{"hash":"0867e1cbf2725df92870a321f91dd328af09e19c","isMergeCommit":false,"messageTitle":"Add sorting by Status (#318)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e\r\nCo-authored-by: Nguyen \u003c87511888+nknguyenhc@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"html":{"insertions":3,"deletions":0},"ts":{"insertions":23,"deletions":0}}},{"hash":"b1f3eed7d98e8fb6589e5bcde167f03d5942fe98","isMergeCommit":false,"messageTitle":"Split \u0027Without a milestone\u0027 option (#315)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e\r\nCo-authored-by: nknguyenhc \u003c87511888+nknguyenhc@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"html":{"insertions":2,"deletions":0},"ts":{"insertions":17,"deletions":14}}}]},{"date":"2024-04-03","commitResults":[{"hash":"d92079ba532ffc56283da245efe295f5edb4f203","isMergeCommit":false,"messageTitle":"Add icon for PRs without milestones (#337)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"html":{"insertions":8,"deletions":5},"ts":{"insertions":8,"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":123,"html":45,"ts":405},"Arif-Khalid":{"js":0,"css":5,"html":25,"ts":293},"NereusWB922":{"js":0,"css":163,"html":157,"ts":1425},"dishenggg":{"js":0,"css":0,"html":0,"ts":0},"MadLamprey":{"js":0,"css":0,"html":13,"ts":220},"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":990.60297,"Arif-Khalid":1638.1758,"NereusWB922":8478.256,"dishenggg":0.0,"MadLamprey":236.52007,"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"}} +{"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}}}]},{"date":"2024-02-13","commitResults":[{"hash":"64a68624b77c88cee70cd870e2966c1c27b89eb8","isMergeCommit":false,"messageTitle":"Add column of hidden users (#235)","messageBody":"After #192, assignees of a repo without any issues or PRs\r\nare hidden. Now, add the column to display such users\r\nwith 0 PRs and issues.\r\n\r\nCo-authored-by: Gabriel Goh \u003c77230723+gycgabriel@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"css":{"insertions":82,"deletions":0},"html":{"insertions":24,"deletions":0},"ts":{"insertions":44,"deletions":2}}}]},{"date":"2024-02-19","commitResults":[{"hash":"d6dadf4a49a6fc19e2eaa99bb37c7fe89f458a81","isMergeCommit":false,"messageTitle":"Refactor Label model (#254)","messageBody":"Previously, label full names are separated into label name\r\nand label category. However, this is not necessary for WATcher.\r\n\r\nLet\u0027s remove the separation so that filters only make use\r\nof the full name.","fileTypesAndContributionMap":{"html":{"insertions":6,"deletions":14},"ts":{"insertions":6,"deletions":14}}}]},{"date":"2024-02-26","commitResults":[{"hash":"3db1c8aa33942114acfd55af87da3d7c8d751390","isMergeCommit":false,"messageTitle":"Add shareable repo-specific URL (#255)","messageBody":"Previously, URLs are fixed upon repo change, hence URLs are not shareable.\r\n\r\nLet\u0027s make the current repo visible in the URL, so that it shareable.\r\n\r\nFurthermore, login is automated when there is such next route to be redirected to.","fileTypesAndContributionMap":{"ts":{"insertions":163,"deletions":9}}}]},{"date":"2024-03-21","commitResults":[{"hash":"6fb348ea31d05320af1ecc2e7c83dcfecf95e2f7","isMergeCommit":false,"messageTitle":"Hide redundant column pagination (#309)","messageBody":"Column pagination arrows cause unnecessary clogs\r\nif they are disabled.\r\n\r\nWe hide arrows on columns that only has one page.","fileTypesAndContributionMap":{"css":{"insertions":12,"deletions":0},"html":{"insertions":6,"deletions":1},"ts":{"insertions":8,"deletions":2}}}]},{"date":"2024-03-22","commitResults":[{"hash":"e3d4a3464879414ab4724dde0f9b4cc24aebf7df","isMergeCommit":false,"messageTitle":"Three-state labels (#282)","messageBody":"Previously, each label only has 2 states, either selected or\r\nnot selected. However, with such design,\r\nthe feature of hiding labels can be confused\r\nwith hiding issues/PRs with the label.\r\n\r\nWe implement the three-state label filters,\r\nso that each label can also be used to hide\r\nissues/PRs with the label.","fileTypesAndContributionMap":{"css":{"insertions":20,"deletions":5},"html":{"insertions":22,"deletions":26},"ts":{"insertions":48,"deletions":36}}}]},{"date":"2024-03-25","commitResults":[{"hash":"a65bb59578c4157be05f3c38fd712e411e43a155","isMergeCommit":false,"messageTitle":"Status filter checkboxes (#310)","messageBody":"We implement checkboxes for status, so that\r\nmultiple types of PRs/issues can be viewed concurrently.","fileTypesAndContributionMap":{"html":{"insertions":6,"deletions":5},"ts":{"insertions":39,"deletions":39}}}]},{"date":"2024-03-29","commitResults":[{"hash":"c3418d8d50071cde7ea19040df0ec411a0f49786","isMergeCommit":false,"messageTitle":"Add preset views (#320)","messageBody":"Currently, there are a lot of options of filters,\r\nbut there are no suggested useful preset views.\r\n\r\nWe add preset views for users to choose from,\r\nand via a button on the header.","fileTypesAndContributionMap":{"html":{"insertions":22,"deletions":2},"ts":{"insertions":156,"deletions":23}}}]},{"date":"2024-03-30","commitResults":[{"hash":"3ce551efd72e12ec9b43698d84e293892d1e4964","isMergeCommit":false,"messageTitle":"Fix for no milestone case (#326)","messageBody":"When there are no milestones in the repo,\r\nthe issue viewer shows nothing.\r\n\r\nChange is made so that if there is no milestone\r\nin the milestone service, do not apply the milestone filter.","fileTypesAndContributionMap":{"ts":{"insertions":9,"deletions":4}}}]},{"date":"2024-04-01","commitResults":[{"hash":"e7fb0f992c82b05cd5418a1e747351b4a8af254a","isMergeCommit":false,"messageTitle":"Fix preset view selection appearance (#338)","messageBody":"For the preset view selection, brackets are removed\r\nand left margin is added to increase visibility.","fileTypesAndContributionMap":{"html":{"insertions":13,"deletions":15}}}]},{"date":"2024-04-03","commitResults":[{"hash":"d356fbe192b4b4761a512afbb9ba7409cc4b1362","isMergeCommit":false,"messageTitle":"Hide column issue count (#346)","messageBody":"We hide the issue column count when there is only one page,\r\nto make space for the issues.","fileTypesAndContributionMap":{"css":{"insertions":12,"deletions":9}}}]}],"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}}}]},{"date":"2024-02-14","commitResults":[{"hash":"5031ee2e33b49d0275892849703b81a1fc028a3d","isMergeCommit":false,"messageTitle":"Remove unused models in WATcher","messageBody":"There are a few of unused models ported from CATcher.\r\n\r\nUnnecessary models contributes to code clutter and hurts understandability\r\nof code base.\r\n\r\nLet\u0027s remove these unused models from WATcher to increase code cleanliness.","fileTypesAndContributionMap":{"ts":{"insertions":0,"deletions":40}}},{"hash":"09ef51d1e360350d0d73a4a66063df59f805d3e2","isMergeCommit":false,"messageTitle":"Remove unused session-fix-confirmation component in WATcher","messageBody":"This is a component only used in CATcher.\r\n\r\nUnnecessary components contributes to code clutter and hurts understandability\r\nof code base.\r\n\r\nLet\u0027s remove this unused component from WATcher to increase code cleanliness.","fileTypesAndContributionMap":{"css":{"insertions":0,"deletions":0},"html":{"insertions":0,"deletions":9},"ts":{"insertions":1,"deletions":27}}}]},{"date":"2024-02-22","commitResults":[{"hash":"7dbc28230cf4e6d2aa3d95448a0e247b03a5fcee","isMergeCommit":false,"messageTitle":"Refactor certain filters into its own service (#259)","messageBody":"Filters are observed, subscribed and emitted in many different \r\ncomponents.\r\n\r\nThis makes the code base hard to understand\r\nand adapt for filtering in future components.\r\n\r\nLet\u0027s refactor the filters into its own centralised service.","fileTypesAndContributionMap":{"html":{"insertions":3,"deletions":3},"ts":{"insertions":73,"deletions":35}}}]},{"date":"2024-02-28","commitResults":[{"hash":"ad94663e1ac524b83b022a622544181209881c1f","isMergeCommit":false,"messageTitle":"Refactor sorting (#261)","messageBody":"MatSort is passed by reference into IssueDataTables,\r\nlifted up from filter-bar component. Changes to \r\nMatSort are detected and handled in IssueDataTables.\r\n\r\nMatSort reference in IssueDataTables performs the \r\nresponsibility of a dropdown filter outside of the \r\nfilters service.\r\nThis violates good programming practices.\r\n\r\nLet\u0027s refactor the sort filter into the filters service.","fileTypesAndContributionMap":{"html":{"insertions":8,"deletions":5},"ts":{"insertions":19,"deletions":40}}},{"hash":"ac150e0c2c69d668481bd6594339618a59ebde7c","isMergeCommit":false,"messageTitle":"Refactor milestone filters (#264)","messageBody":"","fileTypesAndContributionMap":{"html":{"insertions":2,"deletions":2}}}]},{"date":"2024-03-04","commitResults":[{"hash":"06260a9f2baada4cff35e536143ce6adae1d2c42","isMergeCommit":false,"messageTitle":"Refactor title filter (#265)","messageBody":"Title filter is handled outside of filters service\r\n\r\nThis violates the responsibility of the filters service\r\n\r\nLet\u0027s refactor the search filter to use the filters service","fileTypesAndContributionMap":{"html":{"insertions":7,"deletions":7},"ts":{"insertions":61,"deletions":83}}}]},{"date":"2024-03-12","commitResults":[{"hash":"f6a8f236d9d0b0dde9f0f97db3997e983b2b85a1","isMergeCommit":false,"messageTitle":"Refactor milestones to save by name (#289)","messageBody":"We store milestones by number.\r\n\r\nThis works when filters are confined to one repo, but\r\ndoesn\u0027t make sense when saving filters across repos.\r\n\r\nLet\u0027s refactor the milestones to save by title instead\r\nof number","fileTypesAndContributionMap":{"html":{"insertions":1,"deletions":1},"ts":{"insertions":5,"deletions":7}}}]},{"date":"2024-03-20","commitResults":[{"hash":"8817ca32edd30d76509d0f3134c3d47b90a42d92","isMergeCommit":false,"messageTitle":"Keep filters when switching repos (#281)","messageBody":"No way to keep filters when changing repos.\r\n\r\nAn option to keep the common filters will be useful for anyone\r\nmanaging multiple repositories without the hassle of reapplying \r\nthe same filters.\r\n\r\nLet\u0027s add a checkbox to the change repo dialog allowing \r\nusers to keep their filters.","fileTypesAndContributionMap":{"css":{"insertions":5,"deletions":0},"html":{"insertions":11,"deletions":3},"ts":{"insertions":89,"deletions":41}}}]},{"date":"2024-03-27","commitResults":[{"hash":"b226977751a2300b470958e5fa248edcbeb4922a","isMergeCommit":false,"messageTitle":"Keep milestones when switching repo (#311)","messageBody":"Milestones are not saved even when filters are kept.\r\n\r\nThis is inconsistent with the meaning of keeping filters.\r\n\r\nLet\u0027s implement keeping milestones across repos.","fileTypesAndContributionMap":{"ts":{"insertions":32,"deletions":1}}}]},{"date":"2024-03-30","commitResults":[{"hash":"fa69625226c3b95b08251b51d254c606d6ed888c","isMergeCommit":false,"messageTitle":"Add filters to url (#314)","messageBody":"Filters cannot be shared to among users.\r\n\r\nUsers might want to share their current view\r\nto others, consisting of their current filters.\r\n\r\nLet\u0027s pull and store filters in the URL to allow\r\nsharing of filter combinations.","fileTypesAndContributionMap":{"ts":{"insertions":71,"deletions":11}}}]},{"date":"2024-04-01","commitResults":[{"hash":"44fd3ca4c69dfd50ee8d825c5c318255530b3963","isMergeCommit":false,"messageTitle":"Fix default preset view (#334)","messageBody":"The default view is custom instead of currently active.\r\n\r\nThe default view should show the most relevant information\r\nto users. This should be the currently active preset view.\r\n\r\nLet\u0027s change the default view to be currently active.","fileTypesAndContributionMap":{"ts":{"insertions":6,"deletions":0}}}]},{"date":"2024-04-03","commitResults":[{"hash":"99d2c72e7b7ce4ccffc190e918fb0639ffe020f9","isMergeCommit":false,"messageTitle":"Remove quotation marks from url (#345)","messageBody":"Quotation marks and null parameters are present for\r\nfilters saved in url.\r\n\r\nQuotation marks are unnecessary and empty filters\r\ncan be removed from the URL in order to make it\r\nmore readable and editable by advanced users.\r\n\r\nLet\u0027s remove null params and remove quotation marks\r\nfrom the url.","fileTypesAndContributionMap":{"ts":{"insertions":65,"deletions":14}}}]},{"date":"2024-04-08","commitResults":[{"hash":"709afa760ec06204f463ce476aaefd008b8e8c0a","isMergeCommit":false,"messageTitle":"Show preset view only when repo is set (#355)","messageBody":"Preset view is shown before a repo is selected.\r\n\r\nThere is no reason to show the current preset\r\nview and might confuse users as to its purpose\r\nwhen no repo is selected.\r\n\r\nLet\u0027s hide the preset view until a repo is selected.","fileTypesAndContributionMap":{"html":{"insertions":2,"deletions":2}}}]}],"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}}}]},{"date":"2024-02-22","commitResults":[{"hash":"ba39c0647b5d9064fc9ccd0c4714d2eb03c9e862","isMergeCommit":false,"messageTitle":"Remove test cases for permissions service","messageBody":"The permission service has been removed. \r\n\r\nLet\u0027s remove the test cases for the permission service.","fileTypesAndContributionMap":{"ts":{"insertions":0,"deletions":74}}}]},{"date":"2024-02-26","commitResults":[{"hash":"70c883ae370d033a6ceb5edb4e42aa39e8df2b60","isMergeCommit":false,"messageTitle":"Remove constants for DataFile and Team model","messageBody":"DataFile and Team model are removed.\r\n\r\nLet\u0027s remove the constants of these models.","fileTypesAndContributionMap":{"ts":{"insertions":4,"deletions":44}}},{"hash":"2c36a3846be3987bf96ec5e482e05b96a69a1f57","isMergeCommit":false,"messageTitle":"Refactor test cases for label service","messageBody":"The test cases for the label service are outdated. \r\n\r\nLet\u0027s refactor the test cases for the label service and\r\nadd test case for fetchLabels method.","fileTypesAndContributionMap":{"ts":{"insertions":74,"deletions":241}}}]},{"date":"2024-03-02","commitResults":[{"hash":"121795c9f92a508d69c0d3490f92e161c5017eee","isMergeCommit":false,"messageTitle":"Refactor test cases for issue model","messageBody":"The GithubIssue constants and the test cases\r\nfor the issue model are outdated. \r\n\r\nLet\u0027s refactor the GithubIssue constants and the\r\ntest cases for the issue model.","fileTypesAndContributionMap":{"ts":{"insertions":133,"deletions":210}}},{"hash":"dfa05628791716d3341e4ac0f96699dca2f5362f","isMergeCommit":false,"messageTitle":"Refactor test cases for phase service","messageBody":"The test cases for the phase service are outdated. \r\n\r\nLet\u0027s refactor old test cases and add test cases for new methods.","fileTypesAndContributionMap":{"ts":{"insertions":126,"deletions":39}}}]},{"date":"2024-03-04","commitResults":[{"hash":"518ea791f4f838009c79aabed6db12d94d9ebce5","isMergeCommit":false,"messageTitle":"Fix zone testing import error (#269)","messageBody":"Npm run test will break if the import statement \r\nfor zone-testing is not at the top of test.ts file. \r\n\r\nLet\u0027s reorder the import statement and disable\r\ntslint rule for test.ts file.","fileTypesAndContributionMap":{"ts":{"insertions":4,"deletions":1}}},{"hash":"00f64fbecc6030c83f2fda114bb2a6a09e15dad2","isMergeCommit":false,"messageTitle":"Refactor test cases for issue sorter (#270)","messageBody":"The method in issue sorter has been updated.\r\n\r\nLet\u0027s refactor the test cases to match the changes.","fileTypesAndContributionMap":{"ts":{"insertions":11,"deletions":11}}},{"hash":"48b63155ba859ba7362b118740c4e40cb7785c7c","isMergeCommit":false,"messageTitle":"Refactor test cases for user service (#271)","messageBody":"The test cases for the user service are outdated. \r\n\r\nLet\u0027s refactor test cases for user service.","fileTypesAndContributionMap":{"ts":{"insertions":23,"deletions":50}}},{"hash":"8c36423a20ad868f665ef65e30d1c73cf1b2428a","isMergeCommit":false,"messageTitle":"Refactor test cases for label filter bar component (#274)","messageBody":"The test cases for the label filter bar component are outdated. \r\n\r\nLet\u0027s refactor test cases for label filter bar component","fileTypesAndContributionMap":{"ts":{"insertions":151,"deletions":60}}}]},{"date":"2024-03-08","commitResults":[{"hash":"f435ca142f7d92bcbe8651e8f4c437f13c833a50","isMergeCommit":false,"messageTitle":"Update test cases for phase service (#275)","messageBody":"Refactor and add test cases for phase service\r\n\r\nPhase service has been updated. \r\n\r\nLet\u0027s refactor and add test cases to match the changes.","fileTypesAndContributionMap":{"ts":{"insertions":71,"deletions":27}}}]},{"date":"2024-03-20","commitResults":[{"hash":"663dec3e90481c31c1411b2cd3f1829795c686f2","isMergeCommit":false,"messageTitle":"Refactor Phase Service and remove Phase (#291)","messageBody":"The concept of \"Phase\" is inherited from CATcher. Instead of \"Phase\", \r\nWATcher provides different \"Views\" of contributions in a repository.\r\n\r\nLet\u0027s replace \"Phase\" with \"View\".","fileTypesAndContributionMap":{"html":{"insertions":14,"deletions":17},"ts":{"insertions":189,"deletions":199}}}]},{"date":"2024-03-22","commitResults":[{"hash":"caadd668b7142b6efcd99080c87ac7855fc76b25","isMergeCommit":false,"messageTitle":"Setup grouping strategy and service (#308)","messageBody":"Implement GroupBy feature to allow users to group the issues/prs\r\nbased on different criteria such as milestone, status and etc.\r\n\r\nLet\u0027s set up the Grouping Strategy and Service.","fileTypesAndContributionMap":{"ts":{"insertions":259,"deletions":4}}}]},{"date":"2024-03-25","commitResults":[{"hash":"3420a738482dfb852ca23a69849b74c9c378be0e","isMergeCommit":false,"messageTitle":"Integrate Grouping Service (#313)","messageBody":"Implement GroupBy feature to allow users to group the issues/prs\r\nbased on different criteria such as milestone, status and etc.\r\n\r\nLet\u0027s integrate the grouping service in the components.","fileTypesAndContributionMap":{"css":{"insertions":2,"deletions":2},"html":{"insertions":79,"deletions":53},"ts":{"insertions":103,"deletions":58}}}]},{"date":"2024-03-29","commitResults":[{"hash":"cd4614f34a1d0707271d1782a97b3537ed32b1e5","isMergeCommit":false,"messageTitle":"Implement group by milestone (#316)","messageBody":"WATcher\u0027s default view displays issues and pull requests based solely on\r\ntheir assignees. Grouping issues and pull requests based on their\r\nassociated milestones may provide another useful view for the user.\r\n\r\nLet\u0027s implement the \"Group by Milestone\" feature.","fileTypesAndContributionMap":{"html":{"insertions":21,"deletions":0},"ts":{"insertions":61,"deletions":4}}},{"hash":"83dcdae8faa8c5ae4f8a4e73eb4ea419e88d251b","isMergeCommit":false,"messageTitle":"Include groupby params in url (#319)","messageBody":"With groupby parameters in the URL, users can easily share \r\nthe current grouping by using the URL.\r\n\r\nLet\u0027s implement initialization with URL parameters and \r\nthe ability to set groupby parameters.","fileTypesAndContributionMap":{"ts":{"insertions":93,"deletions":17}}},{"hash":"8ddcdcdb9759da81986d0d0bdb35b45b5ba39bdc","isMergeCommit":false,"messageTitle":"Reset GroupingContextService only if \"keep filter\" is selected. (#324)","messageBody":"GroupingContextService is being reset when the \"keep filter\" \r\noption is selected.\r\n\r\nLet\u0027s check if the \"keep filter\" option is selected before\r\nresetting the service.","fileTypesAndContributionMap":{"ts":{"insertions":3,"deletions":1}}},{"hash":"70bae914be0b1aae5a4ceb6a8fb1273c022797c7","isMergeCommit":false,"messageTitle":"Refactor MilestoneGroupingStrategy to match the changes in #315 (#323)","messageBody":"Special milestone groups are not added in the parseMilestoneData\r\nmethod.\r\n\r\nLet\u0027s add the special milestone groups to the result of the getGroups\r\nmethod.","fileTypesAndContributionMap":{"ts":{"insertions":4,"deletions":1}}},{"hash":"2eb2aba8980fb39dd9cfd9cd704873ed48aed0d4","isMergeCommit":false,"messageTitle":"Update repo on back and forward navigation (#322)","messageBody":"IssueViewer\u0027s repository is not updated when navigating back or forward\r\nin the URL history. This will lead to inconsistency between the URL\r\nparameters and the application state.\r\n\r\nLet\u0027s ensure that IssueViewer\u0027s repository is updated on back and forward\r\nnavigation.","fileTypesAndContributionMap":{"ts":{"insertions":18,"deletions":1}}}]},{"date":"2024-03-30","commitResults":[{"hash":"3f0aa1fac438fdc1ba505494a4b75ad1b364fa86","isMergeCommit":false,"messageTitle":"Enable npm run test in GitHub Action (#325)","messageBody":"Enabling automate testing in GitHub Actions with enhanced \r\ncode quality of the codebase.\r\n\r\nLet\u0027s enable automate testing.","fileTypesAndContributionMap":{"ts":{"insertions":8,"deletions":5}}}]},{"date":"2024-04-01","commitResults":[{"hash":"b603307a9e30e8bb74773c354fc41e1c36983df9","isMergeCommit":false,"messageTitle":"Show PRs without milestone in \"Currently Active\"","messageBody":"PRs without milestone requires urgent action from the user.\r\n\r\nLet\u0027s show it in the \"Currently Active\" preset view.","fileTypesAndContributionMap":{"ts":{"insertions":3,"deletions":3}}}]},{"date":"2024-04-03","commitResults":[{"hash":"775e59ce6371251c8ae2cb075f75ccb29ad8b6d2","isMergeCommit":false,"messageTitle":"Implement dropdown menu for repo change (#347)","messageBody":"Introduce a dropdown menu for repository selection,\r\nsimplifying the process of switching between repositories. \r\n\r\nThis enhancement offers users a quicker and more\r\nintuitive method to navigate to previously visited repositories.","fileTypesAndContributionMap":{"css":{"insertions":32,"deletions":0},"html":{"insertions":28,"deletions":2},"ts":{"insertions":15,"deletions":2}}}]}],"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}}}]},{"date":"2024-02-29","commitResults":[{"hash":"db460275c3952308858654140b7ccdbe93b33a12","isMergeCommit":false,"messageTitle":"Upgrade to Angular 11 (#252)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e\r\nCo-authored-by: Chee Hong \u003cc.h.wong2606@gmail.com\u003e","fileTypesAndContributionMap":{"ts":{"insertions":17,"deletions":13}}}]},{"date":"2024-03-12","commitResults":[{"hash":"7e68bbdaeceb5bdfcc8c09e0f3f7cbd9bd3000f4","isMergeCommit":false,"messageTitle":"Remove sorting by assignees in Issue Sorter (#286)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"ts":{"insertions":9,"deletions":24}}}]},{"date":"2024-03-21","commitResults":[{"hash":"63ed6a2329d9343bdf18afc39b44653809e3370a","isMergeCommit":false,"messageTitle":"Add tool tip for hidden users (#307)","messageBody":"Currently, there is no tool tip for the Hidden Users mat-card.\r\nIt is not immediately obvious what the column is referring to.\r\n\r\nLet\u0027s add a tool tip to make it more explanatory.\r\n\r\nCo-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"html":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-25","commitResults":[{"hash":"43ea689bd406857d7dae518ab089bf4d3029b564","isMergeCommit":false,"messageTitle":"Create tests for Error Handling service (#304)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"ts":{"insertions":101,"deletions":0}}},{"hash":"1fa6138cd5d66d33203fcab810011e9eaefab9c9","isMergeCommit":false,"messageTitle":"Create tests for Milestone service (#303)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"ts":{"insertions":55,"deletions":0}}}]},{"date":"2024-03-29","commitResults":[{"hash":"0867e1cbf2725df92870a321f91dd328af09e19c","isMergeCommit":false,"messageTitle":"Add sorting by Status (#318)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e\r\nCo-authored-by: Nguyen \u003c87511888+nknguyenhc@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"html":{"insertions":3,"deletions":0},"ts":{"insertions":23,"deletions":0}}},{"hash":"b1f3eed7d98e8fb6589e5bcde167f03d5942fe98","isMergeCommit":false,"messageTitle":"Split \u0027Without a milestone\u0027 option (#315)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e\r\nCo-authored-by: nknguyenhc \u003c87511888+nknguyenhc@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"html":{"insertions":2,"deletions":0},"ts":{"insertions":17,"deletions":14}}}]},{"date":"2024-04-03","commitResults":[{"hash":"d92079ba532ffc56283da245efe295f5edb4f203","isMergeCommit":false,"messageTitle":"Add icon for PRs without milestones (#337)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"html":{"insertions":8,"deletions":5},"ts":{"insertions":8,"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":123,"html":43,"ts":405},"Arif-Khalid":{"js":0,"css":5,"html":27,"ts":293},"NereusWB922":{"js":0,"css":163,"html":157,"ts":1425},"dishenggg":{"js":0,"css":0,"html":0,"ts":0},"MadLamprey":{"js":0,"css":0,"html":13,"ts":220},"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":954.5149,"Arif-Khalid":1578.0027,"NereusWB922":8179.129,"dishenggg":0.0,"MadLamprey":227.64615,"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 index b0a7d1e..f04fd20 100644 --- a/TEAMMATES_teammates_master/authorship.json +++ b/TEAMMATES_teammates_master/authorship.json @@ -1 +1 @@ -[{"path":"docs/_markbind/layouts/default.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"{% include \"_markbind/layouts/header.md\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\" class\u003d\"fixed-header-padding\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"* About TEAMMATES :expanded:"},{"lineNumber":9,"author":{"gitId":"-"},"content":" * [Introduction]({{ baseUrl }}/index.html)"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * [Overview]({{ baseUrl }}/overview.html)"},{"lineNumber":11,"author":{"gitId":"-"},"content":"* Getting Started :expanded:"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/setting-up.html)"},{"lineNumber":13,"author":{"gitId":"-"},"content":"* [Contributing]({{ baseUrl }}/contributing-doc.html)"},{"lineNumber":14,"author":{"gitId":"-"},"content":"* Workflow :expanded:"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * [Issues]({{ baseUrl }}/issues.html)"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * [Process]({{ baseUrl }}/process.html)"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * [Development]({{ baseUrl }}/development.html)"},{"lineNumber":18,"author":{"gitId":"-"},"content":"* [Design]({{ baseUrl }}/design.html)"},{"lineNumber":19,"author":{"gitId":"-"},"content":"* Best Practices :expanded:"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * [Coding]({{ baseUrl }}/best-practices/coding.html)"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * [Testing]({{ baseUrl }}/best-practices/testing.html)"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * [Data Migration]({{ baseUrl }}/best-practices/data-migration.html)"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * [UI Design]({{ baseUrl }}/best-practices/ui-design.html)"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * [Accessibility]({{ baseUrl }}/best-practices/accessibility.html)"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * [Mobile-Friendliness]({{ baseUrl }}/best-practices/mobile-friendliness.html)"},{"lineNumber":26,"author":{"gitId":"-"},"content":"* How-to :expanded:"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * [Captcha]({{ baseUrl }}/captcha.html)"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * [Documentation]({{ baseUrl }}/documentation.html)"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * [Emails]({{ baseUrl }}/emails.html)"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * [End-to-End Testing]({{ baseUrl }}/e2e-testing.html)"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Performance Testing]({{ baseUrl }}/performance-testing.html)"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Accessibility Testing]({{ baseUrl }}/axe-testing.html)"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [Search]({{ baseUrl }}/search.html)"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Snapshot Testing]({{ baseUrl }}/snapshot-testing.html)"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * [Static Analysis]({{ baseUrl }}/static-analysis.html)"},{"lineNumber":36,"author":{"gitId":"-"},"content":"* [Troubleshooting Guide]({{ baseUrl }}/troubleshooting-guide.html)"},{"lineNumber":37,"author":{"gitId":"-"},"content":"* [Glossary]({{ baseUrl }}/glossary.html)"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\" class\u003d\"fixed-header-padding\"\u003e"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" \u003cbreadcrumb/\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" {{ content }}"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\" class\u003d\"fixed-header-padding\"\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":"{% include \"_markbind/layouts/footer.md\" %}"}],"authorContributionMap":{"jingting1412":3,"-":49}},{"path":"docs/_markbind/layouts/footer.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cfooter\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"\u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"text-center\"\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" \u003csmall\u003e[Generated by {{MarkBind}} on {{timestamp}}]\u003c/small\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"\u003c/footer\u003e"}],"authorContributionMap":{"jingting1412":6}},{"path":"docs/_markbind/layouts/header.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003chead-bottom\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{ baseUrl }}/stylesheets/main.css\"\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003c/head-bottom\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003cheader sticky\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cnavbar type\u003d\"inverse\"\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{ baseUrl }}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"{{ baseUrl }}/images/teammateslogo.png\" width\u003d\"150\" alt\u003d\"Logo\" caption\u003d\"\"/\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cspan style\u003d\"font-style:italic;font-size:small\"\u003e[dev docs]\u003c/span\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003c/a\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{ baseUrl }}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{ baseUrl }}/contributing-doc.html\" class\u003d\"nav-link\"\u003eContributing\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"https://teammatesv4.appspot.com/\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eProduct Website \u003cmd\u003e:glyphicon-share-alt:\u003c/md\u003e\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/TEAMMATES/teammates\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003c/form\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003c/li\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003c/navbar\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":"\u003c/header\u003e"}],"authorContributionMap":{"jingting1412":21}},{"path":"docs/design.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" title: \"Design\""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"# Design"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"## Architecture"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/highlevelArchitecture.puml\"/\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"TEAMMATES is a Web application that runs on Google App Engine (GAE). Given above is an overview of the main components."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"- **UI (Browser)**: The UI seen by users consists of Web pages containing HTML, CSS (for styling) and JavaScript (for client-side interactions such as sorting, input validation, etc.). This UI is a single HTML page generated by Angular framework. The initial page request is sent to the server over HTTP, and requests for data are sent asynchronously with AJAX."},{"lineNumber":14,"author":{"gitId":"-"},"content":"- **UI (Server)**: The entry point for the application back end logic is designed as a REST-ful controller."},{"lineNumber":15,"author":{"gitId":"-"},"content":"- **Logic**: The main logic of the application is in POJOs (Plain Old Java Objects)."},{"lineNumber":16,"author":{"gitId":"-"},"content":"- **Storage**: The storage layer of the application uses the persistence framework provided by **Google Cloud Datastore**, a NoSQL database."},{"lineNumber":17,"author":{"gitId":"-"},"content":"- **Test Driver**: TEAMMATES makes heavy use of automated regression testing. Test data is transmitted using JSON format."},{"lineNumber":18,"author":{"gitId":"-"},"content":" - `TestNG` is used for Java testing (all levels) and `Jest` for JavaScript unit-testing."},{"lineNumber":19,"author":{"gitId":"-"},"content":"- **E2E**: The E2E (end-to-end) component is used to interact with the application as a whole with Web browsers. Its primary function is for E2E tests."},{"lineNumber":20,"author":{"gitId":"-"},"content":" - `Selenium (Java)` is used to automate E2E testing with actual Web browsers."},{"lineNumber":21,"author":{"gitId":"-"},"content":"- **Client**: The Client component can connect to the back end directly without using a Web browser. It is used for administrative purposes, e.g. migrating data to a new schema."},{"lineNumber":22,"author":{"gitId":"-"},"content":"- **Common**: The Common component contains utility code (data transfer objects, helper classes, etc.) used across the application."},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"The diagram below shows how the code in each component is organized into packages and the dependencies between them."},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/packageDiagram.puml\"/\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"Notes:"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"- `[logic] - [ui::website] - [ui::webapi]` represent an application of `Model-View-Controller` pattern."},{"lineNumber":31,"author":{"gitId":"-"},"content":" - `ui::website` is not a real package; it is a conceptual package representing the front-end of the application."},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"## UI Component"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"The diagram below shows the object structure of the UI component."},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/UiComponent.puml\"/\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"Notes:"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"- `ui::website` is not a Java package. It is written in Angular framework and consists of HTML, SCSS, and TypeScript files. The framework will build those files into HTML, CSS and JavaScript files ready to be used by standard Web browsers."},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"The UI component is the first stop for 99% of all requests that are received by the application."},{"lineNumber":44,"author":{"gitId":"-"},"content":"Such a request will go through the following steps:"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"1. Request received by the GAE server."},{"lineNumber":47,"author":{"gitId":"-"},"content":"1. Custom filters are applied according to the order specified in `web.xml`, e.g. `OriginCheckFilter`."},{"lineNumber":48,"author":{"gitId":"-"},"content":"1. Request forwarded to a `*Servlet` object as specified in `web.xml` for further processing, depending on the type of request."},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"There are two general types of requests: user-invoked requests and automated (GAE server-invoked) requests, which are processed differently."},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"### User-invoked requests"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"User-invoked requests are all requests made by the users of the application, typically from the Web browser (i.e. by navigating to a particular URL of the application)."},{"lineNumber":55,"author":{"gitId":"-"},"content":"The request will be processed as follows:"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/UiWorkflow.puml\"/\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"The initial request for the web page will be processed as follows:"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Request forwarded to `WebPageServlet`."},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. `WebPageServlet` returns the built single web page (`index.html`)."},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. The browser will render the page and execute the page scripts, most of the time requiring AJAX requests to the server."},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":"Subsequent AJAX requests sent to the server will be processed as follows:"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":"1. Request forwarded to the `WebApiServlet`."},{"lineNumber":68,"author":{"gitId":"-"},"content":"1. `WebApiServlet` uses the `ActionFactory` to generate the matching `Action` object, e.g. `GetFeedbackSessionsAction`."},{"lineNumber":69,"author":{"gitId":"-"},"content":"1. `WebApiServlet` executes the action."},{"lineNumber":70,"author":{"gitId":"-"},"content":" 1. The `Action` object checks the access rights of the user. If the action is allowed, it will be performed, interacting with the `Logic` component as necessary."},{"lineNumber":71,"author":{"gitId":"-"},"content":" 1. The `Action` packages and processes the result into an `ActionResult` object. The most common format is `JsonResult` (requests for obtaining data or processing existing data) and other formats can be defined as necessary."},{"lineNumber":72,"author":{"gitId":"-"},"content":"1. `WebApiServlet` sends the result back to the browser which will then process it on the front-end."},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":"Requests for static asset files (e.g. CSS, JS files, images) are served directly without going through `web.xml` configuration at all."},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"The Web API is protected by two layers of access control check:"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"- Origin check: This mitigates [CSRF attack](https://owasp.org/www-community/attacks/csrf)."},{"lineNumber":79,"author":{"gitId":"-"},"content":"- Authentication and authorization check: This checks if the logged in user (or lack thereof) has sufficient privileges to trigger the API\u0027s actions."},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"Special keys (`csrf key` and `backdoor key`) can be used to bypass each of the checks, typically for testing purpose. Those keys are strings known only to the person who deployed the application (typically, the administrator)."},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"### Automated requests"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":"Automated requests are all requests sent automatically by the GAE server during specific periods of time."},{"lineNumber":86,"author":{"gitId":"-"},"content":"This type of request will be processed as follows:"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":"1. The source of the request will be checked for administrator privilege. If this privilege is absent (e.g. non-administrator users trying to invoke the automated actions), the request will be dropped and a `403 Forbidden` status will be returned."},{"lineNumber":89,"author":{"gitId":"-"},"content":" - Requests generated by the GAE server are equipped with this privilege."},{"lineNumber":90,"author":{"gitId":"-"},"content":" - Administrators can manually invoke these requests; this is particularly useful in testing the actions associated with those requests."},{"lineNumber":91,"author":{"gitId":"-"},"content":"1. Request forwarded to the `WebApiServlet` and subsequent actions are the same as user-invoked AJAX requests."},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":"GAE server sends such automated requests through two different configurations:"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":"- Cron jobs: These are jobs that are automatically scheduled for a specified period of time, e.g. scheduling feedback session opening reminders. It is configured in `cron.yaml`."},{"lineNumber":96,"author":{"gitId":"-"},"content":"- Task queue workers: These are hybrids of user-invoked and GAE-invoked in that they are queued by users (i.e. users request for the tasks to be added to queue), but executed by GAE (i.e. GAE determines when and which tasks in the queue are executed at any point of time). This is typically used for tasks that may take a long time to finish and might be blocking user\u0027s interaction. It is configured in `queue.yaml` as well as the `TaskQueue` nested class of the [Const](https://github.com/TEAMMATES/teammates/blob/master/src/main/java/teammates/common/util/Const.java) class."},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"### Template Method pattern"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":"- Since the high-level workflow of processing a request is same for any request (differing by the two request types only), we use the [Template Method pattern](http://en.wikipedia.org/wiki/Template_method_pattern) to abstract the process flow into the `Action` classes."},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"### Policies"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"On designing API endpoints (for AJAX requests):"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"- Design endpoints for resources. For example, `FeedbackSession` is a resource. The corresponding endpoint is `/session`. We use `GET`, `POST`, `PUT`, `DELETE` HTTP methods to get, create, update and delete the resource respectively."},{"lineNumber":107,"author":{"gitId":"-"},"content":"- Prefer multiple REST calls over single RPC (Remote Procedure Call) calls."},{"lineNumber":108,"author":{"gitId":"-"},"content":" - Reason 1: REST paradigm promotes reuse of many business logic and is not dependent of the structure of the requesting web page (or any other type of requesting agent)."},{"lineNumber":109,"author":{"gitId":"-"},"content":" - Reason 2: Multiple REST calls can be parallelized which will improve performance."},{"lineNumber":110,"author":{"gitId":"-"},"content":"- Separate access control logic and execution logic completely."},{"lineNumber":111,"author":{"gitId":"-"},"content":" - In the case that an endpoint serves multiple purposes, we use `Intent` to distinguish the intent for the request. For example, instructors can access `/session` with intent `INSTRUCTOR_SUBMISSION` or `FULL_DETAIL`. Some `Intent` will naturally require stricter access rights."},{"lineNumber":112,"author":{"gitId":"-"},"content":"- Prefer HTTP request body over URL parameters (key-value) to contain data for `POST` and `PUT` requests."},{"lineNumber":113,"author":{"gitId":"-"},"content":" - Reason 1: The URL parameters are used to identify a specific resource for an endpoint, not what should be done to them."},{"lineNumber":114,"author":{"gitId":"-"},"content":" - Reason 2: Request body is not limited to key-value format which allows proper design and validation."},{"lineNumber":115,"author":{"gitId":"-"},"content":" - Data Transfer Objects (DTOs) which represent different API requests and responses are defined in `request` and `output` package respectively."},{"lineNumber":116,"author":{"gitId":"-"},"content":"- Preprocess data sent/received by the server to hide complexities. For example, timestamp is passed as UNIX epoch milliseconds in the output while it is represented as `Instant` in the back-end."},{"lineNumber":117,"author":{"gitId":"-"},"content":" - Some constructors in the `output` package contain logic to hide \"hacks\" in the backend."},{"lineNumber":118,"author":{"gitId":"-"},"content":" - Some getters/setters in the `request` package contain logic to cater the conventions in the backend."},{"lineNumber":119,"author":{"gitId":"-"},"content":" - Some fields are required be hidden in the API response, mostly for data privacy purposes. Whenever required, there should be methods in the request output objects catered for this."},{"lineNumber":120,"author":{"gitId":"-"},"content":"- API endpoints should not be concerned with how data is presented."},{"lineNumber":121,"author":{"gitId":"-"},"content":" - Case study 1: some endpoint will pass timezone information via two information: timezone ID and UNIX epoch milliseconds. It is up to the front-end on how to make use of those two pieces of information."},{"lineNumber":122,"author":{"gitId":"-"},"content":" - Case study 2: CSV file for session result or student list is just a different way of presenting the same information in the web page. Due to this, when downloading CSV, the web page will request the same information as that used when displaying in web page and do the necessary conversion to CSV."},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":"On data exchange between front-end and back-end:"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"- Back-end is the single source of truth for all data format and the code used by front-end is generated from this."},{"lineNumber":127,"author":{"gitId":"-"},"content":" - Some important constants (including API endpoints information) are synced to `api-const.ts`."},{"lineNumber":128,"author":{"gitId":"-"},"content":" - The schemas of the DTOs defined in `output` and `request` packages are synced to `api-output.ts` and `api-request.ts` in the frontend."},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"On handling exceptions:"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":"- The UI component is responsible for catching all exceptions and transforming them to properly formed, user-friendly output format. It includes the status message shown to user as well as the HTTP status code."},{"lineNumber":133,"author":{"gitId":"-"},"content":" - As a consequence, the UI component cannot throw any exception, because there is no layer which will catch those exceptions if it does."},{"lineNumber":134,"author":{"gitId":"-"},"content":"- In order to streamline the process, custom runtime exception classes which correspond to different HTTP status codes are used. For example, there is `EntityNotFoundException` which corresponds to HTTP 404, `UnauthorizedAccessException` which corresponds to HTTP 403, etc."},{"lineNumber":135,"author":{"gitId":"-"},"content":" - It is highly preferred to throw these custom exceptions instead of setting the HTTP status manually in the action class, as the API layer has been configured to automatically log the exception and assign the correct status code to the HTTP response."},{"lineNumber":136,"author":{"gitId":"-"},"content":"- All `4XX` responses must be accompanied with logging at `warning` level or above. `5XX` responses must be accompanied with `severe` level logging."},{"lineNumber":137,"author":{"gitId":"-"},"content":" - `502` (Bad Gateway) responses may skip the `severe` level logging if the upstream components (where the error happened) already did the `severe` level logging."},{"lineNumber":138,"author":{"gitId":"-"},"content":"- We use the HTTP status codes as close to their standard definition in [RFC7231](https://tools.ietf.org/html/rfc7231) as possible."},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":"## Logic Component"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"The `Logic` component handles the business logic of TEAMMATES. In particular, it is responsible for:"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":"- Managing relationships between entities, e.g. cascade logic for create/update/delete."},{"lineNumber":145,"author":{"gitId":"-"},"content":"- Managing transactions, e.g. ensuring atomicity of a transaction."},{"lineNumber":146,"author":{"gitId":"-"},"content":"- Sanitizing input values received from the UI component."},{"lineNumber":147,"author":{"gitId":"-"},"content":"- Connecting to GCP or third-party services, e.g. for adding tasks to the task queue and for sending emails with third-party providers."},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/LogicComponent.puml\"/\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"- **`logic.api`**: Provides the API of the component to be accessed by the UI."},{"lineNumber":154,"author":{"gitId":"-"},"content":"- **`logic.core`**: Contains the core logic of the system."},{"lineNumber":155,"author":{"gitId":"-"},"content":"- **`logic.external`**: Holds the logic of external services such as task queue service."},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":"### Logic API"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"Represented by these classes:"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"- `Logic`: A [Facade class](http://en.wikipedia.org/wiki/Facade_pattern) which connects to the several `*Logic` classes to handle the logic related to various types of data and to access data from the `Storage` component."},{"lineNumber":162,"author":{"gitId":"-"},"content":"- `UserProvision`: Retrieves user information (based on request cookies)."},{"lineNumber":163,"author":{"gitId":"-"},"content":"- `EmailGenerator`: Generates emails to be sent."},{"lineNumber":164,"author":{"gitId":"-"},"content":"- `EmailSender`: Sends email with the provider chosen based on the build configuration."},{"lineNumber":165,"author":{"gitId":"-"},"content":"- `TaskQueuer`: Adds tasks to the task queue, i.e. to be executed at a later time."},{"lineNumber":166,"author":{"gitId":"-"},"content":"- `LogsProcessor`: For more advanced usage of logging that cannot be captured by the standard logger class."},{"lineNumber":167,"author":{"gitId":"-"},"content":"- `RecaptchaVerifier`: For verification of the reCAPTCHA token."},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":"Many classes in this layer make use of proxy pattern, i.e. they only connect to production services such as Google Cloud Tasks in the staging/production server."},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":"### Policies"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"Access control:"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":"+ Although this component provides methods that are relevant to access control (e.g. providing user information), the access control check itself does not happen in this component. The UI is expected to check access control (using `GateKeeper` class) before calling a method in the logic component."},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":"API for creating entities:"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":"+ Null parameters: Causes an assertion failure."},{"lineNumber":180,"author":{"gitId":"-"},"content":"+ Invalid parameters: Throws `InvalidParametersException`."},{"lineNumber":181,"author":{"gitId":"-"},"content":"+ Entity already exists: Throws `EntityAlreadyExistsException` (escalated from Storage level)."},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":"API for retrieving entities:"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":"+ Attempting to retrieve objects using `null` parameters: Causes an assertion failure."},{"lineNumber":186,"author":{"gitId":"-"},"content":"+ Entity not found:"},{"lineNumber":187,"author":{"gitId":"-"},"content":" - Returns `null` if the target entity not found. This way, read operations can be used easily for checking the existence of an entity."},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":"API for updating entities:"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"+ Update is done using `*UpdateOptions` inside every `*Attributes`. The `UpdateOptions` will specify what is used to identify the entity to update and what will be updated."},{"lineNumber":192,"author":{"gitId":"-"},"content":"+ Entity not found: Throws `EntityDoesNotExistException`."},{"lineNumber":193,"author":{"gitId":"-"},"content":"+ Invalid parameters: Throws `InvalidParametersException`."},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"API for deleting entities:"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":"+ FailDeleteSilentlyPolicy: In general, delete operation do not throw exceptions if the target entity does not exist. This is because if it does not exist, it is as good as deleted."},{"lineNumber":198,"author":{"gitId":"-"},"content":"+ Cascade policy: When a parent entity is deleted, entities that have referential integrity with the deleted entity should also be deleted."},{"lineNumber":199,"author":{"gitId":"-"},"content":" Refer to the API for the cascade logic."},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"## Storage Component"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":"The `Storage` component performs CRUD (Create, Read, Update, Delete) operations on data entities individually."},{"lineNumber":204,"author":{"gitId":"-"},"content":"It contains minimal logic beyond what is directly relevant to CRUD operations."},{"lineNumber":205,"author":{"gitId":"-"},"content":"In particular, it is reponsible for:"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":"- Validating data inside entities before creating/updating them, to ensure they are in a valid state."},{"lineNumber":208,"author":{"gitId":"-"},"content":"- Hiding the complexities of the database from the `Logic` component."},{"lineNumber":209,"author":{"gitId":"-"},"content":"- Hiding the persistable objects: Classes in the `storage::entity` package are not visible outside this component to hide information specific to data persistence."},{"lineNumber":210,"author":{"gitId":"-"},"content":" - Instead, a corresponding non-persistent [data transfer object](http://en.wikipedia.org/wiki/Data_transfer_object) named `*Attributes` (e.g., `CourseAttributes` is the data transfer object for `Course` entities) object is returned. These datatransfer classes are in `common::datatransfer` package, to be explained later."},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":"The `Storage` component does not perform any cascade delete/create operations. Cascade logic is handled by the `Logic` component."},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/StorageComponent.puml\"/\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"+ **`storage.api`**: Provides the API of the component to be accessed by the logic component."},{"lineNumber":219,"author":{"gitId":"-"},"content":"+ **`storage.entity`**: Classes that represent persistable entities."},{"lineNumber":220,"author":{"gitId":"-"},"content":"+ **`storage.search`**: Classes for dealing with searching and indexing."},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\"/\u003e"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"Note that the navigability of the association links between entity objects appear to be in the reverse direction of what we see in a normal OOP design."},{"lineNumber":225,"author":{"gitId":"-"},"content":"This is because we want to keep the data schema flexible so that new entity types can be added later with minimal modifications to existing elements."},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"### Storage API"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"Represented by the `*Db` classes. These classes act as the bridge to the database."},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"### Policies"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":"Add and Delete operations try to wait until data is persisted in the database before returning. This is not enough to compensate for eventual consistency involving multiple servers in the Google Cloud Datastore environment. However, it is expected to avoid test failures caused by eventual consistency in dev server and reduce such problems in the live server."},{"lineNumber":234,"author":{"gitId":"-"},"content":"Note: \u0027Eventual consistency\u0027 here means it takes some time for a database operation to propagate across all replicas of the Google Cloud Datastore. As a result, the data may be in an inconsistent states for short periods of time although things should become consistent \u0027eventually\u0027. For example, an object we deleted may appear to still exist for a short while."},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":"Implementation of Transaction Control has been minimized due to limitations of Google Cloud Datastore environment and the nature of our data schema."},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":"API for creating:"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":"+ Attempt to create an entity that already exists: Throws `EntityAlreadyExistsException`."},{"lineNumber":241,"author":{"gitId":"-"},"content":"+ Attempt to create an entity with invalid data: Throws `InvalidParametersException`."},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":"API for retrieving:"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":"+ Attempt to retrieve an entity that does not exist: Returns `null`."},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":"API for updating:"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":"+ Attempt to update an entity that does not exist: Throws `EntityDoesNotExistException`."},{"lineNumber":250,"author":{"gitId":"-"},"content":"+ Attempt to update an entity with invalid data: Throws `InvalidParametersException`."},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":"API for deleting:"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":"+ Attempt to delete an entity that does not exist: Fails silently."},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":"## Common Component"},{"lineNumber":257,"author":{"gitId":"-"},"content":""},{"lineNumber":258,"author":{"gitId":"-"},"content":"The Common component contains common utilities used across TEAMMATES."},{"lineNumber":259,"author":{"gitId":"-"},"content":""},{"lineNumber":260,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/CommonComponent.puml\"/\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":263,"author":{"gitId":"-"},"content":""},{"lineNumber":264,"author":{"gitId":"-"},"content":"- **`common.util`**: Contains utility classes."},{"lineNumber":265,"author":{"gitId":"-"},"content":"- **`common.exceptions`**: Contains custom exceptions."},{"lineNumber":266,"author":{"gitId":"-"},"content":"- **`common.datatransfer`**: Contains data transfer objects."},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":"`common.datatransfer` package contains lightweight \"data transfer object\" classes for transferring data among components. They can be combined in various ways to transfer structured data between components. Given below are three examples."},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/DataTransferClasses.puml\"/\u003e"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":"1. `Test Driver` can use the `DataBundle` in this manner to send an arbitrary number of objects to be persisted in the database."},{"lineNumber":273,"author":{"gitId":"-"},"content":"1. This structure can be used to transfer search results of a student or instructor or response comments."},{"lineNumber":274,"author":{"gitId":"-"},"content":"1. This structure can be used to send results of a feedback session (e.g., when showing a feedback session report to an instructor)."},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":"Some of these classes are methodless (and thus more of a data structure rather than a class); these classes use public variables for data for easy access."},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":"## Test Driver Component"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":"This component automates the testing of TEAMMATES."},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/TestDriverComponent.puml\"/\u003e"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":"The test driver component\u0027s package structure follows the corresponding production package structure\u0027s exactly,"},{"lineNumber":285,"author":{"gitId":"-"},"content":"e.g. `teammates.logic.core.*` will contain the test cases for the production code inside `teammates.logic.core` package."},{"lineNumber":286,"author":{"gitId":"-"},"content":"In the same spirit, for the front end, each `*.component.ts` will have the corresponding `*.component.spec.ts` in the same folder (similarly for `*.service.ts`, `*.pipe.ts`, etc.)."},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":"The test driver component introduces the following additional packages:"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":"- **`architecture`**: Contains test cases used by one of the lint tools to check for architectural integrity."},{"lineNumber":291,"author":{"gitId":"-"},"content":"- **`test`**: Contains infrastructure and helpers needed for running the tests. Also contains the test cases for the said infrastructure/helpers."},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":"Notes:"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":"- Component tests: Some of these are pure unit tests (i.e. testing one component in isolation) while others are integration tests that test units as well as integration of units with each other."},{"lineNumber":296,"author":{"gitId":"-"},"content":"- Front-end files (particularly TypeScript) are tested separately with `Jest`. The test cases are found in `*.spec.ts` files."},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":"This is how TEAMMATES testing maps to standard types of testing."},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":"```"},{"lineNumber":301,"author":{"gitId":"-"},"content":"Normal"},{"lineNumber":302,"author":{"gitId":"-"},"content":"|-----acceptance tests-----|-------------------system tests-------------------|-----integration tests-----|-----unit tests-----|"},{"lineNumber":303,"author":{"gitId":"-"},"content":"|--------manual testing--------|------automated E2E tests------|-------------------automated component tests-------------------|"},{"lineNumber":304,"author":{"gitId":"-"},"content":"TEAMMATES"},{"lineNumber":305,"author":{"gitId":"-"},"content":"```"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":"## E2E Component"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":"The E2E component has no knowledge of the internal workings of the application and can only interact either with Web browser (as a whole application) or REST API calls (for the back-end logic). Its primary function is for E2E tests."},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/E2EComponent.puml\"/\u003e"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"- **`e2e.util`**: Contains helpers needed for running E2E tests. Also contains the test cases for the said infrastructure/helpers."},{"lineNumber":316,"author":{"gitId":"-"},"content":"- **`e2e.pageobjects`**: Contains abstractions of the pages as they appear on a Browser (i.e. SUTs)."},{"lineNumber":317,"author":{"gitId":"-"},"content":"- **`e2e.cases`**: Contains system test cases for testing the application as a whole."},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":"## Client Component"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":"The Client component contains scripts that can connect directly to the application back-end for administrative purposes, such as migrating data to a new schema and calculating statistics."},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/ClientComponent.puml\"/\u003e"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":"- **`client.util`**: Contains helpers needed for client scripts."},{"lineNumber":328,"author":{"gitId":"-"},"content":"- **`client.connector`**: Classes needed to connect to the back end directly."},{"lineNumber":329,"author":{"gitId":"-"},"content":"- **`client.scripts`**: Scripts that deal with the back end data for administrative purposes."}],"authorContributionMap":{"jingting1412":12,"-":317}},{"path":"src/e2e/java/teammates/e2e/cases/AdminNotificationsPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.LocalDate;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.time.LocalDateTime;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.ZoneId;"},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import java.util.UUID;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.AdminNotificationsPage;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.NotificationData;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#ADMIN_NOTIFICATIONS_PAGE}."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class AdminNotificationsPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" private Notification[] notifications \u003d new Notification[2];"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":26,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/AdminNotificationsPageE2ETest.json\");"},{"lineNumber":28,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" sqlTestData \u003d removeAndRestoreSqlDataBundle("},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" loadSqlDataBundle(\"/AdminNotificationsPageE2ETest_SqlEntities.json\"));"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" notifications[0] \u003d sqlTestData.notifications.get(\"notification1\");"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" notifications[1] \u003d sqlTestData.notifications.get(\"notification2\");"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" ______TS(\"verify loaded data\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":" AppUrl url \u003d createFrontendUrl(Const.WebPageURIs.ADMIN_NOTIFICATIONS_PAGE);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" AdminNotificationsPage notificationsPage \u003d loginAdminToPage(url, AdminNotificationsPage.class);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // Only validates that the notifications are present in the notifications table instead of checking every row"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // This is because the page will display all notifications in the database, which is not predictable"},{"lineNumber":44,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(notifications[0]);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(notifications[1]);"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" NotificationData notif \u003d BACKDOOR.getNotificationData(notifications[0].getId().toString());"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getNotificationId(), notifications[0].getId().toString());"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getMessage(), notifications[0].getMessage());"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getTitle(), notifications[0].getTitle());"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" notif \u003d BACKDOOR.getNotificationData(notifications[1].getId().toString());"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getNotificationId(), notifications[1].getId().toString());"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getMessage(), notifications[1].getMessage());"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getTitle(), notifications[1].getTitle());"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" ______TS(\"add new notification\");"},{"lineNumber":56,"author":{"gitId":"-"},"content":" int currentYear \u003d LocalDate.now().getYear();"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" Notification newNotification \u003d new Notification("},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" LocalDateTime.of(currentYear + 5, 2, 2, 12, 0).atZone(ZoneId.of(\"UTC\")).toInstant(),"},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" LocalDateTime.of(currentYear + 5, 2, 3, 12, 0).atZone(ZoneId.of(\"UTC\")).toInstant(),"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" NotificationStyle.INFO,"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" NotificationTargetUser.STUDENT,"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" \"New E2E test notification 1\","},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" \"\u003cp\u003eNew E2E test notification message\u003c/p\u003e\""},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" );"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" notificationsPage.addNotification(newNotification);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" notificationsPage.verifyStatusMessage(\"Notification created successfully.\");"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" // Replace placeholder ID with actual ID of created notification"},{"lineNumber":70,"author":{"gitId":"-"},"content":" notificationsPage.sortNotificationsTableByDescendingCreateTime();"},{"lineNumber":71,"author":{"gitId":"-"},"content":" String newestNotificationId \u003d notificationsPage.getFirstRowNotificationId();"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" newNotification.setId(UUID.fromString(newestNotificationId));"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" // Checks that notification is in the database first"},{"lineNumber":75,"author":{"gitId":"-"},"content":" // so that newNotification is updated with the created time before checking table row"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":" notif \u003d BACKDOOR.getNotificationData(newestNotificationId);"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getNotificationId(), newestNotificationId);"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getMessage(), newNotification.getMessage());"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getTitle(), newNotification.getTitle());"},{"lineNumber":80,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(newNotification);"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" ______TS(\"edit notification\");"},{"lineNumber":83,"author":{"gitId":"-"},"content":" newNotification.setStartTime(LocalDateTime.of(currentYear + 7, 2, 2, 12, 0).atZone(ZoneId.of(\"UTC\")).toInstant());"},{"lineNumber":84,"author":{"gitId":"-"},"content":" newNotification.setEndTime(LocalDateTime.of(currentYear + 7, 2, 3, 12, 0).atZone(ZoneId.of(\"UTC\")).toInstant());"},{"lineNumber":85,"author":{"gitId":"-"},"content":" newNotification.setStyle(NotificationStyle.DANGER);"},{"lineNumber":86,"author":{"gitId":"-"},"content":" newNotification.setTargetUser(NotificationTargetUser.INSTRUCTOR);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" newNotification.setTitle(\"Edited E2E test notification 1\");"},{"lineNumber":88,"author":{"gitId":"-"},"content":" newNotification.setMessage(\"\u003cp\u003eEdited E2E test notification message\u003c/p\u003e\");"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" notificationsPage.editNotification(newNotification);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" notificationsPage.verifyStatusMessage(\"Notification updated successfully.\");"},{"lineNumber":92,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(newNotification);"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" // verify that notification is present in database by reloading"},{"lineNumber":95,"author":{"gitId":"-"},"content":" notificationsPage.reloadPage();"},{"lineNumber":96,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(newNotification);"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" ______TS(\"delete notification\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" notificationsPage.deleteNotification(newNotification);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" notificationsPage.verifyStatusMessage(\"Notification has been deleted.\");"},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" notif \u003d BACKDOOR.getNotificationData(newestNotificationId);"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":" assertNull(notif);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void classTeardown() {"},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" for (Notification notification : sqlTestData.notifications.values()) {"},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":" BACKDOOR.deleteNotification(notification.getId().toString());"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":33,"-":79}},{"path":"src/e2e/java/teammates/e2e/cases/AdminSearchPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.AdminSearchPage;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#ADMIN_SEARCH_PAGE}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class AdminSearchPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/AdminSearchPageE2ETest.json\");"},{"lineNumber":30,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" putDocuments(testData);"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" sqlTestData \u003d loadSqlDataBundle(\"/AdminSearchPageE2ETest_SqlEntities.json\");"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" removeAndRestoreSqlDataBundle(sqlTestData);"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" doPutDocumentsSql(sqlTestData);"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" AppUrl url \u003d createFrontendUrl(Const.WebPageURIs.ADMIN_SEARCH_PAGE);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" AdminSearchPage searchPage \u003d loginAdminToPage(url, AdminSearchPage.class);"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" CourseAttributes course \u003d testData.courses.get(\"typicalCourse1\");"},{"lineNumber":48,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d testData.students.get(\"student1InCourse1\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d testData.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" AccountRequest accountRequest \u003d sqlTestData.accountRequests.get(\"instructor1OfCourse1\");"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Search student email\");"},{"lineNumber":53,"author":{"gitId":"-"},"content":" String searchContent \u003d student.getEmail();"},{"lineNumber":54,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":55,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" String studentDetails \u003d getExpectedStudentDetails(student);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" String studentManageAccountLink \u003d getExpectedStudentManageAccountLink(student);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" String studentHomePageLink \u003d getExpectedStudentHomePageLink(student);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" int numExpandedRows \u003d getExpectedNumExpandedRows(student);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" searchPage.verifyStudentRowContent(student, course, studentDetails, studentManageAccountLink,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" studentHomePageLink);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" searchPage.verifyStudentExpandedLinks(student, numExpandedRows);"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Reset student google id\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":" searchPage.resetStudentGoogleId(student);"},{"lineNumber":66,"author":{"gitId":"-"},"content":" student.setGoogleId(null);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" studentManageAccountLink \u003d getExpectedStudentManageAccountLink(student);"},{"lineNumber":68,"author":{"gitId":"-"},"content":" studentHomePageLink \u003d getExpectedStudentHomePageLink(student);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" searchPage.verifyStudentRowContent(student, course, studentDetails, studentManageAccountLink,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" studentHomePageLink);"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Regenerate registration key for a course student\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" searchPage.clickExpandStudentLinks();"},{"lineNumber":74,"author":{"gitId":"-"},"content":" String originalJoinLink \u003d searchPage.getStudentJoinLink(student);"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" searchPage.regenerateStudentKey(student);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" searchPage.verifyRegenerateStudentKey(student, originalJoinLink);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" searchPage.waitForPageToLoad();"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Search for instructor email\");"},{"lineNumber":81,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":82,"author":{"gitId":"-"},"content":" searchContent \u003d instructor.getEmail();"},{"lineNumber":83,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":85,"author":{"gitId":"-"},"content":" String instructorManageAccountLink \u003d getExpectedInstructorManageAccountLink(instructor);"},{"lineNumber":86,"author":{"gitId":"-"},"content":" String instructorHomePageLink \u003d getExpectedInstructorHomePageLink(instructor);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" searchPage.verifyInstructorRowContent(instructor, course, instructorManageAccountLink,"},{"lineNumber":88,"author":{"gitId":"-"},"content":" instructorHomePageLink);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" searchPage.verifyInstructorExpandedLinks(instructor);"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Reset instructor google id\");"},{"lineNumber":92,"author":{"gitId":"-"},"content":" searchPage.resetInstructorGoogleId(instructor);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" instructor.setGoogleId(null);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" instructorManageAccountLink \u003d getExpectedInstructorManageAccountLink(instructor);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" instructorHomePageLink \u003d getExpectedInstructorHomePageLink(instructor);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" searchPage.verifyInstructorRowContent(instructor, course, instructorManageAccountLink,"},{"lineNumber":97,"author":{"gitId":"-"},"content":" instructorHomePageLink);"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Regenerate registration key for an instructor\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":" searchPage.clickExpandInstructorLinks();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" originalJoinLink \u003d searchPage.getInstructorJoinLink(instructor);"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" searchPage.regenerateInstructorKey(instructor);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" searchPage.verifyRegenerateInstructorKey(instructor, originalJoinLink);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" searchPage.waitForPageToLoad();"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Search for account request by email\");"},{"lineNumber":108,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" searchContent \u003d accountRequest.getEmail();"},{"lineNumber":110,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" searchPage.verifyAccountRequestRowContent(accountRequest);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" searchPage.verifyAccountRequestExpandedLinks(accountRequest);"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Search common search key\");"},{"lineNumber":116,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":117,"author":{"gitId":"-"},"content":" searchContent \u003d \"Course1\";"},{"lineNumber":118,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":120,"author":{"gitId":"-"},"content":" searchPage.verifyStudentRowContent(student, course, studentDetails, studentManageAccountLink,"},{"lineNumber":121,"author":{"gitId":"-"},"content":" studentHomePageLink);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" searchPage.verifyInstructorRowContent(instructor, course, instructorManageAccountLink,"},{"lineNumber":123,"author":{"gitId":"-"},"content":" instructorHomePageLink);"},{"lineNumber":124,"author":{"gitId":"-"},"content":" searchPage.verifyAccountRequestRowContent(accountRequest);"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Expand and collapse links\");"},{"lineNumber":127,"author":{"gitId":"-"},"content":" searchPage.verifyLinkExpansionButtons(student, instructor, accountRequest);"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Reset account request successful\");"},{"lineNumber":130,"author":{"gitId":"-"},"content":" searchContent \u003d accountRequest.getEmail();"},{"lineNumber":131,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":132,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":134,"author":{"gitId":"-"},"content":" searchPage.clickResetAccountRequestButton(accountRequest);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" assertNull(BACKDOOR.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()).getRegisteredAt());"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Delete account request successful\");"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" accountRequest \u003d sqlTestData.accountRequests.get(\"unregisteredInstructor1\");"},{"lineNumber":139,"author":{"gitId":"-"},"content":" searchContent \u003d accountRequest.getEmail();"},{"lineNumber":140,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":141,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":143,"author":{"gitId":"-"},"content":" searchPage.clickDeleteAccountRequestButton(accountRequest);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" assertNull(BACKDOOR.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()));"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" private String getExpectedStudentDetails(StudentAttributes student) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" return String.format(\"%s [%s] (%s)\", student.getCourse(),"},{"lineNumber":149,"author":{"gitId":"-"},"content":" student.getSection() \u003d\u003d null ? Const.DEFAULT_SECTION : student.getSection(), student.getTeam());"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" private String getExpectedStudentHomePageLink(StudentAttributes student) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" return student.isRegistered() ? createFrontendUrl(Const.WebPageURIs.STUDENT_HOME_PAGE)"},{"lineNumber":154,"author":{"gitId":"-"},"content":" .withUserId(student.getGoogleId())"},{"lineNumber":155,"author":{"gitId":"-"},"content":" .toAbsoluteString()"},{"lineNumber":156,"author":{"gitId":"-"},"content":" : \"\";"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" private String getExpectedStudentManageAccountLink(StudentAttributes student) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return student.isRegistered() ? createFrontendUrl(Const.WebPageURIs.ADMIN_ACCOUNTS_PAGE)"},{"lineNumber":161,"author":{"gitId":"-"},"content":" .withParam(Const.ParamsNames.INSTRUCTOR_ID, student.getGoogleId())"},{"lineNumber":162,"author":{"gitId":"-"},"content":" .toAbsoluteString()"},{"lineNumber":163,"author":{"gitId":"-"},"content":" : \"\";"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" private int getExpectedNumExpandedRows(StudentAttributes student) {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" int expectedNumExpandedRows \u003d 2;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" for (FeedbackSessionAttributes sessions : testData.feedbackSessions.values()) {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (sessions.getCourseId().equals(student.getCourse())) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" expectedNumExpandedRows +\u003d 1;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" if (sessions.getResultsVisibleFromTime().isBefore(Instant.now())) {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" expectedNumExpandedRows +\u003d 1;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return expectedNumExpandedRows;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" private String getExpectedInstructorHomePageLink(InstructorAttributes instructor) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" String googleId \u003d instructor.isRegistered() ? instructor.getGoogleId() : \"\";"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_HOME_PAGE)"},{"lineNumber":182,"author":{"gitId":"-"},"content":" .withUserId(googleId)"},{"lineNumber":183,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" private String getExpectedInstructorManageAccountLink(InstructorAttributes instructor) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" String googleId \u003d instructor.isRegistered() ? instructor.getGoogleId() : \"\";"},{"lineNumber":188,"author":{"gitId":"-"},"content":" return createFrontendUrl(Const.WebPageURIs.ADMIN_ACCOUNTS_PAGE)"},{"lineNumber":189,"author":{"gitId":"-"},"content":" .withParam(Const.ParamsNames.INSTRUCTOR_ID, googleId)"},{"lineNumber":190,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" @AfterClass"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" public void classTeardown() {"},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" for (AccountRequest request : sqlTestData.accountRequests.values()) {"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":" BACKDOOR.deleteAccountRequest(request.getEmail(), request.getInstitute());"},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":14,"-":186}},{"path":"src/e2e/java/teammates/e2e/cases/BaseE2ETestCase.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.nio.file.Files;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.nio.file.Paths;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.ITestContext;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountAttributes;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.DeadlineExtensionAttributes;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.exception.HttpRequestFailedException;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.AppPage;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.Browser;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.DevServerLoginPage;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.HomePage;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.e2e.util.BackDoor;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.e2e.util.EmailAccount;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCaseWithDatabaseAccess;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.test.FileHelper;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.test.ThreadHelper;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * Base class for all browser tests."},{"lineNumber":41,"author":{"gitId":"-"},"content":" *"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis type of test has no knowledge of the workings of the application,"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * and can only communicate via the UI or via {@link BackDoor} to obtain/transmit data."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"-"},"content":"public abstract class BaseE2ETestCase extends BaseTestCaseWithDatabaseAccess {"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Backdoor used to call APIs."},{"lineNumber":49,"author":{"gitId":"-"},"content":" */"},{"lineNumber":50,"author":{"gitId":"-"},"content":" protected static final BackDoor BACKDOOR \u003d BackDoor.getInstance();"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * Data to be used in the test."},{"lineNumber":54,"author":{"gitId":"-"},"content":" */"},{"lineNumber":55,"author":{"gitId":"-"},"content":" protected DataBundle testData;"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Sql Data to be used in the test."},{"lineNumber":59,"author":{"gitId":"-"},"content":" */"},{"lineNumber":60,"author":{"gitId":"-"},"content":" protected SqlDataBundle sqlTestData;"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" private Browser browser;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void baseClassSetup() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" prepareTestData();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" prepareBrowser();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Prepares the browser used for the current test."},{"lineNumber":72,"author":{"gitId":"-"},"content":" */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" protected void prepareBrowser() {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" browser \u003d new Browser();"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Prepares the test data used for the current test."},{"lineNumber":79,"author":{"gitId":"-"},"content":" */"},{"lineNumber":80,"author":{"gitId":"-"},"content":" protected abstract void prepareTestData();"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * Contains all the tests for the page."},{"lineNumber":84,"author":{"gitId":"-"},"content":" *"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis approach is chosen so that setup and teardown are only needed once per test page,"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * thereby saving time. While it necessitates failed tests to be restarted from the beginning,"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * test failures are rare and thus not causing significant overhead."},{"lineNumber":88,"author":{"gitId":"-"},"content":" */"},{"lineNumber":89,"author":{"gitId":"-"},"content":" protected abstract void testAll();"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":92,"author":{"gitId":"-"},"content":" protected String getTestDataFolder() {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" return TestProperties.TEST_DATA_FOLDER;"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void baseClassTearDown(ITestContext context) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" if (browser \u003d\u003d null) {"},{"lineNumber":99,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":" boolean isSuccess \u003d context.getFailedTests().getAllMethods()"},{"lineNumber":102,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":103,"author":{"gitId":"-"},"content":" .noneMatch(method -\u003e method.getConstructorOrMethod().getMethod().getDeclaringClass() \u003d\u003d this.getClass());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (isSuccess || TestProperties.CLOSE_BROWSER_ON_FAILURE) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" browser.close();"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Creates an {@link AppUrl} for the supplied {@code relativeUrl} parameter."},{"lineNumber":111,"author":{"gitId":"-"},"content":" * The base URL will be the value of test.app.frontend.url in test.properties."},{"lineNumber":112,"author":{"gitId":"-"},"content":" * {@code relativeUrl} must start with a \"/\"."},{"lineNumber":113,"author":{"gitId":"-"},"content":" */"},{"lineNumber":114,"author":{"gitId":"-"},"content":" protected static AppUrl createFrontendUrl(String relativeUrl) {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" return new AppUrl(TestProperties.TEAMMATES_FRONTEND_URL + relativeUrl);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * Creates an {@link AppUrl} for the supplied {@code relativeUrl} parameter."},{"lineNumber":120,"author":{"gitId":"-"},"content":" * The base URL will be the value of test.app.backend.url in test.properties."},{"lineNumber":121,"author":{"gitId":"-"},"content":" * {@code relativeUrl} must start with a \"/\"."},{"lineNumber":122,"author":{"gitId":"-"},"content":" */"},{"lineNumber":123,"author":{"gitId":"-"},"content":" protected static AppUrl createBackendUrl(String relativeUrl) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" return new AppUrl(TestProperties.TEAMMATES_BACKEND_URL + relativeUrl);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":128,"author":{"gitId":"-"},"content":" * Logs in to a page using the given credentials."},{"lineNumber":129,"author":{"gitId":"-"},"content":" */"},{"lineNumber":130,"author":{"gitId":"-"},"content":" protected \u003cT extends AppPage\u003e T loginToPage(AppUrl url, Class\u003cT\u003e typeOfPage, String userId) {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" // When not using dev server, Google blocks log in by automation."},{"lineNumber":132,"author":{"gitId":"-"},"content":" // To work around that, we inject the user cookie directly into the browser session."},{"lineNumber":133,"author":{"gitId":"-"},"content":" if (!TestProperties.isDevServer()) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // In order for the cookie injection to work, we need to be in the domain."},{"lineNumber":135,"author":{"gitId":"-"},"content":" // Use the home page to minimize the page load time."},{"lineNumber":136,"author":{"gitId":"-"},"content":" browser.goToUrl(TestProperties.TEAMMATES_FRONTEND_URL);"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" String cookieValue \u003d BACKDOOR.getUserCookie(userId);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" browser.addCookie(Const.SecurityConfig.AUTH_COOKIE_NAME, cookieValue, true, true);"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" return getNewPageInstance(url, typeOfPage);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" // This will be redirected to the dev server login page."},{"lineNumber":145,"author":{"gitId":"-"},"content":" browser.goToUrl(url.toAbsoluteString());"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" DevServerLoginPage loginPage \u003d AppPage.getNewPageInstance(browser, DevServerLoginPage.class);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" loginPage.loginAsUser(userId);"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" return getNewPageInstance(url, typeOfPage);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * Logs in to a page using admin credentials."},{"lineNumber":155,"author":{"gitId":"-"},"content":" */"},{"lineNumber":156,"author":{"gitId":"-"},"content":" protected \u003cT extends AppPage\u003e T loginAdminToPage(AppUrl url, Class\u003cT\u003e typeOfPage) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" return loginToPage(url, typeOfPage, TestProperties.TEST_ADMIN);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * Equivalent to clicking the \u0027logout\u0027 link in the top menu of the page."},{"lineNumber":162,"author":{"gitId":"-"},"content":" */"},{"lineNumber":163,"author":{"gitId":"-"},"content":" protected void logout() {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" AppUrl url \u003d createBackendUrl(Const.WebPageURIs.LOGOUT);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" if (!TestProperties.TEAMMATES_FRONTEND_URL.equals(TestProperties.TEAMMATES_BACKEND_URL)) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" url \u003d url.withParam(\"frontendUrl\", TestProperties.TEAMMATES_FRONTEND_URL);"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" browser.goToUrl(url.toAbsoluteString());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" AppPage.getNewPageInstance(browser, HomePage.class).waitForPageToLoad();"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * Deletes file with fileName from the downloads folder."},{"lineNumber":175,"author":{"gitId":"-"},"content":" */"},{"lineNumber":176,"author":{"gitId":"-"},"content":" protected void deleteDownloadsFile(String fileName) {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" String filePath \u003d TestProperties.TEST_DOWNLOADS_FOLDER + fileName;"},{"lineNumber":178,"author":{"gitId":"-"},"content":" FileHelper.deleteFile(filePath);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":182,"author":{"gitId":"-"},"content":" * Verifies downloaded file has correct fileName and contains expected content."},{"lineNumber":183,"author":{"gitId":"-"},"content":" */"},{"lineNumber":184,"author":{"gitId":"-"},"content":" protected void verifyDownloadedFile(String expectedFileName, List\u003cString\u003e expectedContent) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" String filePath \u003d TestProperties.TEST_DOWNLOADS_FOLDER + expectedFileName;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" int retryLimit \u003d TestProperties.TEST_TIMEOUT;"},{"lineNumber":187,"author":{"gitId":"-"},"content":" boolean actual \u003d Files.exists(Paths.get(filePath));"},{"lineNumber":188,"author":{"gitId":"-"},"content":" while (!actual \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" actual \u003d Files.exists(Paths.get(filePath));"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" String actualContent \u003d FileHelper.readFile(filePath);"},{"lineNumber":197,"author":{"gitId":"-"},"content":" for (String content : expectedContent) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" assertTrue(actualContent.contains(content));"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":202,"author":{"gitId":"-"},"content":" }"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * Visits the URL and gets the page object representation of the visited web page in the browser."},{"lineNumber":207,"author":{"gitId":"-"},"content":" */"},{"lineNumber":208,"author":{"gitId":"-"},"content":" protected \u003cT extends AppPage\u003e T getNewPageInstance(AppUrl url, Class\u003cT\u003e typeOfPage) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" browser.goToUrl(url.toAbsoluteString());"},{"lineNumber":210,"author":{"gitId":"-"},"content":" return AppPage.getNewPageInstance(browser, typeOfPage);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":214,"author":{"gitId":"-"},"content":" * Verifies that email with subject is found in inbox."},{"lineNumber":215,"author":{"gitId":"-"},"content":" * Email used must be an authentic gmail account."},{"lineNumber":216,"author":{"gitId":"-"},"content":" */"},{"lineNumber":217,"author":{"gitId":"-"},"content":" protected void verifyEmailSent(String email, String subject) {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" if (TestProperties.isDevServer() || !TestProperties.INCLUDE_EMAIL_VERIFICATION) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (!TestProperties.TEST_EMAIL.equals(email)) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" fail(\"Email verification is allowed only on preset test email.\");"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":" EmailAccount emailAccount \u003d new EmailAccount(email);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" emailAccount.getUserAuthenticated();"},{"lineNumber":227,"author":{"gitId":"-"},"content":" int retryLimit \u003d 5;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" boolean actual \u003d emailAccount.isRecentEmailWithSubjectPresent(subject, TestProperties.TEST_SENDER_EMAIL);"},{"lineNumber":229,"author":{"gitId":"-"},"content":" while (!actual \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":231,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" actual \u003d emailAccount.isRecentEmailWithSubjectPresent(subject, TestProperties.TEST_SENDER_EMAIL);"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }"},{"lineNumber":234,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":235,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":236,"author":{"gitId":"-"},"content":" fail(\"Failed to verify email sent:\" + e);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" AccountAttributes getAccount(String googleId) {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" return BACKDOOR.getAccount(googleId);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":245,"author":{"gitId":"-"},"content":" protected AccountAttributes getAccount(AccountAttributes account) {"},{"lineNumber":246,"author":{"gitId":"-"},"content":" return getAccount(account.getGoogleId());"},{"lineNumber":247,"author":{"gitId":"-"},"content":" }"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":" CourseAttributes getCourse(String courseId) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return BACKDOOR.getCourse(courseId);"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":254,"author":{"gitId":"-"},"content":" protected CourseAttributes getCourse(CourseAttributes course) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return getCourse(course.getId());"},{"lineNumber":256,"author":{"gitId":"-"},"content":" }"},{"lineNumber":257,"author":{"gitId":"-"},"content":""},{"lineNumber":258,"author":{"gitId":"-"},"content":" CourseAttributes getArchivedCourse(String instructorId, String courseId) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" return BACKDOOR.getArchivedCourse(instructorId, courseId);"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes getFeedbackQuestion(String courseId, String feedbackSessionName, int qnNumber) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackQuestion(courseId, feedbackSessionName, qnNumber);"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":267,"author":{"gitId":"-"},"content":" protected FeedbackQuestionAttributes getFeedbackQuestion(FeedbackQuestionAttributes fq) {"},{"lineNumber":268,"author":{"gitId":"-"},"content":" return getFeedbackQuestion(fq.getCourseId(), fq.getFeedbackSessionName(), fq.getQuestionNumber());"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" FeedbackResponseCommentAttributes getFeedbackResponseComment(String feedbackResponseId) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackResponseComment(feedbackResponseId);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":276,"author":{"gitId":"-"},"content":" protected FeedbackResponseCommentAttributes getFeedbackResponseComment(FeedbackResponseCommentAttributes frc) {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" return getFeedbackResponseComment(frc.getFeedbackResponseId());"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes getFeedbackResponse(String feedbackQuestionId, String giver, String recipient) {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackResponse(feedbackQuestionId, giver, recipient);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":285,"author":{"gitId":"-"},"content":" protected FeedbackResponseAttributes getFeedbackResponse(FeedbackResponseAttributes fr) {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" return getFeedbackResponse(fr.getFeedbackQuestionId(), fr.getGiver(), fr.getRecipient());"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes getFeedbackSession(String courseId, String feedbackSessionName) {"},{"lineNumber":290,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackSession(courseId, feedbackSessionName);"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":294,"author":{"gitId":"-"},"content":" protected FeedbackSessionAttributes getFeedbackSession(FeedbackSessionAttributes fs) {"},{"lineNumber":295,"author":{"gitId":"-"},"content":" return getFeedbackSession(fs.getCourseId(), fs.getFeedbackSessionName());"},{"lineNumber":296,"author":{"gitId":"-"},"content":" }"},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes getSoftDeletedSession(String feedbackSessionName, String instructorId) {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" return BACKDOOR.getSoftDeletedSession(feedbackSessionName, instructorId);"},{"lineNumber":300,"author":{"gitId":"-"},"content":" }"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":" InstructorAttributes getInstructor(String courseId, String instructorEmail) {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" return BACKDOOR.getInstructor(courseId, instructorEmail);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":307,"author":{"gitId":"-"},"content":" protected InstructorAttributes getInstructor(InstructorAttributes instructor) {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" return getInstructor(instructor.getCourseId(), instructor.getEmail());"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":312,"author":{"gitId":"-"},"content":" * Gets registration key for a given instructor."},{"lineNumber":313,"author":{"gitId":"-"},"content":" */"},{"lineNumber":314,"author":{"gitId":"-"},"content":" protected String getKeyForInstructor(String courseId, String instructorEmail) {"},{"lineNumber":315,"author":{"gitId":"-"},"content":" return getInstructor(courseId, instructorEmail).getKey();"},{"lineNumber":316,"author":{"gitId":"-"},"content":" }"},{"lineNumber":317,"author":{"gitId":"-"},"content":""},{"lineNumber":318,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":319,"author":{"gitId":"-"},"content":" protected StudentAttributes getStudent(StudentAttributes student) {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" return BACKDOOR.getStudent(student.getCourse(), student.getEmail());"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":324,"author":{"gitId":"-"},"content":" * Gets registration key for a given student."},{"lineNumber":325,"author":{"gitId":"-"},"content":" */"},{"lineNumber":326,"author":{"gitId":"-"},"content":" protected String getKeyForStudent(StudentAttributes student) {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" return getStudent(student).getKey();"},{"lineNumber":328,"author":{"gitId":"-"},"content":" }"},{"lineNumber":329,"author":{"gitId":"-"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":331,"author":{"gitId":"-"},"content":" protected AccountRequestAttributes getAccountRequest(AccountRequestAttributes accountRequest) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" return BACKDOOR.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" NotificationAttributes getNotification(String notificationId) {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" return BACKDOOR.getNotification(notificationId);"},{"lineNumber":337,"author":{"gitId":"-"},"content":" }"},{"lineNumber":338,"author":{"gitId":"-"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":340,"author":{"gitId":"-"},"content":" protected NotificationAttributes getNotification(NotificationAttributes notification) {"},{"lineNumber":341,"author":{"gitId":"-"},"content":" return getNotification(notification.getNotificationId());"},{"lineNumber":342,"author":{"gitId":"-"},"content":" }"},{"lineNumber":343,"author":{"gitId":"-"},"content":""},{"lineNumber":344,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":345,"author":{"gitId":"-"},"content":" protected DeadlineExtensionAttributes getDeadlineExtension(DeadlineExtensionAttributes deadlineExtension) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" return BACKDOOR.getDeadlineExtension("},{"lineNumber":347,"author":{"gitId":"-"},"content":" deadlineExtension.getCourseId(), deadlineExtension.getFeedbackSessionName(),"},{"lineNumber":348,"author":{"gitId":"-"},"content":" deadlineExtension.getUserEmail(), deadlineExtension.getIsInstructor());"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":350,"author":{"gitId":"-"},"content":""},{"lineNumber":351,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":352,"author":{"gitId":"-"},"content":" protected boolean doRemoveAndRestoreDataBundle(DataBundle testData) {"},{"lineNumber":353,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":354,"author":{"gitId":"-"},"content":" BACKDOOR.removeAndRestoreDataBundle(testData);"},{"lineNumber":355,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":356,"author":{"gitId":"-"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":357,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":358,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":359,"author":{"gitId":"-"},"content":" }"},{"lineNumber":360,"author":{"gitId":"-"},"content":" }"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":363,"author":{"gitId":"-"},"content":" protected SqlDataBundle doRemoveAndRestoreSqlDataBundle(SqlDataBundle testData) {"},{"lineNumber":364,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":365,"author":{"gitId":"-"},"content":" return BACKDOOR.removeAndRestoreSqlDataBundle(testData);"},{"lineNumber":366,"author":{"gitId":"-"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":367,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":368,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":" }"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":373,"author":{"gitId":"-"},"content":" protected boolean doPutDocuments(DataBundle testData) {"},{"lineNumber":374,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":375,"author":{"gitId":"-"},"content":" BACKDOOR.putDocuments(testData);"},{"lineNumber":376,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":377,"author":{"gitId":"-"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":379,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":380,"author":{"gitId":"-"},"content":" }"},{"lineNumber":381,"author":{"gitId":"-"},"content":" }"},{"lineNumber":382,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":383,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":384,"author":{"gitId":"domoberzin"},"content":" protected boolean doPutDocumentsSql(SqlDataBundle testData) {"},{"lineNumber":385,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":386,"author":{"gitId":"domoberzin"},"content":" BACKDOOR.putSqlDocuments(testData);"},{"lineNumber":387,"author":{"gitId":"domoberzin"},"content":" return true;"},{"lineNumber":388,"author":{"gitId":"domoberzin"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":389,"author":{"gitId":"domoberzin"},"content":" e.printStackTrace();"},{"lineNumber":390,"author":{"gitId":"domoberzin"},"content":" return false;"},{"lineNumber":391,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":392,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":393,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":11,"-":382}},{"path":"src/e2e/java/teammates/e2e/cases/InstructorNotificationsPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import java.util.Set;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import java.util.stream.Collectors;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import java.util.stream.Stream;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorNotificationsPage;"},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_NOTIFICATIONS_PAGE}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class InstructorNotificationsPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/InstructorNotificationsPageE2ETest.json\");"},{"lineNumber":26,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" sqlTestData \u003d removeAndRestoreSqlDataBundle("},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":" loadSqlDataBundle(\"/InstructorNotificationsPageE2ETest_SqlEntities.json\"));"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" Account account \u003d sqlTestData.accounts.get(\"INotifs.instr\");"},{"lineNumber":35,"author":{"gitId":"-"},"content":" AppUrl notificationsPageUrl \u003d createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_NOTIFICATIONS_PAGE);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" InstructorNotificationsPage notificationsPage \u003d loginToPage(notificationsPageUrl, InstructorNotificationsPage.class,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" account.getGoogleId());"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" ______TS(\"verify that only active notifications with correct target user are shown\");"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" Notification[] notShownNotifications \u003d {"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification2\"),"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"expiredNotification1\"),"},{"lineNumber":43,"author":{"gitId":"-"},"content":" };"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" Notification[] shownNotifications \u003d {"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification1\"),"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification3\"),"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification4\"),"},{"lineNumber":48,"author":{"gitId":"-"},"content":" };"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" Notification[] readNotifications \u003d {"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification4\"),"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" Set\u003cString\u003e readNotificationsIds \u003d Stream.of(readNotifications)"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":" .map(readNotification -\u003e readNotification.getId().toString())"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" .collect(Collectors.toSet());"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotShownNotifications(notShownNotifications);"},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" notificationsPage.verifyShownNotifications(shownNotifications, readNotificationsIds);"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" ______TS(\"mark notification as read\");"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" Notification notificationToMarkAsRead \u003d sqlTestData.notifications.get(\"notification3\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" notificationsPage.markNotificationAsRead(notificationToMarkAsRead);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" notificationsPage.verifyStatusMessage(\"Notification marked as read.\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" // Verify that account\u0027s readNotifications attribute is updated"},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" AccountData accountFromDb \u003d BACKDOOR.getAccountData(account.getGoogleId());"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" assertTrue(accountFromDb.getReadNotifications().containsKey(notificationToMarkAsRead.getId().toString()));"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" ______TS(\"notification banner is not visible\");"},{"lineNumber":71,"author":{"gitId":"-"},"content":" assertFalse(notificationsPage.isBannerVisible());"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public void classTeardown() {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" for (NotificationAttributes notification : testData.notifications.values()) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" BACKDOOR.deleteNotification(notification.getNotificationId());"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":28,"-":53}},{"path":"src/e2e/java/teammates/e2e/cases/InstructorSearchPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorCourseStudentDetailsEditPage;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorCourseStudentDetailsViewPage;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorSearchPage;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorStudentRecordsPage;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SEARCH_PAGE}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class InstructorSearchPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" sqlTestData \u003d removeAndRestoreSqlDataBundle("},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" loadSqlDataBundle(\"/InstructorSearchPageE2ETest_SqlEntities.json\"));"},{"lineNumber":30,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/InstructorSearchPageE2ETest.json\");"},{"lineNumber":31,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" putDocuments(testData);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" String instructorId \u003d sqlTestData.accounts.get(\"instructor1OfCourse1\").getGoogleId();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" AppUrl searchPageUrl \u003d createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_SEARCH_PAGE);"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" InstructorSearchPage searchPage \u003d loginToPage(searchPageUrl, InstructorSearchPage.class, instructorId);"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" ______TS(\"cannot click search button if no search term is entered\");"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" searchPage.search(\"\");"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" ______TS(\"search with no result\");"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" searchPage.search(\"thiswillnothitanything\");"},{"lineNumber":54,"author":{"gitId":"-"},"content":" searchPage.verifyStatusMessage(\"No results found.\");"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" ______TS(\"search for students\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" searchPage.search(\"student2\");"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" CourseAttributes course1 \u003d testData.courses.get(\"typicalCourse1\");"},{"lineNumber":61,"author":{"gitId":"-"},"content":" CourseAttributes course2 \u003d testData.courses.get(\"typicalCourse2\");"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" StudentAttributes[] studentsInCourse1 \u003d {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" testData.students.get(\"student2.2InCourse1\"),"},{"lineNumber":65,"author":{"gitId":"-"},"content":" testData.students.get(\"student2InCourse1\"),"},{"lineNumber":66,"author":{"gitId":"-"},"content":" };"},{"lineNumber":67,"author":{"gitId":"-"},"content":" StudentAttributes[] studentsInCourse2 \u003d {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" testData.students.get(\"student2.2InCourse2\"),"},{"lineNumber":69,"author":{"gitId":"-"},"content":" testData.students.get(\"student2InCourse2\"),"},{"lineNumber":70,"author":{"gitId":"-"},"content":" };"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" Map\u003cString, StudentAttributes[]\u003e courseIdToStudents \u003d new HashMap\u003c\u003e();"},{"lineNumber":73,"author":{"gitId":"-"},"content":" courseIdToStudents.put(course1.getId(), studentsInCourse1);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" courseIdToStudents.put(course2.getId(), studentsInCourse2);"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" Map\u003cString, CourseAttributes\u003e courseIdToCourse \u003d new HashMap\u003c\u003e();"},{"lineNumber":77,"author":{"gitId":"-"},"content":" courseIdToCourse.put(course1.getId(), course1);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" courseIdToCourse.put(course2.getId(), course2);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" searchPage.verifyStudentDetails(courseIdToCourse, courseIdToStudents);"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" ______TS(\"link: view student details page\");"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" StudentAttributes studentToView \u003d testData.students.get(\"student2.2InCourse1\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":" String studentEmail \u003d studentToView.getEmail();"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" InstructorCourseStudentDetailsViewPage studentDetailsViewPage \u003d"},{"lineNumber":88,"author":{"gitId":"-"},"content":" searchPage.clickViewStudent(course1, studentEmail);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" studentDetailsViewPage.verifyIsCorrectPage(course1.getId(), studentEmail);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" studentDetailsViewPage.closeCurrentWindowAndSwitchToParentWindow();"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" ______TS(\"link: edit student details page\");"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" InstructorCourseStudentDetailsEditPage studentDetailsEditPage \u003d"},{"lineNumber":95,"author":{"gitId":"-"},"content":" searchPage.clickEditStudent(course1, studentEmail);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" studentDetailsEditPage.verifyIsCorrectPage(course1.getId(), studentEmail);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" studentDetailsEditPage.closeCurrentWindowAndSwitchToParentWindow();"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" ______TS(\"link: view all records page\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" InstructorStudentRecordsPage studentRecordsPage \u003d"},{"lineNumber":102,"author":{"gitId":"-"},"content":" searchPage.clickViewAllRecords(course1, studentEmail);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" studentRecordsPage.verifyIsCorrectPage(course1.getId(), studentToView.getName());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" studentRecordsPage.closeCurrentWindowAndSwitchToParentWindow();"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" ______TS(\"action: delete student\");"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" StudentAttributes studentToDelete \u003d testData.students.get(\"student2InCourse2\");"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" searchPage.deleteStudent(course2, studentToDelete.getEmail());"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" StudentAttributes[] studentsAfterDelete \u003d {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" testData.students.get(\"student2.2InCourse2\"),"},{"lineNumber":114,"author":{"gitId":"-"},"content":" };"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" searchPage.verifyStudentDetails(course2, studentsAfterDelete);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" verifyAbsentInDatabase(studentToDelete);"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":3,"-":118}},{"path":"src/e2e/java/teammates/e2e/cases/NotificationBannerE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.StudentHomePage;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * SUT: The reusable notification banner, which can be displayed across many pages."},{"lineNumber":15,"author":{"gitId":"-"},"content":" * {@link Const.WebPageURIs#STUDENT_HOME_PAGE} is used to test the behaviour of the banner in this case,"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * {@link Const.WebPageURIs#STUDENT_NOTIFICATIONS_PAGE}"},{"lineNumber":17,"author":{"gitId":"-"},"content":" */"},{"lineNumber":18,"author":{"gitId":"-"},"content":"public class NotificationBannerE2ETest extends BaseE2ETestCase {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":20,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/NotificationBannerE2ETest.json\");"},{"lineNumber":22,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":" sqlTestData \u003d removeAndRestoreSqlDataBundle("},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":" loadSqlDataBundle(\"/NotificationBannerE2ETest_SqlEntities.json\"));"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":28,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"-"},"content":" protected void testAll() {"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d sqlTestData.accounts.get(\"NotifBanner.student\");"},{"lineNumber":31,"author":{"gitId":"-"},"content":" AppUrl studentHomePageUrl \u003d createFrontendUrl(Const.WebPageURIs.STUDENT_HOME_PAGE);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" StudentHomePage studentHomePage \u003d loginToPage(studentHomePageUrl, StudentHomePage.class,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" account.getGoogleId());"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" ______TS(\"verify active notification with correct information is shown\");"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertTrue(studentHomePage.isBannerVisible());"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" ______TS(\"close notification\");"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // After user closes a notification banner, it should not appear till user refreshes page"},{"lineNumber":40,"author":{"gitId":"-"},"content":" studentHomePage.clickCloseNotificationBannerButton();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertFalse(studentHomePage.isBannerVisible());"},{"lineNumber":42,"author":{"gitId":"-"},"content":" studentHomePage.reloadPage();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertTrue(studentHomePage.isBannerVisible());"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" ______TS(\"mark notification as read\");"},{"lineNumber":46,"author":{"gitId":"-"},"content":" studentHomePage.reloadPage();"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assertTrue(studentHomePage.isBannerVisible());"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" String notificationId \u003d studentHomePage.getNotificationId();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" studentHomePage.clickMarkAsReadButton();"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" AccountData accountFromDb \u003d BACKDOOR.getAccountData(account.getGoogleId());"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" studentHomePage.verifyStatusMessage(\"Notification marked as read.\");"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertFalse(studentHomePage.isBannerVisible());"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" assertTrue(accountFromDb.getReadNotifications().containsKey(notificationId));"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public void classTeardown() {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" for (NotificationAttributes notification : testData.notifications.values()) {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" BACKDOOR.deleteNotification(notification.getNotificationId());"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":9,"-":56}},{"path":"src/e2e/java/teammates/e2e/cases/axe/InstructorSearchPageAxeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases.axe;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import com.deque.html.axecore.results.Results;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorSearchPage;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SEARCH_PAGE}."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class InstructorSearchPageAxeTest extends BaseAxeTestCase {"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":18,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" }"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" sqlTestData \u003d loadSqlDataBundle(\"/InstructorSearchPageE2ETest_SqlEntities.json\");"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/InstructorSearchPageE2ETest.json\");"},{"lineNumber":25,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":26,"author":{"gitId":"-"},"content":" putDocuments(testData);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":30,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" AppUrl searchPageUrl \u003d createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_SEARCH_PAGE);"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" InstructorSearchPage searchPage \u003d loginToPage(searchPageUrl, InstructorSearchPage.class,"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" sqlTestData.accounts.get(\"instructor1OfCourse1\").getGoogleId());"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" searchPage.search(\"student2\");"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" Results results \u003d getAxeBuilder().analyze(searchPage.getBrowser().getDriver());"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertTrue(formatViolations(results), results.violationFree());"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":2,"-":45}},{"path":"src/e2e/java/teammates/e2e/cases/sql/FeedbackMcqQuestionE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dishenggg"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import java.util.stream.Collectors;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqQuestionDetails;"},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqResponseDetails;"},{"lineNumber":11,"author":{"gitId":"dishenggg"},"content":"import teammates.e2e.pageobjects.FeedbackSubmitPage;"},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"import teammates.e2e.pageobjects.InstructorFeedbackEditPage;"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"dishenggg"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SESSION_EDIT_PAGE},"},{"lineNumber":18,"author":{"gitId":"dishenggg"},"content":" * {@link Const.WebPageURIs#SESSION_SUBMISSION_PAGE}"},{"lineNumber":19,"author":{"gitId":"dishenggg"},"content":" * specifically for MCQ questions."},{"lineNumber":20,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":21,"author":{"gitId":"dishenggg"},"content":"public class FeedbackMcqQuestionE2ETest extends BaseFeedbackQuestionE2ETest {"},{"lineNumber":22,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":23,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"dishenggg"},"content":" protected void prepareTestData() {"},{"lineNumber":25,"author":{"gitId":"dishenggg"},"content":" testData \u003d removeAndRestoreDataBundle(loadSqlDataBundle(\"/FeedbackMcqQuestionE2ESqlTest.json\"));"},{"lineNumber":26,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" instructor \u003d testData.instructors.get(\"instructor\");"},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":" course \u003d testData.courses.get(\"course\");"},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":" feedbackSession \u003d testData.feedbackSessions.get(\"openSession\");"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":" student \u003d testData.students.get(\"alice.tmms@FMcqQn.CS2104\");"},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":" public void testAll() {"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" testEditPage();"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" logout();"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":" testSubmitPage();"},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":" protected void testEditPage() {"},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":" InstructorFeedbackEditPage feedbackEditPage \u003d loginToFeedbackEditPage();"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion loadedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\");"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" FeedbackMcqQuestionDetails questionDetails \u003d (FeedbackMcqQuestionDetails) loadedQuestion"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" .getQuestionDetailsCopy();"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMcqQuestionDetails(1, questionDetails);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" ______TS(\"add new question\");"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" // add new question exactly like loaded question"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":" loadedQuestion.setQuestionNumber(2);"},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.addMcqQuestion(loadedQuestion);"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMcqQuestionDetails(2, questionDetails);"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" ______TS(\"copy question\");"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion copiedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForSecondSession\");"},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":" questionDetails \u003d (FeedbackMcqQuestionDetails) copiedQuestion.getQuestionDetailsCopy();"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.copyQuestion(copiedQuestion.getCourseId(),"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.setFeedbackSession(feedbackSession);"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.setQuestionNumber(3);"},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMcqQuestionDetails(3, questionDetails);"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(copiedQuestion);"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":" ______TS(\"edit question\");"},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":" questionDetails \u003d (FeedbackMcqQuestionDetails) loadedQuestion.getQuestionDetailsCopy();"},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":" questionDetails.setHasAssignedWeights(false);"},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMcqWeights(new ArrayList\u003c\u003e());"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" questionDetails.setOtherEnabled(false);"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" questionDetails.setQuestionDropdownEnabled(false);"},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMcqOtherWeight(0);"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e choices \u003d questionDetails.getMcqChoices();"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" choices.add(\"Edited choice\");"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMcqChoices(choices);"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" loadedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\").makeDeepCopy(feedbackSession);"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":" loadedQuestion.setQuestionDetails(questionDetails);"},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.editMcqQuestion(2, questionDetails);"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.waitForPageToLoad();"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMcqQuestionDetails(2, questionDetails);"},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":" protected void testSubmitPage() {"},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" FeedbackSubmitPage feedbackSubmitPage \u003d loginToFeedbackSubmitPage();"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":93,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":94,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion question \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\");"},{"lineNumber":95,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.verifyMcqQuestion(1, \"\","},{"lineNumber":96,"author":{"gitId":"dishenggg"},"content":" (FeedbackMcqQuestionDetails) question.getQuestionDetailsCopy());"},{"lineNumber":97,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":98,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify question with generated options\");"},{"lineNumber":99,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.verifyGeneratedMcqQuestion(3, \"\", getGeneratedStudentOptions());"},{"lineNumber":100,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":101,"author":{"gitId":"dishenggg"},"content":" ______TS(\"submit response\");"},{"lineNumber":102,"author":{"gitId":"dishenggg"},"content":" FeedbackResponse response \u003d getResponse(question, false, \"UI\");"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.fillMcqResponse(1, \"\", response);"},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":107,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":108,"author":{"gitId":"dishenggg"},"content":" // ______TS(\"check previous response\");"},{"lineNumber":109,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":110,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.verifyMcqResponse(1, \"\", response);"},{"lineNumber":111,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":112,"author":{"gitId":"dishenggg"},"content":" // ______TS(\"edit response\");"},{"lineNumber":113,"author":{"gitId":"dishenggg"},"content":" // response \u003d getResponse(questionId, true, \"This is the edited response.\");"},{"lineNumber":114,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.fillMcqResponse(1, \"\", response);"},{"lineNumber":115,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":116,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":117,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":118,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.verifyMcqResponse(1, \"\", response);"},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":" private List\u003cString\u003e getGeneratedStudentOptions() {"},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" return testData.students.values().stream()"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":" .filter(s -\u003e s.getCourse().equals(student.getCourse()))"},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" .map(s -\u003e s.getName() + \" (\" + s.getTeam().getName() + \")\")"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" .collect(Collectors.toList());"},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":" private FeedbackResponse getResponse(FeedbackQuestion feedbackQuestion, boolean isOther, String answer) {"},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" FeedbackMcqResponseDetails details \u003d new FeedbackMcqResponseDetails();"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":" if (isOther) {"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" details.setOther(true);"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":" details.setOtherFieldContent(answer);"},{"lineNumber":134,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" details.setAnswer(answer);"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":" return FeedbackResponse.makeResponse(feedbackQuestion, student.getEmail(), null, instructor.getEmail(), null,"},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":" details);"},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":140,"author":{"gitId":"dishenggg"},"content":"}"}],"authorContributionMap":{"dishenggg":140}},{"path":"src/e2e/java/teammates/e2e/cases/sql/FeedbackMsqQuestionE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dishenggg"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import java.util.Arrays;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import java.util.stream.Collectors;"},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":11,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqResponseDetails;"},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.Const;"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":"import teammates.e2e.pageobjects.FeedbackSubmitPage;"},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":"import teammates.e2e.pageobjects.InstructorFeedbackEditPage;"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":17,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":19,"author":{"gitId":"dishenggg"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"dishenggg"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SESSION_EDIT_PAGE},"},{"lineNumber":21,"author":{"gitId":"dishenggg"},"content":" * {@link Const.WebPageURIs#SESSION_SUBMISSION_PAGE}"},{"lineNumber":22,"author":{"gitId":"dishenggg"},"content":" * specifically for msq questions."},{"lineNumber":23,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":24,"author":{"gitId":"dishenggg"},"content":"public class FeedbackMsqQuestionE2ETest extends BaseFeedbackQuestionE2ETest {"},{"lineNumber":25,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":26,"author":{"gitId":"dishenggg"},"content":" protected void prepareTestData() {"},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" testData \u003d removeAndRestoreDataBundle(loadSqlDataBundle(\"/FeedbackMsqQuestionE2ESqlTest.json\"));"},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":" instructor \u003d testData.instructors.get(\"instructor\");"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":" course \u003d testData.courses.get(\"course\");"},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" feedbackSession \u003d testData.feedbackSessions.get(\"openSession\");"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":" student \u003d testData.students.get(\"alice.tmms@FMsqQn.CS2104\");"},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" public void testAll() {"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":" testEditPage();"},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":" logout();"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" testSubmitPage();"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" protected void testEditPage() {"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" InstructorFeedbackEditPage feedbackEditPage \u003d loginToFeedbackEditPage();"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion loadedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\")"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" .makeDeepCopy(feedbackSession);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqQuestionDetails questionDetails \u003d (FeedbackMsqQuestionDetails) loadedQuestion"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" .getQuestionDetailsCopy();"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMsqQuestionDetails(1, questionDetails);"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" ______TS(\"add new question\");"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":" // add new question exactly like loaded question"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" loadedQuestion.setQuestionNumber(2);"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.addMsqQuestion(loadedQuestion);"},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMsqQuestionDetails(2, questionDetails);"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" ______TS(\"copy question\");"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion copiedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForSecondSession\");"},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" questionDetails \u003d (FeedbackMsqQuestionDetails) copiedQuestion.getQuestionDetailsCopy();"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.copyQuestion(copiedQuestion.getCourseId(),"},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.setFeedbackSession(feedbackSession);"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.setQuestionNumber(3);"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMsqQuestionDetails(3, questionDetails);"},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(copiedQuestion);"},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":" ______TS(\"edit question\");"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" questionDetails \u003d (FeedbackMsqQuestionDetails) loadedQuestion.getQuestionDetailsCopy();"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" questionDetails.setHasAssignedWeights(false);"},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMsqWeights(new ArrayList\u003c\u003e());"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" questionDetails.setOtherEnabled(false);"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMsqOtherWeight(0);"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMaxSelectableChoices(Const.POINTS_NO_VALUE);"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e choices \u003d questionDetails.getMsqChoices();"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":" choices.add(\"Edited choice\");"},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMsqChoices(choices);"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" loadedQuestion.setQuestionDetails(questionDetails);"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.editMsqQuestion(2, questionDetails);"},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.waitForPageToLoad();"},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMsqQuestionDetails(2, questionDetails);"},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":" protected void testSubmitPage() {"},{"lineNumber":93,"author":{"gitId":"dishenggg"},"content":" FeedbackSubmitPage feedbackSubmitPage \u003d loginToFeedbackSubmitPage();"},{"lineNumber":94,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":95,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":96,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion question \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\");"},{"lineNumber":97,"author":{"gitId":"dishenggg"},"content":" Student receiver \u003d testData.students.get(\"benny.tmms@FMsqQn.CS2104\");"},{"lineNumber":98,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.verifyMsqQuestion(1, receiver.getName(),"},{"lineNumber":99,"author":{"gitId":"dishenggg"},"content":" (FeedbackMsqQuestionDetails) question.getQuestionDetailsCopy());"},{"lineNumber":100,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":101,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question with generated options\");"},{"lineNumber":102,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion generatedQn \u003d testData.feedbackQuestions.get(\"qn1ForSecondSession\");"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.verifyGeneratedMsqQuestion(3, \"\","},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":" (FeedbackMsqQuestionDetails) generatedQn.getQuestionDetailsCopy(), getGeneratedTeams());"},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":" ______TS(\"submit response\");"},{"lineNumber":107,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e answers \u003d Arrays.asList(\"Leadership\", \"This is the other response.\");"},{"lineNumber":108,"author":{"gitId":"dishenggg"},"content":" FeedbackResponse response \u003d getResponse(question, receiver, answers.get(answers.size() - 1), answers);"},{"lineNumber":109,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.fillMsqResponse(1, receiver.getName(), response);"},{"lineNumber":110,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":111,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":112,"author":{"gitId":"dishenggg"},"content":" // TODO: uncomment when SubmitFeedbackResponse is working"},{"lineNumber":113,"author":{"gitId":"dishenggg"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":114,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":115,"author":{"gitId":"dishenggg"},"content":" // ______TS(\"check previous response\");"},{"lineNumber":116,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":117,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.verifyMsqResponse(1, receiver.getName(), response);"},{"lineNumber":118,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":" // ______TS(\"edit response\");"},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" // answers \u003d Arrays.asList(\"\");"},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":" // response \u003d getResponse(question, receiver, \"\", answers);"},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.fillMsqResponse(1, receiver.getName(), response);"},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.verifyMsqResponse(1, receiver.getName(), response);"},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" private List\u003cString\u003e getGeneratedTeams() {"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":" return testData.students.values().stream()"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" .filter(s -\u003e s.getCourse().equals(student.getCourse()))"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":" .map(s -\u003e s.getTeam().getName())"},{"lineNumber":134,"author":{"gitId":"dishenggg"},"content":" .distinct()"},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" .collect(Collectors.toList());"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":" private FeedbackResponse getResponse(FeedbackQuestion feedbackQuestion, Student receiver, String other,"},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e answers) {"},{"lineNumber":140,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqResponseDetails details \u003d new FeedbackMsqResponseDetails();"},{"lineNumber":141,"author":{"gitId":"dishenggg"},"content":" if (!other.isEmpty()) {"},{"lineNumber":142,"author":{"gitId":"dishenggg"},"content":" details.setOther(true);"},{"lineNumber":143,"author":{"gitId":"dishenggg"},"content":" details.setOtherFieldContent(other);"},{"lineNumber":144,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":145,"author":{"gitId":"dishenggg"},"content":" details.setAnswers(answers);"},{"lineNumber":146,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":147,"author":{"gitId":"dishenggg"},"content":" return FeedbackResponse.makeResponse(feedbackQuestion, student.getEmail(), student.getSection(),"},{"lineNumber":148,"author":{"gitId":"dishenggg"},"content":" receiver.getEmail(), receiver.getSection(), details);"},{"lineNumber":149,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":150,"author":{"gitId":"dishenggg"},"content":"}"}],"authorContributionMap":{"dishenggg":150}},{"path":"src/e2e/java/teammates/e2e/cases/sql/FeedbackRankOptionQuestionE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsQuestionDetails;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsResponseDetails;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.questions.FeedbackRankQuestionDetails;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import teammates.e2e.pageobjects.FeedbackSubmitPage;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import teammates.e2e.pageobjects.InstructorFeedbackEditPage;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SESSION_EDIT_PAGE},"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * {@link Const.WebPageURIs#SESSION_SUBMISSION_PAGE}"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" * specifically for RankOption questions."},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"public class FeedbackRankOptionQuestionE2ETest extends BaseFeedbackQuestionE2ETest {"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" protected void prepareTestData() {"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" testData \u003d removeAndRestoreDataBundle(loadSqlDataBundle(\"/FeedbackRankOptionQuestionE2ESqlTest.json\"));"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" instructor \u003d testData.instructors.get(\"instructor\");"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" course \u003d testData.courses.get(\"course\");"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" feedbackSession \u003d testData.feedbackSessions.get(\"openSession\");"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" student \u003d testData.students.get(\"alice.tmms@FRankOptQn.CS2104\");"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" public void testAll() {"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" testEditPage();"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" logout();"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" testSubmitPage();"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" protected void testEditPage() {"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" InstructorFeedbackEditPage feedbackEditPage \u003d loginToFeedbackEditPage();"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" FeedbackQuestion loadedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\")"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" .makeDeepCopy(feedbackSession);"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" FeedbackRankOptionsQuestionDetails questionDetails \u003d (FeedbackRankOptionsQuestionDetails) loadedQuestion"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" .getQuestionDetailsCopy();"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.verifyRankQuestionDetails(1, questionDetails);"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"add new question\");"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" // add new question exactly like loaded question"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" loadedQuestion.setQuestionNumber(2);"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.addRankOptionsQuestion(loadedQuestion);"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.verifyRankQuestionDetails(2, questionDetails);"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"copy question\");"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" FeedbackQuestion copiedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForSecondSession\");"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" questionDetails \u003d (FeedbackRankOptionsQuestionDetails) copiedQuestion.getQuestionDetailsCopy();"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.copyQuestion(copiedQuestion.getCourseId(),"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" copiedQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" copiedQuestion.setFeedbackSession(feedbackSession);"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" copiedQuestion.setQuestionNumber(3);"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.verifyRankQuestionDetails(3, questionDetails);"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" verifyPresentInDatabase(copiedQuestion);"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"edit question\");"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" questionDetails \u003d (FeedbackRankOptionsQuestionDetails) loadedQuestion.getQuestionDetailsCopy();"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" List\u003cString\u003e options \u003d questionDetails.getOptions();"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" options.remove(0);"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" options.set(1, \"Edited option.\");"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" questionDetails.setOptions(options);"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" questionDetails.setAreDuplicatesAllowed(true);"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" questionDetails.setMaxOptionsToBeRanked(Const.POINTS_NO_VALUE);"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" questionDetails.setMinOptionsToBeRanked(1);"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" loadedQuestion.setQuestionDetails(questionDetails);"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.editRankQuestion(2, questionDetails);"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.waitForPageToLoad();"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.verifyRankQuestionDetails(2, questionDetails);"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" protected void testSubmitPage() {"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" FeedbackSubmitPage feedbackSubmitPage \u003d loginToFeedbackSubmitPage();"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" FeedbackQuestion question \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\");"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" Student receiver \u003d testData.students.get(\"benny.tmms@FRankOptQn.CS2104\");"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" feedbackSubmitPage.verifyRankQuestion(1, receiver.getName(),"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" (FeedbackRankQuestionDetails) question.getQuestionDetailsCopy());"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"submit response\");"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponse response \u003d getResponse(question, receiver, Arrays.asList(2, 1, 3,"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" Const.POINTS_NOT_SUBMITTED));"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" feedbackSubmitPage.fillRankOptionResponse(1, receiver.getName(), response);"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" // ______TS(\"check previous response\");"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage.verifyRankOptionResponse(1, receiver.getName(), response);"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" // ______TS(\"edit response\");"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" // response \u003d getResponse(questionId, receiver,"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" // Arrays.asList(Const.POINTS_NOT_SUBMITTED, 1, 3, 2));"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage.fillRankOptionResponse(1, receiver.getName(), response);"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage.verifyRankOptionResponse(1, receiver.getName(), response);"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" private FeedbackResponse getResponse(FeedbackQuestion question, Student receiver, List\u003cInteger\u003e answers) {"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" FeedbackRankOptionsResponseDetails details \u003d new FeedbackRankOptionsResponseDetails();"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" details.setAnswers(answers);"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" return FeedbackResponse.makeResponse(question, student.getEmail(), null, receiver.getEmail(), null, details);"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":128}},{"path":"src/e2e/java/teammates/e2e/cases/sql/InstructorNotificationsPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import java.util.Set;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":"import java.util.stream.Collectors;"},{"lineNumber":5,"author":{"gitId":"yuanxi1"},"content":"import java.util.stream.Stream;"},{"lineNumber":6,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"yuanxi1"},"content":"import teammates.e2e.pageobjects.InstructorNotificationsPage;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":15,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_NOTIFICATIONS_PAGE}."},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":20,"author":{"gitId":"yuanxi1"},"content":"public class InstructorNotificationsPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":21,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":" protected void prepareTestData() {"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":" testData \u003d loadSqlDataBundle(\"/InstructorNotificationsPageE2ESqlTest.json\");"},{"lineNumber":25,"author":{"gitId":"yuanxi1"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":26,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":29,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" protected void testAll() {"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d testData.accounts.get(\"INotifs.instr\");"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":" AppUrl notificationsPageUrl \u003d createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_NOTIFICATIONS_PAGE);"},{"lineNumber":33,"author":{"gitId":"yuanxi1"},"content":" InstructorNotificationsPage notificationsPage \u003d loginToPage(notificationsPageUrl, InstructorNotificationsPage.class,"},{"lineNumber":34,"author":{"gitId":"yuanxi1"},"content":" account.getGoogleId());"},{"lineNumber":35,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"verify that only active notifications with correct target user are shown\");"},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":" Notification[] notShownNotifications \u003d {"},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification2\"),"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"expiredNotification1\"),"},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" Notification[] shownNotifications \u003d {"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification1\"),"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification3\"),"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification4\"),"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" Notification[] readNotifications \u003d {"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification4\"),"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" Set\u003cString\u003e readNotificationsIds \u003d Stream.of(readNotifications)"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" .map(readNotification -\u003e readNotification.getId().toString())"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" .collect(Collectors.toSet());"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" notificationsPage.verifyNotShownNotifications(notShownNotifications);"},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":" notificationsPage.verifyShownNotifications(shownNotifications, readNotificationsIds);"},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"mark notification as read\");"},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" Notification notificationToMarkAsRead \u003d testData.notifications.get(\"notification3\");"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" notificationsPage.markNotificationAsRead(notificationToMarkAsRead);"},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" notificationsPage.verifyStatusMessage(\"Notification marked as read.\");"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":" // Verify that account\u0027s readNotifications attribute is updated"},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":" AccountData accountFromDb \u003d BACKDOOR.getAccountData(account.getGoogleId());"},{"lineNumber":65,"author":{"gitId":"yuanxi1"},"content":" assertTrue(accountFromDb.getReadNotifications().containsKey(notificationToMarkAsRead.getId().toString()));"},{"lineNumber":66,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":67,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"notification banner is not visible\");"},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" assertFalse(notificationsPage.isBannerVisible());"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" @AfterClass"},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":" public void classTeardown() {"},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" for (Notification notification : testData.notifications.values()) {"},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" BACKDOOR.deleteNotification(notification.getId());"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":"}"}],"authorContributionMap":{"yuanxi1":78}},{"path":"src/e2e/java/teammates/e2e/pageobjects/AdminNotificationsPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.time.ZoneId;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.ZonedDateTime;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.FindBy;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Page Object Model for the admin notifications page."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class AdminNotificationsPage extends AppPage {"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-add-notification\")"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private WebElement addNotificationButton;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-create-notification\")"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private WebElement createNotificationButton;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-edit-notification\")"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private WebElement editNotificationButton;"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notifications-timezone\")"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private WebElement notificationsTimezone;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-target-user\")"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private WebElement notificationTargetUserDropdown;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-style\")"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private WebElement notificationStyleDropdown;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-title\")"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private WebElement notificationTitleTextBox;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-message\")"},{"lineNumber":43,"author":{"gitId":"-"},"content":" private WebElement notificationMessageEditor;"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-start-date\")"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private WebElement startDateBox;"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-start-time\")"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private WebElement startTimeDropdown;"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-end-date\")"},{"lineNumber":52,"author":{"gitId":"-"},"content":" private WebElement endDateBox;"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-end-time\")"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private WebElement endTimeDropdown;"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notifications-table\")"},{"lineNumber":58,"author":{"gitId":"-"},"content":" private WebElement notificationsTable;"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" public AdminNotificationsPage(Browser browser) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":65,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" return getPageSource().contains(\"Notifications\");"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" public void verifyNotificationsTableRow(Notification notification) {"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" WebElement notificationRow \u003d notificationsTable.findElement(By.id(notification.getId().toString()));"},{"lineNumber":71,"author":{"gitId":"-"},"content":" verifyTableRowValues(notificationRow, getNotificationTableDisplayDetails(notification));"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" public void addNotification(Notification notification) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" clickAddNotificationButton();"},{"lineNumber":76,"author":{"gitId":"-"},"content":" waitForElementPresence(By.id(\"btn-create-notification\"));"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" fillNotificationForm(notification);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" clickCreateNotificationButton();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" public void editNotification(Notification notification) {"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" WebElement notificationRow \u003d notificationsTable.findElement(By.id(notification.getId().toString()));"},{"lineNumber":86,"author":{"gitId":"-"},"content":" WebElement editButton \u003d notificationRow.findElement(By.className(\"btn-light\"));"},{"lineNumber":87,"author":{"gitId":"-"},"content":" editButton.click();"},{"lineNumber":88,"author":{"gitId":"-"},"content":" waitForElementPresence(By.id(\"btn-edit-notification\"));"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" fillNotificationForm(notification);"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" clickEditNotificationButton();"},{"lineNumber":93,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" public void deleteNotification(Notification notification) {"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" WebElement notificationRow \u003d notificationsTable.findElement(By.id(notification.getId().toString()));"},{"lineNumber":98,"author":{"gitId":"-"},"content":" WebElement deleteButton \u003d notificationRow.findElement(By.className(\"btn-danger\"));"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" deleteButton.click();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":102,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" public void fillNotificationForm(Notification notification) {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(notificationTargetUserDropdown, getTargetUserText(notification.getTargetUser()));"},{"lineNumber":107,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(notificationStyleDropdown, getNotificationStyle(notification.getStyle()));"},{"lineNumber":108,"author":{"gitId":"-"},"content":" fillTextBox(notificationTitleTextBox, notification.getTitle());"},{"lineNumber":109,"author":{"gitId":"-"},"content":" setMessage(notification.getMessage());"},{"lineNumber":110,"author":{"gitId":"-"},"content":" setNotificationStartDateTime(notification.getStartTime());"},{"lineNumber":111,"author":{"gitId":"-"},"content":" setNotificationEndDateTime(notification.getEndTime());"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" public String getFirstRowNotificationId() {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e notificationRows \u003d"},{"lineNumber":116,"author":{"gitId":"-"},"content":" notificationsTable.findElement(By.tagName(\"tbody\")).findElements(By.tagName(\"tr\"));"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return notificationRows.get(0).getAttribute(\"id\");"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" public void sortNotificationsTableByDescendingCreateTime() {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" WebElement creationTimeHeader \u003d notificationsTable.findElements(By.tagName(\"th\")).get(5);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" if (creationTimeHeader.findElements(By.className(\"fa-sort-down\")).size() \u003d\u003d 0) {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" click(creationTimeHeader);"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" private void clickAddNotificationButton() {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" click(addNotificationButton);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" private void clickCreateNotificationButton() {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" click(createNotificationButton);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" private void clickEditNotificationButton() {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" click(editNotificationButton);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" private void setMessage(String message) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" writeToRichTextEditor(notificationMessageEditor, message);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" private void setNotificationStartDateTime(Instant startInstant) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" setDateTime(startDateBox, startTimeDropdown, startInstant);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" private void setNotificationEndDateTime(Instant endInstant) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" setDateTime(endDateBox, endTimeDropdown, endInstant);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" private void setDateTime(WebElement dateBox, WebElement timeBox, Instant startInstant) {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" fillDatePicker(dateBox, startInstant, getTimezone());"},{"lineNumber":153,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(timeBox.findElement(By.tagName(\"select\")), getInputTimeString(startInstant));"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":" private String[] getNotificationTableDisplayDetails(Notification notification) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" return new String[] {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" notification.getTitle(),"},{"lineNumber":159,"author":{"gitId":"-"},"content":" getTableDisplayDateString(notification.getStartTime()),"},{"lineNumber":160,"author":{"gitId":"-"},"content":" getTableDisplayDateString(notification.getEndTime()),"},{"lineNumber":161,"author":{"gitId":"-"},"content":" notification.getTargetUser().toString(),"},{"lineNumber":162,"author":{"gitId":"-"},"content":" getNotificationStyle(notification.getStyle()),"},{"lineNumber":163,"author":{"gitId":"-"},"content":" };"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" private String getTimezone() {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return notificationsTimezone.getText().replace(\"All dates are displayed in \", \"\").replace(\" time.\", \"\");"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" private String getInputTimeString(Instant instant) {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" String timezone \u003d getTimezone();"},{"lineNumber":172,"author":{"gitId":"-"},"content":" ZonedDateTime dateTime \u003d instant.atZone(ZoneId.of(timezone));"},{"lineNumber":173,"author":{"gitId":"-"},"content":" if (dateTime.getHour() \u003d\u003d 0 \u0026\u0026 dateTime.getMinute() \u003d\u003d 0) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" return \"23:59H\";"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timezone, \"HH:00\") + \"H\";"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" private String getTableDisplayDateString(Instant date) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(date, getTimezone(), \"d MMM h:mm a\");"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" private String getTargetUserText(NotificationTargetUser userType) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" switch (userType) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" case STUDENT:"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return \"Students\";"},{"lineNumber":187,"author":{"gitId":"-"},"content":" case INSTRUCTOR:"},{"lineNumber":188,"author":{"gitId":"-"},"content":" return \"Instructors\";"},{"lineNumber":189,"author":{"gitId":"-"},"content":" case GENERAL:"},{"lineNumber":190,"author":{"gitId":"-"},"content":" return \"General (for both students and instructors)\";"},{"lineNumber":191,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":192,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" private String getNotificationStyle(NotificationStyle style) {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" switch (style) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" case PRIMARY:"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return \"Primary (blue)\";"},{"lineNumber":200,"author":{"gitId":"-"},"content":" case SECONDARY:"},{"lineNumber":201,"author":{"gitId":"-"},"content":" return \"Secondary (grey)\";"},{"lineNumber":202,"author":{"gitId":"-"},"content":" case SUCCESS:"},{"lineNumber":203,"author":{"gitId":"-"},"content":" return \"Success (green)\";"},{"lineNumber":204,"author":{"gitId":"-"},"content":" case DANGER:"},{"lineNumber":205,"author":{"gitId":"-"},"content":" return \"Danger (red)\";"},{"lineNumber":206,"author":{"gitId":"-"},"content":" case WARNING:"},{"lineNumber":207,"author":{"gitId":"-"},"content":" return \"Warning (yellow)\";"},{"lineNumber":208,"author":{"gitId":"-"},"content":" case INFO:"},{"lineNumber":209,"author":{"gitId":"-"},"content":" return \"Info (cyan)\";"},{"lineNumber":210,"author":{"gitId":"-"},"content":" case LIGHT:"},{"lineNumber":211,"author":{"gitId":"-"},"content":" return \"Light\";"},{"lineNumber":212,"author":{"gitId":"-"},"content":" case DARK:"},{"lineNumber":213,"author":{"gitId":"-"},"content":" return \"Dark\";"},{"lineNumber":214,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":215,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":10,"-":209}},{"path":"src/e2e/java/teammates/e2e/pageobjects/AdminSearchPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertEquals;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertFalse;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertNotEquals;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.openqa.selenium.NoSuchElementException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.FindBy;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Represents the admin home page of the website."},{"lineNumber":24,"author":{"gitId":"-"},"content":" */"},{"lineNumber":25,"author":{"gitId":"-"},"content":"public class AdminSearchPage extends AppPage {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_DETAILS \u003d 1;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_NAME \u003d 2;"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_GOOGLE_ID \u003d 3;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_INSTITUTE \u003d 4;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_COMMENTS \u003d 5;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_OPTIONS \u003d 6;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_COURSE_ID \u003d 1;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_NAME \u003d 2;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_GOOGLE_ID \u003d 3;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_INSTITUTE \u003d 4;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_OPTIONS \u003d 5;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_NAME \u003d 1;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_EMAIL \u003d 2;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_INSTITUTE \u003d 3;"},{"lineNumber":42,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_CREATED_AT \u003d 4;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_REGISTERED_AT \u003d 5;"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" private static final String EXPANDED_ROWS_HEADER_EMAIL \u003d \"Email\";"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private static final String EXPANDED_ROWS_HEADER_COURSE_JOIN_LINK \u003d \"Course Join Link\";"},{"lineNumber":47,"author":{"gitId":"-"},"content":" private static final String EXPANDED_ROWS_HEADER_ACCOUNT_REGISTRATION_LINK \u003d \"Account Registration Link\";"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private static final String LINK_TEXT_RESET_GOOGLE_ID \u003d \"Reset Google ID\";"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"search-box\")"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private WebElement inputBox;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"search-button\")"},{"lineNumber":54,"author":{"gitId":"-"},"content":" private WebElement searchButton;"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"show-student-links\")"},{"lineNumber":57,"author":{"gitId":"-"},"content":" private WebElement expandStudentLinksButton;"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"show-instructor-links\")"},{"lineNumber":60,"author":{"gitId":"-"},"content":" private WebElement expandInstructorLinksButton;"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"show-account-request-links\")"},{"lineNumber":63,"author":{"gitId":"-"},"content":" private WebElement expandAccountRequestLinksButton;"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"hide-student-links\")"},{"lineNumber":66,"author":{"gitId":"-"},"content":" private WebElement collapseStudentLinksButton;"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"hide-instructor-links\")"},{"lineNumber":69,"author":{"gitId":"-"},"content":" private WebElement collapseInstructorLinksButton;"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"hide-account-request-links\")"},{"lineNumber":72,"author":{"gitId":"-"},"content":" private WebElement collapseAccountRequestLinksButton;"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" public AdminSearchPage(Browser browser) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":79,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" return getPageSource().contains(\"Admin Search\u003c/h1\u003e\");"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" public void inputSearchContent(String content) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" inputBox.sendKeys(content);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void clearSearchBox() {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" inputBox.clear();"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" public void clickSearchButton() {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" click(searchButton);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" public void regenerateStudentKey(StudentAttributes student) {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" studentRow.findElement(By.xpath(\"//button[text()\u003d\u0027Regenerate key\u0027]\")).click();"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" public void regenerateInstructorKey(InstructorAttributes instructor) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":106,"author":{"gitId":"-"},"content":" instructorRow.findElement(By.xpath(\"//button[text()\u003d\u0027Regenerate key\u0027]\")).click();"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" public void clickExpandStudentLinks() {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" click(expandStudentLinksButton);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" public void clickExpandInstructorLinks() {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" click(expandInstructorLinksButton);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" public void clickExpandAccountRequestLinks() {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" click(expandAccountRequestLinksButton);"},{"lineNumber":124,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" public void clickCollapseStudentLinks() {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" click(collapseStudentLinksButton);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" public void clickCollapseInstructorLinks() {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" click(collapseInstructorLinksButton);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" public void clickCollapseAccountRequestLinks() {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" click(collapseAccountRequestLinksButton);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" public String removeSpanFromText(String text) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return text.replace(\"\u003cspan class\u003d\\\"highlighted-text\\\"\u003e\", \"\").replace(\"\u003c/span\u003e\", \"\");"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" public WebElement getStudentRow(StudentAttributes student) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" String details \u003d String.format(\"%s [%s] (%s)\", student.getCourse(),"},{"lineNumber":148,"author":{"gitId":"-"},"content":" student.getSection() \u003d\u003d null ? Const.DEFAULT_SECTION : student.getSection(), student.getTeam());"},{"lineNumber":149,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d browser.driver.findElements(By.cssSelector(\"#search-table-student tbody tr\"));"},{"lineNumber":150,"author":{"gitId":"-"},"content":" for (WebElement row : rows) {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":152,"author":{"gitId":"-"},"content":" if (removeSpanFromText(columns.get(STUDENT_COL_DETAILS - 1)"},{"lineNumber":153,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(details)"},{"lineNumber":154,"author":{"gitId":"-"},"content":" \u0026\u0026 removeSpanFromText(columns.get(STUDENT_COL_NAME - 1)"},{"lineNumber":155,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(student.getName())) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" return row;"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" public String getStudentDetails(WebElement studentRow) {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_DETAILS);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" public String getStudentName(WebElement studentRow) {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_NAME);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" public String getStudentGoogleId(WebElement studentRow) {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_GOOGLE_ID);"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":" public String getStudentHomeLink(WebElement studentRow) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return getColumnLink(studentRow, STUDENT_COL_GOOGLE_ID);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" public String getStudentInstitute(WebElement studentRow) {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_INSTITUTE);"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" public String getStudentComments(WebElement studentRow) {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_COMMENTS);"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" public String getStudentManageAccountLink(WebElement studentRow) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return getColumnLink(studentRow, STUDENT_COL_OPTIONS);"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" public String getStudentEmail(WebElement studentRow) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(studentRow, EXPANDED_ROWS_HEADER_EMAIL);"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" public String getStudentJoinLink(WebElement studentRow) {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(studentRow, EXPANDED_ROWS_HEADER_COURSE_JOIN_LINK);"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":" public String getStudentJoinLink(StudentAttributes student) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" return getStudentJoinLink(studentRow);"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" public void resetStudentGoogleId(StudentAttributes student) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" WebElement link \u003d studentRow.findElement(By.linkText(LINK_TEXT_RESET_GOOGLE_ID));"},{"lineNumber":206,"author":{"gitId":"-"},"content":" link.click();"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":209,"author":{"gitId":"-"},"content":" waitForElementStaleness(link);"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" public WebElement getInstructorRow(InstructorAttributes instructor) {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" String courseId \u003d instructor.getCourseId();"},{"lineNumber":214,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d browser.driver.findElements(By.cssSelector(\"#search-table-instructor tbody tr\"));"},{"lineNumber":215,"author":{"gitId":"-"},"content":" for (WebElement row : rows) {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":217,"author":{"gitId":"-"},"content":" if (removeSpanFromText(columns.get(INSTRUCTOR_COL_COURSE_ID - 1)"},{"lineNumber":218,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(courseId)"},{"lineNumber":219,"author":{"gitId":"-"},"content":" \u0026\u0026 removeSpanFromText(columns.get(INSTRUCTOR_COL_NAME - 1)"},{"lineNumber":220,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(instructor.getName())) {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" return row;"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" public String getInstructorCourseId(WebElement instructorRow) {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" return getColumnText(instructorRow, INSTRUCTOR_COL_COURSE_ID);"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" public String getInstructorName(WebElement instructorRow) {"},{"lineNumber":232,"author":{"gitId":"-"},"content":" return getColumnText(instructorRow, INSTRUCTOR_COL_NAME);"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }"},{"lineNumber":234,"author":{"gitId":"-"},"content":""},{"lineNumber":235,"author":{"gitId":"-"},"content":" public String getInstructorGoogleId(WebElement instructorRow) {"},{"lineNumber":236,"author":{"gitId":"-"},"content":" return getColumnText(instructorRow, INSTRUCTOR_COL_GOOGLE_ID);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" public String getInstructorHomePageLink(WebElement instructorRow) {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" return getColumnLink(instructorRow, INSTRUCTOR_COL_GOOGLE_ID);"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" public String getInstructorInstitute(WebElement instructorRow) {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" return getColumnText(instructorRow, INSTRUCTOR_COL_INSTITUTE);"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" public String getInstructorManageAccountLink(WebElement instructorRow) {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" return getColumnLink(instructorRow, INSTRUCTOR_COL_OPTIONS);"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":" public String getInstructorEmail(WebElement instructorRow) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(instructorRow, EXPANDED_ROWS_HEADER_EMAIL);"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":""},{"lineNumber":255,"author":{"gitId":"-"},"content":" public String getInstructorJoinLink(WebElement instructorRow) {"},{"lineNumber":256,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(instructorRow, EXPANDED_ROWS_HEADER_COURSE_JOIN_LINK);"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" public String getInstructorJoinLink(InstructorAttributes instructor) {"},{"lineNumber":260,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":261,"author":{"gitId":"-"},"content":" return getInstructorJoinLink(instructorRow);"},{"lineNumber":262,"author":{"gitId":"-"},"content":" }"},{"lineNumber":263,"author":{"gitId":"-"},"content":""},{"lineNumber":264,"author":{"gitId":"-"},"content":" public void resetInstructorGoogleId(InstructorAttributes instructor) {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":266,"author":{"gitId":"-"},"content":" WebElement link \u003d instructorRow.findElement(By.linkText(LINK_TEXT_RESET_GOOGLE_ID));"},{"lineNumber":267,"author":{"gitId":"-"},"content":" link.click();"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":270,"author":{"gitId":"-"},"content":" waitForElementStaleness(link);"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }"},{"lineNumber":272,"author":{"gitId":"-"},"content":""},{"lineNumber":273,"author":{"gitId":"-"},"content":" public WebElement getAccountRequestRow(AccountRequestAttributes accountRequest) {"},{"lineNumber":274,"author":{"gitId":"-"},"content":" String email \u003d accountRequest.getEmail();"},{"lineNumber":275,"author":{"gitId":"-"},"content":" String institute \u003d accountRequest.getInstitute();"},{"lineNumber":276,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d browser.driver.findElements(By.cssSelector(\"#search-table-account-request tbody tr\"));"},{"lineNumber":277,"author":{"gitId":"-"},"content":" for (WebElement row : rows) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":279,"author":{"gitId":"-"},"content":" if (removeSpanFromText(columns.get(ACCOUNT_REQUEST_COL_EMAIL - 1)"},{"lineNumber":280,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(email)"},{"lineNumber":281,"author":{"gitId":"-"},"content":" \u0026\u0026 removeSpanFromText(columns.get(ACCOUNT_REQUEST_COL_INSTITUTE - 1)"},{"lineNumber":282,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(institute)) {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" return row;"},{"lineNumber":284,"author":{"gitId":"-"},"content":" }"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"domoberzin"},"content":" public WebElement getAccountRequestRow(AccountRequest accountRequest) {"},{"lineNumber":290,"author":{"gitId":"domoberzin"},"content":" String email \u003d accountRequest.getEmail();"},{"lineNumber":291,"author":{"gitId":"domoberzin"},"content":" String institute \u003d accountRequest.getInstitute();"},{"lineNumber":292,"author":{"gitId":"domoberzin"},"content":" List\u003cWebElement\u003e rows \u003d browser.driver.findElements(By.cssSelector(\"#search-table-account-request tbody tr\"));"},{"lineNumber":293,"author":{"gitId":"domoberzin"},"content":" for (WebElement row : rows) {"},{"lineNumber":294,"author":{"gitId":"domoberzin"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":295,"author":{"gitId":"domoberzin"},"content":" if (removeSpanFromText(columns.get(ACCOUNT_REQUEST_COL_EMAIL - 1)"},{"lineNumber":296,"author":{"gitId":"domoberzin"},"content":" .getAttribute(\"innerHTML\")).contains(email)"},{"lineNumber":297,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 removeSpanFromText(columns.get(ACCOUNT_REQUEST_COL_INSTITUTE - 1)"},{"lineNumber":298,"author":{"gitId":"domoberzin"},"content":" .getAttribute(\"innerHTML\")).contains(institute)) {"},{"lineNumber":299,"author":{"gitId":"domoberzin"},"content":" return row;"},{"lineNumber":300,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":301,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":302,"author":{"gitId":"domoberzin"},"content":" return null;"},{"lineNumber":303,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":304,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":305,"author":{"gitId":"-"},"content":" public String getAccountRequestName(WebElement accountRequestRow) {"},{"lineNumber":306,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_NAME);"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" public String getAccountRequestEmail(WebElement accountRequestRow) {"},{"lineNumber":310,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_EMAIL);"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":" public String getAccountRequestInstitute(WebElement accountRequestRow) {"},{"lineNumber":314,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_INSTITUTE);"},{"lineNumber":315,"author":{"gitId":"-"},"content":" }"},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":" public String getAccountRequestCreatedAt(WebElement accountRequestRow) {"},{"lineNumber":318,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_CREATED_AT);"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" public String getAccountRequestRegisteredAt(WebElement accountRequestRow) {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_REGISTERED_AT);"},{"lineNumber":323,"author":{"gitId":"-"},"content":" }"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":" public String getAccountRequestRegistrationLink(WebElement accountRequestRow) {"},{"lineNumber":326,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(accountRequestRow, EXPANDED_ROWS_HEADER_ACCOUNT_REGISTRATION_LINK);"},{"lineNumber":327,"author":{"gitId":"-"},"content":" }"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":" public void clickDeleteAccountRequestButton(AccountRequestAttributes accountRequest) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":331,"author":{"gitId":"-"},"content":" WebElement deleteButton \u003d accountRequestRow.findElement(By.cssSelector(\"[id^\u003d\u0027delete-account-request-\u0027]\"));"},{"lineNumber":332,"author":{"gitId":"-"},"content":" deleteButton.click();"},{"lineNumber":333,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":334,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"domoberzin"},"content":" public void clickDeleteAccountRequestButton(AccountRequest accountRequest) {"},{"lineNumber":338,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":339,"author":{"gitId":"domoberzin"},"content":" WebElement deleteButton \u003d accountRequestRow.findElement(By.cssSelector(\"[id^\u003d\u0027delete-account-request-\u0027]\"));"},{"lineNumber":340,"author":{"gitId":"domoberzin"},"content":" deleteButton.click();"},{"lineNumber":341,"author":{"gitId":"domoberzin"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":342,"author":{"gitId":"domoberzin"},"content":" waitForPageToLoad();"},{"lineNumber":343,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":344,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":" public void clickResetAccountRequestButton(AccountRequestAttributes accountRequest) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":347,"author":{"gitId":"-"},"content":" WebElement deleteButton \u003d accountRequestRow.findElement(By.cssSelector(\"[id^\u003d\u0027reset-account-request-\u0027]\"));"},{"lineNumber":348,"author":{"gitId":"-"},"content":" deleteButton.click();"},{"lineNumber":349,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":350,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"domoberzin"},"content":" public void clickResetAccountRequestButton(AccountRequest accountRequest) {"},{"lineNumber":354,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":355,"author":{"gitId":"domoberzin"},"content":" WebElement deleteButton \u003d accountRequestRow.findElement(By.cssSelector(\"[id^\u003d\u0027reset-account-request-\u0027]\"));"},{"lineNumber":356,"author":{"gitId":"domoberzin"},"content":" deleteButton.click();"},{"lineNumber":357,"author":{"gitId":"domoberzin"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":358,"author":{"gitId":"domoberzin"},"content":" waitForPageToLoad();"},{"lineNumber":359,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":360,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":361,"author":{"gitId":"-"},"content":" public int getNumExpandedRows(WebElement row) {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" String xpath \u003d \"following-sibling::tr[1]/td/ul/li\";"},{"lineNumber":363,"author":{"gitId":"-"},"content":" return row.findElements(By.xpath(xpath)).size();"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" private String getColumnText(WebElement row, int columnNum) {"},{"lineNumber":367,"author":{"gitId":"-"},"content":" String xpath \u003d String.format(\"td[%d]\", columnNum);"},{"lineNumber":368,"author":{"gitId":"-"},"content":" return row.findElement(By.xpath(xpath)).getText();"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":""},{"lineNumber":371,"author":{"gitId":"-"},"content":" private String getColumnLink(WebElement row, int columnNum) {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" String xpath \u003d String.format(\"td[%d]/a\", columnNum);"},{"lineNumber":374,"author":{"gitId":"-"},"content":" return row.findElement(By.xpath(xpath)).getAttribute(\"href\");"},{"lineNumber":375,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":376,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":377,"author":{"gitId":"-"},"content":" }"},{"lineNumber":378,"author":{"gitId":"-"},"content":" }"},{"lineNumber":379,"author":{"gitId":"-"},"content":""},{"lineNumber":380,"author":{"gitId":"-"},"content":" private String getExpandedRowInputValue(WebElement row, String rowHeader) {"},{"lineNumber":381,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":382,"author":{"gitId":"-"},"content":" String xpath \u003d String.format(\"following-sibling::tr[1]/td/ul/li[contains(., \u0027%s\u0027)]/input\", rowHeader);"},{"lineNumber":383,"author":{"gitId":"-"},"content":" return row.findElement(By.xpath(xpath)).getAttribute(\"value\");"},{"lineNumber":384,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":385,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":386,"author":{"gitId":"-"},"content":" }"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"-"},"content":" public void verifyStudentRowContent(StudentAttributes student, CourseAttributes course,"},{"lineNumber":390,"author":{"gitId":"-"},"content":" String expectedDetails, String expectedManageAccountLink,"},{"lineNumber":391,"author":{"gitId":"-"},"content":" String expectedHomePageLink) {"},{"lineNumber":392,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":393,"author":{"gitId":"-"},"content":" String actualDetails \u003d getStudentDetails(studentRow);"},{"lineNumber":394,"author":{"gitId":"-"},"content":" String actualName \u003d getStudentName(studentRow);"},{"lineNumber":395,"author":{"gitId":"-"},"content":" String actualGoogleId \u003d getStudentGoogleId(studentRow);"},{"lineNumber":396,"author":{"gitId":"-"},"content":" String actualHomepageLink \u003d getStudentHomeLink(studentRow);"},{"lineNumber":397,"author":{"gitId":"-"},"content":" String actualInstitute \u003d getStudentInstitute(studentRow);"},{"lineNumber":398,"author":{"gitId":"-"},"content":" String actualComment \u003d getStudentComments(studentRow);"},{"lineNumber":399,"author":{"gitId":"-"},"content":" String actualManageAccountLink \u003d getStudentManageAccountLink(studentRow);"},{"lineNumber":400,"author":{"gitId":"-"},"content":""},{"lineNumber":401,"author":{"gitId":"-"},"content":" String expectedName \u003d student.getName();"},{"lineNumber":402,"author":{"gitId":"-"},"content":" String expectedGoogleId \u003d StringHelper.convertToEmptyStringIfNull(student.getGoogleId());"},{"lineNumber":403,"author":{"gitId":"-"},"content":" String expectedInstitute \u003d StringHelper.convertToEmptyStringIfNull(course.getInstitute());"},{"lineNumber":404,"author":{"gitId":"-"},"content":" String expectedComment \u003d StringHelper.convertToEmptyStringIfNull(student.getComments());"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" assertEquals(expectedDetails, actualDetails);"},{"lineNumber":407,"author":{"gitId":"-"},"content":" assertEquals(expectedName, actualName);"},{"lineNumber":408,"author":{"gitId":"-"},"content":" assertEquals(expectedGoogleId, actualGoogleId);"},{"lineNumber":409,"author":{"gitId":"-"},"content":" assertEquals(expectedInstitute, actualInstitute);"},{"lineNumber":410,"author":{"gitId":"-"},"content":" assertEquals(expectedComment, actualComment);"},{"lineNumber":411,"author":{"gitId":"-"},"content":" assertEquals(expectedManageAccountLink, actualManageAccountLink);"},{"lineNumber":412,"author":{"gitId":"-"},"content":" assertEquals(expectedHomePageLink, actualHomepageLink);"},{"lineNumber":413,"author":{"gitId":"-"},"content":" }"},{"lineNumber":414,"author":{"gitId":"-"},"content":""},{"lineNumber":415,"author":{"gitId":"-"},"content":" public void verifyStudentExpandedLinks(StudentAttributes student, int expectedNumExpandedRows) {"},{"lineNumber":416,"author":{"gitId":"-"},"content":" clickExpandStudentLinks();"},{"lineNumber":417,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":418,"author":{"gitId":"-"},"content":" String actualEmail \u003d getStudentEmail(studentRow);"},{"lineNumber":419,"author":{"gitId":"-"},"content":" String actualJoinLink \u003d getStudentJoinLink(studentRow);"},{"lineNumber":420,"author":{"gitId":"-"},"content":" int actualNumExpandedRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":421,"author":{"gitId":"-"},"content":""},{"lineNumber":422,"author":{"gitId":"-"},"content":" String expectedEmail \u003d student.getEmail();"},{"lineNumber":423,"author":{"gitId":"-"},"content":""},{"lineNumber":424,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, actualEmail);"},{"lineNumber":425,"author":{"gitId":"-"},"content":" assertNotEquals(\"\", actualJoinLink);"},{"lineNumber":426,"author":{"gitId":"-"},"content":" assertEquals(expectedNumExpandedRows, actualNumExpandedRows);"},{"lineNumber":427,"author":{"gitId":"-"},"content":" }"},{"lineNumber":428,"author":{"gitId":"-"},"content":""},{"lineNumber":429,"author":{"gitId":"-"},"content":" public void verifyInstructorRowContent(InstructorAttributes instructor, CourseAttributes course,"},{"lineNumber":430,"author":{"gitId":"-"},"content":" String expectedManageAccountLink, String expectedHomePageLink) {"},{"lineNumber":431,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":432,"author":{"gitId":"-"},"content":" String actualCourseId \u003d getInstructorCourseId(instructorRow);"},{"lineNumber":433,"author":{"gitId":"-"},"content":" String actualName \u003d getInstructorName(instructorRow);"},{"lineNumber":434,"author":{"gitId":"-"},"content":" String actualGoogleId \u003d getInstructorGoogleId(instructorRow);"},{"lineNumber":435,"author":{"gitId":"-"},"content":" String actualHomePageLink \u003d getInstructorHomePageLink(instructorRow);"},{"lineNumber":436,"author":{"gitId":"-"},"content":" String actualInstitute \u003d getInstructorInstitute(instructorRow);"},{"lineNumber":437,"author":{"gitId":"-"},"content":" String actualManageAccountLink \u003d getInstructorManageAccountLink(instructorRow);"},{"lineNumber":438,"author":{"gitId":"-"},"content":""},{"lineNumber":439,"author":{"gitId":"-"},"content":" String expectedCourseId \u003d instructor.getCourseId();"},{"lineNumber":440,"author":{"gitId":"-"},"content":" String expectedName \u003d instructor.getName();"},{"lineNumber":441,"author":{"gitId":"-"},"content":" String expectedGoogleId \u003d StringHelper.convertToEmptyStringIfNull(instructor.getGoogleId());"},{"lineNumber":442,"author":{"gitId":"-"},"content":" String expectedInstitute \u003d StringHelper.convertToEmptyStringIfNull(course.getInstitute());"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" assertEquals(expectedCourseId, actualCourseId);"},{"lineNumber":445,"author":{"gitId":"-"},"content":" assertEquals(expectedName, actualName);"},{"lineNumber":446,"author":{"gitId":"-"},"content":" assertEquals(expectedGoogleId, actualGoogleId);"},{"lineNumber":447,"author":{"gitId":"-"},"content":" assertEquals(expectedHomePageLink, actualHomePageLink);"},{"lineNumber":448,"author":{"gitId":"-"},"content":" assertEquals(expectedInstitute, actualInstitute);"},{"lineNumber":449,"author":{"gitId":"-"},"content":" assertEquals(expectedManageAccountLink, actualManageAccountLink);"},{"lineNumber":450,"author":{"gitId":"-"},"content":" }"},{"lineNumber":451,"author":{"gitId":"-"},"content":""},{"lineNumber":452,"author":{"gitId":"-"},"content":" public void verifyInstructorExpandedLinks(InstructorAttributes instructor) {"},{"lineNumber":453,"author":{"gitId":"-"},"content":" clickExpandInstructorLinks();"},{"lineNumber":454,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":455,"author":{"gitId":"-"},"content":" String actualEmail \u003d getInstructorEmail(instructorRow);"},{"lineNumber":456,"author":{"gitId":"-"},"content":" String actualJoinLink \u003d getInstructorJoinLink(instructorRow);"},{"lineNumber":457,"author":{"gitId":"-"},"content":""},{"lineNumber":458,"author":{"gitId":"-"},"content":" String expectedEmail \u003d instructor.getEmail();"},{"lineNumber":459,"author":{"gitId":"-"},"content":""},{"lineNumber":460,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, actualEmail);"},{"lineNumber":461,"author":{"gitId":"-"},"content":" assertNotEquals(\"\", actualJoinLink);"},{"lineNumber":462,"author":{"gitId":"-"},"content":" }"},{"lineNumber":463,"author":{"gitId":"-"},"content":""},{"lineNumber":464,"author":{"gitId":"-"},"content":" public void verifyAccountRequestRowContent(AccountRequestAttributes accountRequest) {"},{"lineNumber":465,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":466,"author":{"gitId":"-"},"content":" String actualName \u003d getAccountRequestName(accountRequestRow);"},{"lineNumber":467,"author":{"gitId":"-"},"content":" String actualEmail \u003d getAccountRequestEmail(accountRequestRow);"},{"lineNumber":468,"author":{"gitId":"-"},"content":" String actualInstitute \u003d getAccountRequestInstitute(accountRequestRow);"},{"lineNumber":469,"author":{"gitId":"-"},"content":" String actualCreatedAt \u003d getAccountRequestCreatedAt(accountRequestRow);"},{"lineNumber":470,"author":{"gitId":"-"},"content":" String actualRegisteredAt \u003d getAccountRequestRegisteredAt(accountRequestRow);"},{"lineNumber":471,"author":{"gitId":"-"},"content":""},{"lineNumber":472,"author":{"gitId":"-"},"content":" assertEquals(accountRequest.getName(), actualName);"},{"lineNumber":473,"author":{"gitId":"-"},"content":" assertEquals(accountRequest.getEmail(), actualEmail);"},{"lineNumber":474,"author":{"gitId":"-"},"content":" assertEquals(accountRequest.getInstitute(), actualInstitute);"},{"lineNumber":475,"author":{"gitId":"-"},"content":" assertFalse(actualCreatedAt.isBlank());"},{"lineNumber":476,"author":{"gitId":"-"},"content":" if (accountRequest.getRegisteredAt() \u003d\u003d null) {"},{"lineNumber":477,"author":{"gitId":"-"},"content":" assertEquals(\"Not Registered Yet\", actualRegisteredAt);"},{"lineNumber":478,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":479,"author":{"gitId":"-"},"content":" assertFalse(actualRegisteredAt.isBlank());"},{"lineNumber":480,"author":{"gitId":"-"},"content":" }"},{"lineNumber":481,"author":{"gitId":"-"},"content":" }"},{"lineNumber":482,"author":{"gitId":"-"},"content":""},{"lineNumber":483,"author":{"gitId":"domoberzin"},"content":" public void verifyAccountRequestRowContent(AccountRequest accountRequest) {"},{"lineNumber":484,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":485,"author":{"gitId":"domoberzin"},"content":" String actualName \u003d getAccountRequestName(accountRequestRow);"},{"lineNumber":486,"author":{"gitId":"domoberzin"},"content":" String actualEmail \u003d getAccountRequestEmail(accountRequestRow);"},{"lineNumber":487,"author":{"gitId":"domoberzin"},"content":" String actualInstitute \u003d getAccountRequestInstitute(accountRequestRow);"},{"lineNumber":488,"author":{"gitId":"domoberzin"},"content":" String actualCreatedAt \u003d getAccountRequestCreatedAt(accountRequestRow);"},{"lineNumber":489,"author":{"gitId":"domoberzin"},"content":" String actualRegisteredAt \u003d getAccountRequestRegisteredAt(accountRequestRow);"},{"lineNumber":490,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":491,"author":{"gitId":"domoberzin"},"content":" assertEquals(accountRequest.getName(), actualName);"},{"lineNumber":492,"author":{"gitId":"domoberzin"},"content":" assertEquals(accountRequest.getEmail(), actualEmail);"},{"lineNumber":493,"author":{"gitId":"domoberzin"},"content":" assertEquals(accountRequest.getInstitute(), actualInstitute);"},{"lineNumber":494,"author":{"gitId":"domoberzin"},"content":" assertFalse(actualCreatedAt.isBlank());"},{"lineNumber":495,"author":{"gitId":"domoberzin"},"content":" if (accountRequest.getRegisteredAt() \u003d\u003d null) {"},{"lineNumber":496,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Not Registered Yet\", actualRegisteredAt);"},{"lineNumber":497,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":498,"author":{"gitId":"domoberzin"},"content":" assertFalse(actualRegisteredAt.isBlank());"},{"lineNumber":499,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":500,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":501,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":502,"author":{"gitId":"-"},"content":" public void verifyAccountRequestExpandedLinks(AccountRequestAttributes accountRequest) {"},{"lineNumber":503,"author":{"gitId":"-"},"content":" clickExpandAccountRequestLinks();"},{"lineNumber":504,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":505,"author":{"gitId":"-"},"content":" String actualRegistrationLink \u003d getAccountRequestRegistrationLink(accountRequestRow);"},{"lineNumber":506,"author":{"gitId":"-"},"content":""},{"lineNumber":507,"author":{"gitId":"-"},"content":" assertFalse(actualRegistrationLink.isBlank());"},{"lineNumber":508,"author":{"gitId":"-"},"content":" }"},{"lineNumber":509,"author":{"gitId":"-"},"content":""},{"lineNumber":510,"author":{"gitId":"domoberzin"},"content":" public void verifyAccountRequestExpandedLinks(AccountRequest accountRequest) {"},{"lineNumber":511,"author":{"gitId":"domoberzin"},"content":" clickExpandAccountRequestLinks();"},{"lineNumber":512,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":513,"author":{"gitId":"domoberzin"},"content":" String actualRegistrationLink \u003d getAccountRequestRegistrationLink(accountRequestRow);"},{"lineNumber":514,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":515,"author":{"gitId":"domoberzin"},"content":" assertFalse(actualRegistrationLink.isBlank());"},{"lineNumber":516,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":517,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":518,"author":{"gitId":"-"},"content":" public void verifyLinkExpansionButtons(StudentAttributes student,"},{"lineNumber":519,"author":{"gitId":"-"},"content":" InstructorAttributes instructor, AccountRequestAttributes accountRequest) {"},{"lineNumber":520,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":521,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":522,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":523,"author":{"gitId":"-"},"content":""},{"lineNumber":524,"author":{"gitId":"-"},"content":" clickExpandStudentLinks();"},{"lineNumber":525,"author":{"gitId":"-"},"content":" clickExpandInstructorLinks();"},{"lineNumber":526,"author":{"gitId":"-"},"content":" clickExpandAccountRequestLinks();"},{"lineNumber":527,"author":{"gitId":"-"},"content":" int numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":528,"author":{"gitId":"-"},"content":" int numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":529,"author":{"gitId":"domoberzin"},"content":" int numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":530,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":531,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":532,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":533,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":534,"author":{"gitId":"domoberzin"},"content":" clickCollapseInstructorLinks();"},{"lineNumber":535,"author":{"gitId":"domoberzin"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":536,"author":{"gitId":"domoberzin"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":537,"author":{"gitId":"domoberzin"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":538,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":539,"author":{"gitId":"domoberzin"},"content":" assertEquals(numExpandedInstructorRows, 0);"},{"lineNumber":540,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":541,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":542,"author":{"gitId":"domoberzin"},"content":" clickExpandInstructorLinks();"},{"lineNumber":543,"author":{"gitId":"domoberzin"},"content":" clickCollapseStudentLinks();"},{"lineNumber":544,"author":{"gitId":"domoberzin"},"content":" clickCollapseAccountRequestLinks();"},{"lineNumber":545,"author":{"gitId":"domoberzin"},"content":" waitUntilAnimationFinish();"},{"lineNumber":546,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":547,"author":{"gitId":"domoberzin"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":548,"author":{"gitId":"domoberzin"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":549,"author":{"gitId":"domoberzin"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":550,"author":{"gitId":"domoberzin"},"content":" assertEquals(numExpandedStudentRows, 0);"},{"lineNumber":551,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":552,"author":{"gitId":"domoberzin"},"content":" assertEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":553,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":554,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":555,"author":{"gitId":"domoberzin"},"content":" public void verifyLinkExpansionButtons(StudentAttributes student,"},{"lineNumber":556,"author":{"gitId":"domoberzin"},"content":" InstructorAttributes instructor, AccountRequest accountRequest) {"},{"lineNumber":557,"author":{"gitId":"domoberzin"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":558,"author":{"gitId":"domoberzin"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":559,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":560,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":561,"author":{"gitId":"domoberzin"},"content":" clickExpandStudentLinks();"},{"lineNumber":562,"author":{"gitId":"domoberzin"},"content":" clickExpandInstructorLinks();"},{"lineNumber":563,"author":{"gitId":"domoberzin"},"content":" clickExpandAccountRequestLinks();"},{"lineNumber":564,"author":{"gitId":"domoberzin"},"content":" int numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":565,"author":{"gitId":"domoberzin"},"content":" int numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":566,"author":{"gitId":"-"},"content":" int numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":567,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":568,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":569,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":570,"author":{"gitId":"-"},"content":""},{"lineNumber":571,"author":{"gitId":"-"},"content":" clickCollapseInstructorLinks();"},{"lineNumber":572,"author":{"gitId":"-"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":573,"author":{"gitId":"-"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":574,"author":{"gitId":"-"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":575,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":576,"author":{"gitId":"-"},"content":" assertEquals(numExpandedInstructorRows, 0);"},{"lineNumber":577,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":578,"author":{"gitId":"-"},"content":""},{"lineNumber":579,"author":{"gitId":"-"},"content":" clickExpandInstructorLinks();"},{"lineNumber":580,"author":{"gitId":"-"},"content":" clickCollapseStudentLinks();"},{"lineNumber":581,"author":{"gitId":"-"},"content":" clickCollapseAccountRequestLinks();"},{"lineNumber":582,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish();"},{"lineNumber":583,"author":{"gitId":"-"},"content":""},{"lineNumber":584,"author":{"gitId":"-"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":585,"author":{"gitId":"-"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":586,"author":{"gitId":"-"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":587,"author":{"gitId":"-"},"content":" assertEquals(numExpandedStudentRows, 0);"},{"lineNumber":588,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":589,"author":{"gitId":"-"},"content":" assertEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":590,"author":{"gitId":"-"},"content":" }"},{"lineNumber":591,"author":{"gitId":"-"},"content":""},{"lineNumber":592,"author":{"gitId":"-"},"content":" public void verifyRegenerateStudentKey(StudentAttributes student, String originalJoinLink) {"},{"lineNumber":593,"author":{"gitId":"-"},"content":" verifyStatusMessage(\"Student\u0027s key for this course has been successfully regenerated,\""},{"lineNumber":594,"author":{"gitId":"-"},"content":" + \" and the email has been sent.\");"},{"lineNumber":595,"author":{"gitId":"-"},"content":""},{"lineNumber":596,"author":{"gitId":"-"},"content":" String regeneratedJoinLink \u003d getStudentJoinLink(student);"},{"lineNumber":597,"author":{"gitId":"-"},"content":" assertNotEquals(regeneratedJoinLink, originalJoinLink);"},{"lineNumber":598,"author":{"gitId":"-"},"content":" }"},{"lineNumber":599,"author":{"gitId":"-"},"content":""},{"lineNumber":600,"author":{"gitId":"-"},"content":" public void verifyRegenerateInstructorKey(InstructorAttributes instructor, String originalJoinLink) {"},{"lineNumber":601,"author":{"gitId":"-"},"content":" verifyStatusMessage(\"Instructor\u0027s key for this course has been successfully regenerated,\""},{"lineNumber":602,"author":{"gitId":"-"},"content":" + \" and the email has been sent.\");"},{"lineNumber":603,"author":{"gitId":"-"},"content":""},{"lineNumber":604,"author":{"gitId":"-"},"content":" String regeneratedJoinLink \u003d getInstructorJoinLink(instructor);"},{"lineNumber":605,"author":{"gitId":"-"},"content":" assertNotEquals(regeneratedJoinLink, originalJoinLink);"},{"lineNumber":606,"author":{"gitId":"-"},"content":" }"},{"lineNumber":607,"author":{"gitId":"-"},"content":""},{"lineNumber":608,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":97,"-":511}},{"path":"src/e2e/java/teammates/e2e/pageobjects/AppPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static com.google.common.base.Preconditions.checkNotNull;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertEquals;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertNotEquals;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertNotNull;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertTrue;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.io.File;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.lang.reflect.Constructor;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.lang.reflect.InvocationTargetException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.time.Duration;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.time.ZoneId;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.time.ZonedDateTime;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.time.format.DateTimeFormatter;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":"import java.util.Locale;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import org.openqa.selenium.InvalidElementStateException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import org.openqa.selenium.JavascriptExecutor;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import org.openqa.selenium.Keys;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import org.openqa.selenium.NoSuchElementException;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebDriverException;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import org.openqa.selenium.remote.RemoteWebElement;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import org.openqa.selenium.remote.UselessFileDetector;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.PageFactory;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.ui.ExpectedCondition;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.ui.ExpectedConditions;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.ui.Select;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.ui.WebDriverWait;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.e2e.util.MaximumRetriesExceededException;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.e2e.util.RetryManager;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import teammates.e2e.util.Retryable;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import teammates.test.FileHelper;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import teammates.test.ThreadHelper;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * An abstract class that represents a browser-loaded page of the app and"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * provides ways to interact with it. Also contains methods to validate some"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * aspects of the page, e.g. HTML page source."},{"lineNumber":51,"author":{"gitId":"-"},"content":" *"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * \u003cp\u003eNote: We are using the Page Object pattern here."},{"lineNumber":53,"author":{"gitId":"-"},"content":" *"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * @see \u003ca href\u003d\"https://martinfowler.com/bliki/PageObject.html\"\u003ehttps://martinfowler.com/bliki/PageObject.html\u003c/a\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" */"},{"lineNumber":56,"author":{"gitId":"-"},"content":"public abstract class AppPage {"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" private static final String CLEAR_ELEMENT_SCRIPT;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" private static final String SCROLL_ELEMENT_TO_CENTER_AND_CLICK_SCRIPT;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" private static final String READ_TINYMCE_CONTENT_SCRIPT;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" private static final String WRITE_TO_TINYMCE_SCRIPT;"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" static {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" CLEAR_ELEMENT_SCRIPT \u003d FileHelper.readFile(\"src/e2e/resources/scripts/clearElementWithoutEvents.js\");"},{"lineNumber":66,"author":{"gitId":"-"},"content":" SCROLL_ELEMENT_TO_CENTER_AND_CLICK_SCRIPT \u003d FileHelper"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .readFile(\"src/e2e/resources/scripts/scrollElementToCenterAndClick.js\");"},{"lineNumber":68,"author":{"gitId":"-"},"content":" READ_TINYMCE_CONTENT_SCRIPT \u003d FileHelper.readFile(\"src/e2e/resources/scripts/readTinyMCEContent.js\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" WRITE_TO_TINYMCE_SCRIPT \u003d FileHelper.readFile(\"src/e2e/resources/scripts/writeToTinyMCE.js\");"},{"lineNumber":70,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" /** Browser instance the page is loaded into. */"},{"lineNumber":76,"author":{"gitId":"-"},"content":" protected Browser browser;"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" /** Use for retrying due to transient UI issues. */"},{"lineNumber":79,"author":{"gitId":"-"},"content":" protected RetryManager uiRetryManager \u003d new RetryManager((TestProperties.TEST_TIMEOUT + 1) / 2);"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * Used by subclasses to create a {@code AppPage} object to wrap around the"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * given {@code browser} object. Fails if the page content does not match"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * the page type, as defined by the sub-class."},{"lineNumber":85,"author":{"gitId":"-"},"content":" */"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public AppPage(Browser browser) {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" this.browser \u003d browser;"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" boolean isCorrectPageType;"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" isCorrectPageType \u003d containsExpectedPageContents();"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" if (isCorrectPageType) {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" // ignore and try again"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" // To minimize test failures due to eventual consistency, we try to"},{"lineNumber":102,"author":{"gitId":"-"},"content":" // reload the page and compare once more."},{"lineNumber":103,"author":{"gitId":"-"},"content":" System.out.println(\"#### Incorrect page type: going to try reloading the page.\");"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(2000);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" reloadPage();"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" isCorrectPageType \u003d containsExpectedPageContents();"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" if (isCorrectPageType) {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" System.out.println(\"######### Not in the correct page! ##########\");"},{"lineNumber":116,"author":{"gitId":"-"},"content":" throw new IllegalStateException(\"Not in the correct page!\");"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" public Browser getBrowser() {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" return browser;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":124,"author":{"gitId":"-"},"content":" * Gets a new page object representation of the currently open web page in the browser."},{"lineNumber":125,"author":{"gitId":"-"},"content":" *"},{"lineNumber":126,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails if the new page content does not match content expected in a page of"},{"lineNumber":127,"author":{"gitId":"-"},"content":" * the type indicated by the parameter {@code typeOfPage}."},{"lineNumber":128,"author":{"gitId":"-"},"content":" */"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public static \u003cT extends AppPage\u003e T getNewPageInstance(Browser currentBrowser, Class\u003cT\u003e typeOfPage) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish(currentBrowser);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Constructor\u003cT\u003e constructor \u003d typeOfPage.getConstructor(Browser.class);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" T page \u003d constructor.newInstance(currentBrowser);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" PageFactory.initElements(currentBrowser.driver, page);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" page.waitForPageToLoad();"},{"lineNumber":136,"author":{"gitId":"-"},"content":" return page;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" } catch (InvocationTargetException e) {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (e.getCause() instanceof IllegalStateException) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" throw (IllegalStateException) e.getCause();"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" } catch (NoSuchMethodException | IllegalAccessException | InstantiationException e) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"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":" * Fails if the new page content does not match content expected in a page of"},{"lineNumber":149,"author":{"gitId":"-"},"content":" * the type indicated by the parameter {@code newPageType}."},{"lineNumber":150,"author":{"gitId":"-"},"content":" */"},{"lineNumber":151,"author":{"gitId":"-"},"content":" public \u003cT extends AppPage\u003e T changePageType(Class\u003cT\u003e newPageType) {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return getNewPageInstance(browser, newPageType);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" public \u003cE\u003e E waitFor(ExpectedCondition\u003cE\u003e expectedCondition) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" WebDriverWait wait \u003d new WebDriverWait(browser.driver, Duration.ofSeconds(TestProperties.TEST_TIMEOUT));"},{"lineNumber":157,"author":{"gitId":"-"},"content":" return wait.until(expectedCondition);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * Waits until the page is fully loaded."},{"lineNumber":162,"author":{"gitId":"-"},"content":" */"},{"lineNumber":163,"author":{"gitId":"-"},"content":" public void waitForPageToLoad() {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" waitForPageToLoad(false);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":168,"author":{"gitId":"-"},"content":" * Waits until the page is fully loaded."},{"lineNumber":169,"author":{"gitId":"-"},"content":" *"},{"lineNumber":170,"author":{"gitId":"-"},"content":" * @param excludeToast Set this to true if toast message\u0027s disappearance should not be counted"},{"lineNumber":171,"author":{"gitId":"-"},"content":" * as criteria for page load\u0027s completion."},{"lineNumber":172,"author":{"gitId":"-"},"content":" */"},{"lineNumber":173,"author":{"gitId":"-"},"content":" public void waitForPageToLoad(boolean excludeToast) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" browser.waitForPageLoad(excludeToast);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" public void waitForElementVisibility(WebElement element) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" waitFor(ExpectedConditions.visibilityOf(element));"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":" public void waitForElementVisibility(By by) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" waitFor(ExpectedConditions.visibilityOfElementLocated(by));"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" public void waitForElementToBeClickable(WebElement element) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" waitFor(ExpectedConditions.elementToBeClickable(element));"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" public static void waitUntilAnimationFinish(Browser browser) {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" WebDriverWait wait \u003d new WebDriverWait(browser.driver, Duration.ofSeconds(TestProperties.TEST_TIMEOUT));"},{"lineNumber":191,"author":{"gitId":"-"},"content":" wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className(\"ng-animating\")));"},{"lineNumber":192,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" public void waitUntilAnimationFinish() {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish(browser);"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":200,"author":{"gitId":"-"},"content":" * Waits until an element is no longer attached to the DOM or the timeout expires."},{"lineNumber":201,"author":{"gitId":"-"},"content":" * @param element the WebElement that expires after {@link TestProperties#TEST_TIMEOUT}"},{"lineNumber":202,"author":{"gitId":"-"},"content":" * @see org.openqa.selenium.support.ui.FluentWait#until(java.util.function.Function)"},{"lineNumber":203,"author":{"gitId":"-"},"content":" */"},{"lineNumber":204,"author":{"gitId":"-"},"content":" public void waitForElementStaleness(WebElement element) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" waitFor(ExpectedConditions.stalenessOf(element));"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" public void verifyUnclickable(WebElement element) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" if (\"a\".equals(element.getTagName())) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" assertTrue(element.getAttribute(\"class\").contains(\"disabled\"));"},{"lineNumber":211,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" assertNotNull(element.getAttribute(\"disabled\"));"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":217,"author":{"gitId":"-"},"content":" * Waits for a confirmation modal to appear and click the confirm button."},{"lineNumber":218,"author":{"gitId":"-"},"content":" */"},{"lineNumber":219,"author":{"gitId":"-"},"content":" public void waitForConfirmationModalAndClickOk() {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" waitForModalShown();"},{"lineNumber":221,"author":{"gitId":"-"},"content":" waitForElementVisibility(By.className(\"modal-btn-ok\"));"},{"lineNumber":222,"author":{"gitId":"-"},"content":" WebElement okayButton \u003d browser.driver.findElement(By.className(\"modal-btn-ok\"));"},{"lineNumber":223,"author":{"gitId":"-"},"content":" waitForElementToBeClickable(okayButton);"},{"lineNumber":224,"author":{"gitId":"-"},"content":" clickDismissModalButtonAndWaitForModalHidden(okayButton);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" private void waitForModalShown() {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" // Possible exploration: Change to listening to modal shown event as"},{"lineNumber":229,"author":{"gitId":"-"},"content":" // this is based on the implementation detail assumption that once modal-backdrop is added the modal is shown"},{"lineNumber":230,"author":{"gitId":"-"},"content":" waitForElementVisibility(By.className(\"modal-backdrop\"));"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" void waitForModalHidden(WebElement modalBackdrop) {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" // Possible exploration: Change to listening to modal hidden event as"},{"lineNumber":235,"author":{"gitId":"-"},"content":" // this is based on the implementation detail assumption that once modal-backdrop is removed the modal is hidden"},{"lineNumber":236,"author":{"gitId":"-"},"content":" waitForElementStaleness(modalBackdrop);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * Waits for the element to appear in the page, up to the timeout specified."},{"lineNumber":241,"author":{"gitId":"-"},"content":" */"},{"lineNumber":242,"author":{"gitId":"-"},"content":" public WebElement waitForElementPresence(By by) {"},{"lineNumber":243,"author":{"gitId":"-"},"content":" return waitFor(ExpectedConditions.presenceOfElementLocated(by));"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" public void reloadPage() {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" browser.goToUrl(browser.driver.getCurrentUrl());"},{"lineNumber":248,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":" protected Object executeScript(String script, Object... args) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" JavascriptExecutor javascriptExecutor \u003d (JavascriptExecutor) browser.driver;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" return javascriptExecutor.executeScript(script, args);"},{"lineNumber":254,"author":{"gitId":"-"},"content":" }"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":257,"author":{"gitId":"-"},"content":" * Returns the HTML source of the currently loaded page."},{"lineNumber":258,"author":{"gitId":"-"},"content":" */"},{"lineNumber":259,"author":{"gitId":"-"},"content":" public String getPageSource() {"},{"lineNumber":260,"author":{"gitId":"-"},"content":" return browser.driver.getPageSource();"},{"lineNumber":261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" public String getTitle() {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" return browser.driver.getTitle();"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":" public String getPageTitle() {"},{"lineNumber":268,"author":{"gitId":"-"},"content":" return waitForElementPresence(By.tagName(\"h1\")).getText();"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" public void click(By by) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" WebElement element \u003d browser.driver.findElement(by);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" click(element);"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" protected void click(WebElement element) {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" executeScript(\"arguments[0].click();\", element);"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":281,"author":{"gitId":"-"},"content":" * Simulates the clearing and sending of keys to an element."},{"lineNumber":282,"author":{"gitId":"-"},"content":" *"},{"lineNumber":283,"author":{"gitId":"-"},"content":" * \u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This method is not the same as using {@link WebElement#clear} followed by {@link WebElement#sendKeys}."},{"lineNumber":284,"author":{"gitId":"-"},"content":" * It avoids double firing of the {@code change} event which may occur when {@link WebElement#clear} is followed by"},{"lineNumber":285,"author":{"gitId":"-"},"content":" * {@link WebElement#sendKeys}."},{"lineNumber":286,"author":{"gitId":"-"},"content":" *"},{"lineNumber":287,"author":{"gitId":"-"},"content":" * @see AppPage#clearWithoutEvents(WebElement)"},{"lineNumber":288,"author":{"gitId":"-"},"content":" */"},{"lineNumber":289,"author":{"gitId":"-"},"content":" private void clearAndSendKeys(WebElement element, CharSequence... keysToSend) {"},{"lineNumber":290,"author":{"gitId":"-"},"content":" Map\u003cString, Object\u003e result \u003d clearWithoutEvents(element);"},{"lineNumber":291,"author":{"gitId":"-"},"content":" @SuppressWarnings(\"unchecked\")"},{"lineNumber":292,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e errors \u003d (Map\u003cString, String\u003e) result.get(\"errors\");"},{"lineNumber":293,"author":{"gitId":"-"},"content":" if (errors !\u003d null) {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" throw new InvalidElementStateException(errors.get(\"detail\"));"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":" element.sendKeys(keysToSend);"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":301,"author":{"gitId":"-"},"content":" * Clears any kind of editable element, but without firing the {@code change} event (unlike {@link WebElement#clear()})."},{"lineNumber":302,"author":{"gitId":"-"},"content":" * Avoid using this method if {@link WebElement#clear()} meets the requirements as this method depends on implementation"},{"lineNumber":303,"author":{"gitId":"-"},"content":" * details."},{"lineNumber":304,"author":{"gitId":"-"},"content":" */"},{"lineNumber":305,"author":{"gitId":"-"},"content":" private Map\u003cString, Object\u003e clearWithoutEvents(WebElement element) {"},{"lineNumber":306,"author":{"gitId":"-"},"content":" // This method is a close mirror of HtmlUnitWebElement#clear(), except that events are not handled. Note that"},{"lineNumber":307,"author":{"gitId":"-"},"content":" // HtmlUnitWebElement is mirrored as opposed to RemoteWebElement (which is used with actual browsers) for convenience"},{"lineNumber":308,"author":{"gitId":"-"},"content":" // and the implementation can differ."},{"lineNumber":309,"author":{"gitId":"-"},"content":" checkNotNull(element);"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" // Adapted from ExpectedConditions#stalenessOf which forces a staleness check. This allows a meaningful"},{"lineNumber":312,"author":{"gitId":"-"},"content":" // StaleElementReferenceException to be thrown rather than just getting a boolean from ExpectedConditions."},{"lineNumber":313,"author":{"gitId":"-"},"content":" element.isEnabled();"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":" // Fail safe in case the implementation of staleness checks is changed"},{"lineNumber":316,"author":{"gitId":"-"},"content":" if (isExpectedCondition(ExpectedConditions.stalenessOf(element))) {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" throw new AssertionError("},{"lineNumber":318,"author":{"gitId":"-"},"content":" \"Element is stale but should have been caught earlier by element.isEnabled().\");"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" @SuppressWarnings(\"unchecked\")"},{"lineNumber":322,"author":{"gitId":"-"},"content":" Map\u003cString, Object\u003e result \u003d (Map\u003cString, Object\u003e) executeScript(CLEAR_ELEMENT_SCRIPT, element);"},{"lineNumber":323,"author":{"gitId":"-"},"content":" return result;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" protected void fillTextBox(WebElement textBoxElement, String value) {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" scrollElementToCenterAndClick(textBoxElement);"},{"lineNumber":329,"author":{"gitId":"-"},"content":" } catch (WebDriverException e) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" // It is important that a text box element is clickable before we fill it but due to legacy reasons we continue"},{"lineNumber":331,"author":{"gitId":"-"},"content":" // attempting to fill the text box element even if it\u0027s not clickable (which may lead to an unexpected failure"},{"lineNumber":332,"author":{"gitId":"-"},"content":" // later on)"},{"lineNumber":333,"author":{"gitId":"-"},"content":" System.out.println(\"Unexpectedly not able to click on the text box element because of: \");"},{"lineNumber":334,"author":{"gitId":"-"},"content":" System.out.println(e);"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":" // If the intended value is empty `clear` works well enough for us"},{"lineNumber":338,"author":{"gitId":"-"},"content":" if (value.isEmpty()) {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" textBoxElement.clear();"},{"lineNumber":340,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":341,"author":{"gitId":"-"},"content":" }"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"-"},"content":" // Otherwise we need to do special handling of entering input because `clear` and `sendKeys` work differently."},{"lineNumber":344,"author":{"gitId":"-"},"content":" // See documentation for `clearAndSendKeys` for more details."},{"lineNumber":345,"author":{"gitId":"-"},"content":" clearAndSendKeys(textBoxElement, value);"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" textBoxElement.sendKeys(Keys.TAB); // blur the element to receive events"},{"lineNumber":348,"author":{"gitId":"-"},"content":" }"},{"lineNumber":349,"author":{"gitId":"-"},"content":""},{"lineNumber":350,"author":{"gitId":"-"},"content":" protected void fillDatePicker(WebElement dateBox, Instant startInstant, String timeZone) {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" WebElement buttonToOpenPicker \u003d dateBox.findElement(By.tagName(\"button\"));"},{"lineNumber":352,"author":{"gitId":"-"},"content":" click(buttonToOpenPicker);"},{"lineNumber":353,"author":{"gitId":"-"},"content":""},{"lineNumber":354,"author":{"gitId":"-"},"content":" WebElement datePicker \u003d dateBox.findElement(By.tagName(\"ngb-datepicker\"));"},{"lineNumber":355,"author":{"gitId":"-"},"content":" WebElement monthAndYearPicker \u003d datePicker.findElement(By.tagName(\"ngb-datepicker-navigation-select\"));"},{"lineNumber":356,"author":{"gitId":"-"},"content":" WebElement monthPicker \u003d monthAndYearPicker.findElement(By.cssSelector(\"[title\u003d\u0027Select month\u0027]\"));"},{"lineNumber":357,"author":{"gitId":"-"},"content":" WebElement yearPicker \u003d monthAndYearPicker.findElement(By.cssSelector(\"[title\u003d\u0027Select year\u0027]\"));"},{"lineNumber":358,"author":{"gitId":"-"},"content":" WebElement dayPicker \u003d datePicker.findElement(By.cssSelector(\"ngb-datepicker-month\"));"},{"lineNumber":359,"author":{"gitId":"-"},"content":""},{"lineNumber":360,"author":{"gitId":"-"},"content":" String year \u003d getYearString(startInstant, timeZone);"},{"lineNumber":361,"author":{"gitId":"-"},"content":" String month \u003d getMonthString(startInstant, timeZone);"},{"lineNumber":362,"author":{"gitId":"-"},"content":" String date \u003d getFullDateString(startInstant, timeZone);"},{"lineNumber":363,"author":{"gitId":"-"},"content":""},{"lineNumber":364,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(yearPicker, year);"},{"lineNumber":365,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(monthPicker, month);"},{"lineNumber":366,"author":{"gitId":"-"},"content":" click(dayPicker.findElement(By.cssSelector(String.format(\"[aria-label\u003d\u0027%s\u0027]\", date))));"},{"lineNumber":367,"author":{"gitId":"-"},"content":" }"},{"lineNumber":368,"author":{"gitId":"-"},"content":""},{"lineNumber":369,"author":{"gitId":"-"},"content":" protected void fillFileBox(RemoteWebElement fileBoxElement, String fileName) {"},{"lineNumber":370,"author":{"gitId":"-"},"content":" if (fileName.isEmpty()) {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" fileBoxElement.clear();"},{"lineNumber":372,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" fileBoxElement.setFileDetector(new UselessFileDetector());"},{"lineNumber":374,"author":{"gitId":"-"},"content":" String filePath \u003d new File(fileName).getAbsolutePath();"},{"lineNumber":375,"author":{"gitId":"-"},"content":" fileBoxElement.sendKeys(filePath);"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":" }"},{"lineNumber":378,"author":{"gitId":"-"},"content":""},{"lineNumber":379,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":380,"author":{"gitId":"-"},"content":" * Get rich text from editor."},{"lineNumber":381,"author":{"gitId":"-"},"content":" */"},{"lineNumber":382,"author":{"gitId":"-"},"content":" protected String getEditorRichText(WebElement editor) {"},{"lineNumber":383,"author":{"gitId":"-"},"content":" waitForElementPresence(By.tagName(\"iframe\"));"},{"lineNumber":384,"author":{"gitId":"-"},"content":" String id \u003d editor.findElement(By.tagName(\"textarea\")).getAttribute(\"id\");"},{"lineNumber":385,"author":{"gitId":"-"},"content":" return (String) ((JavascriptExecutor) browser.driver)"},{"lineNumber":386,"author":{"gitId":"-"},"content":" .executeAsyncScript(READ_TINYMCE_CONTENT_SCRIPT, id);"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":390,"author":{"gitId":"-"},"content":" * Write rich text to editor."},{"lineNumber":391,"author":{"gitId":"-"},"content":" */"},{"lineNumber":392,"author":{"gitId":"-"},"content":" protected void writeToRichTextEditor(WebElement editor, String text) {"},{"lineNumber":393,"author":{"gitId":"-"},"content":" waitForElementPresence(By.tagName(\"iframe\"));"},{"lineNumber":394,"author":{"gitId":"-"},"content":" String id \u003d editor.findElement(By.tagName(\"textarea\")).getAttribute(\"id\");"},{"lineNumber":395,"author":{"gitId":"-"},"content":" ((JavascriptExecutor) browser.driver).executeAsyncScript(WRITE_TO_TINYMCE_SCRIPT, id, text);"},{"lineNumber":396,"author":{"gitId":"-"},"content":" }"},{"lineNumber":397,"author":{"gitId":"-"},"content":""},{"lineNumber":398,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":399,"author":{"gitId":"-"},"content":" * Select the option, if it is not already selected."},{"lineNumber":400,"author":{"gitId":"-"},"content":" * No action taken if it is already selected."},{"lineNumber":401,"author":{"gitId":"-"},"content":" */"},{"lineNumber":402,"author":{"gitId":"-"},"content":" protected void markOptionAsSelected(WebElement option) {"},{"lineNumber":403,"author":{"gitId":"-"},"content":" waitForElementVisibility(option);"},{"lineNumber":404,"author":{"gitId":"-"},"content":" if (!option.isSelected()) {"},{"lineNumber":405,"author":{"gitId":"-"},"content":" click(option);"},{"lineNumber":406,"author":{"gitId":"-"},"content":" }"},{"lineNumber":407,"author":{"gitId":"-"},"content":" }"},{"lineNumber":408,"author":{"gitId":"-"},"content":""},{"lineNumber":409,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":410,"author":{"gitId":"-"},"content":" * Unselect the option, if it is not already unselected."},{"lineNumber":411,"author":{"gitId":"-"},"content":" * No action taken if it is already unselected\u0027."},{"lineNumber":412,"author":{"gitId":"-"},"content":" */"},{"lineNumber":413,"author":{"gitId":"-"},"content":" protected void markOptionAsUnselected(WebElement option) {"},{"lineNumber":414,"author":{"gitId":"-"},"content":" waitForElementVisibility(option);"},{"lineNumber":415,"author":{"gitId":"-"},"content":" if (option.isSelected()) {"},{"lineNumber":416,"author":{"gitId":"-"},"content":" click(option);"},{"lineNumber":417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":418,"author":{"gitId":"-"},"content":" }"},{"lineNumber":419,"author":{"gitId":"-"},"content":""},{"lineNumber":420,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":421,"author":{"gitId":"-"},"content":" * Returns the text of the option selected in the dropdown."},{"lineNumber":422,"author":{"gitId":"-"},"content":" */"},{"lineNumber":423,"author":{"gitId":"-"},"content":" protected String getSelectedDropdownOptionText(WebElement dropdown) {"},{"lineNumber":424,"author":{"gitId":"-"},"content":" Select select \u003d new Select(dropdown);"},{"lineNumber":425,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":426,"author":{"gitId":"-"},"content":" uiRetryManager.runUntilNoRecognizedException(new Retryable(\"Wait for dropdown text to load\") {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":428,"author":{"gitId":"-"},"content":" public void run() {"},{"lineNumber":429,"author":{"gitId":"-"},"content":" String txt \u003d select.getFirstSelectedOption().getText();"},{"lineNumber":430,"author":{"gitId":"-"},"content":" assertNotEquals(\"\", txt);"},{"lineNumber":431,"author":{"gitId":"-"},"content":" }"},{"lineNumber":432,"author":{"gitId":"-"},"content":" }, WebDriverException.class, AssertionError.class);"},{"lineNumber":433,"author":{"gitId":"-"},"content":" return select.getFirstSelectedOption().getText();"},{"lineNumber":434,"author":{"gitId":"-"},"content":" } catch (MaximumRetriesExceededException e) {"},{"lineNumber":435,"author":{"gitId":"-"},"content":" return select.getFirstSelectedOption().getText();"},{"lineNumber":436,"author":{"gitId":"-"},"content":" }"},{"lineNumber":437,"author":{"gitId":"-"},"content":" }"},{"lineNumber":438,"author":{"gitId":"-"},"content":""},{"lineNumber":439,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":440,"author":{"gitId":"-"},"content":" * Selects option in dropdown based on visible text."},{"lineNumber":441,"author":{"gitId":"-"},"content":" */"},{"lineNumber":442,"author":{"gitId":"-"},"content":" protected void selectDropdownOptionByText(WebElement dropdown, String text) {"},{"lineNumber":443,"author":{"gitId":"-"},"content":" scrollElementToCenter(dropdown);"},{"lineNumber":444,"author":{"gitId":"-"},"content":" Select select \u003d new Select(dropdown);"},{"lineNumber":445,"author":{"gitId":"-"},"content":" select.selectByVisibleText(text);"},{"lineNumber":446,"author":{"gitId":"-"},"content":" }"},{"lineNumber":447,"author":{"gitId":"-"},"content":""},{"lineNumber":448,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":449,"author":{"gitId":"-"},"content":" * Selects option in dropdown based on value."},{"lineNumber":450,"author":{"gitId":"-"},"content":" */"},{"lineNumber":451,"author":{"gitId":"-"},"content":" protected void selectDropdownOptionByValue(WebElement dropdown, String value) {"},{"lineNumber":452,"author":{"gitId":"-"},"content":" scrollElementToCenter(dropdown);"},{"lineNumber":453,"author":{"gitId":"-"},"content":" Select select \u003d new Select(dropdown);"},{"lineNumber":454,"author":{"gitId":"-"},"content":" select.selectByValue(value);"},{"lineNumber":455,"author":{"gitId":"-"},"content":" }"},{"lineNumber":456,"author":{"gitId":"-"},"content":""},{"lineNumber":457,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":458,"author":{"gitId":"-"},"content":" * Asserts that all values in the body of the given table are equal to the expectedTableBodyValues."},{"lineNumber":459,"author":{"gitId":"-"},"content":" */"},{"lineNumber":460,"author":{"gitId":"-"},"content":" protected void verifyTableBodyValues(WebElement table, String[][] expectedTableBodyValues) {"},{"lineNumber":461,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElement(By.tagName(\"tbody\")).findElements(By.tagName(\"tr\"));"},{"lineNumber":462,"author":{"gitId":"-"},"content":" assertTrue(expectedTableBodyValues.length \u003c\u003d rows.size());"},{"lineNumber":463,"author":{"gitId":"-"},"content":" for (int rowIndex \u003d 0; rowIndex \u003c expectedTableBodyValues.length; rowIndex++) {"},{"lineNumber":464,"author":{"gitId":"-"},"content":" verifyTableRowValues(rows.get(rowIndex), expectedTableBodyValues[rowIndex]);"},{"lineNumber":465,"author":{"gitId":"-"},"content":" }"},{"lineNumber":466,"author":{"gitId":"-"},"content":" }"},{"lineNumber":467,"author":{"gitId":"-"},"content":""},{"lineNumber":468,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":469,"author":{"gitId":"-"},"content":" * Asserts that all values in the row header of the given table are equal to the expectedRowHeaderValues."},{"lineNumber":470,"author":{"gitId":"-"},"content":" */"},{"lineNumber":471,"author":{"gitId":"-"},"content":" protected void verifyTableRowHeaderValues(WebElement table, String[][] expectedTableRowHeaderValues) {"},{"lineNumber":472,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElement(By.tagName(\"thead\")).findElements(By.tagName(\"tr\"));"},{"lineNumber":473,"author":{"gitId":"-"},"content":" assertTrue(expectedTableRowHeaderValues.length \u003c\u003d rows.size());"},{"lineNumber":474,"author":{"gitId":"-"},"content":" for (int rowIndex \u003d 0; rowIndex \u003c expectedTableRowHeaderValues.length; rowIndex++) {"},{"lineNumber":475,"author":{"gitId":"-"},"content":" verifyTableHeaderValues(rows.get(rowIndex), expectedTableRowHeaderValues[rowIndex]);"},{"lineNumber":476,"author":{"gitId":"-"},"content":" }"},{"lineNumber":477,"author":{"gitId":"-"},"content":" }"},{"lineNumber":478,"author":{"gitId":"-"},"content":""},{"lineNumber":479,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":480,"author":{"gitId":"-"},"content":" * Asserts that all values in the column header of the given table are equal to the expectedTablColumnHeaderValues."},{"lineNumber":481,"author":{"gitId":"-"},"content":" */"},{"lineNumber":482,"author":{"gitId":"-"},"content":" protected void verifyTableColumnHeaderValues(WebElement table, String[][] expectedTablColumnHeaderValues) {"},{"lineNumber":483,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElement(By.tagName(\"tbody\")).findElements(By.tagName(\"tr\"));"},{"lineNumber":484,"author":{"gitId":"-"},"content":" assertTrue(expectedTablColumnHeaderValues.length \u003c\u003d rows.size());"},{"lineNumber":485,"author":{"gitId":"-"},"content":" for (int rowIndex \u003d 0; rowIndex \u003c expectedTablColumnHeaderValues.length; rowIndex++) {"},{"lineNumber":486,"author":{"gitId":"-"},"content":" verifyTableHeaderValues(rows.get(rowIndex), expectedTablColumnHeaderValues[rowIndex]);"},{"lineNumber":487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":488,"author":{"gitId":"-"},"content":" }"},{"lineNumber":489,"author":{"gitId":"-"},"content":""},{"lineNumber":490,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":491,"author":{"gitId":"-"},"content":" * Asserts that all data values in the given table row are equal to the expectedRowValues."},{"lineNumber":492,"author":{"gitId":"-"},"content":" */"},{"lineNumber":493,"author":{"gitId":"-"},"content":" protected void verifyTableRowValues(WebElement row, String[] expectedRowValues) {"},{"lineNumber":494,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e cells \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":495,"author":{"gitId":"-"},"content":" assertTrue(expectedRowValues.length \u003c\u003d cells.size());"},{"lineNumber":496,"author":{"gitId":"-"},"content":" for (int cellIndex \u003d 0; cellIndex \u003c expectedRowValues.length; cellIndex++) {"},{"lineNumber":497,"author":{"gitId":"-"},"content":" assertEquals(expectedRowValues[cellIndex], cells.get(cellIndex).getText());"},{"lineNumber":498,"author":{"gitId":"-"},"content":" }"},{"lineNumber":499,"author":{"gitId":"-"},"content":" }"},{"lineNumber":500,"author":{"gitId":"-"},"content":""},{"lineNumber":501,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":502,"author":{"gitId":"-"},"content":" * Asserts that all header values in the given table row are equal to the expectedRowHeaderValues."},{"lineNumber":503,"author":{"gitId":"-"},"content":" */"},{"lineNumber":504,"author":{"gitId":"-"},"content":" protected void verifyTableHeaderValues(WebElement row, String[] expectedRowHeaderValues) {"},{"lineNumber":505,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e cells \u003d row.findElements(By.tagName(\"th\"));"},{"lineNumber":506,"author":{"gitId":"-"},"content":" assertTrue(expectedRowHeaderValues.length \u003c\u003d cells.size());"},{"lineNumber":507,"author":{"gitId":"-"},"content":" for (int cellIndex \u003d 0; cellIndex \u003c expectedRowHeaderValues.length; cellIndex++) {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" assertEquals(expectedRowHeaderValues[cellIndex], cells.get(cellIndex).getText());"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" }"},{"lineNumber":511,"author":{"gitId":"-"},"content":""},{"lineNumber":512,"author":{"gitId":"-"},"content":" public void verifyBannerContent(NotificationAttributes expected) {"},{"lineNumber":513,"author":{"gitId":"-"},"content":" WebElement banner \u003d browser.driver.findElement(By.className(\"banner\"));"},{"lineNumber":514,"author":{"gitId":"-"},"content":" String title \u003d banner.findElement(By.tagName(\"h5\")).getText();"},{"lineNumber":515,"author":{"gitId":"-"},"content":" String message \u003d banner.findElement(By.className(\"banner-text\")).getAttribute(\"innerHTML\");"},{"lineNumber":516,"author":{"gitId":"-"},"content":" assertEquals(expected.getTitle(), title);"},{"lineNumber":517,"author":{"gitId":"-"},"content":" assertEquals(expected.getMessage(), message);"},{"lineNumber":518,"author":{"gitId":"-"},"content":" }"},{"lineNumber":519,"author":{"gitId":"-"},"content":""},{"lineNumber":520,"author":{"gitId":"-"},"content":" public boolean isBannerVisible() {"},{"lineNumber":521,"author":{"gitId":"-"},"content":" return isElementVisible(By.className(\"banner\"));"},{"lineNumber":522,"author":{"gitId":"-"},"content":" }"},{"lineNumber":523,"author":{"gitId":"-"},"content":""},{"lineNumber":524,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":525,"author":{"gitId":"-"},"content":" * Clicks the element and clicks \u0027Yes\u0027 in the follow up dialog box."},{"lineNumber":526,"author":{"gitId":"-"},"content":" * Fails if there is no dialog box."},{"lineNumber":527,"author":{"gitId":"-"},"content":" * @return the resulting page."},{"lineNumber":528,"author":{"gitId":"-"},"content":" */"},{"lineNumber":529,"author":{"gitId":"-"},"content":" public AppPage clickAndConfirm(WebElement elementToClick) {"},{"lineNumber":530,"author":{"gitId":"-"},"content":" click(elementToClick);"},{"lineNumber":531,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":532,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":533,"author":{"gitId":"-"},"content":" }"},{"lineNumber":534,"author":{"gitId":"-"},"content":""},{"lineNumber":535,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":536,"author":{"gitId":"-"},"content":" * Returns True if the page contains some basic elements expected in a page of the"},{"lineNumber":537,"author":{"gitId":"-"},"content":" * specific type. e.g., the top heading."},{"lineNumber":538,"author":{"gitId":"-"},"content":" */"},{"lineNumber":539,"author":{"gitId":"-"},"content":" protected abstract boolean containsExpectedPageContents();"},{"lineNumber":540,"author":{"gitId":"-"},"content":""},{"lineNumber":541,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":542,"author":{"gitId":"-"},"content":" * Returns True if there is a corresponding element for the given locator."},{"lineNumber":543,"author":{"gitId":"-"},"content":" */"},{"lineNumber":544,"author":{"gitId":"-"},"content":" public boolean isElementPresent(By by) {"},{"lineNumber":545,"author":{"gitId":"-"},"content":" return browser.driver.findElements(by).size() !\u003d 0;"},{"lineNumber":546,"author":{"gitId":"-"},"content":" }"},{"lineNumber":547,"author":{"gitId":"-"},"content":""},{"lineNumber":548,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":549,"author":{"gitId":"-"},"content":" * Returns True if there is a corresponding element for the given id or name."},{"lineNumber":550,"author":{"gitId":"-"},"content":" */"},{"lineNumber":551,"author":{"gitId":"-"},"content":" public boolean isElementPresent(String elementId) {"},{"lineNumber":552,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":553,"author":{"gitId":"-"},"content":" browser.driver.findElement(By.id(elementId));"},{"lineNumber":554,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":555,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":556,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":557,"author":{"gitId":"-"},"content":" }"},{"lineNumber":558,"author":{"gitId":"-"},"content":" }"},{"lineNumber":559,"author":{"gitId":"-"},"content":""},{"lineNumber":560,"author":{"gitId":"-"},"content":" public boolean isElementVisible(By by) {"},{"lineNumber":561,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":562,"author":{"gitId":"-"},"content":" return browser.driver.findElement(by).isDisplayed();"},{"lineNumber":563,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":564,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":565,"author":{"gitId":"-"},"content":" }"},{"lineNumber":566,"author":{"gitId":"-"},"content":" }"},{"lineNumber":567,"author":{"gitId":"-"},"content":""},{"lineNumber":568,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":569,"author":{"gitId":"-"},"content":" * Returns true if the expected condition is evaluated to true immediately."},{"lineNumber":570,"author":{"gitId":"-"},"content":" * @see ExpectedConditions"},{"lineNumber":571,"author":{"gitId":"-"},"content":" */"},{"lineNumber":572,"author":{"gitId":"-"},"content":" private boolean isExpectedCondition(ExpectedCondition\u003c?\u003e expectedCondition) {"},{"lineNumber":573,"author":{"gitId":"-"},"content":" Object value \u003d expectedCondition.apply(browser.driver);"},{"lineNumber":574,"author":{"gitId":"-"},"content":" if (value \u003d\u003d null) {"},{"lineNumber":575,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":576,"author":{"gitId":"-"},"content":" }"},{"lineNumber":577,"author":{"gitId":"-"},"content":""},{"lineNumber":578,"author":{"gitId":"-"},"content":" if (value.getClass() \u003d\u003d Boolean.class) {"},{"lineNumber":579,"author":{"gitId":"-"},"content":" return (boolean) value;"},{"lineNumber":580,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":581,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":582,"author":{"gitId":"-"},"content":" }"},{"lineNumber":583,"author":{"gitId":"-"},"content":" }"},{"lineNumber":584,"author":{"gitId":"-"},"content":""},{"lineNumber":585,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":586,"author":{"gitId":"-"},"content":" * Clicks a button (can be inside or outside the modal) that dismisses the modal and waits for the modal to be hidden."},{"lineNumber":587,"author":{"gitId":"-"},"content":" * The caller must ensure the button is in the modal or a timeout will occur while waiting for the modal to be hidden."},{"lineNumber":588,"author":{"gitId":"-"},"content":" * @param dismissModalButton a button that dismisses the modal"},{"lineNumber":589,"author":{"gitId":"-"},"content":" */"},{"lineNumber":590,"author":{"gitId":"-"},"content":" public void clickDismissModalButtonAndWaitForModalHidden(WebElement dismissModalButton) {"},{"lineNumber":591,"author":{"gitId":"-"},"content":" // Note: Should first check if the button can actually dismiss the modal otherwise the state will be consistent."},{"lineNumber":592,"author":{"gitId":"-"},"content":" // However, it is too difficult to check."},{"lineNumber":593,"author":{"gitId":"-"},"content":""},{"lineNumber":594,"author":{"gitId":"-"},"content":" WebElement modalBackdrop \u003d browser.driver.findElement(By.className(\"modal-backdrop\"));"},{"lineNumber":595,"author":{"gitId":"-"},"content":""},{"lineNumber":596,"author":{"gitId":"-"},"content":" click(dismissModalButton);"},{"lineNumber":597,"author":{"gitId":"-"},"content":" waitForModalHidden(modalBackdrop);"},{"lineNumber":598,"author":{"gitId":"-"},"content":" }"},{"lineNumber":599,"author":{"gitId":"-"},"content":""},{"lineNumber":600,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":601,"author":{"gitId":"-"},"content":" * Scrolls element to center and clicks on it."},{"lineNumber":602,"author":{"gitId":"-"},"content":" *"},{"lineNumber":603,"author":{"gitId":"-"},"content":" * \u003cp\u003eAs compared to {@link org.openqa.selenium.interactions.Actions#moveToElement(WebElement)}, this method is"},{"lineNumber":604,"author":{"gitId":"-"},"content":" * more reliable as the element will not get blocked by elements such as the header."},{"lineNumber":605,"author":{"gitId":"-"},"content":" *"},{"lineNumber":606,"author":{"gitId":"-"},"content":" * \u003cp\u003eFurthermore, {@link org.openqa.selenium.interactions.Actions#moveToElement(WebElement)} is currently not"},{"lineNumber":607,"author":{"gitId":"-"},"content":" * working in Geckodriver."},{"lineNumber":608,"author":{"gitId":"-"},"content":" *"},{"lineNumber":609,"author":{"gitId":"-"},"content":" * \u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e A \"scroll into view\" Actions primitive is in progress and may allow scrolling element to center."},{"lineNumber":610,"author":{"gitId":"-"},"content":" * Tracking issue:"},{"lineNumber":611,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://github.com/w3c/webdriver/issues/1005\"\u003eMissing \"scroll into view\" Actions primitive\u003c/a\u003e."},{"lineNumber":612,"author":{"gitId":"-"},"content":" *"},{"lineNumber":613,"author":{"gitId":"-"},"content":" * \u003cp\u003eAlso note that there are some other caveats, for example"},{"lineNumber":614,"author":{"gitId":"-"},"content":" * {@code new Actions(browser.driver).moveToElement(...).click(...).perform()} does not behave consistently across"},{"lineNumber":615,"author":{"gitId":"-"},"content":" * browsers."},{"lineNumber":616,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":617,"author":{"gitId":"-"},"content":" * \u003cli\u003eIn FirefoxDriver, the element is scrolled to and then a click is attempted on the element."},{"lineNumber":618,"author":{"gitId":"-"},"content":" * \u003cli\u003eIn ChromeDriver, the mouse is scrolled to the element and then a click is attempted on the mouse coordinate,"},{"lineNumber":619,"author":{"gitId":"-"},"content":" * which means another element can actually be clicked (such as the header or a blocking pop-up)."},{"lineNumber":620,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":621,"author":{"gitId":"-"},"content":" *"},{"lineNumber":622,"author":{"gitId":"-"},"content":" * \u003cp\u003eChromeDriver also automatically scrolls to an element when clicking an element if it is not in the viewport."},{"lineNumber":623,"author":{"gitId":"-"},"content":" */"},{"lineNumber":624,"author":{"gitId":"-"},"content":" void scrollElementToCenterAndClick(WebElement element) {"},{"lineNumber":625,"author":{"gitId":"-"},"content":" // TODO: migrate to `scrollIntoView` when Geckodriver is adopted"},{"lineNumber":626,"author":{"gitId":"-"},"content":" scrollElementToCenter(element);"},{"lineNumber":627,"author":{"gitId":"-"},"content":" element.click();"},{"lineNumber":628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":629,"author":{"gitId":"-"},"content":""},{"lineNumber":630,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":631,"author":{"gitId":"-"},"content":" * Scrolls element to center."},{"lineNumber":632,"author":{"gitId":"-"},"content":" */"},{"lineNumber":633,"author":{"gitId":"-"},"content":" void scrollElementToCenter(WebElement element) {"},{"lineNumber":634,"author":{"gitId":"-"},"content":" executeScript(SCROLL_ELEMENT_TO_CENTER_AND_CLICK_SCRIPT, element);"},{"lineNumber":635,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":636,"author":{"gitId":"-"},"content":" }"},{"lineNumber":637,"author":{"gitId":"-"},"content":""},{"lineNumber":638,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":639,"author":{"gitId":"-"},"content":" * Asserts message in toast is equal to the expected message."},{"lineNumber":640,"author":{"gitId":"-"},"content":" */"},{"lineNumber":641,"author":{"gitId":"-"},"content":" public void verifyStatusMessage(String expectedMessage) {"},{"lineNumber":642,"author":{"gitId":"-"},"content":" verifyStatusMessageWithLinks(expectedMessage, new String[] {});"},{"lineNumber":643,"author":{"gitId":"-"},"content":" closeToast();"},{"lineNumber":644,"author":{"gitId":"-"},"content":" }"},{"lineNumber":645,"author":{"gitId":"-"},"content":""},{"lineNumber":646,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":647,"author":{"gitId":"-"},"content":" * Asserts message in toast is equal to the expected message and contains the expected links."},{"lineNumber":648,"author":{"gitId":"-"},"content":" */"},{"lineNumber":649,"author":{"gitId":"-"},"content":" public void verifyStatusMessageWithLinks(String expectedMessage, String[] expectedLinks) {"},{"lineNumber":650,"author":{"gitId":"-"},"content":" WebElement[] statusMessage \u003d new WebElement[1];"},{"lineNumber":651,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":652,"author":{"gitId":"-"},"content":" uiRetryManager.runUntilNoRecognizedException(new Retryable(\"Verify status to user\") {"},{"lineNumber":653,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":654,"author":{"gitId":"-"},"content":" public void run() {"},{"lineNumber":655,"author":{"gitId":"-"},"content":" statusMessage[0] \u003d waitForElementPresence(By.className(\"toast-body\"));"},{"lineNumber":656,"author":{"gitId":"-"},"content":" assertEquals(expectedMessage, statusMessage[0].getText());"},{"lineNumber":657,"author":{"gitId":"-"},"content":" }"},{"lineNumber":658,"author":{"gitId":"-"},"content":" }, WebDriverException.class, AssertionError.class);"},{"lineNumber":659,"author":{"gitId":"-"},"content":" } catch (MaximumRetriesExceededException e) {"},{"lineNumber":660,"author":{"gitId":"-"},"content":" statusMessage[0] \u003d waitForElementPresence(By.className(\"toast-body\"));"},{"lineNumber":661,"author":{"gitId":"-"},"content":" assertEquals(expectedMessage, statusMessage[0].getText());"},{"lineNumber":662,"author":{"gitId":"-"},"content":" } finally {"},{"lineNumber":663,"author":{"gitId":"-"},"content":" if (expectedLinks.length \u003e 0) {"},{"lineNumber":664,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e actualLinks \u003d statusMessage[0].findElements(By.tagName(\"a\"));"},{"lineNumber":665,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c expectedLinks.length; i++) {"},{"lineNumber":666,"author":{"gitId":"-"},"content":" assertTrue(actualLinks.get(i).getAttribute(\"href\").contains(expectedLinks[i]));"},{"lineNumber":667,"author":{"gitId":"-"},"content":" }"},{"lineNumber":668,"author":{"gitId":"-"},"content":" }"},{"lineNumber":669,"author":{"gitId":"-"},"content":" }"},{"lineNumber":670,"author":{"gitId":"-"},"content":" }"},{"lineNumber":671,"author":{"gitId":"-"},"content":""},{"lineNumber":672,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":673,"author":{"gitId":"-"},"content":" * Closes toast message."},{"lineNumber":674,"author":{"gitId":"-"},"content":" */"},{"lineNumber":675,"author":{"gitId":"-"},"content":" public void closeToast() {"},{"lineNumber":676,"author":{"gitId":"-"},"content":" WebElement toastCloseButton \u003d waitForElementPresence(By.className(\"btn-close\"));"},{"lineNumber":677,"author":{"gitId":"-"},"content":" click(toastCloseButton);"},{"lineNumber":678,"author":{"gitId":"-"},"content":" }"},{"lineNumber":679,"author":{"gitId":"-"},"content":""},{"lineNumber":680,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":681,"author":{"gitId":"-"},"content":" * Switches to the new browser window just opened."},{"lineNumber":682,"author":{"gitId":"-"},"content":" */"},{"lineNumber":683,"author":{"gitId":"-"},"content":" protected void switchToNewWindow() {"},{"lineNumber":684,"author":{"gitId":"-"},"content":" browser.switchToNewWindow();"},{"lineNumber":685,"author":{"gitId":"-"},"content":" }"},{"lineNumber":686,"author":{"gitId":"-"},"content":""},{"lineNumber":687,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":688,"author":{"gitId":"-"},"content":" * Closes current window and switches back to parent window."},{"lineNumber":689,"author":{"gitId":"-"},"content":" */"},{"lineNumber":690,"author":{"gitId":"-"},"content":" public void closeCurrentWindowAndSwitchToParentWindow() {"},{"lineNumber":691,"author":{"gitId":"-"},"content":" browser.closeCurrentWindowAndSwitchToParentWindow();"},{"lineNumber":692,"author":{"gitId":"-"},"content":" }"},{"lineNumber":693,"author":{"gitId":"-"},"content":""},{"lineNumber":694,"author":{"gitId":"-"},"content":" String getDisplayGiverName(FeedbackParticipantType type) {"},{"lineNumber":695,"author":{"gitId":"-"},"content":" switch (type) {"},{"lineNumber":696,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":697,"author":{"gitId":"-"},"content":" return \"Feedback session creator (i.e., me)\";"},{"lineNumber":698,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":699,"author":{"gitId":"-"},"content":" return \"Students in this course\";"},{"lineNumber":700,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":701,"author":{"gitId":"-"},"content":" return \"Instructors in this course\";"},{"lineNumber":702,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":703,"author":{"gitId":"-"},"content":" return \"Teams in this course\";"},{"lineNumber":704,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":705,"author":{"gitId":"-"},"content":" throw new IllegalArgumentException(\"Unknown FeedbackParticipantType: \" + type);"},{"lineNumber":706,"author":{"gitId":"-"},"content":" }"},{"lineNumber":707,"author":{"gitId":"-"},"content":" }"},{"lineNumber":708,"author":{"gitId":"-"},"content":""},{"lineNumber":709,"author":{"gitId":"-"},"content":" String getDisplayRecipientName(FeedbackParticipantType type) {"},{"lineNumber":710,"author":{"gitId":"-"},"content":" switch (type) {"},{"lineNumber":711,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":712,"author":{"gitId":"-"},"content":" return \"Giver (Self feedback)\";"},{"lineNumber":713,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":714,"author":{"gitId":"-"},"content":" return \"Other students in the same section\";"},{"lineNumber":715,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":716,"author":{"gitId":"-"},"content":" return \"Students in the course\";"},{"lineNumber":717,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":718,"author":{"gitId":"-"},"content":" return \"Other students in the course\";"},{"lineNumber":719,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":720,"author":{"gitId":"-"},"content":" return \"Instructors in the course\";"},{"lineNumber":721,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":722,"author":{"gitId":"-"},"content":" return \"Other teams in the same section\";"},{"lineNumber":723,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":724,"author":{"gitId":"-"},"content":" return \"Teams in the course\";"},{"lineNumber":725,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":726,"author":{"gitId":"-"},"content":" return \"Other teams in the course\";"},{"lineNumber":727,"author":{"gitId":"-"},"content":" case OWN_TEAM:"},{"lineNumber":728,"author":{"gitId":"-"},"content":" return \"Giver\u0027s team\";"},{"lineNumber":729,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":730,"author":{"gitId":"-"},"content":" return \"Giver\u0027s team members\";"},{"lineNumber":731,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":732,"author":{"gitId":"-"},"content":" return \"Giver\u0027s team members and Giver\";"},{"lineNumber":733,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":734,"author":{"gitId":"-"},"content":" return \"Nobody specific (For general class feedback)\";"},{"lineNumber":735,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":736,"author":{"gitId":"-"},"content":" throw new IllegalArgumentException(\"Unknown FeedbackParticipantType: \" + type);"},{"lineNumber":737,"author":{"gitId":"-"},"content":" }"},{"lineNumber":738,"author":{"gitId":"-"},"content":" }"},{"lineNumber":739,"author":{"gitId":"-"},"content":""},{"lineNumber":740,"author":{"gitId":"-"},"content":" String getDisplayedDateTime(Instant instant, String timeZone, String pattern) {"},{"lineNumber":741,"author":{"gitId":"-"},"content":" ZonedDateTime zonedDateTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone(instant, timeZone, false)"},{"lineNumber":742,"author":{"gitId":"-"},"content":" .atZone(ZoneId.of(timeZone));"},{"lineNumber":743,"author":{"gitId":"yuanxi1"},"content":" return DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH).format(zonedDateTime);"},{"lineNumber":744,"author":{"gitId":"-"},"content":" }"},{"lineNumber":745,"author":{"gitId":"-"},"content":""},{"lineNumber":746,"author":{"gitId":"-"},"content":" private String getFullDateString(Instant instant, String timeZone) {"},{"lineNumber":747,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"EEEE, MMMM d, yyyy\");"},{"lineNumber":748,"author":{"gitId":"-"},"content":" }"},{"lineNumber":749,"author":{"gitId":"-"},"content":""},{"lineNumber":750,"author":{"gitId":"-"},"content":" private String getYearString(Instant instant, String timeZone) {"},{"lineNumber":751,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"yyyy\");"},{"lineNumber":752,"author":{"gitId":"-"},"content":" }"},{"lineNumber":753,"author":{"gitId":"-"},"content":""},{"lineNumber":754,"author":{"gitId":"-"},"content":" private String getMonthString(Instant instant, String timeZone) {"},{"lineNumber":755,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"MMM\");"},{"lineNumber":756,"author":{"gitId":"-"},"content":" }"},{"lineNumber":757,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":2,"-":755}},{"path":"src/e2e/java/teammates/e2e/pageobjects/FeedbackSubmitPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertEquals;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertFalse;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertTrue;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.junit.Assert.fail;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.openqa.selenium.NoSuchElementException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackConstantSumQuestionDetails;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackConstantSumResponseDetails;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackContributionQuestionDetails;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackContributionResponseDetails;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqQuestionDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqResponseDetails;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqResponseDetails;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackNumericalScaleQuestionDetails;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackNumericalScaleResponseDetails;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsQuestionDetails;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsResponseDetails;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankQuestionDetails;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankRecipientsResponseDetails;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRubricQuestionDetails;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRubricResponseDetails;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextQuestionDetails;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextResponseDetails;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Represents the feedback submission page of the website."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"-"},"content":"public class FeedbackSubmitPage extends AppPage {"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" public FeedbackSubmitPage(Browser browser) {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":52,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (isElementPresent(By.className(\"modal-content\"))) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return getPageTitle().contains(\"Submit Feedback\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" public void verifyFeedbackSessionDetails(FeedbackSessionAttributes feedbackSession, CourseAttributes course) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertEquals(getCourseId(), feedbackSession.getCourseId());"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertEquals(getCourseName(), course.getName());"},{"lineNumber":62,"author":{"gitId":"-"},"content":" assertEquals(getCourseInstitute(), course.getInstitute());"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertEquals(getFeedbackSessionName(), feedbackSession.getFeedbackSessionName());"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertDateEquals(getOpeningTime(), feedbackSession.getStartTime(), feedbackSession.getTimeZone());"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertDateEquals(getClosingTime(), feedbackSession.getEndTime(), feedbackSession.getTimeZone());"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertEquals(getInstructions(), feedbackSession.getInstructions());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void verifyNumQuestions(int expected) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertEquals(browser.driver.findElements(By.cssSelector(\"[id^\u003d\u0027question-submission-form-qn-\u0027]\")).size(), expected);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void verifyQuestionDetails(int qnNumber, FeedbackQuestionAttributes questionAttributes) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assertEquals(getQuestionBrief(qnNumber), questionAttributes.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":75,"author":{"gitId":"-"},"content":" verifyVisibilityList(qnNumber, questionAttributes);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" if (questionAttributes.getQuestionDescription() !\u003d null) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertEquals(getQuestionDescription(qnNumber), questionAttributes.getQuestionDescription());"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void verifyLimitedRecipients(int qnNumber, int numRecipients, List\u003cString\u003e recipientNames) {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientDropdowns \u003d getQuestionForm(qnNumber)"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .findElements(By.cssSelector(\"[id^\u003d\u0027recipient-dropdown-qn-\u0027]\"));"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertEquals(numRecipients, recipientDropdowns.size());"},{"lineNumber":85,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipients \u003d recipientDropdowns.get(0).findElements(By.tagName(\"option\"));"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertEquals(recipientNames.size(), recipients.size() - 1);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" Collections.sort(recipientNames);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c recipientNames.size(); i++) {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertEquals(recipientNames.get(i), recipients.get(i + 1).getText());"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void verifyRecipients(int qnNumber, List\u003cString\u003e recipientNames, String role) {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Collections.sort(recipientNames);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c recipientNames.size(); i++) {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertEquals(recipientNames.get(i) + \" (\" + role + \")\","},{"lineNumber":98,"author":{"gitId":"-"},"content":" questionForm.findElement(By.id(\"recipient-name-qn-\" + qnNumber + \"-idx-\" + i)).getText());"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" public void verifyWarningMessageForPartialResponse(int[] unansweredQuestions) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" click(getSubmitAllQuestionsButton());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" StringBuilder expectedSb \u003d new StringBuilder();"},{"lineNumber":105,"author":{"gitId":"-"},"content":" for (int unansweredQuestion : unansweredQuestions) {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" expectedSb.append(unansweredQuestion).append(\", \");"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":" String expectedString \u003d expectedSb.toString().substring(0, expectedSb.length() - 2) + \".\";"},{"lineNumber":109,"author":{"gitId":"-"},"content":" String warningString \u003d waitForElementPresence(By.id(\"not-answered-questions\")).getText();"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertEquals(warningString.split(\": \")[1], expectedString);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" public void verifyCannotSubmit() {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" WebElement submitButton \u003d waitForElementPresence(By.cssSelector(\"[id^\u003d\u0027btn-submit-qn-\u0027]\"));"},{"lineNumber":116,"author":{"gitId":"-"},"content":" if (submitButton !\u003d null) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertFalse(submitButton.isEnabled());"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" public void addComment(int qnNumber, String recipient, String newComment) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" WebElement commentSection \u003d getCommentSection(qnNumber, recipient);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" click(commentSection.findElement(By.className(\"btn-add-comment\")));"},{"lineNumber":124,"author":{"gitId":"-"},"content":" writeToCommentEditor(commentSection, newComment);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" public void editComment(int qnNumber, String recipient, String editedComment) {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" WebElement commentSection \u003d getCommentSection(qnNumber, recipient);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" click(commentSection.findElement(By.className(\"btn-edit-comment\")));"},{"lineNumber":130,"author":{"gitId":"-"},"content":" writeToCommentEditor(commentSection, editedComment);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void deleteComment(int qnNumber, String recipient) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" clickAndConfirm(getCommentSection(qnNumber, recipient).findElement(By.className(\"btn-delete-comment\")));"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" public void verifyComment(int qnNumber, String recipient, String expectedComment) {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" WebElement commentSection \u003d getCommentSection(qnNumber, recipient);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" String actualComment \u003d commentSection.findElement(By.className(\"comment-text\")).getAttribute(\"innerHTML\");"},{"lineNumber":140,"author":{"gitId":"-"},"content":" assertEquals(expectedComment, actualComment);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" public void verifyNoCommentPresent(int qnNumber, String recipient) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" int numComments \u003d getCommentSection(qnNumber, recipient).findElements(By.className(\"comment-text\")).size();"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertEquals(numComments, 0);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" public void verifyTextQuestion(int qnNumber, FeedbackTextQuestionDetails questionDetails) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" String recommendedLengthText \u003d getQuestionForm(qnNumber).findElement(By.id(\"recommended-length\")).getText();"},{"lineNumber":150,"author":{"gitId":"-"},"content":" assertEquals(recommendedLengthText, \"Recommended length for the answer: \""},{"lineNumber":151,"author":{"gitId":"-"},"content":" + questionDetails.getRecommendedLength() + \" words\");"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" public void fillTextResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" FeedbackTextResponseDetails responseDetails \u003d (FeedbackTextResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":156,"author":{"gitId":"-"},"content":" writeToRichTextEditor(getTextResponseEditor(qnNumber, recipient), responseDetails.getAnswer());"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" public void fillTextResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" FeedbackTextResponseDetails responseDetails \u003d"},{"lineNumber":161,"author":{"gitId":"-"},"content":" (FeedbackTextResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" writeToRichTextEditor(getTextResponseEditor(qnNumber, recipient), responseDetails.getAnswer());"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" public void verifyTextResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" FeedbackTextResponseDetails responseDetails \u003d (FeedbackTextResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":167,"author":{"gitId":"-"},"content":" int responseLength \u003d responseDetails.getAnswer().split(\" \").length;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(getEditorRichText(getTextResponseEditor(qnNumber, recipient)), responseDetails.getAnswer());"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertEquals(getResponseLengthText(qnNumber, recipient), \"Response length: \" + responseLength"},{"lineNumber":170,"author":{"gitId":"-"},"content":" + \" words\");"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" public void verifyTextResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" FeedbackTextResponseDetails responseDetails \u003d"},{"lineNumber":175,"author":{"gitId":"-"},"content":" (FeedbackTextResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":176,"author":{"gitId":"-"},"content":" int responseLength \u003d responseDetails.getAnswer().split(\" \").length;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" assertEquals(getEditorRichText(getTextResponseEditor(qnNumber, recipient)), responseDetails.getAnswer());"},{"lineNumber":178,"author":{"gitId":"-"},"content":" assertEquals(getResponseLengthText(qnNumber, recipient), \"Response length: \" + responseLength"},{"lineNumber":179,"author":{"gitId":"-"},"content":" + \" words\");"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" public void verifyMcqQuestion(int qnNumber, String recipient, FeedbackMcqQuestionDetails questionDetails) {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" List\u003cString\u003e mcqChoices \u003d questionDetails.getMcqChoices();"},{"lineNumber":184,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c mcqChoices.size(); i++) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" assertEquals(mcqChoices.get(i), optionTexts.get(i).getText());"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" if (questionDetails.isOtherEnabled()) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" assertEquals(\"Other\", getMcqSection(qnNumber, recipient).findElement(By.id(\"other-option\")).getText());"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" public void verifyGeneratedMcqQuestion(int qnNumber, String recipient, List\u003cString\u003e options) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":197,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" assertEquals(options.get(i), optionTexts.get(i).getText());"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" public void fillMcqResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" FeedbackMcqResponseDetails responseDetails \u003d (FeedbackMcqResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":204,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMcqOtherOptionRadioBtn(qnNumber, recipient));"},{"lineNumber":206,"author":{"gitId":"-"},"content":" fillTextBox(getMcqOtherOptionTextbox(qnNumber, recipient), responseDetails.getOtherFieldContent());"},{"lineNumber":207,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" if (optionTexts.get(i).getText().equals(responseDetails.getAnswer())) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMcqRadioBtns(qnNumber, recipient).get(i));"},{"lineNumber":212,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"dishenggg"},"content":" public void fillMcqResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":219,"author":{"gitId":"dishenggg"},"content":" FeedbackMcqResponseDetails responseDetails \u003d (FeedbackMcqResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":220,"author":{"gitId":"dishenggg"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":221,"author":{"gitId":"dishenggg"},"content":" markOptionAsSelected(getMcqOtherOptionRadioBtn(qnNumber, recipient));"},{"lineNumber":222,"author":{"gitId":"dishenggg"},"content":" fillTextBox(getMcqOtherOptionTextbox(qnNumber, recipient), responseDetails.getOtherFieldContent());"},{"lineNumber":223,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":224,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":225,"author":{"gitId":"dishenggg"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":226,"author":{"gitId":"dishenggg"},"content":" if (optionTexts.get(i).getText().equals(responseDetails.getAnswer())) {"},{"lineNumber":227,"author":{"gitId":"dishenggg"},"content":" markOptionAsSelected(getMcqRadioBtns(qnNumber, recipient).get(i));"},{"lineNumber":228,"author":{"gitId":"dishenggg"},"content":" break;"},{"lineNumber":229,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":230,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":231,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":232,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":233,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" public void verifyMcqResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" FeedbackMcqResponseDetails responseDetails \u003d (FeedbackMcqResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":236,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" assertTrue(getMcqOtherOptionRadioBtn(qnNumber, recipient).isSelected());"},{"lineNumber":238,"author":{"gitId":"-"},"content":" assertEquals(getMcqOtherOptionTextbox(qnNumber, recipient).getAttribute(\"value\"),"},{"lineNumber":239,"author":{"gitId":"-"},"content":" responseDetails.getOtherFieldContent());"},{"lineNumber":240,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e radioBtns \u003d getMcqRadioBtns(qnNumber, recipient);"},{"lineNumber":243,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" if (optionTexts.get(i).getText().equals(responseDetails.getAnswer())) {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" assertTrue(radioBtns.get(i).isSelected());"},{"lineNumber":246,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" }"},{"lineNumber":248,"author":{"gitId":"-"},"content":" assertFalse(radioBtns.get(i).isSelected());"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":" }"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" public void verifyMsqQuestion(int qnNumber, String recipient, FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" List\u003cString\u003e msqChoices \u003d questionDetails.getMsqChoices();"},{"lineNumber":255,"author":{"gitId":"-"},"content":" if (questionDetails.isOtherEnabled()) {"},{"lineNumber":256,"author":{"gitId":"-"},"content":" msqChoices.add(\"Other\");"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":" if (questionDetails.getMinSelectableChoices() \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" msqChoices.add(\"None of the above\");"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":262,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c msqChoices.size(); i++) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" assertEquals(msqChoices.get(i), optionTexts.get(i).getText());"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":" verifyMsqSelectableOptionsMessage(qnNumber, questionDetails);"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":" private void verifyMsqSelectableOptionsMessage(int qnNumber, FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" if (questionDetails.getMinSelectableChoices() !\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":270,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"min-options-message\")).getText(),"},{"lineNumber":271,"author":{"gitId":"-"},"content":" \"Choose at least \" + questionDetails.getMinSelectableChoices() + \" options.\");"},{"lineNumber":272,"author":{"gitId":"-"},"content":" }"},{"lineNumber":273,"author":{"gitId":"-"},"content":" if (questionDetails.getMaxSelectableChoices() !\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":274,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"max-options-message\")).getText(),"},{"lineNumber":275,"author":{"gitId":"-"},"content":" \"Choose no more than \" + questionDetails.getMaxSelectableChoices() + \" options.\");"},{"lineNumber":276,"author":{"gitId":"-"},"content":" }"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" public void verifyGeneratedMsqQuestion(int qnNumber, String recipient, FeedbackMsqQuestionDetails questionDetails,"},{"lineNumber":280,"author":{"gitId":"-"},"content":" List\u003cString\u003e options) {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" assertEquals(options.get(i), optionTexts.get(i).getText());"},{"lineNumber":284,"author":{"gitId":"-"},"content":" }"},{"lineNumber":285,"author":{"gitId":"-"},"content":" verifyMsqSelectableOptionsMessage(qnNumber, questionDetails);"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" public void fillMsqResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" FeedbackMsqResponseDetails responseDetails \u003d (FeedbackMsqResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":290,"author":{"gitId":"-"},"content":" List\u003cString\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":291,"author":{"gitId":"-"},"content":" if (answers.get(0).isEmpty()) {"},{"lineNumber":292,"author":{"gitId":"-"},"content":" answers.add(\"None of the above\");"},{"lineNumber":293,"author":{"gitId":"-"},"content":" }"},{"lineNumber":294,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":295,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e checkboxes \u003d getMsqCheckboxes(qnNumber, recipient);"},{"lineNumber":296,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":297,"author":{"gitId":"-"},"content":" if (answers.contains(optionTexts.get(i).getText())) {"},{"lineNumber":298,"author":{"gitId":"-"},"content":" markOptionAsSelected(checkboxes.get(i));"},{"lineNumber":299,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" markOptionAsUnselected(checkboxes.get(i));"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":" }"},{"lineNumber":303,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMsqOtherOptionCheckbox(qnNumber, recipient));"},{"lineNumber":305,"author":{"gitId":"-"},"content":" fillTextBox(getMsqOtherOptionTextbox(qnNumber, recipient), responseDetails.getOtherFieldContent());"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"dishenggg"},"content":" public void fillMsqResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":310,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqResponseDetails responseDetails \u003d (FeedbackMsqResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":311,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":312,"author":{"gitId":"dishenggg"},"content":" if (answers.get(0).isEmpty()) {"},{"lineNumber":313,"author":{"gitId":"dishenggg"},"content":" answers.add(\"None of the above\");"},{"lineNumber":314,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":315,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":316,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e checkboxes \u003d getMsqCheckboxes(qnNumber, recipient);"},{"lineNumber":317,"author":{"gitId":"dishenggg"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":318,"author":{"gitId":"dishenggg"},"content":" if (answers.contains(optionTexts.get(i).getText())) {"},{"lineNumber":319,"author":{"gitId":"dishenggg"},"content":" markOptionAsSelected(checkboxes.get(i));"},{"lineNumber":320,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":321,"author":{"gitId":"dishenggg"},"content":" markOptionAsUnselected(checkboxes.get(i));"},{"lineNumber":322,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":323,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":324,"author":{"gitId":"dishenggg"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":325,"author":{"gitId":"dishenggg"},"content":" markOptionAsSelected(getMsqOtherOptionCheckbox(qnNumber, recipient));"},{"lineNumber":326,"author":{"gitId":"dishenggg"},"content":" fillTextBox(getMsqOtherOptionTextbox(qnNumber, recipient), responseDetails.getOtherFieldContent());"},{"lineNumber":327,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":328,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":329,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":" public void verifyMsqResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" FeedbackMsqResponseDetails responseDetails \u003d (FeedbackMsqResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":332,"author":{"gitId":"-"},"content":" List\u003cString\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":333,"author":{"gitId":"-"},"content":" if (answers.get(0).isEmpty()) {"},{"lineNumber":334,"author":{"gitId":"-"},"content":" answers.add(\"None of the above\");"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":337,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e checkboxes \u003d getMsqCheckboxes(qnNumber, recipient);"},{"lineNumber":338,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" if (answers.contains(optionTexts.get(i).getText())) {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" assertTrue(checkboxes.get(i).isSelected());"},{"lineNumber":341,"author":{"gitId":"-"},"content":" } else if (\"Other\".equals(optionTexts.get(i).getText())) {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" assertEquals(checkboxes.get(i).isSelected(), responseDetails.isOther());"},{"lineNumber":343,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":344,"author":{"gitId":"-"},"content":" assertFalse(checkboxes.get(i).isSelected());"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":" }"},{"lineNumber":347,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" assertEquals(getMsqOtherOptionTextbox(qnNumber, recipient).getAttribute(\"value\"),"},{"lineNumber":349,"author":{"gitId":"-"},"content":" responseDetails.getOtherFieldContent());"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"dishenggg"},"content":" public void verifyMsqResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":354,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqResponseDetails responseDetails \u003d (FeedbackMsqResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":355,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":356,"author":{"gitId":"dishenggg"},"content":" if (answers.get(0).isEmpty()) {"},{"lineNumber":357,"author":{"gitId":"dishenggg"},"content":" answers.add(\"None of the above\");"},{"lineNumber":358,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":359,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":360,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e checkboxes \u003d getMsqCheckboxes(qnNumber, recipient);"},{"lineNumber":361,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" if (answers.contains(optionTexts.get(i).getText())) {"},{"lineNumber":363,"author":{"gitId":"-"},"content":" assertTrue(checkboxes.get(i).isSelected());"},{"lineNumber":364,"author":{"gitId":"-"},"content":" } else if (\"Other\".equals(optionTexts.get(i).getText())) {"},{"lineNumber":365,"author":{"gitId":"-"},"content":" assertEquals(checkboxes.get(i).isSelected(), responseDetails.isOther());"},{"lineNumber":366,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":367,"author":{"gitId":"-"},"content":" assertFalse(checkboxes.get(i).isSelected());"},{"lineNumber":368,"author":{"gitId":"-"},"content":" }"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" assertEquals(getMsqOtherOptionTextbox(qnNumber, recipient).getAttribute(\"value\"),"},{"lineNumber":372,"author":{"gitId":"-"},"content":" responseDetails.getOtherFieldContent());"},{"lineNumber":373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":374,"author":{"gitId":"-"},"content":" }"},{"lineNumber":375,"author":{"gitId":"-"},"content":""},{"lineNumber":376,"author":{"gitId":"-"},"content":" public void verifyNumScaleQuestion(int qnNumber, String recipient,"},{"lineNumber":377,"author":{"gitId":"-"},"content":" FeedbackNumericalScaleQuestionDetails questionDetails) {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" double step \u003d questionDetails.getStep();"},{"lineNumber":379,"author":{"gitId":"-"},"content":" double twoSteps \u003d 2 * step;"},{"lineNumber":380,"author":{"gitId":"-"},"content":" double min \u003d questionDetails.getMinScale();"},{"lineNumber":381,"author":{"gitId":"-"},"content":" double max \u003d questionDetails.getMaxScale();"},{"lineNumber":382,"author":{"gitId":"-"},"content":" String possibleValues \u003d String.format(\"Possible values: [%s, %s, %s, ..., %s, %s, %s]\","},{"lineNumber":383,"author":{"gitId":"-"},"content":" getDoubleString(min), getDoubleString(min + step), getDoubleString(min + twoSteps),"},{"lineNumber":384,"author":{"gitId":"-"},"content":" getDoubleString(max - twoSteps), getDoubleString(max - step), getDoubleString(max));"},{"lineNumber":385,"author":{"gitId":"-"},"content":" String actualValues \u003d getNumScaleSection(qnNumber, recipient).findElement(By.id(\"possible-values\")).getText();"},{"lineNumber":386,"author":{"gitId":"-"},"content":" assertEquals(actualValues, possibleValues);"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"-"},"content":" public void fillNumScaleResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":390,"author":{"gitId":"-"},"content":" FeedbackNumericalScaleResponseDetails responseDetails \u003d"},{"lineNumber":391,"author":{"gitId":"-"},"content":" (FeedbackNumericalScaleResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":392,"author":{"gitId":"-"},"content":" fillTextBox(getNumScaleInput(qnNumber, recipient), Double.toString(responseDetails.getAnswer()));"},{"lineNumber":393,"author":{"gitId":"-"},"content":" }"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":" public void verifyNumScaleResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" FeedbackNumericalScaleResponseDetails responseDetails \u003d"},{"lineNumber":397,"author":{"gitId":"-"},"content":" (FeedbackNumericalScaleResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":398,"author":{"gitId":"-"},"content":" assertEquals(getNumScaleInput(qnNumber, recipient).getAttribute(\"value\"),"},{"lineNumber":399,"author":{"gitId":"-"},"content":" getDoubleString(responseDetails.getAnswer()));"},{"lineNumber":400,"author":{"gitId":"-"},"content":" }"},{"lineNumber":401,"author":{"gitId":"-"},"content":""},{"lineNumber":402,"author":{"gitId":"-"},"content":" public void verifyConstSumQuestion(int qnNumber, String recipient,"},{"lineNumber":403,"author":{"gitId":"-"},"content":" FeedbackConstantSumQuestionDetails questionDetails) {"},{"lineNumber":404,"author":{"gitId":"-"},"content":" if (!questionDetails.isDistributeToRecipients()) {"},{"lineNumber":405,"author":{"gitId":"-"},"content":" List\u003cString\u003e constSumOptions \u003d questionDetails.getConstSumOptions();"},{"lineNumber":406,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getConstSumOptions(qnNumber, recipient);"},{"lineNumber":407,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c constSumOptions.size(); i++) {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" assertEquals(constSumOptions.get(i), optionTexts.get(i).getText());"},{"lineNumber":409,"author":{"gitId":"-"},"content":" }"},{"lineNumber":410,"author":{"gitId":"-"},"content":" }"},{"lineNumber":411,"author":{"gitId":"-"},"content":""},{"lineNumber":412,"author":{"gitId":"-"},"content":" int totalPoints \u003d questionDetails.getPoints();"},{"lineNumber":413,"author":{"gitId":"-"},"content":" if (questionDetails.isPointsPerOption()) {"},{"lineNumber":414,"author":{"gitId":"-"},"content":" totalPoints *\u003d questionDetails.getNumOfConstSumOptions();"},{"lineNumber":415,"author":{"gitId":"-"},"content":" }"},{"lineNumber":416,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"total-points-message\")).getText(),"},{"lineNumber":417,"author":{"gitId":"-"},"content":" \"Total points distributed should add up to \" + totalPoints + \".\");"},{"lineNumber":418,"author":{"gitId":"-"},"content":""},{"lineNumber":419,"author":{"gitId":"-"},"content":" if (questionDetails.isForceUnevenDistribution()) {"},{"lineNumber":420,"author":{"gitId":"-"},"content":" String entityType \u003d questionDetails.isDistributeToRecipients() ? \"recipient\" : \"option\";"},{"lineNumber":421,"author":{"gitId":"-"},"content":" if (\"All options\".equals(questionDetails.getDistributePointsFor())) {"},{"lineNumber":422,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"all-uneven-message\")).getText(),"},{"lineNumber":423,"author":{"gitId":"-"},"content":" \"Every \" + entityType + \" should be allocated different number of points.\");"},{"lineNumber":424,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"one-uneven-message\")).getText(),"},{"lineNumber":426,"author":{"gitId":"-"},"content":" \"At least one \" + entityType + \" should be allocated different number of points.\");"},{"lineNumber":427,"author":{"gitId":"-"},"content":" }"},{"lineNumber":428,"author":{"gitId":"-"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":" }"},{"lineNumber":430,"author":{"gitId":"-"},"content":""},{"lineNumber":431,"author":{"gitId":"-"},"content":" public void fillConstSumOptionResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":432,"author":{"gitId":"-"},"content":" FeedbackConstantSumResponseDetails responseDetails \u003d"},{"lineNumber":433,"author":{"gitId":"-"},"content":" (FeedbackConstantSumResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":434,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":435,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e constSumInputs \u003d getConstSumInputs(qnNumber, recipient);"},{"lineNumber":436,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":437,"author":{"gitId":"-"},"content":" fillTextBox(constSumInputs.get(i), Integer.toString(answers.get(i)));"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":" }"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" public void verifyConstSumOptionResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":442,"author":{"gitId":"-"},"content":" FeedbackConstantSumResponseDetails responseDetails \u003d"},{"lineNumber":443,"author":{"gitId":"-"},"content":" (FeedbackConstantSumResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":444,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":445,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e constSumInputs \u003d getConstSumInputs(qnNumber, recipient);"},{"lineNumber":446,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":447,"author":{"gitId":"-"},"content":" assertEquals(constSumInputs.get(i).getAttribute(\"value\"), Integer.toString(answers.get(i)));"},{"lineNumber":448,"author":{"gitId":"-"},"content":" }"},{"lineNumber":449,"author":{"gitId":"-"},"content":" }"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":" public void fillConstSumRecipientResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":452,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientInputs \u003d getConstSumRecipientInputs(qnNumber);"},{"lineNumber":453,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":454,"author":{"gitId":"-"},"content":" FeedbackConstantSumResponseDetails response \u003d"},{"lineNumber":455,"author":{"gitId":"-"},"content":" (FeedbackConstantSumResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":456,"author":{"gitId":"-"},"content":" fillTextBox(recipientInputs.get(i), Integer.toString(response.getAnswers().get(0)));"},{"lineNumber":457,"author":{"gitId":"-"},"content":" }"},{"lineNumber":458,"author":{"gitId":"-"},"content":" }"},{"lineNumber":459,"author":{"gitId":"-"},"content":""},{"lineNumber":460,"author":{"gitId":"-"},"content":" public void verifyConstSumRecipientResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":461,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientInputs \u003d getConstSumRecipientInputs(qnNumber);"},{"lineNumber":462,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":463,"author":{"gitId":"-"},"content":" FeedbackConstantSumResponseDetails response \u003d"},{"lineNumber":464,"author":{"gitId":"-"},"content":" (FeedbackConstantSumResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":465,"author":{"gitId":"-"},"content":" assertEquals(recipientInputs.get(i).getAttribute(\"value\"),"},{"lineNumber":466,"author":{"gitId":"-"},"content":" Integer.toString(response.getAnswers().get(0)));"},{"lineNumber":467,"author":{"gitId":"-"},"content":" }"},{"lineNumber":468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":469,"author":{"gitId":"-"},"content":""},{"lineNumber":470,"author":{"gitId":"-"},"content":" public void verifyContributionQuestion(int qnNumber, FeedbackContributionQuestionDetails questionDetails) {"},{"lineNumber":471,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":472,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getContributionDropdowns(qnNumber).get(0), \"Not Sure\");"},{"lineNumber":473,"author":{"gitId":"-"},"content":" assertTrue(questionDetails.isNotSureAllowed());"},{"lineNumber":474,"author":{"gitId":"-"},"content":" assertFalse(questionDetails.isZeroSum());"},{"lineNumber":475,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":476,"author":{"gitId":"-"},"content":" assertFalse(questionDetails.isNotSureAllowed());"},{"lineNumber":477,"author":{"gitId":"-"},"content":" }"},{"lineNumber":478,"author":{"gitId":"-"},"content":" }"},{"lineNumber":479,"author":{"gitId":"-"},"content":""},{"lineNumber":480,"author":{"gitId":"-"},"content":" public void fillContributionResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":481,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e dropdowns \u003d getContributionDropdowns(qnNumber);"},{"lineNumber":482,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":483,"author":{"gitId":"-"},"content":" FeedbackContributionResponseDetails response \u003d"},{"lineNumber":484,"author":{"gitId":"-"},"content":" (FeedbackContributionResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":485,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(dropdowns.get(i), getContributionString(response.getAnswer()));"},{"lineNumber":486,"author":{"gitId":"-"},"content":" }"},{"lineNumber":487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":488,"author":{"gitId":"-"},"content":""},{"lineNumber":489,"author":{"gitId":"-"},"content":" public void verifyContributionResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":490,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e dropdowns \u003d getContributionDropdowns(qnNumber);"},{"lineNumber":491,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":492,"author":{"gitId":"-"},"content":" FeedbackContributionResponseDetails response \u003d"},{"lineNumber":493,"author":{"gitId":"-"},"content":" (FeedbackContributionResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":494,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(dropdowns.get(i)), getContributionString(response.getAnswer()));"},{"lineNumber":495,"author":{"gitId":"-"},"content":" }"},{"lineNumber":496,"author":{"gitId":"-"},"content":" }"},{"lineNumber":497,"author":{"gitId":"-"},"content":""},{"lineNumber":498,"author":{"gitId":"-"},"content":" public void verifyRubricQuestion(int qnNumber, String recipient, FeedbackRubricQuestionDetails questionDetails) {"},{"lineNumber":499,"author":{"gitId":"-"},"content":" List\u003cString\u003e choices \u003d questionDetails.getRubricChoices();"},{"lineNumber":500,"author":{"gitId":"-"},"content":" List\u003cString\u003e subQuestions \u003d questionDetails.getRubricSubQuestions();"},{"lineNumber":501,"author":{"gitId":"-"},"content":" List\u003cList\u003cString\u003e\u003e descriptions \u003d questionDetails.getRubricDescriptions();"},{"lineNumber":502,"author":{"gitId":"-"},"content":""},{"lineNumber":503,"author":{"gitId":"-"},"content":" String[][] expectedTableData \u003d new String[subQuestions.size()][choices.size()];"},{"lineNumber":504,"author":{"gitId":"-"},"content":" String[][] expectedTableRowHeader \u003d new String[1][choices.size()];"},{"lineNumber":505,"author":{"gitId":"-"},"content":" String[][] expectedTableColumnHeader \u003d new String[subQuestions.size()][1];"},{"lineNumber":506,"author":{"gitId":"-"},"content":""},{"lineNumber":507,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c choices.size(); i++) {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" expectedTableRowHeader[0][i] \u003d choices.get(i);"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c subQuestions.size(); i++) {"},{"lineNumber":511,"author":{"gitId":"-"},"content":" expectedTableColumnHeader[i][0] \u003d subQuestions.get(i);"},{"lineNumber":512,"author":{"gitId":"-"},"content":" }"},{"lineNumber":513,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c descriptions.size(); i++) {"},{"lineNumber":514,"author":{"gitId":"-"},"content":" List\u003cString\u003e description \u003d descriptions.get(i);"},{"lineNumber":515,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c description.size(); j++) {"},{"lineNumber":516,"author":{"gitId":"-"},"content":" expectedTableData[i][j] \u003d description.get(j);"},{"lineNumber":517,"author":{"gitId":"-"},"content":" }"},{"lineNumber":518,"author":{"gitId":"-"},"content":" }"},{"lineNumber":519,"author":{"gitId":"-"},"content":" WebElement rubricTable \u003d getRubricTable(qnNumber, recipient);"},{"lineNumber":520,"author":{"gitId":"-"},"content":" verifyTableBodyValues(rubricTable, expectedTableData);"},{"lineNumber":521,"author":{"gitId":"-"},"content":" verifyTableRowHeaderValues(rubricTable, expectedTableRowHeader);"},{"lineNumber":522,"author":{"gitId":"-"},"content":" verifyTableColumnHeaderValues(rubricTable, expectedTableColumnHeader);"},{"lineNumber":523,"author":{"gitId":"-"},"content":" }"},{"lineNumber":524,"author":{"gitId":"-"},"content":""},{"lineNumber":525,"author":{"gitId":"-"},"content":" public void fillRubricResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":526,"author":{"gitId":"-"},"content":" FeedbackRubricResponseDetails responseDetails \u003d"},{"lineNumber":527,"author":{"gitId":"-"},"content":" (FeedbackRubricResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":528,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswer();"},{"lineNumber":529,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":530,"author":{"gitId":"-"},"content":" click(getRubricInputs(qnNumber, recipient, i + 2).get(answers.get(i)));"},{"lineNumber":531,"author":{"gitId":"-"},"content":" }"},{"lineNumber":532,"author":{"gitId":"-"},"content":" }"},{"lineNumber":533,"author":{"gitId":"-"},"content":""},{"lineNumber":534,"author":{"gitId":"-"},"content":" public void verifyRubricResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":535,"author":{"gitId":"-"},"content":" FeedbackRubricResponseDetails responseDetails \u003d"},{"lineNumber":536,"author":{"gitId":"-"},"content":" (FeedbackRubricResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":537,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswer();"},{"lineNumber":538,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":539,"author":{"gitId":"-"},"content":" assertTrue(getRubricInputs(qnNumber, recipient, i + 2).get(answers.get(i)).isSelected());"},{"lineNumber":540,"author":{"gitId":"-"},"content":" }"},{"lineNumber":541,"author":{"gitId":"-"},"content":" }"},{"lineNumber":542,"author":{"gitId":"-"},"content":""},{"lineNumber":543,"author":{"gitId":"-"},"content":" public void verifyRankQuestion(int qnNumber, String recipient, FeedbackRankQuestionDetails questionDetails) {"},{"lineNumber":544,"author":{"gitId":"-"},"content":" if (questionDetails.getMaxOptionsToBeRanked() !\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":545,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"max-options-message\")).getText(),"},{"lineNumber":546,"author":{"gitId":"-"},"content":" \"Rank no more than \" + questionDetails.getMaxOptionsToBeRanked() + \" options.\");"},{"lineNumber":547,"author":{"gitId":"-"},"content":" }"},{"lineNumber":548,"author":{"gitId":"-"},"content":" if (questionDetails.getMinOptionsToBeRanked() !\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":549,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"min-options-message\")).getText(),"},{"lineNumber":550,"author":{"gitId":"-"},"content":" \"Rank at least \" + questionDetails.getMinOptionsToBeRanked() + \" options.\");"},{"lineNumber":551,"author":{"gitId":"-"},"content":" }"},{"lineNumber":552,"author":{"gitId":"-"},"content":" if (questionDetails instanceof FeedbackRankOptionsQuestionDetails) {"},{"lineNumber":553,"author":{"gitId":"-"},"content":" FeedbackRankOptionsQuestionDetails optionDetails \u003d (FeedbackRankOptionsQuestionDetails) questionDetails;"},{"lineNumber":554,"author":{"gitId":"-"},"content":" List\u003cString\u003e options \u003d optionDetails.getOptions();"},{"lineNumber":555,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getRankOptions(qnNumber, recipient);"},{"lineNumber":556,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":557,"author":{"gitId":"-"},"content":" assertEquals(options.get(i), optionTexts.get(i).getText());"},{"lineNumber":558,"author":{"gitId":"-"},"content":" }"},{"lineNumber":559,"author":{"gitId":"-"},"content":" }"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":""},{"lineNumber":562,"author":{"gitId":"-"},"content":" public void fillRankOptionResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":563,"author":{"gitId":"-"},"content":" FeedbackRankOptionsResponseDetails responseDetails \u003d"},{"lineNumber":564,"author":{"gitId":"-"},"content":" (FeedbackRankOptionsResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":565,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":566,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":567,"author":{"gitId":"-"},"content":" if (answers.get(i) \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":568,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getRankOptionsDropdowns(qnNumber, recipient).get(i), \"\");"},{"lineNumber":569,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":570,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getRankOptionsDropdowns(qnNumber, recipient).get(i),"},{"lineNumber":571,"author":{"gitId":"-"},"content":" Integer.toString(answers.get(i)));"},{"lineNumber":572,"author":{"gitId":"-"},"content":" }"},{"lineNumber":573,"author":{"gitId":"-"},"content":" }"},{"lineNumber":574,"author":{"gitId":"-"},"content":" }"},{"lineNumber":575,"author":{"gitId":"-"},"content":""},{"lineNumber":576,"author":{"gitId":"mingyuanc"},"content":" public void fillRankOptionResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":577,"author":{"gitId":"mingyuanc"},"content":" FeedbackRankOptionsResponseDetails responseDetails \u003d"},{"lineNumber":578,"author":{"gitId":"mingyuanc"},"content":" (FeedbackRankOptionsResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":579,"author":{"gitId":"mingyuanc"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":580,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":581,"author":{"gitId":"mingyuanc"},"content":" if (answers.get(i) \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":582,"author":{"gitId":"mingyuanc"},"content":" selectDropdownOptionByText(getRankOptionsDropdowns(qnNumber, recipient).get(i), \"\");"},{"lineNumber":583,"author":{"gitId":"mingyuanc"},"content":" } else {"},{"lineNumber":584,"author":{"gitId":"mingyuanc"},"content":" selectDropdownOptionByText(getRankOptionsDropdowns(qnNumber, recipient).get(i),"},{"lineNumber":585,"author":{"gitId":"mingyuanc"},"content":" Integer.toString(answers.get(i)));"},{"lineNumber":586,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":587,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":588,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":589,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":590,"author":{"gitId":"-"},"content":" public void verifyRankOptionResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":591,"author":{"gitId":"-"},"content":" FeedbackRankOptionsResponseDetails responseDetails \u003d"},{"lineNumber":592,"author":{"gitId":"-"},"content":" (FeedbackRankOptionsResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":593,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":594,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":595,"author":{"gitId":"-"},"content":" if (answers.get(i) \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":596,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(getRankOptionsDropdowns(qnNumber, recipient).get(i)),"},{"lineNumber":597,"author":{"gitId":"-"},"content":" \"\");"},{"lineNumber":598,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":599,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(getRankOptionsDropdowns(qnNumber, recipient).get(i)),"},{"lineNumber":600,"author":{"gitId":"-"},"content":" Integer.toString(answers.get(i)));"},{"lineNumber":601,"author":{"gitId":"-"},"content":" }"},{"lineNumber":602,"author":{"gitId":"-"},"content":" }"},{"lineNumber":603,"author":{"gitId":"-"},"content":" }"},{"lineNumber":604,"author":{"gitId":"-"},"content":""},{"lineNumber":605,"author":{"gitId":"-"},"content":" public void fillRankRecipientResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":606,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientDropdowns \u003d getRankRecipientDropdowns(qnNumber);"},{"lineNumber":607,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":608,"author":{"gitId":"-"},"content":" FeedbackRankRecipientsResponseDetails response \u003d"},{"lineNumber":609,"author":{"gitId":"-"},"content":" (FeedbackRankRecipientsResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":610,"author":{"gitId":"-"},"content":" if (response.getAnswer() \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":611,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(recipientDropdowns.get(i), \"\");"},{"lineNumber":612,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":613,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(recipientDropdowns.get(i), Integer.toString(response.getAnswer()));"},{"lineNumber":614,"author":{"gitId":"-"},"content":" }"},{"lineNumber":615,"author":{"gitId":"-"},"content":" }"},{"lineNumber":616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" public void verifyRankRecipientResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":619,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientDropdowns \u003d getRankRecipientDropdowns(qnNumber);"},{"lineNumber":620,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":621,"author":{"gitId":"-"},"content":" FeedbackRankRecipientsResponseDetails response \u003d"},{"lineNumber":622,"author":{"gitId":"-"},"content":" (FeedbackRankRecipientsResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":623,"author":{"gitId":"-"},"content":" if (response.getAnswer() \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":624,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(recipientDropdowns.get(i)), \"\");"},{"lineNumber":625,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":626,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(recipientDropdowns.get(i)),"},{"lineNumber":627,"author":{"gitId":"-"},"content":" Integer.toString(response.getAnswer()));"},{"lineNumber":628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":629,"author":{"gitId":"-"},"content":" }"},{"lineNumber":630,"author":{"gitId":"-"},"content":" }"},{"lineNumber":631,"author":{"gitId":"-"},"content":""},{"lineNumber":632,"author":{"gitId":"-"},"content":" private String getCourseId() {"},{"lineNumber":633,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"course-id\")).getText();"},{"lineNumber":634,"author":{"gitId":"-"},"content":" }"},{"lineNumber":635,"author":{"gitId":"-"},"content":""},{"lineNumber":636,"author":{"gitId":"-"},"content":" private String getCourseName() {"},{"lineNumber":637,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"course-name\")).getText();"},{"lineNumber":638,"author":{"gitId":"-"},"content":" }"},{"lineNumber":639,"author":{"gitId":"-"},"content":""},{"lineNumber":640,"author":{"gitId":"-"},"content":" private String getCourseInstitute() {"},{"lineNumber":641,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"course-institute\")).getText();"},{"lineNumber":642,"author":{"gitId":"-"},"content":" }"},{"lineNumber":643,"author":{"gitId":"-"},"content":""},{"lineNumber":644,"author":{"gitId":"-"},"content":" private String getFeedbackSessionName() {"},{"lineNumber":645,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"fs-name\")).getText();"},{"lineNumber":646,"author":{"gitId":"-"},"content":" }"},{"lineNumber":647,"author":{"gitId":"-"},"content":""},{"lineNumber":648,"author":{"gitId":"-"},"content":" private String getOpeningTime() {"},{"lineNumber":649,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"opening-time\")).getText();"},{"lineNumber":650,"author":{"gitId":"-"},"content":" }"},{"lineNumber":651,"author":{"gitId":"-"},"content":""},{"lineNumber":652,"author":{"gitId":"-"},"content":" private String getClosingTime() {"},{"lineNumber":653,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"closing-time\")).getText();"},{"lineNumber":654,"author":{"gitId":"-"},"content":" }"},{"lineNumber":655,"author":{"gitId":"-"},"content":""},{"lineNumber":656,"author":{"gitId":"-"},"content":" private String getInstructions() {"},{"lineNumber":657,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"instructions\")).getAttribute(\"innerHTML\");"},{"lineNumber":658,"author":{"gitId":"-"},"content":" }"},{"lineNumber":659,"author":{"gitId":"-"},"content":""},{"lineNumber":660,"author":{"gitId":"-"},"content":" private void assertDateEquals(String actual, Instant instant, String timeZone) {"},{"lineNumber":661,"author":{"gitId":"-"},"content":" String dateStrWithAbbr \u003d getDateStringWithAbbr(instant, timeZone);"},{"lineNumber":662,"author":{"gitId":"-"},"content":" String dateStrWithOffset \u003d getDateStringWithOffset(instant, timeZone);"},{"lineNumber":663,"author":{"gitId":"-"},"content":""},{"lineNumber":664,"author":{"gitId":"-"},"content":" boolean isExpected \u003d actual.equals(dateStrWithAbbr) || actual.equals(dateStrWithOffset);"},{"lineNumber":665,"author":{"gitId":"-"},"content":" assertTrue(isExpected);"},{"lineNumber":666,"author":{"gitId":"-"},"content":" }"},{"lineNumber":667,"author":{"gitId":"-"},"content":""},{"lineNumber":668,"author":{"gitId":"-"},"content":" private String getDateStringWithAbbr(Instant instant, String timeZone) {"},{"lineNumber":669,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"EE, dd MMM, yyyy, hh:mm a z\");"},{"lineNumber":670,"author":{"gitId":"-"},"content":" }"},{"lineNumber":671,"author":{"gitId":"-"},"content":""},{"lineNumber":672,"author":{"gitId":"-"},"content":" private String getDateStringWithOffset(Instant instant, String timeZone) {"},{"lineNumber":673,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"EE, dd MMM, yyyy, hh:mm a X\");"},{"lineNumber":674,"author":{"gitId":"-"},"content":" }"},{"lineNumber":675,"author":{"gitId":"-"},"content":""},{"lineNumber":676,"author":{"gitId":"-"},"content":" private WebElement getQuestionForm(int qnNumber) {"},{"lineNumber":677,"author":{"gitId":"-"},"content":" By questionFormId \u003d By.id(\"question-submission-form-qn-\" + qnNumber);"},{"lineNumber":678,"author":{"gitId":"-"},"content":" waitForElementPresence(questionFormId);"},{"lineNumber":679,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d browser.driver.findElement(questionFormId);"},{"lineNumber":680,"author":{"gitId":"-"},"content":" // Scroll to the question to ensure that the details are fully loaded"},{"lineNumber":681,"author":{"gitId":"-"},"content":" scrollElementToCenter(questionForm);"},{"lineNumber":682,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish();"},{"lineNumber":683,"author":{"gitId":"-"},"content":" return questionForm;"},{"lineNumber":684,"author":{"gitId":"-"},"content":" }"},{"lineNumber":685,"author":{"gitId":"-"},"content":""},{"lineNumber":686,"author":{"gitId":"-"},"content":" private String getQuestionBrief(int qnNumber) {"},{"lineNumber":687,"author":{"gitId":"-"},"content":" String questionDetails \u003d getQuestionForm(qnNumber).findElement(By.className(\"question-details\")).getText();"},{"lineNumber":688,"author":{"gitId":"-"},"content":" return questionDetails.split(\": \")[1];"},{"lineNumber":689,"author":{"gitId":"-"},"content":" }"},{"lineNumber":690,"author":{"gitId":"-"},"content":""},{"lineNumber":691,"author":{"gitId":"-"},"content":" private void verifyVisibilityList(int qnNumber, FeedbackQuestionAttributes questionAttributes) {"},{"lineNumber":692,"author":{"gitId":"-"},"content":" if (questionAttributes.getShowResponsesTo().isEmpty()) {"},{"lineNumber":693,"author":{"gitId":"-"},"content":" verifyVisibilityStringPresent(qnNumber, \"No-one can see your responses\");"},{"lineNumber":694,"author":{"gitId":"-"},"content":" }"},{"lineNumber":695,"author":{"gitId":"-"},"content":" if (questionAttributes.getRecipientType().equals(FeedbackParticipantType.SELF)) {"},{"lineNumber":696,"author":{"gitId":"-"},"content":" verifyVisibilityStringPresent(qnNumber, \"You can see your own feedback in the results page later on.\");"},{"lineNumber":697,"author":{"gitId":"-"},"content":" }"},{"lineNumber":698,"author":{"gitId":"-"},"content":" for (FeedbackParticipantType viewerType : questionAttributes.getShowResponsesTo()) {"},{"lineNumber":699,"author":{"gitId":"-"},"content":" verifyVisibilityStringPresent(qnNumber, getVisibilityString(questionAttributes, viewerType));"},{"lineNumber":700,"author":{"gitId":"-"},"content":" }"},{"lineNumber":701,"author":{"gitId":"-"},"content":" }"},{"lineNumber":702,"author":{"gitId":"-"},"content":""},{"lineNumber":703,"author":{"gitId":"-"},"content":" private void verifyVisibilityStringPresent(int qnNumber, String expectedString) {"},{"lineNumber":704,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e visibilityStrings \u003d getQuestionForm(qnNumber).findElement(By.className(\"visibility-list\"))"},{"lineNumber":705,"author":{"gitId":"-"},"content":" .findElements(By.tagName(\"li\"));"},{"lineNumber":706,"author":{"gitId":"-"},"content":" for (WebElement visibilityString : visibilityStrings) {"},{"lineNumber":707,"author":{"gitId":"-"},"content":" if (visibilityString.getText().equals(expectedString)) {"},{"lineNumber":708,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":709,"author":{"gitId":"-"},"content":" }"},{"lineNumber":710,"author":{"gitId":"-"},"content":" }"},{"lineNumber":711,"author":{"gitId":"-"},"content":" fail(\"Expected visibility string not found: \" + qnNumber + \": \" + expectedString);"},{"lineNumber":712,"author":{"gitId":"-"},"content":" }"},{"lineNumber":713,"author":{"gitId":"-"},"content":""},{"lineNumber":714,"author":{"gitId":"-"},"content":" private String getVisibilityString(FeedbackQuestionAttributes questionAttributes,"},{"lineNumber":715,"author":{"gitId":"-"},"content":" FeedbackParticipantType viewerType) {"},{"lineNumber":716,"author":{"gitId":"-"},"content":" if (!questionAttributes.getShowResponsesTo().contains(viewerType)) {"},{"lineNumber":717,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":718,"author":{"gitId":"-"},"content":" }"},{"lineNumber":719,"author":{"gitId":"-"},"content":""},{"lineNumber":720,"author":{"gitId":"-"},"content":" StringBuilder message \u003d new StringBuilder(getViewerString(viewerType, questionAttributes.getRecipientType()));"},{"lineNumber":721,"author":{"gitId":"-"},"content":" message.append(\" can see your response\");"},{"lineNumber":722,"author":{"gitId":"-"},"content":" if (questionAttributes.getShowRecipientNameTo().contains(viewerType)) {"},{"lineNumber":723,"author":{"gitId":"-"},"content":" message.append(\", the name of the recipient\");"},{"lineNumber":724,"author":{"gitId":"-"},"content":" if (questionAttributes.getShowGiverNameTo().contains(viewerType)) {"},{"lineNumber":725,"author":{"gitId":"-"},"content":" message.append(\", and your name\");"},{"lineNumber":726,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":727,"author":{"gitId":"-"},"content":" message.append(\", but not your name\");"},{"lineNumber":728,"author":{"gitId":"-"},"content":" }"},{"lineNumber":729,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":730,"author":{"gitId":"-"},"content":" if (questionAttributes.getShowGiverNameTo().contains(viewerType)) {"},{"lineNumber":731,"author":{"gitId":"-"},"content":" message.append(\", and your name, but not the name of the recipient\");"},{"lineNumber":732,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":733,"author":{"gitId":"-"},"content":" message.append(\", but not the name of the recipient, or your name\");"},{"lineNumber":734,"author":{"gitId":"-"},"content":" }"},{"lineNumber":735,"author":{"gitId":"-"},"content":" }"},{"lineNumber":736,"author":{"gitId":"-"},"content":" return message.toString();"},{"lineNumber":737,"author":{"gitId":"-"},"content":" }"},{"lineNumber":738,"author":{"gitId":"-"},"content":""},{"lineNumber":739,"author":{"gitId":"-"},"content":" private String getViewerString(FeedbackParticipantType viewerType, FeedbackParticipantType recipientType) {"},{"lineNumber":740,"author":{"gitId":"-"},"content":" switch (viewerType) {"},{"lineNumber":741,"author":{"gitId":"-"},"content":" case RECEIVER:"},{"lineNumber":742,"author":{"gitId":"-"},"content":" return \"The receiving \" + getRecipientString(recipientType);"},{"lineNumber":743,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":744,"author":{"gitId":"-"},"content":" return \"Your team members\";"},{"lineNumber":745,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":746,"author":{"gitId":"-"},"content":" return \"Other students in the course\";"},{"lineNumber":747,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":748,"author":{"gitId":"-"},"content":" return \"Instructors in this course\";"},{"lineNumber":749,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":750,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown viewer type\");"},{"lineNumber":751,"author":{"gitId":"-"},"content":" }"},{"lineNumber":752,"author":{"gitId":"-"},"content":" }"},{"lineNumber":753,"author":{"gitId":"-"},"content":""},{"lineNumber":754,"author":{"gitId":"-"},"content":" private String getRecipientString(FeedbackParticipantType recipientType) {"},{"lineNumber":755,"author":{"gitId":"-"},"content":" switch (recipientType) {"},{"lineNumber":756,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":757,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":758,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":759,"author":{"gitId":"-"},"content":" return \"teams\";"},{"lineNumber":760,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":761,"author":{"gitId":"-"},"content":" return \"student\";"},{"lineNumber":762,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":763,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":764,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":765,"author":{"gitId":"-"},"content":" return \"students\";"},{"lineNumber":766,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":767,"author":{"gitId":"-"},"content":" return \"instructors\";"},{"lineNumber":768,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":769,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown recipientType\");"},{"lineNumber":770,"author":{"gitId":"-"},"content":" }"},{"lineNumber":771,"author":{"gitId":"-"},"content":" }"},{"lineNumber":772,"author":{"gitId":"-"},"content":""},{"lineNumber":773,"author":{"gitId":"-"},"content":" public void clickSubmitQuestionButton(int qnNumber) {"},{"lineNumber":774,"author":{"gitId":"-"},"content":" WebElement submitQnButton \u003d waitForElementPresence(By.id(\"btn-submit-qn-\" + qnNumber));"},{"lineNumber":775,"author":{"gitId":"-"},"content":" clickAndConfirm(submitQnButton);"},{"lineNumber":776,"author":{"gitId":"-"},"content":" }"},{"lineNumber":777,"author":{"gitId":"-"},"content":""},{"lineNumber":778,"author":{"gitId":"-"},"content":" public void clickSubmitAllQuestionsButton() {"},{"lineNumber":779,"author":{"gitId":"-"},"content":" clickAndConfirm(getSubmitAllQuestionsButton());"},{"lineNumber":780,"author":{"gitId":"-"},"content":" }"},{"lineNumber":781,"author":{"gitId":"-"},"content":""},{"lineNumber":782,"author":{"gitId":"-"},"content":" private WebElement getSubmitAllQuestionsButton() {"},{"lineNumber":783,"author":{"gitId":"-"},"content":" return waitForElementPresence(By.id(\"btn-submit\"));"},{"lineNumber":784,"author":{"gitId":"-"},"content":" }"},{"lineNumber":785,"author":{"gitId":"-"},"content":""},{"lineNumber":786,"author":{"gitId":"-"},"content":" private String getQuestionDescription(int qnNumber) {"},{"lineNumber":787,"author":{"gitId":"-"},"content":" return getQuestionForm(qnNumber).findElement(By.className(\"question-description\")).getAttribute(\"innerHTML\");"},{"lineNumber":788,"author":{"gitId":"-"},"content":" }"},{"lineNumber":789,"author":{"gitId":"-"},"content":""},{"lineNumber":790,"author":{"gitId":"-"},"content":" private WebElement getCommentSection(int qnNumber, String recipient) {"},{"lineNumber":791,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":792,"author":{"gitId":"-"},"content":" return getQuestionForm(qnNumber).findElement(By.id(\"comment-section-qn-\" + qnNumber + \"-idx-\" + recipientIndex));"},{"lineNumber":793,"author":{"gitId":"-"},"content":" }"},{"lineNumber":794,"author":{"gitId":"-"},"content":""},{"lineNumber":795,"author":{"gitId":"-"},"content":" private void writeToCommentEditor(WebElement commentSection, String comment) {"},{"lineNumber":796,"author":{"gitId":"-"},"content":" scrollElementToCenter(commentSection);"},{"lineNumber":797,"author":{"gitId":"-"},"content":" waitForElementPresence(By.tagName(\"editor\"));"},{"lineNumber":798,"author":{"gitId":"-"},"content":" writeToRichTextEditor(commentSection.findElement(By.tagName(\"editor\")), comment);"},{"lineNumber":799,"author":{"gitId":"-"},"content":" }"},{"lineNumber":800,"author":{"gitId":"-"},"content":""},{"lineNumber":801,"author":{"gitId":"-"},"content":" private int getRecipientIndex(int qnNumber, String recipient) {"},{"lineNumber":802,"author":{"gitId":"-"},"content":" // For questions with recipient none or self."},{"lineNumber":803,"author":{"gitId":"-"},"content":" if (recipient.isEmpty()) {"},{"lineNumber":804,"author":{"gitId":"-"},"content":" return 0;"},{"lineNumber":805,"author":{"gitId":"-"},"content":" }"},{"lineNumber":806,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":807,"author":{"gitId":"-"},"content":" // For questions with flexible recipient."},{"lineNumber":808,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":809,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientDropdowns \u003d"},{"lineNumber":810,"author":{"gitId":"-"},"content":" questionForm.findElements(By.cssSelector(\"[id^\u003d\u0027recipient-dropdown-qn-\u0027]\"));"},{"lineNumber":811,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c recipientDropdowns.size(); i++) {"},{"lineNumber":812,"author":{"gitId":"-"},"content":" String dropdownText \u003d getSelectedDropdownOptionText(recipientDropdowns.get(i));"},{"lineNumber":813,"author":{"gitId":"-"},"content":" if (dropdownText.isEmpty()) {"},{"lineNumber":814,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(recipientDropdowns.get(i), recipient);"},{"lineNumber":815,"author":{"gitId":"-"},"content":" return i;"},{"lineNumber":816,"author":{"gitId":"-"},"content":" } else if (dropdownText.equals(recipient)) {"},{"lineNumber":817,"author":{"gitId":"-"},"content":" return i;"},{"lineNumber":818,"author":{"gitId":"-"},"content":" }"},{"lineNumber":819,"author":{"gitId":"-"},"content":" }"},{"lineNumber":820,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":821,"author":{"gitId":"-"},"content":" // continue"},{"lineNumber":822,"author":{"gitId":"-"},"content":" }"},{"lineNumber":823,"author":{"gitId":"-"},"content":" int limit \u003d 20; // we are not likely to set test data exceeding this number"},{"lineNumber":824,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c limit; i++) {"},{"lineNumber":825,"author":{"gitId":"-"},"content":" if (questionForm.findElement(By.id(\"recipient-name-qn-\" + qnNumber + \"-idx-\" + i))"},{"lineNumber":826,"author":{"gitId":"-"},"content":" .getText().contains(recipient)) {"},{"lineNumber":827,"author":{"gitId":"-"},"content":" return i;"},{"lineNumber":828,"author":{"gitId":"-"},"content":" }"},{"lineNumber":829,"author":{"gitId":"-"},"content":" }"},{"lineNumber":830,"author":{"gitId":"-"},"content":" return -1;"},{"lineNumber":831,"author":{"gitId":"-"},"content":" }"},{"lineNumber":832,"author":{"gitId":"-"},"content":""},{"lineNumber":833,"author":{"gitId":"-"},"content":" private WebElement getTextResponseEditor(int qnNumber, String recipient) {"},{"lineNumber":834,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":835,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":836,"author":{"gitId":"-"},"content":" WebElement editor \u003d questionForm.findElements(By.tagName(\"tm-rich-text-editor\")).get(recipientIndex);"},{"lineNumber":837,"author":{"gitId":"-"},"content":" scrollElementToCenter(editor);"},{"lineNumber":838,"author":{"gitId":"-"},"content":" return editor;"},{"lineNumber":839,"author":{"gitId":"-"},"content":" }"},{"lineNumber":840,"author":{"gitId":"-"},"content":""},{"lineNumber":841,"author":{"gitId":"-"},"content":" private String getResponseLengthText(int qnNumber, String recipient) {"},{"lineNumber":842,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":843,"author":{"gitId":"-"},"content":" return getQuestionForm(qnNumber).findElements(By.id(\"response-length\")).get(recipientIndex).getText();"},{"lineNumber":844,"author":{"gitId":"-"},"content":" }"},{"lineNumber":845,"author":{"gitId":"-"},"content":""},{"lineNumber":846,"author":{"gitId":"-"},"content":" private String getDoubleString(Double value) {"},{"lineNumber":847,"author":{"gitId":"-"},"content":" return value % 1 \u003d\u003d 0 ? Integer.toString(value.intValue()) : Double.toString(value);"},{"lineNumber":848,"author":{"gitId":"-"},"content":" }"},{"lineNumber":849,"author":{"gitId":"-"},"content":""},{"lineNumber":850,"author":{"gitId":"-"},"content":" private WebElement getMcqSection(int qnNumber, String recipient) {"},{"lineNumber":851,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":852,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":853,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-mcq-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":854,"author":{"gitId":"-"},"content":" }"},{"lineNumber":855,"author":{"gitId":"-"},"content":""},{"lineNumber":856,"author":{"gitId":"-"},"content":" private WebElement getMcqOtherOptionRadioBtn(int qnNumber, String recipient) {"},{"lineNumber":857,"author":{"gitId":"-"},"content":" WebElement mcqSection \u003d getMcqSection(qnNumber, recipient);"},{"lineNumber":858,"author":{"gitId":"-"},"content":" return mcqSection.findElement(By.cssSelector(\"#other-option input[type\u003dradio]\"));"},{"lineNumber":859,"author":{"gitId":"-"},"content":" }"},{"lineNumber":860,"author":{"gitId":"-"},"content":""},{"lineNumber":861,"author":{"gitId":"-"},"content":" private WebElement getMcqOtherOptionTextbox(int qnNumber, String recipient) {"},{"lineNumber":862,"author":{"gitId":"-"},"content":" WebElement mcqSection \u003d getMcqSection(qnNumber, recipient);"},{"lineNumber":863,"author":{"gitId":"-"},"content":" return mcqSection.findElement(By.cssSelector(\"#other-option input[type\u003dtext]\"));"},{"lineNumber":864,"author":{"gitId":"-"},"content":" }"},{"lineNumber":865,"author":{"gitId":"-"},"content":""},{"lineNumber":866,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getMcqOptions(int qnNumber, String recipient) {"},{"lineNumber":867,"author":{"gitId":"-"},"content":" WebElement mcqSection \u003d getMcqSection(qnNumber, recipient);"},{"lineNumber":868,"author":{"gitId":"-"},"content":" return mcqSection.findElements(By.className(\"option-text\"));"},{"lineNumber":869,"author":{"gitId":"-"},"content":" }"},{"lineNumber":870,"author":{"gitId":"-"},"content":""},{"lineNumber":871,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getMcqRadioBtns(int qnNumber, String recipient) {"},{"lineNumber":872,"author":{"gitId":"-"},"content":" WebElement mcqSection \u003d getMcqSection(qnNumber, recipient);"},{"lineNumber":873,"author":{"gitId":"-"},"content":" return mcqSection.findElements(By.cssSelector(\"input[type\u003dradio]\"));"},{"lineNumber":874,"author":{"gitId":"-"},"content":" }"},{"lineNumber":875,"author":{"gitId":"-"},"content":""},{"lineNumber":876,"author":{"gitId":"-"},"content":" private WebElement getMsqSection(int qnNumber, String recipient) {"},{"lineNumber":877,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":878,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":879,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-msq-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":880,"author":{"gitId":"-"},"content":" }"},{"lineNumber":881,"author":{"gitId":"-"},"content":""},{"lineNumber":882,"author":{"gitId":"-"},"content":" private WebElement getMsqOtherOptionCheckbox(int qnNumber, String recipient) {"},{"lineNumber":883,"author":{"gitId":"-"},"content":" WebElement msqSection \u003d getMsqSection(qnNumber, recipient);"},{"lineNumber":884,"author":{"gitId":"-"},"content":" return msqSection.findElement(By.cssSelector(\"#other-option input[type\u003dcheckbox]\"));"},{"lineNumber":885,"author":{"gitId":"-"},"content":" }"},{"lineNumber":886,"author":{"gitId":"-"},"content":""},{"lineNumber":887,"author":{"gitId":"-"},"content":" private WebElement getMsqOtherOptionTextbox(int qnNumber, String recipient) {"},{"lineNumber":888,"author":{"gitId":"-"},"content":" WebElement msqSection \u003d getMsqSection(qnNumber, recipient);"},{"lineNumber":889,"author":{"gitId":"-"},"content":" return msqSection.findElement(By.cssSelector(\"#other-option input[type\u003dtext]\"));"},{"lineNumber":890,"author":{"gitId":"-"},"content":" }"},{"lineNumber":891,"author":{"gitId":"-"},"content":""},{"lineNumber":892,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getMsqOptions(int qnNumber, String recipient) {"},{"lineNumber":893,"author":{"gitId":"-"},"content":" WebElement msqSection \u003d getMsqSection(qnNumber, recipient);"},{"lineNumber":894,"author":{"gitId":"-"},"content":" return msqSection.findElements(By.tagName(\"strong\"));"},{"lineNumber":895,"author":{"gitId":"-"},"content":" }"},{"lineNumber":896,"author":{"gitId":"-"},"content":""},{"lineNumber":897,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getMsqCheckboxes(int qnNumber, String recipient) {"},{"lineNumber":898,"author":{"gitId":"-"},"content":" WebElement msqSection \u003d getMsqSection(qnNumber, recipient);"},{"lineNumber":899,"author":{"gitId":"-"},"content":" return msqSection.findElements(By.cssSelector(\"input[type\u003dcheckbox]\"));"},{"lineNumber":900,"author":{"gitId":"-"},"content":" }"},{"lineNumber":901,"author":{"gitId":"-"},"content":""},{"lineNumber":902,"author":{"gitId":"-"},"content":" private WebElement getNumScaleSection(int qnNumber, String recipient) {"},{"lineNumber":903,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":904,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":905,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-num-scale-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":906,"author":{"gitId":"-"},"content":" }"},{"lineNumber":907,"author":{"gitId":"-"},"content":""},{"lineNumber":908,"author":{"gitId":"-"},"content":" private WebElement getNumScaleInput(int qnNumber, String recipient) {"},{"lineNumber":909,"author":{"gitId":"-"},"content":" WebElement numScaleSection \u003d getNumScaleSection(qnNumber, recipient);"},{"lineNumber":910,"author":{"gitId":"-"},"content":" return numScaleSection.findElement(By.tagName(\"input\"));"},{"lineNumber":911,"author":{"gitId":"-"},"content":" }"},{"lineNumber":912,"author":{"gitId":"-"},"content":""},{"lineNumber":913,"author":{"gitId":"-"},"content":" private WebElement getConstSumOptionsSection(int qnNumber, String recipient) {"},{"lineNumber":914,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":915,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":916,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-constsum-options-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":917,"author":{"gitId":"-"},"content":" }"},{"lineNumber":918,"author":{"gitId":"-"},"content":""},{"lineNumber":919,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getConstSumOptions(int qnNumber, String recipient) {"},{"lineNumber":920,"author":{"gitId":"-"},"content":" WebElement constSumOptionSection \u003d getConstSumOptionsSection(qnNumber, recipient);"},{"lineNumber":921,"author":{"gitId":"-"},"content":" return constSumOptionSection.findElements(By.tagName(\"strong\"));"},{"lineNumber":922,"author":{"gitId":"-"},"content":" }"},{"lineNumber":923,"author":{"gitId":"-"},"content":""},{"lineNumber":924,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getConstSumInputs(int qnNumber, String recipient) {"},{"lineNumber":925,"author":{"gitId":"-"},"content":" WebElement constSumOptionSection \u003d getConstSumOptionsSection(qnNumber, recipient);"},{"lineNumber":926,"author":{"gitId":"-"},"content":" return constSumOptionSection.findElements(By.cssSelector(\"input[type\u003dnumber]\"));"},{"lineNumber":927,"author":{"gitId":"-"},"content":" }"},{"lineNumber":928,"author":{"gitId":"-"},"content":""},{"lineNumber":929,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getConstSumRecipientInputs(int qnNumber) {"},{"lineNumber":930,"author":{"gitId":"-"},"content":" return getQuestionForm(qnNumber).findElements(By.cssSelector(\"input[type\u003dnumber]\"));"},{"lineNumber":931,"author":{"gitId":"-"},"content":" }"},{"lineNumber":932,"author":{"gitId":"-"},"content":""},{"lineNumber":933,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getContributionDropdowns(int questionNum) {"},{"lineNumber":934,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElements(By.tagName(\"select\"));"},{"lineNumber":935,"author":{"gitId":"-"},"content":" }"},{"lineNumber":936,"author":{"gitId":"-"},"content":""},{"lineNumber":937,"author":{"gitId":"-"},"content":" private String getContributionString(int answer) {"},{"lineNumber":938,"author":{"gitId":"-"},"content":" if (answer \u003d\u003d Const.POINTS_NOT_SURE) {"},{"lineNumber":939,"author":{"gitId":"-"},"content":" return \"Not Sure\";"},{"lineNumber":940,"author":{"gitId":"-"},"content":" } else if (answer \u003d\u003d Const.POINTS_EQUAL_SHARE) {"},{"lineNumber":941,"author":{"gitId":"-"},"content":" return \"Equal share\";"},{"lineNumber":942,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":943,"author":{"gitId":"-"},"content":" return \"Equal share\" + (answer \u003e 100 ? \" + \" : \" - \") + Math.abs(answer - 100) + \"%\";"},{"lineNumber":944,"author":{"gitId":"-"},"content":" }"},{"lineNumber":945,"author":{"gitId":"-"},"content":" }"},{"lineNumber":946,"author":{"gitId":"-"},"content":""},{"lineNumber":947,"author":{"gitId":"-"},"content":" private WebElement getRubricSection(int qnNumber, String recipient) {"},{"lineNumber":948,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":949,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":950,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-rubric-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":951,"author":{"gitId":"-"},"content":" }"},{"lineNumber":952,"author":{"gitId":"-"},"content":""},{"lineNumber":953,"author":{"gitId":"-"},"content":" private WebElement getRubricTable(int qnNumber, String recipient) {"},{"lineNumber":954,"author":{"gitId":"-"},"content":" return getRubricSection(qnNumber, recipient).findElement(By.tagName(\"table\"));"},{"lineNumber":955,"author":{"gitId":"-"},"content":" }"},{"lineNumber":956,"author":{"gitId":"-"},"content":""},{"lineNumber":957,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRubricInputs(int qnNumber, String recipient, int rowNumber) {"},{"lineNumber":958,"author":{"gitId":"-"},"content":" WebElement rubricRow \u003d getRubricSection(qnNumber, recipient).findElements(By.tagName(\"tr\")).get(rowNumber - 1);"},{"lineNumber":959,"author":{"gitId":"-"},"content":" return rubricRow.findElements(By.tagName(\"input\"));"},{"lineNumber":960,"author":{"gitId":"-"},"content":" }"},{"lineNumber":961,"author":{"gitId":"-"},"content":""},{"lineNumber":962,"author":{"gitId":"-"},"content":" private WebElement getRankOptionsSection(int qnNumber, String recipient) {"},{"lineNumber":963,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":964,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":965,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-rank-options-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":966,"author":{"gitId":"-"},"content":" }"},{"lineNumber":967,"author":{"gitId":"-"},"content":""},{"lineNumber":968,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRankOptions(int questionNum, String recipient) {"},{"lineNumber":969,"author":{"gitId":"-"},"content":" WebElement rankSection \u003d getRankOptionsSection(questionNum, recipient);"},{"lineNumber":970,"author":{"gitId":"-"},"content":" return rankSection.findElements(By.tagName(\"strong\"));"},{"lineNumber":971,"author":{"gitId":"-"},"content":" }"},{"lineNumber":972,"author":{"gitId":"-"},"content":""},{"lineNumber":973,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRankOptionsDropdowns(int questionNum, String recipient) {"},{"lineNumber":974,"author":{"gitId":"-"},"content":" WebElement rankSection \u003d getRankOptionsSection(questionNum, recipient);"},{"lineNumber":975,"author":{"gitId":"-"},"content":" return rankSection.findElements(By.tagName(\"select\"));"},{"lineNumber":976,"author":{"gitId":"-"},"content":" }"},{"lineNumber":977,"author":{"gitId":"-"},"content":""},{"lineNumber":978,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRankRecipientDropdowns(int questionNum) {"},{"lineNumber":979,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElements(By.tagName(\"select\"));"},{"lineNumber":980,"author":{"gitId":"-"},"content":" }"},{"lineNumber":981,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":45,"mingyuanc":14,"-":922}},{"path":"src/e2e/java/teammates/e2e/pageobjects/InstructorFeedbackEditPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertEquals;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertFalse;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertTrue;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.time.ZoneId;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.time.ZonedDateTime;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Arrays;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.openqa.selenium.Keys;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.FindBy;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackConstantSumQuestionDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackContributionQuestionDetails;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqQuestionDetails;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackNumericalScaleQuestionDetails;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionType;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsQuestionDetails;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankQuestionDetails;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRubricQuestionDetails;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextQuestionDetails;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.test.ThreadHelper;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * Represents the instructor feedback edit page of the website."},{"lineNumber":41,"author":{"gitId":"-"},"content":" */"},{"lineNumber":42,"author":{"gitId":"-"},"content":"public class InstructorFeedbackEditPage extends AppPage {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" private static final String CUSTOM_FEEDBACK_PATH_OPTION \u003d \"Custom feedback path\";"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_PATH_SEPARATOR \u003d \" will give feedback on \";"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private static final String CUSTOM_VISIBILITY_OPTION \u003d \"Custom visibility options\";"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-fs-edit\")"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private WebElement fsEditButton;"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-fs-save\")"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private WebElement fsSaveButton;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-fs-copy\")"},{"lineNumber":54,"author":{"gitId":"-"},"content":" private WebElement fsCopyButton;"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"edit-course-id\")"},{"lineNumber":57,"author":{"gitId":"-"},"content":" private WebElement courseIdTextBox;"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"time-zone\")"},{"lineNumber":60,"author":{"gitId":"-"},"content":" private WebElement timezoneDropDown;"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"course-name\")"},{"lineNumber":63,"author":{"gitId":"-"},"content":" private WebElement courseNameTextBox;"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"edit-session-name\")"},{"lineNumber":66,"author":{"gitId":"-"},"content":" private WebElement sessionNameTextBox;"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"instructions\")"},{"lineNumber":69,"author":{"gitId":"-"},"content":" private WebElement instructionsEditor;"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-start-date\")"},{"lineNumber":72,"author":{"gitId":"-"},"content":" private WebElement startDateBox;"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-start-time\")"},{"lineNumber":75,"author":{"gitId":"-"},"content":" private WebElement startTimeDropdown;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-end-date\")"},{"lineNumber":78,"author":{"gitId":"-"},"content":" private WebElement endDateBox;"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-end-time\")"},{"lineNumber":81,"author":{"gitId":"-"},"content":" private WebElement endTimeDropdown;"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"grace-period\")"},{"lineNumber":84,"author":{"gitId":"-"},"content":" private WebElement gracePeriodDropdown;"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-status\")"},{"lineNumber":87,"author":{"gitId":"-"},"content":" private WebElement submissionStatusTextBox;"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"published-status\")"},{"lineNumber":90,"author":{"gitId":"-"},"content":" private WebElement publishStatusTextBox;"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-change-visibility\")"},{"lineNumber":93,"author":{"gitId":"-"},"content":" private WebElement changeVisibilityButton;"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"session-visibility-custom\")"},{"lineNumber":96,"author":{"gitId":"-"},"content":" private WebElement customSessionVisibleTimeButton;"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"session-visibility-date\")"},{"lineNumber":99,"author":{"gitId":"-"},"content":" private WebElement sessionVisibilityDateBox;"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"session-visibility-time\")"},{"lineNumber":102,"author":{"gitId":"-"},"content":" private WebElement sessionVisibilityTimeDropdown;"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"session-visibility-at-open\")"},{"lineNumber":105,"author":{"gitId":"-"},"content":" private WebElement openSessionVisibleTimeButton;"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-custom\")"},{"lineNumber":108,"author":{"gitId":"-"},"content":" private WebElement customResponseVisibleTimeButton;"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-date\")"},{"lineNumber":111,"author":{"gitId":"-"},"content":" private WebElement responseVisibilityDateBox;"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-time\")"},{"lineNumber":114,"author":{"gitId":"-"},"content":" private WebElement responseVisibilityTimeDropdown;"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-immediately\")"},{"lineNumber":117,"author":{"gitId":"-"},"content":" private WebElement immediateResponseVisibleTimeButton;"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-manually\")"},{"lineNumber":120,"author":{"gitId":"-"},"content":" private WebElement manualResponseVisibleTimeButton;"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-change-email\")"},{"lineNumber":123,"author":{"gitId":"-"},"content":" private WebElement changeEmailButton;"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"email-opening\")"},{"lineNumber":126,"author":{"gitId":"-"},"content":" private WebElement openingSessionEmailCheckbox;"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"email-closing\")"},{"lineNumber":129,"author":{"gitId":"-"},"content":" private WebElement closingSessionEmailCheckbox;"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"email-published\")"},{"lineNumber":132,"author":{"gitId":"-"},"content":" private WebElement publishedSessionEmailCheckbox;"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-new-question\")"},{"lineNumber":135,"author":{"gitId":"-"},"content":" private WebElement addNewQuestionButton;"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-copy-question\")"},{"lineNumber":138,"author":{"gitId":"-"},"content":" private WebElement copyQuestionButton;"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"preview-student\")"},{"lineNumber":141,"author":{"gitId":"-"},"content":" private WebElement previewAsStudentDropdown;"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-preview-student\")"},{"lineNumber":144,"author":{"gitId":"-"},"content":" private WebElement previewAsStudentButton;"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"preview-instructor\")"},{"lineNumber":147,"author":{"gitId":"-"},"content":" private WebElement previewAsInstructorDropdown;"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-preview-instructor\")"},{"lineNumber":150,"author":{"gitId":"-"},"content":" private WebElement previewAsInstructorButton;"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" public InstructorFeedbackEditPage(Browser browser) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":157,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" return getPageTitle().contains(\"Edit Feedback Session\");"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":" public void verifySessionDetails(CourseAttributes course, FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" waitForElementPresence(By.id(\"instructions\"));"},{"lineNumber":163,"author":{"gitId":"-"},"content":" assertEquals(getCourseId(), course.getId());"},{"lineNumber":164,"author":{"gitId":"-"},"content":" assertEquals(getCourseName(), course.getName());"},{"lineNumber":165,"author":{"gitId":"-"},"content":" assertEquals(getTimeZone(), feedbackSession.getTimeZone());"},{"lineNumber":166,"author":{"gitId":"-"},"content":" assertEquals(getFeedbackSessionName(), feedbackSession.getFeedbackSessionName());"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assertEquals(getInstructions(), feedbackSession.getInstructions());"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(getStartDate(), getDateString(feedbackSession.getStartTime(), feedbackSession.getTimeZone()));"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertEquals(getStartTime(), getTimeString(feedbackSession.getStartTime(), feedbackSession.getTimeZone()));"},{"lineNumber":170,"author":{"gitId":"-"},"content":" assertEquals(getEndDate(), getDateString(feedbackSession.getEndTime(), feedbackSession.getTimeZone()));"},{"lineNumber":171,"author":{"gitId":"-"},"content":" assertEquals(getEndTime(), getTimeString(feedbackSession.getEndTime(), feedbackSession.getTimeZone()));"},{"lineNumber":172,"author":{"gitId":"-"},"content":" assertEquals(getGracePeriod(), feedbackSession.getGracePeriodMinutes() + \" min\");"},{"lineNumber":173,"author":{"gitId":"-"},"content":" verifySubmissionStatus(feedbackSession);"},{"lineNumber":174,"author":{"gitId":"-"},"content":" verifyPublishedStatus(feedbackSession);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" verifyVisibilitySettings(feedbackSession);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" verifyEmailSettings(feedbackSession);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" private void verifySubmissionStatus(FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" String submissionStatus \u003d getSubmissionStatus();"},{"lineNumber":181,"author":{"gitId":"-"},"content":" if (feedbackSession.isClosed()) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertEquals(submissionStatus, \"Closed\");"},{"lineNumber":183,"author":{"gitId":"-"},"content":" } else if (feedbackSession.isVisible() \u0026\u0026 (feedbackSession.isOpened() || feedbackSession.isInGracePeriod())) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" assertEquals(submissionStatus, \"Open\");"},{"lineNumber":185,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" assertEquals(submissionStatus, \"Awaiting\");"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" private void verifyPublishedStatus(FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" String publishedStatus \u003d getPublishedStatus();"},{"lineNumber":192,"author":{"gitId":"-"},"content":" if (feedbackSession.isPublished()) {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertEquals(publishedStatus, \"Published\");"},{"lineNumber":194,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" assertEquals(publishedStatus, \"Not Published\");"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" private void verifyVisibilitySettings(FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" Instant sessionVisibleTime \u003d feedbackSession.getSessionVisibleFromTime();"},{"lineNumber":201,"author":{"gitId":"-"},"content":" Instant responseVisibleTime \u003d feedbackSession.getResultsVisibleFromTime();"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" // Default settings, assert setting section not expanded"},{"lineNumber":204,"author":{"gitId":"-"},"content":" if (sessionVisibleTime.equals(Const.TIME_REPRESENTS_FOLLOW_OPENING)"},{"lineNumber":205,"author":{"gitId":"-"},"content":" \u0026\u0026 responseVisibleTime.equals(Const.TIME_REPRESENTS_LATER)) {"},{"lineNumber":206,"author":{"gitId":"-"},"content":" assertTrue(isElementPresent(\"btn-change-visibility\"));"},{"lineNumber":207,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }"},{"lineNumber":209,"author":{"gitId":"-"},"content":" verifySessionVisibilitySettings(sessionVisibleTime, feedbackSession);"},{"lineNumber":210,"author":{"gitId":"-"},"content":" verifyResponseVisibilitySettings(responseVisibleTime, feedbackSession);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" private void verifySessionVisibilitySettings(Instant sessionVisibleTime,"},{"lineNumber":214,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" if (sessionVisibleTime.equals(Const.TIME_REPRESENTS_FOLLOW_OPENING)) {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" assertTrue(openSessionVisibleTimeButton.isSelected());"},{"lineNumber":217,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" assertTrue(customSessionVisibleTimeButton.isSelected());"},{"lineNumber":219,"author":{"gitId":"-"},"content":" assertEquals(getSessionVisibilityDate(), getDateString(feedbackSession.getSessionVisibleFromTime(),"},{"lineNumber":220,"author":{"gitId":"-"},"content":" feedbackSession.getTimeZone()));"},{"lineNumber":221,"author":{"gitId":"-"},"content":" assertEquals(getSessionVisibilityTime(), getTimeString(feedbackSession.getSessionVisibleFromTime(),"},{"lineNumber":222,"author":{"gitId":"-"},"content":" feedbackSession.getTimeZone()));"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" private void verifyResponseVisibilitySettings(Instant responseVisibleTime,"},{"lineNumber":227,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" if (responseVisibleTime.equals(Const.TIME_REPRESENTS_FOLLOW_VISIBLE)) {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" assertTrue(immediateResponseVisibleTimeButton.isSelected());"},{"lineNumber":230,"author":{"gitId":"-"},"content":" } else if (responseVisibleTime.equals(Const.TIME_REPRESENTS_LATER)) {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" assertTrue(manualResponseVisibleTimeButton.isSelected());"},{"lineNumber":232,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" assertTrue(customSessionVisibleTimeButton.isSelected());"},{"lineNumber":234,"author":{"gitId":"-"},"content":" assertEquals(getResponseVisibilityDate(), getDateString(feedbackSession.getResultsVisibleFromTime(),"},{"lineNumber":235,"author":{"gitId":"-"},"content":" feedbackSession.getTimeZone()));"},{"lineNumber":236,"author":{"gitId":"-"},"content":" assertEquals(getResponseVisibilityTime(), getTimeString(feedbackSession.getResultsVisibleFromTime(),"},{"lineNumber":237,"author":{"gitId":"-"},"content":" feedbackSession.getTimeZone()));"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" private void verifyEmailSettings(FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" boolean isOpeningEmailEnabled \u003d feedbackSession.isOpeningEmailEnabled();"},{"lineNumber":243,"author":{"gitId":"-"},"content":" boolean isClosingEmailEnabled \u003d feedbackSession.isClosingEmailEnabled();"},{"lineNumber":244,"author":{"gitId":"-"},"content":" boolean isPublishedEmailEnabled \u003d feedbackSession.isPublishedEmailEnabled();"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" // Default settings, assert setting section not expanded"},{"lineNumber":247,"author":{"gitId":"-"},"content":" if (isOpeningEmailEnabled \u0026\u0026 isClosingEmailEnabled \u0026\u0026 isPublishedEmailEnabled) {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" assertTrue(isElementPresent(\"btn-change-email\"));"},{"lineNumber":249,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":250,"author":{"gitId":"-"},"content":" }"},{"lineNumber":251,"author":{"gitId":"-"},"content":" if (isOpeningEmailEnabled) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" assertTrue(openingSessionEmailCheckbox.isSelected());"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":" if (isClosingEmailEnabled) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" assertTrue(closingSessionEmailCheckbox.isSelected());"},{"lineNumber":256,"author":{"gitId":"-"},"content":" }"},{"lineNumber":257,"author":{"gitId":"-"},"content":" if (isPublishedEmailEnabled) {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" assertTrue(publishedSessionEmailCheckbox.isSelected());"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" public void editSessionDetails(FeedbackSessionAttributes newFeedbackSessionDetails) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" click(fsEditButton);"},{"lineNumber":264,"author":{"gitId":"-"},"content":" setInstructions(newFeedbackSessionDetails.getInstructions());"},{"lineNumber":265,"author":{"gitId":"-"},"content":" setSessionStartDateTime(newFeedbackSessionDetails.getStartTime(), newFeedbackSessionDetails.getTimeZone());"},{"lineNumber":266,"author":{"gitId":"-"},"content":" setSessionEndDateTime(newFeedbackSessionDetails.getEndTime(), newFeedbackSessionDetails.getTimeZone());"},{"lineNumber":267,"author":{"gitId":"-"},"content":" selectGracePeriod(newFeedbackSessionDetails.getGracePeriodMinutes());"},{"lineNumber":268,"author":{"gitId":"-"},"content":" setVisibilitySettings(newFeedbackSessionDetails);"},{"lineNumber":269,"author":{"gitId":"-"},"content":" setEmailSettings(newFeedbackSessionDetails);"},{"lineNumber":270,"author":{"gitId":"-"},"content":" click(fsSaveButton);"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }"},{"lineNumber":272,"author":{"gitId":"-"},"content":""},{"lineNumber":273,"author":{"gitId":"-"},"content":" public void copySessionToOtherCourse(CourseAttributes otherCourse, String sessionName) {"},{"lineNumber":274,"author":{"gitId":"-"},"content":" click(fsCopyButton);"},{"lineNumber":275,"author":{"gitId":"-"},"content":" WebElement copyFsModal \u003d waitForElementPresence(By.id(\"copy-course-modal\"));"},{"lineNumber":276,"author":{"gitId":"-"},"content":""},{"lineNumber":277,"author":{"gitId":"-"},"content":" fillTextBox(copyFsModal.findElement(By.id(\"copy-session-name\")), sessionName);"},{"lineNumber":278,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e options \u003d copyFsModal.findElements(By.className(\"form-check\"));"},{"lineNumber":279,"author":{"gitId":"-"},"content":" for (WebElement option : options) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" String courseId \u003d option.findElement(By.cssSelector(\"label span\")).getText();"},{"lineNumber":281,"author":{"gitId":"-"},"content":" if (courseId.equals(otherCourse.getId())) {"},{"lineNumber":282,"author":{"gitId":"-"},"content":" click(option.findElement(By.tagName(\"input\")));"},{"lineNumber":283,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":284,"author":{"gitId":"-"},"content":" }"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":" click(browser.driver.findElement(By.id(\"btn-confirm-copy-course\")));"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" public void deleteSession() {"},{"lineNumber":290,"author":{"gitId":"-"},"content":" clickAndConfirm(waitForElementPresence(By.id(\"btn-fs-delete\")));"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" public FeedbackSubmitPage previewAsStudent(StudentAttributes student) {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(previewAsStudentDropdown, String.format(\"[%s] %s\", student.getTeam(), student.getName()));"},{"lineNumber":295,"author":{"gitId":"-"},"content":" click(previewAsStudentButton);"},{"lineNumber":296,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(2000);"},{"lineNumber":297,"author":{"gitId":"-"},"content":" switchToNewWindow();"},{"lineNumber":298,"author":{"gitId":"-"},"content":" return changePageType(FeedbackSubmitPage.class);"},{"lineNumber":299,"author":{"gitId":"-"},"content":" }"},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"-"},"content":" public FeedbackSubmitPage previewAsInstructor(InstructorAttributes instructor) {"},{"lineNumber":302,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(previewAsInstructorDropdown, instructor.getName());"},{"lineNumber":303,"author":{"gitId":"-"},"content":" click(previewAsInstructorButton);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(2000);"},{"lineNumber":305,"author":{"gitId":"-"},"content":" switchToNewWindow();"},{"lineNumber":306,"author":{"gitId":"-"},"content":" return changePageType(FeedbackSubmitPage.class);"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" public void verifyNumQuestions(int expected) {"},{"lineNumber":310,"author":{"gitId":"-"},"content":" assertEquals(getNumQuestions(), expected);"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":" public void verifyQuestionDetails(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":314,"author":{"gitId":"-"},"content":" scrollElementToCenter(getQuestionForm(questionNum));"},{"lineNumber":315,"author":{"gitId":"-"},"content":" assertEquals(feedbackQuestion.getQuestionType(), getQuestionType(questionNum));"},{"lineNumber":316,"author":{"gitId":"-"},"content":" assertEquals(feedbackQuestion.getQuestionNumber(), getQuestionNumber(questionNum));"},{"lineNumber":317,"author":{"gitId":"-"},"content":" assertEquals(feedbackQuestion.getQuestionDetailsCopy().getQuestionText(), getQuestionBrief(questionNum));"},{"lineNumber":318,"author":{"gitId":"-"},"content":" assertEquals(getQuestionDescription(questionNum), feedbackQuestion.getQuestionDescription());"},{"lineNumber":319,"author":{"gitId":"-"},"content":" verifyFeedbackPathSettings(questionNum, feedbackQuestion);"},{"lineNumber":320,"author":{"gitId":"-"},"content":" verifyQuestionVisibilitySettings(questionNum, feedbackQuestion);"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" private void verifyFeedbackPathSettings(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" assertEquals(getDisplayGiverName(feedbackQuestion.getGiverType()), getFeedbackGiver(questionNum));"},{"lineNumber":325,"author":{"gitId":"-"},"content":" String feedbackReceiver \u003d getFeedbackReceiver(questionNum);"},{"lineNumber":326,"author":{"gitId":"-"},"content":" assertEquals(getDisplayRecipientName(feedbackQuestion.getRecipientType()), feedbackReceiver);"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" if (feedbackReceiver.equals(getDisplayRecipientName(FeedbackParticipantType.INSTRUCTORS))"},{"lineNumber":329,"author":{"gitId":"-"},"content":" || feedbackReceiver.equals(getDisplayRecipientName(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF))"},{"lineNumber":330,"author":{"gitId":"-"},"content":" || feedbackReceiver.equals(getDisplayRecipientName(FeedbackParticipantType.TEAMS_EXCLUDING_SELF))) {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" verifyNumberOfEntitiesToGiveFeedbackTo(questionNum, feedbackQuestion.getNumberOfEntitiesToGiveFeedbackTo());"},{"lineNumber":332,"author":{"gitId":"-"},"content":" }"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" private void verifyNumberOfEntitiesToGiveFeedbackTo(int questionNum, int numberOfEntitiesToGiveFeedbackTo) {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":337,"author":{"gitId":"-"},"content":" WebElement feedbackPathPanel \u003d questionForm.findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":338,"author":{"gitId":"-"},"content":" if (numberOfEntitiesToGiveFeedbackTo \u003d\u003d Const.MAX_POSSIBLE_RECIPIENTS) {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" assertTrue(feedbackPathPanel.findElement(By.id(\"unlimited-recipients\")).isSelected());"},{"lineNumber":340,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":341,"author":{"gitId":"-"},"content":" assertTrue(feedbackPathPanel.findElement(By.id(\"custom-recipients\")).isSelected());"},{"lineNumber":342,"author":{"gitId":"-"},"content":" assertEquals(feedbackPathPanel.findElement(By.id(\"custom-recipients-number\")).getAttribute(\"value\"),"},{"lineNumber":343,"author":{"gitId":"-"},"content":" Integer.toString(numberOfEntitiesToGiveFeedbackTo));"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" private void verifyQuestionVisibilitySettings(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":349,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":350,"author":{"gitId":"-"},"content":" String visibility \u003d visibilityPanel.findElement(By.cssSelector(\"#btn-question-visibility span\")).getText();"},{"lineNumber":351,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showResponsesTo \u003d feedbackQuestion.getShowResponsesTo();"},{"lineNumber":352,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo \u003d feedbackQuestion.getShowGiverNameTo();"},{"lineNumber":353,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showRecipientNameTo \u003d feedbackQuestion.getShowRecipientNameTo();"},{"lineNumber":354,"author":{"gitId":"-"},"content":""},{"lineNumber":355,"author":{"gitId":"-"},"content":" switch (visibility) {"},{"lineNumber":356,"author":{"gitId":"-"},"content":" case \"Shown anonymously to recipient and giver\u0027s team members, visible to instructors\":"},{"lineNumber":357,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":358,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":359,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.OWN_TEAM_MEMBERS));"},{"lineNumber":360,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 3);"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":363,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 1);"},{"lineNumber":364,"author":{"gitId":"-"},"content":""},{"lineNumber":365,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":366,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":367,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":368,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":" case \"Visible to instructors only\":"},{"lineNumber":371,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":372,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 1);"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":375,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 1);"},{"lineNumber":376,"author":{"gitId":"-"},"content":""},{"lineNumber":377,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":378,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 1);"},{"lineNumber":379,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":" case \"Shown anonymously to recipient and instructors\":"},{"lineNumber":382,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":383,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":384,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 2);"},{"lineNumber":385,"author":{"gitId":"-"},"content":""},{"lineNumber":386,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 0);"},{"lineNumber":387,"author":{"gitId":"-"},"content":""},{"lineNumber":388,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":389,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":390,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":391,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":392,"author":{"gitId":"-"},"content":""},{"lineNumber":393,"author":{"gitId":"-"},"content":" case \"Shown anonymously to recipient, visible to instructors\":"},{"lineNumber":394,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":395,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":396,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 2);"},{"lineNumber":397,"author":{"gitId":"-"},"content":""},{"lineNumber":398,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":399,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 1);"},{"lineNumber":400,"author":{"gitId":"-"},"content":""},{"lineNumber":401,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":402,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":403,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":404,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" case \"Shown anonymously to recipient and giver/recipient\u0027s team members, visible to instructors\":"},{"lineNumber":407,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":408,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":409,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.OWN_TEAM_MEMBERS));"},{"lineNumber":410,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS));"},{"lineNumber":411,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 4);"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":414,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 1);"},{"lineNumber":415,"author":{"gitId":"-"},"content":""},{"lineNumber":416,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":417,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":418,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":419,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":420,"author":{"gitId":"-"},"content":""},{"lineNumber":421,"author":{"gitId":"-"},"content":" case \"Visible to recipient and instructors\":"},{"lineNumber":422,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":423,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":424,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 2);"},{"lineNumber":425,"author":{"gitId":"-"},"content":""},{"lineNumber":426,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":427,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":428,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 2);"},{"lineNumber":429,"author":{"gitId":"-"},"content":""},{"lineNumber":430,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":431,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":432,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":433,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":434,"author":{"gitId":"-"},"content":""},{"lineNumber":435,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":436,"author":{"gitId":"-"},"content":" verifyCustomQuestionVisibility(questionNum, feedbackQuestion);"},{"lineNumber":437,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":" }"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" private void verifyCustomQuestionVisibility(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":442,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":443,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":444,"author":{"gitId":"-"},"content":" String visibility \u003d visibilityPanel.findElement(By.cssSelector(\"#btn-question-visibility span\")).getText();"},{"lineNumber":445,"author":{"gitId":"-"},"content":" assertEquals(visibility, CUSTOM_VISIBILITY_OPTION);"},{"lineNumber":446,"author":{"gitId":"-"},"content":""},{"lineNumber":447,"author":{"gitId":"-"},"content":" FeedbackParticipantType giver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":448,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":449,"author":{"gitId":"-"},"content":" WebElement customVisibilityTable \u003d visibilityPanel.findElement(By.id(\"custom-visibility-table\"));"},{"lineNumber":450,"author":{"gitId":"-"},"content":" assertVisibilityBoxesSelected(customVisibilityTable, giver, receiver, feedbackQuestion.getShowResponsesTo(), 1);"},{"lineNumber":451,"author":{"gitId":"-"},"content":" assertVisibilityBoxesSelected(customVisibilityTable, giver, receiver, feedbackQuestion.getShowGiverNameTo(), 2);"},{"lineNumber":452,"author":{"gitId":"-"},"content":" assertVisibilityBoxesSelected(customVisibilityTable, giver, receiver, feedbackQuestion.getShowRecipientNameTo(), 3);"},{"lineNumber":453,"author":{"gitId":"-"},"content":" }"},{"lineNumber":454,"author":{"gitId":"-"},"content":""},{"lineNumber":455,"author":{"gitId":"-"},"content":" private void assertVisibilityBoxesSelected(WebElement table, FeedbackParticipantType giver,"},{"lineNumber":456,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver, List\u003cFeedbackParticipantType\u003e participants,"},{"lineNumber":457,"author":{"gitId":"-"},"content":" int colNum) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e possibleTypes \u003d new ArrayList\u003c\u003e(Arrays.asList(FeedbackParticipantType.RECEIVER,"},{"lineNumber":459,"author":{"gitId":"-"},"content":" FeedbackParticipantType.OWN_TEAM_MEMBERS, FeedbackParticipantType.RECEIVER_TEAM_MEMBERS,"},{"lineNumber":460,"author":{"gitId":"-"},"content":" FeedbackParticipantType.STUDENTS, FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":461,"author":{"gitId":"-"},"content":" if (!giver.equals(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":462,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.OWN_TEAM_MEMBERS);"},{"lineNumber":463,"author":{"gitId":"-"},"content":" }"},{"lineNumber":464,"author":{"gitId":"-"},"content":" if (!receiver.equals(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":465,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":466,"author":{"gitId":"-"},"content":" }"},{"lineNumber":467,"author":{"gitId":"-"},"content":" if (receiver.equals(FeedbackParticipantType.NONE)"},{"lineNumber":468,"author":{"gitId":"-"},"content":" || receiver.equals(FeedbackParticipantType.SELF)"},{"lineNumber":469,"author":{"gitId":"-"},"content":" || receiver.equals(FeedbackParticipantType.OWN_TEAM)) {"},{"lineNumber":470,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER);"},{"lineNumber":471,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":472,"author":{"gitId":"-"},"content":" }"},{"lineNumber":473,"author":{"gitId":"-"},"content":""},{"lineNumber":474,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElements(By.tagName(\"tr\"));"},{"lineNumber":475,"author":{"gitId":"-"},"content":" int index \u003d colNum - 1;"},{"lineNumber":476,"author":{"gitId":"-"},"content":" for (FeedbackParticipantType participant : participants) {"},{"lineNumber":477,"author":{"gitId":"-"},"content":" assertTrue(rows.get(possibleTypes.indexOf(participant)).findElements(By.tagName(\"input\")).get(index)"},{"lineNumber":478,"author":{"gitId":"-"},"content":" .isSelected());"},{"lineNumber":479,"author":{"gitId":"-"},"content":" }"},{"lineNumber":480,"author":{"gitId":"-"},"content":" }"},{"lineNumber":481,"author":{"gitId":"-"},"content":""},{"lineNumber":482,"author":{"gitId":"-"},"content":" public void addTemplateQuestion(int optionNum) {"},{"lineNumber":483,"author":{"gitId":"-"},"content":" addNewQuestion(1);"},{"lineNumber":484,"author":{"gitId":"-"},"content":" WebElement templateQuestionModal \u003d waitForElementPresence(By.id(\"template-question-modal\"));"},{"lineNumber":485,"author":{"gitId":"-"},"content":""},{"lineNumber":486,"author":{"gitId":"-"},"content":" click(templateQuestionModal.findElements(By.tagName(\"input\")).get(optionNum - 1));"},{"lineNumber":487,"author":{"gitId":"-"},"content":" clickAndWaitForNewQuestion(browser.driver.findElement(By.id(\"btn-confirm-template\")));"},{"lineNumber":488,"author":{"gitId":"-"},"content":" }"},{"lineNumber":489,"author":{"gitId":"-"},"content":""},{"lineNumber":490,"author":{"gitId":"-"},"content":" public void copyQuestion(String courseId, String questionText) {"},{"lineNumber":491,"author":{"gitId":"-"},"content":" click(copyQuestionButton);"},{"lineNumber":492,"author":{"gitId":"-"},"content":" WebElement copyQuestionModal \u003d waitForElementPresence(By.id(\"copy-question-modal\"));"},{"lineNumber":493,"author":{"gitId":"-"},"content":""},{"lineNumber":494,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e cards \u003d copyQuestionModal.findElements(By.className(\"card\"));"},{"lineNumber":495,"author":{"gitId":"-"},"content":" for (WebElement card : cards) {"},{"lineNumber":496,"author":{"gitId":"-"},"content":" WebElement cardHeader \u003d card.findElement(By.className(\"card-header\"));"},{"lineNumber":497,"author":{"gitId":"-"},"content":" if (cardHeader.getText().startsWith(\"[\" + courseId + \"]\")) {"},{"lineNumber":498,"author":{"gitId":"-"},"content":" click(cardHeader);"},{"lineNumber":499,"author":{"gitId":"-"},"content":" WebElement cardBody \u003d waitForElementPresence(By.className(\"card-body\"));"},{"lineNumber":500,"author":{"gitId":"-"},"content":" // Reload questions"},{"lineNumber":501,"author":{"gitId":"-"},"content":" WebElement reloadBtn \u003d cardBody.findElement(By.tagName(\"button\"));"},{"lineNumber":502,"author":{"gitId":"-"},"content":" click(reloadBtn);"},{"lineNumber":503,"author":{"gitId":"-"},"content":" WebElement table \u003d waitForElementPresence(By.id(\"copy-question-table\"));"},{"lineNumber":504,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElements(By.cssSelector(\"tbody tr\"));"},{"lineNumber":505,"author":{"gitId":"-"},"content":" for (WebElement row : rows) {"},{"lineNumber":506,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e cells \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":507,"author":{"gitId":"-"},"content":" if (cells.get(2).getText().equals(questionText)) {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" markOptionAsSelected(cells.get(0).findElement(By.tagName(\"input\")));"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" }"},{"lineNumber":511,"author":{"gitId":"-"},"content":" }"},{"lineNumber":512,"author":{"gitId":"-"},"content":" }"},{"lineNumber":513,"author":{"gitId":"-"},"content":" clickAndWaitForNewQuestion(browser.driver.findElement(By.id(\"btn-confirm-copy-question\")));"},{"lineNumber":514,"author":{"gitId":"-"},"content":" }"},{"lineNumber":515,"author":{"gitId":"-"},"content":""},{"lineNumber":516,"author":{"gitId":"-"},"content":" public void editQuestionNumber(int questionNum, int newQuestionNumber) {"},{"lineNumber":517,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":518,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getQuestionForm(questionNum).findElement(By.id(\"question-number-dropdown\")),"},{"lineNumber":519,"author":{"gitId":"-"},"content":" Integer.toString(newQuestionNumber));"},{"lineNumber":520,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":521,"author":{"gitId":"-"},"content":" }"},{"lineNumber":522,"author":{"gitId":"-"},"content":""},{"lineNumber":523,"author":{"gitId":"-"},"content":" public void editQuestionDetails(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":524,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":525,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":526,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":527,"author":{"gitId":"-"},"content":" }"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" private void inputQuestionDetails(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":530,"author":{"gitId":"-"},"content":" setQuestionBrief(questionNum, feedbackQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":531,"author":{"gitId":"-"},"content":" setQuestionDescription(questionNum, feedbackQuestion.getQuestionDescription());"},{"lineNumber":532,"author":{"gitId":"-"},"content":" FeedbackQuestionType questionType \u003d feedbackQuestion.getQuestionType();"},{"lineNumber":533,"author":{"gitId":"-"},"content":" if (!questionType.equals(FeedbackQuestionType.CONTRIB)) {"},{"lineNumber":534,"author":{"gitId":"-"},"content":" setFeedbackPath(questionNum, feedbackQuestion);"},{"lineNumber":535,"author":{"gitId":"-"},"content":" setQuestionVisibility(questionNum, feedbackQuestion);"},{"lineNumber":536,"author":{"gitId":"-"},"content":" }"},{"lineNumber":537,"author":{"gitId":"-"},"content":" }"},{"lineNumber":538,"author":{"gitId":"-"},"content":""},{"lineNumber":539,"author":{"gitId":"-"},"content":" private void inputQuestionDetails(int questionNum, FeedbackQuestion feedbackQuestion) {"},{"lineNumber":540,"author":{"gitId":"-"},"content":" setQuestionBrief(questionNum, feedbackQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":541,"author":{"gitId":"-"},"content":" setQuestionDescription(questionNum, feedbackQuestion.getDescription());"},{"lineNumber":542,"author":{"gitId":"-"},"content":" FeedbackQuestionType questionType \u003d feedbackQuestion.getQuestionDetailsCopy().getQuestionType();"},{"lineNumber":543,"author":{"gitId":"-"},"content":" if (!questionType.equals(FeedbackQuestionType.CONTRIB)) {"},{"lineNumber":544,"author":{"gitId":"-"},"content":" setFeedbackPath(questionNum, feedbackQuestion);"},{"lineNumber":545,"author":{"gitId":"-"},"content":" setQuestionVisibility(questionNum, feedbackQuestion);"},{"lineNumber":546,"author":{"gitId":"-"},"content":" }"},{"lineNumber":547,"author":{"gitId":"-"},"content":" }"},{"lineNumber":548,"author":{"gitId":"-"},"content":""},{"lineNumber":549,"author":{"gitId":"-"},"content":" public void duplicateQuestion(int questionNum) {"},{"lineNumber":550,"author":{"gitId":"-"},"content":" clickAndWaitForNewQuestion(getQuestionForm(questionNum).findElement(By.id(\"btn-duplicate-question\")));"},{"lineNumber":551,"author":{"gitId":"-"},"content":" }"},{"lineNumber":552,"author":{"gitId":"-"},"content":""},{"lineNumber":553,"author":{"gitId":"-"},"content":" public void deleteQuestion(int questionNum) {"},{"lineNumber":554,"author":{"gitId":"-"},"content":" clickAndConfirm(getQuestionForm(questionNum).findElement(By.id(\"btn-delete-question\")));"},{"lineNumber":555,"author":{"gitId":"-"},"content":" }"},{"lineNumber":556,"author":{"gitId":"-"},"content":""},{"lineNumber":557,"author":{"gitId":"-"},"content":" public void verifyTextQuestionDetails(int questionNum, FeedbackTextQuestionDetails questionDetails) {"},{"lineNumber":558,"author":{"gitId":"-"},"content":" String recommendLength \u003d getRecommendedTextLengthField(questionNum).getAttribute(\"value\");"},{"lineNumber":559,"author":{"gitId":"-"},"content":" assertEquals(recommendLength, questionDetails.getRecommendedLength().toString());"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":""},{"lineNumber":562,"author":{"gitId":"-"},"content":" public void addTextQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":563,"author":{"gitId":"-"},"content":" addNewQuestion(2);"},{"lineNumber":564,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":565,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":566,"author":{"gitId":"-"},"content":" FeedbackTextQuestionDetails questionDetails \u003d"},{"lineNumber":567,"author":{"gitId":"-"},"content":" (FeedbackTextQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":568,"author":{"gitId":"-"},"content":" fillTextBox(getRecommendedTextLengthField(questionNum), questionDetails.getRecommendedLength().toString());"},{"lineNumber":569,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":570,"author":{"gitId":"-"},"content":" }"},{"lineNumber":571,"author":{"gitId":"-"},"content":""},{"lineNumber":572,"author":{"gitId":"-"},"content":" public void addTextQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":573,"author":{"gitId":"-"},"content":" addNewQuestion(2);"},{"lineNumber":574,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":575,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":576,"author":{"gitId":"-"},"content":" FeedbackTextQuestionDetails questionDetails \u003d"},{"lineNumber":577,"author":{"gitId":"-"},"content":" (FeedbackTextQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":578,"author":{"gitId":"-"},"content":" fillTextBox(getRecommendedTextLengthField(questionNum), questionDetails.getRecommendedLength().toString());"},{"lineNumber":579,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":580,"author":{"gitId":"-"},"content":" }"},{"lineNumber":581,"author":{"gitId":"-"},"content":""},{"lineNumber":582,"author":{"gitId":"-"},"content":" public void editTextQuestion(int questionNum, FeedbackTextQuestionDetails textQuestionDetails) {"},{"lineNumber":583,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":584,"author":{"gitId":"-"},"content":" WebElement recommendedTextLengthField \u003d getRecommendedTextLengthField(questionNum);"},{"lineNumber":585,"author":{"gitId":"-"},"content":" waitForElementToBeClickable(recommendedTextLengthField);"},{"lineNumber":586,"author":{"gitId":"-"},"content":" fillTextBox(recommendedTextLengthField, textQuestionDetails.getRecommendedLength().toString());"},{"lineNumber":587,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":588,"author":{"gitId":"-"},"content":" }"},{"lineNumber":589,"author":{"gitId":"-"},"content":""},{"lineNumber":590,"author":{"gitId":"-"},"content":" public void verifyMcqQuestionDetails(int questionNum, FeedbackMcqQuestionDetails questionDetails) {"},{"lineNumber":591,"author":{"gitId":"-"},"content":" if (verifyGeneratedOptions(questionNum, questionDetails.getGenerateOptionsFor())) {"},{"lineNumber":592,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":593,"author":{"gitId":"-"},"content":" }"},{"lineNumber":594,"author":{"gitId":"-"},"content":" verifyOptions(questionNum, questionDetails.getMcqChoices());"},{"lineNumber":595,"author":{"gitId":"-"},"content":" verifyOptionWeights(questionNum, questionDetails.isHasAssignedWeights(), questionDetails.getMcqWeights());"},{"lineNumber":596,"author":{"gitId":"-"},"content":" verifyOtherOption(questionNum, questionDetails.isOtherEnabled(), questionDetails.getMcqOtherWeight());"},{"lineNumber":597,"author":{"gitId":"-"},"content":" }"},{"lineNumber":598,"author":{"gitId":"-"},"content":""},{"lineNumber":599,"author":{"gitId":"-"},"content":" public void addMcqQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":600,"author":{"gitId":"-"},"content":" addNewQuestion(3);"},{"lineNumber":601,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":602,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":603,"author":{"gitId":"-"},"content":" FeedbackMcqQuestionDetails questionDetails \u003d (FeedbackMcqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":604,"author":{"gitId":"-"},"content":" inputMcqDetails(questionNum, questionDetails);"},{"lineNumber":605,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":606,"author":{"gitId":"-"},"content":" }"},{"lineNumber":607,"author":{"gitId":"-"},"content":""},{"lineNumber":608,"author":{"gitId":"dishenggg"},"content":" public void addMcqQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":609,"author":{"gitId":"dishenggg"},"content":" addNewQuestion(3);"},{"lineNumber":610,"author":{"gitId":"dishenggg"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":611,"author":{"gitId":"dishenggg"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":612,"author":{"gitId":"-"},"content":" FeedbackMcqQuestionDetails questionDetails \u003d (FeedbackMcqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":613,"author":{"gitId":"-"},"content":" inputMcqDetails(questionNum, questionDetails);"},{"lineNumber":614,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":615,"author":{"gitId":"-"},"content":" }"},{"lineNumber":616,"author":{"gitId":"-"},"content":""},{"lineNumber":617,"author":{"gitId":"-"},"content":" public void editMcqQuestion(int questionNum, FeedbackMcqQuestionDetails questionDetails) {"},{"lineNumber":618,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":619,"author":{"gitId":"-"},"content":" inputMcqDetails(questionNum, questionDetails);"},{"lineNumber":620,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":621,"author":{"gitId":"-"},"content":" }"},{"lineNumber":622,"author":{"gitId":"-"},"content":""},{"lineNumber":623,"author":{"gitId":"-"},"content":" public void verifyMsqQuestionDetails(int questionNum, FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":624,"author":{"gitId":"-"},"content":" verifyMaxOptions(questionNum, questionDetails.getMaxSelectableChoices());"},{"lineNumber":625,"author":{"gitId":"-"},"content":" verifyMinOptions(questionNum, questionDetails.getMinSelectableChoices());"},{"lineNumber":626,"author":{"gitId":"-"},"content":" if (verifyGeneratedOptions(questionNum, questionDetails.getGenerateOptionsFor())) {"},{"lineNumber":627,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":629,"author":{"gitId":"-"},"content":" verifyOptions(questionNum, questionDetails.getMsqChoices());"},{"lineNumber":630,"author":{"gitId":"-"},"content":" verifyOptionWeights(questionNum, questionDetails.isHasAssignedWeights(), questionDetails.getMsqWeights());"},{"lineNumber":631,"author":{"gitId":"-"},"content":" verifyOtherOption(questionNum, questionDetails.isOtherEnabled(), questionDetails.getMsqOtherWeight());"},{"lineNumber":632,"author":{"gitId":"-"},"content":" }"},{"lineNumber":633,"author":{"gitId":"-"},"content":""},{"lineNumber":634,"author":{"gitId":"-"},"content":" public void addMsqQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":635,"author":{"gitId":"-"},"content":" addNewQuestion(4);"},{"lineNumber":636,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":637,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":638,"author":{"gitId":"-"},"content":" FeedbackMsqQuestionDetails questionDetails \u003d (FeedbackMsqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":639,"author":{"gitId":"-"},"content":" inputMsqDetails(questionNum, questionDetails);"},{"lineNumber":640,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":641,"author":{"gitId":"-"},"content":" }"},{"lineNumber":642,"author":{"gitId":"-"},"content":""},{"lineNumber":643,"author":{"gitId":"dishenggg"},"content":" public void addMsqQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":644,"author":{"gitId":"dishenggg"},"content":" addNewQuestion(4);"},{"lineNumber":645,"author":{"gitId":"dishenggg"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":646,"author":{"gitId":"dishenggg"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":647,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqQuestionDetails questionDetails \u003d (FeedbackMsqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":648,"author":{"gitId":"dishenggg"},"content":" inputMsqDetails(questionNum, questionDetails);"},{"lineNumber":649,"author":{"gitId":"dishenggg"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":650,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":651,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":652,"author":{"gitId":"-"},"content":" public void editMsqQuestion(int questionNum, FeedbackMsqQuestionDetails msqQuestionDetails) {"},{"lineNumber":653,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":654,"author":{"gitId":"-"},"content":" inputMsqDetails(questionNum, msqQuestionDetails);"},{"lineNumber":655,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":656,"author":{"gitId":"-"},"content":" }"},{"lineNumber":657,"author":{"gitId":"-"},"content":""},{"lineNumber":658,"author":{"gitId":"-"},"content":" public void verifyNumScaleQuestionDetails(int questionNum, FeedbackNumericalScaleQuestionDetails questionDetails) {"},{"lineNumber":659,"author":{"gitId":"-"},"content":" assertEquals(getMinNumscaleInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":660,"author":{"gitId":"-"},"content":" Integer.toString(questionDetails.getMinScale()));"},{"lineNumber":661,"author":{"gitId":"-"},"content":" assertEquals(getNumScaleIncrementInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":662,"author":{"gitId":"-"},"content":" getDoubleString(questionDetails.getStep()));"},{"lineNumber":663,"author":{"gitId":"-"},"content":" assertEquals(getMaxNumscaleInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":664,"author":{"gitId":"-"},"content":" Integer.toString(questionDetails.getMaxScale()));"},{"lineNumber":665,"author":{"gitId":"-"},"content":" }"},{"lineNumber":666,"author":{"gitId":"-"},"content":""},{"lineNumber":667,"author":{"gitId":"-"},"content":" public void addNumScaleQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":668,"author":{"gitId":"-"},"content":" addNewQuestion(5);"},{"lineNumber":669,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":670,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":671,"author":{"gitId":"-"},"content":" FeedbackNumericalScaleQuestionDetails questionDetails \u003d"},{"lineNumber":672,"author":{"gitId":"-"},"content":" (FeedbackNumericalScaleQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":673,"author":{"gitId":"-"},"content":" inputNumScaleDetails(questionNum, questionDetails);"},{"lineNumber":674,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":675,"author":{"gitId":"-"},"content":" }"},{"lineNumber":676,"author":{"gitId":"-"},"content":""},{"lineNumber":677,"author":{"gitId":"-"},"content":" public void editNumScaleQuestion(int questionNum, FeedbackNumericalScaleQuestionDetails questionDetails) {"},{"lineNumber":678,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":679,"author":{"gitId":"-"},"content":" inputNumScaleDetails(questionNum, questionDetails);"},{"lineNumber":680,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":681,"author":{"gitId":"-"},"content":" }"},{"lineNumber":682,"author":{"gitId":"-"},"content":""},{"lineNumber":683,"author":{"gitId":"-"},"content":" public void verifyConstSumQuestionDetails(int questionNum, FeedbackConstantSumQuestionDetails questionDetails) {"},{"lineNumber":684,"author":{"gitId":"-"},"content":" if (!questionDetails.isDistributeToRecipients()) {"},{"lineNumber":685,"author":{"gitId":"-"},"content":" verifyOptions(questionNum, questionDetails.getConstSumOptions());"},{"lineNumber":686,"author":{"gitId":"-"},"content":" }"},{"lineNumber":687,"author":{"gitId":"-"},"content":""},{"lineNumber":688,"author":{"gitId":"-"},"content":" if (questionDetails.isPointsPerOption()) {"},{"lineNumber":689,"author":{"gitId":"-"},"content":" assertTrue(getConstSumPerOptionPointsRadioBtn(questionNum).isSelected());"},{"lineNumber":690,"author":{"gitId":"-"},"content":" assertEquals(getConstSumPerOptionPointsInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":691,"author":{"gitId":"-"},"content":" Integer.toString(questionDetails.getPoints()));"},{"lineNumber":692,"author":{"gitId":"-"},"content":" assertFalse(getConstSumTotalPointsRadioBtn(questionNum).isSelected());"},{"lineNumber":693,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":694,"author":{"gitId":"-"},"content":" assertTrue(getConstSumTotalPointsRadioBtn(questionNum).isSelected());"},{"lineNumber":695,"author":{"gitId":"-"},"content":" assertEquals(getConstSumTotalPointsInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":696,"author":{"gitId":"-"},"content":" Integer.toString(questionDetails.getPoints()));"},{"lineNumber":697,"author":{"gitId":"-"},"content":" assertFalse(getConstSumPerOptionPointsRadioBtn(questionNum).isSelected());"},{"lineNumber":698,"author":{"gitId":"-"},"content":" }"},{"lineNumber":699,"author":{"gitId":"-"},"content":""},{"lineNumber":700,"author":{"gitId":"-"},"content":" if (questionDetails.isForceUnevenDistribution()) {"},{"lineNumber":701,"author":{"gitId":"-"},"content":" String distributeFor \u003d questionDetails.getDistributePointsFor();"},{"lineNumber":702,"author":{"gitId":"-"},"content":" assertTrue(getConstSumUnevenDistributionCheckbox(questionNum).isSelected());"},{"lineNumber":703,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(getConstSumUnevenDistributionDropdown(questionNum)).trim(),"},{"lineNumber":704,"author":{"gitId":"-"},"content":" \"All options\".equals(distributeFor) ? \"Every option\" : distributeFor);"},{"lineNumber":705,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":706,"author":{"gitId":"-"},"content":" assertFalse(getConstSumUnevenDistributionCheckbox(questionNum).isSelected());"},{"lineNumber":707,"author":{"gitId":"-"},"content":" }"},{"lineNumber":708,"author":{"gitId":"-"},"content":" }"},{"lineNumber":709,"author":{"gitId":"-"},"content":""},{"lineNumber":710,"author":{"gitId":"-"},"content":" public void addConstSumOptionQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":711,"author":{"gitId":"-"},"content":" addNewQuestion(6);"},{"lineNumber":712,"author":{"gitId":"-"},"content":" addConstSumQuestion(feedbackQuestion);"},{"lineNumber":713,"author":{"gitId":"-"},"content":" }"},{"lineNumber":714,"author":{"gitId":"-"},"content":""},{"lineNumber":715,"author":{"gitId":"-"},"content":" public void addConstSumRecipientQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":716,"author":{"gitId":"-"},"content":" addNewQuestion(7);"},{"lineNumber":717,"author":{"gitId":"-"},"content":" addConstSumQuestion(feedbackQuestion);"},{"lineNumber":718,"author":{"gitId":"-"},"content":" }"},{"lineNumber":719,"author":{"gitId":"-"},"content":""},{"lineNumber":720,"author":{"gitId":"-"},"content":" public void addConstSumQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":721,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":722,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":723,"author":{"gitId":"-"},"content":" FeedbackConstantSumQuestionDetails questionDetails \u003d"},{"lineNumber":724,"author":{"gitId":"-"},"content":" (FeedbackConstantSumQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":725,"author":{"gitId":"-"},"content":" inputConstSumDetails(questionNum, questionDetails);"},{"lineNumber":726,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":727,"author":{"gitId":"-"},"content":" }"},{"lineNumber":728,"author":{"gitId":"-"},"content":""},{"lineNumber":729,"author":{"gitId":"-"},"content":" public void editConstSumQuestion(int questionNum, FeedbackConstantSumQuestionDetails csQuestionDetails) {"},{"lineNumber":730,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":731,"author":{"gitId":"-"},"content":" inputConstSumDetails(questionNum, csQuestionDetails);"},{"lineNumber":732,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":733,"author":{"gitId":"-"},"content":" }"},{"lineNumber":734,"author":{"gitId":"-"},"content":""},{"lineNumber":735,"author":{"gitId":"-"},"content":" public void verifyContributionQuestionDetails(int questionNum, FeedbackContributionQuestionDetails questionDetails) {"},{"lineNumber":736,"author":{"gitId":"-"},"content":" assertEquals(questionDetails.isZeroSum(), getZeroSumCheckbox(questionNum).isSelected());"},{"lineNumber":737,"author":{"gitId":"-"},"content":" assertEquals(questionDetails.isNotSureAllowed(), getAllowNotSureContributionCheckbox(questionNum).isSelected());"},{"lineNumber":738,"author":{"gitId":"-"},"content":" if (questionDetails.isZeroSum()) {"},{"lineNumber":739,"author":{"gitId":"-"},"content":" assertFalse(questionDetails.isNotSureAllowed());"},{"lineNumber":740,"author":{"gitId":"-"},"content":" }"},{"lineNumber":741,"author":{"gitId":"-"},"content":" }"},{"lineNumber":742,"author":{"gitId":"-"},"content":""},{"lineNumber":743,"author":{"gitId":"-"},"content":" public void addContributionQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":744,"author":{"gitId":"-"},"content":" addNewQuestion(8);"},{"lineNumber":745,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":746,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":747,"author":{"gitId":"-"},"content":" FeedbackContributionQuestionDetails questionDetails \u003d"},{"lineNumber":748,"author":{"gitId":"-"},"content":" (FeedbackContributionQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":749,"author":{"gitId":"-"},"content":" inputContributionDetails(questionNum, questionDetails);"},{"lineNumber":750,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":751,"author":{"gitId":"-"},"content":" }"},{"lineNumber":752,"author":{"gitId":"-"},"content":""},{"lineNumber":753,"author":{"gitId":"-"},"content":" public void editContributionQuestion(int questionNum, FeedbackContributionQuestionDetails questionDetails) {"},{"lineNumber":754,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":755,"author":{"gitId":"-"},"content":" inputContributionDetails(questionNum, questionDetails);"},{"lineNumber":756,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":757,"author":{"gitId":"-"},"content":" }"},{"lineNumber":758,"author":{"gitId":"-"},"content":""},{"lineNumber":759,"author":{"gitId":"-"},"content":" public void verifyRubricQuestionDetails(int questionNum, FeedbackRubricQuestionDetails questionDetails) {"},{"lineNumber":760,"author":{"gitId":"-"},"content":" int numChoices \u003d questionDetails.getNumOfRubricChoices();"},{"lineNumber":761,"author":{"gitId":"-"},"content":" List\u003cString\u003e choices \u003d questionDetails.getRubricChoices();"},{"lineNumber":762,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numChoices; i++) {"},{"lineNumber":763,"author":{"gitId":"-"},"content":" assertEquals(choices.get(i), getRubricChoiceInputs(questionNum).get(i).getAttribute(\"value\"));"},{"lineNumber":764,"author":{"gitId":"-"},"content":" }"},{"lineNumber":765,"author":{"gitId":"-"},"content":""},{"lineNumber":766,"author":{"gitId":"-"},"content":" int numSubQn \u003d questionDetails.getNumOfRubricSubQuestions();"},{"lineNumber":767,"author":{"gitId":"-"},"content":" List\u003cString\u003e subQuestions \u003d questionDetails.getRubricSubQuestions();"},{"lineNumber":768,"author":{"gitId":"-"},"content":" List\u003cList\u003cString\u003e\u003e descriptions \u003d questionDetails.getRubricDescriptions();"},{"lineNumber":769,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQn; i++) {"},{"lineNumber":770,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e textAreas \u003d getRubricTextareas(questionNum, i + 2);"},{"lineNumber":771,"author":{"gitId":"-"},"content":" assertEquals(subQuestions.get(i), textAreas.get(0).getAttribute(\"value\"));"},{"lineNumber":772,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c numChoices; j++) {"},{"lineNumber":773,"author":{"gitId":"-"},"content":" assertEquals(descriptions.get(i).get(j), textAreas.get(j + 1).getAttribute(\"value\"));"},{"lineNumber":774,"author":{"gitId":"-"},"content":" }"},{"lineNumber":775,"author":{"gitId":"-"},"content":" }"},{"lineNumber":776,"author":{"gitId":"-"},"content":""},{"lineNumber":777,"author":{"gitId":"-"},"content":" if (questionDetails.isHasAssignedWeights()) {"},{"lineNumber":778,"author":{"gitId":"-"},"content":" assertTrue(getWeightCheckbox(questionNum).isSelected());"},{"lineNumber":779,"author":{"gitId":"-"},"content":" List\u003cList\u003cDouble\u003e\u003e weights \u003d questionDetails.getRubricWeights();"},{"lineNumber":780,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQn; i++) {"},{"lineNumber":781,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rubricWeights \u003d getRubricWeights(questionNum, i + 2);"},{"lineNumber":782,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c numChoices; j++) {"},{"lineNumber":783,"author":{"gitId":"-"},"content":" assertEquals(getDoubleString(weights.get(i).get(j)),"},{"lineNumber":784,"author":{"gitId":"-"},"content":" rubricWeights.get(j).getAttribute(\"value\"));"},{"lineNumber":785,"author":{"gitId":"-"},"content":" }"},{"lineNumber":786,"author":{"gitId":"-"},"content":" }"},{"lineNumber":787,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":788,"author":{"gitId":"-"},"content":" assertFalse(getWeightCheckbox(questionNum).isSelected());"},{"lineNumber":789,"author":{"gitId":"-"},"content":" }"},{"lineNumber":790,"author":{"gitId":"-"},"content":" }"},{"lineNumber":791,"author":{"gitId":"-"},"content":""},{"lineNumber":792,"author":{"gitId":"-"},"content":" public void addRubricQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":793,"author":{"gitId":"-"},"content":" addNewQuestion(9);"},{"lineNumber":794,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":795,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":796,"author":{"gitId":"-"},"content":" FeedbackRubricQuestionDetails questionDetails \u003d"},{"lineNumber":797,"author":{"gitId":"-"},"content":" (FeedbackRubricQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":798,"author":{"gitId":"-"},"content":" inputRubricDetails(questionNum, questionDetails);"},{"lineNumber":799,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":800,"author":{"gitId":"-"},"content":" }"},{"lineNumber":801,"author":{"gitId":"-"},"content":""},{"lineNumber":802,"author":{"gitId":"-"},"content":" public void editRubricQuestion(int questionNum, FeedbackRubricQuestionDetails questionDetails) {"},{"lineNumber":803,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":804,"author":{"gitId":"-"},"content":" inputRubricDetails(questionNum, questionDetails);"},{"lineNumber":805,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":806,"author":{"gitId":"-"},"content":" }"},{"lineNumber":807,"author":{"gitId":"-"},"content":""},{"lineNumber":808,"author":{"gitId":"-"},"content":" public void verifyRankQuestionDetails(int questionNum, FeedbackRankQuestionDetails questionDetails) {"},{"lineNumber":809,"author":{"gitId":"-"},"content":" if (questionDetails instanceof FeedbackRankOptionsQuestionDetails) {"},{"lineNumber":810,"author":{"gitId":"-"},"content":" FeedbackRankOptionsQuestionDetails optionDetails \u003d (FeedbackRankOptionsQuestionDetails) questionDetails;"},{"lineNumber":811,"author":{"gitId":"-"},"content":" verifyOptions(questionNum, optionDetails.getOptions());"},{"lineNumber":812,"author":{"gitId":"-"},"content":" }"},{"lineNumber":813,"author":{"gitId":"-"},"content":" assertEquals(getAllowDuplicateRankCheckbox(questionNum).isSelected(), questionDetails.isAreDuplicatesAllowed());"},{"lineNumber":814,"author":{"gitId":"-"},"content":" verifyMaxOptions(questionNum, questionDetails.getMaxOptionsToBeRanked());"},{"lineNumber":815,"author":{"gitId":"-"},"content":" verifyMinOptions(questionNum, questionDetails.getMinOptionsToBeRanked());"},{"lineNumber":816,"author":{"gitId":"-"},"content":" }"},{"lineNumber":817,"author":{"gitId":"-"},"content":""},{"lineNumber":818,"author":{"gitId":"-"},"content":" public void addRankOptionsQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":819,"author":{"gitId":"-"},"content":" addNewQuestion(10);"},{"lineNumber":820,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":821,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":822,"author":{"gitId":"-"},"content":" FeedbackRankOptionsQuestionDetails questionDetails \u003d"},{"lineNumber":823,"author":{"gitId":"-"},"content":" (FeedbackRankOptionsQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":824,"author":{"gitId":"-"},"content":" inputRankDetails(questionNum, questionDetails);"},{"lineNumber":825,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":826,"author":{"gitId":"-"},"content":" }"},{"lineNumber":827,"author":{"gitId":"-"},"content":""},{"lineNumber":828,"author":{"gitId":"mingyuanc"},"content":" public void addRankOptionsQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":829,"author":{"gitId":"mingyuanc"},"content":" addNewQuestion(10);"},{"lineNumber":830,"author":{"gitId":"mingyuanc"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":831,"author":{"gitId":"mingyuanc"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":832,"author":{"gitId":"mingyuanc"},"content":" FeedbackRankOptionsQuestionDetails questionDetails \u003d"},{"lineNumber":833,"author":{"gitId":"-"},"content":" (FeedbackRankOptionsQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":834,"author":{"gitId":"-"},"content":" inputRankDetails(questionNum, questionDetails);"},{"lineNumber":835,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":836,"author":{"gitId":"-"},"content":" }"},{"lineNumber":837,"author":{"gitId":"-"},"content":""},{"lineNumber":838,"author":{"gitId":"-"},"content":" public void addRankRecipientsQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":839,"author":{"gitId":"-"},"content":" addNewQuestion(11);"},{"lineNumber":840,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":841,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":842,"author":{"gitId":"-"},"content":" FeedbackRankQuestionDetails questionDetails \u003d"},{"lineNumber":843,"author":{"gitId":"-"},"content":" (FeedbackRankQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":844,"author":{"gitId":"-"},"content":" inputRankDetails(questionNum, questionDetails);"},{"lineNumber":845,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":846,"author":{"gitId":"-"},"content":" }"},{"lineNumber":847,"author":{"gitId":"-"},"content":""},{"lineNumber":848,"author":{"gitId":"-"},"content":" public void editRankQuestion(int questionNum, FeedbackRankQuestionDetails questionDetails) {"},{"lineNumber":849,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":850,"author":{"gitId":"-"},"content":" inputRankDetails(questionNum, questionDetails);"},{"lineNumber":851,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":852,"author":{"gitId":"-"},"content":" }"},{"lineNumber":853,"author":{"gitId":"-"},"content":""},{"lineNumber":854,"author":{"gitId":"-"},"content":" private String getCourseId() {"},{"lineNumber":855,"author":{"gitId":"-"},"content":" return courseIdTextBox.getText();"},{"lineNumber":856,"author":{"gitId":"-"},"content":" }"},{"lineNumber":857,"author":{"gitId":"-"},"content":""},{"lineNumber":858,"author":{"gitId":"-"},"content":" private String getCourseName() {"},{"lineNumber":859,"author":{"gitId":"-"},"content":" return courseNameTextBox.getText();"},{"lineNumber":860,"author":{"gitId":"-"},"content":" }"},{"lineNumber":861,"author":{"gitId":"-"},"content":""},{"lineNumber":862,"author":{"gitId":"-"},"content":" private String getTimeZone() {"},{"lineNumber":863,"author":{"gitId":"-"},"content":" return timezoneDropDown.getText();"},{"lineNumber":864,"author":{"gitId":"-"},"content":" }"},{"lineNumber":865,"author":{"gitId":"-"},"content":""},{"lineNumber":866,"author":{"gitId":"-"},"content":" private String getFeedbackSessionName() {"},{"lineNumber":867,"author":{"gitId":"-"},"content":" return sessionNameTextBox.getText();"},{"lineNumber":868,"author":{"gitId":"-"},"content":" }"},{"lineNumber":869,"author":{"gitId":"-"},"content":""},{"lineNumber":870,"author":{"gitId":"-"},"content":" private String getInstructions() {"},{"lineNumber":871,"author":{"gitId":"-"},"content":" return getEditorRichText(instructionsEditor.findElement(By.tagName(\"editor\")));"},{"lineNumber":872,"author":{"gitId":"-"},"content":" }"},{"lineNumber":873,"author":{"gitId":"-"},"content":""},{"lineNumber":874,"author":{"gitId":"-"},"content":" private String getStartDate() {"},{"lineNumber":875,"author":{"gitId":"-"},"content":" return startDateBox.findElement(By.tagName(\"input\")).getAttribute(\"value\");"},{"lineNumber":876,"author":{"gitId":"-"},"content":" }"},{"lineNumber":877,"author":{"gitId":"-"},"content":""},{"lineNumber":878,"author":{"gitId":"-"},"content":" private String getStartTime() {"},{"lineNumber":879,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(startTimeDropdown.findElement(By.tagName(\"select\")));"},{"lineNumber":880,"author":{"gitId":"-"},"content":" }"},{"lineNumber":881,"author":{"gitId":"-"},"content":""},{"lineNumber":882,"author":{"gitId":"-"},"content":" private String getEndDate() {"},{"lineNumber":883,"author":{"gitId":"-"},"content":" return endDateBox.findElement(By.tagName(\"input\")).getAttribute(\"value\");"},{"lineNumber":884,"author":{"gitId":"-"},"content":" }"},{"lineNumber":885,"author":{"gitId":"-"},"content":""},{"lineNumber":886,"author":{"gitId":"-"},"content":" private String getEndTime() {"},{"lineNumber":887,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(endTimeDropdown.findElement(By.tagName(\"select\")));"},{"lineNumber":888,"author":{"gitId":"-"},"content":" }"},{"lineNumber":889,"author":{"gitId":"-"},"content":""},{"lineNumber":890,"author":{"gitId":"-"},"content":" private String getSessionVisibilityDate() {"},{"lineNumber":891,"author":{"gitId":"-"},"content":" return sessionVisibilityDateBox.findElement(By.tagName(\"input\")).getAttribute(\"value\");"},{"lineNumber":892,"author":{"gitId":"-"},"content":" }"},{"lineNumber":893,"author":{"gitId":"-"},"content":""},{"lineNumber":894,"author":{"gitId":"-"},"content":" private String getSessionVisibilityTime() {"},{"lineNumber":895,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(sessionVisibilityTimeDropdown.findElement(By.tagName(\"select\")));"},{"lineNumber":896,"author":{"gitId":"-"},"content":" }"},{"lineNumber":897,"author":{"gitId":"-"},"content":""},{"lineNumber":898,"author":{"gitId":"-"},"content":" private String getResponseVisibilityDate() {"},{"lineNumber":899,"author":{"gitId":"-"},"content":" return responseVisibilityDateBox.findElement(By.tagName(\"input\"))"},{"lineNumber":900,"author":{"gitId":"-"},"content":" .getAttribute(\"value\");"},{"lineNumber":901,"author":{"gitId":"-"},"content":" }"},{"lineNumber":902,"author":{"gitId":"-"},"content":""},{"lineNumber":903,"author":{"gitId":"-"},"content":" private String getResponseVisibilityTime() {"},{"lineNumber":904,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(responseVisibilityTimeDropdown.findElement(By.tagName(\"select\")));"},{"lineNumber":905,"author":{"gitId":"-"},"content":" }"},{"lineNumber":906,"author":{"gitId":"-"},"content":""},{"lineNumber":907,"author":{"gitId":"-"},"content":" private String getGracePeriod() {"},{"lineNumber":908,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(gracePeriodDropdown);"},{"lineNumber":909,"author":{"gitId":"-"},"content":" }"},{"lineNumber":910,"author":{"gitId":"-"},"content":""},{"lineNumber":911,"author":{"gitId":"-"},"content":" private String getSubmissionStatus() {"},{"lineNumber":912,"author":{"gitId":"-"},"content":" return submissionStatusTextBox.getText();"},{"lineNumber":913,"author":{"gitId":"-"},"content":" }"},{"lineNumber":914,"author":{"gitId":"-"},"content":""},{"lineNumber":915,"author":{"gitId":"-"},"content":" private String getPublishedStatus() {"},{"lineNumber":916,"author":{"gitId":"-"},"content":" return publishStatusTextBox.getText();"},{"lineNumber":917,"author":{"gitId":"-"},"content":" }"},{"lineNumber":918,"author":{"gitId":"-"},"content":""},{"lineNumber":919,"author":{"gitId":"-"},"content":" private String getDateString(Instant instant, String timeZone) {"},{"lineNumber":920,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"EE, dd MMM, yyyy\");"},{"lineNumber":921,"author":{"gitId":"-"},"content":" }"},{"lineNumber":922,"author":{"gitId":"-"},"content":""},{"lineNumber":923,"author":{"gitId":"-"},"content":" private String getTimeString(Instant instant, String timeZone) {"},{"lineNumber":924,"author":{"gitId":"-"},"content":" ZonedDateTime dateTime \u003d instant.atZone(ZoneId.of(timeZone));"},{"lineNumber":925,"author":{"gitId":"-"},"content":" if (dateTime.getHour() \u003d\u003d 0 \u0026\u0026 dateTime.getMinute() \u003d\u003d 0) {"},{"lineNumber":926,"author":{"gitId":"-"},"content":" return \"23:59H\";"},{"lineNumber":927,"author":{"gitId":"-"},"content":" }"},{"lineNumber":928,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"HH:00\") + \"H\";"},{"lineNumber":929,"author":{"gitId":"-"},"content":" }"},{"lineNumber":930,"author":{"gitId":"-"},"content":""},{"lineNumber":931,"author":{"gitId":"-"},"content":" private void setInstructions(String newInstructions) {"},{"lineNumber":932,"author":{"gitId":"-"},"content":" writeToRichTextEditor(instructionsEditor.findElement(By.tagName(\"editor\")), newInstructions);"},{"lineNumber":933,"author":{"gitId":"-"},"content":" }"},{"lineNumber":934,"author":{"gitId":"-"},"content":""},{"lineNumber":935,"author":{"gitId":"-"},"content":" private void setSessionStartDateTime(Instant startInstant, String timeZone) {"},{"lineNumber":936,"author":{"gitId":"-"},"content":" setDateTime(startDateBox, startTimeDropdown, startInstant, timeZone);"},{"lineNumber":937,"author":{"gitId":"-"},"content":" }"},{"lineNumber":938,"author":{"gitId":"-"},"content":""},{"lineNumber":939,"author":{"gitId":"-"},"content":" private void setSessionEndDateTime(Instant endInstant, String timeZone) {"},{"lineNumber":940,"author":{"gitId":"-"},"content":" setDateTime(endDateBox, endTimeDropdown, endInstant, timeZone);"},{"lineNumber":941,"author":{"gitId":"-"},"content":" }"},{"lineNumber":942,"author":{"gitId":"-"},"content":""},{"lineNumber":943,"author":{"gitId":"-"},"content":" private void setVisibilityDateTime(Instant startInstant, String timeZone) {"},{"lineNumber":944,"author":{"gitId":"-"},"content":" setDateTime(sessionVisibilityDateBox, sessionVisibilityTimeDropdown, startInstant, timeZone);"},{"lineNumber":945,"author":{"gitId":"-"},"content":" }"},{"lineNumber":946,"author":{"gitId":"-"},"content":""},{"lineNumber":947,"author":{"gitId":"-"},"content":" private void setResponseDateTime(Instant endInstant, String timeZone) {"},{"lineNumber":948,"author":{"gitId":"-"},"content":" setDateTime(responseVisibilityDateBox, responseVisibilityTimeDropdown, endInstant, timeZone);"},{"lineNumber":949,"author":{"gitId":"-"},"content":" }"},{"lineNumber":950,"author":{"gitId":"-"},"content":""},{"lineNumber":951,"author":{"gitId":"-"},"content":" private void setDateTime(WebElement dateBox, WebElement timeBox, Instant startInstant, String timeZone) {"},{"lineNumber":952,"author":{"gitId":"-"},"content":" fillDatePicker(dateBox, startInstant, timeZone);"},{"lineNumber":953,"author":{"gitId":"-"},"content":""},{"lineNumber":954,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(timeBox.findElement(By.tagName(\"select\")), getTimeString(startInstant, timeZone));"},{"lineNumber":955,"author":{"gitId":"-"},"content":" }"},{"lineNumber":956,"author":{"gitId":"-"},"content":""},{"lineNumber":957,"author":{"gitId":"-"},"content":" private void selectGracePeriod(long gracePeriodMinutes) {"},{"lineNumber":958,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(gracePeriodDropdown, gracePeriodMinutes + \" min\");"},{"lineNumber":959,"author":{"gitId":"-"},"content":" }"},{"lineNumber":960,"author":{"gitId":"-"},"content":""},{"lineNumber":961,"author":{"gitId":"-"},"content":" private void setVisibilitySettings(FeedbackSessionAttributes newFeedbackSession) {"},{"lineNumber":962,"author":{"gitId":"-"},"content":" showVisibilitySettings();"},{"lineNumber":963,"author":{"gitId":"-"},"content":""},{"lineNumber":964,"author":{"gitId":"-"},"content":" setSessionVisibilitySettings(newFeedbackSession);"},{"lineNumber":965,"author":{"gitId":"-"},"content":" setResponseVisibilitySettings(newFeedbackSession);"},{"lineNumber":966,"author":{"gitId":"-"},"content":" }"},{"lineNumber":967,"author":{"gitId":"-"},"content":""},{"lineNumber":968,"author":{"gitId":"-"},"content":" private void setSessionVisibilitySettings(FeedbackSessionAttributes newFeedbackSession) {"},{"lineNumber":969,"author":{"gitId":"-"},"content":" Instant sessionDateTime \u003d newFeedbackSession.getSessionVisibleFromTime();"},{"lineNumber":970,"author":{"gitId":"-"},"content":" if (sessionDateTime.equals(Const.TIME_REPRESENTS_FOLLOW_OPENING)) {"},{"lineNumber":971,"author":{"gitId":"-"},"content":" click(openSessionVisibleTimeButton);"},{"lineNumber":972,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":973,"author":{"gitId":"-"},"content":" click(customSessionVisibleTimeButton);"},{"lineNumber":974,"author":{"gitId":"-"},"content":" setVisibilityDateTime(sessionDateTime, newFeedbackSession.getTimeZone());"},{"lineNumber":975,"author":{"gitId":"-"},"content":" }"},{"lineNumber":976,"author":{"gitId":"-"},"content":" }"},{"lineNumber":977,"author":{"gitId":"-"},"content":""},{"lineNumber":978,"author":{"gitId":"-"},"content":" private void setResponseVisibilitySettings(FeedbackSessionAttributes newFeedbackSession) {"},{"lineNumber":979,"author":{"gitId":"-"},"content":" Instant responseDateTime \u003d newFeedbackSession.getResultsVisibleFromTime();"},{"lineNumber":980,"author":{"gitId":"-"},"content":" if (responseDateTime.equals(Const.TIME_REPRESENTS_FOLLOW_VISIBLE)) {"},{"lineNumber":981,"author":{"gitId":"-"},"content":" click(immediateResponseVisibleTimeButton);"},{"lineNumber":982,"author":{"gitId":"-"},"content":" } else if (responseDateTime.equals(Const.TIME_REPRESENTS_LATER)) {"},{"lineNumber":983,"author":{"gitId":"-"},"content":" click(manualResponseVisibleTimeButton);"},{"lineNumber":984,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":985,"author":{"gitId":"-"},"content":" click(customResponseVisibleTimeButton);"},{"lineNumber":986,"author":{"gitId":"-"},"content":" setResponseDateTime(responseDateTime, newFeedbackSession.getTimeZone());"},{"lineNumber":987,"author":{"gitId":"-"},"content":" }"},{"lineNumber":988,"author":{"gitId":"-"},"content":" }"},{"lineNumber":989,"author":{"gitId":"-"},"content":""},{"lineNumber":990,"author":{"gitId":"-"},"content":" private void setEmailSettings(FeedbackSessionAttributes newFeedbackSessionDetails) {"},{"lineNumber":991,"author":{"gitId":"-"},"content":" showEmailSettings();"},{"lineNumber":992,"author":{"gitId":"-"},"content":" if (newFeedbackSessionDetails.isOpeningEmailEnabled() !\u003d openingSessionEmailCheckbox.isSelected()) {"},{"lineNumber":993,"author":{"gitId":"-"},"content":" click(openingSessionEmailCheckbox);"},{"lineNumber":994,"author":{"gitId":"-"},"content":" }"},{"lineNumber":995,"author":{"gitId":"-"},"content":" if (newFeedbackSessionDetails.isClosingEmailEnabled() !\u003d closingSessionEmailCheckbox.isSelected()) {"},{"lineNumber":996,"author":{"gitId":"-"},"content":" click(closingSessionEmailCheckbox);"},{"lineNumber":997,"author":{"gitId":"-"},"content":" }"},{"lineNumber":998,"author":{"gitId":"-"},"content":" if (newFeedbackSessionDetails.isPublishedEmailEnabled() !\u003d publishedSessionEmailCheckbox.isSelected()) {"},{"lineNumber":999,"author":{"gitId":"-"},"content":" click(publishedSessionEmailCheckbox);"},{"lineNumber":1000,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1001,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1002,"author":{"gitId":"-"},"content":""},{"lineNumber":1003,"author":{"gitId":"-"},"content":" private void showVisibilitySettings() {"},{"lineNumber":1004,"author":{"gitId":"-"},"content":" if (isElementPresent(By.id(\"btn-change-visibility\"))) {"},{"lineNumber":1005,"author":{"gitId":"-"},"content":" click(changeVisibilityButton);"},{"lineNumber":1006,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1007,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1008,"author":{"gitId":"-"},"content":""},{"lineNumber":1009,"author":{"gitId":"-"},"content":" private void showEmailSettings() {"},{"lineNumber":1010,"author":{"gitId":"-"},"content":" if (isElementPresent(By.id(\"btn-change-email\"))) {"},{"lineNumber":1011,"author":{"gitId":"-"},"content":" click(changeEmailButton);"},{"lineNumber":1012,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1013,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1014,"author":{"gitId":"-"},"content":""},{"lineNumber":1015,"author":{"gitId":"-"},"content":" private int getNumQuestions() {"},{"lineNumber":1016,"author":{"gitId":"-"},"content":" return browser.driver.findElements(By.tagName(\"tm-question-edit-form\")).size();"},{"lineNumber":1017,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1018,"author":{"gitId":"-"},"content":""},{"lineNumber":1019,"author":{"gitId":"-"},"content":" private WebElement getQuestionForm(int questionNum) {"},{"lineNumber":1020,"author":{"gitId":"-"},"content":" return browser.driver.findElements(By.tagName(\"tm-question-edit-form\")).get(questionNum - 1);"},{"lineNumber":1021,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1022,"author":{"gitId":"-"},"content":""},{"lineNumber":1023,"author":{"gitId":"-"},"content":" private FeedbackQuestionType getQuestionType(int questionNum) {"},{"lineNumber":1024,"author":{"gitId":"-"},"content":" String questionType \u003d getQuestionForm(questionNum).findElement(By.id(\"question-type\")).getText().trim();"},{"lineNumber":1025,"author":{"gitId":"-"},"content":""},{"lineNumber":1026,"author":{"gitId":"-"},"content":" switch (questionType) {"},{"lineNumber":1027,"author":{"gitId":"-"},"content":" case \"Essay question\":"},{"lineNumber":1028,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.TEXT;"},{"lineNumber":1029,"author":{"gitId":"-"},"content":" case \"Multiple-Choice (single answer) question\":"},{"lineNumber":1030,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.MCQ;"},{"lineNumber":1031,"author":{"gitId":"-"},"content":" case \"Multiple-choice (multiple answers) question\":"},{"lineNumber":1032,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.MSQ;"},{"lineNumber":1033,"author":{"gitId":"-"},"content":" case \"Numerical Scale Question\":"},{"lineNumber":1034,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.NUMSCALE;"},{"lineNumber":1035,"author":{"gitId":"-"},"content":" case \"Distribute points (among options) question\":"},{"lineNumber":1036,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.CONSTSUM_OPTIONS;"},{"lineNumber":1037,"author":{"gitId":"-"},"content":" case \"Distribute points (among recipients) question\":"},{"lineNumber":1038,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.CONSTSUM_RECIPIENTS;"},{"lineNumber":1039,"author":{"gitId":"-"},"content":" case \"Team contribution question\":"},{"lineNumber":1040,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.CONTRIB;"},{"lineNumber":1041,"author":{"gitId":"-"},"content":" case \"Rubric question\":"},{"lineNumber":1042,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.RUBRIC;"},{"lineNumber":1043,"author":{"gitId":"-"},"content":" case \"Rank (options) question\":"},{"lineNumber":1044,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.RANK_OPTIONS;"},{"lineNumber":1045,"author":{"gitId":"-"},"content":" case \"Rank (recipients) question\":"},{"lineNumber":1046,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.RANK_RECIPIENTS;"},{"lineNumber":1047,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":1048,"author":{"gitId":"-"},"content":" throw new IllegalArgumentException(\"Unknown FeedbackQuestionType\");"},{"lineNumber":1049,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1050,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1051,"author":{"gitId":"-"},"content":""},{"lineNumber":1052,"author":{"gitId":"-"},"content":" private int getQuestionNumber(int questionNum) {"},{"lineNumber":1053,"author":{"gitId":"-"},"content":" return Integer.parseInt(getQuestionForm(questionNum).findElement(By.id(\"question-number\")).getText());"},{"lineNumber":1054,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1055,"author":{"gitId":"-"},"content":""},{"lineNumber":1056,"author":{"gitId":"-"},"content":" private String getQuestionBrief(int questionNum) {"},{"lineNumber":1057,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"question-brief\")).getAttribute(\"value\");"},{"lineNumber":1058,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1059,"author":{"gitId":"-"},"content":""},{"lineNumber":1060,"author":{"gitId":"-"},"content":" private String getQuestionDescription(int questionNum) {"},{"lineNumber":1061,"author":{"gitId":"-"},"content":" WebElement editor \u003d waitForElementPresence(By.cssSelector(\"#question-form-\" + questionNum + \" editor\"));"},{"lineNumber":1062,"author":{"gitId":"-"},"content":" return getEditorRichText(editor);"},{"lineNumber":1063,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1064,"author":{"gitId":"-"},"content":""},{"lineNumber":1065,"author":{"gitId":"-"},"content":" private String getFeedbackGiver(int questionNum) {"},{"lineNumber":1066,"author":{"gitId":"-"},"content":" String feedbackPath \u003d getFeedbackPath(questionNum);"},{"lineNumber":1067,"author":{"gitId":"-"},"content":" if (CUSTOM_FEEDBACK_PATH_OPTION.equals(feedbackPath)) {"},{"lineNumber":1068,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(getQuestionForm(questionNum)"},{"lineNumber":1069,"author":{"gitId":"-"},"content":" .findElement(By.tagName(\"tm-feedback-path-panel\"))"},{"lineNumber":1070,"author":{"gitId":"-"},"content":" .findElement(By.id(\"giver-type\")));"},{"lineNumber":1071,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1072,"author":{"gitId":"-"},"content":" return feedbackPath.split(FEEDBACK_PATH_SEPARATOR)[0];"},{"lineNumber":1073,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1074,"author":{"gitId":"-"},"content":""},{"lineNumber":1075,"author":{"gitId":"-"},"content":" private String getFeedbackReceiver(int questionNum) {"},{"lineNumber":1076,"author":{"gitId":"-"},"content":" String feedbackPath \u003d getFeedbackPath(questionNum);"},{"lineNumber":1077,"author":{"gitId":"-"},"content":" if (CUSTOM_FEEDBACK_PATH_OPTION.equals(feedbackPath)) {"},{"lineNumber":1078,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(getQuestionForm(questionNum)"},{"lineNumber":1079,"author":{"gitId":"-"},"content":" .findElement(By.tagName(\"tm-feedback-path-panel\"))"},{"lineNumber":1080,"author":{"gitId":"-"},"content":" .findElement(By.id(\"receiver-type\")));"},{"lineNumber":1081,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1082,"author":{"gitId":"-"},"content":" return feedbackPath.split(FEEDBACK_PATH_SEPARATOR)[1];"},{"lineNumber":1083,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1084,"author":{"gitId":"-"},"content":""},{"lineNumber":1085,"author":{"gitId":"-"},"content":" private String getFeedbackPath(int questionNum) {"},{"lineNumber":1086,"author":{"gitId":"-"},"content":" WebElement feedbackPathPanel \u003d getQuestionForm(questionNum).findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":1087,"author":{"gitId":"-"},"content":" return feedbackPathPanel.findElement(By.cssSelector(\"#btn-feedback-path span\")).getText();"},{"lineNumber":1088,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1089,"author":{"gitId":"-"},"content":""},{"lineNumber":1090,"author":{"gitId":"-"},"content":" private void setQuestionBrief(int questionNum, String newBrief) {"},{"lineNumber":1091,"author":{"gitId":"-"},"content":" fillTextBox(getQuestionForm(questionNum).findElement(By.id(\"question-brief\")), newBrief);"},{"lineNumber":1092,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1093,"author":{"gitId":"-"},"content":""},{"lineNumber":1094,"author":{"gitId":"-"},"content":" private void setQuestionDescription(int questionNum, String newDescription) {"},{"lineNumber":1095,"author":{"gitId":"-"},"content":" WebElement editor \u003d waitForElementPresence(By.cssSelector(\"#question-form-\" + questionNum + \" editor\"));"},{"lineNumber":1096,"author":{"gitId":"-"},"content":" writeToRichTextEditor(editor, newDescription);"},{"lineNumber":1097,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1098,"author":{"gitId":"-"},"content":""},{"lineNumber":1099,"author":{"gitId":"-"},"content":" private void setFeedbackPath(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":1100,"author":{"gitId":"-"},"content":" FeedbackParticipantType newGiver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":1101,"author":{"gitId":"-"},"content":" FeedbackParticipantType newRecipient \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":1102,"author":{"gitId":"-"},"content":" String feedbackPath \u003d getFeedbackPath(questionNum);"},{"lineNumber":1103,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum).findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":1104,"author":{"gitId":"-"},"content":" if (!CUSTOM_FEEDBACK_PATH_OPTION.equals(feedbackPath)) {"},{"lineNumber":1105,"author":{"gitId":"-"},"content":" selectFeedbackPathDropdownOption(questionNum, CUSTOM_FEEDBACK_PATH_OPTION + \"...\");"},{"lineNumber":1106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1107,"author":{"gitId":"-"},"content":" // Set to type STUDENT first to adjust NumberOfEntitiesToGiveFeedbackTo"},{"lineNumber":1108,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"giver-type\")),"},{"lineNumber":1109,"author":{"gitId":"-"},"content":" getDisplayGiverName(FeedbackParticipantType.STUDENTS));"},{"lineNumber":1110,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"receiver-type\")),"},{"lineNumber":1111,"author":{"gitId":"-"},"content":" getDisplayRecipientName(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF));"},{"lineNumber":1112,"author":{"gitId":"-"},"content":" if (feedbackQuestion.getNumberOfEntitiesToGiveFeedbackTo() \u003d\u003d Const.MAX_POSSIBLE_RECIPIENTS) {"},{"lineNumber":1113,"author":{"gitId":"-"},"content":" click(questionForm.findElement(By.id(\"unlimited-recipients\")));"},{"lineNumber":1114,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1115,"author":{"gitId":"-"},"content":" click(questionForm.findElement(By.id(\"custom-recipients\")));"},{"lineNumber":1116,"author":{"gitId":"-"},"content":" fillTextBox(questionForm.findElement(By.id(\"custom-recipients-number\")),"},{"lineNumber":1117,"author":{"gitId":"-"},"content":" Integer.toString(feedbackQuestion.getNumberOfEntitiesToGiveFeedbackTo()));"},{"lineNumber":1118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1119,"author":{"gitId":"-"},"content":""},{"lineNumber":1120,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"giver-type\")), getDisplayGiverName(newGiver));"},{"lineNumber":1121,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"receiver-type\")),"},{"lineNumber":1122,"author":{"gitId":"-"},"content":" getDisplayRecipientName(newRecipient));"},{"lineNumber":1123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1124,"author":{"gitId":"-"},"content":""},{"lineNumber":1125,"author":{"gitId":"-"},"content":" private void setFeedbackPath(int questionNum, FeedbackQuestion feedbackQuestion) {"},{"lineNumber":1126,"author":{"gitId":"-"},"content":" FeedbackParticipantType newGiver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":1127,"author":{"gitId":"-"},"content":" FeedbackParticipantType newRecipient \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":1128,"author":{"gitId":"-"},"content":" String feedbackPath \u003d getFeedbackPath(questionNum);"},{"lineNumber":1129,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum).findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":1130,"author":{"gitId":"-"},"content":" if (!CUSTOM_FEEDBACK_PATH_OPTION.equals(feedbackPath)) {"},{"lineNumber":1131,"author":{"gitId":"-"},"content":" selectFeedbackPathDropdownOption(questionNum, CUSTOM_FEEDBACK_PATH_OPTION + \"...\");"},{"lineNumber":1132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1133,"author":{"gitId":"-"},"content":" // Set to type STUDENT first to adjust NumberOfEntitiesToGiveFeedbackTo"},{"lineNumber":1134,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"giver-type\")),"},{"lineNumber":1135,"author":{"gitId":"-"},"content":" getDisplayGiverName(FeedbackParticipantType.STUDENTS));"},{"lineNumber":1136,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"receiver-type\")),"},{"lineNumber":1137,"author":{"gitId":"-"},"content":" getDisplayRecipientName(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF));"},{"lineNumber":1138,"author":{"gitId":"-"},"content":" if (feedbackQuestion.getNumOfEntitiesToGiveFeedbackTo() \u003d\u003d Const.MAX_POSSIBLE_RECIPIENTS) {"},{"lineNumber":1139,"author":{"gitId":"-"},"content":" click(questionForm.findElement(By.id(\"unlimited-recipients\")));"},{"lineNumber":1140,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1141,"author":{"gitId":"-"},"content":" click(questionForm.findElement(By.id(\"custom-recipients\")));"},{"lineNumber":1142,"author":{"gitId":"-"},"content":" fillTextBox(questionForm.findElement(By.id(\"custom-recipients-number\")),"},{"lineNumber":1143,"author":{"gitId":"-"},"content":" Integer.toString(feedbackQuestion.getNumOfEntitiesToGiveFeedbackTo()));"},{"lineNumber":1144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1145,"author":{"gitId":"-"},"content":""},{"lineNumber":1146,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"giver-type\")), getDisplayGiverName(newGiver));"},{"lineNumber":1147,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"receiver-type\")),"},{"lineNumber":1148,"author":{"gitId":"-"},"content":" getDisplayRecipientName(newRecipient));"},{"lineNumber":1149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1150,"author":{"gitId":"-"},"content":""},{"lineNumber":1151,"author":{"gitId":"-"},"content":" private void selectFeedbackPathDropdownOption(int questionNum, String text) {"},{"lineNumber":1152,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":1153,"author":{"gitId":"-"},"content":" WebElement feedbackPathPanel \u003d questionForm.findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":1154,"author":{"gitId":"-"},"content":" click(feedbackPathPanel.findElement(By.id(\"btn-feedback-path\")));"},{"lineNumber":1155,"author":{"gitId":"-"},"content":" WebElement dropdown \u003d feedbackPathPanel.findElement(By.id(\"feedback-path-dropdown\"));"},{"lineNumber":1156,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e options \u003d dropdown.findElements(By.className(\"dropdown-button\"));"},{"lineNumber":1157,"author":{"gitId":"-"},"content":" for (WebElement option : options) {"},{"lineNumber":1158,"author":{"gitId":"-"},"content":" if (option.getText().equals(text)) {"},{"lineNumber":1159,"author":{"gitId":"-"},"content":" click(option);"},{"lineNumber":1160,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":1161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1164,"author":{"gitId":"-"},"content":""},{"lineNumber":1165,"author":{"gitId":"-"},"content":" private void clickEditQuestionButton(int questionNum) {"},{"lineNumber":1166,"author":{"gitId":"-"},"content":" click(getQuestionForm(questionNum).findElement(By.id(\"btn-edit-question\")));"},{"lineNumber":1167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1168,"author":{"gitId":"-"},"content":""},{"lineNumber":1169,"author":{"gitId":"-"},"content":" private void clickSaveQuestionButton(int questionNum) {"},{"lineNumber":1170,"author":{"gitId":"-"},"content":" WebElement saveButton \u003d getQuestionForm(questionNum).findElement(By.id(\"btn-save-question\"));"},{"lineNumber":1171,"author":{"gitId":"-"},"content":" click(saveButton);"},{"lineNumber":1172,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":1173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1174,"author":{"gitId":"-"},"content":""},{"lineNumber":1175,"author":{"gitId":"-"},"content":" private void setQuestionVisibility(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":1176,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":1177,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":1178,"author":{"gitId":"-"},"content":" String visibility \u003d visibilityPanel.findElement(By.cssSelector(\"#btn-question-visibility span\")).getText();"},{"lineNumber":1179,"author":{"gitId":"-"},"content":" if (!CUSTOM_VISIBILITY_OPTION.equals(visibility)) {"},{"lineNumber":1180,"author":{"gitId":"-"},"content":" selectVisibilityDropdownOption(questionNum, CUSTOM_VISIBILITY_OPTION + \"...\");"},{"lineNumber":1181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1182,"author":{"gitId":"-"},"content":""},{"lineNumber":1183,"author":{"gitId":"-"},"content":" FeedbackParticipantType giver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":1184,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":1185,"author":{"gitId":"-"},"content":" WebElement customVisibilityTable \u003d visibilityPanel.findElement(By.id(\"custom-visibility-table\"));"},{"lineNumber":1186,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowResponsesTo(), 1);"},{"lineNumber":1187,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowGiverNameTo(), 2);"},{"lineNumber":1188,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowRecipientNameTo(), 3);"},{"lineNumber":1189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1190,"author":{"gitId":"-"},"content":""},{"lineNumber":1191,"author":{"gitId":"-"},"content":" private void setQuestionVisibility(int questionNum, FeedbackQuestion feedbackQuestion) {"},{"lineNumber":1192,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":1193,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":1194,"author":{"gitId":"-"},"content":" String visibility \u003d visibilityPanel.findElement(By.cssSelector(\"#btn-question-visibility span\")).getText();"},{"lineNumber":1195,"author":{"gitId":"-"},"content":" if (!CUSTOM_VISIBILITY_OPTION.equals(visibility)) {"},{"lineNumber":1196,"author":{"gitId":"-"},"content":" selectVisibilityDropdownOption(questionNum, CUSTOM_VISIBILITY_OPTION + \"...\");"},{"lineNumber":1197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1198,"author":{"gitId":"-"},"content":""},{"lineNumber":1199,"author":{"gitId":"-"},"content":" FeedbackParticipantType giver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":1200,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":1201,"author":{"gitId":"-"},"content":" WebElement customVisibilityTable \u003d visibilityPanel.findElement(By.id(\"custom-visibility-table\"));"},{"lineNumber":1202,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowResponsesTo(), 1);"},{"lineNumber":1203,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowGiverNameTo(), 2);"},{"lineNumber":1204,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowRecipientNameTo(), 3);"},{"lineNumber":1205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1206,"author":{"gitId":"-"},"content":""},{"lineNumber":1207,"author":{"gitId":"-"},"content":" private void selectVisibilityBoxes(WebElement table, FeedbackParticipantType giver,"},{"lineNumber":1208,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver, List\u003cFeedbackParticipantType\u003e participants,"},{"lineNumber":1209,"author":{"gitId":"-"},"content":" int colNum) {"},{"lineNumber":1210,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e possibleTypes \u003d new ArrayList\u003c\u003e(Arrays.asList(FeedbackParticipantType.RECEIVER,"},{"lineNumber":1211,"author":{"gitId":"-"},"content":" FeedbackParticipantType.OWN_TEAM_MEMBERS, FeedbackParticipantType.RECEIVER_TEAM_MEMBERS,"},{"lineNumber":1212,"author":{"gitId":"-"},"content":" FeedbackParticipantType.STUDENTS, FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":1213,"author":{"gitId":"-"},"content":" if (!giver.equals(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":1214,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.OWN_TEAM_MEMBERS);"},{"lineNumber":1215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1216,"author":{"gitId":"-"},"content":" if (!receiver.equals(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF)) {"},{"lineNumber":1217,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":1218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1219,"author":{"gitId":"-"},"content":" if (receiver.equals(FeedbackParticipantType.NONE)"},{"lineNumber":1220,"author":{"gitId":"-"},"content":" || receiver.equals(FeedbackParticipantType.SELF)"},{"lineNumber":1221,"author":{"gitId":"-"},"content":" || receiver.equals(FeedbackParticipantType.OWN_TEAM)) {"},{"lineNumber":1222,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER);"},{"lineNumber":1223,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":1224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1225,"author":{"gitId":"-"},"content":""},{"lineNumber":1226,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElements(By.tagName(\"tr\"));"},{"lineNumber":1227,"author":{"gitId":"-"},"content":" int index \u003d colNum - 1;"},{"lineNumber":1228,"author":{"gitId":"-"},"content":" for (FeedbackParticipantType participant : participants) {"},{"lineNumber":1229,"author":{"gitId":"-"},"content":" markOptionAsSelected(rows.get(possibleTypes.indexOf(participant)).findElements(By.tagName(\"input\")).get(index));"},{"lineNumber":1230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1232,"author":{"gitId":"-"},"content":""},{"lineNumber":1233,"author":{"gitId":"-"},"content":" private void selectVisibilityDropdownOption(int questionNum, String text) {"},{"lineNumber":1234,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":1235,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":1236,"author":{"gitId":"-"},"content":" click(visibilityPanel.findElement(By.id(\"btn-question-visibility\")));"},{"lineNumber":1237,"author":{"gitId":"-"},"content":" WebElement dropdown \u003d visibilityPanel.findElement(By.id(\"question-visibility-dropdown\"));"},{"lineNumber":1238,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e options \u003d dropdown.findElements(By.className(\"dropdown-button\"));"},{"lineNumber":1239,"author":{"gitId":"-"},"content":" for (WebElement option : options) {"},{"lineNumber":1240,"author":{"gitId":"-"},"content":" if (option.getText().equals(text)) {"},{"lineNumber":1241,"author":{"gitId":"-"},"content":" click(option);"},{"lineNumber":1242,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":1243,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1246,"author":{"gitId":"-"},"content":""},{"lineNumber":1247,"author":{"gitId":"-"},"content":" private void clickAndWaitForNewQuestion(WebElement button) {"},{"lineNumber":1248,"author":{"gitId":"-"},"content":" int newQuestionNum \u003d getNumQuestions() + 1;"},{"lineNumber":1249,"author":{"gitId":"-"},"content":" click(button);"},{"lineNumber":1250,"author":{"gitId":"-"},"content":" waitForElementPresence(By.id(\"question-form-\" + newQuestionNum));"},{"lineNumber":1251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1252,"author":{"gitId":"-"},"content":""},{"lineNumber":1253,"author":{"gitId":"-"},"content":" private void addNewQuestion(int optionNumber) {"},{"lineNumber":1254,"author":{"gitId":"-"},"content":" click(addNewQuestionButton);"},{"lineNumber":1255,"author":{"gitId":"-"},"content":" WebElement newQuestionDropdown \u003d waitForElementPresence(By.id(\"new-question-dropdown\"));"},{"lineNumber":1256,"author":{"gitId":"-"},"content":" WebElement optionButton \u003d newQuestionDropdown.findElements(By.tagName(\"button\")).get(optionNumber - 1);"},{"lineNumber":1257,"author":{"gitId":"-"},"content":" if (optionNumber \u003d\u003d 1) {"},{"lineNumber":1258,"author":{"gitId":"-"},"content":" click(optionButton);"},{"lineNumber":1259,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1260,"author":{"gitId":"-"},"content":" clickAndWaitForNewQuestion(optionButton);"},{"lineNumber":1261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1262,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1263,"author":{"gitId":"-"},"content":""},{"lineNumber":1264,"author":{"gitId":"-"},"content":" private void clickSaveNewQuestionButton() {"},{"lineNumber":1265,"author":{"gitId":"-"},"content":" WebElement saveButton \u003d browser.driver.findElement(By.id(\"btn-save-new\"));"},{"lineNumber":1266,"author":{"gitId":"-"},"content":" click(saveButton);"},{"lineNumber":1267,"author":{"gitId":"-"},"content":" waitForElementStaleness(saveButton);"},{"lineNumber":1268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1269,"author":{"gitId":"-"},"content":""},{"lineNumber":1270,"author":{"gitId":"-"},"content":" private WebElement getRecommendedTextLengthField(int questionNum) {"},{"lineNumber":1271,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum)"},{"lineNumber":1272,"author":{"gitId":"-"},"content":" .findElement(By.tagName(\"tm-text-question-edit-details-form\"))"},{"lineNumber":1273,"author":{"gitId":"-"},"content":" .findElement(By.id(\"recommended-length\"));"},{"lineNumber":1274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1275,"author":{"gitId":"-"},"content":""},{"lineNumber":1276,"author":{"gitId":"-"},"content":" private WebElement getGenerateOptionsCheckbox(int questionNum) {"},{"lineNumber":1277,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"generate-checkbox\"));"},{"lineNumber":1278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1279,"author":{"gitId":"-"},"content":""},{"lineNumber":1280,"author":{"gitId":"-"},"content":" private WebElement getGenerateOptionsDropdown(int questionNum) {"},{"lineNumber":1281,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"generate-dropdown\"));"},{"lineNumber":1282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1283,"author":{"gitId":"-"},"content":""},{"lineNumber":1284,"author":{"gitId":"-"},"content":" private WebElement getWeightCheckbox(int questionNum) {"},{"lineNumber":1285,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"weights-checkbox\"));"},{"lineNumber":1286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1287,"author":{"gitId":"-"},"content":""},{"lineNumber":1288,"author":{"gitId":"-"},"content":" private WebElement getOtherOptionCheckbox(int questionNum) {"},{"lineNumber":1289,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"other-checkbox\"));"},{"lineNumber":1290,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1291,"author":{"gitId":"-"},"content":""},{"lineNumber":1292,"author":{"gitId":"-"},"content":" private WebElement getQuestionDropdownCheckbox(int questionNum) {"},{"lineNumber":1293,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"make-question-dropdown\"));"},{"lineNumber":1294,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1295,"author":{"gitId":"-"},"content":""},{"lineNumber":1296,"author":{"gitId":"-"},"content":" private String getGeneratedOptionString(FeedbackParticipantType type) {"},{"lineNumber":1297,"author":{"gitId":"-"},"content":" switch (type) {"},{"lineNumber":1298,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":1299,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":1300,"author":{"gitId":"-"},"content":" return \"students\";"},{"lineNumber":1301,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":1302,"author":{"gitId":"-"},"content":" return \"students (excluding self)\";"},{"lineNumber":1303,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":1304,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":1305,"author":{"gitId":"-"},"content":" return \"teams\";"},{"lineNumber":1306,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":1307,"author":{"gitId":"-"},"content":" return \"teams (excluding own team)\";"},{"lineNumber":1308,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":1309,"author":{"gitId":"-"},"content":" return \"instructors\";"},{"lineNumber":1310,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":1311,"author":{"gitId":"-"},"content":" return \"unknown\";"},{"lineNumber":1312,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1313,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1314,"author":{"gitId":"-"},"content":""},{"lineNumber":1315,"author":{"gitId":"-"},"content":" private String getDoubleString(Double value) {"},{"lineNumber":1316,"author":{"gitId":"-"},"content":" return value % 1 \u003d\u003d 0 ? Integer.toString(value.intValue()) : Double.toString(value);"},{"lineNumber":1317,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1318,"author":{"gitId":"-"},"content":""},{"lineNumber":1319,"author":{"gitId":"-"},"content":" private WebElement getOptionsSection(int questionNum) {"},{"lineNumber":1320,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"options-section\"));"},{"lineNumber":1321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1322,"author":{"gitId":"-"},"content":""},{"lineNumber":1323,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getOptionInputs(int questionNum) {"},{"lineNumber":1324,"author":{"gitId":"-"},"content":" WebElement optionsSection \u003d getOptionsSection(questionNum);"},{"lineNumber":1325,"author":{"gitId":"-"},"content":" return optionsSection.findElements(By.cssSelector(\"input[type\u003d\u0027text\u0027]\"));"},{"lineNumber":1326,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1327,"author":{"gitId":"-"},"content":""},{"lineNumber":1328,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getOptionWeightInputs(int questionNum) {"},{"lineNumber":1329,"author":{"gitId":"-"},"content":" WebElement optionsSection \u003d getOptionsSection(questionNum);"},{"lineNumber":1330,"author":{"gitId":"-"},"content":" return optionsSection.findElements(By.cssSelector(\"tm-weight-field input\"));"},{"lineNumber":1331,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1332,"author":{"gitId":"-"},"content":""},{"lineNumber":1333,"author":{"gitId":"-"},"content":" private WebElement getOtherWeightInput(int questionNum) {"},{"lineNumber":1334,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"other-weight\"));"},{"lineNumber":1335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1336,"author":{"gitId":"-"},"content":""},{"lineNumber":1337,"author":{"gitId":"-"},"content":" private boolean verifyGeneratedOptions(int questionNum, FeedbackParticipantType participantType) {"},{"lineNumber":1338,"author":{"gitId":"-"},"content":" if (!participantType.equals(FeedbackParticipantType.NONE)) {"},{"lineNumber":1339,"author":{"gitId":"-"},"content":" assertTrue(getGenerateOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1340,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(getGenerateOptionsDropdown(questionNum)),"},{"lineNumber":1341,"author":{"gitId":"-"},"content":" getGeneratedOptionString(participantType));"},{"lineNumber":1342,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":1343,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1344,"author":{"gitId":"-"},"content":" assertFalse(getGenerateOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1345,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":1346,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1347,"author":{"gitId":"-"},"content":""},{"lineNumber":1348,"author":{"gitId":"-"},"content":" private void verifyOptions(int questionNum, List\u003cString\u003e options) {"},{"lineNumber":1349,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e inputs \u003d getOptionInputs(questionNum);"},{"lineNumber":1350,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":1351,"author":{"gitId":"-"},"content":" assertEquals(options.get(i), inputs.get(i).getAttribute(\"value\"));"},{"lineNumber":1352,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1353,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1354,"author":{"gitId":"-"},"content":""},{"lineNumber":1355,"author":{"gitId":"-"},"content":" private void verifyOptionWeights(int questionNum, boolean hasWeights, List\u003cDouble\u003e weights) {"},{"lineNumber":1356,"author":{"gitId":"-"},"content":" if (hasWeights) {"},{"lineNumber":1357,"author":{"gitId":"-"},"content":" assertTrue(getWeightCheckbox(questionNum).isSelected());"},{"lineNumber":1358,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e weightInputs \u003d getOptionWeightInputs(questionNum);"},{"lineNumber":1359,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c weights.size(); i++) {"},{"lineNumber":1360,"author":{"gitId":"-"},"content":" assertEquals(getDoubleString(weights.get(i)), weightInputs.get(i).getAttribute(\"value\"));"},{"lineNumber":1361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1362,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1363,"author":{"gitId":"-"},"content":" assertFalse(getWeightCheckbox(questionNum).isSelected());"},{"lineNumber":1364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1366,"author":{"gitId":"-"},"content":""},{"lineNumber":1367,"author":{"gitId":"-"},"content":" private void verifyOtherOption(int questionNum, boolean hasOther, Double weight) {"},{"lineNumber":1368,"author":{"gitId":"-"},"content":" if (hasOther) {"},{"lineNumber":1369,"author":{"gitId":"-"},"content":" assertTrue(getOtherOptionCheckbox(questionNum).isSelected());"},{"lineNumber":1370,"author":{"gitId":"-"},"content":" if (weight \u003e 0) {"},{"lineNumber":1371,"author":{"gitId":"-"},"content":" String otherWeight \u003d getOtherWeightInput(questionNum).getAttribute(\"value\");"},{"lineNumber":1372,"author":{"gitId":"-"},"content":" assertEquals(getDoubleString(weight), otherWeight);"},{"lineNumber":1373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1374,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1375,"author":{"gitId":"-"},"content":" assertFalse(getOtherOptionCheckbox(questionNum).isSelected());"},{"lineNumber":1376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1377,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1378,"author":{"gitId":"-"},"content":""},{"lineNumber":1379,"author":{"gitId":"-"},"content":" private void inputMcqDetails(int questionNum, FeedbackMcqQuestionDetails questionDetails) {"},{"lineNumber":1380,"author":{"gitId":"-"},"content":" if (inputGenerateOptions(questionNum, questionDetails.getGenerateOptionsFor())) {"},{"lineNumber":1381,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":1382,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1383,"author":{"gitId":"-"},"content":""},{"lineNumber":1384,"author":{"gitId":"-"},"content":" inputOptions(questionNum, questionDetails.getMcqChoices());"},{"lineNumber":1385,"author":{"gitId":"-"},"content":" inputOptionWeights(questionNum, questionDetails.isHasAssignedWeights(), questionDetails.getMcqWeights());"},{"lineNumber":1386,"author":{"gitId":"-"},"content":" inputOtherChoice(questionNum, questionDetails.isOtherEnabled(), questionDetails.getMcqOtherWeight());"},{"lineNumber":1387,"author":{"gitId":"-"},"content":" inputDropdownEnabledChoice(questionNum, questionDetails.isQuestionDropdownEnabled());"},{"lineNumber":1388,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1389,"author":{"gitId":"-"},"content":""},{"lineNumber":1390,"author":{"gitId":"-"},"content":" private boolean inputGenerateOptions(int questionNum, FeedbackParticipantType participantType) {"},{"lineNumber":1391,"author":{"gitId":"-"},"content":" if (!participantType.equals(FeedbackParticipantType.NONE)) {"},{"lineNumber":1392,"author":{"gitId":"-"},"content":" markOptionAsSelected(getGenerateOptionsCheckbox(questionNum));"},{"lineNumber":1393,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getGenerateOptionsDropdown(questionNum),"},{"lineNumber":1394,"author":{"gitId":"-"},"content":" getGeneratedOptionString(participantType));"},{"lineNumber":1395,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":1396,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":1397,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1398,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getGenerateOptionsCheckbox(questionNum));"},{"lineNumber":1399,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":1400,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1401,"author":{"gitId":"-"},"content":""},{"lineNumber":1402,"author":{"gitId":"-"},"content":" private void inputOptions(int questionNum, List\u003cString\u003e options) {"},{"lineNumber":1403,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e inputs \u003d getOptionInputs(questionNum);"},{"lineNumber":1404,"author":{"gitId":"-"},"content":" int numInputsNeeded \u003d options.size() - inputs.size();"},{"lineNumber":1405,"author":{"gitId":"-"},"content":" if (numInputsNeeded \u003e 0) {"},{"lineNumber":1406,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numInputsNeeded; i++) {"},{"lineNumber":1407,"author":{"gitId":"-"},"content":" click(getQuestionForm(questionNum).findElement(By.id(\"btn-add-option\")));"},{"lineNumber":1408,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1409,"author":{"gitId":"-"},"content":" inputs \u003d getOptionInputs(questionNum);"},{"lineNumber":1410,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1411,"author":{"gitId":"-"},"content":" if (numInputsNeeded \u003c 0) {"},{"lineNumber":1412,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c -numInputsNeeded; i++) {"},{"lineNumber":1413,"author":{"gitId":"-"},"content":" click(getOptionsSection(questionNum).findElement(By.tagName(\"button\")));"},{"lineNumber":1414,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1415,"author":{"gitId":"-"},"content":" inputs \u003d getOptionInputs(questionNum);"},{"lineNumber":1416,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1417,"author":{"gitId":"-"},"content":""},{"lineNumber":1418,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":1419,"author":{"gitId":"-"},"content":" fillTextBox(inputs.get(i), options.get(i));"},{"lineNumber":1420,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1421,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1422,"author":{"gitId":"-"},"content":""},{"lineNumber":1423,"author":{"gitId":"-"},"content":" private void inputOptionWeights(int questionNum, boolean hasWeights, List\u003cDouble\u003e weights) {"},{"lineNumber":1424,"author":{"gitId":"-"},"content":" if (hasWeights) {"},{"lineNumber":1425,"author":{"gitId":"-"},"content":" markOptionAsSelected(getWeightCheckbox(questionNum));"},{"lineNumber":1426,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e weightInputs \u003d getOptionWeightInputs(questionNum);"},{"lineNumber":1427,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c weights.size(); i++) {"},{"lineNumber":1428,"author":{"gitId":"-"},"content":" fillTextBox(weightInputs.get(i), getDoubleString(weights.get(i)));"},{"lineNumber":1429,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1430,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1431,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getWeightCheckbox(questionNum));"},{"lineNumber":1432,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1433,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1434,"author":{"gitId":"-"},"content":""},{"lineNumber":1435,"author":{"gitId":"-"},"content":" private void inputOtherChoice(int questionNum, boolean hasOther, Double otherWeight) {"},{"lineNumber":1436,"author":{"gitId":"-"},"content":" if (hasOther) {"},{"lineNumber":1437,"author":{"gitId":"-"},"content":" markOptionAsSelected(getOtherOptionCheckbox(questionNum));"},{"lineNumber":1438,"author":{"gitId":"-"},"content":" if (otherWeight \u003e 0) {"},{"lineNumber":1439,"author":{"gitId":"-"},"content":" fillTextBox(getOtherWeightInput(questionNum), getDoubleString(otherWeight));"},{"lineNumber":1440,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1441,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1442,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getOtherOptionCheckbox(questionNum));"},{"lineNumber":1443,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1444,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1445,"author":{"gitId":"-"},"content":""},{"lineNumber":1446,"author":{"gitId":"-"},"content":" private void inputDropdownEnabledChoice(int questionNum, boolean hasOther) {"},{"lineNumber":1447,"author":{"gitId":"-"},"content":" if (hasOther) {"},{"lineNumber":1448,"author":{"gitId":"-"},"content":" markOptionAsSelected(getQuestionDropdownCheckbox(questionNum));"},{"lineNumber":1449,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1450,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getQuestionDropdownCheckbox(questionNum));"},{"lineNumber":1451,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1452,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1453,"author":{"gitId":"-"},"content":""},{"lineNumber":1454,"author":{"gitId":"-"},"content":" private WebElement getMaxOptionsCheckbox(int questionNum) {"},{"lineNumber":1455,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"max-options-checkbox\"));"},{"lineNumber":1456,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1457,"author":{"gitId":"-"},"content":""},{"lineNumber":1458,"author":{"gitId":"-"},"content":" private WebElement getMaxOptionsInput(int questionNum) {"},{"lineNumber":1459,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"max-options\"));"},{"lineNumber":1460,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1461,"author":{"gitId":"-"},"content":""},{"lineNumber":1462,"author":{"gitId":"-"},"content":" private WebElement getMinOptionsCheckbox(int questionNum) {"},{"lineNumber":1463,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"min-options-checkbox\"));"},{"lineNumber":1464,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1465,"author":{"gitId":"-"},"content":""},{"lineNumber":1466,"author":{"gitId":"-"},"content":" private WebElement getMinOptionsInput(int questionNum) {"},{"lineNumber":1467,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"min-options\"));"},{"lineNumber":1468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1469,"author":{"gitId":"-"},"content":""},{"lineNumber":1470,"author":{"gitId":"-"},"content":" private void verifyMaxOptions(int questionNum, int maxOptions) {"},{"lineNumber":1471,"author":{"gitId":"-"},"content":" if (maxOptions \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":1472,"author":{"gitId":"-"},"content":" assertFalse(getMaxOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1473,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1474,"author":{"gitId":"-"},"content":" assertTrue(getMaxOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1475,"author":{"gitId":"-"},"content":" assertEquals(getMaxOptionsInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":1476,"author":{"gitId":"-"},"content":" Integer.toString(maxOptions));"},{"lineNumber":1477,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1478,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1479,"author":{"gitId":"-"},"content":""},{"lineNumber":1480,"author":{"gitId":"-"},"content":" private void verifyMinOptions(int questionNum, int minOptions) {"},{"lineNumber":1481,"author":{"gitId":"-"},"content":" if (minOptions \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":1482,"author":{"gitId":"-"},"content":" assertFalse(getMinOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1483,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1484,"author":{"gitId":"-"},"content":" assertTrue(getMinOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1485,"author":{"gitId":"-"},"content":" assertEquals(getMinOptionsInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":1486,"author":{"gitId":"-"},"content":" Integer.toString(minOptions));"},{"lineNumber":1487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1488,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1489,"author":{"gitId":"-"},"content":""},{"lineNumber":1490,"author":{"gitId":"-"},"content":" private void inputMsqDetails(int questionNum, FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":1491,"author":{"gitId":"-"},"content":" if (inputGenerateOptions(questionNum, questionDetails.getGenerateOptionsFor())) {"},{"lineNumber":1492,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":1493,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1494,"author":{"gitId":"-"},"content":""},{"lineNumber":1495,"author":{"gitId":"-"},"content":" inputOptions(questionNum, questionDetails.getMsqChoices());"},{"lineNumber":1496,"author":{"gitId":"-"},"content":" inputOptionWeights(questionNum, questionDetails.isHasAssignedWeights(), questionDetails.getMsqWeights());"},{"lineNumber":1497,"author":{"gitId":"-"},"content":" inputOtherChoice(questionNum, questionDetails.isOtherEnabled(), questionDetails.getMsqOtherWeight());"},{"lineNumber":1498,"author":{"gitId":"-"},"content":" inputMaxOptions(questionNum, questionDetails.getMaxSelectableChoices());"},{"lineNumber":1499,"author":{"gitId":"-"},"content":" inputMinOptions(questionNum, questionDetails.getMinSelectableChoices());"},{"lineNumber":1500,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1501,"author":{"gitId":"-"},"content":""},{"lineNumber":1502,"author":{"gitId":"-"},"content":" private void inputMaxOptions(int questionNum, int maxOptions) {"},{"lineNumber":1503,"author":{"gitId":"-"},"content":" if (maxOptions \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":1504,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getMaxOptionsCheckbox(questionNum));"},{"lineNumber":1505,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1506,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMaxOptionsCheckbox(questionNum));"},{"lineNumber":1507,"author":{"gitId":"-"},"content":" fillTextBox(getMaxOptionsInput(questionNum), Integer.toString(maxOptions));"},{"lineNumber":1508,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1510,"author":{"gitId":"-"},"content":""},{"lineNumber":1511,"author":{"gitId":"-"},"content":" private void inputMinOptions(int questionNum, int minOptions) {"},{"lineNumber":1512,"author":{"gitId":"-"},"content":" if (minOptions \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":1513,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getMinOptionsCheckbox(questionNum));"},{"lineNumber":1514,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1515,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMinOptionsCheckbox(questionNum));"},{"lineNumber":1516,"author":{"gitId":"-"},"content":" fillTextBox(getMinOptionsInput(questionNum), Integer.toString(minOptions));"},{"lineNumber":1517,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1518,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1519,"author":{"gitId":"-"},"content":""},{"lineNumber":1520,"author":{"gitId":"-"},"content":" private WebElement getMinNumscaleInput(int questionNum) {"},{"lineNumber":1521,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"min-value\"));"},{"lineNumber":1522,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1523,"author":{"gitId":"-"},"content":""},{"lineNumber":1524,"author":{"gitId":"-"},"content":" private WebElement getMaxNumscaleInput(int questionNum) {"},{"lineNumber":1525,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"max-value\"));"},{"lineNumber":1526,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1527,"author":{"gitId":"-"},"content":""},{"lineNumber":1528,"author":{"gitId":"-"},"content":" private WebElement getNumScaleIncrementInput(int questionNum) {"},{"lineNumber":1529,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"increment-value\"));"},{"lineNumber":1530,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1531,"author":{"gitId":"-"},"content":""},{"lineNumber":1532,"author":{"gitId":"-"},"content":" private void inputNumScaleDetails(int questionNum, FeedbackNumericalScaleQuestionDetails questionDetails) {"},{"lineNumber":1533,"author":{"gitId":"-"},"content":" inputNumScaleValue(getMinNumscaleInput(questionNum), Integer.toString(questionDetails.getMinScale()));"},{"lineNumber":1534,"author":{"gitId":"-"},"content":" inputNumScaleValue(getNumScaleIncrementInput(questionNum), getDoubleString(questionDetails.getStep()));"},{"lineNumber":1535,"author":{"gitId":"-"},"content":" inputNumScaleValue(getMaxNumscaleInput(questionNum), Integer.toString(questionDetails.getMaxScale()));"},{"lineNumber":1536,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1537,"author":{"gitId":"-"},"content":""},{"lineNumber":1538,"author":{"gitId":"-"},"content":" private void inputNumScaleValue(WebElement input, String value) {"},{"lineNumber":1539,"author":{"gitId":"-"},"content":" input.clear();"},{"lineNumber":1540,"author":{"gitId":"-"},"content":" input.sendKeys(value);"},{"lineNumber":1541,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1542,"author":{"gitId":"-"},"content":""},{"lineNumber":1543,"author":{"gitId":"-"},"content":" private WebElement getConstSumTotalPointsRadioBtn(int questionNum) {"},{"lineNumber":1544,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"total-points-radio\"));"},{"lineNumber":1545,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1546,"author":{"gitId":"-"},"content":""},{"lineNumber":1547,"author":{"gitId":"-"},"content":" private WebElement getConstSumTotalPointsInput(int questionNum) {"},{"lineNumber":1548,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"total-points\"));"},{"lineNumber":1549,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1550,"author":{"gitId":"-"},"content":""},{"lineNumber":1551,"author":{"gitId":"-"},"content":" private WebElement getConstSumPerOptionPointsRadioBtn(int questionNum) {"},{"lineNumber":1552,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"per-option-points-radio\"));"},{"lineNumber":1553,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1554,"author":{"gitId":"-"},"content":""},{"lineNumber":1555,"author":{"gitId":"-"},"content":" private WebElement getConstSumPerOptionPointsInput(int questionNum) {"},{"lineNumber":1556,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"per-option-points\"));"},{"lineNumber":1557,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1558,"author":{"gitId":"-"},"content":""},{"lineNumber":1559,"author":{"gitId":"-"},"content":" private WebElement getConstSumUnevenDistributionCheckbox(int questionNum) {"},{"lineNumber":1560,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"uneven-distribution-checkbox\"));"},{"lineNumber":1561,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1562,"author":{"gitId":"-"},"content":""},{"lineNumber":1563,"author":{"gitId":"-"},"content":" private WebElement getConstSumUnevenDistributionDropdown(int questionNum) {"},{"lineNumber":1564,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"uneven-distribution-dropdown\"));"},{"lineNumber":1565,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1566,"author":{"gitId":"-"},"content":""},{"lineNumber":1567,"author":{"gitId":"-"},"content":" private void inputConstSumDetails(int questionNum, FeedbackConstantSumQuestionDetails questionDetails) {"},{"lineNumber":1568,"author":{"gitId":"-"},"content":" if (!questionDetails.isDistributeToRecipients()) {"},{"lineNumber":1569,"author":{"gitId":"-"},"content":" inputOptions(questionNum, questionDetails.getConstSumOptions());"},{"lineNumber":1570,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1571,"author":{"gitId":"-"},"content":" if (questionDetails.isPointsPerOption()) {"},{"lineNumber":1572,"author":{"gitId":"-"},"content":" click(getConstSumPerOptionPointsRadioBtn(questionNum));"},{"lineNumber":1573,"author":{"gitId":"-"},"content":" fillTextBox(getConstSumPerOptionPointsInput(questionNum), Integer.toString(questionDetails.getPoints()));"},{"lineNumber":1574,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1575,"author":{"gitId":"-"},"content":" click(getConstSumTotalPointsRadioBtn(questionNum));"},{"lineNumber":1576,"author":{"gitId":"-"},"content":" fillTextBox(getConstSumTotalPointsInput(questionNum), Integer.toString(questionDetails.getPoints()));"},{"lineNumber":1577,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1578,"author":{"gitId":"-"},"content":" String distributeFor \u003d questionDetails.getDistributePointsFor();"},{"lineNumber":1579,"author":{"gitId":"-"},"content":" if (questionDetails.isForceUnevenDistribution()) {"},{"lineNumber":1580,"author":{"gitId":"-"},"content":" markOptionAsSelected(getConstSumUnevenDistributionCheckbox(questionNum));"},{"lineNumber":1581,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getConstSumUnevenDistributionDropdown(questionNum),"},{"lineNumber":1582,"author":{"gitId":"-"},"content":" \"All options\".equals(distributeFor) ? \"Every option\" : distributeFor);"},{"lineNumber":1583,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1584,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getConstSumUnevenDistributionCheckbox(questionNum));"},{"lineNumber":1585,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1586,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1587,"author":{"gitId":"-"},"content":""},{"lineNumber":1588,"author":{"gitId":"-"},"content":" private WebElement getZeroSumCheckbox(int questionNum) {"},{"lineNumber":1589,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"zero-sum-checkbox\"));"},{"lineNumber":1590,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1591,"author":{"gitId":"-"},"content":""},{"lineNumber":1592,"author":{"gitId":"-"},"content":" private WebElement getAllowNotSureContributionCheckbox(int questionNum) {"},{"lineNumber":1593,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"not-sure-checkbox\"));"},{"lineNumber":1594,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1595,"author":{"gitId":"-"},"content":""},{"lineNumber":1596,"author":{"gitId":"-"},"content":" private void inputContributionDetails(int questionNum, FeedbackContributionQuestionDetails questionDetails) {"},{"lineNumber":1597,"author":{"gitId":"-"},"content":" if (questionDetails.isZeroSum()) {"},{"lineNumber":1598,"author":{"gitId":"-"},"content":" markOptionAsSelected(getZeroSumCheckbox(questionNum));"},{"lineNumber":1599,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1600,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getZeroSumCheckbox(questionNum));"},{"lineNumber":1601,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1602,"author":{"gitId":"-"},"content":" if (questionDetails.isNotSureAllowed()) {"},{"lineNumber":1603,"author":{"gitId":"-"},"content":" markOptionAsSelected(getAllowNotSureContributionCheckbox(questionNum));"},{"lineNumber":1604,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1605,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getAllowNotSureContributionCheckbox(questionNum));"},{"lineNumber":1606,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1607,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1608,"author":{"gitId":"-"},"content":""},{"lineNumber":1609,"author":{"gitId":"-"},"content":" private WebElement getRubricRow(int questionNum, int rowNumber) {"},{"lineNumber":1610,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElements(By.cssSelector(\"tm-rubric-question-edit-details-form tr\"))"},{"lineNumber":1611,"author":{"gitId":"-"},"content":" .get(rowNumber - 1);"},{"lineNumber":1612,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1613,"author":{"gitId":"-"},"content":""},{"lineNumber":1614,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRubricChoiceInputs(int questionNum) {"},{"lineNumber":1615,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, 1).findElements(By.tagName(\"input\"));"},{"lineNumber":1616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1617,"author":{"gitId":"-"},"content":""},{"lineNumber":1618,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRubricTextareas(int questionNum, int rowNum) {"},{"lineNumber":1619,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, rowNum).findElements(By.tagName(\"textarea\"));"},{"lineNumber":1620,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1621,"author":{"gitId":"-"},"content":""},{"lineNumber":1622,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRubricWeights(int questionNum, int rowNum) {"},{"lineNumber":1623,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, rowNum).findElements(By.tagName(\"input\"));"},{"lineNumber":1624,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1625,"author":{"gitId":"-"},"content":""},{"lineNumber":1626,"author":{"gitId":"-"},"content":" private WebElement getRubricDeleteSubQnBtn(int questionNum, int rowNum) {"},{"lineNumber":1627,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, rowNum).findElement(By.id(\"btn-delete-subquestion\"));"},{"lineNumber":1628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1629,"author":{"gitId":"-"},"content":""},{"lineNumber":1630,"author":{"gitId":"-"},"content":" private WebElement getRubricDeleteChoiceBtn(int questionNum, int colNum) {"},{"lineNumber":1631,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, getNumRubricRows(questionNum)).findElements(By.id(\"btn-delete-choice\")).get(colNum);"},{"lineNumber":1632,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1633,"author":{"gitId":"-"},"content":""},{"lineNumber":1634,"author":{"gitId":"-"},"content":" private int getNumRubricRows(int questionNum) {"},{"lineNumber":1635,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElements(By.cssSelector(\"#rubric-table tr\")).size();"},{"lineNumber":1636,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1637,"author":{"gitId":"-"},"content":""},{"lineNumber":1638,"author":{"gitId":"-"},"content":" private int getNumRubricCols(int questionNum) {"},{"lineNumber":1639,"author":{"gitId":"-"},"content":" WebElement row \u003d getRubricRow(questionNum, 1);"},{"lineNumber":1640,"author":{"gitId":"-"},"content":" return row.findElements(By.tagName(\"td\")).size() + row.findElements(By.tagName(\"th\")).size();"},{"lineNumber":1641,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1642,"author":{"gitId":"-"},"content":""},{"lineNumber":1643,"author":{"gitId":"-"},"content":" private void inputRubricDetails(int questionNum, FeedbackRubricQuestionDetails questionDetails) {"},{"lineNumber":1644,"author":{"gitId":"-"},"content":" int numSubQn \u003d questionDetails.getNumOfRubricSubQuestions();"},{"lineNumber":1645,"author":{"gitId":"-"},"content":" int numChoices \u003d questionDetails.getNumOfRubricChoices();"},{"lineNumber":1646,"author":{"gitId":"-"},"content":" adjustNumRubricFields(questionNum, numSubQn, numChoices);"},{"lineNumber":1647,"author":{"gitId":"-"},"content":""},{"lineNumber":1648,"author":{"gitId":"-"},"content":" List\u003cString\u003e choices \u003d questionDetails.getRubricChoices();"},{"lineNumber":1649,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numChoices; i++) {"},{"lineNumber":1650,"author":{"gitId":"-"},"content":" fillTextBox(getRubricChoiceInputs(questionNum).get(i), choices.get(i));"},{"lineNumber":1651,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1652,"author":{"gitId":"-"},"content":""},{"lineNumber":1653,"author":{"gitId":"-"},"content":" List\u003cString\u003e subQuestions \u003d questionDetails.getRubricSubQuestions();"},{"lineNumber":1654,"author":{"gitId":"-"},"content":" List\u003cList\u003cString\u003e\u003e descriptions \u003d questionDetails.getRubricDescriptions();"},{"lineNumber":1655,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQn; i++) {"},{"lineNumber":1656,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e textAreas \u003d getRubricTextareas(questionNum, i + 2);"},{"lineNumber":1657,"author":{"gitId":"-"},"content":" fillTextBox(textAreas.get(0), subQuestions.get(i));"},{"lineNumber":1658,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c numChoices; j++) {"},{"lineNumber":1659,"author":{"gitId":"-"},"content":" fillTextBox(textAreas.get(j + 1), descriptions.get(i).get(j));"},{"lineNumber":1660,"author":{"gitId":"-"},"content":" if (descriptions.get(i).get(j).isEmpty()) {"},{"lineNumber":1661,"author":{"gitId":"-"},"content":" // using clear does not send the required event"},{"lineNumber":1662,"author":{"gitId":"-"},"content":" // as a workaround, after clearing without event, enter a random character and delete it"},{"lineNumber":1663,"author":{"gitId":"-"},"content":" textAreas.get(j + 1).sendKeys(\"a\");"},{"lineNumber":1664,"author":{"gitId":"-"},"content":" textAreas.get(j + 1).sendKeys(Keys.BACK_SPACE);"},{"lineNumber":1665,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1666,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1667,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1668,"author":{"gitId":"-"},"content":""},{"lineNumber":1669,"author":{"gitId":"-"},"content":" if (questionDetails.isHasAssignedWeights()) {"},{"lineNumber":1670,"author":{"gitId":"-"},"content":" markOptionAsSelected(getWeightCheckbox(questionNum));"},{"lineNumber":1671,"author":{"gitId":"-"},"content":" List\u003cList\u003cDouble\u003e\u003e weights \u003d questionDetails.getRubricWeights();"},{"lineNumber":1672,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQn; i++) {"},{"lineNumber":1673,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c numChoices; j++) {"},{"lineNumber":1674,"author":{"gitId":"-"},"content":" fillTextBox(getRubricWeights(questionNum, i + 2).get(j), getDoubleString(weights.get(i).get(j)));"},{"lineNumber":1675,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1676,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1677,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1678,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getWeightCheckbox(questionNum));"},{"lineNumber":1679,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1680,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1681,"author":{"gitId":"-"},"content":""},{"lineNumber":1682,"author":{"gitId":"-"},"content":" private void adjustNumRubricFields(int questionNum, int numSubQn, int numChoices) {"},{"lineNumber":1683,"author":{"gitId":"-"},"content":" int numSubQnsNeeded \u003d numSubQn - (getNumRubricRows(questionNum) - 2);"},{"lineNumber":1684,"author":{"gitId":"-"},"content":" int numChoicesNeeded \u003d numChoices - (getNumRubricCols(questionNum) - 1);"},{"lineNumber":1685,"author":{"gitId":"-"},"content":" if (numSubQnsNeeded \u003e 0) {"},{"lineNumber":1686,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQnsNeeded; i++) {"},{"lineNumber":1687,"author":{"gitId":"-"},"content":" click(getQuestionForm(questionNum).findElement(By.id(\"btn-add-row\")));"},{"lineNumber":1688,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1689,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1690,"author":{"gitId":"-"},"content":" if (numChoicesNeeded \u003e 0) {"},{"lineNumber":1691,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numChoicesNeeded; i++) {"},{"lineNumber":1692,"author":{"gitId":"-"},"content":" click(getQuestionForm(questionNum).findElement(By.id(\"btn-add-col\")));"},{"lineNumber":1693,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1694,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1695,"author":{"gitId":"-"},"content":" if (numSubQnsNeeded \u003c 0) {"},{"lineNumber":1696,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c -numSubQnsNeeded; i++) {"},{"lineNumber":1697,"author":{"gitId":"-"},"content":" click(getRubricDeleteSubQnBtn(questionNum, 2));"},{"lineNumber":1698,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1699,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1700,"author":{"gitId":"-"},"content":" if (numChoicesNeeded \u003c 0) {"},{"lineNumber":1701,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c -numChoicesNeeded; i++) {"},{"lineNumber":1702,"author":{"gitId":"-"},"content":" clickAndConfirm(getRubricDeleteChoiceBtn(questionNum, 2));"},{"lineNumber":1703,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1704,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1705,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1706,"author":{"gitId":"-"},"content":""},{"lineNumber":1707,"author":{"gitId":"-"},"content":" private WebElement getAllowDuplicateRankCheckbox(int questionNum) {"},{"lineNumber":1708,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"duplicate-rank-checkbox\"));"},{"lineNumber":1709,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1710,"author":{"gitId":"-"},"content":""},{"lineNumber":1711,"author":{"gitId":"-"},"content":" private void inputRankDetails(int questionNum, FeedbackRankQuestionDetails questionDetails) {"},{"lineNumber":1712,"author":{"gitId":"-"},"content":" if (questionDetails instanceof FeedbackRankOptionsQuestionDetails) {"},{"lineNumber":1713,"author":{"gitId":"-"},"content":" FeedbackRankOptionsQuestionDetails optionDetails \u003d (FeedbackRankOptionsQuestionDetails) questionDetails;"},{"lineNumber":1714,"author":{"gitId":"-"},"content":" inputOptions(questionNum, optionDetails.getOptions());"},{"lineNumber":1715,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1716,"author":{"gitId":"-"},"content":" if (questionDetails.isAreDuplicatesAllowed()) {"},{"lineNumber":1717,"author":{"gitId":"-"},"content":" markOptionAsSelected(getAllowDuplicateRankCheckbox(questionNum));"},{"lineNumber":1718,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1719,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getAllowDuplicateRankCheckbox(questionNum));"},{"lineNumber":1720,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1721,"author":{"gitId":"-"},"content":" inputMaxOptions(questionNum, questionDetails.getMaxOptionsToBeRanked());"},{"lineNumber":1722,"author":{"gitId":"-"},"content":" inputMinOptions(questionNum, questionDetails.getMinOptionsToBeRanked());"},{"lineNumber":1723,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1724,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":13,"mingyuanc":5,"-":1706}},{"path":"src/e2e/java/teammates/e2e/pageobjects/StudentHomePage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertTrue;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Page Object Model for student home page."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class StudentHomePage extends AppPage {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" public StudentHomePage(Browser browser) {"},{"lineNumber":16,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":17,"author":{"gitId":"-"},"content":" }"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":20,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" return \"Student Home\".equals(getPageTitle());"},{"lineNumber":22,"author":{"gitId":"-"},"content":" }"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getStudentHomeCoursePanels() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return browser.driver.findElements(By.cssSelector(\"div.card.bg-light\"));"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" public int getStudentHomeCoursePanelIndex(String courseName) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e coursePanels \u003d getStudentHomeCoursePanels();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" int coursePanelIndex \u003d -1;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c coursePanels.size(); i++) {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (coursePanels.get(i).getText().contains(courseName)) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" coursePanelIndex \u003d i;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertTrue(coursePanelIndex \u003e\u003d 0);"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return coursePanelIndex;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" public void verifyVisibleFeedbackSessionToStudents(String feedbackSessionName, int index) {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertTrue(getStudentHomeCoursePanels().get(index)"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .findElement(By.cssSelector(\"div.table-responsive table.table tbody\")).getText()"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .contains(feedbackSessionName));"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" public void clickCloseNotificationBannerButton() {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" WebElement closeNotifButton \u003d browser.driver.findElement(By.id(\"btn-close-notif\"));"},{"lineNumber":48,"author":{"gitId":"-"},"content":" waitForElementToBeClickable(closeNotifButton);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" click(closeNotifButton);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" public void clickMarkAsReadButton() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" WebElement markNotifAsReadButton \u003d browser.driver.findElement(By.id(\"btn-mark-as-read\"));"},{"lineNumber":55,"author":{"gitId":"-"},"content":" waitForElementToBeClickable(markNotifAsReadButton);"},{"lineNumber":56,"author":{"gitId":"-"},"content":" click(markNotifAsReadButton);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" public String getNotificationId() {"},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" WebElement notificationBanner \u003d browser.driver.findElement(By.id(\"notification-banner\"));"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":" return notificationBanner.getAttribute(\"data-testid\");"},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":5,"-":60}},{"path":"src/it/java/teammates/it/sqllogic/core/AccountsLogicIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.AccountsLogic;"},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":"import teammates.sqllogic.core.CoursesLogic;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.NotificationsLogic;"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":"import teammates.sqllogic.core.UsersLogic;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountsDb;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":"import teammates.test.AssertHelper;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * SUT: {@link AccountsLogic}."},{"lineNumber":36,"author":{"gitId":"-"},"content":" */"},{"lineNumber":37,"author":{"gitId":"-"},"content":"public class AccountsLogicIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" private AccountsLogic accountsLogic \u003d AccountsLogic.inst();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private NotificationsLogic notificationsLogic \u003d NotificationsLogic.inst();"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" private UsersLogic usersLogic \u003d UsersLogic.inst();"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" private CoursesLogic coursesLogic \u003d CoursesLogic.inst();"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" private AccountsDb accountsDb \u003d AccountsDb.inst();"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" private SqlDataBundle typicalDataBundle;"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" @BeforeClass"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" public void setupClass() {"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" super.setupClass();"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" typicalDataBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":" @BeforeMethod"},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":" protected void setUp() throws Exception {"},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" super.setUp();"},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" persistDataBundle(typicalDataBundle);"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.flushSession();"},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.clearSession();"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications()"},{"lineNumber":66,"author":{"gitId":"-"},"content":" throws EntityAlreadyExistsException, InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" ______TS(\"success: mark notification as read\");"},{"lineNumber":68,"author":{"gitId":"-"},"content":" Account account \u003d new Account(\"google-id\", \"name\", \"email@teammates.com\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" Notification notification \u003d new Notification(Instant.parse(\"2011-01-01T00:00:00Z\"),"},{"lineNumber":70,"author":{"gitId":"-"},"content":" Instant.parse(\"2099-01-01T00:00:00Z\"), NotificationStyle.DANGER, NotificationTargetUser.GENERAL,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"A deprecation note\", \"\u003cp\u003eDeprecation happens in three minutes\u003c/p\u003e\");"},{"lineNumber":72,"author":{"gitId":"-"},"content":" accountsDb.createAccount(account);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" notificationsLogic.createNotification(notification);"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":76,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":77,"author":{"gitId":"-"},"content":" accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime());"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" Account actualAccount \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" List\u003cReadNotification\u003e accountReadNotifications \u003d actualAccount.getReadNotifications();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" assertEquals(1, accountReadNotifications.size());"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertSame(actualAccount, accountReadNotifications.get(0).getAccount());"},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertSame(notification, accountReadNotifications.get(0).getNotification());"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":" public void testJoinCourseForStudent()"},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" throws EntityAlreadyExistsException, InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":89,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":" Student student2YetToJoinCourse \u003d typicalDataBundle.students.get(\"student2YetToJoinCourse4\");"},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" Student student3YetToJoinCourse \u003d typicalDataBundle.students.get(\"student3YetToJoinCourse4\");"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":" Student studentInCourse \u003d typicalDataBundle.students.get(\"student1InCourse1\");"},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" String loggedInGoogleId \u003d \"AccLogicT.student.id\";"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: wrong key\");"},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":" String wrongKey \u003d StringHelper.encrypt(\"wrongkey\");"},{"lineNumber":99,"author":{"gitId":"yuanxi1"},"content":" EntityDoesNotExistException ednee \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(wrongKey, loggedInGoogleId));"},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"No student with given registration key: \" + wrongKey, ednee.getMessage());"},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: invalid parameters\");"},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" InvalidParametersException ipe \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(), \"wrong student\"));"},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" AssertHelper.assertContains(FieldValidator.REASON_INCORRECT_FORMAT, ipe.getMessage());"},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":109,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: googleID belongs to an existing student in the course\");"},{"lineNumber":110,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":111,"author":{"gitId":"yuanxi1"},"content":" EntityAlreadyExistsException eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":112,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(),"},{"lineNumber":113,"author":{"gitId":"yuanxi1"},"content":" studentInCourse.getGoogleId()));"},{"lineNumber":114,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Student has already joined course\", eaee.getMessage());"},{"lineNumber":115,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":116,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: with encryption and new account to be created\");"},{"lineNumber":117,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":118,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(), loggedInGoogleId);"},{"lineNumber":119,"author":{"gitId":"yuanxi1"},"content":" Account accountCreated \u003d accountsLogic.getAccountForGoogleId(loggedInGoogleId);"},{"lineNumber":120,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":121,"author":{"gitId":"yuanxi1"},"content":" assertEquals(loggedInGoogleId, usersLogic.getStudentForEmail("},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":" student2YetToJoinCourse.getCourseId(), student2YetToJoinCourse.getEmail()).getGoogleId());"},{"lineNumber":123,"author":{"gitId":"yuanxi1"},"content":" assertNotNull(accountCreated);"},{"lineNumber":124,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":125,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: student joined but account already exists\");"},{"lineNumber":126,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" String existingAccountId \u003d \"existingAccountId\";"},{"lineNumber":128,"author":{"gitId":"yuanxi1"},"content":" Account existingAccount \u003d new Account(existingAccountId, \"accountName\", student3YetToJoinCourse.getEmail());"},{"lineNumber":129,"author":{"gitId":"yuanxi1"},"content":" accountsDb.createAccount(existingAccount);"},{"lineNumber":130,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":131,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.joinCourseForStudent(student3YetToJoinCourse.getRegKey(), existingAccountId);"},{"lineNumber":132,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":" assertEquals(existingAccountId, usersLogic.getStudentForEmail("},{"lineNumber":134,"author":{"gitId":"yuanxi1"},"content":" student3YetToJoinCourse.getCourseId(), student3YetToJoinCourse.getEmail()).getGoogleId());"},{"lineNumber":135,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":136,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: already joined\");"},{"lineNumber":137,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":138,"author":{"gitId":"yuanxi1"},"content":" eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":139,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(), loggedInGoogleId));"},{"lineNumber":140,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Student has already joined course\", eaee.getMessage());"},{"lineNumber":141,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: course is deleted\");"},{"lineNumber":143,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":144,"author":{"gitId":"yuanxi1"},"content":" Course originalCourse \u003d usersLogic.getStudentForEmail("},{"lineNumber":145,"author":{"gitId":"yuanxi1"},"content":" student2YetToJoinCourse.getCourseId(), student2YetToJoinCourse.getEmail()).getCourse();"},{"lineNumber":146,"author":{"gitId":"yuanxi1"},"content":" coursesLogic.moveCourseToRecycleBin(originalCourse.getId());"},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":148,"author":{"gitId":"yuanxi1"},"content":" ednee \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":149,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(),"},{"lineNumber":150,"author":{"gitId":"yuanxi1"},"content":" loggedInGoogleId));"},{"lineNumber":151,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"The course you are trying to join has been deleted by an instructor\", ednee.getMessage());"},{"lineNumber":152,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":153,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":154,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":155,"author":{"gitId":"yuanxi1"},"content":" public void testJoinCourseForInstructor() throws Exception {"},{"lineNumber":156,"author":{"gitId":"yuanxi1"},"content":" String instructorIdAlreadyJoinedCourse \u003d \"instructor1\";"},{"lineNumber":157,"author":{"gitId":"yuanxi1"},"content":" Instructor instructor2YetToJoinCourse \u003d typicalDataBundle.instructors.get(\"instructor2YetToJoinCourse4\");"},{"lineNumber":158,"author":{"gitId":"yuanxi1"},"content":" Instructor instructor3YetToJoinCourse \u003d typicalDataBundle.instructors.get(\"instructor3YetToJoinCourse4\");"},{"lineNumber":159,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":160,"author":{"gitId":"yuanxi1"},"content":" String loggedInGoogleId \u003d \"AccLogicT.instr.id\";"},{"lineNumber":161,"author":{"gitId":"yuanxi1"},"content":" String[] key \u003d new String[] {"},{"lineNumber":162,"author":{"gitId":"yuanxi1"},"content":" getRegKeyForInstructor(instructor2YetToJoinCourse.getCourseId(), instructor2YetToJoinCourse.getEmail()),"},{"lineNumber":163,"author":{"gitId":"yuanxi1"},"content":" getRegKeyForInstructor(instructor2YetToJoinCourse.getCourseId(), instructor3YetToJoinCourse.getEmail()),"},{"lineNumber":164,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":165,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: googleID belongs to an existing instructor in the course\");"},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":" EntityAlreadyExistsException eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor("},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" key[0], instructorIdAlreadyJoinedCourse));"},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Instructor has already joined course\", eaee.getMessage());"},{"lineNumber":172,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: instructor joined and new account be created\");"},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.joinCourseForInstructor(key[0], loggedInGoogleId);"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":" Instructor joinedInstructor \u003d usersLogic.getInstructorForEmail("},{"lineNumber":178,"author":{"gitId":"yuanxi1"},"content":" instructor2YetToJoinCourse.getCourseId(), instructor2YetToJoinCourse.getEmail());"},{"lineNumber":179,"author":{"gitId":"yuanxi1"},"content":" assertEquals(loggedInGoogleId, joinedInstructor.getGoogleId());"},{"lineNumber":180,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":181,"author":{"gitId":"yuanxi1"},"content":" Account accountCreated \u003d accountsLogic.getAccountForGoogleId(loggedInGoogleId);"},{"lineNumber":182,"author":{"gitId":"yuanxi1"},"content":" assertNotNull(accountCreated);"},{"lineNumber":183,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":184,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: instructor joined but account already exists\");"},{"lineNumber":185,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":186,"author":{"gitId":"yuanxi1"},"content":" String existingAccountId \u003d \"existingAccountId\";"},{"lineNumber":187,"author":{"gitId":"yuanxi1"},"content":" Account existingAccount \u003d new Account(existingAccountId, \"accountName\", instructor3YetToJoinCourse.getEmail());"},{"lineNumber":188,"author":{"gitId":"yuanxi1"},"content":" accountsDb.createAccount(existingAccount);"},{"lineNumber":189,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":190,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.joinCourseForInstructor(key[1], existingAccount.getGoogleId());"},{"lineNumber":191,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":192,"author":{"gitId":"yuanxi1"},"content":" joinedInstructor \u003d usersLogic.getInstructorForEmail("},{"lineNumber":193,"author":{"gitId":"yuanxi1"},"content":" instructor3YetToJoinCourse.getCourseId(), existingAccount.getEmail());"},{"lineNumber":194,"author":{"gitId":"yuanxi1"},"content":" assertEquals(existingAccountId, joinedInstructor.getGoogleId());"},{"lineNumber":195,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":196,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: instructor already joined\");"},{"lineNumber":197,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":198,"author":{"gitId":"yuanxi1"},"content":" eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":199,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor(key[0], loggedInGoogleId));"},{"lineNumber":200,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Instructor has already joined course\", eaee.getMessage());"},{"lineNumber":201,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":202,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: key belongs to a different user\");"},{"lineNumber":203,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":204,"author":{"gitId":"yuanxi1"},"content":" eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":205,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor(key[0], \"otherUserId\"));"},{"lineNumber":206,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Instructor has already joined course\", eaee.getMessage());"},{"lineNumber":207,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":208,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: invalid key\");"},{"lineNumber":209,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":210,"author":{"gitId":"yuanxi1"},"content":" String invalidKey \u003d StringHelper.encrypt(\"invalidKey\");"},{"lineNumber":211,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":212,"author":{"gitId":"yuanxi1"},"content":" EntityDoesNotExistException ednee \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":213,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor(invalidKey, loggedInGoogleId));"},{"lineNumber":214,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"No instructor with given registration key: \" + invalidKey,"},{"lineNumber":215,"author":{"gitId":"yuanxi1"},"content":" ednee.getMessage());"},{"lineNumber":216,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":217,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: course deleted\");"},{"lineNumber":218,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":219,"author":{"gitId":"yuanxi1"},"content":" Course originalCourse \u003d usersLogic.getInstructorForEmail("},{"lineNumber":220,"author":{"gitId":"yuanxi1"},"content":" instructor2YetToJoinCourse.getCourseId(), instructor2YetToJoinCourse.getEmail()).getCourse();"},{"lineNumber":221,"author":{"gitId":"yuanxi1"},"content":" coursesLogic.moveCourseToRecycleBin(originalCourse.getId());"},{"lineNumber":222,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":223,"author":{"gitId":"yuanxi1"},"content":" ednee \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":224,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor(instructor2YetToJoinCourse.getRegKey(),"},{"lineNumber":225,"author":{"gitId":"yuanxi1"},"content":" instructor2YetToJoinCourse.getGoogleId()));"},{"lineNumber":226,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"The course you are trying to join has been deleted by an instructor\", ednee.getMessage());"},{"lineNumber":227,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":228,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":229,"author":{"gitId":"yuanxi1"},"content":" private String getRegKeyForInstructor(String courseId, String email) {"},{"lineNumber":230,"author":{"gitId":"yuanxi1"},"content":" return usersLogic.getInstructorForEmail(courseId, email).getRegKey();"},{"lineNumber":231,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":179,"-":53}},{"path":"src/it/java/teammates/it/sqllogic/core/FeedbackQuestionsLogicIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionType;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextQuestionDetails;"},{"lineNumber":16,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackQuestionsLogic;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackVisibilityType;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.ui.output.NumberOfEntitiesToGiveFeedbackToSetting;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackQuestionUpdateRequest;"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackQuestionsLogic}."},{"lineNumber":30,"author":{"gitId":"-"},"content":" */"},{"lineNumber":31,"author":{"gitId":"-"},"content":"public class FeedbackQuestionsLogicIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic \u003d FeedbackQuestionsLogic.inst();"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private SqlDataBundle typicalDataBundle;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" super.setupClass();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" typicalDataBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":46,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":48,"author":{"gitId":"-"},"content":" persistDataBundle(typicalDataBundle);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":53,"author":{"gitId":"marquestye"},"content":" public void testCreateFeedbackQuestion() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":55,"author":{"gitId":"-"},"content":" FeedbackTextQuestionDetails newQuestionDetails \u003d new FeedbackTextQuestionDetails(\"New question text.\");"},{"lineNumber":56,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showTos \u003d new ArrayList\u003c\u003e();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" showTos.add(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" FeedbackQuestion newQuestion \u003d FeedbackQuestion.makeQuestion(fs, 6, \"This is a new text question\","},{"lineNumber":59,"author":{"gitId":"-"},"content":" FeedbackParticipantType.STUDENTS, FeedbackParticipantType.OWN_TEAM_MEMBERS, -100,"},{"lineNumber":60,"author":{"gitId":"-"},"content":" showTos, showTos, showTos, newQuestionDetails);"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" newQuestion \u003d fqLogic.createFeedbackQuestion(newQuestion);"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" FeedbackQuestion actualQuestion \u003d fqLogic.getFeedbackQuestion(newQuestion.getId());"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" verifyEquals(newQuestion, actualQuestion);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForSession() {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":72,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d typicalDataBundle.feedbackQuestions.get(\"qn2InSession1InCourse1\");"},{"lineNumber":74,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d typicalDataBundle.feedbackQuestions.get(\"qn3InSession1InCourse1\");"},{"lineNumber":75,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d typicalDataBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":76,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d typicalDataBundle.feedbackQuestions.get(\"qn5InSession1InCourse1\");"},{"lineNumber":77,"author":{"gitId":"-"},"content":" FeedbackQuestion fq6 \u003d typicalDataBundle.feedbackQuestions.get(\"qn6InSession1InCourse1NoResponses\");"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2, fq3, fq4, fq5, fq6);"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForSession(fs);"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertTrue(expectedQuestions.containsAll(actualQuestions));"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public void testUpdateFeedbackQuestionCascade() throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":90,"author":{"gitId":"-"},"content":" fq1.setDescription(\"New question description\");"},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackQuestionUpdateRequest updateRequest \u003d generateFeedbackQuestionUpdateRequest("},{"lineNumber":92,"author":{"gitId":"-"},"content":" fq1.getQuestionNumber(),"},{"lineNumber":93,"author":{"gitId":"-"},"content":" fq1.getDescription(),"},{"lineNumber":94,"author":{"gitId":"-"},"content":" fq1.getQuestionDetailsCopy(),"},{"lineNumber":95,"author":{"gitId":"-"},"content":" fq1.getQuestionDetailsCopy().getQuestionType(),"},{"lineNumber":96,"author":{"gitId":"-"},"content":" fq1.getGiverType(),"},{"lineNumber":97,"author":{"gitId":"-"},"content":" fq1.getRecipientType(),"},{"lineNumber":98,"author":{"gitId":"-"},"content":" fq1.getNumOfEntitiesToGiveFeedbackTo(),"},{"lineNumber":99,"author":{"gitId":"-"},"content":" fq1.getShowResponsesTo(),"},{"lineNumber":100,"author":{"gitId":"-"},"content":" fq1.getShowGiverNameTo(),"},{"lineNumber":101,"author":{"gitId":"-"},"content":" fq1.getShowRecipientNameTo()"},{"lineNumber":102,"author":{"gitId":"-"},"content":" );"},{"lineNumber":103,"author":{"gitId":"-"},"content":" updateRequest.setNumberOfEntitiesToGiveFeedbackToSetting(NumberOfEntitiesToGiveFeedbackToSetting.CUSTOM);"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" fqLogic.updateFeedbackQuestionCascade(fq1.getId(), updateRequest);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" FeedbackQuestion actualFeedbackQuestion \u003d fqLogic.getFeedbackQuestion(fq1.getId());"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" verifyEquals(fq1, actualFeedbackQuestion);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" private FeedbackQuestionUpdateRequest generateFeedbackQuestionUpdateRequest("},{"lineNumber":113,"author":{"gitId":"-"},"content":" int questionNumber,"},{"lineNumber":114,"author":{"gitId":"-"},"content":" String questionDescription,"},{"lineNumber":115,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails,"},{"lineNumber":116,"author":{"gitId":"-"},"content":" FeedbackQuestionType questionType,"},{"lineNumber":117,"author":{"gitId":"-"},"content":" FeedbackParticipantType giverType,"},{"lineNumber":118,"author":{"gitId":"-"},"content":" FeedbackParticipantType recipientType,"},{"lineNumber":119,"author":{"gitId":"-"},"content":" Integer customNumberOfEntitiesToGiveFeedbackTo,"},{"lineNumber":120,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":121,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo,"},{"lineNumber":122,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showRecipientNameTo"},{"lineNumber":123,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" FeedbackQuestionUpdateRequest updateRequest \u003d new FeedbackQuestionUpdateRequest();"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" updateRequest.setQuestionNumber(questionNumber);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" updateRequest.setQuestionDescription(questionDescription);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" updateRequest.setQuestionDetails(questionDetails);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" updateRequest.setQuestionType(questionType);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" updateRequest.setGiverType(giverType);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" updateRequest.setRecipientType(recipientType);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" updateRequest.setCustomNumberOfEntitiesToGiveFeedbackTo(customNumberOfEntitiesToGiveFeedbackTo);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" updateRequest.setShowResponsesTo(convertToFeedbackVisibilityType(showResponsesTo));"},{"lineNumber":134,"author":{"gitId":"-"},"content":" updateRequest.setShowGiverNameTo(convertToFeedbackVisibilityType(showGiverNameTo));"},{"lineNumber":135,"author":{"gitId":"-"},"content":" updateRequest.setShowRecipientNameTo(convertToFeedbackVisibilityType(showRecipientNameTo));"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" return updateRequest;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" private List\u003cFeedbackVisibilityType\u003e convertToFeedbackVisibilityType("},{"lineNumber":141,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e feedbackParticipantTypes) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" return feedbackParticipantTypes.stream().map(feedbackParticipantType -\u003e {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" switch (feedbackParticipantType) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":145,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.STUDENTS;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":147,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.INSTRUCTORS;"},{"lineNumber":148,"author":{"gitId":"-"},"content":" case RECEIVER:"},{"lineNumber":149,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.RECIPIENT;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":151,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.GIVER_TEAM_MEMBERS;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" case RECEIVER_TEAM_MEMBERS:"},{"lineNumber":153,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.RECIPIENT_TEAM_MEMBERS;"},{"lineNumber":154,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":155,"author":{"gitId":"-"},"content":" assert false : \"Unknown feedbackParticipantType\" + feedbackParticipantType;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }).collect(Collectors.toList());"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":2,"-":159}},{"path":"src/it/java/teammates/it/storage/sqlapi/AccountRequestsDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountRequestsDb;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * SUT: {@link AccountRequestsDb}."},{"lineNumber":15,"author":{"gitId":"-"},"content":" */"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class AccountRequestsDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":" private final AccountRequestsDb accountRequestDb \u003d AccountRequestsDb.inst();"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public void testCreateReadDeleteAccountRequest() throws Exception {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ______TS(\"Create account request, does not exists, succeeds\");"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":25,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" ______TS(\"Read account request using the given email and institute\");"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" AccountRequest actualAccReqEmalAndInstitute \u003d"},{"lineNumber":30,"author":{"gitId":"-"},"content":" accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":31,"author":{"gitId":"-"},"content":" verifyEquals(accountRequest, actualAccReqEmalAndInstitute);"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" ______TS(\"Read account request using the given registration key\");"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" AccountRequest actualAccReqRegistrationKey \u003d"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" accountRequestDb.getAccountRequestByRegistrationKey(accountRequest.getRegistrationKey());"},{"lineNumber":37,"author":{"gitId":"-"},"content":" verifyEquals(accountRequest, actualAccReqRegistrationKey);"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" ______TS(\"Read account request using the given start and end timing\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" List\u003cAccountRequest\u003e actualAccReqCreatedAt \u003d"},{"lineNumber":42,"author":{"gitId":"-"},"content":" accountRequestDb.getAccountRequests(accountRequest.getCreatedAt(), accountRequest.getCreatedAt());"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(1, actualAccReqCreatedAt.size());"},{"lineNumber":44,"author":{"gitId":"-"},"content":" verifyEquals(accountRequest, actualAccReqCreatedAt.get(0));"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" ______TS(\"Read account request not found using the outside start and end timing\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" List\u003cAccountRequest\u003e actualAccReqCreatedAtOutside \u003d"},{"lineNumber":49,"author":{"gitId":"-"},"content":" accountRequestDb.getAccountRequests("},{"lineNumber":50,"author":{"gitId":"-"},"content":" accountRequest.getCreatedAt().minusMillis(3000),"},{"lineNumber":51,"author":{"gitId":"-"},"content":" accountRequest.getCreatedAt().minusMillis(2000));"},{"lineNumber":52,"author":{"gitId":"-"},"content":" assertEquals(0, actualAccReqCreatedAtOutside.size());"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" ______TS(\"Create acccount request, already exists, execption thrown\");"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" AccountRequest identicalAccountRequest \u003d"},{"lineNumber":57,"author":{"gitId":"-"},"content":" new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertNotSame(accountRequest, identicalAccountRequest);"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" () -\u003e accountRequestDb.createAccountRequest(identicalAccountRequest));"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" ______TS(\"Delete account request that was created\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" accountRequestDb.deleteAccountRequest(accountRequest);"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" AccountRequest actualAccountRequest \u003d"},{"lineNumber":68,"author":{"gitId":"-"},"content":" accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":69,"author":{"gitId":"-"},"content":" assertNull(actualAccountRequest);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void testUpdateAccountRequest() throws Exception {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" ______TS(\"Update account request, does not exists, exception thrown\");"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":79,"author":{"gitId":"-"},"content":" () -\u003e accountRequestDb.updateAccountRequest(accountRequest));"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" ______TS(\"Update account request, already exists, update successful\");"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" accountRequest.setName(\"new account request name\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" accountRequestDb.updateAccountRequest(accountRequest);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest("},{"lineNumber":88,"author":{"gitId":"-"},"content":" accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":89,"author":{"gitId":"-"},"content":" verifyEquals(accountRequest, actual);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateAccountRequestEmailField() throws Exception {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in email field\");"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in email field"},{"lineNumber":97,"author":{"gitId":"-"},"content":" String email \u003d \"email\u0027/**/OR/**/1\u003d1/**/@gmail.com\";"},{"lineNumber":98,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(email, \"name\", \"institute\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":101,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":103,"author":{"gitId":"-"},"content":" assertEquals(email, actual.getEmail());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateAccountRequestNameField() throws Exception {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in name field\");"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in name field"},{"lineNumber":111,"author":{"gitId":"-"},"content":" String name \u003d \"name\u0027; SELECT * FROM account_requests; --\";"},{"lineNumber":112,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", name, \"institute\");"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":115,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertEquals(name, actual.getName());"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateAccountRequestInstituteField() throws Exception {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in institute field\");"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in institute field"},{"lineNumber":125,"author":{"gitId":"-"},"content":" String institute \u003d \"institute\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":126,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", institute);"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":129,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), institute);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertEquals(institute, actual.getInstitute());"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetAccountRequest() throws Exception {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getAccountRequest\");"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":139,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" String instituteInjection \u003d \"institute\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":142,"author":{"gitId":"-"},"content":" AccountRequest actualInjection \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), instituteInjection);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" assertNull(actualInjection);"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":150,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetAccountRequestByRegistrationKey() throws Exception {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getAccountRequestByRegistrationKey\");"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":154,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" String regKeyInjection \u003d \"regKey\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":157,"author":{"gitId":"-"},"content":" AccountRequest actualInjection \u003d accountRequestDb.getAccountRequestByRegistrationKey(regKeyInjection);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" assertNull(actualInjection);"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequestByRegistrationKey(accountRequest.getRegistrationKey());"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":165,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateAccountRequest() throws Exception {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in updateAccountRequest\");"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":169,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" String nameInjection \u003d \"newName\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":172,"author":{"gitId":"-"},"content":" accountRequest.setName(nameInjection);"},{"lineNumber":173,"author":{"gitId":"-"},"content":" accountRequestDb.updateAccountRequest(accountRequest);"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":176,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":180,"author":{"gitId":"-"},"content":" public void testSqlInjectionInDeleteAccountRequest() throws Exception {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in deleteAccountRequest\");"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":184,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" String emailInjection \u003d \"email\u0027/**/OR/**/1\u003d1/**/@gmail.com\";"},{"lineNumber":187,"author":{"gitId":"-"},"content":" String nameInjection \u003d \"name\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":188,"author":{"gitId":"-"},"content":" String instituteInjection \u003d \"institute\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":189,"author":{"gitId":"-"},"content":" AccountRequest accountRequestInjection \u003d new AccountRequest(emailInjection, nameInjection, instituteInjection);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" accountRequestDb.deleteAccountRequest(accountRequestInjection);"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":197,"author":{"gitId":"-"},"content":" public void testSqlInjectionSearchAccountRequestsInWholeSystem() throws Exception {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in searchAccountRequestsInWholeSystem\");"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":201,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" String searchInjection \u003d \"institute\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":204,"author":{"gitId":"-"},"content":" List\u003cAccountRequest\u003e actualInjection \u003d accountRequestDb.searchAccountRequestsInWholeSystem(searchInjection);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" assertEquals(0, actualInjection.size());"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(\"test@gmail.com\", \"institute\");"},{"lineNumber":208,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":1,"-":209}},{"path":"src/it/java/teammates/it/storage/sqlapi/CoursesDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.CoursesDb;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * SUT: {@link CoursesDb}."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class CoursesDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final CoursesDb coursesDb \u003d CoursesDb.inst();"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" public void testGetCourse() throws Exception {"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: get course that does not exist\");"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" Course actual \u003d coursesDb.getCourse(\"non-existent-course-id\");"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" assertNull(actual);"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null assertion exception thrown\");"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getCourse(null));"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: get course that already exists\");"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" Course expected \u003d getTypicalCourse();"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(expected);"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" actual \u003d coursesDb.getCourse(expected.getId());"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" verifyEquals(expected, actual);"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public void testCreateCourse() throws Exception {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" ______TS(\"success: create course that does not exist\");"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":45,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" Course actualCourse \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":" verifyEquals(course, actualCourse);"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null course assertion exception thrown\");"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.createCourse(null));"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: invalid course details\");"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" Course invalidCourse \u003d new Course(\"course-id\", \"!@#!@#\", \"Asia/Singapore\", \"institute\");"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" assertThrows(InvalidParametersException.class, () -\u003e coursesDb.createCourse(invalidCourse));"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" ______TS(\"failure: create course that already exist, execption thrown\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Course identicalCourse \u003d getTypicalCourse();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertNotSame(course, identicalCourse);"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertThrows(EntityAlreadyExistsException.class, () -\u003e coursesDb.createCourse(identicalCourse));"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public void testUpdateCourse() throws Exception {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" ______TS(\"failure: update course that does not exist, exception thrown\");"},{"lineNumber":66,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertThrows(EntityDoesNotExistException.class, () -\u003e coursesDb.updateCourse(course));"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null course assertion exception thrown\");"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.updateCourse(null));"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: update course that already exists\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" course.setName(\"new course name\");"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" coursesDb.updateCourse(course);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" Course actual \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":78,"author":{"gitId":"-"},"content":" verifyEquals(course, actual);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" ______TS(\"success: update detached course that already exists\");"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" // same id, different name"},{"lineNumber":83,"author":{"gitId":"-"},"content":" Course detachedCourse \u003d getTypicalCourse();"},{"lineNumber":84,"author":{"gitId":"-"},"content":" detachedCourse.setName(\"different-name\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" coursesDb.updateCourse(detachedCourse);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" verifyEquals(course, detachedCourse);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" public void testDeleteCourse() throws Exception {"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: delete course that already exists\");"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" coursesDb.deleteCourse(course);"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" Course actualCourse \u003d coursesDb.getCourse(course.getId());"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":" assertNull(actualCourse);"},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":" public void testCreateSection() throws Exception {"},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: create section that does not exist\");"},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":" coursesDb.createSection(section);"},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" Section actualSection \u003d coursesDb.getSectionByName(course.getId(), section.getName());"},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" verifyEquals(section, actualSection);"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null section assertion exception thrown\");"},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.createSection(null));"},{"lineNumber":114,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: invalid section details\");"},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":" Section invalidSection \u003d new Section(course, null);"},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" assertThrows(InvalidParametersException.class, () -\u003e coursesDb.createSection(invalidSection));"},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: create section that already exist, execption thrown\");"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":" assertThrows(EntityAlreadyExistsException.class, () -\u003e coursesDb.createSection(section));"},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" public void testGetSectionByName() throws Exception {"},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" coursesDb.createSection(section);"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null courseId assertion exception thrown\");"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getSectionByName(null, section.getName()));"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null sectionName assertion exception thrown\");"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getSectionByName(course.getId(), null));"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: get section that already exists\");"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":" Section actualSection \u003d coursesDb.getSectionByName(course.getId(), section.getName());"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" verifyEquals(section, actualSection);"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: get section that does not exist\");"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" Section nonExistentSection \u003d coursesDb.getSectionByName(course.getId(), \"non-existent-section-name\");"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" assertNull(nonExistentSection);"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":146,"author":{"gitId":"-"},"content":" public void testGetSectionByCourseIdAndTeam() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":148,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":149,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":151,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null courseId assertion exception thrown\");"},{"lineNumber":155,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getSectionByCourseIdAndTeam(null, team.getName()));"},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":157,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null teamName assertion exception thrown\");"},{"lineNumber":158,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getSectionByCourseIdAndTeam(course.getId(), null));"},{"lineNumber":159,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Section actualSection \u003d coursesDb.getSectionByCourseIdAndTeam(course.getId(), team.getName());"},{"lineNumber":162,"author":{"gitId":"-"},"content":" verifyEquals(section, actualSection);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public void testGetTeamsForSection() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":168,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":169,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":170,"author":{"gitId":"-"},"content":" Team team1 \u003d new Team(section, \"team-name1\");"},{"lineNumber":171,"author":{"gitId":"-"},"content":" section.addTeam(team1);"},{"lineNumber":172,"author":{"gitId":"-"},"content":" Team team2 \u003d new Team(section, \"team-name2\");"},{"lineNumber":173,"author":{"gitId":"-"},"content":" section.addTeam(team2);"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e expectedTeams \u003d List.of(team1, team2);"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null section assertion exception thrown\");"},{"lineNumber":180,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getTeamsForSection(null));"},{"lineNumber":181,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":183,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actualTeams \u003d coursesDb.getTeamsForSection(section);"},{"lineNumber":184,"author":{"gitId":"-"},"content":" assertEquals(expectedTeams.size(), actualTeams.size());"},{"lineNumber":185,"author":{"gitId":"-"},"content":" assertTrue(expectedTeams.containsAll(actualTeams));"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":189,"author":{"gitId":"domoberzin"},"content":" public void testDeleteSectionsByCourseId() throws Exception {"},{"lineNumber":190,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":191,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":192,"author":{"gitId":"domoberzin"},"content":" List\u003cSection\u003e expectedSections \u003d new ArrayList\u003c\u003e();"},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" for (int i \u003d 0; i \u003c 5; i++) {"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" Section newSection \u003d new Section(course, \"section-name\" + i);"},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" expectedSections.add(newSection);"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":" course.addSection(newSection);"},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":" assertNotNull(coursesDb.getSectionByName(course.getId(), newSection.getName()));"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":200,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: delete sections by course id\");"},{"lineNumber":201,"author":{"gitId":"domoberzin"},"content":" coursesDb.deleteSectionsByCourseId(course.getId());"},{"lineNumber":202,"author":{"gitId":"domoberzin"},"content":" for (Section section : expectedSections) {"},{"lineNumber":203,"author":{"gitId":"domoberzin"},"content":" Section actualSection \u003d coursesDb.getSectionByName(course.getId(), section.getName());"},{"lineNumber":204,"author":{"gitId":"domoberzin"},"content":" assertNull(actualSection);"},{"lineNumber":205,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":206,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":207,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":209,"author":{"gitId":"-"},"content":" public void testGetTeamsForCourse() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" Section section1 \u003d new Section(course, \"section-name1\");"},{"lineNumber":213,"author":{"gitId":"-"},"content":" course.addSection(section1);"},{"lineNumber":214,"author":{"gitId":"-"},"content":" Team team1 \u003d new Team(section1, \"team-name1\");"},{"lineNumber":215,"author":{"gitId":"-"},"content":" section1.addTeam(team1);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" Team team2 \u003d new Team(section1, \"team-name2\");"},{"lineNumber":217,"author":{"gitId":"-"},"content":" section1.addTeam(team2);"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" Section section2 \u003d new Section(course, \"section-name2\");"},{"lineNumber":220,"author":{"gitId":"-"},"content":" course.addSection(section2);"},{"lineNumber":221,"author":{"gitId":"-"},"content":" Team team3 \u003d new Team(section2, \"team-name3\");"},{"lineNumber":222,"author":{"gitId":"-"},"content":" section2.addTeam(team3);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" Team team4 \u003d new Team(section2, \"team-name4\");"},{"lineNumber":224,"author":{"gitId":"-"},"content":" section2.addTeam(team4);"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e expectedTeams \u003d List.of(team1, team2, team3, team4);"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null courseId assertion exception thrown\");"},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getTeamsForCourse(null));"},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":234,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actualTeams \u003d coursesDb.getTeamsForCourse(course.getId());"},{"lineNumber":235,"author":{"gitId":"-"},"content":" assertEquals(expectedTeams.size(), actualTeams.size());"},{"lineNumber":236,"author":{"gitId":"-"},"content":" assertTrue(expectedTeams.containsAll(actualTeams));"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":239,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":240,"author":{"gitId":"domoberzin"},"content":" public void testCreateTeam() throws Exception {"},{"lineNumber":241,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":242,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":243,"author":{"gitId":"domoberzin"},"content":" Team team \u003d new Team(section, \"team-name1\");"},{"lineNumber":244,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":245,"author":{"gitId":"domoberzin"},"content":" coursesDb.createSection(section);"},{"lineNumber":246,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":247,"author":{"gitId":"domoberzin"},"content":" assertNotNull(coursesDb.getSectionByName(course.getId(), section.getName()));"},{"lineNumber":248,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":249,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null team assertion exception thrown\");"},{"lineNumber":250,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.createTeam(null));"},{"lineNumber":251,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":252,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: create team that does not exist\");"},{"lineNumber":253,"author":{"gitId":"domoberzin"},"content":" coursesDb.createTeam(team);"},{"lineNumber":254,"author":{"gitId":"domoberzin"},"content":" Team actualTeam \u003d coursesDb.getTeamByName(section.getId(), team.getName());"},{"lineNumber":255,"author":{"gitId":"domoberzin"},"content":" verifyEquals(team, actualTeam);"},{"lineNumber":256,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":257,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: invalid team details\");"},{"lineNumber":258,"author":{"gitId":"domoberzin"},"content":" Team invalidTeam \u003d new Team(section, null);"},{"lineNumber":259,"author":{"gitId":"domoberzin"},"content":" assertThrows(InvalidParametersException.class, () -\u003e coursesDb.createTeam(invalidTeam));"},{"lineNumber":260,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":261,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: create team that already exist, execption thrown\");"},{"lineNumber":262,"author":{"gitId":"domoberzin"},"content":" assertThrows(EntityAlreadyExistsException.class, () -\u003e coursesDb.createTeam(team));"},{"lineNumber":263,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":264,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":265,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":266,"author":{"gitId":"domoberzin"},"content":" public void testGetTeamByName() throws Exception {"},{"lineNumber":267,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":268,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":269,"author":{"gitId":"domoberzin"},"content":" Team team \u003d new Team(section, \"team-name1\");"},{"lineNumber":270,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":271,"author":{"gitId":"domoberzin"},"content":" coursesDb.createSection(section);"},{"lineNumber":272,"author":{"gitId":"domoberzin"},"content":" coursesDb.createTeam(team);"},{"lineNumber":273,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":274,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: get team that already exists\");"},{"lineNumber":275,"author":{"gitId":"domoberzin"},"content":" Team actualTeam \u003d coursesDb.getTeamByName(section.getId(), team.getName());"},{"lineNumber":276,"author":{"gitId":"domoberzin"},"content":" verifyEquals(team, actualTeam);"},{"lineNumber":277,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":278,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null sectionId assertion exception thrown\");"},{"lineNumber":279,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getTeamByName(null, team.getName()));"},{"lineNumber":280,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":281,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null teamName assertion exception thrown\");"},{"lineNumber":282,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getTeamByName(section.getId(), null));"},{"lineNumber":283,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":284,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: null return\");"},{"lineNumber":285,"author":{"gitId":"domoberzin"},"content":" Team nonExistentTeam \u003d coursesDb.getTeamByName(section.getId(), \"non-existent-team-name\");"},{"lineNumber":286,"author":{"gitId":"domoberzin"},"content":" assertNull(nonExistentTeam);"},{"lineNumber":287,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":290,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateCourse() throws Exception {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in createCourse\");"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in name field"},{"lineNumber":294,"author":{"gitId":"-"},"content":" String courseName \u003d \"test\u0027; DROP TABLE courses; --\";"},{"lineNumber":295,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", courseName, \"UTC\", \"teammates\");"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":298,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":299,"author":{"gitId":"-"},"content":" Course actual \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":300,"author":{"gitId":"-"},"content":" assertEquals(courseName, actual.getName());"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":304,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetCourse() throws Exception {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getCourse\");"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"teammates\");"},{"lineNumber":308,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in courseId field"},{"lineNumber":311,"author":{"gitId":"-"},"content":" String courseId \u003d \"test\u0027 OR 1 \u003d 1; --\";"},{"lineNumber":312,"author":{"gitId":"-"},"content":" Course actual \u003d coursesDb.getCourse(courseId);"},{"lineNumber":313,"author":{"gitId":"-"},"content":" assertEquals(null, actual);"},{"lineNumber":314,"author":{"gitId":"-"},"content":" }"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":317,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateCourse() throws Exception {"},{"lineNumber":318,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in updateCourse\");"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"name\", \"UTC\", \"institute\");"},{"lineNumber":321,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":324,"author":{"gitId":"-"},"content":" String newName \u003d \"newName\u0027; DROP TABLE courses; --\";"},{"lineNumber":325,"author":{"gitId":"-"},"content":" course.setName(newName);"},{"lineNumber":326,"author":{"gitId":"-"},"content":" coursesDb.updateCourse(course);"},{"lineNumber":327,"author":{"gitId":"-"},"content":" Course actual \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":328,"author":{"gitId":"-"},"content":" assertEquals(newName, actual.getName());"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":""},{"lineNumber":331,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":332,"author":{"gitId":"-"},"content":" public void testSqlInjectionInDeleteCourse() throws Exception {"},{"lineNumber":333,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in deleteCourse\");"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"name\", \"UTC\", \"institute\");"},{"lineNumber":336,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" String name \u003d \"newName\u0027; DELETE FROM courses; --\";"},{"lineNumber":339,"author":{"gitId":"-"},"content":" Course injectionCourse \u003d new Course(\"course-id-injection\", name, \"UTC\", \"institute\");"},{"lineNumber":340,"author":{"gitId":"-"},"content":" coursesDb.createCourse(injectionCourse);"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":" coursesDb.deleteCourse(injectionCourse);"},{"lineNumber":343,"author":{"gitId":"-"},"content":" Course actualInjectionCourse \u003d coursesDb.getCourse(\"course-id-injection\");"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":" // The course should be deleted"},{"lineNumber":346,"author":{"gitId":"-"},"content":" assertEquals(null, actualInjectionCourse);"},{"lineNumber":347,"author":{"gitId":"-"},"content":""},{"lineNumber":348,"author":{"gitId":"-"},"content":" // All other courses should not be deleted"},{"lineNumber":349,"author":{"gitId":"-"},"content":" Course actualCourse \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":350,"author":{"gitId":"-"},"content":" assertEquals(course, actualCourse);"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":354,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateSection() throws Exception {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in createSection\");"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in sectionName fields"},{"lineNumber":358,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"name\", \"UTC\", \"institute\");"},{"lineNumber":359,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":360,"author":{"gitId":"-"},"content":" String sectionName \u003d \"section\u0027; DROP TABLE courses; --\";"},{"lineNumber":361,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, sectionName);"},{"lineNumber":362,"author":{"gitId":"-"},"content":""},{"lineNumber":363,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":364,"author":{"gitId":"-"},"content":" coursesDb.createSection(section);"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" // Check that we are still able to get courses"},{"lineNumber":367,"author":{"gitId":"-"},"content":" Course actualCourse \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":368,"author":{"gitId":"-"},"content":" assertEquals(course, actualCourse);"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":""},{"lineNumber":371,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":372,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetSectionByName() throws Exception {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getSectionByName\");"},{"lineNumber":374,"author":{"gitId":"-"},"content":""},{"lineNumber":375,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":376,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":377,"author":{"gitId":"-"},"content":" String sectionName \u003d \"section-name\";"},{"lineNumber":378,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, sectionName);"},{"lineNumber":379,"author":{"gitId":"-"},"content":""},{"lineNumber":380,"author":{"gitId":"-"},"content":" coursesDb.createSection(section);"},{"lineNumber":381,"author":{"gitId":"-"},"content":" Section actual \u003d coursesDb.getSectionByName(\"course-id\", \"section-name\u0027; DROP TABLE courses; --\");"},{"lineNumber":382,"author":{"gitId":"-"},"content":" assertEquals(null, actual);"},{"lineNumber":383,"author":{"gitId":"-"},"content":" Section actualSection \u003d coursesDb.getSectionByName(\"course-id\", sectionName);"},{"lineNumber":384,"author":{"gitId":"-"},"content":" assertEquals(sectionName, actualSection.getName());"},{"lineNumber":385,"author":{"gitId":"-"},"content":" }"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":388,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetSectionByCourseIdAndTeam() throws Exception {"},{"lineNumber":389,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getSectionByCourseIdAndTeam\");"},{"lineNumber":390,"author":{"gitId":"-"},"content":""},{"lineNumber":391,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":392,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":393,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":394,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":395,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":396,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":397,"author":{"gitId":"-"},"content":""},{"lineNumber":398,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":399,"author":{"gitId":"-"},"content":" String teamNameInjection \u003d \"team-name\u0027; DROP TABLE courses; --\";"},{"lineNumber":400,"author":{"gitId":"-"},"content":" Section actual \u003d coursesDb.getSectionByCourseIdAndTeam(\"course-id\", teamNameInjection);"},{"lineNumber":401,"author":{"gitId":"-"},"content":" assertEquals(null, actual);"},{"lineNumber":402,"author":{"gitId":"-"},"content":" Section actualSection \u003d coursesDb.getSectionByCourseIdAndTeam(\"course-id\", \"team-name\");"},{"lineNumber":403,"author":{"gitId":"-"},"content":" assertEquals(\"team-name\", actualSection.getTeams().get(0).getName());"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":407,"author":{"gitId":"-"},"content":" public void testSqlInjectionInDeleteSectionsByCourseId() throws Exception {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in deleteSectionsByCourseId\");"},{"lineNumber":409,"author":{"gitId":"-"},"content":""},{"lineNumber":410,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"name\", \"UTC\", \"institute\");"},{"lineNumber":411,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":412,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":413,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":414,"author":{"gitId":"-"},"content":""},{"lineNumber":415,"author":{"gitId":"-"},"content":" String courseId \u003d \"course-id\u0027; DELETE FROM courses; --\";"},{"lineNumber":416,"author":{"gitId":"-"},"content":" coursesDb.deleteSectionsByCourseId(courseId);"},{"lineNumber":417,"author":{"gitId":"-"},"content":""},{"lineNumber":418,"author":{"gitId":"-"},"content":" // The sections should not be deleted"},{"lineNumber":419,"author":{"gitId":"-"},"content":" Section actualSection \u003d coursesDb.getSectionByName(\"course-id\", \"section-name\");"},{"lineNumber":420,"author":{"gitId":"-"},"content":" assertEquals(section, actualSection);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" }"},{"lineNumber":422,"author":{"gitId":"-"},"content":""},{"lineNumber":423,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":424,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetTeamsForSection() throws Exception {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getTeamsForSection\");"},{"lineNumber":426,"author":{"gitId":"-"},"content":""},{"lineNumber":427,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":428,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":429,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":430,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":431,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":432,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":433,"author":{"gitId":"-"},"content":""},{"lineNumber":434,"author":{"gitId":"-"},"content":" String sectionName \u003d \"section-name\u0027 OR 1 \u003d 1; --\";"},{"lineNumber":435,"author":{"gitId":"-"},"content":" Section sectionInjection \u003d new Section(course, sectionName);"},{"lineNumber":436,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actual \u003d coursesDb.getTeamsForSection(sectionInjection);"},{"lineNumber":437,"author":{"gitId":"-"},"content":" assertEquals(0, actual.size());"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":""},{"lineNumber":440,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":441,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetTeamsForCourse() throws Exception {"},{"lineNumber":442,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getTeamsForCourse\");"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":445,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":446,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":447,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":448,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":449,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":" String courseId \u003d \"course-id\u0027 OR 1 \u003d 1; --\";"},{"lineNumber":452,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actual \u003d coursesDb.getTeamsForCourse(courseId);"},{"lineNumber":453,"author":{"gitId":"-"},"content":" assertEquals(0, actual.size());"},{"lineNumber":454,"author":{"gitId":"-"},"content":" }"},{"lineNumber":455,"author":{"gitId":"-"},"content":""},{"lineNumber":456,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":457,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateTeam() throws Exception {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in createTeam\");"},{"lineNumber":459,"author":{"gitId":"-"},"content":""},{"lineNumber":460,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":461,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":462,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":463,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":464,"author":{"gitId":"-"},"content":""},{"lineNumber":465,"author":{"gitId":"-"},"content":" String teamName \u003d \"team\u0027; DROP TABLE courses; --\";"},{"lineNumber":466,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, teamName);"},{"lineNumber":467,"author":{"gitId":"-"},"content":" coursesDb.createTeam(team);"},{"lineNumber":468,"author":{"gitId":"-"},"content":""},{"lineNumber":469,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actual \u003d coursesDb.getTeamsForSection(section);"},{"lineNumber":470,"author":{"gitId":"-"},"content":" assertEquals(1, actual.size());"},{"lineNumber":471,"author":{"gitId":"-"},"content":" assertEquals(teamName, actual.get(0).getName());"},{"lineNumber":472,"author":{"gitId":"-"},"content":" }"},{"lineNumber":473,"author":{"gitId":"-"},"content":""},{"lineNumber":474,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":475,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetTeamByName() throws Exception {"},{"lineNumber":476,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getTeamByName\");"},{"lineNumber":477,"author":{"gitId":"-"},"content":""},{"lineNumber":478,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":479,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":480,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":481,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":482,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":484,"author":{"gitId":"-"},"content":""},{"lineNumber":485,"author":{"gitId":"-"},"content":" String teamName \u003d \"team-name\u0027; DROP TABLE courses; --\";"},{"lineNumber":486,"author":{"gitId":"-"},"content":" Team actual \u003d coursesDb.getTeamByName(section.getId(), teamName);"},{"lineNumber":487,"author":{"gitId":"-"},"content":" assertEquals(null, actual);"},{"lineNumber":488,"author":{"gitId":"-"},"content":" Team actualTeam \u003d coursesDb.getTeamByName(section.getId(), \"team-name\");"},{"lineNumber":489,"author":{"gitId":"-"},"content":" assertEquals(team, actualTeam);"},{"lineNumber":490,"author":{"gitId":"-"},"content":" }"},{"lineNumber":491,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":165,"-":326}},{"path":"src/it/java/teammates/it/storage/sqlapi/FeedbackQuestionsDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import java.util.UUID;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackQuestionsDb;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackQuestionsDb}."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class FeedbackQuestionsDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" private final FeedbackQuestionsDb fqDb \u003d FeedbackQuestionsDb.inst();"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" private SqlDataBundle typicalDataBundle;"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" super.setupClass();"},{"lineNumber":34,"author":{"gitId":"-"},"content":" typicalDataBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":39,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" persistDataBundle(typicalDataBundle);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" public void testGetFeedbackQuestion() {"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion expectedFq \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion actualFq \u003d fqDb.getFeedbackQuestion(expectedFq.getId());"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" assertEquals(expectedFq, actualFq);"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: does not exist, returns null\");"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":" actualFq \u003d fqDb.getFeedbackQuestion(UUID.randomUUID());"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" assertNull(actualFq);"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: null parameter, assertion error\");"},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" assertThrows(AssertionError.class, () -\u003e fqDb.getFeedbackQuestion(null));"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" public void testCreateFeedbackQuestion() throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion expectedFq \u003d getTypicalFeedbackQuestionForSession("},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":" getTypicalFeedbackSessionForCourse(getTypicalCourse()));"},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" fqDb.createFeedbackQuestion(expectedFq);"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(expectedFq);"},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: duplicate question, throws error\");"},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityAlreadyExistsException.class, () -\u003e fqDb.createFeedbackQuestion(expectedFq));"},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: invalid question, throws error\");"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion invalidFq \u003d getTypicalFeedbackQuestionForSession("},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" getTypicalFeedbackSessionForCourse(getTypicalCourse()));"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" invalidFq.setGiverType(FeedbackParticipantType.RECEIVER);"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" assertThrows(InvalidParametersException.class, () -\u003e fqDb.createFeedbackQuestion(invalidFq));"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" assertNull(fqDb.getFeedbackQuestion(invalidFq.getId()));"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: null parameter, assertion error\");"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" assertThrows(AssertionError.class, () -\u003e fqDb.createFeedbackQuestion(null));"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForSession() {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":89,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":90,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d typicalDataBundle.feedbackQuestions.get(\"qn2InSession1InCourse1\");"},{"lineNumber":92,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d typicalDataBundle.feedbackQuestions.get(\"qn3InSession1InCourse1\");"},{"lineNumber":93,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d typicalDataBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":94,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d typicalDataBundle.feedbackQuestions.get(\"qn5InSession1InCourse1\");"},{"lineNumber":95,"author":{"gitId":"-"},"content":" FeedbackQuestion fq6 \u003d typicalDataBundle.feedbackQuestions.get(\"qn6InSession1InCourse1NoResponses\");"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2, fq3, fq4, fq5, fq6);"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqDb.getFeedbackQuestionsForSession(fs.getId());"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertTrue(expectedQuestions.containsAll(actualQuestions));"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: session does not exist, returns no questions\");"},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":" actualQuestions \u003d fqDb.getFeedbackQuestionsForSession(UUID.randomUUID());"},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":" assertEquals(0, actualQuestions.size());"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForGiverType() {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":112,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":114,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d typicalDataBundle.feedbackQuestions.get(\"qn2InSession1InCourse1\");"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2);"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.STUDENTS);"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertTrue(expectedQuestions.containsAll(actualQuestions));"},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: session does not exist, returns no questions\");"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":" fs \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" actualQuestions \u003d fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.STUDENTS);"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" assertEquals(0, actualQuestions.size());"},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" public void testDeleteFeedbackQuestion() {"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion fq \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(fq);"},{"lineNumber":134,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" fqDb.deleteFeedbackQuestion(fq.getId());"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":" assertNull(fqDb.getFeedbackQuestion(fq.getId()));"},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: null parameter, assertion error\");"},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" assertThrows(AssertionError.class, () -\u003e fqDb.deleteFeedbackQuestion(null));"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":143,"author":{"gitId":"-"},"content":" public void testHasFeedbackQuestionsForGiverType() {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" Course course \u003d typicalDataBundle.courses.get(\"course1\");"},{"lineNumber":146,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" boolean actual \u003d fqDb.hasFeedbackQuestionsForGiverType("},{"lineNumber":149,"author":{"gitId":"-"},"content":" fs.getName(), course.getId(), FeedbackParticipantType.STUDENTS);"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":152,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":153,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: session/course does not exist, returns false\");"},{"lineNumber":154,"author":{"gitId":"dishenggg"},"content":" actual \u003d fqDb.hasFeedbackQuestionsForGiverType(\"session-name\", \"course-id\", FeedbackParticipantType.STUDENTS);"},{"lineNumber":155,"author":{"gitId":"dishenggg"},"content":" assertFalse(actual);"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":70,"-":87}},{"path":"src/it/java/teammates/it/storage/sqlapi/FeedbackResponseCommentsDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import java.util.UUID;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackResponseCommentsDb}."},{"lineNumber":28,"author":{"gitId":"-"},"content":" */"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public class FeedbackResponseCommentsDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private final FeedbackResponseCommentsDb frcDb \u003d FeedbackResponseCommentsDb.inst();"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" private SqlDataBundle testDataBundle;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" super.setupClass();"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" testDataBundle \u003d loadSqlDataBundle(\"/FeedbackResponsesITBundle.json\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":44,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" persistDataBundle(testDataBundle);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" HibernateUtil.clearSession();"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public void testGetFeedbackResponseCommentForResponseFromParticipant() {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment expectedComment \u003d testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":" FeedbackResponseComment actualComment \u003d frcDb.getFeedbackResponseCommentForResponseFromParticipant(fr.getId());"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" assertEquals(expectedComment, actualComment);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" private FeedbackResponseComment prepareSqlInjectionTest() {"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment frc \u003d testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertNotNull(frcDb.getFeedbackResponseComment(frc.getId()));"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" return frc;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" private void checkSqlInjectionFailed(FeedbackResponseComment frc) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertNotNull(frcDb.getFeedbackResponseComment(frc.getId()));"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateGiverEmailOfFeedbackResponseComments() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d prepareSqlInjectionTest();"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027; DELETE FROM feedback_response_comments;--\";"},{"lineNumber":78,"author":{"gitId":"-"},"content":" frcDb.updateGiverEmailOfFeedbackResponseComments(sqli, \"\", \"\");"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" checkSqlInjectionFailed(frc);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateLastEditorEmailOfFeedbackResponseComments() {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d prepareSqlInjectionTest();"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027; DELETE FROM feedback_response_comments;--\";"},{"lineNumber":88,"author":{"gitId":"-"},"content":" frcDb.updateLastEditorEmailOfFeedbackResponseComments(sqli, \"\", \"\");"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" checkSqlInjectionFailed(frc);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":94,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateFeedbackResponseComment() throws Exception {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d prepareSqlInjectionTest();"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" Section s \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027\u0027);/**/DELETE/**/FROM/**/feedback_response_comments;--@gmail.com\";"},{"lineNumber":101,"author":{"gitId":"-"},"content":" FeedbackResponseComment newFrc \u003d new FeedbackResponseComment("},{"lineNumber":102,"author":{"gitId":"-"},"content":" fr, \"\", FeedbackParticipantType.INSTRUCTORS, s, s, \"\","},{"lineNumber":103,"author":{"gitId":"-"},"content":" false, false,"},{"lineNumber":104,"author":{"gitId":"-"},"content":" new ArrayList\u003cFeedbackParticipantType\u003e(), new ArrayList\u003cFeedbackParticipantType\u003e(), sqli);"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" frcDb.createFeedbackResponseComment(newFrc);"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" checkSqlInjectionFailed(frc);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateFeedbackResponseComment() throws Exception {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d prepareSqlInjectionTest();"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027\u0027);/**/DELETE/**/FROM/**/feedback_response_comments;--@gmail.com\";"},{"lineNumber":116,"author":{"gitId":"-"},"content":" frc.setLastEditorEmail(sqli);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" frcDb.updateFeedbackResponseComment(frc);"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" checkSqlInjectionFailed(frc);"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForSession_matchFound_success() {"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session with comments\");"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" FeedbackSession sessionWithComments \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e expected \u003d List.of("},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\"),"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse1ForQ1\"),"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse2ForQ1\"),"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ2s\"),"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ3\"),"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForSession("},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" course.getId(), sessionWithComments.getName());"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForSession_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" FeedbackSession session \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":" ______TS(\"Course not found\");"},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForSession(\"not_exist\", session.getName());"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session not found\");"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSession(course.getId(), \"Nonexistent session\");"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session without comments\");"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" FeedbackSession sessionWithoutComments \u003d testDataBundle.feedbackSessions.get(\"ongoingSession1InCourse1\");"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSession(course.getId(), sessionWithoutComments.getName());"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForQuestion_matchFound_success() {"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question with comments\");"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion questionWithComments \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e expectedComments \u003d List.of("},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\"),"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse1ForQ1\"),"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse2ForQ1\"),"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForQuestion(questionWithComments.getId());"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expectedComments, results);"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForQuestion_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question not found\");"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" UUID nonexistentQuestionId \u003d UUID.fromString(\"11110000-0000-0000-0000-000000000000\");"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForQuestion(nonexistentQuestionId);"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question without comments\");"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion questionWithoutComments \u003d testDataBundle.feedbackQuestions.get(\"qn5InSession1InCourse1\");"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestion(questionWithoutComments.getId());"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForSessionInSection_matchFound_success()"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" FeedbackSession session1 \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" FeedbackSession session2 \u003d testDataBundle.feedbackSessions.get(\"session2InTypicalCourse\");"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 1 Session 2 match\");"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e expected \u003d List.of("},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1InSession2\")"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" course.getId(), session2.getName(), section1.getName());"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 2 Session 1 match\");"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" course.getId(), session1.getName(), section2.getName());"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForSessionInSection_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" FeedbackSession session1 \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" FeedbackSession session2 \u003d testDataBundle.feedbackSessions.get(\"session2InTypicalCourse\");"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" ______TS(\"Course not found\");"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" \"not_exist\", session1.getName(), section1.getName());"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session not found\");"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" course.getId(), \"Nonexistent session\", section1.getName());"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section not found\");"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" course.getId(), session1.getName(), \"Nonexistent section\");"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching comments exist\");"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":" course.getId(), session2.getName(), section2.getName());"},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForQuestionInSection_matchFound_success() {"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question1 \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question2 \u003d testDataBundle.feedbackQuestions.get(\"qn2InSession1InCourse1\");"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 1 Question 1 match\");"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e expected \u003d List.of("},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\"),"},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse1ForQ1\"),"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse2ForQ1\"),"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" question1.getId(), section1.getName());"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 2 Question 1 match\");"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" question1.getId(), section2.getName());"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 1 Question 2 match\");"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ2s\")"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" question2.getId(), section1.getName());"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForQuestionInSection_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" Section section \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question1 \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question2 \u003d testDataBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question not found\");"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" UUID nonexistentQuestionId \u003d UUID.fromString(\"11110000-0000-0000-0000-000000000000\");"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" nonexistentQuestionId, section.getName());"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section not found\");"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection(question1.getId(), \"Nonexistent section\");"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching comments exist\");"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection(question2.getId(), section.getName());"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" private void assertListCommentsEqual(List\u003cFeedbackResponseComment\u003e expected, List\u003cFeedbackResponseComment\u003e actual) {"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" assertTrue("},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" String.format(\"List contents are not equal.%nExpected: %s,%nActual: %s\","},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" expected.toString(), actual.toString()),"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(expected).equals(new HashSet\u003c\u003e(actual)));"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" assertEquals(\"List size not equal.\", expected.size(), actual.size());"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":202,"-":104}},{"path":"src/it/java/teammates/it/storage/sqlapi/FeedbackResponsesDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.UUID;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextResponseDetails;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponsesDb;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackTextResponse;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackResponsesDb}."},{"lineNumber":29,"author":{"gitId":"-"},"content":" */"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public class FeedbackResponsesDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private final FeedbackResponsesDb frDb \u003d FeedbackResponsesDb.inst();"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private final FeedbackResponseCommentsDb frcDb \u003d FeedbackResponseCommentsDb.inst();"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" private SqlDataBundle testDataBundle;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" super.setupClass();"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" testDataBundle \u003d loadSqlDataBundle(\"/FeedbackResponsesITBundle.json\");"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":46,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" persistDataBundle(testDataBundle);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" HibernateUtil.clearSession();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public void testGetFeedbackResponsesFromGiverForQuestion() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expectedQuestions \u003d List.of("},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ1\"),"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\")"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e actualQuestions \u003d"},{"lineNumber":64,"author":{"gitId":"-"},"content":" frDb.getFeedbackResponsesFromGiverForQuestion(fq.getId(), \"student1@teammates.tmt\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertTrue(expectedQuestions.containsAll(actualQuestions));"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public void testDeleteFeedbackResponsesForQuestionCascade() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr1 \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr2 \u003d testDataBundle.feedbackResponses.get(\"response2ForQ1\");"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment frc1 \u003d testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\");"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponsesForQuestionCascade(fq.getId());"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" assertNull(frDb.getFeedbackResponse(fr1.getId()));"},{"lineNumber":81,"author":{"gitId":"-"},"content":" assertNull(frDb.getFeedbackResponse(fr2.getId()));"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertNull(frcDb.getFeedbackResponseComment(frc1.getId()));"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void testDeleteFeedback() {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr1 \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponse(fr1);"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" assertNull(frDb.getFeedbackResponse(fr1.getId()));"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public void testHasResponsesFromGiverInSession() {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" FeedbackSession fs \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" boolean actualHasReponses1 \u003d"},{"lineNumber":102,"author":{"gitId":"-"},"content":" frDb.hasResponsesFromGiverInSession(\"student1@teammates.tmt\", fs.getName(), course.getId());"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" assertTrue(actualHasReponses1);"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" ______TS(\"student with no responses\");"},{"lineNumber":107,"author":{"gitId":"-"},"content":" boolean actualHasReponses2 \u003d"},{"lineNumber":108,"author":{"gitId":"-"},"content":" frDb.hasResponsesFromGiverInSession(\"studentnorespones@teammates.tmt\", fs.getName(), course.getId());"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertFalse(actualHasReponses2);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":114,"author":{"gitId":"-"},"content":" public void testAreThereResponsesForQuestion() {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq1 \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" boolean actualResponse1 \u003d"},{"lineNumber":119,"author":{"gitId":"-"},"content":" frDb.areThereResponsesForQuestion(fq1.getId());"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertTrue(actualResponse1);"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" ______TS(\"feedback question with no responses\");"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq2 \u003d testDataBundle.feedbackQuestions.get(\"qn6InSession1InCourse1NoResponses\");"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" boolean actualResponse2 \u003d"},{"lineNumber":127,"author":{"gitId":"-"},"content":" frDb.areThereResponsesForQuestion(fq2.getId());"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" assertFalse(actualResponse2);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void testHasResponsesForCourse() {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" boolean actual \u003d"},{"lineNumber":138,"author":{"gitId":"-"},"content":" frDb.hasResponsesForCourse(course.getId());"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" private FeedbackResponse prepareSqlInjectionTest() {"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertNotNull(frDb.getFeedbackResponse(fr.getId()));"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" return fr;"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" private void checkSqliFailed(FeedbackResponse fr) {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" // If SQLi is successful, feedback responses would have been deleted from db."},{"lineNumber":152,"author":{"gitId":"-"},"content":" // So get will return null."},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertNotNull(frDb.getFeedbackResponse(fr.getId()));"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":157,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetFeedbackResponsesFromGiverForCourse() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in GetFeedbackResponsesFromGiverForCourse, courseId param\");"},{"lineNumber":161,"author":{"gitId":"-"},"content":" String courseId \u003d \"\u0027; DELETE FROM feedback_responses;--\";"},{"lineNumber":162,"author":{"gitId":"-"},"content":" frDb.getFeedbackResponsesFromGiverForCourse(courseId, \"\");"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":168,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetFeedbackResponsesForRecipientForCourse() {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in GetFeedbackResponsesForRecipientForCourse, courseId param\");"},{"lineNumber":172,"author":{"gitId":"-"},"content":" String courseId \u003d \"\u0027; DELETE FROM feedback_responses;--\";"},{"lineNumber":173,"author":{"gitId":"-"},"content":" frDb.getFeedbackResponsesForRecipientForCourse(courseId, \"\");"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":179,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetFeedbackResponsesFromGiverForQuestion() {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in GetFeedbackResponsesFromGiverForQuestion, giverEmail param\");"},{"lineNumber":183,"author":{"gitId":"-"},"content":" String giverEmail \u003d \"\u0027;/**/DELETE/**/FROM/**/feedback_responses;--@gmail.com\";"},{"lineNumber":184,"author":{"gitId":"-"},"content":" frDb.getFeedbackResponsesFromGiverForQuestion(fr.getId(), giverEmail);"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public void testSqlInjectionInHasResponsesFromGiverInSession() {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in HasResponsesFromGiverInSession, giver param\");"},{"lineNumber":194,"author":{"gitId":"-"},"content":" String giver \u003d \"\u0027; DELETE FROM feedback_responses;--\";"},{"lineNumber":195,"author":{"gitId":"-"},"content":" frDb.hasResponsesFromGiverInSession(giver, \"\", \"\");"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" }"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":201,"author":{"gitId":"-"},"content":" public void testSqlInjectionInHasResponsesForCourse() {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in HasResponsesForCourse, courseId param\");"},{"lineNumber":205,"author":{"gitId":"-"},"content":" String courseId \u003d \"\u0027; DELETE FROM feedback_responses;--\";"},{"lineNumber":206,"author":{"gitId":"-"},"content":" frDb.hasResponsesForCourse(courseId);"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":212,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateFeedbackResponse() throws Exception {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" Section s \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":217,"author":{"gitId":"-"},"content":" String dummyUuid \u003d \"00000000-0000-4000-8000-000000000001\";"},{"lineNumber":218,"author":{"gitId":"-"},"content":" FeedbackResponseDetails frd \u003d new FeedbackTextResponseDetails();"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027, \" + dummyUuid + \", \" + dummyUuid + \"); DELETE FROM feedback_responses;--\";"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" FeedbackResponse newFr \u003d new FeedbackTextResponse(fq, \"\", s, sqli, s, frd);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" frDb.createFeedbackResponse(newFr);"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":229,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCpdateFeedbackResponse() throws Exception {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027\u0027); DELETE FROM feedback_response_comments;--\";"},{"lineNumber":233,"author":{"gitId":"-"},"content":" fr.setGiver(sqli);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" frDb.updateFeedbackResponse(fr);"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForRecipientForQuestion_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question not found\");"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" String recipient \u003d \"student1@teammates.tmt\";"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" UUID nonexistentQuestionId \u003d UUID.fromString(\"11110000-0000-0000-0000-000000000000\");"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e results \u003d frDb.getFeedbackResponsesForRecipientForQuestion(nonexistentQuestionId, recipient);"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist\");"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion questionWithNoResponses \u003d testDataBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForRecipientForQuestion(questionWithNoResponses.getId(), recipient);"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForRecipientForQuestion_matchFound_success() {"},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" ______TS(\"Matching responses exist\");"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" String recipient \u003d \"student2@teammates.tmt\";"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expected \u003d List.of("},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ1\")"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e actual \u003d frDb.getFeedbackResponsesForRecipientForQuestion(question.getId(), recipient);"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForSessionInSection_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" String section3 \u003d testDataBundle.sections.get(\"section3InCourse1\").getName();"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" FeedbackSession session \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":" String courseId \u003d session.getCourse().getId();"},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for giver section\");"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.GIVER;"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e results \u003d frDb.getFeedbackResponsesForSessionInSection("},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" session, courseId, section3, fetchType);"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for recipient section\");"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.RECEIVER;"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForSessionInSection(session, courseId, section3, fetchType);"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for both giver and recipient section\");"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForSessionInSection(session, courseId, section3, fetchType);"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForSessionInSection_matchFound_success() {"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" FeedbackSession session1 \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match giver section 1 in session 1\");"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.GIVER;"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expected \u003d List.of("},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ1\"),"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ1\"),"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ2\"),"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ2\"),"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ3\"),"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\"),"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ2\")"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e actual \u003d frDb.getFeedbackResponsesForSessionInSection("},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" session1, course.getId(), section1.getName(), fetchType);"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match recipient section 2 in session 1\");"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.RECEIVER;"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\"),"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ2\"),"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForSessionInSection(session1, course.getId(),"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" section2.getName(), fetchType);"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match both giver and recipient section 2 in session 1\");"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForSessionInSection(session1, course.getId(),"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" section2.getName(), fetchType);"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForQuestionInSection_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" String section1 \u003d testDataBundle.sections.get(\"section1InCourse1\").getName();"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" String section3 \u003d testDataBundle.sections.get(\"section3InCourse1\").getName();"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question not found\");"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":" UUID nonexistentQuestionId \u003d UUID.fromString(\"11110000-0000-0000-0000-000000000000\");"},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e results \u003d frDb.getFeedbackResponsesForQuestionInSection(nonexistentQuestionId,"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" section1, fetchType);"},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for giver section\");"},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" UUID questionId \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\").getId();"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.GIVER;"},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForQuestionInSection(questionId, section3, fetchType);"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for recipient section\");"},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.RECEIVER;"},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForQuestionInSection(questionId, section3, fetchType);"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for both giver and recipient section\");"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForQuestionInSection(questionId, section3, fetchType);"},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":362,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":363,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForQuestionInSection_matchFound_success() {"},{"lineNumber":364,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":365,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":366,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question1 \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":367,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":368,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match giver section 1 for Q1\");"},{"lineNumber":369,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.GIVER;"},{"lineNumber":370,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expected \u003d List.of("},{"lineNumber":371,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ1\"),"},{"lineNumber":372,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ1\"),"},{"lineNumber":373,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\")"},{"lineNumber":374,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":375,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e actual \u003d frDb.getFeedbackResponsesForQuestionInSection(question1.getId(),"},{"lineNumber":376,"author":{"gitId":"xenosf"},"content":" section1.getName(), fetchType);"},{"lineNumber":377,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":378,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":379,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match recipient section 2 for Q1\");"},{"lineNumber":380,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.RECEIVER;"},{"lineNumber":381,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":382,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\"),"},{"lineNumber":383,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":384,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":385,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForQuestionInSection(question1.getId(), section2.getName(), fetchType);"},{"lineNumber":386,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":387,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":388,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match both giver and recipient section 2 for Q1\");"},{"lineNumber":389,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":390,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":391,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":392,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":393,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForQuestionInSection(question1.getId(), section2.getName(), fetchType);"},{"lineNumber":394,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":395,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":396,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":397,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":398,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForSession() {"},{"lineNumber":399,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session has responses\");"},{"lineNumber":400,"author":{"gitId":"xenosf"},"content":" FeedbackSession sessionWithResponses \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":401,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expected \u003d List.of("},{"lineNumber":402,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ1\"),"},{"lineNumber":403,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ1\"),"},{"lineNumber":404,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ2\"),"},{"lineNumber":405,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ2\"),"},{"lineNumber":406,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ3\"),"},{"lineNumber":407,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\"),"},{"lineNumber":408,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ2\"),"},{"lineNumber":409,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":410,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":411,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e actual \u003d frDb.getFeedbackResponsesForSession(sessionWithResponses,"},{"lineNumber":412,"author":{"gitId":"xenosf"},"content":" sessionWithResponses.getCourse().getId());"},{"lineNumber":413,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":414,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":415,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session has no responses\");"},{"lineNumber":416,"author":{"gitId":"xenosf"},"content":" FeedbackSession sessionWithoutResponses \u003d testDataBundle.feedbackSessions.get("},{"lineNumber":417,"author":{"gitId":"xenosf"},"content":" \"unpublishedSession1InTypicalCourse\");"},{"lineNumber":418,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForSession(sessionWithoutResponses, sessionWithResponses.getCourse().getId());"},{"lineNumber":419,"author":{"gitId":"xenosf"},"content":" assertEquals(0, actual.size());"},{"lineNumber":420,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":421,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":422,"author":{"gitId":"xenosf"},"content":" private void assertListResponsesEqual(List\u003cFeedbackResponse\u003e expected, List\u003cFeedbackResponse\u003e actual) {"},{"lineNumber":423,"author":{"gitId":"xenosf"},"content":" assertEquals(\"List size not equal.\", expected.size(), actual.size());"},{"lineNumber":424,"author":{"gitId":"xenosf"},"content":" assertTrue("},{"lineNumber":425,"author":{"gitId":"xenosf"},"content":" String.format(\"List contents are not equal.%nExpected: %s,%nActual: %s\","},{"lineNumber":426,"author":{"gitId":"xenosf"},"content":" expected.toString(), actual.toString()),"},{"lineNumber":427,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(expected).equals(new HashSet\u003c\u003e(actual)));"},{"lineNumber":428,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":215,"-":214}},{"path":"src/it/java/teammates/it/storage/sqlsearch/AccountRequestSearchIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.storage.sqlsearch;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlapi.AccountRequestsDb;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.test.AssertHelper;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.test.TestProperties;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link AccountRequestsDb},"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":" * {@link teammates.storage.search.AccountRequestSearchDocument}."},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":"public class AccountRequestSearchIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" private final SqlDataBundle typicalBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" private final AccountRequestsDb accountRequestsDb \u003d AccountRequestsDb.inst();"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" putDocuments(typicalBundle);"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" public void allTests() throws Exception {"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1General \u003d typicalBundle.accountRequests.get(\"instructor1\");"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2General \u003d typicalBundle.accountRequests.get(\"instructor2\");"},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1InCourse1 \u003d typicalBundle.accountRequests.get(\"instructor1OfCourse1\");"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2InCourse1 \u003d typicalBundle.accountRequests.get(\"instructor2OfCourse1\");"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1InCourse2 \u003d typicalBundle.accountRequests.get(\"instructor1OfCourse2\");"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2InCourse2 \u003d typicalBundle.accountRequests.get(\"instructor2OfCourse2\");"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1InCourse3 \u003d typicalBundle.accountRequests.get(\"instructor1OfCourse3\");"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2InCourse3 \u003d typicalBundle.accountRequests.get(\"instructor2OfCourse3\");"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" AccountRequest insInUnregCourse \u003d typicalBundle.accountRequests.get(\"instructor3\");"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" AccountRequest unregisteredInstructor1 \u003d"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" typicalBundle.accountRequests.get(\"unregisteredInstructor1\");"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" AccountRequest unregisteredInstructor2 \u003d"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" typicalBundle.accountRequests.get(\"unregisteredInstructor2\");"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; query string does not match anyone\");"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequest\u003e results \u003d"},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.searchAccountRequestsInWholeSystem(\"non-existent\");"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results);"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; empty query string does not match anyone\");"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\");"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results);"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; query string matches some account requests\");"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"Instructor 1\\\"\");"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins1InCourse1, ins1InCourse2, ins1InCourse3, unregisteredInstructor1, ins1General);"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; query string should be case-insensitive\");"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"InStRuCtOr 2\\\"\");"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins2InCourse1, ins2InCourse2, ins2InCourse3, unregisteredInstructor2, ins2General);"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; account requests should be searchable by their name\");"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"Instructor 3 of CourseNoRegister\\\"\");"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, insInUnregCourse);"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; account requests should be searchable by their email\");"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"instr2@course2.tmt\");"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins2InCourse2);"},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; account requests should be searchable by their institute\");"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"TEAMMATES Test Institute 2\\\"\");"},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, unregisteredInstructor2);"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; unregistered account requests should be searchable\");"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"unregisteredinstructor1@gmail.tmt\\\"\");"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, unregisteredInstructor1);"},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; deleted account requests no longer searchable\");"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.deleteAccountRequest(ins1InCourse1);"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"instructor 1\\\"\");"},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins1InCourse2, ins1InCourse3, unregisteredInstructor1, ins1General);"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; account requests created without searchability unsearchable\");"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.createAccountRequest(ins1InCourse1);"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"instructor 1\\\"\");"},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins1InCourse2, ins1InCourse3, unregisteredInstructor1, ins1General);"},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; deleting account request without deleting document:\""},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" + \"document deleted during search, account request unsearchable\");"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.deleteAccountRequest(ins2InCourse1);"},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"instructor 2\\\"\");"},{"lineNumber":114,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins2InCourse2, ins2InCourse3, unregisteredInstructor2, ins2General);"},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":" public void testSearchAccountRequest_deleteAfterSearch_shouldNotBeSearchable() throws Exception {"},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1InCourse2 \u003d typicalBundle.accountRequests.get(\"instructor1OfCourse2\");"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2InCourse2 \u003d typicalBundle.accountRequests.get(\"instructor2OfCourse2\");"},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" // there is search result before deletion"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequest\u003e results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"of Course 2\\\"\");"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins1InCourse2, ins2InCourse2);"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":" // delete an account request"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.deleteAccountRequest(ins1InCourse2);"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" // the search result will change"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"of Course 2\\\"\");"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins2InCourse2);"},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":" // delete all account requests"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.deleteAccountRequest(ins2InCourse2);"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" // there should be no search result"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"of Course 2\\\"\");"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results);"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" public void testSearchAccountRequest_noSearchService_shouldThrowException() {"},{"lineNumber":147,"author":{"gitId":"domoberzin"},"content":" if (TestProperties.isSearchServiceActive()) {"},{"lineNumber":148,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":151,"author":{"gitId":"domoberzin"},"content":" assertThrows(SearchServiceException.class,"},{"lineNumber":152,"author":{"gitId":"domoberzin"},"content":" () -\u003e accountRequestsDb.searchAccountRequestsInWholeSystem(\"anything\"));"},{"lineNumber":153,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":154,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":155,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":" * Verifies that search results match with expected output."},{"lineNumber":157,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":158,"author":{"gitId":"domoberzin"},"content":" * @param actual the results from the search query."},{"lineNumber":159,"author":{"gitId":"domoberzin"},"content":" * @param expected the expected results for the search query."},{"lineNumber":160,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":161,"author":{"gitId":"domoberzin"},"content":" private static void verifySearchResults(List\u003cAccountRequest\u003e actual,"},{"lineNumber":162,"author":{"gitId":"domoberzin"},"content":" AccountRequest... expected) {"},{"lineNumber":163,"author":{"gitId":"domoberzin"},"content":" assertEquals(expected.length, actual.size());"},{"lineNumber":164,"author":{"gitId":"domoberzin"},"content":" AssertHelper.assertSameContentIgnoreOrder(Arrays.asList(expected), actual);"},{"lineNumber":165,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":166,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":167,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":167}},{"path":"src/it/java/teammates/it/storage/sqlsearch/InstructorSearchIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlsearch;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.UsersDb;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.test.AssertHelper;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.test.TestProperties;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link UsersDb},"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * {@link teammates.storage.sqlsearch.InstructorSearchDocument}."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class InstructorSearchIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final SqlDataBundle typicalBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private final UsersDb usersDb \u003d UsersDb.inst();"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":29,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":31,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" putDocuments(typicalBundle);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void allTests() throws Exception {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" Instructor ins1InCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":43,"author":{"gitId":"-"},"content":" Instructor ins2InCourse1 \u003d typicalBundle.instructors.get(\"instructor2OfCourse1\");"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" Instructor ins1InCourse4 \u003d typicalBundle.instructors.get(\"instructor1OfCourse4\");"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" Instructor ins2InCourse4 \u003d typicalBundle.instructors.get(\"instructor2YetToJoinCourse4\");"},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" Instructor ins3InCourse4 \u003d typicalBundle.instructors.get(\"instructor3YetToJoinCourse4\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":" Instructor insInArchivedCourse \u003d typicalBundle.instructors.get(\"instructorOfArchivedCourse\");"},{"lineNumber":48,"author":{"gitId":"-"},"content":" Instructor insInUnregCourse \u003d typicalBundle.instructors.get(\"instructorOfUnregisteredCourse\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" Instructor insUniqueDisplayName \u003d typicalBundle.instructors.get(\"instructorOfCourse2WithUniqueDisplayName\");"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Instructor ins1InCourse3 \u003d typicalBundle.instructors.get(\"instructor1OfCourse3\");"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" Instructor unregisteredInsInCourse1 \u003d typicalBundle.instructors.get(\"unregisteredInstructorOfCourse1\");"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; query string does not match anyone\");"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e results \u003d usersDb.searchInstructorsInWholeSystem(\"non-existent\");"},{"lineNumber":56,"author":{"gitId":"-"},"content":" verifySearchResults(results);"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; empty query string does not match anyone\");"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\");"},{"lineNumber":61,"author":{"gitId":"-"},"content":" verifySearchResults(results);"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; query string matches some instructors\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor of\\\"\");"},{"lineNumber":66,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInArchivedCourse, insInUnregCourse, insUniqueDisplayName);"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; query string should be case-insensitive\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"InStRuCtOr 2\\\"\");"},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, ins2InCourse1, ins2InCourse4);"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors in archived courses should be included\");"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor Of Archived Course\\\"\");"},{"lineNumber":76,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInArchivedCourse);"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" ______TS("},{"lineNumber":79,"author":{"gitId":"-"},"content":" \"success: search for instructors in whole system; instructors in unregistered course should be included\");"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor Of Unregistered Course\\\"\");"},{"lineNumber":82,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInUnregCourse);"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by course id\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, ins1InCourse1, ins2InCourse1, unregisteredInsInCourse1);"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by course name\");"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Typical Course 1\\\"\");"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, ins1InCourse1, ins2InCourse1, unregisteredInsInCourse1);"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by their name\");"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor Of Unregistered Course\\\"\");"},{"lineNumber":97,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInUnregCourse);"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by their email\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"instr2@teammates.tmt\");"},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, ins2InCourse1, ins2InCourse4);"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by their role\");"},{"lineNumber":105,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Co-owner\\\"\");"},{"lineNumber":106,"author":{"gitId":"-"},"content":" verifySearchResults(results, ins1InCourse1, insInArchivedCourse,"},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" insInUnregCourse, insUniqueDisplayName, ins1InCourse3,"},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":" ins1InCourse4, ins2InCourse4, ins3InCourse4);"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by displayed name\");"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" String displayName \u003d insUniqueDisplayName.getDisplayName();"},{"lineNumber":113,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(displayName);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" verifySearchResults(results, insUniqueDisplayName);"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; deleted instructors no longer searchable\");"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" usersDb.deleteUser(insUniqueDisplayName);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor of\\\"\");"},{"lineNumber":120,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInArchivedCourse, insInUnregCourse);"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" // This method used to use usersDb.putEntity, not sure if the .createInstructor method has the same functionality"},{"lineNumber":123,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors created without searchability unsearchable\");"},{"lineNumber":124,"author":{"gitId":"-"},"content":" usersDb.createInstructor(insUniqueDisplayName);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor of\\\"\");"},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, insInArchivedCourse, insInUnregCourse, insUniqueDisplayName);"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; deleting instructor without deleting document:\""},{"lineNumber":129,"author":{"gitId":"-"},"content":" + \"document deleted during search, instructor unsearchable\");"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" usersDb.deleteUser(ins1InCourse3);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor 1\\\"\");"},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, ins1InCourse1, ins1InCourse4);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":137,"author":{"gitId":"-"},"content":" public void testSearchInstructor_deleteAfterSearch_shouldNotBeSearchable() throws Exception {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" Instructor ins1InCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":143,"author":{"gitId":"-"},"content":" Instructor ins2InCourse1 \u003d typicalBundle.instructors.get(\"instructor2OfCourse1\");"},{"lineNumber":144,"author":{"gitId":"dishenggg"},"content":" Instructor unregisteredInsInCourse1 \u003d typicalBundle.instructors.get(\"unregisteredInstructorOfCourse1\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":147,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, ins1InCourse1, ins2InCourse1, unregisteredInsInCourse1);"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" usersDb.deleteUser(ins1InCourse1);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":151,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, ins2InCourse1, unregisteredInsInCourse1);"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" // This used to test .deleteInstructors, but we don\u0027t seem to have a similar method to delete all users in course"},{"lineNumber":154,"author":{"gitId":"-"},"content":" usersDb.deleteUser(ins2InCourse1);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":156,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, unregisteredInsInCourse1);"},{"lineNumber":157,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":158,"author":{"gitId":"dishenggg"},"content":" usersDb.deleteUser(unregisteredInsInCourse1);"},{"lineNumber":159,"author":{"gitId":"dishenggg"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":160,"author":{"gitId":"-"},"content":" verifySearchResults(results);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":164,"author":{"gitId":"-"},"content":" public void testSearchInstructor_noSearchService_shouldThrowException() {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" if (TestProperties.isSearchServiceActive()) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertThrows(SearchServiceException.class,"},{"lineNumber":170,"author":{"gitId":"-"},"content":" () -\u003e usersDb.searchInstructorsInWholeSystem(\"anything\"));"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * Verifies that search results match with expected output."},{"lineNumber":175,"author":{"gitId":"-"},"content":" *"},{"lineNumber":176,"author":{"gitId":"-"},"content":" * @param actual the results from the search query."},{"lineNumber":177,"author":{"gitId":"-"},"content":" * @param expected the expected results for the search query."},{"lineNumber":178,"author":{"gitId":"-"},"content":" */"},{"lineNumber":179,"author":{"gitId":"-"},"content":" private static void verifySearchResults(List\u003cInstructor\u003e actual,"},{"lineNumber":180,"author":{"gitId":"-"},"content":" Instructor... expected) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertEquals(expected.length, actual.size());"},{"lineNumber":182,"author":{"gitId":"-"},"content":" AssertHelper.assertSameContentIgnoreOrder(Arrays.asList(expected), actual);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":1,"yuanxi1":8,"dishenggg":10,"-":165}},{"path":"src/it/java/teammates/it/storage/sqlsearch/StudentSearchIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"package teammates.it.storage.sqlsearch;"},{"lineNumber":2,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":6,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":9,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"yuanxi1"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlapi.UsersDb;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":15,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":"import teammates.test.AssertHelper;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.test.TestProperties;"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"yuanxi1"},"content":" * SUT: {@link UsersDb},"},{"lineNumber":21,"author":{"gitId":"yuanxi1"},"content":" * {@link teammates.storage.sqlsearch.InstructorSearchDocument}."},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":"public class StudentSearchIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":25,"author":{"gitId":"yuanxi1"},"content":" private final SqlDataBundle typicalBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":26,"author":{"gitId":"yuanxi1"},"content":" private final UsersDb usersDb \u003d UsersDb.inst();"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"yuanxi1"},"content":" @BeforeMethod"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" protected void setUp() throws Exception {"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":" super.setUp();"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":33,"author":{"gitId":"yuanxi1"},"content":" putDocuments(typicalBundle);"},{"lineNumber":34,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.flushSession();"},{"lineNumber":35,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" public void allTests() throws Exception {"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" Student stu2InCourse1 \u003d typicalBundle.students.get(\"student2InCourse1\");"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" Student stu3InCourse1 \u003d typicalBundle.students.get(\"student3InCourse1\");"},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":" Student stu4InCourse1 \u003d typicalBundle.students.get(\"student4InCourse1\");"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse2 \u003d typicalBundle.students.get(\"student1InCourse2\");"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" Student unregisteredStuInCourse1 \u003d typicalBundle.students.get(\"unregisteredStudentInCourse1\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" Student stu1InCourse3 \u003d typicalBundle.students.get(\"student1InCourse3\");"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse4 \u003d typicalBundle.students.get(\"student1InCourse4\");"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" Student stuOfArchivedCourse \u003d typicalBundle.students.get(\"studentOfArchivedCourse\");"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" Instructor ins1InCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" Instructor ins1InCourse4 \u003d typicalBundle.instructors.get(\"instructor1OfCourse4\");"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; query string does not match anyone\");"},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudent\u003e results \u003d usersDb.searchStudentsInWholeSystem(\"non-existent\");"},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results);"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; empty query string does not match anyone\");"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\");"},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results);"},{"lineNumber":65,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":66,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; query string matches some students\");"},{"lineNumber":67,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"student1\\\"\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" verifySearchResults(results, stu1InCourse1, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; query string should be case-insensitive\");"},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"sTuDeNt1\\\"\");"},{"lineNumber":74,"author":{"gitId":"-"},"content":" verifySearchResults(results, stu1InCourse1, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students in archived courses should be included\");"},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"Student In Archived Course\\\"\");"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, stuOfArchivedCourse);"},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students should be searchable by course id\");"},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":" verifySearchResults(results, stu1InCourse1, stu2InCourse1, stu3InCourse1, stu4InCourse1, unregisteredStuInCourse1);"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students should be searchable by course name\");"},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"Typical Course 1\\\"\");"},{"lineNumber":89,"author":{"gitId":"marquestye"},"content":" verifySearchResults(results, stu1InCourse1, stu2InCourse1, stu3InCourse1, stu4InCourse1, unregisteredStuInCourse1);"},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students should be searchable by their name\");"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"student3 In Course1\\\"\");"},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, stu3InCourse1);"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students should be searchable by their email\");"},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"student1@teammates.tmt\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" verifySearchResults(results, stu1InCourse1, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students; query string matches some students; results restricted \""},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" + \"based on instructor\u0027s privilege\");"},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":" List\u003cInstructor\u003e ins1OfCourse1 \u003d Arrays.asList("},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" new Instructor[] { ins1InCourse1 });"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":" List\u003cInstructor\u003e ins1OfCourse4 \u003d Arrays.asList("},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" new Instructor[] { ins1InCourse4 });"},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudent\u003e studentList \u003d usersDb.searchStudents(\"student1\", ins1OfCourse1);"},{"lineNumber":109,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":110,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(studentList, stu1InCourse1);"},{"lineNumber":111,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":112,"author":{"gitId":"yuanxi1"},"content":" studentList \u003d usersDb.searchStudents(\"student1\", ins1OfCourse4);"},{"lineNumber":113,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(studentList, stu1InCourse4);"},{"lineNumber":114,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":115,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; deleted students no longer searchable\");"},{"lineNumber":116,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":117,"author":{"gitId":"yuanxi1"},"content":" usersDb.deleteUser(stu1InCourse1);"},{"lineNumber":118,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"student1\\\"\");"},{"lineNumber":119,"author":{"gitId":"-"},"content":" verifySearchResults(results, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":120,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":121,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":123,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":124,"author":{"gitId":"yuanxi1"},"content":" public void testSearchStudent_deleteAfterSearch_shouldNotBeSearchable() throws Exception {"},{"lineNumber":125,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":126,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":128,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":129,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":130,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse2 \u003d typicalBundle.students.get(\"student1InCourse2\");"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Student stu1InCourse3 \u003d typicalBundle.students.get(\"student1InCourse3\");"},{"lineNumber":132,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse4 \u003d typicalBundle.students.get(\"student1InCourse4\");"},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":134,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudent\u003e studentList \u003d usersDb.searchStudentsInWholeSystem(\"student1\");"},{"lineNumber":135,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":136,"author":{"gitId":"yuanxi1"},"content":" // there is search result before deletion"},{"lineNumber":137,"author":{"gitId":"-"},"content":" verifySearchResults(studentList, stu1InCourse1, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":138,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":139,"author":{"gitId":"yuanxi1"},"content":" // delete a student"},{"lineNumber":140,"author":{"gitId":"yuanxi1"},"content":" usersDb.deleteUser(stu1InCourse1);"},{"lineNumber":141,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" // the search result will change"},{"lineNumber":143,"author":{"gitId":"yuanxi1"},"content":" studentList \u003d usersDb.searchStudentsInWholeSystem(\"student1\");"},{"lineNumber":144,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" verifySearchResults(studentList, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":146,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":" // delete all students in course 2"},{"lineNumber":148,"author":{"gitId":"yuanxi1"},"content":" usersDb.deleteUser(stu1InCourse2);"},{"lineNumber":149,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":150,"author":{"gitId":"yuanxi1"},"content":" // the search result will change"},{"lineNumber":151,"author":{"gitId":"yuanxi1"},"content":" studentList \u003d usersDb.searchStudentsInWholeSystem(\"student1\");"},{"lineNumber":152,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" verifySearchResults(studentList, stu1InCourse3, stu1InCourse4);"},{"lineNumber":154,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":155,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":156,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":157,"author":{"gitId":"yuanxi1"},"content":" public void testSearchStudent_noSearchService_shouldThrowException() {"},{"lineNumber":158,"author":{"gitId":"yuanxi1"},"content":" if (TestProperties.isSearchServiceActive()) {"},{"lineNumber":159,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":160,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":161,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":162,"author":{"gitId":"yuanxi1"},"content":" assertThrows(SearchServiceException.class,"},{"lineNumber":163,"author":{"gitId":"yuanxi1"},"content":" () -\u003e usersDb.searchStudentsInWholeSystem(\"anything\"));"},{"lineNumber":164,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":165,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":" * Verifies that search results match with expected output."},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":" *"},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" * @param actual the results from the search query."},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" * @param expected the expected results for the search query."},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":172,"author":{"gitId":"yuanxi1"},"content":" private static void verifySearchResults(List\u003cStudent\u003e actual,"},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":" Student... expected) {"},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":" assertEquals(expected.length, actual.size());"},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" AssertHelper.assertSameContentIgnoreOrder(Arrays.asList(expected), actual);"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":"}"}],"authorContributionMap":{"yuanxi1":165,"marquestye":3,"-":9}},{"path":"src/it/java/teammates/it/test/BaseTestCaseWithSqlDatabaseAccess.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testcontainers.containers.PostgreSQLContainer;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterSuite;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeSuite;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import com.google.cloud.datastore.DatastoreOptions;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import com.google.cloud.datastore.testing.LocalDatastoreHelper;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.ObjectifyFactory;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.ObjectifyService;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.util.Closeable;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.sqllogic.api.Logic;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.LogicStarter;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.api.OfyHelper;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.BaseEntity;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.UsageStatistics;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.AccountRequestSearchManager;"},{"lineNumber":47,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.InstructorSearchManager;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.SearchManagerFactory;"},{"lineNumber":49,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.StudentSearchManager;"},{"lineNumber":50,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * Base test case for tests that access the database."},{"lineNumber":54,"author":{"gitId":"-"},"content":" */"},{"lineNumber":55,"author":{"gitId":"-"},"content":"@Test(singleThreaded \u003d true)"},{"lineNumber":56,"author":{"gitId":"-"},"content":"public class BaseTestCaseWithSqlDatabaseAccess extends BaseTestCase {"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" private static final PostgreSQLContainer\u003c?\u003e PGSQL \u003d new PostgreSQLContainer\u003c\u003e(\"postgres:15.1-alpine\");"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" private static final LocalDatastoreHelper LOCAL_DATASTORE_HELPER \u003d LocalDatastoreHelper.newBuilder()"},{"lineNumber":61,"author":{"gitId":"-"},"content":" .setConsistency(1.0)"},{"lineNumber":62,"author":{"gitId":"-"},"content":" .setPort(TestProperties.TEST_LOCALDATASTORE_PORT)"},{"lineNumber":63,"author":{"gitId":"-"},"content":" .setStoreOnDisk(false)"},{"lineNumber":64,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" private final Logic logic \u003d Logic.inst();"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" private Closeable closeable;"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" @BeforeSuite"},{"lineNumber":71,"author":{"gitId":"-"},"content":" protected static void setUpSuite() throws Exception {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" PGSQL.start();"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // Temporarily disable migration utility"},{"lineNumber":74,"author":{"gitId":"-"},"content":" // DbMigrationUtil.resetDb(PGSQL.getJdbcUrl(), PGSQL.getUsername(),"},{"lineNumber":75,"author":{"gitId":"-"},"content":" // PGSQL.getPassword());"},{"lineNumber":76,"author":{"gitId":"-"},"content":" HibernateUtil.buildSessionFactory(PGSQL.getJdbcUrl(), PGSQL.getUsername(), PGSQL.getPassword());"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" LogicStarter.initializeDependencies();"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerAccountRequestSearchManager("},{"lineNumber":81,"author":{"gitId":"-"},"content":" new AccountRequestSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":82,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerInstructorSearchManager("},{"lineNumber":83,"author":{"gitId":"-"},"content":" new InstructorSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":84,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerStudentSearchManager("},{"lineNumber":85,"author":{"gitId":"-"},"content":" new StudentSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" // TODO: remove after migration, needed for dual db support"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" teammates.storage.search.SearchManagerFactory.registerAccountRequestSearchManager("},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.search.AccountRequestSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" teammates.storage.search.SearchManagerFactory.registerInstructorSearchManager("},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.search.InstructorSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" teammates.storage.search.SearchManagerFactory.registerStudentSearchManager("},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.search.StudentSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" teammates.logic.core.LogicStarter.initializeDependencies();"},{"lineNumber":97,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.start();"},{"lineNumber":98,"author":{"gitId":"-"},"content":" DatastoreOptions options \u003d LOCAL_DATASTORE_HELPER.getOptions();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" ObjectifyService.init(new ObjectifyFactory("},{"lineNumber":100,"author":{"gitId":"-"},"content":" options.getService()));"},{"lineNumber":101,"author":{"gitId":"-"},"content":" OfyHelper.registerEntityClasses();"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" closeable \u003d ObjectifyService.begin();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public void tearDownClass() {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" closeable.close();"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" SearchManagerFactory.getAccountRequestSearchManager().resetCollections();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" SearchManagerFactory.getInstructorSearchManager().resetCollections();"},{"lineNumber":116,"author":{"gitId":"-"},"content":" SearchManagerFactory.getStudentSearchManager().resetCollections();"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" @AfterSuite"},{"lineNumber":120,"author":{"gitId":"-"},"content":" protected static void tearDownSuite() throws Exception {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" PGSQL.close();"},{"lineNumber":122,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.stop();"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":126,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" HibernateUtil.beginTransaction();"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" @AfterMethod"},{"lineNumber":131,"author":{"gitId":"-"},"content":" protected void tearDown() {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" HibernateUtil.rollbackTransaction();"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":136,"author":{"gitId":"-"},"content":" protected String getTestDataFolder() {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return TestProperties.TEST_DATA_FOLDER;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Persist data bundle into the db."},{"lineNumber":142,"author":{"gitId":"-"},"content":" */"},{"lineNumber":143,"author":{"gitId":"-"},"content":" protected void persistDataBundle(SqlDataBundle dataBundle)"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" logic.persistDataBundle(dataBundle);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":149,"author":{"gitId":"-"},"content":" * Puts searchable documents from the data bundle to the solr database."},{"lineNumber":150,"author":{"gitId":"-"},"content":" */"},{"lineNumber":151,"author":{"gitId":"-"},"content":" protected void putDocuments(SqlDataBundle dataBundle) throws SearchServiceException {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" logic.putDocuments(dataBundle);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Verifies that two entities are equal."},{"lineNumber":157,"author":{"gitId":"-"},"content":" */"},{"lineNumber":158,"author":{"gitId":"-"},"content":" protected void verifyEquals(BaseEntity expected, BaseEntity actual) {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" if (expected instanceof Course) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" Course expectedCourse \u003d (Course) expected;"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Course actualCourse \u003d (Course) actual;"},{"lineNumber":162,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedCourse, actualCourse);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedCourse), JsonUtils.toJson(actualCourse));"},{"lineNumber":164,"author":{"gitId":"-"},"content":" } else if (expected instanceof DeadlineExtension) {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" DeadlineExtension expectedDeadlineExtension \u003d (DeadlineExtension) expected;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" DeadlineExtension actualDeadlineExtension \u003d (DeadlineExtension) actual;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedDeadlineExtension, actualDeadlineExtension);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedDeadlineExtension), JsonUtils.toJson(actualDeadlineExtension));"},{"lineNumber":169,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackSession) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" FeedbackSession expectedSession \u003d (FeedbackSession) expected;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" FeedbackSession actualSession \u003d (FeedbackSession) actual;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedSession, actualSession);"},{"lineNumber":173,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedSession), JsonUtils.toJson(actualSession));"},{"lineNumber":174,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackQuestion) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" FeedbackQuestion expectedQuestion \u003d (FeedbackQuestion) expected;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" FeedbackQuestion actualQuestion \u003d (FeedbackQuestion) actual;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedQuestion, actualQuestion);"},{"lineNumber":178,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedQuestion), JsonUtils.toJson(actualQuestion));"},{"lineNumber":179,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponse) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" FeedbackResponse expectedResponse \u003d (FeedbackResponse) expected;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" FeedbackResponse actualResponse \u003d (FeedbackResponse) actual;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedResponse, actualResponse);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedResponse), JsonUtils.toJson(actualResponse));"},{"lineNumber":184,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseComment) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" FeedbackResponseComment expectedComment \u003d (FeedbackResponseComment) expected;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" FeedbackResponseComment actualComment \u003d (FeedbackResponseComment) actual;"},{"lineNumber":187,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedComment, actualComment);"},{"lineNumber":188,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedComment), JsonUtils.toJson(actualComment));"},{"lineNumber":189,"author":{"gitId":"-"},"content":" } else if (expected instanceof Notification) {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" Notification expectedNotification \u003d (Notification) expected;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" Notification actualNotification \u003d (Notification) actual;"},{"lineNumber":192,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedNotification, actualNotification);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedNotification), JsonUtils.toJson(actualNotification));"},{"lineNumber":194,"author":{"gitId":"-"},"content":" } else if (expected instanceof Account) {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" Account expectedAccount \u003d (Account) expected;"},{"lineNumber":196,"author":{"gitId":"-"},"content":" Account actualAccount \u003d (Account) actual;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedAccount, actualAccount);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedAccount), JsonUtils.toJson(actualAccount));"},{"lineNumber":199,"author":{"gitId":"-"},"content":" } else if (expected instanceof AccountRequest) {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" AccountRequest expectedAccountRequest \u003d (AccountRequest) expected;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" AccountRequest actualAccountRequest \u003d (AccountRequest) actual;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedAccountRequest, actualAccountRequest);"},{"lineNumber":203,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedAccountRequest), JsonUtils.toJson(actualAccountRequest));"},{"lineNumber":204,"author":{"gitId":"-"},"content":" } else if (expected instanceof UsageStatistics) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" UsageStatistics expectedUsageStatistics \u003d (UsageStatistics) expected;"},{"lineNumber":206,"author":{"gitId":"-"},"content":" UsageStatistics actualUsageStatistics \u003d (UsageStatistics) actual;"},{"lineNumber":207,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedUsageStatistics, actualUsageStatistics);"},{"lineNumber":208,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedUsageStatistics), JsonUtils.toJson(actualUsageStatistics));"},{"lineNumber":209,"author":{"gitId":"-"},"content":" } else if (expected instanceof Instructor) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" Instructor expectedInstructor \u003d (Instructor) expected;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" Instructor actualInstructor \u003d (Instructor) actual;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedInstructor, actualInstructor);"},{"lineNumber":213,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedInstructor), JsonUtils.toJson(actualInstructor));"},{"lineNumber":214,"author":{"gitId":"-"},"content":" } else if (expected instanceof Student) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" Student expectedStudent \u003d (Student) expected;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" Student actualStudent \u003d (Student) actual;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedStudent, actualStudent);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedStudent), JsonUtils.toJson(actualStudent));"},{"lineNumber":219,"author":{"gitId":"-"},"content":" } else if (expected instanceof Section) {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" Section expectedSection \u003d (Section) expected;"},{"lineNumber":221,"author":{"gitId":"-"},"content":" Section actualSection \u003d (Section) actual;"},{"lineNumber":222,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedSection, actualSection);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedSection), JsonUtils.toJson(actualSection));"},{"lineNumber":224,"author":{"gitId":"-"},"content":" } else if (expected instanceof Team) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" Team expectedTeam \u003d (Team) expected;"},{"lineNumber":226,"author":{"gitId":"-"},"content":" Team actualTeam \u003d (Team) actual;"},{"lineNumber":227,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedTeam, actualTeam);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedTeam), JsonUtils.toJson(actualTeam));"},{"lineNumber":229,"author":{"gitId":"-"},"content":" } else if (expected instanceof ReadNotification) {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" ReadNotification expectedReadNotification \u003d (ReadNotification) expected;"},{"lineNumber":231,"author":{"gitId":"-"},"content":" ReadNotification actualReadNotification \u003d (ReadNotification) actual;"},{"lineNumber":232,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedReadNotification, actualReadNotification);"},{"lineNumber":233,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" fail(\"Unknown entity\");"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":239,"author":{"gitId":"-"},"content":" * Verifies that the given entity is present in the database."},{"lineNumber":240,"author":{"gitId":"-"},"content":" */"},{"lineNumber":241,"author":{"gitId":"-"},"content":" protected void verifyPresentInDatabase(BaseEntity expected) {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" assertNotNull(expected);"},{"lineNumber":243,"author":{"gitId":"-"},"content":" BaseEntity actual \u003d getEntity(expected);"},{"lineNumber":244,"author":{"gitId":"-"},"content":" verifyEquals(expected, actual);"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" private BaseEntity getEntity(BaseEntity entity) {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" if (entity instanceof Course) {"},{"lineNumber":249,"author":{"gitId":"-"},"content":" return logic.getCourse(((Course) entity).getId());"},{"lineNumber":250,"author":{"gitId":"-"},"content":" } else if (entity instanceof FeedbackSession) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" return logic.getFeedbackSession(((FeedbackSession) entity).getId());"},{"lineNumber":252,"author":{"gitId":"dishenggg"},"content":" } else if (entity instanceof FeedbackQuestion) {"},{"lineNumber":253,"author":{"gitId":"dishenggg"},"content":" return logic.getFeedbackQuestion(((FeedbackQuestion) entity).getId());"},{"lineNumber":254,"author":{"gitId":"-"},"content":" } else if (entity instanceof Account) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return logic.getAccount(((Account) entity).getId());"},{"lineNumber":256,"author":{"gitId":"-"},"content":" } else if (entity instanceof Notification) {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" return logic.getNotification(((Notification) entity).getId());"},{"lineNumber":258,"author":{"gitId":"-"},"content":" } else if (entity instanceof AccountRequest) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d (AccountRequest) entity;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" return logic.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":261,"author":{"gitId":"yuanxi1"},"content":" } else if (entity instanceof Instructor) {"},{"lineNumber":262,"author":{"gitId":"yuanxi1"},"content":" return logic.getInstructor(((Instructor) entity).getId());"},{"lineNumber":263,"author":{"gitId":"yuanxi1"},"content":" } else if (entity instanceof Student) {"},{"lineNumber":264,"author":{"gitId":"yuanxi1"},"content":" return logic.getStudent(((Student) entity).getId());"},{"lineNumber":265,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown entity type\");"},{"lineNumber":267,"author":{"gitId":"-"},"content":" }"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Course expected, Course actual) {"},{"lineNumber":271,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":272,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":273,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(DeadlineExtension expected, DeadlineExtension actual) {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":278,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":279,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackSession expected, FeedbackSession actual) {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":284,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":285,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackQuestion expected, FeedbackQuestion actual) {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":290,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":291,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":292,"author":{"gitId":"-"},"content":" }"},{"lineNumber":293,"author":{"gitId":"-"},"content":""},{"lineNumber":294,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackResponse expected, FeedbackResponse actual) {"},{"lineNumber":295,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":296,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":297,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackResponseComment expected, FeedbackResponseComment actual) {"},{"lineNumber":301,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":302,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":303,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Notification expected, Notification actual) {"},{"lineNumber":307,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":308,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":309,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":310,"author":{"gitId":"-"},"content":" }"},{"lineNumber":311,"author":{"gitId":"-"},"content":""},{"lineNumber":312,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Account expected, Account actual) {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":314,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":315,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":316,"author":{"gitId":"-"},"content":" }"},{"lineNumber":317,"author":{"gitId":"-"},"content":""},{"lineNumber":318,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(AccountRequest expected, AccountRequest actual) {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":320,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":321,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":322,"author":{"gitId":"-"},"content":" }"},{"lineNumber":323,"author":{"gitId":"-"},"content":""},{"lineNumber":324,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(UsageStatistics expected, UsageStatistics actual) {"},{"lineNumber":325,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":326,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":327,"author":{"gitId":"-"},"content":" }"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Instructor expected, Instructor actual) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":331,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":332,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Student expected, Student actual) {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":337,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":338,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":339,"author":{"gitId":"-"},"content":" }"},{"lineNumber":340,"author":{"gitId":"-"},"content":""},{"lineNumber":341,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Section expected, Section actual) {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":343,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":344,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Team expected, Team actual) {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":349,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":350,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(ReadNotification expected, ReadNotification actual) {"},{"lineNumber":354,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":355,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":356,"author":{"gitId":"-"},"content":" }"},{"lineNumber":357,"author":{"gitId":"-"},"content":""},{"lineNumber":358,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":359,"author":{"gitId":"-"},"content":" * Generates a UUID that is different from the given {@code uuid}."},{"lineNumber":360,"author":{"gitId":"-"},"content":" */"},{"lineNumber":361,"author":{"gitId":"-"},"content":" protected UUID generateDifferentUuid(UUID uuid) {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" UUID ret \u003d UUID.randomUUID();"},{"lineNumber":363,"author":{"gitId":"-"},"content":" while (ret.equals(uuid)) {"},{"lineNumber":364,"author":{"gitId":"-"},"content":" ret \u003d UUID.randomUUID();"},{"lineNumber":365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":366,"author":{"gitId":"-"},"content":" return ret;"},{"lineNumber":367,"author":{"gitId":"-"},"content":" }"},{"lineNumber":368,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":8,"yuanxi1":4,"dishenggg":2,"-":354}},{"path":"src/it/java/teammates/it/ui/webapi/AccountRequestSearchIndexingWorkerActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.test.TestProperties;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.AccountRequestSearchIndexingWorkerAction;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link AccountRequestSearchIndexingWorkerAction}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":"public class AccountRequestSearchIndexingWorkerActionIT extends BaseActionIT\u003cAccountRequestSearchIndexingWorkerAction\u003e {"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"-"},"content":" protected String getActionUri() {"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" return Const.TaskQueue.ACCOUNT_REQUEST_SEARCH_INDEXING_WORKER_URL;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" protected String getRequestMethod() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return POST;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public void testExecute() throws Exception {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" AccountRequest accountRequest \u003d typicalBundle.accountRequests.get(\"instructor1\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" ______TS(\"account request not yet indexed should not be searchable\");"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequest\u003e accountRequestsList \u003d"},{"lineNumber":53,"author":{"gitId":"-"},"content":" logic.searchAccountRequestsInWholeSystem(accountRequest.getEmail());"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertEquals(0, accountRequestsList.size());"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" ______TS(\"account request indexed should be searchable\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" ParamsNames.INSTRUCTOR_EMAIL, accountRequest.getEmail(),"},{"lineNumber":60,"author":{"gitId":"-"},"content":" ParamsNames.INSTRUCTOR_INSTITUTION, accountRequest.getInstitute(),"},{"lineNumber":61,"author":{"gitId":"-"},"content":" };"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" AccountRequestSearchIndexingWorkerAction action \u003d getAction(submissionParams);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" getJsonResult(action);"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" accountRequestsList \u003d logic.searchAccountRequestsInWholeSystem(accountRequest.getEmail());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertEquals(1, accountRequestsList.size());"},{"lineNumber":68,"author":{"gitId":"-"},"content":" assertEquals(accountRequest.getName(), accountRequestsList.get(0).getName());"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" verifyOnlyAdminCanAccess(course);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":26,"-":52}},{"path":"src/it/java/teammates/it/ui/webapi/CreateInstructorActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.request.InstructorCreateRequest;"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.webapi.CreateInstructorAction;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.webapi.InvalidOperationException;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@link CreateInstructorAction}."},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"public class CreateInstructorActionIT extends BaseActionIT\u003cCreateInstructorAction\u003e {"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" @BeforeMethod"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" protected void setUp() throws Exception {"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" super.setUp();"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" HibernateUtil.flushSession();"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" protected String getActionUri() {"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" return Const.ResourceURIs.INSTRUCTOR;"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" protected String getRequestMethod() {"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" return POST;"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" protected void testExecute() {"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" // see test cases below"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" protected void testExecute_typicalCase_shouldPass() throws Exception {"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" loginAsAdmin();"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" Course course1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" String[] params \u003d {"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, course1.getId(),"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" InstructorCreateRequest instructorCreateRequest \u003d new InstructorCreateRequest("},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" \"00000000-0000-4000-8000-000000000006\", \"newInstructorName\","},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" \"newInstructorEmail@mail.com\", Const.InstructorPermissionRoleNames.INSTRUCTOR_PERMISSION_ROLE_COOWNER,"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" \"instructorDisplayName\", false);"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" CreateInstructorAction action \u003d getAction(instructorCreateRequest, params);"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" JsonResult response \u003d getJsonResult(action);"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" InstructorData instructorData \u003d (InstructorData) response.getOutput();"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" Instructor createdInstructor \u003d logic.getInstructorForEmail(course1.getId(), instructorCreateRequest.getEmail());"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" assertEquals(createdInstructor.getName(), instructorCreateRequest.getName());"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" assertEquals(createdInstructor.getEmail(), instructorCreateRequest.getEmail());"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" assertEquals(createdInstructor.getName(), instructorData.getName());"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" assertEquals(createdInstructor.getEmail(), instructorData.getEmail());"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" assertFalse(createdInstructor.isDisplayedToStudents());"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" assertTrue(createdInstructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_COURSE));"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" assertTrue(createdInstructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR));"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" assertTrue(createdInstructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_SESSION));"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" assertTrue(createdInstructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_STUDENT));"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" protected void testExecute_uniqueEmailClash_shouldFail() throws Exception {"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor1OfCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" loginAsAdmin();"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" String[] params \u003d {"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, instructor1OfCourse1.getCourseId(),"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" InstructorCreateRequest instructorCreateRequest \u003d new InstructorCreateRequest("},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" instructor1OfCourse1.getCourseId(), \"instructor3ofCourse1\","},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" instructor1OfCourse1.getEmail(), Const.InstructorPermissionRoleNames.INSTRUCTOR_PERMISSION_ROLE_TUTOR,"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" \"instructor3ofCourse1\", false);"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" CreateInstructorAction action \u003d getAction(instructorCreateRequest, params);"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" assertThrows(InvalidOperationException.class, action::execute);"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor2OfCourse1\");"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"Admins can access\");"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" verifyAccessibleForAdmin(submissionParams);"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"only instructors of the same course can access\");"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" verifyOnlyInstructorsOfTheSameCourseWithCorrectCoursePrivilegeCanAccess(course,"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR, submissionParams);"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"instructors of other courses cannot access\");"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" verifyInaccessibleForInstructorsOfOtherCourses(course, submissionParams);"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":119}},{"path":"src/it/java/teammates/it/ui/webapi/DeleteStudentsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.DeleteStudentsAction;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * SUT: {@link DeleteStudentsAction}."},{"lineNumber":17,"author":{"gitId":"-"},"content":" */"},{"lineNumber":18,"author":{"gitId":"-"},"content":"public class DeleteStudentsActionIT extends BaseActionIT\u003cDeleteStudentsAction\u003e {"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":22,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":24,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":25,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"-"},"content":" String getActionUri() {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" return Const.ResourceURIs.STUDENTS;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"-"},"content":" String getRequestMethod() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return DELETE;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"-"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":42,"author":{"gitId":"-"},"content":" String courseId \u003d instructor.getCourseId();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // TODO Remove limit after migration completes"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" int deleteLimit \u003d 4;"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case delete a limited number of students\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsToDelete \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"marquestye"},"content":" assertEquals(5, studentsToDelete.size());"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, courseId,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" Const.ParamsNames.LIMIT, String.valueOf(deleteLimit),"},{"lineNumber":56,"author":{"gitId":"-"},"content":" };"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" DeleteStudentsAction deleteStudentsAction \u003d getAction(params);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" getJsonResult(deleteStudentsAction);"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" for (Student student : studentsToDelete) {"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" assertNull(logic.getStudentByRegistrationKey(student.getRegKey()));"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" ______TS(\"Random course given, fails silently\");"},{"lineNumber":66,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, \"non-existent-course-id\","},{"lineNumber":68,"author":{"gitId":"-"},"content":" Const.ParamsNames.LIMIT, String.valueOf(deleteLimit),"},{"lineNumber":69,"author":{"gitId":"-"},"content":" };"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" deleteStudentsAction \u003d getAction(params);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" getJsonResult(deleteStudentsAction);"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" ______TS(\"Invalid params\");"},{"lineNumber":75,"author":{"gitId":"-"},"content":" verifyHttpParameterFailure();"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":80,"author":{"gitId":"-"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":85,"author":{"gitId":"-"},"content":" };"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" verifyOnlyInstructorsOfTheSameCourseWithCorrectCoursePrivilegeCanAccess("},{"lineNumber":88,"author":{"gitId":"-"},"content":" course, Const.InstructorPermissions.CAN_MODIFY_STUDENT, params);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":1,"dishenggg":2,"-":88}},{"path":"src/it/java/teammates/it/ui/webapi/EnrollStudentsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import java.util.Arrays;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.EnrollStudentsData;"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.request.StudentsEnrollRequest;"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.EnrollStudentsAction;"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.InvalidOperationException;"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link EnrollStudentsAction}."},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":"public class EnrollStudentsActionIT extends BaseActionIT\u003cEnrollStudentsAction\u003e {"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" protected String getActionUri() {"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" return Const.ResourceURIs.STUDENTS;"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" protected String getRequestMethod() {"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" return PUT;"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" private StudentsEnrollRequest prepareRequest(List\u003cStudent\u003e students) {"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" List\u003cStudentsEnrollRequest.StudentEnrollRequest\u003e studentEnrollRequests \u003d new ArrayList\u003c\u003e();"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" students.forEach(student -\u003e {"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" studentEnrollRequests.add(new StudentsEnrollRequest.StudentEnrollRequest(student.getName(),"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" student.getEmail(), student.getTeam().getName(), student.getSection().getName(), student.getComments()));"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" });"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" return new StudentsEnrollRequest(studentEnrollRequests);"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" public void testExecute() throws Exception {"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d typicalBundle.students.get(\"student1InCourse1\").getCourseId();"},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" Course course \u003d logic.getCourse(courseId);"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" Section section \u003d logic.getSection(courseId, \"Section 1\");"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":" Team team \u003d logic.getTeamOrCreate(section, \"Team 1\");"},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" Student newStudent \u003d new Student(course, \"Test Student\", \"test@email.com\", \"Test Comment\", team);"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":" String[] params \u003d new String[] {"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, courseId,"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e students \u003d new ArrayList\u003c\u003e(logic.getStudentsForCourse(courseId));"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":" assertEquals(5, students.size());"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical Success Case For Enrolling a Student\");"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" StudentsEnrollRequest request \u003d prepareRequest(Arrays.asList(newStudent));"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" EnrollStudentsAction enrollStudentsAction \u003d getAction(request, params);"},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" JsonResult res \u003d getJsonResult(enrollStudentsAction);"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":" EnrollStudentsData data \u003d (EnrollStudentsData) res.getOutput();"},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" assertEquals(1, data.getStudentsData().getStudents().size());"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentsInCourse \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":" assertEquals(6, studentsInCourse.size());"},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Fail to enroll due to duplicate team name across sections\");"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" String expectedMessage \u003d \"Team \\\"%s\\\" is detected in both Section \\\"%s\\\" and Section \\\"%s\\\".\""},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" + \" Please use different team names in different sections.\";"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" Section newSection \u003d logic.getSection(courseId, \"Section 3\");"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" Team newTeam \u003d new Team(newSection, \"Team 1\");"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" newStudent \u003d new Student(course, \"Test Student\", \"test@email.com\", \"Test Comment\", newTeam);"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" Student secondStudent \u003d new Student(course, \"Test Student 2\", \"test2@email.com\", \"Test Comment\","},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" team);"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" StudentsEnrollRequest req \u003d prepareRequest(Arrays.asList(secondStudent, newStudent));"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":" InvalidOperationException exception \u003d verifyInvalidOperation(req, params);"},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" assertEquals(String.format(expectedMessage, \"Team 1\", \"Section 3\", \"Section 1\"), exception.getMessage());"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical Success Case For Changing Details (except email) of a Student\");"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" Section section3 \u003d logic.getSection(courseId, \"Section 3\");"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" Team team3 \u003d logic.getTeamOrCreate(section3, \"Team 3\");"},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":" Student changedTeam \u003d new Student(course, \"Student 1\", \"student1@teammates.tmt\", \"Test Comment\", team3);"},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":" request \u003d prepareRequest(Arrays.asList(changedTeam));"},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" enrollStudentsAction \u003d getAction(request, params);"},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" res \u003d getJsonResult(enrollStudentsAction);"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":" data \u003d (EnrollStudentsData) res.getOutput();"},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" assertEquals(1, data.getStudentsData().getStudents().size());"},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" studentsInCourse \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":114,"author":{"gitId":"marquestye"},"content":" assertEquals(6, studentsInCourse.size());"},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":" // Verify that changes have cascaded to feedback responses"},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" String giverEmail \u003d \"student1@teammates.tmt\";"},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":" logic.getFeedbackResponsesFromGiverForCourse(courseId, giverEmail);"},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesFromUser) {"},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" assertEquals(logic.getSection(courseId, \"Section 3\"), response.getGiverSection());"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" logic.getFeedbackResponsesForRecipientForCourse(courseId, giverEmail);"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesToUser) {"},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":" assertEquals(logic.getSection(courseId, \"Section 3\"), response.getRecipientSection());"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponseComment\u003e commentsFromUser \u003d logic.getFeedbackResponseCommentsForResponse(response.getId());"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponseComment comment : commentsFromUser) {"},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" if (comment.getGiver().equals(giverEmail)) {"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" assertEquals(logic.getSection(courseId, \"Section 3\"), comment.getGiverSection());"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" String[] params \u003d new String[] {"},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":147,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":148,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":" verifyOnlyInstructorsOfTheSameCourseWithCorrectCoursePrivilegeCanAccess("},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":" course, Const.InstructorPermissions.CAN_MODIFY_STUDENT, params);"},{"lineNumber":151,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":152,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":149,"marquestye":3}},{"path":"src/it/java/teammates/it/ui/webapi/FeedbackSessionClosingRemindersActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Duration;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.FeedbackSessionClosingRemindersAction;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackSessionClosingRemindersAction}."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class FeedbackSessionClosingRemindersActionIT extends BaseActionIT\u003cFeedbackSessionClosingRemindersAction\u003e {"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":27,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":28,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":32,"author":{"gitId":"-"},"content":" prepareSession();"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private void prepareSession() {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // DEADLINE EXTENSIONS"},{"lineNumber":37,"author":{"gitId":"-"},"content":" String[] deKeys \u003d {\"student1InCourse1Session1\", \"instructor1InCourse1Session1\"};"},{"lineNumber":38,"author":{"gitId":"-"},"content":" List\u003cDeadlineExtension\u003e exts \u003d new ArrayList\u003c\u003e();"},{"lineNumber":39,"author":{"gitId":"-"},"content":" for (String deKey : deKeys) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exts.add(typicalBundle.deadlineExtensions.get(deKey));"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" // FEEDBACK QUESTIONS"},{"lineNumber":44,"author":{"gitId":"-"},"content":" String[] fqKeys \u003d {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"qn1InSession1InCourse1\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"qn2InSession1InCourse1\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"qn3InSession1InCourse1\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"qn4InSession1InCourse1\","},{"lineNumber":49,"author":{"gitId":"-"},"content":" \"qn5InSession1InCourse1\","},{"lineNumber":50,"author":{"gitId":"-"},"content":" \"qn6InSession1InCourse1NoResponses\","},{"lineNumber":51,"author":{"gitId":"-"},"content":" };"},{"lineNumber":52,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e qns \u003d new ArrayList\u003c\u003e();"},{"lineNumber":53,"author":{"gitId":"-"},"content":" for (String fqKey : fqKeys) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" qns.add(typicalBundle.feedbackQuestions.get(fqKey));"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":58,"author":{"gitId":"-"},"content":" session.setDeadlineExtensions(exts);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" session.setFeedbackQuestions(qns);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":63,"author":{"gitId":"-"},"content":" String getActionUri() {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return Const.CronJobURIs.AUTOMATED_FEEDBACK_CLOSING_REMINDERS;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":68,"author":{"gitId":"-"},"content":" String getRequestMethod() {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return GET;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":73,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":74,"author":{"gitId":"-"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":76,"author":{"gitId":"-"},"content":" verifyOnlyAdminCanAccess(course);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":81,"author":{"gitId":"-"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" loginAsAdmin();"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 1: email tasks added for 1 all users of 1 session\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess1();"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 2: email tasks added for 1 all users of 1 session and 1 deadline extension\");"},{"lineNumber":88,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess2();"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 3: Only 1 email task queued -- \""},{"lineNumber":91,"author":{"gitId":"-"},"content":" + \"0 for session: already sent, \""},{"lineNumber":92,"author":{"gitId":"-"},"content":" + \"1 for deadline extension: closing-soon not sent yet\");"},{"lineNumber":93,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess3();"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 4: No tasks queued -- \""},{"lineNumber":96,"author":{"gitId":"-"},"content":" + \"both session and deadline extensions have already sent closing-soon emails\");"},{"lineNumber":97,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess4();"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 5: No tasks queued -- session\u0027s closing-soon email disabled\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess5();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess1() {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":106,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":109,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(false);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":111,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertTrue(session.isClosingSoonEmailSent());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertTrue(session.getDeadlineExtensions().stream().allMatch(de -\u003e !de.isClosingSoonEmailSent()));"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"marquestye"},"content":" // 7 email tasks queued:"},{"lineNumber":124,"author":{"gitId":"marquestye"},"content":" // 1 co-owner, 5 students and 3 instructors,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" // but 1 student and 1 instructor have deadline extensions (should not receive email)"},{"lineNumber":126,"author":{"gitId":"marquestye"},"content":" verifySpecifiedTasksAdded(Const.TaskQueue.SEND_EMAIL_QUEUE_NAME, 7);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess2() {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":135,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(false);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":137,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" DeadlineExtension de \u003d session.getDeadlineExtensions().get(0);"},{"lineNumber":140,"author":{"gitId":"-"},"content":" de.setEndTime(now.plusSeconds(oneHour * 16));"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assertTrue(session.isClosingSoonEmailSent());"},{"lineNumber":150,"author":{"gitId":"-"},"content":" assertTrue(de.isClosingSoonEmailSent());"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"marquestye"},"content":" // 8 email tasks queued:"},{"lineNumber":153,"author":{"gitId":"marquestye"},"content":" // - 7 emails: 1 co-owner, 5 students and 3 instructors,"},{"lineNumber":154,"author":{"gitId":"-"},"content":" // but 1 student and 1 instructor have deadline extensions (should not receive email)"},{"lineNumber":155,"author":{"gitId":"-"},"content":" // - 1 email: 1 student deadline extension"},{"lineNumber":156,"author":{"gitId":"marquestye"},"content":" verifySpecifiedTasksAdded(Const.TaskQueue.SEND_EMAIL_QUEUE_NAME, 8);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess3() {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":165,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(true);"},{"lineNumber":166,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":167,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" DeadlineExtension de \u003d session.getDeadlineExtensions().get(0);"},{"lineNumber":170,"author":{"gitId":"-"},"content":" de.setEndTime(now.plusSeconds(oneHour * 16));"},{"lineNumber":171,"author":{"gitId":"-"},"content":" de.setClosingSoonEmailSent(false);"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertTrue(session.isClosingSoonEmailSent());"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertTrue(de.isClosingSoonEmailSent());"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" // 1 email tasks queued:"},{"lineNumber":184,"author":{"gitId":"-"},"content":" // - 0 emails: session already sent closing-soon emails"},{"lineNumber":185,"author":{"gitId":"-"},"content":" // - 1 email: 1 student deadline extension where closing-soon email not sent yet"},{"lineNumber":186,"author":{"gitId":"-"},"content":" verifySpecifiedTasksAdded(Const.TaskQueue.SEND_EMAIL_QUEUE_NAME, 1);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess4() {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":192,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":195,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(true);"},{"lineNumber":196,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":197,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" DeadlineExtension de \u003d session.getDeadlineExtensions().get(0);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" de.setEndTime(now.plusSeconds(oneHour * 16));"},{"lineNumber":201,"author":{"gitId":"-"},"content":" de.setClosingSoonEmailSent(true);"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":206,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":207,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":208,"author":{"gitId":"-"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":210,"author":{"gitId":"-"},"content":" assertTrue(session.isClosingSoonEmailSent());"},{"lineNumber":211,"author":{"gitId":"-"},"content":" assertTrue(de.isClosingSoonEmailSent());"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" verifyNoTasksAdded();"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess5() {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":219,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":222,"author":{"gitId":"-"},"content":" session.setClosingEmailEnabled(false);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(false);"},{"lineNumber":224,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":225,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" DeadlineExtension de \u003d session.getDeadlineExtensions().get(0);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" de.setEndTime(now.plusSeconds(oneHour * 16));"},{"lineNumber":229,"author":{"gitId":"-"},"content":" de.setClosingSoonEmailSent(false);"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":235,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":238,"author":{"gitId":"-"},"content":" assertTrue(!session.isClosingSoonEmailSent());"},{"lineNumber":239,"author":{"gitId":"-"},"content":" assertTrue(!de.isClosingSoonEmailSent());"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" verifyNoTasksAdded();"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":6,"-":237}},{"path":"src/it/java/teammates/it/ui/webapi/GetCourseJoinStatusActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dishenggg"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.output.JoinStatus;"},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.webapi.GetCourseJoinStatusAction;"},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":11,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":" * SUT: {@link GetCourseJoinStatusAction}."},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"public class GetCourseJoinStatusActionIT extends BaseActionIT\u003cGetCourseJoinStatusAction\u003e {"},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":17,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":18,"author":{"gitId":"dishenggg"},"content":" @BeforeMethod"},{"lineNumber":19,"author":{"gitId":"dishenggg"},"content":" protected void setUp() throws Exception {"},{"lineNumber":20,"author":{"gitId":"dishenggg"},"content":" super.setUp();"},{"lineNumber":21,"author":{"gitId":"dishenggg"},"content":" this.typicalBundle \u003d loadSqlDataBundle(\"/typicalDataBundle.json\");"},{"lineNumber":22,"author":{"gitId":"dishenggg"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":23,"author":{"gitId":"dishenggg"},"content":" HibernateUtil.flushSession();"},{"lineNumber":24,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":25,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":26,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" protected String getActionUri() {"},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":" return Const.ResourceURIs.JOIN;"},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":" protected String getRequestMethod() {"},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" return GET;"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":" protected void testExecute() {"},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" loginAsUnregistered(\"unreg.user\");"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Not enough parameters\");"},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" verifyHttpParameterFailure();"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" verifyHttpParameterFailure("},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, \"regkey\""},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" );"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" verifyHttpParameterFailure("},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" );"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: student is already registered\");"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":" String registeredStudentKey \u003d"},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" logic.getStudentForEmail(\"course-1\", \"student1@teammates.tmt\").getRegKey();"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" String[] params \u003d new String[] {"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, registeredStudentKey,"},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":" GetCourseJoinStatusAction getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" JsonResult result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" JoinStatus output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":" assertTrue(output.getHasJoined());"},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: student is not registered\");"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" String unregisteredStudentKey \u003d"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":" logic.getStudentForEmail(\"course-1\", \"unregisteredStudentInCourse1@teammates.tmt\").getRegKey();"},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, unregisteredStudentKey,"},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" assertFalse(output.getHasJoined());"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Failure case: regkey is not valid for student\");"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, \"ANXKJZNZXNJCZXKJDNKSDA\","},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":" verifyEntityNotFound(params);"},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: instructor is already registered\");"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":93,"author":{"gitId":"dishenggg"},"content":" String registeredInstructorKey \u003d"},{"lineNumber":94,"author":{"gitId":"dishenggg"},"content":" logic.getInstructorForEmail(\"course-1\", \"instr1@teammates.tmt\").getRegKey();"},{"lineNumber":95,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":96,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":97,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, registeredInstructorKey,"},{"lineNumber":98,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":99,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":100,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":101,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":102,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":" assertTrue(output.getHasJoined());"},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":107,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: instructor is not registered\");"},{"lineNumber":108,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":109,"author":{"gitId":"dishenggg"},"content":" String unregisteredInstructorKey \u003d"},{"lineNumber":110,"author":{"gitId":"dishenggg"},"content":" logic.getInstructorForEmail(\"course-1\", \"unregisteredInstructor@teammates.tmt\").getRegKey();"},{"lineNumber":111,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":112,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":113,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, unregisteredInstructorKey,"},{"lineNumber":114,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":115,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":116,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":117,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":118,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":" assertFalse(output.getHasJoined());"},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Failure case: regkey is not valid for instructor\");"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, \"ANXKJZNZXNJCZXKJDNKSDA\","},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" verifyEntityNotFound(params);"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: account request not used, instructor has not joined course\");"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" String accountRequestNotUsedKey \u003d logic.getAccountRequest(\"unregisteredinstructor1@gmail.tmt\","},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" \"TEAMMATES Test Institute 1\").getRegistrationKey();"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, accountRequestNotUsedKey,"},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":140,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.IS_CREATING_ACCOUNT, \"true\","},{"lineNumber":141,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":142,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":143,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":144,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":145,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":146,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":147,"author":{"gitId":"dishenggg"},"content":" assertFalse(output.getHasJoined());"},{"lineNumber":148,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":149,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: account request already used, instructor has joined course\");"},{"lineNumber":150,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":151,"author":{"gitId":"dishenggg"},"content":" String accountRequestUsedKey \u003d"},{"lineNumber":152,"author":{"gitId":"dishenggg"},"content":" logic.getAccountRequest(\"instr1@teammates.tmt\", \"TEAMMATES Test Institute 1\").getRegistrationKey();"},{"lineNumber":153,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":154,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":155,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, accountRequestUsedKey,"},{"lineNumber":156,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":157,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.IS_CREATING_ACCOUNT, \"true\","},{"lineNumber":158,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":159,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":160,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":161,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":162,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":163,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":164,"author":{"gitId":"dishenggg"},"content":" assertTrue(output.getHasJoined());"},{"lineNumber":165,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":166,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Failure case: account request regkey is not valid\");"},{"lineNumber":167,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":168,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":169,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, \"invalid-registration-key\","},{"lineNumber":170,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":171,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.IS_CREATING_ACCOUNT, \"true\","},{"lineNumber":172,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":173,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":174,"author":{"gitId":"dishenggg"},"content":" verifyEntityNotFound(params);"},{"lineNumber":175,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":176,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Failure case: invalid entity type\");"},{"lineNumber":177,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":178,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":179,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, unregisteredStudentKey,"},{"lineNumber":180,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, \"unknown\","},{"lineNumber":181,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":182,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":183,"author":{"gitId":"dishenggg"},"content":" verifyHttpParameterFailure(params);"},{"lineNumber":184,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":185,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":186,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":187,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":188,"author":{"gitId":"dishenggg"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":189,"author":{"gitId":"dishenggg"},"content":" verifyAnyLoggedInUserCanAccess();"},{"lineNumber":190,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":191,"author":{"gitId":"dishenggg"},"content":"}"}],"authorContributionMap":{"domoberzin":1,"dishenggg":190}},{"path":"src/it/java/teammates/it/ui/webapi/GetFeedbackSessionSubmittedGiverSetActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import com.google.common.collect.Sets;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.FeedbackSessionSubmittedGiverSet;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.GetFeedbackSessionSubmittedGiverSetAction;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link GetFeedbackSessionSubmittedGiverSetAction}."},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"public class GetFeedbackSessionSubmittedGiverSetActionIT extends BaseActionIT\u003cGetFeedbackSessionSubmittedGiverSetAction\u003e {"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" protected String getActionUri() {"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" return Const.ResourceURIs.SESSION_SUBMITTED_GIVER_SET;"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" protected String getRequestMethod() {"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" return GET;"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" protected void testExecute() {"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":" Instructor instructor1OfCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" String instructorId \u003d instructor1OfCourse1.getGoogleId();"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fsa \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" loginAsInstructor(instructorId);"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Not enough parameters\");"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" verifyHttpParameterFailure();"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case\");"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, fsa.getName(),"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" GetFeedbackSessionSubmittedGiverSetAction pageAction \u003d getAction(submissionParams);"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" JsonResult result \u003d getJsonResult(pageAction);"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" FeedbackSessionSubmittedGiverSet output \u003d (FeedbackSessionSubmittedGiverSet) result.getOutput();"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" assertEquals(Sets.newHashSet(\"student1@teammates.tmt\", \"student2@teammates.tmt\","},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" \"student3@teammates.tmt\"), output.getGiverIdentifiers());"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fsa \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, fsa.getName(),"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":" verifyOnlyInstructorsOfTheSameCourseCanAccess(course, submissionParams);"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":78}},{"path":"src/it/java/teammates/it/ui/webapi/GetInstructorsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorsData;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.ui.request.Intent;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.GetInstructorsAction;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link GetInstructorsAction}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class GetInstructorsActionIT extends BaseActionIT\u003cGetInstructorsAction\u003e {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":25,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":27,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"-"},"content":" protected String getActionUri() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return Const.ResourceURIs.INSTRUCTORS;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" protected String getRequestMethod() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return GET;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"-"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case with FULL_DETAIL\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":51,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":52,"author":{"gitId":"-"},"content":" };"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" GetInstructorsAction action \u003d getAction(params);"},{"lineNumber":55,"author":{"gitId":"-"},"content":" JsonResult jsonResult \u003d getJsonResult(action);"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" InstructorsData output \u003d (InstructorsData) jsonResult.getOutput();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" List\u003cInstructorData\u003e instructors \u003d output.getInstructors();"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":" assertEquals(3, instructors.size());"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case with no intent\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":65,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, null,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" };"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" action \u003d getAction(params);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" jsonResult \u003d getJsonResult(action);"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" output \u003d (InstructorsData) jsonResult.getOutput();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" instructors \u003d output.getInstructors();"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" assertEquals(3, instructors.size());"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" for (InstructorData instructorData : instructors) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertNull(instructorData.getGoogleId());"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertNull(instructorData.getJoinState());"},{"lineNumber":79,"author":{"gitId":"-"},"content":" assertNull(instructorData.getIsDisplayedToStudents());"},{"lineNumber":80,"author":{"gitId":"-"},"content":" assertNull(instructorData.getRole());"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" ______TS(\"Unknown intent\");"},{"lineNumber":84,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, \"Unknown\","},{"lineNumber":87,"author":{"gitId":"-"},"content":" };"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" verifyHttpParameterFailure(params);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":93,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":94,"author":{"gitId":"-"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":96,"author":{"gitId":"-"},"content":" Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" ______TS(\"Course not found, logged in as instructor, intent FULL_DETAIL\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, \"does-not-exist-id\","},{"lineNumber":103,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":104,"author":{"gitId":"-"},"content":" };"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" verifyEntityNotFoundAcl(params);"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" ______TS(\"Course not found, logged in as student, intent undefined\");"},{"lineNumber":109,"author":{"gitId":"-"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, \"does-not-exist-id\","},{"lineNumber":113,"author":{"gitId":"-"},"content":" };"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" verifyEntityNotFoundAcl(params);"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" ______TS(\"Unknown login entity, intent FULL_DETAIL\");"},{"lineNumber":118,"author":{"gitId":"-"},"content":" loginAsUnregistered(\"unregistered\");"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":122,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":123,"author":{"gitId":"-"},"content":" };"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" ______TS(\"Unknown login entity, intent undefined\");"},{"lineNumber":128,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":130,"author":{"gitId":"-"},"content":" };"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" ______TS(\"Unknown intent, logged in as instructor\");"},{"lineNumber":135,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":139,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, \"Unknown\","},{"lineNumber":140,"author":{"gitId":"-"},"content":" };"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" verifyHttpParameterFailureAcl(params);"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" ______TS(\"Intent FULL_DETAIL, should authenticate as instructor\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":148,"author":{"gitId":"-"},"content":" };"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" verifyOnlyInstructorsOfTheSameCourseCanAccess(instructor.getCourse(), params);"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" ______TS(\"Intent undefined, should authenticate as student, access own course\");"},{"lineNumber":153,"author":{"gitId":"-"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, student.getCourseId(),"},{"lineNumber":157,"author":{"gitId":"-"},"content":" };"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" verifyCanAccess(params);"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":" ______TS(\"Intent undefined, should authenticate as student, access other course\");"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Student otherStudent \u003d typicalBundle.students.get(\"student1InCourse2\");"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" assertNotEquals(otherStudent.getCourse(), student.getCourse());"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, otherStudent.getCourseId(),"},{"lineNumber":168,"author":{"gitId":"-"},"content":" };"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":2,"-":171}},{"path":"src/it/java/teammates/it/ui/webapi/GetSessionResponseStatsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.FeedbackSessionStatsData;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.GetSessionResponseStatsAction;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link GetSessionResponseStatsAction}."},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"public class GetSessionResponseStatsActionIT extends BaseActionIT\u003cGetSessionResponseStatsAction\u003e {"},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" String getActionUri() {"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" return Const.ResourceURIs.SESSION_STATS;"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" String getRequestMethod() {"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" return GET;"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" protected void testExecute() {"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" ______TS(\"typical: instructor accesses feedback stats of his/her course\");"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" FeedbackSession accessibleFs \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFs.getName(),"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, accessibleFs.getCourse().getId(),"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" GetSessionResponseStatsAction a \u003d getAction(submissionParams);"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" JsonResult r \u003d getJsonResult(a);"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" FeedbackSessionStatsData output \u003d (FeedbackSessionStatsData) r.getOutput();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertEquals(8, output.getExpectedTotal());"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" assertEquals(3, output.getSubmittedTotal());"},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" ______TS(\"fail: instructor accesses stats of non-existent feedback session\");"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" String nonexistentFeedbackSession \u003d \"nonexistentFeedbackSession\";"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, nonexistentFeedbackSession,"},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, accessibleFs.getCourse().getId(),"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" verifyEntityNotFound(submissionParams);"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" ______TS(\"accessible for admin\");"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" verifyAccessibleForAdmin();"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" ______TS(\"accessible for authenticated instructor\");"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" Course course1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" FeedbackSession accessibleFs \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFs.getName(),"},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, accessibleFs.getCourse().getId(),"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" verifyOnlyInstructorsOfTheSameCourseCanAccess(course1, submissionParams);"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":85,"-":1}},{"path":"src/it/java/teammates/it/ui/webapi/GetSessionResultsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"import teammates.ui.output.SessionResultsData;"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"import teammates.ui.request.Intent;"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"import teammates.ui.webapi.GetSessionResultsAction;"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" * SUT: {@link GetSessionResultsAction}."},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":"public class GetSessionResultsActionIT extends BaseActionIT\u003cGetSessionResultsAction\u003e {"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" protected String getActionUri() {"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" return Const.ResourceURIs.RESULT;"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" protected String getRequestMethod() {"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" return GET;"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" @BeforeMethod"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" protected void setUp() throws Exception {"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" super.setUp();"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" logoutUser();"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" HibernateUtil.flushSession();"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" HibernateUtil.clearSession();"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" protected void testExecute() {"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" ______TS(\"Typical: Instructor accesses results of their course\");"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" FeedbackSession accessibleFeedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFeedbackSession.getName(),"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.name(),"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" GetSessionResultsAction a \u003d getAction(submissionParams);"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" JsonResult r \u003d getJsonResult(a);"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" SessionResultsData output \u003d (SessionResultsData) r.getOutput();"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" SessionResultsData expectedResults \u003d SessionResultsData.initForInstructor("},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" logic.getSessionResultsForCourse(accessibleFeedbackSession,"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(),"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" null, null, FeedbackResultFetchType.BOTH));"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" assertTrue(isSessionResultsDataEqual(expectedResults, output));"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" ______TS(\"Typical: Instructor accesses results of their course with breakdown\");"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" Set\u003cSection\u003e sections \u003d new HashSet\u003c\u003e();"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" typicalBundle.feedbackResponses.values().forEach(resp -\u003e {"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" sections.add(resp.getGiverSection());"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" sections.add(resp.getRecipientSection());"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" for (FeedbackResultFetchType fetchType : FeedbackResultFetchType.values()) {"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" for (Section section : sections) {"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFeedbackSession.getName(),"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.name(),"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_RESULTS_GROUPBYSECTION, section.getName(),"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_RESULTS_SECTION_BY_GIVER_RECEIVER, fetchType.name(),"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" a \u003d getAction(submissionParams);"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" r \u003d getJsonResult(a);"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" output \u003d (SessionResultsData) r.getOutput();"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" expectedResults \u003d SessionResultsData.initForInstructor("},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" logic.getSessionResultsForCourse(accessibleFeedbackSession,"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(),"},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":" null, section.getName(), fetchType));"},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" assertTrue(isSessionResultsDataEqual(expectedResults, output));"},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" ______TS(\"Typical: Instructor previews session results as student\");"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":112,"author":{"gitId":"xenosf"},"content":" Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":113,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":114,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFeedbackSession.getName(),"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":117,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.name(),"},{"lineNumber":118,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.PREVIEWAS, student.getEmail(),"},{"lineNumber":119,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":120,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":" a \u003d getAction(submissionParams);"},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" r \u003d getJsonResult(a);"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" output \u003d (SessionResultsData) r.getOutput();"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":" expectedResults \u003d SessionResultsData.initForStudent("},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" logic.getSessionResultsForUser(accessibleFeedbackSession,"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" student.getEmail(),"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" false, null, true),"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" student);"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" assertTrue(isSessionResultsDataEqual(expectedResults, output));"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" ______TS(\"Typical: Student accesses results of their course\");"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFeedbackSession.getName(),"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.name(),"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" a \u003d getAction(submissionParams);"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":" r \u003d getJsonResult(a);"},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" output \u003d (SessionResultsData) r.getOutput();"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":" expectedResults \u003d SessionResultsData.initForStudent("},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":" logic.getSessionResultsForUser(accessibleFeedbackSession,"},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" student.getEmail(),"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" false, null, false),"},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" student);"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" assertTrue(isSessionResultsDataEqual(expectedResults, output));"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" String[] submissionParams;"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" FeedbackSession publishedFeedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" FeedbackSession inaccessibleFeedbackSession \u003d typicalBundle.feedbackSessions.get("},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" \"unpublishedSession1InTypicalCourse\");"},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" ______TS(\"Inaccessible for authenticated instructor when unpublished\");"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, inaccessibleFeedbackSession.getName(),"},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, inaccessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.INSTRUCTOR_RESULT.name(),"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" verifyCannotAccess(submissionParams);"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":" ______TS(\"Inaccessible for authenticated student when unpublished\");"},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, inaccessibleFeedbackSession.getName(),"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, inaccessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.name(),"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":" Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" loginAsStudent(student1InCourse1.getGoogleId());"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" verifyCannotAccess(submissionParams);"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" ______TS(\"Accessible for authenticated instructor when published\");"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, publishedFeedbackSession.getName(),"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.INSTRUCTOR_RESULT.name(),"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" verifyAccessibleForInstructorsOfTheSameCourse(course, submissionParams);"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" verifyInaccessibleForInstructorsOfOtherCourses(course, submissionParams);"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" ______TS(\"Accessible for authenticated student when published\");"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, publishedFeedbackSession.getName(),"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.name(),"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" verifyAccessibleForStudentsOfTheSameCourse(course, submissionParams);"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" verifyInaccessibleForStudentsOfOtherCourse(course, submissionParams);"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" ______TS(\"Invalid intent\");"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, publishedFeedbackSession.getName(),"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, publishedFeedbackSession.getCourse().getId(),"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.INSTRUCTOR_SUBMISSION.name(),"},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" verifyHttpParameterFailure(submissionParams);"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, publishedFeedbackSession.getName(),"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, publishedFeedbackSession.getCourse().getId(),"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_SUBMISSION.name(),"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" verifyHttpParameterFailure(submissionParams);"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" private boolean isSessionResultsDataEqual(SessionResultsData self, SessionResultsData other) {"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" List\u003cSessionResultsData.QuestionOutput\u003e thisQuestions \u003d self.getQuestions();"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" List\u003cSessionResultsData.QuestionOutput\u003e otherQuestions \u003d other.getQuestions();"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" if (thisQuestions.size() !\u003d otherQuestions.size()) {"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" for (int i \u003d 0; i \u003c thisQuestions.size(); i++) {"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":" SessionResultsData.QuestionOutput thisQuestion \u003d thisQuestions.get(i);"},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" SessionResultsData.QuestionOutput otherQuestion \u003d otherQuestions.get(i);"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" if (!isQuestionOutputEqual(thisQuestion, otherQuestion)) {"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" private boolean isQuestionOutputEqual(SessionResultsData.QuestionOutput self,"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":" SessionResultsData.QuestionOutput other) {"},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":" if (!JsonUtils.toJson(self.getFeedbackQuestion()).equals(JsonUtils.toJson(other.getFeedbackQuestion()))"},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" || !self.getQuestionStatistics().equals(other.getQuestionStatistics())"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" || self.getHasResponseButNotVisibleForPreview() !\u003d other.getHasResponseButNotVisibleForPreview()"},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":" || self.getHasCommentNotVisibleForPreview() !\u003d other.getHasCommentNotVisibleForPreview()) {"},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" List\u003cSessionResultsData.ResponseOutput\u003e thisResponses;"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" List\u003cSessionResultsData.ResponseOutput\u003e otherResponses;"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" thisResponses \u003d self.getAllResponses();"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" otherResponses \u003d other.getAllResponses();"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" if (thisResponses.size() !\u003d otherResponses.size()) {"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" for (int j \u003d 0; j \u003c thisResponses.size(); j++) {"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" if (!isResponseOutputEqual(thisResponses.get(j), otherResponses.get(j))) {"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" private boolean isResponseOutputEqual(SessionResultsData.ResponseOutput self,"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" SessionResultsData.ResponseOutput other) {"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" return self.getGiver().equals(other.getGiver())"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getGiverTeam().equals(other.getGiverTeam())"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getGiverSection().equals(other.getGiverSection())"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getRecipient().equals(other.getRecipient())"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getRecipientTeam().equals(other.getRecipientTeam())"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getRecipientSection().equals(other.getRecipientSection())"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getResponseDetails().getJsonString().equals(other.getResponseDetails().getJsonString());"},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_withoutCorrectAuthInfoAccessStudentResult_shouldFail() throws Exception {"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" Course typicalCourse1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse1.getId(),"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" verifyInaccessibleForUnregisteredUsers(submissionParams);"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_studentAccessOwnCourseSessionResult_shouldPass() throws Exception {"},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":" Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" Course typicalCourse1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse1.getId(),"},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" loginAsStudent(student1InCourse1.getGoogleId());"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" verifyCanAccess(submissionParams);"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_studentAccessUnpublishedSessionStudentResult_shouldFail() {"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" Course typicalCourse \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" FeedbackSession unpublishedFeedbackSession \u003d typicalBundle.feedbackSessions.get(\"session2InTypicalCourse\");"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse.getId(),"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, unpublishedFeedbackSession.getName(),"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" loginAsStudent(student1InCourse1.getGoogleId());"},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" verifyCannotAccess(submissionParams);"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_accessStudentSessionResultWithMasqueradeMode_shouldPass() throws Exception {"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" Course typicalCourse1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse1.getId(),"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" loginAsAdmin();"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" verifyCanMasquerade(student1InCourse1.getGoogleId(), submissionParams);"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_studentAccessOtherCourseSessionResult_shouldFail() {"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" Student studentInOtherCourse \u003d typicalBundle.students.get(\"student2InCourse1\");"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" Course otherCourse \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" Course course \u003d typicalBundle.courses.get(\"course3\");"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"ongoingSession1InCourse3\");"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" loginAsStudent(studentInOtherCourse.getGoogleId());"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" verifyCannotAccess(submissionParams);"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":" // Malicious api call using course Id of the student to bypass the check"},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":" submissionParams[1] \u003d otherCourse.getId();"},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" verifyEntityNotFoundAcl(submissionParams);"},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_instructorAccessHisCourseFullDetail_shouldPass() throws Exception {"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":" Course typicalCourse1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse1.getId(),"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":" verifyOnlyInstructorsOfTheSameCourseCanAccess(typicalCourse1, submissionParams);"},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":361}},{"path":"src/it/java/teammates/it/ui/webapi/GetStudentsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentsData;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.GetStudentsAction;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link GetStudentsAction}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class GetStudentsActionIT extends BaseActionIT\u003cGetStudentsAction\u003e {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":25,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":27,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"-"},"content":" String getActionUri() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return Const.ResourceURIs.STUDENTS;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" String getRequestMethod() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return GET;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"-"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":46,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case with only course id, logged in as instructor\");"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":53,"author":{"gitId":"-"},"content":" };"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" GetStudentsAction getStudentsAction \u003d getAction(params);"},{"lineNumber":56,"author":{"gitId":"-"},"content":" JsonResult jsonResult \u003d getJsonResult(getStudentsAction);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" StudentsData response \u003d (StudentsData) jsonResult.getOutput();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" List\u003cStudentData\u003e students \u003d response.getStudents();"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"marquestye"},"content":" assertEquals(5, students.size());"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" StudentData firstStudentInStudents \u003d students.get(0);"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertNull(firstStudentInStudents.getGoogleId());"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertNull(firstStudentInStudents.getKey());"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertEquals(student.getName(), firstStudentInStudents.getName());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertEquals(student.getCourseId(), firstStudentInStudents.getCourseId());"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" logoutUser();"},{"lineNumber":70,"author":{"gitId":"-"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case with course id and team name, logged in as student\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":75,"author":{"gitId":"-"},"content":" Const.ParamsNames.TEAM_NAME, student.getTeamName(),"},{"lineNumber":76,"author":{"gitId":"-"},"content":" };"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" getStudentsAction \u003d getAction(params);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" jsonResult \u003d getJsonResult(getStudentsAction);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" response \u003d (StudentsData) jsonResult.getOutput();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" students \u003d response.getStudents();"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" Student expectedOtherTeamMember \u003d typicalBundle.students.get(\"student2InCourse1\");"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" assertEquals(4, students.size());"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" StudentData actualOtherTeamMember \u003d students.get(1);"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertNull(actualOtherTeamMember.getGoogleId());"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertNull(actualOtherTeamMember.getKey());"},{"lineNumber":91,"author":{"gitId":"-"},"content":" assertEquals(expectedOtherTeamMember.getName(), actualOtherTeamMember.getName());"},{"lineNumber":92,"author":{"gitId":"-"},"content":" assertEquals(expectedOtherTeamMember.getCourseId(), actualOtherTeamMember.getCourseId());"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":97,"author":{"gitId":"-"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" ______TS(\"Only instructors with correct privilege can access\");"},{"lineNumber":103,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":105,"author":{"gitId":"-"},"content":" };"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" verifyCanAccess(params);"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" ______TS(\"Student to view team members\");"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":115,"author":{"gitId":"-"},"content":" Const.ParamsNames.TEAM_NAME, student.getTeamName(),"},{"lineNumber":116,"author":{"gitId":"-"},"content":" };"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" verifyCanAccess(params);"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" ______TS(\"Unknown login entity\");"},{"lineNumber":123,"author":{"gitId":"-"},"content":" loginAsUnregistered(\"does-not-exist-id\");"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":127,"author":{"gitId":"-"},"content":" };"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":133,"author":{"gitId":"-"},"content":" Const.ParamsNames.TEAM_NAME, student.getTeamName(),"},{"lineNumber":134,"author":{"gitId":"-"},"content":" };"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":1,"dishenggg":1,"-":137}},{"path":"src/it/java/teammates/it/ui/webapi/InstructorSearchIndexingWorkerActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import teammates.test.TestProperties;"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.webapi.InstructorSearchIndexingWorkerAction;"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@link InstructorSearchIndexingWorkerAction}."},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"public class InstructorSearchIndexingWorkerActionIT extends BaseActionIT\u003cInstructorSearchIndexingWorkerAction\u003e {"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" @BeforeMethod"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" protected void setUp() throws Exception {"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" super.setUp();"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" HibernateUtil.flushSession();"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" protected String getActionUri() {"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" return Const.TaskQueue.INSTRUCTOR_SEARCH_INDEXING_WORKER_URL;"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" protected String getRequestMethod() {"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" return POST;"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" public void testExecute() throws Exception {"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" return;"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"instructor not yet indexed should not be searchable\");"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" List\u003cInstructor\u003e instructorList \u003d logic.searchInstructorsInWholeSystem(instructor1.getEmail());"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" assertEquals(0, instructorList.size());"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"instructor indexed should be searchable\");"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, instructor1.getCourseId(),"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.INSTRUCTOR_EMAIL, instructor1.getEmail(),"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" InstructorSearchIndexingWorkerAction action \u003d getAction(submissionParams);"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" getJsonResult(action);"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" instructorList \u003d logic.searchInstructorsInWholeSystem(instructor1.getEmail());"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" assertEquals(1, instructorList.size());"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" assertEquals(instructor1.getId(), instructorList.get(0).getId());"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, instructor1.getCourseId(),"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.INSTRUCTOR_EMAIL, instructor1.getEmail(),"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" verifyOnlyAdminCanAccess(course, submissionParams);"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":79}},{"path":"src/it/java/teammates/it/ui/webapi/JoinCourseActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":6,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.EmailType;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.EmailWrapper;"},{"lineNumber":9,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":12,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.webapi.InvalidOperationException;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.webapi.JoinCourseAction;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":15,"author":{"gitId":"yuanxi1"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":" * SUT: {@link JoinCourseAction}."},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"public class JoinCourseActionIT extends BaseActionIT\u003cJoinCourseAction\u003e {"},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":20,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"yuanxi1"},"content":" @BeforeMethod"},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":" protected void setUp() throws Exception {"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":" super.setUp();"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":25,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.flushSession();"},{"lineNumber":26,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"yuanxi1"},"content":" String getActionUri() {"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" return Const.ResourceURIs.JOIN;"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":33,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"yuanxi1"},"content":" String getRequestMethod() {"},{"lineNumber":35,"author":{"gitId":"yuanxi1"},"content":" return PUT;"},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" Student studentYetToJoinCourse \u003d typicalBundle.students.get(\"student2YetToJoinCourse4\");"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" String student1RegKey \u003d"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" getRegKeyForStudent(studentYetToJoinCourse.getCourseId(), studentYetToJoinCourse.getEmail());"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" String loggedInGoogleIdStu \u003d \"AccLogicT.student.id\";"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" Instructor instructorYetToJoinCourse \u003d typicalBundle.instructors.get(\"instructor2YetToJoinCourse4\");"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" String instructor1RegKey \u003d"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" getRegKeyForInstructor(instructorYetToJoinCourse.getCourseId(), instructorYetToJoinCourse.getEmail());"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" String loggedInGoogleIdInst \u003d \"AccLogicT.instr.id\";"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: student joins course\");"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" loginAsUnregistered(loggedInGoogleIdStu);"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, student1RegKey,"},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" JoinCourseAction joinCourseAction \u003d getAction(submissionParams);"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":" getJsonResult(joinCourseAction);"},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":" verifyNumberOfEmailsSent(1);"},{"lineNumber":65,"author":{"gitId":"yuanxi1"},"content":" EmailWrapper email \u003d mockEmailSender.getEmailsSent().get(0);"},{"lineNumber":66,"author":{"gitId":"yuanxi1"},"content":" assertEquals("},{"lineNumber":67,"author":{"gitId":"yuanxi1"},"content":" String.format(EmailType.USER_COURSE_REGISTER.getSubject(), \"Typical Course 4\", \"course-4\"),"},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" email.getSubject());"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: student is already registered\");"},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, student1RegKey,"},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":" InvalidOperationException ioe \u003d verifyInvalidOperation(submissionParams);"},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Student has already joined course\", ioe.getMessage());"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":" verifyNoEmailsSent();"},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: instructor joins course\");"},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":84,"author":{"gitId":"yuanxi1"},"content":" loginAsUnregistered(loggedInGoogleIdInst);"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, instructor1RegKey,"},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":89,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" joinCourseAction \u003d getAction(submissionParams);"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":" getJsonResult(joinCourseAction);"},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" verifyNumberOfEmailsSent(1);"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":" email \u003d mockEmailSender.getEmailsSent().get(0);"},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" assertEquals("},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":" String.format(EmailType.USER_COURSE_REGISTER.getSubject(), \"Typical Course 4\", \"course-4\"),"},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":" email.getSubject());"},{"lineNumber":99,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: instructor is already registered\");"},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, instructor1RegKey,"},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" ioe \u003d verifyInvalidOperation(submissionParams);"},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Instructor has already joined course\", ioe.getMessage());"},{"lineNumber":109,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":110,"author":{"gitId":"yuanxi1"},"content":" verifyNoEmailsSent();"},{"lineNumber":111,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":112,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: invalid regkey\");"},{"lineNumber":113,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":114,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":115,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, \"ANXKJZNZXNJCZXKJDNKSDA\","},{"lineNumber":116,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":117,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":118,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":119,"author":{"gitId":"yuanxi1"},"content":" verifyEntityNotFound(submissionParams);"},{"lineNumber":120,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":121,"author":{"gitId":"yuanxi1"},"content":" verifyNoEmailsSent();"},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":123,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: invalid entity type\");"},{"lineNumber":124,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":125,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":126,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, student1RegKey,"},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, \"invalid_entity_type\","},{"lineNumber":128,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":129,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":130,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(submissionParams);"},{"lineNumber":131,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":132,"author":{"gitId":"yuanxi1"},"content":" verifyNoEmailsSent();"},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":134,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":135,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":136,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":137,"author":{"gitId":"yuanxi1"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":138,"author":{"gitId":"yuanxi1"},"content":" verifyAnyLoggedInUserCanAccess();"},{"lineNumber":139,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":140,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":141,"author":{"gitId":"yuanxi1"},"content":" private String getRegKeyForStudent(String courseId, String email) {"},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" return logic.getStudentForEmail(courseId, email).getRegKey();"},{"lineNumber":143,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":144,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":145,"author":{"gitId":"yuanxi1"},"content":" private String getRegKeyForInstructor(String courseId, String email) {"},{"lineNumber":146,"author":{"gitId":"yuanxi1"},"content":" return logic.getInstructorForEmail(courseId, email).getRegKey();"},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":148,"author":{"gitId":"yuanxi1"},"content":"}"}],"authorContributionMap":{"yuanxi1":148}},{"path":"src/it/java/teammates/it/ui/webapi/SearchAccountRequestsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.test.TestProperties;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.AccountRequestsData;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.SearchAccountRequestsAction;"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link SearchAccountRequestsAction}."},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":"public class SearchAccountRequestsActionIT extends BaseActionIT\u003cSearchAccountRequestsAction\u003e {"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" verifyOnlyAdminCanAccess(course);"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" putDocuments(typicalBundle);"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" protected String getActionUri() {"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" return Const.ResourceURIs.SEARCH_ACCOUNT_REQUESTS;"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" protected String getRequestMethod() {"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" return GET;"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" protected void testExecute() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search with SearchService disabled\");"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, \"randomString123\" };"},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" SearchAccountRequestsAction action \u003d getAction(submissionParams);"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" JsonResult result \u003d getJsonResult(action, HttpStatus.SC_NOT_IMPLEMENTED);"},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" MessageOutput output \u003d (MessageOutput) result.getOutput();"},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Full-text search is not available.\", output.getMessage());"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" AccountRequest accountRequest \u003d typicalBundle.accountRequests.get(\"instructor1\");"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" loginAsAdmin();"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search via Email\");"},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, accountRequest.getEmail() };"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":" SearchAccountRequestsAction action \u003d getAction(submissionParams);"},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" JsonResult result \u003d getJsonResult(action, 200);"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" AccountRequestsData response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().stream()"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" .filter(i -\u003e i.getName().equals(accountRequest.getName()))"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" .findAny()"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" .isPresent());"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().get(0).getRegistrationKey() !\u003d null);"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search via Institute\");"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, accountRequest.getInstitute() };"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" action \u003d getAction(submissionParams);"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" result \u003d getJsonResult(action, 200);"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().stream()"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":" .filter(i -\u003e i.getName().equals(accountRequest.getName()))"},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" .findAny()"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" .isPresent());"},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().get(0).getRegistrationKey() !\u003d null);"},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search via Name\");"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, accountRequest.getName() };"},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" action \u003d getAction(submissionParams);"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" result \u003d getJsonResult(action, 200);"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().stream()"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" .filter(i -\u003e i.getName().equals(accountRequest.getName()))"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" .findAny()"},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" .isPresent());"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().get(0).getRegistrationKey() !\u003d null);"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search Duplicate Name\");"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, \"Instructor\" };"},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" action \u003d getAction(submissionParams);"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":" result \u003d getJsonResult(action, 200);"},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().get(0).getRegistrationKey() !\u003d null);"},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" assertEquals(11, response.getAccountRequests().size());"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search result with 0 matches\");"},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, \"randomString123\" };"},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" action \u003d getAction(submissionParams);"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":" result \u003d getJsonResult(action, 200);"},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" assertEquals(0, response.getAccountRequests().size());"},{"lineNumber":114,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":115}},{"path":"src/it/java/teammates/it/ui/webapi/SearchStudentsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":5,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.Test;"},{"lineNumber":6,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":9,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":12,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":"import teammates.test.TestProperties;"},{"lineNumber":15,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.output.StudentsData;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.webapi.SearchStudentsAction;"},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":20,"author":{"gitId":"yuanxi1"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"yuanxi1"},"content":" * SUT: {@link SearchStudentsAction}."},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":"public class SearchStudentsActionIT extends BaseActionIT\u003cSearchStudentsAction\u003e {"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":25,"author":{"gitId":"yuanxi1"},"content":" private final Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":26,"author":{"gitId":"yuanxi1"},"content":" private final Instructor instructor1OfCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"yuanxi1"},"content":" @BeforeMethod"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" protected void setUp() throws Exception {"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":" super.setUp();"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":33,"author":{"gitId":"yuanxi1"},"content":" putDocuments(typicalBundle);"},{"lineNumber":34,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.flushSession();"},{"lineNumber":35,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" protected String getActionUri() {"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":" return Const.ResourceURIs.SEARCH_STUDENTS;"},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" protected String getRequestMethod() {"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" return GET;"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" protected void testExecute() {"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" // See test cases below."},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" public void execute_invalidParameters_parameterFailure() {"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure();"},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":" String[] notEnoughParams \u003d new String[] {"},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"dummy\","},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(notEnoughParams);"},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":" String[] invalidEntityParams \u003d new String[] {"},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"dummy\","},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, \"dummy\","},{"lineNumber":65,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":66,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(invalidEntityParams);"},{"lineNumber":67,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" String[] adminParams \u003d new String[] {"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"dummy\","},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":" String[] instructorParams \u003d new String[] {"},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"dummy\","},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(instructorParams);"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":" loginAsInstructor(instructor1OfCourse1.getGoogleId());"},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(adminParams);"},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":84,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":" public void execute_adminSearchName_success() {"},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":89,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" String[] accNameParams \u003d new String[] {"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, student1InCourse1.getName(),"},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(accNameParams);"},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":99,"author":{"gitId":"marquestye"},"content":" assertEquals(11, response.getStudents().size());"},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":" public void execute_adminSearchCourseId_success() {"},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":109,"author":{"gitId":"yuanxi1"},"content":" String[] accCourseIdParams \u003d new String[] {"},{"lineNumber":110,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, student1InCourse1.getCourseId(),"},{"lineNumber":111,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":112,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":113,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(accCourseIdParams);"},{"lineNumber":114,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":115,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":116,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":117,"author":{"gitId":"marquestye"},"content":" assertEquals(11, response.getStudents().size());"},{"lineNumber":118,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":119,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":120,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":121,"author":{"gitId":"yuanxi1"},"content":" public void execute_adminSearchEmail_success() {"},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":123,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":124,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":125,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":126,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" String[] emailParams \u003d new String[] {"},{"lineNumber":128,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, student1InCourse1.getEmail(),"},{"lineNumber":129,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":130,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":131,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":132,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(emailParams);"},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":134,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":135,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" assertEquals(4, response.getStudents().size());"},{"lineNumber":137,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":138,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":139,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":140,"author":{"gitId":"yuanxi1"},"content":" public void execute_adminSearchNoMatch_noMatch() {"},{"lineNumber":141,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":143,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":144,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":145,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":146,"author":{"gitId":"yuanxi1"},"content":" String[] accNameParams \u003d new String[] {"},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"minuscoronavirus\","},{"lineNumber":148,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":149,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":150,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(accNameParams);"},{"lineNumber":151,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":152,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":153,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":154,"author":{"gitId":"yuanxi1"},"content":" assertEquals(0, response.getStudents().size());"},{"lineNumber":155,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":156,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":157,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":158,"author":{"gitId":"yuanxi1"},"content":" public void execute_instructorSearchGoogleId_matchOnlyStudentsInCourse() {"},{"lineNumber":159,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":160,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":161,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":162,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":163,"author":{"gitId":"yuanxi1"},"content":" loginAsInstructor(instructor1OfCourse1.getGoogleId());"},{"lineNumber":164,"author":{"gitId":"yuanxi1"},"content":" String[] googleIdParams \u003d new String[] {"},{"lineNumber":165,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"student1\","},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(googleIdParams);"},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":172,"author":{"gitId":"-"},"content":" assertEquals(3, response.getStudents().size());"},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":" public void execute_noSearchService_shouldReturn501() {"},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":" if (TestProperties.isSearchServiceActive()) {"},{"lineNumber":178,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":179,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":180,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":181,"author":{"gitId":"yuanxi1"},"content":" loginAsInstructor(instructor1OfCourse1.getGoogleId());"},{"lineNumber":182,"author":{"gitId":"yuanxi1"},"content":" String[] params \u003d new String[] {"},{"lineNumber":183,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"anything\","},{"lineNumber":184,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":185,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":186,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(params);"},{"lineNumber":187,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a, HttpStatus.SC_NOT_IMPLEMENTED);"},{"lineNumber":188,"author":{"gitId":"yuanxi1"},"content":" MessageOutput output \u003d (MessageOutput) result.getOutput();"},{"lineNumber":189,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":190,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Full-text search is not available.\", output.getMessage());"},{"lineNumber":191,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":192,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":193,"author":{"gitId":"yuanxi1"},"content":" params \u003d new String[] {"},{"lineNumber":194,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"anything\","},{"lineNumber":195,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":196,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":197,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":198,"author":{"gitId":"yuanxi1"},"content":" a \u003d getAction(params);"},{"lineNumber":199,"author":{"gitId":"yuanxi1"},"content":" result \u003d getJsonResult(a, HttpStatus.SC_NOT_IMPLEMENTED);"},{"lineNumber":200,"author":{"gitId":"yuanxi1"},"content":" output \u003d (MessageOutput) result.getOutput();"},{"lineNumber":201,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":202,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Full-text search is not available.\", output.getMessage());"},{"lineNumber":203,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":204,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":205,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":206,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":207,"author":{"gitId":"yuanxi1"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":208,"author":{"gitId":"yuanxi1"},"content":" verifyAccessibleForAdmin();"},{"lineNumber":209,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":210,"author":{"gitId":"yuanxi1"},"content":" verifyOnlyInstructorsCanAccess(course);"},{"lineNumber":211,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":212,"author":{"gitId":"yuanxi1"},"content":"}"}],"authorContributionMap":{"yuanxi1":208,"marquestye":2,"-":2}},{"path":"src/it/java/teammates/it/ui/webapi/StudentSearchIndexingWorkerActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const.TaskQueue;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlsearch.SearchManagerFactory;"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"import teammates.test.TestProperties;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"import teammates.ui.webapi.StudentSearchIndexingWorkerAction;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" * SUT: {@link StudentSearchIndexingWorkerAction}."},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"public class StudentSearchIndexingWorkerActionIT extends BaseActionIT\u003cStudentSearchIndexingWorkerAction\u003e {"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" private final Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" @BeforeMethod"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" protected void setUp() throws Exception {"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" super.setUp();"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" HibernateUtil.flushSession();"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" SearchManagerFactory.getStudentSearchManager().resetCollections();"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" protected String getActionUri() {"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" return TaskQueue.STUDENT_SEARCH_INDEXING_WORKER_URL;"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" protected String getRequestMethod() {"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" return POST;"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" // See test cases below"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" protected void testExecute_studentNotYetIndexed_shouldNotBeSearchable() throws Exception {"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" return;"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" List\u003cStudent\u003e studentList \u003d logic.searchStudentsInWholeSystem(student.getEmail());"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" assertEquals(0, studentList.size());"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" protected void testExecute_studentIndexed_shouldBeSearchable() throws Exception {"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" return;"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" ParamsNames.COURSE_ID, student.getCourseId(),"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" ParamsNames.STUDENT_EMAIL, student.getEmail(),"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" StudentSearchIndexingWorkerAction action \u003d getAction(submissionParams);"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" getJsonResult(action);"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" List\u003cStudent\u003e studentList \u003d logic.searchStudentsInWholeSystem(student.getEmail());"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" assertEquals(1, studentList.size());"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" assertEquals(student.getName(), studentList.get(0).getName());"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" verifyOnlyAdminCanAccess(course);"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":85}},{"path":"src/it/java/teammates/it/ui/webapi/UpdateStudentActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marquestye"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":3,"author":{"gitId":"marquestye"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"marquestye"},"content":"import java.util.UUID;"},{"lineNumber":5,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":6,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":7,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":9,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.EmailType;"},{"lineNumber":11,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.EmailWrapper;"},{"lineNumber":12,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":13,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":14,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.StringHelperExtension;"},{"lineNumber":15,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":16,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":17,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":19,"author":{"gitId":"marquestye"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":20,"author":{"gitId":"marquestye"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":21,"author":{"gitId":"marquestye"},"content":"import teammates.ui.request.StudentUpdateRequest;"},{"lineNumber":22,"author":{"gitId":"marquestye"},"content":"import teammates.ui.webapi.EntityNotFoundException;"},{"lineNumber":23,"author":{"gitId":"marquestye"},"content":"import teammates.ui.webapi.InvalidOperationException;"},{"lineNumber":24,"author":{"gitId":"marquestye"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":25,"author":{"gitId":"marquestye"},"content":"import teammates.ui.webapi.UpdateStudentAction;"},{"lineNumber":26,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":27,"author":{"gitId":"marquestye"},"content":"/**"},{"lineNumber":28,"author":{"gitId":"marquestye"},"content":" * SUT: {@link UpdateStudentAction}."},{"lineNumber":29,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":30,"author":{"gitId":"marquestye"},"content":"public class UpdateStudentActionIT extends BaseActionIT\u003cUpdateStudentAction\u003e {"},{"lineNumber":31,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":32,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":33,"author":{"gitId":"marquestye"},"content":" @BeforeMethod"},{"lineNumber":34,"author":{"gitId":"marquestye"},"content":" protected void setUp() throws Exception {"},{"lineNumber":35,"author":{"gitId":"marquestye"},"content":" super.setUp();"},{"lineNumber":36,"author":{"gitId":"marquestye"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":37,"author":{"gitId":"marquestye"},"content":" HibernateUtil.flushSession();"},{"lineNumber":38,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":39,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":40,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":41,"author":{"gitId":"marquestye"},"content":" protected String getActionUri() {"},{"lineNumber":42,"author":{"gitId":"marquestye"},"content":" return Const.ResourceURIs.STUDENT;"},{"lineNumber":43,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":44,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":45,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":" protected String getRequestMethod() {"},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" return PUT;"},{"lineNumber":48,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":49,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":50,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":51,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":52,"author":{"gitId":"marquestye"},"content":" public void testExecute() throws Exception {"},{"lineNumber":53,"author":{"gitId":"marquestye"},"content":" assert true;"},{"lineNumber":54,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":55,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":56,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":57,"author":{"gitId":"marquestye"},"content":" public void testExecute_invalidParameters_failure() throws Exception {"},{"lineNumber":58,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":59,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":60,"author":{"gitId":"marquestye"},"content":" ______TS(\"no parameters\");"},{"lineNumber":61,"author":{"gitId":"marquestye"},"content":" verifyHttpParameterFailure();"},{"lineNumber":62,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":63,"author":{"gitId":"marquestye"},"content":" ______TS(\"null student email\");"},{"lineNumber":64,"author":{"gitId":"marquestye"},"content":" String[] invalidParams \u003d new String[] {"},{"lineNumber":65,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":66,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":67,"author":{"gitId":"marquestye"},"content":" verifyHttpParameterFailure(invalidParams);"},{"lineNumber":68,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":69,"author":{"gitId":"marquestye"},"content":" ______TS(\"null course id\");"},{"lineNumber":70,"author":{"gitId":"marquestye"},"content":" invalidParams \u003d new String[] {"},{"lineNumber":71,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":72,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":73,"author":{"gitId":"marquestye"},"content":" verifyHttpParameterFailure(invalidParams);"},{"lineNumber":74,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":75,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":78,"author":{"gitId":"marquestye"},"content":" public void testExecute_typicalCase_success() throws Exception {"},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" String originalEmail \u003d student1.getEmail();"},{"lineNumber":82,"author":{"gitId":"marquestye"},"content":" Team originalTeam \u003d student1.getTeam();"},{"lineNumber":83,"author":{"gitId":"marquestye"},"content":" String originalComments \u003d student1.getComments();"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":85,"author":{"gitId":"marquestye"},"content":" String newStudentEmail \u003d \"newemail@gmail.tmt\";"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":" String newStudentTeam \u003d \"new student\u0027s team\";"},{"lineNumber":87,"author":{"gitId":"marquestye"},"content":" String newStudentComments \u003d \"this is new comment after editing\";"},{"lineNumber":88,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), newStudentEmail,"},{"lineNumber":89,"author":{"gitId":"marquestye"},"content":" newStudentTeam, student1.getSectionName(), newStudentComments, true);"},{"lineNumber":90,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":91,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":92,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":93,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":94,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":95,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":96,"author":{"gitId":"marquestye"},"content":" UpdateStudentAction updateAction \u003d getAction(updateRequest, submissionParams);"},{"lineNumber":97,"author":{"gitId":"marquestye"},"content":" JsonResult actionOutput \u003d getJsonResult(updateAction);"},{"lineNumber":98,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":99,"author":{"gitId":"marquestye"},"content":" MessageOutput msgOutput \u003d (MessageOutput) actionOutput.getOutput();"},{"lineNumber":100,"author":{"gitId":"marquestye"},"content":" assertEquals(\"Student has been updated and email sent\", msgOutput.getMessage());"},{"lineNumber":101,"author":{"gitId":"marquestye"},"content":" verifyNumberOfEmailsSent(1);"},{"lineNumber":102,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":103,"author":{"gitId":"marquestye"},"content":" Student updatedStudent \u003d logic.getStudent(student1.getId());"},{"lineNumber":104,"author":{"gitId":"marquestye"},"content":" assertEquals(updatedStudent.getEmail(), newStudentEmail);"},{"lineNumber":105,"author":{"gitId":"marquestye"},"content":" assertEquals(updatedStudent.getTeamName(), newStudentTeam);"},{"lineNumber":106,"author":{"gitId":"marquestye"},"content":" assertEquals(updatedStudent.getComments(), newStudentComments);"},{"lineNumber":107,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":108,"author":{"gitId":"marquestye"},"content":" EmailWrapper email \u003d getEmailsSent().get(0);"},{"lineNumber":109,"author":{"gitId":"marquestye"},"content":" String courseName \u003d logic.getCourse(student1.getCourseId()).getName();"},{"lineNumber":110,"author":{"gitId":"marquestye"},"content":" assertEquals(String.format(EmailType.STUDENT_EMAIL_CHANGED.getSubject(), courseName,"},{"lineNumber":111,"author":{"gitId":"marquestye"},"content":" student1.getCourseId()), email.getSubject());"},{"lineNumber":112,"author":{"gitId":"marquestye"},"content":" assertEquals(newStudentEmail, email.getRecipient());"},{"lineNumber":113,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":114,"author":{"gitId":"marquestye"},"content":" verifySpecifiedTasksAdded(Const.TaskQueue.SEARCH_INDEXING_QUEUE_NAME, 1);"},{"lineNumber":115,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":116,"author":{"gitId":"marquestye"},"content":" resetStudent(student1.getId(), originalEmail, originalTeam, originalComments);"},{"lineNumber":117,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":118,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":119,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":120,"author":{"gitId":"marquestye"},"content":" public void testExecute_studentDetailsWithWhitespace_success() throws Exception {"},{"lineNumber":121,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":122,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":123,"author":{"gitId":"marquestye"},"content":" String originalEmail \u003d student1.getEmail();"},{"lineNumber":124,"author":{"gitId":"marquestye"},"content":" Team originalTeam \u003d student1.getTeam();"},{"lineNumber":125,"author":{"gitId":"marquestye"},"content":" String originalComments \u003d student1.getComments();"},{"lineNumber":126,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":127,"author":{"gitId":"marquestye"},"content":" String newStudentEmailToBeTrimmed \u003d \" student1@teammates.tmt \"; // after trim, this is equal to originalEmail"},{"lineNumber":128,"author":{"gitId":"marquestye"},"content":" String newStudentTeamToBeTrimmed \u003d \" New team \";"},{"lineNumber":129,"author":{"gitId":"marquestye"},"content":" String newStudentCommentsToBeTrimmed \u003d \" this is new comment after editing \";"},{"lineNumber":130,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), newStudentEmailToBeTrimmed,"},{"lineNumber":131,"author":{"gitId":"marquestye"},"content":" newStudentTeamToBeTrimmed, student1.getSectionName(), newStudentCommentsToBeTrimmed, true);"},{"lineNumber":132,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":133,"author":{"gitId":"marquestye"},"content":" String[] submissionParamsToBeTrimmed \u003d new String[] {"},{"lineNumber":134,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":135,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":136,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":137,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":138,"author":{"gitId":"marquestye"},"content":" UpdateStudentAction actionToBeTrimmed \u003d getAction(updateRequest, submissionParamsToBeTrimmed);"},{"lineNumber":139,"author":{"gitId":"marquestye"},"content":" JsonResult outputToBeTrimmed \u003d getJsonResult(actionToBeTrimmed);"},{"lineNumber":140,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":141,"author":{"gitId":"marquestye"},"content":" MessageOutput msgTrimmedOutput \u003d (MessageOutput) outputToBeTrimmed.getOutput();"},{"lineNumber":142,"author":{"gitId":"marquestye"},"content":" assertEquals(\"Student has been updated\", msgTrimmedOutput.getMessage());"},{"lineNumber":143,"author":{"gitId":"marquestye"},"content":" verifyNoEmailsSent();"},{"lineNumber":144,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":145,"author":{"gitId":"marquestye"},"content":" resetStudent(student1.getId(), originalEmail, originalTeam, originalComments);"},{"lineNumber":146,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":147,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":148,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":149,"author":{"gitId":"marquestye"},"content":" public void testExecute_emailHasTooManyCharacters_failure() throws Exception {"},{"lineNumber":150,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":151,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":152,"author":{"gitId":"marquestye"},"content":" String invalidStudentEmail \u003d StringHelperExtension.generateStringOfLength(255 - \"@gmail.tmt\".length())"},{"lineNumber":153,"author":{"gitId":"marquestye"},"content":" + \"@gmail.tmt\";"},{"lineNumber":154,"author":{"gitId":"marquestye"},"content":" assertEquals(FieldValidator.EMAIL_MAX_LENGTH + 1, invalidStudentEmail.length());"},{"lineNumber":155,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":156,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), invalidStudentEmail,"},{"lineNumber":157,"author":{"gitId":"marquestye"},"content":" student1.getTeamName(), student1.getSectionName(), student1.getComments(), false);"},{"lineNumber":158,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":159,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":160,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":161,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":162,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":163,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":164,"author":{"gitId":"marquestye"},"content":" InvalidHttpRequestBodyException ihrbe \u003d verifyHttpRequestBodyFailure(updateRequest, submissionParams);"},{"lineNumber":165,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":166,"author":{"gitId":"marquestye"},"content":" assertEquals(getPopulatedErrorMessage(FieldValidator.EMAIL_ERROR_MESSAGE, invalidStudentEmail,"},{"lineNumber":167,"author":{"gitId":"marquestye"},"content":" FieldValidator.EMAIL_FIELD_NAME, FieldValidator.REASON_TOO_LONG,"},{"lineNumber":168,"author":{"gitId":"marquestye"},"content":" FieldValidator.EMAIL_MAX_LENGTH),"},{"lineNumber":169,"author":{"gitId":"marquestye"},"content":" ihrbe.getMessage());"},{"lineNumber":170,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":171,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":172,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":173,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":174,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":175,"author":{"gitId":"marquestye"},"content":" public void testExecute_emailTakenByOthers_failure() {"},{"lineNumber":176,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":177,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":178,"author":{"gitId":"marquestye"},"content":" Student student2 \u003d typicalBundle.students.get(\"student2InCourse1\");"},{"lineNumber":179,"author":{"gitId":"marquestye"},"content":" String takenStudentEmail \u003d student2.getEmail();"},{"lineNumber":180,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":181,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), takenStudentEmail,"},{"lineNumber":182,"author":{"gitId":"marquestye"},"content":" student1.getTeamName(), student1.getSectionName(), student1.getComments(), false);"},{"lineNumber":183,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":184,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":185,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":186,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":187,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":188,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":189,"author":{"gitId":"marquestye"},"content":" InvalidOperationException ioe \u003d verifyInvalidOperation(updateRequest, submissionParams);"},{"lineNumber":190,"author":{"gitId":"marquestye"},"content":" assertEquals(\"Trying to update to an email that is already in use\", ioe.getMessage());"},{"lineNumber":191,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":192,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":193,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":194,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":195,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":196,"author":{"gitId":"marquestye"},"content":" public void testExecute_studentDoesNotExist_failure() {"},{"lineNumber":197,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":198,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":199,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), student1.getEmail(),"},{"lineNumber":200,"author":{"gitId":"marquestye"},"content":" student1.getTeamName(), student1.getSectionName(), student1.getComments(), false);"},{"lineNumber":201,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":202,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":203,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":204,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, \"notinuseemail@gmail.tmt\","},{"lineNumber":205,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":206,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":207,"author":{"gitId":"marquestye"},"content":" EntityNotFoundException enfe \u003d verifyEntityNotFound(updateRequest, submissionParams);"},{"lineNumber":208,"author":{"gitId":"marquestye"},"content":" assertEquals(\"The student you tried to edit does not exist. \""},{"lineNumber":209,"author":{"gitId":"marquestye"},"content":" + \"If the student was created during the last few minutes, \""},{"lineNumber":210,"author":{"gitId":"marquestye"},"content":" + \"try again in a few more minutes as the student may still be being saved.\","},{"lineNumber":211,"author":{"gitId":"marquestye"},"content":" enfe.getMessage());"},{"lineNumber":212,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":213,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":214,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":215,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":216,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":217,"author":{"gitId":"marquestye"},"content":" public void testExecute_studentTeamExistsInAnotherSection_failure() throws Exception {"},{"lineNumber":218,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":219,"author":{"gitId":"marquestye"},"content":" Student student4 \u003d typicalBundle.students.get(\"student4InCourse1\");"},{"lineNumber":220,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":221,"author":{"gitId":"marquestye"},"content":" assertNotEquals(student1.getSection(), student4.getSection());"},{"lineNumber":222,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":223,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), student1.getEmail(),"},{"lineNumber":224,"author":{"gitId":"marquestye"},"content":" student4.getTeamName(), student1.getSectionName(), student1.getComments(), true);"},{"lineNumber":225,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":226,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":227,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":228,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":229,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":230,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":231,"author":{"gitId":"marquestye"},"content":" InvalidOperationException ioe \u003d verifyInvalidOperation(updateRequest, submissionParams);"},{"lineNumber":232,"author":{"gitId":"marquestye"},"content":" String expectedErrorMessage \u003d String.format(\"Team \\\"%s\\\" is detected in both Section \\\"%s\\\" and Section \\\"%s\\\".\""},{"lineNumber":233,"author":{"gitId":"marquestye"},"content":" + \" Please use different team names in different sections.\", student4.getTeamName(),"},{"lineNumber":234,"author":{"gitId":"marquestye"},"content":" student1.getSectionName(), student4.getSectionName());"},{"lineNumber":235,"author":{"gitId":"marquestye"},"content":" assertEquals(expectedErrorMessage, ioe.getMessage());"},{"lineNumber":236,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":237,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":238,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":239,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":240,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":241,"author":{"gitId":"marquestye"},"content":" public void testExecute_sectionFull_failure() throws Exception {"},{"lineNumber":242,"author":{"gitId":"marquestye"},"content":" Student studentToJoinMaxSection \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":243,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":244,"author":{"gitId":"marquestye"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":245,"author":{"gitId":"marquestye"},"content":" String courseId \u003d studentToJoinMaxSection.getCourseId();"},{"lineNumber":246,"author":{"gitId":"marquestye"},"content":" String sectionInMaxCapacity \u003d \"sectionInMaxCapacity\";"},{"lineNumber":247,"author":{"gitId":"marquestye"},"content":" Section section \u003d logic.getSectionOrCreate(courseId, sectionInMaxCapacity);"},{"lineNumber":248,"author":{"gitId":"marquestye"},"content":" Team team \u003d logic.getTeamOrCreate(section, \"randomTeamName\");"},{"lineNumber":249,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":250,"author":{"gitId":"marquestye"},"content":" for (int i \u003d 0; i \u003c Const.SECTION_SIZE_LIMIT; i++) {"},{"lineNumber":251,"author":{"gitId":"marquestye"},"content":" Student addedStudent \u003d new Student(course, \"Name \" + i, i + \"email@test.com\", \"cmt\" + i, team);"},{"lineNumber":252,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":253,"author":{"gitId":"marquestye"},"content":" logic.createStudent(addedStudent);"},{"lineNumber":254,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":255,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":256,"author":{"gitId":"marquestye"},"content":" List\u003cStudent\u003e studentList \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":257,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":258,"author":{"gitId":"marquestye"},"content":" assertEquals(Const.SECTION_SIZE_LIMIT,"},{"lineNumber":259,"author":{"gitId":"marquestye"},"content":" studentList.stream().filter(student -\u003e student.getSectionName().equals(sectionInMaxCapacity)).count());"},{"lineNumber":260,"author":{"gitId":"marquestye"},"content":" assertEquals(courseId, studentToJoinMaxSection.getCourseId());"},{"lineNumber":261,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":262,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d"},{"lineNumber":263,"author":{"gitId":"marquestye"},"content":" new StudentUpdateRequest(studentToJoinMaxSection.getName(), studentToJoinMaxSection.getEmail(),"},{"lineNumber":264,"author":{"gitId":"marquestye"},"content":" \"randomTeamName\", sectionInMaxCapacity,"},{"lineNumber":265,"author":{"gitId":"marquestye"},"content":" studentToJoinMaxSection.getComments(), true);"},{"lineNumber":266,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":267,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":268,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, studentToJoinMaxSection.getCourseId(),"},{"lineNumber":269,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, studentToJoinMaxSection.getEmail(),"},{"lineNumber":270,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":271,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":272,"author":{"gitId":"marquestye"},"content":" InvalidOperationException ioe \u003d verifyInvalidOperation(updateRequest, submissionParams);"},{"lineNumber":273,"author":{"gitId":"marquestye"},"content":" String expectedErrorMessage \u003d String.format(\"You are trying enroll more than %d students in section \\\"%s\\\". \""},{"lineNumber":274,"author":{"gitId":"marquestye"},"content":" + \"To avoid performance problems, please do not enroll more than %d students in a single section.\","},{"lineNumber":275,"author":{"gitId":"marquestye"},"content":" Const.SECTION_SIZE_LIMIT, sectionInMaxCapacity, Const.SECTION_SIZE_LIMIT);"},{"lineNumber":276,"author":{"gitId":"marquestye"},"content":" assertEquals(expectedErrorMessage, ioe.getMessage());"},{"lineNumber":277,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":278,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":279,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":280,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":281,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":282,"author":{"gitId":"marquestye"},"content":" public void testExecute_renameEmptySectionNameToDefault_success() {"},{"lineNumber":283,"author":{"gitId":"marquestye"},"content":" Student student4 \u003d typicalBundle.students.get(\"student4InCourse1\");"},{"lineNumber":284,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":285,"author":{"gitId":"marquestye"},"content":" Team originalTeam \u003d student4.getTeam();"},{"lineNumber":286,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":287,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest emptySectionUpdateRequest \u003d new StudentUpdateRequest(student4.getName(), student4.getEmail(),"},{"lineNumber":288,"author":{"gitId":"marquestye"},"content":" student4.getTeamName(), \"\", student4.getComments(), true);"},{"lineNumber":289,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":290,"author":{"gitId":"marquestye"},"content":" String[] emptySectionSubmissionParams \u003d new String[] {"},{"lineNumber":291,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student4.getCourseId(),"},{"lineNumber":292,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student4.getEmail(),"},{"lineNumber":293,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":294,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":295,"author":{"gitId":"marquestye"},"content":" UpdateStudentAction updateEmptySectionAction \u003d getAction(emptySectionUpdateRequest, emptySectionSubmissionParams);"},{"lineNumber":296,"author":{"gitId":"marquestye"},"content":" JsonResult emptySectionActionOutput \u003d getJsonResult(updateEmptySectionAction);"},{"lineNumber":297,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":298,"author":{"gitId":"marquestye"},"content":" MessageOutput emptySectionMsgOutput \u003d (MessageOutput) emptySectionActionOutput.getOutput();"},{"lineNumber":299,"author":{"gitId":"marquestye"},"content":" assertEquals(\"Student has been updated\", emptySectionMsgOutput.getMessage());"},{"lineNumber":300,"author":{"gitId":"marquestye"},"content":" verifyNoEmailsSent();"},{"lineNumber":301,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":302,"author":{"gitId":"marquestye"},"content":" // verify student in database"},{"lineNumber":303,"author":{"gitId":"marquestye"},"content":" Student actualStudent \u003d"},{"lineNumber":304,"author":{"gitId":"marquestye"},"content":" logic.getStudentForEmail(student4.getCourseId(), student4.getEmail());"},{"lineNumber":305,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getCourse(), actualStudent.getCourse());"},{"lineNumber":306,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getName(), actualStudent.getName());"},{"lineNumber":307,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getEmail(), actualStudent.getEmail());"},{"lineNumber":308,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getTeam(), actualStudent.getTeam());"},{"lineNumber":309,"author":{"gitId":"marquestye"},"content":" assertEquals(Const.DEFAULT_SECTION, actualStudent.getSectionName());"},{"lineNumber":310,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getComments(), actualStudent.getComments());"},{"lineNumber":311,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":312,"author":{"gitId":"marquestye"},"content":" resetStudent(student4.getId(), student4.getEmail(), originalTeam, student4.getComments());"},{"lineNumber":313,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":314,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":315,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":316,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":317,"author":{"gitId":"marquestye"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":318,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":319,"author":{"gitId":"marquestye"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":320,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":321,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":322,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":323,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":324,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":325,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":326,"author":{"gitId":"marquestye"},"content":" verifyOnlyInstructorsOfTheSameCourseWithCorrectCoursePrivilegeCanAccess("},{"lineNumber":327,"author":{"gitId":"marquestye"},"content":" course, Const.InstructorPermissions.CAN_MODIFY_STUDENT, submissionParams);"},{"lineNumber":328,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":329,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":330,"author":{"gitId":"marquestye"},"content":" private void resetStudent(UUID studentId, String originalEmail, Team originalTeam, String originalComments) {"},{"lineNumber":331,"author":{"gitId":"marquestye"},"content":" Student updatedStudent \u003d logic.getStudent(studentId);"},{"lineNumber":332,"author":{"gitId":"marquestye"},"content":" updatedStudent.setEmail(originalEmail);"},{"lineNumber":333,"author":{"gitId":"marquestye"},"content":" updatedStudent.setTeam(originalTeam);"},{"lineNumber":334,"author":{"gitId":"marquestye"},"content":" updatedStudent.setComments(originalComments);"},{"lineNumber":335,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":336,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":337,"author":{"gitId":"marquestye"},"content":"}"}],"authorContributionMap":{"marquestye":337}},{"path":"src/main/java/teammates/common/datatransfer/SqlSessionResultsBundle.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.common.datatransfer;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.LinkedHashMap;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import java.util.Map;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" * Represents detailed results for a feedback session."},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"public class SqlSessionResultsBundle {"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" private final List\u003cFeedbackQuestion\u003e questions;"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" private final Set\u003cFeedbackQuestion\u003e questionsNotVisibleForPreviewSet;"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" private final Set\u003cFeedbackQuestion\u003e questionsWithCommentNotVisibleForPreviewSet;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionResponseMap;"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionMissingResponseMap;"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackResponse, List\u003cFeedbackResponseComment\u003e\u003e responseCommentsMap;"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable;"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable;"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" private final Map\u003cLong, Boolean\u003e commentGiverVisibilityTable;"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" private final SqlCourseRoster roster;"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle(List\u003cFeedbackQuestion\u003e questions,"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e questionsNotVisibleForPreviewSet,"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e questionsWithCommentNotVisibleForPreviewSet,"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responses,"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses,"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable,"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable,"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, List\u003cFeedbackResponseComment\u003e\u003e responseCommentsMap,"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" Map\u003cLong, Boolean\u003e commentGiverVisibilityTable,"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster roster) {"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" this.questions \u003d questions;"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" this.questionsNotVisibleForPreviewSet \u003d questionsNotVisibleForPreviewSet;"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" this.questionsWithCommentNotVisibleForPreviewSet \u003d questionsWithCommentNotVisibleForPreviewSet;"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" this.responseCommentsMap \u003d responseCommentsMap;"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" this.responseGiverVisibilityTable \u003d responseGiverVisibilityTable;"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" this.responseRecipientVisibilityTable \u003d responseRecipientVisibilityTable;"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" this.commentGiverVisibilityTable \u003d commentGiverVisibilityTable;"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" this.roster \u003d roster;"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" this.questionResponseMap \u003d buildQuestionToResponseMap(responses);"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" this.questionMissingResponseMap \u003d buildQuestionToResponseMap(missingResponses);"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" private Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e buildQuestionToResponseMap("},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responses) {"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" // build question to response map"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionToResponseMap \u003d new LinkedHashMap\u003c\u003e();"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" questionToResponseMap.put(question, new ArrayList\u003c\u003e());"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responsesForQuestion \u003d questionToResponseMap.get(question);"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" responsesForQuestion.add(response);"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" return questionToResponseMap;"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" * Returns true if the giver of a response is visible to the current user."},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" * Returns false otherwise."},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" public boolean isResponseGiverVisible(FeedbackResponse response) {"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" return isResponseParticipantVisible(true, response);"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" * Returns true if the recipient of a response is visible to the current user."},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" * Returns false otherwise."},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" public boolean isResponseRecipientVisible(FeedbackResponse response) {"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" return isResponseParticipantVisible(false, response);"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" * Checks if the giver/recipient for a response is visible/hidden from the current user."},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" private boolean isResponseParticipantVisible(boolean isGiver, FeedbackResponse response) {"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType participantType;"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" boolean isVisible;"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" if (isGiver) {"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" isVisible \u003d responseGiverVisibilityTable.get(response);"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" participantType \u003d question.getGiverType();"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" isVisible \u003d responseRecipientVisibilityTable.get(response);"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" participantType \u003d question.getRecipientType();"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" boolean isTypeNone \u003d participantType \u003d\u003d FeedbackParticipantType.NONE;"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" return isVisible || isTypeNone;"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" * Returns true if the giver of a comment is visible to the current user."},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" * Returns false otherwise."},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":" public boolean isCommentGiverVisible(FeedbackResponseComment comment) {"},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" return commentGiverVisibilityTable.get(comment.getId());"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":112,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":113,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":114,"author":{"gitId":"xenosf"},"content":" * Gets the anonymous name for a given name."},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" * \u003cp\u003eThe anonymous name will be deterministic based on {@code name}."},{"lineNumber":117,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":118,"author":{"gitId":"xenosf"},"content":" public static String getAnonName(FeedbackParticipantType type, String name) {"},{"lineNumber":119,"author":{"gitId":"xenosf"},"content":" String hashedEncryptedName \u003d getHashOfName(getEncryptedName(name));"},{"lineNumber":120,"author":{"gitId":"xenosf"},"content":" String participantType \u003d type.toSingularFormString();"},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":" return String.format("},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT + \" %s %s\", participantType, hashedEncryptedName);"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e getQuestionResponseMap() {"},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" return questionResponseMap;"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e getQuestionMissingResponseMap() {"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" return questionMissingResponseMap;"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" private static String getEncryptedName(String name) {"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" return StringHelper.encrypt(name);"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" private static String getHashOfName(String name) {"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" return Long.toString(Math.abs((long) name.hashCode()));"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackQuestion\u003e getQuestions() {"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" return questions;"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackResponse, List\u003cFeedbackResponseComment\u003e\u003e getResponseCommentsMap() {"},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":" return responseCommentsMap;"},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":" public SqlCourseRoster getRoster() {"},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" return roster;"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackResponse, Boolean\u003e getResponseGiverVisibilityTable() {"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" return responseGiverVisibilityTable;"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackResponse, Boolean\u003e getResponseRecipientVisibilityTable() {"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" return responseRecipientVisibilityTable;"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" public Map\u003cLong, Boolean\u003e getCommentGiverVisibilityTable() {"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" return commentGiverVisibilityTable;"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" public Set\u003cFeedbackQuestion\u003e getQuestionsNotVisibleForPreviewSet() {"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" return questionsNotVisibleForPreviewSet;"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" public Set\u003cFeedbackQuestion\u003e getQuestionsWithCommentNotVisibleForPreviewSet() {"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" return questionsWithCommentNotVisibleForPreviewSet;"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":172}},{"path":"src/main/java/teammates/common/datatransfer/attributes/StudentAttributes.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.common.datatransfer.attributes;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Comparator;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Objects;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.Config;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.entity.CourseStudent;"},{"lineNumber":14,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * The data transfer object for {@link CourseStudent} entities."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public final class StudentAttributes extends EntityAttributes\u003cCourseStudent\u003e {"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" private String email;"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private String course;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private String name;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private String googleId;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private String comments;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private String team;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private String section;"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private transient String key;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private transient Instant createdAt;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private transient Instant updatedAt;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private StudentAttributes(String courseId, String email) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" this.course \u003d courseId;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" this.email \u003d email;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" this.googleId \u003d \"\";"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this.section \u003d Const.DEFAULT_SECTION;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.createdAt \u003d Const.TIME_REPRESENTS_DEFAULT_TIMESTAMP;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.updatedAt \u003d Const.TIME_REPRESENTS_DEFAULT_TIMESTAMP;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Gets the {@link StudentAttributes} instance of the given {@link CourseStudent}."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public static StudentAttributes valueOf(CourseStudent student) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" StudentAttributes studentAttributes \u003d new StudentAttributes(student.getCourseId(), student.getEmail());"},{"lineNumber":47,"author":{"gitId":"-"},"content":" studentAttributes.name \u003d student.getName();"},{"lineNumber":48,"author":{"gitId":"-"},"content":" if (student.getGoogleId() !\u003d null) {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" studentAttributes.googleId \u003d student.getGoogleId();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":" studentAttributes.team \u003d student.getTeamName();"},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (student.getSectionName() !\u003d null) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" studentAttributes.section \u003d student.getSectionName();"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" studentAttributes.comments \u003d student.getComments();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" studentAttributes.key \u003d student.getRegistrationKey();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" if (student.getCreatedAt() !\u003d null) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" studentAttributes.createdAt \u003d student.getCreatedAt();"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" if (student.getUpdatedAt() !\u003d null) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" studentAttributes.updatedAt \u003d student.getUpdatedAt();"},{"lineNumber":62,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":63,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":64,"author":{"gitId":"marquestye"},"content":" return studentAttributes;"},{"lineNumber":65,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":66,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":67,"author":{"gitId":"marquestye"},"content":" /**"},{"lineNumber":68,"author":{"gitId":"marquestye"},"content":" * Gets the {@link StudentAttributes} instance of the given {@link Student}."},{"lineNumber":69,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":70,"author":{"gitId":"marquestye"},"content":" public static StudentAttributes valueOf(Student student) {"},{"lineNumber":71,"author":{"gitId":"marquestye"},"content":" StudentAttributes studentAttributes \u003d new StudentAttributes(student.getCourseId(), student.getEmail());"},{"lineNumber":72,"author":{"gitId":"marquestye"},"content":" studentAttributes.name \u003d student.getName();"},{"lineNumber":73,"author":{"gitId":"marquestye"},"content":" if (student.getGoogleId() !\u003d null) {"},{"lineNumber":74,"author":{"gitId":"marquestye"},"content":" studentAttributes.googleId \u003d student.getGoogleId();"},{"lineNumber":75,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":" studentAttributes.team \u003d student.getTeamName();"},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":" if (student.getSectionName() !\u003d null) {"},{"lineNumber":78,"author":{"gitId":"marquestye"},"content":" studentAttributes.section \u003d student.getSectionName();"},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":" studentAttributes.comments \u003d student.getComments();"},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" // studentAttributes.key \u003d student.getRegistrationKey();"},{"lineNumber":82,"author":{"gitId":"marquestye"},"content":" if (student.getCreatedAt() !\u003d null) {"},{"lineNumber":83,"author":{"gitId":"marquestye"},"content":" studentAttributes.createdAt \u003d student.getCreatedAt();"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":85,"author":{"gitId":"marquestye"},"content":" if (student.getUpdatedAt() !\u003d null) {"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":" studentAttributes.updatedAt \u003d student.getUpdatedAt();"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" return studentAttributes;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Return a builder for {@link StudentAttributes}."},{"lineNumber":94,"author":{"gitId":"-"},"content":" */"},{"lineNumber":95,"author":{"gitId":"-"},"content":" public static Builder builder(String courseId, String email) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" return new Builder(courseId, email);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Gets a deep copy of this object."},{"lineNumber":101,"author":{"gitId":"-"},"content":" */"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public StudentAttributes getCopy() {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" StudentAttributes studentAttributes \u003d new StudentAttributes(course, email);"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" studentAttributes.name \u003d name;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" studentAttributes.googleId \u003d googleId;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" studentAttributes.team \u003d team;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" studentAttributes.section \u003d section;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" studentAttributes.comments \u003d comments;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" studentAttributes.key \u003d key;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" studentAttributes.createdAt \u003d createdAt;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" studentAttributes.updatedAt \u003d updatedAt;"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" return studentAttributes;"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" public boolean isRegistered() {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" return googleId !\u003d null \u0026\u0026 !googleId.trim().isEmpty();"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" public String getRegistrationUrl() {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return Config.getFrontEndAppUrl(Const.WebPageURIs.JOIN_PAGE)"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .withRegistrationKey(key)"},{"lineNumber":124,"author":{"gitId":"-"},"content":" .withEntityType(Const.EntityType.STUDENT)"},{"lineNumber":125,"author":{"gitId":"-"},"content":" .toString();"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" public String getName() {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" return name;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" public void setName(String name) {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" this.name \u003d name;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" public String getEmail() {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" public void setEmail(String email) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" this.email \u003d email;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" public String getCourse() {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" return course;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" public void setCourse(String course) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" this.course \u003d course;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" public String getGoogleId() {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" return googleId;"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void setGoogleId(String googleId) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.googleId \u003d googleId;"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" public String getKey() {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" return key;"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" public void setKey(String key) {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" this.key \u003d key;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" }"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":169,"author":{"gitId":"-"},"content":" * Format: email%courseId e.g., adam@gmail.com%cs1101."},{"lineNumber":170,"author":{"gitId":"-"},"content":" */"},{"lineNumber":171,"author":{"gitId":"-"},"content":" public String getId() {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" return email + \"%\" + course;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" public String getSection() {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return section;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" public void setSection(String section) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" this.section \u003d section;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" public String getTeam() {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" return team;"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" public void setTeam(String team) {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" this.team \u003d team;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" public String getComments() {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" return comments;"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" public void setComments(String comments) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" this.comments \u003d comments;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":200,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" if (other \u003d\u003d null) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" } else if (this \u003d\u003d other) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" } else if (this.getClass() \u003d\u003d other.getClass()) {"},{"lineNumber":206,"author":{"gitId":"-"},"content":" StudentAttributes otherStudent \u003d (StudentAttributes) other;"},{"lineNumber":207,"author":{"gitId":"-"},"content":" return Objects.equals(this.course, otherStudent.course)"},{"lineNumber":208,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.name, otherStudent.name)"},{"lineNumber":209,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.email, otherStudent.email)"},{"lineNumber":210,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.googleId, otherStudent.googleId)"},{"lineNumber":211,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.comments, otherStudent.comments)"},{"lineNumber":212,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.team, otherStudent.team)"},{"lineNumber":213,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.section, otherStudent.section);"},{"lineNumber":214,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":220,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" // id is allowed to be null when the student is not registered"},{"lineNumber":222,"author":{"gitId":"-"},"content":" assert team !\u003d null;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" assert comments !\u003d null;"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" List\u003cString\u003e errors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" if (isRegistered()) {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForGoogleId(googleId), errors);"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForCourseId(course), errors);"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForEmail(email), errors);"},{"lineNumber":234,"author":{"gitId":"-"},"content":""},{"lineNumber":235,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForTeamName(team), errors);"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForSectionName(section), errors);"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForStudentRoleComments(comments), errors);"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForPersonName(name), errors);"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" return errors;"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * Sorts the list of students by the section name, then team name, then name."},{"lineNumber":248,"author":{"gitId":"-"},"content":" */"},{"lineNumber":249,"author":{"gitId":"-"},"content":" public static void sortBySectionName(List\u003cStudentAttributes\u003e students) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" students.sort(Comparator.comparing((StudentAttributes student) -\u003e student.section)"},{"lineNumber":251,"author":{"gitId":"-"},"content":" .thenComparing(student -\u003e student.team)"},{"lineNumber":252,"author":{"gitId":"-"},"content":" .thenComparing(student -\u003e student.name));"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":""},{"lineNumber":255,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":256,"author":{"gitId":"-"},"content":" * Sorts the list of students by the team name, then name."},{"lineNumber":257,"author":{"gitId":"-"},"content":" */"},{"lineNumber":258,"author":{"gitId":"-"},"content":" public static void sortByTeamName(List\u003cStudentAttributes\u003e students) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" students.sort(Comparator.comparing((StudentAttributes student) -\u003e student.team)"},{"lineNumber":260,"author":{"gitId":"-"},"content":" .thenComparing(student -\u003e student.name));"},{"lineNumber":261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":264,"author":{"gitId":"-"},"content":" public CourseStudent toEntity() {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" return new CourseStudent(email, name, googleId, comments, course, team, section);"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":269,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":270,"author":{"gitId":"-"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();"},{"lineNumber":271,"author":{"gitId":"-"},"content":" stringBuilder.append(this.email).append(this.name).append(this.course)"},{"lineNumber":272,"author":{"gitId":"-"},"content":" .append(this.googleId).append(this.team).append(this.section).append(this.comments);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" return stringBuilder.toString().hashCode();"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":277,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" return \"Student:\" + name + \"[\" + email + \"]\";"},{"lineNumber":279,"author":{"gitId":"-"},"content":" }"},{"lineNumber":280,"author":{"gitId":"-"},"content":""},{"lineNumber":281,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":282,"author":{"gitId":"-"},"content":" public void sanitizeForSaving() {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" googleId \u003d SanitizationHelper.sanitizeGoogleId(googleId);"},{"lineNumber":284,"author":{"gitId":"-"},"content":" name \u003d SanitizationHelper.sanitizeName(name);"},{"lineNumber":285,"author":{"gitId":"-"},"content":" comments \u003d SanitizationHelper.sanitizeTextField(comments);"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" public Instant getCreatedAt() {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" return createdAt;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" }"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" public Instant getUpdatedAt() {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" return updatedAt;"},{"lineNumber":294,"author":{"gitId":"-"},"content":" }"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":" public void setCreatedAt(Instant createdAt) {"},{"lineNumber":297,"author":{"gitId":"-"},"content":" this.createdAt \u003d createdAt;"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" public void setUpdatedAt(Instant updatedAt) {"},{"lineNumber":301,"author":{"gitId":"-"},"content":" this.updatedAt \u003d updatedAt;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" }"},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":305,"author":{"gitId":"-"},"content":" * Updates with {@link UpdateOptions}."},{"lineNumber":306,"author":{"gitId":"-"},"content":" */"},{"lineNumber":307,"author":{"gitId":"-"},"content":" public void update(UpdateOptions updateOptions) {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" updateOptions.newEmailOption.ifPresent(s -\u003e email \u003d s);"},{"lineNumber":309,"author":{"gitId":"-"},"content":" updateOptions.nameOption.ifPresent(s -\u003e name \u003d s);"},{"lineNumber":310,"author":{"gitId":"-"},"content":" updateOptions.commentOption.ifPresent(s -\u003e comments \u003d s);"},{"lineNumber":311,"author":{"gitId":"-"},"content":" updateOptions.googleIdOption.ifPresent(s -\u003e googleId \u003d s);"},{"lineNumber":312,"author":{"gitId":"-"},"content":" updateOptions.teamNameOption.ifPresent(s -\u003e team \u003d s);"},{"lineNumber":313,"author":{"gitId":"-"},"content":" updateOptions.sectionNameOption.ifPresent(s -\u003e section \u003d s);"},{"lineNumber":314,"author":{"gitId":"-"},"content":" }"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":317,"author":{"gitId":"-"},"content":" * Returns a {@link UpdateOptions.Builder} to build {@link UpdateOptions} for a student."},{"lineNumber":318,"author":{"gitId":"-"},"content":" */"},{"lineNumber":319,"author":{"gitId":"-"},"content":" public static UpdateOptions.Builder updateOptionsBuilder(String courseId, String email) {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" return new UpdateOptions.Builder(courseId, email);"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":324,"author":{"gitId":"-"},"content":" * A builder class for {@link StudentAttributes}."},{"lineNumber":325,"author":{"gitId":"-"},"content":" */"},{"lineNumber":326,"author":{"gitId":"-"},"content":" public static class Builder extends BasicBuilder\u003cStudentAttributes, Builder\u003e {"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" private final StudentAttributes studentAttributes;"},{"lineNumber":329,"author":{"gitId":"-"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":" private Builder(String courseId, String email) {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" super(new UpdateOptions(courseId, email));"},{"lineNumber":332,"author":{"gitId":"-"},"content":" thisBuilder \u003d this;"},{"lineNumber":333,"author":{"gitId":"-"},"content":""},{"lineNumber":334,"author":{"gitId":"-"},"content":" studentAttributes \u003d new StudentAttributes(courseId, email);"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":338,"author":{"gitId":"-"},"content":" public StudentAttributes build() {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" studentAttributes.update(updateOptions);"},{"lineNumber":340,"author":{"gitId":"-"},"content":""},{"lineNumber":341,"author":{"gitId":"-"},"content":" return studentAttributes;"},{"lineNumber":342,"author":{"gitId":"-"},"content":" }"},{"lineNumber":343,"author":{"gitId":"-"},"content":" }"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":346,"author":{"gitId":"-"},"content":" * Helper class to specify the fields to update in {@link StudentAttributes}."},{"lineNumber":347,"author":{"gitId":"-"},"content":" */"},{"lineNumber":348,"author":{"gitId":"-"},"content":" public static class UpdateOptions {"},{"lineNumber":349,"author":{"gitId":"-"},"content":" private String courseId;"},{"lineNumber":350,"author":{"gitId":"-"},"content":" private String email;"},{"lineNumber":351,"author":{"gitId":"-"},"content":""},{"lineNumber":352,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e newEmailOption \u003d UpdateOption.empty();"},{"lineNumber":353,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e nameOption \u003d UpdateOption.empty();"},{"lineNumber":354,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e commentOption \u003d UpdateOption.empty();"},{"lineNumber":355,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e googleIdOption \u003d UpdateOption.empty();"},{"lineNumber":356,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e teamNameOption \u003d UpdateOption.empty();"},{"lineNumber":357,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e sectionNameOption \u003d UpdateOption.empty();"},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":" private UpdateOptions(String courseId, String email) {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":361,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":362,"author":{"gitId":"-"},"content":""},{"lineNumber":363,"author":{"gitId":"-"},"content":" this.courseId \u003d courseId;"},{"lineNumber":364,"author":{"gitId":"-"},"content":" this.email \u003d email;"},{"lineNumber":365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":366,"author":{"gitId":"-"},"content":""},{"lineNumber":367,"author":{"gitId":"-"},"content":" public String getCourseId() {"},{"lineNumber":368,"author":{"gitId":"-"},"content":" return courseId;"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":""},{"lineNumber":371,"author":{"gitId":"-"},"content":" public String getEmail() {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":374,"author":{"gitId":"-"},"content":""},{"lineNumber":375,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":376,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":377,"author":{"gitId":"-"},"content":" return \"StudentAttributes.UpdateOptions [\""},{"lineNumber":378,"author":{"gitId":"-"},"content":" + \"courseId \u003d \" + courseId"},{"lineNumber":379,"author":{"gitId":"-"},"content":" + \", email \u003d \" + email"},{"lineNumber":380,"author":{"gitId":"-"},"content":" + \", newEmail \u003d \" + newEmailOption"},{"lineNumber":381,"author":{"gitId":"-"},"content":" + \", name \u003d \" + nameOption"},{"lineNumber":382,"author":{"gitId":"-"},"content":" + \", comment \u003d \" + commentOption"},{"lineNumber":383,"author":{"gitId":"-"},"content":" + \", googleId \u003d \" + googleIdOption"},{"lineNumber":384,"author":{"gitId":"-"},"content":" + \", teamName \u003d \" + teamNameOption"},{"lineNumber":385,"author":{"gitId":"-"},"content":" + \", sectionName \u003d \" + sectionNameOption"},{"lineNumber":386,"author":{"gitId":"-"},"content":" + \"]\";"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":390,"author":{"gitId":"-"},"content":" * Builder class to build {@link UpdateOptions}."},{"lineNumber":391,"author":{"gitId":"-"},"content":" */"},{"lineNumber":392,"author":{"gitId":"-"},"content":" public static class Builder extends BasicBuilder\u003cUpdateOptions, Builder\u003e {"},{"lineNumber":393,"author":{"gitId":"-"},"content":""},{"lineNumber":394,"author":{"gitId":"-"},"content":" private Builder(String courseId, String email) {"},{"lineNumber":395,"author":{"gitId":"-"},"content":" super(new UpdateOptions(courseId, email));"},{"lineNumber":396,"author":{"gitId":"-"},"content":" thisBuilder \u003d this;"},{"lineNumber":397,"author":{"gitId":"-"},"content":" }"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":" public Builder withNewEmail(String email) {"},{"lineNumber":400,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":401,"author":{"gitId":"-"},"content":""},{"lineNumber":402,"author":{"gitId":"-"},"content":" updateOptions.newEmailOption \u003d UpdateOption.of(email);"},{"lineNumber":403,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":407,"author":{"gitId":"-"},"content":" public UpdateOptions build() {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" return updateOptions;"},{"lineNumber":409,"author":{"gitId":"-"},"content":" }"},{"lineNumber":410,"author":{"gitId":"-"},"content":""},{"lineNumber":411,"author":{"gitId":"-"},"content":" }"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":" }"},{"lineNumber":414,"author":{"gitId":"-"},"content":""},{"lineNumber":415,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":416,"author":{"gitId":"-"},"content":" * Basic builder to build {@link StudentAttributes} related classes."},{"lineNumber":417,"author":{"gitId":"-"},"content":" *"},{"lineNumber":418,"author":{"gitId":"-"},"content":" * @param \u003cT\u003e type to be built"},{"lineNumber":419,"author":{"gitId":"-"},"content":" * @param \u003cB\u003e type of the builder"},{"lineNumber":420,"author":{"gitId":"-"},"content":" */"},{"lineNumber":421,"author":{"gitId":"-"},"content":" private abstract static class BasicBuilder\u003cT, B extends BasicBuilder\u003cT, B\u003e\u003e {"},{"lineNumber":422,"author":{"gitId":"-"},"content":""},{"lineNumber":423,"author":{"gitId":"-"},"content":" UpdateOptions updateOptions;"},{"lineNumber":424,"author":{"gitId":"-"},"content":" B thisBuilder;"},{"lineNumber":425,"author":{"gitId":"-"},"content":""},{"lineNumber":426,"author":{"gitId":"-"},"content":" BasicBuilder(UpdateOptions updateOptions) {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" this.updateOptions \u003d updateOptions;"},{"lineNumber":428,"author":{"gitId":"-"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":""},{"lineNumber":430,"author":{"gitId":"-"},"content":" public B withName(String name) {"},{"lineNumber":431,"author":{"gitId":"-"},"content":" assert name !\u003d null;"},{"lineNumber":432,"author":{"gitId":"-"},"content":""},{"lineNumber":433,"author":{"gitId":"-"},"content":" updateOptions.nameOption \u003d UpdateOption.of(name);"},{"lineNumber":434,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":435,"author":{"gitId":"-"},"content":" }"},{"lineNumber":436,"author":{"gitId":"-"},"content":""},{"lineNumber":437,"author":{"gitId":"-"},"content":" public B withComment(String comment) {"},{"lineNumber":438,"author":{"gitId":"-"},"content":" assert comment !\u003d null;"},{"lineNumber":439,"author":{"gitId":"-"},"content":""},{"lineNumber":440,"author":{"gitId":"-"},"content":" updateOptions.commentOption \u003d UpdateOption.of(comment);"},{"lineNumber":441,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":442,"author":{"gitId":"-"},"content":" }"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" public B withGoogleId(String googleId) {"},{"lineNumber":445,"author":{"gitId":"-"},"content":" // google id can be set to null"},{"lineNumber":446,"author":{"gitId":"-"},"content":" updateOptions.googleIdOption \u003d UpdateOption.of(googleId);"},{"lineNumber":447,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":448,"author":{"gitId":"-"},"content":" }"},{"lineNumber":449,"author":{"gitId":"-"},"content":""},{"lineNumber":450,"author":{"gitId":"-"},"content":" public B withTeamName(String teamName) {"},{"lineNumber":451,"author":{"gitId":"-"},"content":" assert teamName !\u003d null;"},{"lineNumber":452,"author":{"gitId":"-"},"content":""},{"lineNumber":453,"author":{"gitId":"-"},"content":" updateOptions.teamNameOption \u003d UpdateOption.of(teamName);"},{"lineNumber":454,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":455,"author":{"gitId":"-"},"content":" }"},{"lineNumber":456,"author":{"gitId":"-"},"content":""},{"lineNumber":457,"author":{"gitId":"-"},"content":" public B withSectionName(String sectionName) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" assert sectionName !\u003d null;"},{"lineNumber":459,"author":{"gitId":"-"},"content":""},{"lineNumber":460,"author":{"gitId":"-"},"content":" updateOptions.sectionNameOption \u003d UpdateOption.of(sectionName);"},{"lineNumber":461,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":462,"author":{"gitId":"-"},"content":" }"},{"lineNumber":463,"author":{"gitId":"-"},"content":""},{"lineNumber":464,"author":{"gitId":"-"},"content":" public abstract T build();"},{"lineNumber":465,"author":{"gitId":"-"},"content":""},{"lineNumber":466,"author":{"gitId":"-"},"content":" }"},{"lineNumber":467,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":26,"-":441}},{"path":"src/main/java/teammates/common/datatransfer/questions/FeedbackQuestionDetails.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.common.datatransfer.questions;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SessionResultsBundle;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * A class holding the details for a specific question type."},{"lineNumber":14,"author":{"gitId":"-"},"content":" * This abstract class is inherited by concrete Feedback*QuestionDetails"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * classes which provides the implementation for the various abstract methods"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * such that pages can render the correct information/forms depending on the"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * question type"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public abstract class FeedbackQuestionDetails {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private FeedbackQuestionType questionType;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private String questionText;"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" protected FeedbackQuestionDetails(FeedbackQuestionType questionType) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" this.questionType \u003d questionType;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" protected FeedbackQuestionDetails(FeedbackQuestionType questionType, String questionText) {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.questionType \u003d questionType;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" this.questionText \u003d questionText;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Get question result statistics as JSON string."},{"lineNumber":34,"author":{"gitId":"-"},"content":" */"},{"lineNumber":35,"author":{"gitId":"-"},"content":" @SuppressWarnings(\"PMD.EmptyMethodInAbstractClassShouldBeAbstract\")"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public String getQuestionResultStatisticsJson("},{"lineNumber":37,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question, String studentEmail, SessionResultsBundle bundle) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" // Statistics are calculated in the front-end as it is dependent on the responses being filtered."},{"lineNumber":39,"author":{"gitId":"-"},"content":" // The only exception is contribution question, where there is only one statistics for the entire question."},{"lineNumber":40,"author":{"gitId":"-"},"content":" // It is also necessary to calculate contribution question statistics here"},{"lineNumber":41,"author":{"gitId":"-"},"content":" // to be displayed in student result page as students are not supposed to be able to see the exact responses."},{"lineNumber":42,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" * Get question result statistics as JSON string."},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" @SuppressWarnings(\"PMD.EmptyMethodInAbstractClassShouldBeAbstract\")"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" public String getQuestionResultStatisticsJson("},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question, String studentEmail, SqlSessionResultsBundle bundle) {"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" // Statistics are calculated in the front-end as it is dependent on the responses being filtered."},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" // The only exception is contribution question, where there is only one statistics for the entire question."},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" // It is also necessary to calculate contribution question statistics here"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" // to be displayed in student result page as students are not supposed to be able to see the exact responses."},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" return \"\";"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * Checks whether the changes to the question details require deletion of corresponding responses."},{"lineNumber":60,"author":{"gitId":"-"},"content":" */"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public abstract boolean shouldChangesRequireResponseDeletion(FeedbackQuestionDetails newDetails);"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":64,"author":{"gitId":"-"},"content":" * Individual responses are shown by default."},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Override for specific question types if necessary."},{"lineNumber":66,"author":{"gitId":"-"},"content":" *"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * @return boolean indicating if individual responses are to be shown to students."},{"lineNumber":68,"author":{"gitId":"-"},"content":" */"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public boolean isIndividualResponsesShownToStudents() {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Validates the question details."},{"lineNumber":75,"author":{"gitId":"-"},"content":" * @return A {@code List\u003cString\u003e} of error messages (to show as status message to user) if any, or an"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * empty list if question details are valid."},{"lineNumber":77,"author":{"gitId":"-"},"content":" */"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public abstract List\u003cString\u003e validateQuestionDetails();"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Validates the list of response details."},{"lineNumber":82,"author":{"gitId":"-"},"content":" * @return A {@code List\u003cString\u003e} of error messages (to show as status message to user) if any, or an"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * empty list if all response details are valid."},{"lineNumber":84,"author":{"gitId":"-"},"content":" */"},{"lineNumber":85,"author":{"gitId":"-"},"content":" public abstract List\u003cString\u003e validateResponsesDetails(List\u003cFeedbackResponseDetails\u003e responseDetails, int numRecipients);"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Validates if giverType and recipientType are valid for the question type."},{"lineNumber":89,"author":{"gitId":"-"},"content":" * Validates visibility options as well."},{"lineNumber":90,"author":{"gitId":"-"},"content":" *"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * \u003cp\u003eOverride in Feedback*QuestionDetails if necessary."},{"lineNumber":92,"author":{"gitId":"-"},"content":" * @return error message detailing the error, or an empty string if valid."},{"lineNumber":93,"author":{"gitId":"-"},"content":" */"},{"lineNumber":94,"author":{"gitId":"-"},"content":" public abstract String validateGiverRecipientVisibility(FeedbackQuestionAttributes feedbackQuestionAttributes);"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * Validates if giverType and recipientType are valid for the question type."},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Validates visibility options as well."},{"lineNumber":99,"author":{"gitId":"-"},"content":" *"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * \u003cp\u003eOverride in Feedback*QuestionDetails if necessary."},{"lineNumber":101,"author":{"gitId":"-"},"content":" * @return error message detailing the error, or an empty string if valid."},{"lineNumber":102,"author":{"gitId":"-"},"content":" */"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public abstract String validateGiverRecipientVisibility(FeedbackQuestion feedbackQuestion);"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * Checks whether instructor comments are allowed for the question."},{"lineNumber":107,"author":{"gitId":"-"},"content":" */"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public boolean isInstructorCommentsOnResponsesAllowed() {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":113,"author":{"gitId":"-"},"content":" * Checks whether missing responses should be generated."},{"lineNumber":114,"author":{"gitId":"-"},"content":" */"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public boolean shouldGenerateMissingResponses(FeedbackQuestionAttributes question) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" // generate combinations against all students/teams are meaningless"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return question.getRecipientType() !\u003d FeedbackParticipantType.STUDENTS"},{"lineNumber":118,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.STUDENTS_EXCLUDING_SELF"},{"lineNumber":119,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":120,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.TEAMS_EXCLUDING_SELF;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" * Checks whether missing responses should be generated."},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" public boolean shouldGenerateMissingResponses(FeedbackQuestion question) {"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" // generate combinations against all students/teams are meaningless"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" return question.getRecipientType() !\u003d FeedbackParticipantType.STUDENTS"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.STUDENTS_EXCLUDING_SELF"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.TEAMS_EXCLUDING_SELF;"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public boolean equals(Object obj) {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" if (this \u003d\u003d obj) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (obj \u003d\u003d null || obj.getClass() !\u003d this.getClass()) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" // Json string contains all attributes of a `FeedbackQuestionDetails` object,"},{"lineNumber":145,"author":{"gitId":"-"},"content":" // so it is sufficient to use it to compare two `FeedbackQuestionDetails` objects."},{"lineNumber":146,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails other \u003d (FeedbackQuestionDetails) obj;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" return this.getJsonString().equals(other.getJsonString());"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":151,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return this.getJsonString().hashCode();"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Returns a JSON string representation of the question details."},{"lineNumber":157,"author":{"gitId":"-"},"content":" */"},{"lineNumber":158,"author":{"gitId":"-"},"content":" public String getJsonString() {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" assert questionType !\u003d null;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return JsonUtils.toJson(this, questionType.getQuestionDetailsClass());"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":164,"author":{"gitId":"-"},"content":" * Returns a deep copy of the question details."},{"lineNumber":165,"author":{"gitId":"-"},"content":" */"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public FeedbackQuestionDetails getDeepCopy() {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assert questionType !\u003d null;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" String serializedDetails \u003d getJsonString();"},{"lineNumber":169,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(serializedDetails, questionType.getQuestionDetailsClass());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" }"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" public FeedbackQuestionType getQuestionType() {"},{"lineNumber":173,"author":{"gitId":"-"},"content":" return questionType;"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":" public void setQuestionType(FeedbackQuestionType questionType) {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" this.questionType \u003d questionType;"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" public String getQuestionText() {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return questionText;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" public void setQuestionText(String questionText) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" this.questionText \u003d questionText;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":25,"-":162}},{"path":"src/main/java/teammates/common/util/Const.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.common.util;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.nio.charset.Charset;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.nio.charset.StandardCharsets;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.Duration;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Stores constants that are widely used across classes."},{"lineNumber":12,"author":{"gitId":"-"},"content":" * this class contains several nested classes, each containing a specific"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * category of constants."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public final class Const {"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" // This section holds constants that are defined as constants primarily because they are repeated in many places."},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String USER_NOBODY_TEXT \u003d \"-\";"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" public static final String USER_TEAM_FOR_INSTRUCTOR \u003d \"Instructors\";"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR \u003d \"Instructor\";"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT \u003d \"Anonymous\";"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final int SECTION_SIZE_LIMIT \u003d 100;"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static final String DEFAULT_SECTION \u003d \"None\";"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static final Section DEFAULT_SQL_SECTION \u003d null;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static final String UNKNOWN_INSTITUTION \u003d \"Unknown Institution\";"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final String DEFAULT_TIME_ZONE \u003d \"UTC\";"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static final Charset ENCODING \u003d StandardCharsets.UTF_8;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static final Duration FEEDBACK_SESSIONS_SEARCH_WINDOW \u003d Duration.ofDays(30);"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static final Duration LOGS_RETENTION_PERIOD \u003d Duration.ofDays(30);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public static final Duration COOKIE_VALIDITY_PERIOD \u003d Duration.ofDays(7);"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static final int SEARCH_QUERY_SIZE_LIMIT \u003d 50;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final String ERROR_CREATE_ENTITY_ALREADY_EXISTS \u003d \"Trying to create an entity that exists: %s\";"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public static final String ERROR_UPDATE_NON_EXISTENT \u003d \"Trying to update non-existent Entity: \";"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" public static final String MISSING_RESPONSE_TEXT \u003d \"No Response\";"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" // These constants are used as variable values to mean that the variable is in a \u0027special\u0027 state."},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static final int INT_UNINITIALIZED \u003d -9999;"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final int MAX_POSSIBLE_RECIPIENTS \u003d -100;"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static final int POINTS_EQUAL_SHARE \u003d 100;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public static final int POINTS_NOT_SURE \u003d -101;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static final int POINTS_NOT_SUBMITTED \u003d -999;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static final int POINTS_NO_VALUE \u003d Integer.MIN_VALUE;"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static final String GENERAL_QUESTION \u003d \"%GENERAL%\";"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_FOLLOW_OPENING;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_FOLLOW_VISIBLE;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_LATER;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_NOW;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_DEFAULT_TIMESTAMP;"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" static {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_FOLLOW_OPENING \u003d TimeHelper.parseInstant(\"1970-12-31T00:00:00Z\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_FOLLOW_VISIBLE \u003d TimeHelper.parseInstant(\"1970-06-22T00:00:00Z\");"},{"lineNumber":70,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_LATER \u003d TimeHelper.parseInstant(\"1970-01-01T00:00:00Z\");"},{"lineNumber":71,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_NOW \u003d TimeHelper.parseInstant(\"1970-02-14T00:00:00Z\");"},{"lineNumber":72,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_DEFAULT_TIMESTAMP \u003d TimeHelper.parseInstant(\"2011-01-01T00:00:00Z\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" public static final String TEST_EMAIL_DOMAIN \u003d \"@gmail.tmt\";"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" // Other Constants"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" private Const() {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" // Utility class containing constants"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Represents role names for instructors based on their permission settings."},{"lineNumber":85,"author":{"gitId":"-"},"content":" */"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public static class InstructorPermissionRoleNames {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_COOWNER \u003d \"Co-owner\";"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_MANAGER \u003d \"Manager\";"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_OBSERVER \u003d \"Observer\";"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_TUTOR \u003d \"Tutor\";"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_CUSTOM \u003d \"Custom\";"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Represents atomic permission for instructors."},{"lineNumber":96,"author":{"gitId":"-"},"content":" */"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public static class InstructorPermissions {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_COURSE \u003d \"canmodifycourse\";"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_INSTRUCTOR \u003d \"canmodifyinstructor\";"},{"lineNumber":100,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_SESSION \u003d \"canmodifysession\";"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_STUDENT \u003d \"canmodifystudent\";"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public static final String CAN_VIEW_STUDENT_IN_SECTIONS \u003d \"canviewstudentinsection\";"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public static final String CAN_VIEW_SESSION_IN_SECTIONS \u003d \"canviewsessioninsection\";"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public static final String CAN_SUBMIT_SESSION_IN_SECTIONS \u003d \"cansubmitsessioninsection\";"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS \u003d \"canmodifysessioncommentinsection\";"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Represents keys for HTTP requests to the API layer."},{"lineNumber":110,"author":{"gitId":"-"},"content":" */"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public static class ParamsNames {"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" public static final String IS_IN_RECYCLE_BIN \u003d \"isinrecyclebin\";"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" public static final String IS_STUDENT_REJOINING \u003d \"isstudentrejoining\";"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public static final String IS_INSTRUCTOR_REJOINING \u003d \"isinstructorrejoining\";"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" public static final String COURSE_ID \u003d \"courseid\";"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public static final String COURSE_STATUS \u003d \"coursestatus\";"},{"lineNumber":120,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_ID \u003d \"instructorid\";"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_EMAIL \u003d \"instructoremail\";"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_INSTITUTION \u003d \"instructorinstitution\";"},{"lineNumber":123,"author":{"gitId":"-"},"content":" public static final String IS_CREATING_ACCOUNT \u003d \"iscreatingaccount\";"},{"lineNumber":124,"author":{"gitId":"-"},"content":" public static final String IS_INSTRUCTOR \u003d \"isinstructor\";"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_NAME \u003d \"fsname\";"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_STARTTIME \u003d \"starttime\";"},{"lineNumber":128,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_ENDTIME \u003d \"endtime\";"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_MODERATED_PERSON \u003d \"moderatedperson\";"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_LOG_TYPE \u003d \"fsltype\";"},{"lineNumber":131,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_LOG_STARTTIME \u003d \"fslstarttime\";"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_LOG_ENDTIME \u003d \"fslendtime\";"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_QUESTION_ID \u003d \"questionid\";"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public static final String SINGLE_RECIPIENT_ID_FOR_SUBMISSION \u003d \"singlerecipientidforsubmission\";"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_RESPONSE_ID \u003d \"responseid\";"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_RESPONSE_COMMENT_ID \u003d \"responsecommentid\";"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_RESULTS_GROUPBYSECTION \u003d \"frgroupbysection\";"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_RESULTS_SECTION_BY_GIVER_RECEIVER \u003d \"frsessionbygiverreceiver\";"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" public static final String PREVIEWAS \u003d \"previewas\";"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" public static final String STUDENT_ID \u003d \"googleid\";"},{"lineNumber":148,"author":{"gitId":"-"},"content":" public static final String INVITER_ID \u003d \"invitergoogleid\";"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" public static final String REGKEY \u003d \"key\";"},{"lineNumber":151,"author":{"gitId":"-"},"content":" public static final String STUDENT_EMAIL \u003d \"studentemail\";"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" public static final String SECTION_NAME \u003d \"sectionname\";"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" public static final String TEAM_NAME \u003d \"teamname\";"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" public static final String ERROR \u003d \"error\";"},{"lineNumber":158,"author":{"gitId":"-"},"content":" public static final String USER_ID \u003d \"user\";"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" public static final String SEARCH_KEY \u003d \"searchkey\";"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" public static final String USER_CAPTCHA_RESPONSE \u003d \"captcharesponse\";"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" public static final String EMAIL_TYPE \u003d \"emailtype\";"},{"lineNumber":165,"author":{"gitId":"-"},"content":" public static final String USER_EMAIL \u003d \"useremail\";"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" public static final String ENTITY_TYPE \u003d \"entitytype\";"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" public static final String INTENT \u003d \"intent\";"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" public static final String TIMEZONE \u003d \"timezone\";"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" public static final String NOTIFY_ABOUT_DEADLINES \u003d \"notifydeadlines\";"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_STARTTIME \u003d \"starttime\";"},{"lineNumber":176,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_ENDTIME \u003d \"endtime\";"},{"lineNumber":177,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_SEVERITY \u003d \"severity\";"},{"lineNumber":178,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_MIN_SEVERITY \u003d \"minseverity\";"},{"lineNumber":179,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_TRACE \u003d \"traceid\";"},{"lineNumber":180,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_ACTION_CLASS \u003d \"actionclass\";"},{"lineNumber":181,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_EMAIL \u003d \"email\";"},{"lineNumber":182,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_EVENT \u003d \"logevent\";"},{"lineNumber":183,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_SOURCE_LOCATION_FILE \u003d \"sourcelocationfile\";"},{"lineNumber":184,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_SOURCE_LOCATION_FUNCTION \u003d \"sourcelocationfunction\";"},{"lineNumber":185,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_EXCEPTION_CLASS \u003d \"exceptionclass\";"},{"lineNumber":186,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_LATENCY \u003d \"latency\";"},{"lineNumber":187,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_STATUS \u003d \"status\";"},{"lineNumber":188,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_VERSION \u003d \"version\";"},{"lineNumber":189,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_EXTRA_FILTERS \u003d \"extrafilters\";"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_ORDER \u003d \"order\";"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" public static final String LIMIT \u003d \"limit\";"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION_ID \u003d \"notificationid\";"},{"lineNumber":195,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION_TARGET_USER \u003d \"usertype\";"},{"lineNumber":196,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION_IS_FETCHING_ALL \u003d \"isfetchingall\";"},{"lineNumber":197,"author":{"gitId":"-"},"content":" public static final String NOTFICATION_END_TIME \u003d \"endtime\";"},{"lineNumber":198,"author":{"gitId":"-"},"content":" public static final String CONTINUE_URL \u003d \"continueurl\";"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":202,"author":{"gitId":"-"},"content":" * Represents custom header names used by the system."},{"lineNumber":203,"author":{"gitId":"-"},"content":" */"},{"lineNumber":204,"author":{"gitId":"-"},"content":" public static class HeaderNames {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" public static final String BACKDOOR_KEY \u003d \"Backdoor-Key\";"},{"lineNumber":206,"author":{"gitId":"-"},"content":" public static final String CSRF_KEY \u003d \"CSRF-Key\";"},{"lineNumber":207,"author":{"gitId":"-"},"content":" public static final String WEB_VERSION \u003d \"X-WEB-VERSION\";"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public static final String CSRF_TOKEN \u003d \"X-CSRF-TOKEN\";"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":212,"author":{"gitId":"-"},"content":" * The course status respect to the instructor\u0027s point of view."},{"lineNumber":213,"author":{"gitId":"-"},"content":" * This parameter is used to get a course list for instructor."},{"lineNumber":214,"author":{"gitId":"-"},"content":" */"},{"lineNumber":215,"author":{"gitId":"-"},"content":" public static class CourseStatus {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" public static final String ACTIVE \u003d \"active\";"},{"lineNumber":217,"author":{"gitId":"-"},"content":" public static final String ARCHIVED \u003d \"archived\";"},{"lineNumber":218,"author":{"gitId":"-"},"content":" public static final String SOFT_DELETED \u003d \"softDeleted\";"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":222,"author":{"gitId":"-"},"content":" * Represents user types."},{"lineNumber":223,"author":{"gitId":"-"},"content":" */"},{"lineNumber":224,"author":{"gitId":"-"},"content":" public static class EntityType {"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" public static final String STUDENT \u003d \"student\";"},{"lineNumber":227,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR \u003d \"instructor\";"},{"lineNumber":228,"author":{"gitId":"-"},"content":" public static final String ADMIN \u003d \"admin\";"},{"lineNumber":229,"author":{"gitId":"-"},"content":" public static final String MAINTAINER \u003d \"maintainer\";"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":234,"author":{"gitId":"-"},"content":" * Represents security-related configuration."},{"lineNumber":235,"author":{"gitId":"-"},"content":" */"},{"lineNumber":236,"author":{"gitId":"-"},"content":" public static class SecurityConfig {"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" public static final String CSRF_COOKIE_NAME \u003d \"CSRF-TOKEN\";"},{"lineNumber":239,"author":{"gitId":"-"},"content":" public static final String AUTH_COOKIE_NAME \u003d \"AUTH-TOKEN\";"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Represents URIs of accessible pages in the front-end in past versions (V6 and before)."},{"lineNumber":245,"author":{"gitId":"-"},"content":" */"},{"lineNumber":246,"author":{"gitId":"-"},"content":" @Deprecated"},{"lineNumber":247,"author":{"gitId":"-"},"content":" public static class LegacyURIs {"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_JOIN \u003d \"/page/instructorCourseJoin\";"},{"lineNumber":250,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_JOIN \u003d \"/page/studentCourseJoin\";"},{"lineNumber":251,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_JOIN_NEW \u003d \"/page/studentCourseJoinAuthentication\";"},{"lineNumber":252,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_HOME_PAGE \u003d \"/page/instructorHomePage\";"},{"lineNumber":253,"author":{"gitId":"-"},"content":" public static final String STUDENT_HOME_PAGE \u003d \"/page/studentHomePage\";"},{"lineNumber":254,"author":{"gitId":"-"},"content":" public static final String STUDENT_FEEDBACK_SUBMISSION_EDIT_PAGE \u003d \"/page/studentFeedbackSubmissionEditPage\";"},{"lineNumber":255,"author":{"gitId":"-"},"content":" public static final String STUDENT_FEEDBACK_RESULTS_PAGE \u003d \"/page/studentFeedbackResultsPage\";"},{"lineNumber":256,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_FEEDBACK_SUBMISSION_EDIT_PAGE \u003d \"/page/instructorFeedbackSubmissionEditPage\";"},{"lineNumber":257,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_FEEDBACK_RESULTS_PAGE \u003d \"/page/instructorFeedbackResultsPage\";"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":262,"author":{"gitId":"-"},"content":" * Represents URIs of accessible pages in the front-end."},{"lineNumber":263,"author":{"gitId":"-"},"content":" */"},{"lineNumber":264,"author":{"gitId":"-"},"content":" public static class WebPageURIs {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" public static final String LOGIN \u003d \"/login\";"},{"lineNumber":266,"author":{"gitId":"-"},"content":" public static final String LOGOUT \u003d \"/logout\";"},{"lineNumber":267,"author":{"gitId":"-"},"content":" private static final String URI_PREFIX \u003d \"/web\";"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" private static final String STUDENT_PAGE \u003d URI_PREFIX + \"/\" + EntityType.STUDENT;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" private static final String INSTRUCTOR_PAGE \u003d URI_PREFIX + \"/\" + EntityType.INSTRUCTOR;"},{"lineNumber":271,"author":{"gitId":"-"},"content":" private static final String ADMIN_PAGE \u003d URI_PREFIX + \"/\" + EntityType.ADMIN;"},{"lineNumber":272,"author":{"gitId":"-"},"content":" private static final String MAINTAINER_PAGE \u003d URI_PREFIX + \"/\" + EntityType.MAINTAINER;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" private static final String FRONT_PAGE \u003d URI_PREFIX + \"/front\";"},{"lineNumber":274,"author":{"gitId":"-"},"content":" public static final String JOIN_PAGE \u003d URI_PREFIX + \"/join\";"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" public static final String ADMIN_HOME_PAGE \u003d ADMIN_PAGE + \"/home\";"},{"lineNumber":277,"author":{"gitId":"-"},"content":" public static final String ADMIN_ACCOUNTS_PAGE \u003d ADMIN_PAGE + \"/accounts\";"},{"lineNumber":278,"author":{"gitId":"-"},"content":" public static final String ADMIN_SEARCH_PAGE \u003d ADMIN_PAGE + \"/search\";"},{"lineNumber":279,"author":{"gitId":"-"},"content":" public static final String ADMIN_SESSIONS_PAGE \u003d ADMIN_PAGE + \"/sessions\";"},{"lineNumber":280,"author":{"gitId":"-"},"content":" public static final String ADMIN_TIMEZONE_PAGE \u003d ADMIN_PAGE + \"/timezone\";"},{"lineNumber":281,"author":{"gitId":"-"},"content":" public static final String ADMIN_LOGS_PAGE \u003d ADMIN_PAGE + \"/logs\";"},{"lineNumber":282,"author":{"gitId":"-"},"content":" public static final String ADMIN_NOTIFICATIONS_PAGE \u003d ADMIN_PAGE + \"/notifications\";"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" public static final String MAINTAINER_HOME_PAGE \u003d MAINTAINER_PAGE + \"/home\";"},{"lineNumber":285,"author":{"gitId":"-"},"content":""},{"lineNumber":286,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_HOME_PAGE \u003d INSTRUCTOR_PAGE + \"/home\";"},{"lineNumber":287,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SEARCH_PAGE \u003d INSTRUCTOR_PAGE + \"/search\";"},{"lineNumber":288,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSIONS_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions\";"},{"lineNumber":289,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_SUBMISSION_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions/submission\";"},{"lineNumber":290,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_EDIT_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions/edit\";"},{"lineNumber":291,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_INDIVIDUAL_EXTENSION_PAGE \u003d INSTRUCTOR_PAGE"},{"lineNumber":292,"author":{"gitId":"-"},"content":" + \"/sessions/individual-extension\";"},{"lineNumber":293,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_RESULTS_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions/result\";"},{"lineNumber":294,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_REPORT_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions/report\";"},{"lineNumber":295,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSES_PAGE \u003d INSTRUCTOR_PAGE + \"/courses\";"},{"lineNumber":296,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_DETAILS_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/details\";"},{"lineNumber":297,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_EDIT_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/edit\";"},{"lineNumber":298,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_ENROLL_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/enroll\";"},{"lineNumber":299,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_STUDENT_DETAILS_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/student/details\";"},{"lineNumber":300,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_STUDENT_DETAILS_EDIT_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/student/edit\";"},{"lineNumber":301,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_STUDENT_LIST_PAGE \u003d INSTRUCTOR_PAGE + \"/students\";"},{"lineNumber":302,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_STUDENT_RECORDS_PAGE \u003d INSTRUCTOR_PAGE + \"/students/records\";"},{"lineNumber":303,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_STUDENT_ACTIVITY_LOGS_PAGE \u003d INSTRUCTOR_PAGE"},{"lineNumber":304,"author":{"gitId":"-"},"content":" + \"/courses/student-activity-logs\";"},{"lineNumber":305,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_NOTIFICATIONS_PAGE \u003d INSTRUCTOR_PAGE + \"/notifications\";"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" public static final String STUDENT_HOME_PAGE \u003d STUDENT_PAGE + \"/home\";"},{"lineNumber":308,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_DETAILS_PAGE \u003d STUDENT_PAGE + \"/course\";"},{"lineNumber":309,"author":{"gitId":"-"},"content":" public static final String STUDENT_SESSION_SUBMISSION_PAGE \u003d STUDENT_PAGE + \"/sessions/submission\";"},{"lineNumber":310,"author":{"gitId":"-"},"content":" public static final String STUDENT_SESSION_RESULTS_PAGE \u003d STUDENT_PAGE + \"/sessions/result\";"},{"lineNumber":311,"author":{"gitId":"-"},"content":" public static final String STUDENT_NOTIFICATIONS_PAGE \u003d STUDENT_PAGE + \"/notifications\";"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":" public static final String SESSION_RESULTS_PAGE \u003d URI_PREFIX + \"/sessions/result\";"},{"lineNumber":314,"author":{"gitId":"-"},"content":" public static final String SESSION_SUBMISSION_PAGE \u003d URI_PREFIX + \"/sessions/submission\";"},{"lineNumber":315,"author":{"gitId":"-"},"content":" public static final String SESSIONS_LINK_RECOVERY_PAGE \u003d FRONT_PAGE + \"/help/session-links-recovery\";"},{"lineNumber":316,"author":{"gitId":"-"},"content":" }"},{"lineNumber":317,"author":{"gitId":"-"},"content":""},{"lineNumber":318,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":319,"author":{"gitId":"-"},"content":" * Represents URIs of resource endpoints."},{"lineNumber":320,"author":{"gitId":"-"},"content":" */"},{"lineNumber":321,"author":{"gitId":"-"},"content":" public static class ResourceURIs {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" private static final String URI_PREFIX \u003d \"/webapi\";"},{"lineNumber":323,"author":{"gitId":"-"},"content":""},{"lineNumber":324,"author":{"gitId":"-"},"content":" public static final String DATABUNDLE \u003d URI_PREFIX + \"/databundle\";"},{"lineNumber":325,"author":{"gitId":"-"},"content":" public static final String SQL_DATABUNDLE \u003d URI_PREFIX + \"/databundle/sql\";"},{"lineNumber":326,"author":{"gitId":"-"},"content":" public static final String DATABUNDLE_DOCUMENTS \u003d URI_PREFIX + \"/databundle/documents\";"},{"lineNumber":327,"author":{"gitId":"-"},"content":" public static final String DEADLINE_EXTENSION \u003d URI_PREFIX + \"/deadlineextension\";"},{"lineNumber":328,"author":{"gitId":"-"},"content":" public static final String EXCEPTION \u003d URI_PREFIX + \"/exception\";"},{"lineNumber":329,"author":{"gitId":"-"},"content":" public static final String ERROR_REPORT \u003d URI_PREFIX + \"/errorreport\";"},{"lineNumber":330,"author":{"gitId":"-"},"content":" public static final String AUTH \u003d URI_PREFIX + \"/auth\";"},{"lineNumber":331,"author":{"gitId":"-"},"content":" public static final String AUTH_REGKEY \u003d URI_PREFIX + \"/auth/regkey\";"},{"lineNumber":332,"author":{"gitId":"-"},"content":" public static final String ACCOUNT \u003d URI_PREFIX + \"/account\";"},{"lineNumber":333,"author":{"gitId":"-"},"content":" public static final String ACCOUNT_RESET \u003d URI_PREFIX + \"/account/reset\";"},{"lineNumber":334,"author":{"gitId":"-"},"content":" public static final String ACCOUNT_REQUEST \u003d URI_PREFIX + \"/account/request\";"},{"lineNumber":335,"author":{"gitId":"-"},"content":" public static final String ACCOUNT_REQUEST_RESET \u003d ACCOUNT_REQUEST + \"/reset\";"},{"lineNumber":336,"author":{"gitId":"-"},"content":" public static final String ACCOUNTS \u003d URI_PREFIX + \"/accounts\";"},{"lineNumber":337,"author":{"gitId":"-"},"content":" public static final String RESPONSE_COMMENT \u003d URI_PREFIX + \"/responsecomment\";"},{"lineNumber":338,"author":{"gitId":"-"},"content":" public static final String COURSE \u003d URI_PREFIX + \"/course\";"},{"lineNumber":339,"author":{"gitId":"-"},"content":" public static final String COURSE_ARCHIVE \u003d URI_PREFIX + \"/course/archive\";"},{"lineNumber":340,"author":{"gitId":"-"},"content":" public static final String BIN_COURSE \u003d URI_PREFIX + \"/bin/course\";"},{"lineNumber":341,"author":{"gitId":"-"},"content":" public static final String COURSE_SECTIONS \u003d URI_PREFIX + \"/course/sections\";"},{"lineNumber":342,"author":{"gitId":"-"},"content":" public static final String COURSES \u003d URI_PREFIX + \"/courses\";"},{"lineNumber":343,"author":{"gitId":"-"},"content":" public static final String INSTRUCTORS \u003d URI_PREFIX + \"/instructors\";"},{"lineNumber":344,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR \u003d URI_PREFIX + \"/instructor\";"},{"lineNumber":345,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PRIVILEGE \u003d URI_PREFIX + \"/instructor/privilege\";"},{"lineNumber":346,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_KEY \u003d URI_PREFIX + \"/instructor/key\";"},{"lineNumber":347,"author":{"gitId":"-"},"content":" public static final String RESULT \u003d URI_PREFIX + \"/result\";"},{"lineNumber":348,"author":{"gitId":"-"},"content":" public static final String STUDENTS \u003d URI_PREFIX + \"/students\";"},{"lineNumber":349,"author":{"gitId":"-"},"content":" public static final String STUDENT \u003d URI_PREFIX + \"/student\";"},{"lineNumber":350,"author":{"gitId":"-"},"content":" public static final String STUDENT_KEY \u003d URI_PREFIX + \"/student/key\";"},{"lineNumber":351,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION \u003d URI_PREFIX + \"/notification\";"},{"lineNumber":352,"author":{"gitId":"-"},"content":" public static final String NOTIFICATIONS \u003d URI_PREFIX + \"/notifications\";"},{"lineNumber":353,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION_READ \u003d URI_PREFIX + \"/notification/read\";"},{"lineNumber":354,"author":{"gitId":"-"},"content":" public static final String SESSIONS_ONGOING \u003d URI_PREFIX + \"/sessions/ongoing\";"},{"lineNumber":355,"author":{"gitId":"-"},"content":" public static final String SESSION \u003d URI_PREFIX + \"/session\";"},{"lineNumber":356,"author":{"gitId":"-"},"content":" public static final String SESSION_PUBLISH \u003d URI_PREFIX + \"/session/publish\";"},{"lineNumber":357,"author":{"gitId":"-"},"content":" public static final String SESSION_REMIND_SUBMISSION \u003d URI_PREFIX + \"/session/remind/submission\";"},{"lineNumber":358,"author":{"gitId":"-"},"content":" public static final String SESSION_REMIND_RESULT \u003d URI_PREFIX + \"/session/remind/result\";"},{"lineNumber":359,"author":{"gitId":"-"},"content":" public static final String SESSION_STATS \u003d URI_PREFIX + \"/session/stats\";"},{"lineNumber":360,"author":{"gitId":"-"},"content":" public static final String SESSION_SUBMITTED_GIVER_SET \u003d URI_PREFIX + \"/session/submitted/giverset\";"},{"lineNumber":361,"author":{"gitId":"-"},"content":" public static final String SESSIONS \u003d URI_PREFIX + \"/sessions\";"},{"lineNumber":362,"author":{"gitId":"-"},"content":" public static final String SEARCH_ACCOUNT_REQUESTS \u003d URI_PREFIX + \"/search/accountrequests\";"},{"lineNumber":363,"author":{"gitId":"-"},"content":" public static final String SEARCH_INSTRUCTORS \u003d URI_PREFIX + \"/search/instructors\";"},{"lineNumber":364,"author":{"gitId":"-"},"content":" public static final String SEARCH_STUDENTS \u003d URI_PREFIX + \"/search/students\";"},{"lineNumber":365,"author":{"gitId":"-"},"content":" public static final String BIN_SESSION \u003d URI_PREFIX + \"/bin/session\";"},{"lineNumber":366,"author":{"gitId":"-"},"content":" public static final String QUESTIONS \u003d URI_PREFIX + \"/questions\";"},{"lineNumber":367,"author":{"gitId":"-"},"content":" public static final String QUESTION \u003d URI_PREFIX + \"/question\";"},{"lineNumber":368,"author":{"gitId":"-"},"content":" public static final String QUESTION_RECIPIENTS \u003d URI_PREFIX + \"/question/recipients\";"},{"lineNumber":369,"author":{"gitId":"-"},"content":" public static final String RESPONSES \u003d URI_PREFIX + \"/responses\";"},{"lineNumber":370,"author":{"gitId":"-"},"content":" public static final String USAGE_STATISTICS \u003d URI_PREFIX + \"/usagestats\";"},{"lineNumber":371,"author":{"gitId":"-"},"content":" public static final String HAS_RESPONSES \u003d URI_PREFIX + \"/hasResponses\";"},{"lineNumber":372,"author":{"gitId":"-"},"content":" public static final String JOIN \u003d URI_PREFIX + \"/join\";"},{"lineNumber":373,"author":{"gitId":"-"},"content":" public static final String JOIN_REMIND \u003d URI_PREFIX + \"/join/remind\";"},{"lineNumber":374,"author":{"gitId":"-"},"content":" public static final String TIMEZONE \u003d URI_PREFIX + \"/timezone\";"},{"lineNumber":375,"author":{"gitId":"-"},"content":" public static final String SESSION_LINKS_RECOVERY \u003d URI_PREFIX + \"/sessionlinksrecovery\";"},{"lineNumber":376,"author":{"gitId":"-"},"content":" public static final String EMAIL \u003d URI_PREFIX + \"/email\";"},{"lineNumber":377,"author":{"gitId":"-"},"content":" public static final String LOGIN_EMAIL \u003d URI_PREFIX + \"/email/login\";"},{"lineNumber":378,"author":{"gitId":"-"},"content":" public static final String SESSION_LOGS \u003d URI_PREFIX + \"/logs/session\";"},{"lineNumber":379,"author":{"gitId":"-"},"content":" public static final String LOGS \u003d URI_PREFIX + \"/logs/query\";"},{"lineNumber":380,"author":{"gitId":"-"},"content":" public static final String ACTION_CLASS \u003d URI_PREFIX + \"/actionclass\";"},{"lineNumber":381,"author":{"gitId":"-"},"content":" public static final String USER_COOKIE \u003d URI_PREFIX + \"/cookie\";"},{"lineNumber":382,"author":{"gitId":"-"},"content":" }"},{"lineNumber":383,"author":{"gitId":"-"},"content":""},{"lineNumber":384,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":385,"author":{"gitId":"-"},"content":" * Represents URIs of endpoints used by cron jobs."},{"lineNumber":386,"author":{"gitId":"-"},"content":" */"},{"lineNumber":387,"author":{"gitId":"-"},"content":" public static class CronJobURIs {"},{"lineNumber":388,"author":{"gitId":"-"},"content":" private static final String URI_PREFIX \u003d \"/auto\";"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_LOG_COMPILATION \u003d URI_PREFIX + \"/compileLogs\";"},{"lineNumber":391,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_DATASTORE_BACKUP \u003d URI_PREFIX + \"/datastoreBackup\";"},{"lineNumber":392,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_OPENING_SOON_REMINDERS \u003d"},{"lineNumber":393,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionOpeningSoonReminders\";"},{"lineNumber":394,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_OPENING_REMINDERS \u003d"},{"lineNumber":395,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionOpeningReminders\";"},{"lineNumber":396,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_CLOSED_REMINDERS \u003d"},{"lineNumber":397,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionClosedReminders\";"},{"lineNumber":398,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_CLOSING_REMINDERS \u003d"},{"lineNumber":399,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionClosingReminders\";"},{"lineNumber":400,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_PUBLISHED_REMINDERS \u003d"},{"lineNumber":401,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionPublishedReminders\";"},{"lineNumber":402,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_USAGE_STATISTICS_COLLECTION \u003d"},{"lineNumber":403,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/calculateUsageStatistics\";"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":407,"author":{"gitId":"-"},"content":" * Configurations for task queue."},{"lineNumber":408,"author":{"gitId":"-"},"content":" */"},{"lineNumber":409,"author":{"gitId":"-"},"content":" public static class TaskQueue {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" public static final String URI_PREFIX \u003d \"/worker\";"},{"lineNumber":411,"author":{"gitId":"-"},"content":""},{"lineNumber":412,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_PUBLISHED_EMAIL_QUEUE_NAME \u003d"},{"lineNumber":413,"author":{"gitId":"-"},"content":" \"feedback-session-published-email-queue\";"},{"lineNumber":414,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_PUBLISHED_EMAIL_WORKER_URL \u003d"},{"lineNumber":415,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionPublishedEmail\";"},{"lineNumber":416,"author":{"gitId":"-"},"content":""},{"lineNumber":417,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_RESEND_PUBLISHED_EMAIL_QUEUE_NAME \u003d"},{"lineNumber":418,"author":{"gitId":"-"},"content":" \"feedback-session-resend-published-email-queue\";"},{"lineNumber":419,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_RESEND_PUBLISHED_EMAIL_WORKER_URL \u003d"},{"lineNumber":420,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionResendPublishedEmail\";"},{"lineNumber":421,"author":{"gitId":"-"},"content":""},{"lineNumber":422,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_REMIND_EMAIL_QUEUE_NAME \u003d \"feedback-session-remind-email-queue\";"},{"lineNumber":423,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_REMIND_EMAIL_WORKER_URL \u003d URI_PREFIX + \"/feedbackSessionRemindEmail\";"},{"lineNumber":424,"author":{"gitId":"-"},"content":""},{"lineNumber":425,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_REMIND_PARTICULAR_USERS_EMAIL_QUEUE_NAME \u003d"},{"lineNumber":426,"author":{"gitId":"-"},"content":" \"feedback-session-remind-particular-users-email-queue\";"},{"lineNumber":427,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_REMIND_PARTICULAR_USERS_EMAIL_WORKER_URL \u003d"},{"lineNumber":428,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionRemindParticularUsersEmail\";"},{"lineNumber":429,"author":{"gitId":"-"},"content":""},{"lineNumber":430,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_UNPUBLISHED_EMAIL_QUEUE_NAME \u003d"},{"lineNumber":431,"author":{"gitId":"-"},"content":" \"feedback-session-unpublished-email-queue\";"},{"lineNumber":432,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_UNPUBLISHED_EMAIL_WORKER_URL \u003d"},{"lineNumber":433,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionUnpublishedEmail\";"},{"lineNumber":434,"author":{"gitId":"-"},"content":""},{"lineNumber":435,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_JOIN_EMAIL_QUEUE_NAME \u003d \"instructor-course-join-email-queue\";"},{"lineNumber":436,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_JOIN_EMAIL_WORKER_URL \u003d URI_PREFIX + \"/instructorCourseJoinEmail\";"},{"lineNumber":437,"author":{"gitId":"-"},"content":""},{"lineNumber":438,"author":{"gitId":"-"},"content":" public static final String SEND_EMAIL_QUEUE_NAME \u003d \"send-email-queue\";"},{"lineNumber":439,"author":{"gitId":"-"},"content":" public static final String SEND_EMAIL_WORKER_URL \u003d URI_PREFIX + \"/sendEmail\";"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_JOIN_EMAIL_QUEUE_NAME \u003d \"student-course-join-email-queue\";"},{"lineNumber":442,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_JOIN_EMAIL_WORKER_URL \u003d URI_PREFIX + \"/studentCourseJoinEmail\";"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" public static final String SEARCH_INDEXING_QUEUE_NAME \u003d \"search-indexing-queue\";"},{"lineNumber":445,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SEARCH_INDEXING_WORKER_URL \u003d URI_PREFIX + \"/instructorSearchIndexing\";"},{"lineNumber":446,"author":{"gitId":"-"},"content":" public static final String ACCOUNT_REQUEST_SEARCH_INDEXING_WORKER_URL \u003d"},{"lineNumber":447,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/accountRequestSearchIndexing\";"},{"lineNumber":448,"author":{"gitId":"-"},"content":" public static final String STUDENT_SEARCH_INDEXING_WORKER_URL \u003d URI_PREFIX + \"/studentSearchIndexing\";"},{"lineNumber":449,"author":{"gitId":"-"},"content":" }"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":2,"-":449}},{"path":"src/main/java/teammates/sqllogic/api/Logic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.api;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Set;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import javax.annotation.Nullable;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackQuestionRecipient;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EnrollException;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.exception.InstructorUpdateException;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.exception.StudentUpdateException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.AccountRequestsLogic;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.AccountsLogic;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.CoursesLogic;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.DataBundleLogic;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.DeadlineExtensionsLogic;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackQuestionsLogic;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackResponseCommentsLogic;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackResponsesLogic;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackSessionsLogic;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.NotificationsLogic;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.UsageStatisticsLogic;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.UsersLogic;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":47,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":49,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.UsageStatistics;"},{"lineNumber":50,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":51,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackQuestionUpdateRequest;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackResponseCommentUpdateRequest;"},{"lineNumber":53,"author":{"gitId":"-"},"content":"import teammates.ui.request.InstructorCreateRequest;"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Provides the business logic for production usage of the system."},{"lineNumber":57,"author":{"gitId":"-"},"content":" *"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis is a Facade class which simply forwards the method to internal classes."},{"lineNumber":59,"author":{"gitId":"-"},"content":" */"},{"lineNumber":60,"author":{"gitId":"-"},"content":"public class Logic {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" private static final Logic instance \u003d new Logic();"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" final AccountsLogic accountsLogic \u003d AccountsLogic.inst();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" final AccountRequestsLogic accountRequestLogic \u003d AccountRequestsLogic.inst();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" final CoursesLogic coursesLogic \u003d CoursesLogic.inst();"},{"lineNumber":66,"author":{"gitId":"-"},"content":" final DeadlineExtensionsLogic deadlineExtensionsLogic \u003d DeadlineExtensionsLogic.inst();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" final FeedbackQuestionsLogic feedbackQuestionsLogic \u003d FeedbackQuestionsLogic.inst();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" final FeedbackResponsesLogic feedbackResponsesLogic \u003d FeedbackResponsesLogic.inst();"},{"lineNumber":69,"author":{"gitId":"-"},"content":" final FeedbackResponseCommentsLogic feedbackResponseCommentsLogic \u003d FeedbackResponseCommentsLogic.inst();"},{"lineNumber":70,"author":{"gitId":"-"},"content":" final FeedbackSessionsLogic feedbackSessionsLogic \u003d FeedbackSessionsLogic.inst();"},{"lineNumber":71,"author":{"gitId":"-"},"content":" final UsageStatisticsLogic usageStatisticsLogic \u003d UsageStatisticsLogic.inst();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" final UsersLogic usersLogic \u003d UsersLogic.inst();"},{"lineNumber":73,"author":{"gitId":"-"},"content":" final NotificationsLogic notificationsLogic \u003d NotificationsLogic.inst();"},{"lineNumber":74,"author":{"gitId":"-"},"content":" final DataBundleLogic dataBundleLogic \u003d DataBundleLogic.inst();"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" Logic() {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" public static Logic inst() {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * Creates an account request."},{"lineNumber":86,"author":{"gitId":"-"},"content":" *"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * @return newly created account request."},{"lineNumber":88,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the account request details are invalid."},{"lineNumber":89,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the account request already exists."},{"lineNumber":90,"author":{"gitId":"-"},"content":" */"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequest(String name, String email, String institute)"},{"lineNumber":92,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" return accountRequestLogic.createAccountRequest(name, email, institute);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Creates a or gets an account request."},{"lineNumber":99,"author":{"gitId":"-"},"content":" *"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * @return newly created account request."},{"lineNumber":101,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the account request details are invalid."},{"lineNumber":102,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the account request already exists."},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequestWithTransaction(String name, String email, String institute)"},{"lineNumber":105,"author":{"gitId":"-"},"content":" throws InvalidParametersException {"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" return accountRequestLogic.createOrGetAccountRequestWithTransaction(name, email, institute);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Gets the account request with the given email and institute."},{"lineNumber":112,"author":{"gitId":"-"},"content":" *"},{"lineNumber":113,"author":{"gitId":"-"},"content":" * @return account request with the given email and institute."},{"lineNumber":114,"author":{"gitId":"-"},"content":" */"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public AccountRequest getAccountRequest(String email, String institute) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" return accountRequestLogic.getAccountRequest(email, institute);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":" /**"},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" * Gets the account request with the associated {@code regkey}."},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":" *"},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":" * @return account request with the associated {@code regkey}."},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":" public AccountRequest getAccountRequestByRegistrationKey(String regkey) {"},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" return accountRequestLogic.getAccountRequestByRegistrationKey(regkey);"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":129,"author":{"gitId":"-"},"content":" * Updates the given account request."},{"lineNumber":130,"author":{"gitId":"-"},"content":" *"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * @return the updated account request."},{"lineNumber":132,"author":{"gitId":"-"},"content":" */"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public AccountRequest updateAccountRequest(AccountRequest accountRequest)"},{"lineNumber":134,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return accountRequestLogic.updateAccountRequest(accountRequest);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"-"},"content":" * Creates/Resets the account request with the given email and institute"},{"lineNumber":140,"author":{"gitId":"-"},"content":" * such that it is not registered."},{"lineNumber":141,"author":{"gitId":"-"},"content":" *"},{"lineNumber":142,"author":{"gitId":"-"},"content":" * @return account request that is unregistered with the"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * email and institute."},{"lineNumber":144,"author":{"gitId":"-"},"content":" */"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public AccountRequest resetAccountRequest(String email, String institute)"},{"lineNumber":146,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" return accountRequestLogic.resetAccountRequest(email, institute);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":151,"author":{"gitId":"-"},"content":" * Deletes account request by email and institute."},{"lineNumber":152,"author":{"gitId":"-"},"content":" *"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * \u003cli\u003eFails silently if no such account request.\u003c/li\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":" *"},{"lineNumber":157,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":" * All parameters are non-null."},{"lineNumber":159,"author":{"gitId":"-"},"content":" */"},{"lineNumber":160,"author":{"gitId":"-"},"content":" public void deleteAccountRequest(String email, String institute) {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" accountRequestLogic.deleteAccountRequest(email, institute);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":165,"author":{"gitId":"-"},"content":" * Gets an account."},{"lineNumber":166,"author":{"gitId":"-"},"content":" */"},{"lineNumber":167,"author":{"gitId":"-"},"content":" public Account getAccount(UUID id) {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" return accountsLogic.getAccount(id);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * Gets an account by googleId."},{"lineNumber":173,"author":{"gitId":"-"},"content":" */"},{"lineNumber":174,"author":{"gitId":"-"},"content":" public Account getAccountForGoogleId(String googleId) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return accountsLogic.getAccountForGoogleId(googleId);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":179,"author":{"gitId":"-"},"content":" * Get a list of accounts associated with email provided."},{"lineNumber":180,"author":{"gitId":"-"},"content":" */"},{"lineNumber":181,"author":{"gitId":"-"},"content":" public List\u003cAccount\u003e getAccountsForEmail(String email) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" return accountsLogic.getAccountsForEmail(email);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":186,"author":{"gitId":"-"},"content":" * Creates an account."},{"lineNumber":187,"author":{"gitId":"-"},"content":" *"},{"lineNumber":188,"author":{"gitId":"-"},"content":" * @return the created account"},{"lineNumber":189,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the account is not valid"},{"lineNumber":190,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the account already exists in the database."},{"lineNumber":191,"author":{"gitId":"-"},"content":" */"},{"lineNumber":192,"author":{"gitId":"-"},"content":" public Account createAccount(Account account)"},{"lineNumber":193,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" return accountsLogic.createAccount(account);"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":198,"author":{"gitId":"-"},"content":" * Deletes account by googleId."},{"lineNumber":199,"author":{"gitId":"-"},"content":" *"},{"lineNumber":200,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":201,"author":{"gitId":"-"},"content":" * \u003cli\u003eFails silently if no such account.\u003c/li\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":203,"author":{"gitId":"-"},"content":" *"},{"lineNumber":204,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":205,"author":{"gitId":"-"},"content":" * All parameters are non-null."},{"lineNumber":206,"author":{"gitId":"-"},"content":" */"},{"lineNumber":207,"author":{"gitId":"-"},"content":" public void deleteAccount(String googleId) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccount(googleId);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":212,"author":{"gitId":"-"},"content":" * Deletes account and all users by googleId."},{"lineNumber":213,"author":{"gitId":"-"},"content":" *"},{"lineNumber":214,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * \u003cli\u003eFails silently if no such account.\u003c/li\u003e"},{"lineNumber":216,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":217,"author":{"gitId":"-"},"content":" *"},{"lineNumber":218,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":219,"author":{"gitId":"-"},"content":" * All parameters are non-null."},{"lineNumber":220,"author":{"gitId":"-"},"content":" */"},{"lineNumber":221,"author":{"gitId":"-"},"content":" public void deleteAccountCascade(String googleId) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccountCascade(googleId);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":226,"author":{"gitId":"-"},"content":" * Gets all students associated with a googleId."},{"lineNumber":227,"author":{"gitId":"-"},"content":" */"},{"lineNumber":228,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByGoogleId(String googleId) {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" return usersLogic.getStudentsByGoogleId(googleId);"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":233,"author":{"gitId":"-"},"content":" * Gets a course by course id."},{"lineNumber":234,"author":{"gitId":"-"},"content":" * @param courseId courseId of the course."},{"lineNumber":235,"author":{"gitId":"-"},"content":" * @return the specified course."},{"lineNumber":236,"author":{"gitId":"-"},"content":" */"},{"lineNumber":237,"author":{"gitId":"-"},"content":" public Course getCourse(String courseId) {"},{"lineNumber":238,"author":{"gitId":"-"},"content":" return coursesLogic.getCourse(courseId);"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":242,"author":{"gitId":"domoberzin"},"content":" * Gets a section from a course by section name."},{"lineNumber":243,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":244,"author":{"gitId":"domoberzin"},"content":" public Section getSection(String courseId, String section) {"},{"lineNumber":245,"author":{"gitId":"domoberzin"},"content":" return usersLogic.getSection(courseId, section);"},{"lineNumber":246,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":247,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Gets courses associated with student."},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":251,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":252,"author":{"gitId":"-"},"content":" */"},{"lineNumber":253,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getCoursesForStudentAccount(String googleId) {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" return coursesLogic.getCoursesForStudentAccount(googleId);"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":260,"author":{"gitId":"-"},"content":" * Gets courses associated with instructors."},{"lineNumber":261,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":262,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":263,"author":{"gitId":"-"},"content":" *"},{"lineNumber":264,"author":{"gitId":"-"},"content":" * @return Courses the given instructors is in except for courses in Recycle Bin."},{"lineNumber":265,"author":{"gitId":"-"},"content":" */"},{"lineNumber":266,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getCoursesForInstructors(List\u003cInstructor\u003e instructorsList) {"},{"lineNumber":267,"author":{"gitId":"-"},"content":" assert instructorsList !\u003d null;"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" return coursesLogic.getCoursesForInstructors(instructorsList);"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":273,"author":{"gitId":"-"},"content":" * Gets courses associated with instructors that are soft deleted."},{"lineNumber":274,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":276,"author":{"gitId":"-"},"content":" *"},{"lineNumber":277,"author":{"gitId":"-"},"content":" * @return Courses in Recycle Bin that the given instructors is in."},{"lineNumber":278,"author":{"gitId":"-"},"content":" */"},{"lineNumber":279,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getSoftDeletedCoursesForInstructors(List\u003cInstructor\u003e instructorsList) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" assert instructorsList !\u003d null;"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" return coursesLogic.getSoftDeletedCoursesForInstructors(instructorsList);"},{"lineNumber":283,"author":{"gitId":"-"},"content":" }"},{"lineNumber":284,"author":{"gitId":"-"},"content":""},{"lineNumber":285,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":286,"author":{"gitId":"yuanxi1"},"content":" * Gets the institute of the course."},{"lineNumber":287,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":288,"author":{"gitId":"yuanxi1"},"content":" public String getCourseInstitute(String courseId) {"},{"lineNumber":289,"author":{"gitId":"yuanxi1"},"content":" return coursesLogic.getCourseInstitute(courseId);"},{"lineNumber":290,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":291,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * Creates a course."},{"lineNumber":294,"author":{"gitId":"-"},"content":" * @param course the course to create."},{"lineNumber":295,"author":{"gitId":"-"},"content":" * @return the created course."},{"lineNumber":296,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the course is not valid."},{"lineNumber":297,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the course already exists."},{"lineNumber":298,"author":{"gitId":"-"},"content":" */"},{"lineNumber":299,"author":{"gitId":"-"},"content":" public Course createCourse(Course course) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" return coursesLogic.createCourse(course);"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":304,"author":{"gitId":"-"},"content":" * Deletes a course by course id."},{"lineNumber":305,"author":{"gitId":"-"},"content":" * @param courseId of course."},{"lineNumber":306,"author":{"gitId":"-"},"content":" */"},{"lineNumber":307,"author":{"gitId":"-"},"content":" public void deleteCourseCascade(String courseId) {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" coursesLogic.deleteCourseCascade(courseId);"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":312,"author":{"gitId":"domoberzin"},"content":" * Updates a student by {@link Student}."},{"lineNumber":313,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":314,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf email changed, update by recreating the student and cascade update all responses"},{"lineNumber":315,"author":{"gitId":"marquestye"},"content":" * and comments the student gives/receives."},{"lineNumber":316,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":317,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf team changed, cascade delete all responses the student gives/receives within that team."},{"lineNumber":318,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":319,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf section changed, cascade update all responses the student gives/receives."},{"lineNumber":320,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":321,"author":{"gitId":"domoberzin"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":322,"author":{"gitId":"marquestye"},"content":" * * Student parameter is non-null."},{"lineNumber":323,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":324,"author":{"gitId":"domoberzin"},"content":" * @return updated student"},{"lineNumber":325,"author":{"gitId":"domoberzin"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":326,"author":{"gitId":"domoberzin"},"content":" * @throws EntityDoesNotExistException if the student cannot be found"},{"lineNumber":327,"author":{"gitId":"domoberzin"},"content":" * @throws EntityAlreadyExistsException if the student cannot be updated"},{"lineNumber":328,"author":{"gitId":"domoberzin"},"content":" * by recreation because of an existent student"},{"lineNumber":329,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":330,"author":{"gitId":"domoberzin"},"content":" public Student updateStudentCascade(Student student)"},{"lineNumber":331,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":332,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":333,"author":{"gitId":"domoberzin"},"content":" assert student !\u003d null;"},{"lineNumber":334,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":335,"author":{"gitId":"domoberzin"},"content":" return usersLogic.updateStudentCascade(student);"},{"lineNumber":336,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":337,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":339,"author":{"gitId":"-"},"content":" * Moves a course to Recycle Bin by its given corresponding ID."},{"lineNumber":340,"author":{"gitId":"-"},"content":" * @return the deletion timestamp assigned to the course."},{"lineNumber":341,"author":{"gitId":"-"},"content":" */"},{"lineNumber":342,"author":{"gitId":"-"},"content":" public Course moveCourseToRecycleBin(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":343,"author":{"gitId":"-"},"content":" return coursesLogic.moveCourseToRecycleBin(courseId);"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":347,"author":{"gitId":"-"},"content":" * Restores a course and all data related to the course from Recycle Bin by"},{"lineNumber":348,"author":{"gitId":"-"},"content":" * its given corresponding ID."},{"lineNumber":349,"author":{"gitId":"-"},"content":" */"},{"lineNumber":350,"author":{"gitId":"-"},"content":" public void restoreCourseFromRecycleBin(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" coursesLogic.restoreCourseFromRecycleBin(courseId);"},{"lineNumber":352,"author":{"gitId":"-"},"content":" }"},{"lineNumber":353,"author":{"gitId":"-"},"content":""},{"lineNumber":354,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":355,"author":{"gitId":"-"},"content":" * Updates a course."},{"lineNumber":356,"author":{"gitId":"-"},"content":" *"},{"lineNumber":357,"author":{"gitId":"-"},"content":" * @return updated course"},{"lineNumber":358,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":359,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the course cannot be found"},{"lineNumber":360,"author":{"gitId":"-"},"content":" */"},{"lineNumber":361,"author":{"gitId":"-"},"content":" public Course updateCourse(String courseId, String name, String timezone)"},{"lineNumber":362,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":363,"author":{"gitId":"-"},"content":" return coursesLogic.updateCourse(courseId, name, timezone);"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":367,"author":{"gitId":"-"},"content":" * Gets a list of section names for the given {@code courseId}."},{"lineNumber":368,"author":{"gitId":"-"},"content":" */"},{"lineNumber":369,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getSectionNamesForCourse(String courseId)"},{"lineNumber":370,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" return coursesLogic.getSectionNamesForCourse(courseId);"},{"lineNumber":372,"author":{"gitId":"-"},"content":" }"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":375,"author":{"gitId":"-"},"content":" * Get section by {@code courseId} and {@code teamName}."},{"lineNumber":376,"author":{"gitId":"-"},"content":" */"},{"lineNumber":377,"author":{"gitId":"-"},"content":" public Section getSectionByCourseIdAndTeam(String courseId, String teamName) {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" return coursesLogic.getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":379,"author":{"gitId":"-"},"content":" }"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":382,"author":{"gitId":"-"},"content":" * Creates a deadline extension."},{"lineNumber":383,"author":{"gitId":"-"},"content":" *"},{"lineNumber":384,"author":{"gitId":"-"},"content":" * @return created deadline extension"},{"lineNumber":385,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the deadline extension is not valid"},{"lineNumber":386,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the deadline extension already exist"},{"lineNumber":387,"author":{"gitId":"-"},"content":" */"},{"lineNumber":388,"author":{"gitId":"-"},"content":" public DeadlineExtension createDeadlineExtension(DeadlineExtension deadlineExtension)"},{"lineNumber":389,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":390,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.createDeadlineExtension(deadlineExtension);"},{"lineNumber":391,"author":{"gitId":"-"},"content":" }"},{"lineNumber":392,"author":{"gitId":"-"},"content":""},{"lineNumber":393,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":394,"author":{"gitId":"-"},"content":" * Updates a deadline extension."},{"lineNumber":395,"author":{"gitId":"-"},"content":" *"},{"lineNumber":396,"author":{"gitId":"-"},"content":" * @return updated deadline extension"},{"lineNumber":397,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the deadline extension does not exist"},{"lineNumber":398,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the deadline extension is not valid"},{"lineNumber":399,"author":{"gitId":"-"},"content":" *"},{"lineNumber":400,"author":{"gitId":"-"},"content":" */"},{"lineNumber":401,"author":{"gitId":"-"},"content":" public DeadlineExtension updateDeadlineExtension(DeadlineExtension de)"},{"lineNumber":402,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":403,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.updateDeadlineExtension(de);"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":407,"author":{"gitId":"-"},"content":" * Deletes a deadline extension."},{"lineNumber":408,"author":{"gitId":"-"},"content":" */"},{"lineNumber":409,"author":{"gitId":"-"},"content":" public void deleteDeadlineExtension(DeadlineExtension de) {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.deleteDeadlineExtension(de);"},{"lineNumber":411,"author":{"gitId":"-"},"content":" }"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":414,"author":{"gitId":"-"},"content":" * Fetch the deadline extension for a given user and session feedback."},{"lineNumber":415,"author":{"gitId":"-"},"content":" *"},{"lineNumber":416,"author":{"gitId":"-"},"content":" * @return deadline extension instant if exists, else the default end time instant"},{"lineNumber":417,"author":{"gitId":"-"},"content":" * for the session feedback."},{"lineNumber":418,"author":{"gitId":"-"},"content":" */"},{"lineNumber":419,"author":{"gitId":"-"},"content":" public Instant getDeadlineForUser(FeedbackSession session, User user) {"},{"lineNumber":420,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.getDeadlineForUser(session, user);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" }"},{"lineNumber":422,"author":{"gitId":"-"},"content":""},{"lineNumber":423,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":424,"author":{"gitId":"-"},"content":" * Fetch the deadline extension for a given user and session feedback."},{"lineNumber":425,"author":{"gitId":"-"},"content":" *"},{"lineNumber":426,"author":{"gitId":"-"},"content":" * @return deadline extension instant if exists, else return null since no deadline extensions."},{"lineNumber":427,"author":{"gitId":"-"},"content":" */"},{"lineNumber":428,"author":{"gitId":"-"},"content":" public Instant getExtendedDeadlineForUser(FeedbackSession session, User user) {"},{"lineNumber":429,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.getExtendedDeadlineForUser(session, user);"},{"lineNumber":430,"author":{"gitId":"-"},"content":" }"},{"lineNumber":431,"author":{"gitId":"-"},"content":""},{"lineNumber":432,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":433,"author":{"gitId":"-"},"content":" * Gets a list of deadline extensions with endTime coming up soon"},{"lineNumber":434,"author":{"gitId":"-"},"content":" * and possibly need a closing email to be sent."},{"lineNumber":435,"author":{"gitId":"-"},"content":" */"},{"lineNumber":436,"author":{"gitId":"-"},"content":" public List\u003cDeadlineExtension\u003e getDeadlineExtensionsPossiblyNeedingClosingEmail() {"},{"lineNumber":437,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.getDeadlineExtensionsPossiblyNeedingClosingEmail();"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":""},{"lineNumber":440,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":441,"author":{"gitId":"-"},"content":" * Gets a feedback session."},{"lineNumber":442,"author":{"gitId":"-"},"content":" *"},{"lineNumber":443,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":444,"author":{"gitId":"-"},"content":" */"},{"lineNumber":445,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(UUID id) {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSession(id);"},{"lineNumber":447,"author":{"gitId":"-"},"content":" }"},{"lineNumber":448,"author":{"gitId":"-"},"content":""},{"lineNumber":449,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":450,"author":{"gitId":"-"},"content":" * Gets a feedback session for {@code feedbackSessionName} and {@code courseId}."},{"lineNumber":451,"author":{"gitId":"-"},"content":" *"},{"lineNumber":452,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":453,"author":{"gitId":"-"},"content":" */"},{"lineNumber":454,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":455,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":456,"author":{"gitId":"-"},"content":" }"},{"lineNumber":457,"author":{"gitId":"-"},"content":""},{"lineNumber":458,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":459,"author":{"gitId":"-"},"content":" * Gets a feedback session from the recycle bin."},{"lineNumber":460,"author":{"gitId":"-"},"content":" *"},{"lineNumber":461,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":462,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":463,"author":{"gitId":"-"},"content":" *"},{"lineNumber":464,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":465,"author":{"gitId":"-"},"content":" */"},{"lineNumber":466,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSessionFromRecycleBin(String feedbackSessionName, String courseId) {"},{"lineNumber":467,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":468,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":469,"author":{"gitId":"-"},"content":""},{"lineNumber":470,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionFromRecycleBin(feedbackSessionName, courseId);"},{"lineNumber":471,"author":{"gitId":"-"},"content":" }"},{"lineNumber":472,"author":{"gitId":"-"},"content":""},{"lineNumber":473,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":474,"author":{"gitId":"-"},"content":" * Returns a {@code List} of feedback sessions in the Recycle Bin for the instructors."},{"lineNumber":475,"author":{"gitId":"-"},"content":" * \u003cbr\u003e"},{"lineNumber":476,"author":{"gitId":"-"},"content":" * Omits sessions if the corresponding courses are archived or in Recycle Bin"},{"lineNumber":477,"author":{"gitId":"-"},"content":" */"},{"lineNumber":478,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getSoftDeletedFeedbackSessionsForInstructors("},{"lineNumber":479,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList) {"},{"lineNumber":480,"author":{"gitId":"-"},"content":" assert instructorList !\u003d null;"},{"lineNumber":481,"author":{"gitId":"-"},"content":""},{"lineNumber":482,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getSoftDeletedFeedbackSessionsForInstructors(instructorList);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" }"},{"lineNumber":484,"author":{"gitId":"-"},"content":""},{"lineNumber":485,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":486,"author":{"gitId":"-"},"content":" * Gets a list of feedback sessions for instructors."},{"lineNumber":487,"author":{"gitId":"-"},"content":" */"},{"lineNumber":488,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForInstructors("},{"lineNumber":489,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList) {"},{"lineNumber":490,"author":{"gitId":"-"},"content":" assert instructorList !\u003d null;"},{"lineNumber":491,"author":{"gitId":"-"},"content":""},{"lineNumber":492,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsForInstructors(instructorList);"},{"lineNumber":493,"author":{"gitId":"-"},"content":" }"},{"lineNumber":494,"author":{"gitId":"-"},"content":""},{"lineNumber":495,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":496,"author":{"gitId":"-"},"content":" * Gets all and only the feedback sessions ongoing within a range of time."},{"lineNumber":497,"author":{"gitId":"-"},"content":" */"},{"lineNumber":498,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getOngoingSessions(Instant rangeStart, Instant rangeEnd) {"},{"lineNumber":499,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getOngoingSessions(rangeStart, rangeEnd);"},{"lineNumber":500,"author":{"gitId":"-"},"content":" }"},{"lineNumber":501,"author":{"gitId":"-"},"content":""},{"lineNumber":502,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":503,"author":{"gitId":"-"},"content":" * Gets a set of giver identifiers that has at least one response under a feedback session."},{"lineNumber":504,"author":{"gitId":"-"},"content":" */"},{"lineNumber":505,"author":{"gitId":"-"},"content":" public Set\u003cString\u003e getGiverSetThatAnsweredFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":506,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":507,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":508,"author":{"gitId":"-"},"content":""},{"lineNumber":509,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getGiverSetThatAnsweredFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":510,"author":{"gitId":"-"},"content":" }"},{"lineNumber":511,"author":{"gitId":"-"},"content":""},{"lineNumber":512,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":513,"author":{"gitId":"-"},"content":" * Updates a feedback session."},{"lineNumber":514,"author":{"gitId":"-"},"content":" *"},{"lineNumber":515,"author":{"gitId":"-"},"content":" * @return returns the updated feedback session."},{"lineNumber":516,"author":{"gitId":"-"},"content":" */"},{"lineNumber":517,"author":{"gitId":"-"},"content":" public FeedbackSession updateFeedbackSession(FeedbackSession feedbackSession)"},{"lineNumber":518,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":519,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.updateFeedbackSession(feedbackSession);"},{"lineNumber":520,"author":{"gitId":"-"},"content":" }"},{"lineNumber":521,"author":{"gitId":"-"},"content":""},{"lineNumber":522,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":523,"author":{"gitId":"-"},"content":" * Returns a list of sessions that require automated emails to be sent as they are published."},{"lineNumber":524,"author":{"gitId":"-"},"content":" */"},{"lineNumber":525,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent() {"},{"lineNumber":526,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent();"},{"lineNumber":527,"author":{"gitId":"-"},"content":" }"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":530,"author":{"gitId":"-"},"content":" * Creates a feedback session."},{"lineNumber":531,"author":{"gitId":"-"},"content":" *"},{"lineNumber":532,"author":{"gitId":"-"},"content":" * @return returns the created feedback session."},{"lineNumber":533,"author":{"gitId":"-"},"content":" */"},{"lineNumber":534,"author":{"gitId":"-"},"content":" public FeedbackSession createFeedbackSession(FeedbackSession feedbackSession)"},{"lineNumber":535,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":536,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":537,"author":{"gitId":"-"},"content":" assert feedbackSession.getCourse() !\u003d null \u0026\u0026 feedbackSession.getCourse().getId() !\u003d null;"},{"lineNumber":538,"author":{"gitId":"-"},"content":""},{"lineNumber":539,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.createFeedbackSession(feedbackSession);"},{"lineNumber":540,"author":{"gitId":"-"},"content":" }"},{"lineNumber":541,"author":{"gitId":"-"},"content":""},{"lineNumber":542,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":543,"author":{"gitId":"-"},"content":" * Gets all feedback sessions of a course, except those that are soft-deleted."},{"lineNumber":544,"author":{"gitId":"-"},"content":" */"},{"lineNumber":545,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForCourse(String courseId) {"},{"lineNumber":546,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsForCourse(courseId);"},{"lineNumber":547,"author":{"gitId":"-"},"content":" }"},{"lineNumber":548,"author":{"gitId":"-"},"content":""},{"lineNumber":549,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":550,"author":{"gitId":"-"},"content":" * Creates a new feedback question."},{"lineNumber":551,"author":{"gitId":"-"},"content":" *"},{"lineNumber":552,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":553,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":554,"author":{"gitId":"-"},"content":" *"},{"lineNumber":555,"author":{"gitId":"-"},"content":" * @return the created question"},{"lineNumber":556,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the question is invalid"},{"lineNumber":557,"author":{"gitId":"marquestye"},"content":" * @throws EntityAlreadyExistsException if the question already exists"},{"lineNumber":558,"author":{"gitId":"-"},"content":" */"},{"lineNumber":559,"author":{"gitId":"marquestye"},"content":" public FeedbackQuestion createFeedbackQuestion(FeedbackQuestion feedbackQuestion)"},{"lineNumber":560,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":561,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":562,"author":{"gitId":"-"},"content":" }"},{"lineNumber":563,"author":{"gitId":"-"},"content":""},{"lineNumber":564,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":565,"author":{"gitId":"-"},"content":" * Publishes a feedback session."},{"lineNumber":566,"author":{"gitId":"-"},"content":" * @return the published feedback session"},{"lineNumber":567,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":568,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if session is already published"},{"lineNumber":569,"author":{"gitId":"-"},"content":" */"},{"lineNumber":570,"author":{"gitId":"-"},"content":" public FeedbackSession publishFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":571,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":572,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":573,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":574,"author":{"gitId":"-"},"content":""},{"lineNumber":575,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.publishFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":576,"author":{"gitId":"-"},"content":" }"},{"lineNumber":577,"author":{"gitId":"-"},"content":""},{"lineNumber":578,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":579,"author":{"gitId":"-"},"content":" * Checks whether a student has attempted a feedback session."},{"lineNumber":580,"author":{"gitId":"-"},"content":" *"},{"lineNumber":581,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf there is no question for students, the feedback session is considered as attempted.\u003c/p\u003e"},{"lineNumber":582,"author":{"gitId":"-"},"content":" */"},{"lineNumber":583,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionAttemptedByStudent(FeedbackSession session, String userEmail, String userTeam) {"},{"lineNumber":584,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.isFeedbackSessionAttemptedByStudent(session, userEmail, userTeam);"},{"lineNumber":585,"author":{"gitId":"-"},"content":" }"},{"lineNumber":586,"author":{"gitId":"-"},"content":""},{"lineNumber":587,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":588,"author":{"gitId":"-"},"content":" * Checks whether an instructor has attempted a feedback session."},{"lineNumber":589,"author":{"gitId":"-"},"content":" *"},{"lineNumber":590,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf there is no question for instructors, the feedback session is considered as attempted.\u003c/p\u003e"},{"lineNumber":591,"author":{"gitId":"-"},"content":" */"},{"lineNumber":592,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionAttemptedByInstructor(FeedbackSession session, String userEmail) {"},{"lineNumber":593,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.isFeedbackSessionAttemptedByInstructor(session, userEmail);"},{"lineNumber":594,"author":{"gitId":"-"},"content":" }"},{"lineNumber":595,"author":{"gitId":"-"},"content":""},{"lineNumber":596,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":597,"author":{"gitId":"-"},"content":" * Deletes a feedback session cascade to its associated questions, responses, deadline extensions and comments."},{"lineNumber":598,"author":{"gitId":"-"},"content":" *"},{"lineNumber":599,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":600,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":601,"author":{"gitId":"-"},"content":" */"},{"lineNumber":602,"author":{"gitId":"-"},"content":" public void deleteFeedbackSessionCascade(String feedbackSessionName, String courseId) {"},{"lineNumber":603,"author":{"gitId":"-"},"content":" feedbackSessionsLogic.deleteFeedbackSessionCascade(feedbackSessionName, courseId);"},{"lineNumber":604,"author":{"gitId":"-"},"content":" }"},{"lineNumber":605,"author":{"gitId":"-"},"content":""},{"lineNumber":606,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":607,"author":{"gitId":"-"},"content":" * Soft-deletes a specific session to Recycle Bin."},{"lineNumber":608,"author":{"gitId":"-"},"content":" */"},{"lineNumber":609,"author":{"gitId":"-"},"content":" public void moveFeedbackSessionToRecycleBin(String feedbackSessionName, String courseId)"},{"lineNumber":610,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":611,"author":{"gitId":"-"},"content":""},{"lineNumber":612,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":613,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":614,"author":{"gitId":"-"},"content":""},{"lineNumber":615,"author":{"gitId":"-"},"content":" feedbackSessionsLogic.moveFeedbackSessionToRecycleBin(feedbackSessionName, courseId);"},{"lineNumber":616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":619,"author":{"gitId":"-"},"content":" * Restores a specific session from Recycle Bin to feedback sessions table."},{"lineNumber":620,"author":{"gitId":"-"},"content":" */"},{"lineNumber":621,"author":{"gitId":"-"},"content":" public void restoreFeedbackSessionFromRecycleBin(String feedbackSessionName, String courseId)"},{"lineNumber":622,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":623,"author":{"gitId":"-"},"content":""},{"lineNumber":624,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":625,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":626,"author":{"gitId":"-"},"content":""},{"lineNumber":627,"author":{"gitId":"-"},"content":" feedbackSessionsLogic.restoreFeedbackSessionFromRecycleBin(feedbackSessionName, courseId);"},{"lineNumber":628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":629,"author":{"gitId":"-"},"content":""},{"lineNumber":630,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":631,"author":{"gitId":"-"},"content":" * Unpublishes a feedback session."},{"lineNumber":632,"author":{"gitId":"-"},"content":" * @return the unpublished feedback session"},{"lineNumber":633,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":634,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException"},{"lineNumber":635,"author":{"gitId":"-"},"content":" * if the feedback session is not ready to be unpublished."},{"lineNumber":636,"author":{"gitId":"-"},"content":" */"},{"lineNumber":637,"author":{"gitId":"-"},"content":" public FeedbackSession unpublishFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":638,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":639,"author":{"gitId":"-"},"content":""},{"lineNumber":640,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":641,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":642,"author":{"gitId":"-"},"content":""},{"lineNumber":643,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.unpublishFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":644,"author":{"gitId":"-"},"content":" }"},{"lineNumber":645,"author":{"gitId":"-"},"content":""},{"lineNumber":646,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":647,"author":{"gitId":"-"},"content":" * After an update to feedback session\u0027s fields, may need to adjust the email status of the session."},{"lineNumber":648,"author":{"gitId":"-"},"content":" * @param session recently updated session."},{"lineNumber":649,"author":{"gitId":"-"},"content":" */"},{"lineNumber":650,"author":{"gitId":"-"},"content":" public void adjustFeedbackSessionEmailStatusAfterUpdate(FeedbackSession session) {"},{"lineNumber":651,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":652,"author":{"gitId":"-"},"content":" feedbackSessionsLogic.adjustFeedbackSessionEmailStatusAfterUpdate(session);"},{"lineNumber":653,"author":{"gitId":"-"},"content":" }"},{"lineNumber":654,"author":{"gitId":"-"},"content":""},{"lineNumber":655,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":656,"author":{"gitId":"domoberzin"},"content":" * Gets the expected number of submissions for a feedback session."},{"lineNumber":657,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":658,"author":{"gitId":"domoberzin"},"content":" * \u003cbr\u003ePreconditions: \u003cbr\u003e"},{"lineNumber":659,"author":{"gitId":"domoberzin"},"content":" * * All parameters are non-null."},{"lineNumber":660,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":661,"author":{"gitId":"domoberzin"},"content":" public int getExpectedTotalSubmission(FeedbackSession fs) {"},{"lineNumber":662,"author":{"gitId":"domoberzin"},"content":" assert fs !\u003d null;"},{"lineNumber":663,"author":{"gitId":"domoberzin"},"content":" return feedbackSessionsLogic.getExpectedTotalSubmission(fs);"},{"lineNumber":664,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":665,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":666,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":667,"author":{"gitId":"domoberzin"},"content":" * Gets the actual number of submissions for a feedback session."},{"lineNumber":668,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":669,"author":{"gitId":"domoberzin"},"content":" * \u003cbr\u003ePreconditions: \u003cbr\u003e"},{"lineNumber":670,"author":{"gitId":"domoberzin"},"content":" * * All parameters are non-null."},{"lineNumber":671,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":672,"author":{"gitId":"domoberzin"},"content":" public int getActualTotalSubmission(FeedbackSession fs) {"},{"lineNumber":673,"author":{"gitId":"domoberzin"},"content":" assert fs !\u003d null;"},{"lineNumber":674,"author":{"gitId":"domoberzin"},"content":" return feedbackSessionsLogic.getActualTotalSubmission(fs);"},{"lineNumber":675,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":676,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":677,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":678,"author":{"gitId":"-"},"content":" * Get usage statistics within a time range."},{"lineNumber":679,"author":{"gitId":"-"},"content":" */"},{"lineNumber":680,"author":{"gitId":"-"},"content":" public List\u003cUsageStatistics\u003e getUsageStatisticsForTimeRange(Instant startTime, Instant endTime) {"},{"lineNumber":681,"author":{"gitId":"-"},"content":" return usageStatisticsLogic.getUsageStatisticsForTimeRange(startTime, endTime);"},{"lineNumber":682,"author":{"gitId":"-"},"content":" }"},{"lineNumber":683,"author":{"gitId":"-"},"content":""},{"lineNumber":684,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":685,"author":{"gitId":"-"},"content":" * Calculate usage statistics within a time range."},{"lineNumber":686,"author":{"gitId":"-"},"content":" */"},{"lineNumber":687,"author":{"gitId":"-"},"content":" public UsageStatistics calculateEntitiesStatisticsForTimeRange(Instant startTime, Instant endTime) {"},{"lineNumber":688,"author":{"gitId":"-"},"content":" return usageStatisticsLogic.calculateEntitiesStatisticsForTimeRange(startTime, endTime);"},{"lineNumber":689,"author":{"gitId":"-"},"content":" }"},{"lineNumber":690,"author":{"gitId":"-"},"content":""},{"lineNumber":691,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":692,"author":{"gitId":"-"},"content":" * Create usage statistics within a time range."},{"lineNumber":693,"author":{"gitId":"-"},"content":" */"},{"lineNumber":694,"author":{"gitId":"-"},"content":" public void createUsageStatistics(UsageStatistics attributes)"},{"lineNumber":695,"author":{"gitId":"-"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":696,"author":{"gitId":"-"},"content":" usageStatisticsLogic.createUsageStatistics(attributes);"},{"lineNumber":697,"author":{"gitId":"-"},"content":" }"},{"lineNumber":698,"author":{"gitId":"-"},"content":""},{"lineNumber":699,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":700,"author":{"gitId":"-"},"content":" * Creates a notification."},{"lineNumber":701,"author":{"gitId":"-"},"content":" *"},{"lineNumber":702,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":703,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":704,"author":{"gitId":"-"},"content":" *"},{"lineNumber":705,"author":{"gitId":"-"},"content":" * @return created notification"},{"lineNumber":706,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the notification is not valid"},{"lineNumber":707,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the notification exists in the database"},{"lineNumber":708,"author":{"gitId":"-"},"content":" */"},{"lineNumber":709,"author":{"gitId":"-"},"content":" public Notification createNotification(Notification notification) throws"},{"lineNumber":710,"author":{"gitId":"-"},"content":" InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":711,"author":{"gitId":"-"},"content":" return notificationsLogic.createNotification(notification);"},{"lineNumber":712,"author":{"gitId":"-"},"content":" }"},{"lineNumber":713,"author":{"gitId":"-"},"content":""},{"lineNumber":714,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":715,"author":{"gitId":"-"},"content":" * Gets a notification by ID."},{"lineNumber":716,"author":{"gitId":"-"},"content":" *"},{"lineNumber":717,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":718,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":719,"author":{"gitId":"-"},"content":" *"},{"lineNumber":720,"author":{"gitId":"-"},"content":" * @return Null if no match found."},{"lineNumber":721,"author":{"gitId":"-"},"content":" */"},{"lineNumber":722,"author":{"gitId":"-"},"content":" public Notification getNotification(UUID notificationId) {"},{"lineNumber":723,"author":{"gitId":"-"},"content":" return notificationsLogic.getNotification(notificationId);"},{"lineNumber":724,"author":{"gitId":"-"},"content":" }"},{"lineNumber":725,"author":{"gitId":"-"},"content":""},{"lineNumber":726,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":727,"author":{"gitId":"-"},"content":" * Updates a notification."},{"lineNumber":728,"author":{"gitId":"-"},"content":" *"},{"lineNumber":729,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":730,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":731,"author":{"gitId":"-"},"content":" * @return updated notification"},{"lineNumber":732,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the notification is not valid"},{"lineNumber":733,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the notification does not exist in the database"},{"lineNumber":734,"author":{"gitId":"-"},"content":" */"},{"lineNumber":735,"author":{"gitId":"-"},"content":" public Notification updateNotification(UUID notificationId, Instant startTime, Instant endTime,"},{"lineNumber":736,"author":{"gitId":"-"},"content":" NotificationStyle style, NotificationTargetUser targetUser, String title,"},{"lineNumber":737,"author":{"gitId":"-"},"content":" String message) throws"},{"lineNumber":738,"author":{"gitId":"-"},"content":" InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":739,"author":{"gitId":"-"},"content":" return notificationsLogic.updateNotification(notificationId, startTime, endTime, style, targetUser, title, message);"},{"lineNumber":740,"author":{"gitId":"-"},"content":" }"},{"lineNumber":741,"author":{"gitId":"-"},"content":""},{"lineNumber":742,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":743,"author":{"gitId":"-"},"content":" * Deletes notification by ID."},{"lineNumber":744,"author":{"gitId":"-"},"content":" *"},{"lineNumber":745,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":746,"author":{"gitId":"-"},"content":" * \u003cli\u003eFails silently if no such notification.\u003c/li\u003e"},{"lineNumber":747,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":748,"author":{"gitId":"-"},"content":" *"},{"lineNumber":749,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":750,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":751,"author":{"gitId":"-"},"content":" */"},{"lineNumber":752,"author":{"gitId":"-"},"content":" public void deleteNotification(UUID notificationId) {"},{"lineNumber":753,"author":{"gitId":"-"},"content":" notificationsLogic.deleteNotification(notificationId);"},{"lineNumber":754,"author":{"gitId":"-"},"content":" }"},{"lineNumber":755,"author":{"gitId":"-"},"content":""},{"lineNumber":756,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":757,"author":{"gitId":"-"},"content":" * Get a list of IDs of the read notifications of the account."},{"lineNumber":758,"author":{"gitId":"-"},"content":" */"},{"lineNumber":759,"author":{"gitId":"-"},"content":" public List\u003cUUID\u003e getReadNotificationsId(String id) {"},{"lineNumber":760,"author":{"gitId":"-"},"content":" return accountsLogic.getReadNotificationsId(id);"},{"lineNumber":761,"author":{"gitId":"-"},"content":" }"},{"lineNumber":762,"author":{"gitId":"-"},"content":""},{"lineNumber":763,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":764,"author":{"gitId":"-"},"content":" * Updates user read status for notification with ID {@code notificationId} and expiry time {@code endTime}."},{"lineNumber":765,"author":{"gitId":"-"},"content":" *"},{"lineNumber":766,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":767,"author":{"gitId":"-"},"content":" * * All parameters are non-null. {@code endTime} must be after current moment."},{"lineNumber":768,"author":{"gitId":"-"},"content":" */"},{"lineNumber":769,"author":{"gitId":"-"},"content":" public List\u003cUUID\u003e updateReadNotifications(String id, UUID notificationId, Instant endTime)"},{"lineNumber":770,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":771,"author":{"gitId":"-"},"content":" return accountsLogic.updateReadNotifications(id, notificationId, endTime);"},{"lineNumber":772,"author":{"gitId":"-"},"content":" }"},{"lineNumber":773,"author":{"gitId":"-"},"content":""},{"lineNumber":774,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":775,"author":{"gitId":"-"},"content":" * Gets instructor associated with {@code id}."},{"lineNumber":776,"author":{"gitId":"-"},"content":" *"},{"lineNumber":777,"author":{"gitId":"-"},"content":" * @param id Id of Instructor."},{"lineNumber":778,"author":{"gitId":"-"},"content":" * @return Returns Instructor if found else null."},{"lineNumber":779,"author":{"gitId":"-"},"content":" */"},{"lineNumber":780,"author":{"gitId":"-"},"content":" public Instructor getInstructor(UUID id) {"},{"lineNumber":781,"author":{"gitId":"-"},"content":" return usersLogic.getInstructor(id);"},{"lineNumber":782,"author":{"gitId":"-"},"content":" }"},{"lineNumber":783,"author":{"gitId":"-"},"content":""},{"lineNumber":784,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":785,"author":{"gitId":"-"},"content":" * Gets instructor associated with {@code courseId} and {@code email}."},{"lineNumber":786,"author":{"gitId":"-"},"content":" */"},{"lineNumber":787,"author":{"gitId":"-"},"content":" public Instructor getInstructorForEmail(String courseId, String email) {"},{"lineNumber":788,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorForEmail(courseId, email);"},{"lineNumber":789,"author":{"gitId":"-"},"content":" }"},{"lineNumber":790,"author":{"gitId":"-"},"content":""},{"lineNumber":791,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":792,"author":{"gitId":"-"},"content":" * Gets an instructor by associated {@code regkey}."},{"lineNumber":793,"author":{"gitId":"-"},"content":" */"},{"lineNumber":794,"author":{"gitId":"-"},"content":" public Instructor getInstructorByRegistrationKey(String regKey) {"},{"lineNumber":795,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorByRegistrationKey(regKey);"},{"lineNumber":796,"author":{"gitId":"-"},"content":" }"},{"lineNumber":797,"author":{"gitId":"-"},"content":""},{"lineNumber":798,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":799,"author":{"gitId":"-"},"content":" * Gets an instructor by associated {@code googleId}."},{"lineNumber":800,"author":{"gitId":"-"},"content":" */"},{"lineNumber":801,"author":{"gitId":"-"},"content":" public Instructor getInstructorByGoogleId(String courseId, String googleId) {"},{"lineNumber":802,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorByGoogleId(courseId, googleId);"},{"lineNumber":803,"author":{"gitId":"-"},"content":" }"},{"lineNumber":804,"author":{"gitId":"-"},"content":""},{"lineNumber":805,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":806,"author":{"gitId":"-"},"content":" * Gets list of instructors by {@code googleId}."},{"lineNumber":807,"author":{"gitId":"-"},"content":" */"},{"lineNumber":808,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForGoogleId(String googleId) {"},{"lineNumber":809,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorsForGoogleId(googleId);"},{"lineNumber":810,"author":{"gitId":"-"},"content":" }"},{"lineNumber":811,"author":{"gitId":"-"},"content":""},{"lineNumber":812,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":813,"author":{"gitId":"-"},"content":" * Gets instructors by associated {@code courseId}."},{"lineNumber":814,"author":{"gitId":"-"},"content":" */"},{"lineNumber":815,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsByCourse(String courseId) {"},{"lineNumber":816,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorsForCourse(courseId);"},{"lineNumber":817,"author":{"gitId":"-"},"content":" }"},{"lineNumber":818,"author":{"gitId":"-"},"content":""},{"lineNumber":819,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":820,"author":{"gitId":"-"},"content":" * Creates an instructor."},{"lineNumber":821,"author":{"gitId":"-"},"content":" */"},{"lineNumber":822,"author":{"gitId":"-"},"content":" public Instructor createInstructor(Instructor instructor)"},{"lineNumber":823,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":824,"author":{"gitId":"-"},"content":" return usersLogic.createInstructor(instructor);"},{"lineNumber":825,"author":{"gitId":"-"},"content":" }"},{"lineNumber":826,"author":{"gitId":"-"},"content":""},{"lineNumber":827,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":828,"author":{"gitId":"-"},"content":" * Make the instructor join the course, i.e. associate the Google ID to the instructor.\u003cbr\u003e"},{"lineNumber":829,"author":{"gitId":"-"},"content":" * Creates an account for the instructor if no existing account is found."},{"lineNumber":830,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":831,"author":{"gitId":"-"},"content":" * * Parameters regkey and googleId are non-null."},{"lineNumber":832,"author":{"gitId":"-"},"content":" */"},{"lineNumber":833,"author":{"gitId":"-"},"content":" public Instructor joinCourseForInstructor(String regkey, String googleId)"},{"lineNumber":834,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":835,"author":{"gitId":"-"},"content":""},{"lineNumber":836,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":837,"author":{"gitId":"-"},"content":" assert regkey !\u003d null;"},{"lineNumber":838,"author":{"gitId":"-"},"content":""},{"lineNumber":839,"author":{"gitId":"-"},"content":" return accountsLogic.joinCourseForInstructor(regkey, googleId);"},{"lineNumber":840,"author":{"gitId":"-"},"content":" }"},{"lineNumber":841,"author":{"gitId":"-"},"content":""},{"lineNumber":842,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":843,"author":{"gitId":"-"},"content":" * Validates that the join course request is valid, then"},{"lineNumber":844,"author":{"gitId":"-"},"content":" * makes the instructor join the course, i.e. associate an account to the instructor with the given googleId."},{"lineNumber":845,"author":{"gitId":"-"},"content":" * Creates an account for the instructor if no existing account is found."},{"lineNumber":846,"author":{"gitId":"-"},"content":" * Preconditions:"},{"lineNumber":847,"author":{"gitId":"-"},"content":" * Parameters regkey and googleId are non-null."},{"lineNumber":848,"author":{"gitId":"-"},"content":" */"},{"lineNumber":849,"author":{"gitId":"-"},"content":" public Instructor joinCourseForInstructor(String googleId, Instructor instructor)"},{"lineNumber":850,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":851,"author":{"gitId":"-"},"content":" if (googleId \u003d\u003d null) {"},{"lineNumber":852,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Instructor\u0027s googleId cannot be null\");"},{"lineNumber":853,"author":{"gitId":"-"},"content":" }"},{"lineNumber":854,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":855,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Instructor cannot be null\");"},{"lineNumber":856,"author":{"gitId":"-"},"content":" }"},{"lineNumber":857,"author":{"gitId":"-"},"content":""},{"lineNumber":858,"author":{"gitId":"-"},"content":" validateJoinCourseRequest(googleId, instructor);"},{"lineNumber":859,"author":{"gitId":"-"},"content":" return usersLogic.joinCourseForInstructor(googleId, instructor);"},{"lineNumber":860,"author":{"gitId":"-"},"content":" }"},{"lineNumber":861,"author":{"gitId":"-"},"content":""},{"lineNumber":862,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":863,"author":{"gitId":"-"},"content":" * Validates that the instructor can join the course it has as courseId field."},{"lineNumber":864,"author":{"gitId":"-"},"content":" *"},{"lineNumber":865,"author":{"gitId":"-"},"content":" * @return true if the instructor can join the course."},{"lineNumber":866,"author":{"gitId":"-"},"content":" * @throws Exception if the instructor cannot join the course."},{"lineNumber":867,"author":{"gitId":"-"},"content":" */"},{"lineNumber":868,"author":{"gitId":"-"},"content":" private boolean validateJoinCourseRequest(String googleId, Instructor instructor)"},{"lineNumber":869,"author":{"gitId":"-"},"content":" throws EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":870,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":871,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Instructor not found\");"},{"lineNumber":872,"author":{"gitId":"-"},"content":" }"},{"lineNumber":873,"author":{"gitId":"-"},"content":""},{"lineNumber":874,"author":{"gitId":"-"},"content":" // check course exists and has not been deleted"},{"lineNumber":875,"author":{"gitId":"-"},"content":" Course course \u003d getCourse(instructor.getCourseId());"},{"lineNumber":876,"author":{"gitId":"-"},"content":""},{"lineNumber":877,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":878,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Course with id \" + instructor.getCourseId() + \" does not exist\");"},{"lineNumber":879,"author":{"gitId":"-"},"content":" }"},{"lineNumber":880,"author":{"gitId":"-"},"content":" if (course.isCourseDeleted()) {"},{"lineNumber":881,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"The course you are trying to join has been deleted by an instructor\");"},{"lineNumber":882,"author":{"gitId":"-"},"content":" }"},{"lineNumber":883,"author":{"gitId":"-"},"content":""},{"lineNumber":884,"author":{"gitId":"-"},"content":" if (instructor.isRegistered()) {"},{"lineNumber":885,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":886,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":887,"author":{"gitId":"-"},"content":" // Check if this Google ID has already joined this course with courseId"},{"lineNumber":888,"author":{"gitId":"-"},"content":" Instructor existingInstructor \u003d"},{"lineNumber":889,"author":{"gitId":"-"},"content":" usersLogic.getInstructorByGoogleId(instructor.getCourseId(), googleId);"},{"lineNumber":890,"author":{"gitId":"-"},"content":" if (existingInstructor !\u003d null) {"},{"lineNumber":891,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":892,"author":{"gitId":"-"},"content":" }"},{"lineNumber":893,"author":{"gitId":"-"},"content":" }"},{"lineNumber":894,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":895,"author":{"gitId":"-"},"content":" }"},{"lineNumber":896,"author":{"gitId":"-"},"content":""},{"lineNumber":897,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":898,"author":{"gitId":"-"},"content":" * Searches instructors in the whole system. Used by admin only."},{"lineNumber":899,"author":{"gitId":"-"},"content":" *"},{"lineNumber":900,"author":{"gitId":"-"},"content":" * @return List of found instructors in the whole system. Null if no result found."},{"lineNumber":901,"author":{"gitId":"-"},"content":" */"},{"lineNumber":902,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e searchInstructorsInWholeSystem(String queryString)"},{"lineNumber":903,"author":{"gitId":"-"},"content":" throws SearchServiceException {"},{"lineNumber":904,"author":{"gitId":"-"},"content":" assert queryString !\u003d null;"},{"lineNumber":905,"author":{"gitId":"-"},"content":""},{"lineNumber":906,"author":{"gitId":"-"},"content":" return usersLogic.searchInstructorsInWholeSystem(queryString);"},{"lineNumber":907,"author":{"gitId":"-"},"content":" }"},{"lineNumber":908,"author":{"gitId":"-"},"content":""},{"lineNumber":909,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":910,"author":{"gitId":"-"},"content":" * Updates an instructor and cascades to responses and comments if needed."},{"lineNumber":911,"author":{"gitId":"-"},"content":" *"},{"lineNumber":912,"author":{"gitId":"-"},"content":" * @return updated instructor"},{"lineNumber":913,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the instructor update request is invalid"},{"lineNumber":914,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if the update violates instructor validity"},{"lineNumber":915,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the instructor does not exist in the database"},{"lineNumber":916,"author":{"gitId":"-"},"content":" */"},{"lineNumber":917,"author":{"gitId":"-"},"content":" public Instructor updateInstructorCascade(String courseId, InstructorCreateRequest instructorRequest) throws"},{"lineNumber":918,"author":{"gitId":"-"},"content":" InvalidParametersException, InstructorUpdateException, EntityDoesNotExistException {"},{"lineNumber":919,"author":{"gitId":"-"},"content":" return usersLogic.updateInstructorCascade(courseId, instructorRequest);"},{"lineNumber":920,"author":{"gitId":"-"},"content":" }"},{"lineNumber":921,"author":{"gitId":"-"},"content":""},{"lineNumber":922,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":923,"author":{"gitId":"-"},"content":" * Checks if an instructor with {@code googleId} can create a course with {@code institute}."},{"lineNumber":924,"author":{"gitId":"-"},"content":" */"},{"lineNumber":925,"author":{"gitId":"-"},"content":" public boolean canInstructorCreateCourse(String googleId, String institute) {"},{"lineNumber":926,"author":{"gitId":"-"},"content":" return usersLogic.canInstructorCreateCourse(googleId, institute);"},{"lineNumber":927,"author":{"gitId":"-"},"content":" }"},{"lineNumber":928,"author":{"gitId":"-"},"content":""},{"lineNumber":929,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":930,"author":{"gitId":"-"},"content":" * Gets student associated with {@code id}."},{"lineNumber":931,"author":{"gitId":"-"},"content":" *"},{"lineNumber":932,"author":{"gitId":"-"},"content":" * @param id Id of Student."},{"lineNumber":933,"author":{"gitId":"-"},"content":" * @return Returns Student if found else null."},{"lineNumber":934,"author":{"gitId":"-"},"content":" */"},{"lineNumber":935,"author":{"gitId":"-"},"content":" public Student getStudent(UUID id) {"},{"lineNumber":936,"author":{"gitId":"-"},"content":" return usersLogic.getStudent(id);"},{"lineNumber":937,"author":{"gitId":"-"},"content":" }"},{"lineNumber":938,"author":{"gitId":"-"},"content":""},{"lineNumber":939,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":940,"author":{"gitId":"-"},"content":" * Gets student associated with {@code courseId} and {@code email}."},{"lineNumber":941,"author":{"gitId":"-"},"content":" */"},{"lineNumber":942,"author":{"gitId":"-"},"content":" public Student getStudentForEmail(String courseId, String email) {"},{"lineNumber":943,"author":{"gitId":"-"},"content":" return usersLogic.getStudentForEmail(courseId, email);"},{"lineNumber":944,"author":{"gitId":"-"},"content":" }"},{"lineNumber":945,"author":{"gitId":"-"},"content":""},{"lineNumber":946,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":947,"author":{"gitId":"-"},"content":" * Check if the students with the provided emails exist in the course."},{"lineNumber":948,"author":{"gitId":"-"},"content":" */"},{"lineNumber":949,"author":{"gitId":"-"},"content":" public boolean verifyStudentsExistInCourse(String courseId, List\u003cString\u003e emails) {"},{"lineNumber":950,"author":{"gitId":"-"},"content":" return usersLogic.verifyStudentsExistInCourse(courseId, emails);"},{"lineNumber":951,"author":{"gitId":"-"},"content":" }"},{"lineNumber":952,"author":{"gitId":"-"},"content":""},{"lineNumber":953,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":954,"author":{"gitId":"-"},"content":" * Check if the instructors with the provided emails exist in the course."},{"lineNumber":955,"author":{"gitId":"-"},"content":" */"},{"lineNumber":956,"author":{"gitId":"-"},"content":" public boolean verifyInstructorsExistInCourse(String courseId, List\u003cString\u003e emails) {"},{"lineNumber":957,"author":{"gitId":"-"},"content":" return usersLogic.verifyInstructorsExistInCourse(courseId, emails);"},{"lineNumber":958,"author":{"gitId":"-"},"content":" }"},{"lineNumber":959,"author":{"gitId":"-"},"content":""},{"lineNumber":960,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":961,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":962,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":963,"author":{"gitId":"-"},"content":" * @return Empty list if none found."},{"lineNumber":964,"author":{"gitId":"-"},"content":" */"},{"lineNumber":965,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForCourse(String courseId) {"},{"lineNumber":966,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":967,"author":{"gitId":"-"},"content":" return usersLogic.getStudentsForCourse(courseId);"},{"lineNumber":968,"author":{"gitId":"-"},"content":" }"},{"lineNumber":969,"author":{"gitId":"-"},"content":""},{"lineNumber":970,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":971,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":972,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":973,"author":{"gitId":"-"},"content":" * @return Empty list if none found."},{"lineNumber":974,"author":{"gitId":"-"},"content":" */"},{"lineNumber":975,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getUnregisteredStudentsForCourse(String courseId) {"},{"lineNumber":976,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":977,"author":{"gitId":"-"},"content":" return usersLogic.getUnregisteredStudentsForCourse(courseId);"},{"lineNumber":978,"author":{"gitId":"-"},"content":" }"},{"lineNumber":979,"author":{"gitId":"-"},"content":""},{"lineNumber":980,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":981,"author":{"gitId":"-"},"content":" * Gets a student by associated {@code regkey}."},{"lineNumber":982,"author":{"gitId":"-"},"content":" */"},{"lineNumber":983,"author":{"gitId":"-"},"content":" public Student getStudentByRegistrationKey(String regKey) {"},{"lineNumber":984,"author":{"gitId":"-"},"content":" return usersLogic.getStudentByRegistrationKey(regKey);"},{"lineNumber":985,"author":{"gitId":"-"},"content":" }"},{"lineNumber":986,"author":{"gitId":"-"},"content":""},{"lineNumber":987,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":988,"author":{"gitId":"-"},"content":" * Gets a student by associated {@code googleId}."},{"lineNumber":989,"author":{"gitId":"-"},"content":" */"},{"lineNumber":990,"author":{"gitId":"-"},"content":" public Student getStudentByGoogleId(String courseId, String googleId) {"},{"lineNumber":991,"author":{"gitId":"-"},"content":" return usersLogic.getStudentByGoogleId(courseId, googleId);"},{"lineNumber":992,"author":{"gitId":"-"},"content":" }"},{"lineNumber":993,"author":{"gitId":"-"},"content":""},{"lineNumber":994,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":995,"author":{"gitId":"-"},"content":" * Gets students by associated {@code teamName} and {@code courseId}."},{"lineNumber":996,"author":{"gitId":"-"},"content":" */"},{"lineNumber":997,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByTeamName(String teamName, String courseId) {"},{"lineNumber":998,"author":{"gitId":"-"},"content":" return usersLogic.getStudentsForTeam(teamName, courseId);"},{"lineNumber":999,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1000,"author":{"gitId":"-"},"content":""},{"lineNumber":1001,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1002,"author":{"gitId":"domoberzin"},"content":" * Gets a team by associated {@code courseId} and {@code sectionName}."},{"lineNumber":1003,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1004,"author":{"gitId":"domoberzin"},"content":" public Section getSectionOrCreate(String courseId, String sectionName) {"},{"lineNumber":1005,"author":{"gitId":"domoberzin"},"content":" return usersLogic.getSectionOrCreate(courseId, sectionName);"},{"lineNumber":1006,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1007,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1008,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1009,"author":{"gitId":"domoberzin"},"content":" * Gets a team by associated {@code section} and {@code teamName}."},{"lineNumber":1010,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1011,"author":{"gitId":"domoberzin"},"content":" public Team getTeamOrCreate(Section section, String teamName) {"},{"lineNumber":1012,"author":{"gitId":"domoberzin"},"content":" return usersLogic.getTeamOrCreate(section, teamName);"},{"lineNumber":1013,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1014,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1015,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1016,"author":{"gitId":"-"},"content":" * Creates a student."},{"lineNumber":1017,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1018,"author":{"gitId":"-"},"content":" * @return the created student"},{"lineNumber":1019,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the student is not valid"},{"lineNumber":1020,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the student already exists in the database."},{"lineNumber":1021,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1022,"author":{"gitId":"-"},"content":" public Student createStudent(Student student) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":1023,"author":{"gitId":"-"},"content":" return usersLogic.createStudent(student);"},{"lineNumber":1024,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1025,"author":{"gitId":"-"},"content":""},{"lineNumber":1026,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":1027,"author":{"gitId":"yuanxi1"},"content":" * Search for students. Preconditions: all parameters are non-null."},{"lineNumber":1028,"author":{"gitId":"yuanxi1"},"content":" * @param instructors a list of Instructors associated to a googleId,"},{"lineNumber":1029,"author":{"gitId":"yuanxi1"},"content":" * used for filtering of search result"},{"lineNumber":1030,"author":{"gitId":"yuanxi1"},"content":" * @return Null if no match found"},{"lineNumber":1031,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":1032,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudents(String queryString, List\u003cInstructor\u003e instructors)"},{"lineNumber":1033,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":1034,"author":{"gitId":"yuanxi1"},"content":" assert queryString !\u003d null;"},{"lineNumber":1035,"author":{"gitId":"yuanxi1"},"content":" assert instructors !\u003d null;"},{"lineNumber":1036,"author":{"gitId":"yuanxi1"},"content":" return usersLogic.searchStudents(queryString, instructors);"},{"lineNumber":1037,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":1038,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1039,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":1040,"author":{"gitId":"yuanxi1"},"content":" * This method should be used by admin only since the searching does not restrict the"},{"lineNumber":1041,"author":{"gitId":"yuanxi1"},"content":" * visibility according to the logged-in user\u0027s google ID. This is used by admin to"},{"lineNumber":1042,"author":{"gitId":"yuanxi1"},"content":" * search students in the whole system."},{"lineNumber":1043,"author":{"gitId":"yuanxi1"},"content":" * @return Null if no match found."},{"lineNumber":1044,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":1045,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudentsInWholeSystem(String queryString)"},{"lineNumber":1046,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":1047,"author":{"gitId":"yuanxi1"},"content":" assert queryString !\u003d null;"},{"lineNumber":1048,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1049,"author":{"gitId":"yuanxi1"},"content":" return usersLogic.searchStudentsInWholeSystem(queryString);"},{"lineNumber":1050,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":1051,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1052,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1053,"author":{"gitId":"-"},"content":" * Deletes a student cascade its associated feedback responses, deadline"},{"lineNumber":1054,"author":{"gitId":"-"},"content":" * extensions and comments."},{"lineNumber":1055,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1056,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the student does not exist."},{"lineNumber":1057,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1058,"author":{"gitId":"-"},"content":" * \u003cbr/\u003e"},{"lineNumber":1059,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr/\u003e"},{"lineNumber":1060,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1061,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1062,"author":{"gitId":"-"},"content":" public void deleteStudentCascade(String courseId, String studentEmail) {"},{"lineNumber":1063,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1064,"author":{"gitId":"-"},"content":" assert studentEmail !\u003d null;"},{"lineNumber":1065,"author":{"gitId":"-"},"content":""},{"lineNumber":1066,"author":{"gitId":"-"},"content":" usersLogic.deleteStudentCascade(courseId, studentEmail);"},{"lineNumber":1067,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1068,"author":{"gitId":"-"},"content":""},{"lineNumber":1069,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1070,"author":{"gitId":"-"},"content":" * Deletes all the students in the course cascade their associated responses, deadline extensions and comments."},{"lineNumber":1071,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1072,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr\u003e"},{"lineNumber":1073,"author":{"gitId":"-"},"content":" * Parameter is non-null."},{"lineNumber":1074,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1075,"author":{"gitId":"-"},"content":" public void deleteStudentsInCourseCascade(String courseId) {"},{"lineNumber":1076,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1077,"author":{"gitId":"-"},"content":""},{"lineNumber":1078,"author":{"gitId":"-"},"content":" usersLogic.deleteStudentsInCourseCascade(courseId);"},{"lineNumber":1079,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1080,"author":{"gitId":"-"},"content":""},{"lineNumber":1081,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":1082,"author":{"gitId":"yuanxi1"},"content":" * Make the student join the course, i.e. associate the Google ID to the student.\u003cbr\u003e"},{"lineNumber":1083,"author":{"gitId":"yuanxi1"},"content":" * Create an account for the student if no existing account is found."},{"lineNumber":1084,"author":{"gitId":"yuanxi1"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":1085,"author":{"gitId":"yuanxi1"},"content":" * * All parameters are non-null."},{"lineNumber":1086,"author":{"gitId":"yuanxi1"},"content":" * @param key the registration key"},{"lineNumber":1087,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":1088,"author":{"gitId":"yuanxi1"},"content":" public Student joinCourseForStudent(String key, String googleId)"},{"lineNumber":1089,"author":{"gitId":"yuanxi1"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":1090,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1091,"author":{"gitId":"yuanxi1"},"content":" assert googleId !\u003d null;"},{"lineNumber":1092,"author":{"gitId":"yuanxi1"},"content":" assert key !\u003d null;"},{"lineNumber":1093,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1094,"author":{"gitId":"yuanxi1"},"content":" return accountsLogic.joinCourseForStudent(key, googleId);"},{"lineNumber":1095,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1096,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":1097,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1098,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1099,"author":{"gitId":"-"},"content":" * Gets all instructors and students by associated {@code googleId}."},{"lineNumber":1100,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1101,"author":{"gitId":"-"},"content":" public List\u003cUser\u003e getAllUsersByGoogleId(String googleId) {"},{"lineNumber":1102,"author":{"gitId":"-"},"content":" return usersLogic.getAllUsersByGoogleId(googleId);"},{"lineNumber":1103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1104,"author":{"gitId":"-"},"content":""},{"lineNumber":1105,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1106,"author":{"gitId":"-"},"content":" * Deletes a user."},{"lineNumber":1107,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1108,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the user does not exist.\u003c/p\u003e"},{"lineNumber":1109,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1110,"author":{"gitId":"-"},"content":" public \u003cT extends User\u003e void deleteUser(T user) {"},{"lineNumber":1111,"author":{"gitId":"-"},"content":" usersLogic.deleteUser(user);"},{"lineNumber":1112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1113,"author":{"gitId":"-"},"content":""},{"lineNumber":1114,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1115,"author":{"gitId":"-"},"content":" * Deletes an instructor and cascades deletion to"},{"lineNumber":1116,"author":{"gitId":"-"},"content":" * associated feedback responses, deadline extensions and comments."},{"lineNumber":1117,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1118,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the instructor does not exist."},{"lineNumber":1119,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1120,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1121,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1122,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1123,"author":{"gitId":"-"},"content":" public void deleteInstructorCascade(String courseId, String email) {"},{"lineNumber":1124,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1125,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":1126,"author":{"gitId":"-"},"content":""},{"lineNumber":1127,"author":{"gitId":"-"},"content":" usersLogic.deleteInstructorCascade(courseId, email);"},{"lineNumber":1128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1129,"author":{"gitId":"-"},"content":""},{"lineNumber":1130,"author":{"gitId":"-"},"content":" public List\u003cNotification\u003e getAllNotifications() {"},{"lineNumber":1131,"author":{"gitId":"-"},"content":" return notificationsLogic.getAllNotifications();"},{"lineNumber":1132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1133,"author":{"gitId":"-"},"content":""},{"lineNumber":1134,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1135,"author":{"gitId":"-"},"content":" * Resets the googleId associated with the instructor."},{"lineNumber":1136,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1137,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1138,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1139,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1140,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException If instructor cannot be found with given email and courseId."},{"lineNumber":1141,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1142,"author":{"gitId":"-"},"content":" public void resetInstructorGoogleId(String email, String courseId, String googleId)"},{"lineNumber":1143,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":1144,"author":{"gitId":"-"},"content":" usersLogic.resetInstructorGoogleId(email, courseId, googleId);"},{"lineNumber":1145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1146,"author":{"gitId":"-"},"content":""},{"lineNumber":1147,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1148,"author":{"gitId":"-"},"content":" * Resets the googleId associated with the student."},{"lineNumber":1149,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1150,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1151,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1152,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1153,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException If student cannot be found with given email and courseId."},{"lineNumber":1154,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1155,"author":{"gitId":"-"},"content":" public void resetStudentGoogleId(String email, String courseId, String googleId)"},{"lineNumber":1156,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":1157,"author":{"gitId":"-"},"content":" usersLogic.resetStudentGoogleId(email, courseId, googleId);"},{"lineNumber":1158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1159,"author":{"gitId":"-"},"content":""},{"lineNumber":1160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1161,"author":{"gitId":"-"},"content":" * Regenerates the registration key for the instructor with email address {@code email} in course {@code courseId}."},{"lineNumber":1162,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1163,"author":{"gitId":"-"},"content":" * @return the instructor with the new registration key."},{"lineNumber":1164,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if system was unable to generate a new registration key."},{"lineNumber":1165,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the instructor does not exist."},{"lineNumber":1166,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1167,"author":{"gitId":"-"},"content":" public Instructor regenerateInstructorRegistrationKey(String courseId, String email)"},{"lineNumber":1168,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InstructorUpdateException {"},{"lineNumber":1169,"author":{"gitId":"-"},"content":""},{"lineNumber":1170,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1171,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":1172,"author":{"gitId":"-"},"content":""},{"lineNumber":1173,"author":{"gitId":"-"},"content":" return usersLogic.regenerateInstructorRegistrationKey(courseId, email);"},{"lineNumber":1174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1175,"author":{"gitId":"-"},"content":""},{"lineNumber":1176,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1177,"author":{"gitId":"-"},"content":" * Regenerates the registration key for the student with email address {@code email} in course {@code courseId}."},{"lineNumber":1178,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1179,"author":{"gitId":"-"},"content":" * @return the student with the new registration key."},{"lineNumber":1180,"author":{"gitId":"-"},"content":" * @throws StudentUpdateException if system was unable to generate a new registration key."},{"lineNumber":1181,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the student does not exist."},{"lineNumber":1182,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1183,"author":{"gitId":"-"},"content":" public Student regenerateStudentRegistrationKey(String courseId, String email)"},{"lineNumber":1184,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, StudentUpdateException {"},{"lineNumber":1185,"author":{"gitId":"-"},"content":""},{"lineNumber":1186,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1187,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":1188,"author":{"gitId":"-"},"content":""},{"lineNumber":1189,"author":{"gitId":"-"},"content":" return usersLogic.regenerateStudentRegistrationKey(courseId, email);"},{"lineNumber":1190,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1191,"author":{"gitId":"-"},"content":""},{"lineNumber":1192,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1193,"author":{"gitId":"-"},"content":" * Updates the instructor being edited to ensure validity of instructors for the course."},{"lineNumber":1194,"author":{"gitId":"-"},"content":" * * Preconditions: \u003cbr\u003e"},{"lineNumber":1195,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1196,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1197,"author":{"gitId":"-"},"content":" * @see UsersLogic#updateToEnsureValidityOfInstructorsForTheCourse(String, Instructor)"},{"lineNumber":1198,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1199,"author":{"gitId":"-"},"content":" public void updateToEnsureValidityOfInstructorsForTheCourse(String courseId, Instructor instructorToEdit) {"},{"lineNumber":1200,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1201,"author":{"gitId":"-"},"content":" assert instructorToEdit !\u003d null;"},{"lineNumber":1202,"author":{"gitId":"-"},"content":""},{"lineNumber":1203,"author":{"gitId":"-"},"content":" usersLogic.updateToEnsureValidityOfInstructorsForTheCourse(courseId, instructorToEdit);"},{"lineNumber":1204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1205,"author":{"gitId":"-"},"content":""},{"lineNumber":1206,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1207,"author":{"gitId":"-"},"content":" * Returns active notification for general users and the specified {@code targetUser}."},{"lineNumber":1208,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1209,"author":{"gitId":"-"},"content":" public List\u003cNotification\u003e getActiveNotificationsByTargetUser(NotificationTargetUser targetUser) {"},{"lineNumber":1210,"author":{"gitId":"-"},"content":" return notificationsLogic.getActiveNotificationsByTargetUser(targetUser);"},{"lineNumber":1211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1212,"author":{"gitId":"-"},"content":""},{"lineNumber":1213,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1214,"author":{"gitId":"-"},"content":" * Gets all questions for a feedback session.\u003cbr\u003e"},{"lineNumber":1215,"author":{"gitId":"-"},"content":" * Returns an empty list if they are no questions"},{"lineNumber":1216,"author":{"gitId":"-"},"content":" * for the session."},{"lineNumber":1217,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":1218,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1219,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1220,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForSession(FeedbackSession feedbackSession) {"},{"lineNumber":1221,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1222,"author":{"gitId":"-"},"content":""},{"lineNumber":1223,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getFeedbackQuestionsForSession(feedbackSession);"},{"lineNumber":1224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1225,"author":{"gitId":"-"},"content":""},{"lineNumber":1226,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1227,"author":{"gitId":"-"},"content":" * Gets a list of all questions for the given session that"},{"lineNumber":1228,"author":{"gitId":"-"},"content":" * students can view/submit."},{"lineNumber":1229,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1230,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForStudents(FeedbackSession feedbackSession) {"},{"lineNumber":1231,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1232,"author":{"gitId":"-"},"content":""},{"lineNumber":1233,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getFeedbackQuestionsForStudents(feedbackSession);"},{"lineNumber":1234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1235,"author":{"gitId":"-"},"content":""},{"lineNumber":1236,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1237,"author":{"gitId":"-"},"content":" * Gets a {@code List} of all questions for the given session that"},{"lineNumber":1238,"author":{"gitId":"-"},"content":" * instructor can view/submit."},{"lineNumber":1239,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1240,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForInstructors("},{"lineNumber":1241,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, String instructorEmail) {"},{"lineNumber":1242,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1243,"author":{"gitId":"-"},"content":""},{"lineNumber":1244,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getFeedbackQuestionsForInstructors(feedbackSession, instructorEmail);"},{"lineNumber":1245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1246,"author":{"gitId":"-"},"content":""},{"lineNumber":1247,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1248,"author":{"gitId":"xenosf"},"content":" * Gets the session result for a feedback session."},{"lineNumber":1249,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1250,"author":{"gitId":"xenosf"},"content":" * @see FeedbackResponsesLogic#getSessionResultsForCourse("},{"lineNumber":1251,"author":{"gitId":"xenosf"},"content":" * FeedbackSession, String, String, String, Section, FeedbackResultFetchType)"},{"lineNumber":1252,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1253,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle getSessionResultsForCourse("},{"lineNumber":1254,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String userEmail,"},{"lineNumber":1255,"author":{"gitId":"xenosf"},"content":" @Nullable UUID questionId, @Nullable String sectionName, @Nullable FeedbackResultFetchType fetchType) {"},{"lineNumber":1256,"author":{"gitId":"xenosf"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1257,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":1258,"author":{"gitId":"xenosf"},"content":" assert userEmail !\u003d null;"},{"lineNumber":1259,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1260,"author":{"gitId":"xenosf"},"content":" return feedbackResponsesLogic.getSessionResultsForCourse("},{"lineNumber":1261,"author":{"gitId":"xenosf"},"content":" feedbackSession, courseId, userEmail, questionId, sectionName, fetchType);"},{"lineNumber":1262,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1263,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1264,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1265,"author":{"gitId":"xenosf"},"content":" * Gets the session result for a feedback session for the given user."},{"lineNumber":1266,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1267,"author":{"gitId":"xenosf"},"content":" * @see FeedbackResponsesLogic#getSessionResultsForUser(FeedbackSession, String, String, boolean, String)"},{"lineNumber":1268,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1269,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle getSessionResultsForUser("},{"lineNumber":1270,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String userEmail, boolean isInstructor,"},{"lineNumber":1271,"author":{"gitId":"xenosf"},"content":" @Nullable UUID questionId, boolean isPreviewResults) {"},{"lineNumber":1272,"author":{"gitId":"xenosf"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1273,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":1274,"author":{"gitId":"xenosf"},"content":" assert userEmail !\u003d null;"},{"lineNumber":1275,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1276,"author":{"gitId":"xenosf"},"content":" return feedbackResponsesLogic.getSessionResultsForUser("},{"lineNumber":1277,"author":{"gitId":"xenosf"},"content":" feedbackSession, courseId, userEmail, isInstructor, questionId, isPreviewResults);"},{"lineNumber":1278,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1279,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1280,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1281,"author":{"gitId":"-"},"content":" * Persists the given data bundle to the database."},{"lineNumber":1282,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1283,"author":{"gitId":"-"},"content":" public SqlDataBundle persistDataBundle(SqlDataBundle dataBundle)"},{"lineNumber":1284,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":1285,"author":{"gitId":"-"},"content":" return dataBundleLogic.persistDataBundle(dataBundle);"},{"lineNumber":1286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1287,"author":{"gitId":"-"},"content":""},{"lineNumber":1288,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1289,"author":{"gitId":"-"},"content":" * Puts searchable documents from the data bundle to the database."},{"lineNumber":1290,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1291,"author":{"gitId":"-"},"content":" * @see DataBundleLogic#putDocuments(DataBundle)"},{"lineNumber":1292,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1293,"author":{"gitId":"-"},"content":" public void putDocuments(SqlDataBundle dataBundle) throws SearchServiceException {"},{"lineNumber":1294,"author":{"gitId":"-"},"content":" dataBundleLogic.putDocuments(dataBundle);"},{"lineNumber":1295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1296,"author":{"gitId":"-"},"content":""},{"lineNumber":1297,"author":{"gitId":"mingyuanc"},"content":" /**"},{"lineNumber":1298,"author":{"gitId":"mingyuanc"},"content":" * Puts searchable instructor to the database."},{"lineNumber":1299,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":1300,"author":{"gitId":"mingyuanc"},"content":" public void putInstructorDocument(Instructor instructor) throws SearchServiceException {"},{"lineNumber":1301,"author":{"gitId":"mingyuanc"},"content":" usersLogic.putInstructorDocument(instructor);"},{"lineNumber":1302,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":1303,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":1304,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1305,"author":{"gitId":"domoberzin"},"content":" * Creates or updates search document for the given account request."},{"lineNumber":1306,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":1307,"author":{"gitId":"domoberzin"},"content":" * @see AccountRequestsLogic#putDocument(AccountRequest)"},{"lineNumber":1308,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1309,"author":{"gitId":"domoberzin"},"content":" public void putAccountRequestDocument(AccountRequest accountRequest) throws SearchServiceException {"},{"lineNumber":1310,"author":{"gitId":"domoberzin"},"content":" accountRequestLogic.putDocument(accountRequest);"},{"lineNumber":1311,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1312,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1313,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1314,"author":{"gitId":"-"},"content":" * Removes the given data bundle from the database."},{"lineNumber":1315,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1316,"author":{"gitId":"-"},"content":" public void removeDataBundle(SqlDataBundle dataBundle) throws InvalidParametersException {"},{"lineNumber":1317,"author":{"gitId":"-"},"content":" dataBundleLogic.removeDataBundle(dataBundle);"},{"lineNumber":1318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1319,"author":{"gitId":"-"},"content":""},{"lineNumber":1320,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1321,"author":{"gitId":"-"},"content":" * Populates fields that need dynamic generation in a question."},{"lineNumber":1322,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1323,"author":{"gitId":"-"},"content":" * \u003cp\u003eCurrently, only MCQ/MSQ needs to generate choices dynamically.\u003c/p\u003e"},{"lineNumber":1324,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1325,"author":{"gitId":"-"},"content":" * @param feedbackQuestion the question to populate"},{"lineNumber":1326,"author":{"gitId":"-"},"content":" * @param courseId the ID of the course"},{"lineNumber":1327,"author":{"gitId":"-"},"content":" * @param emailOfEntityDoingQuestion the email of the entity doing the question"},{"lineNumber":1328,"author":{"gitId":"-"},"content":" * @param teamOfEntityDoingQuestion the team of the entity doing the question. If the entity is an instructor,"},{"lineNumber":1329,"author":{"gitId":"-"},"content":" * it can be {@code null}."},{"lineNumber":1330,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1331,"author":{"gitId":"-"},"content":" public void populateFieldsToGenerateInQuestion(FeedbackQuestion feedbackQuestion,"},{"lineNumber":1332,"author":{"gitId":"-"},"content":" String courseId, String emailOfEntityDoingQuestion,"},{"lineNumber":1333,"author":{"gitId":"-"},"content":" String teamOfEntityDoingQuestion) {"},{"lineNumber":1334,"author":{"gitId":"-"},"content":" assert feedbackQuestion !\u003d null;"},{"lineNumber":1335,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1336,"author":{"gitId":"-"},"content":" assert emailOfEntityDoingQuestion !\u003d null;"},{"lineNumber":1337,"author":{"gitId":"-"},"content":""},{"lineNumber":1338,"author":{"gitId":"-"},"content":" feedbackQuestionsLogic.populateFieldsToGenerateInQuestion("},{"lineNumber":1339,"author":{"gitId":"-"},"content":" feedbackQuestion, courseId, emailOfEntityDoingQuestion, teamOfEntityDoingQuestion);"},{"lineNumber":1340,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1341,"author":{"gitId":"-"},"content":""},{"lineNumber":1342,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1343,"author":{"gitId":"-"},"content":" * Gets a feedback question."},{"lineNumber":1344,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1345,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":1346,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1347,"author":{"gitId":"-"},"content":" public FeedbackQuestion getFeedbackQuestion(UUID id) {"},{"lineNumber":1348,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getFeedbackQuestion(id);"},{"lineNumber":1349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1350,"author":{"gitId":"-"},"content":""},{"lineNumber":1351,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1352,"author":{"gitId":"-"},"content":" * Deletes a feedback question cascade its responses and comments."},{"lineNumber":1353,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1354,"author":{"gitId":"-"},"content":" * \u003cp\u003eSilently fail if question does not exist."},{"lineNumber":1355,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1356,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1357,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1358,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1359,"author":{"gitId":"-"},"content":" public void deleteFeedbackQuestionCascade(UUID questionId) {"},{"lineNumber":1360,"author":{"gitId":"-"},"content":" feedbackQuestionsLogic.deleteFeedbackQuestionCascade(questionId);"},{"lineNumber":1361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1362,"author":{"gitId":"-"},"content":""},{"lineNumber":1363,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1364,"author":{"gitId":"-"},"content":" * Gets the recipients of a feedback question for student."},{"lineNumber":1365,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1366,"author":{"gitId":"-"},"content":" * @see FeedbackQuestionsLogic#getRecipientsOfQuestion"},{"lineNumber":1367,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1368,"author":{"gitId":"-"},"content":" public Map\u003cString, FeedbackQuestionRecipient\u003e getRecipientsOfQuestion("},{"lineNumber":1369,"author":{"gitId":"-"},"content":" FeedbackQuestion question,"},{"lineNumber":1370,"author":{"gitId":"-"},"content":" @Nullable Instructor instructorGiver, @Nullable Student studentGiver) {"},{"lineNumber":1371,"author":{"gitId":"-"},"content":" assert question !\u003d null;"},{"lineNumber":1372,"author":{"gitId":"-"},"content":""},{"lineNumber":1373,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getRecipientsOfQuestion(question, instructorGiver, studentGiver, null);"},{"lineNumber":1374,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1375,"author":{"gitId":"-"},"content":""},{"lineNumber":1376,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1377,"author":{"gitId":"-"},"content":" * Gets a feedbackResponse or null if it does not exist."},{"lineNumber":1378,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1379,"author":{"gitId":"-"},"content":" public FeedbackResponse getFeedbackResponse(UUID frId) {"},{"lineNumber":1380,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.getFeedbackResponse(frId);"},{"lineNumber":1381,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1382,"author":{"gitId":"-"},"content":""},{"lineNumber":1383,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1384,"author":{"gitId":"-"},"content":" * Creates a feedback response."},{"lineNumber":1385,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1386,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1387,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1388,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1389,"author":{"gitId":"-"},"content":" * @return created feedback response"},{"lineNumber":1390,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the response is not valid"},{"lineNumber":1391,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the response already exist"},{"lineNumber":1392,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1393,"author":{"gitId":"-"},"content":" public FeedbackResponse createFeedbackResponse(FeedbackResponse feedbackResponse)"},{"lineNumber":1394,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":1395,"author":{"gitId":"-"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":1396,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.createFeedbackResponse(feedbackResponse);"},{"lineNumber":1397,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1398,"author":{"gitId":"-"},"content":""},{"lineNumber":1399,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1400,"author":{"gitId":"-"},"content":" * Deletes a feedback response and cascades its associated comments."},{"lineNumber":1401,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1402,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1403,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1404,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1405,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesAndCommentsCascade(FeedbackResponse feedbackResponse) {"},{"lineNumber":1406,"author":{"gitId":"-"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":1407,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.deleteFeedbackResponsesAndCommentsCascade(feedbackResponse);"},{"lineNumber":1408,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1409,"author":{"gitId":"-"},"content":""},{"lineNumber":1410,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1411,"author":{"gitId":"-"},"content":" * Get existing feedback responses from instructor for the given question."},{"lineNumber":1412,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1413,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromInstructorForQuestion("},{"lineNumber":1414,"author":{"gitId":"-"},"content":" FeedbackQuestion question, Instructor instructor) {"},{"lineNumber":1415,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.getFeedbackResponsesFromInstructorForQuestion("},{"lineNumber":1416,"author":{"gitId":"-"},"content":" question, instructor);"},{"lineNumber":1417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1418,"author":{"gitId":"-"},"content":""},{"lineNumber":1419,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1420,"author":{"gitId":"-"},"content":" * Get existing feedback responses from student or his team for the given"},{"lineNumber":1421,"author":{"gitId":"-"},"content":" * question."},{"lineNumber":1422,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1423,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromStudentOrTeamForQuestion("},{"lineNumber":1424,"author":{"gitId":"-"},"content":" FeedbackQuestion question, Student student) {"},{"lineNumber":1425,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.getFeedbackResponsesFromStudentOrTeamForQuestion("},{"lineNumber":1426,"author":{"gitId":"-"},"content":" question, student);"},{"lineNumber":1427,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1428,"author":{"gitId":"-"},"content":""},{"lineNumber":1429,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1430,"author":{"gitId":"-"},"content":" * Gets an feedback response comment by feedback response comment id."},{"lineNumber":1431,"author":{"gitId":"-"},"content":" * @param id of feedback response comment."},{"lineNumber":1432,"author":{"gitId":"-"},"content":" * @return the specified feedback response comment."},{"lineNumber":1433,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1434,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseComment(Long id) {"},{"lineNumber":1435,"author":{"gitId":"-"},"content":" return feedbackResponseCommentsLogic.getFeedbackResponseComment(id);"},{"lineNumber":1436,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1437,"author":{"gitId":"-"},"content":""},{"lineNumber":1438,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1439,"author":{"gitId":"-"},"content":" * Updates a feedback response comment."},{"lineNumber":1440,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment does not exist"},{"lineNumber":1441,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1442,"author":{"gitId":"-"},"content":" public FeedbackResponseComment updateFeedbackResponseComment(Long frcId,"},{"lineNumber":1443,"author":{"gitId":"-"},"content":" FeedbackResponseCommentUpdateRequest updateRequest, String updaterEmail)"},{"lineNumber":1444,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":1445,"author":{"gitId":"-"},"content":" return feedbackResponseCommentsLogic.updateFeedbackResponseComment(frcId, updateRequest, updaterEmail);"},{"lineNumber":1446,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1447,"author":{"gitId":"-"},"content":""},{"lineNumber":1448,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1449,"author":{"gitId":"-"},"content":" * Updates a feedback response and comments by {@link FeedbackResponse}."},{"lineNumber":1450,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1451,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade updates its associated feedback response comment"},{"lineNumber":1452,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1453,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1454,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1455,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1456,"author":{"gitId":"-"},"content":" * @return updated feedback response"},{"lineNumber":1457,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":1458,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment cannot be found"},{"lineNumber":1459,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1460,"author":{"gitId":"-"},"content":" public FeedbackResponse updateFeedbackResponseCascade(FeedbackResponse feedbackResponse)"},{"lineNumber":1461,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":1462,"author":{"gitId":"-"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":1463,"author":{"gitId":"-"},"content":""},{"lineNumber":1464,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.updateFeedbackResponseCascade(feedbackResponse);"},{"lineNumber":1465,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1466,"author":{"gitId":"-"},"content":""},{"lineNumber":1467,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1468,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a question."},{"lineNumber":1469,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1470,"author":{"gitId":"-"},"content":" public boolean areThereResponsesForQuestion(UUID questionId) {"},{"lineNumber":1471,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.areThereResponsesForQuestion(questionId);"},{"lineNumber":1472,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1473,"author":{"gitId":"-"},"content":""},{"lineNumber":1474,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1475,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a course."},{"lineNumber":1476,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1477,"author":{"gitId":"-"},"content":" public boolean hasResponsesForCourse(String courseId) {"},{"lineNumber":1478,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.hasResponsesForCourse(courseId);"},{"lineNumber":1479,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1480,"author":{"gitId":"-"},"content":""},{"lineNumber":1481,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1482,"author":{"gitId":"-"},"content":" * Gets the comment associated with the response."},{"lineNumber":1483,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1484,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseCommentForResponseFromParticipant("},{"lineNumber":1485,"author":{"gitId":"-"},"content":" UUID feedbackResponseId) {"},{"lineNumber":1486,"author":{"gitId":"-"},"content":" return feedbackResponseCommentsLogic.getFeedbackResponseCommentForResponseFromParticipant(feedbackResponseId);"},{"lineNumber":1487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1488,"author":{"gitId":"-"},"content":""},{"lineNumber":1489,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1490,"author":{"gitId":"-"},"content":" * Creates a feedback response comment."},{"lineNumber":1491,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the comment alreadty exists"},{"lineNumber":1492,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the comment is invalid"},{"lineNumber":1493,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1494,"author":{"gitId":"-"},"content":" public FeedbackResponseComment createFeedbackResponseComment(FeedbackResponseComment frc)"},{"lineNumber":1495,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":1496,"author":{"gitId":"-"},"content":" return feedbackResponseCommentsLogic.createFeedbackResponseComment(frc);"},{"lineNumber":1497,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1498,"author":{"gitId":"-"},"content":""},{"lineNumber":1499,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1500,"author":{"gitId":"-"},"content":" * Deletes a feedbackResponseComment."},{"lineNumber":1501,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1502,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponseComment(Long frcId) {"},{"lineNumber":1503,"author":{"gitId":"-"},"content":" feedbackResponseCommentsLogic.deleteFeedbackResponseComment(frcId);"},{"lineNumber":1504,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1505,"author":{"gitId":"-"},"content":""},{"lineNumber":1506,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1507,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback responses from a giver for a question."},{"lineNumber":1508,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1509,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForCourse(String courseId, String giverEmail) {"},{"lineNumber":1510,"author":{"gitId":"domoberzin"},"content":" return feedbackResponsesLogic.getFeedbackResponsesFromGiverForCourse(courseId, giverEmail);"},{"lineNumber":1511,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1512,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1513,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1514,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback responses for a recipient for a course."},{"lineNumber":1515,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1516,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForCourse(String courseId, String recipientEmail) {"},{"lineNumber":1517,"author":{"gitId":"domoberzin"},"content":" return feedbackResponsesLogic.getFeedbackResponsesForRecipientForCourse(courseId, recipientEmail);"},{"lineNumber":1518,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1519,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1520,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1521,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback response comments for a feedback response."},{"lineNumber":1522,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1523,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForResponse(UUID feedbackResponse) {"},{"lineNumber":1524,"author":{"gitId":"domoberzin"},"content":" return feedbackResponseCommentsLogic.getFeedbackResponseCommentsForResponse(feedbackResponse);"},{"lineNumber":1525,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1526,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1527,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1528,"author":{"gitId":"domoberzin"},"content":" * Validates sections for any limit violations and teams for any team name violations."},{"lineNumber":1529,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":1530,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003ePreconditions: \u003cbr\u003e"},{"lineNumber":1531,"author":{"gitId":"domoberzin"},"content":" * * All parameters are non-null."},{"lineNumber":1532,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":1533,"author":{"gitId":"domoberzin"},"content":" * @see StudentsLogic#validateSectionsAndTeams(List, String)"},{"lineNumber":1534,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1535,"author":{"gitId":"domoberzin"},"content":" public void validateSectionsAndTeams("},{"lineNumber":1536,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentList, String courseId) throws EnrollException {"},{"lineNumber":1537,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1538,"author":{"gitId":"domoberzin"},"content":" assert studentList !\u003d null;"},{"lineNumber":1539,"author":{"gitId":"domoberzin"},"content":" assert courseId !\u003d null;"},{"lineNumber":1540,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1541,"author":{"gitId":"domoberzin"},"content":" usersLogic.validateSectionsAndTeams(studentList, courseId);"},{"lineNumber":1542,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1543,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1544,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1545,"author":{"gitId":"domoberzin"},"content":" * Updates a feedback question by {@code FeedbackQuestionUpdateRequest}."},{"lineNumber":1546,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1547,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade adjust the question number of questions in the same session."},{"lineNumber":1548,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1549,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade adjust the existing response of the question."},{"lineNumber":1550,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1551,"author":{"gitId":"-"},"content":" * \u003cbr/\u003e Preconditions: \u003cbr/\u003e"},{"lineNumber":1552,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1553,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1554,"author":{"gitId":"-"},"content":" * @return updated feedback question"},{"lineNumber":1555,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":1556,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback question cannot be found"},{"lineNumber":1557,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1558,"author":{"gitId":"-"},"content":" public FeedbackQuestion updateFeedbackQuestionCascade(UUID questionId, FeedbackQuestionUpdateRequest updateRequest)"},{"lineNumber":1559,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":1560,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.updateFeedbackQuestionCascade(questionId, updateRequest);"},{"lineNumber":1561,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1562,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1563,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1564,"author":{"gitId":"-"},"content":" * Returns a list of feedback sessions that need an \"Open\" email to be sent."},{"lineNumber":1565,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1566,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsWhichNeedOpenEmailsToBeSent() {"},{"lineNumber":1567,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsWhichNeedOpenEmailsToBeSent();"},{"lineNumber":1568,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1569,"author":{"gitId":"-"},"content":""},{"lineNumber":1570,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1571,"author":{"gitId":"-"},"content":" * Returns a list of sessions that were closed within past hour."},{"lineNumber":1572,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1573,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsClosedWithinThePastHour() {"},{"lineNumber":1574,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsClosedWithinThePastHour();"},{"lineNumber":1575,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1576,"author":{"gitId":"-"},"content":""},{"lineNumber":1577,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1578,"author":{"gitId":"xenosf"},"content":" * Creates or updates search document for the given student."},{"lineNumber":1579,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1580,"author":{"gitId":"xenosf"},"content":" * @see UsersLogic#putStudentDocument(Student)"},{"lineNumber":1581,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1582,"author":{"gitId":"xenosf"},"content":" public void putStudentDocument(Student student) throws SearchServiceException {"},{"lineNumber":1583,"author":{"gitId":"xenosf"},"content":" usersLogic.putStudentDocument(student);"},{"lineNumber":1584,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1585,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1586,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1587,"author":{"gitId":"domoberzin"},"content":" * This is used by admin to search account requests in the whole system."},{"lineNumber":1588,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":1589,"author":{"gitId":"domoberzin"},"content":" * @return A list of {@link AccountRequest} or {@code null} if no match found."},{"lineNumber":1590,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1591,"author":{"gitId":"domoberzin"},"content":" public List\u003cAccountRequest\u003e searchAccountRequestsInWholeSystem(String queryString)"},{"lineNumber":1592,"author":{"gitId":"domoberzin"},"content":" throws SearchServiceException {"},{"lineNumber":1593,"author":{"gitId":"domoberzin"},"content":" assert queryString !\u003d null;"},{"lineNumber":1594,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1595,"author":{"gitId":"domoberzin"},"content":" return accountRequestLogic.searchAccountRequestsInWholeSystem(queryString);"},{"lineNumber":1596,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1597,"author":{"gitId":"-"},"content":""},{"lineNumber":1598,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1599,"author":{"gitId":"-"},"content":" * Returns a list of sessions that are going to close soon."},{"lineNumber":1600,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1601,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsClosingWithinTimeLimit() {"},{"lineNumber":1602,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsClosingWithinTimeLimit();"},{"lineNumber":1603,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1604,"author":{"gitId":"-"},"content":""},{"lineNumber":1605,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1606,"author":{"gitId":"-"},"content":" * Returns a list of sessions that are going to open soon."},{"lineNumber":1607,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1608,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsOpeningWithinTimeLimit() {"},{"lineNumber":1609,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsOpeningWithinTimeLimit();"},{"lineNumber":1610,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1611,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":130,"yuanxi1":50,"marquestye":5,"xenosf":44,"dishenggg":9,"mingyuanc":7,"-":1366}},{"path":"src/main/java/teammates/sqllogic/core/AccountRequestsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountRequestsDb;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.AccountRequestSearchManager;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * Handles operations related to account requests."},{"lineNumber":16,"author":{"gitId":"-"},"content":" *"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * @see AccountRequest"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * @see AccountRequestsDb"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public final class AccountRequestsLogic {"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" private static final AccountRequestsLogic instance \u003d new AccountRequestsLogic();"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private AccountRequestsDb accountRequestDb;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" private AccountRequestsLogic() {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // prevent notification"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static AccountRequestsLogic inst() {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Initialise dependencies for {@code AccountRequestLogic} object."},{"lineNumber":36,"author":{"gitId":"-"},"content":" */"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void initLogicDependencies(AccountRequestsDb accountRequestDb) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.accountRequestDb \u003d accountRequestDb;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" private AccountRequestSearchManager getSearchManager() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return accountRequestDb.getSearchManager();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * Creates or updates search document for the given account request."},{"lineNumber":47,"author":{"gitId":"-"},"content":" */"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public void putDocument(AccountRequest accountRequest) throws SearchServiceException {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" getSearchManager().putDocument(accountRequest);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * Creates an account request."},{"lineNumber":54,"author":{"gitId":"-"},"content":" */"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequest(AccountRequest accountRequest)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":61,"author":{"gitId":"-"},"content":" * Creates an account request."},{"lineNumber":62,"author":{"gitId":"-"},"content":" */"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequest(String name, String email, String institute)"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" AccountRequest toCreate \u003d new AccountRequest(email, name, institute);"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" return accountRequestDb.createAccountRequest(toCreate);"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Gets account request associated with the {@code email} and {@code institute}."},{"lineNumber":72,"author":{"gitId":"-"},"content":" */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public AccountRequest getAccountRequest(String email, String institute) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" return accountRequestDb.getAccountRequest(email, institute);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Updates an account request."},{"lineNumber":80,"author":{"gitId":"-"},"content":" */"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public AccountRequest updateAccountRequest(AccountRequest accountRequest)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return accountRequestDb.updateAccountRequest(accountRequest);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":" /**"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" * Gets account request associated with the {@code regkey}."},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":" public AccountRequest getAccountRequestByRegistrationKey(String regkey) {"},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":" return accountRequestDb.getAccountRequestByRegistrationKey(regkey);"},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Creates/resets the account request with the given email and institute such that it is not registered."},{"lineNumber":95,"author":{"gitId":"-"},"content":" */"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public AccountRequest resetAccountRequest(String email, String institute)"},{"lineNumber":97,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d accountRequestDb.getAccountRequest(email, institute);"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" if (accountRequest \u003d\u003d null) {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Failed to reset since AccountRequest with \""},{"lineNumber":102,"author":{"gitId":"-"},"content":" + \"the given email and institute cannot be found.\");"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":" accountRequest.setRegisteredAt(null);"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" return accountRequestDb.updateAccountRequest(accountRequest);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Deletes account request associated with the {@code email} and {@code institute}."},{"lineNumber":111,"author":{"gitId":"-"},"content":" *"},{"lineNumber":112,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if no account requests with the given email and institute to delete can be found.\u003c/p\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" *"},{"lineNumber":114,"author":{"gitId":"-"},"content":" */"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public void deleteAccountRequest(String email, String institute) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" AccountRequest toDelete \u003d accountRequestDb.getAccountRequest(email, institute);"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" accountRequestDb.deleteAccountRequest(toDelete);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":" * Searches for account requests in the whole system."},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" * @return A list of {@link AccountRequest} or {@code null} if no match found."},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" public List\u003cAccountRequest\u003e searchAccountRequestsInWholeSystem(String queryString)"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" throws SearchServiceException {"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" return accountRequestDb.searchAccountRequestsInWholeSystem(queryString);"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Creates an or gets an account request."},{"lineNumber":133,"author":{"gitId":"-"},"content":" */"},{"lineNumber":134,"author":{"gitId":"-"},"content":" public AccountRequest createOrGetAccountRequestWithTransaction(String name, String email, String institute)"},{"lineNumber":135,"author":{"gitId":"-"},"content":" throws InvalidParametersException {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" AccountRequest toCreate \u003d new AccountRequest(email, name, institute);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" HibernateUtil.beginTransaction();"},{"lineNumber":138,"author":{"gitId":"-"},"content":" AccountRequest accountRequest;"},{"lineNumber":139,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" accountRequest \u003d accountRequestDb.createAccountRequest(toCreate);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" HibernateUtil.commitTransaction();"},{"lineNumber":142,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" HibernateUtil.rollbackTransaction();"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(ipe);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // Use existing account request"},{"lineNumber":147,"author":{"gitId":"-"},"content":" accountRequest \u003d getAccountRequest(email, institute);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" HibernateUtil.commitTransaction();"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return accountRequest;"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":12,"dishenggg":7,"-":133}},{"path":"src/main/java/teammates/sqllogic/core/AccountsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountsDb;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Handles operations related to accounts."},{"lineNumber":22,"author":{"gitId":"-"},"content":" *"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * @see Account"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * @see AccountsDb"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public final class AccountsLogic {"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" private static final AccountsLogic instance \u003d new AccountsLogic();"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private AccountsDb accountsDb;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private NotificationsLogic notificationsLogic;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" private AccountsLogic() {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" void initLogicDependencies(AccountsDb accountsDb, NotificationsLogic notificationsLogic,"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" UsersLogic usersLogic, CoursesLogic coursesLogic) {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.accountsDb \u003d accountsDb;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" this.notificationsLogic \u003d notificationsLogic;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" this.coursesLogic \u003d coursesLogic;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static AccountsLogic inst() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Gets an account."},{"lineNumber":56,"author":{"gitId":"-"},"content":" */"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public Account getAccount(UUID id) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return accountsDb.getAccount(id);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * Gets an account by googleId."},{"lineNumber":64,"author":{"gitId":"-"},"content":" */"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public Account getAccountForGoogleId(String googleId) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" return accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * Gets accounts associated with email."},{"lineNumber":73,"author":{"gitId":"-"},"content":" */"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public List\u003cAccount\u003e getAccountsForEmail(String email) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" return accountsDb.getAccountsByEmail(email);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Creates an account."},{"lineNumber":82,"author":{"gitId":"-"},"content":" *"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * @return the created account"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the account is not valid"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the account already exists in the"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * database."},{"lineNumber":87,"author":{"gitId":"-"},"content":" */"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public Account createAccount(Account account)"},{"lineNumber":89,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assert account !\u003d null;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return accountsDb.createAccount(account);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Deletes account associated with the {@code googleId}."},{"lineNumber":96,"author":{"gitId":"-"},"content":" *"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the account doesn\u0027t exist.\u003c/p\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":" */"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public void deleteAccount(String googleId) {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" Account account \u003d getAccountForGoogleId(googleId);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" accountsDb.deleteAccount(account);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Deletes account and all users associated with the {@code googleId}."},{"lineNumber":108,"author":{"gitId":"-"},"content":" *"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the account doesn\u0027t exist.\u003c/p\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":" */"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public void deleteAccountCascade(String googleId) {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" List\u003cUser\u003e usersToDelete \u003d usersLogic.getAllUsersByGoogleId(googleId);"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" for (User user : usersToDelete) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" usersLogic.deleteUser(user);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" deleteAccount(googleId);"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":124,"author":{"gitId":"-"},"content":" * Updates the readNotifications of an account."},{"lineNumber":125,"author":{"gitId":"-"},"content":" *"},{"lineNumber":126,"author":{"gitId":"-"},"content":" * @param googleId google ID of the user who read the notification."},{"lineNumber":127,"author":{"gitId":"-"},"content":" * @param notificationId ID of notification to be marked as read."},{"lineNumber":128,"author":{"gitId":"-"},"content":" * @param endTime the expiry time of the notification, i.e. notification"},{"lineNumber":129,"author":{"gitId":"-"},"content":" * will not be shown after this time."},{"lineNumber":130,"author":{"gitId":"-"},"content":" * @return the account with updated read notifications."},{"lineNumber":131,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the notification has expired."},{"lineNumber":132,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if account or notification does not"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * exist."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public List\u003cUUID\u003e updateReadNotifications(String googleId, UUID notificationId, Instant endTime)"},{"lineNumber":136,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" Account account \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (account \u003d\u003d null) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to update the read notifications of a non-existent account.\");"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" Notification notification \u003d notificationsLogic.getNotification(notificationId);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" if (notification \u003d\u003d null) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to mark as read a notification that does not exist.\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":" if (endTime.isBefore(Instant.now())) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Trying to mark an expired notification as read.\");"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" ReadNotification readNotification \u003d new ReadNotification(account, notification);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" account.addReadNotification(readNotification);"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" return account.getReadNotifications().stream()"},{"lineNumber":154,"author":{"gitId":"-"},"content":" .map(n -\u003e n.getNotification().getId())"},{"lineNumber":155,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":159,"author":{"gitId":"-"},"content":" * Gets ids of read notifications in an account."},{"lineNumber":160,"author":{"gitId":"-"},"content":" */"},{"lineNumber":161,"author":{"gitId":"-"},"content":" public List\u003cUUID\u003e getReadNotificationsId(String googleId) {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" return accountsDb.getAccountByGoogleId(googleId).getReadNotifications().stream()"},{"lineNumber":163,"author":{"gitId":"-"},"content":" .map(n -\u003e n.getNotification().getId())"},{"lineNumber":164,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":" * Joins the user as a student."},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" public Student joinCourseForStudent(String registrationKey, String googleId)"},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":172,"author":{"gitId":"yuanxi1"},"content":" Student student \u003d validateStudentJoinRequest(registrationKey, googleId);"},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" // Create an account if it doesn\u0027t exist"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":" if (account \u003d\u003d null) {"},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":" account \u003d new Account(googleId, student.getName(), student.getEmail());"},{"lineNumber":178,"author":{"gitId":"yuanxi1"},"content":" createAccount(account);"},{"lineNumber":179,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":180,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":181,"author":{"gitId":"yuanxi1"},"content":" if (student.getAccount() \u003d\u003d null) {"},{"lineNumber":182,"author":{"gitId":"yuanxi1"},"content":" student.setAccount(account);"},{"lineNumber":183,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":184,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":185,"author":{"gitId":"yuanxi1"},"content":" return student;"},{"lineNumber":186,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":187,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":188,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":189,"author":{"gitId":"yuanxi1"},"content":" * Joins the user as an instructor."},{"lineNumber":190,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":191,"author":{"gitId":"yuanxi1"},"content":" public Instructor joinCourseForInstructor(String key, String googleId)"},{"lineNumber":192,"author":{"gitId":"yuanxi1"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":193,"author":{"gitId":"yuanxi1"},"content":" Instructor instructor \u003d validateInstructorJoinRequest(key, googleId);"},{"lineNumber":194,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":195,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":196,"author":{"gitId":"yuanxi1"},"content":" if (account \u003d\u003d null) {"},{"lineNumber":197,"author":{"gitId":"yuanxi1"},"content":" try {"},{"lineNumber":198,"author":{"gitId":"yuanxi1"},"content":" account \u003d new Account(googleId, instructor.getName(), instructor.getEmail());"},{"lineNumber":199,"author":{"gitId":"yuanxi1"},"content":" createAccount(account);"},{"lineNumber":200,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":201,"author":{"gitId":"yuanxi1"},"content":" assert false : \"Account already exists.\";"},{"lineNumber":202,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":203,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":204,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":205,"author":{"gitId":"yuanxi1"},"content":" instructor.setAccount(account);"},{"lineNumber":206,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":207,"author":{"gitId":"yuanxi1"},"content":" // Update the googleId of the student entity for the instructor which was created from sample data."},{"lineNumber":208,"author":{"gitId":"yuanxi1"},"content":" Student student \u003d usersLogic.getStudentForEmail(instructor.getCourseId(), instructor.getEmail());"},{"lineNumber":209,"author":{"gitId":"yuanxi1"},"content":" if (student !\u003d null) {"},{"lineNumber":210,"author":{"gitId":"yuanxi1"},"content":" student.setAccount(account);"},{"lineNumber":211,"author":{"gitId":"yuanxi1"},"content":" usersLogic.updateStudentCascade(student);"},{"lineNumber":212,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":213,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":214,"author":{"gitId":"yuanxi1"},"content":" return instructor;"},{"lineNumber":215,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":216,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":217,"author":{"gitId":"yuanxi1"},"content":" private Instructor validateInstructorJoinRequest(String registrationKey, String googleId)"},{"lineNumber":218,"author":{"gitId":"yuanxi1"},"content":" throws EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":219,"author":{"gitId":"yuanxi1"},"content":" Instructor instructorForKey \u003d usersLogic.getInstructorByRegistrationKey(registrationKey);"},{"lineNumber":220,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":221,"author":{"gitId":"yuanxi1"},"content":" if (instructorForKey \u003d\u003d null) {"},{"lineNumber":222,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"No instructor with given registration key: \" + registrationKey);"},{"lineNumber":223,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":224,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":225,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesLogic.getCourse(instructorForKey.getCourseId());"},{"lineNumber":226,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":227,"author":{"gitId":"yuanxi1"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":228,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"Course with id \" + instructorForKey.getCourseId() + \" does not exist\");"},{"lineNumber":229,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":230,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":231,"author":{"gitId":"yuanxi1"},"content":" if (course.isCourseDeleted()) {"},{"lineNumber":232,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"The course you are trying to join has been deleted by an instructor\");"},{"lineNumber":233,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":234,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":235,"author":{"gitId":"yuanxi1"},"content":" if (instructorForKey.isRegistered()) {"},{"lineNumber":236,"author":{"gitId":"yuanxi1"},"content":" if (instructorForKey.getGoogleId().equals(googleId)) {"},{"lineNumber":237,"author":{"gitId":"yuanxi1"},"content":" Account existingAccount \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":238,"author":{"gitId":"yuanxi1"},"content":" if (existingAccount !\u003d null) {"},{"lineNumber":239,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":240,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":241,"author":{"gitId":"yuanxi1"},"content":" } else {"},{"lineNumber":242,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":243,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":244,"author":{"gitId":"yuanxi1"},"content":" } else {"},{"lineNumber":245,"author":{"gitId":"yuanxi1"},"content":" // Check if this Google ID has already joined this course"},{"lineNumber":246,"author":{"gitId":"yuanxi1"},"content":" Instructor existingInstructor \u003d"},{"lineNumber":247,"author":{"gitId":"yuanxi1"},"content":" usersLogic.getInstructorByGoogleId(instructorForKey.getCourseId(), googleId);"},{"lineNumber":248,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":249,"author":{"gitId":"yuanxi1"},"content":" if (existingInstructor !\u003d null) {"},{"lineNumber":250,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":251,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":252,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":253,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":254,"author":{"gitId":"yuanxi1"},"content":" return instructorForKey;"},{"lineNumber":255,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":256,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":257,"author":{"gitId":"yuanxi1"},"content":" private Student validateStudentJoinRequest(String registrationKey, String googleId)"},{"lineNumber":258,"author":{"gitId":"yuanxi1"},"content":" throws EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":259,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":260,"author":{"gitId":"yuanxi1"},"content":" Student studentRole \u003d usersLogic.getStudentByRegistrationKey(registrationKey);"},{"lineNumber":261,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":262,"author":{"gitId":"yuanxi1"},"content":" if (studentRole \u003d\u003d null) {"},{"lineNumber":263,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"No student with given registration key: \" + registrationKey);"},{"lineNumber":264,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":265,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":266,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesLogic.getCourse(studentRole.getCourseId());"},{"lineNumber":267,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":268,"author":{"gitId":"yuanxi1"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":269,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"Course with id \" + studentRole.getCourseId() + \" does not exist\");"},{"lineNumber":270,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":271,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":272,"author":{"gitId":"yuanxi1"},"content":" if (course.isCourseDeleted()) {"},{"lineNumber":273,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"The course you are trying to join has been deleted by an instructor\");"},{"lineNumber":274,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":275,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":276,"author":{"gitId":"yuanxi1"},"content":" if (studentRole.isRegistered()) {"},{"lineNumber":277,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Student has already joined course\");"},{"lineNumber":278,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":279,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":280,"author":{"gitId":"yuanxi1"},"content":" // Check if this Google ID has already joined this course"},{"lineNumber":281,"author":{"gitId":"yuanxi1"},"content":" Student existingStudent \u003d"},{"lineNumber":282,"author":{"gitId":"yuanxi1"},"content":" usersLogic.getStudentByGoogleId(studentRole.getCourseId(), googleId);"},{"lineNumber":283,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":284,"author":{"gitId":"yuanxi1"},"content":" if (existingStudent !\u003d null) {"},{"lineNumber":285,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Student has already joined course\");"},{"lineNumber":286,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":287,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":288,"author":{"gitId":"yuanxi1"},"content":" return studentRole;"},{"lineNumber":289,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":290,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":132,"-":158}},{"path":"src/main/java/teammates/sqllogic/core/CoursesLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Comparator;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.CoursesDb;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Handles operations related to courses."},{"lineNumber":23,"author":{"gitId":"-"},"content":" *"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * @see Course"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * @see CoursesDb"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public final class CoursesLogic {"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final CoursesLogic instance \u003d new CoursesLogic();"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private CoursesDb coursesDb;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private FeedbackSessionsLogic fsLogic;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" private CoursesLogic() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static CoursesLogic inst() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" void initLogicDependencies(CoursesDb coursesDb, FeedbackSessionsLogic fsLogic, UsersLogic usersLogic) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.coursesDb \u003d coursesDb;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.fsLogic \u003d fsLogic;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * Creates a course."},{"lineNumber":53,"author":{"gitId":"-"},"content":" *"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * @return the created course"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the course is not valid"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the course already exists in the"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * database."},{"lineNumber":58,"author":{"gitId":"-"},"content":" */"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public Course createCourse(Course course) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return coursesDb.createCourse(course);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":64,"author":{"gitId":"-"},"content":" * Gets a course by course id."},{"lineNumber":65,"author":{"gitId":"-"},"content":" *"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * @param courseId of course."},{"lineNumber":67,"author":{"gitId":"-"},"content":" * @return the specified course."},{"lineNumber":68,"author":{"gitId":"-"},"content":" */"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public Course getCourse(String courseId) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return coursesDb.getCourse(courseId);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Returns a list of {@link Course} for all courses a given student is enrolled in."},{"lineNumber":75,"author":{"gitId":"-"},"content":" *"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * @param googleId The Google ID of the student"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getCoursesForStudentAccount(String googleId) {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students \u003d usersLogic.getAllStudentsByGoogleId(googleId);"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" return students"},{"lineNumber":82,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .map(Student::getCourse)"},{"lineNumber":84,"author":{"gitId":"-"},"content":" .filter(course -\u003e !course.isCourseDeleted())"},{"lineNumber":85,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * Returns a list of {@link Course} for all courses for a given list of instructors"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * except for courses in Recycle Bin."},{"lineNumber":91,"author":{"gitId":"-"},"content":" */"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getCoursesForInstructors(List\u003cInstructor\u003e instructors) {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assert instructors !\u003d null;"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" return instructors"},{"lineNumber":96,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":97,"author":{"gitId":"-"},"content":" .map(Instructor::getCourse)"},{"lineNumber":98,"author":{"gitId":"-"},"content":" .filter(course -\u003e !course.isCourseDeleted())"},{"lineNumber":99,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * Returns a list of soft-deleted {@link Course} for a given list of instructors."},{"lineNumber":104,"author":{"gitId":"-"},"content":" */"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getSoftDeletedCoursesForInstructors(List\u003cInstructor\u003e instructors) {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assert instructors !\u003d null;"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" return instructors"},{"lineNumber":109,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .map(Instructor::getCourse)"},{"lineNumber":111,"author":{"gitId":"-"},"content":" .filter(course -\u003e course.isCourseDeleted())"},{"lineNumber":112,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Deletes a course and cascade its students, instructors, sessions, responses, deadline extensions and comments."},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Fails silently if no such course."},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public void deleteCourseCascade(String courseId) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" Course course \u003d coursesDb.getCourse(courseId);"},{"lineNumber":121,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" usersLogic.deleteStudentsInCourseCascade(courseId);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e feedbackSessions \u003d fsLogic.getFeedbackSessionsForCourse(courseId);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" feedbackSessions.forEach(feedbackSession -\u003e {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" fsLogic.deleteFeedbackSessionCascade(feedbackSession.getName(), courseId);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" });"},{"lineNumber":130,"author":{"gitId":"-"},"content":" coursesDb.deleteSectionsByCourseId(courseId);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d usersLogic.getInstructorsForCourse(courseId);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" instructors.forEach(instructor -\u003e {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" usersLogic.deleteInstructorCascade(courseId, instructor.getEmail());"},{"lineNumber":134,"author":{"gitId":"-"},"content":" });"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" coursesDb.deleteCourse(course);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":140,"author":{"gitId":"-"},"content":" * Moves a course to Recycle Bin by its given corresponding ID."},{"lineNumber":141,"author":{"gitId":"-"},"content":" *"},{"lineNumber":142,"author":{"gitId":"-"},"content":" * @return the time when the course is moved to the recycle bin."},{"lineNumber":143,"author":{"gitId":"-"},"content":" */"},{"lineNumber":144,"author":{"gitId":"-"},"content":" public Course moveCourseToRecycleBin(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" Course course \u003d coursesDb.getCourse(courseId);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to move a non-existent course to recycling bin.\");"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":151,"author":{"gitId":"-"},"content":" course.setDeletedAt(now);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return course;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Restores a course from Recycle Bin by its given corresponding ID."},{"lineNumber":157,"author":{"gitId":"-"},"content":" */"},{"lineNumber":158,"author":{"gitId":"-"},"content":" public void restoreCourseFromRecycleBin(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" Course course \u003d coursesDb.getCourse(courseId);"},{"lineNumber":160,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to restore a non-existent course from recycling bin.\");"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" course.setDeletedAt(null);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":168,"author":{"gitId":"-"},"content":" * Updates a course."},{"lineNumber":169,"author":{"gitId":"-"},"content":" *"},{"lineNumber":170,"author":{"gitId":"-"},"content":" * @return updated course"},{"lineNumber":171,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the course cannot be found"},{"lineNumber":173,"author":{"gitId":"-"},"content":" */"},{"lineNumber":174,"author":{"gitId":"-"},"content":" public Course updateCourse(String courseId, String name, String timezone)"},{"lineNumber":175,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" Course course \u003d getCourse(courseId);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT + Course.class);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":" course.setName(name);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" course.setTimeZone(timezone);"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" if (!course.isValid()) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(course.getInvalidityInfo());"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" return course;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":191,"author":{"gitId":"-"},"content":" * Creates a section."},{"lineNumber":192,"author":{"gitId":"-"},"content":" */"},{"lineNumber":193,"author":{"gitId":"-"},"content":" public Section createSection(Section section) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" return coursesDb.createSection(section);"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":198,"author":{"gitId":"-"},"content":" * Get section by {@code courseId} and {@code teamName}."},{"lineNumber":199,"author":{"gitId":"-"},"content":" */"},{"lineNumber":200,"author":{"gitId":"-"},"content":" public Section getSectionByCourseIdAndTeam(String courseId, String teamName) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" assert teamName !\u003d null;"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" return coursesDb.getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * Gets a list of section names for the given {@code courseId}."},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getSectionNamesForCourse(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" Course course \u003d getCourse(courseId);"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to get section names for a non-existent course.\");"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" return course.getSections()"},{"lineNumber":219,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":220,"author":{"gitId":"-"},"content":" .map(section -\u003e section.getName())"},{"lineNumber":221,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":225,"author":{"gitId":"yuanxi1"},"content":" * Gets the institute of the course."},{"lineNumber":226,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":227,"author":{"gitId":"yuanxi1"},"content":" public String getCourseInstitute(String courseId) {"},{"lineNumber":228,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d getCourse(courseId);"},{"lineNumber":229,"author":{"gitId":"yuanxi1"},"content":" assert course !\u003d null : \"Trying to getCourseInstitute for inexistent course with id \" + courseId;"},{"lineNumber":230,"author":{"gitId":"yuanxi1"},"content":" return course.getInstitute();"},{"lineNumber":231,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":232,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":234,"author":{"gitId":"-"},"content":" * Creates a team."},{"lineNumber":235,"author":{"gitId":"-"},"content":" */"},{"lineNumber":236,"author":{"gitId":"-"},"content":" public Team createTeam(Team team) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" return coursesDb.createTeam(team);"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":241,"author":{"gitId":"-"},"content":" * Returns teams for a particular section."},{"lineNumber":242,"author":{"gitId":"-"},"content":" */"},{"lineNumber":243,"author":{"gitId":"-"},"content":" public List\u003cTeam\u003e getTeamsForSection(Section section) {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" return coursesDb.getTeamsForSection(section);"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":248,"author":{"gitId":"-"},"content":" * Returns teams for a course."},{"lineNumber":249,"author":{"gitId":"-"},"content":" */"},{"lineNumber":250,"author":{"gitId":"-"},"content":" public List\u003cTeam\u003e getTeamsForCourse(String courseId) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" return coursesDb.getTeamsForCourse(courseId);"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":255,"author":{"gitId":"-"},"content":" * Sorts the courses list alphabetically by id."},{"lineNumber":256,"author":{"gitId":"-"},"content":" */"},{"lineNumber":257,"author":{"gitId":"-"},"content":" public static void sortById(List\u003cCourse\u003e courses) {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" courses.sort(Comparator.comparing(Course::getId));"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":9,"-":251}},{"path":"src/main/java/teammates/sqllogic/core/DataBundleLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Collection;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Handles operations related to data bundles."},{"lineNumber":32,"author":{"gitId":"-"},"content":" *"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * @see DataBundle"},{"lineNumber":34,"author":{"gitId":"-"},"content":" */"},{"lineNumber":35,"author":{"gitId":"-"},"content":"public final class DataBundleLogic {"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final DataBundleLogic instance \u003d new DataBundleLogic();"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" private AccountsLogic accountsLogic;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private AccountRequestsLogic accountRequestsLogic;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":42,"author":{"gitId":"-"},"content":" private DeadlineExtensionsLogic deadlineExtensionsLogic;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" private FeedbackSessionsLogic fsLogic;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic frLogic;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsLogic frcLogic;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" private NotificationsLogic notificationsLogic;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" private DataBundleLogic() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static DataBundleLogic inst() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" void initLogicDependencies(AccountsLogic accountsLogic, AccountRequestsLogic accountRequestsLogic,"},{"lineNumber":59,"author":{"gitId":"-"},"content":" CoursesLogic coursesLogic,"},{"lineNumber":60,"author":{"gitId":"-"},"content":" DeadlineExtensionsLogic deadlineExtensionsLogic, FeedbackSessionsLogic fsLogic,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" FeedbackQuestionsLogic fqLogic, FeedbackResponsesLogic frLogic,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" FeedbackResponseCommentsLogic frcLogic,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" NotificationsLogic notificationsLogic, UsersLogic usersLogic) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" this.accountsLogic \u003d accountsLogic;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.accountRequestsLogic \u003d accountRequestsLogic;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.coursesLogic \u003d coursesLogic;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" this.deadlineExtensionsLogic \u003d deadlineExtensionsLogic;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" this.fsLogic \u003d fsLogic;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" this.fqLogic \u003d fqLogic;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" this.frLogic \u003d frLogic;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" this.frcLogic \u003d frcLogic;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" this.notificationsLogic \u003d notificationsLogic;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * Deserialize JSON into a data bundle."},{"lineNumber":78,"author":{"gitId":"-"},"content":" *"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * \u003cp\u003eNOTE: apart from for Course, ids used in the jsonString may be any valid UUID"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * and are used only to link entities together. They will be replaced by a random"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * UUID when deserialized and hence do not need to be checked if they exist in the"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * database previously.\u003c/p\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" *"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * @param jsonString containing entities to persist at once to the database."},{"lineNumber":85,"author":{"gitId":"-"},"content":" * CourseID must be a valid UUID not currently in use."},{"lineNumber":86,"author":{"gitId":"-"},"content":" * For other entities, replaces the given ids with randomly generated UUIDs."},{"lineNumber":87,"author":{"gitId":"-"},"content":" * @return newly created DataBundle"},{"lineNumber":88,"author":{"gitId":"-"},"content":" */"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public static SqlDataBundle deserializeDataBundle(String jsonString) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" SqlDataBundle dataBundle \u003d JsonUtils.fromJson(jsonString, SqlDataBundle.class);"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" Collection\u003cAccount\u003e accounts \u003d dataBundle.accounts.values();"},{"lineNumber":93,"author":{"gitId":"-"},"content":" Collection\u003cAccountRequest\u003e accountRequests \u003d dataBundle.accountRequests.values();"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Collection\u003cCourse\u003e courses \u003d dataBundle.courses.values();"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Collection\u003cSection\u003e sections \u003d dataBundle.sections.values();"},{"lineNumber":96,"author":{"gitId":"-"},"content":" Collection\u003cTeam\u003e teams \u003d dataBundle.teams.values();"},{"lineNumber":97,"author":{"gitId":"-"},"content":" Collection\u003cInstructor\u003e instructors \u003d dataBundle.instructors.values();"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Collection\u003cStudent\u003e students \u003d dataBundle.students.values();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackSession\u003e sessions \u003d dataBundle.feedbackSessions.values();"},{"lineNumber":100,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackQuestion\u003e questions \u003d dataBundle.feedbackQuestions.values();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackResponse\u003e responses \u003d dataBundle.feedbackResponses.values();"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackResponseComment\u003e responseComments \u003d dataBundle.feedbackResponseComments.values();"},{"lineNumber":103,"author":{"gitId":"-"},"content":" Collection\u003cDeadlineExtension\u003e deadlineExtensions \u003d dataBundle.deadlineExtensions.values();"},{"lineNumber":104,"author":{"gitId":"-"},"content":" Collection\u003cNotification\u003e notifications \u003d dataBundle.notifications.values();"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Collection\u003cReadNotification\u003e readNotifications \u003d dataBundle.readNotifications.values();"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" // Mapping of IDs or placeholder IDs to actual entity"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Map\u003cString, Course\u003e coursesMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Map\u003cUUID, Section\u003e sectionsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":110,"author":{"gitId":"-"},"content":" Map\u003cUUID, Team\u003e teamsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":111,"author":{"gitId":"-"},"content":" Map\u003cUUID, FeedbackSession\u003e sessionsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" Map\u003cUUID, FeedbackQuestion\u003e questionMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":113,"author":{"gitId":"-"},"content":" Map\u003cUUID, FeedbackResponse\u003e responseMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" Map\u003cUUID, Account\u003e accountsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" Map\u003cUUID, User\u003e usersMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":116,"author":{"gitId":"-"},"content":" Map\u003cUUID, Notification\u003e notificationsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" // Replace any placeholder IDs with newly generated UUIDs"},{"lineNumber":119,"author":{"gitId":"-"},"content":" // Store mapping of placeholder ID to actual entity to keep track of"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // associations between entities"},{"lineNumber":121,"author":{"gitId":"-"},"content":" for (AccountRequest accountRequest : accountRequests) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" accountRequest.setId(UUID.randomUUID());"},{"lineNumber":123,"author":{"gitId":"-"},"content":" accountRequest.generateNewRegistrationKey();"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" for (Course course : courses) {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" coursesMap.put(course.getId(), course);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" for (Section section : sections) {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d section.getId();"},{"lineNumber":132,"author":{"gitId":"-"},"content":" section.setId(UUID.randomUUID());"},{"lineNumber":133,"author":{"gitId":"-"},"content":" sectionsMap.put(placeholderId, section);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" Course course \u003d coursesMap.get(section.getCourse().getId());"},{"lineNumber":135,"author":{"gitId":"-"},"content":" section.setCourse(course);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" for (Team team : teams) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d team.getId();"},{"lineNumber":140,"author":{"gitId":"-"},"content":" team.setId(UUID.randomUUID());"},{"lineNumber":141,"author":{"gitId":"-"},"content":" teamsMap.put(placeholderId, team);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" Section section \u003d sectionsMap.get(team.getSection().getId());"},{"lineNumber":143,"author":{"gitId":"-"},"content":" team.setSection(section);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d session.getId();"},{"lineNumber":148,"author":{"gitId":"-"},"content":" session.setId(UUID.randomUUID());"},{"lineNumber":149,"author":{"gitId":"-"},"content":" sessionsMap.put(placeholderId, session);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" Course course \u003d coursesMap.get(session.getCourse().getId());"},{"lineNumber":151,"author":{"gitId":"-"},"content":" session.setCourse(course);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d question.getId();"},{"lineNumber":156,"author":{"gitId":"-"},"content":" question.setId(UUID.randomUUID());"},{"lineNumber":157,"author":{"gitId":"-"},"content":" questionMap.put(placeholderId, question);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d sessionsMap.get(question.getFeedbackSession().getId());"},{"lineNumber":159,"author":{"gitId":"-"},"content":" question.setFeedbackSession(fs);"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d response.getId();"},{"lineNumber":164,"author":{"gitId":"-"},"content":" response.setId(UUID.randomUUID());"},{"lineNumber":165,"author":{"gitId":"-"},"content":" responseMap.put(placeholderId, response);"},{"lineNumber":166,"author":{"gitId":"-"},"content":" FeedbackQuestion fq \u003d questionMap.get(response.getFeedbackQuestion().getId());"},{"lineNumber":167,"author":{"gitId":"-"},"content":" Section giverSection \u003d sectionsMap.get(response.getGiverSection().getId());"},{"lineNumber":168,"author":{"gitId":"-"},"content":" Section recipientSection \u003d response.getRecipientSection() !\u003d null"},{"lineNumber":169,"author":{"gitId":"-"},"content":" ? sectionsMap.get(response.getRecipientSection().getId()) : null;"},{"lineNumber":170,"author":{"gitId":"-"},"content":" response.setFeedbackQuestion(fq);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" response.setGiverSection(giverSection);"},{"lineNumber":172,"author":{"gitId":"-"},"content":" response.setRecipientSection(recipientSection);"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d responseMap.get(responseComment.getFeedbackResponse().getId());"},{"lineNumber":177,"author":{"gitId":"-"},"content":" Section giverSection \u003d sectionsMap.get(responseComment.getGiverSection().getId());"},{"lineNumber":178,"author":{"gitId":"-"},"content":" Section recipientSection \u003d sectionsMap.get(responseComment.getRecipientSection().getId());"},{"lineNumber":179,"author":{"gitId":"-"},"content":" responseComment.setFeedbackResponse(fr);"},{"lineNumber":180,"author":{"gitId":"-"},"content":" responseComment.setGiverSection(giverSection);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" responseComment.setRecipientSection(recipientSection);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" for (Account account : accounts) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d account.getId();"},{"lineNumber":186,"author":{"gitId":"-"},"content":" account.setId(UUID.randomUUID());"},{"lineNumber":187,"author":{"gitId":"-"},"content":" accountsMap.put(placeholderId, account);"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d instructor.getId();"},{"lineNumber":192,"author":{"gitId":"-"},"content":" instructor.setId(UUID.randomUUID());"},{"lineNumber":193,"author":{"gitId":"-"},"content":" usersMap.put(placeholderId, instructor);"},{"lineNumber":194,"author":{"gitId":"-"},"content":" Course course \u003d coursesMap.get(instructor.getCourse().getId());"},{"lineNumber":195,"author":{"gitId":"-"},"content":" instructor.setCourse(course);"},{"lineNumber":196,"author":{"gitId":"-"},"content":" if (instructor.getAccount() !\u003d null) {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" Account account \u003d accountsMap.get(instructor.getAccount().getId());"},{"lineNumber":198,"author":{"gitId":"-"},"content":" instructor.setAccount(account);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":" instructor.generateNewRegistrationKey();"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" for (Student student : students) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d student.getId();"},{"lineNumber":205,"author":{"gitId":"-"},"content":" student.setId(UUID.randomUUID());"},{"lineNumber":206,"author":{"gitId":"-"},"content":" usersMap.put(placeholderId, student);"},{"lineNumber":207,"author":{"gitId":"-"},"content":" Course course \u003d coursesMap.get(student.getCourse().getId());"},{"lineNumber":208,"author":{"gitId":"-"},"content":" student.setCourse(course);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" Team team \u003d teamsMap.get(student.getTeam().getId());"},{"lineNumber":210,"author":{"gitId":"-"},"content":" student.setTeam(team);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" if (student.getAccount() !\u003d null) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" Account account \u003d accountsMap.get(student.getAccount().getId());"},{"lineNumber":213,"author":{"gitId":"-"},"content":" student.setAccount(account);"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" student.generateNewRegistrationKey();"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" for (Notification notification : notifications) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d notification.getId();"},{"lineNumber":220,"author":{"gitId":"-"},"content":" notification.setId(UUID.randomUUID());"},{"lineNumber":221,"author":{"gitId":"-"},"content":" notificationsMap.put(placeholderId, notification);"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":" for (ReadNotification readNotification : readNotifications) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" readNotification.setId(UUID.randomUUID());"},{"lineNumber":226,"author":{"gitId":"-"},"content":" Account account \u003d accountsMap.get(readNotification.getAccount().getId());"},{"lineNumber":227,"author":{"gitId":"-"},"content":" readNotification.setAccount(account);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" account.addReadNotification(readNotification);"},{"lineNumber":229,"author":{"gitId":"-"},"content":" Notification notification \u003d notificationsMap.get(readNotification.getNotification().getId());"},{"lineNumber":230,"author":{"gitId":"-"},"content":" readNotification.setNotification(notification);"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" for (DeadlineExtension deadlineExtension : deadlineExtensions) {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" deadlineExtension.setId(UUID.randomUUID());"},{"lineNumber":235,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d sessionsMap.get(deadlineExtension.getFeedbackSession().getId());"},{"lineNumber":236,"author":{"gitId":"-"},"content":" deadlineExtension.setFeedbackSession(session);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" User user \u003d usersMap.get(deadlineExtension.getUser().getId());"},{"lineNumber":238,"author":{"gitId":"-"},"content":" deadlineExtension.setUser(user);"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" return dataBundle;"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Persists data in the given {@link DataBundle} to the database."},{"lineNumber":246,"author":{"gitId":"-"},"content":" *"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if invalid data is encountered."},{"lineNumber":248,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if an entity was not found."},{"lineNumber":249,"author":{"gitId":"-"},"content":" * (ReadNotification requires Account and Notification to be created)"},{"lineNumber":250,"author":{"gitId":"-"},"content":" */"},{"lineNumber":251,"author":{"gitId":"-"},"content":" public SqlDataBundle persistDataBundle(SqlDataBundle dataBundle)"},{"lineNumber":252,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":253,"author":{"gitId":"-"},"content":" if (dataBundle \u003d\u003d null) {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Null data bundle\");"},{"lineNumber":255,"author":{"gitId":"-"},"content":" }"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"yuanxi1"},"content":" linkEntities(dataBundle);"},{"lineNumber":258,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" Collection\u003cAccount\u003e accounts \u003d dataBundle.accounts.values();"},{"lineNumber":260,"author":{"gitId":"-"},"content":" Collection\u003cAccountRequest\u003e accountRequests \u003d dataBundle.accountRequests.values();"},{"lineNumber":261,"author":{"gitId":"-"},"content":" Collection\u003cCourse\u003e courses \u003d dataBundle.courses.values();"},{"lineNumber":262,"author":{"gitId":"-"},"content":" Collection\u003cSection\u003e sections \u003d dataBundle.sections.values();"},{"lineNumber":263,"author":{"gitId":"-"},"content":" Collection\u003cTeam\u003e teams \u003d dataBundle.teams.values();"},{"lineNumber":264,"author":{"gitId":"-"},"content":" Collection\u003cInstructor\u003e instructors \u003d dataBundle.instructors.values();"},{"lineNumber":265,"author":{"gitId":"-"},"content":" Collection\u003cStudent\u003e students \u003d dataBundle.students.values();"},{"lineNumber":266,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackSession\u003e sessions \u003d dataBundle.feedbackSessions.values();"},{"lineNumber":267,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackQuestion\u003e questions \u003d dataBundle.feedbackQuestions.values();"},{"lineNumber":268,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackResponse\u003e responses \u003d dataBundle.feedbackResponses.values();"},{"lineNumber":269,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackResponseComment\u003e responseComments \u003d dataBundle.feedbackResponseComments.values();"},{"lineNumber":270,"author":{"gitId":"-"},"content":" Collection\u003cDeadlineExtension\u003e deadlineExtensions \u003d dataBundle.deadlineExtensions.values();"},{"lineNumber":271,"author":{"gitId":"-"},"content":" Collection\u003cNotification\u003e notifications \u003d dataBundle.notifications.values();"},{"lineNumber":272,"author":{"gitId":"-"},"content":" Collection\u003cReadNotification\u003e readNotifications \u003d dataBundle.readNotifications.values();"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":" for (AccountRequest accountRequest : accountRequests) {"},{"lineNumber":275,"author":{"gitId":"-"},"content":" accountRequestsLogic.createAccountRequest(accountRequest);"},{"lineNumber":276,"author":{"gitId":"-"},"content":" }"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":" for (Notification notification : notifications) {"},{"lineNumber":279,"author":{"gitId":"-"},"content":" notificationsLogic.createNotification(notification);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" for (Course course : courses) {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" coursesLogic.createCourse(course);"},{"lineNumber":284,"author":{"gitId":"-"},"content":" }"},{"lineNumber":285,"author":{"gitId":"-"},"content":""},{"lineNumber":286,"author":{"gitId":"-"},"content":" for (Section section : sections) {"},{"lineNumber":287,"author":{"gitId":"-"},"content":" coursesLogic.createSection(section);"},{"lineNumber":288,"author":{"gitId":"-"},"content":" }"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":" for (Team team : teams) {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" coursesLogic.createTeam(team);"},{"lineNumber":292,"author":{"gitId":"-"},"content":" }"},{"lineNumber":293,"author":{"gitId":"-"},"content":""},{"lineNumber":294,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":295,"author":{"gitId":"-"},"content":" fsLogic.createFeedbackSession(session);"},{"lineNumber":296,"author":{"gitId":"-"},"content":" }"},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" fqLogic.createFeedbackQuestion(question);"},{"lineNumber":300,"author":{"gitId":"-"},"content":" }"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" frLogic.createFeedbackResponse(response);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":307,"author":{"gitId":"-"},"content":" responseComment.setId(null);"},{"lineNumber":308,"author":{"gitId":"-"},"content":" frcLogic.createFeedbackResponseComment(responseComment);"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" for (Account account : accounts) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" accountsLogic.createAccount(account);"},{"lineNumber":313,"author":{"gitId":"-"},"content":" }"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" usersLogic.createInstructor(instructor);"},{"lineNumber":317,"author":{"gitId":"-"},"content":" }"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":" for (Student student : students) {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" usersLogic.createStudent(student);"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" for (ReadNotification readNotification : readNotifications) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" accountsLogic.updateReadNotifications(readNotification.getAccount().getGoogleId(),"},{"lineNumber":325,"author":{"gitId":"-"},"content":" readNotification.getNotification().getId(), readNotification.getNotification().getEndTime());"},{"lineNumber":326,"author":{"gitId":"-"},"content":" }"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" for (DeadlineExtension deadlineExtension : deadlineExtensions) {"},{"lineNumber":329,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.createDeadlineExtension(deadlineExtension);"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }"},{"lineNumber":331,"author":{"gitId":"-"},"content":""},{"lineNumber":332,"author":{"gitId":"-"},"content":" return dataBundle;"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":336,"author":{"gitId":"-"},"content":" * Removes the items in the data bundle from the database."},{"lineNumber":337,"author":{"gitId":"-"},"content":" */"},{"lineNumber":338,"author":{"gitId":"-"},"content":" public void removeDataBundle(SqlDataBundle dataBundle) throws InvalidParametersException {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" if (dataBundle \u003d\u003d null) {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Data bundle is null\");"},{"lineNumber":341,"author":{"gitId":"-"},"content":" }"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"yuanxi1"},"content":" linkEntities(dataBundle);"},{"lineNumber":344,"author":{"gitId":"-"},"content":" dataBundle.courses.values().forEach(course -\u003e {"},{"lineNumber":345,"author":{"gitId":"-"},"content":" coursesLogic.deleteCourseCascade(course.getId());"},{"lineNumber":346,"author":{"gitId":"-"},"content":" });"},{"lineNumber":347,"author":{"gitId":"-"},"content":" dataBundle.notifications.values().forEach(notification -\u003e {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" notificationsLogic.deleteNotification(notification.getId());"},{"lineNumber":349,"author":{"gitId":"-"},"content":" });"},{"lineNumber":350,"author":{"gitId":"-"},"content":" dataBundle.accounts.values().forEach(account -\u003e {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccount(account.getGoogleId());"},{"lineNumber":352,"author":{"gitId":"-"},"content":" });"},{"lineNumber":353,"author":{"gitId":"-"},"content":" dataBundle.accountRequests.values().forEach(accountRequest -\u003e {"},{"lineNumber":354,"author":{"gitId":"-"},"content":" accountRequestsLogic.deleteAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":355,"author":{"gitId":"-"},"content":" });"},{"lineNumber":356,"author":{"gitId":"-"},"content":" }"},{"lineNumber":357,"author":{"gitId":"-"},"content":""},{"lineNumber":358,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":359,"author":{"gitId":"-"},"content":" * Creates document for entities that have document, i.e. searchable."},{"lineNumber":360,"author":{"gitId":"-"},"content":" */"},{"lineNumber":361,"author":{"gitId":"-"},"content":" public void putDocuments(SqlDataBundle dataBundle) throws SearchServiceException {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" Map\u003cString, Student\u003e students \u003d dataBundle.students;"},{"lineNumber":363,"author":{"gitId":"-"},"content":" for (Student student : students.values()) {"},{"lineNumber":364,"author":{"gitId":"-"},"content":" usersLogic.putStudentDocument(student);"},{"lineNumber":365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":366,"author":{"gitId":"-"},"content":""},{"lineNumber":367,"author":{"gitId":"-"},"content":" Map\u003cString, Instructor\u003e instructors \u003d dataBundle.instructors;"},{"lineNumber":368,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors.values()) {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" usersLogic.putInstructorDocument(instructor);"},{"lineNumber":370,"author":{"gitId":"-"},"content":" }"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":" Map\u003cString, AccountRequest\u003e accountRequests \u003d dataBundle.accountRequests;"},{"lineNumber":373,"author":{"gitId":"-"},"content":" for (AccountRequest accountRequest : accountRequests.values()) {"},{"lineNumber":374,"author":{"gitId":"-"},"content":" accountRequestsLogic.putDocument(accountRequest);"},{"lineNumber":375,"author":{"gitId":"-"},"content":" }"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"yuanxi1"},"content":" private static void linkEntities(SqlDataBundle dataBundle) {"},{"lineNumber":379,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cAccount\u003e accounts \u003d dataBundle.accounts.values();"},{"lineNumber":380,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cCourse\u003e courses \u003d dataBundle.courses.values();"},{"lineNumber":381,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cSection\u003e sections \u003d dataBundle.sections.values();"},{"lineNumber":382,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cTeam\u003e teams \u003d dataBundle.teams.values();"},{"lineNumber":383,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cInstructor\u003e instructors \u003d dataBundle.instructors.values();"},{"lineNumber":384,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cStudent\u003e students \u003d dataBundle.students.values();"},{"lineNumber":385,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cFeedbackSession\u003e sessions \u003d dataBundle.feedbackSessions.values();"},{"lineNumber":386,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cFeedbackQuestion\u003e questions \u003d dataBundle.feedbackQuestions.values();"},{"lineNumber":387,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cFeedbackResponse\u003e responses \u003d dataBundle.feedbackResponses.values();"},{"lineNumber":388,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cFeedbackResponseComment\u003e responseComments \u003d dataBundle.feedbackResponseComments.values();"},{"lineNumber":389,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cDeadlineExtension\u003e deadlineExtensions \u003d dataBundle.deadlineExtensions.values();"},{"lineNumber":390,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cNotification\u003e notifications \u003d dataBundle.notifications.values();"},{"lineNumber":391,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cReadNotification\u003e readNotifications \u003d dataBundle.readNotifications.values();"},{"lineNumber":392,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":393,"author":{"gitId":"yuanxi1"},"content":" // Mapping of IDs or placeholder IDs to actual entity"},{"lineNumber":394,"author":{"gitId":"yuanxi1"},"content":" Map\u003cString, Course\u003e coursesMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":395,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, Section\u003e sectionsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":396,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, Team\u003e teamsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":397,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, FeedbackSession\u003e sessionsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":398,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, FeedbackQuestion\u003e questionMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":399,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, FeedbackResponse\u003e responseMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":400,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, Account\u003e accountsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":401,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, User\u003e usersMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":402,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, Notification\u003e notificationsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":403,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":404,"author":{"gitId":"yuanxi1"},"content":" for (Course course : courses) {"},{"lineNumber":405,"author":{"gitId":"yuanxi1"},"content":" coursesMap.put(course.getId(), course);"},{"lineNumber":406,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":407,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":408,"author":{"gitId":"yuanxi1"},"content":" for (Section section : sections) {"},{"lineNumber":409,"author":{"gitId":"yuanxi1"},"content":" sectionsMap.put(section.getId(), section);"},{"lineNumber":410,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesMap.get(section.getCourse().getId());"},{"lineNumber":411,"author":{"gitId":"yuanxi1"},"content":" section.setCourse(course);"},{"lineNumber":412,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":413,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":414,"author":{"gitId":"yuanxi1"},"content":" for (Team team : teams) {"},{"lineNumber":415,"author":{"gitId":"yuanxi1"},"content":" teamsMap.put(team.getId(), team);"},{"lineNumber":416,"author":{"gitId":"yuanxi1"},"content":" Section section \u003d sectionsMap.get(team.getSection().getId());"},{"lineNumber":417,"author":{"gitId":"yuanxi1"},"content":" team.setSection(section);"},{"lineNumber":418,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":419,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":420,"author":{"gitId":"yuanxi1"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":421,"author":{"gitId":"yuanxi1"},"content":" sessionsMap.put(session.getId(), session);"},{"lineNumber":422,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesMap.get(session.getCourse().getId());"},{"lineNumber":423,"author":{"gitId":"yuanxi1"},"content":" session.setCourse(course);"},{"lineNumber":424,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":425,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":426,"author":{"gitId":"yuanxi1"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":427,"author":{"gitId":"yuanxi1"},"content":" questionMap.put(question.getId(), question);"},{"lineNumber":428,"author":{"gitId":"yuanxi1"},"content":" FeedbackSession fs \u003d sessionsMap.get(question.getFeedbackSession().getId());"},{"lineNumber":429,"author":{"gitId":"yuanxi1"},"content":" question.setFeedbackSession(fs);"},{"lineNumber":430,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":431,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":432,"author":{"gitId":"yuanxi1"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":433,"author":{"gitId":"yuanxi1"},"content":" UUID placeholderId \u003d response.getId();"},{"lineNumber":434,"author":{"gitId":"yuanxi1"},"content":" responseMap.put(placeholderId, response);"},{"lineNumber":435,"author":{"gitId":"yuanxi1"},"content":" FeedbackQuestion fq \u003d questionMap.get(response.getFeedbackQuestion().getId());"},{"lineNumber":436,"author":{"gitId":"yuanxi1"},"content":" Section giverSection \u003d sectionsMap.get(response.getGiverSection().getId());"},{"lineNumber":437,"author":{"gitId":"yuanxi1"},"content":" Section recipientSection \u003d response.getRecipientSection() !\u003d null"},{"lineNumber":438,"author":{"gitId":"yuanxi1"},"content":" ? sectionsMap.get(response.getRecipientSection().getId()) : null;"},{"lineNumber":439,"author":{"gitId":"yuanxi1"},"content":" response.setFeedbackQuestion(fq);"},{"lineNumber":440,"author":{"gitId":"yuanxi1"},"content":" response.setGiverSection(giverSection);"},{"lineNumber":441,"author":{"gitId":"yuanxi1"},"content":" response.setRecipientSection(recipientSection);"},{"lineNumber":442,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":443,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":444,"author":{"gitId":"yuanxi1"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":445,"author":{"gitId":"yuanxi1"},"content":" FeedbackResponse fr \u003d responseMap.get(responseComment.getFeedbackResponse().getId());"},{"lineNumber":446,"author":{"gitId":"yuanxi1"},"content":" Section giverSection \u003d sectionsMap.get(responseComment.getGiverSection().getId());"},{"lineNumber":447,"author":{"gitId":"yuanxi1"},"content":" Section recipientSection \u003d sectionsMap.get(responseComment.getRecipientSection().getId());"},{"lineNumber":448,"author":{"gitId":"yuanxi1"},"content":" responseComment.setFeedbackResponse(fr);"},{"lineNumber":449,"author":{"gitId":"yuanxi1"},"content":" responseComment.setGiverSection(giverSection);"},{"lineNumber":450,"author":{"gitId":"yuanxi1"},"content":" responseComment.setRecipientSection(recipientSection);"},{"lineNumber":451,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":452,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":453,"author":{"gitId":"yuanxi1"},"content":" for (Account account : accounts) {"},{"lineNumber":454,"author":{"gitId":"yuanxi1"},"content":" accountsMap.put(account.getId(), account);"},{"lineNumber":455,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":456,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":457,"author":{"gitId":"yuanxi1"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":458,"author":{"gitId":"yuanxi1"},"content":" usersMap.put(instructor.getId(), instructor);"},{"lineNumber":459,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesMap.get(instructor.getCourse().getId());"},{"lineNumber":460,"author":{"gitId":"yuanxi1"},"content":" instructor.setCourse(course);"},{"lineNumber":461,"author":{"gitId":"yuanxi1"},"content":" if (instructor.getAccount() !\u003d null) {"},{"lineNumber":462,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsMap.get(instructor.getAccount().getId());"},{"lineNumber":463,"author":{"gitId":"yuanxi1"},"content":" instructor.setAccount(account);"},{"lineNumber":464,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":465,"author":{"gitId":"yuanxi1"},"content":" instructor.generateNewRegistrationKey();"},{"lineNumber":466,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":467,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":468,"author":{"gitId":"yuanxi1"},"content":" for (Student student : students) {"},{"lineNumber":469,"author":{"gitId":"yuanxi1"},"content":" usersMap.put(student.getId(), student);"},{"lineNumber":470,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesMap.get(student.getCourse().getId());"},{"lineNumber":471,"author":{"gitId":"yuanxi1"},"content":" student.setCourse(course);"},{"lineNumber":472,"author":{"gitId":"yuanxi1"},"content":" Team team \u003d teamsMap.get(student.getTeam().getId());"},{"lineNumber":473,"author":{"gitId":"yuanxi1"},"content":" student.setTeam(team);"},{"lineNumber":474,"author":{"gitId":"yuanxi1"},"content":" if (student.getAccount() !\u003d null) {"},{"lineNumber":475,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsMap.get(student.getAccount().getId());"},{"lineNumber":476,"author":{"gitId":"yuanxi1"},"content":" student.setAccount(account);"},{"lineNumber":477,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":478,"author":{"gitId":"yuanxi1"},"content":" student.generateNewRegistrationKey();"},{"lineNumber":479,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":480,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":481,"author":{"gitId":"yuanxi1"},"content":" for (Notification notification : notifications) {"},{"lineNumber":482,"author":{"gitId":"yuanxi1"},"content":" notificationsMap.put(notification.getId(), notification);"},{"lineNumber":483,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":484,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":485,"author":{"gitId":"yuanxi1"},"content":" for (ReadNotification readNotification : readNotifications) {"},{"lineNumber":486,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsMap.get(readNotification.getAccount().getId());"},{"lineNumber":487,"author":{"gitId":"yuanxi1"},"content":" readNotification.setAccount(account);"},{"lineNumber":488,"author":{"gitId":"yuanxi1"},"content":" Notification notification \u003d notificationsMap.get(readNotification.getNotification().getId());"},{"lineNumber":489,"author":{"gitId":"yuanxi1"},"content":" readNotification.setNotification(notification);"},{"lineNumber":490,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":491,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":492,"author":{"gitId":"yuanxi1"},"content":" for (DeadlineExtension deadlineExtension : deadlineExtensions) {"},{"lineNumber":493,"author":{"gitId":"yuanxi1"},"content":" FeedbackSession session \u003d sessionsMap.get(deadlineExtension.getFeedbackSession().getId());"},{"lineNumber":494,"author":{"gitId":"yuanxi1"},"content":" deadlineExtension.setFeedbackSession(session);"},{"lineNumber":495,"author":{"gitId":"yuanxi1"},"content":" User user \u003d usersMap.get(deadlineExtension.getUser().getId());"},{"lineNumber":496,"author":{"gitId":"yuanxi1"},"content":" deadlineExtension.setUser(user);"},{"lineNumber":497,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":498,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":499,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":124,"-":375}},{"path":"src/main/java/teammates/sqllogic/core/FeedbackQuestionsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Set;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"import javax.annotation.Nullable;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackQuestionRecipient;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqQuestionDetails;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionType;"},{"lineNumber":22,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackQuestionsDb;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackMcqQuestion;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackMsqQuestion;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackQuestionUpdateRequest;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Handles operations related to feedback questions."},{"lineNumber":38,"author":{"gitId":"-"},"content":" *"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * @see FeedbackQuestion"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * @see FeedbackQuestionsDb"},{"lineNumber":41,"author":{"gitId":"-"},"content":" */"},{"lineNumber":42,"author":{"gitId":"-"},"content":"public final class FeedbackQuestionsLogic {"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" static final String USER_NAME_FOR_SELF \u003d \"Myself\";"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" private static final FeedbackQuestionsLogic instance \u003d new FeedbackQuestionsLogic();"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private FeedbackQuestionsDb fqDb;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic frLogic;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private FeedbackSessionsLogic feedbackSessionsLogic;"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static FeedbackQuestionsLogic inst() {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" void initLogicDependencies(FeedbackQuestionsDb fqDb, CoursesLogic coursesLogic, FeedbackResponsesLogic frLogic,"},{"lineNumber":64,"author":{"gitId":"-"},"content":" UsersLogic usersLogic, FeedbackSessionsLogic feedbackSessionsLogic) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.fqDb \u003d fqDb;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.coursesLogic \u003d coursesLogic;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" this.frLogic \u003d frLogic;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" this.feedbackSessionsLogic \u003d feedbackSessionsLogic;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Creates a new feedback question."},{"lineNumber":74,"author":{"gitId":"-"},"content":" *"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * @return the created question"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the question is invalid"},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":" * @throws EntityAlreadyExistsException if the question already exists"},{"lineNumber":78,"author":{"gitId":"-"},"content":" */"},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" public FeedbackQuestion createFeedbackQuestion(FeedbackQuestion feedbackQuestion)"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion createdQuestion \u003d fqDb.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsBefore \u003d getFeedbackQuestionsForSession(feedbackQuestion.getFeedbackSession());"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":" questionsBefore.remove(createdQuestion);"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" adjustQuestionNumbers(questionsBefore.size() + 1, createdQuestion.getQuestionNumber(), questionsBefore);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return createdQuestion;"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Gets an feedback question by feedback question id."},{"lineNumber":92,"author":{"gitId":"-"},"content":" * @param id of feedback question."},{"lineNumber":93,"author":{"gitId":"-"},"content":" * @return the specified feedback question."},{"lineNumber":94,"author":{"gitId":"-"},"content":" */"},{"lineNumber":95,"author":{"gitId":"-"},"content":" public FeedbackQuestion getFeedbackQuestion(UUID id) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" return fqDb.getFeedbackQuestion(id);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Gets a {@link List} of every FeedbackQuestion in the given session."},{"lineNumber":101,"author":{"gitId":"-"},"content":" */"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForSession(FeedbackSession feedbackSession) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d fqDb.getFeedbackQuestionsForSession(feedbackSession.getId());"},{"lineNumber":105,"author":{"gitId":"-"},"content":" questions.sort(null);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" // check whether the question numbers are consistent"},{"lineNumber":108,"author":{"gitId":"-"},"content":" if (questions.size() \u003e 1 \u0026\u0026 !areQuestionNumbersConsistent(questions)) {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" log.severe(feedbackSession.getCourse().getId() + \": \" + feedbackSession.getName()"},{"lineNumber":110,"author":{"gitId":"-"},"content":" + \" has invalid question numbers\");"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Checks if there are any questions for the given session that instructors can view/submit."},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public boolean hasFeedbackQuestionsForInstructors(List\u003cFeedbackQuestion\u003e fqs, boolean isCreator) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" boolean hasQuestions \u003d hasFeedbackQuestionsForGiverType(fqs, FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":121,"author":{"gitId":"-"},"content":" if (hasQuestions) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" if (isCreator) {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" hasQuestions \u003d hasFeedbackQuestionsForGiverType(fqs, FeedbackParticipantType.SELF);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" return hasQuestions;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Gets a {@code List} of all questions for the given session that instructors can view/submit."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForInstructors("},{"lineNumber":136,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, String userEmail) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" questions.addAll("},{"lineNumber":140,"author":{"gitId":"-"},"content":" fqDb.getFeedbackQuestionsForGiverType("},{"lineNumber":141,"author":{"gitId":"-"},"content":" feedbackSession, FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" if (feedbackSession.getCreatorEmail().equals(userEmail)) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" questions.addAll("},{"lineNumber":145,"author":{"gitId":"-"},"content":" fqDb.getFeedbackQuestionsForGiverType("},{"lineNumber":146,"author":{"gitId":"-"},"content":" feedbackSession, FeedbackParticipantType.SELF));"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * Gets a {@code List} of all questions for the given session that students can view/submit."},{"lineNumber":154,"author":{"gitId":"-"},"content":" */"},{"lineNumber":155,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForStudents(FeedbackSession feedbackSession) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" questions.addAll(fqDb.getFeedbackQuestionsForGiverType(feedbackSession, FeedbackParticipantType.STUDENTS));"},{"lineNumber":159,"author":{"gitId":"-"},"content":" questions.addAll(fqDb.getFeedbackQuestionsForGiverType(feedbackSession, FeedbackParticipantType.SELF));"},{"lineNumber":160,"author":{"gitId":"dishenggg"},"content":" questions.sort(null);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":165,"author":{"gitId":"-"},"content":" * Updates a feedback question."},{"lineNumber":166,"author":{"gitId":"-"},"content":" *"},{"lineNumber":167,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade adjust the question number of questions in the same session."},{"lineNumber":168,"author":{"gitId":"-"},"content":" *"},{"lineNumber":169,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade adjust the existing response of the question."},{"lineNumber":170,"author":{"gitId":"-"},"content":" *"},{"lineNumber":171,"author":{"gitId":"-"},"content":" * @return updated feedback question"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":173,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback question cannot be found"},{"lineNumber":174,"author":{"gitId":"-"},"content":" */"},{"lineNumber":175,"author":{"gitId":"-"},"content":" public FeedbackQuestion updateFeedbackQuestionCascade(UUID questionId, FeedbackQuestionUpdateRequest updateRequest)"},{"lineNumber":176,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d fqDb.getFeedbackQuestion(questionId);"},{"lineNumber":178,"author":{"gitId":"-"},"content":" if (question \u003d\u003d null) {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to update a feedback question that does not exist.\");"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" int oldQuestionNumber \u003d question.getQuestionNumber();"},{"lineNumber":183,"author":{"gitId":"-"},"content":" int newQuestionNumber \u003d updateRequest.getQuestionNumber();"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e previousQuestionsInSession \u003d new ArrayList\u003c\u003e();"},{"lineNumber":186,"author":{"gitId":"-"},"content":" if (oldQuestionNumber !\u003d newQuestionNumber) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" // get questions in session before update"},{"lineNumber":188,"author":{"gitId":"-"},"content":" previousQuestionsInSession \u003d getFeedbackQuestionsForSession(question.getFeedbackSession());"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" // update question"},{"lineNumber":192,"author":{"gitId":"-"},"content":" question.setQuestionNumber(updateRequest.getQuestionNumber());"},{"lineNumber":193,"author":{"gitId":"-"},"content":" question.setDescription(updateRequest.getQuestionDescription());"},{"lineNumber":194,"author":{"gitId":"-"},"content":" question.setQuestionDetails(updateRequest.getQuestionDetails());"},{"lineNumber":195,"author":{"gitId":"-"},"content":" question.setGiverType(updateRequest.getGiverType());"},{"lineNumber":196,"author":{"gitId":"-"},"content":" question.setRecipientType(updateRequest.getRecipientType());"},{"lineNumber":197,"author":{"gitId":"-"},"content":" question.setNumOfEntitiesToGiveFeedbackTo(updateRequest.getNumberOfEntitiesToGiveFeedbackTo());"},{"lineNumber":198,"author":{"gitId":"-"},"content":" question.setShowResponsesTo(updateRequest.getShowResponsesTo());"},{"lineNumber":199,"author":{"gitId":"-"},"content":" question.setShowGiverNameTo(updateRequest.getShowGiverNameTo());"},{"lineNumber":200,"author":{"gitId":"-"},"content":" question.setShowRecipientNameTo(updateRequest.getShowRecipientNameTo());"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" // validate questions (giver \u0026 recipient)"},{"lineNumber":203,"author":{"gitId":"-"},"content":" String err \u003d question.getQuestionDetailsCopy().validateGiverRecipientVisibility(question);"},{"lineNumber":204,"author":{"gitId":"-"},"content":" if (!err.isEmpty()) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(err);"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":" // validate questions (question details)"},{"lineNumber":208,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":209,"author":{"gitId":"-"},"content":" List\u003cString\u003e questionDetailsErrors \u003d questionDetails.validateQuestionDetails();"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" if (!questionDetailsErrors.isEmpty()) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(questionDetailsErrors.toString());"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":" if (oldQuestionNumber !\u003d newQuestionNumber) {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" // shift other feedback questions (generate an empty \"slot\")"},{"lineNumber":217,"author":{"gitId":"-"},"content":" adjustQuestionNumbers(oldQuestionNumber, newQuestionNumber, previousQuestionsInSession);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" // adjust responses"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (question.areResponseDeletionsRequiredForChanges(updateRequest.getGiverType(),"},{"lineNumber":222,"author":{"gitId":"-"},"content":" updateRequest.getRecipientType(), updateRequest.getQuestionDetails())) {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" frLogic.deleteFeedbackResponsesForQuestionCascade(question.getId());"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" return question;"},{"lineNumber":227,"author":{"gitId":"-"},"content":" }"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":230,"author":{"gitId":"-"},"content":" * Checks if there are any questions for the given session that students can view/submit."},{"lineNumber":231,"author":{"gitId":"-"},"content":" */"},{"lineNumber":232,"author":{"gitId":"-"},"content":" public boolean hasFeedbackQuestionsForStudents(List\u003cFeedbackQuestion\u003e fqs) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" return hasFeedbackQuestionsForGiverType(fqs, FeedbackParticipantType.STUDENTS)"},{"lineNumber":234,"author":{"gitId":"-"},"content":" || hasFeedbackQuestionsForGiverType(fqs, FeedbackParticipantType.TEAMS);"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":238,"author":{"gitId":"-"},"content":" * Checks if there is any feedback questions in a session in a course for the given giver type."},{"lineNumber":239,"author":{"gitId":"-"},"content":" */"},{"lineNumber":240,"author":{"gitId":"-"},"content":" public boolean hasFeedbackQuestionsForGiverType("},{"lineNumber":241,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e feedbackQuestions, FeedbackParticipantType giverType) {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" assert feedbackQuestions !\u003d null;"},{"lineNumber":243,"author":{"gitId":"-"},"content":" assert giverType !\u003d null;"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":" for (FeedbackQuestion fq : feedbackQuestions) {"},{"lineNumber":246,"author":{"gitId":"-"},"content":" if (fq.getGiverType() \u003d\u003d giverType) {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" // TODO can be removed once we are sure that question numbers will be consistent"},{"lineNumber":254,"author":{"gitId":"-"},"content":" private boolean areQuestionNumbersConsistent(List\u003cFeedbackQuestion\u003e questions) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" Set\u003cInteger\u003e questionNumbersInSession \u003d new HashSet\u003c\u003e();"},{"lineNumber":256,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" if (!questionNumbersInSession.add(question.getQuestionNumber())) {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" for (int i \u003d 1; i \u003c\u003d questions.size(); i++) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" if (!questionNumbersInSession.contains(i)) {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":272,"author":{"gitId":"-"},"content":" * Adjust questions between the old and new number,"},{"lineNumber":273,"author":{"gitId":"-"},"content":" * if the new number is smaller, then shift up (increase qn#) all questions in between."},{"lineNumber":274,"author":{"gitId":"-"},"content":" * if the new number is bigger, then shift down(decrease qn#) all questions in between."},{"lineNumber":275,"author":{"gitId":"-"},"content":" */"},{"lineNumber":276,"author":{"gitId":"-"},"content":" private void adjustQuestionNumbers(int oldQuestionNumber, int newQuestionNumber, List\u003cFeedbackQuestion\u003e questions) {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" if (oldQuestionNumber \u003e newQuestionNumber \u0026\u0026 oldQuestionNumber \u003e\u003d 1) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" for (int i \u003d oldQuestionNumber - 1; i \u003e\u003d newQuestionNumber; i--) {"},{"lineNumber":279,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d questions.get(i - 1);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" question.setQuestionNumber(question.getQuestionNumber() + 1);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":" } else if (oldQuestionNumber \u003c newQuestionNumber \u0026\u0026 oldQuestionNumber \u003c questions.size()) {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" for (int i \u003d oldQuestionNumber + 1; i \u003c\u003d newQuestionNumber; i++) {"},{"lineNumber":284,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d questions.get(i - 1);"},{"lineNumber":285,"author":{"gitId":"-"},"content":" question.setQuestionNumber(question.getQuestionNumber() - 1);"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":" }"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":291,"author":{"gitId":"-"},"content":" * Populates fields that need dynamic generation in a question."},{"lineNumber":292,"author":{"gitId":"-"},"content":" *"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * \u003cp\u003eCurrently, only MCQ/MSQ needs to generate choices dynamically.\u003c/p\u003e"},{"lineNumber":294,"author":{"gitId":"-"},"content":" *"},{"lineNumber":295,"author":{"gitId":"-"},"content":" * @param feedbackQuestion the question to populate"},{"lineNumber":296,"author":{"gitId":"-"},"content":" * @param courseId the ID of the course"},{"lineNumber":297,"author":{"gitId":"-"},"content":" * @param emailOfEntityDoingQuestion the email of the entity doing the question"},{"lineNumber":298,"author":{"gitId":"-"},"content":" * @param teamOfEntityDoingQuestion the team of the entity doing the question. If the entity is an instructor,"},{"lineNumber":299,"author":{"gitId":"-"},"content":" * it can be {@code null}."},{"lineNumber":300,"author":{"gitId":"-"},"content":" */"},{"lineNumber":301,"author":{"gitId":"-"},"content":" public void populateFieldsToGenerateInQuestion(FeedbackQuestion feedbackQuestion,"},{"lineNumber":302,"author":{"gitId":"-"},"content":" String courseId, String emailOfEntityDoingQuestion, String teamOfEntityDoingQuestion) {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" List\u003cString\u003e optionList;"},{"lineNumber":304,"author":{"gitId":"-"},"content":""},{"lineNumber":305,"author":{"gitId":"-"},"content":" FeedbackParticipantType generateOptionsFor;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" FeedbackQuestionType questionType \u003d feedbackQuestion.getQuestionDetailsCopy().getQuestionType();"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" if (questionType \u003d\u003d FeedbackQuestionType.MCQ) {"},{"lineNumber":309,"author":{"gitId":"-"},"content":" FeedbackMcqQuestionDetails feedbackMcqQuestionDetails \u003d"},{"lineNumber":310,"author":{"gitId":"-"},"content":" (FeedbackMcqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":311,"author":{"gitId":"-"},"content":" optionList \u003d feedbackMcqQuestionDetails.getMcqChoices();"},{"lineNumber":312,"author":{"gitId":"-"},"content":" generateOptionsFor \u003d feedbackMcqQuestionDetails.getGenerateOptionsFor();"},{"lineNumber":313,"author":{"gitId":"-"},"content":" } else if (questionType \u003d\u003d FeedbackQuestionType.MSQ) {"},{"lineNumber":314,"author":{"gitId":"-"},"content":" FeedbackMsqQuestionDetails feedbackMsqQuestionDetails \u003d"},{"lineNumber":315,"author":{"gitId":"-"},"content":" (FeedbackMsqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":316,"author":{"gitId":"-"},"content":" optionList \u003d feedbackMsqQuestionDetails.getMsqChoices();"},{"lineNumber":317,"author":{"gitId":"-"},"content":" generateOptionsFor \u003d feedbackMsqQuestionDetails.getGenerateOptionsFor();"},{"lineNumber":318,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" // other question types"},{"lineNumber":320,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" switch (generateOptionsFor) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":325,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":326,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":327,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":328,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":329,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentList;"},{"lineNumber":330,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.STUDENTS_IN_SAME_SECTION) {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" Student student \u003d"},{"lineNumber":332,"author":{"gitId":"-"},"content":" usersLogic.getStudentForEmail(courseId, emailOfEntityDoingQuestion);"},{"lineNumber":333,"author":{"gitId":"-"},"content":" studentList \u003d usersLogic.getStudentsForSection(student.getSectionName(), courseId);"},{"lineNumber":334,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":335,"author":{"gitId":"-"},"content":" studentList \u003d usersLogic.getStudentsForCourse(courseId);"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.STUDENTS_EXCLUDING_SELF) {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" studentList.removeIf(studentInList -\u003e studentInList.getEmail().equals(emailOfEntityDoingQuestion));"},{"lineNumber":340,"author":{"gitId":"-"},"content":" }"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":" for (Student student : studentList) {"},{"lineNumber":343,"author":{"gitId":"dishenggg"},"content":" optionList.add(student.getName() + \" (\" + student.getTeam().getName() + \")\");"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" optionList.sort(null);"},{"lineNumber":347,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":348,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":349,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":350,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":351,"author":{"gitId":"-"},"content":" List\u003cString\u003e teams;"},{"lineNumber":352,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION) {"},{"lineNumber":353,"author":{"gitId":"-"},"content":" Student student \u003d"},{"lineNumber":354,"author":{"gitId":"-"},"content":" usersLogic.getStudentForEmail(courseId, emailOfEntityDoingQuestion);"},{"lineNumber":355,"author":{"gitId":"-"},"content":" teams \u003d coursesLogic.getTeamsForSection(student.getSection())"},{"lineNumber":356,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":357,"author":{"gitId":"-"},"content":" .map(team -\u003e { return team.getName(); })"},{"lineNumber":358,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":359,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" teams \u003d coursesLogic.getTeamsForCourse(courseId)"},{"lineNumber":361,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":362,"author":{"gitId":"-"},"content":" .map(team -\u003e { return team.getName(); })"},{"lineNumber":363,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.TEAMS_EXCLUDING_SELF) {"},{"lineNumber":367,"author":{"gitId":"-"},"content":" teams.removeIf(team -\u003e team.equals(teamOfEntityDoingQuestion));"},{"lineNumber":368,"author":{"gitId":"-"},"content":" }"},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":" for (String team : teams) {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" optionList.add(team);"},{"lineNumber":372,"author":{"gitId":"-"},"content":" }"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" optionList.sort(null);"},{"lineNumber":375,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":376,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":377,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":378,"author":{"gitId":"-"},"content":" if (teamOfEntityDoingQuestion !\u003d null) {"},{"lineNumber":379,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e teamMembers \u003d usersLogic.getStudentsForTeam(teamOfEntityDoingQuestion,"},{"lineNumber":380,"author":{"gitId":"-"},"content":" courseId);"},{"lineNumber":381,"author":{"gitId":"-"},"content":""},{"lineNumber":382,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.OWN_TEAM_MEMBERS) {"},{"lineNumber":383,"author":{"gitId":"-"},"content":" teamMembers.removeIf(teamMember -\u003e teamMember.getEmail().equals(emailOfEntityDoingQuestion));"},{"lineNumber":384,"author":{"gitId":"-"},"content":" }"},{"lineNumber":385,"author":{"gitId":"-"},"content":""},{"lineNumber":386,"author":{"gitId":"-"},"content":" teamMembers.forEach(teamMember -\u003e optionList.add(teamMember.getName()));"},{"lineNumber":387,"author":{"gitId":"-"},"content":""},{"lineNumber":388,"author":{"gitId":"-"},"content":" optionList.sort(null);"},{"lineNumber":389,"author":{"gitId":"-"},"content":" }"},{"lineNumber":390,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":391,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":392,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList \u003d"},{"lineNumber":393,"author":{"gitId":"-"},"content":" usersLogic.getInstructorsForCourse(courseId);"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructorList) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" optionList.add(instructor.getName());"},{"lineNumber":397,"author":{"gitId":"-"},"content":" }"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":" optionList.sort(null);"},{"lineNumber":400,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":401,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":402,"author":{"gitId":"-"},"content":" assert false : \"Trying to generate options for neither students, teams nor instructors\";"},{"lineNumber":403,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" if (questionType \u003d\u003d FeedbackQuestionType.MCQ) {"},{"lineNumber":407,"author":{"gitId":"-"},"content":" FeedbackMcqQuestionDetails feedbackMcqQuestionDetails \u003d"},{"lineNumber":408,"author":{"gitId":"-"},"content":" (FeedbackMcqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":409,"author":{"gitId":"-"},"content":" feedbackMcqQuestionDetails.setMcqChoices(optionList);"},{"lineNumber":410,"author":{"gitId":"-"},"content":" ((FeedbackMcqQuestion) feedbackQuestion).setFeedBackQuestionDetails(feedbackMcqQuestionDetails);"},{"lineNumber":411,"author":{"gitId":"-"},"content":" } else if (questionType \u003d\u003d FeedbackQuestionType.MSQ) {"},{"lineNumber":412,"author":{"gitId":"-"},"content":" FeedbackMsqQuestionDetails feedbackMsqQuestionDetails \u003d"},{"lineNumber":413,"author":{"gitId":"-"},"content":" (FeedbackMsqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":414,"author":{"gitId":"-"},"content":" feedbackMsqQuestionDetails.setMsqChoices(optionList);"},{"lineNumber":415,"author":{"gitId":"-"},"content":" ((FeedbackMsqQuestion) feedbackQuestion).setFeedBackQuestionDetails(feedbackMsqQuestionDetails);"},{"lineNumber":416,"author":{"gitId":"-"},"content":" }"},{"lineNumber":417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":418,"author":{"gitId":"-"},"content":""},{"lineNumber":419,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":420,"author":{"gitId":"-"},"content":" * Gets the recipients of a feedback question including recipient section and team."},{"lineNumber":421,"author":{"gitId":"-"},"content":" *"},{"lineNumber":422,"author":{"gitId":"-"},"content":" * @param question the feedback question"},{"lineNumber":423,"author":{"gitId":"-"},"content":" * @param instructorGiver can be null for student giver"},{"lineNumber":424,"author":{"gitId":"-"},"content":" * @param studentGiver can be null for instructor giver"},{"lineNumber":425,"author":{"gitId":"-"},"content":" * @param courseRoster if provided, the function can be completed without touching database"},{"lineNumber":426,"author":{"gitId":"-"},"content":" * @return a Map of {@code FeedbackQuestionRecipient} as the value and identifier as the key."},{"lineNumber":427,"author":{"gitId":"-"},"content":" */"},{"lineNumber":428,"author":{"gitId":"-"},"content":" public Map\u003cString, FeedbackQuestionRecipient\u003e getRecipientsOfQuestion("},{"lineNumber":429,"author":{"gitId":"-"},"content":" FeedbackQuestion question,"},{"lineNumber":430,"author":{"gitId":"-"},"content":" @Nullable Instructor instructorGiver, @Nullable Student studentGiver,"},{"lineNumber":431,"author":{"gitId":"-"},"content":" @Nullable SqlCourseRoster courseRoster) {"},{"lineNumber":432,"author":{"gitId":"-"},"content":" assert instructorGiver !\u003d null || studentGiver !\u003d null;"},{"lineNumber":433,"author":{"gitId":"-"},"content":""},{"lineNumber":434,"author":{"gitId":"-"},"content":" String courseId \u003d question.getCourseId();"},{"lineNumber":435,"author":{"gitId":"-"},"content":""},{"lineNumber":436,"author":{"gitId":"-"},"content":" Map\u003cString, FeedbackQuestionRecipient\u003e recipients \u003d new HashMap\u003c\u003e();"},{"lineNumber":437,"author":{"gitId":"-"},"content":""},{"lineNumber":438,"author":{"gitId":"-"},"content":" boolean isStudentGiver \u003d studentGiver !\u003d null;"},{"lineNumber":439,"author":{"gitId":"-"},"content":" boolean isInstructorGiver \u003d instructorGiver !\u003d null;"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" String giverEmail \u003d \"\";"},{"lineNumber":442,"author":{"gitId":"-"},"content":" String giverTeam \u003d \"\";"},{"lineNumber":443,"author":{"gitId":"-"},"content":" String giverSection \u003d \"\";"},{"lineNumber":444,"author":{"gitId":"-"},"content":" if (isStudentGiver) {"},{"lineNumber":445,"author":{"gitId":"-"},"content":" giverEmail \u003d studentGiver.getEmail();"},{"lineNumber":446,"author":{"gitId":"-"},"content":" giverTeam \u003d studentGiver.getTeamName();"},{"lineNumber":447,"author":{"gitId":"-"},"content":" giverSection \u003d studentGiver.getSectionName();"},{"lineNumber":448,"author":{"gitId":"-"},"content":" } else if (isInstructorGiver) {"},{"lineNumber":449,"author":{"gitId":"-"},"content":" giverEmail \u003d instructorGiver.getEmail();"},{"lineNumber":450,"author":{"gitId":"-"},"content":" giverTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":451,"author":{"gitId":"-"},"content":" giverSection \u003d Const.DEFAULT_SECTION;"},{"lineNumber":452,"author":{"gitId":"-"},"content":" }"},{"lineNumber":453,"author":{"gitId":"-"},"content":""},{"lineNumber":454,"author":{"gitId":"-"},"content":" FeedbackParticipantType recipientType \u003d question.getRecipientType();"},{"lineNumber":455,"author":{"gitId":"-"},"content":" FeedbackParticipantType generateOptionsFor \u003d recipientType;"},{"lineNumber":456,"author":{"gitId":"-"},"content":""},{"lineNumber":457,"author":{"gitId":"-"},"content":" switch (recipientType) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":459,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":460,"author":{"gitId":"-"},"content":" recipients.put(giverTeam,"},{"lineNumber":461,"author":{"gitId":"-"},"content":" new FeedbackQuestionRecipient(giverTeam, giverTeam));"},{"lineNumber":462,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":463,"author":{"gitId":"-"},"content":" recipients.put(giverEmail,"},{"lineNumber":464,"author":{"gitId":"-"},"content":" new FeedbackQuestionRecipient(USER_NAME_FOR_SELF, giverEmail));"},{"lineNumber":465,"author":{"gitId":"-"},"content":" }"},{"lineNumber":466,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":467,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":468,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":469,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":470,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentList;"},{"lineNumber":471,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":472,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.STUDENTS_IN_SAME_SECTION) {"},{"lineNumber":473,"author":{"gitId":"-"},"content":" studentList \u003d usersLogic.getStudentsForSection(giverSection, courseId);"},{"lineNumber":474,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":475,"author":{"gitId":"-"},"content":" studentList \u003d usersLogic.getStudentsForCourse(courseId);"},{"lineNumber":476,"author":{"gitId":"-"},"content":" }"},{"lineNumber":477,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":478,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.STUDENTS_IN_SAME_SECTION) {"},{"lineNumber":479,"author":{"gitId":"-"},"content":" final String finalGiverSection \u003d giverSection;"},{"lineNumber":480,"author":{"gitId":"-"},"content":" studentList \u003d courseRoster.getStudents().stream()"},{"lineNumber":481,"author":{"gitId":"-"},"content":" .filter(studentAttributes -\u003e studentAttributes.getSectionName()"},{"lineNumber":482,"author":{"gitId":"-"},"content":" .equals(finalGiverSection)).collect(Collectors.toList());"},{"lineNumber":483,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":484,"author":{"gitId":"-"},"content":" studentList \u003d courseRoster.getStudents();"},{"lineNumber":485,"author":{"gitId":"-"},"content":" }"},{"lineNumber":486,"author":{"gitId":"-"},"content":" }"},{"lineNumber":487,"author":{"gitId":"-"},"content":" for (Student student : studentList) {"},{"lineNumber":488,"author":{"gitId":"-"},"content":" if (isInstructorGiver \u0026\u0026 !instructorGiver.isAllowedForPrivilege("},{"lineNumber":489,"author":{"gitId":"-"},"content":" student.getSectionName(), question.getFeedbackSession().getName(),"},{"lineNumber":490,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_SUBMIT_SESSION_IN_SECTIONS)) {"},{"lineNumber":491,"author":{"gitId":"-"},"content":" // instructor can only see students in allowed sections for him/her"},{"lineNumber":492,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":493,"author":{"gitId":"-"},"content":" }"},{"lineNumber":494,"author":{"gitId":"-"},"content":" // Ensure student does not evaluate him/herself if it\u0027s STUDENTS_EXCLUDING_SELF or"},{"lineNumber":495,"author":{"gitId":"-"},"content":" // STUDENTS_IN_SAME_SECTION"},{"lineNumber":496,"author":{"gitId":"-"},"content":" if (giverEmail.equals(student.getEmail()) \u0026\u0026 generateOptionsFor !\u003d FeedbackParticipantType.STUDENTS) {"},{"lineNumber":497,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":498,"author":{"gitId":"-"},"content":" }"},{"lineNumber":499,"author":{"gitId":"-"},"content":" recipients.put(student.getEmail(), new FeedbackQuestionRecipient(student.getName(), student.getEmail(),"},{"lineNumber":500,"author":{"gitId":"-"},"content":" student.getSectionName(), student.getTeamName()));"},{"lineNumber":501,"author":{"gitId":"-"},"content":" }"},{"lineNumber":502,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":503,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":504,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsInCourse;"},{"lineNumber":505,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":506,"author":{"gitId":"-"},"content":" instructorsInCourse \u003d usersLogic.getInstructorsForCourse(courseId);"},{"lineNumber":507,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" instructorsInCourse \u003d courseRoster.getInstructors();"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" for (Instructor instr : instructorsInCourse) {"},{"lineNumber":511,"author":{"gitId":"-"},"content":" // remove hidden instructors for students"},{"lineNumber":512,"author":{"gitId":"-"},"content":" if (isStudentGiver \u0026\u0026 !instr.isDisplayedToStudents()) {"},{"lineNumber":513,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":514,"author":{"gitId":"-"},"content":" }"},{"lineNumber":515,"author":{"gitId":"-"},"content":" // Ensure instructor does not evaluate himself"},{"lineNumber":516,"author":{"gitId":"-"},"content":" if (!giverEmail.equals(instr.getEmail())) {"},{"lineNumber":517,"author":{"gitId":"-"},"content":" recipients.put(instr.getEmail(),"},{"lineNumber":518,"author":{"gitId":"-"},"content":" new FeedbackQuestionRecipient(instr.getName(), instr.getEmail()));"},{"lineNumber":519,"author":{"gitId":"-"},"content":" }"},{"lineNumber":520,"author":{"gitId":"-"},"content":" }"},{"lineNumber":521,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":522,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":523,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":524,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":525,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cStudent\u003e\u003e teamToTeamMembersTable;"},{"lineNumber":526,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e teamStudents;"},{"lineNumber":527,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":528,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION) {"},{"lineNumber":529,"author":{"gitId":"-"},"content":" teamStudents \u003d usersLogic.getStudentsForSection(giverSection, courseId);"},{"lineNumber":530,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":531,"author":{"gitId":"-"},"content":" teamStudents \u003d usersLogic.getStudentsForCourse(courseId);"},{"lineNumber":532,"author":{"gitId":"-"},"content":" }"},{"lineNumber":533,"author":{"gitId":"-"},"content":" teamToTeamMembersTable \u003d SqlCourseRoster.buildTeamToMembersTable(teamStudents);"},{"lineNumber":534,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":535,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION) {"},{"lineNumber":536,"author":{"gitId":"-"},"content":" final String finalGiverSection \u003d giverSection;"},{"lineNumber":537,"author":{"gitId":"-"},"content":" teamStudents \u003d courseRoster.getStudents().stream()"},{"lineNumber":538,"author":{"gitId":"-"},"content":" .filter(student -\u003e student.getSectionName().equals(finalGiverSection))"},{"lineNumber":539,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":540,"author":{"gitId":"-"},"content":" teamToTeamMembersTable \u003d SqlCourseRoster.buildTeamToMembersTable(teamStudents);"},{"lineNumber":541,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":542,"author":{"gitId":"-"},"content":" teamToTeamMembersTable \u003d courseRoster.getTeamToMembersTable();"},{"lineNumber":543,"author":{"gitId":"-"},"content":" }"},{"lineNumber":544,"author":{"gitId":"-"},"content":" }"},{"lineNumber":545,"author":{"gitId":"-"},"content":" for (Map.Entry\u003cString, List\u003cStudent\u003e\u003e team : teamToTeamMembersTable.entrySet()) {"},{"lineNumber":546,"author":{"gitId":"-"},"content":" if (isInstructorGiver \u0026\u0026 !instructorGiver.isAllowedForPrivilege("},{"lineNumber":547,"author":{"gitId":"-"},"content":" team.getValue().iterator().next().getSectionName(),"},{"lineNumber":548,"author":{"gitId":"-"},"content":" question.getFeedbackSession().getName(),"},{"lineNumber":549,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_SUBMIT_SESSION_IN_SECTIONS)) {"},{"lineNumber":550,"author":{"gitId":"-"},"content":" // instructor can only see teams in allowed sections for him/her"},{"lineNumber":551,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":552,"author":{"gitId":"-"},"content":" }"},{"lineNumber":553,"author":{"gitId":"-"},"content":" // Ensure student(\u0027s team) does not evaluate own team if it\u0027s TEAMS_EXCLUDING_SELF or"},{"lineNumber":554,"author":{"gitId":"-"},"content":" // TEAMS_IN_SAME_SECTION"},{"lineNumber":555,"author":{"gitId":"-"},"content":" if (giverTeam.equals(team.getKey()) \u0026\u0026 generateOptionsFor !\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":556,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":557,"author":{"gitId":"-"},"content":" }"},{"lineNumber":558,"author":{"gitId":"-"},"content":" // recipientEmail doubles as team name in this case."},{"lineNumber":559,"author":{"gitId":"-"},"content":" recipients.put(team.getKey(), new FeedbackQuestionRecipient(team.getKey(), team.getKey()));"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":562,"author":{"gitId":"-"},"content":" case OWN_TEAM:"},{"lineNumber":563,"author":{"gitId":"-"},"content":" recipients.put(giverTeam, new FeedbackQuestionRecipient(giverTeam, giverTeam));"},{"lineNumber":564,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":565,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":566,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students;"},{"lineNumber":567,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":568,"author":{"gitId":"-"},"content":" students \u003d usersLogic.getStudentsForTeam(giverTeam, courseId);"},{"lineNumber":569,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":570,"author":{"gitId":"-"},"content":" students \u003d courseRoster.getTeamToMembersTable().getOrDefault(giverTeam, Collections.emptyList());"},{"lineNumber":571,"author":{"gitId":"-"},"content":" }"},{"lineNumber":572,"author":{"gitId":"-"},"content":" for (Student student : students) {"},{"lineNumber":573,"author":{"gitId":"-"},"content":" if (!student.getEmail().equals(giverEmail)) {"},{"lineNumber":574,"author":{"gitId":"-"},"content":" recipients.put(student.getEmail(), new FeedbackQuestionRecipient(student.getName(), student.getEmail(),"},{"lineNumber":575,"author":{"gitId":"-"},"content":" student.getSectionName(), student.getTeamName()));"},{"lineNumber":576,"author":{"gitId":"-"},"content":" }"},{"lineNumber":577,"author":{"gitId":"-"},"content":" }"},{"lineNumber":578,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":579,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":580,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e teamMembers;"},{"lineNumber":581,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":582,"author":{"gitId":"-"},"content":" teamMembers \u003d usersLogic.getStudentsForTeam(giverTeam, courseId);"},{"lineNumber":583,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":584,"author":{"gitId":"-"},"content":" teamMembers \u003d courseRoster.getTeamToMembersTable().getOrDefault(giverTeam, Collections.emptyList());"},{"lineNumber":585,"author":{"gitId":"-"},"content":" }"},{"lineNumber":586,"author":{"gitId":"-"},"content":" for (Student student : teamMembers) {"},{"lineNumber":587,"author":{"gitId":"-"},"content":" // accepts self feedback too"},{"lineNumber":588,"author":{"gitId":"-"},"content":" recipients.put(student.getEmail(), new FeedbackQuestionRecipient(student.getName(), student.getEmail(),"},{"lineNumber":589,"author":{"gitId":"-"},"content":" student.getSectionName(), student.getTeamName()));"},{"lineNumber":590,"author":{"gitId":"-"},"content":" }"},{"lineNumber":591,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":592,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":593,"author":{"gitId":"-"},"content":" recipients.put(Const.GENERAL_QUESTION,"},{"lineNumber":594,"author":{"gitId":"-"},"content":" new FeedbackQuestionRecipient(Const.GENERAL_QUESTION, Const.GENERAL_QUESTION));"},{"lineNumber":595,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":596,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":597,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":598,"author":{"gitId":"-"},"content":" }"},{"lineNumber":599,"author":{"gitId":"-"},"content":" return recipients;"},{"lineNumber":600,"author":{"gitId":"-"},"content":" }"},{"lineNumber":601,"author":{"gitId":"-"},"content":""},{"lineNumber":602,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":603,"author":{"gitId":"-"},"content":" * Returns true if a session has question in a specific giverType."},{"lineNumber":604,"author":{"gitId":"-"},"content":" */"},{"lineNumber":605,"author":{"gitId":"-"},"content":" public boolean sessionHasQuestionsForGiverType("},{"lineNumber":606,"author":{"gitId":"-"},"content":" String feedbackSessionName, String courseId, FeedbackParticipantType giverType) {"},{"lineNumber":607,"author":{"gitId":"-"},"content":" return fqDb.hasFeedbackQuestionsForGiverType(feedbackSessionName, courseId, giverType);"},{"lineNumber":608,"author":{"gitId":"-"},"content":" }"},{"lineNumber":609,"author":{"gitId":"-"},"content":""},{"lineNumber":610,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":611,"author":{"gitId":"-"},"content":" * Returns true if a session has question in either STUDENTS type or TEAMS type."},{"lineNumber":612,"author":{"gitId":"-"},"content":" */"},{"lineNumber":613,"author":{"gitId":"-"},"content":" public boolean sessionHasQuestionsForStudent(String feedbackSessionName, String courseId) {"},{"lineNumber":614,"author":{"gitId":"-"},"content":" return fqDb.hasFeedbackQuestionsForGiverType(feedbackSessionName, courseId, FeedbackParticipantType.STUDENTS)"},{"lineNumber":615,"author":{"gitId":"-"},"content":" || fqDb.hasFeedbackQuestionsForGiverType(feedbackSessionName, courseId, FeedbackParticipantType.TEAMS);"},{"lineNumber":616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":619,"author":{"gitId":"-"},"content":" * Deletes a feedback question cascade its responses and comments."},{"lineNumber":620,"author":{"gitId":"-"},"content":" *"},{"lineNumber":621,"author":{"gitId":"-"},"content":" * \u003cp\u003eSilently fail if question does not exist."},{"lineNumber":622,"author":{"gitId":"-"},"content":" */"},{"lineNumber":623,"author":{"gitId":"-"},"content":" public void deleteFeedbackQuestionCascade(UUID feedbackQuestionId) {"},{"lineNumber":624,"author":{"gitId":"-"},"content":" fqDb.deleteFeedbackQuestion(feedbackQuestionId);"},{"lineNumber":625,"author":{"gitId":"-"},"content":" }"},{"lineNumber":626,"author":{"gitId":"-"},"content":""},{"lineNumber":627,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":628,"author":{"gitId":"-"},"content":" * Filters the feedback questions in a course, with specified question type."},{"lineNumber":629,"author":{"gitId":"-"},"content":" * @param courseId the course to search from"},{"lineNumber":630,"author":{"gitId":"-"},"content":" * @param questionType the question type to search on"},{"lineNumber":631,"author":{"gitId":"-"},"content":" * @return a list of filtered questions"},{"lineNumber":632,"author":{"gitId":"-"},"content":" */"},{"lineNumber":633,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionForCourseWithType("},{"lineNumber":634,"author":{"gitId":"-"},"content":" String courseId, FeedbackQuestionType questionType) {"},{"lineNumber":635,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e feedbackSessions \u003d feedbackSessionsLogic.getFeedbackSessionsForCourse(courseId);"},{"lineNumber":636,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e feedbackQuestions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":637,"author":{"gitId":"-"},"content":""},{"lineNumber":638,"author":{"gitId":"-"},"content":" for (FeedbackSession session : feedbackSessions) {"},{"lineNumber":639,"author":{"gitId":"-"},"content":" feedbackQuestions.addAll(getFeedbackQuestionsForSession(session));"},{"lineNumber":640,"author":{"gitId":"-"},"content":" }"},{"lineNumber":641,"author":{"gitId":"-"},"content":""},{"lineNumber":642,"author":{"gitId":"-"},"content":" return feedbackQuestions"},{"lineNumber":643,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":644,"author":{"gitId":"-"},"content":" .filter(q -\u003e q.getQuestionDetailsCopy().getQuestionType().equals(questionType))"},{"lineNumber":645,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":646,"author":{"gitId":"-"},"content":" }"},{"lineNumber":647,"author":{"gitId":"-"},"content":""},{"lineNumber":648,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":649,"author":{"gitId":"xenosf"},"content":" * Builds a complete giver to recipient map for a {@code relatedQuestion}."},{"lineNumber":650,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":651,"author":{"gitId":"xenosf"},"content":" * @param relatedQuestion The question to be considered"},{"lineNumber":652,"author":{"gitId":"xenosf"},"content":" * @param courseRoster the roster in the course"},{"lineNumber":653,"author":{"gitId":"xenosf"},"content":" * @return a map from giver to recipient for the question."},{"lineNumber":654,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":655,"author":{"gitId":"xenosf"},"content":" public Map\u003cString, Set\u003cString\u003e\u003e buildCompleteGiverRecipientMap("},{"lineNumber":656,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion, SqlCourseRoster courseRoster) {"},{"lineNumber":657,"author":{"gitId":"xenosf"},"content":" Map\u003cString, Set\u003cString\u003e\u003e completeGiverRecipientMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":658,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":659,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e possibleGiverEmails \u003d getPossibleGivers(relatedQuestion, courseRoster);"},{"lineNumber":660,"author":{"gitId":"xenosf"},"content":" for (String possibleGiverEmail : possibleGiverEmails) {"},{"lineNumber":661,"author":{"gitId":"xenosf"},"content":" switch (relatedQuestion.getGiverType()) {"},{"lineNumber":662,"author":{"gitId":"xenosf"},"content":" case STUDENTS:"},{"lineNumber":663,"author":{"gitId":"xenosf"},"content":" Student studentGiver \u003d courseRoster.getStudentForEmail(possibleGiverEmail);"},{"lineNumber":664,"author":{"gitId":"xenosf"},"content":" completeGiverRecipientMap"},{"lineNumber":665,"author":{"gitId":"xenosf"},"content":" .computeIfAbsent(possibleGiverEmail, key -\u003e new HashSet\u003c\u003e())"},{"lineNumber":666,"author":{"gitId":"xenosf"},"content":" .addAll(getRecipientsOfQuestion("},{"lineNumber":667,"author":{"gitId":"xenosf"},"content":" relatedQuestion, null, studentGiver, courseRoster).keySet());"},{"lineNumber":668,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":669,"author":{"gitId":"xenosf"},"content":" case TEAMS:"},{"lineNumber":670,"author":{"gitId":"xenosf"},"content":" Student oneTeamMember \u003d"},{"lineNumber":671,"author":{"gitId":"xenosf"},"content":" courseRoster.getTeamToMembersTable().get(possibleGiverEmail).iterator().next();"},{"lineNumber":672,"author":{"gitId":"xenosf"},"content":" completeGiverRecipientMap"},{"lineNumber":673,"author":{"gitId":"xenosf"},"content":" .computeIfAbsent(possibleGiverEmail, key -\u003e new HashSet\u003c\u003e())"},{"lineNumber":674,"author":{"gitId":"xenosf"},"content":" .addAll(getRecipientsOfQuestion("},{"lineNumber":675,"author":{"gitId":"xenosf"},"content":" relatedQuestion, null, oneTeamMember, courseRoster).keySet());"},{"lineNumber":676,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":677,"author":{"gitId":"xenosf"},"content":" case INSTRUCTORS:"},{"lineNumber":678,"author":{"gitId":"xenosf"},"content":" case SELF:"},{"lineNumber":679,"author":{"gitId":"xenosf"},"content":" Instructor instructorGiver \u003d courseRoster.getInstructorForEmail(possibleGiverEmail);"},{"lineNumber":680,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":681,"author":{"gitId":"xenosf"},"content":" // only happens when a session creator quits their course"},{"lineNumber":682,"author":{"gitId":"xenosf"},"content":" if (instructorGiver \u003d\u003d null) {"},{"lineNumber":683,"author":{"gitId":"xenosf"},"content":" instructorGiver \u003d new Instructor("},{"lineNumber":684,"author":{"gitId":"xenosf"},"content":" relatedQuestion.getCourse(),"},{"lineNumber":685,"author":{"gitId":"xenosf"},"content":" USER_NAME_FOR_SELF,"},{"lineNumber":686,"author":{"gitId":"xenosf"},"content":" possibleGiverEmail,"},{"lineNumber":687,"author":{"gitId":"xenosf"},"content":" false,"},{"lineNumber":688,"author":{"gitId":"xenosf"},"content":" USER_NAME_FOR_SELF,"},{"lineNumber":689,"author":{"gitId":"xenosf"},"content":" null,"},{"lineNumber":690,"author":{"gitId":"xenosf"},"content":" null"},{"lineNumber":691,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":692,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":693,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":694,"author":{"gitId":"xenosf"},"content":" completeGiverRecipientMap"},{"lineNumber":695,"author":{"gitId":"xenosf"},"content":" .computeIfAbsent(possibleGiverEmail, key -\u003e new HashSet\u003c\u003e())"},{"lineNumber":696,"author":{"gitId":"xenosf"},"content":" .addAll(getRecipientsOfQuestion("},{"lineNumber":697,"author":{"gitId":"xenosf"},"content":" relatedQuestion, instructorGiver, null, courseRoster).keySet());"},{"lineNumber":698,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":699,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":700,"author":{"gitId":"xenosf"},"content":" log.severe(\"Invalid giver type specified\");"},{"lineNumber":701,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":702,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":703,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":704,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":705,"author":{"gitId":"xenosf"},"content":" return completeGiverRecipientMap;"},{"lineNumber":706,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":707,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":708,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":709,"author":{"gitId":"xenosf"},"content":" * Gets possible giver identifiers for a feedback question."},{"lineNumber":710,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":711,"author":{"gitId":"xenosf"},"content":" * @param fq the feedback question"},{"lineNumber":712,"author":{"gitId":"xenosf"},"content":" * @param courseRoster roster of all students and instructors"},{"lineNumber":713,"author":{"gitId":"xenosf"},"content":" * @return a list of giver identifier"},{"lineNumber":714,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":715,"author":{"gitId":"xenosf"},"content":" private List\u003cString\u003e getPossibleGivers("},{"lineNumber":716,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq, SqlCourseRoster courseRoster) {"},{"lineNumber":717,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType giverType \u003d fq.getGiverType();"},{"lineNumber":718,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e possibleGivers \u003d new ArrayList\u003c\u003e();"},{"lineNumber":719,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":720,"author":{"gitId":"xenosf"},"content":" switch (giverType) {"},{"lineNumber":721,"author":{"gitId":"xenosf"},"content":" case STUDENTS:"},{"lineNumber":722,"author":{"gitId":"xenosf"},"content":" possibleGivers \u003d courseRoster.getStudents()"},{"lineNumber":723,"author":{"gitId":"xenosf"},"content":" .stream()"},{"lineNumber":724,"author":{"gitId":"xenosf"},"content":" .map(Student::getEmail)"},{"lineNumber":725,"author":{"gitId":"xenosf"},"content":" .collect(Collectors.toList());"},{"lineNumber":726,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":727,"author":{"gitId":"xenosf"},"content":" case INSTRUCTORS:"},{"lineNumber":728,"author":{"gitId":"xenosf"},"content":" possibleGivers \u003d courseRoster.getInstructors()"},{"lineNumber":729,"author":{"gitId":"xenosf"},"content":" .stream()"},{"lineNumber":730,"author":{"gitId":"xenosf"},"content":" .map(Instructor::getEmail)"},{"lineNumber":731,"author":{"gitId":"xenosf"},"content":" .collect(Collectors.toList());"},{"lineNumber":732,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":733,"author":{"gitId":"xenosf"},"content":" case TEAMS:"},{"lineNumber":734,"author":{"gitId":"xenosf"},"content":" possibleGivers \u003d new ArrayList\u003c\u003e(courseRoster.getTeamToMembersTable().keySet());"},{"lineNumber":735,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":736,"author":{"gitId":"xenosf"},"content":" case SELF:"},{"lineNumber":737,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d"},{"lineNumber":738,"author":{"gitId":"xenosf"},"content":" feedbackSessionsLogic.getFeedbackSession(fq.getFeedbackSessionName(), fq.getCourseId());"},{"lineNumber":739,"author":{"gitId":"xenosf"},"content":" possibleGivers \u003d Collections.singletonList(feedbackSession.getCreatorEmail());"},{"lineNumber":740,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":741,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":742,"author":{"gitId":"xenosf"},"content":" log.severe(\"Invalid giver type specified\");"},{"lineNumber":743,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":744,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":745,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":746,"author":{"gitId":"xenosf"},"content":" return possibleGivers;"},{"lineNumber":747,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":748,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":749,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":6,"xenosf":101,"dishenggg":2,"-":640}},{"path":"src/main/java/teammates/sqllogic/core/FeedbackResponseCommentsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import javax.annotation.Nullable;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackResponseCommentUpdateRequest;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Handles operations related to feedback response comments."},{"lineNumber":23,"author":{"gitId":"-"},"content":" *"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * @see FeedbackResponseComment"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * @see FeedbackResponseCommentsDb"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public final class FeedbackResponseCommentsLogic {"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final FeedbackResponseCommentsLogic instance \u003d new FeedbackResponseCommentsLogic();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsDb frcDb;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsLogic() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static FeedbackResponseCommentsLogic inst() {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Initialize dependencies for {@code FeedbackResponseCommentsLogic}."},{"lineNumber":42,"author":{"gitId":"-"},"content":" */"},{"lineNumber":43,"author":{"gitId":"-"},"content":" void initLogicDependencies(FeedbackResponseCommentsDb frcDb) {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.frcDb \u003d frcDb;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Gets an feedback response comment by feedback response comment id."},{"lineNumber":49,"author":{"gitId":"-"},"content":" * @param id of feedback response comment."},{"lineNumber":50,"author":{"gitId":"-"},"content":" * @return the specified feedback response comment."},{"lineNumber":51,"author":{"gitId":"-"},"content":" */"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseComment(Long id) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return frcDb.getFeedbackResponseComment(id);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback response comments for a response."},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentForResponse(UUID feedbackResponseId) {"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" return frcDb.getFeedbackResponseCommentsForResponse(feedbackResponseId);"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" * Gets all response comments for a response."},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForResponse(UUID feedbackResponseId) {"},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" assert feedbackResponseId !\u003d null;"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" return frcDb.getFeedbackResponseCommentsForResponse(feedbackResponseId);"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Gets the comment associated with the response."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseCommentForResponseFromParticipant("},{"lineNumber":76,"author":{"gitId":"-"},"content":" UUID feedbackResponseId) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return frcDb.getFeedbackResponseCommentForResponseFromParticipant(feedbackResponseId);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Creates a feedback response comment."},{"lineNumber":82,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the comment alreadty exists"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the comment is invalid"},{"lineNumber":84,"author":{"gitId":"-"},"content":" */"},{"lineNumber":85,"author":{"gitId":"-"},"content":" public FeedbackResponseComment createFeedbackResponseComment(FeedbackResponseComment frc)"},{"lineNumber":86,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return frcDb.createFeedbackResponseComment(frc);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Deletes a feedbackResponseComment."},{"lineNumber":92,"author":{"gitId":"-"},"content":" */"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponseComment(Long frcId) {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" frcDb.deleteFeedbackResponseComment(frcId);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Updates a feedback response comment by {@link FeedbackResponseComment}."},{"lineNumber":99,"author":{"gitId":"-"},"content":" *"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * @return updated comment"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment cannot be found"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public FeedbackResponseComment updateFeedbackResponseComment(FeedbackResponseComment feedbackResponseComment)"},{"lineNumber":105,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" return frcDb.updateFeedbackResponseComment(feedbackResponseComment);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Updates a feedback response comment."},{"lineNumber":112,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment does not exist"},{"lineNumber":113,"author":{"gitId":"-"},"content":" */"},{"lineNumber":114,"author":{"gitId":"-"},"content":" public FeedbackResponseComment updateFeedbackResponseComment(Long frcId,"},{"lineNumber":115,"author":{"gitId":"-"},"content":" FeedbackResponseCommentUpdateRequest updateRequest, String updaterEmail)"},{"lineNumber":116,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" FeedbackResponseComment comment \u003d frcDb.getFeedbackResponseComment(frcId);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" if (comment \u003d\u003d null) {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to update a feedback response comment that does not exist.\");"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" comment.setCommentText(updateRequest.getCommentText());"},{"lineNumber":123,"author":{"gitId":"-"},"content":" comment.setShowCommentTo(updateRequest.getShowCommentTo());"},{"lineNumber":124,"author":{"gitId":"-"},"content":" comment.setShowGiverNameTo(updateRequest.getShowGiverNameTo());"},{"lineNumber":125,"author":{"gitId":"-"},"content":" comment.setLastEditorEmail(updaterEmail);"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" return comment;"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" * Updates all feedback response comments with new emails."},{"lineNumber":132,"author":{"gitId":"-"},"content":" */"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void updateFeedbackResponseCommentsEmails(String courseId, String oldEmail, String updatedEmail) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" frcDb.updateGiverEmailOfFeedbackResponseComments(courseId, oldEmail, updatedEmail);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" frcDb.updateLastEditorEmailOfFeedbackResponseComments(courseId, oldEmail, updatedEmail);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":" * Updates all feedback response comments with new sections."},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" public void updateFeedbackResponseCommentsForResponse(FeedbackResponse response)"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponseComment\u003e comments \u003d getFeedbackResponseCommentForResponse(response.getId());"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponseComment comment : comments) {"},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" comment.setGiverSection(response.getGiverSection());"},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" comment.setRecipientSection(response.getRecipientSection());"},{"lineNumber":147,"author":{"gitId":"domoberzin"},"content":" frcDb.updateFeedbackResponseComment(comment);"},{"lineNumber":148,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" * Gets all feedback response comments for session in a section."},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" * @param courseId the course ID of the feedback session"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" * @param feedbackSessionName the feedback session name"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" * @param sectionName if null, will retrieve all comments in the session"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" * @return a list of feedback response comments"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentForSessionInSection("},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, @Nullable String sectionName) {"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" if (sectionName \u003d\u003d null) {"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" return frcDb.getFeedbackResponseCommentsForSession(courseId, feedbackSessionName);"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" return frcDb.getFeedbackResponseCommentsForSessionInSection(courseId, feedbackSessionName, sectionName);"},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" * Gets all feedback response comments for a question in a section."},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" * @param questionId the ID of the question"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" * @param sectionName if null, will retrieve all comments for the question"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" * @return a list of feedback response comments"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentForQuestionInSection("},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" UUID questionId, @Nullable String sectionName) {"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" if (sectionName \u003d\u003d null) {"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" return frcDb.getFeedbackResponseCommentsForQuestion(questionId);"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" return frcDb.getFeedbackResponseCommentsForQuestionInSection(questionId, sectionName);"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" * Verifies whether the comment is visible to certain user."},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" * @return true/false"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" public boolean checkIsResponseCommentVisibleForUser(String userEmail, boolean isInstructor,"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" Student student, Set\u003cString\u003e studentsEmailInTeam, FeedbackResponse response,"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion, FeedbackResponseComment relatedComment) {"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" if (response \u003d\u003d null || relatedQuestion \u003d\u003d null) {"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" boolean isVisibilityFollowingFeedbackQuestion \u003d relatedComment.getIsVisibilityFollowingFeedbackQuestion();"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" boolean isVisibleToGiver \u003d isVisibilityFollowingFeedbackQuestion"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" || relatedComment.checkIsVisibleTo(FeedbackParticipantType.GIVER);"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" boolean isVisibleToUser \u003d checkIsVisibleToUser(userEmail, response, relatedQuestion, relatedComment,"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" isVisibleToGiver, isInstructor, !isInstructor);"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" boolean isVisibleToUserTeam \u003d checkIsVisibleToUserTeam(student, studentsEmailInTeam, response,"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" relatedQuestion, relatedComment, !isInstructor);"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" return isVisibleToUser || isVisibleToUserTeam;"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" private boolean checkIsVisibleToUserTeam(Student student, Set\u003cString\u003e studentsEmailInTeam,"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response, FeedbackQuestion relatedQuestion,"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment relatedComment, boolean isUserStudent) {"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" boolean isUserInResponseRecipientTeamAndRelatedResponseCommentVisibleToRecipients \u003d"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" isUserStudent"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 relatedQuestion.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 checkIsResponseCommentVisibleTo(relatedQuestion, relatedComment,"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType.RECEIVER)"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 response.getRecipient().equals(student.getTeamName());"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" boolean isUserInResponseGiverTeamAndRelatedResponseCommentVisibleToGiversTeamMembers \u003d"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" (relatedQuestion.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" || checkIsResponseCommentVisibleTo(relatedQuestion, relatedComment,"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType.OWN_TEAM_MEMBERS))"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (studentsEmailInTeam.contains(response.getGiver())"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" || isUserStudent \u0026\u0026 student.getTeamName().equals(response.getGiver()));"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" boolean isUserInResponseRecipientTeamAndRelatedResponseCommentVisibleToRecipientsTeamMembers \u003d"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" checkIsResponseCommentVisibleTo(relatedQuestion, relatedComment,"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType.RECEIVER_TEAM_MEMBERS)"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 studentsEmailInTeam.contains(response.getRecipient());"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" return isUserInResponseRecipientTeamAndRelatedResponseCommentVisibleToRecipients"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" || isUserInResponseGiverTeamAndRelatedResponseCommentVisibleToGiversTeamMembers"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":" || isUserInResponseRecipientTeamAndRelatedResponseCommentVisibleToRecipientsTeamMembers;"},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":" private boolean checkIsVisibleToUser(String userEmail, FeedbackResponse response,"},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion, FeedbackResponseComment relatedComment,"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" boolean isVisibleToGiver, boolean isUserInstructor, boolean isUserStudent) {"},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" boolean isUserInstructorAndRelatedResponseCommentVisibleToInstructors \u003d"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" isUserInstructor \u0026\u0026 checkIsResponseCommentVisibleTo(relatedQuestion, relatedComment,"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" boolean isUserResponseRecipientAndRelatedResponseCommentVisibleToRecipients \u003d"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" response.getRecipient().equals(userEmail) \u0026\u0026 checkIsResponseCommentVisibleTo(relatedQuestion,"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" relatedComment, FeedbackParticipantType.RECEIVER);"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" boolean isUserResponseGiverAndRelatedResponseCommentVisibleToGivers \u003d"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" response.getGiver().equals(userEmail) \u0026\u0026 isVisibleToGiver;"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" boolean isUserRelatedResponseCommentGiver \u003d relatedComment.getGiver().equals(userEmail);"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" boolean isUserStudentAndRelatedResponseCommentVisibleToStudents \u003d"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" isUserStudent \u0026\u0026 checkIsResponseCommentVisibleTo(relatedQuestion,"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" relatedComment, FeedbackParticipantType.STUDENTS);"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" return isUserInstructorAndRelatedResponseCommentVisibleToInstructors"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" || isUserResponseRecipientAndRelatedResponseCommentVisibleToRecipients"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" || isUserResponseGiverAndRelatedResponseCommentVisibleToGivers"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" || isUserRelatedResponseCommentGiver"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" || isUserStudentAndRelatedResponseCommentVisibleToStudents;"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" private boolean checkIsResponseCommentVisibleTo(FeedbackQuestion relatedQuestion,"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment relatedComment,"},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType viewerType) {"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" boolean isVisibilityFollowingFeedbackQuestion \u003d relatedComment.getIsVisibilityFollowingFeedbackQuestion();"},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" return isVisibilityFollowingFeedbackQuestion"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" ? relatedQuestion.isResponseVisibleTo(viewerType)"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" : relatedComment.checkIsVisibleTo(viewerType);"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" * Returns true if the comment\u0027s giver name is visible to certain user."},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" public boolean checkIsNameVisibleToUser(FeedbackResponseComment comment, FeedbackResponse response,"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" String userEmail, SqlCourseRoster roster) {"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackParticipantType\u003e showNameTo \u003d comment.getShowGiverNameTo();"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" //in the old ver, name is always visible"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" if (showNameTo \u003d\u003d null || comment.getIsVisibilityFollowingFeedbackQuestion()) {"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":" //comment giver can always see"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" if (userEmail.equals(comment.getGiver())) {"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" return checkIsFeedbackParticipantNameVisibleToUser(response, userEmail, roster, showNameTo);"},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" private boolean checkIsFeedbackParticipantNameVisibleToUser(FeedbackResponse response,"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" String userEmail, SqlCourseRoster roster, List\u003cFeedbackParticipantType\u003e showNameTo) {"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" String responseGiverTeam \u003d \"giverTeam\";"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" if (roster.getStudentForEmail(response.getGiver()) !\u003d null) {"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" responseGiverTeam \u003d roster.getStudentForEmail(response.getGiver()).getTeamName();"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" String responseRecipientTeam \u003d \"recipientTeam\";"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" if (roster.getStudentForEmail(response.getRecipient()) !\u003d null) {"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" responseRecipientTeam \u003d roster.getStudentForEmail(response.getRecipient()).getTeamName();"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" String currentUserTeam \u003d \"currentUserTeam\";"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" if (roster.getStudentForEmail(userEmail) !\u003d null) {"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" currentUserTeam \u003d roster.getStudentForEmail(userEmail).getTeamName();"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" for (FeedbackParticipantType type : showNameTo) {"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" switch (type) {"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" case INSTRUCTORS:"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" if (roster.getInstructorForEmail(userEmail) !\u003d null) {"},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" if (responseGiverTeam.equals(currentUserTeam)) {"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" case RECEIVER:"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" if (userEmail.equals(response.getRecipient())) {"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":" case RECEIVER_TEAM_MEMBERS:"},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" if (responseRecipientTeam.equals(currentUserTeam)) {"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" case STUDENTS:"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" if (roster.getStudentForEmail(userEmail) !\u003d null) {"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" case GIVER:"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":" if (userEmail.equals(response.getGiver())) {"},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":343,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":32,"xenosf":199,"-":112}},{"path":"src/main/java/teammates/sqllogic/core/FeedbackResponsesLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.Collections;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.HashMap;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import javax.annotation.Nullable;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionType;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankRecipientsResponseDetails;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.RequestTracer;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponsesDb;"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.responses.FeedbackMissingResponse;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackRankRecipientsResponse;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" * Handles operations related to feedback responses."},{"lineNumber":40,"author":{"gitId":"-"},"content":" *"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * @see FeedbackResponse"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * @see FeedbackResponsesDb"},{"lineNumber":43,"author":{"gitId":"-"},"content":" */"},{"lineNumber":44,"author":{"gitId":"-"},"content":"public final class FeedbackResponsesLogic {"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" private static final FeedbackResponsesLogic instance \u003d new FeedbackResponsesLogic();"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" private FeedbackResponsesDb frDb;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic;"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" private FeedbackResponseCommentsLogic frcLogic;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static FeedbackResponsesLogic inst() {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":62,"author":{"gitId":"-"},"content":" * Initialize dependencies for {@code FeedbackResponsesLogic}."},{"lineNumber":63,"author":{"gitId":"-"},"content":" */"},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" void initLogicDependencies(FeedbackResponsesDb frDb,"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" UsersLogic usersLogic, FeedbackQuestionsLogic fqLogic, FeedbackResponseCommentsLogic frcLogic) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.frDb \u003d frDb;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" this.fqLogic \u003d fqLogic;"},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" this.frcLogic \u003d frcLogic;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Gets a feedbackResponse or null if it does not exist."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public FeedbackResponse getFeedbackResponse(UUID frId) {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponse(frId);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * Returns true if the responses of the question are visible to students."},{"lineNumber":81,"author":{"gitId":"-"},"content":" */"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public boolean isResponseOfFeedbackQuestionVisibleToStudent(FeedbackQuestion question) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" if (question.isResponseVisibleTo(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":" boolean isStudentRecipientType \u003d"},{"lineNumber":87,"author":{"gitId":"-"},"content":" question.getRecipientType().equals(FeedbackParticipantType.STUDENTS)"},{"lineNumber":88,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF)"},{"lineNumber":89,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.STUDENTS_IN_SAME_SECTION)"},{"lineNumber":90,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.OWN_TEAM_MEMBERS)"},{"lineNumber":91,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.OWN_TEAM_MEMBERS_INCLUDING_SELF)"},{"lineNumber":92,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.GIVER)"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getGiverType().equals(FeedbackParticipantType.STUDENTS);"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" if ((isStudentRecipientType || question.getRecipientType().isTeam())"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u0026\u0026 question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)) {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":100,"author":{"gitId":"-"},"content":" || question.isResponseVisibleTo(FeedbackParticipantType.OWN_TEAM_MEMBERS)) {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Returns true if the responses of the question are visible to instructors."},{"lineNumber":108,"author":{"gitId":"-"},"content":" */"},{"lineNumber":109,"author":{"gitId":"-"},"content":" public boolean isResponseOfFeedbackQuestionVisibleToInstructor(FeedbackQuestion question) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return question.isResponseVisibleTo(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Checks whether a giver has responded a session."},{"lineNumber":115,"author":{"gitId":"-"},"content":" */"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public boolean hasGiverRespondedForSession(String giverIdentifier, List\u003cFeedbackQuestion\u003e questions) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assert questions !\u003d null;"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" boolean hasResponse \u003d question"},{"lineNumber":121,"author":{"gitId":"-"},"content":" .getFeedbackResponses()"},{"lineNumber":122,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .anyMatch(response -\u003e response.getGiver().equals(giverIdentifier));"},{"lineNumber":124,"author":{"gitId":"-"},"content":" if (hasResponse) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Checks whether a giver has responded a session."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public boolean hasGiverRespondedForSession(String giver, String feedbackSessionName, String courseId) {"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" return frDb.hasResponsesFromGiverInSession(giver, feedbackSessionName, courseId);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Creates a feedback response."},{"lineNumber":142,"author":{"gitId":"-"},"content":" * @return the created response"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the response is not valid"},{"lineNumber":144,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the response already exist"},{"lineNumber":145,"author":{"gitId":"-"},"content":" */"},{"lineNumber":146,"author":{"gitId":"-"},"content":" public FeedbackResponse createFeedbackResponse(FeedbackResponse feedbackResponse)"},{"lineNumber":147,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" return frDb.createFeedbackResponse(feedbackResponse);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":152,"author":{"gitId":"-"},"content":" * Get existing feedback responses from instructor for the given question."},{"lineNumber":153,"author":{"gitId":"-"},"content":" */"},{"lineNumber":154,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromInstructorForQuestion("},{"lineNumber":155,"author":{"gitId":"-"},"content":" FeedbackQuestion question, Instructor instructor) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":157,"author":{"gitId":"-"},"content":" question.getId(), instructor.getEmail());"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * Get existing feedback responses from student or his team for the given"},{"lineNumber":162,"author":{"gitId":"-"},"content":" * question."},{"lineNumber":163,"author":{"gitId":"-"},"content":" */"},{"lineNumber":164,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromStudentOrTeamForQuestion("},{"lineNumber":165,"author":{"gitId":"-"},"content":" FeedbackQuestion question, Student student) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return getFeedbackResponsesFromTeamForQuestion("},{"lineNumber":168,"author":{"gitId":"-"},"content":" question.getId(), question.getCourseId(), student.getTeamName(), null);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesFromGiverForQuestion(question.getId(), student.getEmail());"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponse\u003e getFeedbackResponsesFromTeamForQuestion("},{"lineNumber":174,"author":{"gitId":"-"},"content":" UUID feedbackQuestionId, String courseId, String teamName, @Nullable SqlCourseRoster courseRoster) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":177,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsInTeam \u003d courseRoster \u003d\u003d null"},{"lineNumber":178,"author":{"gitId":"-"},"content":" ? usersLogic.getStudentsForTeam(teamName, courseId) : courseRoster.getTeamToMembersTable().get(teamName);"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" for (Student student : studentsInTeam) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" responses.addAll(frDb.getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":182,"author":{"gitId":"-"},"content":" feedbackQuestionId, student.getEmail()));"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" responses.addAll(frDb.getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":186,"author":{"gitId":"-"},"content":" feedbackQuestionId, teamName));"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return responses;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":191,"author":{"gitId":"-"},"content":" * Updates a non-null feedback response by {@link FeedbackResponse}."},{"lineNumber":192,"author":{"gitId":"-"},"content":" *"},{"lineNumber":193,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade updates its associated feedback response comment"},{"lineNumber":194,"author":{"gitId":"-"},"content":" * (e.g. associated response ID, giverSection and recipientSection)."},{"lineNumber":195,"author":{"gitId":"-"},"content":" *"},{"lineNumber":196,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf the giver/recipient field is changed, the response is updated by recreating the response"},{"lineNumber":197,"author":{"gitId":"-"},"content":" * as question-giver-recipient is the primary key."},{"lineNumber":198,"author":{"gitId":"-"},"content":" *"},{"lineNumber":199,"author":{"gitId":"-"},"content":" * @return updated feedback response"},{"lineNumber":200,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":201,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment cannot be found"},{"lineNumber":202,"author":{"gitId":"-"},"content":" */"},{"lineNumber":203,"author":{"gitId":"-"},"content":" public FeedbackResponse updateFeedbackResponseCascade(FeedbackResponse feedbackResponse)"},{"lineNumber":204,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" FeedbackResponse oldResponse \u003d frDb.getFeedbackResponse(feedbackResponse.getId());"},{"lineNumber":207,"author":{"gitId":"-"},"content":" FeedbackResponse newResponse \u003d frDb.updateFeedbackResponse(feedbackResponse);"},{"lineNumber":208,"author":{"gitId":"-"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":" boolean isGiverSectionChanged \u003d !oldResponse.getGiverSection().equals(newResponse.getGiverSection());"},{"lineNumber":210,"author":{"gitId":"-"},"content":" boolean isRecipientSectionChanged \u003d !oldResponse.getRecipientSection().equals(newResponse.getRecipientSection());"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" if (isGiverSectionChanged || isRecipientSectionChanged) {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseComment\u003e oldResponseComments \u003d"},{"lineNumber":214,"author":{"gitId":"-"},"content":" frcLogic.getFeedbackResponseCommentForResponse(oldResponse.getId());"},{"lineNumber":215,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment oldResponseComment : oldResponseComments) {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" if (isGiverSectionChanged) {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" oldResponseComment.setGiverSection(newResponse.getGiverSection());"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" if (isRecipientSectionChanged) {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" oldResponseComment.setRecipientSection(newResponse.getRecipientSection());"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":" frcLogic.updateFeedbackResponseComment(oldResponseComment);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" }"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":" return newResponse;"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":233,"author":{"gitId":"-"},"content":" * Deletes a feedback response cascade its associated feedback response comments."},{"lineNumber":234,"author":{"gitId":"-"},"content":" * Implicitly makes use of CascadeType.REMOVE."},{"lineNumber":235,"author":{"gitId":"-"},"content":" */"},{"lineNumber":236,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesAndCommentsCascade(FeedbackResponse feedbackResponse) {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponse(feedbackResponse);"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":241,"author":{"gitId":"-"},"content":" * Deletes all feedback responses of a question cascade its associated comments."},{"lineNumber":242,"author":{"gitId":"-"},"content":" */"},{"lineNumber":243,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesForQuestionCascade(UUID feedbackQuestionId) {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" // delete all responses, comments of the question"},{"lineNumber":245,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponsesForQuestionCascade(feedbackQuestionId);"},{"lineNumber":246,"author":{"gitId":"-"},"content":" }"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a question."},{"lineNumber":250,"author":{"gitId":"-"},"content":" */"},{"lineNumber":251,"author":{"gitId":"-"},"content":" public boolean areThereResponsesForQuestion(UUID questionId) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" return frDb.areThereResponsesForQuestion(questionId);"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":""},{"lineNumber":255,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":256,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a course."},{"lineNumber":257,"author":{"gitId":"-"},"content":" */"},{"lineNumber":258,"author":{"gitId":"-"},"content":" public boolean hasResponsesForCourse(String courseId) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" return frDb.hasResponsesForCourse(courseId);"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":264,"author":{"gitId":"-"},"content":" * Deletes all feedback responses involved an entity, cascade its associated comments."},{"lineNumber":265,"author":{"gitId":"-"},"content":" * Deletion will automatically be cascaded to each feedback response\u0027s comments,"},{"lineNumber":266,"author":{"gitId":"-"},"content":" * handled by Hibernate using the OnDelete annotation."},{"lineNumber":267,"author":{"gitId":"-"},"content":" */"},{"lineNumber":268,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesForCourseCascade(String courseId, String entityEmail) {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" // delete responses from the entity"},{"lineNumber":270,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responsesFromStudent \u003d"},{"lineNumber":271,"author":{"gitId":"-"},"content":" getFeedbackResponsesFromGiverForCourse(courseId, entityEmail);"},{"lineNumber":272,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responsesFromStudent) {"},{"lineNumber":273,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponse(response);"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" // delete responses to the entity"},{"lineNumber":277,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responsesToStudent \u003d"},{"lineNumber":278,"author":{"gitId":"-"},"content":" getFeedbackResponsesForRecipientForCourse(courseId, entityEmail);"},{"lineNumber":279,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responsesToStudent) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponse(response);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":285,"author":{"gitId":"-"},"content":" * Gets all responses given by a user for a course."},{"lineNumber":286,"author":{"gitId":"-"},"content":" */"},{"lineNumber":287,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForCourse("},{"lineNumber":288,"author":{"gitId":"-"},"content":" String courseId, String giver) {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" assert giver !\u003d null;"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesFromGiverForCourse(courseId, giver);"},{"lineNumber":293,"author":{"gitId":"-"},"content":" }"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":296,"author":{"gitId":"-"},"content":" * Gets all responses received by a user for a course."},{"lineNumber":297,"author":{"gitId":"-"},"content":" */"},{"lineNumber":298,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForCourse("},{"lineNumber":299,"author":{"gitId":"-"},"content":" String courseId, String recipient) {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" assert recipient !\u003d null;"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesForRecipientForCourse(courseId, recipient);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":307,"author":{"gitId":"-"},"content":" * Gets all responses given by a user for a question."},{"lineNumber":308,"author":{"gitId":"-"},"content":" */"},{"lineNumber":309,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":310,"author":{"gitId":"-"},"content":" UUID feedbackQuestionId, String giver) {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesFromGiverForQuestion(feedbackQuestionId, giver);"},{"lineNumber":312,"author":{"gitId":"-"},"content":" }"},{"lineNumber":313,"author":{"gitId":"-"},"content":""},{"lineNumber":314,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" * Gets all responses for a question."},{"lineNumber":316,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":317,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForQuestion(UUID feedbackQuestionId) {"},{"lineNumber":318,"author":{"gitId":"domoberzin"},"content":" return frDb.getResponsesForQuestion(feedbackQuestionId);"},{"lineNumber":319,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":320,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":322,"author":{"gitId":"-"},"content":" * Updates the relevant responses before the deletion of a student."},{"lineNumber":323,"author":{"gitId":"-"},"content":" * This method takes care of the following:"},{"lineNumber":324,"author":{"gitId":"-"},"content":" * Making existing responses of \u0027rank recipient question\u0027 consistent."},{"lineNumber":325,"author":{"gitId":"-"},"content":" */"},{"lineNumber":326,"author":{"gitId":"-"},"content":" public void updateRankRecipientQuestionResponsesAfterDeletingStudent(String courseId) {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e filteredQuestions \u003d"},{"lineNumber":328,"author":{"gitId":"-"},"content":" fqLogic.getFeedbackQuestionForCourseWithType(courseId, FeedbackQuestionType.RANK_RECIPIENTS);"},{"lineNumber":329,"author":{"gitId":"-"},"content":" SqlCourseRoster roster \u003d new SqlCourseRoster("},{"lineNumber":330,"author":{"gitId":"-"},"content":" usersLogic.getStudentsForCourse(courseId),"},{"lineNumber":331,"author":{"gitId":"-"},"content":" usersLogic.getInstructorsForCourse(courseId));"},{"lineNumber":332,"author":{"gitId":"-"},"content":""},{"lineNumber":333,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : filteredQuestions) {"},{"lineNumber":334,"author":{"gitId":"-"},"content":" makeRankRecipientQuestionResponsesConsistent(question, roster);"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":339,"author":{"gitId":"-"},"content":" * Makes the rankings by one giver in the response to a \u0027rank recipient question\u0027 consistent, after deleting a"},{"lineNumber":340,"author":{"gitId":"-"},"content":" * student."},{"lineNumber":341,"author":{"gitId":"-"},"content":" * \u003cp\u003e"},{"lineNumber":342,"author":{"gitId":"-"},"content":" * Fails silently if the question type is not \u0027rank recipient question\u0027."},{"lineNumber":343,"author":{"gitId":"-"},"content":" * \u003c/p\u003e"},{"lineNumber":344,"author":{"gitId":"-"},"content":" */"},{"lineNumber":345,"author":{"gitId":"-"},"content":" private void makeRankRecipientQuestionResponsesConsistent("},{"lineNumber":346,"author":{"gitId":"-"},"content":" FeedbackQuestion question, SqlCourseRoster roster) {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" assert !question.getQuestionDetailsCopy().getQuestionType()"},{"lineNumber":348,"author":{"gitId":"-"},"content":" .equals(FeedbackQuestionType.RANK_RECIPIENTS);"},{"lineNumber":349,"author":{"gitId":"-"},"content":""},{"lineNumber":350,"author":{"gitId":"-"},"content":" FeedbackParticipantType giverType \u003d question.getGiverType();"},{"lineNumber":351,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":352,"author":{"gitId":"-"},"content":" int numberOfRecipients \u003d 0;"},{"lineNumber":353,"author":{"gitId":"-"},"content":""},{"lineNumber":354,"author":{"gitId":"-"},"content":" switch (giverType) {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":356,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":357,"author":{"gitId":"-"},"content":" for (Instructor instructor : roster.getInstructors()) {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" numberOfRecipients \u003d"},{"lineNumber":359,"author":{"gitId":"-"},"content":" fqLogic.getRecipientsOfQuestion(question, instructor, null, roster).size();"},{"lineNumber":360,"author":{"gitId":"-"},"content":" responses \u003d getFeedbackResponsesFromGiverForQuestion(question.getId(), instructor.getEmail());"},{"lineNumber":361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":362,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":363,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":364,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":365,"author":{"gitId":"-"},"content":" Student firstMemberOfTeam;"},{"lineNumber":366,"author":{"gitId":"-"},"content":" String team;"},{"lineNumber":367,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cStudent\u003e\u003e teams \u003d roster.getTeamToMembersTable();"},{"lineNumber":368,"author":{"gitId":"-"},"content":" for (Map.Entry\u003cString, List\u003cStudent\u003e\u003e entry : teams.entrySet()) {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" team \u003d entry.getKey();"},{"lineNumber":370,"author":{"gitId":"-"},"content":" firstMemberOfTeam \u003d entry.getValue().get(0);"},{"lineNumber":371,"author":{"gitId":"-"},"content":" numberOfRecipients \u003d"},{"lineNumber":372,"author":{"gitId":"-"},"content":" fqLogic.getRecipientsOfQuestion(question, null, firstMemberOfTeam, roster).size();"},{"lineNumber":373,"author":{"gitId":"-"},"content":" responses \u003d"},{"lineNumber":374,"author":{"gitId":"-"},"content":" getFeedbackResponsesFromTeamForQuestion("},{"lineNumber":375,"author":{"gitId":"-"},"content":" question.getId(), question.getCourseId(), team, roster);"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":378,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":379,"author":{"gitId":"-"},"content":" for (Student student : roster.getStudents()) {"},{"lineNumber":380,"author":{"gitId":"-"},"content":" numberOfRecipients \u003d"},{"lineNumber":381,"author":{"gitId":"-"},"content":" fqLogic.getRecipientsOfQuestion(question, null, student, roster).size();"},{"lineNumber":382,"author":{"gitId":"-"},"content":" responses \u003d getFeedbackResponsesFromGiverForQuestion(question.getId(), student.getEmail());"},{"lineNumber":383,"author":{"gitId":"-"},"content":" }"},{"lineNumber":384,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":385,"author":{"gitId":"-"},"content":" }"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" updateFeedbackResponsesForRankRecipientQuestions(responses, numberOfRecipients);"},{"lineNumber":388,"author":{"gitId":"-"},"content":" }"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":391,"author":{"gitId":"-"},"content":" * Updates responses for \u0027rank recipient question\u0027, such that the ranks in the responses are consistent."},{"lineNumber":392,"author":{"gitId":"-"},"content":" * @param responses responses to one feedback question, from one giver"},{"lineNumber":393,"author":{"gitId":"-"},"content":" * @param maxRank the maximum rank in each response"},{"lineNumber":394,"author":{"gitId":"-"},"content":" */"},{"lineNumber":395,"author":{"gitId":"-"},"content":" private void updateFeedbackResponsesForRankRecipientQuestions("},{"lineNumber":396,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responses, int maxRank) {"},{"lineNumber":397,"author":{"gitId":"-"},"content":" if (maxRank \u003c\u003d 0) {"},{"lineNumber":398,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":399,"author":{"gitId":"-"},"content":" }"},{"lineNumber":400,"author":{"gitId":"-"},"content":""},{"lineNumber":401,"author":{"gitId":"-"},"content":" FeedbackRankRecipientsResponseDetails responseDetails;"},{"lineNumber":402,"author":{"gitId":"-"},"content":" boolean[] isRankUsed;"},{"lineNumber":403,"author":{"gitId":"-"},"content":" boolean isUpdateNeeded \u003d false;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" int answer;"},{"lineNumber":405,"author":{"gitId":"-"},"content":" int maxUnusedRank \u003d 0;"},{"lineNumber":406,"author":{"gitId":"-"},"content":""},{"lineNumber":407,"author":{"gitId":"-"},"content":" // Checks whether update is needed."},{"lineNumber":408,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":409,"author":{"gitId":"-"},"content":" if (!(response instanceof FeedbackRankRecipientsResponse)) {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":411,"author":{"gitId":"-"},"content":" }"},{"lineNumber":412,"author":{"gitId":"-"},"content":" responseDetails \u003d ((FeedbackRankRecipientsResponse) response).getAnswer();"},{"lineNumber":413,"author":{"gitId":"-"},"content":" answer \u003d responseDetails.getAnswer();"},{"lineNumber":414,"author":{"gitId":"-"},"content":" if (answer \u003e maxRank) {"},{"lineNumber":415,"author":{"gitId":"-"},"content":" isUpdateNeeded \u003d true;"},{"lineNumber":416,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":418,"author":{"gitId":"-"},"content":" }"},{"lineNumber":419,"author":{"gitId":"-"},"content":""},{"lineNumber":420,"author":{"gitId":"-"},"content":" // Updates repeatedly, until all responses are consistent."},{"lineNumber":421,"author":{"gitId":"-"},"content":" while (isUpdateNeeded) {"},{"lineNumber":422,"author":{"gitId":"-"},"content":" isUpdateNeeded \u003d false; // will be set to true again once invalid rank appears after update"},{"lineNumber":423,"author":{"gitId":"-"},"content":" isRankUsed \u003d new boolean[maxRank];"},{"lineNumber":424,"author":{"gitId":"-"},"content":""},{"lineNumber":425,"author":{"gitId":"-"},"content":" // Obtains the largest unused rank."},{"lineNumber":426,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" if (!(response instanceof FeedbackRankRecipientsResponse)) {"},{"lineNumber":428,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":429,"author":{"gitId":"-"},"content":" }"},{"lineNumber":430,"author":{"gitId":"-"},"content":" responseDetails \u003d ((FeedbackRankRecipientsResponse) response).getAnswer();"},{"lineNumber":431,"author":{"gitId":"-"},"content":" answer \u003d responseDetails.getAnswer();"},{"lineNumber":432,"author":{"gitId":"-"},"content":" if (answer \u003c\u003d maxRank) {"},{"lineNumber":433,"author":{"gitId":"-"},"content":" isRankUsed[answer - 1] \u003d true;"},{"lineNumber":434,"author":{"gitId":"-"},"content":" }"},{"lineNumber":435,"author":{"gitId":"-"},"content":" }"},{"lineNumber":436,"author":{"gitId":"-"},"content":" for (int i \u003d maxRank - 1; i \u003e\u003d 0; i--) {"},{"lineNumber":437,"author":{"gitId":"-"},"content":" if (!isRankUsed[i]) {"},{"lineNumber":438,"author":{"gitId":"-"},"content":" maxUnusedRank \u003d i + 1;"},{"lineNumber":439,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":440,"author":{"gitId":"-"},"content":" }"},{"lineNumber":441,"author":{"gitId":"-"},"content":" }"},{"lineNumber":442,"author":{"gitId":"-"},"content":" assert maxUnusedRank \u003e 0; // if update is needed, there must be at least one unused rank"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":445,"author":{"gitId":"-"},"content":" if (response instanceof FeedbackRankRecipientsResponse) {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" responseDetails \u003d ((FeedbackRankRecipientsResponse) response).getAnswer();"},{"lineNumber":447,"author":{"gitId":"-"},"content":" answer \u003d responseDetails.getAnswer();"},{"lineNumber":448,"author":{"gitId":"-"},"content":" if (answer \u003e maxUnusedRank) {"},{"lineNumber":449,"author":{"gitId":"-"},"content":" answer--;"},{"lineNumber":450,"author":{"gitId":"-"},"content":" responseDetails.setAnswer(answer);"},{"lineNumber":451,"author":{"gitId":"-"},"content":" }"},{"lineNumber":452,"author":{"gitId":"-"},"content":" if (answer \u003e maxRank) {"},{"lineNumber":453,"author":{"gitId":"-"},"content":" isUpdateNeeded \u003d true; // sets the flag to true if the updated rank is still invalid"},{"lineNumber":454,"author":{"gitId":"-"},"content":" }"},{"lineNumber":455,"author":{"gitId":"-"},"content":" }"},{"lineNumber":456,"author":{"gitId":"-"},"content":" }"},{"lineNumber":457,"author":{"gitId":"-"},"content":" }"},{"lineNumber":458,"author":{"gitId":"-"},"content":" }"},{"lineNumber":459,"author":{"gitId":"-"},"content":""},{"lineNumber":460,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":461,"author":{"gitId":"domoberzin"},"content":" * Updates responses for a student when his team changes."},{"lineNumber":462,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003e"},{"lineNumber":463,"author":{"gitId":"domoberzin"},"content":" * This is done by deleting responses that are no longer relevant to him in his new team."},{"lineNumber":464,"author":{"gitId":"domoberzin"},"content":" * \u003c/p\u003e"},{"lineNumber":465,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":466,"author":{"gitId":"domoberzin"},"content":" public void updateFeedbackResponsesForChangingTeam(Course course, String newEmail, Team newTeam, Team oldTeam)"},{"lineNumber":467,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":468,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":469,"author":{"gitId":"domoberzin"},"content":" FeedbackQuestion qn;"},{"lineNumber":470,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":471,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":472,"author":{"gitId":"domoberzin"},"content":" getFeedbackResponsesFromGiverForCourse(course.getId(), newEmail);"},{"lineNumber":473,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":474,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesFromUser) {"},{"lineNumber":475,"author":{"gitId":"domoberzin"},"content":" qn \u003d fqLogic.getFeedbackQuestion(response.getId());"},{"lineNumber":476,"author":{"gitId":"domoberzin"},"content":" if (qn !\u003d null \u0026\u0026 qn.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":477,"author":{"gitId":"domoberzin"},"content":" deleteFeedbackResponsesForQuestionCascade(qn.getId());"},{"lineNumber":478,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":479,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":480,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":481,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":482,"author":{"gitId":"domoberzin"},"content":" getFeedbackResponsesForRecipientForCourse(course.getId(), newEmail);"},{"lineNumber":483,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":484,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesToUser) {"},{"lineNumber":485,"author":{"gitId":"domoberzin"},"content":" qn \u003d fqLogic.getFeedbackQuestion(response.getId());"},{"lineNumber":486,"author":{"gitId":"domoberzin"},"content":" if (qn !\u003d null \u0026\u0026 qn.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":487,"author":{"gitId":"domoberzin"},"content":" deleteFeedbackResponsesForQuestionCascade(qn.getId());"},{"lineNumber":488,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":489,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":490,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":491,"author":{"gitId":"domoberzin"},"content":" boolean isOldTeamEmpty \u003d usersLogic.getStudentsForTeam(oldTeam.getName(), course.getId()).isEmpty();"},{"lineNumber":492,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":493,"author":{"gitId":"domoberzin"},"content":" if (isOldTeamEmpty) {"},{"lineNumber":494,"author":{"gitId":"domoberzin"},"content":" deleteFeedbackResponsesForCourseCascade(course.getId(), oldTeam.getName());"},{"lineNumber":495,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":496,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":497,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":498,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":499,"author":{"gitId":"domoberzin"},"content":" * Updates responses for a student when his section changes."},{"lineNumber":500,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":501,"author":{"gitId":"domoberzin"},"content":" public void updateFeedbackResponsesForChangingSection(Course course, String newEmail, Section newSection)"},{"lineNumber":502,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":503,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":504,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":505,"author":{"gitId":"domoberzin"},"content":" getFeedbackResponsesFromGiverForCourse(course.getId(), newEmail);"},{"lineNumber":506,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":507,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesFromUser) {"},{"lineNumber":508,"author":{"gitId":"domoberzin"},"content":" response.setGiverSection(newSection);"},{"lineNumber":509,"author":{"gitId":"domoberzin"},"content":" frDb.updateFeedbackResponse(response);"},{"lineNumber":510,"author":{"gitId":"domoberzin"},"content":" frcLogic.updateFeedbackResponseCommentsForResponse(response);"},{"lineNumber":511,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":512,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":513,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":514,"author":{"gitId":"domoberzin"},"content":" getFeedbackResponsesForRecipientForCourse(course.getId(), newEmail);"},{"lineNumber":515,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":516,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesToUser) {"},{"lineNumber":517,"author":{"gitId":"domoberzin"},"content":" response.setRecipientSection(newSection);"},{"lineNumber":518,"author":{"gitId":"domoberzin"},"content":" frDb.updateFeedbackResponse(response);"},{"lineNumber":519,"author":{"gitId":"domoberzin"},"content":" frcLogic.updateFeedbackResponseCommentsForResponse(response);"},{"lineNumber":520,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":521,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":522,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":523,"author":{"gitId":"marquestye"},"content":" /**"},{"lineNumber":524,"author":{"gitId":"marquestye"},"content":" * Updates a student\u0027s email in their given/received responses."},{"lineNumber":525,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":526,"author":{"gitId":"marquestye"},"content":" public void updateFeedbackResponsesForChangingEmail(String courseId, String oldEmail, String newEmail)"},{"lineNumber":527,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":528,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":529,"author":{"gitId":"marquestye"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":530,"author":{"gitId":"marquestye"},"content":" getFeedbackResponsesFromGiverForCourse(courseId, oldEmail);"},{"lineNumber":531,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":532,"author":{"gitId":"marquestye"},"content":" for (FeedbackResponse response : responsesFromUser) {"},{"lineNumber":533,"author":{"gitId":"marquestye"},"content":" response.setGiver(newEmail);"},{"lineNumber":534,"author":{"gitId":"marquestye"},"content":" frDb.updateFeedbackResponse(response);"},{"lineNumber":535,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":536,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":537,"author":{"gitId":"marquestye"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":538,"author":{"gitId":"marquestye"},"content":" getFeedbackResponsesForRecipientForCourse(courseId, oldEmail);"},{"lineNumber":539,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":540,"author":{"gitId":"marquestye"},"content":" for (FeedbackResponse response : responsesToUser) {"},{"lineNumber":541,"author":{"gitId":"marquestye"},"content":" response.setRecipient(newEmail);"},{"lineNumber":542,"author":{"gitId":"marquestye"},"content":" frDb.updateFeedbackResponse(response);"},{"lineNumber":543,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":544,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":545,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":546,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackQuestion\u003e getQuestionsForSession("},{"lineNumber":547,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, @Nullable UUID questionId) {"},{"lineNumber":548,"author":{"gitId":"xenosf"},"content":" if (questionId \u003d\u003d null) {"},{"lineNumber":549,"author":{"gitId":"xenosf"},"content":" return fqLogic.getFeedbackQuestionsForSession(feedbackSession);"},{"lineNumber":550,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":551,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d fqLogic.getFeedbackQuestion(questionId);"},{"lineNumber":552,"author":{"gitId":"xenosf"},"content":" return fq \u003d\u003d null ? Collections.emptyList() : Collections.singletonList(fq);"},{"lineNumber":553,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":554,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":555,"author":{"gitId":"xenosf"},"content":" private SqlSessionResultsBundle buildResultsBundle("},{"lineNumber":556,"author":{"gitId":"xenosf"},"content":" boolean isCourseWide, FeedbackSession feedbackSession, String courseId, String sectionName, UUID questionId,"},{"lineNumber":557,"author":{"gitId":"xenosf"},"content":" boolean isInstructor, String userEmail, Instructor instructor, Student student,"},{"lineNumber":558,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster roster, List\u003cFeedbackQuestion\u003e allQuestions,"},{"lineNumber":559,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e allResponses, boolean isPreviewResults) {"},{"lineNumber":560,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":561,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e questionsNotVisibleToInstructors \u003d new HashSet\u003c\u003e();"},{"lineNumber":562,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion qn : allQuestions) {"},{"lineNumber":563,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":564,"author":{"gitId":"xenosf"},"content":" // set questions that should not be visible to instructors if results are being previewed"},{"lineNumber":565,"author":{"gitId":"xenosf"},"content":" if (isPreviewResults \u0026\u0026 !checkCanInstructorsSeeQuestion(qn)) {"},{"lineNumber":566,"author":{"gitId":"xenosf"},"content":" questionsNotVisibleToInstructors.add(qn);"},{"lineNumber":567,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":568,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":569,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":570,"author":{"gitId":"xenosf"},"content":" // load comment(s)"},{"lineNumber":571,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e allComments;"},{"lineNumber":572,"author":{"gitId":"xenosf"},"content":" if (questionId \u003d\u003d null) {"},{"lineNumber":573,"author":{"gitId":"xenosf"},"content":" allComments \u003d frcLogic.getFeedbackResponseCommentForSessionInSection("},{"lineNumber":574,"author":{"gitId":"xenosf"},"content":" courseId, feedbackSession.getName(), sectionName);"},{"lineNumber":575,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":576,"author":{"gitId":"xenosf"},"content":" allComments \u003d frcLogic.getFeedbackResponseCommentForQuestionInSection(questionId, sectionName);"},{"lineNumber":577,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":578,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":579,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":580,"author":{"gitId":"xenosf"},"content":" // related questions, responses, and comment"},{"lineNumber":581,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackQuestion\u003e relatedQuestions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":582,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e relatedResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":583,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, List\u003cFeedbackResponseComment\u003e\u003e relatedCommentsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":584,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e relatedQuestionsNotVisibleForPreviewSet \u003d new HashSet\u003c\u003e();"},{"lineNumber":585,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e relatedQuestionsWithCommentNotVisibleForPreview \u003d new HashSet\u003c\u003e();"},{"lineNumber":586,"author":{"gitId":"xenosf"},"content":" if (isCourseWide) {"},{"lineNumber":587,"author":{"gitId":"xenosf"},"content":" // all questions are related questions when viewing course-wide result"},{"lineNumber":588,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion qn : allQuestions) {"},{"lineNumber":589,"author":{"gitId":"xenosf"},"content":" relatedQuestions.add(qn);"},{"lineNumber":590,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":591,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":592,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":593,"author":{"gitId":"xenosf"},"content":" Set\u003cString\u003e studentsEmailInTeam \u003d new HashSet\u003c\u003e();"},{"lineNumber":594,"author":{"gitId":"xenosf"},"content":" if (student !\u003d null) {"},{"lineNumber":595,"author":{"gitId":"xenosf"},"content":" for (Student studentInTeam"},{"lineNumber":596,"author":{"gitId":"xenosf"},"content":" : roster.getTeamToMembersTable().getOrDefault(student.getTeam(), Collections.emptyList())) {"},{"lineNumber":597,"author":{"gitId":"xenosf"},"content":" studentsEmailInTeam.add(studentInTeam.getEmail());"},{"lineNumber":598,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":599,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":600,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":601,"author":{"gitId":"xenosf"},"content":" // visibility table for each response and comment"},{"lineNumber":602,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":603,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":604,"author":{"gitId":"xenosf"},"content":" Map\u003cLong, Boolean\u003e commentVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":605,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":606,"author":{"gitId":"xenosf"},"content":" // build response"},{"lineNumber":607,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse response : allResponses) {"},{"lineNumber":608,"author":{"gitId":"xenosf"},"content":" if (isPreviewResults"},{"lineNumber":609,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 relatedQuestionsNotVisibleForPreviewSet.contains(response.getFeedbackQuestion())) {"},{"lineNumber":610,"author":{"gitId":"xenosf"},"content":" // corresponding question\u0027s responses will not be shown to previewer, ignore the response"},{"lineNumber":611,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":612,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":613,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion correspondingQuestion \u003d response.getFeedbackQuestion();"},{"lineNumber":614,"author":{"gitId":"xenosf"},"content":" if (correspondingQuestion \u003d\u003d null) {"},{"lineNumber":615,"author":{"gitId":"xenosf"},"content":" // orphan response without corresponding question, ignore it"},{"lineNumber":616,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":617,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":618,"author":{"gitId":"xenosf"},"content":" // check visibility of response"},{"lineNumber":619,"author":{"gitId":"xenosf"},"content":" boolean isVisibleResponse \u003d isResponseVisibleForUser("},{"lineNumber":620,"author":{"gitId":"xenosf"},"content":" userEmail, isInstructor, student, studentsEmailInTeam, response, correspondingQuestion, instructor);"},{"lineNumber":621,"author":{"gitId":"xenosf"},"content":" if (!isVisibleResponse) {"},{"lineNumber":622,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":623,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":624,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":625,"author":{"gitId":"xenosf"},"content":" // if previewing results and corresponding question should not be visible to instructors,"},{"lineNumber":626,"author":{"gitId":"xenosf"},"content":" // note down the question and do not add the response"},{"lineNumber":627,"author":{"gitId":"xenosf"},"content":" if (isPreviewResults \u0026\u0026 questionsNotVisibleToInstructors.contains(response.getFeedbackQuestion())) {"},{"lineNumber":628,"author":{"gitId":"xenosf"},"content":" relatedQuestionsNotVisibleForPreviewSet.add(response.getFeedbackQuestion());"},{"lineNumber":629,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":630,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":631,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":632,"author":{"gitId":"xenosf"},"content":" // if there are viewable responses, the corresponding question becomes related"},{"lineNumber":633,"author":{"gitId":"xenosf"},"content":" relatedQuestions.add(response.getFeedbackQuestion());"},{"lineNumber":634,"author":{"gitId":"xenosf"},"content":" relatedResponses.add(response);"},{"lineNumber":635,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":636,"author":{"gitId":"xenosf"},"content":" // generate giver/recipient name visibility table"},{"lineNumber":637,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response,"},{"lineNumber":638,"author":{"gitId":"xenosf"},"content":" isNameVisibleToUser(correspondingQuestion, response, userEmail, isInstructor, true, roster));"},{"lineNumber":639,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response,"},{"lineNumber":640,"author":{"gitId":"xenosf"},"content":" isNameVisibleToUser(correspondingQuestion, response, userEmail, isInstructor, false, roster));"},{"lineNumber":641,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":642,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":643,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":644,"author":{"gitId":"xenosf"},"content":" // build comment"},{"lineNumber":645,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponseComment frc : allComments) {"},{"lineNumber":646,"author":{"gitId":"xenosf"},"content":" FeedbackResponse relatedResponse \u003d frc.getFeedbackResponse();"},{"lineNumber":647,"author":{"gitId":"xenosf"},"content":" // the comment needs to be relevant to the question and response"},{"lineNumber":648,"author":{"gitId":"xenosf"},"content":" if (relatedResponse \u003d\u003d null) {"},{"lineNumber":649,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":650,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":651,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion \u003d relatedResponse.getFeedbackQuestion();"},{"lineNumber":652,"author":{"gitId":"xenosf"},"content":" if (relatedQuestion \u003d\u003d null) {"},{"lineNumber":653,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":654,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":655,"author":{"gitId":"xenosf"},"content":" // check visibility of comment"},{"lineNumber":656,"author":{"gitId":"xenosf"},"content":" boolean isVisibleResponseComment \u003d frcLogic.checkIsResponseCommentVisibleForUser("},{"lineNumber":657,"author":{"gitId":"xenosf"},"content":" userEmail, isInstructor, student, studentsEmailInTeam, relatedResponse, relatedQuestion, frc);"},{"lineNumber":658,"author":{"gitId":"xenosf"},"content":" if (!isVisibleResponseComment) {"},{"lineNumber":659,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":660,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":661,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":662,"author":{"gitId":"xenosf"},"content":" // if previewing results and the comment should not be visible to instructors,"},{"lineNumber":663,"author":{"gitId":"xenosf"},"content":" // note down the corresponding question and do not add the comment"},{"lineNumber":664,"author":{"gitId":"xenosf"},"content":" if (isPreviewResults \u0026\u0026 !checkCanInstructorsSeeComment(frc)) {"},{"lineNumber":665,"author":{"gitId":"xenosf"},"content":" relatedQuestionsWithCommentNotVisibleForPreview.add(frc.getFeedbackResponse().getFeedbackQuestion());"},{"lineNumber":666,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":667,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":668,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":669,"author":{"gitId":"xenosf"},"content":" relatedCommentsMap.computeIfAbsent(relatedResponse, key -\u003e new ArrayList\u003c\u003e()).add(frc);"},{"lineNumber":670,"author":{"gitId":"xenosf"},"content":" // generate comment giver name visibility table"},{"lineNumber":671,"author":{"gitId":"xenosf"},"content":" commentVisibilityTable.put(frc.getId(),"},{"lineNumber":672,"author":{"gitId":"xenosf"},"content":" frcLogic.checkIsNameVisibleToUser(frc, relatedResponse, userEmail, roster));"},{"lineNumber":673,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":674,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":675,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":676,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e existingResponses \u003d new ArrayList\u003c\u003e(relatedResponses);"},{"lineNumber":677,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses \u003d Collections.emptyList();"},{"lineNumber":678,"author":{"gitId":"xenosf"},"content":" if (isCourseWide) {"},{"lineNumber":679,"author":{"gitId":"xenosf"},"content":" missingResponses \u003d buildMissingResponses("},{"lineNumber":680,"author":{"gitId":"xenosf"},"content":" instructor, responseGiverVisibilityTable, responseRecipientVisibilityTable, relatedQuestions,"},{"lineNumber":681,"author":{"gitId":"xenosf"},"content":" existingResponses, roster, sectionName);"},{"lineNumber":682,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":683,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":684,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":685,"author":{"gitId":"xenosf"},"content":" return new SqlSessionResultsBundle(relatedQuestions, relatedQuestionsNotVisibleForPreviewSet,"},{"lineNumber":686,"author":{"gitId":"xenosf"},"content":" relatedQuestionsWithCommentNotVisibleForPreview, existingResponses, missingResponses,"},{"lineNumber":687,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable, responseRecipientVisibilityTable, relatedCommentsMap,"},{"lineNumber":688,"author":{"gitId":"xenosf"},"content":" commentVisibilityTable, roster);"},{"lineNumber":689,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":690,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":691,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":692,"author":{"gitId":"xenosf"},"content":" * Gets the session result for a feedback session."},{"lineNumber":693,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":694,"author":{"gitId":"xenosf"},"content":" * @param feedbackSession the feedback session"},{"lineNumber":695,"author":{"gitId":"xenosf"},"content":" * @param courseId the ID of the course"},{"lineNumber":696,"author":{"gitId":"xenosf"},"content":" * @param instructorEmail the instructor viewing the feedback session"},{"lineNumber":697,"author":{"gitId":"xenosf"},"content":" * @param questionId if not null, will only return partial bundle for the question"},{"lineNumber":698,"author":{"gitId":"xenosf"},"content":" * @param sectionName if not null, will only return partial bundle for the section"},{"lineNumber":699,"author":{"gitId":"xenosf"},"content":" * @param fetchType if not null, will fetch responses by giver, receiver sections, or both"},{"lineNumber":700,"author":{"gitId":"xenosf"},"content":" * @return the session result bundle"},{"lineNumber":701,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":702,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle getSessionResultsForCourse("},{"lineNumber":703,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String instructorEmail,"},{"lineNumber":704,"author":{"gitId":"xenosf"},"content":" @Nullable UUID questionId, @Nullable String sectionName, @Nullable FeedbackResultFetchType fetchType) {"},{"lineNumber":705,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":706,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster roster \u003d new SqlCourseRoster("},{"lineNumber":707,"author":{"gitId":"xenosf"},"content":" usersLogic.getStudentsForCourse(courseId),"},{"lineNumber":708,"author":{"gitId":"xenosf"},"content":" usersLogic.getInstructorsForCourse(courseId));"},{"lineNumber":709,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":710,"author":{"gitId":"xenosf"},"content":" // load question(s)"},{"lineNumber":711,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackQuestion\u003e allQuestions \u003d getQuestionsForSession(feedbackSession, questionId);"},{"lineNumber":712,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":713,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":714,"author":{"gitId":"xenosf"},"content":" // load response(s)"},{"lineNumber":715,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e allResponses;"},{"lineNumber":716,"author":{"gitId":"xenosf"},"content":" // load all response for instructors and passively filter them later"},{"lineNumber":717,"author":{"gitId":"xenosf"},"content":" if (questionId \u003d\u003d null) {"},{"lineNumber":718,"author":{"gitId":"xenosf"},"content":" allResponses \u003d getFeedbackResponsesForSessionInSection(feedbackSession, courseId, sectionName, fetchType);"},{"lineNumber":719,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":720,"author":{"gitId":"xenosf"},"content":" allResponses \u003d getFeedbackResponsesForQuestionInSection(questionId, sectionName, fetchType);"},{"lineNumber":721,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":722,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":723,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":724,"author":{"gitId":"xenosf"},"content":" // consider the current viewing user"},{"lineNumber":725,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d usersLogic.getInstructorForEmail(courseId, instructorEmail);"},{"lineNumber":726,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":727,"author":{"gitId":"xenosf"},"content":" return buildResultsBundle(true, feedbackSession, courseId, sectionName, questionId, true, instructorEmail,"},{"lineNumber":728,"author":{"gitId":"xenosf"},"content":" instructor, null, roster, allQuestions, allResponses, false);"},{"lineNumber":729,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":730,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":731,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":732,"author":{"gitId":"xenosf"},"content":" * Gets the session result for a feedback session for the given user."},{"lineNumber":733,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":734,"author":{"gitId":"xenosf"},"content":" * @param feedbackSession the feedback session"},{"lineNumber":735,"author":{"gitId":"xenosf"},"content":" * @param courseId the ID of the course"},{"lineNumber":736,"author":{"gitId":"xenosf"},"content":" * @param userEmail the user viewing the feedback session"},{"lineNumber":737,"author":{"gitId":"xenosf"},"content":" * @param isInstructor true if the user is an instructor"},{"lineNumber":738,"author":{"gitId":"xenosf"},"content":" * @param questionId if not null, will only return partial bundle for the question"},{"lineNumber":739,"author":{"gitId":"xenosf"},"content":" * @param isPreviewResults true if getting session results for preview purpose"},{"lineNumber":740,"author":{"gitId":"xenosf"},"content":" * @return the session result bundle"},{"lineNumber":741,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":742,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle getSessionResultsForUser("},{"lineNumber":743,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String userEmail, boolean isInstructor,"},{"lineNumber":744,"author":{"gitId":"xenosf"},"content":" @Nullable UUID questionId, boolean isPreviewResults) {"},{"lineNumber":745,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster roster \u003d new SqlCourseRoster("},{"lineNumber":746,"author":{"gitId":"xenosf"},"content":" usersLogic.getStudentsForCourse(courseId),"},{"lineNumber":747,"author":{"gitId":"xenosf"},"content":" usersLogic.getInstructorsForCourse(courseId));"},{"lineNumber":748,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":749,"author":{"gitId":"xenosf"},"content":" // load question(s)"},{"lineNumber":750,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackQuestion\u003e allQuestions \u003d getQuestionsForSession(feedbackSession, questionId);"},{"lineNumber":751,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":752,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":753,"author":{"gitId":"xenosf"},"content":" // load response(s)"},{"lineNumber":754,"author":{"gitId":"xenosf"},"content":" Student student \u003d isInstructor ? null : usersLogic.getStudentForEmail(courseId, userEmail);"},{"lineNumber":755,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d isInstructor ? usersLogic.getInstructorForEmail(courseId, userEmail) : null;"},{"lineNumber":756,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e allResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":757,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion question : allQuestions) {"},{"lineNumber":758,"author":{"gitId":"xenosf"},"content":" // load viewable responses for students/instructors proactively"},{"lineNumber":759,"author":{"gitId":"xenosf"},"content":" // this is cost-effective as in most of time responses for the whole session will not be viewable to individuals"},{"lineNumber":760,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e viewableResponses \u003d isInstructor"},{"lineNumber":761,"author":{"gitId":"xenosf"},"content":" ? getFeedbackResponsesToOrFromInstructorForQuestion(question, instructor)"},{"lineNumber":762,"author":{"gitId":"xenosf"},"content":" : getViewableFeedbackResponsesForStudentForQuestion(question, student, roster);"},{"lineNumber":763,"author":{"gitId":"xenosf"},"content":" allResponses.addAll(viewableResponses);"},{"lineNumber":764,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":765,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":766,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":767,"author":{"gitId":"xenosf"},"content":" return buildResultsBundle(false, feedbackSession, courseId, null, questionId, isInstructor, userEmail,"},{"lineNumber":768,"author":{"gitId":"xenosf"},"content":" instructor, student, roster, allQuestions, allResponses, isPreviewResults);"},{"lineNumber":769,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":770,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":771,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":772,"author":{"gitId":"xenosf"},"content":" * Builds viewable missing responses for the session for instructor."},{"lineNumber":773,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":774,"author":{"gitId":"xenosf"},"content":" * @param instructor the instructor"},{"lineNumber":775,"author":{"gitId":"xenosf"},"content":" * @param responseGiverVisibilityTable"},{"lineNumber":776,"author":{"gitId":"xenosf"},"content":" * the giver visibility table which will be updated with the visibility of missing responses"},{"lineNumber":777,"author":{"gitId":"xenosf"},"content":" * @param responseRecipientVisibilityTable"},{"lineNumber":778,"author":{"gitId":"xenosf"},"content":" * the recipient visibility table which will be updated with the visibility of missing responses"},{"lineNumber":779,"author":{"gitId":"xenosf"},"content":" * @param relatedQuestions the relevant questions"},{"lineNumber":780,"author":{"gitId":"xenosf"},"content":" * @param existingResponses existing responses"},{"lineNumber":781,"author":{"gitId":"xenosf"},"content":" * @param courseRoster the course roster"},{"lineNumber":782,"author":{"gitId":"xenosf"},"content":" * @param sectionName if not null, will only build missing responses for the section"},{"lineNumber":783,"author":{"gitId":"xenosf"},"content":" * @return a list of missing responses for the session."},{"lineNumber":784,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":785,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackResponse\u003e buildMissingResponses("},{"lineNumber":786,"author":{"gitId":"xenosf"},"content":" Instructor instructor, Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable,"},{"lineNumber":787,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable, List\u003cFeedbackQuestion\u003e relatedQuestions,"},{"lineNumber":788,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e existingResponses, SqlCourseRoster courseRoster, @Nullable String sectionName) {"},{"lineNumber":789,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":790,"author":{"gitId":"xenosf"},"content":" // first get all possible giver recipient pairs"},{"lineNumber":791,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackQuestion, Map\u003cString, Set\u003cString\u003e\u003e\u003e questionCompleteGiverRecipientMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":792,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion feedbackQuestion : relatedQuestions) {"},{"lineNumber":793,"author":{"gitId":"xenosf"},"content":" if (feedbackQuestion.getQuestionDetailsCopy().shouldGenerateMissingResponses(feedbackQuestion)) {"},{"lineNumber":794,"author":{"gitId":"xenosf"},"content":" questionCompleteGiverRecipientMap.put(feedbackQuestion,"},{"lineNumber":795,"author":{"gitId":"xenosf"},"content":" fqLogic.buildCompleteGiverRecipientMap(feedbackQuestion, courseRoster));"},{"lineNumber":796,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":797,"author":{"gitId":"xenosf"},"content":" questionCompleteGiverRecipientMap.put(feedbackQuestion, new HashMap\u003c\u003e());"},{"lineNumber":798,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":799,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":800,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":801,"author":{"gitId":"xenosf"},"content":" // remove the existing responses in those pairs"},{"lineNumber":802,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse existingResponse : existingResponses) {"},{"lineNumber":803,"author":{"gitId":"xenosf"},"content":" Map\u003cString, Set\u003cString\u003e\u003e currGiverRecipientMap \u003d"},{"lineNumber":804,"author":{"gitId":"xenosf"},"content":" questionCompleteGiverRecipientMap.get(existingResponse.getFeedbackQuestion());"},{"lineNumber":805,"author":{"gitId":"xenosf"},"content":" if (!currGiverRecipientMap.containsKey(existingResponse.getGiver())) {"},{"lineNumber":806,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":807,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":808,"author":{"gitId":"xenosf"},"content":" currGiverRecipientMap.get(existingResponse.getGiver()).remove(existingResponse.getRecipient());"},{"lineNumber":809,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":810,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":811,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":812,"author":{"gitId":"xenosf"},"content":" // build dummy responses"},{"lineNumber":813,"author":{"gitId":"xenosf"},"content":" for (Map.Entry\u003cFeedbackQuestion, Map\u003cString, Set\u003cString\u003e\u003e\u003e currGiverRecipientMapEntry"},{"lineNumber":814,"author":{"gitId":"xenosf"},"content":" : questionCompleteGiverRecipientMap.entrySet()) {"},{"lineNumber":815,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion correspondingQuestion \u003d currGiverRecipientMapEntry.getKey();"},{"lineNumber":816,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":817,"author":{"gitId":"xenosf"},"content":" for (Map.Entry\u003cString, Set\u003cString\u003e\u003e giverRecipientEntry"},{"lineNumber":818,"author":{"gitId":"xenosf"},"content":" : currGiverRecipientMapEntry.getValue().entrySet()) {"},{"lineNumber":819,"author":{"gitId":"xenosf"},"content":" // giver"},{"lineNumber":820,"author":{"gitId":"xenosf"},"content":" String giverIdentifier \u003d giverRecipientEntry.getKey();"},{"lineNumber":821,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster.ParticipantInfo giverInfo \u003d courseRoster.getInfoForIdentifier(giverIdentifier);"},{"lineNumber":822,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":823,"author":{"gitId":"xenosf"},"content":" for (String recipientIdentifier : giverRecipientEntry.getValue()) {"},{"lineNumber":824,"author":{"gitId":"xenosf"},"content":" // recipient"},{"lineNumber":825,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster.ParticipantInfo recipientInfo \u003d courseRoster.getInfoForIdentifier(recipientIdentifier);"},{"lineNumber":826,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":827,"author":{"gitId":"xenosf"},"content":" // skip responses not in current section"},{"lineNumber":828,"author":{"gitId":"xenosf"},"content":" if (sectionName !\u003d null"},{"lineNumber":829,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 !giverInfo.getSectionName().equals(sectionName)"},{"lineNumber":830,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 !recipientInfo.getSectionName().equals(sectionName)) {"},{"lineNumber":831,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":832,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":833,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":834,"author":{"gitId":"xenosf"},"content":" FeedbackResponse missingResponse \u003d new FeedbackMissingResponse("},{"lineNumber":835,"author":{"gitId":"xenosf"},"content":" correspondingQuestion,"},{"lineNumber":836,"author":{"gitId":"xenosf"},"content":" giverIdentifier, giverInfo.getSectionName(),"},{"lineNumber":837,"author":{"gitId":"xenosf"},"content":" recipientIdentifier, recipientInfo.getSectionName());"},{"lineNumber":838,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":839,"author":{"gitId":"xenosf"},"content":" // check visibility of the missing response"},{"lineNumber":840,"author":{"gitId":"xenosf"},"content":" boolean isVisibleResponse \u003d isResponseVisibleForUser("},{"lineNumber":841,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(), true, null, Collections.emptySet(),"},{"lineNumber":842,"author":{"gitId":"xenosf"},"content":" missingResponse, correspondingQuestion, instructor);"},{"lineNumber":843,"author":{"gitId":"xenosf"},"content":" if (!isVisibleResponse) {"},{"lineNumber":844,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":845,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":846,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":847,"author":{"gitId":"xenosf"},"content":" // generate giver/recipient name visibility table"},{"lineNumber":848,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(missingResponse,"},{"lineNumber":849,"author":{"gitId":"xenosf"},"content":" isNameVisibleToUser(correspondingQuestion, missingResponse,"},{"lineNumber":850,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(), true, true, courseRoster));"},{"lineNumber":851,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(missingResponse,"},{"lineNumber":852,"author":{"gitId":"xenosf"},"content":" isNameVisibleToUser(correspondingQuestion, missingResponse,"},{"lineNumber":853,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(), true, false, courseRoster));"},{"lineNumber":854,"author":{"gitId":"xenosf"},"content":" missingResponses.add(missingResponse);"},{"lineNumber":855,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":856,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":857,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":858,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":859,"author":{"gitId":"xenosf"},"content":" return missingResponses;"},{"lineNumber":860,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":861,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":862,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":863,"author":{"gitId":"xenosf"},"content":" * Checks whether the giver name of a response is visible to an user."},{"lineNumber":864,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":865,"author":{"gitId":"xenosf"},"content":" public boolean isNameVisibleToUser("},{"lineNumber":866,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question,"},{"lineNumber":867,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response,"},{"lineNumber":868,"author":{"gitId":"xenosf"},"content":" String userEmail,"},{"lineNumber":869,"author":{"gitId":"xenosf"},"content":" boolean isInstructor, boolean isGiverName, SqlCourseRoster roster) {"},{"lineNumber":870,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":871,"author":{"gitId":"xenosf"},"content":" if (question \u003d\u003d null) {"},{"lineNumber":872,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":873,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":874,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":875,"author":{"gitId":"xenosf"},"content":" // Early return if user is giver"},{"lineNumber":876,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":877,"author":{"gitId":"xenosf"},"content":" // if response is given by team, then anyone in the team can see the response"},{"lineNumber":878,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentInTeam(userEmail, response.getGiver())) {"},{"lineNumber":879,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":880,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":881,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":882,"author":{"gitId":"xenosf"},"content":" if (response.getGiver().equals(userEmail)) {"},{"lineNumber":883,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":884,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":885,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":886,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":887,"author":{"gitId":"xenosf"},"content":" return isFeedbackParticipantNameVisibleToUser(question, response,"},{"lineNumber":888,"author":{"gitId":"xenosf"},"content":" userEmail, isInstructor, isGiverName, roster);"},{"lineNumber":889,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":890,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":891,"author":{"gitId":"xenosf"},"content":" private boolean isFeedbackParticipantNameVisibleToUser("},{"lineNumber":892,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question, FeedbackResponse response,"},{"lineNumber":893,"author":{"gitId":"xenosf"},"content":" String userEmail, boolean isInstructor, boolean isGiverName, SqlCourseRoster roster) {"},{"lineNumber":894,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackParticipantType\u003e showNameTo \u003d isGiverName"},{"lineNumber":895,"author":{"gitId":"xenosf"},"content":" ? question.getShowGiverNameTo()"},{"lineNumber":896,"author":{"gitId":"xenosf"},"content":" : question.getShowRecipientNameTo();"},{"lineNumber":897,"author":{"gitId":"xenosf"},"content":" for (FeedbackParticipantType type : showNameTo) {"},{"lineNumber":898,"author":{"gitId":"xenosf"},"content":" switch (type) {"},{"lineNumber":899,"author":{"gitId":"xenosf"},"content":" case INSTRUCTORS:"},{"lineNumber":900,"author":{"gitId":"xenosf"},"content":" if (roster.getInstructorForEmail(userEmail) !\u003d null \u0026\u0026 isInstructor) {"},{"lineNumber":901,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":902,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":903,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":904,"author":{"gitId":"xenosf"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":905,"author":{"gitId":"xenosf"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":906,"author":{"gitId":"xenosf"},"content":" // Refers to Giver\u0027s Team Members"},{"lineNumber":907,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentsInSameTeam(response.getGiver(), userEmail)) {"},{"lineNumber":908,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":909,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":910,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":911,"author":{"gitId":"xenosf"},"content":" case RECEIVER:"},{"lineNumber":912,"author":{"gitId":"xenosf"},"content":" // Response to team"},{"lineNumber":913,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType().isTeam()) {"},{"lineNumber":914,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentInTeam(userEmail, response.getRecipient())) {"},{"lineNumber":915,"author":{"gitId":"xenosf"},"content":" // this is a team name"},{"lineNumber":916,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":917,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":918,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":919,"author":{"gitId":"xenosf"},"content":" // Response to individual"},{"lineNumber":920,"author":{"gitId":"xenosf"},"content":" } else if (response.getRecipient().equals(userEmail)) {"},{"lineNumber":921,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":922,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":923,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":924,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":925,"author":{"gitId":"xenosf"},"content":" case RECEIVER_TEAM_MEMBERS:"},{"lineNumber":926,"author":{"gitId":"xenosf"},"content":" // Response to team; recipient \u003d teamName"},{"lineNumber":927,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType().isTeam()) {"},{"lineNumber":928,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentInTeam(userEmail, response.getRecipient())) {"},{"lineNumber":929,"author":{"gitId":"xenosf"},"content":" // this is a team name"},{"lineNumber":930,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":931,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":932,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":933,"author":{"gitId":"xenosf"},"content":" } else if (roster.isStudentsInSameTeam(response.getRecipient(), userEmail)) {"},{"lineNumber":934,"author":{"gitId":"xenosf"},"content":" // Response to individual"},{"lineNumber":935,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":936,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":937,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":938,"author":{"gitId":"xenosf"},"content":" case STUDENTS:"},{"lineNumber":939,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentInCourse(userEmail)) {"},{"lineNumber":940,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":941,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":942,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":943,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":944,"author":{"gitId":"xenosf"},"content":" assert false : \"Invalid FeedbackParticipantType for showNameTo in \""},{"lineNumber":945,"author":{"gitId":"xenosf"},"content":" + \"FeedbackResponseLogic.isFeedbackParticipantNameVisibleToUser()\";"},{"lineNumber":946,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":947,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":948,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":949,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":950,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":951,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":952,"author":{"gitId":"xenosf"},"content":" private boolean isResponseVisibleForUser("},{"lineNumber":953,"author":{"gitId":"xenosf"},"content":" String userEmail, boolean isInstructor, Student student,"},{"lineNumber":954,"author":{"gitId":"xenosf"},"content":" Set\u003cString\u003e studentsEmailInTeam, FeedbackResponse response,"},{"lineNumber":955,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion, Instructor instructor) {"},{"lineNumber":956,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":957,"author":{"gitId":"xenosf"},"content":" boolean isVisibleResponse \u003d false;"},{"lineNumber":958,"author":{"gitId":"xenosf"},"content":" if (isInstructor \u0026\u0026 relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.INSTRUCTORS)"},{"lineNumber":959,"author":{"gitId":"xenosf"},"content":" || response.getRecipient().equals(userEmail)"},{"lineNumber":960,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)"},{"lineNumber":961,"author":{"gitId":"xenosf"},"content":" || response.getGiver().equals(userEmail)"},{"lineNumber":962,"author":{"gitId":"xenosf"},"content":" || !isInstructor \u0026\u0026 relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":963,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":964,"author":{"gitId":"xenosf"},"content":" } else if (studentsEmailInTeam !\u003d null \u0026\u0026 !isInstructor) {"},{"lineNumber":965,"author":{"gitId":"xenosf"},"content":" if ((relatedQuestion.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":966,"author":{"gitId":"xenosf"},"content":" || relatedQuestion.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION"},{"lineNumber":967,"author":{"gitId":"xenosf"},"content":" || relatedQuestion.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS_EXCLUDING_SELF)"},{"lineNumber":968,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)"},{"lineNumber":969,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 response.getRecipient().equals(student.getTeamName())) {"},{"lineNumber":970,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":971,"author":{"gitId":"xenosf"},"content":" } else if (relatedQuestion.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":972,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 response.getGiver().equals(student.getTeamName())) {"},{"lineNumber":973,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":974,"author":{"gitId":"xenosf"},"content":" } else if (relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.OWN_TEAM_MEMBERS)"},{"lineNumber":975,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 studentsEmailInTeam.contains(response.getGiver())) {"},{"lineNumber":976,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":977,"author":{"gitId":"xenosf"},"content":" } else if (relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS)"},{"lineNumber":978,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 studentsEmailInTeam.contains(response.getRecipient())) {"},{"lineNumber":979,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":980,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":981,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":982,"author":{"gitId":"xenosf"},"content":" if (isVisibleResponse \u0026\u0026 instructor !\u003d null) {"},{"lineNumber":983,"author":{"gitId":"xenosf"},"content":" boolean isGiverSectionRestricted \u003d"},{"lineNumber":984,"author":{"gitId":"xenosf"},"content":" !instructor.isAllowedForPrivilege(response.getGiverSectionName(),"},{"lineNumber":985,"author":{"gitId":"xenosf"},"content":" response.getFeedbackQuestion().getFeedbackSession().getName(),"},{"lineNumber":986,"author":{"gitId":"xenosf"},"content":" Const.InstructorPermissions.CAN_VIEW_SESSION_IN_SECTIONS);"},{"lineNumber":987,"author":{"gitId":"xenosf"},"content":" // If instructors are not restricted to view the giver\u0027s section,"},{"lineNumber":988,"author":{"gitId":"xenosf"},"content":" // they are allowed to view responses to GENERAL, subject to visibility options"},{"lineNumber":989,"author":{"gitId":"xenosf"},"content":" boolean isRecipientSectionRestricted \u003d"},{"lineNumber":990,"author":{"gitId":"xenosf"},"content":" relatedQuestion.getRecipientType() !\u003d FeedbackParticipantType.NONE"},{"lineNumber":991,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 !instructor.isAllowedForPrivilege(response.getRecipientSectionName(),"},{"lineNumber":992,"author":{"gitId":"xenosf"},"content":" response.getFeedbackQuestion().getFeedbackSession().getName(),"},{"lineNumber":993,"author":{"gitId":"xenosf"},"content":" Const.InstructorPermissions.CAN_VIEW_SESSION_IN_SECTIONS);"},{"lineNumber":994,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":995,"author":{"gitId":"xenosf"},"content":" boolean isNotAllowedForInstructor \u003d isGiverSectionRestricted || isRecipientSectionRestricted;"},{"lineNumber":996,"author":{"gitId":"xenosf"},"content":" if (isNotAllowedForInstructor) {"},{"lineNumber":997,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d false;"},{"lineNumber":998,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":999,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1000,"author":{"gitId":"xenosf"},"content":" return isVisibleResponse;"},{"lineNumber":1001,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1002,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1003,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1004,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1005,"author":{"gitId":"xenosf"},"content":" * Gets all responses for a session."},{"lineNumber":1006,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1007,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e getFeedbackResponsesForSession("},{"lineNumber":1008,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId) {"},{"lineNumber":1009,"author":{"gitId":"xenosf"},"content":" return frDb.getFeedbackResponsesForSession(feedbackSession, courseId);"},{"lineNumber":1010,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1011,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1012,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1013,"author":{"gitId":"xenosf"},"content":" * Gets all responses given to/from a section in a feedback session in a course."},{"lineNumber":1014,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1015,"author":{"gitId":"xenosf"},"content":" * @param feedbackSession the session"},{"lineNumber":1016,"author":{"gitId":"xenosf"},"content":" * @param courseId the course ID of the session"},{"lineNumber":1017,"author":{"gitId":"xenosf"},"content":" * @param sectionName if null, will retrieve all responses in the session"},{"lineNumber":1018,"author":{"gitId":"xenosf"},"content":" * @param fetchType if not null, will retrieve responses by giver, receiver sections, or both"},{"lineNumber":1019,"author":{"gitId":"xenosf"},"content":" * @return a list of responses"},{"lineNumber":1020,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1021,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForSessionInSection("},{"lineNumber":1022,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, @Nullable String sectionName,"},{"lineNumber":1023,"author":{"gitId":"xenosf"},"content":" @Nullable FeedbackResultFetchType fetchType) {"},{"lineNumber":1024,"author":{"gitId":"xenosf"},"content":" if (sectionName \u003d\u003d null) {"},{"lineNumber":1025,"author":{"gitId":"xenosf"},"content":" return getFeedbackResponsesForSession(feedbackSession, courseId);"},{"lineNumber":1026,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1027,"author":{"gitId":"xenosf"},"content":" return frDb.getFeedbackResponsesForSessionInSection(feedbackSession, courseId, sectionName, fetchType);"},{"lineNumber":1028,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1029,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1030,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1031,"author":{"gitId":"xenosf"},"content":" * Gets all responses given to/from a section for a question."},{"lineNumber":1032,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1033,"author":{"gitId":"xenosf"},"content":" * @param feedbackQuestionId the question UUID"},{"lineNumber":1034,"author":{"gitId":"xenosf"},"content":" * @param sectionName if null, will retrieve all responses for the question"},{"lineNumber":1035,"author":{"gitId":"xenosf"},"content":" * @return a list of responses"},{"lineNumber":1036,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1037,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForQuestionInSection("},{"lineNumber":1038,"author":{"gitId":"xenosf"},"content":" UUID feedbackQuestionId, @Nullable String sectionName, FeedbackResultFetchType fetchType) {"},{"lineNumber":1039,"author":{"gitId":"xenosf"},"content":" if (sectionName \u003d\u003d null) {"},{"lineNumber":1040,"author":{"gitId":"xenosf"},"content":" return getFeedbackResponsesForQuestion(feedbackQuestionId);"},{"lineNumber":1041,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1042,"author":{"gitId":"xenosf"},"content":" return frDb.getFeedbackResponsesForQuestionInSection(feedbackQuestionId, sectionName, fetchType);"},{"lineNumber":1043,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1044,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1045,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1046,"author":{"gitId":"xenosf"},"content":" * Returns feedback responses given/received by an instructor."},{"lineNumber":1047,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1048,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackResponse\u003e getFeedbackResponsesToOrFromInstructorForQuestion("},{"lineNumber":1049,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question, Instructor instructor) {"},{"lineNumber":1050,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackResponse\u003e viewableResponses \u003d new HashSet\u003c\u003e();"},{"lineNumber":1051,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1052,"author":{"gitId":"xenosf"},"content":" // Add responses that the instructor submitted him/herself"},{"lineNumber":1053,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":1054,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1055,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesFromGiverForQuestion(question.getId(), instructor.getEmail())"},{"lineNumber":1056,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1057,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1058,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1059,"author":{"gitId":"xenosf"},"content":" // Add responses that user is a receiver of when response is visible to receiver or instructors"},{"lineNumber":1060,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":1061,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)"},{"lineNumber":1062,"author":{"gitId":"xenosf"},"content":" || question.isResponseVisibleTo(FeedbackParticipantType.INSTRUCTORS))) {"},{"lineNumber":1063,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1064,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesForRecipientForQuestion(question.getId(), instructor.getEmail())"},{"lineNumber":1065,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1066,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1067,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1068,"author":{"gitId":"xenosf"},"content":" return new ArrayList\u003c\u003e(viewableResponses);"},{"lineNumber":1069,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1070,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1071,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1072,"author":{"gitId":"xenosf"},"content":" * Returns viewable feedback responses for a student."},{"lineNumber":1073,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1074,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackResponse\u003e getViewableFeedbackResponsesForStudentForQuestion("},{"lineNumber":1075,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question, Student student, SqlCourseRoster courseRoster) {"},{"lineNumber":1076,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackResponse\u003e viewableResponses \u003d new HashSet\u003c\u003e();"},{"lineNumber":1077,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1078,"author":{"gitId":"xenosf"},"content":" // Add responses that the student submitted him/herself"},{"lineNumber":1079,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":1080,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1081,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesFromGiverForQuestion(question.getId(), student.getEmail())"},{"lineNumber":1082,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1083,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1084,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1085,"author":{"gitId":"xenosf"},"content":" // Add responses that user is a receiver of when response is visible to receiver"},{"lineNumber":1086,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":1087,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)) {"},{"lineNumber":1088,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1089,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesForRecipientForQuestion(question.getId(), student.getEmail())"},{"lineNumber":1090,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1091,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1092,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1093,"author":{"gitId":"xenosf"},"content":" if (question.isResponseVisibleTo(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":1094,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll(getFeedbackResponsesForQuestion(question.getId()));"},{"lineNumber":1095,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1096,"author":{"gitId":"xenosf"},"content":" // Early return as STUDENTS covers all cases below."},{"lineNumber":1097,"author":{"gitId":"xenosf"},"content":" return new ArrayList\u003c\u003e(viewableResponses);"},{"lineNumber":1098,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1099,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1100,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType().isTeam()"},{"lineNumber":1101,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)) {"},{"lineNumber":1102,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1103,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesForRecipientForQuestion(question.getId(), student.getTeamName())"},{"lineNumber":1104,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1105,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1106,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1107,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":1108,"author":{"gitId":"xenosf"},"content":" || question.isResponseVisibleTo(FeedbackParticipantType.OWN_TEAM_MEMBERS)) {"},{"lineNumber":1109,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1110,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesFromTeamForQuestion("},{"lineNumber":1111,"author":{"gitId":"xenosf"},"content":" question.getId(), question.getCourseId(), student.getTeamName(), courseRoster));"},{"lineNumber":1112,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1113,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1114,"author":{"gitId":"xenosf"},"content":" if (question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS)) {"},{"lineNumber":1115,"author":{"gitId":"xenosf"},"content":" for (Student studentInTeam : courseRoster.getTeamToMembersTable().get(student.getTeamName())) {"},{"lineNumber":1116,"author":{"gitId":"xenosf"},"content":" if (studentInTeam.getEmail().equals(student.getEmail())) {"},{"lineNumber":1117,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":1118,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1119,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responses \u003d"},{"lineNumber":1120,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesForRecipientForQuestion(question.getId(), studentInTeam.getEmail());"},{"lineNumber":1121,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll(responses);"},{"lineNumber":1122,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1123,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1124,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1125,"author":{"gitId":"xenosf"},"content":" return new ArrayList\u003c\u003e(viewableResponses);"},{"lineNumber":1126,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1127,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1128,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1129,"author":{"gitId":"xenosf"},"content":" * Gets all responses received by a user for a question."},{"lineNumber":1130,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1131,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForQuestion("},{"lineNumber":1132,"author":{"gitId":"xenosf"},"content":" UUID feedbackQuestionId, String userEmail) {"},{"lineNumber":1133,"author":{"gitId":"xenosf"},"content":" return frDb.getFeedbackResponsesForRecipientForQuestion(feedbackQuestionId, userEmail);"},{"lineNumber":1134,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1135,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1136,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1137,"author":{"gitId":"xenosf"},"content":" * Checks whether instructors can see the question."},{"lineNumber":1138,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1139,"author":{"gitId":"xenosf"},"content":" boolean checkCanInstructorsSeeQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":1140,"author":{"gitId":"xenosf"},"content":" boolean isResponseVisibleToInstructor \u003d"},{"lineNumber":1141,"author":{"gitId":"xenosf"},"content":" feedbackQuestion.getShowResponsesTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1142,"author":{"gitId":"xenosf"},"content":" boolean isGiverVisibleToInstructor \u003d"},{"lineNumber":1143,"author":{"gitId":"xenosf"},"content":" feedbackQuestion.getShowGiverNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1144,"author":{"gitId":"xenosf"},"content":" boolean isRecipientVisibleToInstructor \u003d"},{"lineNumber":1145,"author":{"gitId":"xenosf"},"content":" feedbackQuestion.getShowRecipientNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1146,"author":{"gitId":"xenosf"},"content":" return isResponseVisibleToInstructor \u0026\u0026 isGiverVisibleToInstructor \u0026\u0026 isRecipientVisibleToInstructor;"},{"lineNumber":1147,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1148,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1149,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1150,"author":{"gitId":"xenosf"},"content":" * Checks whether instructors can see the comment."},{"lineNumber":1151,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1152,"author":{"gitId":"xenosf"},"content":" boolean checkCanInstructorsSeeComment(FeedbackResponseComment feedbackResponseComment) {"},{"lineNumber":1153,"author":{"gitId":"xenosf"},"content":" boolean isCommentVisibleToInstructor \u003d"},{"lineNumber":1154,"author":{"gitId":"xenosf"},"content":" feedbackResponseComment.getShowCommentTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1155,"author":{"gitId":"xenosf"},"content":" boolean isGiverVisibleToInstructor \u003d"},{"lineNumber":1156,"author":{"gitId":"xenosf"},"content":" feedbackResponseComment.getShowGiverNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1157,"author":{"gitId":"xenosf"},"content":" return isCommentVisibleToInstructor \u0026\u0026 isGiverVisibleToInstructor;"},{"lineNumber":1158,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1159,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1160,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":77,"marquestye":23,"xenosf":626,"-":434}},{"path":"src/main/java/teammates/sqllogic/core/FeedbackSessionsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.HashSet;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Set;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackSessionsDb;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Handles operations related to feedback sessions."},{"lineNumber":25,"author":{"gitId":"-"},"content":" *"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * @see FeedbackSession"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * @see FeedbackSessionsDb"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public final class FeedbackSessionsLogic {"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final String ERROR_NON_EXISTENT_FS_STRING_FORMAT \u003d \"Trying to %s a non-existent feedback session: \";"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final String ERROR_NON_EXISTENT_FS_UPDATE \u003d String.format(ERROR_NON_EXISTENT_FS_STRING_FORMAT, \"update\");"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final String ERROR_FS_ALREADY_PUBLISH \u003d \"Error publishing feedback session: \""},{"lineNumber":36,"author":{"gitId":"-"},"content":" + \"Session has already been published.\";"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final String ERROR_FS_ALREADY_UNPUBLISH \u003d \"Error unpublishing feedback session: \""},{"lineNumber":38,"author":{"gitId":"-"},"content":" + \"Session has already been unpublished.\";"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" private static final int NUMBER_OF_HOURS_BEFORE_CLOSING_ALERT \u003d 24;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private static final int NUMBER_OF_HOURS_BEFORE_OPENING_SOON_ALERT \u003d 24;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" private static final FeedbackSessionsLogic instance \u003d new FeedbackSessionsLogic();"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" private FeedbackSessionsDb fsDb;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic frLogic;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" private UsersLogic usersLogic;"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" private FeedbackSessionsLogic() {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" public static FeedbackSessionsLogic inst() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" void initLogicDependencies(FeedbackSessionsDb fsDb, CoursesLogic coursesLogic,"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" FeedbackResponsesLogic frLogic, FeedbackQuestionsLogic fqLogic, UsersLogic usersLogic) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.fsDb \u003d fsDb;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" this.frLogic \u003d frLogic;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" this.fqLogic \u003d fqLogic;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" this.coursesLogic \u003d coursesLogic;"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * Gets a feedback session."},{"lineNumber":70,"author":{"gitId":"-"},"content":" *"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":72,"author":{"gitId":"-"},"content":" */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(UUID id) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return fsDb.getFeedbackSession(id);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Gets a feedback session for {@code feedbackSessionName} and {@code courseId}."},{"lineNumber":80,"author":{"gitId":"-"},"content":" *"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":82,"author":{"gitId":"-"},"content":" */"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" return fsDb.getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Gets all feedback sessions of a course, except those that are soft-deleted."},{"lineNumber":92,"author":{"gitId":"-"},"content":" */"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForCourse(String courseId) {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return fsDb.getFeedbackSessionEntitiesForCourse(courseId).stream()"},{"lineNumber":95,"author":{"gitId":"-"},"content":" .filter(fs -\u003e fs.getDeletedAt() \u003d\u003d null)"},{"lineNumber":96,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Gets all feedback sessions of a course started after time, except those that are soft-deleted."},{"lineNumber":101,"author":{"gitId":"-"},"content":" */"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForCourseStartingAfter(String courseId, Instant after) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return fsDb.getFeedbackSessionEntitiesForCourseStartingAfter(courseId, after).stream()"},{"lineNumber":104,"author":{"gitId":"-"},"content":" .filter(session -\u003e session.getDeletedAt() \u003d\u003d null)"},{"lineNumber":105,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Gets a feedback session from the recycle bin."},{"lineNumber":110,"author":{"gitId":"-"},"content":" *"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":112,"author":{"gitId":"-"},"content":" */"},{"lineNumber":113,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSessionFromRecycleBin(String feedbackSessionName, String courseId) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" return fsDb.getSoftDeletedFeedbackSession(courseId, feedbackSessionName);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * Gets a list of feedback sessions for instructors."},{"lineNumber":119,"author":{"gitId":"-"},"content":" */"},{"lineNumber":120,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForInstructors("},{"lineNumber":121,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e courseNotDeletedInstructorList \u003d instructorList.stream()"},{"lineNumber":124,"author":{"gitId":"-"},"content":" .filter(instructor -\u003e coursesLogic.getCourse(instructor.getCourseId()).getDeletedAt() \u003d\u003d null)"},{"lineNumber":125,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e fsList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" for (Instructor instructor : courseNotDeletedInstructorList) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" fsList.addAll(getFeedbackSessionsForCourse(instructor.getCourseId()));"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" return fsList;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":137,"author":{"gitId":"-"},"content":" * Returns a {@code List} of feedback sessions in the Recycle Bin for the instructors."},{"lineNumber":138,"author":{"gitId":"-"},"content":" * \u003cbr\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":" * Omits sessions if the corresponding courses are archived or in Recycle Bin"},{"lineNumber":140,"author":{"gitId":"-"},"content":" */"},{"lineNumber":141,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getSoftDeletedFeedbackSessionsForInstructors("},{"lineNumber":142,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e courseNotDeletedInstructorList \u003d instructorList.stream()"},{"lineNumber":145,"author":{"gitId":"-"},"content":" .filter(instructor -\u003e coursesLogic.getCourse(instructor.getCourseId()).getDeletedAt() \u003d\u003d null)"},{"lineNumber":146,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e fsList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" for (Instructor instructor : courseNotDeletedInstructorList) {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" fsList.addAll(fsDb.getSoftDeletedFeedbackSessionsForCourse(instructor.getCourseId()));"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" return fsList;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":158,"author":{"gitId":"-"},"content":" * Gets all and only the feedback sessions ongoing within a range of time."},{"lineNumber":159,"author":{"gitId":"-"},"content":" */"},{"lineNumber":160,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getOngoingSessions(Instant rangeStart, Instant rangeEnd) {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" return fsDb.getOngoingSessions(rangeStart, rangeEnd);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":165,"author":{"gitId":"-"},"content":" * Gets a set of giver identifiers that has at least one response under a feedback session."},{"lineNumber":166,"author":{"gitId":"-"},"content":" */"},{"lineNumber":167,"author":{"gitId":"-"},"content":" public Set\u003cString\u003e getGiverSetThatAnsweredFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession \u003d fsDb.getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" Set\u003cString\u003e giverSet \u003d new HashSet\u003c\u003e();"},{"lineNumber":174,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":175,"author":{"gitId":"domoberzin"},"content":" fqLogic.getFeedbackQuestionsForSession(feedbackSession).forEach(question -\u003e {"},{"lineNumber":176,"author":{"gitId":"domoberzin"},"content":" frLogic.getFeedbackResponsesForQuestion(question.getId()).forEach(response -\u003e {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" giverSet.add(response.getGiver());"},{"lineNumber":178,"author":{"gitId":"-"},"content":" });"},{"lineNumber":179,"author":{"gitId":"-"},"content":" });"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":" return giverSet;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":185,"author":{"gitId":"domoberzin"},"content":" * Gets a set of giver identifiers that has at least one response under a feedback session."},{"lineNumber":186,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":187,"author":{"gitId":"domoberzin"},"content":" public Set\u003cString\u003e getGiverSetThatAnsweredFeedbackSession(FeedbackSession fs) {"},{"lineNumber":188,"author":{"gitId":"domoberzin"},"content":" assert fs !\u003d null;"},{"lineNumber":189,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":190,"author":{"gitId":"domoberzin"},"content":" Set\u003cString\u003e giverSet \u003d new HashSet\u003c\u003e();"},{"lineNumber":191,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":192,"author":{"gitId":"domoberzin"},"content":" fqLogic.getFeedbackQuestionsForSession(fs).forEach(question -\u003e {"},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" frLogic.getFeedbackResponsesForQuestion(question.getId()).forEach(response -\u003e {"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" giverSet.add(response.getGiver());"},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" });"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":" });"},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" return giverSet;"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":200,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":202,"author":{"gitId":"-"},"content":" * Creates a feedback session."},{"lineNumber":203,"author":{"gitId":"-"},"content":" *"},{"lineNumber":204,"author":{"gitId":"-"},"content":" * @return created feedback session"},{"lineNumber":205,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the session is not valid"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the session already exist"},{"lineNumber":207,"author":{"gitId":"-"},"content":" */"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public FeedbackSession createFeedbackSession(FeedbackSession session)"},{"lineNumber":209,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" return fsDb.createFeedbackSession(session);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * Updates a feedback session."},{"lineNumber":216,"author":{"gitId":"-"},"content":" *"},{"lineNumber":217,"author":{"gitId":"-"},"content":" * @return updated feedback session"},{"lineNumber":218,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session does not exist"},{"lineNumber":219,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the new fields for feedback session are invalid"},{"lineNumber":220,"author":{"gitId":"-"},"content":" */"},{"lineNumber":221,"author":{"gitId":"-"},"content":" public FeedbackSession updateFeedbackSession(FeedbackSession session)"},{"lineNumber":222,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" return fsDb.updateFeedbackSession(session);"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":227,"author":{"gitId":"-"},"content":" * Unpublishes a feedback session."},{"lineNumber":228,"author":{"gitId":"-"},"content":" *"},{"lineNumber":229,"author":{"gitId":"-"},"content":" * @return the unpublished feedback session"},{"lineNumber":230,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if session is already unpublished"},{"lineNumber":231,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":232,"author":{"gitId":"-"},"content":" */"},{"lineNumber":233,"author":{"gitId":"-"},"content":" public FeedbackSession unpublishFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":234,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" FeedbackSession sessionToUnpublish \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" if (sessionToUnpublish \u003d\u003d null) {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_NON_EXISTENT_FS_UPDATE + courseId + \"/\" + feedbackSessionName);"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":" if (!sessionToUnpublish.isPublished()) {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(ERROR_FS_ALREADY_UNPUBLISH);"},{"lineNumber":243,"author":{"gitId":"-"},"content":" }"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":" sessionToUnpublish.setResultsVisibleFromTime(Const.TIME_REPRESENTS_LATER);"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" return sessionToUnpublish;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":251,"author":{"gitId":"-"},"content":" * Publishes a feedback session."},{"lineNumber":252,"author":{"gitId":"-"},"content":" *"},{"lineNumber":253,"author":{"gitId":"-"},"content":" * @return the published feedback session"},{"lineNumber":254,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if session is already published"},{"lineNumber":255,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":256,"author":{"gitId":"-"},"content":" */"},{"lineNumber":257,"author":{"gitId":"-"},"content":" public FeedbackSession publishFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":258,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":259,"author":{"gitId":"-"},"content":""},{"lineNumber":260,"author":{"gitId":"-"},"content":" FeedbackSession sessionToPublish \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" if (sessionToPublish \u003d\u003d null) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_NON_EXISTENT_FS_UPDATE + courseId + \"/\" + feedbackSessionName);"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":" if (sessionToPublish.isPublished()) {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(ERROR_FS_ALREADY_PUBLISH);"},{"lineNumber":267,"author":{"gitId":"-"},"content":" }"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" sessionToPublish.setResultsVisibleFromTime(Instant.now());"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" return sessionToPublish;"},{"lineNumber":272,"author":{"gitId":"-"},"content":" }"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":275,"author":{"gitId":"-"},"content":" * Deletes a feedback session cascade to its associated questions, responses, deadline extensions and comments."},{"lineNumber":276,"author":{"gitId":"-"},"content":" */"},{"lineNumber":277,"author":{"gitId":"-"},"content":" public void deleteFeedbackSessionCascade(String feedbackSessionName, String courseId) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession \u003d fsDb.getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":279,"author":{"gitId":"-"},"content":" fsDb.deleteFeedbackSession(feedbackSession);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":283,"author":{"gitId":"-"},"content":" * Soft-deletes a specific feedback session to Recycle Bin."},{"lineNumber":284,"author":{"gitId":"-"},"content":" * @return the time when the feedback session is moved to the recycle bin"},{"lineNumber":285,"author":{"gitId":"-"},"content":" */"},{"lineNumber":286,"author":{"gitId":"-"},"content":" public Instant moveFeedbackSessionToRecycleBin(String feedbackSessionName, String courseId)"},{"lineNumber":287,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" return fsDb.softDeleteFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":290,"author":{"gitId":"-"},"content":" }"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * Restores a specific feedback session from Recycle Bin."},{"lineNumber":294,"author":{"gitId":"-"},"content":" */"},{"lineNumber":295,"author":{"gitId":"-"},"content":" public void restoreFeedbackSessionFromRecycleBin(String feedbackSessionName, String courseId)"},{"lineNumber":296,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":297,"author":{"gitId":"-"},"content":" fsDb.restoreDeletedFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":301,"author":{"gitId":"-"},"content":" * Returns true if there are any questions for the specified user type (students/instructors) to answer."},{"lineNumber":302,"author":{"gitId":"-"},"content":" */"},{"lineNumber":303,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionForUserTypeToAnswer(FeedbackSession session, boolean isInstructor) {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" if (!session.isVisible()) {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" return isInstructor"},{"lineNumber":309,"author":{"gitId":"-"},"content":" ? fqLogic.hasFeedbackQuestionsForInstructors(session.getFeedbackQuestions(), false)"},{"lineNumber":310,"author":{"gitId":"-"},"content":" : fqLogic.hasFeedbackQuestionsForStudents(session.getFeedbackQuestions());"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":314,"author":{"gitId":"-"},"content":" * Returns true if the feedback session is viewable by the given user type (students/instructors)."},{"lineNumber":315,"author":{"gitId":"-"},"content":" */"},{"lineNumber":316,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionViewableToUserType(FeedbackSession session, boolean isInstructor) {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" // Allow user to view the feedback session if there are questions for them"},{"lineNumber":318,"author":{"gitId":"-"},"content":" if (isFeedbackSessionForUserTypeToAnswer(session, isInstructor)) {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":320,"author":{"gitId":"-"},"content":" }"},{"lineNumber":321,"author":{"gitId":"-"},"content":""},{"lineNumber":322,"author":{"gitId":"-"},"content":" // Allow user to view the feedback session if there are any question whose responses are visible to the user"},{"lineNumber":323,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsWithVisibleResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":324,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsForUser \u003d session.getFeedbackQuestions();"},{"lineNumber":325,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questionsForUser) {"},{"lineNumber":326,"author":{"gitId":"-"},"content":" if (!isInstructor \u0026\u0026 frLogic.isResponseOfFeedbackQuestionVisibleToStudent(question)"},{"lineNumber":327,"author":{"gitId":"-"},"content":" || isInstructor \u0026\u0026 frLogic.isResponseOfFeedbackQuestionVisibleToInstructor(question)) {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" // We only need one question with visible responses for the entire session to be visible"},{"lineNumber":329,"author":{"gitId":"-"},"content":" questionsWithVisibleResponses.add(question);"},{"lineNumber":330,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":331,"author":{"gitId":"-"},"content":" }"},{"lineNumber":332,"author":{"gitId":"-"},"content":" }"},{"lineNumber":333,"author":{"gitId":"-"},"content":""},{"lineNumber":334,"author":{"gitId":"-"},"content":" return session.isVisible() \u0026\u0026 !questionsWithVisibleResponses.isEmpty();"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":338,"author":{"gitId":"-"},"content":" * Checks whether a student has attempted a feedback session."},{"lineNumber":339,"author":{"gitId":"-"},"content":" *"},{"lineNumber":340,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf feedback session consists of all team questions, session is attempted by student only"},{"lineNumber":341,"author":{"gitId":"-"},"content":" * if someone from the team has responded. If feedback session has some individual questions,"},{"lineNumber":342,"author":{"gitId":"-"},"content":" * session is attempted only if the student has responded to any of the individual questions"},{"lineNumber":343,"author":{"gitId":"-"},"content":" * (regardless of the completion status of the team questions).\u003c/p\u003e"},{"lineNumber":344,"author":{"gitId":"-"},"content":" */"},{"lineNumber":345,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionAttemptedByStudent(FeedbackSession session, String userEmail, String userTeam) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":347,"author":{"gitId":"-"},"content":" assert userEmail !\u003d null;"},{"lineNumber":348,"author":{"gitId":"-"},"content":" assert userTeam !\u003d null;"},{"lineNumber":349,"author":{"gitId":"-"},"content":""},{"lineNumber":350,"author":{"gitId":"-"},"content":" if (!fqLogic.hasFeedbackQuestionsForStudents(session.getFeedbackQuestions())) {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" // if there are no questions for student, session is attempted"},{"lineNumber":352,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":353,"author":{"gitId":"-"},"content":" } else if (fqLogic.hasFeedbackQuestionsForGiverType("},{"lineNumber":354,"author":{"gitId":"-"},"content":" session.getFeedbackQuestions(), FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" // case where there are some individual questions"},{"lineNumber":356,"author":{"gitId":"-"},"content":" return frLogic.hasGiverRespondedForSession(userEmail, session.getFeedbackQuestions());"},{"lineNumber":357,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" // case where all are team questions"},{"lineNumber":359,"author":{"gitId":"-"},"content":" return frLogic.hasGiverRespondedForSession(userTeam, session.getFeedbackQuestions());"},{"lineNumber":360,"author":{"gitId":"-"},"content":" }"},{"lineNumber":361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":362,"author":{"gitId":"-"},"content":""},{"lineNumber":363,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":364,"author":{"gitId":"-"},"content":" * Checks whether an instructor has attempted a feedback session."},{"lineNumber":365,"author":{"gitId":"-"},"content":" *"},{"lineNumber":366,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf there is no question for instructors, the feedback session is considered as attempted.\u003c/p\u003e"},{"lineNumber":367,"author":{"gitId":"-"},"content":" */"},{"lineNumber":368,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionAttemptedByInstructor(FeedbackSession session, String userEmail) {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":370,"author":{"gitId":"-"},"content":" assert userEmail !\u003d null;"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":" if (frLogic.hasGiverRespondedForSession(userEmail, session.getFeedbackQuestions())) {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":374,"author":{"gitId":"-"},"content":" }"},{"lineNumber":375,"author":{"gitId":"-"},"content":""},{"lineNumber":376,"author":{"gitId":"-"},"content":" // if there is no question for instructor, session is attempted"},{"lineNumber":377,"author":{"gitId":"-"},"content":" return !fqLogic.hasFeedbackQuestionsForInstructors(session.getFeedbackQuestions(), session.isCreator(userEmail));"},{"lineNumber":378,"author":{"gitId":"-"},"content":" }"},{"lineNumber":379,"author":{"gitId":"-"},"content":""},{"lineNumber":380,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":381,"author":{"gitId":"-"},"content":" * After an update to feedback session\u0027s fields, may need to adjust the email status of the session."},{"lineNumber":382,"author":{"gitId":"-"},"content":" * @param session recently updated session."},{"lineNumber":383,"author":{"gitId":"-"},"content":" */"},{"lineNumber":384,"author":{"gitId":"-"},"content":" public void adjustFeedbackSessionEmailStatusAfterUpdate(FeedbackSession session) {"},{"lineNumber":385,"author":{"gitId":"-"},"content":" // reset isOpenEmailSent if the session has opened but is being un-opened"},{"lineNumber":386,"author":{"gitId":"-"},"content":" // now, or else leave it as sent if so."},{"lineNumber":387,"author":{"gitId":"-"},"content":" if (session.isOpenEmailSent()) {"},{"lineNumber":388,"author":{"gitId":"-"},"content":" session.setOpenEmailSent(session.isOpened());"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":" // also reset isOpeningSoonEmailSent"},{"lineNumber":391,"author":{"gitId":"-"},"content":" session.setOpeningSoonEmailSent("},{"lineNumber":392,"author":{"gitId":"domoberzin"},"content":" session.isOpened() || session.isOpeningInHours(NUMBER_OF_HOURS_BEFORE_OPENING_SOON_ALERT));"},{"lineNumber":393,"author":{"gitId":"-"},"content":" }"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":" // reset isClosedEmailSent if the session has closed but is being un-closed"},{"lineNumber":396,"author":{"gitId":"-"},"content":" // now, or else leave it as sent if so."},{"lineNumber":397,"author":{"gitId":"-"},"content":" if (session.isClosedEmailSent()) {"},{"lineNumber":398,"author":{"gitId":"-"},"content":" session.setClosedEmailSent(session.isClosed());"},{"lineNumber":399,"author":{"gitId":"-"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" // also reset isClosingSoonEmailSent"},{"lineNumber":401,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent("},{"lineNumber":402,"author":{"gitId":"domoberzin"},"content":" session.isClosed() || session.isClosedAfter(NUMBER_OF_HOURS_BEFORE_CLOSING_ALERT));"},{"lineNumber":403,"author":{"gitId":"-"},"content":" }"},{"lineNumber":404,"author":{"gitId":"-"},"content":""},{"lineNumber":405,"author":{"gitId":"-"},"content":" // reset isPublishedEmailSent if the session has been published but is"},{"lineNumber":406,"author":{"gitId":"-"},"content":" // going to be unpublished now, or else leave it as sent if so."},{"lineNumber":407,"author":{"gitId":"-"},"content":" if (session.isPublishedEmailSent()) {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" session.setPublishedEmailSent(session.isPublished());"},{"lineNumber":409,"author":{"gitId":"-"},"content":" }"},{"lineNumber":410,"author":{"gitId":"-"},"content":" }"},{"lineNumber":411,"author":{"gitId":"-"},"content":""},{"lineNumber":412,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":413,"author":{"gitId":"-"},"content":" * Criteria: must be published, publishEmail must be enabled and"},{"lineNumber":414,"author":{"gitId":"-"},"content":" * resultsVisibleTime must be custom."},{"lineNumber":415,"author":{"gitId":"-"},"content":" *"},{"lineNumber":416,"author":{"gitId":"-"},"content":" * @return returns a list of sessions that require automated emails to be"},{"lineNumber":417,"author":{"gitId":"-"},"content":" * sent as they are published"},{"lineNumber":418,"author":{"gitId":"-"},"content":" */"},{"lineNumber":419,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent() {"},{"lineNumber":420,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessionsToSendEmailsFor \u003d new ArrayList\u003c\u003e();"},{"lineNumber":421,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingPublishedEmail();"},{"lineNumber":422,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":423,"author":{"gitId":"-"},"content":""},{"lineNumber":424,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" // automated emails are required only for custom publish times"},{"lineNumber":426,"author":{"gitId":"-"},"content":" if (session.isPublished()"},{"lineNumber":427,"author":{"gitId":"-"},"content":" \u0026\u0026 !TimeHelper.isSpecialTime(session.getResultsVisibleFromTime())"},{"lineNumber":428,"author":{"gitId":"-"},"content":" \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":429,"author":{"gitId":"-"},"content":" sessionsToSendEmailsFor.add(session);"},{"lineNumber":430,"author":{"gitId":"-"},"content":" }"},{"lineNumber":431,"author":{"gitId":"-"},"content":" }"},{"lineNumber":432,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":433,"author":{"gitId":"-"},"content":" sessionsToSendEmailsFor.size()));"},{"lineNumber":434,"author":{"gitId":"-"},"content":" return sessionsToSendEmailsFor;"},{"lineNumber":435,"author":{"gitId":"-"},"content":" }"},{"lineNumber":436,"author":{"gitId":"-"},"content":""},{"lineNumber":437,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":438,"author":{"gitId":"-"},"content":" * Returns a list of sessions that are going to close within the next 24 hours."},{"lineNumber":439,"author":{"gitId":"-"},"content":" */"},{"lineNumber":440,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsClosingWithinTimeLimit() {"},{"lineNumber":441,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e requiredSessions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":442,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingClosingSoonEmail();"},{"lineNumber":443,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":444,"author":{"gitId":"-"},"content":""},{"lineNumber":445,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" if (session.isClosingWithinTimeLimit(NUMBER_OF_HOURS_BEFORE_CLOSING_ALERT)"},{"lineNumber":447,"author":{"gitId":"-"},"content":" \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":448,"author":{"gitId":"-"},"content":" requiredSessions.add(session);"},{"lineNumber":449,"author":{"gitId":"-"},"content":" }"},{"lineNumber":450,"author":{"gitId":"-"},"content":" }"},{"lineNumber":451,"author":{"gitId":"-"},"content":""},{"lineNumber":452,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":453,"author":{"gitId":"-"},"content":" requiredSessions.size()));"},{"lineNumber":454,"author":{"gitId":"-"},"content":" return requiredSessions;"},{"lineNumber":455,"author":{"gitId":"-"},"content":" }"},{"lineNumber":456,"author":{"gitId":"-"},"content":""},{"lineNumber":457,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":458,"author":{"gitId":"-"},"content":" * Returns a list of sessions that are going to open in 24 hours."},{"lineNumber":459,"author":{"gitId":"-"},"content":" */"},{"lineNumber":460,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsOpeningWithinTimeLimit() {"},{"lineNumber":461,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e requiredSessions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":462,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingOpeningSoonEmail();"},{"lineNumber":463,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":464,"author":{"gitId":"-"},"content":""},{"lineNumber":465,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":466,"author":{"gitId":"-"},"content":" if (session.isOpeningWithinTimeLimit(NUMBER_OF_HOURS_BEFORE_OPENING_SOON_ALERT)"},{"lineNumber":467,"author":{"gitId":"-"},"content":" \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":468,"author":{"gitId":"-"},"content":" requiredSessions.add(session);"},{"lineNumber":469,"author":{"gitId":"-"},"content":" }"},{"lineNumber":470,"author":{"gitId":"-"},"content":" }"},{"lineNumber":471,"author":{"gitId":"-"},"content":""},{"lineNumber":472,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":473,"author":{"gitId":"-"},"content":" requiredSessions.size()));"},{"lineNumber":474,"author":{"gitId":"-"},"content":" return requiredSessions;"},{"lineNumber":475,"author":{"gitId":"-"},"content":" }"},{"lineNumber":476,"author":{"gitId":"-"},"content":""},{"lineNumber":477,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":478,"author":{"gitId":"-"},"content":" * Returns a list of sessions that were closed within past hour."},{"lineNumber":479,"author":{"gitId":"-"},"content":" */"},{"lineNumber":480,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsClosedWithinThePastHour() {"},{"lineNumber":481,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e requiredSessions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":482,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingClosedEmail();"},{"lineNumber":483,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":484,"author":{"gitId":"-"},"content":""},{"lineNumber":485,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":486,"author":{"gitId":"-"},"content":" // is session closed in the past 1 hour"},{"lineNumber":487,"author":{"gitId":"-"},"content":" if (session.isClosedWithinPastHour()"},{"lineNumber":488,"author":{"gitId":"-"},"content":" \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":489,"author":{"gitId":"-"},"content":" requiredSessions.add(session);"},{"lineNumber":490,"author":{"gitId":"-"},"content":" }"},{"lineNumber":491,"author":{"gitId":"-"},"content":" }"},{"lineNumber":492,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":493,"author":{"gitId":"-"},"content":" requiredSessions.size()));"},{"lineNumber":494,"author":{"gitId":"-"},"content":" return requiredSessions;"},{"lineNumber":495,"author":{"gitId":"-"},"content":" }"},{"lineNumber":496,"author":{"gitId":"-"},"content":""},{"lineNumber":497,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":498,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which start within the last 2 hours"},{"lineNumber":499,"author":{"gitId":"-"},"content":" * and need an open email to be sent."},{"lineNumber":500,"author":{"gitId":"-"},"content":" */"},{"lineNumber":501,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsWhichNeedOpenEmailsToBeSent() {"},{"lineNumber":502,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessionsToSendEmailsFor \u003d new ArrayList\u003c\u003e();"},{"lineNumber":503,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingOpenEmail();"},{"lineNumber":504,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":505,"author":{"gitId":"-"},"content":""},{"lineNumber":506,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":507,"author":{"gitId":"-"},"content":" if (session.isOpened() \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" sessionsToSendEmailsFor.add(session);"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" }"},{"lineNumber":511,"author":{"gitId":"-"},"content":""},{"lineNumber":512,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":513,"author":{"gitId":"-"},"content":" sessionsToSendEmailsFor.size()));"},{"lineNumber":514,"author":{"gitId":"-"},"content":" return sessionsToSendEmailsFor;"},{"lineNumber":515,"author":{"gitId":"-"},"content":" }"},{"lineNumber":516,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":517,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":518,"author":{"gitId":"domoberzin"},"content":" * Gets the expected number of submissions for a feedback session."},{"lineNumber":519,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":520,"author":{"gitId":"domoberzin"},"content":" public int getExpectedTotalSubmission(FeedbackSession fs) {"},{"lineNumber":521,"author":{"gitId":"domoberzin"},"content":" int expectedTotal \u003d 0;"},{"lineNumber":522,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d fqLogic.getFeedbackQuestionsForSession(fs);"},{"lineNumber":523,"author":{"gitId":"domoberzin"},"content":" if (fqLogic.hasFeedbackQuestionsForStudents(questions)) {"},{"lineNumber":524,"author":{"gitId":"domoberzin"},"content":" expectedTotal +\u003d usersLogic.getStudentsForCourse(fs.getCourse().getId()).size();"},{"lineNumber":525,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":526,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":527,"author":{"gitId":"domoberzin"},"content":" // Pre-flight check to ensure there are questions for instructors."},{"lineNumber":528,"author":{"gitId":"domoberzin"},"content":" if (!fqLogic.hasFeedbackQuestionsForInstructors(questions, true)) {"},{"lineNumber":529,"author":{"gitId":"domoberzin"},"content":" return expectedTotal;"},{"lineNumber":530,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":531,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":532,"author":{"gitId":"domoberzin"},"content":" List\u003cInstructor\u003e instructors \u003d usersLogic.getInstructorsForCourse(fs.getCourse().getId());"},{"lineNumber":533,"author":{"gitId":"domoberzin"},"content":" if (instructors.isEmpty()) {"},{"lineNumber":534,"author":{"gitId":"domoberzin"},"content":" return expectedTotal;"},{"lineNumber":535,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":536,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":537,"author":{"gitId":"domoberzin"},"content":" // Check presence of questions for instructors."},{"lineNumber":538,"author":{"gitId":"domoberzin"},"content":" if (fqLogic.hasFeedbackQuestionsForInstructors(fqLogic.getFeedbackQuestionsForSession(fs), false)) {"},{"lineNumber":539,"author":{"gitId":"domoberzin"},"content":" expectedTotal +\u003d instructors.size();"},{"lineNumber":540,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":541,"author":{"gitId":"domoberzin"},"content":" // No questions for instructors. There must be questions for creator."},{"lineNumber":542,"author":{"gitId":"domoberzin"},"content":" List\u003cInstructor\u003e creators \u003d instructors.stream()"},{"lineNumber":543,"author":{"gitId":"domoberzin"},"content":" .filter(instructor -\u003e fs.getCreatorEmail().equals(instructor.getEmail()))"},{"lineNumber":544,"author":{"gitId":"domoberzin"},"content":" .collect(Collectors.toList());"},{"lineNumber":545,"author":{"gitId":"domoberzin"},"content":" expectedTotal +\u003d creators.size();"},{"lineNumber":546,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":547,"author":{"gitId":"domoberzin"},"content":" return expectedTotal;"},{"lineNumber":548,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":549,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":550,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":551,"author":{"gitId":"domoberzin"},"content":" * Gets the actual number of submissions for a feedback session."},{"lineNumber":552,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":553,"author":{"gitId":"domoberzin"},"content":" public int getActualTotalSubmission(FeedbackSession fs) {"},{"lineNumber":554,"author":{"gitId":"domoberzin"},"content":" return getGiverSetThatAnsweredFeedbackSession(fs).size();"},{"lineNumber":555,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":556,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":65,"-":491}},{"path":"src/main/java/teammates/sqllogic/core/LogicStarter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import javax.servlet.ServletContextEvent;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import javax.servlet.ServletContextListener;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountRequestsDb;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountsDb;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.CoursesDb;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.DeadlineExtensionsDb;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackQuestionsDb;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponsesDb;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackSessionsDb;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.NotificationsDb;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.UsageStatisticsDb;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.UsersDb;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * Setup in web.xml to register logic classes at application startup."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class LogicStarter implements ServletContextListener {"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Registers dependencies between different logic classes."},{"lineNumber":28,"author":{"gitId":"-"},"content":" */"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static void initializeDependencies() {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" AccountsLogic accountsLogic \u003d AccountsLogic.inst();"},{"lineNumber":31,"author":{"gitId":"-"},"content":" AccountRequestsLogic accountRequestsLogic \u003d AccountRequestsLogic.inst();"},{"lineNumber":32,"author":{"gitId":"-"},"content":" CoursesLogic coursesLogic \u003d CoursesLogic.inst();"},{"lineNumber":33,"author":{"gitId":"-"},"content":" DataBundleLogic dataBundleLogic \u003d DataBundleLogic.inst();"},{"lineNumber":34,"author":{"gitId":"-"},"content":" DeadlineExtensionsLogic deadlineExtensionsLogic \u003d DeadlineExtensionsLogic.inst();"},{"lineNumber":35,"author":{"gitId":"-"},"content":" FeedbackSessionsLogic fsLogic \u003d FeedbackSessionsLogic.inst();"},{"lineNumber":36,"author":{"gitId":"-"},"content":" FeedbackResponsesLogic frLogic \u003d FeedbackResponsesLogic.inst();"},{"lineNumber":37,"author":{"gitId":"-"},"content":" FeedbackResponseCommentsLogic frcLogic \u003d FeedbackResponseCommentsLogic.inst();"},{"lineNumber":38,"author":{"gitId":"-"},"content":" FeedbackQuestionsLogic fqLogic \u003d FeedbackQuestionsLogic.inst();"},{"lineNumber":39,"author":{"gitId":"-"},"content":" NotificationsLogic notificationsLogic \u003d NotificationsLogic.inst();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" UsageStatisticsLogic usageStatisticsLogic \u003d UsageStatisticsLogic.inst();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" UsersLogic usersLogic \u003d UsersLogic.inst();"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" accountRequestsLogic.initLogicDependencies(AccountRequestsDb.inst());"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.initLogicDependencies(AccountsDb.inst(), notificationsLogic, usersLogic, coursesLogic);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" coursesLogic.initLogicDependencies(CoursesDb.inst(), fsLogic, usersLogic);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" dataBundleLogic.initLogicDependencies(accountsLogic, accountRequestsLogic, coursesLogic,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic, fsLogic, fqLogic, frLogic, frcLogic,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" notificationsLogic, usersLogic);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.initLogicDependencies(DeadlineExtensionsDb.inst(), fsLogic);"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" fsLogic.initLogicDependencies(FeedbackSessionsDb.inst(), coursesLogic, frLogic, fqLogic, usersLogic);"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" frLogic.initLogicDependencies(FeedbackResponsesDb.inst(), usersLogic, fqLogic, frcLogic);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" frcLogic.initLogicDependencies(FeedbackResponseCommentsDb.inst());"},{"lineNumber":53,"author":{"gitId":"-"},"content":" fqLogic.initLogicDependencies(FeedbackQuestionsDb.inst(), coursesLogic, frLogic, usersLogic, fsLogic);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" notificationsLogic.initLogicDependencies(NotificationsDb.inst());"},{"lineNumber":55,"author":{"gitId":"-"},"content":" usageStatisticsLogic.initLogicDependencies(UsageStatisticsDb.inst());"},{"lineNumber":56,"author":{"gitId":"-"},"content":" usersLogic.initLogicDependencies(UsersDb.inst(), accountsLogic, frLogic, frcLogic, deadlineExtensionsLogic);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" log.info(\"Initialized dependencies between logic classes\");"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void contextInitialized(ServletContextEvent event) {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" // Invoked by Jetty at application startup."},{"lineNumber":63,"author":{"gitId":"-"},"content":" initializeDependencies();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public void contextDestroyed(ServletContextEvent event) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // Nothing to do"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":2,"yuanxi1":1,"-":68}},{"path":"src/main/java/teammates/sqllogic/core/UsersLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"marquestye"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Comparator;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import java.util.StringJoiner;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPermissionRole;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPrivileges;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EnrollException;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.exception.InstructorUpdateException;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.exception.StudentUpdateException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.util.RequestTracer;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.UsersDb;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.InstructorSearchManager;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.StudentSearchManager;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.ui.request.InstructorCreateRequest;"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Handles operations related to user (instructor \u0026 student)."},{"lineNumber":42,"author":{"gitId":"-"},"content":" *"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * @see User"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * @see UsersDb"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */"},{"lineNumber":46,"author":{"gitId":"-"},"content":"public final class UsersLogic {"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" static final String ERROR_INVALID_TEAM_NAME \u003d"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" \"Team \\\"%s\\\" is detected in both Section \\\"%s\\\" and Section \\\"%s\\\".\";"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" static final String ERROR_INVALID_TEAM_NAME_INSTRUCTION \u003d"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" \"Please use different team names in different sections.\";"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" static final String ERROR_ENROLL_EXCEED_SECTION_LIMIT \u003d"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" \"You are trying enroll more than %s students in section \\\"%s\\\".\";"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" static final String ERROR_ENROLL_EXCEED_SECTION_LIMIT_INSTRUCTION \u003d"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" \"To avoid performance problems, please do not enroll more than %s students in a single section.\";"},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" private static final UsersLogic instance \u003d new UsersLogic();"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" private static final int MAX_KEY_REGENERATION_TRIES \u003d 10;"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" private UsersDb usersDb;"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" private AccountsLogic accountsLogic;"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic feedbackResponsesLogic;"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsLogic feedbackResponseCommentsLogic;"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" private DeadlineExtensionsLogic deadlineExtensionsLogic;"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" private UsersLogic() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" public static UsersLogic inst() {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" void initLogicDependencies(UsersDb usersDb, AccountsLogic accountsLogic, FeedbackResponsesLogic feedbackResponsesLogic,"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" FeedbackResponseCommentsLogic feedbackResponseCommentsLogic,"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" DeadlineExtensionsLogic deadlineExtensionsLogic) {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.usersDb \u003d usersDb;"},{"lineNumber":83,"author":{"gitId":"-"},"content":" this.accountsLogic \u003d accountsLogic;"},{"lineNumber":84,"author":{"gitId":"-"},"content":" this.feedbackResponsesLogic \u003d feedbackResponsesLogic;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.feedbackResponseCommentsLogic \u003d feedbackResponseCommentsLogic;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.deadlineExtensionsLogic \u003d deadlineExtensionsLogic;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" private InstructorSearchManager getInstructorSearchManager() {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return usersDb.getInstructorSearchManager();"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" private StudentSearchManager getStudentSearchManager() {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return usersDb.getStudentSearchManager();"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Creates or updates search document for the given instructor."},{"lineNumber":99,"author":{"gitId":"-"},"content":" */"},{"lineNumber":100,"author":{"gitId":"-"},"content":" public void putInstructorDocument(Instructor instructor) throws SearchServiceException {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" getInstructorSearchManager().putDocument(instructor);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * Creates or updates search document for the given student."},{"lineNumber":106,"author":{"gitId":"-"},"content":" */"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public void putStudentDocument(Student student) throws SearchServiceException {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" getStudentSearchManager().putDocument(student);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":112,"author":{"gitId":"-"},"content":" * Create an instructor."},{"lineNumber":113,"author":{"gitId":"-"},"content":" *"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * @return the created instructor"},{"lineNumber":115,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the instructor is not valid"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the instructor already exists in the"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * database."},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public Instructor createInstructor(Instructor instructor)"},{"lineNumber":120,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" if (getInstructorForEmail(instructor.getCourseId(), instructor.getEmail()) !\u003d null) {"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" throw new EntityAlreadyExistsException(\"Instructor already exists.\");"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":" return usersDb.createInstructor(instructor);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":128,"author":{"gitId":"-"},"content":" * Updates an instructor and cascades to responses and comments if needed."},{"lineNumber":129,"author":{"gitId":"-"},"content":" *"},{"lineNumber":130,"author":{"gitId":"-"},"content":" * @return updated instructor"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the instructor update request is invalid"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if the update violates instructor validity"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the instructor does not exist in the database"},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public Instructor updateInstructorCascade(String courseId, InstructorCreateRequest instructorRequest) throws"},{"lineNumber":136,"author":{"gitId":"-"},"content":" InvalidParametersException, InstructorUpdateException, EntityDoesNotExistException {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" Instructor instructor;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" String instructorId \u003d instructorRequest.getId();"},{"lineNumber":139,"author":{"gitId":"-"},"content":" if (instructorId \u003d\u003d null) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" instructor \u003d getInstructorForEmail(courseId, instructorRequest.getEmail());"},{"lineNumber":141,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" instructor \u003d getInstructorByGoogleId(courseId, instructorId);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to update an instructor that does not exist.\");"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" verifyAtLeastOneInstructorIsDisplayed("},{"lineNumber":150,"author":{"gitId":"-"},"content":" courseId, instructor.isDisplayedToStudents(), instructorRequest.getIsDisplayedToStudent());"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" String originalEmail \u003d instructor.getEmail();"},{"lineNumber":153,"author":{"gitId":"-"},"content":" boolean needsCascade \u003d false;"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" String newDisplayName \u003d instructorRequest.getDisplayName();"},{"lineNumber":156,"author":{"gitId":"-"},"content":" if (newDisplayName \u003d\u003d null || newDisplayName.isEmpty()) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" newDisplayName \u003d Const.DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR;"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" instructor.setName(SanitizationHelper.sanitizeName(instructorRequest.getName()));"},{"lineNumber":161,"author":{"gitId":"-"},"content":" instructor.setEmail(SanitizationHelper.sanitizeEmail(instructorRequest.getEmail()));"},{"lineNumber":162,"author":{"gitId":"-"},"content":" instructor.setRole(InstructorPermissionRole.getEnum(instructorRequest.getRoleName()));"},{"lineNumber":163,"author":{"gitId":"-"},"content":" instructor.setPrivileges(new InstructorPrivileges(instructorRequest.getRoleName()));"},{"lineNumber":164,"author":{"gitId":"-"},"content":" instructor.setDisplayName(SanitizationHelper.sanitizeName(newDisplayName));"},{"lineNumber":165,"author":{"gitId":"-"},"content":" instructor.setDisplayedToStudents(instructorRequest.getIsDisplayedToStudent());"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" String newEmail \u003d instructor.getEmail();"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (!originalEmail.equals(newEmail)) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" needsCascade \u003d true;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" if (!instructor.isValid()) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(instructor.getInvalidityInfo());"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" if (needsCascade) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" // cascade responses"},{"lineNumber":179,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":180,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.getFeedbackResponsesFromGiverForCourse(courseId, originalEmail);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" for (FeedbackResponse responseFromUser : responsesFromUser) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d responseFromUser.getFeedbackQuestion();"},{"lineNumber":183,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":184,"author":{"gitId":"-"},"content":" || question.getGiverType() \u003d\u003d FeedbackParticipantType.SELF) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" responseFromUser.setGiver(newEmail);"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":189,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.getFeedbackResponsesForRecipientForCourse(courseId, originalEmail);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" for (FeedbackResponse responseToUser : responsesToUser) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d responseToUser.getFeedbackQuestion();"},{"lineNumber":192,"author":{"gitId":"-"},"content":" if (question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":193,"author":{"gitId":"-"},"content":" || question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":194,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.SELF) {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" responseToUser.setRecipient(newEmail);"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":" // cascade comments"},{"lineNumber":199,"author":{"gitId":"-"},"content":" feedbackResponseCommentsLogic.updateFeedbackResponseCommentsEmails(courseId, originalEmail, newEmail);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" return instructor;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * Verifies that at least one instructor is displayed to studens."},{"lineNumber":207,"author":{"gitId":"-"},"content":" *"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if there is no instructor displayed to students."},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" void verifyAtLeastOneInstructorIsDisplayed(String courseId, boolean isOriginalInstructorDisplayed,"},{"lineNumber":211,"author":{"gitId":"-"},"content":" boolean isEditedInstructorDisplayed)"},{"lineNumber":212,"author":{"gitId":"-"},"content":" throws InstructorUpdateException {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsDisplayed \u003d usersDb.getInstructorsDisplayedToStudents(courseId);"},{"lineNumber":214,"author":{"gitId":"-"},"content":" boolean isEditedInstructorChangedToNonVisible \u003d isOriginalInstructorDisplayed \u0026\u0026 !isEditedInstructorDisplayed;"},{"lineNumber":215,"author":{"gitId":"-"},"content":" boolean isNoInstructorMadeVisible \u003d instructorsDisplayed.isEmpty() \u0026\u0026 !isEditedInstructorDisplayed;"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" if (isNoInstructorMadeVisible || instructorsDisplayed.size() \u003d\u003d 1 \u0026\u0026 isEditedInstructorChangedToNonVisible) {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" throw new InstructorUpdateException(\"At least one instructor must be displayed to students\");"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":223,"author":{"gitId":"-"},"content":" * Creates a student."},{"lineNumber":224,"author":{"gitId":"-"},"content":" *"},{"lineNumber":225,"author":{"gitId":"-"},"content":" * @return the created student"},{"lineNumber":226,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the student is not valid"},{"lineNumber":227,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the student already exists in the"},{"lineNumber":228,"author":{"gitId":"-"},"content":" * database."},{"lineNumber":229,"author":{"gitId":"-"},"content":" */"},{"lineNumber":230,"author":{"gitId":"-"},"content":" public Student createStudent(Student student) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" return usersDb.createStudent(student);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":235,"author":{"gitId":"-"},"content":" * Gets instructor associated with {@code id}."},{"lineNumber":236,"author":{"gitId":"-"},"content":" *"},{"lineNumber":237,"author":{"gitId":"-"},"content":" * @param id Id of Instructor."},{"lineNumber":238,"author":{"gitId":"-"},"content":" * @return Returns Instructor if found else null."},{"lineNumber":239,"author":{"gitId":"-"},"content":" */"},{"lineNumber":240,"author":{"gitId":"-"},"content":" public Instructor getInstructor(UUID id) {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" return usersDb.getInstructor(id);"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * Gets the instructor with the specified email."},{"lineNumber":248,"author":{"gitId":"-"},"content":" */"},{"lineNumber":249,"author":{"gitId":"-"},"content":" public Instructor getInstructorForEmail(String courseId, String userEmail) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return usersDb.getInstructorForEmail(courseId, userEmail);"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":254,"author":{"gitId":"-"},"content":" * Gets instructors matching any of the specified emails."},{"lineNumber":255,"author":{"gitId":"-"},"content":" */"},{"lineNumber":256,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForEmails(String courseId, List\u003cString\u003e userEmails) {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" return usersDb.getInstructorsForEmails(courseId, userEmails);"},{"lineNumber":258,"author":{"gitId":"-"},"content":" }"},{"lineNumber":259,"author":{"gitId":"-"},"content":""},{"lineNumber":260,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":261,"author":{"gitId":"-"},"content":" * Gets an instructor by associated {@code regkey}."},{"lineNumber":262,"author":{"gitId":"-"},"content":" */"},{"lineNumber":263,"author":{"gitId":"-"},"content":" public Instructor getInstructorByRegistrationKey(String regKey) {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" assert regKey !\u003d null;"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":" return usersDb.getInstructorByRegKey(regKey);"},{"lineNumber":267,"author":{"gitId":"-"},"content":" }"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":270,"author":{"gitId":"-"},"content":" * Gets an instructor by associated {@code googleId}."},{"lineNumber":271,"author":{"gitId":"-"},"content":" */"},{"lineNumber":272,"author":{"gitId":"-"},"content":" public Instructor getInstructorByGoogleId(String courseId, String googleId) {"},{"lineNumber":273,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":274,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" return usersDb.getInstructorByGoogleId(courseId, googleId);"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":280,"author":{"gitId":"-"},"content":" * Searches instructors in the whole system. Used by admin only."},{"lineNumber":281,"author":{"gitId":"-"},"content":" *"},{"lineNumber":282,"author":{"gitId":"-"},"content":" * @return List of found instructors in the whole system. Null if no result found."},{"lineNumber":283,"author":{"gitId":"-"},"content":" */"},{"lineNumber":284,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e searchInstructorsInWholeSystem(String queryString)"},{"lineNumber":285,"author":{"gitId":"-"},"content":" throws SearchServiceException {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" return usersDb.searchInstructorsInWholeSystem(queryString);"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":290,"author":{"gitId":"-"},"content":" * Deletes an instructor or student."},{"lineNumber":291,"author":{"gitId":"-"},"content":" */"},{"lineNumber":292,"author":{"gitId":"-"},"content":" public \u003cT extends User\u003e void deleteUser(T user) {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" usersDb.deleteUser(user);"},{"lineNumber":294,"author":{"gitId":"-"},"content":" }"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":297,"author":{"gitId":"-"},"content":" * Deletes an instructor and cascades deletion to"},{"lineNumber":298,"author":{"gitId":"-"},"content":" * associated feedback responses, deadline extensions and comments."},{"lineNumber":299,"author":{"gitId":"-"},"content":" *"},{"lineNumber":300,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the instructor does not exist."},{"lineNumber":301,"author":{"gitId":"-"},"content":" */"},{"lineNumber":302,"author":{"gitId":"-"},"content":" public void deleteInstructorCascade(String courseId, String email) {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" Instructor instructor \u003d getInstructorForEmail(courseId, email);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.deleteFeedbackResponsesForCourseCascade(courseId, email);"},{"lineNumber":309,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.deleteDeadlineExtensionsForUser(instructor);"},{"lineNumber":310,"author":{"gitId":"-"},"content":" deleteUser(instructor);"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":314,"author":{"gitId":"-"},"content":" * Gets the list of instructors with co-owner privileges in a course."},{"lineNumber":315,"author":{"gitId":"-"},"content":" */"},{"lineNumber":316,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getCoOwnersForCourse(String courseId) {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d getInstructorsForCourse(courseId);"},{"lineNumber":318,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsWithCoOwnerPrivileges \u003d new ArrayList\u003c\u003e();"},{"lineNumber":319,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" if (!instructor.hasCoownerPrivileges()) {"},{"lineNumber":321,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" }"},{"lineNumber":323,"author":{"gitId":"-"},"content":" instructorsWithCoOwnerPrivileges.add(instructor);"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":" return instructorsWithCoOwnerPrivileges;"},{"lineNumber":326,"author":{"gitId":"-"},"content":" }"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":329,"author":{"gitId":"-"},"content":" * Gets a list of instructors for the specified course."},{"lineNumber":330,"author":{"gitId":"-"},"content":" */"},{"lineNumber":331,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForCourse(String courseId) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorReturnList \u003d usersDb.getInstructorsForCourse(courseId);"},{"lineNumber":333,"author":{"gitId":"-"},"content":" sortByName(instructorReturnList);"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" return instructorReturnList;"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":339,"author":{"gitId":"-"},"content":" * Check if the instructors with the provided emails exist in the course."},{"lineNumber":340,"author":{"gitId":"-"},"content":" */"},{"lineNumber":341,"author":{"gitId":"-"},"content":" public boolean verifyInstructorsExistInCourse(String courseId, List\u003cString\u003e emails) {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d usersDb.getInstructorsForEmails(courseId, emails);"},{"lineNumber":343,"author":{"gitId":"-"},"content":" Map\u003cString, User\u003e emailInstructorMap \u003d convertUserListToEmailUserMap(instructors);"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":" for (String email : emails) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" if (!emailInstructorMap.containsKey(email)) {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":348,"author":{"gitId":"-"},"content":" }"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":350,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":354,"author":{"gitId":"-"},"content":" * Gets all instructors associated with a googleId."},{"lineNumber":355,"author":{"gitId":"-"},"content":" */"},{"lineNumber":356,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForGoogleId(String googleId) {"},{"lineNumber":357,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":358,"author":{"gitId":"-"},"content":" return usersDb.getInstructorsForGoogleId(googleId);"},{"lineNumber":359,"author":{"gitId":"-"},"content":" }"},{"lineNumber":360,"author":{"gitId":"-"},"content":""},{"lineNumber":361,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":362,"author":{"gitId":"-"},"content":" * Make the instructor join the course, i.e. associate an account to the instructor with the given googleId."},{"lineNumber":363,"author":{"gitId":"-"},"content":" * Creates an account for the instructor if no existing account is found."},{"lineNumber":364,"author":{"gitId":"-"},"content":" * Preconditions:"},{"lineNumber":365,"author":{"gitId":"-"},"content":" * Parameters regkey and googleId are non-null."},{"lineNumber":366,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the instructor already exists in the database."},{"lineNumber":367,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the instructor parameters are not valid"},{"lineNumber":368,"author":{"gitId":"-"},"content":" */"},{"lineNumber":369,"author":{"gitId":"-"},"content":" public Instructor joinCourseForInstructor(String googleId, Instructor instructor)"},{"lineNumber":370,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" if (googleId \u003d\u003d null) {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Instructor\u0027s googleId cannot be null\");"},{"lineNumber":373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":374,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":375,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Instructor cannot be null\");"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"-"},"content":" // setting account for instructor sets it as registered"},{"lineNumber":379,"author":{"gitId":"-"},"content":" if (instructor.getAccount() \u003d\u003d null) {"},{"lineNumber":380,"author":{"gitId":"-"},"content":" Account dbAccount \u003d accountsLogic.getAccountForGoogleId(googleId);"},{"lineNumber":381,"author":{"gitId":"-"},"content":" if (dbAccount !\u003d null) {"},{"lineNumber":382,"author":{"gitId":"-"},"content":" instructor.setAccount(dbAccount);"},{"lineNumber":383,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":384,"author":{"gitId":"-"},"content":" Account account \u003d new Account(googleId, instructor.getName(), instructor.getEmail());"},{"lineNumber":385,"author":{"gitId":"-"},"content":" instructor.setAccount(account);"},{"lineNumber":386,"author":{"gitId":"-"},"content":" accountsLogic.createAccount(account);"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":389,"author":{"gitId":"-"},"content":" instructor.setGoogleId(googleId);"},{"lineNumber":390,"author":{"gitId":"-"},"content":" }"},{"lineNumber":391,"author":{"gitId":"-"},"content":" usersDb.updateUser(instructor);"},{"lineNumber":392,"author":{"gitId":"-"},"content":""},{"lineNumber":393,"author":{"gitId":"-"},"content":" // Update the googleId of the student entity for the instructor which was created from sample data."},{"lineNumber":394,"author":{"gitId":"-"},"content":" Student student \u003d getStudentForEmail(instructor.getCourseId(), instructor.getEmail());"},{"lineNumber":395,"author":{"gitId":"-"},"content":" if (student !\u003d null) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" if (student.getAccount() \u003d\u003d null) {"},{"lineNumber":397,"author":{"gitId":"-"},"content":" Account account \u003d new Account(googleId, student.getName(), student.getEmail());"},{"lineNumber":398,"author":{"gitId":"-"},"content":" student.setAccount(account);"},{"lineNumber":399,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":400,"author":{"gitId":"-"},"content":" student.getAccount().setGoogleId(googleId);"},{"lineNumber":401,"author":{"gitId":"-"},"content":" }"},{"lineNumber":402,"author":{"gitId":"-"},"content":" usersDb.updateUser(student);"},{"lineNumber":403,"author":{"gitId":"-"},"content":" }"},{"lineNumber":404,"author":{"gitId":"-"},"content":""},{"lineNumber":405,"author":{"gitId":"-"},"content":" return instructor;"},{"lineNumber":406,"author":{"gitId":"-"},"content":" }"},{"lineNumber":407,"author":{"gitId":"-"},"content":""},{"lineNumber":408,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":409,"author":{"gitId":"-"},"content":" * Regenerates the registration key for the instructor with email address {@code email} in course {@code courseId}."},{"lineNumber":410,"author":{"gitId":"-"},"content":" *"},{"lineNumber":411,"author":{"gitId":"-"},"content":" * @return the instructor with the new registration key."},{"lineNumber":412,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if system was unable to generate a new registration key."},{"lineNumber":413,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the instructor does not exist."},{"lineNumber":414,"author":{"gitId":"-"},"content":" */"},{"lineNumber":415,"author":{"gitId":"-"},"content":" public Instructor regenerateInstructorRegistrationKey(String courseId, String email)"},{"lineNumber":416,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InstructorUpdateException {"},{"lineNumber":417,"author":{"gitId":"-"},"content":" Instructor instructor \u003d getInstructorForEmail(courseId, email);"},{"lineNumber":418,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":419,"author":{"gitId":"-"},"content":" String errorMessage \u003d String.format("},{"lineNumber":420,"author":{"gitId":"-"},"content":" \"The instructor with the email %s could not be found for the course with ID [%s].\", email, courseId);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(errorMessage);"},{"lineNumber":422,"author":{"gitId":"-"},"content":" }"},{"lineNumber":423,"author":{"gitId":"-"},"content":""},{"lineNumber":424,"author":{"gitId":"-"},"content":" String oldKey \u003d instructor.getRegKey();"},{"lineNumber":425,"author":{"gitId":"-"},"content":" int numTries \u003d 0;"},{"lineNumber":426,"author":{"gitId":"-"},"content":" while (numTries \u003c MAX_KEY_REGENERATION_TRIES) {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" instructor.generateNewRegistrationKey();"},{"lineNumber":428,"author":{"gitId":"-"},"content":" if (!instructor.getRegKey().equals(oldKey)) {"},{"lineNumber":429,"author":{"gitId":"-"},"content":" return instructor;"},{"lineNumber":430,"author":{"gitId":"-"},"content":" }"},{"lineNumber":431,"author":{"gitId":"-"},"content":" numTries++;"},{"lineNumber":432,"author":{"gitId":"-"},"content":" }"},{"lineNumber":433,"author":{"gitId":"-"},"content":""},{"lineNumber":434,"author":{"gitId":"-"},"content":" throw new InstructorUpdateException(\"Could not regenerate a new course registration key for the instructor.\");"},{"lineNumber":435,"author":{"gitId":"-"},"content":" }"},{"lineNumber":436,"author":{"gitId":"-"},"content":""},{"lineNumber":437,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":438,"author":{"gitId":"-"},"content":" * Regenerates the registration key for the student with email address {@code email} in course {@code courseId}."},{"lineNumber":439,"author":{"gitId":"-"},"content":" *"},{"lineNumber":440,"author":{"gitId":"-"},"content":" * @return the student with the new registration key."},{"lineNumber":441,"author":{"gitId":"-"},"content":" * @throws StudentUpdateException if system was unable to generate a new registration key."},{"lineNumber":442,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the student does not exist."},{"lineNumber":443,"author":{"gitId":"-"},"content":" */"},{"lineNumber":444,"author":{"gitId":"-"},"content":" public Student regenerateStudentRegistrationKey(String courseId, String email)"},{"lineNumber":445,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, StudentUpdateException {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" Student student \u003d getStudentForEmail(courseId, email);"},{"lineNumber":447,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":448,"author":{"gitId":"-"},"content":" String errorMessage \u003d String.format("},{"lineNumber":449,"author":{"gitId":"-"},"content":" \"The student with the email %s could not be found for the course with ID [%s].\", email, courseId);"},{"lineNumber":450,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(errorMessage);"},{"lineNumber":451,"author":{"gitId":"-"},"content":" }"},{"lineNumber":452,"author":{"gitId":"-"},"content":""},{"lineNumber":453,"author":{"gitId":"-"},"content":" String oldKey \u003d student.getRegKey();"},{"lineNumber":454,"author":{"gitId":"-"},"content":" int numTries \u003d 0;"},{"lineNumber":455,"author":{"gitId":"-"},"content":" while (numTries \u003c MAX_KEY_REGENERATION_TRIES) {"},{"lineNumber":456,"author":{"gitId":"-"},"content":" student.generateNewRegistrationKey();"},{"lineNumber":457,"author":{"gitId":"-"},"content":" if (!student.getRegKey().equals(oldKey)) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" return student;"},{"lineNumber":459,"author":{"gitId":"-"},"content":" }"},{"lineNumber":460,"author":{"gitId":"-"},"content":" numTries++;"},{"lineNumber":461,"author":{"gitId":"-"},"content":" }"},{"lineNumber":462,"author":{"gitId":"-"},"content":""},{"lineNumber":463,"author":{"gitId":"-"},"content":" throw new StudentUpdateException(\"Could not regenerate a new course registration key for the student.\");"},{"lineNumber":464,"author":{"gitId":"-"},"content":" }"},{"lineNumber":465,"author":{"gitId":"-"},"content":""},{"lineNumber":466,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":467,"author":{"gitId":"-"},"content":" * Returns true if the user associated with the googleId is an instructor in any course in the system."},{"lineNumber":468,"author":{"gitId":"-"},"content":" */"},{"lineNumber":469,"author":{"gitId":"-"},"content":" public boolean isInstructorInAnyCourse(String googleId) {"},{"lineNumber":470,"author":{"gitId":"-"},"content":" return !usersDb.getAllInstructorsByGoogleId(googleId).isEmpty();"},{"lineNumber":471,"author":{"gitId":"-"},"content":" }"},{"lineNumber":472,"author":{"gitId":"-"},"content":""},{"lineNumber":473,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":474,"author":{"gitId":"-"},"content":" * Gets student associated with {@code id}."},{"lineNumber":475,"author":{"gitId":"-"},"content":" *"},{"lineNumber":476,"author":{"gitId":"-"},"content":" * @param id Id of Student."},{"lineNumber":477,"author":{"gitId":"-"},"content":" * @return Returns Student if found else null."},{"lineNumber":478,"author":{"gitId":"-"},"content":" */"},{"lineNumber":479,"author":{"gitId":"-"},"content":" public Student getStudent(UUID id) {"},{"lineNumber":480,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":481,"author":{"gitId":"-"},"content":""},{"lineNumber":482,"author":{"gitId":"-"},"content":" return usersDb.getStudent(id);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" }"},{"lineNumber":484,"author":{"gitId":"-"},"content":""},{"lineNumber":485,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":486,"author":{"gitId":"-"},"content":" * Gets the student with the specified email."},{"lineNumber":487,"author":{"gitId":"-"},"content":" */"},{"lineNumber":488,"author":{"gitId":"-"},"content":" public Student getStudentForEmail(String courseId, String userEmail) {"},{"lineNumber":489,"author":{"gitId":"-"},"content":" return usersDb.getStudentForEmail(courseId, userEmail);"},{"lineNumber":490,"author":{"gitId":"-"},"content":" }"},{"lineNumber":491,"author":{"gitId":"-"},"content":""},{"lineNumber":492,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":493,"author":{"gitId":"-"},"content":" * Check if the students with the provided emails exist in the course."},{"lineNumber":494,"author":{"gitId":"-"},"content":" */"},{"lineNumber":495,"author":{"gitId":"-"},"content":" public boolean verifyStudentsExistInCourse(String courseId, List\u003cString\u003e emails) {"},{"lineNumber":496,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students \u003d usersDb.getStudentsForEmails(courseId, emails);"},{"lineNumber":497,"author":{"gitId":"-"},"content":" Map\u003cString, User\u003e emailStudentMap \u003d convertUserListToEmailUserMap(students);"},{"lineNumber":498,"author":{"gitId":"-"},"content":""},{"lineNumber":499,"author":{"gitId":"-"},"content":" for (String email : emails) {"},{"lineNumber":500,"author":{"gitId":"-"},"content":" if (!emailStudentMap.containsKey(email)) {"},{"lineNumber":501,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":502,"author":{"gitId":"-"},"content":" }"},{"lineNumber":503,"author":{"gitId":"-"},"content":" }"},{"lineNumber":504,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":505,"author":{"gitId":"-"},"content":" }"},{"lineNumber":506,"author":{"gitId":"-"},"content":""},{"lineNumber":507,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":508,"author":{"gitId":"-"},"content":" * Gets a list of students with the specified email."},{"lineNumber":509,"author":{"gitId":"-"},"content":" */"},{"lineNumber":510,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getAllStudentsForEmail(String email) {"},{"lineNumber":511,"author":{"gitId":"-"},"content":" return usersDb.getAllStudentsForEmail(email);"},{"lineNumber":512,"author":{"gitId":"-"},"content":" }"},{"lineNumber":513,"author":{"gitId":"-"},"content":""},{"lineNumber":514,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":515,"author":{"gitId":"-"},"content":" * Gets all students associated with a googleId."},{"lineNumber":516,"author":{"gitId":"-"},"content":" */"},{"lineNumber":517,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getAllStudentsByGoogleId(String googleId) {"},{"lineNumber":518,"author":{"gitId":"-"},"content":" return usersDb.getAllStudentsByGoogleId(googleId);"},{"lineNumber":519,"author":{"gitId":"-"},"content":" }"},{"lineNumber":520,"author":{"gitId":"-"},"content":""},{"lineNumber":521,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":522,"author":{"gitId":"-"},"content":" * Gets a list of students for the specified course."},{"lineNumber":523,"author":{"gitId":"-"},"content":" */"},{"lineNumber":524,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForCourse(String courseId) {"},{"lineNumber":525,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentReturnList \u003d usersDb.getStudentsForCourse(courseId);"},{"lineNumber":526,"author":{"gitId":"-"},"content":" sortByName(studentReturnList);"},{"lineNumber":527,"author":{"gitId":"-"},"content":""},{"lineNumber":528,"author":{"gitId":"-"},"content":" return studentReturnList;"},{"lineNumber":529,"author":{"gitId":"-"},"content":" }"},{"lineNumber":530,"author":{"gitId":"-"},"content":""},{"lineNumber":531,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":532,"author":{"gitId":"-"},"content":" * Gets a list of unregistered students for the specified course."},{"lineNumber":533,"author":{"gitId":"-"},"content":" */"},{"lineNumber":534,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getUnregisteredStudentsForCourse(String courseId) {"},{"lineNumber":535,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students \u003d getStudentsForCourse(courseId);"},{"lineNumber":536,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e unregisteredStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":537,"author":{"gitId":"-"},"content":""},{"lineNumber":538,"author":{"gitId":"-"},"content":" for (Student s : students) {"},{"lineNumber":539,"author":{"gitId":"-"},"content":" if (s.getAccount() \u003d\u003d null) {"},{"lineNumber":540,"author":{"gitId":"-"},"content":" unregisteredStudents.add(s);"},{"lineNumber":541,"author":{"gitId":"-"},"content":" }"},{"lineNumber":542,"author":{"gitId":"-"},"content":" }"},{"lineNumber":543,"author":{"gitId":"-"},"content":""},{"lineNumber":544,"author":{"gitId":"-"},"content":" return unregisteredStudents;"},{"lineNumber":545,"author":{"gitId":"-"},"content":" }"},{"lineNumber":546,"author":{"gitId":"-"},"content":""},{"lineNumber":547,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":548,"author":{"gitId":"yuanxi1"},"content":" * Searches for students."},{"lineNumber":549,"author":{"gitId":"yuanxi1"},"content":" *"},{"lineNumber":550,"author":{"gitId":"yuanxi1"},"content":" * @param instructors the constraint that restricts the search result"},{"lineNumber":551,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":552,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudents(String queryString, List\u003cInstructor\u003e instructors)"},{"lineNumber":553,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":554,"author":{"gitId":"yuanxi1"},"content":" return usersDb.searchStudents(queryString, instructors);"},{"lineNumber":555,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":556,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":557,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":558,"author":{"gitId":"yuanxi1"},"content":" * This method should be used by admin only since the searching does not restrict the"},{"lineNumber":559,"author":{"gitId":"yuanxi1"},"content":" * visibility according to the logged-in user\u0027s google ID. This is used by admin to"},{"lineNumber":560,"author":{"gitId":"yuanxi1"},"content":" * search students in the whole system."},{"lineNumber":561,"author":{"gitId":"yuanxi1"},"content":" * @return null if no result found"},{"lineNumber":562,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":563,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudentsInWholeSystem(String queryString)"},{"lineNumber":564,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":565,"author":{"gitId":"yuanxi1"},"content":" return usersDb.searchStudentsInWholeSystem(queryString);"},{"lineNumber":566,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":567,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":568,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":569,"author":{"gitId":"-"},"content":" * Gets all students of a section."},{"lineNumber":570,"author":{"gitId":"-"},"content":" */"},{"lineNumber":571,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForSection(String sectionName, String courseId) {"},{"lineNumber":572,"author":{"gitId":"-"},"content":" return usersDb.getStudentsForSection(sectionName, courseId);"},{"lineNumber":573,"author":{"gitId":"-"},"content":" }"},{"lineNumber":574,"author":{"gitId":"-"},"content":""},{"lineNumber":575,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":576,"author":{"gitId":"-"},"content":" * Gets all students of a team."},{"lineNumber":577,"author":{"gitId":"-"},"content":" */"},{"lineNumber":578,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForTeam(String teamName, String courseId) {"},{"lineNumber":579,"author":{"gitId":"-"},"content":" return usersDb.getStudentsForTeam(teamName, courseId);"},{"lineNumber":580,"author":{"gitId":"-"},"content":" }"},{"lineNumber":581,"author":{"gitId":"-"},"content":""},{"lineNumber":582,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":583,"author":{"gitId":"-"},"content":" * Gets a student by associated {@code regkey}."},{"lineNumber":584,"author":{"gitId":"-"},"content":" */"},{"lineNumber":585,"author":{"gitId":"-"},"content":" public Student getStudentByRegistrationKey(String regKey) {"},{"lineNumber":586,"author":{"gitId":"-"},"content":" assert regKey !\u003d null;"},{"lineNumber":587,"author":{"gitId":"-"},"content":""},{"lineNumber":588,"author":{"gitId":"-"},"content":" return usersDb.getStudentByRegKey(regKey);"},{"lineNumber":589,"author":{"gitId":"-"},"content":" }"},{"lineNumber":590,"author":{"gitId":"-"},"content":""},{"lineNumber":591,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":592,"author":{"gitId":"-"},"content":" * Gets a student by associated {@code googleId}."},{"lineNumber":593,"author":{"gitId":"-"},"content":" */"},{"lineNumber":594,"author":{"gitId":"-"},"content":" public Student getStudentByGoogleId(String courseId, String googleId) {"},{"lineNumber":595,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":596,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":597,"author":{"gitId":"-"},"content":""},{"lineNumber":598,"author":{"gitId":"-"},"content":" return usersDb.getStudentByGoogleId(courseId, googleId);"},{"lineNumber":599,"author":{"gitId":"-"},"content":" }"},{"lineNumber":600,"author":{"gitId":"-"},"content":""},{"lineNumber":601,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":602,"author":{"gitId":"-"},"content":" * Gets all students associated with a googleId."},{"lineNumber":603,"author":{"gitId":"-"},"content":" */"},{"lineNumber":604,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByGoogleId(String googleId) {"},{"lineNumber":605,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":606,"author":{"gitId":"-"},"content":""},{"lineNumber":607,"author":{"gitId":"-"},"content":" return usersDb.getStudentsByGoogleId(googleId);"},{"lineNumber":608,"author":{"gitId":"-"},"content":" }"},{"lineNumber":609,"author":{"gitId":"-"},"content":""},{"lineNumber":610,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":611,"author":{"gitId":"-"},"content":" * Returns true if the user associated with the googleId is a student in any"},{"lineNumber":612,"author":{"gitId":"-"},"content":" * course in the system."},{"lineNumber":613,"author":{"gitId":"-"},"content":" */"},{"lineNumber":614,"author":{"gitId":"-"},"content":" public boolean isStudentInAnyCourse(String googleId) {"},{"lineNumber":615,"author":{"gitId":"-"},"content":" return !usersDb.getAllStudentsByGoogleId(googleId).isEmpty();"},{"lineNumber":616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":619,"author":{"gitId":"-"},"content":" * Gets all instructors and students by {@code googleId}."},{"lineNumber":620,"author":{"gitId":"-"},"content":" */"},{"lineNumber":621,"author":{"gitId":"-"},"content":" public List\u003cUser\u003e getAllUsersByGoogleId(String googleId) {"},{"lineNumber":622,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":623,"author":{"gitId":"-"},"content":""},{"lineNumber":624,"author":{"gitId":"-"},"content":" return usersDb.getAllUsersByGoogleId(googleId);"},{"lineNumber":625,"author":{"gitId":"-"},"content":" }"},{"lineNumber":626,"author":{"gitId":"-"},"content":""},{"lineNumber":627,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":628,"author":{"gitId":"domoberzin"},"content":" * Gets the section with the name in a particular course."},{"lineNumber":629,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":630,"author":{"gitId":"domoberzin"},"content":" public Section getSection(String courseId, String sectionName) {"},{"lineNumber":631,"author":{"gitId":"domoberzin"},"content":" return usersDb.getSection(courseId, sectionName);"},{"lineNumber":632,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":633,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":634,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":635,"author":{"gitId":"domoberzin"},"content":" * Gets the section with the name in a particular course, otherwise creates a new section."},{"lineNumber":636,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":637,"author":{"gitId":"domoberzin"},"content":" public Section getSectionOrCreate(String courseId, String sectionName) {"},{"lineNumber":638,"author":{"gitId":"domoberzin"},"content":" return usersDb.getSectionOrCreate(courseId, sectionName);"},{"lineNumber":639,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":640,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":641,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":642,"author":{"gitId":"domoberzin"},"content":" * Gets the team with the name in a particular session, otherwise creates a new team."},{"lineNumber":643,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":644,"author":{"gitId":"domoberzin"},"content":" public Team getTeamOrCreate(Section section, String teamName) {"},{"lineNumber":645,"author":{"gitId":"domoberzin"},"content":" return usersDb.getTeamOrCreate(section, teamName);"},{"lineNumber":646,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":647,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":648,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":649,"author":{"gitId":"-"},"content":" * Checks if there are any other registered instructors that can modify instructors."},{"lineNumber":650,"author":{"gitId":"-"},"content":" * If there are none, the instructor currently being edited will be granted the privilege"},{"lineNumber":651,"author":{"gitId":"-"},"content":" * of modifying instructors automatically."},{"lineNumber":652,"author":{"gitId":"-"},"content":" *"},{"lineNumber":653,"author":{"gitId":"-"},"content":" * @param courseId Id of the course."},{"lineNumber":654,"author":{"gitId":"-"},"content":" * @param instructorToEdit Instructor that will be edited."},{"lineNumber":655,"author":{"gitId":"-"},"content":" * This may be modified within the method."},{"lineNumber":656,"author":{"gitId":"-"},"content":" */"},{"lineNumber":657,"author":{"gitId":"-"},"content":" public void updateToEnsureValidityOfInstructorsForTheCourse(String courseId, Instructor instructorToEdit) {"},{"lineNumber":658,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d getInstructorsForCourse(courseId);"},{"lineNumber":659,"author":{"gitId":"-"},"content":" int numOfInstrCanModifyInstructor \u003d 0;"},{"lineNumber":660,"author":{"gitId":"-"},"content":" Instructor instrWithModifyInstructorPrivilege \u003d null;"},{"lineNumber":661,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":662,"author":{"gitId":"-"},"content":" if (instructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR)) {"},{"lineNumber":663,"author":{"gitId":"-"},"content":" numOfInstrCanModifyInstructor++;"},{"lineNumber":664,"author":{"gitId":"-"},"content":" instrWithModifyInstructorPrivilege \u003d instructor;"},{"lineNumber":665,"author":{"gitId":"-"},"content":" }"},{"lineNumber":666,"author":{"gitId":"-"},"content":" }"},{"lineNumber":667,"author":{"gitId":"-"},"content":" boolean isLastRegInstructorWithPrivilege \u003d numOfInstrCanModifyInstructor \u003c\u003d 1"},{"lineNumber":668,"author":{"gitId":"-"},"content":" \u0026\u0026 instrWithModifyInstructorPrivilege !\u003d null"},{"lineNumber":669,"author":{"gitId":"-"},"content":" \u0026\u0026 (!instrWithModifyInstructorPrivilege.isRegistered()"},{"lineNumber":670,"author":{"gitId":"-"},"content":" || instrWithModifyInstructorPrivilege.getGoogleId()"},{"lineNumber":671,"author":{"gitId":"-"},"content":" .equals(instructorToEdit.getGoogleId()));"},{"lineNumber":672,"author":{"gitId":"-"},"content":" if (isLastRegInstructorWithPrivilege) {"},{"lineNumber":673,"author":{"gitId":"-"},"content":" instructorToEdit.getPrivileges().updatePrivilege(Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR, true);"},{"lineNumber":674,"author":{"gitId":"-"},"content":" }"},{"lineNumber":675,"author":{"gitId":"-"},"content":" }"},{"lineNumber":676,"author":{"gitId":"-"},"content":""},{"lineNumber":677,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":678,"author":{"gitId":"-"},"content":" * Deletes a student along with its associated feedback responses, deadline extensions and comments."},{"lineNumber":679,"author":{"gitId":"-"},"content":" *"},{"lineNumber":680,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the student does not exist."},{"lineNumber":681,"author":{"gitId":"-"},"content":" */"},{"lineNumber":682,"author":{"gitId":"-"},"content":" public void deleteStudentCascade(String courseId, String studentEmail) {"},{"lineNumber":683,"author":{"gitId":"-"},"content":" Student student \u003d getStudentForEmail(courseId, studentEmail);"},{"lineNumber":684,"author":{"gitId":"-"},"content":""},{"lineNumber":685,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":686,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":687,"author":{"gitId":"-"},"content":" }"},{"lineNumber":688,"author":{"gitId":"-"},"content":""},{"lineNumber":689,"author":{"gitId":"-"},"content":" feedbackResponsesLogic"},{"lineNumber":690,"author":{"gitId":"-"},"content":" .deleteFeedbackResponsesForCourseCascade(courseId, studentEmail);"},{"lineNumber":691,"author":{"gitId":"-"},"content":""},{"lineNumber":692,"author":{"gitId":"-"},"content":" if (usersDb.getStudentCountForTeam(student.getTeamName(), student.getCourseId()) \u003d\u003d 1) {"},{"lineNumber":693,"author":{"gitId":"-"},"content":" // the student is the only student in the team, delete responses related to the team"},{"lineNumber":694,"author":{"gitId":"-"},"content":" feedbackResponsesLogic"},{"lineNumber":695,"author":{"gitId":"-"},"content":" .deleteFeedbackResponsesForCourseCascade("},{"lineNumber":696,"author":{"gitId":"-"},"content":" student.getCourse().getId(), student.getTeamName());"},{"lineNumber":697,"author":{"gitId":"-"},"content":" }"},{"lineNumber":698,"author":{"gitId":"-"},"content":""},{"lineNumber":699,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.deleteDeadlineExtensionsForUser(student);"},{"lineNumber":700,"author":{"gitId":"-"},"content":" deleteUser(student);"},{"lineNumber":701,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.updateRankRecipientQuestionResponsesAfterDeletingStudent(courseId);"},{"lineNumber":702,"author":{"gitId":"-"},"content":" }"},{"lineNumber":703,"author":{"gitId":"-"},"content":""},{"lineNumber":704,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":705,"author":{"gitId":"-"},"content":" * Deletes students in the course cascade their associated responses, deadline extensions, and comments."},{"lineNumber":706,"author":{"gitId":"-"},"content":" */"},{"lineNumber":707,"author":{"gitId":"-"},"content":" public void deleteStudentsInCourseCascade(String courseId) {"},{"lineNumber":708,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsInCourse \u003d getStudentsForCourse(courseId);"},{"lineNumber":709,"author":{"gitId":"-"},"content":""},{"lineNumber":710,"author":{"gitId":"-"},"content":" for (Student student : studentsInCourse) {"},{"lineNumber":711,"author":{"gitId":"-"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":712,"author":{"gitId":"-"},"content":" deleteStudentCascade(courseId, student.getEmail());"},{"lineNumber":713,"author":{"gitId":"-"},"content":" }"},{"lineNumber":714,"author":{"gitId":"-"},"content":" }"},{"lineNumber":715,"author":{"gitId":"-"},"content":""},{"lineNumber":716,"author":{"gitId":"marquestye"},"content":" private boolean isEmailChanged(String originalEmail, String newEmail) {"},{"lineNumber":717,"author":{"gitId":"marquestye"},"content":" return newEmail !\u003d null \u0026\u0026 !originalEmail.equals(newEmail);"},{"lineNumber":718,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":719,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":720,"author":{"gitId":"domoberzin"},"content":" private boolean isTeamChanged(Team originalTeam, Team newTeam) {"},{"lineNumber":721,"author":{"gitId":"domoberzin"},"content":" return newTeam !\u003d null \u0026\u0026 originalTeam !\u003d null"},{"lineNumber":722,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 !originalTeam.equals(newTeam);"},{"lineNumber":723,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":724,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":725,"author":{"gitId":"domoberzin"},"content":" private boolean isSectionChanged(Section originalSection, Section newSection) {"},{"lineNumber":726,"author":{"gitId":"domoberzin"},"content":" return newSection !\u003d null \u0026\u0026 originalSection !\u003d null"},{"lineNumber":727,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 !originalSection.equals(newSection);"},{"lineNumber":728,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":729,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":730,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":731,"author":{"gitId":"domoberzin"},"content":" * Updates a student by {@link Student}."},{"lineNumber":732,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":733,"author":{"gitId":"marquestye"},"content":" * \u003cp\u003eIf email changed, update by recreating the student and cascade update all responses"},{"lineNumber":734,"author":{"gitId":"marquestye"},"content":" * and comments the student gives/receives."},{"lineNumber":735,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":736,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf team changed, cascade delete all responses the student gives/receives within that team."},{"lineNumber":737,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":738,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf section changed, cascade update all responses the student gives/receives."},{"lineNumber":739,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":740,"author":{"gitId":"domoberzin"},"content":" * @return updated student"},{"lineNumber":741,"author":{"gitId":"domoberzin"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":742,"author":{"gitId":"domoberzin"},"content":" * @throws EntityDoesNotExistException if the student cannot be found"},{"lineNumber":743,"author":{"gitId":"domoberzin"},"content":" * @throws EntityAlreadyExistsException if the student cannot be updated"},{"lineNumber":744,"author":{"gitId":"domoberzin"},"content":" * by recreation because of an existent student"},{"lineNumber":745,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":746,"author":{"gitId":"domoberzin"},"content":" public Student updateStudentCascade(Student student)"},{"lineNumber":747,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":748,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":749,"author":{"gitId":"marquestye"},"content":" String courseId \u003d student.getCourseId();"},{"lineNumber":750,"author":{"gitId":"marquestye"},"content":" Student originalStudent \u003d getStudent(student.getId());"},{"lineNumber":751,"author":{"gitId":"marquestye"},"content":" String originalEmail \u003d originalStudent.getEmail();"},{"lineNumber":752,"author":{"gitId":"marquestye"},"content":" boolean changedEmail \u003d isEmailChanged(originalEmail, student.getEmail());"},{"lineNumber":753,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":754,"author":{"gitId":"marquestye"},"content":" // check for email conflict"},{"lineNumber":755,"author":{"gitId":"marquestye"},"content":" Student s \u003d usersDb.getStudentForEmail(courseId, student.getEmail());"},{"lineNumber":756,"author":{"gitId":"marquestye"},"content":" if (changedEmail \u0026\u0026 s !\u003d null) {"},{"lineNumber":757,"author":{"gitId":"marquestye"},"content":" String errorMessage \u003d String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, s.toString());"},{"lineNumber":758,"author":{"gitId":"marquestye"},"content":" throw new EntityAlreadyExistsException(errorMessage);"},{"lineNumber":759,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":760,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":761,"author":{"gitId":"domoberzin"},"content":" Team originalTeam \u003d originalStudent.getTeam();"},{"lineNumber":762,"author":{"gitId":"domoberzin"},"content":" Section originalSection \u003d originalStudent.getSection();"},{"lineNumber":763,"author":{"gitId":"domoberzin"},"content":" boolean changedTeam \u003d isTeamChanged(originalTeam, student.getTeam());"},{"lineNumber":764,"author":{"gitId":"domoberzin"},"content":" boolean changedSection \u003d isSectionChanged(originalSection, student.getSection());"},{"lineNumber":765,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":766,"author":{"gitId":"marquestye"},"content":" // update student"},{"lineNumber":767,"author":{"gitId":"marquestye"},"content":" usersDb.checkBeforeUpdateStudent(student);"},{"lineNumber":768,"author":{"gitId":"domoberzin"},"content":" originalStudent.setName(student.getName());"},{"lineNumber":769,"author":{"gitId":"domoberzin"},"content":" originalStudent.setTeam(student.getTeam());"},{"lineNumber":770,"author":{"gitId":"domoberzin"},"content":" originalStudent.setEmail(student.getEmail());"},{"lineNumber":771,"author":{"gitId":"domoberzin"},"content":" originalStudent.setComments(student.getComments());"},{"lineNumber":772,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":773,"author":{"gitId":"marquestye"},"content":" // cascade email changes to responses and comments"},{"lineNumber":774,"author":{"gitId":"marquestye"},"content":" if (changedEmail) {"},{"lineNumber":775,"author":{"gitId":"marquestye"},"content":" feedbackResponsesLogic.updateFeedbackResponsesForChangingEmail(courseId, originalEmail, student.getEmail());"},{"lineNumber":776,"author":{"gitId":"marquestye"},"content":" feedbackResponseCommentsLogic.updateFeedbackResponseCommentsEmails(courseId, originalEmail, student.getEmail());"},{"lineNumber":777,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":778,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":779,"author":{"gitId":"domoberzin"},"content":" // adjust submissions if moving to a different team"},{"lineNumber":780,"author":{"gitId":"domoberzin"},"content":" if (changedTeam) {"},{"lineNumber":781,"author":{"gitId":"marquestye"},"content":" feedbackResponsesLogic.updateFeedbackResponsesForChangingTeam(student.getCourse(), student.getEmail(),"},{"lineNumber":782,"author":{"gitId":"marquestye"},"content":" student.getTeam(), originalTeam);"},{"lineNumber":783,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":784,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":785,"author":{"gitId":"domoberzin"},"content":" // update the new section name in responses"},{"lineNumber":786,"author":{"gitId":"domoberzin"},"content":" if (changedSection) {"},{"lineNumber":787,"author":{"gitId":"domoberzin"},"content":" feedbackResponsesLogic.updateFeedbackResponsesForChangingSection("},{"lineNumber":788,"author":{"gitId":"marquestye"},"content":" student.getCourse(), student.getEmail(), student.getSection());"},{"lineNumber":789,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":790,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":791,"author":{"gitId":"marquestye"},"content":" return originalStudent;"},{"lineNumber":792,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":793,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":794,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":795,"author":{"gitId":"-"},"content":" * Resets the googleId associated with the instructor."},{"lineNumber":796,"author":{"gitId":"-"},"content":" */"},{"lineNumber":797,"author":{"gitId":"-"},"content":" public void resetInstructorGoogleId(String email, String courseId, String googleId)"},{"lineNumber":798,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":799,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":800,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":801,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":802,"author":{"gitId":"-"},"content":""},{"lineNumber":803,"author":{"gitId":"-"},"content":" Instructor instructor \u003d getInstructorForEmail(courseId, email);"},{"lineNumber":804,"author":{"gitId":"-"},"content":""},{"lineNumber":805,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":806,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT"},{"lineNumber":807,"author":{"gitId":"-"},"content":" + \"Instructor [courseId\u003d\" + courseId + \", email\u003d\" + email + \"]\");"},{"lineNumber":808,"author":{"gitId":"-"},"content":" }"},{"lineNumber":809,"author":{"gitId":"-"},"content":""},{"lineNumber":810,"author":{"gitId":"-"},"content":" instructor.setAccount(null);"},{"lineNumber":811,"author":{"gitId":"-"},"content":""},{"lineNumber":812,"author":{"gitId":"-"},"content":" if (usersDb.getAllUsersByGoogleId(googleId).isEmpty()) {"},{"lineNumber":813,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccountCascade(googleId);"},{"lineNumber":814,"author":{"gitId":"-"},"content":" }"},{"lineNumber":815,"author":{"gitId":"-"},"content":" }"},{"lineNumber":816,"author":{"gitId":"-"},"content":""},{"lineNumber":817,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":818,"author":{"gitId":"domoberzin"},"content":" * Validates sections for any limit violations and teams for any team name violations."},{"lineNumber":819,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":820,"author":{"gitId":"domoberzin"},"content":" public void validateSectionsAndTeams("},{"lineNumber":821,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentList, String courseId) throws EnrollException {"},{"lineNumber":822,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":823,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e mergedList \u003d getMergedList(studentList, courseId);"},{"lineNumber":824,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":825,"author":{"gitId":"domoberzin"},"content":" if (mergedList.size() \u003c 2) { // no conflicts"},{"lineNumber":826,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":827,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":828,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":829,"author":{"gitId":"domoberzin"},"content":" String errorMessage \u003d getSectionInvalidityInfo(mergedList) + getTeamInvalidityInfo(mergedList);"},{"lineNumber":830,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":831,"author":{"gitId":"domoberzin"},"content":" if (!errorMessage.isEmpty()) {"},{"lineNumber":832,"author":{"gitId":"domoberzin"},"content":" throw new EnrollException(errorMessage);"},{"lineNumber":833,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":834,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":835,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":836,"author":{"gitId":"domoberzin"},"content":" private List\u003cStudent\u003e getMergedList(List\u003cStudent\u003e studentList, String courseId) {"},{"lineNumber":837,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":838,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e mergedList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":839,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentsInCourse \u003d getStudentsForCourse(courseId);"},{"lineNumber":840,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":841,"author":{"gitId":"domoberzin"},"content":" for (Student student : studentList) {"},{"lineNumber":842,"author":{"gitId":"domoberzin"},"content":" mergedList.add(student);"},{"lineNumber":843,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":844,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":845,"author":{"gitId":"domoberzin"},"content":" for (Student student : studentsInCourse) {"},{"lineNumber":846,"author":{"gitId":"domoberzin"},"content":" if (!isInEnrollList(student, mergedList)) {"},{"lineNumber":847,"author":{"gitId":"domoberzin"},"content":" mergedList.add(student);"},{"lineNumber":848,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":849,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":850,"author":{"gitId":"domoberzin"},"content":" return mergedList;"},{"lineNumber":851,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":852,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":853,"author":{"gitId":"domoberzin"},"content":" private String getSectionInvalidityInfo(List\u003cStudent\u003e mergedList) {"},{"lineNumber":854,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":855,"author":{"gitId":"domoberzin"},"content":" mergedList.sort(Comparator.comparing((Student student) -\u003e student.getSectionName())"},{"lineNumber":856,"author":{"gitId":"domoberzin"},"content":" .thenComparing(student -\u003e student.getTeamName())"},{"lineNumber":857,"author":{"gitId":"domoberzin"},"content":" .thenComparing(student -\u003e student.getName()));"},{"lineNumber":858,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":859,"author":{"gitId":"domoberzin"},"content":" List\u003cString\u003e invalidSectionList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":860,"author":{"gitId":"domoberzin"},"content":" int studentsCount \u003d 1;"},{"lineNumber":861,"author":{"gitId":"domoberzin"},"content":" for (int i \u003d 1; i \u003c mergedList.size(); i++) {"},{"lineNumber":862,"author":{"gitId":"domoberzin"},"content":" Student currentStudent \u003d mergedList.get(i);"},{"lineNumber":863,"author":{"gitId":"domoberzin"},"content":" Student previousStudent \u003d mergedList.get(i - 1);"},{"lineNumber":864,"author":{"gitId":"domoberzin"},"content":" if (currentStudent.getSectionName().equals(previousStudent.getSectionName())) {"},{"lineNumber":865,"author":{"gitId":"domoberzin"},"content":" studentsCount++;"},{"lineNumber":866,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":867,"author":{"gitId":"domoberzin"},"content":" if (studentsCount \u003e Const.SECTION_SIZE_LIMIT) {"},{"lineNumber":868,"author":{"gitId":"domoberzin"},"content":" invalidSectionList.add(previousStudent.getSectionName());"},{"lineNumber":869,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":870,"author":{"gitId":"domoberzin"},"content":" studentsCount \u003d 1;"},{"lineNumber":871,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":872,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":873,"author":{"gitId":"domoberzin"},"content":" if (i \u003d\u003d mergedList.size() - 1 \u0026\u0026 studentsCount \u003e Const.SECTION_SIZE_LIMIT) {"},{"lineNumber":874,"author":{"gitId":"domoberzin"},"content":" invalidSectionList.add(currentStudent.getSectionName());"},{"lineNumber":875,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":876,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":877,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":878,"author":{"gitId":"domoberzin"},"content":" StringJoiner errorMessage \u003d new StringJoiner(\" \");"},{"lineNumber":879,"author":{"gitId":"domoberzin"},"content":" for (String section : invalidSectionList) {"},{"lineNumber":880,"author":{"gitId":"domoberzin"},"content":" errorMessage.add(String.format("},{"lineNumber":881,"author":{"gitId":"domoberzin"},"content":" ERROR_ENROLL_EXCEED_SECTION_LIMIT,"},{"lineNumber":882,"author":{"gitId":"domoberzin"},"content":" Const.SECTION_SIZE_LIMIT, section));"},{"lineNumber":883,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":884,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":885,"author":{"gitId":"domoberzin"},"content":" if (!invalidSectionList.isEmpty()) {"},{"lineNumber":886,"author":{"gitId":"domoberzin"},"content":" errorMessage.add(String.format("},{"lineNumber":887,"author":{"gitId":"domoberzin"},"content":" ERROR_ENROLL_EXCEED_SECTION_LIMIT_INSTRUCTION,"},{"lineNumber":888,"author":{"gitId":"domoberzin"},"content":" Const.SECTION_SIZE_LIMIT));"},{"lineNumber":889,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":890,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":891,"author":{"gitId":"domoberzin"},"content":" return errorMessage.toString();"},{"lineNumber":892,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":893,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":894,"author":{"gitId":"domoberzin"},"content":" private String getTeamInvalidityInfo(List\u003cStudent\u003e mergedList) {"},{"lineNumber":895,"author":{"gitId":"domoberzin"},"content":" StringJoiner errorMessage \u003d new StringJoiner(\" \");"},{"lineNumber":896,"author":{"gitId":"domoberzin"},"content":" mergedList.sort(Comparator.comparing((Student student) -\u003e student.getTeamName())"},{"lineNumber":897,"author":{"gitId":"domoberzin"},"content":" .thenComparing(student -\u003e student.getName()));"},{"lineNumber":898,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":899,"author":{"gitId":"domoberzin"},"content":" List\u003cString\u003e invalidTeamList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":900,"author":{"gitId":"domoberzin"},"content":" for (int i \u003d 1; i \u003c mergedList.size(); i++) {"},{"lineNumber":901,"author":{"gitId":"domoberzin"},"content":" Student currentStudent \u003d mergedList.get(i);"},{"lineNumber":902,"author":{"gitId":"domoberzin"},"content":" Student previousStudent \u003d mergedList.get(i - 1);"},{"lineNumber":903,"author":{"gitId":"domoberzin"},"content":" if (currentStudent.getTeamName().equals(previousStudent.getTeamName())"},{"lineNumber":904,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 !currentStudent.getSectionName().equals(previousStudent.getSectionName())"},{"lineNumber":905,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 !invalidTeamList.contains(currentStudent.getTeamName())) {"},{"lineNumber":906,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":907,"author":{"gitId":"domoberzin"},"content":" errorMessage.add(String.format(ERROR_INVALID_TEAM_NAME,"},{"lineNumber":908,"author":{"gitId":"domoberzin"},"content":" currentStudent.getTeamName(),"},{"lineNumber":909,"author":{"gitId":"domoberzin"},"content":" previousStudent.getSectionName(),"},{"lineNumber":910,"author":{"gitId":"domoberzin"},"content":" currentStudent.getSectionName()));"},{"lineNumber":911,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":912,"author":{"gitId":"domoberzin"},"content":" invalidTeamList.add(currentStudent.getTeamName());"},{"lineNumber":913,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":914,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":915,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":916,"author":{"gitId":"domoberzin"},"content":" if (!invalidTeamList.isEmpty()) {"},{"lineNumber":917,"author":{"gitId":"domoberzin"},"content":" errorMessage.add(ERROR_INVALID_TEAM_NAME_INSTRUCTION);"},{"lineNumber":918,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":919,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":920,"author":{"gitId":"domoberzin"},"content":" return errorMessage.toString();"},{"lineNumber":921,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":922,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":923,"author":{"gitId":"domoberzin"},"content":" private boolean isInEnrollList(Student student,"},{"lineNumber":924,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentInfoList) {"},{"lineNumber":925,"author":{"gitId":"domoberzin"},"content":" for (Student studentInfo : studentInfoList) {"},{"lineNumber":926,"author":{"gitId":"domoberzin"},"content":" if (studentInfo.getEmail().equalsIgnoreCase(student.getEmail())) {"},{"lineNumber":927,"author":{"gitId":"domoberzin"},"content":" return true;"},{"lineNumber":928,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":929,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":930,"author":{"gitId":"domoberzin"},"content":" return false;"},{"lineNumber":931,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":932,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":933,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":934,"author":{"gitId":"-"},"content":" * Resets the googleId associated with the student."},{"lineNumber":935,"author":{"gitId":"-"},"content":" */"},{"lineNumber":936,"author":{"gitId":"-"},"content":" public void resetStudentGoogleId(String email, String courseId, String googleId)"},{"lineNumber":937,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":938,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":939,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":940,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":941,"author":{"gitId":"-"},"content":""},{"lineNumber":942,"author":{"gitId":"-"},"content":" Student student \u003d getStudentForEmail(courseId, email);"},{"lineNumber":943,"author":{"gitId":"-"},"content":""},{"lineNumber":944,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":945,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT"},{"lineNumber":946,"author":{"gitId":"-"},"content":" + \"Student [courseId\u003d\" + courseId + \", email\u003d\" + email + \"]\");"},{"lineNumber":947,"author":{"gitId":"-"},"content":" }"},{"lineNumber":948,"author":{"gitId":"-"},"content":""},{"lineNumber":949,"author":{"gitId":"-"},"content":" student.setAccount(null);"},{"lineNumber":950,"author":{"gitId":"-"},"content":""},{"lineNumber":951,"author":{"gitId":"-"},"content":" if (usersDb.getAllUsersByGoogleId(googleId).isEmpty()) {"},{"lineNumber":952,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccountCascade(googleId);"},{"lineNumber":953,"author":{"gitId":"-"},"content":" }"},{"lineNumber":954,"author":{"gitId":"-"},"content":" }"},{"lineNumber":955,"author":{"gitId":"-"},"content":""},{"lineNumber":956,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":957,"author":{"gitId":"-"},"content":" * Sorts the instructors list alphabetically by name."},{"lineNumber":958,"author":{"gitId":"-"},"content":" */"},{"lineNumber":959,"author":{"gitId":"-"},"content":" public static \u003cT extends User\u003e void sortByName(List\u003cT\u003e users) {"},{"lineNumber":960,"author":{"gitId":"-"},"content":" users.sort(Comparator.comparing(user -\u003e user.getName().toLowerCase()));"},{"lineNumber":961,"author":{"gitId":"-"},"content":" }"},{"lineNumber":962,"author":{"gitId":"-"},"content":""},{"lineNumber":963,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":964,"author":{"gitId":"-"},"content":" * Checks if an instructor with {@code googleId} can create a course with"},{"lineNumber":965,"author":{"gitId":"-"},"content":" * {@code institute}"},{"lineNumber":966,"author":{"gitId":"-"},"content":" * (ie. has an existing course(s) with the same {@code institute})."},{"lineNumber":967,"author":{"gitId":"-"},"content":" */"},{"lineNumber":968,"author":{"gitId":"-"},"content":" public boolean canInstructorCreateCourse(String googleId, String institute) {"},{"lineNumber":969,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":970,"author":{"gitId":"-"},"content":" assert institute !\u003d null;"},{"lineNumber":971,"author":{"gitId":"-"},"content":""},{"lineNumber":972,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e existingInstructors \u003d getInstructorsForGoogleId(googleId);"},{"lineNumber":973,"author":{"gitId":"-"},"content":" return existingInstructors"},{"lineNumber":974,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":975,"author":{"gitId":"-"},"content":" .filter(Instructor::hasCoownerPrivileges)"},{"lineNumber":976,"author":{"gitId":"-"},"content":" .map(instructor -\u003e instructor.getCourse())"},{"lineNumber":977,"author":{"gitId":"-"},"content":" .anyMatch(course -\u003e institute.equals(course.getInstitute()));"},{"lineNumber":978,"author":{"gitId":"-"},"content":" }"},{"lineNumber":979,"author":{"gitId":"-"},"content":""},{"lineNumber":980,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":981,"author":{"gitId":"-"},"content":" * Utility function to convert user list to email-user map for faster email lookup."},{"lineNumber":982,"author":{"gitId":"-"},"content":" *"},{"lineNumber":983,"author":{"gitId":"-"},"content":" * @param users users list which contains users with unique email addresses"},{"lineNumber":984,"author":{"gitId":"-"},"content":" * @return email-user map for faster email lookup"},{"lineNumber":985,"author":{"gitId":"-"},"content":" */"},{"lineNumber":986,"author":{"gitId":"-"},"content":" private Map\u003cString, User\u003e convertUserListToEmailUserMap(List\u003c? extends User\u003e users) {"},{"lineNumber":987,"author":{"gitId":"-"},"content":" Map\u003cString, User\u003e emailUserMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":988,"author":{"gitId":"-"},"content":" users.forEach(u -\u003e emailUserMap.put(u.getEmail(), u));"},{"lineNumber":989,"author":{"gitId":"-"},"content":""},{"lineNumber":990,"author":{"gitId":"-"},"content":" return emailUserMap;"},{"lineNumber":991,"author":{"gitId":"-"},"content":" }"},{"lineNumber":992,"author":{"gitId":"-"},"content":""},{"lineNumber":993,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":201,"yuanxi1":21,"marquestye":30,"mingyuanc":3,"-":738}},{"path":"src/main/java/teammates/storage/sqlapi/AccountRequestsDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import java.util.ArrayList;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import java.util.Collections;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.AccountRequestSearchManager;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.SearchManagerFactory;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.TypedQuery;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Generates CRUD operations for AccountRequest."},{"lineNumber":28,"author":{"gitId":"-"},"content":" *"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * @see AccountRequest"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */"},{"lineNumber":31,"author":{"gitId":"-"},"content":"public final class AccountRequestsDb extends EntitiesDb {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final AccountRequestsDb instance \u003d new AccountRequestsDb();"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private AccountRequestsDb() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" // prevent instantiation"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static AccountRequestsDb inst() {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" public AccountRequestSearchManager getSearchManager() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return SearchManagerFactory.getAccountRequestSearchManager();"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * Creates an AccountRequest in the database."},{"lineNumber":48,"author":{"gitId":"-"},"content":" */"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequest(AccountRequest accountRequest)"},{"lineNumber":50,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" assert accountRequest !\u003d null;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (!accountRequest.isValid()) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(accountRequest.getInvalidityInfo());"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" // don\u0027t need to check registrationKey for uniqueness since it is generated using email + institute"},{"lineNumber":58,"author":{"gitId":"-"},"content":" if (getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()) !\u003d null) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException("},{"lineNumber":60,"author":{"gitId":"-"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, accountRequest.toString()));"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" persist(accountRequest);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return accountRequest;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Get AccountRequest by {@code email} and {@code institute} from database."},{"lineNumber":69,"author":{"gitId":"-"},"content":" */"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public AccountRequest getAccountRequest(String email, String institute) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cAccountRequest\u003e cr \u003d cb.createQuery(AccountRequest.class);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" Root\u003cAccountRequest\u003e root \u003d cr.from(AccountRequest.class);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.and(cb.equal("},{"lineNumber":75,"author":{"gitId":"-"},"content":" root.get(\"email\"), email), cb.equal(root.get(\"institute\"), institute)));"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" TypedQuery\u003cAccountRequest\u003e query \u003d HibernateUtil.createQuery(cr);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return query.getResultStream().findFirst().orElse(null);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * Get AccountRequest by {@code registrationKey} from database."},{"lineNumber":83,"author":{"gitId":"-"},"content":" */"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" public AccountRequest getAccountRequestByRegistrationKey(String registrationKey) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":86,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cAccountRequest\u003e cr \u003d cb.createQuery(AccountRequest.class);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" Root\u003cAccountRequest\u003e root \u003d cr.from(AccountRequest.class);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.equal(root.get(\"registrationKey\"), registrationKey));"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" TypedQuery\u003cAccountRequest\u003e query \u003d HibernateUtil.createQuery(cr);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return query.getResultStream().findFirst().orElse(null);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Get AccountRequest with {@code createdTime} within the times {@code startTime} and {@code endTime}."},{"lineNumber":96,"author":{"gitId":"-"},"content":" */"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public List\u003cAccountRequest\u003e getAccountRequests(Instant startTime, Instant endTime) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cAccountRequest\u003e cr \u003d cb.createQuery(AccountRequest.class);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" Root\u003cAccountRequest\u003e root \u003d cr.from(AccountRequest.class);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.and(cb.greaterThanOrEqualTo(root.get(\"createdAt\"), startTime),"},{"lineNumber":102,"author":{"gitId":"-"},"content":" cb.lessThanOrEqualTo(root.get(\"createdAt\"), endTime)));"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" TypedQuery\u003cAccountRequest\u003e query \u003d HibernateUtil.createQuery(cr);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return query.getResultList();"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Updates or creates (if does not exist) the AccountRequest in the database."},{"lineNumber":110,"author":{"gitId":"-"},"content":" */"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public AccountRequest updateAccountRequest(AccountRequest accountRequest)"},{"lineNumber":112,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assert accountRequest !\u003d null;"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" if (!accountRequest.isValid()) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(accountRequest.getInvalidityInfo());"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" if (getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()) \u003d\u003d null) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException("},{"lineNumber":121,"author":{"gitId":"-"},"content":" String.format(ERROR_UPDATE_NON_EXISTENT, accountRequest.toString()));"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" merge(accountRequest);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return accountRequest;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":129,"author":{"gitId":"-"},"content":" * Deletes an AccountRequest."},{"lineNumber":130,"author":{"gitId":"-"},"content":" */"},{"lineNumber":131,"author":{"gitId":"-"},"content":" public void deleteAccountRequest(AccountRequest accountRequest) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" if (accountRequest !\u003d null) {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" delete(accountRequest);"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" deleteDocumentByAccountRequestId(accountRequest.getId());"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":" * Removes search document for the given account request."},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" public void deleteDocumentByAccountRequestId(UUID accountRequestId) {"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" if (getSearchManager() !\u003d null) {"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" // Solr saves the id with the prefix \"java.util.UUID:\", so we need to add it here to"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":" // identify and delete the document from the index"},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" getSearchManager().deleteDocuments("},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" Collections.singletonList(\"java.util.UUID:\" + accountRequestId.toString()));"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":151,"author":{"gitId":"domoberzin"},"content":" * Searches all account requests in the system."},{"lineNumber":152,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":153,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eThis is used by admin to search account requests in the whole system."},{"lineNumber":154,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":155,"author":{"gitId":"domoberzin"},"content":" public List\u003cAccountRequest\u003e searchAccountRequestsInWholeSystem(String queryString)"},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":" throws SearchServiceException {"},{"lineNumber":157,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":158,"author":{"gitId":"domoberzin"},"content":" if (queryString.trim().isEmpty()) {"},{"lineNumber":159,"author":{"gitId":"domoberzin"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":160,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":161,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":162,"author":{"gitId":"domoberzin"},"content":" return getSearchManager().searchAccountRequests(queryString);"},{"lineNumber":163,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":32,"dishenggg":1,"-":131}},{"path":"src/main/java/teammates/storage/sqlapi/FeedbackQuestionsDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"marquestye"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":9,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":10,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Handles CRUD operations for feedback questions."},{"lineNumber":23,"author":{"gitId":"-"},"content":" *"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * @see FeedbackQuestion"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public final class FeedbackQuestionsDb extends EntitiesDb {"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" private static final FeedbackQuestionsDb instance \u003d new FeedbackQuestionsDb();"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private FeedbackQuestionsDb() {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static FeedbackQuestionsDb inst() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Creates a new feedback question."},{"lineNumber":40,"author":{"gitId":"-"},"content":" *"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * @return the created question"},{"lineNumber":42,"author":{"gitId":"marquestye"},"content":" * @throws InvalidParametersException if the question is invalid"},{"lineNumber":43,"author":{"gitId":"marquestye"},"content":" * @throws EntityAlreadyExistsException if the question already exists"},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"marquestye"},"content":" public FeedbackQuestion createFeedbackQuestion(FeedbackQuestion feedbackQuestion)"},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" assert feedbackQuestion !\u003d null;"},{"lineNumber":48,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":49,"author":{"gitId":"marquestye"},"content":" if (!feedbackQuestion.isValid()) {"},{"lineNumber":50,"author":{"gitId":"marquestye"},"content":" throw new InvalidParametersException(feedbackQuestion.getInvalidityInfo());"},{"lineNumber":51,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":52,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":53,"author":{"gitId":"marquestye"},"content":" if (getFeedbackQuestion(feedbackQuestion.getId()) !\u003d null) {"},{"lineNumber":54,"author":{"gitId":"marquestye"},"content":" String errorMessage \u003d String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, feedbackQuestion.toString());"},{"lineNumber":55,"author":{"gitId":"marquestye"},"content":" throw new EntityAlreadyExistsException(errorMessage);"},{"lineNumber":56,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":57,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" persist(feedbackQuestion);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return feedbackQuestion;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * Gets a feedback question."},{"lineNumber":64,"author":{"gitId":"-"},"content":" *"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * @return null if not found"},{"lineNumber":66,"author":{"gitId":"-"},"content":" */"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public FeedbackQuestion getFeedbackQuestion(UUID fqId) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" assert fqId !\u003d null;"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" return HibernateUtil.get(FeedbackQuestion.class, fqId);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Gets all feedback questions of a session."},{"lineNumber":75,"author":{"gitId":"-"},"content":" */"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForSession(UUID fdId) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":78,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackQuestion\u003e cq \u003d cb.createQuery(FeedbackQuestion.class);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Root\u003cFeedbackQuestion\u003e fqRoot \u003d cq.from(FeedbackQuestion.class);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fqJoin \u003d fqRoot.join(\"feedbackSession\");"},{"lineNumber":81,"author":{"gitId":"-"},"content":" cq.select(fqRoot).where(cb.equal(fqJoin.get(\"id\"), fdId));"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * Gets a list of feedback questions by {@code feedbackSession} and {@code giverType}."},{"lineNumber":87,"author":{"gitId":"-"},"content":" *"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * @return null if not found"},{"lineNumber":89,"author":{"gitId":"-"},"content":" */"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForGiverType("},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, FeedbackParticipantType giverType) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assert giverType !\u003d null;"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":96,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackQuestion\u003e cq \u003d cb.createQuery(FeedbackQuestion.class);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" Root\u003cFeedbackQuestion\u003e root \u003d cq.from(FeedbackQuestion.class);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fqJoin \u003d root.join(\"feedbackSession\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":100,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":101,"author":{"gitId":"-"},"content":" cb.equal(fqJoin.get(\"id\"), feedbackSession.getId()),"},{"lineNumber":102,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giverType\"), giverType)));"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Deletes a feedback question."},{"lineNumber":108,"author":{"gitId":"-"},"content":" */"},{"lineNumber":109,"author":{"gitId":"-"},"content":" public void deleteFeedbackQuestion(UUID fqId) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assert fqId !\u003d null;"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" FeedbackQuestion fq \u003d getFeedbackQuestion(fqId);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (fq !\u003d null) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" delete(fq);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * Checks if there is any feedback questions in a session in a course for the given giver type."},{"lineNumber":120,"author":{"gitId":"-"},"content":" */"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public boolean hasFeedbackQuestionsForGiverType("},{"lineNumber":122,"author":{"gitId":"-"},"content":" String feedbackSessionName, String courseId, FeedbackParticipantType giverType) {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":124,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackQuestion\u003e cq \u003d cb.createQuery(FeedbackQuestion.class);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" Root\u003cFeedbackQuestion\u003e root \u003d cq.from(FeedbackQuestion.class);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d root.join(\"feedbackSession\");"},{"lineNumber":127,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":130,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":131,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":132,"author":{"gitId":"-"},"content":" cb.equal(fsJoin.get(\"name\"), feedbackSessionName),"},{"lineNumber":133,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giverType\"), giverType)));"},{"lineNumber":134,"author":{"gitId":"-"},"content":" return !HibernateUtil.createQuery(cq).getResultList().isEmpty();"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":19,"-":117}},{"path":"src/main/java/teammates/storage/sqlapi/FeedbackResponseCommentsDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Handles CRUD operations for feedbackResponseComments."},{"lineNumber":27,"author":{"gitId":"-"},"content":" *"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * @see FeedbackResponseComment"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public final class FeedbackResponseCommentsDb extends EntitiesDb {"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final FeedbackResponseCommentsDb instance \u003d new FeedbackResponseCommentsDb();"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsDb() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static FeedbackResponseCommentsDb inst() {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Gets a feedbackResponseComment or null if it does not exist."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseComment(Long frId) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assert frId !\u003d null;"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" return HibernateUtil.get(FeedbackResponseComment.class, frId);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * Creates a feedbackResponseComment."},{"lineNumber":53,"author":{"gitId":"-"},"content":" */"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public FeedbackResponseComment createFeedbackResponseComment(FeedbackResponseComment feedbackResponseComment)"},{"lineNumber":55,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assert feedbackResponseComment !\u003d null;"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" if (!feedbackResponseComment.isValid()) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(feedbackResponseComment.getInvalidityInfo());"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" if (feedbackResponseComment.getId() !\u003d null"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u0026\u0026 getFeedbackResponseComment(feedbackResponseComment.getId()) !\u003d null) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException("},{"lineNumber":65,"author":{"gitId":"-"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, feedbackResponseComment.toString()));"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" persist(feedbackResponseComment);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return feedbackResponseComment;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Deletes a feedbackResponseComment."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponseComment(Long frcId) {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" assert frcId !\u003d null;"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d getFeedbackResponseComment(frcId);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (frc !\u003d null) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" delete(frc);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback response comments for a response."},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForResponse(UUID feedbackResponseId) {"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" assert feedbackResponseId !\u003d null;"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" cq.select(root)"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" .where(cb.and("},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" cb.equal(frJoin.get(\"id\"), feedbackResponseId)));"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Gets the comment associated with the feedback response."},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseCommentForResponseFromParticipant("},{"lineNumber":105,"author":{"gitId":"-"},"content":" UUID feedbackResponseId) {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":107,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":110,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":111,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":112,"author":{"gitId":"-"},"content":" cb.equal(frJoin.get(\"id\"), feedbackResponseId)));"},{"lineNumber":113,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultStream().findFirst().orElse(null);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Updates the giver email for all of the giver\u0027s comments in a course."},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public void updateGiverEmailOfFeedbackResponseComments(String courseId, String oldEmail, String updatedEmail) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assert oldEmail !\u003d null;"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assert updatedEmail !\u003d null;"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" if (oldEmail.equals(updatedEmail)) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseComment\u003e responseComments \u003d"},{"lineNumber":129,"author":{"gitId":"-"},"content":" getFeedbackResponseCommentEntitiesForGiverInCourse(courseId, oldEmail);"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" responseComment.setGiver(updatedEmail);"},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" merge(responseComment);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" * Updates the last editor to a new one for all comments in a course."},{"lineNumber":139,"author":{"gitId":"-"},"content":" */"},{"lineNumber":140,"author":{"gitId":"-"},"content":" public void updateLastEditorEmailOfFeedbackResponseComments(String courseId, String oldEmail, String updatedEmail) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" assert oldEmail !\u003d null;"},{"lineNumber":143,"author":{"gitId":"-"},"content":" assert updatedEmail !\u003d null;"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" if (oldEmail.equals(updatedEmail)) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseComment\u003e responseComments \u003d"},{"lineNumber":150,"author":{"gitId":"-"},"content":" getFeedbackResponseCommentEntitiesForLastEditorInCourse(courseId, oldEmail);"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" responseComment.setLastEditorEmail(updatedEmail);"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentEntitiesForGiverInCourse("},{"lineNumber":158,"author":{"gitId":"-"},"content":" String courseId, String giver) {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":160,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":163,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":164,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":165,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":168,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":169,"author":{"gitId":"-"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":170,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giver\"), giver)));"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentEntitiesForLastEditorInCourse("},{"lineNumber":176,"author":{"gitId":"-"},"content":" String courseId, String lastEditorEmail) {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":178,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":180,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":181,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":182,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":183,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":186,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":187,"author":{"gitId":"-"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":188,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"lastEditorEmail\"), lastEditorEmail)));"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" * Updates the feedback response comment."},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":196,"author":{"gitId":"mingyuanc"},"content":" public FeedbackResponseComment updateFeedbackResponseComment(FeedbackResponseComment feedbackResponseComment)"},{"lineNumber":197,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" assert feedbackResponseComment !\u003d null;"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":200,"author":{"gitId":"mingyuanc"},"content":" if (!feedbackResponseComment.isValid()) {"},{"lineNumber":201,"author":{"gitId":"mingyuanc"},"content":" throw new InvalidParametersException(feedbackResponseComment.getInvalidityInfo());"},{"lineNumber":202,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":203,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":204,"author":{"gitId":"mingyuanc"},"content":" if (getFeedbackResponseComment(feedbackResponseComment.getId()) \u003d\u003d null) {"},{"lineNumber":205,"author":{"gitId":"mingyuanc"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":206,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":207,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" return merge(feedbackResponseComment);"},{"lineNumber":209,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":210,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" * Gets all comments in a feedback session of a course."},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForSession("},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName) {"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" cb.equal(fsJoin.get(\"name\"), feedbackSessionName)"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" * Gets all comments of a feedback question of a course."},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForQuestion(UUID questionId) {"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" assert questionId !\u003d null;"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" cb.equal(fqJoin.get(\"id\"), questionId)));"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" * Gets all comments in the given session where the giver or recipient is in the given section."},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, String sectionName) {"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" assert sectionName !\u003d null;"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, Section\u003e giverJoin \u003d root.join(\"giverSection\");"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, Section\u003e recipientJoin \u003d root.join(\"recipientSection\");"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" cb.equal(fsJoin.get(\"name\"), feedbackSessionName),"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" cb.or("},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" cb.equal(giverJoin.get(\"name\"), sectionName),"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" cb.equal(recipientJoin.get(\"name\"), sectionName))"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" * Gets all comments for a question where the giver or recipient is in the given section."},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" UUID questionId, String sectionName) {"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" assert questionId !\u003d null;"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" assert sectionName !\u003d null;"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, Section\u003e giverJoin \u003d root.join(\"giverSection\");"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, Section\u003e recipientJoin \u003d root.join(\"recipientSection\");"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" cb.equal(fqJoin.get(\"id\"), questionId),"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" cb.or("},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" cb.equal(giverJoin.get(\"name\"), sectionName),"},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" cb.equal(recipientJoin.get(\"name\"), sectionName))"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":26,"xenosf":105,"mingyuanc":12,"-":172}},{"path":"src/main/java/teammates/storage/sqlapi/FeedbackResponsesDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaDelete;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"import jakarta.persistence.criteria.Predicate;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Subquery;"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Handles CRUD operations for feedbackResponses."},{"lineNumber":30,"author":{"gitId":"-"},"content":" *"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * @see FeedbackResponse"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */"},{"lineNumber":33,"author":{"gitId":"-"},"content":"public final class FeedbackResponsesDb extends EntitiesDb {"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final FeedbackResponsesDb instance \u003d new FeedbackResponsesDb();"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" private FeedbackResponsesDb() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static FeedbackResponsesDb inst() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * Gets a feedbackResponse or null if it does not exist."},{"lineNumber":47,"author":{"gitId":"-"},"content":" */"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public FeedbackResponse getFeedbackResponse(UUID frId) {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" assert frId !\u003d null;"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" return HibernateUtil.get(FeedbackResponse.class, frId);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Gets all responses given by a user in a course."},{"lineNumber":56,"author":{"gitId":"-"},"content":" */"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForCourse("},{"lineNumber":58,"author":{"gitId":"-"},"content":" String courseId, String giver) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":60,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cr \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e frRoot \u003d cr.from(FeedbackResponse.class);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frRoot.join(\"feedbackQuestion\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" cr.select(frRoot)"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":68,"author":{"gitId":"-"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":69,"author":{"gitId":"-"},"content":" cb.equal(frRoot.get(\"giver\"), giver)));"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * Gets all responses given to a user in a course."},{"lineNumber":76,"author":{"gitId":"-"},"content":" */"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForCourse(String courseId, String recipient) {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":79,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cr \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e frRoot \u003d cr.from(FeedbackResponse.class);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frRoot.join(\"feedbackQuestion\");"},{"lineNumber":82,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":83,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" cr.select(frRoot)"},{"lineNumber":86,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":87,"author":{"gitId":"-"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":88,"author":{"gitId":"-"},"content":" cb.equal(frRoot.get(\"recipient\"), recipient)));"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Creates a feedbackResponse."},{"lineNumber":95,"author":{"gitId":"-"},"content":" */"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public FeedbackResponse createFeedbackResponse(FeedbackResponse feedbackResponse)"},{"lineNumber":97,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" if (!feedbackResponse.isValid()) {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(feedbackResponse.getInvalidityInfo());"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (getFeedbackResponse(feedbackResponse.getId()) !\u003d null) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException("},{"lineNumber":106,"author":{"gitId":"-"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, feedbackResponse.toString()));"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" persist(feedbackResponse);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return feedbackResponse;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Deletes a feedbackResponse."},{"lineNumber":115,"author":{"gitId":"-"},"content":" */"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponse(FeedbackResponse feedbackResponse) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" if (feedbackResponse !\u003d null) {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" delete(feedbackResponse);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":123,"author":{"gitId":"-"},"content":" * Gets the feedback responses for a feedback question."},{"lineNumber":124,"author":{"gitId":"-"},"content":" * @param feedbackQuestionId the Id of the feedback question."},{"lineNumber":125,"author":{"gitId":"-"},"content":" * @param giverEmail the email of the response giver."},{"lineNumber":126,"author":{"gitId":"-"},"content":" */"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":128,"author":{"gitId":"-"},"content":" UUID feedbackQuestionId, String giverEmail) {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":130,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e frJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":133,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":134,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":135,"author":{"gitId":"-"},"content":" cb.equal(frJoin.get(\"id\"), feedbackQuestionId),"},{"lineNumber":136,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giver\"), giverEmail)));"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Deletes all feedback responses of a question cascade its associated comments."},{"lineNumber":142,"author":{"gitId":"-"},"content":" */"},{"lineNumber":143,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesForQuestionCascade(UUID feedbackQuestionId) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":145,"author":{"gitId":"-"},"content":" CriteriaDelete\u003cFeedbackResponse\u003e cd \u003d cb.createCriteriaDelete(FeedbackResponse.class);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e frRoot \u003d cd.from(FeedbackResponse.class);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Subquery\u003cUUID\u003e subquery \u003d cd.subquery(UUID.class);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e subqueryRoot \u003d subquery.from(FeedbackResponse.class);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e sqJoin \u003d subqueryRoot.join(\"feedbackQuestion\");"},{"lineNumber":150,"author":{"gitId":"-"},"content":" subquery.select(subqueryRoot.get(\"id\"));"},{"lineNumber":151,"author":{"gitId":"-"},"content":" subquery.where(cb.equal(sqJoin.get(\"id\"), feedbackQuestionId));"},{"lineNumber":152,"author":{"gitId":"-"},"content":" cd.where(cb.in(frRoot.get(\"id\")).value(subquery));"},{"lineNumber":153,"author":{"gitId":"-"},"content":" HibernateUtil.createMutationQuery(cd).executeUpdate();"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":157,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a question."},{"lineNumber":158,"author":{"gitId":"-"},"content":" */"},{"lineNumber":159,"author":{"gitId":"-"},"content":" public boolean areThereResponsesForQuestion(UUID questionId) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":161,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":166,"author":{"gitId":"-"},"content":" .where(cb.equal(fqJoin.get(\"id\"), questionId));"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return !HibernateUtil.createQuery(cq).getResultList().isEmpty();"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" * Get responses for a question."},{"lineNumber":172,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":173,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponse\u003e getResponsesForQuestion(UUID questionId) {"},{"lineNumber":174,"author":{"gitId":"domoberzin"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":175,"author":{"gitId":"domoberzin"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":176,"author":{"gitId":"domoberzin"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":177,"author":{"gitId":"domoberzin"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":178,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":179,"author":{"gitId":"domoberzin"},"content":" cq.select(root)"},{"lineNumber":180,"author":{"gitId":"domoberzin"},"content":" .where(cb.equal(fqJoin.get(\"id\"), questionId));"},{"lineNumber":181,"author":{"gitId":"domoberzin"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":182,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":183,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":185,"author":{"gitId":"-"},"content":" * Checks whether a user has responses in a session."},{"lineNumber":186,"author":{"gitId":"-"},"content":" */"},{"lineNumber":187,"author":{"gitId":"-"},"content":" public boolean hasResponsesFromGiverInSession("},{"lineNumber":188,"author":{"gitId":"-"},"content":" String giver, String feedbackSessionName, String courseId) {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":190,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":192,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":193,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":194,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":197,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":198,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giver\"), giver),"},{"lineNumber":199,"author":{"gitId":"-"},"content":" cb.equal(fsJoin.get(\"name\"), feedbackSessionName),"},{"lineNumber":200,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId)));"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" return !HibernateUtil.createQuery(cq).getResultList().isEmpty();"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a course."},{"lineNumber":207,"author":{"gitId":"-"},"content":" */"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public boolean hasResponsesForCourse(String courseId) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":210,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":213,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":214,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":217,"author":{"gitId":"-"},"content":" .where(cb.equal(courseJoin.get(\"id\"), courseId));"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" return !HibernateUtil.createQuery(cq).getResultList().isEmpty();"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":223,"author":{"gitId":"domoberzin"},"content":" * Updates a feedbackResponse."},{"lineNumber":224,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":225,"author":{"gitId":"domoberzin"},"content":" * @throws EntityDoesNotExistException if the feedbackResponse does not exist"},{"lineNumber":226,"author":{"gitId":"domoberzin"},"content":" * @throws InvalidParametersException if the feedbackResponse is not valid"},{"lineNumber":227,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":228,"author":{"gitId":"domoberzin"},"content":" public FeedbackResponse updateFeedbackResponse(FeedbackResponse feedbackResponse)"},{"lineNumber":229,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":" if (!feedbackResponse.isValid()) {"},{"lineNumber":233,"author":{"gitId":"domoberzin"},"content":" throw new InvalidParametersException(feedbackResponse.getInvalidityInfo());"},{"lineNumber":234,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":235,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":236,"author":{"gitId":"domoberzin"},"content":" if (getFeedbackResponse(feedbackResponse.getId()) \u003d\u003d null) {"},{"lineNumber":237,"author":{"gitId":"domoberzin"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":238,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":239,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":240,"author":{"gitId":"domoberzin"},"content":" return merge(feedbackResponse);"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" * Gets all responses received by a user for a question."},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForQuestion("},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" UUID questionId, String recipient) {"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" assert questionId !\u003d null;"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" assert recipient !\u003d null;"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" cb.equal(fqJoin.get(\"id\"), questionId),"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" cb.equal(root.get(\"recipient\"), recipient)"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" * Gets all responses given to/from a section in a feedback session in a course."},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" * Optionally, retrieves by either giver, receiver sections, or both."},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForSessionInSection("},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String sectionName, FeedbackResultFetchType fetchType) {"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" assert sectionName !\u003d null;"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" assert fetchType !\u003d null;"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":" // unless specified by fetchType, do not filter by giver/recipient section"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" Predicate giverSectionFilter \u003d cb.isTrue(cb.literal(true));"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" Predicate recipientSectionFilter \u003d cb.isTrue(cb.literal(true));"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, Section\u003e giverJoin \u003d root.join(\"giverSection\");"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, Section\u003e recipientJoin \u003d root.join(\"recipientSection\");"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" if (fetchType.shouldFetchByGiver()) {"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" giverSectionFilter \u003d cb.equal(giverJoin.get(\"name\"), sectionName);"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" if (fetchType.shouldFetchByReceiver()) {"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" recipientSectionFilter \u003d cb.equal(recipientJoin.get(\"name\"), sectionName);"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" cb.equal(fsJoin.get(\"id\"), feedbackSession.getId()),"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" giverSectionFilter,"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" recipientSectionFilter"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" * Gets all feedback responses of a question in a specific section."},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForQuestionInSection("},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":" UUID questionId, String sectionName, FeedbackResultFetchType fetchType) {"},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" assert questionId !\u003d null;"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" assert sectionName !\u003d null;"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" assert fetchType !\u003d null;"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" // unless specified by fetchType, do not filter by giver/recipient section"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":" Predicate giverSectionFilter \u003d cb.isTrue(cb.literal(true));"},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" Predicate recipientSectionFilter \u003d cb.isTrue(cb.literal(true));"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, Section\u003e giverJoin \u003d root.join(\"giverSection\");"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, Section\u003e recipientJoin \u003d root.join(\"recipientSection\");"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" if (fetchType.shouldFetchByGiver()) {"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" giverSectionFilter \u003d cb.equal(giverJoin.get(\"name\"), sectionName);"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" if (fetchType.shouldFetchByReceiver()) {"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" recipientSectionFilter \u003d cb.equal(recipientJoin.get(\"name\"), sectionName);"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" cb.equal(fqJoin.get(\"id\"), questionId),"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" giverSectionFilter,"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" recipientSectionFilter"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":340,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" * Gets all responses of a feedback session in a course."},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForSession("},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId) {"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":" cb.equal(fsJoin.get(\"id\"), feedbackSession.getId()),"},{"lineNumber":362,"author":{"gitId":"xenosf"},"content":" cb.equal(cJoin.get(\"id\"), courseId)"},{"lineNumber":363,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":364,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":365,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":366,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":367,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":368,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":37,"xenosf":128,"-":203}},{"path":"src/main/java/teammates/storage/sqlapi/FeedbackSessionsDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * Handles CRUD operations for feedback sessions."},{"lineNumber":26,"author":{"gitId":"-"},"content":" *"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * @see FeedbackSession"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public final class FeedbackSessionsDb extends EntitiesDb {"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final FeedbackSessionsDb instance \u003d new FeedbackSessionsDb();"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private FeedbackSessionsDb() {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static FeedbackSessionsDb inst() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Gets a feedback session."},{"lineNumber":43,"author":{"gitId":"-"},"content":" *"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * @return null if not found"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(UUID fsId) {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assert fsId !\u003d null;"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" return HibernateUtil.get(FeedbackSession.class, fsId);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * Gets a feedback session for {@code feedbackSessionName} and {@code courseId}."},{"lineNumber":54,"author":{"gitId":"-"},"content":" *"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * @return null if not found"},{"lineNumber":56,"author":{"gitId":"-"},"content":" */"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":59,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cq \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e fsRoot \u003d cq.from(FeedbackSession.class);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e fsJoin \u003d fsRoot.join(\"course\");"},{"lineNumber":62,"author":{"gitId":"-"},"content":" cq.select(fsRoot).where(cb.and("},{"lineNumber":63,"author":{"gitId":"-"},"content":" cb.equal(fsRoot.get(\"name\"), feedbackSessionName),"},{"lineNumber":64,"author":{"gitId":"-"},"content":" cb.equal(fsJoin.get(\"id\"), courseId)));"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultStream().findFirst().orElse(null);"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * Gets a soft-deleted feedback session."},{"lineNumber":70,"author":{"gitId":"-"},"content":" *"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * @return null if not found or not soft-deleted."},{"lineNumber":72,"author":{"gitId":"-"},"content":" */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public FeedbackSession getSoftDeletedFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (feedbackSession !\u003d null \u0026\u0026 feedbackSession.getDeletedAt() \u003d\u003d null) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" log.info(feedbackSessionName + \"/\" + courseId + \" is not soft-deleted!\");"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" return feedbackSession;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Gets soft-deleted feedback sessions for course."},{"lineNumber":89,"author":{"gitId":"-"},"content":" */"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getSoftDeletedFeedbackSessionsForCourse(String courseId) {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":92,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cq \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e fsRoot \u003d cq.from(FeedbackSession.class);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e fsJoin \u003d fsRoot.join(\"course\");"},{"lineNumber":95,"author":{"gitId":"-"},"content":" cq.select(fsRoot).where(cb.and("},{"lineNumber":96,"author":{"gitId":"-"},"content":" cb.isNotNull(fsRoot.get(\"deletedAt\")),"},{"lineNumber":97,"author":{"gitId":"-"},"content":" cb.equal(fsJoin.get(\"id\"), courseId)));"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Gets all and only the feedback sessions ongoing within a range of time."},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getOngoingSessions(Instant rangeStart, Instant rangeEnd) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" assert rangeStart !\u003d null;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assert rangeEnd !\u003d null;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":111,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":112,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"endTime\"), rangeStart),"},{"lineNumber":113,"author":{"gitId":"-"},"content":" cb.lessThan(root.get(\"startTime\"), rangeEnd)));"},{"lineNumber":114,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * Restores a specific soft deleted feedback session."},{"lineNumber":119,"author":{"gitId":"-"},"content":" */"},{"lineNumber":120,"author":{"gitId":"-"},"content":" public void restoreDeletedFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":121,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" FeedbackSession sessionEntity \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" if (sessionEntity \u003d\u003d null) {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" sessionEntity.setDeletedAt(null);"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" merge(sessionEntity);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * Creates a feedback session."},{"lineNumber":137,"author":{"gitId":"-"},"content":" */"},{"lineNumber":138,"author":{"gitId":"-"},"content":" public FeedbackSession createFeedbackSession(FeedbackSession session)"},{"lineNumber":139,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" if (!session.isValid()) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(session.getInvalidityInfo());"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" if (getFeedbackSession(session.getId()) !\u003d null) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, session.toString()));"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" persist(session);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" return session;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":155,"author":{"gitId":"-"},"content":" * Saves an updated {@code FeedbackSession} to the db."},{"lineNumber":156,"author":{"gitId":"-"},"content":" *"},{"lineNumber":157,"author":{"gitId":"-"},"content":" * @return updated feedback session"},{"lineNumber":158,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":159,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":160,"author":{"gitId":"-"},"content":" */"},{"lineNumber":161,"author":{"gitId":"-"},"content":" public FeedbackSession updateFeedbackSession(FeedbackSession feedbackSession)"},{"lineNumber":162,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" if (!feedbackSession.isValid()) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(feedbackSession.getInvalidityInfo());"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (getFeedbackSession(feedbackSession.getId()) \u003d\u003d null) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" return merge(feedbackSession);"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":177,"author":{"gitId":"-"},"content":" * Deletes a feedback session."},{"lineNumber":178,"author":{"gitId":"-"},"content":" */"},{"lineNumber":179,"author":{"gitId":"-"},"content":" public void deleteFeedbackSession(FeedbackSession feedbackSession) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" if (feedbackSession !\u003d null) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" delete(feedbackSession);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":186,"author":{"gitId":"-"},"content":" * Soft-deletes a specific feedback session by its name and course id."},{"lineNumber":187,"author":{"gitId":"-"},"content":" *"},{"lineNumber":188,"author":{"gitId":"-"},"content":" * @return Soft-deletion time of the feedback session."},{"lineNumber":189,"author":{"gitId":"-"},"content":" */"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public Instant softDeleteFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":191,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSessionEntity \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" if (feedbackSessionEntity \u003d\u003d null) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" feedbackSessionEntity.setDeletedAt(Instant.now());"},{"lineNumber":202,"author":{"gitId":"-"},"content":" merge(feedbackSessionEntity);"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" return feedbackSessionEntity.getDeletedAt();"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * Gets feedback sessions for a given {@code courseId}."},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesForCourse(String courseId) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":214,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cq \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":215,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cq.from(FeedbackSession.class);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d root.join(\"course\");"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" cq.select(root).where(cb.equal(courseJoin.get(\"id\"), courseId));"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":224,"author":{"gitId":"-"},"content":" * Gets feedback sessions for a given {@code courseId} that start after {@code after}."},{"lineNumber":225,"author":{"gitId":"-"},"content":" */"},{"lineNumber":226,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesForCourseStartingAfter(String courseId, Instant after) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" assert after !\u003d null;"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":231,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":233,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d root.join(\"course\");"},{"lineNumber":234,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":235,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":236,"author":{"gitId":"-"},"content":" cb.greaterThanOrEqualTo(root.get(\"startTime\"), after),"},{"lineNumber":237,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId)));"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":243,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which open in the future"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * and possibly need a opening soon email to be sent."},{"lineNumber":245,"author":{"gitId":"-"},"content":" */"},{"lineNumber":246,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingOpeningSoonEmail() {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" return getFeedbackSessionEntitiesPossiblyNeedingOpeningSoonEmail().stream()"},{"lineNumber":248,"author":{"gitId":"-"},"content":" .filter(session -\u003e session.getDeletedAt() \u003d\u003d null)"},{"lineNumber":249,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":250,"author":{"gitId":"-"},"content":" }"},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":" private List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesPossiblyNeedingOpeningSoonEmail() {"},{"lineNumber":253,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":254,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":255,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":258,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":259,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"startTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":260,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isOpeningSoonEmailSent\"), false)));"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":263,"author":{"gitId":"-"},"content":" }"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":266,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which end in the future (2 hour ago onward)"},{"lineNumber":267,"author":{"gitId":"-"},"content":" * and possibly need a closing soon email to be sent."},{"lineNumber":268,"author":{"gitId":"-"},"content":" */"},{"lineNumber":269,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingClosingSoonEmail() {"},{"lineNumber":270,"author":{"gitId":"-"},"content":" return getFeedbackSessionEntitiesPossiblyNeedingClosingSoonEmail().stream()"},{"lineNumber":271,"author":{"gitId":"-"},"content":" .filter(session -\u003e session.getDeletedAt() \u003d\u003d null)"},{"lineNumber":272,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" private List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesPossiblyNeedingClosingSoonEmail() {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":277,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":278,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":281,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":282,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"endTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":283,"author":{"gitId":"-"},"content":" cb.and("},{"lineNumber":284,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isClosingSoonEmailSent\"), false),"},{"lineNumber":285,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isClosingEmailEnabled\"), true))"},{"lineNumber":286,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":289,"author":{"gitId":"-"},"content":" }"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":292,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which end in the future (2 hour ago onward)"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * and possibly need a closed email to be sent."},{"lineNumber":294,"author":{"gitId":"-"},"content":" */"},{"lineNumber":295,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingClosedEmail() {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":297,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":298,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":301,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":302,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"endTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":303,"author":{"gitId":"-"},"content":" cb.isFalse(root.get(\"isClosedEmailSent\")),"},{"lineNumber":304,"author":{"gitId":"-"},"content":" cb.isTrue(root.get(\"isClosingEmailEnabled\")),"},{"lineNumber":305,"author":{"gitId":"-"},"content":" cb.isNull(root.get(\"deletedAt\"))"},{"lineNumber":306,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":312,"author":{"gitId":"-"},"content":" * Gets a list of undeleted published feedback sessions which possibly need a published email"},{"lineNumber":313,"author":{"gitId":"-"},"content":" * to be sent."},{"lineNumber":314,"author":{"gitId":"-"},"content":" */"},{"lineNumber":315,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingPublishedEmail() {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" return getFeedbackSessionEntitiesPossiblyNeedingPublishedEmail().stream()"},{"lineNumber":317,"author":{"gitId":"-"},"content":" .filter(session -\u003e session.getDeletedAt() \u003d\u003d null)"},{"lineNumber":318,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" private List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesPossiblyNeedingPublishedEmail() {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":323,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":324,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":327,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":328,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"resultsVisibleFromTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":329,"author":{"gitId":"-"},"content":" cb.and("},{"lineNumber":330,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isPublishedEmailSent\"), false),"},{"lineNumber":331,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isPublishedEmailEnabled\"), true))"},{"lineNumber":332,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":333,"author":{"gitId":"-"},"content":""},{"lineNumber":334,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":338,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which start within the last 2 days"},{"lineNumber":339,"author":{"gitId":"-"},"content":" * and possibly need an open email to be sent."},{"lineNumber":340,"author":{"gitId":"-"},"content":" */"},{"lineNumber":341,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingOpenEmail() {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":343,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":344,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":347,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":348,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"startTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":349,"author":{"gitId":"-"},"content":" cb.isFalse(root.get(\"isOpenEmailSent\")),"},{"lineNumber":350,"author":{"gitId":"-"},"content":" cb.isNull(root.get(\"deletedAt\"))"},{"lineNumber":351,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":354,"author":{"gitId":"-"},"content":" }"},{"lineNumber":355,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":1,"-":354}},{"path":"src/main/java/teammates/storage/sqlapi/UsersDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.InstructorSearchManager;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.SearchManagerFactory;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.StudentSearchManager;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Predicate;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Handles CRUD operations for users."},{"lineNumber":34,"author":{"gitId":"-"},"content":" *"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * @see User"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */"},{"lineNumber":37,"author":{"gitId":"-"},"content":"public final class UsersDb extends EntitiesDb {"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final UsersDb instance \u003d new UsersDb();"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" private UsersDb() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" public static UsersDb inst() {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" public InstructorSearchManager getInstructorSearchManager() {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return SearchManagerFactory.getInstructorSearchManager();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" public StudentSearchManager getStudentSearchManager() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return SearchManagerFactory.getStudentSearchManager();"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Creates an instructor."},{"lineNumber":59,"author":{"gitId":"-"},"content":" */"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public Instructor createInstructor(Instructor instructor)"},{"lineNumber":61,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" assert instructor !\u003d null;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" if (!instructor.isValid()) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(instructor.getInvalidityInfo());"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" persist(instructor);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return instructor;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Creates a student."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public Student createStudent(Student student)"},{"lineNumber":76,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assert student !\u003d null;"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (!student.isValid()) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(student.getInvalidityInfo());"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" persist(student);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return student;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Gets an instructor by its {@code id}."},{"lineNumber":89,"author":{"gitId":"-"},"content":" */"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public Instructor getInstructor(UUID id) {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" return HibernateUtil.get(Instructor.class, id);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * Gets an instructor by {@code regKey}."},{"lineNumber":98,"author":{"gitId":"-"},"content":" */"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public Instructor getInstructorByRegKey(String regKey) {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" cr.select(instructorRoot).where(cb.equal(instructorRoot.get(\"regKey\"), regKey));"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Gets an instructor by {@code googleId}."},{"lineNumber":111,"author":{"gitId":"-"},"content":" */"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public Instructor getInstructorByGoogleId(String courseId, String googleId) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" Join\u003cInstructor, Account\u003e accountsJoin \u003d instructorRoot.join(\"account\");"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" cr.select(instructorRoot).where(cb.and("},{"lineNumber":119,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"courseId\"), courseId),"},{"lineNumber":120,"author":{"gitId":"-"},"content":" cb.equal(accountsJoin.get(\"googleId\"), googleId)));"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":126,"author":{"gitId":"-"},"content":" * Gets all instructors that will be displayed to students of a course."},{"lineNumber":127,"author":{"gitId":"-"},"content":" */"},{"lineNumber":128,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsDisplayedToStudents(String courseId) {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":130,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" cr.select(instructorRoot).where(cb.and("},{"lineNumber":134,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"courseId\"), courseId),"},{"lineNumber":135,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"isDisplayedToStudents\"), true)));"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Gets a student by its {@code id}."},{"lineNumber":142,"author":{"gitId":"-"},"content":" */"},{"lineNumber":143,"author":{"gitId":"-"},"content":" public Student getStudent(UUID id) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" return HibernateUtil.get(Student.class, id);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":150,"author":{"gitId":"-"},"content":" * Gets a student by {@code regKey}."},{"lineNumber":151,"author":{"gitId":"-"},"content":" */"},{"lineNumber":152,"author":{"gitId":"-"},"content":" public Student getStudentByRegKey(String regKey) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":154,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" cr.select(studentRoot).where(cb.equal(studentRoot.get(\"regKey\"), regKey));"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":163,"author":{"gitId":"-"},"content":" * Gets a student by {@code googleId}."},{"lineNumber":164,"author":{"gitId":"-"},"content":" */"},{"lineNumber":165,"author":{"gitId":"-"},"content":" public Student getStudentByGoogleId(String courseId, String googleId) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":167,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" Join\u003cStudent, Account\u003e accountsJoin \u003d studentRoot.join(\"account\");"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" cr.select(studentRoot).where(cb.and("},{"lineNumber":172,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"courseId\"), courseId),"},{"lineNumber":173,"author":{"gitId":"-"},"content":" cb.equal(accountsJoin.get(\"googleId\"), googleId)));"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":179,"author":{"gitId":"-"},"content":" * Gets all students by {@code googleId}."},{"lineNumber":180,"author":{"gitId":"-"},"content":" */"},{"lineNumber":181,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByGoogleId(String googleId) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":183,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":184,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":185,"author":{"gitId":"-"},"content":" Join\u003cStudent, Account\u003e accountsJoin \u003d studentRoot.join(\"account\");"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" cr.select(studentRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":193,"author":{"gitId":"-"},"content":" * Gets a list of students by {@code teamName} and {@code courseId}."},{"lineNumber":194,"author":{"gitId":"-"},"content":" */"},{"lineNumber":195,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByTeamName(String teamName, String courseId) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":197,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" studentRoot.alias(\"student\");"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" Join\u003cStudent, Team\u003e teamsJoin \u003d studentRoot.join(\"team\");"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" cr.select(studentRoot).where(cb.and("},{"lineNumber":205,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"courseId\"), courseId),"},{"lineNumber":206,"author":{"gitId":"-"},"content":" cb.equal(teamsJoin.get(\"name\"), teamName)));"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":212,"author":{"gitId":"-"},"content":" * Gets all instructors and students by {@code googleId}."},{"lineNumber":213,"author":{"gitId":"-"},"content":" */"},{"lineNumber":214,"author":{"gitId":"-"},"content":" public List\u003cUser\u003e getAllUsersByGoogleId(String googleId) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":216,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cUser\u003e usersCr \u003d cb.createQuery(User.class);"},{"lineNumber":217,"author":{"gitId":"-"},"content":" Root\u003cUser\u003e usersRoot \u003d usersCr.from(User.class);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" Join\u003cUser, Account\u003e accountsJoin \u003d usersRoot.join(\"account\");"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" usersCr.select(usersRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(usersCr).getResultList();"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":226,"author":{"gitId":"-"},"content":" * Gets all instructors by {@code googleId}."},{"lineNumber":227,"author":{"gitId":"-"},"content":" */"},{"lineNumber":228,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getAllInstructorsByGoogleId(String googleId) {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":230,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e instructorsCr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":231,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorsRoot \u003d instructorsCr.from(Instructor.class);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" Join\u003cInstructor, Account\u003e accountsJoin \u003d instructorsRoot.join(\"account\");"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" instructorsCr.select(instructorsRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(instructorsCr).getResultList();"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * Gets all students by {@code googleId}."},{"lineNumber":241,"author":{"gitId":"-"},"content":" */"},{"lineNumber":242,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getAllStudentsByGoogleId(String googleId) {"},{"lineNumber":243,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":244,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e studentsCr \u003d cb.createQuery(Student.class);"},{"lineNumber":245,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentsRoot \u003d studentsCr.from(Student.class);"},{"lineNumber":246,"author":{"gitId":"-"},"content":" Join\u003cStudent, Account\u003e accountsJoin \u003d studentsRoot.join(\"account\");"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" studentsCr.select(studentsRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(studentsCr).getResultList();"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":254,"author":{"gitId":"-"},"content":" * Gets all instructors."},{"lineNumber":255,"author":{"gitId":"-"},"content":" */"},{"lineNumber":256,"author":{"gitId":"-"},"content":" public \u003cT extends User\u003e T updateUser(T user) {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" assert user !\u003d null;"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" return merge(user);"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":263,"author":{"gitId":"-"},"content":" * Searches all instructors in the system."},{"lineNumber":264,"author":{"gitId":"-"},"content":" *"},{"lineNumber":265,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis method should be used by admin only since the searching does not"},{"lineNumber":266,"author":{"gitId":"-"},"content":" * restrict the visibility according to the logged-in user\u0027s google ID. This"},{"lineNumber":267,"author":{"gitId":"-"},"content":" * is used by admin to search instructors in the whole system."},{"lineNumber":268,"author":{"gitId":"-"},"content":" */"},{"lineNumber":269,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e searchInstructorsInWholeSystem(String queryString)"},{"lineNumber":270,"author":{"gitId":"-"},"content":" throws SearchServiceException {"},{"lineNumber":271,"author":{"gitId":"-"},"content":" if (queryString.trim().isEmpty()) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" return getInstructorSearchManager().searchInstructors(queryString);"},{"lineNumber":276,"author":{"gitId":"-"},"content":" }"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":279,"author":{"gitId":"yuanxi1"},"content":" * Searches for students."},{"lineNumber":280,"author":{"gitId":"yuanxi1"},"content":" *"},{"lineNumber":281,"author":{"gitId":"yuanxi1"},"content":" * @param instructors the constraint that restricts the search result"},{"lineNumber":282,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":283,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudents(String queryString, List\u003cInstructor\u003e instructors)"},{"lineNumber":284,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":285,"author":{"gitId":"yuanxi1"},"content":" if (queryString.trim().isEmpty()) {"},{"lineNumber":286,"author":{"gitId":"yuanxi1"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":287,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":288,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":289,"author":{"gitId":"yuanxi1"},"content":" return getStudentSearchManager().searchStudents(queryString, instructors);"},{"lineNumber":290,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":291,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":292,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":293,"author":{"gitId":"yuanxi1"},"content":" * Searches all students in the system."},{"lineNumber":294,"author":{"gitId":"yuanxi1"},"content":" *"},{"lineNumber":295,"author":{"gitId":"yuanxi1"},"content":" * \u003cp\u003eThis method should be used by admin only since the searching does not restrict the"},{"lineNumber":296,"author":{"gitId":"yuanxi1"},"content":" * visibility according to the logged-in user\u0027s google ID. This is used by admin to"},{"lineNumber":297,"author":{"gitId":"yuanxi1"},"content":" * search instructors in the whole system."},{"lineNumber":298,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":299,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudentsInWholeSystem(String queryString)"},{"lineNumber":300,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":301,"author":{"gitId":"yuanxi1"},"content":" if (queryString.trim().isEmpty()) {"},{"lineNumber":302,"author":{"gitId":"yuanxi1"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":303,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":304,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":305,"author":{"gitId":"yuanxi1"},"content":" return getStudentSearchManager().searchStudents(queryString, null);"},{"lineNumber":306,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":307,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":309,"author":{"gitId":"-"},"content":" * Deletes a user."},{"lineNumber":310,"author":{"gitId":"-"},"content":" */"},{"lineNumber":311,"author":{"gitId":"-"},"content":" public \u003cT extends User\u003e void deleteUser(T user) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" if (user !\u003d null) {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" delete(user);"},{"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":" * Gets the number of instructors created within a specified time range."},{"lineNumber":319,"author":{"gitId":"-"},"content":" */"},{"lineNumber":320,"author":{"gitId":"-"},"content":" public long getNumInstructorsByTimeRange(Instant startTime, Instant endTime) {"},{"lineNumber":321,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":322,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cLong\u003e cr \u003d cb.createQuery(Long.class);"},{"lineNumber":323,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e root \u003d cr.from(Instructor.class);"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":" cr.select(cb.count(root.get(\"id\"))).where(cb.and("},{"lineNumber":326,"author":{"gitId":"-"},"content":" cb.greaterThanOrEqualTo(root.get(\"createdAt\"), startTime),"},{"lineNumber":327,"author":{"gitId":"-"},"content":" cb.lessThan(root.get(\"createdAt\"), endTime)));"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getSingleResult();"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }"},{"lineNumber":331,"author":{"gitId":"-"},"content":""},{"lineNumber":332,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":333,"author":{"gitId":"-"},"content":" * Gets the number of students created within a specified time range."},{"lineNumber":334,"author":{"gitId":"-"},"content":" */"},{"lineNumber":335,"author":{"gitId":"-"},"content":" public long getNumStudentsByTimeRange(Instant startTime, Instant endTime) {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":337,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cLong\u003e cr \u003d cb.createQuery(Long.class);"},{"lineNumber":338,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e root \u003d cr.from(Student.class);"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":" cr.select(cb.count(root.get(\"id\"))).where(cb.and("},{"lineNumber":341,"author":{"gitId":"-"},"content":" cb.greaterThanOrEqualTo(root.get(\"createdAt\"), startTime),"},{"lineNumber":342,"author":{"gitId":"-"},"content":" cb.lessThan(root.get(\"createdAt\"), endTime)));"},{"lineNumber":343,"author":{"gitId":"-"},"content":""},{"lineNumber":344,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getSingleResult();"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":348,"author":{"gitId":"-"},"content":" * Gets the list of instructors for the specified {@code courseId}."},{"lineNumber":349,"author":{"gitId":"-"},"content":" */"},{"lineNumber":350,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForCourse(String courseId) {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":354,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":355,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e root \u003d cr.from(Instructor.class);"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.equal(root.get(\"courseId\"), courseId));"},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":360,"author":{"gitId":"-"},"content":" }"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":363,"author":{"gitId":"-"},"content":" * Gets the list of students for the specified {@code courseId}."},{"lineNumber":364,"author":{"gitId":"-"},"content":" */"},{"lineNumber":365,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForCourse(String courseId) {"},{"lineNumber":366,"author":{"gitId":"-"},"content":" assert courseId !\u003d null \u0026\u0026 !courseId.isEmpty();"},{"lineNumber":367,"author":{"gitId":"-"},"content":""},{"lineNumber":368,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":369,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":370,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e root \u003d cr.from(Student.class);"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.equal(root.get(\"courseId\"), courseId));"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":375,"author":{"gitId":"-"},"content":" }"},{"lineNumber":376,"author":{"gitId":"-"},"content":""},{"lineNumber":377,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":378,"author":{"gitId":"-"},"content":" * Gets the list of students for the specified {@code courseId} in batches with {@code batchSize}."},{"lineNumber":379,"author":{"gitId":"-"},"content":" */"},{"lineNumber":380,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForCourse(String courseId, int batchSize) {"},{"lineNumber":381,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":384,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":385,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e root \u003d cr.from(Student.class);"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.equal(root.get(\"courseId\"), courseId));"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).setMaxResults(batchSize).getResultList();"},{"lineNumber":390,"author":{"gitId":"-"},"content":" }"},{"lineNumber":391,"author":{"gitId":"-"},"content":""},{"lineNumber":392,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":393,"author":{"gitId":"-"},"content":" * Gets the instructor with the specified {@code userEmail}."},{"lineNumber":394,"author":{"gitId":"-"},"content":" */"},{"lineNumber":395,"author":{"gitId":"-"},"content":" public Instructor getInstructorForEmail(String courseId, String userEmail) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":397,"author":{"gitId":"-"},"content":" assert userEmail !\u003d null;"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":400,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":401,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":402,"author":{"gitId":"-"},"content":""},{"lineNumber":403,"author":{"gitId":"-"},"content":" cr.select(instructorRoot)"},{"lineNumber":404,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":405,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"courseId\"), courseId),"},{"lineNumber":406,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"email\"), userEmail)));"},{"lineNumber":407,"author":{"gitId":"-"},"content":""},{"lineNumber":408,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":409,"author":{"gitId":"-"},"content":" }"},{"lineNumber":410,"author":{"gitId":"-"},"content":""},{"lineNumber":411,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":412,"author":{"gitId":"-"},"content":" * Gets instructors with the specified {@code userEmail}."},{"lineNumber":413,"author":{"gitId":"-"},"content":" */"},{"lineNumber":414,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForEmails(String courseId, List\u003cString\u003e userEmails) {"},{"lineNumber":415,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":416,"author":{"gitId":"-"},"content":" assert userEmails !\u003d null;"},{"lineNumber":417,"author":{"gitId":"-"},"content":""},{"lineNumber":418,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":419,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":420,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":421,"author":{"gitId":"-"},"content":""},{"lineNumber":422,"author":{"gitId":"-"},"content":" List\u003cPredicate\u003e predicates \u003d new ArrayList\u003c\u003e();"},{"lineNumber":423,"author":{"gitId":"-"},"content":" for (String userEmail : userEmails) {"},{"lineNumber":424,"author":{"gitId":"-"},"content":" predicates.add(cb.equal(instructorRoot.get(\"email\"), userEmail));"},{"lineNumber":425,"author":{"gitId":"-"},"content":" }"},{"lineNumber":426,"author":{"gitId":"-"},"content":""},{"lineNumber":427,"author":{"gitId":"-"},"content":" cr.select(instructorRoot)"},{"lineNumber":428,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":429,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"courseId\"), courseId),"},{"lineNumber":430,"author":{"gitId":"-"},"content":" cb.or(predicates.toArray(new Predicate[0]))));"},{"lineNumber":431,"author":{"gitId":"-"},"content":""},{"lineNumber":432,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":433,"author":{"gitId":"-"},"content":" }"},{"lineNumber":434,"author":{"gitId":"-"},"content":""},{"lineNumber":435,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":436,"author":{"gitId":"-"},"content":" * Gets the student with the specified {@code userEmail}."},{"lineNumber":437,"author":{"gitId":"-"},"content":" */"},{"lineNumber":438,"author":{"gitId":"-"},"content":" public Student getStudentForEmail(String courseId, String userEmail) {"},{"lineNumber":439,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":440,"author":{"gitId":"-"},"content":" assert userEmail !\u003d null;"},{"lineNumber":441,"author":{"gitId":"-"},"content":""},{"lineNumber":442,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":443,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":444,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":445,"author":{"gitId":"-"},"content":""},{"lineNumber":446,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":447,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":448,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"courseId\"), courseId),"},{"lineNumber":449,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"email\"), userEmail)));"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":452,"author":{"gitId":"-"},"content":" }"},{"lineNumber":453,"author":{"gitId":"-"},"content":""},{"lineNumber":454,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":455,"author":{"gitId":"-"},"content":" * Gets students with the specified {@code userEmail}."},{"lineNumber":456,"author":{"gitId":"-"},"content":" */"},{"lineNumber":457,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForEmails(String courseId, List\u003cString\u003e userEmails) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":459,"author":{"gitId":"-"},"content":" assert userEmails !\u003d null;"},{"lineNumber":460,"author":{"gitId":"-"},"content":""},{"lineNumber":461,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":462,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":463,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":464,"author":{"gitId":"-"},"content":""},{"lineNumber":465,"author":{"gitId":"-"},"content":" List\u003cPredicate\u003e predicates \u003d new ArrayList\u003c\u003e();"},{"lineNumber":466,"author":{"gitId":"-"},"content":" for (String userEmail : userEmails) {"},{"lineNumber":467,"author":{"gitId":"-"},"content":" predicates.add(cb.equal(studentRoot.get(\"email\"), userEmail));"},{"lineNumber":468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":469,"author":{"gitId":"-"},"content":""},{"lineNumber":470,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":471,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":472,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"courseId\"), courseId),"},{"lineNumber":473,"author":{"gitId":"-"},"content":" cb.or(predicates.toArray(new Predicate[0]))));"},{"lineNumber":474,"author":{"gitId":"-"},"content":""},{"lineNumber":475,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":476,"author":{"gitId":"-"},"content":" }"},{"lineNumber":477,"author":{"gitId":"-"},"content":""},{"lineNumber":478,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":479,"author":{"gitId":"-"},"content":" * Gets list of students by email."},{"lineNumber":480,"author":{"gitId":"-"},"content":" */"},{"lineNumber":481,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getAllStudentsForEmail(String email) {"},{"lineNumber":482,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":483,"author":{"gitId":"-"},"content":""},{"lineNumber":484,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":485,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":486,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":487,"author":{"gitId":"-"},"content":""},{"lineNumber":488,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":489,"author":{"gitId":"-"},"content":" .where(cb.equal(studentRoot.get(\"email\"), email));"},{"lineNumber":490,"author":{"gitId":"-"},"content":""},{"lineNumber":491,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":492,"author":{"gitId":"-"},"content":" }"},{"lineNumber":493,"author":{"gitId":"-"},"content":""},{"lineNumber":494,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":495,"author":{"gitId":"-"},"content":" * Gets all instructors associated with a googleId."},{"lineNumber":496,"author":{"gitId":"-"},"content":" */"},{"lineNumber":497,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForGoogleId(String googleId) {"},{"lineNumber":498,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":499,"author":{"gitId":"-"},"content":""},{"lineNumber":500,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":501,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":502,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":503,"author":{"gitId":"-"},"content":" Join\u003cInstructor, Account\u003e accountsJoin \u003d instructorRoot.join(\"account\");"},{"lineNumber":504,"author":{"gitId":"-"},"content":""},{"lineNumber":505,"author":{"gitId":"-"},"content":" cr.select(instructorRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":506,"author":{"gitId":"-"},"content":""},{"lineNumber":507,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":508,"author":{"gitId":"-"},"content":" }"},{"lineNumber":509,"author":{"gitId":"-"},"content":""},{"lineNumber":510,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":511,"author":{"gitId":"-"},"content":" * Gets all students of a section of a course."},{"lineNumber":512,"author":{"gitId":"-"},"content":" */"},{"lineNumber":513,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForSection(String sectionName, String courseId) {"},{"lineNumber":514,"author":{"gitId":"-"},"content":" assert sectionName !\u003d null;"},{"lineNumber":515,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":516,"author":{"gitId":"-"},"content":""},{"lineNumber":517,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":518,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":519,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":520,"author":{"gitId":"-"},"content":" Join\u003cStudent, Course\u003e courseJoin \u003d studentRoot.join(\"course\");"},{"lineNumber":521,"author":{"gitId":"-"},"content":" Join\u003cStudent, Team\u003e teamsJoin \u003d studentRoot.join(\"team\");"},{"lineNumber":522,"author":{"gitId":"-"},"content":" Join\u003cTeam, Section\u003e sectionJoin \u003d teamsJoin.join(\"section\");"},{"lineNumber":523,"author":{"gitId":"-"},"content":""},{"lineNumber":524,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":525,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":526,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":527,"author":{"gitId":"-"},"content":" cb.equal(sectionJoin.get(\"name\"), sectionName)));"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":530,"author":{"gitId":"-"},"content":" }"},{"lineNumber":531,"author":{"gitId":"-"},"content":""},{"lineNumber":532,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":533,"author":{"gitId":"-"},"content":" * Gets all students of a team of a course."},{"lineNumber":534,"author":{"gitId":"-"},"content":" */"},{"lineNumber":535,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForTeam(String teamName, String courseId) {"},{"lineNumber":536,"author":{"gitId":"-"},"content":" assert teamName !\u003d null;"},{"lineNumber":537,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":538,"author":{"gitId":"-"},"content":""},{"lineNumber":539,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":540,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":541,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":542,"author":{"gitId":"-"},"content":" Join\u003cStudent, Course\u003e courseJoin \u003d studentRoot.join(\"course\");"},{"lineNumber":543,"author":{"gitId":"-"},"content":" Join\u003cStudent, Team\u003e teamsJoin \u003d studentRoot.join(\"team\");"},{"lineNumber":544,"author":{"gitId":"-"},"content":""},{"lineNumber":545,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":546,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":547,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":548,"author":{"gitId":"-"},"content":" cb.equal(teamsJoin.get(\"name\"), teamName)));"},{"lineNumber":549,"author":{"gitId":"-"},"content":""},{"lineNumber":550,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":551,"author":{"gitId":"-"},"content":" }"},{"lineNumber":552,"author":{"gitId":"-"},"content":""},{"lineNumber":553,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":554,"author":{"gitId":"-"},"content":" * Gets count of students of a team of a course."},{"lineNumber":555,"author":{"gitId":"-"},"content":" */"},{"lineNumber":556,"author":{"gitId":"-"},"content":" public long getStudentCountForTeam(String teamName, String courseId) {"},{"lineNumber":557,"author":{"gitId":"-"},"content":" assert teamName !\u003d null;"},{"lineNumber":558,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":559,"author":{"gitId":"-"},"content":""},{"lineNumber":560,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":561,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cLong\u003e cr \u003d cb.createQuery(Long.class);"},{"lineNumber":562,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":563,"author":{"gitId":"-"},"content":" Join\u003cStudent, Course\u003e courseJoin \u003d studentRoot.join(\"course\");"},{"lineNumber":564,"author":{"gitId":"-"},"content":" Join\u003cStudent, Team\u003e teamsJoin \u003d studentRoot.join(\"team\");"},{"lineNumber":565,"author":{"gitId":"-"},"content":""},{"lineNumber":566,"author":{"gitId":"-"},"content":" cr.select(cb.count(studentRoot.get(\"id\")))"},{"lineNumber":567,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":568,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":569,"author":{"gitId":"-"},"content":" cb.equal(teamsJoin.get(\"name\"), teamName)));"},{"lineNumber":570,"author":{"gitId":"-"},"content":""},{"lineNumber":571,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getSingleResult();"},{"lineNumber":572,"author":{"gitId":"-"},"content":" }"},{"lineNumber":573,"author":{"gitId":"-"},"content":""},{"lineNumber":574,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":575,"author":{"gitId":"domoberzin"},"content":" * Gets the section with the specified {@code sectionName} and {@code courseId}."},{"lineNumber":576,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":577,"author":{"gitId":"domoberzin"},"content":" public Section getSection(String courseId, String sectionName) {"},{"lineNumber":578,"author":{"gitId":"domoberzin"},"content":" assert sectionName !\u003d null;"},{"lineNumber":579,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":580,"author":{"gitId":"domoberzin"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":581,"author":{"gitId":"domoberzin"},"content":" CriteriaQuery\u003cSection\u003e cr \u003d cb.createQuery(Section.class);"},{"lineNumber":582,"author":{"gitId":"domoberzin"},"content":" Root\u003cSection\u003e sectionRoot \u003d cr.from(Section.class);"},{"lineNumber":583,"author":{"gitId":"domoberzin"},"content":" Join\u003cSection, Course\u003e courseJoin \u003d sectionRoot.join(\"course\");"},{"lineNumber":584,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":585,"author":{"gitId":"domoberzin"},"content":" cr.select(sectionRoot)"},{"lineNumber":586,"author":{"gitId":"domoberzin"},"content":" .where(cb.and("},{"lineNumber":587,"author":{"gitId":"domoberzin"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":588,"author":{"gitId":"domoberzin"},"content":" cb.equal(sectionRoot.get(\"name\"), sectionName)));"},{"lineNumber":589,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":590,"author":{"gitId":"domoberzin"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":591,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":592,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":593,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":594,"author":{"gitId":"domoberzin"},"content":" * Gets a section by its {@code courseId} and {@code sectionName}."},{"lineNumber":595,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":596,"author":{"gitId":"domoberzin"},"content":" public Section getSectionOrCreate(String courseId, String sectionName) {"},{"lineNumber":597,"author":{"gitId":"domoberzin"},"content":" assert courseId !\u003d null;"},{"lineNumber":598,"author":{"gitId":"domoberzin"},"content":" assert sectionName !\u003d null;"},{"lineNumber":599,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":600,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getSection(courseId, sectionName);"},{"lineNumber":601,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":602,"author":{"gitId":"domoberzin"},"content":" if (section \u003d\u003d null) {"},{"lineNumber":603,"author":{"gitId":"domoberzin"},"content":" Course course \u003d CoursesDb.inst().getCourse(courseId);"},{"lineNumber":604,"author":{"gitId":"domoberzin"},"content":" section \u003d new Section(course, sectionName);"},{"lineNumber":605,"author":{"gitId":"domoberzin"},"content":" persist(section);"},{"lineNumber":606,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":607,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":608,"author":{"gitId":"domoberzin"},"content":" return section;"},{"lineNumber":609,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":610,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":611,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":612,"author":{"gitId":"domoberzin"},"content":" * Gets a team by its {@code section} and {@code teamName}."},{"lineNumber":613,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":614,"author":{"gitId":"domoberzin"},"content":" public Team getTeam(Section section, String teamName) {"},{"lineNumber":615,"author":{"gitId":"domoberzin"},"content":" assert teamName !\u003d null;"},{"lineNumber":616,"author":{"gitId":"domoberzin"},"content":" assert section !\u003d null;"},{"lineNumber":617,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":618,"author":{"gitId":"domoberzin"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":619,"author":{"gitId":"domoberzin"},"content":" CriteriaQuery\u003cTeam\u003e cr \u003d cb.createQuery(Team.class);"},{"lineNumber":620,"author":{"gitId":"domoberzin"},"content":" Root\u003cTeam\u003e teamRoot \u003d cr.from(Team.class);"},{"lineNumber":621,"author":{"gitId":"domoberzin"},"content":" Join\u003cTeam, Section\u003e sectionJoin \u003d teamRoot.join(\"section\");"},{"lineNumber":622,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":623,"author":{"gitId":"domoberzin"},"content":" cr.select(teamRoot)"},{"lineNumber":624,"author":{"gitId":"domoberzin"},"content":" .where(cb.and("},{"lineNumber":625,"author":{"gitId":"domoberzin"},"content":" cb.equal(sectionJoin.get(\"id\"), section.getId()),"},{"lineNumber":626,"author":{"gitId":"domoberzin"},"content":" cb.equal(teamRoot.get(\"name\"), teamName)));"},{"lineNumber":627,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":628,"author":{"gitId":"domoberzin"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":629,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":630,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":631,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":632,"author":{"gitId":"domoberzin"},"content":" * Gets a team by its {@code section} and {@code teamName}."},{"lineNumber":633,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":634,"author":{"gitId":"domoberzin"},"content":" public Team getTeamOrCreate(Section section, String teamName) {"},{"lineNumber":635,"author":{"gitId":"domoberzin"},"content":" assert teamName !\u003d null;"},{"lineNumber":636,"author":{"gitId":"domoberzin"},"content":" assert section !\u003d null;"},{"lineNumber":637,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":638,"author":{"gitId":"domoberzin"},"content":" Team team \u003d getTeam(section, teamName);"},{"lineNumber":639,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":640,"author":{"gitId":"domoberzin"},"content":" if (team \u003d\u003d null) {"},{"lineNumber":641,"author":{"gitId":"domoberzin"},"content":" team \u003d new Team(section, teamName);"},{"lineNumber":642,"author":{"gitId":"domoberzin"},"content":" persist(team);"},{"lineNumber":643,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":644,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":645,"author":{"gitId":"domoberzin"},"content":" return team;"},{"lineNumber":646,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":647,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":648,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":649,"author":{"gitId":"domoberzin"},"content":" * Updates a student."},{"lineNumber":650,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":651,"author":{"gitId":"domoberzin"},"content":" public Student updateStudent(Student student)"},{"lineNumber":652,"author":{"gitId":"domoberzin"},"content":" throws EntityDoesNotExistException, InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":653,"author":{"gitId":"marquestye"},"content":" checkBeforeUpdateStudent(student);"},{"lineNumber":654,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":655,"author":{"gitId":"marquestye"},"content":" return merge(student);"},{"lineNumber":656,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":657,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":658,"author":{"gitId":"marquestye"},"content":" /**"},{"lineNumber":659,"author":{"gitId":"marquestye"},"content":" * Performs checks on student without updating."},{"lineNumber":660,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":661,"author":{"gitId":"marquestye"},"content":" public void checkBeforeUpdateStudent(Student student)"},{"lineNumber":662,"author":{"gitId":"marquestye"},"content":" throws EntityDoesNotExistException, InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":663,"author":{"gitId":"domoberzin"},"content":" assert student !\u003d null;"},{"lineNumber":664,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":665,"author":{"gitId":"domoberzin"},"content":" if (!student.isValid()) {"},{"lineNumber":666,"author":{"gitId":"domoberzin"},"content":" throw new InvalidParametersException(student.getInvalidityInfo());"},{"lineNumber":667,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":668,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":669,"author":{"gitId":"domoberzin"},"content":" if (getStudent(student.getId()) \u003d\u003d null) {"},{"lineNumber":670,"author":{"gitId":"domoberzin"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":671,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":672,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":673,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":674,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":93,"yuanxi1":30,"marquestye":10,"-":541}},{"path":"src/main/java/teammates/storage/sqlentity/FeedbackQuestion.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Objects;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.UpdateTimestamp;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackConstantSumQuestion;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackContributionQuestion;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackMcqQuestion;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackMsqQuestion;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackNumericalScaleQuestion;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackRankOptionsQuestion;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackRankRecipientsQuestion;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackRubricQuestion;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackTextQuestion;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"import jakarta.persistence.CascadeType;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import jakarta.persistence.Convert;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import jakarta.persistence.EnumType;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import jakarta.persistence.Enumerated;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import jakarta.persistence.Id;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import jakarta.persistence.Inheritance;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import jakarta.persistence.InheritanceType;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import jakarta.persistence.JoinColumn;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import jakarta.persistence.ManyToOne;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import jakarta.persistence.OneToMany;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import jakarta.persistence.Table;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Represents a feedback question."},{"lineNumber":40,"author":{"gitId":"-"},"content":" */"},{"lineNumber":41,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":42,"author":{"gitId":"-"},"content":"@Table(name \u003d \"FeedbackQuestions\")"},{"lineNumber":43,"author":{"gitId":"-"},"content":"@Inheritance(strategy \u003d InheritanceType.SINGLE_TABLE)"},{"lineNumber":44,"author":{"gitId":"-"},"content":"public abstract class FeedbackQuestion extends BaseEntity implements Comparable\u003cFeedbackQuestion\u003e {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @Id"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private UUID id;"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":49,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"sessionId\")"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private FeedbackSession feedbackSession;"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" @OneToMany(mappedBy \u003d \"feedbackQuestion\", cascade \u003d CascadeType.REMOVE)"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponse\u003e feedbackResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" private Integer questionNumber;"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Column(nullable \u003d true)"},{"lineNumber":59,"author":{"gitId":"-"},"content":" private String description;"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Enumerated(EnumType.STRING)"},{"lineNumber":63,"author":{"gitId":"-"},"content":" private FeedbackParticipantType giverType;"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":66,"author":{"gitId":"-"},"content":" @Enumerated(EnumType.STRING)"},{"lineNumber":67,"author":{"gitId":"-"},"content":" private FeedbackParticipantType recipientType;"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":70,"author":{"gitId":"-"},"content":" private Integer numOfEntitiesToGiveFeedbackTo;"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":73,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":74,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showResponsesTo;"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":77,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":78,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showGiverNameTo;"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":81,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showRecipientNameTo;"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" @UpdateTimestamp"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Column"},{"lineNumber":86,"author":{"gitId":"-"},"content":" private Instant updatedAt;"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":" protected FeedbackQuestion() {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" public FeedbackQuestion("},{"lineNumber":93,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, Integer questionNumber,"},{"lineNumber":94,"author":{"gitId":"-"},"content":" String description, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Integer numOfEntitiesToGiveFeedbackTo, List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":96,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo, List\u003cFeedbackParticipantType\u003e showRecipientNameTo"},{"lineNumber":97,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" this.setId(UUID.randomUUID());"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.setFeedbackSession(feedbackSession);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" this.setQuestionNumber(questionNumber);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" this.setDescription(description);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" this.setGiverType(giverType);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" this.setRecipientType(recipientType);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" this.setNumOfEntitiesToGiveFeedbackTo(numOfEntitiesToGiveFeedbackTo);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" this.setShowResponsesTo(showResponsesTo);"},{"lineNumber":106,"author":{"gitId":"-"},"content":" this.setShowGiverNameTo(showGiverNameTo);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" this.setShowRecipientNameTo(showRecipientNameTo);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Gets a copy of the question details of the feedback question."},{"lineNumber":112,"author":{"gitId":"-"},"content":" */"},{"lineNumber":113,"author":{"gitId":"-"},"content":" public abstract FeedbackQuestionDetails getQuestionDetailsCopy();"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Make a copy of the FeedbackQuestion."},{"lineNumber":117,"author":{"gitId":"-"},"content":" */"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public abstract FeedbackQuestion makeDeepCopy(FeedbackSession newFeedbackSession);"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * Creates a feedback question according to its {@code FeedbackQuestionType}."},{"lineNumber":122,"author":{"gitId":"-"},"content":" */"},{"lineNumber":123,"author":{"gitId":"-"},"content":" public static FeedbackQuestion makeQuestion("},{"lineNumber":124,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, Integer questionNumber,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" String description, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" Integer numOfEntitiesToGiveFeedbackTo, List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo, List\u003cFeedbackParticipantType\u003e showRecipientNameTo,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails feedbackQuestionDetails"},{"lineNumber":129,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion \u003d null;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" switch (feedbackQuestionDetails.getQuestionType()) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" case TEXT:"},{"lineNumber":133,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackTextQuestion("},{"lineNumber":134,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":135,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":136,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":137,"author":{"gitId":"-"},"content":" );"},{"lineNumber":138,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":139,"author":{"gitId":"-"},"content":" case MCQ:"},{"lineNumber":140,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackMcqQuestion("},{"lineNumber":141,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":142,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":143,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":144,"author":{"gitId":"-"},"content":" );"},{"lineNumber":145,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" case MSQ:"},{"lineNumber":147,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackMsqQuestion("},{"lineNumber":148,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":149,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":150,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":151,"author":{"gitId":"-"},"content":" );"},{"lineNumber":152,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" case NUMSCALE:"},{"lineNumber":154,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackNumericalScaleQuestion("},{"lineNumber":155,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":156,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":157,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":158,"author":{"gitId":"-"},"content":" );"},{"lineNumber":159,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" case CONSTSUM:"},{"lineNumber":161,"author":{"gitId":"-"},"content":" case CONSTSUM_OPTIONS:"},{"lineNumber":162,"author":{"gitId":"-"},"content":" case CONSTSUM_RECIPIENTS:"},{"lineNumber":163,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackConstantSumQuestion("},{"lineNumber":164,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":165,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":166,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":167,"author":{"gitId":"-"},"content":" );"},{"lineNumber":168,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":169,"author":{"gitId":"-"},"content":" case CONTRIB:"},{"lineNumber":170,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackContributionQuestion("},{"lineNumber":171,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":172,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":173,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":174,"author":{"gitId":"-"},"content":" );"},{"lineNumber":175,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" case RUBRIC:"},{"lineNumber":177,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackRubricQuestion("},{"lineNumber":178,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":179,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":180,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":181,"author":{"gitId":"-"},"content":" );"},{"lineNumber":182,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":183,"author":{"gitId":"-"},"content":" case RANK_OPTIONS:"},{"lineNumber":184,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackRankOptionsQuestion("},{"lineNumber":185,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":186,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":187,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":188,"author":{"gitId":"-"},"content":" );"},{"lineNumber":189,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" case RANK_RECIPIENTS:"},{"lineNumber":191,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackRankRecipientsQuestion("},{"lineNumber":192,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":193,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":194,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":195,"author":{"gitId":"-"},"content":" );"},{"lineNumber":196,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":" return feedbackQuestion;"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":202,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" List\u003cString\u003e errors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" errors.addAll(FieldValidator.getValidityInfoForFeedbackParticipantType(giverType, recipientType));"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" errors.addAll(FieldValidator.getValidityInfoForFeedbackResponseVisibility(showResponsesTo,"},{"lineNumber":208,"author":{"gitId":"-"},"content":" showGiverNameTo,"},{"lineNumber":209,"author":{"gitId":"-"},"content":" showRecipientNameTo));"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" return errors;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * Checks if updating this question to the question will"},{"lineNumber":216,"author":{"gitId":"-"},"content":" * require the responses to be deleted for consistency."},{"lineNumber":217,"author":{"gitId":"-"},"content":" * Does not check if any responses exist."},{"lineNumber":218,"author":{"gitId":"-"},"content":" */"},{"lineNumber":219,"author":{"gitId":"-"},"content":" public boolean areResponseDeletionsRequiredForChanges(FeedbackParticipantType giverType,"},{"lineNumber":220,"author":{"gitId":"-"},"content":" FeedbackParticipantType recipientType,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" if (!giverType.equals(this.giverType)"},{"lineNumber":223,"author":{"gitId":"-"},"content":" || !recipientType.equals(this.recipientType)) {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" return this.getQuestionDetailsCopy().shouldChangesRequireResponseDeletion(questionDetails);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" }"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" public UUID getId() {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" return id;"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" public void setId(UUID id) {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" this.id \u003d id;"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession() {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" return feedbackSession;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" public String getFeedbackSessionName() {"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" return feedbackSession.getName();"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" public void setFeedbackSession(FeedbackSession feedbackSession) {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" this.feedbackSession \u003d feedbackSession;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponses() {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" return feedbackResponses;"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" public void setFeedbackResponses(List\u003cFeedbackResponse\u003e feedbackResponses) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" this.feedbackResponses \u003d feedbackResponses;"},{"lineNumber":256,"author":{"gitId":"-"},"content":" }"},{"lineNumber":257,"author":{"gitId":"-"},"content":""},{"lineNumber":258,"author":{"gitId":"-"},"content":" public Integer getQuestionNumber() {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" return questionNumber;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" public void setQuestionNumber(Integer questionNumber) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" this.questionNumber \u003d questionNumber;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":" public String getDescription() {"},{"lineNumber":267,"author":{"gitId":"-"},"content":" return description;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":" public void setDescription(String description) {"},{"lineNumber":271,"author":{"gitId":"-"},"content":" this.description \u003d description;"},{"lineNumber":272,"author":{"gitId":"-"},"content":" }"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":275,"author":{"gitId":"-"},"content":" * Set the question details of the question."},{"lineNumber":276,"author":{"gitId":"-"},"content":" */"},{"lineNumber":277,"author":{"gitId":"-"},"content":" public abstract void setQuestionDetails(FeedbackQuestionDetails questionDetails);"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" public FeedbackParticipantType getGiverType() {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" return giverType;"},{"lineNumber":281,"author":{"gitId":"-"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":" public void setGiverType(FeedbackParticipantType giverType) {"},{"lineNumber":284,"author":{"gitId":"-"},"content":" this.giverType \u003d giverType;"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":" public FeedbackParticipantType getRecipientType() {"},{"lineNumber":288,"author":{"gitId":"-"},"content":" return recipientType;"},{"lineNumber":289,"author":{"gitId":"-"},"content":" }"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":" public void setRecipientType(FeedbackParticipantType recipientType) {"},{"lineNumber":292,"author":{"gitId":"-"},"content":" this.recipientType \u003d recipientType;"},{"lineNumber":293,"author":{"gitId":"-"},"content":" }"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":" public Integer getNumOfEntitiesToGiveFeedbackTo() {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" return numOfEntitiesToGiveFeedbackTo;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" public void setNumOfEntitiesToGiveFeedbackTo(Integer numOfEntitiesToGiveFeedbackTo) {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" this.numOfEntitiesToGiveFeedbackTo \u003d numOfEntitiesToGiveFeedbackTo;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowResponsesTo() {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" return showResponsesTo;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" }"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" public void setShowResponsesTo(List\u003cFeedbackParticipantType\u003e showResponsesTo) {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" this.showResponsesTo \u003d showResponsesTo;"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowGiverNameTo() {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" return showGiverNameTo;"},{"lineNumber":313,"author":{"gitId":"-"},"content":" }"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":" public void setShowGiverNameTo(List\u003cFeedbackParticipantType\u003e showGiverNameTo) {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" this.showGiverNameTo \u003d showGiverNameTo;"},{"lineNumber":317,"author":{"gitId":"-"},"content":" }"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowRecipientNameTo() {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" return showRecipientNameTo;"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" public void setShowRecipientNameTo(List\u003cFeedbackParticipantType\u003e showRecipientNameTo) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" this.showRecipientNameTo \u003d showRecipientNameTo;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":" public Instant getUpdatedAt() {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" return updatedAt;"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":""},{"lineNumber":331,"author":{"gitId":"-"},"content":" public void setUpdatedAt(Instant updatedAt) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" this.updatedAt \u003d updatedAt;"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" public Course getCourse() {"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" return this.feedbackSession.getCourse();"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":" public String getCourseId() {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" return this.feedbackSession.getCourse().getId();"},{"lineNumber":341,"author":{"gitId":"-"},"content":" }"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":344,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":345,"author":{"gitId":"-"},"content":" return \"Question [id\u003d\" + id + \", questionNumber\u003d\" + questionNumber + \", description\u003d\" + description"},{"lineNumber":346,"author":{"gitId":"-"},"content":" + \", giverType\u003d\" + giverType + \", recipientType\u003d\" + recipientType"},{"lineNumber":347,"author":{"gitId":"-"},"content":" + \", numOfEntitiesToGiveFeedbackTo\u003d\" + numOfEntitiesToGiveFeedbackTo + \", showResponsesTo\u003d\""},{"lineNumber":348,"author":{"gitId":"-"},"content":" + showResponsesTo + \", showGiverNameTo\u003d\" + showGiverNameTo + \", showRecipientNameTo\u003d\""},{"lineNumber":349,"author":{"gitId":"-"},"content":" + showRecipientNameTo + \", isClosingEmailEnabled\u003d\" + \", createdAt\u003d\" + getCreatedAt() + \", updatedAt\u003d\""},{"lineNumber":350,"author":{"gitId":"-"},"content":" + updatedAt + \"]\";"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":354,"author":{"gitId":"-"},"content":" public int compareTo(FeedbackQuestion o) {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" if (o \u003d\u003d null) {"},{"lineNumber":356,"author":{"gitId":"-"},"content":" return 1;"},{"lineNumber":357,"author":{"gitId":"-"},"content":" }"},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":" if (!this.questionNumber.equals(o.questionNumber)) {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" return Integer.compare(this.questionNumber, o.questionNumber);"},{"lineNumber":361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":362,"author":{"gitId":"-"},"content":" // Although question numbers ought to be unique in a feedback session,"},{"lineNumber":363,"author":{"gitId":"-"},"content":" // eventual consistency can result in duplicate questions numbers."},{"lineNumber":364,"author":{"gitId":"-"},"content":" // Therefore, to ensure that the question order is always consistent to the user,"},{"lineNumber":365,"author":{"gitId":"-"},"content":" // compare feedbackQuestionId, which is guaranteed to be unique,"},{"lineNumber":366,"author":{"gitId":"-"},"content":" // when the questionNumbers are the same."},{"lineNumber":367,"author":{"gitId":"-"},"content":" return this.id.compareTo(o.id);"},{"lineNumber":368,"author":{"gitId":"-"},"content":" }"},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":371,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" // FeedbackQuestion ID uniquely identifies a FeedbackQuestion."},{"lineNumber":373,"author":{"gitId":"-"},"content":" return this.getId().hashCode();"},{"lineNumber":374,"author":{"gitId":"-"},"content":" }"},{"lineNumber":375,"author":{"gitId":"-"},"content":""},{"lineNumber":376,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":377,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" if (other \u003d\u003d null) {"},{"lineNumber":379,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":380,"author":{"gitId":"-"},"content":" } else if (this \u003d\u003d other) {"},{"lineNumber":381,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":382,"author":{"gitId":"-"},"content":" } else if (this.getClass() \u003d\u003d other.getClass()) {"},{"lineNumber":383,"author":{"gitId":"-"},"content":" FeedbackQuestion otherQuestion \u003d (FeedbackQuestion) other;"},{"lineNumber":384,"author":{"gitId":"-"},"content":" return Objects.equals(this.getId(), otherQuestion.getId());"},{"lineNumber":385,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":386,"author":{"gitId":"-"},"content":" return false;"},{"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":" * Returns true if the response is visible to the given participant type."},{"lineNumber":392,"author":{"gitId":"-"},"content":" */"},{"lineNumber":393,"author":{"gitId":"-"},"content":" public boolean isResponseVisibleTo(FeedbackParticipantType userType) {"},{"lineNumber":394,"author":{"gitId":"-"},"content":" return showResponsesTo.contains(userType);"},{"lineNumber":395,"author":{"gitId":"-"},"content":" }"},{"lineNumber":396,"author":{"gitId":"-"},"content":"}"},{"lineNumber":397,"author":{"gitId":"-"},"content":""}],"authorContributionMap":{"xenosf":8,"-":389}},{"path":"src/main/java/teammates/storage/sqlentity/FeedbackResponse.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Objects;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.UpdateTimestamp;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackConstantSumResponse;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackContributionResponse;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackMcqResponse;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackMsqResponse;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackNumericalScaleResponse;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackRankOptionsResponse;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackRankRecipientsResponse;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackRubricResponse;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackTextResponse;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.CascadeType;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import jakarta.persistence.Id;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import jakarta.persistence.Inheritance;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import jakarta.persistence.InheritanceType;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import jakarta.persistence.JoinColumn;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import jakarta.persistence.ManyToOne;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import jakarta.persistence.OneToMany;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import jakarta.persistence.Table;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Represents a Feedback Response."},{"lineNumber":35,"author":{"gitId":"-"},"content":" */"},{"lineNumber":36,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":37,"author":{"gitId":"-"},"content":"@Table(name \u003d \"FeedbackResponses\")"},{"lineNumber":38,"author":{"gitId":"-"},"content":"@Inheritance(strategy \u003d InheritanceType.SINGLE_TABLE)"},{"lineNumber":39,"author":{"gitId":"-"},"content":"public abstract class FeedbackResponse extends BaseEntity {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Id"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private UUID id;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":44,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"questionId\")"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private FeedbackQuestion feedbackQuestion;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" @OneToMany(mappedBy \u003d \"feedbackResponse\", cascade \u003d CascadeType.REMOVE)"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponseComment\u003e feedbackResponseComments \u003d new ArrayList\u003c\u003e();"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private String giver;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":54,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"giverSectionId\")"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private Section giverSection;"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":58,"author":{"gitId":"-"},"content":" private String recipient;"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"recipientSectionId\")"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private Section recipientSection;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @UpdateTimestamp"},{"lineNumber":65,"author":{"gitId":"-"},"content":" private Instant updatedAt;"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" protected FeedbackResponse() {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" public FeedbackResponse("},{"lineNumber":72,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion, String giver,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" Section giverSection, String recipient, Section recipientSection"},{"lineNumber":74,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" this.setId(UUID.randomUUID());"},{"lineNumber":76,"author":{"gitId":"-"},"content":" this.setFeedbackQuestion(feedbackQuestion);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" this.setGiver(giver);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" this.setGiverSection(giverSection);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.setRecipient(recipient);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" this.setRecipientSection(recipientSection);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Creates a feedback response according to its {@code FeedbackQuestionType}."},{"lineNumber":85,"author":{"gitId":"-"},"content":" */"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public static FeedbackResponse makeResponse("},{"lineNumber":87,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion, String giver,"},{"lineNumber":88,"author":{"gitId":"-"},"content":" Section giverSection, String receiver, Section receiverSection,"},{"lineNumber":89,"author":{"gitId":"-"},"content":" FeedbackResponseDetails responseDetails"},{"lineNumber":90,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackResponse feedbackResponse \u003d null;"},{"lineNumber":92,"author":{"gitId":"-"},"content":" switch (responseDetails.getQuestionType()) {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" case TEXT:"},{"lineNumber":94,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackTextResponse("},{"lineNumber":95,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":96,"author":{"gitId":"-"},"content":" );"},{"lineNumber":97,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" case MCQ:"},{"lineNumber":99,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackMcqResponse("},{"lineNumber":100,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":101,"author":{"gitId":"-"},"content":" );"},{"lineNumber":102,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":103,"author":{"gitId":"-"},"content":" case MSQ:"},{"lineNumber":104,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackMsqResponse("},{"lineNumber":105,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":106,"author":{"gitId":"-"},"content":" );"},{"lineNumber":107,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" case NUMSCALE:"},{"lineNumber":109,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackNumericalScaleResponse("},{"lineNumber":110,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":111,"author":{"gitId":"-"},"content":" );"},{"lineNumber":112,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" case CONSTSUM:"},{"lineNumber":114,"author":{"gitId":"-"},"content":" case CONSTSUM_OPTIONS:"},{"lineNumber":115,"author":{"gitId":"-"},"content":" case CONSTSUM_RECIPIENTS:"},{"lineNumber":116,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackConstantSumResponse("},{"lineNumber":117,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":118,"author":{"gitId":"-"},"content":" );"},{"lineNumber":119,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" case CONTRIB:"},{"lineNumber":121,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackContributionResponse("},{"lineNumber":122,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":123,"author":{"gitId":"-"},"content":" );"},{"lineNumber":124,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":125,"author":{"gitId":"-"},"content":" case RUBRIC:"},{"lineNumber":126,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackRubricResponse("},{"lineNumber":127,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":128,"author":{"gitId":"-"},"content":" );"},{"lineNumber":129,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" case RANK_OPTIONS:"},{"lineNumber":131,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackRankOptionsResponse("},{"lineNumber":132,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":133,"author":{"gitId":"-"},"content":" );"},{"lineNumber":134,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":135,"author":{"gitId":"-"},"content":" case RANK_RECIPIENTS:"},{"lineNumber":136,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackRankRecipientsResponse("},{"lineNumber":137,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":138,"author":{"gitId":"-"},"content":" );"},{"lineNumber":139,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":" return feedbackResponse;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * Update a feedback response according to its {@code FeedbackQuestionType}."},{"lineNumber":146,"author":{"gitId":"-"},"content":" */"},{"lineNumber":147,"author":{"gitId":"-"},"content":" public static FeedbackResponse updateResponse("},{"lineNumber":148,"author":{"gitId":"-"},"content":" FeedbackResponse originalFeedbackResponse,"},{"lineNumber":149,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion, String giver,"},{"lineNumber":150,"author":{"gitId":"-"},"content":" Section giverSection, String receiver, Section receiverSection,"},{"lineNumber":151,"author":{"gitId":"-"},"content":" FeedbackResponseDetails responseDetails"},{"lineNumber":152,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" FeedbackResponse updatedFeedbackResponse \u003d FeedbackResponse.makeResponse("},{"lineNumber":154,"author":{"gitId":"-"},"content":" feedbackQuestion,"},{"lineNumber":155,"author":{"gitId":"-"},"content":" giver,"},{"lineNumber":156,"author":{"gitId":"-"},"content":" giverSection,"},{"lineNumber":157,"author":{"gitId":"-"},"content":" receiver,"},{"lineNumber":158,"author":{"gitId":"-"},"content":" receiverSection,"},{"lineNumber":159,"author":{"gitId":"-"},"content":" responseDetails"},{"lineNumber":160,"author":{"gitId":"-"},"content":" );"},{"lineNumber":161,"author":{"gitId":"-"},"content":" updatedFeedbackResponse.setCreatedAt(originalFeedbackResponse.getCreatedAt());"},{"lineNumber":162,"author":{"gitId":"-"},"content":" updatedFeedbackResponse.setId(originalFeedbackResponse.getId());"},{"lineNumber":163,"author":{"gitId":"-"},"content":" return updatedFeedbackResponse;"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":167,"author":{"gitId":"-"},"content":" * Gets a copy of the question details of the feedback question."},{"lineNumber":168,"author":{"gitId":"-"},"content":" */"},{"lineNumber":169,"author":{"gitId":"-"},"content":" public abstract FeedbackResponseDetails getFeedbackResponseDetailsCopy();"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" public UUID getId() {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" return id;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" public void setId(UUID id) {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" this.id \u003d id;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" public FeedbackQuestion getFeedbackQuestion() {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" return feedbackQuestion;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" public void setFeedbackQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" this.feedbackQuestion \u003d feedbackQuestion;"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseComments() {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" return feedbackResponseComments;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" public void setFeedbackResponseComments(List\u003cFeedbackResponseComment\u003e feedbackResponseComments) {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" this.feedbackResponseComments \u003d feedbackResponseComments;"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" public String getGiver() {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" return giver;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" public void setGiver(String giver) {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" this.giver \u003d giver;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" public Section getGiverSection() {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" return giverSection;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" public String getGiverSectionName() {"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" return giverSection.getName();"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" public void setGiverSection(Section giverSection) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" this.giverSection \u003d giverSection;"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":" public String getRecipient() {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" return recipient;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" public void setRecipient(String recipient) {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" this.recipient \u003d recipient;"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" public Section getRecipientSection() {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return recipientSection;"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" public String getRecipientSectionName() {"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" return recipientSection.getName();"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" public void setRecipientSection(Section recipientSection) {"},{"lineNumber":232,"author":{"gitId":"-"},"content":" this.recipientSection \u003d recipientSection;"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }"},{"lineNumber":234,"author":{"gitId":"-"},"content":""},{"lineNumber":235,"author":{"gitId":"-"},"content":" public Instant getUpdatedAt() {"},{"lineNumber":236,"author":{"gitId":"-"},"content":" return updatedAt;"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" public void setUpdatedAt(Instant updatedAt) {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" this.updatedAt \u003d updatedAt;"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":244,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":246,"author":{"gitId":"-"},"content":" }"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":249,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return \"FeedbackResponse [id\u003d\" + id + \", giver\u003d\" + giver + \", recipient\u003d\" + recipient"},{"lineNumber":251,"author":{"gitId":"-"},"content":" + \", createdAt\u003d\" + getCreatedAt() + \", updatedAt\u003d\" + updatedAt + \"]\";"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":255,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":256,"author":{"gitId":"-"},"content":" return this.getId().hashCode();"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":260,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {"},{"lineNumber":261,"author":{"gitId":"-"},"content":" if (other \u003d\u003d null) {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":263,"author":{"gitId":"-"},"content":" } else if (this \u003d\u003d other) {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" } else if (this.getClass() \u003d\u003d other.getClass()) {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" FeedbackResponse otherResponse \u003d (FeedbackResponse) other;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" return Objects.equals(this.getId(), otherResponse.getId());"},{"lineNumber":268,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }"},{"lineNumber":272,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":8,"-":264}},{"path":"src/main/java/teammates/storage/sqlentity/FeedbackResponseComment.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Objects;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.OnDelete;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.OnDeleteAction;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.UpdateTimestamp;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import jakarta.persistence.Convert;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import jakarta.persistence.GeneratedValue;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import jakarta.persistence.Id;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.JoinColumn;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.ManyToOne;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.Table;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Represents a feedback response comment."},{"lineNumber":27,"author":{"gitId":"-"},"content":" */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":29,"author":{"gitId":"-"},"content":"@Table(name \u003d \"FeedbackResponseComments\")"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public class FeedbackResponseComment extends BaseEntity {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Id"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @GeneratedValue"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private Long id;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @OnDelete(action \u003d OnDeleteAction.CASCADE)"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"responseId\")"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private FeedbackResponse feedbackResponse;"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private String giver;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":44,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeConverter.class)"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private FeedbackParticipantType giverType;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":48,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"giverSectionId\")"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private Section giverSection;"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":52,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"recipientSectionId\")"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private Section recipientSection;"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" private String commentText;"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":59,"author":{"gitId":"-"},"content":" private boolean isVisibilityFollowingFeedbackQuestion;"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private boolean isCommentFromFeedbackParticipant;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":65,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":66,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showCommentTo;"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":70,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showGiverNameTo;"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" @UpdateTimestamp"},{"lineNumber":73,"author":{"gitId":"-"},"content":" private Instant updatedAt;"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":76,"author":{"gitId":"-"},"content":" private String lastEditorEmail;"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" protected FeedbackResponseComment() {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" public FeedbackResponseComment("},{"lineNumber":83,"author":{"gitId":"-"},"content":" FeedbackResponse feedbackResponse, String giver, FeedbackParticipantType giverType,"},{"lineNumber":84,"author":{"gitId":"-"},"content":" Section giverSection, Section recipientSection, String commentText,"},{"lineNumber":85,"author":{"gitId":"-"},"content":" boolean isVisibilityFollowingFeedbackQuestion, boolean isCommentFromFeedbackParticipant,"},{"lineNumber":86,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showCommentTo, List\u003cFeedbackParticipantType\u003e showGiverNameTo,"},{"lineNumber":87,"author":{"gitId":"-"},"content":" String lastEditorEmail"},{"lineNumber":88,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" this.setFeedbackResponse(feedbackResponse);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" this.setGiver(giver);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" this.setGiverType(giverType);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" this.setGiverSection(giverSection);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.setRecipientSection(recipientSection);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" this.setCommentText(commentText);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" this.setIsVisibilityFollowingFeedbackQuestion(isVisibilityFollowingFeedbackQuestion);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.setIsCommentFromFeedbackParticipant(isCommentFromFeedbackParticipant);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" this.setShowCommentTo(showCommentTo);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" this.setShowGiverNameTo(showGiverNameTo);"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.setLastEditorEmail(lastEditorEmail);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" public Long getId() {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return id;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void setId(Long id) {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" this.id \u003d id;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" public FeedbackResponse getFeedbackResponse() {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" return feedbackResponse;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" public void setFeedbackResponse(FeedbackResponse feedbackResponse) {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" this.feedbackResponse \u003d feedbackResponse;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" public String getGiver() {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" return giver;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" public void setGiver(String giver) {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" this.giver \u003d giver;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" public FeedbackParticipantType getGiverType() {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" return giverType;"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" public void setGiverType(FeedbackParticipantType giverType) {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" this.giverType \u003d giverType;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" public Section getGiverSection() {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return giverSection;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" public void setGiverSection(Section giverSection) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" this.giverSection \u003d giverSection;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" public Section getRecipientSection() {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return recipientSection;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" public void setRecipientSection(Section recipientSection) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" this.recipientSection \u003d recipientSection;"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" public String getCommentText() {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" return commentText;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" public void setCommentText(String commentText) {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" this.commentText \u003d commentText;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" public boolean getIsVisibilityFollowingFeedbackQuestion() {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" return this.isVisibilityFollowingFeedbackQuestion;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" public void setIsVisibilityFollowingFeedbackQuestion(boolean isVisibilityFollowingFeedbackQuestion) {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" this.isVisibilityFollowingFeedbackQuestion \u003d isVisibilityFollowingFeedbackQuestion;"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" public boolean getIsCommentFromFeedbackParticipant() {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return this.isCommentFromFeedbackParticipant;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" public void setIsCommentFromFeedbackParticipant(boolean isCommentFromFeedbackParticipant) {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" this.isCommentFromFeedbackParticipant \u003d isCommentFromFeedbackParticipant;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowCommentTo() {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return showCommentTo;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" public void setShowCommentTo(List\u003cFeedbackParticipantType\u003e showCommentTo) {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" this.showCommentTo \u003d showCommentTo;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowGiverNameTo() {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" return showGiverNameTo;"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" public void setShowGiverNameTo(List\u003cFeedbackParticipantType\u003e showGiverNameTo) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" this.showGiverNameTo \u003d showGiverNameTo;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" public Instant getUpdatedAt() {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" return updatedAt;"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" public void setUpdatedAt(Instant updatedAt) {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" this.updatedAt \u003d updatedAt;"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":" public String getLastEditorEmail() {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return lastEditorEmail;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" public void setLastEditorEmail(String lastEditorEmail) {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" this.lastEditorEmail \u003d lastEditorEmail;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * Formats the entity before persisting in database."},{"lineNumber":208,"author":{"gitId":"-"},"content":" * TODO: Override when BaseEntity adds abstract sanitizeForSaving"},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public void sanitizeForSaving() {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" this.commentText \u003d SanitizationHelper.sanitizeForRichText(this.commentText);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" * Returns true if the response comment is visible to the given participant type."},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" public boolean checkIsVisibleTo(FeedbackParticipantType viewerType) {"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" return showCommentTo.contains(viewerType);"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":222,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" List\u003cString\u003e errors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForCommentGiverType(giverType), errors);"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForVisibilityOfFeedbackParticipantComments("},{"lineNumber":228,"author":{"gitId":"-"},"content":" isCommentFromFeedbackParticipant, isVisibilityFollowingFeedbackQuestion), errors);"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" return errors;"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":234,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" return \"FeedbackResponse [id\u003d\" + id + \", giver\u003d\" + giver + \", commentText\u003d\" + commentText"},{"lineNumber":236,"author":{"gitId":"-"},"content":" + \", isVisibilityFollowingFeedbackQuestion\u003d\" + isVisibilityFollowingFeedbackQuestion"},{"lineNumber":237,"author":{"gitId":"-"},"content":" + \", isCommentFromFeedbackParticipant\u003d\" + isCommentFromFeedbackParticipant"},{"lineNumber":238,"author":{"gitId":"-"},"content":" + \", lastEditorEmail\u003d\" + lastEditorEmail + \", createdAt\u003d\" + getCreatedAt()"},{"lineNumber":239,"author":{"gitId":"-"},"content":" + \", updatedAt\u003d\" + updatedAt + \"]\";"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":243,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" return this.getId().hashCode();"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":248,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {"},{"lineNumber":249,"author":{"gitId":"-"},"content":" if (other \u003d\u003d null) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":251,"author":{"gitId":"-"},"content":" } else if (this \u003d\u003d other) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" } else if (this.getClass() \u003d\u003d other.getClass()) {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" FeedbackResponseComment otherResponse \u003d (FeedbackResponseComment) other;"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return Objects.equals(this.getId(), otherResponse.getId());"},{"lineNumber":256,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":258,"author":{"gitId":"-"},"content":" }"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":7,"-":253}},{"path":"src/main/java/teammates/storage/sqlentity/Student.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.util.Config;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import jakarta.persistence.Table;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * Represents a Student."},{"lineNumber":17,"author":{"gitId":"-"},"content":" */"},{"lineNumber":18,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":19,"author":{"gitId":"-"},"content":"@Table(name \u003d \"Students\")"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class Student extends User {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private String comments;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" protected Student() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" public Student(Course course, String name, String email, String comments) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" super(course, name, email);"},{"lineNumber":30,"author":{"gitId":"-"},"content":" this.setComments(comments);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" public Student(Course course, String name, String email, String comments, Team team) {"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" super(course, name, email);"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" this.setComments(comments);"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" this.setTeam(team);"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" * Gets the comments of the student."},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public String getComments() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return comments;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" * Sets the comments of the student."},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public void setComments(String comments) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" this.comments \u003d SanitizationHelper.sanitizeTextField(comments);"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public String getTeamName() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return getTeam().getName();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public String getSectionName() {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return this.getTeam().getSection().getName();"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public Section getSection() {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return this.getTeam().getSection();"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return \"Student [id\u003d\" + super.getId() + \", comments\u003d\" + comments"},{"lineNumber":71,"author":{"gitId":"-"},"content":" + \", createdAt\u003d\" + super.getCreatedAt() + \", updatedAt\u003d\" + super.getUpdatedAt() + \"]\";"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" assert comments !\u003d null;"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" List\u003cString\u003e errors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForEmail(super.getEmail()), errors);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForStudentRoleComments(comments), errors);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForPersonName(super.getName()), errors);"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" return errors;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" public String getRegistrationUrl() {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" return Config.getFrontEndAppUrl(Const.WebPageURIs.JOIN_PAGE)"},{"lineNumber":89,"author":{"gitId":"-"},"content":" .withRegistrationKey(getRegKey())"},{"lineNumber":90,"author":{"gitId":"-"},"content":" .withEntityType(Const.EntityType.STUDENT)"},{"lineNumber":91,"author":{"gitId":"-"},"content":" .toString();"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":12,"-":81}},{"path":"src/main/java/teammates/storage/sqlentity/questions/FeedbackMsqQuestion.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity.questions;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import jakarta.persistence.Convert;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import jakarta.persistence.Converter;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Represents an msq question."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class FeedbackMsqQuestion extends FeedbackQuestion {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false, columnDefinition \u003d \"TEXT\")"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackMsqQuestionDetailsConverter.class)"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private FeedbackMsqQuestionDetails questionDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" protected FeedbackMsqQuestion() {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" public FeedbackMsqQuestion("},{"lineNumber":32,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, Integer questionNumber,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" String description, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Integer numOfEntitiesToGiveFeedbackTo, List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo, List\u003cFeedbackParticipantType\u003e showRecipientNameTo,"},{"lineNumber":36,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails feedbackQuestionDetails"},{"lineNumber":37,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" super(feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" setFeedBackQuestionDetails((FeedbackMsqQuestionDetails) feedbackQuestionDetails);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public FeedbackQuestionDetails getQuestionDetailsCopy() {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return questionDetails.getDeepCopy();"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public FeedbackMsqQuestion makeDeepCopy(FeedbackSession newFeedbackSession) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return new FeedbackMsqQuestion("},{"lineNumber":51,"author":{"gitId":"-"},"content":" newFeedbackSession, this.getQuestionNumber(), this.getDescription(), this.getGiverType(),"},{"lineNumber":52,"author":{"gitId":"-"},"content":" this.getRecipientType(), this.getNumOfEntitiesToGiveFeedbackTo(), new ArrayList\u003c\u003e(this.getShowResponsesTo()),"},{"lineNumber":53,"author":{"gitId":"-"},"content":" new ArrayList\u003c\u003e(this.getShowGiverNameTo()), new ArrayList\u003c\u003e(this.getShowRecipientNameTo()),"},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" this.questionDetails.getDeepCopy()"},{"lineNumber":55,"author":{"gitId":"-"},"content":" );"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public void setQuestionDetails(FeedbackQuestionDetails questionDetails) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" this.questionDetails \u003d (FeedbackMsqQuestionDetails) questionDetails;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return \"FeedbackMsqQuestion [id\u003d\" + super.getId()"},{"lineNumber":66,"author":{"gitId":"-"},"content":" + \", createdAt\u003d\" + super.getCreatedAt() + \", updatedAt\u003d\" + super.getUpdatedAt() + \"]\";"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void setFeedBackQuestionDetails(FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" this.questionDetails \u003d questionDetails;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" public FeedbackMsqQuestionDetails getFeedbackQuestionDetails() {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" return questionDetails;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Converter for FeedbackMsqQuestion specific attributes."},{"lineNumber":79,"author":{"gitId":"-"},"content":" */"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Converter"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public static class FeedbackMsqQuestionDetailsConverter"},{"lineNumber":82,"author":{"gitId":"-"},"content":" extends FeedbackQuestionDetailsConverter {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":1,"-":83}},{"path":"src/main/java/teammates/storage/sqlentity/questions/FeedbackRankOptionsQuestion.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity.questions;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsQuestionDetails;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import jakarta.persistence.Convert;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import jakarta.persistence.Converter;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Represents a rank options question."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class FeedbackRankOptionsQuestion extends FeedbackQuestion {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false, columnDefinition \u003d \"TEXT\")"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackRankOptionsQuestionDetailsConverter.class)"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private FeedbackRankOptionsQuestionDetails questionDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" protected FeedbackRankOptionsQuestion() {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" public FeedbackRankOptionsQuestion("},{"lineNumber":32,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, Integer questionNumber,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" String description, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Integer numOfEntitiesToGiveFeedbackTo, List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo, List\u003cFeedbackParticipantType\u003e showRecipientNameTo,"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" FeedbackQuestionDetails feedbackQuestionDetails) {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" super(feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" setFeedBackQuestionDetails((FeedbackRankOptionsQuestionDetails) feedbackQuestionDetails);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public FeedbackQuestionDetails getQuestionDetailsCopy() {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return questionDetails.getDeepCopy();"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public FeedbackRankOptionsQuestion makeDeepCopy(FeedbackSession newFeedbackSession) {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" return new FeedbackRankOptionsQuestion("},{"lineNumber":50,"author":{"gitId":"-"},"content":" newFeedbackSession, this.getQuestionNumber(), this.getDescription(), this.getGiverType(),"},{"lineNumber":51,"author":{"gitId":"-"},"content":" this.getRecipientType(), this.getNumOfEntitiesToGiveFeedbackTo(),"},{"lineNumber":52,"author":{"gitId":"-"},"content":" new ArrayList\u003c\u003e(this.getShowResponsesTo()), new ArrayList\u003c\u003e(this.getShowGiverNameTo()),"},{"lineNumber":53,"author":{"gitId":"-"},"content":" new ArrayList\u003c\u003e(this.getShowRecipientNameTo()),"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" this.questionDetails.getDeepCopy());"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void setQuestionDetails(FeedbackQuestionDetails questionDetails) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" this.questionDetails \u003d (FeedbackRankOptionsQuestionDetails) questionDetails;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return \"FeedbackRankOptionsQuestion [id\u003d\" + super.getId()"},{"lineNumber":65,"author":{"gitId":"-"},"content":" + \", createdAt\u003d\" + super.getCreatedAt() + \", updatedAt\u003d\" + super.getUpdatedAt() + \"]\";"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" public void setFeedBackQuestionDetails(FeedbackRankOptionsQuestionDetails questionDetails) {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" this.questionDetails \u003d questionDetails;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" public FeedbackRankOptionsQuestionDetails getFeedbackQuestionDetails() {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" return questionDetails;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * Converter for FeedbackRankOptionsQuestion specific attributes."},{"lineNumber":78,"author":{"gitId":"-"},"content":" */"},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Converter"},{"lineNumber":80,"author":{"gitId":"-"},"content":" public static class FeedbackRankOptionsQuestionDetailsConverter"},{"lineNumber":81,"author":{"gitId":"-"},"content":" extends FeedbackQuestionDetailsConverter {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"mingyuanc":2,"-":81}},{"path":"src/main/java/teammates/storage/sqlentity/responses/FeedbackMissingResponse.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.storage.sqlentity.responses;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.questions.FeedbackTextResponseDetails;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" * Represents a missing response."},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"public class FeedbackMissingResponse extends FeedbackTextResponse {"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" private String giverSectionName;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" private String recipientSectionName;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" protected FeedbackMissingResponse() {"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" // required by Hibernate"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" public FeedbackMissingResponse("},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion feedbackQuestion, String giver,"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" String giverSectionName, String recipient, String recipientSectionName"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" ) {"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" super(feedbackQuestion, giver, null, recipient, null, new FeedbackTextResponseDetails(Const.MISSING_RESPONSE_TEXT));"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" this.giverSectionName \u003d giverSectionName;"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" this.recipientSectionName \u003d recipientSectionName;"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" public String getGiverSectionName() {"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" return giverSectionName;"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" public String getRecipientSectionName() {"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" return recipientSectionName;"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":37}},{"path":"src/main/java/teammates/storage/sqlsearch/SearchManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlsearch;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.net.SocketTimeoutException;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.apache.commons.lang.StringUtils;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.apache.solr.client.solrj.SolrQuery;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.apache.solr.client.solrj.SolrServerException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.apache.solr.client.solrj.impl.HttpSolrClient;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.apache.solr.client.solrj.response.QueryResponse;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import org.apache.solr.common.SolrDocument;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import org.apache.solr.common.SolrInputDocument;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.util.Config;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.BaseEntity;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Acts as a proxy to search service."},{"lineNumber":28,"author":{"gitId":"-"},"content":" *"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * @param \u003cT\u003e Type of entity to be returned"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */"},{"lineNumber":31,"author":{"gitId":"-"},"content":"abstract class SearchManager\u003cT extends BaseEntity\u003e {"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final String ERROR_DELETE_DOCUMENT \u003d \"Failed to delete document(s) %s in Solr. Root cause: %s \";"},{"lineNumber":36,"author":{"gitId":"-"},"content":" private static final String ERROR_SEARCH_DOCUMENT \u003d \"Failed to search for document(s) %s from Solr. Root cause: %s \";"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final String ERROR_SEARCH_NOT_IMPLEMENTED \u003d \"Search service is not implemented\";"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private static final String ERROR_PUT_DOCUMENT \u003d \"Failed to put document %s into Solr. Root cause: %s \";"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final String ERROR_RESET_COLLECTION \u003d \"Failed to reset collections. Root cause: %s \";"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" private static final int START_INDEX \u003d 0;"},{"lineNumber":42,"author":{"gitId":"-"},"content":" private static final int NUM_OF_RESULTS \u003d Const.SEARCH_QUERY_SIZE_LIMIT;"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" private final HttpSolrClient client;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private final boolean isResetAllowed;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" SearchManager(String searchServiceHost, boolean isResetAllowed) {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.isResetAllowed \u003d Config.IS_DEV_SERVER \u0026\u0026 isResetAllowed;"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(searchServiceHost)) {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" this.client \u003d null;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" this.client \u003d new HttpSolrClient.Builder(searchServiceHost)"},{"lineNumber":54,"author":{"gitId":"-"},"content":" .withConnectionTimeout(2000) // timeout for connecting to Solr server"},{"lineNumber":55,"author":{"gitId":"-"},"content":" .withSocketTimeout(5000) // timeout for reading data"},{"lineNumber":56,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" SolrQuery getBasicQuery(String queryString) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" SolrQuery query \u003d new SolrQuery();"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" String cleanQueryString \u003d cleanSpecialChars(queryString);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" query.setQuery(cleanQueryString);"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" query.setStart(START_INDEX);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" query.setRows(NUM_OF_RESULTS);"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" return query;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" QueryResponse performQuery(SolrQuery query) throws SearchServiceException {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" if (client \u003d\u003d null) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" throw new SearchServiceException(\"Full-text search is not available.\", HttpStatus.SC_NOT_IMPLEMENTED);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return client.query(getCollectionName(), query);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" } catch (SolrServerException e) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" Throwable rootCause \u003d e.getRootCause();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_SEARCH_DOCUMENT, query.getQuery(), rootCause), e);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (rootCause instanceof SocketTimeoutException) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new SearchServiceException(\"A timeout was reached while processing your request. \""},{"lineNumber":84,"author":{"gitId":"-"},"content":" + \"Please try again later.\", e, HttpStatus.SC_GATEWAY_TIMEOUT);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" throw new SearchServiceException(\"An error has occurred while performing search. \""},{"lineNumber":87,"author":{"gitId":"-"},"content":" + \"Please try again later.\", e, HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_SEARCH_DOCUMENT, query.getQuery(), e.getCause()), e);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" throw new SearchServiceException(\"An error has occurred while performing search. \""},{"lineNumber":92,"author":{"gitId":"-"},"content":" + \"Please try again later.\", e, HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" abstract String getCollectionName();"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" abstract SearchDocument\u003cT\u003e createDocument(T entity);"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * Creates or updates search document for the given entity."},{"lineNumber":102,"author":{"gitId":"-"},"content":" */"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public void putDocument(T entity) throws SearchServiceException {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (client \u003d\u003d null) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" log.warning(ERROR_SEARCH_NOT_IMPLEMENTED);"},{"lineNumber":106,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" if (entity \u003d\u003d null) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" Map\u003cString, Object\u003e searchableFields \u003d createDocument(entity).getSearchableFields();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" SolrInputDocument document \u003d new SolrInputDocument();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" searchableFields.forEach((key, value) -\u003e document.addField(key, value));"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" client.add(getCollectionName(), Collections.singleton(document));"},{"lineNumber":119,"author":{"gitId":"-"},"content":" client.commit(getCollectionName());"},{"lineNumber":120,"author":{"gitId":"-"},"content":" } catch (SolrServerException e) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_PUT_DOCUMENT, document, e.getRootCause()), e);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" throw new SearchServiceException(e, HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_PUT_DOCUMENT, document, e.getCause()), e);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" throw new SearchServiceException(e, HttpStatus.SC_BAD_GATEWAY);"},{"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":" * Removes search documents based on the given keys."},{"lineNumber":131,"author":{"gitId":"-"},"content":" */"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public void deleteDocuments(List\u003cString\u003e keys) {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" if (client \u003d\u003d null) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" log.warning(ERROR_SEARCH_NOT_IMPLEMENTED);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (keys.isEmpty()) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" client.deleteById(getCollectionName(), keys);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" client.commit(getCollectionName());"},{"lineNumber":145,"author":{"gitId":"-"},"content":" } catch (SolrServerException e) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_DELETE_DOCUMENT, keys, e.getRootCause()), e);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_DELETE_DOCUMENT, keys, e.getCause()), e);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * Resets the data for all collections if, and only if called during component"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * tests."},{"lineNumber":155,"author":{"gitId":"-"},"content":" */"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void resetCollections() {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" if (client \u003d\u003d null || !isResetAllowed) {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" client.deleteByQuery(getCollectionName(), \"*:*\");"},{"lineNumber":163,"author":{"gitId":"-"},"content":" client.commit(getCollectionName());"},{"lineNumber":164,"author":{"gitId":"-"},"content":" } catch (SolrServerException e) {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_RESET_COLLECTION, e.getRootCause()), e);"},{"lineNumber":166,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_RESET_COLLECTION, e.getCause()), e);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" private String cleanSpecialChars(String queryString) {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" String htmlTagStripPattern \u003d \"\u003c[^\u003e]*\u003e\";"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":" // Solr special characters: + - \u0026\u0026 || ! ( ) { } [ ] ^ \" ~ * ? : \\ /"},{"lineNumber":175,"author":{"gitId":"-"},"content":" String res \u003d queryString.replaceAll(htmlTagStripPattern, \"\")"},{"lineNumber":176,"author":{"gitId":"-"},"content":" .replace(\"\\\\\", \"\\\\\\\\\")"},{"lineNumber":177,"author":{"gitId":"-"},"content":" .replace(\"+\", \"\\\\+\")"},{"lineNumber":178,"author":{"gitId":"-"},"content":" .replace(\"-\", \"\\\\-\")"},{"lineNumber":179,"author":{"gitId":"-"},"content":" .replace(\"\u0026\u0026\", \"\\\\\u0026\u0026\")"},{"lineNumber":180,"author":{"gitId":"-"},"content":" .replace(\"||\", \"\\\\||\")"},{"lineNumber":181,"author":{"gitId":"-"},"content":" .replace(\"!\", \"\\\\!\")"},{"lineNumber":182,"author":{"gitId":"-"},"content":" .replace(\"(\", \"\\\\(\")"},{"lineNumber":183,"author":{"gitId":"-"},"content":" .replace(\")\", \"\\\\)\")"},{"lineNumber":184,"author":{"gitId":"-"},"content":" .replace(\"{\", \"\\\\{\")"},{"lineNumber":185,"author":{"gitId":"-"},"content":" .replace(\"}\", \"\\\\}\")"},{"lineNumber":186,"author":{"gitId":"-"},"content":" .replace(\"[\", \"\\\\[\")"},{"lineNumber":187,"author":{"gitId":"-"},"content":" .replace(\"]\", \"\\\\]\")"},{"lineNumber":188,"author":{"gitId":"-"},"content":" .replace(\"^\", \"\\\\^\")"},{"lineNumber":189,"author":{"gitId":"-"},"content":" .replace(\"~\", \"\\\\~\")"},{"lineNumber":190,"author":{"gitId":"-"},"content":" .replace(\"?\", \"\\\\?\")"},{"lineNumber":191,"author":{"gitId":"-"},"content":" .replace(\":\", \"\\\\:\")"},{"lineNumber":192,"author":{"gitId":"-"},"content":" .replace(\"/\", \"\\\\/\");"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" // imbalanced double quotes are invalid"},{"lineNumber":195,"author":{"gitId":"-"},"content":" int count \u003d StringUtils.countMatches(res, \"\\\"\");"},{"lineNumber":196,"author":{"gitId":"-"},"content":" if (count % 2 \u003d\u003d 1) {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" res \u003d res.replace(\"\\\"\", \"\");"},{"lineNumber":198,"author":{"gitId":"-"},"content":" }"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" // use exact match only when there\u0027s email-like input"},{"lineNumber":201,"author":{"gitId":"-"},"content":" if (res.contains(\"@\") \u0026\u0026 count \u003d\u003d 0) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" return \"\\\"\" + res + \"\\\"\";"},{"lineNumber":203,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" return res;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" abstract T getEntityFromDocument(SolrDocument document);"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":" abstract void sortResult(List\u003cT\u003e result);"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" List\u003cT\u003e convertDocumentToEntities(List\u003cSolrDocument\u003e documents) {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" if (documents \u003d\u003d null) {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" List\u003cT\u003e result \u003d new ArrayList\u003c\u003e();"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" for (SolrDocument document : documents) {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" T entity \u003d getEntityFromDocument(document);"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" // Entity will be null if document corresponds to entity in datastore"},{"lineNumber":223,"author":{"gitId":"-"},"content":" if (entity \u003d\u003d null) {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" // search engine out of sync as SearchManager may fail to delete documents"},{"lineNumber":225,"author":{"gitId":"-"},"content":" // the chance is low and it is generally not a big problem"},{"lineNumber":226,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":227,"author":{"gitId":"domoberzin"},"content":" // these lines below are commented out as they interfere with the dual db search,"},{"lineNumber":228,"author":{"gitId":"domoberzin"},"content":" // and cause unwanted deletions, please refer to the following PR for more details"},{"lineNumber":229,"author":{"gitId":"domoberzin"},"content":" // [PR](https://github.com/TEAMMATES/teammates/pull/12838)"},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":" // String id \u003d (String) document.getFirstValue(\"id\");"},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":" // deleteDocuments(Collections.singletonList(id));"},{"lineNumber":233,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":235,"author":{"gitId":"-"},"content":" result.add(entity);"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":" sortResult(result);"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" return result;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":7,"-":235}},{"path":"src/main/java/teammates/ui/output/NotificationData.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.output;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import org.threeten.bp.Instant;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * The API output format of a notification."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class NotificationData extends ApiOutput {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" private String notificationId;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" private long startTimestamp;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" private long endTimestamp;"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private long createdAt;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private NotificationStyle style;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private NotificationTargetUser targetUser;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private String title;"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private String message;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private boolean shown;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" public NotificationData(NotificationAttributes notificationAttributes) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" this.notificationId \u003d notificationAttributes.getNotificationId();"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.startTimestamp \u003d notificationAttributes.getStartTime().toEpochMilli();"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.endTimestamp \u003d notificationAttributes.getEndTime().toEpochMilli();"},{"lineNumber":29,"author":{"gitId":"-"},"content":" this.createdAt \u003d notificationAttributes.getCreatedAt().toEpochMilli();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" this.style \u003d notificationAttributes.getStyle();"},{"lineNumber":31,"author":{"gitId":"-"},"content":" this.targetUser \u003d notificationAttributes.getTargetUser();"},{"lineNumber":32,"author":{"gitId":"-"},"content":" this.title \u003d notificationAttributes.getTitle();"},{"lineNumber":33,"author":{"gitId":"-"},"content":" this.message \u003d notificationAttributes.getMessage();"},{"lineNumber":34,"author":{"gitId":"-"},"content":" this.shown \u003d notificationAttributes.isShown();"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" public NotificationData(Notification notification) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.notificationId \u003d notification.getId().toString();"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.startTimestamp \u003d notification.getStartTime().toEpochMilli();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" this.endTimestamp \u003d notification.getEndTime().toEpochMilli();"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" this.createdAt \u003d notification.getCreatedAt() \u003d\u003d null"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" ? Instant.now().toEpochMilli() : notification.getCreatedAt().toEpochMilli();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.style \u003d notification.getStyle();"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.targetUser \u003d notification.getTargetUser();"},{"lineNumber":45,"author":{"gitId":"-"},"content":" this.title \u003d notification.getTitle();"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.message \u003d notification.getMessage();"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.shown \u003d notification.isShown();"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" public String getNotificationId() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return this.notificationId;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" public long getStartTimestamp() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return this.startTimestamp;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" public long getEndTimestamp() {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return this.endTimestamp;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" public long getCreatedAt() {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return this.createdAt;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" public NotificationStyle getStyle() {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return this.style;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" public NotificationTargetUser getTargetUser() {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" return this.targetUser;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" public String getTitle() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return this.title;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" public String getMessage() {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return this.message;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" public boolean isShown() {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return this.shown;"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":4,"-":81}},{"path":"src/main/java/teammates/ui/output/SessionResultsData.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.output;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.LinkedList;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Queue;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import javax.annotation.Nullable;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.CourseRoster;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SessionResultsBundle;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * API output format for session results, including statistics."},{"lineNumber":37,"author":{"gitId":"-"},"content":" */"},{"lineNumber":38,"author":{"gitId":"-"},"content":"public class SessionResultsData extends ApiOutput {"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" private static final String REGEX_ANONYMOUS_PARTICIPANT_HASH \u003d \"[0-9]{1,10}\";"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" final List\u003cQuestionOutput\u003e questions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" SessionResultsData() {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // use factory method instead"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Factory method to construct API output for instructor."},{"lineNumber":50,"author":{"gitId":"-"},"content":" */"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static SessionResultsData initForInstructor(SessionResultsBundle bundle) {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" SessionResultsData sessionResultsData \u003d new SessionResultsData();"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cFeedbackResponseAttributes\u003e\u003e questionsWithResponses \u003d"},{"lineNumber":55,"author":{"gitId":"-"},"content":" bundle.getQuestionResponseMap();"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" questionsWithResponses.forEach((questionId, responses) -\u003e {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(questionId);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":60,"author":{"gitId":"-"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" questionDetails.getQuestionResultStatisticsJson(question, null, bundle), false, false);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" // put normal responses"},{"lineNumber":63,"author":{"gitId":"-"},"content":" List\u003cResponseOutput\u003e allResponses \u003d buildResponsesForInstructor(responses, bundle, false);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" qnOutput.allResponses.addAll(allResponses);"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" // put missing responses"},{"lineNumber":67,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseAttributes\u003e missingResponses \u003d bundle.getQuestionMissingResponseMap().get(questionId);"},{"lineNumber":68,"author":{"gitId":"-"},"content":" qnOutput.allResponses.addAll(buildResponsesForInstructor(missingResponses, bundle, true));"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" });"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" return sessionResultsData;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" * Factory method to construct API output for instructor."},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" public static SessionResultsData initForInstructor(SqlSessionResultsBundle bundle) {"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" SessionResultsData sessionResultsData \u003d new SessionResultsData();"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionsWithResponses \u003d"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" bundle.getQuestionResponseMap();"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" questionsWithResponses.forEach((question, responses) -\u003e {"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question,"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" questionDetails.getQuestionResultStatisticsJson(question, null, bundle), false, false);"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" // put normal responses"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" List\u003cResponseOutput\u003e allResponses \u003d buildResponsesForInstructor(responses, bundle, false);"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" qnOutput.allResponses.addAll(allResponses);"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" // put missing responses"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses \u003d bundle.getQuestionMissingResponseMap().get(question);"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" qnOutput.allResponses.addAll(buildResponsesForInstructor(missingResponses, bundle, true));"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" return sessionResultsData;"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":104,"author":{"gitId":"-"},"content":" * Factory method to construct API output for student."},{"lineNumber":105,"author":{"gitId":"-"},"content":" */"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public static SessionResultsData initForStudent(SessionResultsBundle bundle, StudentAttributes student) {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" SessionResultsData sessionResultsData \u003d new SessionResultsData();"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cFeedbackResponseAttributes\u003e\u003e questionsWithResponses \u003d"},{"lineNumber":110,"author":{"gitId":"-"},"content":" bundle.getQuestionResponseMap();"},{"lineNumber":111,"author":{"gitId":"-"},"content":" questionsWithResponses.forEach((questionId, responses) -\u003e {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(questionId);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" // check if question has comments (on any responses) not visible for preview"},{"lineNumber":115,"author":{"gitId":"-"},"content":" boolean hasCommentNotVisibleForPreview \u003d bundle.getQuestionsWithCommentNotVisibleForPreview()"},{"lineNumber":116,"author":{"gitId":"-"},"content":" .contains(questionId);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question,"},{"lineNumber":118,"author":{"gitId":"-"},"content":" questionDetails.getQuestionResultStatisticsJson(question, student.getEmail(), bundle),"},{"lineNumber":119,"author":{"gitId":"-"},"content":" false, hasCommentNotVisibleForPreview);"},{"lineNumber":120,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cResponseOutput\u003e\u003e otherResponsesMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" qnOutput.getFeedbackQuestion().hideInformationForStudent();"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" if (questionDetails.isIndividualResponsesShownToStudents()) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" for (FeedbackResponseAttributes response : responses) {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" boolean isUserInstructor \u003d Const.USER_TEAM_FOR_INSTRUCTOR.equals(student.getTeam());"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" boolean isUserGiver \u003d student.getEmail().equals(response.getGiver())"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":130,"author":{"gitId":"-"},"content":" || !isUserInstructor \u0026\u0026 question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" boolean isUserRecipient \u003d student.getEmail().equals(response.getRecipient())"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":133,"author":{"gitId":"-"},"content":" || !isUserInstructor \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ResponseOutput responseOutput \u003d buildSingleResponseForStudent(response, bundle, student);"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" if (isUserRecipient) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" qnOutput.responsesToSelf.add(responseOutput);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (isUserGiver) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" qnOutput.responsesFromSelf.add(responseOutput);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" if (!isUserRecipient \u0026\u0026 !isUserGiver) {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" // we don\u0027t need care about the keys of the map here"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // as only the values of the map will be used"},{"lineNumber":147,"author":{"gitId":"-"},"content":" otherResponsesMap.computeIfAbsent(response.getRecipient(), k -\u003e new ArrayList\u003c\u003e())"},{"lineNumber":148,"author":{"gitId":"-"},"content":" .add(responseOutput);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" qnOutput.allResponses.add(responseOutput);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":" qnOutput.otherResponses.addAll(otherResponsesMap.values());"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" });"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" Map\u003cString, FeedbackQuestionAttributes\u003e questionsWithResponsesNotVisibleForPreview \u003d"},{"lineNumber":160,"author":{"gitId":"-"},"content":" bundle.getQuestionsNotVisibleForPreviewMap();"},{"lineNumber":161,"author":{"gitId":"-"},"content":" questionsWithResponsesNotVisibleForPreview.forEach((questionId, question) -\u003e {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question, \"\", true, false);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" });"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" return sessionResultsData;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" * Factory method to construct API output for student."},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" public static SessionResultsData initForStudent(SqlSessionResultsBundle bundle, Student student) {"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":" SessionResultsData sessionResultsData \u003d new SessionResultsData();"},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionsWithResponses \u003d"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" bundle.getQuestionResponseMap();"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" questionsWithResponses.forEach((question, responses) -\u003e {"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":" // check if question has comments (on any responses) not visible for preview"},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" boolean hasCommentNotVisibleForPreview \u003d bundle.getQuestionsWithCommentNotVisibleForPreviewSet()"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" .contains(question);"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question,"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" questionDetails.getQuestionResultStatisticsJson(question, student.getEmail(), bundle),"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" false, hasCommentNotVisibleForPreview);"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" Map\u003cString, List\u003cResponseOutput\u003e\u003e otherResponsesMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" qnOutput.getFeedbackQuestion().hideInformationForStudent();"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" if (questionDetails.isIndividualResponsesShownToStudents()) {"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" boolean isUserInstructor \u003d Const.USER_TEAM_FOR_INSTRUCTOR.equals(student.getTeamName());"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" boolean isUserGiver \u003d student.getEmail().equals(response.getGiver())"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" || !isUserInstructor \u0026\u0026 question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" boolean isUserRecipient \u003d student.getEmail().equals(response.getRecipient())"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" || !isUserInstructor \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" ResponseOutput responseOutput \u003d buildSingleResponseForStudent(response, bundle, student);"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" if (isUserRecipient) {"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" qnOutput.responsesToSelf.add(responseOutput);"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":" if (isUserGiver) {"},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" qnOutput.responsesFromSelf.add(responseOutput);"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" if (!isUserRecipient \u0026\u0026 !isUserGiver) {"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" // we don\u0027t need care about the keys of the map here"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" // as only the values of the map will be used"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" otherResponsesMap.computeIfAbsent(response.getRecipient(), k -\u003e new ArrayList\u003c\u003e())"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" .add(responseOutput);"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" qnOutput.allResponses.add(responseOutput);"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" qnOutput.otherResponses.addAll(otherResponsesMap.values());"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e questionsWithResponsesNotVisibleForPreview \u003d"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" bundle.getQuestionsNotVisibleForPreviewSet();"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" questionsWithResponsesNotVisibleForPreview.forEach(question -\u003e {"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question, \"\", true, false);"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":" return sessionResultsData;"},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":235,"author":{"gitId":"-"},"content":" private static ResponseOutput buildSingleResponseForStudent("},{"lineNumber":236,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes response, SessionResultsBundle bundle, StudentAttributes student) {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(response.getFeedbackQuestionId());"},{"lineNumber":238,"author":{"gitId":"-"},"content":" boolean isUserInstructor \u003d Const.USER_TEAM_FOR_INSTRUCTOR.equals(student.getTeam());"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" // process giver"},{"lineNumber":241,"author":{"gitId":"-"},"content":" boolean isUserGiver \u003d student.getEmail().equals(response.getGiver())"},{"lineNumber":242,"author":{"gitId":"-"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":243,"author":{"gitId":"-"},"content":" || !isUserInstructor \u0026\u0026 question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":244,"author":{"gitId":"-"},"content":" boolean isUserTeamGiver \u003d question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":245,"author":{"gitId":"-"},"content":" \u0026\u0026 student.getTeam().equals(response.getGiver());"},{"lineNumber":246,"author":{"gitId":"-"},"content":" String giverName;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" String giverTeam \u003d \"\";"},{"lineNumber":248,"author":{"gitId":"-"},"content":" if (isUserTeamGiver) {"},{"lineNumber":249,"author":{"gitId":"-"},"content":" giverName \u003d String.format(\"Your Team (%s)\", response.getGiver());"},{"lineNumber":250,"author":{"gitId":"-"},"content":" giverTeam \u003d response.getGiver();"},{"lineNumber":251,"author":{"gitId":"-"},"content":" } else if (isUserGiver) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" giverName \u003d \"You\";"},{"lineNumber":253,"author":{"gitId":"-"},"content":" giverTeam \u003d student.getTeam();"},{"lineNumber":254,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" // we don\u0027t want student to figure out who is who by using the hash"},{"lineNumber":256,"author":{"gitId":"-"},"content":" giverName \u003d removeAnonymousHash(getGiverNameOfResponse(response, bundle));"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" // process recipient"},{"lineNumber":260,"author":{"gitId":"-"},"content":" boolean isUserRecipient \u003d student.getEmail().equals(response.getRecipient())"},{"lineNumber":261,"author":{"gitId":"-"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":262,"author":{"gitId":"-"},"content":" || !isUserInstructor \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":263,"author":{"gitId":"-"},"content":" boolean isUserTeamRecipient \u003d (question.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":264,"author":{"gitId":"-"},"content":" || question.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION)"},{"lineNumber":265,"author":{"gitId":"-"},"content":" \u0026\u0026 student.getTeam().equals(response.getRecipient());"},{"lineNumber":266,"author":{"gitId":"-"},"content":" String recipientName;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" String recipientTeam \u003d \"\";"},{"lineNumber":268,"author":{"gitId":"-"},"content":" if (isUserRecipient) {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" recipientName \u003d \"You\";"},{"lineNumber":270,"author":{"gitId":"-"},"content":" recipientTeam \u003d student.getTeam();"},{"lineNumber":271,"author":{"gitId":"-"},"content":" } else if (isUserTeamRecipient) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" recipientName \u003d String.format(\"Your Team (%s)\", response.getRecipient());"},{"lineNumber":273,"author":{"gitId":"-"},"content":" recipientTeam \u003d response.getRecipient();"},{"lineNumber":274,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":275,"author":{"gitId":"-"},"content":" // we don\u0027t want student to figure out who is who by using the hash"},{"lineNumber":276,"author":{"gitId":"-"},"content":" recipientName \u003d removeAnonymousHash(getRecipientNameOfResponse(response, bundle));"},{"lineNumber":277,"author":{"gitId":"-"},"content":" if (!recipientName.contains(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT)) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" recipientTeam \u003d bundle.getRoster().getInfoForIdentifier(response.getRecipient()).getTeamName();"},{"lineNumber":279,"author":{"gitId":"-"},"content":" }"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" // process comments"},{"lineNumber":283,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseCommentAttributes\u003e feedbackResponseComments \u003d"},{"lineNumber":284,"author":{"gitId":"-"},"content":" bundle.getResponseCommentsMap().getOrDefault(response.getId(), Collections.emptyList());"},{"lineNumber":285,"author":{"gitId":"-"},"content":" Queue\u003cCommentOutput\u003e comments \u003d buildComments(feedbackResponseComments, bundle);"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":" return ResponseOutput.builder()"},{"lineNumber":288,"author":{"gitId":"-"},"content":" .withResponseId(response.getId())"},{"lineNumber":289,"author":{"gitId":"-"},"content":" .withGiver(giverName)"},{"lineNumber":290,"author":{"gitId":"-"},"content":" .withGiverTeam(giverTeam)"},{"lineNumber":291,"author":{"gitId":"-"},"content":" .withGiverEmail(null)"},{"lineNumber":292,"author":{"gitId":"-"},"content":" .withRelatedGiverEmail(null)"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" .withGiverSectionName(response.getGiverSection())"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" .withRecipient(recipientName)"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" .withRecipientTeam(recipientTeam)"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" .withRecipientEmail(null)"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" .withRecipientSectionName(response.getRecipientSection())"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" .withResponseDetails(response.getResponseDetailsCopy())"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" .withParticipantComment(comments.poll())"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" .withInstructorComments(new ArrayList\u003c\u003e(comments))"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" .build();"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" private static ResponseOutput buildSingleResponseForStudent("},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response, SqlSessionResultsBundle bundle, Student student) {"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" boolean isUserInstructor \u003d Const.USER_TEAM_FOR_INSTRUCTOR.equals(student.getTeamName());"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" // process giver"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" boolean isUserGiver \u003d student.getEmail().equals(response.getGiver())"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" || !isUserInstructor \u0026\u0026 question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" boolean isUserTeamGiver \u003d question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 student.getTeamName().equals(response.getGiver());"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" String giverName;"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" String giverTeam \u003d \"\";"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" if (isUserTeamGiver) {"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" giverName \u003d String.format(\"Your Team (%s)\", response.getGiver());"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" giverTeam \u003d response.getGiver();"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" } else if (isUserGiver) {"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" giverName \u003d \"You\";"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":" giverTeam \u003d student.getTeamName();"},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" // we don\u0027t want student to figure out who is who by using the hash"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" giverName \u003d removeAnonymousHash(getGiverNameOfResponse(response, bundle));"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" // process recipient"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" boolean isUserRecipient \u003d student.getEmail().equals(response.getRecipient())"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" || !isUserInstructor \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" boolean isUserTeamRecipient \u003d (question.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":" || question.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION)"},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 student.getTeamName().equals(response.getRecipient());"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" String recipientName;"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" String recipientTeam \u003d \"\";"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" if (isUserRecipient) {"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" recipientName \u003d \"You\";"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":" recipientTeam \u003d student.getTeamName();"},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" } else if (isUserTeamRecipient) {"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" recipientName \u003d String.format(\"Your Team (%s)\", response.getRecipient());"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" recipientTeam \u003d response.getRecipient();"},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":" // we don\u0027t want student to figure out who is who by using the hash"},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" recipientName \u003d removeAnonymousHash(getRecipientNameOfResponse(response, bundle));"},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" if (!recipientName.contains(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT)) {"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":" recipientTeam \u003d bundle.getRoster().getInfoForIdentifier(response.getRecipient()).getTeamName();"},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":" // process comments"},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e feedbackResponseComments \u003d"},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" bundle.getResponseCommentsMap().getOrDefault(response, Collections.emptyList());"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" Queue\u003cCommentOutput\u003e comments \u003d buildComments(feedbackResponseComments, bundle);"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" return ResponseOutput.builder()"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" .withResponse(response)"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":" .withGiver(giverName)"},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" .withGiverTeam(giverTeam)"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":" .withGiverEmail(null)"},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":" .withRelatedGiverEmail(null)"},{"lineNumber":362,"author":{"gitId":"-"},"content":" .withGiverSection(response.getGiverSection())"},{"lineNumber":363,"author":{"gitId":"-"},"content":" .withRecipient(recipientName)"},{"lineNumber":364,"author":{"gitId":"-"},"content":" .withRecipientTeam(recipientTeam)"},{"lineNumber":365,"author":{"gitId":"-"},"content":" .withRecipientEmail(null)"},{"lineNumber":366,"author":{"gitId":"-"},"content":" .withRecipientSection(response.getRecipientSection())"},{"lineNumber":367,"author":{"gitId":"xenosf"},"content":" .withResponseDetails(response.getFeedbackResponseDetailsCopy())"},{"lineNumber":368,"author":{"gitId":"-"},"content":" .withParticipantComment(comments.poll())"},{"lineNumber":369,"author":{"gitId":"-"},"content":" .withInstructorComments(new ArrayList\u003c\u003e(comments))"},{"lineNumber":370,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":371,"author":{"gitId":"-"},"content":" }"},{"lineNumber":372,"author":{"gitId":"-"},"content":""},{"lineNumber":373,"author":{"gitId":"-"},"content":" private static String removeAnonymousHash(String identifier) {"},{"lineNumber":374,"author":{"gitId":"-"},"content":" return identifier.replaceAll(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT + \" (student|instructor|team) \""},{"lineNumber":375,"author":{"gitId":"-"},"content":" + REGEX_ANONYMOUS_PARTICIPANT_HASH, Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT + \" $1\");"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"-"},"content":" private static List\u003cResponseOutput\u003e buildResponsesForInstructor("},{"lineNumber":379,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseAttributes\u003e responses, SessionResultsBundle bundle, boolean areMissingResponses) {"},{"lineNumber":380,"author":{"gitId":"-"},"content":" List\u003cResponseOutput\u003e output \u003d new ArrayList\u003c\u003e();"},{"lineNumber":381,"author":{"gitId":"-"},"content":""},{"lineNumber":382,"author":{"gitId":"-"},"content":" for (FeedbackResponseAttributes response : responses) {"},{"lineNumber":383,"author":{"gitId":"-"},"content":" output.add(buildSingleResponseForInstructor(response, bundle, areMissingResponses));"},{"lineNumber":384,"author":{"gitId":"-"},"content":" }"},{"lineNumber":385,"author":{"gitId":"-"},"content":""},{"lineNumber":386,"author":{"gitId":"-"},"content":" return output;"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"xenosf"},"content":" private static List\u003cResponseOutput\u003e buildResponsesForInstructor("},{"lineNumber":390,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responses, SqlSessionResultsBundle bundle, boolean areMissingResponses) {"},{"lineNumber":391,"author":{"gitId":"xenosf"},"content":" List\u003cResponseOutput\u003e output \u003d new ArrayList\u003c\u003e();"},{"lineNumber":392,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":393,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":394,"author":{"gitId":"xenosf"},"content":" output.add(buildSingleResponseForInstructor(response, bundle, areMissingResponses));"},{"lineNumber":395,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":396,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":397,"author":{"gitId":"xenosf"},"content":" return output;"},{"lineNumber":398,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":399,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" private static ResponseOutput buildSingleResponseForInstructor("},{"lineNumber":401,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes response, SessionResultsBundle bundle, boolean isMissingResponse) {"},{"lineNumber":402,"author":{"gitId":"-"},"content":" // process giver"},{"lineNumber":403,"author":{"gitId":"-"},"content":" String giverEmail \u003d null;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" String relatedGiverEmail \u003d null;"},{"lineNumber":405,"author":{"gitId":"-"},"content":" if (bundle.isResponseGiverVisible(response)) {"},{"lineNumber":406,"author":{"gitId":"-"},"content":" giverEmail \u003d response.getGiver();"},{"lineNumber":407,"author":{"gitId":"-"},"content":" relatedGiverEmail \u003d response.getGiver();"},{"lineNumber":408,"author":{"gitId":"-"},"content":""},{"lineNumber":409,"author":{"gitId":"-"},"content":" if (bundle.getRoster().isTeamInCourse(giverEmail)) {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" // remove recipient email as it is a team name"},{"lineNumber":411,"author":{"gitId":"-"},"content":" relatedGiverEmail \u003d"},{"lineNumber":412,"author":{"gitId":"-"},"content":" bundle.getRoster().getTeamToMembersTable().get(giverEmail).iterator().next().getEmail();"},{"lineNumber":413,"author":{"gitId":"-"},"content":" giverEmail \u003d null;"},{"lineNumber":414,"author":{"gitId":"-"},"content":" }"},{"lineNumber":415,"author":{"gitId":"-"},"content":" }"},{"lineNumber":416,"author":{"gitId":"-"},"content":" String giverName \u003d getGiverNameOfResponse(response, bundle);"},{"lineNumber":417,"author":{"gitId":"-"},"content":" String giverTeam \u003d bundle.getRoster().getInfoForIdentifier(response.getGiver()).getTeamName();"},{"lineNumber":418,"author":{"gitId":"-"},"content":" String giverSection \u003d response.getGiverSection();"},{"lineNumber":419,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(response.getFeedbackQuestionId());"},{"lineNumber":420,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":421,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d bundle.getRoster().getInstructorForEmail(response.getGiver());"},{"lineNumber":422,"author":{"gitId":"-"},"content":" giverName \u003d instructor.getName();"},{"lineNumber":423,"author":{"gitId":"-"},"content":" giverTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":424,"author":{"gitId":"-"},"content":" giverSection \u003d Const.DEFAULT_SECTION;"},{"lineNumber":425,"author":{"gitId":"-"},"content":" }"},{"lineNumber":426,"author":{"gitId":"-"},"content":""},{"lineNumber":427,"author":{"gitId":"-"},"content":" // process recipient"},{"lineNumber":428,"author":{"gitId":"-"},"content":" String recipientEmail \u003d null;"},{"lineNumber":429,"author":{"gitId":"-"},"content":" String recipientName \u003d getRecipientNameOfResponse(response, bundle);"},{"lineNumber":430,"author":{"gitId":"-"},"content":" String recipientTeam \u003d"},{"lineNumber":431,"author":{"gitId":"-"},"content":" bundle.getRoster().getInfoForIdentifier(response.getRecipient()).getTeamName();"},{"lineNumber":432,"author":{"gitId":"-"},"content":" String recipientSection \u003d response.getRecipientSection();"},{"lineNumber":433,"author":{"gitId":"-"},"content":" if (question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":434,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d bundle.getRoster().getInstructorForEmail(response.getRecipient());"},{"lineNumber":435,"author":{"gitId":"-"},"content":" recipientName \u003d instructor.getName();"},{"lineNumber":436,"author":{"gitId":"-"},"content":" recipientTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":437,"author":{"gitId":"-"},"content":" recipientSection \u003d Const.DEFAULT_SECTION;"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":" if (bundle.isResponseRecipientVisible(response)) {"},{"lineNumber":440,"author":{"gitId":"-"},"content":" recipientEmail \u003d response.getRecipient();"},{"lineNumber":441,"author":{"gitId":"-"},"content":""},{"lineNumber":442,"author":{"gitId":"-"},"content":" if (bundle.getRoster().isTeamInCourse(recipientEmail)) {"},{"lineNumber":443,"author":{"gitId":"-"},"content":" // remove recipient email as it is a team name"},{"lineNumber":444,"author":{"gitId":"-"},"content":" recipientEmail \u003d null;"},{"lineNumber":445,"author":{"gitId":"-"},"content":" } else if (Const.GENERAL_QUESTION.equals(recipientEmail)) {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" // general recipient does not have email"},{"lineNumber":447,"author":{"gitId":"-"},"content":" recipientEmail \u003d null;"},{"lineNumber":448,"author":{"gitId":"-"},"content":" }"},{"lineNumber":449,"author":{"gitId":"-"},"content":" }"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":" // process comments"},{"lineNumber":452,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseCommentAttributes\u003e feedbackResponseComments \u003d"},{"lineNumber":453,"author":{"gitId":"-"},"content":" bundle.getResponseCommentsMap().getOrDefault(response.getId(), Collections.emptyList());"},{"lineNumber":454,"author":{"gitId":"-"},"content":" Queue\u003cCommentOutput\u003e comments \u003d buildComments(feedbackResponseComments, bundle);"},{"lineNumber":455,"author":{"gitId":"-"},"content":""},{"lineNumber":456,"author":{"gitId":"-"},"content":" return ResponseOutput.builder()"},{"lineNumber":457,"author":{"gitId":"-"},"content":" .withIsMissingResponse(isMissingResponse)"},{"lineNumber":458,"author":{"gitId":"-"},"content":" .withResponseId(response.getId())"},{"lineNumber":459,"author":{"gitId":"-"},"content":" .withGiver(giverName)"},{"lineNumber":460,"author":{"gitId":"-"},"content":" .withGiverTeam(giverTeam)"},{"lineNumber":461,"author":{"gitId":"-"},"content":" .withGiverEmail(giverEmail)"},{"lineNumber":462,"author":{"gitId":"-"},"content":" .withRelatedGiverEmail(relatedGiverEmail)"},{"lineNumber":463,"author":{"gitId":"xenosf"},"content":" .withGiverSectionName(giverSection)"},{"lineNumber":464,"author":{"gitId":"-"},"content":" .withRecipient(recipientName)"},{"lineNumber":465,"author":{"gitId":"-"},"content":" .withRecipientTeam(recipientTeam)"},{"lineNumber":466,"author":{"gitId":"-"},"content":" .withRecipientEmail(recipientEmail)"},{"lineNumber":467,"author":{"gitId":"xenosf"},"content":" .withRecipientSectionName(recipientSection)"},{"lineNumber":468,"author":{"gitId":"-"},"content":" .withResponseDetails(response.getResponseDetailsCopy())"},{"lineNumber":469,"author":{"gitId":"-"},"content":" .withParticipantComment(comments.poll())"},{"lineNumber":470,"author":{"gitId":"-"},"content":" .withInstructorComments(new ArrayList\u003c\u003e(comments))"},{"lineNumber":471,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":472,"author":{"gitId":"-"},"content":" }"},{"lineNumber":473,"author":{"gitId":"-"},"content":""},{"lineNumber":474,"author":{"gitId":"xenosf"},"content":" private static ResponseOutput buildSingleResponseForInstructor("},{"lineNumber":475,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response, SqlSessionResultsBundle bundle, boolean isMissingResponse) {"},{"lineNumber":476,"author":{"gitId":"xenosf"},"content":" // process giver"},{"lineNumber":477,"author":{"gitId":"xenosf"},"content":" String giverEmail \u003d null;"},{"lineNumber":478,"author":{"gitId":"xenosf"},"content":" String relatedGiverEmail \u003d null;"},{"lineNumber":479,"author":{"gitId":"xenosf"},"content":" if (bundle.isResponseGiverVisible(response)) {"},{"lineNumber":480,"author":{"gitId":"xenosf"},"content":" giverEmail \u003d response.getGiver();"},{"lineNumber":481,"author":{"gitId":"xenosf"},"content":" relatedGiverEmail \u003d response.getGiver();"},{"lineNumber":482,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":483,"author":{"gitId":"xenosf"},"content":" if (bundle.getRoster().isTeamInCourse(giverEmail)) {"},{"lineNumber":484,"author":{"gitId":"xenosf"},"content":" // remove recipient email as it is a team name"},{"lineNumber":485,"author":{"gitId":"xenosf"},"content":" relatedGiverEmail \u003d"},{"lineNumber":486,"author":{"gitId":"xenosf"},"content":" bundle.getRoster().getTeamToMembersTable().get(giverEmail).iterator().next().getEmail();"},{"lineNumber":487,"author":{"gitId":"xenosf"},"content":" giverEmail \u003d null;"},{"lineNumber":488,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":489,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":490,"author":{"gitId":"xenosf"},"content":" String giverName \u003d getGiverNameOfResponse(response, bundle);"},{"lineNumber":491,"author":{"gitId":"xenosf"},"content":" String giverTeam \u003d bundle.getRoster().getInfoForIdentifier(response.getGiver()).getTeamName();"},{"lineNumber":492,"author":{"gitId":"xenosf"},"content":" String giverSectionName \u003d response.getGiverSectionName();"},{"lineNumber":493,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":494,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":495,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d bundle.getRoster().getInstructorForEmail(response.getGiver());"},{"lineNumber":496,"author":{"gitId":"xenosf"},"content":" giverName \u003d instructor.getName();"},{"lineNumber":497,"author":{"gitId":"xenosf"},"content":" giverTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":498,"author":{"gitId":"xenosf"},"content":" giverSectionName \u003d Const.DEFAULT_SECTION;"},{"lineNumber":499,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":500,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":501,"author":{"gitId":"xenosf"},"content":" // process recipient"},{"lineNumber":502,"author":{"gitId":"xenosf"},"content":" String recipientEmail \u003d null;"},{"lineNumber":503,"author":{"gitId":"xenosf"},"content":" String recipientName \u003d getRecipientNameOfResponse(response, bundle);"},{"lineNumber":504,"author":{"gitId":"xenosf"},"content":" String recipientTeam \u003d"},{"lineNumber":505,"author":{"gitId":"xenosf"},"content":" bundle.getRoster().getInfoForIdentifier(response.getRecipient()).getTeamName();"},{"lineNumber":506,"author":{"gitId":"xenosf"},"content":" String recipientSectionName \u003d response.getRecipientSectionName();"},{"lineNumber":507,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":508,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d bundle.getRoster().getInstructorForEmail(response.getRecipient());"},{"lineNumber":509,"author":{"gitId":"xenosf"},"content":" recipientName \u003d instructor.getName();"},{"lineNumber":510,"author":{"gitId":"xenosf"},"content":" recipientTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":511,"author":{"gitId":"xenosf"},"content":" recipientSectionName \u003d Const.DEFAULT_SECTION;"},{"lineNumber":512,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":513,"author":{"gitId":"xenosf"},"content":" if (bundle.isResponseRecipientVisible(response)) {"},{"lineNumber":514,"author":{"gitId":"xenosf"},"content":" recipientEmail \u003d response.getRecipient();"},{"lineNumber":515,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":516,"author":{"gitId":"xenosf"},"content":" if (bundle.getRoster().isTeamInCourse(recipientEmail)) {"},{"lineNumber":517,"author":{"gitId":"xenosf"},"content":" // remove recipient email as it is a team name"},{"lineNumber":518,"author":{"gitId":"xenosf"},"content":" recipientEmail \u003d null;"},{"lineNumber":519,"author":{"gitId":"xenosf"},"content":" } else if (Const.GENERAL_QUESTION.equals(recipientEmail)) {"},{"lineNumber":520,"author":{"gitId":"xenosf"},"content":" // general recipient does not have email"},{"lineNumber":521,"author":{"gitId":"xenosf"},"content":" recipientEmail \u003d null;"},{"lineNumber":522,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":523,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":524,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":525,"author":{"gitId":"xenosf"},"content":" // process comments"},{"lineNumber":526,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e feedbackResponseComments \u003d"},{"lineNumber":527,"author":{"gitId":"xenosf"},"content":" bundle.getResponseCommentsMap().getOrDefault(response, Collections.emptyList());"},{"lineNumber":528,"author":{"gitId":"xenosf"},"content":" Queue\u003cCommentOutput\u003e comments \u003d buildComments(feedbackResponseComments, bundle);"},{"lineNumber":529,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":530,"author":{"gitId":"xenosf"},"content":" return ResponseOutput.builder()"},{"lineNumber":531,"author":{"gitId":"xenosf"},"content":" .withIsMissingResponse(isMissingResponse)"},{"lineNumber":532,"author":{"gitId":"xenosf"},"content":" .withResponse(response)"},{"lineNumber":533,"author":{"gitId":"xenosf"},"content":" .withGiver(giverName)"},{"lineNumber":534,"author":{"gitId":"xenosf"},"content":" .withGiverTeam(giverTeam)"},{"lineNumber":535,"author":{"gitId":"xenosf"},"content":" .withGiverEmail(giverEmail)"},{"lineNumber":536,"author":{"gitId":"xenosf"},"content":" .withRelatedGiverEmail(relatedGiverEmail)"},{"lineNumber":537,"author":{"gitId":"xenosf"},"content":" .withGiverSectionName(giverSectionName)"},{"lineNumber":538,"author":{"gitId":"xenosf"},"content":" .withRecipient(recipientName)"},{"lineNumber":539,"author":{"gitId":"xenosf"},"content":" .withRecipientTeam(recipientTeam)"},{"lineNumber":540,"author":{"gitId":"xenosf"},"content":" .withRecipientEmail(recipientEmail)"},{"lineNumber":541,"author":{"gitId":"xenosf"},"content":" .withRecipientSectionName(recipientSectionName)"},{"lineNumber":542,"author":{"gitId":"xenosf"},"content":" .withResponseDetails(response.getFeedbackResponseDetailsCopy())"},{"lineNumber":543,"author":{"gitId":"xenosf"},"content":" .withParticipantComment(comments.poll())"},{"lineNumber":544,"author":{"gitId":"xenosf"},"content":" .withInstructorComments(new ArrayList\u003c\u003e(comments))"},{"lineNumber":545,"author":{"gitId":"xenosf"},"content":" .build();"},{"lineNumber":546,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":547,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":548,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":549,"author":{"gitId":"-"},"content":" * Gets giver name of a response from the bundle."},{"lineNumber":550,"author":{"gitId":"-"},"content":" *"},{"lineNumber":551,"author":{"gitId":"-"},"content":" * \u003cp\u003eAnonymized the name if necessary."},{"lineNumber":552,"author":{"gitId":"-"},"content":" */"},{"lineNumber":553,"author":{"gitId":"-"},"content":" private static String getGiverNameOfResponse(FeedbackResponseAttributes response, SessionResultsBundle bundle) {"},{"lineNumber":554,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(response.getFeedbackQuestionId());"},{"lineNumber":555,"author":{"gitId":"-"},"content":" FeedbackParticipantType participantType \u003d question.getGiverType();"},{"lineNumber":556,"author":{"gitId":"-"},"content":""},{"lineNumber":557,"author":{"gitId":"-"},"content":" CourseRoster.ParticipantInfo userInfo \u003d bundle.getRoster().getInfoForIdentifier(response.getGiver());"},{"lineNumber":558,"author":{"gitId":"-"},"content":" String name \u003d userInfo.getName();"},{"lineNumber":559,"author":{"gitId":"-"},"content":""},{"lineNumber":560,"author":{"gitId":"-"},"content":" if (!bundle.isResponseGiverVisible(response)) {"},{"lineNumber":561,"author":{"gitId":"-"},"content":" name \u003d SessionResultsBundle.getAnonName(participantType, name);"},{"lineNumber":562,"author":{"gitId":"-"},"content":" }"},{"lineNumber":563,"author":{"gitId":"-"},"content":""},{"lineNumber":564,"author":{"gitId":"-"},"content":" return name;"},{"lineNumber":565,"author":{"gitId":"-"},"content":" }"},{"lineNumber":566,"author":{"gitId":"-"},"content":""},{"lineNumber":567,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":568,"author":{"gitId":"xenosf"},"content":" * Gets giver name of a response from the bundle."},{"lineNumber":569,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":570,"author":{"gitId":"xenosf"},"content":" * \u003cp\u003eAnonymized the name if necessary."},{"lineNumber":571,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":572,"author":{"gitId":"xenosf"},"content":" private static String getGiverNameOfResponse(FeedbackResponse response, SqlSessionResultsBundle bundle) {"},{"lineNumber":573,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":574,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType participantType \u003d question.getGiverType();"},{"lineNumber":575,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":576,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster.ParticipantInfo userInfo \u003d bundle.getRoster().getInfoForIdentifier(response.getGiver());"},{"lineNumber":577,"author":{"gitId":"xenosf"},"content":" String name \u003d userInfo.getName();"},{"lineNumber":578,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":579,"author":{"gitId":"xenosf"},"content":" if (!bundle.isResponseGiverVisible(response)) {"},{"lineNumber":580,"author":{"gitId":"xenosf"},"content":" name \u003d SessionResultsBundle.getAnonName(participantType, name);"},{"lineNumber":581,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":582,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":583,"author":{"gitId":"xenosf"},"content":" return name;"},{"lineNumber":584,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":585,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":586,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":587,"author":{"gitId":"-"},"content":" * Gets recipient name of a response from the bundle."},{"lineNumber":588,"author":{"gitId":"-"},"content":" *"},{"lineNumber":589,"author":{"gitId":"-"},"content":" * \u003cp\u003eAnonymized the name if necessary."},{"lineNumber":590,"author":{"gitId":"-"},"content":" */"},{"lineNumber":591,"author":{"gitId":"-"},"content":" private static String getRecipientNameOfResponse(FeedbackResponseAttributes response, SessionResultsBundle bundle) {"},{"lineNumber":592,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(response.getFeedbackQuestionId());"},{"lineNumber":593,"author":{"gitId":"-"},"content":" FeedbackParticipantType participantType \u003d question.getRecipientType();"},{"lineNumber":594,"author":{"gitId":"-"},"content":" if (participantType \u003d\u003d FeedbackParticipantType.SELF) {"},{"lineNumber":595,"author":{"gitId":"-"},"content":" // recipient type for self-feedback is the same as the giver type"},{"lineNumber":596,"author":{"gitId":"-"},"content":" participantType \u003d question.getGiverType();"},{"lineNumber":597,"author":{"gitId":"-"},"content":" }"},{"lineNumber":598,"author":{"gitId":"-"},"content":""},{"lineNumber":599,"author":{"gitId":"-"},"content":" CourseRoster.ParticipantInfo userInfo \u003d bundle.getRoster().getInfoForIdentifier(response.getRecipient());"},{"lineNumber":600,"author":{"gitId":"-"},"content":" String name \u003d userInfo.getName();"},{"lineNumber":601,"author":{"gitId":"-"},"content":" if (Const.GENERAL_QUESTION.equals(response.getRecipient())) {"},{"lineNumber":602,"author":{"gitId":"-"},"content":" // for general question"},{"lineNumber":603,"author":{"gitId":"-"},"content":" name \u003d Const.USER_NOBODY_TEXT;"},{"lineNumber":604,"author":{"gitId":"-"},"content":" }"},{"lineNumber":605,"author":{"gitId":"-"},"content":" if (!bundle.isResponseRecipientVisible(response)) {"},{"lineNumber":606,"author":{"gitId":"-"},"content":" name \u003d SessionResultsBundle.getAnonName(participantType, name);"},{"lineNumber":607,"author":{"gitId":"-"},"content":" }"},{"lineNumber":608,"author":{"gitId":"-"},"content":""},{"lineNumber":609,"author":{"gitId":"-"},"content":" return name;"},{"lineNumber":610,"author":{"gitId":"-"},"content":" }"},{"lineNumber":611,"author":{"gitId":"-"},"content":""},{"lineNumber":612,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":613,"author":{"gitId":"xenosf"},"content":" * Gets recipient name of a response from the bundle."},{"lineNumber":614,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":615,"author":{"gitId":"xenosf"},"content":" * \u003cp\u003eAnonymized the name if necessary."},{"lineNumber":616,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":617,"author":{"gitId":"xenosf"},"content":" private static String getRecipientNameOfResponse(FeedbackResponse response, SqlSessionResultsBundle bundle) {"},{"lineNumber":618,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":619,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType participantType \u003d question.getRecipientType();"},{"lineNumber":620,"author":{"gitId":"xenosf"},"content":" if (participantType \u003d\u003d FeedbackParticipantType.SELF) {"},{"lineNumber":621,"author":{"gitId":"xenosf"},"content":" // recipient type for self-feedback is the same as the giver type"},{"lineNumber":622,"author":{"gitId":"xenosf"},"content":" participantType \u003d question.getGiverType();"},{"lineNumber":623,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":624,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":625,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster.ParticipantInfo userInfo \u003d bundle.getRoster().getInfoForIdentifier(response.getRecipient());"},{"lineNumber":626,"author":{"gitId":"xenosf"},"content":" String name \u003d userInfo.getName();"},{"lineNumber":627,"author":{"gitId":"xenosf"},"content":" if (Const.GENERAL_QUESTION.equals(response.getRecipient())) {"},{"lineNumber":628,"author":{"gitId":"xenosf"},"content":" // for general question"},{"lineNumber":629,"author":{"gitId":"xenosf"},"content":" name \u003d Const.USER_NOBODY_TEXT;"},{"lineNumber":630,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":631,"author":{"gitId":"xenosf"},"content":" if (!bundle.isResponseRecipientVisible(response)) {"},{"lineNumber":632,"author":{"gitId":"xenosf"},"content":" name \u003d SessionResultsBundle.getAnonName(participantType, name);"},{"lineNumber":633,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":634,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":635,"author":{"gitId":"xenosf"},"content":" return name;"},{"lineNumber":636,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":637,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":638,"author":{"gitId":"-"},"content":" private static Queue\u003cCommentOutput\u003e buildComments(List\u003cFeedbackResponseCommentAttributes\u003e feedbackResponseComments,"},{"lineNumber":639,"author":{"gitId":"-"},"content":" SessionResultsBundle bundle) {"},{"lineNumber":640,"author":{"gitId":"-"},"content":" LinkedList\u003cCommentOutput\u003e outputs \u003d new LinkedList\u003c\u003e();"},{"lineNumber":641,"author":{"gitId":"-"},"content":""},{"lineNumber":642,"author":{"gitId":"-"},"content":" CommentOutput participantComment \u003d null;"},{"lineNumber":643,"author":{"gitId":"-"},"content":" for (FeedbackResponseCommentAttributes comment : feedbackResponseComments) {"},{"lineNumber":644,"author":{"gitId":"-"},"content":" if (comment.isCommentFromFeedbackParticipant()) {"},{"lineNumber":645,"author":{"gitId":"-"},"content":" // participant comment will not need these fields"},{"lineNumber":646,"author":{"gitId":"-"},"content":" participantComment \u003d CommentOutput.builder(comment)"},{"lineNumber":647,"author":{"gitId":"-"},"content":" .withCommentGiver(null)"},{"lineNumber":648,"author":{"gitId":"-"},"content":" .withCommentGiverName(null)"},{"lineNumber":649,"author":{"gitId":"-"},"content":" .withLastEditorEmail(null)"},{"lineNumber":650,"author":{"gitId":"-"},"content":" .withLastEditorName(null)"},{"lineNumber":651,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":652,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":653,"author":{"gitId":"-"},"content":" String giverEmail \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":654,"author":{"gitId":"-"},"content":" String giverName \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":655,"author":{"gitId":"-"},"content":" String lastEditorEmail \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":656,"author":{"gitId":"-"},"content":" String lastEditorName \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":657,"author":{"gitId":"-"},"content":" if (bundle.isCommentGiverVisible(comment)) {"},{"lineNumber":658,"author":{"gitId":"-"},"content":" giverEmail \u003d comment.getCommentGiver();"},{"lineNumber":659,"author":{"gitId":"-"},"content":" giverName \u003d bundle.getRoster().getInfoForIdentifier(comment.getCommentGiver()).getName();"},{"lineNumber":660,"author":{"gitId":"-"},"content":" lastEditorEmail \u003d comment.getLastEditorEmail();"},{"lineNumber":661,"author":{"gitId":"-"},"content":" lastEditorName \u003d bundle.getRoster().getInfoForIdentifier(comment.getLastEditorEmail()).getName();"},{"lineNumber":662,"author":{"gitId":"-"},"content":" }"},{"lineNumber":663,"author":{"gitId":"-"},"content":" outputs.add(CommentOutput.builder(comment)"},{"lineNumber":664,"author":{"gitId":"-"},"content":" .withCommentGiver(giverEmail)"},{"lineNumber":665,"author":{"gitId":"-"},"content":" .withCommentGiverName(giverName)"},{"lineNumber":666,"author":{"gitId":"-"},"content":" .withLastEditorEmail(lastEditorEmail)"},{"lineNumber":667,"author":{"gitId":"-"},"content":" .withLastEditorName(lastEditorName)"},{"lineNumber":668,"author":{"gitId":"-"},"content":" .build());"},{"lineNumber":669,"author":{"gitId":"-"},"content":" }"},{"lineNumber":670,"author":{"gitId":"-"},"content":" }"},{"lineNumber":671,"author":{"gitId":"-"},"content":" outputs.addFirst(participantComment);"},{"lineNumber":672,"author":{"gitId":"-"},"content":""},{"lineNumber":673,"author":{"gitId":"-"},"content":" return outputs;"},{"lineNumber":674,"author":{"gitId":"-"},"content":" }"},{"lineNumber":675,"author":{"gitId":"-"},"content":""},{"lineNumber":676,"author":{"gitId":"xenosf"},"content":" private static Queue\u003cCommentOutput\u003e buildComments(List\u003cFeedbackResponseComment\u003e feedbackResponseComments,"},{"lineNumber":677,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle) {"},{"lineNumber":678,"author":{"gitId":"xenosf"},"content":" LinkedList\u003cCommentOutput\u003e outputs \u003d new LinkedList\u003c\u003e();"},{"lineNumber":679,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":680,"author":{"gitId":"xenosf"},"content":" CommentOutput participantComment \u003d null;"},{"lineNumber":681,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponseComment comment : feedbackResponseComments) {"},{"lineNumber":682,"author":{"gitId":"xenosf"},"content":" if (comment.getIsCommentFromFeedbackParticipant()) {"},{"lineNumber":683,"author":{"gitId":"xenosf"},"content":" // participant comment will not need these fields"},{"lineNumber":684,"author":{"gitId":"xenosf"},"content":" participantComment \u003d CommentOutput.builder(comment)"},{"lineNumber":685,"author":{"gitId":"xenosf"},"content":" .withCommentGiver(null)"},{"lineNumber":686,"author":{"gitId":"xenosf"},"content":" .withCommentGiverName(null)"},{"lineNumber":687,"author":{"gitId":"xenosf"},"content":" .withLastEditorEmail(null)"},{"lineNumber":688,"author":{"gitId":"xenosf"},"content":" .withLastEditorName(null)"},{"lineNumber":689,"author":{"gitId":"xenosf"},"content":" .build();"},{"lineNumber":690,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":691,"author":{"gitId":"xenosf"},"content":" String giverEmail \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":692,"author":{"gitId":"xenosf"},"content":" String giverName \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":693,"author":{"gitId":"xenosf"},"content":" String lastEditorEmail \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":694,"author":{"gitId":"xenosf"},"content":" String lastEditorName \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":695,"author":{"gitId":"xenosf"},"content":" if (bundle.isCommentGiverVisible(comment)) {"},{"lineNumber":696,"author":{"gitId":"xenosf"},"content":" giverEmail \u003d comment.getGiver();"},{"lineNumber":697,"author":{"gitId":"xenosf"},"content":" giverName \u003d bundle.getRoster().getInfoForIdentifier(comment.getGiver()).getName();"},{"lineNumber":698,"author":{"gitId":"xenosf"},"content":" lastEditorEmail \u003d comment.getLastEditorEmail();"},{"lineNumber":699,"author":{"gitId":"xenosf"},"content":" lastEditorName \u003d bundle.getRoster().getInfoForIdentifier(comment.getLastEditorEmail()).getName();"},{"lineNumber":700,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":701,"author":{"gitId":"xenosf"},"content":" outputs.add(CommentOutput.builder(comment)"},{"lineNumber":702,"author":{"gitId":"xenosf"},"content":" .withCommentGiver(giverEmail)"},{"lineNumber":703,"author":{"gitId":"xenosf"},"content":" .withCommentGiverName(giverName)"},{"lineNumber":704,"author":{"gitId":"xenosf"},"content":" .withLastEditorEmail(lastEditorEmail)"},{"lineNumber":705,"author":{"gitId":"xenosf"},"content":" .withLastEditorName(lastEditorName)"},{"lineNumber":706,"author":{"gitId":"xenosf"},"content":" .build());"},{"lineNumber":707,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":708,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":709,"author":{"gitId":"xenosf"},"content":" outputs.addFirst(participantComment);"},{"lineNumber":710,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":711,"author":{"gitId":"xenosf"},"content":" return outputs;"},{"lineNumber":712,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":713,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":714,"author":{"gitId":"-"},"content":" public List\u003cQuestionOutput\u003e getQuestions() {"},{"lineNumber":715,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":716,"author":{"gitId":"-"},"content":" }"},{"lineNumber":717,"author":{"gitId":"-"},"content":""},{"lineNumber":718,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":719,"author":{"gitId":"-"},"content":" * API output format for questions in session results."},{"lineNumber":720,"author":{"gitId":"-"},"content":" */"},{"lineNumber":721,"author":{"gitId":"-"},"content":" public static class QuestionOutput {"},{"lineNumber":722,"author":{"gitId":"-"},"content":""},{"lineNumber":723,"author":{"gitId":"-"},"content":" private final FeedbackQuestionData feedbackQuestion;"},{"lineNumber":724,"author":{"gitId":"-"},"content":" private final String questionStatistics;"},{"lineNumber":725,"author":{"gitId":"-"},"content":""},{"lineNumber":726,"author":{"gitId":"-"},"content":" private final List\u003cResponseOutput\u003e allResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":727,"author":{"gitId":"-"},"content":" private final boolean hasResponseButNotVisibleForPreview;"},{"lineNumber":728,"author":{"gitId":"-"},"content":" private final boolean hasCommentNotVisibleForPreview;"},{"lineNumber":729,"author":{"gitId":"-"},"content":""},{"lineNumber":730,"author":{"gitId":"-"},"content":" // For student view only"},{"lineNumber":731,"author":{"gitId":"-"},"content":" private final List\u003cResponseOutput\u003e responsesToSelf \u003d new ArrayList\u003c\u003e();"},{"lineNumber":732,"author":{"gitId":"-"},"content":" private final List\u003cResponseOutput\u003e responsesFromSelf \u003d new ArrayList\u003c\u003e();"},{"lineNumber":733,"author":{"gitId":"-"},"content":" private final List\u003cList\u003cResponseOutput\u003e\u003e otherResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":734,"author":{"gitId":"-"},"content":""},{"lineNumber":735,"author":{"gitId":"-"},"content":" private QuestionOutput(FeedbackQuestionAttributes feedbackQuestionAttributes, String questionStatistics,"},{"lineNumber":736,"author":{"gitId":"-"},"content":" boolean hasResponseButNotVisibleForPreview, boolean hasCommentNotVisibleForPreview) {"},{"lineNumber":737,"author":{"gitId":"-"},"content":" this.feedbackQuestion \u003d new FeedbackQuestionData(feedbackQuestionAttributes);"},{"lineNumber":738,"author":{"gitId":"-"},"content":" this.questionStatistics \u003d questionStatistics;"},{"lineNumber":739,"author":{"gitId":"-"},"content":" this.hasResponseButNotVisibleForPreview \u003d hasResponseButNotVisibleForPreview;"},{"lineNumber":740,"author":{"gitId":"-"},"content":" this.hasCommentNotVisibleForPreview \u003d hasCommentNotVisibleForPreview;"},{"lineNumber":741,"author":{"gitId":"-"},"content":" }"},{"lineNumber":742,"author":{"gitId":"-"},"content":""},{"lineNumber":743,"author":{"gitId":"xenosf"},"content":" private QuestionOutput(FeedbackQuestion feedbackQuestion, String questionStatistics,"},{"lineNumber":744,"author":{"gitId":"xenosf"},"content":" boolean hasResponseButNotVisibleForPreview, boolean hasCommentNotVisibleForPreview) {"},{"lineNumber":745,"author":{"gitId":"xenosf"},"content":" this.feedbackQuestion \u003d new FeedbackQuestionData(feedbackQuestion);"},{"lineNumber":746,"author":{"gitId":"xenosf"},"content":" this.questionStatistics \u003d questionStatistics;"},{"lineNumber":747,"author":{"gitId":"xenosf"},"content":" this.hasResponseButNotVisibleForPreview \u003d hasResponseButNotVisibleForPreview;"},{"lineNumber":748,"author":{"gitId":"xenosf"},"content":" this.hasCommentNotVisibleForPreview \u003d hasCommentNotVisibleForPreview;"},{"lineNumber":749,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":750,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":751,"author":{"gitId":"-"},"content":" public FeedbackQuestionData getFeedbackQuestion() {"},{"lineNumber":752,"author":{"gitId":"-"},"content":" return feedbackQuestion;"},{"lineNumber":753,"author":{"gitId":"-"},"content":" }"},{"lineNumber":754,"author":{"gitId":"-"},"content":""},{"lineNumber":755,"author":{"gitId":"-"},"content":" public String getQuestionStatistics() {"},{"lineNumber":756,"author":{"gitId":"-"},"content":" return questionStatistics;"},{"lineNumber":757,"author":{"gitId":"-"},"content":" }"},{"lineNumber":758,"author":{"gitId":"-"},"content":""},{"lineNumber":759,"author":{"gitId":"-"},"content":" public List\u003cResponseOutput\u003e getAllResponses() {"},{"lineNumber":760,"author":{"gitId":"-"},"content":" return allResponses;"},{"lineNumber":761,"author":{"gitId":"-"},"content":" }"},{"lineNumber":762,"author":{"gitId":"-"},"content":""},{"lineNumber":763,"author":{"gitId":"-"},"content":" public boolean getHasResponseButNotVisibleForPreview() {"},{"lineNumber":764,"author":{"gitId":"-"},"content":" return hasResponseButNotVisibleForPreview;"},{"lineNumber":765,"author":{"gitId":"-"},"content":" }"},{"lineNumber":766,"author":{"gitId":"-"},"content":""},{"lineNumber":767,"author":{"gitId":"-"},"content":" public boolean getHasCommentNotVisibleForPreview() {"},{"lineNumber":768,"author":{"gitId":"-"},"content":" return hasCommentNotVisibleForPreview;"},{"lineNumber":769,"author":{"gitId":"-"},"content":" }"},{"lineNumber":770,"author":{"gitId":"-"},"content":""},{"lineNumber":771,"author":{"gitId":"-"},"content":" public List\u003cResponseOutput\u003e getResponsesFromSelf() {"},{"lineNumber":772,"author":{"gitId":"-"},"content":" return responsesFromSelf;"},{"lineNumber":773,"author":{"gitId":"-"},"content":" }"},{"lineNumber":774,"author":{"gitId":"-"},"content":""},{"lineNumber":775,"author":{"gitId":"-"},"content":" public List\u003cResponseOutput\u003e getResponsesToSelf() {"},{"lineNumber":776,"author":{"gitId":"-"},"content":" return responsesToSelf;"},{"lineNumber":777,"author":{"gitId":"-"},"content":" }"},{"lineNumber":778,"author":{"gitId":"-"},"content":""},{"lineNumber":779,"author":{"gitId":"-"},"content":" public List\u003cList\u003cResponseOutput\u003e\u003e getOtherResponses() {"},{"lineNumber":780,"author":{"gitId":"-"},"content":" return otherResponses;"},{"lineNumber":781,"author":{"gitId":"-"},"content":" }"},{"lineNumber":782,"author":{"gitId":"-"},"content":""},{"lineNumber":783,"author":{"gitId":"-"},"content":" }"},{"lineNumber":784,"author":{"gitId":"-"},"content":""},{"lineNumber":785,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":786,"author":{"gitId":"-"},"content":" * API output format for question responses."},{"lineNumber":787,"author":{"gitId":"-"},"content":" */"},{"lineNumber":788,"author":{"gitId":"-"},"content":" public static class ResponseOutput {"},{"lineNumber":789,"author":{"gitId":"-"},"content":""},{"lineNumber":790,"author":{"gitId":"-"},"content":" private boolean isMissingResponse;"},{"lineNumber":791,"author":{"gitId":"-"},"content":""},{"lineNumber":792,"author":{"gitId":"-"},"content":" private String responseId;"},{"lineNumber":793,"author":{"gitId":"-"},"content":""},{"lineNumber":794,"author":{"gitId":"-"},"content":" private String giver;"},{"lineNumber":795,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":796,"author":{"gitId":"-"},"content":" * Depending on the question giver type, {@code giverIdentifier} may contain the giver\u0027s email, any team member\u0027s"},{"lineNumber":797,"author":{"gitId":"-"},"content":" * email or null."},{"lineNumber":798,"author":{"gitId":"-"},"content":" */"},{"lineNumber":799,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":800,"author":{"gitId":"-"},"content":" private String relatedGiverEmail;"},{"lineNumber":801,"author":{"gitId":"-"},"content":" private String giverTeam;"},{"lineNumber":802,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":803,"author":{"gitId":"-"},"content":" private String giverEmail;"},{"lineNumber":804,"author":{"gitId":"-"},"content":" private String giverSection;"},{"lineNumber":805,"author":{"gitId":"-"},"content":" private String recipient;"},{"lineNumber":806,"author":{"gitId":"-"},"content":" private String recipientTeam;"},{"lineNumber":807,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":808,"author":{"gitId":"-"},"content":" private String recipientEmail;"},{"lineNumber":809,"author":{"gitId":"-"},"content":" private String recipientSection;"},{"lineNumber":810,"author":{"gitId":"-"},"content":" private FeedbackResponseDetails responseDetails;"},{"lineNumber":811,"author":{"gitId":"-"},"content":""},{"lineNumber":812,"author":{"gitId":"-"},"content":" // comments"},{"lineNumber":813,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":814,"author":{"gitId":"-"},"content":" private CommentOutput participantComment;"},{"lineNumber":815,"author":{"gitId":"-"},"content":" private List\u003cCommentOutput\u003e instructorComments;"},{"lineNumber":816,"author":{"gitId":"-"},"content":""},{"lineNumber":817,"author":{"gitId":"-"},"content":" private ResponseOutput() {"},{"lineNumber":818,"author":{"gitId":"-"},"content":" // use builder instead"},{"lineNumber":819,"author":{"gitId":"-"},"content":" }"},{"lineNumber":820,"author":{"gitId":"-"},"content":""},{"lineNumber":821,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":822,"author":{"gitId":"-"},"content":" * Returns a builder for {@link ResponseOutput}."},{"lineNumber":823,"author":{"gitId":"-"},"content":" */"},{"lineNumber":824,"author":{"gitId":"-"},"content":" static Builder builder() {"},{"lineNumber":825,"author":{"gitId":"-"},"content":" return new Builder();"},{"lineNumber":826,"author":{"gitId":"-"},"content":" }"},{"lineNumber":827,"author":{"gitId":"-"},"content":""},{"lineNumber":828,"author":{"gitId":"-"},"content":" public boolean isMissingResponse() {"},{"lineNumber":829,"author":{"gitId":"-"},"content":" return isMissingResponse;"},{"lineNumber":830,"author":{"gitId":"-"},"content":" }"},{"lineNumber":831,"author":{"gitId":"-"},"content":""},{"lineNumber":832,"author":{"gitId":"-"},"content":" public String getResponseId() {"},{"lineNumber":833,"author":{"gitId":"-"},"content":" return responseId;"},{"lineNumber":834,"author":{"gitId":"-"},"content":" }"},{"lineNumber":835,"author":{"gitId":"-"},"content":""},{"lineNumber":836,"author":{"gitId":"-"},"content":" public String getGiver() {"},{"lineNumber":837,"author":{"gitId":"-"},"content":" return giver;"},{"lineNumber":838,"author":{"gitId":"-"},"content":" }"},{"lineNumber":839,"author":{"gitId":"-"},"content":""},{"lineNumber":840,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":841,"author":{"gitId":"-"},"content":" public String getGiverEmail() {"},{"lineNumber":842,"author":{"gitId":"-"},"content":" return giverEmail;"},{"lineNumber":843,"author":{"gitId":"-"},"content":" }"},{"lineNumber":844,"author":{"gitId":"-"},"content":""},{"lineNumber":845,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":846,"author":{"gitId":"-"},"content":" public String getRelatedGiverEmail() {"},{"lineNumber":847,"author":{"gitId":"-"},"content":" return relatedGiverEmail;"},{"lineNumber":848,"author":{"gitId":"-"},"content":" }"},{"lineNumber":849,"author":{"gitId":"-"},"content":""},{"lineNumber":850,"author":{"gitId":"-"},"content":" public String getGiverTeam() {"},{"lineNumber":851,"author":{"gitId":"-"},"content":" return giverTeam;"},{"lineNumber":852,"author":{"gitId":"-"},"content":" }"},{"lineNumber":853,"author":{"gitId":"-"},"content":""},{"lineNumber":854,"author":{"gitId":"-"},"content":" public String getGiverSection() {"},{"lineNumber":855,"author":{"gitId":"-"},"content":" return giverSection;"},{"lineNumber":856,"author":{"gitId":"-"},"content":" }"},{"lineNumber":857,"author":{"gitId":"-"},"content":""},{"lineNumber":858,"author":{"gitId":"-"},"content":" public String getRecipient() {"},{"lineNumber":859,"author":{"gitId":"-"},"content":" return recipient;"},{"lineNumber":860,"author":{"gitId":"-"},"content":" }"},{"lineNumber":861,"author":{"gitId":"-"},"content":""},{"lineNumber":862,"author":{"gitId":"-"},"content":" public String getRecipientTeam() {"},{"lineNumber":863,"author":{"gitId":"-"},"content":" return recipientTeam;"},{"lineNumber":864,"author":{"gitId":"-"},"content":" }"},{"lineNumber":865,"author":{"gitId":"-"},"content":""},{"lineNumber":866,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":867,"author":{"gitId":"-"},"content":" public String getRecipientEmail() {"},{"lineNumber":868,"author":{"gitId":"-"},"content":" return recipientEmail;"},{"lineNumber":869,"author":{"gitId":"-"},"content":" }"},{"lineNumber":870,"author":{"gitId":"-"},"content":""},{"lineNumber":871,"author":{"gitId":"-"},"content":" public String getRecipientSection() {"},{"lineNumber":872,"author":{"gitId":"-"},"content":" return recipientSection;"},{"lineNumber":873,"author":{"gitId":"-"},"content":" }"},{"lineNumber":874,"author":{"gitId":"-"},"content":""},{"lineNumber":875,"author":{"gitId":"-"},"content":" public FeedbackResponseDetails getResponseDetails() {"},{"lineNumber":876,"author":{"gitId":"-"},"content":" return responseDetails;"},{"lineNumber":877,"author":{"gitId":"-"},"content":" }"},{"lineNumber":878,"author":{"gitId":"-"},"content":""},{"lineNumber":879,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":880,"author":{"gitId":"-"},"content":" public CommentOutput getParticipantComment() {"},{"lineNumber":881,"author":{"gitId":"-"},"content":" return participantComment;"},{"lineNumber":882,"author":{"gitId":"-"},"content":" }"},{"lineNumber":883,"author":{"gitId":"-"},"content":""},{"lineNumber":884,"author":{"gitId":"-"},"content":" public List\u003cCommentOutput\u003e getInstructorComments() {"},{"lineNumber":885,"author":{"gitId":"-"},"content":" return instructorComments;"},{"lineNumber":886,"author":{"gitId":"-"},"content":" }"},{"lineNumber":887,"author":{"gitId":"-"},"content":""},{"lineNumber":888,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":889,"author":{"gitId":"-"},"content":" * Builder class for {@link ResponseOutput}."},{"lineNumber":890,"author":{"gitId":"-"},"content":" */"},{"lineNumber":891,"author":{"gitId":"-"},"content":" public static final class Builder {"},{"lineNumber":892,"author":{"gitId":"-"},"content":" private final ResponseOutput responseOutput;"},{"lineNumber":893,"author":{"gitId":"-"},"content":""},{"lineNumber":894,"author":{"gitId":"-"},"content":" private Builder() {"},{"lineNumber":895,"author":{"gitId":"-"},"content":" responseOutput \u003d new ResponseOutput();"},{"lineNumber":896,"author":{"gitId":"-"},"content":" }"},{"lineNumber":897,"author":{"gitId":"-"},"content":""},{"lineNumber":898,"author":{"gitId":"-"},"content":" Builder withIsMissingResponse(boolean isMissingResponse) {"},{"lineNumber":899,"author":{"gitId":"-"},"content":" responseOutput.isMissingResponse \u003d isMissingResponse;"},{"lineNumber":900,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":901,"author":{"gitId":"-"},"content":" }"},{"lineNumber":902,"author":{"gitId":"-"},"content":""},{"lineNumber":903,"author":{"gitId":"-"},"content":" Builder withResponseId(String responseId) {"},{"lineNumber":904,"author":{"gitId":"-"},"content":" responseOutput.responseId \u003d StringHelper.encrypt(responseId);"},{"lineNumber":905,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":906,"author":{"gitId":"-"},"content":" }"},{"lineNumber":907,"author":{"gitId":"-"},"content":""},{"lineNumber":908,"author":{"gitId":"xenosf"},"content":" Builder withResponse(FeedbackResponse response) {"},{"lineNumber":909,"author":{"gitId":"xenosf"},"content":" responseOutput.responseId \u003d StringHelper.encrypt(response.getId().toString());"},{"lineNumber":910,"author":{"gitId":"xenosf"},"content":" return this;"},{"lineNumber":911,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":912,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":913,"author":{"gitId":"-"},"content":" Builder withGiver(String giverName) {"},{"lineNumber":914,"author":{"gitId":"-"},"content":" responseOutput.giver \u003d giverName;"},{"lineNumber":915,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":916,"author":{"gitId":"-"},"content":" }"},{"lineNumber":917,"author":{"gitId":"-"},"content":""},{"lineNumber":918,"author":{"gitId":"-"},"content":" Builder withRelatedGiverEmail(@Nullable String relatedGiverEmail) {"},{"lineNumber":919,"author":{"gitId":"-"},"content":" responseOutput.relatedGiverEmail \u003d relatedGiverEmail;"},{"lineNumber":920,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":921,"author":{"gitId":"-"},"content":" }"},{"lineNumber":922,"author":{"gitId":"-"},"content":""},{"lineNumber":923,"author":{"gitId":"-"},"content":" Builder withGiverTeam(String giverTeam) {"},{"lineNumber":924,"author":{"gitId":"-"},"content":" responseOutput.giverTeam \u003d giverTeam;"},{"lineNumber":925,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":926,"author":{"gitId":"-"},"content":" }"},{"lineNumber":927,"author":{"gitId":"-"},"content":""},{"lineNumber":928,"author":{"gitId":"-"},"content":" Builder withGiverEmail(@Nullable String giverEmail) {"},{"lineNumber":929,"author":{"gitId":"-"},"content":" responseOutput.giverEmail \u003d giverEmail;"},{"lineNumber":930,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":931,"author":{"gitId":"-"},"content":" }"},{"lineNumber":932,"author":{"gitId":"-"},"content":""},{"lineNumber":933,"author":{"gitId":"xenosf"},"content":" Builder withGiverSectionName(String giverSection) {"},{"lineNumber":934,"author":{"gitId":"-"},"content":" responseOutput.giverSection \u003d giverSection;"},{"lineNumber":935,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":936,"author":{"gitId":"-"},"content":" }"},{"lineNumber":937,"author":{"gitId":"-"},"content":""},{"lineNumber":938,"author":{"gitId":"xenosf"},"content":" Builder withGiverSection(Section giverSection) {"},{"lineNumber":939,"author":{"gitId":"xenosf"},"content":" responseOutput.giverSection \u003d giverSection.getName();"},{"lineNumber":940,"author":{"gitId":"xenosf"},"content":" return this;"},{"lineNumber":941,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":942,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":943,"author":{"gitId":"-"},"content":" Builder withRecipient(String recipientName) {"},{"lineNumber":944,"author":{"gitId":"-"},"content":" responseOutput.recipient \u003d recipientName;"},{"lineNumber":945,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":946,"author":{"gitId":"-"},"content":" }"},{"lineNumber":947,"author":{"gitId":"-"},"content":""},{"lineNumber":948,"author":{"gitId":"-"},"content":" Builder withRecipientTeam(String recipientTeam) {"},{"lineNumber":949,"author":{"gitId":"-"},"content":" responseOutput.recipientTeam \u003d recipientTeam;"},{"lineNumber":950,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":951,"author":{"gitId":"-"},"content":" }"},{"lineNumber":952,"author":{"gitId":"-"},"content":""},{"lineNumber":953,"author":{"gitId":"-"},"content":" Builder withRecipientEmail(@Nullable String recipientEmail) {"},{"lineNumber":954,"author":{"gitId":"-"},"content":" responseOutput.recipientEmail \u003d recipientEmail;"},{"lineNumber":955,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":956,"author":{"gitId":"-"},"content":" }"},{"lineNumber":957,"author":{"gitId":"-"},"content":""},{"lineNumber":958,"author":{"gitId":"xenosf"},"content":" Builder withRecipientSectionName(String recipientSection) {"},{"lineNumber":959,"author":{"gitId":"-"},"content":" responseOutput.recipientSection \u003d recipientSection;"},{"lineNumber":960,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":961,"author":{"gitId":"-"},"content":" }"},{"lineNumber":962,"author":{"gitId":"-"},"content":""},{"lineNumber":963,"author":{"gitId":"xenosf"},"content":" Builder withRecipientSection(Section recipientSection) {"},{"lineNumber":964,"author":{"gitId":"xenosf"},"content":" responseOutput.recipientSection \u003d recipientSection.getName();"},{"lineNumber":965,"author":{"gitId":"xenosf"},"content":" return this;"},{"lineNumber":966,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":967,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":968,"author":{"gitId":"-"},"content":" Builder withResponseDetails(FeedbackResponseDetails responseDetails) {"},{"lineNumber":969,"author":{"gitId":"-"},"content":" responseOutput.responseDetails \u003d responseDetails;"},{"lineNumber":970,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":971,"author":{"gitId":"-"},"content":" }"},{"lineNumber":972,"author":{"gitId":"-"},"content":""},{"lineNumber":973,"author":{"gitId":"-"},"content":" Builder withParticipantComment(@Nullable CommentOutput participantComment) {"},{"lineNumber":974,"author":{"gitId":"-"},"content":" responseOutput.participantComment \u003d participantComment;"},{"lineNumber":975,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":976,"author":{"gitId":"-"},"content":" }"},{"lineNumber":977,"author":{"gitId":"-"},"content":""},{"lineNumber":978,"author":{"gitId":"-"},"content":" Builder withInstructorComments(List\u003cCommentOutput\u003e instructorComments) {"},{"lineNumber":979,"author":{"gitId":"-"},"content":" responseOutput.instructorComments \u003d instructorComments;"},{"lineNumber":980,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":981,"author":{"gitId":"-"},"content":" }"},{"lineNumber":982,"author":{"gitId":"-"},"content":""},{"lineNumber":983,"author":{"gitId":"-"},"content":" ResponseOutput build() {"},{"lineNumber":984,"author":{"gitId":"-"},"content":" return responseOutput;"},{"lineNumber":985,"author":{"gitId":"-"},"content":" }"},{"lineNumber":986,"author":{"gitId":"-"},"content":" }"},{"lineNumber":987,"author":{"gitId":"-"},"content":" }"},{"lineNumber":988,"author":{"gitId":"-"},"content":""},{"lineNumber":989,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":990,"author":{"gitId":"-"},"content":" * API output format for response comments."},{"lineNumber":991,"author":{"gitId":"-"},"content":" */"},{"lineNumber":992,"author":{"gitId":"-"},"content":" public static class CommentOutput extends FeedbackResponseCommentData {"},{"lineNumber":993,"author":{"gitId":"-"},"content":""},{"lineNumber":994,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":995,"author":{"gitId":"-"},"content":" private String commentGiverName;"},{"lineNumber":996,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":997,"author":{"gitId":"-"},"content":" private String lastEditorName;"},{"lineNumber":998,"author":{"gitId":"-"},"content":""},{"lineNumber":999,"author":{"gitId":"xenosf"},"content":" private CommentOutput(FeedbackResponseCommentAttributes frca) {"},{"lineNumber":1000,"author":{"gitId":"xenosf"},"content":" // use builder instead"},{"lineNumber":1001,"author":{"gitId":"xenosf"},"content":" super(frca);"},{"lineNumber":1002,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1003,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1004,"author":{"gitId":"xenosf"},"content":" private CommentOutput(FeedbackResponseComment frc) {"},{"lineNumber":1005,"author":{"gitId":"-"},"content":" // use builder instead"},{"lineNumber":1006,"author":{"gitId":"-"},"content":" super(frc);"},{"lineNumber":1007,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1008,"author":{"gitId":"-"},"content":""},{"lineNumber":1009,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1010,"author":{"gitId":"-"},"content":" * Returns a builder for {@link CommentOutput}."},{"lineNumber":1011,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1012,"author":{"gitId":"xenosf"},"content":" static Builder builder(FeedbackResponseCommentAttributes frca) {"},{"lineNumber":1013,"author":{"gitId":"xenosf"},"content":" return new Builder(frca);"},{"lineNumber":1014,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1015,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1016,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1017,"author":{"gitId":"xenosf"},"content":" * Returns a builder for {@link CommentOutput}."},{"lineNumber":1018,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1019,"author":{"gitId":"xenosf"},"content":" static Builder builder(FeedbackResponseComment frc) {"},{"lineNumber":1020,"author":{"gitId":"-"},"content":" return new Builder(frc);"},{"lineNumber":1021,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1022,"author":{"gitId":"-"},"content":""},{"lineNumber":1023,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":1024,"author":{"gitId":"-"},"content":" public String getCommentGiverName() {"},{"lineNumber":1025,"author":{"gitId":"-"},"content":" return commentGiverName;"},{"lineNumber":1026,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1027,"author":{"gitId":"-"},"content":""},{"lineNumber":1028,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":1029,"author":{"gitId":"-"},"content":" public String getLastEditorName() {"},{"lineNumber":1030,"author":{"gitId":"-"},"content":" return lastEditorName;"},{"lineNumber":1031,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1032,"author":{"gitId":"-"},"content":""},{"lineNumber":1033,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1034,"author":{"gitId":"-"},"content":" * Builder class for {@link CommentOutput}."},{"lineNumber":1035,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1036,"author":{"gitId":"-"},"content":" public static final class Builder {"},{"lineNumber":1037,"author":{"gitId":"-"},"content":" private final CommentOutput commentOutput;"},{"lineNumber":1038,"author":{"gitId":"-"},"content":""},{"lineNumber":1039,"author":{"gitId":"xenosf"},"content":" private Builder(FeedbackResponseCommentAttributes frca) {"},{"lineNumber":1040,"author":{"gitId":"xenosf"},"content":" commentOutput \u003d new CommentOutput(frca);"},{"lineNumber":1041,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1042,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1043,"author":{"gitId":"xenosf"},"content":" private Builder(FeedbackResponseComment frc) {"},{"lineNumber":1044,"author":{"gitId":"-"},"content":" commentOutput \u003d new CommentOutput(frc);"},{"lineNumber":1045,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1046,"author":{"gitId":"-"},"content":""},{"lineNumber":1047,"author":{"gitId":"-"},"content":" Builder withCommentGiver(@Nullable String commentGiver) {"},{"lineNumber":1048,"author":{"gitId":"-"},"content":" commentOutput.commentGiver \u003d commentGiver;"},{"lineNumber":1049,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":1050,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1051,"author":{"gitId":"-"},"content":""},{"lineNumber":1052,"author":{"gitId":"-"},"content":" Builder withCommentGiverName(@Nullable String commentGiverName) {"},{"lineNumber":1053,"author":{"gitId":"-"},"content":" commentOutput.commentGiverName \u003d commentGiverName;"},{"lineNumber":1054,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":1055,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1056,"author":{"gitId":"-"},"content":""},{"lineNumber":1057,"author":{"gitId":"-"},"content":" Builder withLastEditorEmail(@Nullable String lastEditorEmail) {"},{"lineNumber":1058,"author":{"gitId":"-"},"content":" commentOutput.lastEditorEmail \u003d lastEditorEmail;"},{"lineNumber":1059,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":1060,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1061,"author":{"gitId":"-"},"content":""},{"lineNumber":1062,"author":{"gitId":"-"},"content":" Builder withLastEditorName(@Nullable String lastEditorName) {"},{"lineNumber":1063,"author":{"gitId":"-"},"content":" commentOutput.lastEditorName \u003d lastEditorName;"},{"lineNumber":1064,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":1065,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1066,"author":{"gitId":"-"},"content":""},{"lineNumber":1067,"author":{"gitId":"-"},"content":" CommentOutput build() {"},{"lineNumber":1068,"author":{"gitId":"-"},"content":" return commentOutput;"},{"lineNumber":1069,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1070,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1071,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1072,"author":{"gitId":"-"},"content":""},{"lineNumber":1073,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":386,"-":687}},{"path":"src/main/java/teammates/ui/webapi/AccountRequestSearchIndexingWorkerAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * Task queue worker action: performs account request search indexing."},{"lineNumber":11,"author":{"gitId":"-"},"content":" */"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class AccountRequestSearchIndexingWorkerAction extends AdminOnlyAction {"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public ActionResult execute() {"},{"lineNumber":16,"author":{"gitId":"-"},"content":" String email \u003d getNonNullRequestParamValue(ParamsNames.INSTRUCTOR_EMAIL);"},{"lineNumber":17,"author":{"gitId":"-"},"content":" String institute \u003d getNonNullRequestParamValue(ParamsNames.INSTRUCTOR_INSTITUTION);"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":" AccountRequest accRequest \u003d sqlLogic.getAccountRequest(email, institute);"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":" sqlLogic.putAccountRequestDocument(accRequest);"},{"lineNumber":23,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" // Set an arbitrary retry code outside of the range 200-299 to trigger automatic retry"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":3,"-":27}},{"path":"src/main/java/teammates/ui/webapi/BasicFeedbackSubmissionAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * The basic action for feedback submission."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"abstract class BasicFeedbackSubmissionAction extends Action {"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Checks whether instructors can see the question."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":" boolean canInstructorSeeQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" boolean isGiverVisibleToInstructor \u003d"},{"lineNumber":26,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowGiverNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" boolean isRecipientVisibleToInstructor \u003d"},{"lineNumber":28,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowRecipientNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":29,"author":{"gitId":"-"},"content":" boolean isResponseVisibleToInstructor \u003d"},{"lineNumber":30,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowResponsesTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return isResponseVisibleToInstructor \u0026\u0026 isGiverVisibleToInstructor \u0026\u0026 isRecipientVisibleToInstructor;"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Checks whether instructors can see the question."},{"lineNumber":36,"author":{"gitId":"-"},"content":" */"},{"lineNumber":37,"author":{"gitId":"-"},"content":" boolean canInstructorSeeQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" boolean isGiverVisibleToInstructor \u003d"},{"lineNumber":39,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowGiverNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" boolean isRecipientVisibleToInstructor \u003d"},{"lineNumber":41,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowRecipientNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" boolean isResponseVisibleToInstructor \u003d"},{"lineNumber":43,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowResponsesTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return isResponseVisibleToInstructor \u0026\u0026 isGiverVisibleToInstructor \u0026\u0026 isRecipientVisibleToInstructor;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Verifies that instructor can see the moderated question in moderation request."},{"lineNumber":49,"author":{"gitId":"-"},"content":" */"},{"lineNumber":50,"author":{"gitId":"-"},"content":" void verifyInstructorCanSeeQuestionIfInModeration(FeedbackQuestionAttributes feedbackQuestion)"},{"lineNumber":51,"author":{"gitId":"-"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson) \u0026\u0026 !canInstructorSeeQuestion(feedbackQuestion)) {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // should not moderate question which instructors cannot see"},{"lineNumber":56,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"The question is not applicable for moderation\", true);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":61,"author":{"gitId":"-"},"content":" * Verifies that instructor can see the moderated question in moderation request."},{"lineNumber":62,"author":{"gitId":"-"},"content":" */"},{"lineNumber":63,"author":{"gitId":"-"},"content":" void verifyInstructorCanSeeQuestionIfInModeration(FeedbackQuestion feedbackQuestion)"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson) \u0026\u0026 !canInstructorSeeQuestion(feedbackQuestion)) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // should not moderate question which instructors cannot see"},{"lineNumber":69,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"The question is not applicable for moderation\", true);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Gets the student involved in the submission process."},{"lineNumber":75,"author":{"gitId":"-"},"content":" */"},{"lineNumber":76,"author":{"gitId":"-"},"content":" StudentAttributes getStudentOfCourseFromRequest(String courseId) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return logic.getStudentForEmail(courseId, moderatedPerson);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return logic.getStudentForEmail(courseId, previewAsPerson);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return getPossiblyUnregisteredStudent(courseId);"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Gets the student involved in the submission process."},{"lineNumber":91,"author":{"gitId":"-"},"content":" */"},{"lineNumber":92,"author":{"gitId":"-"},"content":" Student getSqlStudentOfCourseFromRequest(String courseId) {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // TODO: Rename method to remove Sql after migration."},{"lineNumber":94,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return sqlLogic.getStudentForEmail(courseId, moderatedPerson);"},{"lineNumber":99,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" return sqlLogic.getStudentForEmail(courseId, previewAsPerson);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" return getPossiblyUnregisteredSqlStudent(courseId);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Checks the access control for student feedback submission."},{"lineNumber":108,"author":{"gitId":"-"},"content":" */"},{"lineNumber":109,"author":{"gitId":"-"},"content":" void checkAccessControlForStudentFeedbackSubmission("},{"lineNumber":110,"author":{"gitId":"-"},"content":" StudentAttributes student, FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent student entity\");"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":120,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":121,"author":{"gitId":"-"},"content":" logic.getInstructorForGoogleId(feedbackSession.getCourseId(), userInfo.getId()), feedbackSession,"},{"lineNumber":122,"author":{"gitId":"-"},"content":" student.getSection(),"},{"lineNumber":123,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS);"},{"lineNumber":124,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, false);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(student, feedbackSession);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(student.getGoogleId());"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Checks the access control for student feedback submission."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" void checkAccessControlForStudentFeedbackSubmission(Student student, FeedbackSession feedbackSession)"},{"lineNumber":136,"author":{"gitId":"-"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent student entity\");"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":147,"author":{"gitId":"-"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()), feedbackSession,"},{"lineNumber":148,"author":{"gitId":"-"},"content":" student.getSectionName(),"},{"lineNumber":149,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":153,"author":{"gitId":"-"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()), feedbackSession,"},{"lineNumber":154,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(student, feedbackSession);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" if (student.getAccount() !\u003d null) {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" if (userInfo \u003d\u003d null) {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" // Student is associated with an account; even if registration key is passed, do not allow access"},{"lineNumber":160,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Login is required to access this feedback session\");"},{"lineNumber":161,"author":{"gitId":"-"},"content":" } else if (!userInfo.id.equals(student.getAccount().getGoogleId())) {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" // Logged in student is not the same as the student registered for the given key, do not allow access"},{"lineNumber":163,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"You are not authorized to access this feedback session\");"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":" }"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":170,"author":{"gitId":"-"},"content":" * Checks the access control for student feedback result."},{"lineNumber":171,"author":{"gitId":"-"},"content":" */"},{"lineNumber":172,"author":{"gitId":"-"},"content":" void checkAccessControlForStudentFeedbackResult("},{"lineNumber":173,"author":{"gitId":"-"},"content":" StudentAttributes student, FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent student entity\");"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(student, feedbackSession);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(student.getGoogleId());"},{"lineNumber":183,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, false);"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":" * Checks the access control for student feedback result."},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" void checkAccessControlForStudentFeedbackResult("},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" Student student, FeedbackSession feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent student entity\");"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" if (StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible(student, feedbackSession);"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" verifyMatchingGoogleId(student.getGoogleId());"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" checkAccessControlForPreview(feedbackSession, false);"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * Gets the instructor involved in the submission process."},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" InstructorAttributes getInstructorOfCourseFromRequest(String courseId) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" return logic.getInstructorForEmail(courseId, moderatedPerson);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" return logic.getInstructorForEmail(courseId, previewAsPerson);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" return getPossiblyUnregisteredInstructor(courseId);"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":224,"author":{"gitId":"-"},"content":" * Gets the instructor involved in the submission process."},{"lineNumber":225,"author":{"gitId":"-"},"content":" */"},{"lineNumber":226,"author":{"gitId":"-"},"content":" Instructor getSqlInstructorOfCourseFromRequest(String courseId) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" return sqlLogic.getInstructorForEmail(courseId, moderatedPerson);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" return sqlLogic.getInstructorForEmail(courseId, previewAsPerson);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" return getPossiblyUnregisteredSqlInstructor(courseId);"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * Checks the access control for instructor feedback submission."},{"lineNumber":241,"author":{"gitId":"-"},"content":" */"},{"lineNumber":242,"author":{"gitId":"-"},"content":" void checkAccessControlForInstructorFeedbackSubmission("},{"lineNumber":243,"author":{"gitId":"-"},"content":" InstructorAttributes instructor, FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent instructor entity\");"},{"lineNumber":246,"author":{"gitId":"-"},"content":" }"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":249,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":253,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(logic.getInstructorForGoogleId(feedbackSession.getCourseId(), userInfo.getId()),"},{"lineNumber":254,"author":{"gitId":"-"},"content":" feedbackSession, Const.InstructorPermissions.CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS);"},{"lineNumber":255,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":256,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, true);"},{"lineNumber":257,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" gateKeeper.verifySessionSubmissionPrivilegeForInstructor(feedbackSession, instructor);"},{"lineNumber":259,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(instructor.getGoogleId());"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":264,"author":{"gitId":"-"},"content":" * Checks the access control for instructor feedback submission."},{"lineNumber":265,"author":{"gitId":"-"},"content":" */"},{"lineNumber":266,"author":{"gitId":"-"},"content":" void checkAccessControlForInstructorFeedbackSubmission("},{"lineNumber":267,"author":{"gitId":"-"},"content":" Instructor instructor, FeedbackSession feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":268,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent instructor entity\");"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":277,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":278,"author":{"gitId":"-"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()),"},{"lineNumber":279,"author":{"gitId":"-"},"content":" feedbackSession, Const.InstructorPermissions.CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":283,"author":{"gitId":"-"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()),"},{"lineNumber":284,"author":{"gitId":"-"},"content":" feedbackSession, Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":285,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" gateKeeper.verifySessionSubmissionPrivilegeForInstructor(feedbackSession, instructor);"},{"lineNumber":287,"author":{"gitId":"-"},"content":" if (instructor.getAccount() !\u003d null) {"},{"lineNumber":288,"author":{"gitId":"-"},"content":" if (userInfo \u003d\u003d null) {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" // Instructor is associated to an account; even if registration key is passed, do not allow access"},{"lineNumber":290,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Login is required to access this feedback session\");"},{"lineNumber":291,"author":{"gitId":"-"},"content":" } else if (!userInfo.id.equals(instructor.getAccount().getGoogleId())) {"},{"lineNumber":292,"author":{"gitId":"-"},"content":" // Logged in instructor is not the same as the instructor registered for the given key,"},{"lineNumber":293,"author":{"gitId":"-"},"content":" // do not allow access"},{"lineNumber":294,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"You are not authorized to access this feedback session\");"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":" }"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":301,"author":{"gitId":"-"},"content":" * Checks the access control for instructor feedback result."},{"lineNumber":302,"author":{"gitId":"-"},"content":" */"},{"lineNumber":303,"author":{"gitId":"-"},"content":" void checkAccessControlForInstructorFeedbackResult("},{"lineNumber":304,"author":{"gitId":"-"},"content":" InstructorAttributes instructor, FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":306,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent instructor entity\");"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, feedbackSession,"},{"lineNumber":313,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_VIEW_SESSION_IN_SECTIONS);"},{"lineNumber":314,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(instructor.getGoogleId());"},{"lineNumber":315,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, true);"},{"lineNumber":317,"author":{"gitId":"-"},"content":" }"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":321,"author":{"gitId":"-"},"content":" * Checks the access control for instructor feedback result."},{"lineNumber":322,"author":{"gitId":"-"},"content":" */"},{"lineNumber":323,"author":{"gitId":"-"},"content":" void checkAccessControlForInstructorFeedbackResult("},{"lineNumber":324,"author":{"gitId":"-"},"content":" Instructor instructor, FeedbackSession feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":325,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":326,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent instructor entity\");"},{"lineNumber":327,"author":{"gitId":"-"},"content":" }"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":330,"author":{"gitId":"-"},"content":""},{"lineNumber":331,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, feedbackSession,"},{"lineNumber":333,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_VIEW_SESSION_IN_SECTIONS);"},{"lineNumber":334,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(instructor.getGoogleId());"},{"lineNumber":335,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, true);"},{"lineNumber":337,"author":{"gitId":"-"},"content":" }"},{"lineNumber":338,"author":{"gitId":"-"},"content":" }"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":" private void verifyMatchingGoogleId(String googleId) throws UnauthorizedAccessException {"},{"lineNumber":341,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(googleId)) {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" if (userInfo \u003d\u003d null) {"},{"lineNumber":343,"author":{"gitId":"-"},"content":" // Student/Instructor is associated to a google ID; even if registration key is passed, do not allow access"},{"lineNumber":344,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Login is required to access this feedback session\");"},{"lineNumber":345,"author":{"gitId":"-"},"content":" } else if (!userInfo.id.equals(googleId)) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" // Logged in student/instructor is not the same as the student/instructor registered for the given key,"},{"lineNumber":347,"author":{"gitId":"-"},"content":" // do not allow access"},{"lineNumber":348,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"You are not authorized to access this feedback session\");"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" private void checkAccessControlForPreview(FeedbackSessionAttributes feedbackSession, boolean isInstructor)"},{"lineNumber":354,"author":{"gitId":"-"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":356,"author":{"gitId":"-"},"content":" if (isInstructor) {"},{"lineNumber":357,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":358,"author":{"gitId":"-"},"content":" logic.getInstructorForGoogleId(feedbackSession.getCourseId(), userInfo.getId()), feedbackSession,"},{"lineNumber":359,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":360,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":361,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":362,"author":{"gitId":"-"},"content":" logic.getInstructorForGoogleId(feedbackSession.getCourseId(), userInfo.getId()), feedbackSession,"},{"lineNumber":363,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":366,"author":{"gitId":"-"},"content":""},{"lineNumber":367,"author":{"gitId":"xenosf"},"content":" private void checkAccessControlForPreview(FeedbackSession feedbackSession, boolean isInstructor)"},{"lineNumber":368,"author":{"gitId":"xenosf"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":369,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":370,"author":{"gitId":"xenosf"},"content":" if (isInstructor) {"},{"lineNumber":371,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":372,"author":{"gitId":"xenosf"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()), feedbackSession,"},{"lineNumber":373,"author":{"gitId":"xenosf"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":374,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":375,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":376,"author":{"gitId":"xenosf"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()), feedbackSession,"},{"lineNumber":377,"author":{"gitId":"xenosf"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":378,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":379,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":380,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":382,"author":{"gitId":"-"},"content":" * Verifies that it is not a preview request."},{"lineNumber":383,"author":{"gitId":"-"},"content":" */"},{"lineNumber":384,"author":{"gitId":"-"},"content":" void verifyNotPreview() throws UnauthorizedAccessException {"},{"lineNumber":385,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":386,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":387,"author":{"gitId":"-"},"content":" // should not view response under preview mode"},{"lineNumber":388,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"You are not allowed to see responses when previewing\", true);"},{"lineNumber":389,"author":{"gitId":"-"},"content":" }"},{"lineNumber":390,"author":{"gitId":"-"},"content":" }"},{"lineNumber":391,"author":{"gitId":"-"},"content":""},{"lineNumber":392,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":393,"author":{"gitId":"-"},"content":" * Verifies that the session is open for submission."},{"lineNumber":394,"author":{"gitId":"-"},"content":" *"},{"lineNumber":395,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf it is moderation request, omit the check."},{"lineNumber":396,"author":{"gitId":"-"},"content":" */"},{"lineNumber":397,"author":{"gitId":"-"},"content":" void verifySessionOpenExceptForModeration(FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":398,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":399,"author":{"gitId":"-"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(moderatedPerson) \u0026\u0026 !(feedbackSession.isOpened() || feedbackSession.isInGracePeriod())) {"},{"lineNumber":401,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"The feedback session is not available for submission\", true);"},{"lineNumber":402,"author":{"gitId":"-"},"content":" }"},{"lineNumber":403,"author":{"gitId":"-"},"content":" }"},{"lineNumber":404,"author":{"gitId":"-"},"content":""},{"lineNumber":405,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":406,"author":{"gitId":"-"},"content":" * Verifies that the session is open for submission."},{"lineNumber":407,"author":{"gitId":"-"},"content":" *"},{"lineNumber":408,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf it is moderation request, omit the check."},{"lineNumber":409,"author":{"gitId":"-"},"content":" */"},{"lineNumber":410,"author":{"gitId":"-"},"content":" void verifySessionOpenExceptForModeration(FeedbackSession feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":411,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(moderatedPerson) \u0026\u0026 !(feedbackSession.isOpened() || feedbackSession.isInGracePeriod())) {"},{"lineNumber":414,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"The feedback session is not available for submission\", true);"},{"lineNumber":415,"author":{"gitId":"-"},"content":" }"},{"lineNumber":416,"author":{"gitId":"-"},"content":" }"},{"lineNumber":417,"author":{"gitId":"-"},"content":""},{"lineNumber":418,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":419,"author":{"gitId":"-"},"content":" * Gets the section of a recipient."},{"lineNumber":420,"author":{"gitId":"-"},"content":" */"},{"lineNumber":421,"author":{"gitId":"-"},"content":" Section getRecipientSection("},{"lineNumber":422,"author":{"gitId":"-"},"content":" String courseId, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":423,"author":{"gitId":"-"},"content":" String recipientIdentifier) {"},{"lineNumber":424,"author":{"gitId":"-"},"content":""},{"lineNumber":425,"author":{"gitId":"-"},"content":" switch (recipientType) {"},{"lineNumber":426,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":427,"author":{"gitId":"-"},"content":" switch (giverType) {"},{"lineNumber":428,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":429,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":430,"author":{"gitId":"-"},"content":" return Const.DEFAULT_SQL_SECTION;"},{"lineNumber":431,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":432,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":433,"author":{"gitId":"-"},"content":" Section section \u003d sqlLogic.getSectionByCourseIdAndTeam(courseId, recipientIdentifier);"},{"lineNumber":434,"author":{"gitId":"-"},"content":" return section \u003d\u003d null ? Const.DEFAULT_SQL_SECTION : section;"},{"lineNumber":435,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":436,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":437,"author":{"gitId":"-"},"content":" Student student \u003d sqlLogic.getStudentForEmail(courseId, recipientIdentifier);"},{"lineNumber":438,"author":{"gitId":"-"},"content":" return student \u003d\u003d null ? Const.DEFAULT_SQL_SECTION : student.getSection();"},{"lineNumber":439,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":440,"author":{"gitId":"-"},"content":" assert false : \"Invalid giver type \" + giverType + \" for recipient type \" + recipientType;"},{"lineNumber":441,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":442,"author":{"gitId":"-"},"content":" }"},{"lineNumber":443,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":444,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":445,"author":{"gitId":"-"},"content":" return Const.DEFAULT_SQL_SECTION;"},{"lineNumber":446,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":447,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":448,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":449,"author":{"gitId":"-"},"content":" case OWN_TEAM:"},{"lineNumber":450,"author":{"gitId":"-"},"content":" Section section \u003d sqlLogic.getSectionByCourseIdAndTeam(courseId, recipientIdentifier);"},{"lineNumber":451,"author":{"gitId":"-"},"content":" return section \u003d\u003d null ? Const.DEFAULT_SQL_SECTION : section;"},{"lineNumber":452,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":453,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":454,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":455,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":456,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":457,"author":{"gitId":"-"},"content":" Student student \u003d sqlLogic.getStudentForEmail(courseId, recipientIdentifier);"},{"lineNumber":458,"author":{"gitId":"-"},"content":" return student \u003d\u003d null ? Const.DEFAULT_SQL_SECTION : student.getSection();"},{"lineNumber":459,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":460,"author":{"gitId":"-"},"content":" assert false : \"Unknown recipient type \" + recipientType;"},{"lineNumber":461,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":462,"author":{"gitId":"-"},"content":" }"},{"lineNumber":463,"author":{"gitId":"-"},"content":" }"},{"lineNumber":464,"author":{"gitId":"-"},"content":""},{"lineNumber":465,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":466,"author":{"gitId":"-"},"content":" * Gets the section of a recipient."},{"lineNumber":467,"author":{"gitId":"-"},"content":" */"},{"lineNumber":468,"author":{"gitId":"-"},"content":" String getDatastoreRecipientSection("},{"lineNumber":469,"author":{"gitId":"-"},"content":" String courseId, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":470,"author":{"gitId":"-"},"content":" String recipientIdentifier) {"},{"lineNumber":471,"author":{"gitId":"-"},"content":" switch (recipientType) {"},{"lineNumber":472,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":473,"author":{"gitId":"-"},"content":" switch (giverType) {"},{"lineNumber":474,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":475,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":476,"author":{"gitId":"-"},"content":" return Const.DEFAULT_SECTION;"},{"lineNumber":477,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":478,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":479,"author":{"gitId":"-"},"content":" return logic.getSectionForTeam(courseId, recipientIdentifier);"},{"lineNumber":480,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":481,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":482,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d logic.getStudentForEmail(courseId, recipientIdentifier);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" return student \u003d\u003d null ? Const.DEFAULT_SECTION : student.getSection();"},{"lineNumber":484,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":485,"author":{"gitId":"-"},"content":" assert false : \"Invalid giver type \" + giverType + \" for recipient type \" + recipientType;"},{"lineNumber":486,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":488,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":489,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":490,"author":{"gitId":"-"},"content":" return Const.DEFAULT_SECTION;"},{"lineNumber":491,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":492,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":493,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":494,"author":{"gitId":"-"},"content":" case OWN_TEAM:"},{"lineNumber":495,"author":{"gitId":"-"},"content":" return logic.getSectionForTeam(courseId, recipientIdentifier);"},{"lineNumber":496,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":497,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":498,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":499,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":500,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":501,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d logic.getStudentForEmail(courseId, recipientIdentifier);"},{"lineNumber":502,"author":{"gitId":"-"},"content":" return student \u003d\u003d null ? Const.DEFAULT_SECTION : student.getSection();"},{"lineNumber":503,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":504,"author":{"gitId":"-"},"content":" assert false : \"Unknown recipient type \" + recipientType;"},{"lineNumber":505,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":506,"author":{"gitId":"-"},"content":" }"},{"lineNumber":507,"author":{"gitId":"-"},"content":" }"},{"lineNumber":508,"author":{"gitId":"-"},"content":""},{"lineNumber":509,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":33,"-":476}},{"path":"src/main/java/teammates/ui/webapi/CreateFeedbackQuestionAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":8,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackQuestionData;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackQuestionCreateRequest;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Creates a feedback question."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class CreateFeedbackQuestionAction extends Action {"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":30,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" InstructorAttributes instructorDetailForCourse \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!isCourseMigrated(courseId)) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructorDetailForCourse,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" getNonNullFeedbackSession(feedbackSessionName, courseId),"},{"lineNumber":35,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" // TODO: Remove sql from variable name after migration"},{"lineNumber":40,"author":{"gitId":"-"},"content":" Instructor sqlInstructorDetailForCourse \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":41,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(sqlInstructorDetailForCourse,"},{"lineNumber":42,"author":{"gitId":"-"},"content":" getNonNullSqlFeedbackSession(feedbackSessionName, courseId),"},{"lineNumber":43,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" FeedbackQuestionCreateRequest request \u003d getAndValidateRequestBody(FeedbackQuestionCreateRequest.class);"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (!isCourseMigrated(courseId)) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return executeWithDataStore(courseId, feedbackSessionName, request);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion \u003d FeedbackQuestion.makeQuestion("},{"lineNumber":57,"author":{"gitId":"-"},"content":" getNonNullSqlFeedbackSession(feedbackSessionName, courseId),"},{"lineNumber":58,"author":{"gitId":"-"},"content":" request.getQuestionNumber(),"},{"lineNumber":59,"author":{"gitId":"-"},"content":" request.getQuestionDescription(),"},{"lineNumber":60,"author":{"gitId":"-"},"content":" request.getGiverType(),"},{"lineNumber":61,"author":{"gitId":"-"},"content":" request.getRecipientType(),"},{"lineNumber":62,"author":{"gitId":"-"},"content":" request.getNumberOfEntitiesToGiveFeedbackTo(),"},{"lineNumber":63,"author":{"gitId":"-"},"content":" request.getShowResponsesTo(),"},{"lineNumber":64,"author":{"gitId":"-"},"content":" request.getShowGiverNameTo(),"},{"lineNumber":65,"author":{"gitId":"-"},"content":" request.getShowRecipientNameTo(),"},{"lineNumber":66,"author":{"gitId":"-"},"content":" request.getQuestionDetails()"},{"lineNumber":67,"author":{"gitId":"-"},"content":" );"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" // validate questions (giver \u0026 recipient)"},{"lineNumber":71,"author":{"gitId":"-"},"content":" String err \u003d feedbackQuestion.getQuestionDetailsCopy().validateGiverRecipientVisibility(feedbackQuestion);"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" if (!err.isEmpty()) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(err);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":" // validate questions (question details)"},{"lineNumber":77,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":78,"author":{"gitId":"-"},"content":" List\u003cString\u003e questionDetailsErrors \u003d questionDetails.validateQuestionDetails();"},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (!questionDetailsErrors.isEmpty()) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(questionDetailsErrors.toString());"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d sqlLogic.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return new JsonResult(new FeedbackQuestionData(feedbackQuestion));"},{"lineNumber":84,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException ex) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(ex);"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":87,"author":{"gitId":"marquestye"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" private JsonResult executeWithDataStore(String courseId, String feedbackSessionName,"},{"lineNumber":92,"author":{"gitId":"-"},"content":" FeedbackQuestionCreateRequest request) throws InvalidHttpRequestBodyException {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes attributes \u003d FeedbackQuestionAttributes.builder()"},{"lineNumber":94,"author":{"gitId":"-"},"content":" .withCourseId(courseId)"},{"lineNumber":95,"author":{"gitId":"-"},"content":" .withFeedbackSessionName(feedbackSessionName)"},{"lineNumber":96,"author":{"gitId":"-"},"content":" .withGiverType(request.getGiverType())"},{"lineNumber":97,"author":{"gitId":"-"},"content":" .withRecipientType(request.getRecipientType())"},{"lineNumber":98,"author":{"gitId":"-"},"content":" .withQuestionNumber(request.getQuestionNumber())"},{"lineNumber":99,"author":{"gitId":"-"},"content":" .withNumberOfEntitiesToGiveFeedbackTo(request.getNumberOfEntitiesToGiveFeedbackTo())"},{"lineNumber":100,"author":{"gitId":"-"},"content":" .withShowResponsesTo(request.getShowResponsesTo())"},{"lineNumber":101,"author":{"gitId":"-"},"content":" .withShowGiverNameTo(request.getShowGiverNameTo())"},{"lineNumber":102,"author":{"gitId":"-"},"content":" .withShowRecipientNameTo(request.getShowRecipientNameTo())"},{"lineNumber":103,"author":{"gitId":"-"},"content":" .withQuestionDetails(request.getQuestionDetails())"},{"lineNumber":104,"author":{"gitId":"-"},"content":" .withQuestionDescription(request.getQuestionDescription())"},{"lineNumber":105,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" // validate questions (giver \u0026 recipient)"},{"lineNumber":108,"author":{"gitId":"-"},"content":" String err \u003d attributes.getQuestionDetailsCopy().validateGiverRecipientVisibility(attributes);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" if (!err.isEmpty()) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(err);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":" // validate questions (question details)"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d attributes.getQuestionDetailsCopy();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" List\u003cString\u003e questionDetailsErrors \u003d questionDetails.validateQuestionDetails();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" if (!questionDetailsErrors.isEmpty()) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(String.join(\"\\n\", questionDetailsErrors));"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" attributes \u003d logic.createFeedbackQuestion(attributes);"},{"lineNumber":121,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" return new JsonResult(new FeedbackQuestionData(attributes));"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":4,"-":124}},{"path":"src/main/java/teammates/ui/webapi/CreateFeedbackSessionAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPermissionSet;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionData;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackSessionCreateRequest;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Create a feedback session."},{"lineNumber":27,"author":{"gitId":"-"},"content":" */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"public class CreateFeedbackSessionAction extends Action {"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":33,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":43,"author":{"gitId":"-"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, course, Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":48,"author":{"gitId":"-"},"content":" CourseAttributes course \u003d logic.getCourse(courseId);"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, course, Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" FeedbackSessionCreateRequest createRequest \u003d"},{"lineNumber":58,"author":{"gitId":"-"},"content":" getAndValidateRequestBody(FeedbackSessionCreateRequest.class);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d SanitizationHelper.sanitizeTitle(createRequest.getFeedbackSessionName());"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Failed to find course with the given course id.\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Failed to find instructor with the given courseId and googleId.\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" String timeZone \u003d course.getTimeZone();"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" Instant startTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":74,"author":{"gitId":"-"},"content":" createRequest.getSubmissionStartTime(), timeZone, true);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" String startTimeError \u003d FieldValidator.getInvalidityInfoForNewStartTime(startTime, timeZone);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" if (!startTimeError.isEmpty()) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid submission opening time: \" + startTimeError);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Instant endTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":80,"author":{"gitId":"-"},"content":" createRequest.getSubmissionEndTime(), timeZone, true);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" String endTimeError \u003d FieldValidator.getInvalidityInfoForNewEndTime(endTime, timeZone);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (!endTimeError.isEmpty()) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid submission closing time: \" + endTimeError);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Instant sessionVisibleTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":86,"author":{"gitId":"-"},"content":" createRequest.getSessionVisibleFromTime(), timeZone, true);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" String visibilityStartAndSessionStartTimeError \u003d"},{"lineNumber":88,"author":{"gitId":"-"},"content":" FieldValidator.getInvalidityInfoForTimeForNewVisibilityStart(sessionVisibleTime, startTime);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (!visibilityStartAndSessionStartTimeError.isEmpty()) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid session visible time: \""},{"lineNumber":91,"author":{"gitId":"-"},"content":" + visibilityStartAndSessionStartTimeError);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":" Instant resultsVisibleTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":94,"author":{"gitId":"-"},"content":" createRequest.getResultsVisibleFromTime(), timeZone, true);"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession \u003d new FeedbackSession("},{"lineNumber":97,"author":{"gitId":"-"},"content":" feedbackSessionName,"},{"lineNumber":98,"author":{"gitId":"-"},"content":" course,"},{"lineNumber":99,"author":{"gitId":"-"},"content":" instructor.getEmail(),"},{"lineNumber":100,"author":{"gitId":"-"},"content":" createRequest.getInstructions(),"},{"lineNumber":101,"author":{"gitId":"-"},"content":" startTime,"},{"lineNumber":102,"author":{"gitId":"-"},"content":" endTime,"},{"lineNumber":103,"author":{"gitId":"-"},"content":" sessionVisibleTime,"},{"lineNumber":104,"author":{"gitId":"-"},"content":" resultsVisibleTime,"},{"lineNumber":105,"author":{"gitId":"-"},"content":" createRequest.getGracePeriod(),"},{"lineNumber":106,"author":{"gitId":"-"},"content":" true,"},{"lineNumber":107,"author":{"gitId":"-"},"content":" createRequest.isClosingEmailEnabled(),"},{"lineNumber":108,"author":{"gitId":"-"},"content":" createRequest.isPublishedEmailEnabled()"},{"lineNumber":109,"author":{"gitId":"-"},"content":" );"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" feedbackSession \u003d sqlLogic.createFeedbackSession(feedbackSession);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(\"A session named \" + feedbackSessionName"},{"lineNumber":115,"author":{"gitId":"-"},"content":" + \" exists already in the course \" + course.getName()"},{"lineNumber":116,"author":{"gitId":"-"},"content":" + \" (Course ID: \" + courseId + \")\", e);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" if (createRequest.getToCopyCourseId() !\u003d null) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" createCopiedFeedbackQuestions(createRequest.getToCopyCourseId(), courseId,"},{"lineNumber":123,"author":{"gitId":"-"},"content":" feedbackSessionName, createRequest.getToCopySessionName());"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":" FeedbackSessionData output \u003d new FeedbackSessionData(feedbackSession);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" InstructorPermissionSet privilege \u003d constructInstructorPrivileges(instructor, feedbackSessionName);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" output.setPrivileges(privilege);"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" return new JsonResult(output);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" CourseAttributes course \u003d logic.getCourse(courseId);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" String timeZone \u003d course.getTimeZone();"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" Instant startTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":135,"author":{"gitId":"-"},"content":" createRequest.getSubmissionStartTime(), timeZone, true);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" String startTimeError \u003d FieldValidator.getInvalidityInfoForNewStartTime(startTime, timeZone);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" if (!startTimeError.isEmpty()) {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid submission opening time: \" + startTimeError);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }"},{"lineNumber":140,"author":{"gitId":"-"},"content":" Instant endTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":141,"author":{"gitId":"-"},"content":" createRequest.getSubmissionEndTime(), timeZone, true);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" String endTimeError \u003d FieldValidator.getInvalidityInfoForNewEndTime(endTime, timeZone);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" if (!endTimeError.isEmpty()) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid submission closing time: \" + endTimeError);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":" Instant sessionVisibleTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":147,"author":{"gitId":"-"},"content":" createRequest.getSessionVisibleFromTime(), timeZone, true);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" String visibilityStartAndSessionStartTimeError \u003d"},{"lineNumber":149,"author":{"gitId":"-"},"content":" FieldValidator.getInvalidityInfoForTimeForNewVisibilityStart(sessionVisibleTime, startTime);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" if (!visibilityStartAndSessionStartTimeError.isEmpty()) {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid session visible time: \""},{"lineNumber":152,"author":{"gitId":"-"},"content":" + visibilityStartAndSessionStartTimeError);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":" Instant resultsVisibleTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":155,"author":{"gitId":"-"},"content":" createRequest.getResultsVisibleFromTime(), timeZone, true);"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes fs \u003d"},{"lineNumber":160,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes"},{"lineNumber":161,"author":{"gitId":"-"},"content":" .builder(feedbackSessionName, course.getId())"},{"lineNumber":162,"author":{"gitId":"-"},"content":" .withCreatorEmail(instructor.getEmail())"},{"lineNumber":163,"author":{"gitId":"-"},"content":" .withTimeZone(course.getTimeZone())"},{"lineNumber":164,"author":{"gitId":"-"},"content":" .withInstructions(createRequest.getInstructions())"},{"lineNumber":165,"author":{"gitId":"-"},"content":" .withStartTime(startTime)"},{"lineNumber":166,"author":{"gitId":"-"},"content":" .withEndTime(endTime)"},{"lineNumber":167,"author":{"gitId":"-"},"content":" .withGracePeriod(createRequest.getGracePeriod())"},{"lineNumber":168,"author":{"gitId":"-"},"content":" .withSessionVisibleFromTime(sessionVisibleTime)"},{"lineNumber":169,"author":{"gitId":"-"},"content":" .withResultsVisibleFromTime(resultsVisibleTime)"},{"lineNumber":170,"author":{"gitId":"-"},"content":" .withIsClosingEmailEnabled(createRequest.isClosingEmailEnabled())"},{"lineNumber":171,"author":{"gitId":"-"},"content":" .withIsPublishedEmailEnabled(createRequest.isPublishedEmailEnabled())"},{"lineNumber":172,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":173,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" logic.createFeedbackSession(fs);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(\"A session named \" + feedbackSessionName"},{"lineNumber":177,"author":{"gitId":"-"},"content":" + \" exists already in the course \" + course.getName()"},{"lineNumber":178,"author":{"gitId":"-"},"content":" + \" (Course ID: \" + courseId + \")\", e);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" if (createRequest.getToCopyCourseId() !\u003d null) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" createFeedbackQuestions(createRequest.getToCopyCourseId(), courseId, feedbackSessionName,"},{"lineNumber":185,"author":{"gitId":"-"},"content":" createRequest.getToCopySessionName());"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":" fs \u003d getNonNullFeedbackSession(fs.getFeedbackSessionName(), fs.getCourseId());"},{"lineNumber":188,"author":{"gitId":"-"},"content":" FeedbackSessionData output \u003d new FeedbackSessionData(fs);"},{"lineNumber":189,"author":{"gitId":"-"},"content":" InstructorPermissionSet privilege \u003d constructInstructorPrivileges(instructor, feedbackSessionName);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" output.setPrivileges(privilege);"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" return new JsonResult(output);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" private void createCopiedFeedbackQuestions(String oldCourseId, String newCourseId,"},{"lineNumber":197,"author":{"gitId":"-"},"content":" String newFeedbackSessionName, String oldFeedbackSessionName) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" FeedbackSession oldFeedbackSession \u003d sqlLogic.getFeedbackSession(oldFeedbackSessionName, oldCourseId);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" FeedbackSession newFeedbackSession \u003d sqlLogic.getFeedbackSession(newFeedbackSessionName, newCourseId);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" sqlLogic.getFeedbackQuestionsForSession(oldFeedbackSession).forEach(question -\u003e {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion \u003d question.makeDeepCopy(newFeedbackSession);"},{"lineNumber":202,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" sqlLogic.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":204,"author":{"gitId":"marquestye"},"content":" } catch (InvalidParametersException | EntityAlreadyExistsException e) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" log.severe(\"Error when copying feedback question: \" + e.getMessage());"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":" });"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":" private void createFeedbackQuestions(String copyCourseId, String newCourseId, String feedbackSessionName,"},{"lineNumber":211,"author":{"gitId":"-"},"content":" String oldSessionName) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" logic.getFeedbackQuestionsForSession(oldSessionName, copyCourseId).forEach(question -\u003e {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes attributes \u003d FeedbackQuestionAttributes.builder()"},{"lineNumber":214,"author":{"gitId":"-"},"content":" .withCourseId(newCourseId)"},{"lineNumber":215,"author":{"gitId":"-"},"content":" .withFeedbackSessionName(feedbackSessionName)"},{"lineNumber":216,"author":{"gitId":"-"},"content":" .withGiverType(question.getGiverType())"},{"lineNumber":217,"author":{"gitId":"-"},"content":" .withRecipientType(question.getRecipientType())"},{"lineNumber":218,"author":{"gitId":"-"},"content":" .withQuestionNumber(question.getQuestionNumber())"},{"lineNumber":219,"author":{"gitId":"-"},"content":" .withNumberOfEntitiesToGiveFeedbackTo(question.getNumberOfEntitiesToGiveFeedbackTo())"},{"lineNumber":220,"author":{"gitId":"-"},"content":" .withShowResponsesTo(question.getShowResponsesTo())"},{"lineNumber":221,"author":{"gitId":"-"},"content":" .withShowGiverNameTo(question.getShowGiverNameTo())"},{"lineNumber":222,"author":{"gitId":"-"},"content":" .withShowRecipientNameTo(question.getShowRecipientNameTo())"},{"lineNumber":223,"author":{"gitId":"-"},"content":" .withQuestionDetails(question.getQuestionDetails())"},{"lineNumber":224,"author":{"gitId":"-"},"content":" .withQuestionDescription(question.getQuestionDescription())"},{"lineNumber":225,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" logic.createFeedbackQuestion(attributes);"},{"lineNumber":229,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" log.severe(\"Error when copying feedback question: \" + e.getMessage());"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":" });"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }"},{"lineNumber":234,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":1,"-":233}},{"path":"src/main/java/teammates/ui/webapi/CreateInstructorAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.InstructorPermissionRole;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPrivileges;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.request.InstructorCreateRequest;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Action: adds another instructor to a course that already exists."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"public class CreateInstructorAction extends Action {"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":22,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":27,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" if (userInfo.isAdmin) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!userInfo.isInstructor) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Instructor privilege is required to access this resource.\");"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.id);"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" instructor, sqlLogic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR);"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" } else {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.id);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":45,"author":{"gitId":"-"},"content":" instructor, logic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" InstructorCreateRequest instructorRequest \u003d getAndValidateRequestBody(InstructorCreateRequest.class);"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" return executeWithSql(courseId, instructorRequest);"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" } else {"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" return executeWithDataStore(courseId, instructorRequest);"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" throw new InvalidOperationException("},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"An instructor with the same email address already exists in the course.\", e);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" /**"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" * Executes the action using SQL storage."},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" *"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" * @param courseId Id of the course the instructor is being added"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" * to."},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" * @param instructorRequest Request body containing the instructor\u0027s info."},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" * @return The Json result of the created Instructor"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * @throws InvalidParametersException If a parameter is invalid"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" * @throws EntityAlreadyExistsException If there is a conflict at the email"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" * field"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" private JsonResult executeWithSql(String courseId, InstructorCreateRequest instructorRequest)"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" Instructor instructorToAdd \u003d createInstructorWithBasicAttributesSql(courseId,"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" SanitizationHelper.sanitizeName(instructorRequest.getName()),"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" SanitizationHelper.sanitizeEmail(instructorRequest.getEmail()), instructorRequest.getRoleName(),"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" instructorRequest.getIsDisplayedToStudent(),"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" SanitizationHelper.sanitizeName(instructorRequest.getDisplayName()));"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" Instructor createdInstructor \u003d sqlLogic.createInstructor(instructorToAdd);"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" taskQueuer.scheduleCourseRegistrationInviteToInstructor("},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" this.userInfo.id, instructorToAdd.getEmail(), courseId, false);"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" taskQueuer.scheduleInstructorForSearchIndexing(createdInstructor.getCourseId(), createdInstructor.getEmail());"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" return new JsonResult(new InstructorData(createdInstructor));"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" * Executes the action using Datastore storage."},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" *"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" * @param courseId Id of the course the instructor is being added"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" * to."},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" * @param instructorRequest Request body containing the instructor\u0027s info."},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" * @return The Json result of the created Instructor"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" * @throws InvalidParametersException If a parameter is invalid"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" * @throws EntityAlreadyExistsException If there is a conflict at the email"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" * field"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" private JsonResult executeWithDataStore(String courseId, InstructorCreateRequest instructorRequest)"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" InstructorAttributes instructorToAdd \u003d createInstructorWithBasicAttributes(courseId,"},{"lineNumber":111,"author":{"gitId":"-"},"content":" instructorRequest.getName(), instructorRequest.getEmail(), instructorRequest.getRoleName(),"},{"lineNumber":112,"author":{"gitId":"-"},"content":" instructorRequest.getIsDisplayedToStudent(), instructorRequest.getDisplayName());"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" InstructorAttributes createdInstructor \u003d logic.createInstructor(instructorToAdd);"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" taskQueuer.scheduleCourseRegistrationInviteToInstructor("},{"lineNumber":117,"author":{"gitId":"-"},"content":" userInfo.id, instructorToAdd.getEmail(), instructorToAdd.getCourseId(), false);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" taskQueuer.scheduleInstructorForSearchIndexing(createdInstructor.getCourseId(), createdInstructor.getEmail());"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" return new JsonResult(new InstructorData(createdInstructor));"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" /**"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" * Creates a new instructor with basic information."},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" * This consists of everything apart from custom privileges."},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" *"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" * @param courseId Id of the course the instructor is being added"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" * to."},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" * @param instructorName Name of the instructor."},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" * @param instructorEmail Email of the instructor."},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" * @param instructorRole Role of the instructor."},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" * @param isDisplayedToStudents Whether the instructor should be visible to"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":" * students."},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" * @param displayedName Name to be visible to students."},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":" * Should not be {@code null} even if"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":" * {@code isDisplayedToStudents} is false."},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":" * @return An instructor with basic info, excluding custom privileges"},{"lineNumber":138,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":139,"author":{"gitId":"mingyuanc"},"content":" private Instructor createInstructorWithBasicAttributesSql(String courseId, String instructorName,"},{"lineNumber":140,"author":{"gitId":"mingyuanc"},"content":" String instructorEmail, String instructorRole,"},{"lineNumber":141,"author":{"gitId":"mingyuanc"},"content":" boolean isDisplayedToStudents, String displayedName) {"},{"lineNumber":142,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":143,"author":{"gitId":"mingyuanc"},"content":" String instrName \u003d SanitizationHelper.sanitizeName(instructorName);"},{"lineNumber":144,"author":{"gitId":"mingyuanc"},"content":" String instrEmail \u003d SanitizationHelper.sanitizeEmail(instructorEmail);"},{"lineNumber":145,"author":{"gitId":"mingyuanc"},"content":" String instrRole \u003d SanitizationHelper.sanitizeName(instructorRole);"},{"lineNumber":146,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":147,"author":{"gitId":"mingyuanc"},"content":" String instrDisplayedName \u003d displayedName;"},{"lineNumber":148,"author":{"gitId":"mingyuanc"},"content":" if (displayedName \u003d\u003d null || displayedName.isEmpty()) {"},{"lineNumber":149,"author":{"gitId":"mingyuanc"},"content":" instrDisplayedName \u003d Const.DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR;"},{"lineNumber":150,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":151,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":152,"author":{"gitId":"mingyuanc"},"content":" InstructorPrivileges privileges \u003d new InstructorPrivileges(instrRole);"},{"lineNumber":153,"author":{"gitId":"mingyuanc"},"content":" InstructorPermissionRole role \u003d InstructorPermissionRole.getEnum(instrRole);"},{"lineNumber":154,"author":{"gitId":"mingyuanc"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"mingyuanc"},"content":" return new Instructor(course, instrName, instrEmail, isDisplayedToStudents, instrDisplayedName, role,"},{"lineNumber":157,"author":{"gitId":"mingyuanc"},"content":" privileges);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * Creates a new instructor with basic information."},{"lineNumber":162,"author":{"gitId":"-"},"content":" * This consists of everything apart from custom privileges."},{"lineNumber":163,"author":{"gitId":"-"},"content":" *"},{"lineNumber":164,"author":{"gitId":"mingyuanc"},"content":" * @param courseId Id of the course the instructor is being added"},{"lineNumber":165,"author":{"gitId":"mingyuanc"},"content":" * to."},{"lineNumber":166,"author":{"gitId":"-"},"content":" * @param instructorName Name of the instructor."},{"lineNumber":167,"author":{"gitId":"-"},"content":" * @param instructorEmail Email of the instructor."},{"lineNumber":168,"author":{"gitId":"-"},"content":" * @param instructorRole Role of the instructor."},{"lineNumber":169,"author":{"gitId":"mingyuanc"},"content":" * @param isDisplayedToStudents Whether the instructor should be visible to"},{"lineNumber":170,"author":{"gitId":"mingyuanc"},"content":" * students."},{"lineNumber":171,"author":{"gitId":"-"},"content":" * @param displayedName Name to be visible to students."},{"lineNumber":172,"author":{"gitId":"mingyuanc"},"content":" * Should not be {@code null} even if"},{"lineNumber":173,"author":{"gitId":"mingyuanc"},"content":" * {@code isDisplayedToStudents} is false."},{"lineNumber":174,"author":{"gitId":"-"},"content":" * @return An instructor with basic info, excluding custom privileges"},{"lineNumber":175,"author":{"gitId":"-"},"content":" */"},{"lineNumber":176,"author":{"gitId":"-"},"content":" private InstructorAttributes createInstructorWithBasicAttributes(String courseId, String instructorName,"},{"lineNumber":177,"author":{"gitId":"-"},"content":" String instructorEmail, String instructorRole,"},{"lineNumber":178,"author":{"gitId":"-"},"content":" boolean isDisplayedToStudents, String displayedName) {"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" String instrName \u003d SanitizationHelper.sanitizeName(instructorName);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" String instrEmail \u003d SanitizationHelper.sanitizeEmail(instructorEmail);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" String instrRole \u003d SanitizationHelper.sanitizeName(instructorRole);"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" String instrDisplayedName \u003d displayedName;"},{"lineNumber":185,"author":{"gitId":"-"},"content":" if (displayedName \u003d\u003d null || displayedName.isEmpty()) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" instrDisplayedName \u003d Const.DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR;"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" instrDisplayedName \u003d SanitizationHelper.sanitizeName(instrDisplayedName);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" InstructorPrivileges privileges \u003d new InstructorPrivileges(instructorRole);"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" return InstructorAttributes.builder(courseId, instrEmail)"},{"lineNumber":193,"author":{"gitId":"-"},"content":" .withName(instrName)"},{"lineNumber":194,"author":{"gitId":"-"},"content":" .withRole(instrRole)"},{"lineNumber":195,"author":{"gitId":"-"},"content":" .withIsDisplayedToStudents(isDisplayedToStudents)"},{"lineNumber":196,"author":{"gitId":"-"},"content":" .withDisplayedName(instrDisplayedName)"},{"lineNumber":197,"author":{"gitId":"-"},"content":" .withPrivileges(privileges)"},{"lineNumber":198,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"mingyuanc":99,"-":102}},{"path":"src/main/java/teammates/ui/webapi/EnrollStudentsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Set;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EnrollException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.RequestTracer;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.ui.output.EnrollStudentsData;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentsData;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.ui.request.StudentsEnrollRequest;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Enroll a list of students."},{"lineNumber":29,"author":{"gitId":"-"},"content":" *"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * \u003cp\u003eCreate the students who are not in the course."},{"lineNumber":31,"author":{"gitId":"-"},"content":" *"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * \u003cp\u003eUpdate the students who are already existed."},{"lineNumber":33,"author":{"gitId":"-"},"content":" *"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * \u003cp\u003eReturn all students who are successfully enrolled."},{"lineNumber":35,"author":{"gitId":"-"},"content":" */"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":"public class EnrollStudentsAction extends Action {"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":44,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" if (!userInfo.isInstructor) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Instructor privilege is required to access this resource.\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" if (!isCourseMigrated(courseId)) {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.id);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":53,"author":{"gitId":"-"},"content":" instructor, logic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_STUDENT);"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.id);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" instructor, sqlLogic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_STUDENT);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" StudentsEnrollRequest enrollRequests \u003d getAndValidateRequestBody(StudentsEnrollRequest.class);"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":" List\u003cStudentsEnrollRequest.StudentEnrollRequest\u003e studentEnrollRequests \u003d enrollRequests.getStudentEnrollRequests();"},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" boolean isCourseMigrated \u003d isCourseMigrated(courseId);"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" if (isCourseMigrated) {"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentsToEnroll \u003d new ArrayList\u003c\u003e();"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" studentEnrollRequests.forEach(studentEnrollRequest -\u003e {"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" Section section \u003d new Section(course, studentEnrollRequest.getSection());"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":" Team team \u003d new Team(section, studentEnrollRequest.getTeam());"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" studentsToEnroll.add(new Student("},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" course, studentEnrollRequest.getName(),"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" studentEnrollRequest.getEmail(), studentEnrollRequest.getComments(), team));"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" });"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" sqlLogic.validateSectionsAndTeams(studentsToEnroll, courseId);"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":" } catch (EnrollException e) {"},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e enrolledStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" List\u003cEnrollStudentsData.EnrollErrorResults\u003e failToEnrollStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" Set\u003cString\u003e existingStudentsEmail;"},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e existingStudents \u003d sqlLogic.getStudentsForCourse(courseId);"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" existingStudentsEmail \u003d"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" existingStudents.stream().map(Student::getEmail).collect(Collectors.toSet());"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" for (StudentsEnrollRequest.StudentEnrollRequest enrollRequest : studentEnrollRequests) {"},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" if (existingStudentsEmail.contains(enrollRequest.getEmail())) {"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":" // The student has been enrolled in the course."},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":" Section section \u003d sqlLogic.getSectionOrCreate(courseId, enrollRequest.getSection());"},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" Team team \u003d sqlLogic.getTeamOrCreate(section, enrollRequest.getTeam());"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":" Student newStudent \u003d new Student("},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" course, enrollRequest.getName(),"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" enrollRequest.getEmail(), enrollRequest.getComments(), team);"},{"lineNumber":105,"author":{"gitId":"marquestye"},"content":" newStudent.setId(sqlLogic.getStudentForEmail(courseId, enrollRequest.getEmail()).getId());"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":" Student updatedStudent \u003d sqlLogic.updateStudentCascade(newStudent);"},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" taskQueuer.scheduleStudentForSearchIndexing("},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":" updatedStudent.getCourseId(), updatedStudent.getEmail());"},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" enrolledStudents.add(updatedStudent);"},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" } catch (InvalidParametersException | EntityDoesNotExistException"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":" | EntityAlreadyExistsException exception) {"},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" // Unsuccessfully enrolled students will not be returned."},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" failToEnrollStudents.add(new EnrollStudentsData.EnrollErrorResults(enrollRequest.getEmail(),"},{"lineNumber":114,"author":{"gitId":"domoberzin"},"content":" exception.getMessage()));"},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" // The student is new."},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" Section section \u003d sqlLogic.getSectionOrCreate(courseId, enrollRequest.getSection());"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":" Team team \u003d sqlLogic.getTeamOrCreate(section, enrollRequest.getTeam());"},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" Student newStudent \u003d new Student("},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":" course, enrollRequest.getName(),"},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" enrollRequest.getEmail(), enrollRequest.getComments(), team);"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" newStudent \u003d sqlLogic.createStudent(newStudent);"},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":" taskQueuer.scheduleStudentForSearchIndexing("},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" newStudent.getCourseId(), newStudent.getEmail());"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" enrolledStudents.add(newStudent);"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" } catch (InvalidParametersException | EntityAlreadyExistsException exception) {"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":" // Unsuccessfully enrolled students will not be returned."},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":" failToEnrollStudents.add(new EnrollStudentsData.EnrollErrorResults(enrollRequest.getEmail(),"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" exception.getMessage()));"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" List\u003cStudentData\u003e studentDataList \u003d enrolledStudents"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":" .stream()"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" .map(StudentData::new)"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":" .collect(Collectors.toList());"},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" StudentsData data \u003d new StudentsData();"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" data.setStudents(studentDataList);"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":" return new JsonResult(new EnrollStudentsData(data, failToEnrollStudents));"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" List\u003cStudentAttributes\u003e studentsToEnroll \u003d new ArrayList\u003c\u003e();"},{"lineNumber":148,"author":{"gitId":"-"},"content":" enrollRequests.getStudentEnrollRequests().forEach(studentEnrollRequest -\u003e {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" studentsToEnroll.add(StudentAttributes.builder(courseId, studentEnrollRequest.getEmail())"},{"lineNumber":150,"author":{"gitId":"-"},"content":" .withName(studentEnrollRequest.getName())"},{"lineNumber":151,"author":{"gitId":"-"},"content":" .withSectionName(studentEnrollRequest.getSection())"},{"lineNumber":152,"author":{"gitId":"-"},"content":" .withTeamName(studentEnrollRequest.getTeam())"},{"lineNumber":153,"author":{"gitId":"-"},"content":" .withComment(studentEnrollRequest.getComments())"},{"lineNumber":154,"author":{"gitId":"-"},"content":" .build());"},{"lineNumber":155,"author":{"gitId":"-"},"content":" });"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" logic.validateSectionsAndTeams(studentsToEnroll, courseId);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" } catch (EnrollException e) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" List\u003cStudentAttributes\u003e enrolledStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":164,"author":{"gitId":"-"},"content":" List\u003cEnrollStudentsData.EnrollErrorResults\u003e failToEnrollStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":165,"author":{"gitId":"domoberzin"},"content":" Set\u003cString\u003e existingStudentsEmail;"},{"lineNumber":166,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":167,"author":{"gitId":"domoberzin"},"content":" List\u003cStudentAttributes\u003e existingStudents \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":168,"author":{"gitId":"domoberzin"},"content":" existingStudentsEmail \u003d"},{"lineNumber":169,"author":{"gitId":"domoberzin"},"content":" existingStudents.stream().map(StudentAttributes::getEmail).collect(Collectors.toSet());"},{"lineNumber":170,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" for (StudentAttributes student : studentsToEnroll) {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":173,"author":{"gitId":"-"},"content":" if (existingStudentsEmail.contains(student.getEmail())) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" // The student has been enrolled in the course."},{"lineNumber":175,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" StudentAttributes.UpdateOptions updateOptions \u003d"},{"lineNumber":177,"author":{"gitId":"domoberzin"},"content":" StudentAttributes.updateOptionsBuilder(courseId, student.getEmail())"},{"lineNumber":178,"author":{"gitId":"-"},"content":" .withName(student.getName())"},{"lineNumber":179,"author":{"gitId":"-"},"content":" .withSectionName(student.getSection())"},{"lineNumber":180,"author":{"gitId":"-"},"content":" .withTeamName(student.getTeam())"},{"lineNumber":181,"author":{"gitId":"-"},"content":" .withComment(student.getComments())"},{"lineNumber":182,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":183,"author":{"gitId":"-"},"content":" StudentAttributes updatedStudent \u003d logic.updateStudentCascade(updateOptions);"},{"lineNumber":184,"author":{"gitId":"domoberzin"},"content":" taskQueuer.scheduleStudentForSearchIndexing("},{"lineNumber":185,"author":{"gitId":"domoberzin"},"content":" updatedStudent.getCourse(), updatedStudent.getEmail());"},{"lineNumber":186,"author":{"gitId":"-"},"content":" enrolledStudents.add(updatedStudent);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException | EntityDoesNotExistException"},{"lineNumber":188,"author":{"gitId":"-"},"content":" | EntityAlreadyExistsException exception) {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" // Unsuccessfully enrolled students will not be returned."},{"lineNumber":190,"author":{"gitId":"-"},"content":" failToEnrollStudents.add(new EnrollStudentsData.EnrollErrorResults(student.getEmail(),"},{"lineNumber":191,"author":{"gitId":"-"},"content":" exception.getMessage()));"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" // The student is new."},{"lineNumber":195,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":" StudentAttributes studentAttributes \u003d StudentAttributes.builder(courseId, student.getEmail())"},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":" .withName(student.getName())"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" .withSectionName(student.getSection())"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":" .withTeamName(student.getTeam())"},{"lineNumber":200,"author":{"gitId":"domoberzin"},"content":" .withComment(student.getComments())"},{"lineNumber":201,"author":{"gitId":"domoberzin"},"content":" .build();"},{"lineNumber":202,"author":{"gitId":"domoberzin"},"content":" StudentAttributes newStudent \u003d logic.createStudent(studentAttributes);"},{"lineNumber":203,"author":{"gitId":"-"},"content":" taskQueuer.scheduleStudentForSearchIndexing(newStudent.getCourse(), newStudent.getEmail());"},{"lineNumber":204,"author":{"gitId":"-"},"content":" enrolledStudents.add(newStudent);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException | EntityAlreadyExistsException exception) {"},{"lineNumber":206,"author":{"gitId":"-"},"content":" // Unsuccessfully enrolled students will not be returned."},{"lineNumber":207,"author":{"gitId":"-"},"content":" failToEnrollStudents.add(new EnrollStudentsData.EnrollErrorResults(student.getEmail(),"},{"lineNumber":208,"author":{"gitId":"-"},"content":" exception.getMessage()));"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" List\u003cStudentData\u003e studentDataList \u003d enrolledStudents"},{"lineNumber":214,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":215,"author":{"gitId":"-"},"content":" .map(StudentData::new)"},{"lineNumber":216,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":217,"author":{"gitId":"-"},"content":" StudentsData data \u003d new StudentsData();"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" data.setStudents(studentDataList);"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" return new JsonResult(new EnrollStudentsData(data, failToEnrollStudents));"},{"lineNumber":222,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":108,"marquestye":1,"-":116}},{"path":"src/main/java/teammates/ui/webapi/GetCourseJoinStatusAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.ui.output.JoinStatus;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * Get the join status of a course."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"public class GetCourseJoinStatusAction extends Action {"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":18,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" }"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" // Any user can use a join link as long as its parameters are valid"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" String regkey \u003d getNonNullRequestParamValue(Const.ParamsNames.REGKEY);"},{"lineNumber":30,"author":{"gitId":"-"},"content":" String entityType \u003d getNonNullRequestParamValue(Const.ParamsNames.ENTITY_TYPE);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" String isCreatingAccount \u003d getRequestParamValue(Const.ParamsNames.IS_CREATING_ACCOUNT);"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" switch (entityType) {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" case Const.EntityType.STUDENT:"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return getStudentJoinStatus(regkey);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" case Const.EntityType.INSTRUCTOR:"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return getInstructorJoinStatus(regkey, \"true\".equals(isCreatingAccount));"},{"lineNumber":38,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":39,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Error: invalid entity type\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" private JsonResult getStudentJoinStatus(String regkey) {"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" StudentAttributes studentAttributes \u003d logic.getStudentForRegistrationKey(regkey);"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" if (studentAttributes !\u003d null \u0026\u0026 !isCourseMigrated(studentAttributes.getCourse())) {"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" return getJoinStatusResult(studentAttributes.isRegistered());"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" Student student \u003d sqlLogic.getStudentByRegistrationKey(regkey);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(\"No student with given registration key: \" + regkey);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return getJoinStatusResult(student.isRegistered());"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" private JsonResult getInstructorJoinStatus(String regkey, boolean isCreatingAccount) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" if (isCreatingAccount) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" AccountRequestAttributes accountRequest \u003d logic.getAccountRequestForRegistrationKey(regkey);"},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":" AccountRequest sqlAccountRequest \u003d sqlLogic.getAccountRequestByRegistrationKey(regkey);"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" if (accountRequest \u003d\u003d null \u0026\u0026 sqlAccountRequest \u003d\u003d null) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(\"No account request with given registration key: \" + regkey);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" if (sqlAccountRequest !\u003d null) {"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" return getJoinStatusResult(sqlAccountRequest.getRegisteredAt() !\u003d null);"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":" if (accountRequest !\u003d null) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" return getJoinStatusResult(accountRequest.getRegisteredAt() !\u003d null);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" InstructorAttributes instructorAttributes \u003d logic.getInstructorForRegistrationKey(regkey);"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" if (instructorAttributes !\u003d null \u0026\u0026 !isCourseMigrated(instructorAttributes.getCourseId())) {"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" return getJoinStatusResult(instructorAttributes.isRegistered());"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByRegistrationKey(regkey);"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(\"No instructor with given registration key: \" + regkey);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return getJoinStatusResult(instructor.isRegistered());"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" private JsonResult getJoinStatusResult(boolean hasJoined) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" JoinStatus result \u003d new JoinStatus(hasJoined);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return new JsonResult(result);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":24,"-":69}},{"path":"src/main/java/teammates/ui/webapi/GetSessionResponseStatsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionStatsData;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Action: gets the response stats (submitted / total) of a feedback session."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"public class GetSessionResponseStatsAction extends Action {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":16,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":18,"author":{"gitId":"-"},"content":" }"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" if (userInfo.isAdmin) {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fs \u003d getNonNullSqlFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" gateKeeper.verifyAccessible(instructor, fs);"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes fsa \u003d getNonNullFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":34,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":35,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, fsa);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fsa \u003d getNonNullSqlFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" int expectedTotal \u003d sqlLogic.getExpectedTotalSubmission(fsa);"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" int actualTotal \u003d sqlLogic.getActualTotalSubmission(fsa);"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" FeedbackSessionStatsData output \u003d new FeedbackSessionStatsData(actualTotal, expectedTotal);"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" return new JsonResult(output);"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes fsa \u003d getNonNullFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" int expectedTotal \u003d logic.getExpectedTotalSubmission(fsa);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" int actualTotal \u003d logic.getActualTotalSubmission(fsa);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" FeedbackSessionStatsData output \u003d new FeedbackSessionStatsData(actualTotal, expectedTotal);"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return new JsonResult(output);"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":15,"-":44}},{"path":"src/main/java/teammates/ui/webapi/GetSessionResultsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.UUID;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SessionResultsBundle;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.ui.output.SessionResultsData;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.ui.request.Intent;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * Gets feedback session results including statistics where necessary."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"public class GetSessionResultsAction extends BasicFeedbackSubmissionAction {"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":25,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return AuthType.PUBLIC;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" Intent intent \u003d Intent.valueOf(getNonNullRequestParamValue(Const.ParamsNames.INTENT));"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" boolean isPreviewResults \u003d !StringHelper.isEmpty(previewAsPerson);"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" checkSpecificAccessControlSql(courseId, feedbackSessionName, intent, isPreviewResults);"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" checkSpecificAccessControlDatastore(courseId, feedbackSessionName, intent, isPreviewResults);"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" private void checkSpecificAccessControlDatastore("},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, Intent intent, boolean isPreviewResults)"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" FeedbackSessionAttributes feedbackSession \u003d getNonNullFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" switch (intent) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" case FULL_DETAIL:"},{"lineNumber":51,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible(instructor, feedbackSession);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" case INSTRUCTOR_RESULT:"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" if (!isPreviewResults \u0026\u0026 !feedbackSession.isPublished()) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"This feedback session is not yet published.\", true);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":" instructor \u003d getInstructorOfCourseFromRequest(courseId);"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" checkAccessControlForInstructorFeedbackResult(instructor, feedbackSession);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" case STUDENT_RESULT:"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" if (!isPreviewResults \u0026\u0026 !feedbackSession.isPublished()) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"This feedback session is not yet published.\", true);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d getStudentOfCourseFromRequest(courseId);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" checkAccessControlForStudentFeedbackResult(student, feedbackSession);"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" case INSTRUCTOR_SUBMISSION:"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" case STUDENT_SUBMISSION:"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" throw new InvalidHttpParameterException(\"Invalid intent for this action\");"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" throw new InvalidHttpParameterException(\"Unknown intent \" + intent);"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" private void checkSpecificAccessControlSql("},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, Intent intent, boolean isPreviewResults)"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d getNonNullSqlFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" switch (intent) {"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" case FULL_DETAIL:"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible(instructor, feedbackSession);"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" case INSTRUCTOR_RESULT:"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" if (!isPreviewResults \u0026\u0026 !feedbackSession.isPublished()) {"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" throw new UnauthorizedAccessException(\"This feedback session is not yet published.\", true);"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":" instructor \u003d getSqlInstructorOfCourseFromRequest(courseId);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" checkAccessControlForInstructorFeedbackResult(instructor, feedbackSession);"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" case STUDENT_RESULT:"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" if (!isPreviewResults \u0026\u0026 !feedbackSession.isPublished()) {"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" throw new UnauthorizedAccessException(\"This feedback session is not yet published.\", true);"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Student student \u003d getSqlStudentOfCourseFromRequest(courseId);"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" checkAccessControlForStudentFeedbackResult(student, feedbackSession);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":102,"author":{"gitId":"-"},"content":" case INSTRUCTOR_SUBMISSION:"},{"lineNumber":103,"author":{"gitId":"-"},"content":" case STUDENT_SUBMISSION:"},{"lineNumber":104,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Invalid intent for this action\");"},{"lineNumber":105,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":106,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Unknown intent \" + intent);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" // Allow additional filter by question ID and section name"},{"lineNumber":116,"author":{"gitId":"-"},"content":" String questionId \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_QUESTION_ID);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" String selectedSection \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_RESULTS_GROUPBYSECTION);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.parseFetchType("},{"lineNumber":119,"author":{"gitId":"-"},"content":" getRequestParamValue(Const.ParamsNames.FEEDBACK_RESULTS_SECTION_BY_GIVER_RECEIVER));"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" boolean isPreviewResults \u003d !StringHelper.isEmpty(previewAsPerson);"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" Intent intent \u003d Intent.valueOf(getNonNullRequestParamValue(Const.ParamsNames.INTENT));"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" if (questionId !\u003d null) {"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" UUID questionUuid \u003d getUuidRequestParamValue(Const.ParamsNames.FEEDBACK_QUESTION_ID);"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" executeWithSql(courseId, feedbackSessionName, questionUuid,"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" selectedSection, fetchType, intent, isPreviewResults);"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" return executeWithSql(courseId, feedbackSessionName, null, selectedSection,"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" fetchType, intent, isPreviewResults);"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" return executeWithDatastore(courseId, feedbackSessionName, questionId, selectedSection,"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" fetchType, intent, isPreviewResults);"},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":" private JsonResult executeWithDatastore("},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, String questionId, String selectedSection,"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType, Intent intent, boolean isPreviewResults) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" InstructorAttributes instructor;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" StudentAttributes student;"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":" SessionResultsBundle bundle;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" switch (intent) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" case FULL_DETAIL:"},{"lineNumber":148,"author":{"gitId":"-"},"content":" instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.id);"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" bundle \u003d logic.getSessionResultsForCourse(feedbackSessionName, courseId, instructor.getEmail(),"},{"lineNumber":151,"author":{"gitId":"-"},"content":" questionId, selectedSection, fetchType);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return new JsonResult(SessionResultsData.initForInstructor(bundle));"},{"lineNumber":153,"author":{"gitId":"-"},"content":" case INSTRUCTOR_RESULT:"},{"lineNumber":154,"author":{"gitId":"-"},"content":" // Section name filter is not applicable here"},{"lineNumber":155,"author":{"gitId":"-"},"content":" instructor \u003d getInstructorOfCourseFromRequest(courseId);"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" bundle \u003d logic.getSessionResultsForUser(feedbackSessionName, courseId, instructor.getEmail(),"},{"lineNumber":158,"author":{"gitId":"-"},"content":" true, questionId, isPreviewResults);"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" // Build a fake student object, as the results will be displayed as if they are displayed to a student"},{"lineNumber":161,"author":{"gitId":"-"},"content":" student \u003d StudentAttributes.builder(instructor.getCourseId(), instructor.getEmail())"},{"lineNumber":162,"author":{"gitId":"-"},"content":" .withTeamName(Const.USER_TEAM_FOR_INSTRUCTOR)"},{"lineNumber":163,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" return new JsonResult(SessionResultsData.initForStudent(bundle, student));"},{"lineNumber":166,"author":{"gitId":"-"},"content":" case STUDENT_RESULT:"},{"lineNumber":167,"author":{"gitId":"-"},"content":" // Section name filter is not applicable here"},{"lineNumber":168,"author":{"gitId":"-"},"content":" student \u003d getStudentOfCourseFromRequest(courseId);"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" bundle \u003d logic.getSessionResultsForUser(feedbackSessionName, courseId, student.getEmail(),"},{"lineNumber":171,"author":{"gitId":"-"},"content":" false, questionId, isPreviewResults);"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" return new JsonResult(SessionResultsData.initForStudent(bundle, student));"},{"lineNumber":174,"author":{"gitId":"-"},"content":" case INSTRUCTOR_SUBMISSION:"},{"lineNumber":175,"author":{"gitId":"-"},"content":" case STUDENT_SUBMISSION:"},{"lineNumber":176,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Invalid intent for this action\");"},{"lineNumber":177,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":178,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Unknown intent \" + intent);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" private JsonResult executeWithSql("},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, UUID questionUuid, String selectedSection,"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType, Intent intent, boolean isPreviewResults) {"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" Instructor instructor;"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" Student student;"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d getNonNullSqlFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle;"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":" switch (intent) {"},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" case FULL_DETAIL:"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" instructor \u003d getSqlInstructorOfCourseFromRequest(courseId);"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" bundle \u003d sqlLogic.getSessionResultsForCourse(feedbackSession, courseId, instructor.getEmail(),"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" questionUuid, selectedSection, fetchType);"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" return new JsonResult(SessionResultsData.initForInstructor(bundle));"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" case INSTRUCTOR_RESULT:"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" // Section name filter is not applicable here"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" instructor \u003d getPossiblyUnregisteredSqlInstructor(courseId);"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" bundle \u003d sqlLogic.getSessionResultsForUser(feedbackSession, courseId, instructor.getEmail(),"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" true, questionUuid, isPreviewResults);"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" // Build a fake student object, as the results will be displayed as if they are displayed to a student"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" student \u003d new Student(instructor.getCourse(), instructor.getName(), instructor.getEmail(), \"\");"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" student.setTeam(instructor.getTeam());"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" return new JsonResult(SessionResultsData.initForStudent(bundle, student));"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" case STUDENT_RESULT:"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" // Section name filter is not applicable here"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" student \u003d getSqlStudentOfCourseFromRequest(courseId);"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" bundle \u003d sqlLogic.getSessionResultsForUser(feedbackSession, courseId, student.getEmail(),"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" false, questionUuid, isPreviewResults);"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" return new JsonResult(SessionResultsData.initForStudent(bundle, student));"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" case INSTRUCTOR_SUBMISSION:"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" case STUDENT_SUBMISSION:"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" throw new InvalidHttpParameterException(\"Invalid intent for this action\");"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" throw new InvalidHttpParameterException(\"Unknown intent \" + intent);"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":117,"-":107}},{"path":"src/main/java/teammates/ui/webapi/InstructorSearchIndexingWorkerAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Task queue worker action: performs instructor search indexing."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class InstructorSearchIndexingWorkerAction extends AdminOnlyAction {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public ActionResult execute() {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(ParamsNames.COURSE_ID);"},{"lineNumber":18,"author":{"gitId":"-"},"content":" String email \u003d getNonNullRequestParamValue(ParamsNames.INSTRUCTOR_EMAIL);"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" return executeWithSql(courseId, email);"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" } else {"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" return executeWithDataStore(courseId, email);"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" private JsonResult executeWithSql(String courseId, String email) {"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor \u003d sqlLogic.getInstructorForEmail(courseId, email);"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" try {"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" sqlLogic.putInstructorDocument(instructor);"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" // Set an arbitrary retry code outside the range 200-299 to trigger automatic retry"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" private JsonResult executeWithDataStore(String courseId, String email) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForEmail(courseId, email);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" logic.putInstructorDocument(instructor);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" // Set an arbitrary retry code outside of the range 200-299 to trigger automatic retry"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"mingyuanc":21,"-":29}},{"path":"src/main/java/teammates/ui/webapi/JoinCourseAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import java.util.Optional;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailWrapper;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Action: joins a course for a student/instructor."},{"lineNumber":22,"author":{"gitId":"-"},"content":" */"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":"public class JoinCourseAction extends Action {"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":33,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" // Any user can use a join link as long as its parameters are valid"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidOperationException {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" String regKey \u003d getNonNullRequestParamValue(Const.ParamsNames.REGKEY);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" String entityType \u003d getNonNullRequestParamValue(Const.ParamsNames.ENTITY_TYPE);"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" String courseId \u003d getCourseId(regKey, entityType);"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" // courseId is null when the registration key does not exist, this case is handled in the AccountsLogic."},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" // Hence default to not migrated. Getting the courseId in the action layer is not needed once migration is done."},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" if (courseId \u003d\u003d null || !isCourseMigrated(courseId)) {"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" switch (entityType) {"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" case Const.EntityType.STUDENT:"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" return joinCourseForStudentDatastore(regKey);"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" case Const.EntityType.INSTRUCTOR:"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" return joinCourseForInstructorDatastore(regKey);"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" default:"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidHttpParameterException(\"Error: invalid entity type\");"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" switch (entityType) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" case Const.EntityType.STUDENT:"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return joinCourseForStudent(regKey);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" case Const.EntityType.INSTRUCTOR:"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return joinCourseForInstructor(regKey);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":63,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Error: invalid entity type\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" private JsonResult joinCourseForStudent(String regkey) throws InvalidOperationException {"},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" Student student;"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":" try {"},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" student \u003d sqlLogic.joinCourseForStudent(regkey, userInfo.id);"},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidOperationException(eaee);"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":" // There should not be any invalid parameter here"},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" log.severe(\"Unexpected error\", ipe);"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(ipe.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR);"},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":" sendJoinEmail(student.getCourseId(), student.getName(), student.getEmail(), false);"},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":84,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(\"Student successfully joined course\");"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":" private JsonResult joinCourseForInstructor(String regkey) throws InvalidOperationException {"},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" Instructor instructor;"},{"lineNumber":89,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":" try {"},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" instructor \u003d sqlLogic.joinCourseForInstructor(regkey, userInfo.id);"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidOperationException(eaee);"},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":" // There should not be any invalid parameter here"},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":" log.severe(\"Unexpected error\", ipe);"},{"lineNumber":99,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(ipe.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR);"},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" sendJoinEmail(instructor.getCourseId(), instructor.getName(), instructor.getEmail(), true);"},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(\"Instructor successfully joined course\");"},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" private JsonResult joinCourseForStudentDatastore(String regkey) throws InvalidOperationException {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" StudentAttributes student;"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" student \u003d logic.joinCourseForStudent(regkey, userInfo.id);"},{"lineNumber":112,"author":{"gitId":"-"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(eaee);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" // There should not be any invalid parameter here"},{"lineNumber":118,"author":{"gitId":"-"},"content":" log.severe(\"Unexpected error\", ipe);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" return new JsonResult(ipe.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR);"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":" sendJoinEmailDatastore(student.getCourse(), student.getName(), student.getEmail(), false);"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" return new JsonResult(\"Student successfully joined course\");"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" private JsonResult joinCourseForInstructorDatastore(String regkey) throws InvalidOperationException {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" InstructorAttributes instructor;"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" instructor \u003d logic.joinCourseForInstructor(regkey, userInfo.id);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(eaee);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" // There should not be any invalid parameter here"},{"lineNumber":138,"author":{"gitId":"-"},"content":" log.severe(\"Unexpected error\", ipe);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return new JsonResult(ipe.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR);"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" sendJoinEmailDatastore(instructor.getCourseId(), instructor.getName(), instructor.getEmail(), true);"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" return new JsonResult(\"Instructor successfully joined course\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":" private void sendJoinEmailDatastore(String courseId, String userName, String userEmail, boolean isInstructor) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" CourseAttributes course \u003d logic.getCourse(courseId);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d emailGenerator.generateUserCourseRegisteredEmail("},{"lineNumber":150,"author":{"gitId":"-"},"content":" userName, userEmail, userInfo.id, isInstructor, course);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" emailSender.sendEmail(email);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"yuanxi1"},"content":" private void sendJoinEmail(String courseId, String userName, String userEmail, boolean isInstructor) {"},{"lineNumber":155,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":156,"author":{"gitId":"yuanxi1"},"content":" EmailWrapper email \u003d sqlEmailGenerator.generateUserCourseRegisteredEmail("},{"lineNumber":157,"author":{"gitId":"yuanxi1"},"content":" userName, userEmail, userInfo.id, isInstructor, course);"},{"lineNumber":158,"author":{"gitId":"yuanxi1"},"content":" emailSender.sendEmail(email);"},{"lineNumber":159,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":160,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":161,"author":{"gitId":"yuanxi1"},"content":" private String getCourseId(String regKey, String entityType) {"},{"lineNumber":162,"author":{"gitId":"yuanxi1"},"content":" String courseIdSql;"},{"lineNumber":163,"author":{"gitId":"yuanxi1"},"content":" String courseIdDatastore;"},{"lineNumber":164,"author":{"gitId":"yuanxi1"},"content":" switch (entityType) {"},{"lineNumber":165,"author":{"gitId":"yuanxi1"},"content":" case Const.EntityType.STUDENT:"},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":" courseIdSql \u003d Optional.ofNullable(sqlLogic.getStudentByRegistrationKey(regKey))"},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":" .map(Student::getCourseId)"},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":" .orElse(null);"},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" courseIdDatastore \u003d Optional.ofNullable(logic.getStudentForRegistrationKey(regKey))"},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" .map(StudentAttributes::getCourse)"},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" .orElse(null);"},{"lineNumber":172,"author":{"gitId":"yuanxi1"},"content":" break;"},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":" case Const.EntityType.INSTRUCTOR:"},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":" courseIdSql \u003d Optional.ofNullable(sqlLogic.getInstructorByRegistrationKey(regKey))"},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" .map(Instructor::getCourseId)"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":" .orElse(null);"},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":" courseIdDatastore \u003d Optional.ofNullable(logic.getInstructorForRegistrationKey(regKey))"},{"lineNumber":178,"author":{"gitId":"yuanxi1"},"content":" .map(InstructorAttributes::getCourseId)"},{"lineNumber":179,"author":{"gitId":"yuanxi1"},"content":" .orElse(null);"},{"lineNumber":180,"author":{"gitId":"yuanxi1"},"content":" break;"},{"lineNumber":181,"author":{"gitId":"yuanxi1"},"content":" default:"},{"lineNumber":182,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidHttpParameterException(\"Error: invalid entity type\");"},{"lineNumber":183,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":184,"author":{"gitId":"yuanxi1"},"content":" return courseIdDatastore !\u003d null ? courseIdDatastore : courseIdSql;"},{"lineNumber":185,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":98,"-":88}},{"path":"src/main/java/teammates/ui/webapi/PutDataBundleDocumentsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Config;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * Puts searchable documents from the data bundle into the DB."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"public class PutDataBundleDocumentsAction extends Action {"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":18,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" return AuthType.ALL_ACCESS;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" }"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" if (!Config.IS_DEV_SERVER) {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Admin privilege is required to access this resource.\");"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException {"},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" String type \u003d getNonNullRequestParamValue(\"databundletype\");"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" switch (type) {"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" case \"sql\":"},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":" return putSqlDataBundleDocuments();"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" case \"datastore\":"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" return putDataBundleDocuments();"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":" default:"},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":" throw new InvalidHttpParameterException(\"Error: invalid data bundle type\");"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":" private JsonResult putSqlDataBundleDocuments() throws InvalidHttpRequestBodyException {"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" SqlDataBundle sqlDataBundle \u003d JsonUtils.fromJson(getRequestBody(), SqlDataBundle.class);"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" try {"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" sqlLogic.putDocuments(sqlDataBundle);"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" return new JsonResult(\"Failed to add data bundle documents.\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" return new JsonResult(\"Data bundle documents successfully added.\");"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" private JsonResult putDataBundleDocuments() throws InvalidHttpRequestBodyException {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" DataBundle dataBundle \u003d JsonUtils.fromJson(getRequestBody(), DataBundle.class);"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" logic.putDocuments(dataBundle);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return new JsonResult(\"Failed to add data bundle documents.\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":" return new JsonResult(\"Data bundle documents successfully added.\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":29,"-":35}},{"path":"src/main/java/teammates/ui/webapi/SearchAccountRequestsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountRequestData;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountRequestsData;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Searches for account requests."},{"lineNumber":15,"author":{"gitId":"-"},"content":" */"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"public class SearchAccountRequestsAction extends AdminOnlyAction {"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" String searchKey \u003d getNonNullRequestParamValue(Const.ParamsNames.SEARCH_KEY);"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequest\u003e accountRequests;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" accountRequests \u003d sqlLogic.searchAccountRequestsInWholeSystem(searchKey);"},{"lineNumber":25,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequestAttributes\u003e requestsDatastore;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" requestsDatastore \u003d logic.searchAccountRequestsInWholeSystem(searchKey);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" List\u003cAccountRequestData\u003e accountRequestDataList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" for (AccountRequest accountRequest : accountRequests) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" AccountRequestData accountRequestData \u003d new AccountRequestData(accountRequest);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" accountRequestDataList.add(accountRequestData);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" for (AccountRequestAttributes request : requestsDatastore) {"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":" if (accountRequestDataList.stream().noneMatch(data -\u003e data.getEmail().equals(request.getEmail()))) {"},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" AccountRequestData accountRequestData \u003d new AccountRequestData(request);"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" accountRequestDataList.add(accountRequestData);"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" AccountRequestsData accountRequestsData \u003d new AccountRequestsData();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" accountRequestsData.setAccountRequests(accountRequestDataList);"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" return new JsonResult(accountRequestsData);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":17,"-":37}},{"path":"src/main/java/teammates/ui/webapi/SearchInstructorsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorsData;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Searches for instructors."},{"lineNumber":15,"author":{"gitId":"-"},"content":" */"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class SearchInstructorsAction extends AdminOnlyAction {"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" // Search for sql db"},{"lineNumber":21,"author":{"gitId":"-"},"content":" String searchKey \u003d getNonNullRequestParamValue(Const.ParamsNames.SEARCH_KEY);"},{"lineNumber":22,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" instructors \u003d sqlLogic.searchInstructorsInWholeSystem(searchKey);"},{"lineNumber":25,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" // Search for datastore"},{"lineNumber":30,"author":{"gitId":"-"},"content":" List\u003cInstructorAttributes\u003e instructorsDatastore;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" instructorsDatastore \u003d logic.searchInstructorsInWholeSystem(searchKey);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" List\u003cInstructorData\u003e instructorDataList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" // Add instructors from sql db"},{"lineNumber":40,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" InstructorData instructorData \u003d new InstructorData(instructor);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" instructorData.addAdditionalInformationForAdminSearch("},{"lineNumber":43,"author":{"gitId":"-"},"content":" instructor.getRegKey(),"},{"lineNumber":44,"author":{"gitId":"-"},"content":" sqlLogic.getCourse(instructor.getCourseId()).getInstitute(),"},{"lineNumber":45,"author":{"gitId":"-"},"content":" instructor.getGoogleId());"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" instructorDataList.add(instructorData);"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" // Add instructors from datastore"},{"lineNumber":51,"author":{"gitId":"-"},"content":" for (InstructorAttributes instructor : instructorsDatastore) {"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" InstructorData instructorData \u003d new InstructorData(instructor);"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" if (isCourseMigrated(instructorData.getCourseId())) {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" instructorData.addAdditionalInformationForAdminSearch("},{"lineNumber":60,"author":{"gitId":"-"},"content":" instructor.getKey(),"},{"lineNumber":61,"author":{"gitId":"-"},"content":" logic.getCourseInstitute(instructor.getCourseId()),"},{"lineNumber":62,"author":{"gitId":"-"},"content":" instructor.getGoogleId());"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" instructorDataList.add(instructorData);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" InstructorsData instructorsData \u003d new InstructorsData();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" instructorsData.setInstructors(instructorDataList);"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" return new JsonResult(instructorsData);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":1,"-":71}},{"path":"src/main/java/teammates/ui/webapi/SearchStudentsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentsData;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * Action for searching for students."},{"lineNumber":17,"author":{"gitId":"-"},"content":" */"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"public class SearchStudentsAction extends Action {"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" }"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":26,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // Only instructors and admins can search for student"},{"lineNumber":28,"author":{"gitId":"-"},"content":" if (!userInfo.isInstructor \u0026\u0026 !userInfo.isAdmin) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Instructor or Admin privilege is required to access this resource.\");"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" String searchKey \u003d getNonNullRequestParamValue(Const.ParamsNames.SEARCH_KEY);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" String entity \u003d getNonNullRequestParamValue(Const.ParamsNames.ENTITY_TYPE);"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudent\u003e students;"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" try {"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" if (userInfo.isInstructor \u0026\u0026 entity.equals(Const.EntityType.INSTRUCTOR)) {"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" List\u003cInstructor\u003e instructors \u003d sqlLogic.getInstructorsForGoogleId(userInfo.id);"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" students \u003d sqlLogic.searchStudents(searchKey, instructors);"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" } else if (userInfo.isAdmin \u0026\u0026 entity.equals(Const.EntityType.ADMIN)) {"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" students \u003d sqlLogic.searchStudentsInWholeSystem(searchKey);"},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" } else {"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidHttpParameterException(\"Invalid entity type for search\");"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" // Search in datastore. For more information on dual db support, see this [PR](https://github.com/TEAMMATES/teammates/pull/12728/files)"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudentAttributes\u003e studentsDatastore;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" if (userInfo.isInstructor \u0026\u0026 entity.equals(Const.EntityType.INSTRUCTOR)) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" List\u003cInstructorAttributes\u003e instructors \u003d logic.getInstructorsForGoogleId(userInfo.id);"},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" studentsDatastore \u003d logic.searchStudents(searchKey, instructors);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" } else if (userInfo.isAdmin \u0026\u0026 entity.equals(Const.EntityType.ADMIN)) {"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" studentsDatastore \u003d logic.searchStudentsInWholeSystem(searchKey);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Invalid entity type for search\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" List\u003cStudentData\u003e studentDataList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":" // Add students from sql database"},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":" for (Student s : students) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" StudentData studentData \u003d new StudentData(s);"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" if (userInfo.isAdmin \u0026\u0026 entity.equals(Const.EntityType.ADMIN)) {"},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" studentData.addAdditionalInformationForAdminSearch("},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" s.getRegKey(),"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":" sqlLogic.getCourseInstitute(s.getCourseId()),"},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":" s.getGoogleId()"},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" );"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":" studentDataList.add(studentData);"},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":" // Add students from datastore"},{"lineNumber":84,"author":{"gitId":"yuanxi1"},"content":" for (StudentAttributes s : studentsDatastore) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" StudentData studentData \u003d new StudentData(s);"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" if (isCourseMigrated(studentData.getCourseId())) {"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" continue;"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" if (userInfo.isAdmin \u0026\u0026 entity.equals(Const.EntityType.ADMIN)) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" studentData.addAdditionalInformationForAdminSearch("},{"lineNumber":93,"author":{"gitId":"-"},"content":" s.getKey(),"},{"lineNumber":94,"author":{"gitId":"-"},"content":" logic.getCourseInstitute(s.getCourse()),"},{"lineNumber":95,"author":{"gitId":"-"},"content":" s.getGoogleId()"},{"lineNumber":96,"author":{"gitId":"-"},"content":" );"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" studentDataList.add(studentData);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":" StudentsData studentsData \u003d new StudentsData();"},{"lineNumber":102,"author":{"gitId":"-"},"content":" studentsData.setStudents(studentDataList);"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" return new JsonResult(studentsData);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":4,"yuanxi1":36,"-":66}},{"path":"src/main/java/teammates/ui/webapi/StudentSearchIndexingWorkerAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Task queue worker action: performs student search indexing."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class StudentSearchIndexingWorkerAction extends AdminOnlyAction {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public ActionResult execute() {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(ParamsNames.COURSE_ID);"},{"lineNumber":18,"author":{"gitId":"-"},"content":" String email \u003d getNonNullRequestParamValue(ParamsNames.STUDENT_EMAIL);"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" return executeWithSql(courseId, email);"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" return executeWithDataStore(courseId, email);"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" private ActionResult executeWithDataStore(String courseId, String email) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d logic.getStudentForEmail(courseId, email);"},{"lineNumber":30,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" logic.putStudentDocument(student);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // Set an arbitrary retry code outside of the range 200-299 to trigger automatic retry"},{"lineNumber":34,"author":{"gitId":"-"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" private ActionResult executeWithSql(String courseId, String email) {"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" Student student \u003d sqlLogic.getStudentForEmail(courseId, email);"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" try {"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" sqlLogic.putStudentDocument(student);"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" // Set an arbitrary retry code outside of the range 200-299 to trigger automatic retry"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":22,"-":29}},{"path":"src/main/java/teammates/ui/webapi/UpdateStudentAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.EnrollException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailSendingStatus;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailType;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailWrapper;"},{"lineNumber":15,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":16,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":17,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":18,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.ui.request.StudentUpdateRequest;"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Action: Edits details of a student in a course."},{"lineNumber":25,"author":{"gitId":"-"},"content":" */"},{"lineNumber":26,"author":{"gitId":"marquestye"},"content":"public class UpdateStudentAction extends Action {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" static final String STUDENT_NOT_FOUND_FOR_EDIT \u003d \"The student you tried to edit does not exist. \""},{"lineNumber":28,"author":{"gitId":"-"},"content":" + \"If the student was created during the last few minutes, \""},{"lineNumber":29,"author":{"gitId":"-"},"content":" + \"try again in a few more minutes as the student may still be being saved.\";"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String SUCCESSFUL_UPDATE \u003d \"Student has been updated\";"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String SUCCESSFUL_UPDATE_WITH_EMAIL \u003d SUCCESSFUL_UPDATE + \" and email sent\";"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String SUCCESSFUL_UPDATE_BUT_EMAIL_FAILED \u003d SUCCESSFUL_UPDATE + \" but email failed to send\";"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":35,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" if (!userInfo.isInstructor) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Instructor privilege is required to access this resource.\");"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":48,"author":{"gitId":"marquestye"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":49,"author":{"gitId":"marquestye"},"content":" instructor, sqlLogic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_STUDENT);"},{"lineNumber":50,"author":{"gitId":"marquestye"},"content":" } else {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.id);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":53,"author":{"gitId":"-"},"content":" instructor, logic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_STUDENT);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" String studentEmail \u003d getNonNullRequestParamValue(Const.ParamsNames.STUDENT_EMAIL);"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"marquestye"},"content":" if (!isCourseMigrated(courseId)) {"},{"lineNumber":63,"author":{"gitId":"marquestye"},"content":" return executeWithDatastore(courseId, studentEmail);"},{"lineNumber":64,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":65,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":66,"author":{"gitId":"marquestye"},"content":" Student existingStudent \u003d sqlLogic.getStudentForEmail(courseId, studentEmail);"},{"lineNumber":67,"author":{"gitId":"marquestye"},"content":" if (existingStudent \u003d\u003d null) {"},{"lineNumber":68,"author":{"gitId":"marquestye"},"content":" throw new EntityNotFoundException(STUDENT_NOT_FOUND_FOR_EDIT);"},{"lineNumber":69,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":70,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":71,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d getAndValidateRequestBody(StudentUpdateRequest.class);"},{"lineNumber":72,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":73,"author":{"gitId":"marquestye"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":74,"author":{"gitId":"marquestye"},"content":" Section section \u003d sqlLogic.getSectionOrCreate(courseId, updateRequest.getSection());"},{"lineNumber":75,"author":{"gitId":"marquestye"},"content":" Team team \u003d sqlLogic.getTeamOrCreate(section, updateRequest.getTeam());"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":" Student studentToUpdate \u003d new Student(course, updateRequest.getName(), updateRequest.getEmail(),"},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":" updateRequest.getComments(), team);"},{"lineNumber":78,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" try {"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":" //we swap out email before we validate"},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" //TODO: this is duct tape at the moment, need to refactor how we do the validation"},{"lineNumber":82,"author":{"gitId":"marquestye"},"content":" String newEmail \u003d studentToUpdate.getEmail();"},{"lineNumber":83,"author":{"gitId":"marquestye"},"content":" studentToUpdate.setEmail(existingStudent.getEmail());"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":" sqlLogic.validateSectionsAndTeams(Arrays.asList(studentToUpdate), courseId);"},{"lineNumber":85,"author":{"gitId":"marquestye"},"content":" studentToUpdate.setEmail(newEmail);"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":87,"author":{"gitId":"marquestye"},"content":" studentToUpdate.setId(existingStudent.getId());"},{"lineNumber":88,"author":{"gitId":"marquestye"},"content":" Student updatedStudent \u003d sqlLogic.updateStudentCascade(studentToUpdate);"},{"lineNumber":89,"author":{"gitId":"marquestye"},"content":" taskQueuer.scheduleStudentForSearchIndexing(courseId, updatedStudent.getEmail());"},{"lineNumber":90,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":91,"author":{"gitId":"marquestye"},"content":" if (!studentEmail.equals(updateRequest.getEmail()) \u0026\u0026 updateRequest.getIsSessionSummarySendEmail()) {"},{"lineNumber":92,"author":{"gitId":"marquestye"},"content":" boolean emailSent \u003d sendEmail(courseId, updateRequest.getEmail());"},{"lineNumber":93,"author":{"gitId":"marquestye"},"content":" String statusMessage \u003d emailSent ? SUCCESSFUL_UPDATE_WITH_EMAIL"},{"lineNumber":94,"author":{"gitId":"marquestye"},"content":" : SUCCESSFUL_UPDATE_BUT_EMAIL_FAILED;"},{"lineNumber":95,"author":{"gitId":"marquestye"},"content":" return new JsonResult(statusMessage);"},{"lineNumber":96,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":97,"author":{"gitId":"marquestye"},"content":" } catch (EnrollException e) {"},{"lineNumber":98,"author":{"gitId":"marquestye"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":99,"author":{"gitId":"marquestye"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":100,"author":{"gitId":"marquestye"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":101,"author":{"gitId":"marquestye"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":102,"author":{"gitId":"marquestye"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":103,"author":{"gitId":"marquestye"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":104,"author":{"gitId":"marquestye"},"content":" throw new InvalidOperationException(\"Trying to update to an email that is already in use\", e);"},{"lineNumber":105,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":106,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":107,"author":{"gitId":"marquestye"},"content":" return new JsonResult(SUCCESSFUL_UPDATE);"},{"lineNumber":108,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":109,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":110,"author":{"gitId":"marquestye"},"content":" private JsonResult executeWithDatastore(String courseId, String studentEmail)"},{"lineNumber":111,"author":{"gitId":"marquestye"},"content":" throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d logic.getStudentForEmail(courseId, studentEmail);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(STUDENT_NOT_FOUND_FOR_EDIT);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" StudentUpdateRequest updateRequest \u003d getAndValidateRequestBody(StudentUpdateRequest.class);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" StudentAttributes studentToUpdate \u003d StudentAttributes.builder(courseId, updateRequest.getEmail())"},{"lineNumber":119,"author":{"gitId":"-"},"content":" .withName(updateRequest.getName())"},{"lineNumber":120,"author":{"gitId":"-"},"content":" .withSectionName(updateRequest.getSection())"},{"lineNumber":121,"author":{"gitId":"-"},"content":" .withTeamName(updateRequest.getTeam())"},{"lineNumber":122,"author":{"gitId":"-"},"content":" .withComment(updateRequest.getComments())"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" //we swap out email before we validate"},{"lineNumber":127,"author":{"gitId":"-"},"content":" //TODO: this is duct tape at the moment, need to refactor how we do the validation"},{"lineNumber":128,"author":{"gitId":"-"},"content":" String newEmail \u003d studentToUpdate.getEmail();"},{"lineNumber":129,"author":{"gitId":"-"},"content":" studentToUpdate.setEmail(student.getEmail());"},{"lineNumber":130,"author":{"gitId":"-"},"content":" logic.validateSectionsAndTeams(Arrays.asList(studentToUpdate), student.getCourse());"},{"lineNumber":131,"author":{"gitId":"-"},"content":" studentToUpdate.setEmail(newEmail);"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" StudentAttributes updatedStudent \u003d logic.updateStudentCascade("},{"lineNumber":134,"author":{"gitId":"-"},"content":" StudentAttributes.updateOptionsBuilder(courseId, studentEmail)"},{"lineNumber":135,"author":{"gitId":"-"},"content":" .withName(updateRequest.getName())"},{"lineNumber":136,"author":{"gitId":"-"},"content":" .withNewEmail(updateRequest.getEmail())"},{"lineNumber":137,"author":{"gitId":"-"},"content":" .withTeamName(updateRequest.getTeam())"},{"lineNumber":138,"author":{"gitId":"-"},"content":" .withSectionName(updateRequest.getSection())"},{"lineNumber":139,"author":{"gitId":"-"},"content":" .withComment(updateRequest.getComments())"},{"lineNumber":140,"author":{"gitId":"-"},"content":" .build());"},{"lineNumber":141,"author":{"gitId":"-"},"content":" taskQueuer.scheduleStudentForSearchIndexing(updatedStudent.getCourse(), updatedStudent.getEmail());"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" if (!student.getEmail().equals(updateRequest.getEmail())) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" logic.resetStudentGoogleId(updateRequest.getEmail(), courseId);"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" if (updateRequest.getIsSessionSummarySendEmail()) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" boolean emailSent \u003d sendEmail(courseId, updateRequest.getEmail());"},{"lineNumber":148,"author":{"gitId":"-"},"content":" String statusMessage \u003d emailSent ? SUCCESSFUL_UPDATE_WITH_EMAIL"},{"lineNumber":149,"author":{"gitId":"-"},"content":" : SUCCESSFUL_UPDATE_BUT_EMAIL_FAILED;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return new JsonResult(statusMessage);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":" } catch (EnrollException e) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(\"Trying to update to an email that is already in use\", e);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" return new JsonResult(SUCCESSFUL_UPDATE);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":167,"author":{"gitId":"-"},"content":" * Sends the feedback session summary as an email."},{"lineNumber":168,"author":{"gitId":"-"},"content":" *"},{"lineNumber":169,"author":{"gitId":"-"},"content":" * @return The true if email was sent successfully or false otherwise."},{"lineNumber":170,"author":{"gitId":"-"},"content":" */"},{"lineNumber":171,"author":{"gitId":"-"},"content":" private boolean sendEmail(String courseId, String studentEmail) {"},{"lineNumber":172,"author":{"gitId":"marquestye"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":173,"author":{"gitId":"marquestye"},"content":" EmailWrapper email \u003d sqlEmailGenerator.generateFeedbackSessionSummaryOfCourse("},{"lineNumber":174,"author":{"gitId":"marquestye"},"content":" courseId, studentEmail, EmailType.STUDENT_EMAIL_CHANGED);"},{"lineNumber":175,"author":{"gitId":"marquestye"},"content":" EmailSendingStatus status \u003d emailSender.sendEmail(email);"},{"lineNumber":176,"author":{"gitId":"marquestye"},"content":" return status.isSuccess();"},{"lineNumber":177,"author":{"gitId":"marquestye"},"content":" } else {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d emailGenerator.generateFeedbackSessionSummaryOfCourse("},{"lineNumber":179,"author":{"gitId":"-"},"content":" courseId, studentEmail, EmailType.STUDENT_EMAIL_CHANGED);"},{"lineNumber":180,"author":{"gitId":"-"},"content":" EmailSendingStatus status \u003d emailSender.sendEmail(email);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return status.isSuccess();"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":68,"-":117}},{"path":"src/test/java/teammates/common/datatransfer/SqlSessionResultsBundleTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.common.datatransfer;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.HashMap;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import java.util.Map;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" * SUT: {@link SqlSessionResultsBundle}."},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"public class SqlSessionResultsBundleTest extends BaseTestCase {"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" public void testGetQuestionResponseMap() {"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" SqlDataBundle responseBundle \u003d loadSqlDataBundle(\"/SqlFeedbackSessionResultsBundleTest.json\");"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e allExpectedResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" allExpectedResponses.add(responseBundle.feedbackResponses.get(\"response1ForQ1\").toString());"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" allExpectedResponses.add(responseBundle.feedbackResponses.get(\"response2ForQ1\").toString());"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle \u003d"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" new SqlSessionResultsBundle("},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackQuestions.values()),"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackResponses.values()),"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(),"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" new SqlCourseRoster(new ArrayList\u003c\u003e(responseBundle.students.values()),"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.instructors.values()))"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" ______TS(\"Test question having responses\");"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d responseBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e allResponses \u003d bundle.getQuestionResponseMap().get(fq);"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" assertEquals(2, allResponses.size());"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e allResponsesString \u003d new ArrayList\u003c\u003e();"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" allResponsesString.add(allResponses.get(0).toString());"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" allResponsesString.add(allResponses.get(1).toString());"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" assertEquals(allExpectedResponses, allResponsesString);"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" ______TS(\"Test question having no responses\");"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" fq \u003d responseBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" allResponses \u003d bundle.getQuestionResponseMap().get(fq);"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" assertEquals(0, allResponses.size());"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" public void testGetQuestionMissingResponseMap() {"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" SqlDataBundle responseBundle \u003d loadSqlDataBundle(\"/SqlFeedbackSessionResultsBundleTest.json\");"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e expectedMissingResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" expectedMissingResponses.add(responseBundle.feedbackResponses.get(\"response1ForQ1\").toString());"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" expectedMissingResponses.add(responseBundle.feedbackResponses.get(\"response2ForQ1\").toString());"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle \u003d"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" new SqlSessionResultsBundle("},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackQuestions.values()),"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(),"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackResponses.values()),"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" new SqlCourseRoster(new ArrayList\u003c\u003e(responseBundle.students.values()),"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.instructors.values()))"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" ______TS(\"Test question having missing responses\");"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d responseBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses \u003d bundle.getQuestionMissingResponseMap().get(fq);"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" assertEquals(2, missingResponses.size());"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e missingResponsesString \u003d new ArrayList\u003c\u003e();"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" missingResponsesString.add(missingResponses.get(0).toString());"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" missingResponsesString.add(missingResponses.get(1).toString());"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" assertEquals(expectedMissingResponses, missingResponsesString);"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" ______TS(\"Test question having no missing responses\");"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" fq \u003d responseBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" missingResponses \u003d bundle.getQuestionMissingResponseMap().get(fq);"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" assertEquals(0, missingResponses.size());"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" public void testIsResponseGiverRecipientVisible_typicalCase_shouldReturnCorrectValues() {"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" SqlDataBundle responseBundle \u003d loadSqlDataBundle(\"/SqlFeedbackSessionResultsBundleTest.json\");"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":" FeedbackSession session1Course1 \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question1ForS1C1 \u003d getTypicalFeedbackQuestionForSession(session1Course1);"},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question2ForS1C1 \u003d getTypicalFeedbackQuestionForSession(session1Course1);"},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response1ForQ1S1C1 \u003d getTypicalFeedbackResponseForQuestion(question1ForS1C1);"},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response2ForQ1S1C1 \u003d getTypicalFeedbackResponseForQuestion(question1ForS1C1);"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response1ForQ2S1C1 \u003d getTypicalFeedbackResponseForQuestion(question2ForS1C1);"},{"lineNumber":112,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response2ForQ2S1C1 \u003d getTypicalFeedbackResponseForQuestion(question2ForS1C1);"},{"lineNumber":113,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":114,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response1ForQ1S1C1, true);"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response2ForQ1S1C1, false);"},{"lineNumber":117,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response1ForQ2S1C1, true);"},{"lineNumber":118,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response2ForQ2S1C1, false);"},{"lineNumber":119,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":120,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response1ForQ1S1C1, false);"},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response2ForQ1S1C1, true);"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response1ForQ2S1C1, true);"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response2ForQ2S1C1, false);"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle \u003d"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" new SqlSessionResultsBundle("},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackQuestions.values()),"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackResponses.values()),"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(),"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable,"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable,"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" new SqlCourseRoster(new ArrayList\u003c\u003e(responseBundle.students.values()),"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.instructors.values()))"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" for (Map.Entry\u003cFeedbackResponse, Boolean\u003e visibilityEntry : responseGiverVisibilityTable.entrySet()) {"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" assertEquals(visibilityEntry.getValue(),"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":" bundle.isResponseGiverVisible(visibilityEntry.getKey()));"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":" for (Map.Entry\u003cFeedbackResponse, Boolean\u003e visibilityEntry : responseRecipientVisibilityTable.entrySet()) {"},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" assertEquals(visibilityEntry.getValue(),"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":" bundle.isResponseRecipientVisible(visibilityEntry.getKey()));"},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" public void testIsCommentGiverVisible_typicalCase_shouldReturnCorrectValues() {"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" SqlDataBundle responseBundle \u003d loadSqlDataBundle(\"/SqlFeedbackSessionResultsBundleTest.json\");"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" Map\u003cLong, Boolean\u003e commentGiverVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" commentGiverVisibilityTable.put(1L, true);"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" commentGiverVisibilityTable.put(2L, false);"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle \u003d"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" new SqlSessionResultsBundle("},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackQuestions.values()),"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackResponses.values()),"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(),"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" commentGiverVisibilityTable,"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" new SqlCourseRoster(new ArrayList\u003c\u003e(responseBundle.students.values()),"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.instructors.values()))"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" // Manually add comment IDs as loadSqlDataBundle does not add comment IDs"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment comment1 \u003d responseBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\");"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment comment2 \u003d responseBundle.feedbackResponseComments.get(\"comment2ToResponse1ForQ1\");"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" comment1.setId(1L);"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" comment2.setId(2L);"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" assertTrue(bundle.isCommentGiverVisible(comment1));"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" assertFalse(bundle.isCommentGiverVisible(comment2));"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" public void testGetAnonName_typicalCase_shouldGenerateCorrectly() {"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" String anonName \u003d SqlSessionResultsBundle.getAnonName(FeedbackParticipantType.STUDENTS, \"\");"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" assertTrue(anonName.startsWith(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT));"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" anonName \u003d SqlSessionResultsBundle.getAnonName(FeedbackParticipantType.STUDENTS, \"test@gmail.com\");"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" assertTrue(anonName.startsWith(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT));"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":193}},{"path":"src/test/java/teammates/sqllogic/core/AccountsLogicTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.mock;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.verify;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.when;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountsDb;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * SUT: {@link AccountsLogic}."},{"lineNumber":27,"author":{"gitId":"-"},"content":" */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"public class AccountsLogicTest extends BaseTestCase {"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private AccountsLogic accountsLogic \u003d AccountsLogic.inst();"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private AccountsDb accountsDb;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private NotificationsLogic notificationsLogic;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public void setUpMethod() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" accountsDb \u003d mock(AccountsDb.class);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" notificationsLogic \u003d mock(NotificationsLogic.class);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" usersLogic \u003d mock(UsersLogic.class);"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.initLogicDependencies(accountsDb, notificationsLogic, usersLogic, coursesLogic);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public void testDeleteAccount_accountExists_success() {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" when(accountsLogic.getAccountForGoogleId(googleId)).thenReturn(account);"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccount(googleId);"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" verify(accountsDb, times(1)).deleteAccount(account);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void testDeleteAccountCascade_googleIdExists_success() {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" List\u003cUser\u003e users \u003d new ArrayList\u003c\u003e();"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c 2; ++i) {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" users.add(getTypicalInstructor());"},{"lineNumber":68,"author":{"gitId":"-"},"content":" users.add(getTypicalStudent());"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" when(usersLogic.getAllUsersByGoogleId(googleId)).thenReturn(users);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" when(accountsLogic.getAccountForGoogleId(googleId)).thenReturn(account);"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccountCascade(googleId);"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" for (User user : users) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" verify(usersLogic, times(1)).deleteUser(user);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":" verify(accountsDb, times(1)).deleteAccount(account);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_shouldReturnCorrectReadNotificationId_success()"},{"lineNumber":84,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":87,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":88,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(notification);"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" List\u003cUUID\u003e readNotificationIds \u003d accountsLogic.updateReadNotifications(googleId, notificationId,"},{"lineNumber":94,"author":{"gitId":"-"},"content":" notification.getEndTime());"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" verify(accountsDb, times(1)).getAccountByGoogleId(googleId);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" verify(notificationsLogic, times(1)).getNotification(notificationId);"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" assertEquals(1, readNotificationIds.size());"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertEquals(notificationId, readNotificationIds.get(0));"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_shouldAddReadNotificationToAccount_success()"},{"lineNumber":105,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":112,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(notification);"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime());"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" verify(accountsDb, times(1)).getAccountByGoogleId(googleId);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" verify(notificationsLogic, times(1)).getNotification(notificationId);"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" List\u003cReadNotification\u003e accountReadNotifications \u003d account.getReadNotifications();"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertEquals(1, accountReadNotifications.size());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" ReadNotification readNotification \u003d accountReadNotifications.get(0);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assertSame(account, readNotification.getAccount());"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertSame(notification, readNotification.getNotification());"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_accountDoesNotExist_throwEntityDoesNotExistException() {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":129,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":130,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":131,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(null);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(notification);"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":137,"author":{"gitId":"-"},"content":" () -\u003e accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime()));"},{"lineNumber":138,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to update the read notifications of a non-existent account.\", ex.getMessage());"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":142,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_notificationDoesNotExist_throwEntityDoesNotExistException() {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":144,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":145,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":146,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(null);"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":152,"author":{"gitId":"-"},"content":" () -\u003e accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime()));"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to mark as read a notification that does not exist.\", ex.getMessage());"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":157,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_markExpiredNotificationAsRead_throwInvalidParametersException() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":159,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":160,"author":{"gitId":"-"},"content":" notification.setEndTime(Instant.parse(\"2012-01-01T00:00:00Z\"));"},{"lineNumber":161,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(notification);"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" InvalidParametersException ex \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":168,"author":{"gitId":"-"},"content":" () -\u003e accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime()));"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to mark an expired notification as read.\", ex.getMessage());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" }"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":173,"author":{"gitId":"-"},"content":" public void testGetReadNotificationsId_doesNotHaveReadNotifications_success() {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":175,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":176,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" List\u003cUUID\u003e readNotifications \u003d accountsLogic.getReadNotificationsId(googleId);"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertEquals(0, readNotifications.size());"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":184,"author":{"gitId":"-"},"content":" public void testGetReadNotificationsId_hasReadNotifications_success() {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":186,"author":{"gitId":"-"},"content":" List\u003cReadNotification\u003e readNotifications \u003d new ArrayList\u003c\u003e();"},{"lineNumber":187,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c 10; i++) {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":189,"author":{"gitId":"-"},"content":" ReadNotification readNotification \u003d new ReadNotification(account, notification);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" readNotifications.add(readNotification);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":" account.setReadNotifications(readNotifications);"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":195,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" List\u003cUUID\u003e actualReadNotifications \u003d accountsLogic.getReadNotificationsId(googleId);"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" assertEquals(10, actualReadNotifications.size());"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c 10; i++) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" assertEquals(readNotifications.get(i).getNotification().getId(),"},{"lineNumber":203,"author":{"gitId":"-"},"content":" actualReadNotifications.get(i));"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":3,"-":203}},{"path":"src/test/java/teammates/sqllogic/core/CoursesLogicTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.mock;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.verify;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.when;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import java.time.Duration;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.CoursesDb;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * SUT: {@code CoursesLogic}."},{"lineNumber":31,"author":{"gitId":"-"},"content":" */"},{"lineNumber":32,"author":{"gitId":"-"},"content":"public class CoursesLogicTest extends BaseTestCase {"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private CoursesLogic coursesLogic \u003d CoursesLogic.inst();"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" private UsersLogic usersLogic;"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" private FeedbackSessionsLogic fsLogic;"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" private CoursesDb coursesDb;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public void setUp() {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" coursesDb \u003d mock(CoursesDb.class);"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" fsLogic \u003d mock(FeedbackSessionsLogic.class);"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" usersLogic \u003d mock(UsersLogic.class);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" coursesLogic.initLogicDependencies(coursesDb, fsLogic, usersLogic);"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public void testMoveCourseToRecycleBin_shouldReturnBinnedCourse_success()"},{"lineNumber":52,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":54,"author":{"gitId":"-"},"content":" String courseId \u003d course.getId();"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" Course binnedCourse \u003d coursesLogic.moveCourseToRecycleBin(courseId);"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertNotNull(binnedCourse);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void testMoveCourseToRecycleBin_courseDoesNotExist_throwEntityDoesNotExistException() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" String courseId \u003d getTypicalCourse().getId();"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" () -\u003e coursesLogic.moveCourseToRecycleBin(courseId));"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to move a non-existent course to recycling bin.\", ex.getMessage());"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public void testRestoreCourseFromRecycleBin_shouldSetDeletedAtToNull_success()"},{"lineNumber":78,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":80,"author":{"gitId":"-"},"content":" String courseId \u003d course.getId();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" course.setDeletedAt(Instant.parse(\"2021-01-01T00:00:00Z\"));"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" coursesLogic.restoreCourseFromRecycleBin(courseId);"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertNull(course.getDeletedAt());"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public void testRestoreCourseFromRecycleBin_courseDoesNotExist_throwEntityDoesNotExistException() {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" String courseId \u003d getTypicalCourse().getId();"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":98,"author":{"gitId":"-"},"content":" () -\u003e coursesLogic.restoreCourseFromRecycleBin(courseId));"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to restore a non-existent course from recycling bin.\", ex.getMessage());"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public void testGetSectionNamesForCourse_shouldReturnListOfSectionNames_success() throws EntityDoesNotExistException {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":106,"author":{"gitId":"-"},"content":" String courseId \u003d course.getId();"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" Section s1 \u003d getTypicalSection();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" s1.setName(\"test-sectionName1\");"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" Section s2 \u003d getTypicalSection();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" s2.setName(\"test-sectionName2\");"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" List\u003cSection\u003e sections \u003d new ArrayList\u003c\u003e();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" sections.add(s1);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" sections.add(s2);"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" course.setSections(sections);"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" List\u003cString\u003e sectionNames \u003d coursesLogic.getSectionNamesForCourse(courseId);"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" List\u003cString\u003e expectedSectionNames \u003d List.of(\"test-sectionName1\", \"test-sectionName2\");"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertEquals(expectedSectionNames, sectionNames);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public void testGetSectionNamesForCourse_courseDoesNotExist_throwEntityDoesNotExistException()"},{"lineNumber":133,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" String courseId \u003d getTypicalCourse().getId();"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":139,"author":{"gitId":"-"},"content":" () -\u003e coursesLogic.getSectionNamesForCourse(courseId));"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to get section names for a non-existent course.\", ex.getMessage());"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" public void testCreateCourse_shouldReturnCreatedCourse_success()"},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":147,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":148,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createCourse(course)).thenReturn(course);"},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":151,"author":{"gitId":"domoberzin"},"content":" Course createdCourse \u003d coursesLogic.createCourse(course);"},{"lineNumber":152,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":153,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).createCourse(course);"},{"lineNumber":154,"author":{"gitId":"domoberzin"},"content":" assertNotNull(createdCourse);"},{"lineNumber":155,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":157,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":158,"author":{"gitId":"domoberzin"},"content":" public void testCreateDuplicateCourse_throwEntityAlreadyExistsException()"},{"lineNumber":159,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":160,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":161,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":162,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createCourse(course))"},{"lineNumber":163,"author":{"gitId":"domoberzin"},"content":" .thenThrow(new EntityAlreadyExistsException("},{"lineNumber":164,"author":{"gitId":"domoberzin"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, course.toString())));"},{"lineNumber":165,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":166,"author":{"gitId":"domoberzin"},"content":" EntityAlreadyExistsException ex \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":167,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createCourse(course));"},{"lineNumber":168,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":169,"author":{"gitId":"domoberzin"},"content":" assertEquals(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, course.toString()), ex.getMessage());"},{"lineNumber":170,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":171,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":172,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":173,"author":{"gitId":"domoberzin"},"content":" public void testGetCourse_shouldReturnCourse_success() {"},{"lineNumber":174,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":175,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":176,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":177,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":178,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":179,"author":{"gitId":"domoberzin"},"content":" Course returnedCourse \u003d coursesLogic.getCourse(courseId);"},{"lineNumber":180,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":181,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":182,"author":{"gitId":"domoberzin"},"content":" assertNotNull(returnedCourse);"},{"lineNumber":183,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":184,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":185,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":186,"author":{"gitId":"domoberzin"},"content":" public void testDeleteCourseCascade_shouldDeleteCourse_success() {"},{"lineNumber":187,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":188,"author":{"gitId":"domoberzin"},"content":" List\u003cInstructor\u003e instructors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":189,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackSession\u003e feedbackSessions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":190,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":191,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fs \u003d new FeedbackSession(\"test-fs\", course, \"test@email.com\","},{"lineNumber":192,"author":{"gitId":"domoberzin"},"content":" \"test\", Instant.now(), Instant.now(), Instant.now(), Instant.now(), Duration.ofSeconds(60),"},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" false, false, false);"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" feedbackSessions.add(fs);"},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" instructors.add(getTypicalInstructor());"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":" when(fsLogic.getFeedbackSessionsForCourse(course.getId())).thenReturn(feedbackSessions);"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" when(usersLogic.getInstructorsForCourse(course.getId())).thenReturn(instructors);"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(course.getId())).thenReturn(course);"},{"lineNumber":200,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":201,"author":{"gitId":"domoberzin"},"content":" coursesLogic.deleteCourseCascade(course.getId());"},{"lineNumber":202,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":203,"author":{"gitId":"domoberzin"},"content":" verify(usersLogic, times(1)).deleteStudentsInCourseCascade(course.getId());"},{"lineNumber":204,"author":{"gitId":"domoberzin"},"content":" verify(usersLogic, times(1)).getInstructorsForCourse(course.getId());"},{"lineNumber":205,"author":{"gitId":"domoberzin"},"content":" verify(usersLogic, times(1)).deleteInstructorCascade(course.getId(), instructors.get(0).getEmail());"},{"lineNumber":206,"author":{"gitId":"domoberzin"},"content":" verify(fsLogic, times(1)).deleteFeedbackSessionCascade(fs.getName(), course.getId());"},{"lineNumber":207,"author":{"gitId":"domoberzin"},"content":" verify(fsLogic, times(1)).getFeedbackSessionsForCourse(course.getId());"},{"lineNumber":208,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).deleteCourse(course);"},{"lineNumber":209,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).deleteSectionsByCourseId(course.getId());"},{"lineNumber":210,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":211,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":212,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":213,"author":{"gitId":"domoberzin"},"content":" public void testUpdateCourse_shouldReturnUpdatedCourse_success()"},{"lineNumber":214,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":215,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":216,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":217,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":218,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":219,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":220,"author":{"gitId":"domoberzin"},"content":" Course updatedCourse \u003d coursesLogic.updateCourse(courseId, \"Test Course 1\", \"Asia/India\");"},{"lineNumber":221,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":222,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":223,"author":{"gitId":"domoberzin"},"content":" assertNotNull(updatedCourse);"},{"lineNumber":224,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Test Course 1\", updatedCourse.getName());"},{"lineNumber":225,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Asia/India\", updatedCourse.getTimeZone());"},{"lineNumber":226,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":227,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":228,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":229,"author":{"gitId":"domoberzin"},"content":" public void testUpdateCourse_throwEntityDoesNotExistException()"},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":233,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":234,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":235,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":236,"author":{"gitId":"domoberzin"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":237,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.updateCourse(courseId, course.getName(), \"Asia/Singapore\"));"},{"lineNumber":238,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":239,"author":{"gitId":"domoberzin"},"content":" assertEquals(ERROR_UPDATE_NON_EXISTENT + Course.class, ex.getMessage());"},{"lineNumber":240,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":241,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":242,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":243,"author":{"gitId":"domoberzin"},"content":" public void testUpdateCourse_throwInvalidParametersException()"},{"lineNumber":244,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":245,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":246,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":247,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":248,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":249,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":250,"author":{"gitId":"domoberzin"},"content":" InvalidParametersException ex \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":251,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.updateCourse(courseId, \"\", \"Asia/Singapore\"));"},{"lineNumber":252,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":253,"author":{"gitId":"domoberzin"},"content":" String expectedMessage \u003d \"The field \u0027course name\u0027 is empty.\""},{"lineNumber":254,"author":{"gitId":"domoberzin"},"content":" + \" The value of a/an course name should be no longer than 80 characters.\""},{"lineNumber":255,"author":{"gitId":"domoberzin"},"content":" + \" It should not be empty.\";"},{"lineNumber":256,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":257,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedMessage, ex.getMessage());"},{"lineNumber":258,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":259,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":260,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":261,"author":{"gitId":"domoberzin"},"content":" public void testCreateSection_shouldReturnCreatedSection_success()"},{"lineNumber":262,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":263,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":264,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":265,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createSection(section)).thenReturn(section);"},{"lineNumber":266,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":267,"author":{"gitId":"domoberzin"},"content":" Section createdSection \u003d coursesLogic.createSection(section);"},{"lineNumber":268,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":269,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).createSection(section);"},{"lineNumber":270,"author":{"gitId":"domoberzin"},"content":" assertNotNull(createdSection);"},{"lineNumber":271,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":272,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":273,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":274,"author":{"gitId":"domoberzin"},"content":" public void testCreateDuplicateSection_throwEntityAlreadyExistsException()"},{"lineNumber":275,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":276,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":277,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":278,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createSection(section))"},{"lineNumber":279,"author":{"gitId":"domoberzin"},"content":" .thenThrow(new EntityAlreadyExistsException("},{"lineNumber":280,"author":{"gitId":"domoberzin"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, section.toString())));"},{"lineNumber":281,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":282,"author":{"gitId":"domoberzin"},"content":" EntityAlreadyExistsException ex \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":283,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createSection(section));"},{"lineNumber":284,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":285,"author":{"gitId":"domoberzin"},"content":" assertEquals(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, section.toString()), ex.getMessage());"},{"lineNumber":286,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":287,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":288,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":289,"author":{"gitId":"domoberzin"},"content":" public void testCreateSectionInvalidName_throwInvalidParametersException()"},{"lineNumber":290,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":291,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":292,"author":{"gitId":"domoberzin"},"content":" section.setName(null);"},{"lineNumber":293,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":294,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createSection(section)).thenThrow(new InvalidParametersException(section.getInvalidityInfo()));"},{"lineNumber":295,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":296,"author":{"gitId":"domoberzin"},"content":" InvalidParametersException ex \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":297,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createSection(section));"},{"lineNumber":298,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":299,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"The provided section name is not acceptable to TEAMMATES as it cannot be empty.\", ex.getMessage());"},{"lineNumber":300,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":301,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":302,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":303,"author":{"gitId":"domoberzin"},"content":" public void testGetSectionByCourseIdAndTeam_shouldReturnSection_success() {"},{"lineNumber":304,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":305,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d section.getCourse().getId();"},{"lineNumber":306,"author":{"gitId":"domoberzin"},"content":" String teamName \u003d section.getName();"},{"lineNumber":307,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":308,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getSectionByCourseIdAndTeam(courseId, teamName)).thenReturn(section);"},{"lineNumber":309,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":310,"author":{"gitId":"domoberzin"},"content":" Section returnedSection \u003d coursesLogic.getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":311,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":312,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":313,"author":{"gitId":"domoberzin"},"content":" assertNotNull(returnedSection);"},{"lineNumber":314,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":315,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":316,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":317,"author":{"gitId":"domoberzin"},"content":" public void testGetSectionByCourseIdAndTeam_sectionDoesNotExist_returnNull() {"},{"lineNumber":318,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d getTypicalCourse().getId();"},{"lineNumber":319,"author":{"gitId":"domoberzin"},"content":" String teamName \u003d getTypicalSection().getName();"},{"lineNumber":320,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":321,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getSectionByCourseIdAndTeam(courseId, teamName)).thenReturn(null);"},{"lineNumber":322,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":323,"author":{"gitId":"domoberzin"},"content":" Section returnedSection \u003d coursesLogic.getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":324,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":325,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":326,"author":{"gitId":"domoberzin"},"content":" assertNull(returnedSection);"},{"lineNumber":327,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":328,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":329,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":330,"author":{"gitId":"domoberzin"},"content":" public void testGetCourseInstitute_shouldReturnInstitute_success() {"},{"lineNumber":331,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":332,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":333,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":334,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":335,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":336,"author":{"gitId":"domoberzin"},"content":" String institute \u003d coursesLogic.getCourseInstitute(courseId);"},{"lineNumber":337,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":338,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":339,"author":{"gitId":"domoberzin"},"content":" assertNotNull(institute);"},{"lineNumber":340,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":341,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":342,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":343,"author":{"gitId":"domoberzin"},"content":" public void testGetCourseInstituteNonExistentCourse_throwAssertionError() {"},{"lineNumber":344,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":345,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":346,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":347,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":348,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":349,"author":{"gitId":"domoberzin"},"content":" AssertionError ex \u003d assertThrows(AssertionError.class,"},{"lineNumber":350,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.getCourseInstitute(courseId));"},{"lineNumber":351,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":352,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Trying to getCourseInstitute for inexistent course with id \" + courseId, ex.getMessage());"},{"lineNumber":353,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":354,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":355,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":356,"author":{"gitId":"domoberzin"},"content":" public void testCreateTeam_shouldReturnCreatedTeam_success()"},{"lineNumber":357,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":358,"author":{"gitId":"domoberzin"},"content":" Team team \u003d getTypicalTeam();"},{"lineNumber":359,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":360,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createTeam(team)).thenReturn(team);"},{"lineNumber":361,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":362,"author":{"gitId":"domoberzin"},"content":" Team createdTeam \u003d coursesLogic.createTeam(team);"},{"lineNumber":363,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":364,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).createTeam(team);"},{"lineNumber":365,"author":{"gitId":"domoberzin"},"content":" assertNotNull(createdTeam);"},{"lineNumber":366,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":367,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":368,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":369,"author":{"gitId":"domoberzin"},"content":" public void testCreateDuplicateTeam_throwEntityAlreadyExistsException()"},{"lineNumber":370,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":371,"author":{"gitId":"domoberzin"},"content":" Team team \u003d getTypicalTeam();"},{"lineNumber":372,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":373,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createTeam(team)).thenThrow("},{"lineNumber":374,"author":{"gitId":"domoberzin"},"content":" new EntityAlreadyExistsException("},{"lineNumber":375,"author":{"gitId":"domoberzin"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, team.toString())));"},{"lineNumber":376,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":377,"author":{"gitId":"domoberzin"},"content":" EntityAlreadyExistsException ex \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":378,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createTeam(team));"},{"lineNumber":379,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":380,"author":{"gitId":"domoberzin"},"content":" assertEquals(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, team.toString()), ex.getMessage());"},{"lineNumber":381,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":382,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":383,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":384,"author":{"gitId":"domoberzin"},"content":" public void testCreateTeamInvalidName_throwInvalidParametersException()"},{"lineNumber":385,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":386,"author":{"gitId":"domoberzin"},"content":" Team team \u003d getTypicalTeam();"},{"lineNumber":387,"author":{"gitId":"domoberzin"},"content":" team.setName(null);"},{"lineNumber":388,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":389,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createTeam(team)).thenThrow(new InvalidParametersException(team.getInvalidityInfo()));"},{"lineNumber":390,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":391,"author":{"gitId":"domoberzin"},"content":" InvalidParametersException ex \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":392,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createTeam(team));"},{"lineNumber":393,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":394,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"The provided team name is not acceptable to TEAMMATES as it cannot be empty.\", ex.getMessage());"},{"lineNumber":395,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":396,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":397,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":398,"author":{"gitId":"domoberzin"},"content":" public void testGetTeamsForSection_shouldReturnListOfTeams_success() {"},{"lineNumber":399,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":400,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":401,"author":{"gitId":"domoberzin"},"content":" Team t1 \u003d getTypicalTeam();"},{"lineNumber":402,"author":{"gitId":"domoberzin"},"content":" t1.setName(\"test-teamName1\");"},{"lineNumber":403,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":404,"author":{"gitId":"domoberzin"},"content":" Team t2 \u003d getTypicalTeam();"},{"lineNumber":405,"author":{"gitId":"domoberzin"},"content":" t2.setName(\"test-teamName2\");"},{"lineNumber":406,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":407,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e teams \u003d new ArrayList\u003c\u003e();"},{"lineNumber":408,"author":{"gitId":"domoberzin"},"content":" teams.add(t1);"},{"lineNumber":409,"author":{"gitId":"domoberzin"},"content":" teams.add(t2);"},{"lineNumber":410,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":411,"author":{"gitId":"domoberzin"},"content":" section.setTeams(teams);"},{"lineNumber":412,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":413,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getTeamsForSection(section)).thenReturn(teams);"},{"lineNumber":414,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":415,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e returnedTeams \u003d coursesLogic.getTeamsForSection(section);"},{"lineNumber":416,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":417,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getTeamsForSection(section);"},{"lineNumber":418,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":419,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e expectedTeams \u003d List.of(t1, t2);"},{"lineNumber":420,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":421,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedTeams, returnedTeams);"},{"lineNumber":422,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":423,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":424,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":425,"author":{"gitId":"domoberzin"},"content":" public void testGetTeamsForCourse_shouldReturnListOfTeams_success() {"},{"lineNumber":426,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":427,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":428,"author":{"gitId":"domoberzin"},"content":" Team t1 \u003d getTypicalTeam();"},{"lineNumber":429,"author":{"gitId":"domoberzin"},"content":" t1.setName(\"test-teamName1\");"},{"lineNumber":430,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":431,"author":{"gitId":"domoberzin"},"content":" Team t2 \u003d getTypicalTeam();"},{"lineNumber":432,"author":{"gitId":"domoberzin"},"content":" t2.setName(\"test-teamName2\");"},{"lineNumber":433,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":434,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e teams \u003d new ArrayList\u003c\u003e();"},{"lineNumber":435,"author":{"gitId":"domoberzin"},"content":" teams.add(t1);"},{"lineNumber":436,"author":{"gitId":"domoberzin"},"content":" teams.add(t2);"},{"lineNumber":437,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":438,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getTeamsForCourse(course.getId())).thenReturn(teams);"},{"lineNumber":439,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":440,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e returnedTeams \u003d coursesLogic.getTeamsForCourse(course.getId());"},{"lineNumber":441,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":442,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getTeamsForCourse(course.getId());"},{"lineNumber":443,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":444,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e expectedTeams \u003d List.of(t1, t2);"},{"lineNumber":445,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":446,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedTeams, returnedTeams);"},{"lineNumber":447,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":448,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":319,"-":129}},{"path":"src/test/java/teammates/sqllogic/core/FeedbackQuestionsLogicTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.mock;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.when;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":15,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackQuestionsDb;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackQuestionsLogic}."},{"lineNumber":26,"author":{"gitId":"-"},"content":" */"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public class FeedbackQuestionsLogicTest extends BaseTestCase {"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic \u003d FeedbackQuestionsLogic.inst();"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private FeedbackQuestionsDb fqDb;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public void setUpMethod() {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" fqDb \u003d mock(FeedbackQuestionsDb.class);"},{"lineNumber":38,"author":{"gitId":"-"},"content":" CoursesLogic coursesLogic \u003d mock(CoursesLogic.class);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" usersLogic \u003d mock(UsersLogic.class);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" FeedbackResponsesLogic frLogic \u003d mock(FeedbackResponsesLogic.class);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" FeedbackSessionsLogic feedbackSessionsLogic \u003d mock(FeedbackSessionsLogic.class);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" fqLogic.initLogicDependencies(fqDb, coursesLogic, frLogic, usersLogic, feedbackSessionsLogic);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForSession_questionNumbersInOrder_success() {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":48,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d createQuestionList(fs, 5);"},{"lineNumber":51,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":52,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questions);"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForSession(fs);"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertEquals(questions.size(), actualQuestions.size());"},{"lineNumber":57,"author":{"gitId":"-"},"content":" assertTrue(questions.containsAll(actualQuestions));"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForSession_questionNumbersOutOfOrder_success() {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":66,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":68,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" fq1.setQuestionNumber(1);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" fq2.setQuestionNumber(2);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" fq3.setQuestionNumber(3);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" fq4.setQuestionNumber(4);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" fq5.setQuestionNumber(5);"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questions \u003d new ArrayList\u003c\u003e(List.of(fq2, fq4, fq3, fq1, fq5));"},{"lineNumber":77,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":78,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questions);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForSession(fs);"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertEquals(questions.size(), actualQuestions.size());"},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertTrue(questions.containsAll(actualQuestions));"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void testCreateFeedbackQuestion_questionNumbersAreConsistent_canCreateFeedbackQuestion()"},{"lineNumber":88,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":90,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackQuestion newQuestion \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" newQuestion.setQuestionNumber(5);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsBefore \u003d createQuestionList(fs, 4);"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":97,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questionsBefore);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" when(fqDb.createFeedbackQuestion(newQuestion)).thenReturn(newQuestion);"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" FeedbackQuestion createdQuestion \u003d fqLogic.createFeedbackQuestion(newQuestion);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(newQuestion, createdQuestion);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public void testCreateFeedbackQuestion_questionNumbersAreInconsistent_canCreateFeedbackQuestion()"},{"lineNumber":106,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":112,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" fq1.setQuestionNumber(2);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" fq2.setQuestionNumber(3);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" fq3.setQuestionNumber(4);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" fq4.setQuestionNumber(5);"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questionsBefore \u003d new ArrayList\u003c\u003e(List.of(fq1, fq2, fq3, fq4));"},{"lineNumber":120,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questionsBefore);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" when(fqDb.createFeedbackQuestion(fq5)).thenReturn(fq5);"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" FeedbackQuestion createdQuestion \u003d fqLogic.createFeedbackQuestion(fq5);"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" assertEquals(fq5, createdQuestion);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" @Test(enabled \u003d false)"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public void testCreateFeedbackQuestion_oldQuestionNumberLargerThanNewQuestionNumber_adjustQuestionNumberCorrectly()"},{"lineNumber":131,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":133,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" fq1.setQuestionNumber(2);"},{"lineNumber":140,"author":{"gitId":"-"},"content":" fq2.setQuestionNumber(3);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" fq3.setQuestionNumber(4);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" fq4.setQuestionNumber(5);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" fq5.setQuestionNumber(1);"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questionsBefore \u003d new ArrayList\u003c\u003e(List.of(fq1, fq2, fq3, fq4));"},{"lineNumber":146,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":147,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questionsBefore);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" when(fqDb.createFeedbackQuestion(fq5)).thenReturn(fq5);"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" fqLogic.createFeedbackQuestion(fq5);"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" assertEquals(1, fq1.getQuestionNumber().intValue());"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertEquals(2, fq2.getQuestionNumber().intValue());"},{"lineNumber":154,"author":{"gitId":"-"},"content":" assertEquals(3, fq3.getQuestionNumber().intValue());"},{"lineNumber":155,"author":{"gitId":"-"},"content":" assertEquals(4, fq4.getQuestionNumber().intValue());"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" @Test(enabled \u003d false)"},{"lineNumber":159,"author":{"gitId":"-"},"content":" public void testCreateFeedbackQuestion_oldQuestionNumberSmallerThanNewQuestionNumber_adjustQuestionNumberCorrectly()"},{"lineNumber":160,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":166,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":167,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" fq1.setQuestionNumber(0);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" fq2.setQuestionNumber(1);"},{"lineNumber":170,"author":{"gitId":"-"},"content":" fq3.setQuestionNumber(2);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" fq4.setQuestionNumber(3);"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questionsBefore \u003d new ArrayList\u003c\u003e(List.of(fq1, fq2, fq3, fq4));"},{"lineNumber":174,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":175,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questionsBefore);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" when(fqDb.createFeedbackQuestion(fq5)).thenReturn(fq5);"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" fqLogic.createFeedbackQuestion(fq5);"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertEquals(1, fq1.getQuestionNumber().intValue());"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertEquals(2, fq2.getQuestionNumber().intValue());"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertEquals(3, fq3.getQuestionNumber().intValue());"},{"lineNumber":183,"author":{"gitId":"-"},"content":" assertEquals(4, fq4.getQuestionNumber().intValue());"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":187,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForStudents_success() {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":189,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":192,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsSelf \u003d List.of(fq1, fq2);"},{"lineNumber":196,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsStudent \u003d List.of(fq3, fq4);"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2, fq3, fq4);"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.SELF)).thenReturn(questionsSelf);"},{"lineNumber":201,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.STUDENTS)).thenReturn(questionsStudent);"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForStudents(fs);"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":206,"author":{"gitId":"-"},"content":" assertTrue(actualQuestions.containsAll(actualQuestions));"},{"lineNumber":207,"author":{"gitId":"-"},"content":" }"},{"lineNumber":208,"author":{"gitId":"-"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForInstructors_instructorIsCreator_success() {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":212,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":213,"author":{"gitId":"-"},"content":" fs.setCreatorEmail(\"instr1@teammates.tmt\");"},{"lineNumber":214,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":215,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":217,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsInstructors \u003d List.of(fq1, fq2);"},{"lineNumber":220,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsSelf \u003d List.of(fq3, fq4);"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.INSTRUCTORS))"},{"lineNumber":223,"author":{"gitId":"-"},"content":" .thenReturn(questionsInstructors);"},{"lineNumber":224,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.SELF)).thenReturn(questionsSelf);"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2, fq3, fq4);"},{"lineNumber":227,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForInstructors(fs, \"instr1@teammates.tmt\");"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":230,"author":{"gitId":"-"},"content":" assertTrue(actualQuestions.containsAll(actualQuestions));"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":234,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForInstructors_instructorIsNotCreator_success() {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":236,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" fs.setCreatorEmail(\"instr1@teammates.tmt\");"},{"lineNumber":238,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":239,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":240,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":241,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsInstructors \u003d List.of(fq1, fq2);"},{"lineNumber":244,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsSelf \u003d List.of(fq3, fq4);"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.INSTRUCTORS))"},{"lineNumber":247,"author":{"gitId":"-"},"content":" .thenReturn(questionsInstructors);"},{"lineNumber":248,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.SELF)).thenReturn(questionsSelf);"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2);"},{"lineNumber":251,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForInstructors(fs, \"instr2@teammates.tmt\");"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":254,"author":{"gitId":"-"},"content":" assertTrue(actualQuestions.containsAll(actualQuestions));"},{"lineNumber":255,"author":{"gitId":"-"},"content":" }"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":" @Test(enabled \u003d false)"},{"lineNumber":258,"author":{"gitId":"-"},"content":" public void testGetRecipientsOfQuestion_giverTypeStudents() {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":260,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":261,"author":{"gitId":"-"},"content":" FeedbackQuestion fq \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" Student s1 \u003d getTypicalStudent();"},{"lineNumber":264,"author":{"gitId":"-"},"content":" Student s2 \u003d getTypicalStudent();"},{"lineNumber":265,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsInCourse \u003d List.of(s1, s2);"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":" SqlCourseRoster courseRoster \u003d new SqlCourseRoster(studentsInCourse, null);"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" when(usersLogic.getStudentsForCourse(\"course-1\")).thenReturn(studentsInCourse);"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" ______TS(\"response to students except self\");"},{"lineNumber":272,"author":{"gitId":"-"},"content":" assertEquals(fqLogic.getRecipientsOfQuestion(fq, null, s2, null).size(), studentsInCourse.size() - 1);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" assertEquals(fqLogic.getRecipientsOfQuestion(fq, null, s2, courseRoster).size(), studentsInCourse.size() - 1);"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" }"},{"lineNumber":276,"author":{"gitId":"-"},"content":""},{"lineNumber":277,"author":{"gitId":"-"},"content":" private List\u003cFeedbackQuestion\u003e createQuestionList(FeedbackSession fs, int numOfQuestions) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":279,"author":{"gitId":"-"},"content":" for (int i \u003d 1; i \u003c\u003d numOfQuestions; i++) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" FeedbackQuestion fq \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" fq.setQuestionNumber(i);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" questions.add(fq);"},{"lineNumber":283,"author":{"gitId":"-"},"content":" }"},{"lineNumber":284,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":5,"-":281}},{"path":"src/test/java/teammates/sqllogic/core/FeedbackResponseCommentsLogicTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.mock;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.verify;"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.when;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import java.util.ArrayList;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.output.CommentVisibilityType;"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.request.FeedbackResponseCommentUpdateRequest;"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@link FeedbackResponseCommentsLogic}."},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"public class FeedbackResponseCommentsLogicTest extends BaseTestCase {"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" private static final Long TYPICAL_ID \u003d 100L;"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" private static final Long NOT_TYPICAL_ID \u003d 101L;"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" private static final UUID TYPICAL_UUID \u003d UUID.randomUUID();"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" private FeedbackResponseCommentsLogic frcLogic \u003d FeedbackResponseCommentsLogic.inst();"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" private FeedbackResponseCommentsDb frcDb;"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" @BeforeMethod"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" public void setUpMethod() {"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" frcDb \u003d mock(FeedbackResponseCommentsDb.class);"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" frcLogic.initLogicDependencies(frcDb);"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" public void testGetComment_commentAlreadyExists_success() {"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseComment(comment.getId())).thenReturn(comment);"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d frcLogic.getFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" assertEquals(comment, commentFetched);"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" public void testGetCommentForResponse_commentAlreadyExists_success() {"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" List\u003cFeedbackResponseComment\u003e expectedReturn \u003d new ArrayList\u003c\u003e();"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" expectedReturn.add(getTypicalResponseComment(TYPICAL_ID));"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseCommentsForResponse(TYPICAL_UUID)).thenReturn(expectedReturn);"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" List\u003cFeedbackResponseComment\u003e fetchedReturn \u003d frcLogic.getFeedbackResponseCommentsForResponse(TYPICAL_UUID);"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expectedReturn, fetchedReturn);"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" public void testGetCommentForResponseFromParticipant_commentAlreadyExists_success() {"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseCommentForResponseFromParticipant(TYPICAL_UUID)).thenReturn(comment);"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d frcLogic"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" .getFeedbackResponseCommentForResponseFromParticipant(TYPICAL_UUID);"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" assertEquals(comment, commentFetched);"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" public void testGetComment_commentDoesNotExist_returnsNull() {"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseComment(NOT_TYPICAL_ID)).thenReturn(null);"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d frcLogic.getFeedbackResponseComment(NOT_TYPICAL_ID);"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).getFeedbackResponseComment(NOT_TYPICAL_ID);"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" assertNull(commentFetched);"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" public void testCreateComment_commentDoesNotExist_success()"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" frcLogic.createFeedbackResponseComment(comment);"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).createFeedbackResponseComment(comment);"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" public void testCreateComment_commentAlreadyExists_throwsEntityAlreadyExistsException()"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.createFeedbackResponseComment(comment)).thenThrow(EntityAlreadyExistsException.class);"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" () -\u003e frcLogic.createFeedbackResponseComment(comment));"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" public void testDeleteComment_commentExists_success() {"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" frcLogic.deleteFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).deleteFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateCommentEmails_success() {"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" String courseId \u003d \"Course_id\";"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" String oldEmail \u003d \"oldEmail@gmail.com\";"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" String newEmail \u003d \"newEmail@gmail.com\";"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" frcLogic.updateFeedbackResponseCommentsEmails(courseId, oldEmail, newEmail);"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).updateGiverEmailOfFeedbackResponseComments(courseId, oldEmail, newEmail);"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).updateLastEditorEmailOfFeedbackResponseComments(courseId, oldEmail, newEmail);"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateComment_entityAlreadyExists_success()"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseComment(comment.getId())).thenReturn(comment);"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" String updatedCommentText \u003d \"Update\";"},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":" String lastEditorEmail \u003d \"me@gmail.com\";"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":" List\u003cCommentVisibilityType\u003e showCommentTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":" showCommentTo.add(CommentVisibilityType.STUDENTS);"},{"lineNumber":138,"author":{"gitId":"mingyuanc"},"content":" showCommentTo.add(CommentVisibilityType.INSTRUCTORS);"},{"lineNumber":139,"author":{"gitId":"mingyuanc"},"content":" List\u003cCommentVisibilityType\u003e showGiverNameTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":140,"author":{"gitId":"mingyuanc"},"content":" showGiverNameTo.add(CommentVisibilityType.INSTRUCTORS);"},{"lineNumber":141,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":142,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseCommentUpdateRequest updateRequest \u003d new FeedbackResponseCommentUpdateRequest("},{"lineNumber":143,"author":{"gitId":"mingyuanc"},"content":" updatedCommentText, showCommentTo, showGiverNameTo);"},{"lineNumber":144,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment updatedComment \u003d frcLogic.updateFeedbackResponseComment(TYPICAL_ID, updateRequest,"},{"lineNumber":145,"author":{"gitId":"mingyuanc"},"content":" lastEditorEmail);"},{"lineNumber":146,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":147,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).getFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":148,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":149,"author":{"gitId":"mingyuanc"},"content":" List\u003cFeedbackParticipantType\u003e expectedShowCommentTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":150,"author":{"gitId":"mingyuanc"},"content":" expectedShowCommentTo.add(FeedbackParticipantType.STUDENTS);"},{"lineNumber":151,"author":{"gitId":"mingyuanc"},"content":" expectedShowCommentTo.add(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":152,"author":{"gitId":"mingyuanc"},"content":" List\u003cFeedbackParticipantType\u003e expectedShowGiverNameTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":153,"author":{"gitId":"mingyuanc"},"content":" expectedShowGiverNameTo.add(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":154,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":155,"author":{"gitId":"mingyuanc"},"content":" assertEquals(TYPICAL_ID, updatedComment.getId());"},{"lineNumber":156,"author":{"gitId":"mingyuanc"},"content":" assertEquals(updatedCommentText, updatedComment.getCommentText());"},{"lineNumber":157,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expectedShowCommentTo, updatedComment.getShowCommentTo());"},{"lineNumber":158,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expectedShowGiverNameTo, updatedComment.getShowGiverNameTo());"},{"lineNumber":159,"author":{"gitId":"mingyuanc"},"content":" assertEquals(lastEditorEmail, updatedComment.getLastEditorEmail());"},{"lineNumber":160,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":161,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":162,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":163,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateComment_entityDoesNotExist() {"},{"lineNumber":164,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":165,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":166,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseComment(comment.getId())).thenReturn(comment);"},{"lineNumber":167,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":168,"author":{"gitId":"mingyuanc"},"content":" long nonExistentId \u003d 101L;"},{"lineNumber":169,"author":{"gitId":"mingyuanc"},"content":" String updatedCommentText \u003d \"Update\";"},{"lineNumber":170,"author":{"gitId":"mingyuanc"},"content":" String lastEditorEmail \u003d \"me@gmail.com\";"},{"lineNumber":171,"author":{"gitId":"mingyuanc"},"content":" List\u003cCommentVisibilityType\u003e showCommentTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":172,"author":{"gitId":"mingyuanc"},"content":" showCommentTo.add(CommentVisibilityType.STUDENTS);"},{"lineNumber":173,"author":{"gitId":"mingyuanc"},"content":" showCommentTo.add(CommentVisibilityType.INSTRUCTORS);"},{"lineNumber":174,"author":{"gitId":"mingyuanc"},"content":" List\u003cCommentVisibilityType\u003e showGiverNameTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":175,"author":{"gitId":"mingyuanc"},"content":" showGiverNameTo.add(CommentVisibilityType.INSTRUCTORS);"},{"lineNumber":176,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":177,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseCommentUpdateRequest updateRequest \u003d new FeedbackResponseCommentUpdateRequest("},{"lineNumber":178,"author":{"gitId":"mingyuanc"},"content":" updatedCommentText, showCommentTo, showGiverNameTo);"},{"lineNumber":179,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":180,"author":{"gitId":"mingyuanc"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":181,"author":{"gitId":"mingyuanc"},"content":" () -\u003e frcLogic.updateFeedbackResponseComment(nonExistentId, updateRequest, lastEditorEmail));"},{"lineNumber":182,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":183,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Trying to update a feedback response comment that does not exist.\", ex.getMessage());"},{"lineNumber":184,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":185,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":185}},{"path":"src/test/java/teammates/storage/sqlapi/FeedbackQuestionsDbTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marquestye"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":3,"author":{"gitId":"marquestye"},"content":"import static org.mockito.ArgumentMatchers.any;"},{"lineNumber":4,"author":{"gitId":"marquestye"},"content":"import static org.mockito.Mockito.mockStatic;"},{"lineNumber":5,"author":{"gitId":"marquestye"},"content":"import static org.mockito.Mockito.never;"},{"lineNumber":6,"author":{"gitId":"marquestye"},"content":"import static org.mockito.Mockito.spy;"},{"lineNumber":7,"author":{"gitId":"marquestye"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":8,"author":{"gitId":"marquestye"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":9,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":10,"author":{"gitId":"marquestye"},"content":"import java.util.List;"},{"lineNumber":11,"author":{"gitId":"marquestye"},"content":"import java.util.UUID;"},{"lineNumber":12,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":13,"author":{"gitId":"marquestye"},"content":"import org.mockito.MockedStatic;"},{"lineNumber":14,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":15,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":16,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.Test;"},{"lineNumber":17,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":18,"author":{"gitId":"marquestye"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":19,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":20,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":21,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":22,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":23,"author":{"gitId":"marquestye"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":24,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":25,"author":{"gitId":"marquestye"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"marquestye"},"content":" * SUT: {@link FeedbackQuestionsDb}."},{"lineNumber":27,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":28,"author":{"gitId":"marquestye"},"content":"public class FeedbackQuestionsDbTest extends BaseTestCase {"},{"lineNumber":29,"author":{"gitId":"marquestye"},"content":" private FeedbackQuestionsDb feedbackQuestionsDb;"},{"lineNumber":30,"author":{"gitId":"marquestye"},"content":" private MockedStatic\u003cHibernateUtil\u003e mockHibernateUtil;"},{"lineNumber":31,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":32,"author":{"gitId":"marquestye"},"content":" @BeforeMethod"},{"lineNumber":33,"author":{"gitId":"marquestye"},"content":" public void setUpMethod() {"},{"lineNumber":34,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil \u003d mockStatic(HibernateUtil.class);"},{"lineNumber":35,"author":{"gitId":"marquestye"},"content":" feedbackQuestionsDb \u003d spy(FeedbackQuestionsDb.class);"},{"lineNumber":36,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":37,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":38,"author":{"gitId":"marquestye"},"content":" @AfterMethod"},{"lineNumber":39,"author":{"gitId":"marquestye"},"content":" public void teardownMethod() {"},{"lineNumber":40,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.close();"},{"lineNumber":41,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":42,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":43,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":44,"author":{"gitId":"marquestye"},"content":" public void testCreateFeedbackQuestion_success() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":45,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" feedbackQuestionsDb.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":48,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":49,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackQuestion), times(1));"},{"lineNumber":50,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":51,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":52,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":53,"author":{"gitId":"marquestye"},"content":" public void testCreateFeedbackQuestion_questionAlreadyExists_throwsEntityAlreadyExistsException() {"},{"lineNumber":54,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":55,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d feedbackQuestion.getId();"},{"lineNumber":56,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":57,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(feedbackQuestion);"},{"lineNumber":58,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":59,"author":{"gitId":"marquestye"},"content":" EntityAlreadyExistsException eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":60,"author":{"gitId":"marquestye"},"content":" () -\u003e feedbackQuestionsDb.createFeedbackQuestion(feedbackQuestion));"},{"lineNumber":61,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":62,"author":{"gitId":"marquestye"},"content":" assertEquals(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, feedbackQuestion.toString()), eaee.getMessage());"},{"lineNumber":63,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackQuestion), never());"},{"lineNumber":64,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":65,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":66,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":67,"author":{"gitId":"marquestye"},"content":" public void testCreateFeedbackQuestion_invalidQuestion_throwsInvalidParametersException() {"},{"lineNumber":68,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":69,"author":{"gitId":"marquestye"},"content":" feedbackQuestion.setGiverType(FeedbackParticipantType.NONE);"},{"lineNumber":70,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":71,"author":{"gitId":"marquestye"},"content":" InvalidParametersException ipe \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":72,"author":{"gitId":"marquestye"},"content":" () -\u003e feedbackQuestionsDb.createFeedbackQuestion(feedbackQuestion));"},{"lineNumber":73,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":74,"author":{"gitId":"marquestye"},"content":" assertEquals(feedbackQuestion.getInvalidityInfo(), List.of(ipe.getMessage()));"},{"lineNumber":75,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackQuestion), never());"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":78,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" public void testGetFeedbackQuestion_success() {"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d feedbackQuestion.getId();"},{"lineNumber":82,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":83,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(feedbackQuestion);"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":85,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion retrievedSession \u003d feedbackQuestionsDb.getFeedbackQuestion(fqid);"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":87,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid), times(1));"},{"lineNumber":88,"author":{"gitId":"marquestye"},"content":" assertEquals(feedbackQuestion, retrievedSession);"},{"lineNumber":89,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":90,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":91,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":92,"author":{"gitId":"marquestye"},"content":" public void testGetFeedbackQuestion_questionDoesNotExist_returnNull() {"},{"lineNumber":93,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d UUID.randomUUID();"},{"lineNumber":94,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":95,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(null);"},{"lineNumber":96,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":97,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion retrievedSession \u003d feedbackQuestionsDb.getFeedbackQuestion(fqid);"},{"lineNumber":98,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":99,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid), times(1));"},{"lineNumber":100,"author":{"gitId":"marquestye"},"content":" assertNull(retrievedSession);"},{"lineNumber":101,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":102,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":103,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":104,"author":{"gitId":"marquestye"},"content":" public void testDeleteFeedbackQuestion_success() {"},{"lineNumber":105,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":106,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d feedbackQuestion.getId();"},{"lineNumber":107,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":108,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(feedbackQuestion);"},{"lineNumber":109,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":110,"author":{"gitId":"marquestye"},"content":" feedbackQuestionsDb.deleteFeedbackQuestion(fqid);"},{"lineNumber":111,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":112,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.remove(feedbackQuestion), times(1));"},{"lineNumber":113,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":114,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":115,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":116,"author":{"gitId":"marquestye"},"content":" public void testDeleteFeedbackQuestion_questionDoesNotExist_nothingHappens() {"},{"lineNumber":117,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d UUID.randomUUID();"},{"lineNumber":118,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":119,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(null);"},{"lineNumber":120,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":121,"author":{"gitId":"marquestye"},"content":" feedbackQuestionsDb.deleteFeedbackQuestion(fqid);"},{"lineNumber":122,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":123,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.remove(any()), never());"},{"lineNumber":124,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":125,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":126,"author":{"gitId":"marquestye"},"content":" private FeedbackQuestion getFeedbackQuestion() {"},{"lineNumber":127,"author":{"gitId":"marquestye"},"content":" return getTypicalFeedbackQuestionForSession(getTypicalFeedbackSessionForCourse(getTypicalCourse()));"},{"lineNumber":128,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":129,"author":{"gitId":"marquestye"},"content":"}"}],"authorContributionMap":{"marquestye":129}},{"path":"src/test/java/teammates/storage/sqlapi/FeedbackResponseCommentsDbTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.ArgumentMatchers.anyLong;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.doReturn;"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.mockStatic;"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.never;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.spy;"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import org.mockito.MockedStatic;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@code FeedbackResponseCommentsDb}."},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"public class FeedbackResponseCommentsDbTest extends BaseTestCase {"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" private static final Long TYPICAL_ID \u003d 100L;"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" private static final Long NOT_TYPICAL_ID \u003d 101L;"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" private FeedbackResponseCommentsDb feedbackResponseCommentsDb;"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" private MockedStatic\u003cHibernateUtil\u003e mockHibernateUtil;"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" @BeforeMethod"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" public void setUpMethod() {"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil \u003d mockStatic(HibernateUtil.class);"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" feedbackResponseCommentsDb \u003d spy(FeedbackResponseCommentsDb.class);"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" @AfterMethod"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" public void teardownMethod() {"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.close();"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" public void testCreateComment_commentDoesNotExist_success()"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" feedbackResponseCommentsDb.createFeedbackResponseComment(comment);"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(comment));"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" public void testCreateComment_commentAlreadyExists_throwsEntityAlreadyExistsException() {"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, TYPICAL_ID)).thenReturn(comment);"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" EntityAlreadyExistsException ex \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" () -\u003e feedbackResponseCommentsDb.createFeedbackResponseComment(comment));"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Trying to create an entity that exists: \" + comment.toString(), ex.getMessage());"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(comment), never());"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" public void testGetComment_commentAlreadyExists_success() {"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, TYPICAL_ID)).thenReturn(comment);"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d feedbackResponseCommentsDb.getFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, TYPICAL_ID)).thenReturn(comment);"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" assertEquals(comment, commentFetched);"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" public void testGetComment_commentDoesNotExist_returnsNull() {"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, NOT_TYPICAL_ID)).thenReturn(null);"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d feedbackResponseCommentsDb.getFeedbackResponseComment(NOT_TYPICAL_ID);"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, NOT_TYPICAL_ID), times(1));"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" assertNull(commentFetched);"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" public void testDeleteComment_commentExists_success() {"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, TYPICAL_ID)).thenReturn(comment);"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" feedbackResponseCommentsDb.deleteFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.remove(comment));"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateComment_commentInvalid_throwsInvalidParametersException() {"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" comment.setGiverType(FeedbackParticipantType.SELF);"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" assertThrows(InvalidParametersException.class,"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" () -\u003e feedbackResponseCommentsDb.updateFeedbackResponseComment(comment));"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(comment), never());"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateComment_commentDoesNotExist_throwsEntityDoesNotExistException() {"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(NOT_TYPICAL_ID);"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" () -\u003e feedbackResponseCommentsDb.updateFeedbackResponseComment(comment));"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(comment), never());"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateCourse_success() throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" comment.setCommentText(\"Placeholder Text\");"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" doReturn(comment).when(feedbackResponseCommentsDb).getFeedbackResponseComment(anyLong());"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" feedbackResponseCommentsDb.updateFeedbackResponseComment(comment);"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(comment));"},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":134}},{"path":"src/test/java/teammates/storage/sqlapi/FeedbackSessionsDbTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dishenggg"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.ArgumentMatchers.any;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.doReturn;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.mockStatic;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.never;"},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.spy;"},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"import org.mockito.MockedStatic;"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.Test;"},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":17,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":18,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":19,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":20,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":21,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.TimeHelperExtension;"},{"lineNumber":22,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":23,"author":{"gitId":"dishenggg"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":24,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":25,"author":{"gitId":"dishenggg"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"dishenggg"},"content":" * SUT: {@code FeedbackSessionsDb}."},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":"public class FeedbackSessionsDbTest extends BaseTestCase {"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":" private FeedbackSessionsDb feedbackSessionsDb;"},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" private MockedStatic\u003cHibernateUtil\u003e mockHibernateUtil;"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" @BeforeMethod"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" public void setUpMethod() {"},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil \u003d mockStatic(HibernateUtil.class);"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb \u003d spy(FeedbackSessionsDb.class);"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":" @AfterMethod"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" public void teardownMethod() {"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.close();"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" public void testCreateSession_sessionDoesNotExist_success()"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.createFeedbackSession(feedbackSession);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackSession), times(1));"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":" public void testCreateSession_duplicateSession_throwsEntityAlreadyExistsException()"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":" UUID uuid \u003d feedbackSession.getId();"},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(uuid);"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" () -\u003e feedbackSessionsDb.createFeedbackSession(feedbackSession));"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackSession), never());"},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" public void testCreateSession_invalidParams_throwsInvalidParametersException()"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":" feedbackSession.setName(\"\");"},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":" assertThrows(InvalidParametersException.class, () -\u003e feedbackSessionsDb.createFeedbackSession(feedbackSession));"},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackSession), never());"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" public void testCreateSession_nullParams_throwsAssertionError()"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" assertThrows(AssertionError.class, () -\u003e feedbackSessionsDb.createFeedbackSession(null));"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" public void testGetFeedbackSession_sessionExists_success() {"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" UUID uuid \u003d feedbackSession.getId();"},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackSession.class, uuid)).thenReturn(feedbackSession);"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getFeedbackSession(uuid);"},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackSession.class, uuid), times(1));"},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" assertEquals(feedbackSession, sessionFetched);"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":93,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":94,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":95,"author":{"gitId":"dishenggg"},"content":" public void testGetFeedbackSession_sessionDoesNotExists_returnNull() {"},{"lineNumber":96,"author":{"gitId":"dishenggg"},"content":" UUID randomUuid \u003d UUID.randomUUID();"},{"lineNumber":97,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackSession.class, randomUuid)).thenReturn(null);"},{"lineNumber":98,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":99,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getFeedbackSession(randomUuid);"},{"lineNumber":100,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":101,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackSession.class, randomUuid), times(1));"},{"lineNumber":102,"author":{"gitId":"dishenggg"},"content":" assertNull(sessionFetched);"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":" public void testUpdateFeedbackSession_success() throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":107,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":108,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(any(UUID.class));"},{"lineNumber":109,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":110,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.updateFeedbackSession(feedbackSession);"},{"lineNumber":111,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":112,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), times(1));"},{"lineNumber":113,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":114,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":115,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":116,"author":{"gitId":"dishenggg"},"content":" public void testUpdateFeedbackSession_sessionDoesNotExist_throwsEntityDoesNotExistException()"},{"lineNumber":117,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":118,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":" UUID uuid \u003d feedbackSession.getId();"},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" doReturn(null).when(feedbackSessionsDb).getFeedbackSession(uuid);"},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" () -\u003e feedbackSessionsDb.updateFeedbackSession(feedbackSession));"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), never());"},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":" public void testUpdateFeedbackSession_sessionInvalid_throwsInvalidParametersException()"},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":" UUID uuid \u003d feedbackSession.getId();"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" feedbackSession.setName(\"\");"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(uuid);"},{"lineNumber":134,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" assertThrows(InvalidParametersException.class, () -\u003e feedbackSessionsDb.updateFeedbackSession(feedbackSession));"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), never());"},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":140,"author":{"gitId":"dishenggg"},"content":" public void testDeleteFeedbackSession_success() throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":141,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":142,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":143,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.deleteFeedbackSession(feedbackSession);"},{"lineNumber":144,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":145,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.remove(feedbackSession), times(1));"},{"lineNumber":146,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":147,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":148,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":149,"author":{"gitId":"dishenggg"},"content":" public void testGetSoftDeletedFeedbackSession_isSoftDeleted_success() {"},{"lineNumber":150,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":151,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":152,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":153,"author":{"gitId":"dishenggg"},"content":" feedbackSession.setDeletedAt(TimeHelperExtension.getInstantDaysOffsetFromNow(2));"},{"lineNumber":154,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":155,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":156,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getSoftDeletedFeedbackSession(sessionName, courseId);"},{"lineNumber":157,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":158,"author":{"gitId":"dishenggg"},"content":" assertEquals(feedbackSession, sessionFetched);"},{"lineNumber":159,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":160,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":161,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":162,"author":{"gitId":"dishenggg"},"content":" public void testGetSoftDeletedFeedbackSession_notSoftDeleted_returnNull() {"},{"lineNumber":163,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":164,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":165,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":166,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":167,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":168,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getSoftDeletedFeedbackSession(sessionName, courseId);"},{"lineNumber":169,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":170,"author":{"gitId":"dishenggg"},"content":" assertNull(sessionFetched);"},{"lineNumber":171,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":172,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":173,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":174,"author":{"gitId":"dishenggg"},"content":" public void testGetSoftDeletedFeedbackSession_sessionDoesNotExist_returnNull() {"},{"lineNumber":175,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":176,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":177,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":178,"author":{"gitId":"dishenggg"},"content":" doReturn(null).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":179,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":180,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getSoftDeletedFeedbackSession(sessionName, courseId);"},{"lineNumber":181,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":182,"author":{"gitId":"dishenggg"},"content":" assertNull(sessionFetched);"},{"lineNumber":183,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":184,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":185,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":186,"author":{"gitId":"dishenggg"},"content":" public void testRestoreDeletedFeedbackSession_success() throws EntityDoesNotExistException {"},{"lineNumber":187,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":188,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":189,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":190,"author":{"gitId":"dishenggg"},"content":" feedbackSession.setDeletedAt(TimeHelperExtension.getInstantDaysOffsetFromNow(2));"},{"lineNumber":191,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":192,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":193,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.restoreDeletedFeedbackSession(sessionName, courseId);"},{"lineNumber":194,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":195,"author":{"gitId":"dishenggg"},"content":" assertNull(feedbackSession.getDeletedAt());"},{"lineNumber":196,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), times(1));"},{"lineNumber":197,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":198,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":199,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":200,"author":{"gitId":"dishenggg"},"content":" public void testRestoreDeletedFeedbackSession_sessionDoesNotExist_throwsEntityDoesNotExistException()"},{"lineNumber":201,"author":{"gitId":"dishenggg"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":202,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":203,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":204,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":205,"author":{"gitId":"dishenggg"},"content":" doReturn(null).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":206,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":207,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":208,"author":{"gitId":"dishenggg"},"content":" () -\u003e feedbackSessionsDb.restoreDeletedFeedbackSession(sessionName, courseId));"},{"lineNumber":209,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), never());"},{"lineNumber":210,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":211,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":212,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":213,"author":{"gitId":"dishenggg"},"content":" public void testSoftDeleteFeedbackSession_success() throws EntityDoesNotExistException {"},{"lineNumber":214,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":215,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":216,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":217,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":218,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":219,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.softDeleteFeedbackSession(sessionName, courseId);"},{"lineNumber":220,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":221,"author":{"gitId":"dishenggg"},"content":" assertNotNull(feedbackSession.getDeletedAt());"},{"lineNumber":222,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), times(1));"},{"lineNumber":223,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":224,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":225,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":226,"author":{"gitId":"dishenggg"},"content":" public void testSoftDeleteFeedbackSession_sessionDoesNotExist_throwsEntityDoesNotExistException()"},{"lineNumber":227,"author":{"gitId":"dishenggg"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":228,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":229,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":230,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":231,"author":{"gitId":"dishenggg"},"content":" doReturn(null).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":232,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":233,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":234,"author":{"gitId":"dishenggg"},"content":" () -\u003e feedbackSessionsDb.restoreDeletedFeedbackSession(sessionName, courseId));"},{"lineNumber":235,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), never());"},{"lineNumber":236,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":237,"author":{"gitId":"dishenggg"},"content":"}"}],"authorContributionMap":{"dishenggg":237}},{"path":"src/test/java/teammates/test/AbstractBackDoor.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.io.BufferedReader;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.io.InputStreamReader;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.net.URI;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.net.URISyntaxException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.time.Duration;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"import org.apache.http.HttpEntity;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import org.apache.http.NameValuePair;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.CloseableHttpResponse;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpDelete;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpGet;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpPost;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpPut;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpRequestBase;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import org.apache.http.client.utils.URIBuilder;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import org.apache.http.entity.StringEntity;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import org.apache.http.impl.client.CloseableHttpClient;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import org.apache.http.impl.client.HttpClients;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import org.apache.http.message.BasicNameValuePair;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"import com.google.gson.JsonObject;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import com.google.gson.JsonParser;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountAttributes;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.DeadlineExtensionAttributes;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":47,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":49,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":50,"author":{"gitId":"-"},"content":"import teammates.common.exception.HttpRequestFailedException;"},{"lineNumber":51,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":53,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":54,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":55,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountRequestData;"},{"lineNumber":56,"author":{"gitId":"-"},"content":"import teammates.ui.output.CourseData;"},{"lineNumber":57,"author":{"gitId":"-"},"content":"import teammates.ui.output.CoursesData;"},{"lineNumber":58,"author":{"gitId":"-"},"content":"import teammates.ui.output.DeadlineExtensionData;"},{"lineNumber":59,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackQuestionData;"},{"lineNumber":60,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackQuestionsData;"},{"lineNumber":61,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponseCommentData;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponseData;"},{"lineNumber":63,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponsesData;"},{"lineNumber":64,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionData;"},{"lineNumber":65,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionsData;"},{"lineNumber":66,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackVisibilityType;"},{"lineNumber":67,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":68,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorsData;"},{"lineNumber":69,"author":{"gitId":"-"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":70,"author":{"gitId":"-"},"content":"import teammates.ui.output.NotificationData;"},{"lineNumber":71,"author":{"gitId":"-"},"content":"import teammates.ui.output.NumberOfEntitiesToGiveFeedbackToSetting;"},{"lineNumber":72,"author":{"gitId":"-"},"content":"import teammates.ui.output.ResponseVisibleSetting;"},{"lineNumber":73,"author":{"gitId":"-"},"content":"import teammates.ui.output.SessionVisibleSetting;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":75,"author":{"gitId":"-"},"content":"import teammates.ui.request.Intent;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Used to create API calls to the back-end without going through the UI."},{"lineNumber":79,"author":{"gitId":"-"},"content":" */"},{"lineNumber":80,"author":{"gitId":"-"},"content":"public abstract class AbstractBackDoor {"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * Gets the URL of the back-end."},{"lineNumber":84,"author":{"gitId":"-"},"content":" */"},{"lineNumber":85,"author":{"gitId":"-"},"content":" protected abstract String getAppUrl();"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Gets the backdoor key used to authenticate with the back-end."},{"lineNumber":89,"author":{"gitId":"-"},"content":" */"},{"lineNumber":90,"author":{"gitId":"-"},"content":" protected abstract String getBackdoorKey();"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Gets the CSRF key used to authenticate with the back-end."},{"lineNumber":94,"author":{"gitId":"-"},"content":" */"},{"lineNumber":95,"author":{"gitId":"-"},"content":" protected abstract String getCsrfKey();"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Executes GET request with the given {@code relativeUrl}."},{"lineNumber":99,"author":{"gitId":"-"},"content":" *"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * @return The body content and status of the HTTP response"},{"lineNumber":101,"author":{"gitId":"-"},"content":" */"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public ResponseBodyAndCode executeGetRequest(String relativeUrl, Map\u003cString, String\u003e params) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return executeRequest(HttpGet.METHOD_NAME, relativeUrl, params, null);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Executes POST request with the given {@code relativeUrl}."},{"lineNumber":108,"author":{"gitId":"-"},"content":" *"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * @return The body content and status of the HTTP response"},{"lineNumber":110,"author":{"gitId":"-"},"content":" */"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public ResponseBodyAndCode executePostRequest(String relativeUrl, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" return executeRequest(HttpPost.METHOD_NAME, relativeUrl, params, body);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Executes PUT request with the given {@code relativeUrl}."},{"lineNumber":117,"author":{"gitId":"-"},"content":" *"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * @return The body content and status of the HTTP response"},{"lineNumber":119,"author":{"gitId":"-"},"content":" */"},{"lineNumber":120,"author":{"gitId":"-"},"content":" public ResponseBodyAndCode executePutRequest(String relativeUrl, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" return executeRequest(HttpPut.METHOD_NAME, relativeUrl, params, body);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":125,"author":{"gitId":"-"},"content":" * Executes DELETE request with the given {@code relativeUrl}."},{"lineNumber":126,"author":{"gitId":"-"},"content":" *"},{"lineNumber":127,"author":{"gitId":"-"},"content":" * @return The body content and status of the HTTP response"},{"lineNumber":128,"author":{"gitId":"-"},"content":" */"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public ResponseBodyAndCode executeDeleteRequest(String relativeUrl, Map\u003cString, String\u003e params) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" return executeRequest(HttpDelete.METHOD_NAME, relativeUrl, params, null);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":134,"author":{"gitId":"-"},"content":" * Executes HTTP request with the given {@code method} and {@code relativeUrl}."},{"lineNumber":135,"author":{"gitId":"-"},"content":" *"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * @return The content of the HTTP response"},{"lineNumber":137,"author":{"gitId":"-"},"content":" */"},{"lineNumber":138,"author":{"gitId":"-"},"content":" private ResponseBodyAndCode executeRequest("},{"lineNumber":139,"author":{"gitId":"-"},"content":" String method, String relativeUrl, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" String url \u003d getAppUrl() + relativeUrl;"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" HttpRequestBase request;"},{"lineNumber":143,"author":{"gitId":"-"},"content":" switch (method) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" case HttpGet.METHOD_NAME:"},{"lineNumber":145,"author":{"gitId":"-"},"content":" request \u003d createGetRequest(url, params);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" case HttpPost.METHOD_NAME:"},{"lineNumber":148,"author":{"gitId":"-"},"content":" request \u003d createPostRequest(url, params, body);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" case HttpPut.METHOD_NAME:"},{"lineNumber":151,"author":{"gitId":"-"},"content":" request \u003d createPutRequest(url, params, body);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" case HttpDelete.METHOD_NAME:"},{"lineNumber":154,"author":{"gitId":"-"},"content":" request \u003d createDeleteRequest(url, params);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":157,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unaccepted HTTP method: \" + method);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" addAuthKeys(request);"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" try (CloseableHttpClient httpClient \u003d HttpClients.createDefault();"},{"lineNumber":163,"author":{"gitId":"-"},"content":" CloseableHttpResponse response \u003d httpClient.execute(request)) {"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" String responseBody \u003d null;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" HttpEntity entity \u003d response.getEntity();"},{"lineNumber":167,"author":{"gitId":"-"},"content":" if (entity !\u003d null) {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" try (BufferedReader br \u003d new BufferedReader("},{"lineNumber":169,"author":{"gitId":"-"},"content":" new InputStreamReader(entity.getContent(), Const.ENCODING))) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" responseBody \u003d br.lines().collect(Collectors.joining(System.lineSeparator()));"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }"},{"lineNumber":173,"author":{"gitId":"-"},"content":" return new ResponseBodyAndCode(responseBody, response.getStatusLine().getStatusCode());"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"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":" * Executes GET request with the given {@code relativeUrl}."},{"lineNumber":182,"author":{"gitId":"-"},"content":" *"},{"lineNumber":183,"author":{"gitId":"-"},"content":" * @return The content of the HTTP response"},{"lineNumber":184,"author":{"gitId":"-"},"content":" */"},{"lineNumber":185,"author":{"gitId":"-"},"content":" private static HttpGet createGetRequest(String url, Map\u003cString, String\u003e params) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return new HttpGet(createBasicUri(url, params));"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" private static HttpPost createPostRequest(String url, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" HttpPost post \u003d new HttpPost(createBasicUri(url, params));"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" if (body !\u003d null) {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" StringEntity entity \u003d new StringEntity(body, Const.ENCODING);"},{"lineNumber":194,"author":{"gitId":"-"},"content":" post.setEntity(entity);"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" return post;"},{"lineNumber":198,"author":{"gitId":"-"},"content":" }"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" private static HttpPut createPutRequest(String url, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" HttpPut put \u003d new HttpPut(createBasicUri(url, params));"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" if (body !\u003d null) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" StringEntity entity \u003d new StringEntity(body, Const.ENCODING);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" put.setEntity(entity);"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" return put;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" private static HttpDelete createDeleteRequest(String url, Map\u003cString, String\u003e params) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" return new HttpDelete(createBasicUri(url, params));"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":" private static URI createBasicUri(String url, Map\u003cString, String\u003e params) {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" List\u003cNameValuePair\u003e postParameters \u003d new ArrayList\u003c\u003e();"},{"lineNumber":217,"author":{"gitId":"-"},"content":" if (params !\u003d null) {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" params.forEach((key, value) -\u003e postParameters.add(new BasicNameValuePair(key, value)));"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" URIBuilder uriBuilder \u003d new URIBuilder(url);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" uriBuilder.addParameters(postParameters);"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" return uriBuilder.build();"},{"lineNumber":226,"author":{"gitId":"-"},"content":" } catch (URISyntaxException e) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" }"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" private void addAuthKeys(HttpRequestBase request) {"},{"lineNumber":232,"author":{"gitId":"-"},"content":" request.addHeader(Const.HeaderNames.BACKDOOR_KEY, getBackdoorKey());"},{"lineNumber":233,"author":{"gitId":"-"},"content":" request.addHeader(Const.HeaderNames.CSRF_KEY, getCsrfKey());"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":237,"author":{"gitId":"-"},"content":" * Removes and restores given data in the database. This method is to be called on test startup."},{"lineNumber":238,"author":{"gitId":"-"},"content":" *"},{"lineNumber":239,"author":{"gitId":"-"},"content":" * \u003cp\u003eNote: The data associated with the test accounts have to be \u003cstrong\u003emanually\u003c/strong\u003e removed by removing the data"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * bundle when a test ends because the test accounts are shared across tests."},{"lineNumber":241,"author":{"gitId":"-"},"content":" *"},{"lineNumber":242,"author":{"gitId":"-"},"content":" * \u003cp\u003eTest data should never be cleared after test in order to prevent incurring additional database costs because the"},{"lineNumber":243,"author":{"gitId":"-"},"content":" * test\u0027s data may not be accessed in another test. Also although unlikely in normal conditions, when a test fail to"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * remove data bundle on teardown, another test should have no reason to fail."},{"lineNumber":245,"author":{"gitId":"-"},"content":" *"},{"lineNumber":246,"author":{"gitId":"-"},"content":" * \u003cp\u003eAnother reason not to remove associated data after a test is that in case of test failures, it helps to have the"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * associated data in the database to debug the failure."},{"lineNumber":248,"author":{"gitId":"-"},"content":" *"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis means that removing the data bundle on startup is not always sufficient because a test only knows how"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * to remove its associated data."},{"lineNumber":251,"author":{"gitId":"-"},"content":" * This is why some tests would fail when they use the same account and use different data."},{"lineNumber":252,"author":{"gitId":"-"},"content":" * Extending this method to remove data outside its associated data would introduce"},{"lineNumber":253,"author":{"gitId":"-"},"content":" * unnecessary complications such as extra costs and knowing exactly how much data to remove. Removing too much data"},{"lineNumber":254,"author":{"gitId":"-"},"content":" * would not just incur higher database costs but we can make tests unexpectedly pass(fail) when the data is expected to"},{"lineNumber":255,"author":{"gitId":"-"},"content":" * be not present(present) in another test."},{"lineNumber":256,"author":{"gitId":"-"},"content":" *"},{"lineNumber":257,"author":{"gitId":"-"},"content":" * \u003cp\u003eTODO: Hence, we need to explicitly remove the data bundle in tests on teardown to avoid instability of tests."},{"lineNumber":258,"author":{"gitId":"-"},"content":" * However, removing the data bundle on teardown manually is not a perfect solution because two tests can concurrently"},{"lineNumber":259,"author":{"gitId":"-"},"content":" * access the same account and their data may get mixed up in the process. This is a major problem we need to address."},{"lineNumber":260,"author":{"gitId":"-"},"content":" */"},{"lineNumber":261,"author":{"gitId":"-"},"content":" public String removeAndRestoreDataBundle(DataBundle dataBundle) throws HttpRequestFailedException {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" removeDataBundle(dataBundle);"},{"lineNumber":263,"author":{"gitId":"-"},"content":" ResponseBodyAndCode putRequestOutput \u003d"},{"lineNumber":264,"author":{"gitId":"-"},"content":" executePostRequest(Const.ResourceURIs.DATABUNDLE, null, JsonUtils.toJson(dataBundle));"},{"lineNumber":265,"author":{"gitId":"-"},"content":" if (putRequestOutput.responseCode !\u003d HttpStatus.SC_OK) {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" throw new HttpRequestFailedException(\"Request failed: [\" + putRequestOutput.responseCode + \"] \""},{"lineNumber":267,"author":{"gitId":"-"},"content":" + putRequestOutput.responseBody);"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":" return putRequestOutput.responseBody;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":273,"author":{"gitId":"-"},"content":" * Removes and restores given data in the database. This method is to be called on test startup."},{"lineNumber":274,"author":{"gitId":"-"},"content":" */"},{"lineNumber":275,"author":{"gitId":"-"},"content":" public SqlDataBundle removeAndRestoreSqlDataBundle(SqlDataBundle dataBundle) throws HttpRequestFailedException {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" removeSqlDataBundle(dataBundle);"},{"lineNumber":277,"author":{"gitId":"-"},"content":" ResponseBodyAndCode putRequestOutput \u003d"},{"lineNumber":278,"author":{"gitId":"-"},"content":" executePostRequest(Const.ResourceURIs.SQL_DATABUNDLE, null, JsonUtils.toJson(dataBundle));"},{"lineNumber":279,"author":{"gitId":"-"},"content":" if (putRequestOutput.responseCode !\u003d HttpStatus.SC_OK) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" throw new HttpRequestFailedException(\"Request failed: [\" + putRequestOutput.responseCode + \"] \""},{"lineNumber":281,"author":{"gitId":"-"},"content":" + putRequestOutput.responseBody);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" JsonObject jsonObject \u003d JsonParser.parseString(putRequestOutput.responseBody).getAsJsonObject();"},{"lineNumber":285,"author":{"gitId":"-"},"content":" // data bundle is nested under message key"},{"lineNumber":286,"author":{"gitId":"-"},"content":" String message \u003d jsonObject.get(\"message\").getAsString();"},{"lineNumber":287,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(message, SqlDataBundle.class);"},{"lineNumber":288,"author":{"gitId":"-"},"content":" }"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":291,"author":{"gitId":"-"},"content":" * Removes given data from the database."},{"lineNumber":292,"author":{"gitId":"-"},"content":" *"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf given entities have already been deleted, it fails silently."},{"lineNumber":294,"author":{"gitId":"-"},"content":" */"},{"lineNumber":295,"author":{"gitId":"-"},"content":" public void removeDataBundle(DataBundle dataBundle) {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" executePutRequest(Const.ResourceURIs.DATABUNDLE, null, JsonUtils.toJson(dataBundle));"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":300,"author":{"gitId":"-"},"content":" * Removes given data from the database."},{"lineNumber":301,"author":{"gitId":"-"},"content":" *"},{"lineNumber":302,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf given entities have already been deleted, it fails silently."},{"lineNumber":303,"author":{"gitId":"-"},"content":" */"},{"lineNumber":304,"author":{"gitId":"-"},"content":" public void removeSqlDataBundle(SqlDataBundle dataBundle) {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" executePutRequest(Const.ResourceURIs.SQL_DATABUNDLE, null, JsonUtils.toJson(dataBundle));"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":309,"author":{"gitId":"-"},"content":" * Gets the cookie format for the given user ID."},{"lineNumber":310,"author":{"gitId":"-"},"content":" */"},{"lineNumber":311,"author":{"gitId":"-"},"content":" public String getUserCookie(String userId) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":313,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.USER_ID, userId);"},{"lineNumber":314,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executePostRequest(Const.ResourceURIs.USER_COOKIE, params, null);"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" MessageOutput output \u003d JsonUtils.fromJson(response.responseBody, MessageOutput.class);"},{"lineNumber":317,"author":{"gitId":"-"},"content":" return output.getMessage();"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"dishenggg"},"content":" // TODO: remove params after migration"},{"lineNumber":321,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":322,"author":{"gitId":"-"},"content":" * Puts searchable documents in data bundle into the database."},{"lineNumber":323,"author":{"gitId":"-"},"content":" */"},{"lineNumber":324,"author":{"gitId":"-"},"content":" public String putDocuments(DataBundle dataBundle) throws HttpRequestFailedException {"},{"lineNumber":325,"author":{"gitId":"dishenggg"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":326,"author":{"gitId":"dishenggg"},"content":" params.put(\"databundletype\", \"datastore\");"},{"lineNumber":327,"author":{"gitId":"-"},"content":" ResponseBodyAndCode putRequestOutput \u003d"},{"lineNumber":328,"author":{"gitId":"dishenggg"},"content":" executePutRequest(Const.ResourceURIs.DATABUNDLE_DOCUMENTS, params, JsonUtils.toJson(dataBundle));"},{"lineNumber":329,"author":{"gitId":"-"},"content":" if (putRequestOutput.responseCode !\u003d HttpStatus.SC_OK) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" throw new HttpRequestFailedException(\"Request failed: [\" + putRequestOutput.responseCode + \"] \""},{"lineNumber":331,"author":{"gitId":"-"},"content":" + putRequestOutput.responseBody);"},{"lineNumber":332,"author":{"gitId":"-"},"content":" }"},{"lineNumber":333,"author":{"gitId":"-"},"content":" return putRequestOutput.responseBody;"},{"lineNumber":334,"author":{"gitId":"-"},"content":" }"},{"lineNumber":335,"author":{"gitId":"-"},"content":""},{"lineNumber":336,"author":{"gitId":"dishenggg"},"content":" // TODO: remove method after migration"},{"lineNumber":337,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":338,"author":{"gitId":"dishenggg"},"content":" * Puts searchable documents in data bundle into the SQL database."},{"lineNumber":339,"author":{"gitId":"-"},"content":" */"},{"lineNumber":340,"author":{"gitId":"dishenggg"},"content":" public String putSqlDocuments(SqlDataBundle dataBundle) throws HttpRequestFailedException {"},{"lineNumber":341,"author":{"gitId":"dishenggg"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":342,"author":{"gitId":"dishenggg"},"content":" params.put(\"databundletype\", \"sql\");"},{"lineNumber":343,"author":{"gitId":"-"},"content":" ResponseBodyAndCode putRequestOutput \u003d"},{"lineNumber":344,"author":{"gitId":"dishenggg"},"content":" executePutRequest(Const.ResourceURIs.DATABUNDLE_DOCUMENTS, params, JsonUtils.toJson(dataBundle));"},{"lineNumber":345,"author":{"gitId":"-"},"content":" if (putRequestOutput.responseCode !\u003d HttpStatus.SC_OK) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" throw new HttpRequestFailedException(\"Request failed: [\" + putRequestOutput.responseCode + \"] \""},{"lineNumber":347,"author":{"gitId":"-"},"content":" + putRequestOutput.responseBody);"},{"lineNumber":348,"author":{"gitId":"-"},"content":" }"},{"lineNumber":349,"author":{"gitId":"-"},"content":" return putRequestOutput.responseBody;"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":""},{"lineNumber":352,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":353,"author":{"gitId":"-"},"content":" * Gets account data from the database."},{"lineNumber":354,"author":{"gitId":"-"},"content":" */"},{"lineNumber":355,"author":{"gitId":"-"},"content":" public AccountData getAccountData(String googleId) {"},{"lineNumber":356,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":357,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_ID, googleId);"},{"lineNumber":358,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.ACCOUNT, params);"},{"lineNumber":359,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":362,"author":{"gitId":"-"},"content":""},{"lineNumber":363,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, AccountData.class);"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":367,"author":{"gitId":"-"},"content":" * Gets an account from the database."},{"lineNumber":368,"author":{"gitId":"-"},"content":" */"},{"lineNumber":369,"author":{"gitId":"-"},"content":" public AccountAttributes getAccount(String googleId) {"},{"lineNumber":370,"author":{"gitId":"-"},"content":" AccountData accountData \u003d getAccountData(googleId);"},{"lineNumber":371,"author":{"gitId":"-"},"content":" return AccountAttributes.builder(accountData.getGoogleId())"},{"lineNumber":372,"author":{"gitId":"-"},"content":" .withName(accountData.getName())"},{"lineNumber":373,"author":{"gitId":"-"},"content":" .withEmail(accountData.getEmail())"},{"lineNumber":374,"author":{"gitId":"-"},"content":" .withReadNotifications("},{"lineNumber":375,"author":{"gitId":"-"},"content":" accountData.getReadNotifications()"},{"lineNumber":376,"author":{"gitId":"-"},"content":" .entrySet()"},{"lineNumber":377,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":378,"author":{"gitId":"-"},"content":" .collect(Collectors.toMap("},{"lineNumber":379,"author":{"gitId":"-"},"content":" e -\u003e e.getKey(),"},{"lineNumber":380,"author":{"gitId":"-"},"content":" e -\u003e Instant.ofEpochMilli(e.getValue())"},{"lineNumber":381,"author":{"gitId":"-"},"content":" ))"},{"lineNumber":382,"author":{"gitId":"-"},"content":" )"},{"lineNumber":383,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":384,"author":{"gitId":"-"},"content":" }"},{"lineNumber":385,"author":{"gitId":"-"},"content":""},{"lineNumber":386,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":387,"author":{"gitId":"-"},"content":" * Gets course data from the database."},{"lineNumber":388,"author":{"gitId":"-"},"content":" */"},{"lineNumber":389,"author":{"gitId":"-"},"content":" public CourseData getCourseData(String courseId) {"},{"lineNumber":390,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":391,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":392,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.COURSE, params);"},{"lineNumber":393,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":394,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":395,"author":{"gitId":"-"},"content":" }"},{"lineNumber":396,"author":{"gitId":"-"},"content":""},{"lineNumber":397,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, CourseData.class);"},{"lineNumber":398,"author":{"gitId":"-"},"content":" }"},{"lineNumber":399,"author":{"gitId":"-"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":401,"author":{"gitId":"-"},"content":" * Gets a course from the database."},{"lineNumber":402,"author":{"gitId":"-"},"content":" */"},{"lineNumber":403,"author":{"gitId":"-"},"content":" public CourseAttributes getCourse(String courseId) {"},{"lineNumber":404,"author":{"gitId":"-"},"content":" CourseData courseData \u003d getCourseData(courseId);"},{"lineNumber":405,"author":{"gitId":"-"},"content":" if (courseData \u003d\u003d null) {"},{"lineNumber":406,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":407,"author":{"gitId":"-"},"content":" }"},{"lineNumber":408,"author":{"gitId":"-"},"content":" return CourseAttributes.builder(courseData.getCourseId())"},{"lineNumber":409,"author":{"gitId":"-"},"content":" .withName(courseData.getCourseName())"},{"lineNumber":410,"author":{"gitId":"-"},"content":" .withTimezone(courseData.getTimeZone())"},{"lineNumber":411,"author":{"gitId":"-"},"content":" .withInstitute(courseData.getInstitute())"},{"lineNumber":412,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":413,"author":{"gitId":"-"},"content":" }"},{"lineNumber":414,"author":{"gitId":"-"},"content":""},{"lineNumber":415,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":416,"author":{"gitId":"-"},"content":" * Gets archived course data from the database."},{"lineNumber":417,"author":{"gitId":"-"},"content":" */"},{"lineNumber":418,"author":{"gitId":"-"},"content":" public CourseData getArchivedCourseData(String instructorId, String courseId) {"},{"lineNumber":419,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":420,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.USER_ID, instructorId);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":422,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR);"},{"lineNumber":423,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_STATUS, Const.CourseStatus.ARCHIVED);"},{"lineNumber":424,"author":{"gitId":"-"},"content":""},{"lineNumber":425,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.COURSES, params);"},{"lineNumber":426,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":428,"author":{"gitId":"-"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":""},{"lineNumber":430,"author":{"gitId":"-"},"content":" CoursesData coursesData \u003d JsonUtils.fromJson(response.responseBody, CoursesData.class);"},{"lineNumber":431,"author":{"gitId":"-"},"content":" CourseData courseData \u003d coursesData.getCourses()"},{"lineNumber":432,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":433,"author":{"gitId":"-"},"content":" .filter(cd -\u003e cd.getCourseId().equals(courseId))"},{"lineNumber":434,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":435,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":436,"author":{"gitId":"-"},"content":""},{"lineNumber":437,"author":{"gitId":"-"},"content":" if (courseData \u003d\u003d null) {"},{"lineNumber":438,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":439,"author":{"gitId":"-"},"content":" }"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" return courseData;"},{"lineNumber":442,"author":{"gitId":"-"},"content":" }"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":445,"author":{"gitId":"-"},"content":" * Gets a archived course from the database."},{"lineNumber":446,"author":{"gitId":"-"},"content":" */"},{"lineNumber":447,"author":{"gitId":"-"},"content":" public CourseAttributes getArchivedCourse(String instructorId, String courseId) {"},{"lineNumber":448,"author":{"gitId":"-"},"content":" CourseData courseData \u003d getArchivedCourseData(instructorId, courseId);"},{"lineNumber":449,"author":{"gitId":"-"},"content":" if (courseData \u003d\u003d null) {"},{"lineNumber":450,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":451,"author":{"gitId":"-"},"content":" }"},{"lineNumber":452,"author":{"gitId":"-"},"content":" return CourseAttributes.builder(courseData.getCourseId())"},{"lineNumber":453,"author":{"gitId":"-"},"content":" .withName(courseData.getCourseName())"},{"lineNumber":454,"author":{"gitId":"-"},"content":" .withTimezone(courseData.getTimeZone())"},{"lineNumber":455,"author":{"gitId":"-"},"content":" .withInstitute(courseData.getInstitute())"},{"lineNumber":456,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":457,"author":{"gitId":"-"},"content":" }"},{"lineNumber":458,"author":{"gitId":"-"},"content":""},{"lineNumber":459,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":460,"author":{"gitId":"-"},"content":" * Returns true if the course exists and is in recycle bin."},{"lineNumber":461,"author":{"gitId":"-"},"content":" */"},{"lineNumber":462,"author":{"gitId":"-"},"content":" public boolean isCourseInRecycleBin(String courseId) {"},{"lineNumber":463,"author":{"gitId":"-"},"content":" CourseData courseData \u003d getCourseData(courseId);"},{"lineNumber":464,"author":{"gitId":"-"},"content":" if (courseData \u003d\u003d null) {"},{"lineNumber":465,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":466,"author":{"gitId":"-"},"content":" }"},{"lineNumber":467,"author":{"gitId":"-"},"content":" return courseData.getDeletionTimestamp() !\u003d 0;"},{"lineNumber":468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":469,"author":{"gitId":"-"},"content":""},{"lineNumber":470,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":471,"author":{"gitId":"-"},"content":" * Gets instructor data from the database."},{"lineNumber":472,"author":{"gitId":"-"},"content":" */"},{"lineNumber":473,"author":{"gitId":"-"},"content":" public InstructorData getInstructorData(String courseId, String email) {"},{"lineNumber":474,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":475,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":476,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString());"},{"lineNumber":477,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.INSTRUCTORS, params);"},{"lineNumber":478,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":479,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":480,"author":{"gitId":"-"},"content":" }"},{"lineNumber":481,"author":{"gitId":"-"},"content":""},{"lineNumber":482,"author":{"gitId":"-"},"content":" InstructorsData instructorsData \u003d JsonUtils.fromJson(response.responseBody, InstructorsData.class);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" InstructorData instructorData \u003d instructorsData.getInstructors()"},{"lineNumber":484,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":485,"author":{"gitId":"-"},"content":" .filter(instructor -\u003e instructor.getEmail().equals(email))"},{"lineNumber":486,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":487,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":488,"author":{"gitId":"-"},"content":""},{"lineNumber":489,"author":{"gitId":"-"},"content":" if (instructorData \u003d\u003d null) {"},{"lineNumber":490,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":491,"author":{"gitId":"-"},"content":" }"},{"lineNumber":492,"author":{"gitId":"-"},"content":""},{"lineNumber":493,"author":{"gitId":"-"},"content":" return instructorData;"},{"lineNumber":494,"author":{"gitId":"-"},"content":" }"},{"lineNumber":495,"author":{"gitId":"-"},"content":""},{"lineNumber":496,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":497,"author":{"gitId":"-"},"content":" * Get instructor from database. Does not include certain fields like InstructorPrivileges."},{"lineNumber":498,"author":{"gitId":"-"},"content":" */"},{"lineNumber":499,"author":{"gitId":"-"},"content":" public InstructorAttributes getInstructor(String courseId, String instructorEmail) {"},{"lineNumber":500,"author":{"gitId":"-"},"content":" InstructorData instructorData \u003d getInstructorData(courseId, instructorEmail);"},{"lineNumber":501,"author":{"gitId":"-"},"content":" if (instructorData \u003d\u003d null) {"},{"lineNumber":502,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":503,"author":{"gitId":"-"},"content":" }"},{"lineNumber":504,"author":{"gitId":"-"},"content":" InstructorAttributes.Builder instructor \u003d InstructorAttributes.builder(instructorData.getCourseId(),"},{"lineNumber":505,"author":{"gitId":"-"},"content":" instructorData.getEmail());"},{"lineNumber":506,"author":{"gitId":"-"},"content":" if (instructorData.getGoogleId() !\u003d null) {"},{"lineNumber":507,"author":{"gitId":"-"},"content":" instructor.withGoogleId(instructorData.getGoogleId());"},{"lineNumber":508,"author":{"gitId":"-"},"content":" }"},{"lineNumber":509,"author":{"gitId":"-"},"content":" if (instructorData.getName() !\u003d null) {"},{"lineNumber":510,"author":{"gitId":"-"},"content":" instructor.withName(instructorData.getName());"},{"lineNumber":511,"author":{"gitId":"-"},"content":" }"},{"lineNumber":512,"author":{"gitId":"-"},"content":" if (instructorData.getRole() !\u003d null) {"},{"lineNumber":513,"author":{"gitId":"-"},"content":" instructor.withRole(instructorData.getRole().getRoleName());"},{"lineNumber":514,"author":{"gitId":"-"},"content":" }"},{"lineNumber":515,"author":{"gitId":"-"},"content":" if (instructorData.getIsDisplayedToStudents() !\u003d null) {"},{"lineNumber":516,"author":{"gitId":"-"},"content":" instructor.withIsDisplayedToStudents(instructorData.getIsDisplayedToStudents());"},{"lineNumber":517,"author":{"gitId":"-"},"content":" }"},{"lineNumber":518,"author":{"gitId":"-"},"content":" if (instructorData.getDisplayedToStudentsAs() !\u003d null) {"},{"lineNumber":519,"author":{"gitId":"-"},"content":" instructor.withDisplayedName(instructorData.getDisplayedToStudentsAs());"},{"lineNumber":520,"author":{"gitId":"-"},"content":" }"},{"lineNumber":521,"author":{"gitId":"-"},"content":" InstructorAttributes instructorAttributes \u003d instructor.build();"},{"lineNumber":522,"author":{"gitId":"-"},"content":" if (instructorData.getKey() !\u003d null) {"},{"lineNumber":523,"author":{"gitId":"-"},"content":" instructorAttributes.setKey(instructorData.getKey());"},{"lineNumber":524,"author":{"gitId":"-"},"content":" }"},{"lineNumber":525,"author":{"gitId":"-"},"content":" return instructorAttributes;"},{"lineNumber":526,"author":{"gitId":"-"},"content":" }"},{"lineNumber":527,"author":{"gitId":"-"},"content":""},{"lineNumber":528,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":529,"author":{"gitId":"-"},"content":" * Gets student data from the database."},{"lineNumber":530,"author":{"gitId":"-"},"content":" */"},{"lineNumber":531,"author":{"gitId":"-"},"content":" public StudentData getStudentData(String courseId, String studentEmail) {"},{"lineNumber":532,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":533,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":534,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.STUDENT_EMAIL, studentEmail);"},{"lineNumber":535,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.STUDENT, params);"},{"lineNumber":536,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":537,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":538,"author":{"gitId":"-"},"content":" }"},{"lineNumber":539,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, StudentData.class);"},{"lineNumber":540,"author":{"gitId":"-"},"content":" }"},{"lineNumber":541,"author":{"gitId":"-"},"content":""},{"lineNumber":542,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":543,"author":{"gitId":"-"},"content":" * Get student from database."},{"lineNumber":544,"author":{"gitId":"-"},"content":" */"},{"lineNumber":545,"author":{"gitId":"-"},"content":" public StudentAttributes getStudent(String courseId, String studentEmail) {"},{"lineNumber":546,"author":{"gitId":"-"},"content":" StudentData studentData \u003d getStudentData(courseId, studentEmail);"},{"lineNumber":547,"author":{"gitId":"-"},"content":" if (studentData \u003d\u003d null) {"},{"lineNumber":548,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":549,"author":{"gitId":"-"},"content":" }"},{"lineNumber":550,"author":{"gitId":"-"},"content":" StudentAttributes.Builder builder \u003d StudentAttributes.builder(studentData.getCourseId(),"},{"lineNumber":551,"author":{"gitId":"-"},"content":" studentData.getEmail());"},{"lineNumber":552,"author":{"gitId":"-"},"content":" if (studentData.getGoogleId() !\u003d null) {"},{"lineNumber":553,"author":{"gitId":"-"},"content":" builder.withGoogleId(studentData.getGoogleId());"},{"lineNumber":554,"author":{"gitId":"-"},"content":" }"},{"lineNumber":555,"author":{"gitId":"-"},"content":" if (studentData.getName() !\u003d null) {"},{"lineNumber":556,"author":{"gitId":"-"},"content":" builder.withName(studentData.getName());"},{"lineNumber":557,"author":{"gitId":"-"},"content":" }"},{"lineNumber":558,"author":{"gitId":"-"},"content":" if (studentData.getSectionName() !\u003d null) {"},{"lineNumber":559,"author":{"gitId":"-"},"content":" builder.withSectionName(studentData.getSectionName());"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":" if (studentData.getTeamName() !\u003d null) {"},{"lineNumber":562,"author":{"gitId":"-"},"content":" builder.withTeamName(studentData.getTeamName());"},{"lineNumber":563,"author":{"gitId":"-"},"content":" }"},{"lineNumber":564,"author":{"gitId":"-"},"content":" if (studentData.getComments() !\u003d null) {"},{"lineNumber":565,"author":{"gitId":"-"},"content":" builder.withComment(studentData.getComments());"},{"lineNumber":566,"author":{"gitId":"-"},"content":" }"},{"lineNumber":567,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d builder.build();"},{"lineNumber":568,"author":{"gitId":"-"},"content":" if (studentData.getKey() !\u003d null) {"},{"lineNumber":569,"author":{"gitId":"-"},"content":" student.setKey(studentData.getKey());"},{"lineNumber":570,"author":{"gitId":"-"},"content":" }"},{"lineNumber":571,"author":{"gitId":"-"},"content":" return student;"},{"lineNumber":572,"author":{"gitId":"-"},"content":" }"},{"lineNumber":573,"author":{"gitId":"-"},"content":""},{"lineNumber":574,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":575,"author":{"gitId":"-"},"content":" * Get feedback session data from database."},{"lineNumber":576,"author":{"gitId":"-"},"content":" */"},{"lineNumber":577,"author":{"gitId":"-"},"content":" public FeedbackSessionData getFeedbackSessionData(String courseId, String feedbackSessionName) {"},{"lineNumber":578,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":579,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":580,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSessionName);"},{"lineNumber":581,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString());"},{"lineNumber":582,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.SESSION, params);"},{"lineNumber":583,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":584,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":585,"author":{"gitId":"-"},"content":" }"},{"lineNumber":586,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, FeedbackSessionData.class);"},{"lineNumber":587,"author":{"gitId":"-"},"content":" }"},{"lineNumber":588,"author":{"gitId":"-"},"content":""},{"lineNumber":589,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":590,"author":{"gitId":"-"},"content":" * Get feedback session from database."},{"lineNumber":591,"author":{"gitId":"-"},"content":" */"},{"lineNumber":592,"author":{"gitId":"-"},"content":" public FeedbackSessionAttributes getFeedbackSession(String courseId, String feedbackSessionName) {"},{"lineNumber":593,"author":{"gitId":"-"},"content":" FeedbackSessionData sessionData \u003d getFeedbackSessionData(courseId, feedbackSessionName);"},{"lineNumber":594,"author":{"gitId":"-"},"content":" if (sessionData \u003d\u003d null) {"},{"lineNumber":595,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":596,"author":{"gitId":"-"},"content":" }"},{"lineNumber":597,"author":{"gitId":"-"},"content":""},{"lineNumber":598,"author":{"gitId":"-"},"content":" Map\u003cString, Instant\u003e studentDeadlines \u003d"},{"lineNumber":599,"author":{"gitId":"-"},"content":" convertDeadlinesToInstant(sessionData.getStudentDeadlines(), sessionData.getTimeZone());"},{"lineNumber":600,"author":{"gitId":"-"},"content":" Map\u003cString, Instant\u003e instructorDeadlines \u003d"},{"lineNumber":601,"author":{"gitId":"-"},"content":" convertDeadlinesToInstant(sessionData.getInstructorDeadlines(), sessionData.getTimeZone());"},{"lineNumber":602,"author":{"gitId":"-"},"content":""},{"lineNumber":603,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes sessionAttributes \u003d FeedbackSessionAttributes"},{"lineNumber":604,"author":{"gitId":"-"},"content":" .builder(sessionData.getFeedbackSessionName(), sessionData.getCourseId())"},{"lineNumber":605,"author":{"gitId":"-"},"content":" .withInstructions(sessionData.getInstructions())"},{"lineNumber":606,"author":{"gitId":"-"},"content":" .withStartTime(Instant.ofEpochMilli(sessionData.getSubmissionStartTimestamp()))"},{"lineNumber":607,"author":{"gitId":"-"},"content":" .withEndTime(Instant.ofEpochMilli(sessionData.getSubmissionEndTimestamp()))"},{"lineNumber":608,"author":{"gitId":"-"},"content":" .withTimeZone(sessionData.getTimeZone())"},{"lineNumber":609,"author":{"gitId":"-"},"content":" .withGracePeriod(Duration.ofMinutes(sessionData.getGracePeriod()))"},{"lineNumber":610,"author":{"gitId":"-"},"content":" .withIsClosingEmailEnabled(sessionData.getIsClosingEmailEnabled())"},{"lineNumber":611,"author":{"gitId":"-"},"content":" .withIsPublishedEmailEnabled(sessionData.getIsPublishedEmailEnabled())"},{"lineNumber":612,"author":{"gitId":"-"},"content":" .withStudentDeadlines(studentDeadlines)"},{"lineNumber":613,"author":{"gitId":"-"},"content":" .withInstructorDeadlines(instructorDeadlines)"},{"lineNumber":614,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":615,"author":{"gitId":"-"},"content":""},{"lineNumber":616,"author":{"gitId":"-"},"content":" sessionAttributes.setCreatedTime(Instant.ofEpochMilli(sessionData.getCreatedAtTimestamp()));"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" if (sessionData.getSessionVisibleSetting().equals(SessionVisibleSetting.AT_OPEN)) {"},{"lineNumber":619,"author":{"gitId":"-"},"content":" sessionAttributes.setSessionVisibleFromTime(Const.TIME_REPRESENTS_FOLLOW_OPENING);"},{"lineNumber":620,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":621,"author":{"gitId":"-"},"content":" sessionAttributes.setSessionVisibleFromTime(Instant.ofEpochMilli("},{"lineNumber":622,"author":{"gitId":"-"},"content":" sessionData.getCustomSessionVisibleTimestamp()));"},{"lineNumber":623,"author":{"gitId":"-"},"content":" }"},{"lineNumber":624,"author":{"gitId":"-"},"content":""},{"lineNumber":625,"author":{"gitId":"-"},"content":" if (sessionData.getResponseVisibleSetting().equals(ResponseVisibleSetting.AT_VISIBLE)) {"},{"lineNumber":626,"author":{"gitId":"-"},"content":" sessionAttributes.setResultsVisibleFromTime(Const.TIME_REPRESENTS_FOLLOW_VISIBLE);"},{"lineNumber":627,"author":{"gitId":"-"},"content":" } else if (sessionData.getResponseVisibleSetting().equals(ResponseVisibleSetting.LATER)) {"},{"lineNumber":628,"author":{"gitId":"-"},"content":" sessionAttributes.setResultsVisibleFromTime(Const.TIME_REPRESENTS_LATER);"},{"lineNumber":629,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":630,"author":{"gitId":"-"},"content":" sessionAttributes.setResultsVisibleFromTime(Instant.ofEpochMilli("},{"lineNumber":631,"author":{"gitId":"-"},"content":" sessionData.getCustomResponseVisibleTimestamp()));"},{"lineNumber":632,"author":{"gitId":"-"},"content":" }"},{"lineNumber":633,"author":{"gitId":"-"},"content":""},{"lineNumber":634,"author":{"gitId":"-"},"content":" return sessionAttributes;"},{"lineNumber":635,"author":{"gitId":"-"},"content":" }"},{"lineNumber":636,"author":{"gitId":"-"},"content":""},{"lineNumber":637,"author":{"gitId":"-"},"content":" private Map\u003cString, Instant\u003e convertDeadlinesToInstant(Map\u003cString, Long\u003e deadlines, String timezone) {"},{"lineNumber":638,"author":{"gitId":"-"},"content":" return deadlines.entrySet()"},{"lineNumber":639,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":640,"author":{"gitId":"-"},"content":" .collect(Collectors.toMap(Map.Entry::getKey, entry -\u003e {"},{"lineNumber":641,"author":{"gitId":"-"},"content":" Instant deadline \u003d Instant.ofEpochMilli(entry.getValue());"},{"lineNumber":642,"author":{"gitId":"-"},"content":" return TimeHelper.getMidnightAdjustedInstantBasedOnZone(deadline, timezone, true);"},{"lineNumber":643,"author":{"gitId":"-"},"content":" }));"},{"lineNumber":644,"author":{"gitId":"-"},"content":" }"},{"lineNumber":645,"author":{"gitId":"-"},"content":""},{"lineNumber":646,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":647,"author":{"gitId":"-"},"content":" * Get soft deleted feedback session from database."},{"lineNumber":648,"author":{"gitId":"-"},"content":" */"},{"lineNumber":649,"author":{"gitId":"-"},"content":" public FeedbackSessionAttributes getSoftDeletedSession(String feedbackSessionName, String instructorId) {"},{"lineNumber":650,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":651,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR);"},{"lineNumber":652,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.IS_IN_RECYCLE_BIN, \"true\");"},{"lineNumber":653,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.USER_ID, instructorId);"},{"lineNumber":654,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.SESSIONS, params);"},{"lineNumber":655,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":656,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":657,"author":{"gitId":"-"},"content":" }"},{"lineNumber":658,"author":{"gitId":"-"},"content":""},{"lineNumber":659,"author":{"gitId":"-"},"content":" FeedbackSessionsData sessionsData \u003d JsonUtils.fromJson(response.responseBody, FeedbackSessionsData.class);"},{"lineNumber":660,"author":{"gitId":"-"},"content":" FeedbackSessionData feedbackSession \u003d sessionsData.getFeedbackSessions()"},{"lineNumber":661,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":662,"author":{"gitId":"-"},"content":" .filter(fs -\u003e fs.getFeedbackSessionName().equals(feedbackSessionName))"},{"lineNumber":663,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":664,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":665,"author":{"gitId":"-"},"content":""},{"lineNumber":666,"author":{"gitId":"-"},"content":" if (feedbackSession \u003d\u003d null) {"},{"lineNumber":667,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":668,"author":{"gitId":"-"},"content":" }"},{"lineNumber":669,"author":{"gitId":"-"},"content":""},{"lineNumber":670,"author":{"gitId":"-"},"content":" return FeedbackSessionAttributes"},{"lineNumber":671,"author":{"gitId":"-"},"content":" .builder(feedbackSession.getCourseId(), feedbackSession.getFeedbackSessionName())"},{"lineNumber":672,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":673,"author":{"gitId":"-"},"content":" }"},{"lineNumber":674,"author":{"gitId":"-"},"content":""},{"lineNumber":675,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":676,"author":{"gitId":"-"},"content":" * Get feedback question data from database."},{"lineNumber":677,"author":{"gitId":"-"},"content":" */"},{"lineNumber":678,"author":{"gitId":"-"},"content":" public FeedbackQuestionData getFeedbackQuestionData(String courseId, String feedbackSessionName,"},{"lineNumber":679,"author":{"gitId":"-"},"content":" int qnNumber) {"},{"lineNumber":680,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":681,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":682,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSessionName);"},{"lineNumber":683,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString());"},{"lineNumber":684,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.QUESTIONS, params);"},{"lineNumber":685,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":686,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":687,"author":{"gitId":"-"},"content":" }"},{"lineNumber":688,"author":{"gitId":"-"},"content":""},{"lineNumber":689,"author":{"gitId":"-"},"content":" FeedbackQuestionsData questionsData \u003d JsonUtils.fromJson(response.responseBody, FeedbackQuestionsData.class);"},{"lineNumber":690,"author":{"gitId":"-"},"content":" return questionsData.getQuestions()"},{"lineNumber":691,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":692,"author":{"gitId":"-"},"content":" .filter(fq -\u003e fq.getQuestionNumber() \u003d\u003d qnNumber)"},{"lineNumber":693,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":694,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":695,"author":{"gitId":"-"},"content":" }"},{"lineNumber":696,"author":{"gitId":"-"},"content":""},{"lineNumber":697,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":698,"author":{"gitId":"-"},"content":" * Get feedback question from database."},{"lineNumber":699,"author":{"gitId":"-"},"content":" */"},{"lineNumber":700,"author":{"gitId":"-"},"content":" public FeedbackQuestionAttributes getFeedbackQuestion(String courseId, String feedbackSessionName,"},{"lineNumber":701,"author":{"gitId":"-"},"content":" int qnNumber) {"},{"lineNumber":702,"author":{"gitId":"-"},"content":" FeedbackQuestionData question \u003d getFeedbackQuestionData(courseId, feedbackSessionName, qnNumber);"},{"lineNumber":703,"author":{"gitId":"-"},"content":""},{"lineNumber":704,"author":{"gitId":"-"},"content":" if (question \u003d\u003d null) {"},{"lineNumber":705,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":706,"author":{"gitId":"-"},"content":" }"},{"lineNumber":707,"author":{"gitId":"-"},"content":""},{"lineNumber":708,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes questionAttr \u003d FeedbackQuestionAttributes.builder()"},{"lineNumber":709,"author":{"gitId":"-"},"content":" .withCourseId(courseId)"},{"lineNumber":710,"author":{"gitId":"-"},"content":" .withFeedbackSessionName(feedbackSessionName)"},{"lineNumber":711,"author":{"gitId":"-"},"content":" .withQuestionDetails(question.getQuestionDetails())"},{"lineNumber":712,"author":{"gitId":"-"},"content":" .withQuestionDescription(question.getQuestionDescription())"},{"lineNumber":713,"author":{"gitId":"-"},"content":" .withQuestionNumber(question.getQuestionNumber())"},{"lineNumber":714,"author":{"gitId":"-"},"content":" .withGiverType(question.getGiverType())"},{"lineNumber":715,"author":{"gitId":"-"},"content":" .withRecipientType(question.getRecipientType())"},{"lineNumber":716,"author":{"gitId":"-"},"content":" .withNumberOfEntitiesToGiveFeedbackTo(question.getNumberOfEntitiesToGiveFeedbackToSetting()"},{"lineNumber":717,"author":{"gitId":"-"},"content":" .equals(NumberOfEntitiesToGiveFeedbackToSetting.UNLIMITED)"},{"lineNumber":718,"author":{"gitId":"-"},"content":" ? Const.MAX_POSSIBLE_RECIPIENTS"},{"lineNumber":719,"author":{"gitId":"-"},"content":" : question.getCustomNumberOfEntitiesToGiveFeedbackTo())"},{"lineNumber":720,"author":{"gitId":"-"},"content":" .withShowResponsesTo(convertToFeedbackParticipantType(question.getShowResponsesTo()))"},{"lineNumber":721,"author":{"gitId":"-"},"content":" .withShowGiverNameTo(convertToFeedbackParticipantType(question.getShowGiverNameTo()))"},{"lineNumber":722,"author":{"gitId":"-"},"content":" .withShowRecipientNameTo(convertToFeedbackParticipantType(question.getShowRecipientNameTo()))"},{"lineNumber":723,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":724,"author":{"gitId":"-"},"content":" if (question.getFeedbackQuestionId() !\u003d null) {"},{"lineNumber":725,"author":{"gitId":"-"},"content":" questionAttr.setId(question.getFeedbackQuestionId());"},{"lineNumber":726,"author":{"gitId":"-"},"content":" }"},{"lineNumber":727,"author":{"gitId":"-"},"content":" return questionAttr;"},{"lineNumber":728,"author":{"gitId":"-"},"content":" }"},{"lineNumber":729,"author":{"gitId":"-"},"content":""},{"lineNumber":730,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":731,"author":{"gitId":"-"},"content":" * Converts List of FeedbackParticipantType to sorted List of FeedbackVisibilityType."},{"lineNumber":732,"author":{"gitId":"-"},"content":" */"},{"lineNumber":733,"author":{"gitId":"-"},"content":" private static List\u003cFeedbackParticipantType\u003e convertToFeedbackParticipantType("},{"lineNumber":734,"author":{"gitId":"-"},"content":" List\u003cFeedbackVisibilityType\u003e feedbackVisibilityTypeList) {"},{"lineNumber":735,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e feedbackParticipantTypeList \u003d feedbackVisibilityTypeList.stream()"},{"lineNumber":736,"author":{"gitId":"-"},"content":" .map(feedbackParticipantType -\u003e {"},{"lineNumber":737,"author":{"gitId":"-"},"content":" switch (feedbackParticipantType) {"},{"lineNumber":738,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":739,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.STUDENTS;"},{"lineNumber":740,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":741,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.INSTRUCTORS;"},{"lineNumber":742,"author":{"gitId":"-"},"content":" case RECIPIENT:"},{"lineNumber":743,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.RECEIVER;"},{"lineNumber":744,"author":{"gitId":"-"},"content":" case GIVER_TEAM_MEMBERS:"},{"lineNumber":745,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.OWN_TEAM_MEMBERS;"},{"lineNumber":746,"author":{"gitId":"-"},"content":" case RECIPIENT_TEAM_MEMBERS:"},{"lineNumber":747,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.RECEIVER_TEAM_MEMBERS;"},{"lineNumber":748,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":749,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown FeedbackVisibilityType \" + feedbackParticipantType);"},{"lineNumber":750,"author":{"gitId":"-"},"content":" }"},{"lineNumber":751,"author":{"gitId":"-"},"content":" }).collect(Collectors.toList());"},{"lineNumber":752,"author":{"gitId":"-"},"content":" Collections.sort(feedbackParticipantTypeList);"},{"lineNumber":753,"author":{"gitId":"-"},"content":" return feedbackParticipantTypeList;"},{"lineNumber":754,"author":{"gitId":"-"},"content":" }"},{"lineNumber":755,"author":{"gitId":"-"},"content":""},{"lineNumber":756,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":757,"author":{"gitId":"-"},"content":" * Get feedback response data from database."},{"lineNumber":758,"author":{"gitId":"-"},"content":" */"},{"lineNumber":759,"author":{"gitId":"-"},"content":" public FeedbackResponseData getFeedbackResponseData(String feedbackQuestionId, String giver,"},{"lineNumber":760,"author":{"gitId":"-"},"content":" String recipient) {"},{"lineNumber":761,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":762,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_QUESTION_ID, feedbackQuestionId);"},{"lineNumber":763,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.STUDENT_SUBMISSION.toString());"},{"lineNumber":764,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON, giver);"},{"lineNumber":765,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.RESPONSES, params);"},{"lineNumber":766,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":767,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":768,"author":{"gitId":"-"},"content":" }"},{"lineNumber":769,"author":{"gitId":"-"},"content":""},{"lineNumber":770,"author":{"gitId":"-"},"content":" FeedbackResponsesData responsesData \u003d JsonUtils.fromJson(response.responseBody, FeedbackResponsesData.class);"},{"lineNumber":771,"author":{"gitId":"-"},"content":" return responsesData.getResponses()"},{"lineNumber":772,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":773,"author":{"gitId":"-"},"content":" .filter(r -\u003e r.getGiverIdentifier().equals(giver) \u0026\u0026 r.getRecipientIdentifier().equals(recipient))"},{"lineNumber":774,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":775,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":776,"author":{"gitId":"-"},"content":" }"},{"lineNumber":777,"author":{"gitId":"-"},"content":""},{"lineNumber":778,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":779,"author":{"gitId":"-"},"content":" * Get feedback response from database."},{"lineNumber":780,"author":{"gitId":"-"},"content":" */"},{"lineNumber":781,"author":{"gitId":"-"},"content":" public FeedbackResponseAttributes getFeedbackResponse(String feedbackQuestionId, String giver,"},{"lineNumber":782,"author":{"gitId":"-"},"content":" String recipient) {"},{"lineNumber":783,"author":{"gitId":"-"},"content":" FeedbackResponseData fr \u003d getFeedbackResponseData(feedbackQuestionId, giver, recipient);"},{"lineNumber":784,"author":{"gitId":"-"},"content":""},{"lineNumber":785,"author":{"gitId":"-"},"content":" if (fr \u003d\u003d null) {"},{"lineNumber":786,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":787,"author":{"gitId":"-"},"content":" }"},{"lineNumber":788,"author":{"gitId":"-"},"content":""},{"lineNumber":789,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes responseAttr \u003d FeedbackResponseAttributes"},{"lineNumber":790,"author":{"gitId":"-"},"content":" .builder(feedbackQuestionId, fr.getGiverIdentifier(), fr.getRecipientIdentifier())"},{"lineNumber":791,"author":{"gitId":"-"},"content":" .withResponseDetails(fr.getResponseDetails())"},{"lineNumber":792,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":793,"author":{"gitId":"-"},"content":" if (fr.getFeedbackResponseId() !\u003d null) {"},{"lineNumber":794,"author":{"gitId":"-"},"content":" responseAttr.setId(fr.getFeedbackResponseId());"},{"lineNumber":795,"author":{"gitId":"-"},"content":" }"},{"lineNumber":796,"author":{"gitId":"-"},"content":" return responseAttr;"},{"lineNumber":797,"author":{"gitId":"-"},"content":" }"},{"lineNumber":798,"author":{"gitId":"-"},"content":""},{"lineNumber":799,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":800,"author":{"gitId":"-"},"content":" * Get feedback response comment from database."},{"lineNumber":801,"author":{"gitId":"-"},"content":" */"},{"lineNumber":802,"author":{"gitId":"-"},"content":" public FeedbackResponseCommentAttributes getFeedbackResponseComment(String feedbackResponseId) {"},{"lineNumber":803,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":804,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_RESPONSE_ID, feedbackResponseId);"},{"lineNumber":805,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.STUDENT_SUBMISSION.toString());"},{"lineNumber":806,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.RESPONSE_COMMENT, params);"},{"lineNumber":807,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":808,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":809,"author":{"gitId":"-"},"content":" }"},{"lineNumber":810,"author":{"gitId":"-"},"content":""},{"lineNumber":811,"author":{"gitId":"-"},"content":" FeedbackResponseCommentData frc \u003d JsonUtils.fromJson(response.responseBody, FeedbackResponseCommentData.class);"},{"lineNumber":812,"author":{"gitId":"-"},"content":""},{"lineNumber":813,"author":{"gitId":"-"},"content":" if (frc \u003d\u003d null) {"},{"lineNumber":814,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":815,"author":{"gitId":"-"},"content":" }"},{"lineNumber":816,"author":{"gitId":"-"},"content":""},{"lineNumber":817,"author":{"gitId":"-"},"content":" return FeedbackResponseCommentAttributes.builder()"},{"lineNumber":818,"author":{"gitId":"-"},"content":" .withCommentGiver(frc.getCommentGiver())"},{"lineNumber":819,"author":{"gitId":"-"},"content":" .withCommentText(frc.getCommentText())"},{"lineNumber":820,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":821,"author":{"gitId":"-"},"content":" }"},{"lineNumber":822,"author":{"gitId":"-"},"content":""},{"lineNumber":823,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":824,"author":{"gitId":"-"},"content":" * Deletes a course from the database."},{"lineNumber":825,"author":{"gitId":"-"},"content":" */"},{"lineNumber":826,"author":{"gitId":"-"},"content":" public void deleteCourse(String courseId) {"},{"lineNumber":827,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":828,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":829,"author":{"gitId":"-"},"content":" executeDeleteRequest(Const.ResourceURIs.COURSE, params);"},{"lineNumber":830,"author":{"gitId":"-"},"content":" }"},{"lineNumber":831,"author":{"gitId":"-"},"content":""},{"lineNumber":832,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":833,"author":{"gitId":"-"},"content":" * Gets an account request from the database."},{"lineNumber":834,"author":{"gitId":"-"},"content":" */"},{"lineNumber":835,"author":{"gitId":"-"},"content":" public AccountRequestAttributes getAccountRequest(String email, String institute) {"},{"lineNumber":836,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":837,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_EMAIL, email);"},{"lineNumber":838,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_INSTITUTION, institute);"},{"lineNumber":839,"author":{"gitId":"-"},"content":""},{"lineNumber":840,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.ACCOUNT_REQUEST, params);"},{"lineNumber":841,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":842,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":843,"author":{"gitId":"-"},"content":" }"},{"lineNumber":844,"author":{"gitId":"-"},"content":""},{"lineNumber":845,"author":{"gitId":"-"},"content":" AccountRequestData accountRequestData \u003d JsonUtils.fromJson(response.responseBody, AccountRequestData.class);"},{"lineNumber":846,"author":{"gitId":"-"},"content":""},{"lineNumber":847,"author":{"gitId":"-"},"content":" return AccountRequestAttributes"},{"lineNumber":848,"author":{"gitId":"-"},"content":" .builder(accountRequestData.getEmail(), accountRequestData.getInstitute(), accountRequestData.getName())"},{"lineNumber":849,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":850,"author":{"gitId":"-"},"content":" }"},{"lineNumber":851,"author":{"gitId":"-"},"content":""},{"lineNumber":852,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":853,"author":{"gitId":"-"},"content":" * Gets registration key of an account request from the database."},{"lineNumber":854,"author":{"gitId":"-"},"content":" */"},{"lineNumber":855,"author":{"gitId":"-"},"content":" public String getRegKeyForAccountRequest(String email, String institute) {"},{"lineNumber":856,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":857,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_EMAIL, email);"},{"lineNumber":858,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_INSTITUTION, institute);"},{"lineNumber":859,"author":{"gitId":"-"},"content":""},{"lineNumber":860,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.ACCOUNT_REQUEST, params);"},{"lineNumber":861,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":862,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":863,"author":{"gitId":"-"},"content":" }"},{"lineNumber":864,"author":{"gitId":"-"},"content":""},{"lineNumber":865,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, AccountRequestData.class).getRegistrationKey();"},{"lineNumber":866,"author":{"gitId":"-"},"content":" }"},{"lineNumber":867,"author":{"gitId":"-"},"content":""},{"lineNumber":868,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":869,"author":{"gitId":"-"},"content":" * Deletes an account request from the database."},{"lineNumber":870,"author":{"gitId":"-"},"content":" */"},{"lineNumber":871,"author":{"gitId":"-"},"content":" public void deleteAccountRequest(String email, String institute) {"},{"lineNumber":872,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":873,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_EMAIL, email);"},{"lineNumber":874,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_INSTITUTION, institute);"},{"lineNumber":875,"author":{"gitId":"-"},"content":" executeDeleteRequest(Const.ResourceURIs.ACCOUNT_REQUEST, params);"},{"lineNumber":876,"author":{"gitId":"-"},"content":" }"},{"lineNumber":877,"author":{"gitId":"-"},"content":""},{"lineNumber":878,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":879,"author":{"gitId":"-"},"content":" * Gets notification data from the database."},{"lineNumber":880,"author":{"gitId":"-"},"content":" */"},{"lineNumber":881,"author":{"gitId":"-"},"content":" public NotificationData getNotificationData(String notificationId) {"},{"lineNumber":882,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":883,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.NOTIFICATION_ID, notificationId);"},{"lineNumber":884,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.NOTIFICATION, params);"},{"lineNumber":885,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":886,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":887,"author":{"gitId":"-"},"content":" }"},{"lineNumber":888,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, NotificationData.class);"},{"lineNumber":889,"author":{"gitId":"-"},"content":" }"},{"lineNumber":890,"author":{"gitId":"-"},"content":""},{"lineNumber":891,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":892,"author":{"gitId":"-"},"content":" * Gets a notification from the database."},{"lineNumber":893,"author":{"gitId":"-"},"content":" */"},{"lineNumber":894,"author":{"gitId":"-"},"content":" public NotificationAttributes getNotification(String notificationId) {"},{"lineNumber":895,"author":{"gitId":"-"},"content":" NotificationData notificationData \u003d getNotificationData(notificationId);"},{"lineNumber":896,"author":{"gitId":"-"},"content":" if (notificationData \u003d\u003d null) {"},{"lineNumber":897,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":898,"author":{"gitId":"-"},"content":" }"},{"lineNumber":899,"author":{"gitId":"-"},"content":" NotificationAttributes notification \u003d NotificationAttributes.builder(notificationData.getNotificationId())"},{"lineNumber":900,"author":{"gitId":"-"},"content":" .withStartTime(Instant.ofEpochMilli(notificationData.getStartTimestamp()))"},{"lineNumber":901,"author":{"gitId":"-"},"content":" .withEndTime(Instant.ofEpochMilli(notificationData.getEndTimestamp()))"},{"lineNumber":902,"author":{"gitId":"-"},"content":" .withStyle(notificationData.getStyle())"},{"lineNumber":903,"author":{"gitId":"-"},"content":" .withTargetUser(notificationData.getTargetUser())"},{"lineNumber":904,"author":{"gitId":"-"},"content":" .withTitle(notificationData.getTitle())"},{"lineNumber":905,"author":{"gitId":"-"},"content":" .withMessage(notificationData.getMessage())"},{"lineNumber":906,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":907,"author":{"gitId":"-"},"content":" notification.setCreatedAt(Instant.ofEpochMilli(notificationData.getCreatedAt()));"},{"lineNumber":908,"author":{"gitId":"-"},"content":" return notification;"},{"lineNumber":909,"author":{"gitId":"-"},"content":" }"},{"lineNumber":910,"author":{"gitId":"-"},"content":""},{"lineNumber":911,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":912,"author":{"gitId":"-"},"content":" * Deletes a notification from the database."},{"lineNumber":913,"author":{"gitId":"-"},"content":" */"},{"lineNumber":914,"author":{"gitId":"-"},"content":" public void deleteNotification(String notificationId) {"},{"lineNumber":915,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":916,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.NOTIFICATION_ID, notificationId);"},{"lineNumber":917,"author":{"gitId":"-"},"content":" executeDeleteRequest(Const.ResourceURIs.NOTIFICATION, params);"},{"lineNumber":918,"author":{"gitId":"-"},"content":" }"},{"lineNumber":919,"author":{"gitId":"-"},"content":""},{"lineNumber":920,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":921,"author":{"gitId":"-"},"content":" * Deletes a notification from the database."},{"lineNumber":922,"author":{"gitId":"-"},"content":" */"},{"lineNumber":923,"author":{"gitId":"-"},"content":" public void deleteNotification(UUID notificationId) {"},{"lineNumber":924,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":925,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.NOTIFICATION_ID, notificationId.toString());"},{"lineNumber":926,"author":{"gitId":"-"},"content":" executeDeleteRequest(Const.ResourceURIs.NOTIFICATION, params);"},{"lineNumber":927,"author":{"gitId":"-"},"content":" }"},{"lineNumber":928,"author":{"gitId":"-"},"content":""},{"lineNumber":929,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":930,"author":{"gitId":"-"},"content":" * Gets a deadline extension from the database."},{"lineNumber":931,"author":{"gitId":"-"},"content":" */"},{"lineNumber":932,"author":{"gitId":"-"},"content":" public DeadlineExtensionAttributes getDeadlineExtension("},{"lineNumber":933,"author":{"gitId":"-"},"content":" String courseId, String feedbackSessionName, String userEmail, boolean isInstructor) {"},{"lineNumber":934,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":935,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":936,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSessionName);"},{"lineNumber":937,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.USER_EMAIL, userEmail);"},{"lineNumber":938,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.IS_INSTRUCTOR, Boolean.toString(isInstructor));"},{"lineNumber":939,"author":{"gitId":"-"},"content":""},{"lineNumber":940,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.DEADLINE_EXTENSION, params);"},{"lineNumber":941,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":942,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":943,"author":{"gitId":"-"},"content":" }"},{"lineNumber":944,"author":{"gitId":"-"},"content":""},{"lineNumber":945,"author":{"gitId":"-"},"content":" DeadlineExtensionData deadlineExtensionData \u003d JsonUtils.fromJson(response.responseBody, DeadlineExtensionData.class);"},{"lineNumber":946,"author":{"gitId":"-"},"content":""},{"lineNumber":947,"author":{"gitId":"-"},"content":" return DeadlineExtensionAttributes.builder("},{"lineNumber":948,"author":{"gitId":"-"},"content":" deadlineExtensionData.getCourseId(), deadlineExtensionData.getFeedbackSessionName(),"},{"lineNumber":949,"author":{"gitId":"-"},"content":" deadlineExtensionData.getUserEmail(), deadlineExtensionData.getIsInstructor())"},{"lineNumber":950,"author":{"gitId":"-"},"content":" .withEndTime(Instant.ofEpochMilli(deadlineExtensionData.getEndTime()))"},{"lineNumber":951,"author":{"gitId":"-"},"content":" .withSentClosingEmail(deadlineExtensionData.getSentClosingEmail())"},{"lineNumber":952,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":953,"author":{"gitId":"-"},"content":" }"},{"lineNumber":954,"author":{"gitId":"-"},"content":""},{"lineNumber":955,"author":{"gitId":"-"},"content":" private static final class ResponseBodyAndCode {"},{"lineNumber":956,"author":{"gitId":"-"},"content":""},{"lineNumber":957,"author":{"gitId":"-"},"content":" String responseBody;"},{"lineNumber":958,"author":{"gitId":"-"},"content":" int responseCode;"},{"lineNumber":959,"author":{"gitId":"-"},"content":""},{"lineNumber":960,"author":{"gitId":"-"},"content":" ResponseBodyAndCode(String responseBody, int responseCode) {"},{"lineNumber":961,"author":{"gitId":"-"},"content":" this.responseBody \u003d responseBody;"},{"lineNumber":962,"author":{"gitId":"-"},"content":" this.responseCode \u003d responseCode;"},{"lineNumber":963,"author":{"gitId":"-"},"content":" }"},{"lineNumber":964,"author":{"gitId":"-"},"content":""},{"lineNumber":965,"author":{"gitId":"-"},"content":" }"},{"lineNumber":966,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":11,"-":955}},{"path":"src/test/java/teammates/test/BaseTestCase.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.lang.reflect.Method;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import java.time.Duration;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.junit.Assert;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPermissionRole;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPrivileges;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextQuestionDetails;"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.questions.FeedbackTextResponseDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.TimeHelperExtension;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.DataBundleLogic;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Base class for all test cases."},{"lineNumber":45,"author":{"gitId":"-"},"content":" */"},{"lineNumber":46,"author":{"gitId":"-"},"content":"public class BaseTestCase {"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Test Segment divider. Used to divide a test case into logical sections."},{"lineNumber":50,"author":{"gitId":"-"},"content":" * The weird name is for easy spotting."},{"lineNumber":51,"author":{"gitId":"-"},"content":" *"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * @param description"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * of the logical section. This will be printed."},{"lineNumber":54,"author":{"gitId":"-"},"content":" */"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // CHECKSTYLE.OFF:AbbreviationAsWordInName|MethodName the weird name is for easy spotting."},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static void ______TS(String description) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" print(\" * \" + description);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":" // CHECKSTYLE.ON:AbbreviationAsWordInName|MethodName"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public void printTestClassHeader() {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" print(\"[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\""},{"lineNumber":64,"author":{"gitId":"-"},"content":" + getClass().getCanonicalName()"},{"lineNumber":65,"author":{"gitId":"-"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d]\");"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void printTestClassFooter() {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" print(getClass().getCanonicalName() + \" completed\");"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" protected static void print(String message) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" System.out.println(message);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" protected String getTestDataFolder() {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return TestProperties.TEST_DATA_FOLDER;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * Creates a DataBundle as specified in typicalDataBundle.json."},{"lineNumber":83,"author":{"gitId":"-"},"content":" */"},{"lineNumber":84,"author":{"gitId":"-"},"content":" protected DataBundle getTypicalDataBundle() {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return loadDataBundle(\"/typicalDataBundle.json\");"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":" protected DataBundle loadDataBundle(String jsonFileName) {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" String pathToJsonFile \u003d getTestDataFolder() + jsonFileName;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" String jsonString \u003d FileHelper.readFile(pathToJsonFile);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(jsonString, DataBundle.class);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" protected SqlDataBundle getTypicalSqlDataBundle() {"},{"lineNumber":99,"author":{"gitId":"-"},"content":" return loadSqlDataBundle(\"/typicalDataBundle.json\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" protected SqlDataBundle loadSqlDataBundle(String jsonFileName) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" // TODO: rename to loadDataBundle after migration"},{"lineNumber":105,"author":{"gitId":"-"},"content":" String pathToJsonFile \u003d getTestDataFolder() + jsonFileName;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" String jsonString \u003d FileHelper.readFile(pathToJsonFile);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" return DataBundleLogic.deserializeDataBundle(jsonString);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * These getTypicalX functions are used to generate typical entities for tests."},{"lineNumber":115,"author":{"gitId":"-"},"content":" * The entity fields can be changed using setter methods if needed."},{"lineNumber":116,"author":{"gitId":"-"},"content":" * New entity generator functions for tests should be added here, and follow the"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * same naming convention."},{"lineNumber":118,"author":{"gitId":"-"},"content":" *"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * \u003cp\u003eExample usage:"},{"lineNumber":120,"author":{"gitId":"-"},"content":" * Account account \u003d getTypicalAccount();"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * Student student \u003d getTypicalStudent();"},{"lineNumber":122,"author":{"gitId":"-"},"content":" * account.setEmail(\"newemail@teammates.com\");"},{"lineNumber":123,"author":{"gitId":"-"},"content":" * student.setName(\"New Student Name\");"},{"lineNumber":124,"author":{"gitId":"-"},"content":" */"},{"lineNumber":125,"author":{"gitId":"-"},"content":" protected Account getTypicalAccount() {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return new Account(\"google-id\", \"name\", \"email@teammates.com\");"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" protected Notification getTypicalNotificationWithId() {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" Notification notification \u003d new Notification(Instant.parse(\"2011-01-01T00:00:00Z\"),"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Instant.parse(\"2099-01-01T00:00:00Z\"), NotificationStyle.DANGER, NotificationTargetUser.GENERAL,"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \"A deprecation note\", \"\u003cp\u003eDeprecation happens in three minutes\u003c/p\u003e\");"},{"lineNumber":133,"author":{"gitId":"-"},"content":" notification.setId(UUID.randomUUID());"},{"lineNumber":134,"author":{"gitId":"-"},"content":" return notification;"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" protected Instructor getTypicalInstructor() {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":139,"author":{"gitId":"-"},"content":" InstructorPrivileges instructorPrivileges \u003d"},{"lineNumber":140,"author":{"gitId":"-"},"content":" new InstructorPrivileges(Const.InstructorPermissionRoleNames.INSTRUCTOR_PERMISSION_ROLE_COOWNER);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" InstructorPermissionRole role \u003d InstructorPermissionRole"},{"lineNumber":142,"author":{"gitId":"-"},"content":" .getEnum(Const.InstructorPermissionRoleNames.INSTRUCTOR_PERMISSION_ROLE_COOWNER);"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" return new Instructor(course, \"instructor-name\", \"valid@teammates.tmt\","},{"lineNumber":145,"author":{"gitId":"-"},"content":" false, Const.DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR, role, instructorPrivileges);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" protected Course getTypicalCourse() {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" return new Course(\"course-id\", \"course-name\", Const.DEFAULT_TIME_ZONE, \"teammates\");"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" protected Student getTypicalStudent() {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":154,"author":{"gitId":"-"},"content":" return new Student(course, \"student-name\", \"validstudent@teammates.tmt\", \"comments\");"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" protected Section getTypicalSection() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":159,"author":{"gitId":"-"},"content":" return new Section(course, \"test-section\");"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" protected Team getTypicalTeam() {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":164,"author":{"gitId":"-"},"content":" return new Team(section, \"test-team\");"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" protected FeedbackSession getTypicalFeedbackSessionForCourse(Course course) {"},{"lineNumber":168,"author":{"gitId":"dishenggg"},"content":" Instant startTime \u003d TimeHelperExtension.getInstantDaysOffsetFromNow(1);"},{"lineNumber":169,"author":{"gitId":"dishenggg"},"content":" Instant endTime \u003d TimeHelperExtension.getInstantDaysOffsetFromNow(7);"},{"lineNumber":170,"author":{"gitId":"dishenggg"},"content":" return new FeedbackSession(\"test-feedbacksession\","},{"lineNumber":171,"author":{"gitId":"dishenggg"},"content":" course,"},{"lineNumber":172,"author":{"gitId":"dishenggg"},"content":" \"test@teammates.tmt\","},{"lineNumber":173,"author":{"gitId":"dishenggg"},"content":" \"test-instructions\","},{"lineNumber":174,"author":{"gitId":"dishenggg"},"content":" startTime,"},{"lineNumber":175,"author":{"gitId":"dishenggg"},"content":" endTime,"},{"lineNumber":176,"author":{"gitId":"dishenggg"},"content":" startTime,"},{"lineNumber":177,"author":{"gitId":"dishenggg"},"content":" endTime,"},{"lineNumber":178,"author":{"gitId":"dishenggg"},"content":" Duration.ofMinutes(5),"},{"lineNumber":179,"author":{"gitId":"dishenggg"},"content":" false,"},{"lineNumber":180,"author":{"gitId":"dishenggg"},"content":" false,"},{"lineNumber":181,"author":{"gitId":"dishenggg"},"content":" false);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" protected FeedbackQuestion getTypicalFeedbackQuestionForSession(FeedbackSession session) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" return FeedbackQuestion.makeQuestion(session, 1, \"test-description\","},{"lineNumber":186,"author":{"gitId":"-"},"content":" FeedbackParticipantType.SELF, FeedbackParticipantType.SELF, 1, new ArrayList\u003cFeedbackParticipantType\u003e(),"},{"lineNumber":187,"author":{"gitId":"-"},"content":" new ArrayList\u003cFeedbackParticipantType\u003e(), new ArrayList\u003cFeedbackParticipantType\u003e(),"},{"lineNumber":188,"author":{"gitId":"-"},"content":" new FeedbackTextQuestionDetails(\"test question text\"));"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" protected FeedbackResponse getTypicalFeedbackResponseForQuestion(FeedbackQuestion question) {"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" return FeedbackResponse.makeResponse(question, \"test-giver\", getTypicalSection(), \"test-recipient\","},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" getTypicalSection(), getTypicalFeedbackResponseDetails());"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" protected FeedbackResponseDetails getTypicalFeedbackResponseDetails() {"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" return new FeedbackTextResponseDetails();"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":200,"author":{"gitId":"mingyuanc"},"content":" protected FeedbackResponseComment getTypicalResponseComment(Long id) {"},{"lineNumber":201,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d new FeedbackResponseComment(null, \"\","},{"lineNumber":202,"author":{"gitId":"mingyuanc"},"content":" FeedbackParticipantType.STUDENTS, null, null, \"\","},{"lineNumber":203,"author":{"gitId":"mingyuanc"},"content":" false, false,"},{"lineNumber":204,"author":{"gitId":"mingyuanc"},"content":" null, null, null);"},{"lineNumber":205,"author":{"gitId":"mingyuanc"},"content":" comment.setId(id);"},{"lineNumber":206,"author":{"gitId":"mingyuanc"},"content":" return comment;"},{"lineNumber":207,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":208,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":210,"author":{"gitId":"-"},"content":" * Populates the feedback question and response IDs within the data bundle."},{"lineNumber":211,"author":{"gitId":"-"},"content":" *"},{"lineNumber":212,"author":{"gitId":"-"},"content":" * \u003cp\u003eFor tests where simulated database is used, the backend will assign the question and response IDs"},{"lineNumber":213,"author":{"gitId":"-"},"content":" * when the entities are persisted into the database, and modify the relation IDs accordingly."},{"lineNumber":214,"author":{"gitId":"-"},"content":" * However, for tests that do not use simulated database (e.g. pure data structure tests),"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * the assignment of IDs have to be simulated."},{"lineNumber":216,"author":{"gitId":"-"},"content":" */"},{"lineNumber":217,"author":{"gitId":"-"},"content":" protected void populateQuestionAndResponseIds(DataBundle dataBundle) {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" Map\u003cString, Map\u003cInteger, String\u003e\u003e sessionToQuestionNumberToId \u003d new HashMap\u003c\u003e();"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" dataBundle.feedbackQuestions.forEach((key, question) -\u003e {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" // Assign the same ID as the key as a later function requires a match between the key and the question ID"},{"lineNumber":222,"author":{"gitId":"-"},"content":" question.setId(key);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" Map\u003cInteger, String\u003e questionNumberToId \u003d sessionToQuestionNumberToId.computeIfAbsent("},{"lineNumber":224,"author":{"gitId":"-"},"content":" question.getCourseId() + \"%\" + question.getFeedbackSessionName(), k -\u003e new HashMap\u003c\u003e());"},{"lineNumber":225,"author":{"gitId":"-"},"content":" questionNumberToId.put(question.getQuestionNumber(), key);"},{"lineNumber":226,"author":{"gitId":"-"},"content":" });"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":" dataBundle.feedbackResponses.forEach((key, response) -\u003e {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" response.setId(key);"},{"lineNumber":230,"author":{"gitId":"-"},"content":" String feedbackQuestionId \u003d sessionToQuestionNumberToId"},{"lineNumber":231,"author":{"gitId":"-"},"content":" .get(response.getCourseId() + \"%\" + response.getFeedbackSessionName())"},{"lineNumber":232,"author":{"gitId":"-"},"content":" .get(Integer.valueOf(response.getFeedbackQuestionId()));"},{"lineNumber":233,"author":{"gitId":"-"},"content":" response.setFeedbackQuestionId(feedbackQuestionId);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" });"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":238,"author":{"gitId":"-"},"content":" * Invokes the method named {@code methodName} as defined in the {@code definingClass}."},{"lineNumber":239,"author":{"gitId":"-"},"content":" * @param definingClass the class which defines the method"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * @param parameterTypes the parameter types of the method,"},{"lineNumber":241,"author":{"gitId":"-"},"content":" * which must be passed in the same order defined in the method"},{"lineNumber":242,"author":{"gitId":"-"},"content":" * @param invokingObject the object which invokes the method, can be {@code null} if the method is static"},{"lineNumber":243,"author":{"gitId":"-"},"content":" * @param args the arguments to be passed to the method invocation"},{"lineNumber":244,"author":{"gitId":"-"},"content":" */"},{"lineNumber":245,"author":{"gitId":"-"},"content":" protected static Object invokeMethod(Class\u003c?\u003e definingClass, String methodName, Class\u003c?\u003e[] parameterTypes,"},{"lineNumber":246,"author":{"gitId":"-"},"content":" Object invokingObject, Object[] args)"},{"lineNumber":247,"author":{"gitId":"-"},"content":" throws ReflectiveOperationException {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" Method method \u003d definingClass.getDeclaredMethod(methodName, parameterTypes);"},{"lineNumber":249,"author":{"gitId":"-"},"content":" method.setAccessible(true);"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return method.invoke(invokingObject, args);"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" protected static String getPopulatedErrorMessage(String messageTemplate, String userInput,"},{"lineNumber":254,"author":{"gitId":"-"},"content":" String fieldName, String errorReason)"},{"lineNumber":255,"author":{"gitId":"-"},"content":" throws ReflectiveOperationException {"},{"lineNumber":256,"author":{"gitId":"-"},"content":" return getPopulatedErrorMessage(messageTemplate, userInput, fieldName, errorReason, 0);"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" protected static String getPopulatedErrorMessage(String messageTemplate, String userInput,"},{"lineNumber":260,"author":{"gitId":"-"},"content":" String fieldName, String errorReason, int maxLength)"},{"lineNumber":261,"author":{"gitId":"-"},"content":" throws ReflectiveOperationException {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" return (String) invokeMethod(FieldValidator.class, \"getPopulatedErrorMessage\","},{"lineNumber":263,"author":{"gitId":"-"},"content":" new Class\u003c?\u003e[] { String.class, String.class, String.class, String.class, int.class },"},{"lineNumber":264,"author":{"gitId":"-"},"content":" null, new Object[] { messageTemplate, userInput, fieldName, errorReason, maxLength });"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":" protected static String getPopulatedEmptyStringErrorMessage(String messageTemplate, String fieldName, int maxLength)"},{"lineNumber":268,"author":{"gitId":"-"},"content":" throws ReflectiveOperationException {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" return (String) invokeMethod(FieldValidator.class, \"getPopulatedEmptyStringErrorMessage\","},{"lineNumber":270,"author":{"gitId":"-"},"content":" new Class\u003c?\u003e[] { String.class, String.class, int.class },"},{"lineNumber":271,"author":{"gitId":"-"},"content":" null, new Object[] { messageTemplate, fieldName, maxLength });"},{"lineNumber":272,"author":{"gitId":"-"},"content":" }"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":275,"author":{"gitId":"-"},"content":" * Here are some of the most common assertion methods provided by JUnit."},{"lineNumber":276,"author":{"gitId":"-"},"content":" * They are copied here to prevent repetitive importing in test classes."},{"lineNumber":277,"author":{"gitId":"-"},"content":" */"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" protected static void assertTrue(boolean condition) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" Assert.assertTrue(condition);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":" protected static void assertTrue(String message, boolean condition) {"},{"lineNumber":284,"author":{"gitId":"-"},"content":" Assert.assertTrue(message, condition);"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":" protected static void assertFalse(boolean condition) {"},{"lineNumber":288,"author":{"gitId":"-"},"content":" Assert.assertFalse(condition);"},{"lineNumber":289,"author":{"gitId":"-"},"content":" }"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":" protected static void assertFalse(String message, boolean condition) {"},{"lineNumber":292,"author":{"gitId":"-"},"content":" Assert.assertFalse(message, condition);"},{"lineNumber":293,"author":{"gitId":"-"},"content":" }"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":" protected static void assertEquals(int expected, int actual) {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" Assert.assertEquals(expected, actual);"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" protected static void assertEquals(String message, int expected, int actual) {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" Assert.assertEquals(message, expected, actual);"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" protected static void assertEquals(long expected, long actual) {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" Assert.assertEquals(expected, actual);"},{"lineNumber":305,"author":{"gitId":"-"},"content":" }"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" protected static void assertEquals(double expected, double actual, double delta) {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" Assert.assertEquals(expected, actual, delta);"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" protected static void assertEquals(Object expected, Object actual) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" Assert.assertEquals(expected, actual);"},{"lineNumber":313,"author":{"gitId":"-"},"content":" }"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":" protected static void assertEquals(String message, Object expected, Object actual) {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" Assert.assertEquals(message, expected, actual);"},{"lineNumber":317,"author":{"gitId":"-"},"content":" }"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":" protected static void assertArrayEquals(byte[] expected, byte[] actual) {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" Assert.assertArrayEquals(expected, actual);"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" protected static void assertNotEquals(Object first, Object second) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" Assert.assertNotEquals(first, second);"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":" protected static void assertSame(Object expected, Object actual) {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" Assert.assertSame(expected, actual);"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":""},{"lineNumber":331,"author":{"gitId":"-"},"content":" protected static void assertNotSame(Object unexpected, Object actual) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" Assert.assertNotSame(unexpected, actual);"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" protected static void assertNull(Object object) {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" Assert.assertNull(object);"},{"lineNumber":337,"author":{"gitId":"-"},"content":" }"},{"lineNumber":338,"author":{"gitId":"-"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":" protected static void assertNull(String message, Object object) {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" Assert.assertNull(message, object);"},{"lineNumber":341,"author":{"gitId":"-"},"content":" }"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"-"},"content":" protected static void assertNotNull(Object object) {"},{"lineNumber":344,"author":{"gitId":"-"},"content":" Assert.assertNotNull(object);"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" protected static void assertNotNull(String message, Object object) {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" Assert.assertNotNull(message, object);"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":350,"author":{"gitId":"-"},"content":""},{"lineNumber":351,"author":{"gitId":"-"},"content":" protected static void fail(String message) {"},{"lineNumber":352,"author":{"gitId":"-"},"content":" Assert.fail(message);"},{"lineNumber":353,"author":{"gitId":"-"},"content":" }"},{"lineNumber":354,"author":{"gitId":"-"},"content":""},{"lineNumber":355,"author":{"gitId":"-"},"content":" // This method is adapted from JUnit 5\u0027s assertThrows."},{"lineNumber":356,"author":{"gitId":"-"},"content":" // Once we upgrade to JUnit 5, their built-in method shall be used instead."},{"lineNumber":357,"author":{"gitId":"-"},"content":" @SuppressWarnings({"},{"lineNumber":358,"author":{"gitId":"-"},"content":" \"unchecked\","},{"lineNumber":359,"author":{"gitId":"-"},"content":" \"PMD.AvoidCatchingThrowable\", // As per reference method\u0027s specification"},{"lineNumber":360,"author":{"gitId":"-"},"content":" })"},{"lineNumber":361,"author":{"gitId":"-"},"content":" protected static \u003cT extends Throwable\u003e T assertThrows(Class\u003cT\u003e expectedType, Executable executable) {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":363,"author":{"gitId":"-"},"content":" executable.execute();"},{"lineNumber":364,"author":{"gitId":"-"},"content":" } catch (Throwable actualException) {"},{"lineNumber":365,"author":{"gitId":"-"},"content":" if (expectedType.isInstance(actualException)) {"},{"lineNumber":366,"author":{"gitId":"-"},"content":" return (T) actualException;"},{"lineNumber":367,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":368,"author":{"gitId":"-"},"content":" String message \u003d String.format(\"Expected %s to be thrown, but %s was instead thrown.\","},{"lineNumber":369,"author":{"gitId":"-"},"content":" getCanonicalName(expectedType), getCanonicalName(actualException.getClass()));"},{"lineNumber":370,"author":{"gitId":"-"},"content":" throw new AssertionError(message, actualException);"},{"lineNumber":371,"author":{"gitId":"-"},"content":" }"},{"lineNumber":372,"author":{"gitId":"-"},"content":" }"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" String message \u003d String.format(\"Expected %s to be thrown, but nothing was thrown.\", getCanonicalName(expectedType));"},{"lineNumber":375,"author":{"gitId":"-"},"content":" throw new AssertionError(message);"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"-"},"content":" private static String getCanonicalName(Class\u003c?\u003e clazz) {"},{"lineNumber":379,"author":{"gitId":"-"},"content":" String canonicalName \u003d clazz.getCanonicalName();"},{"lineNumber":380,"author":{"gitId":"-"},"content":" return canonicalName \u003d\u003d null ? clazz.getName() : canonicalName;"},{"lineNumber":381,"author":{"gitId":"-"},"content":" }"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":384,"author":{"gitId":"-"},"content":" * {@code Executable} is a functional interface that can be used to"},{"lineNumber":385,"author":{"gitId":"-"},"content":" * implement any generic block of code that potentially throws a"},{"lineNumber":386,"author":{"gitId":"-"},"content":" * {@link Throwable}."},{"lineNumber":387,"author":{"gitId":"-"},"content":" *"},{"lineNumber":388,"author":{"gitId":"-"},"content":" * \u003cp\u003eThe {@code Executable} interface is similar to {@link Runnable},"},{"lineNumber":389,"author":{"gitId":"-"},"content":" * except that an {@code Executable} can throw any kind of exception."},{"lineNumber":390,"author":{"gitId":"-"},"content":" */"},{"lineNumber":391,"author":{"gitId":"-"},"content":" // This interface is adapted from JUnit 5\u0027s Executable interface."},{"lineNumber":392,"author":{"gitId":"-"},"content":" // Once we upgrade to JUnit 5, this interface shall no longer be necessary."},{"lineNumber":393,"author":{"gitId":"-"},"content":" public interface Executable {"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":396,"author":{"gitId":"-"},"content":" * Executes a block of code, potentially throwing a {@link Throwable}."},{"lineNumber":397,"author":{"gitId":"-"},"content":" */"},{"lineNumber":398,"author":{"gitId":"-"},"content":" // CHECKSTYLE.OFF:IllegalThrows"},{"lineNumber":399,"author":{"gitId":"-"},"content":" void execute() throws Throwable;"},{"lineNumber":400,"author":{"gitId":"-"},"content":" // CHECKSTYLE.ON:IllegalThrows"},{"lineNumber":401,"author":{"gitId":"-"},"content":""},{"lineNumber":402,"author":{"gitId":"-"},"content":" }"},{"lineNumber":403,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":12,"dishenggg":16,"mingyuanc":10,"-":365}},{"path":"src/test/java/teammates/test/BaseTestCaseWithDatabaseAccess.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.DeadlineExtensionAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.EntityAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * Base class for all test cases which are allowed to access the database."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public abstract class BaseTestCaseWithDatabaseAccess extends BaseTestCase {"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final int VERIFICATION_RETRY_COUNT \u003d 5;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final int VERIFICATION_RETRY_DELAY_IN_MS \u003d 1000;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final int OPERATION_RETRY_COUNT \u003d 5;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final int OPERATION_RETRY_DELAY_IN_MS \u003d 1000;"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" protected void verifyPresentInDatabase(DataBundle data) {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" data.accounts.values().forEach(this::verifyPresentInDatabase);"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" data.instructors.values().forEach(this::verifyPresentInDatabase);"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" data.courses.values().stream()"},{"lineNumber":35,"author":{"gitId":"-"},"content":" .filter(course -\u003e !course.isCourseDeleted())"},{"lineNumber":36,"author":{"gitId":"-"},"content":" .forEach(this::verifyPresentInDatabase);"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" data.students.values().forEach(this::verifyPresentInDatabase);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" protected void verifyPresentInDatabase(EntityAttributes\u003c?\u003e expected) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" int retryLimit \u003d VERIFICATION_RETRY_COUNT;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" EntityAttributes\u003c?\u003e actual \u003d getEntity(expected);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" while (actual \u003d\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(VERIFICATION_RETRY_DELAY_IN_MS);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" actual \u003d getEntity(expected);"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":" verifyEquals(expected, actual);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" private EntityAttributes\u003c?\u003e getEntity(EntityAttributes\u003c?\u003e expected) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (expected instanceof AccountAttributes) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return getAccount((AccountAttributes) expected);"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" } else if (expected instanceof CourseAttributes) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return getCourse((CourseAttributes) expected);"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackQuestionAttributes) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return getFeedbackQuestion((FeedbackQuestionAttributes) expected);"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseCommentAttributes) {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return getFeedbackResponseComment((FeedbackResponseCommentAttributes) expected);"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseAttributes) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" return getFeedbackResponse((FeedbackResponseAttributes) expected);"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackSessionAttributes) {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return getFeedbackSession((FeedbackSessionAttributes) expected);"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" } else if (expected instanceof InstructorAttributes) {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return getInstructor((InstructorAttributes) expected);"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" } else if (expected instanceof StudentAttributes) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return getStudent((StudentAttributes) expected);"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" } else if (expected instanceof AccountRequestAttributes) {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return getAccountRequest((AccountRequestAttributes) expected);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" } else if (expected instanceof DeadlineExtensionAttributes) {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return getDeadlineExtension((DeadlineExtensionAttributes) expected);"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" } else if (expected instanceof NotificationAttributes) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return getNotification((NotificationAttributes) expected);"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown entity type!\");"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" protected void verifyAbsentInDatabase(EntityAttributes\u003c?\u003e entity) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" int retryLimit \u003d VERIFICATION_RETRY_COUNT;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" EntityAttributes\u003c?\u003e actual \u003d getEntity(entity);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" while (actual !\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(VERIFICATION_RETRY_DELAY_IN_MS);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" actual \u003d getEntity(entity);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" assertNull(actual);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" private void verifyEquals(EntityAttributes\u003c?\u003e expected, EntityAttributes\u003c?\u003e actual) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (expected instanceof AccountAttributes) {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" AccountAttributes expectedAccount \u003d ((AccountAttributes) expected).getCopy();"},{"lineNumber":105,"author":{"gitId":"-"},"content":" AccountAttributes actualAccount \u003d (AccountAttributes) actual;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedAccount, actualAccount);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedAccount), JsonUtils.toJson(actualAccount));"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" } else if (expected instanceof CourseAttributes) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" CourseAttributes expectedCourse \u003d (CourseAttributes) expected;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" CourseAttributes actualCourse \u003d (CourseAttributes) actual;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedCourse, actualCourse);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedCourse), JsonUtils.toJson(actualCourse));"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackQuestionAttributes) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes expectedFq \u003d (FeedbackQuestionAttributes) expected;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes actualFq \u003d (FeedbackQuestionAttributes) actual;"},{"lineNumber":118,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedFq, actualFq);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedFq), JsonUtils.toJson(actualFq));"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseCommentAttributes) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" FeedbackResponseCommentAttributes expectedFrc \u003d (FeedbackResponseCommentAttributes) expected;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" FeedbackResponseCommentAttributes actualFrc \u003d (FeedbackResponseCommentAttributes) actual;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertEquals(expectedFrc.getCourseId(), actualFrc.getCourseId());"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assertEquals(expectedFrc.getCommentGiver(), actualFrc.getCommentGiver());"},{"lineNumber":126,"author":{"gitId":"-"},"content":" assertEquals(expectedFrc.getFeedbackSessionName(), actualFrc.getFeedbackSessionName());"},{"lineNumber":127,"author":{"gitId":"-"},"content":" assertEquals(expectedFrc.getCommentText(), actualFrc.getCommentText());"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseAttributes) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes expectedFr \u003d (FeedbackResponseAttributes) expected;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes actualFr \u003d (FeedbackResponseAttributes) actual;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedFr, actualFr);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedFr), JsonUtils.toJson(actualFr));"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackSessionAttributes) {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes expectedFs \u003d ((FeedbackSessionAttributes) expected).getCopy();"},{"lineNumber":137,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes actualFs \u003d (FeedbackSessionAttributes) actual;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedFs, actualFs);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedFs), JsonUtils.toJson(actualFs));"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" } else if (expected instanceof InstructorAttributes) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" InstructorAttributes expectedInstructor \u003d ((InstructorAttributes) expected).getCopy();"},{"lineNumber":143,"author":{"gitId":"-"},"content":" InstructorAttributes actualInstructor \u003d (InstructorAttributes) actual;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedInstructor, actualInstructor);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedInstructor), JsonUtils.toJson(actualInstructor));"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" } else if (expected instanceof StudentAttributes) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" StudentAttributes expectedStudent \u003d ((StudentAttributes) expected).getCopy();"},{"lineNumber":149,"author":{"gitId":"-"},"content":" StudentAttributes actualStudent \u003d (StudentAttributes) actual;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedStudent, actualStudent);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedStudent), JsonUtils.toJson(actualStudent));"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" } else if (expected instanceof AccountRequestAttributes) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" AccountRequestAttributes expectedAccountRequest \u003d (AccountRequestAttributes) expected;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" AccountRequestAttributes actualAccountRequest \u003d (AccountRequestAttributes) actual;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedAccountRequest), JsonUtils.toJson(actualAccountRequest));"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" } else if (expected instanceof DeadlineExtensionAttributes) {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" DeadlineExtensionAttributes expectedDeadlineExtension \u003d (DeadlineExtensionAttributes) expected;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" DeadlineExtensionAttributes actualDeadlineExtension \u003d (DeadlineExtensionAttributes) actual;"},{"lineNumber":161,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedDeadlineExtension, actualDeadlineExtension);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedDeadlineExtension), JsonUtils.toJson(actualDeadlineExtension));"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" } else if (expected instanceof NotificationAttributes) {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" NotificationAttributes expectedNotification \u003d (NotificationAttributes) expected;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" NotificationAttributes actualNotification \u003d (NotificationAttributes) actual;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedNotification, actualNotification);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedNotification), JsonUtils.toJson(actualNotification));"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown entity type!\");"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" protected abstract AccountAttributes getAccount(AccountAttributes account);"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(AccountAttributes expected, AccountAttributes actual) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":179,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(CourseAttributes expected, CourseAttributes actual) {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":184,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackQuestionAttributes expected, FeedbackQuestionAttributes actual) {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" expected.setId(actual.getId());"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackResponseAttributes expected, FeedbackResponseAttributes actual) {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" expected.setId(actual.getId());"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackSessionAttributes expected, FeedbackSessionAttributes actual) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" expected.setCreatedTime(actual.getCreatedTime());"},{"lineNumber":197,"author":{"gitId":"-"},"content":" // Not available in FeedbackSessionData and thus ignored"},{"lineNumber":198,"author":{"gitId":"-"},"content":" expected.setCreatorEmail(actual.getCreatorEmail());"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(InstructorAttributes expected, InstructorAttributes actual) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" // pretend keys match because the key is generated only before storing into database"},{"lineNumber":203,"author":{"gitId":"-"},"content":" if (actual.getKey() !\u003d null) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" expected.setKey(actual.getKey());"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(StudentAttributes expected, StudentAttributes actual) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" // For these fields, we consider null and \"\" equivalent."},{"lineNumber":210,"author":{"gitId":"-"},"content":" if (expected.getGoogleId() \u003d\u003d null \u0026\u0026 actual.getGoogleId().isEmpty()) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" expected.setGoogleId(\"\");"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":" if (expected.getTeam() \u003d\u003d null \u0026\u0026 actual.getTeam().isEmpty()) {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" expected.setTeam(\"\");"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":" if (expected.getComments() \u003d\u003d null \u0026\u0026 actual.getComments().isEmpty()) {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" expected.setComments(\"\");"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" // pretend keys match because the key is generated only before storing into database"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (actual.getKey() !\u003d null) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" expected.setKey(actual.getKey());"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(DeadlineExtensionAttributes expected, DeadlineExtensionAttributes actual) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":228,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":229,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(NotificationAttributes expected, NotificationAttributes actual) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":234,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":235,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" protected abstract CourseAttributes getCourse(CourseAttributes course);"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" protected abstract FeedbackQuestionAttributes getFeedbackQuestion(FeedbackQuestionAttributes fq);"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":" protected abstract FeedbackResponseCommentAttributes getFeedbackResponseComment(FeedbackResponseCommentAttributes frc);"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" protected abstract FeedbackResponseAttributes getFeedbackResponse(FeedbackResponseAttributes fr);"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" protected abstract FeedbackSessionAttributes getFeedbackSession(FeedbackSessionAttributes fs);"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" protected abstract InstructorAttributes getInstructor(InstructorAttributes instructor);"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" protected abstract StudentAttributes getStudent(StudentAttributes student);"},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":" protected abstract AccountRequestAttributes getAccountRequest(AccountRequestAttributes accountRequest);"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" protected abstract DeadlineExtensionAttributes getDeadlineExtension(DeadlineExtensionAttributes accountRequest);"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" protected abstract NotificationAttributes getNotification(NotificationAttributes notification);"},{"lineNumber":257,"author":{"gitId":"-"},"content":""},{"lineNumber":258,"author":{"gitId":"-"},"content":" protected void removeAndRestoreDataBundle(DataBundle testData) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" boolean isOperationSuccess \u003d doRemoveAndRestoreDataBundle(testData);"},{"lineNumber":261,"author":{"gitId":"-"},"content":" while (!isOperationSuccess \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":263,"author":{"gitId":"-"},"content":" print(\"Re-trying removeAndRestoreDataBundle\");"},{"lineNumber":264,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":265,"author":{"gitId":"-"},"content":" isOperationSuccess \u003d doRemoveAndRestoreDataBundle(testData);"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":" assertTrue(isOperationSuccess);"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":" protected abstract boolean doRemoveAndRestoreDataBundle(DataBundle testData);"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" protected SqlDataBundle removeAndRestoreSqlDataBundle(SqlDataBundle testData) {"},{"lineNumber":273,"author":{"gitId":"-"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":274,"author":{"gitId":"-"},"content":" SqlDataBundle dataBundle \u003d doRemoveAndRestoreSqlDataBundle(testData);"},{"lineNumber":275,"author":{"gitId":"-"},"content":" while (dataBundle \u003d\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":277,"author":{"gitId":"-"},"content":" print(\"Re-trying removeAndRestoreDataBundle\");"},{"lineNumber":278,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":279,"author":{"gitId":"-"},"content":" dataBundle \u003d doRemoveAndRestoreSqlDataBundle(testData);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":" assertNotNull(dataBundle);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" return dataBundle;"},{"lineNumber":283,"author":{"gitId":"-"},"content":" }"},{"lineNumber":284,"author":{"gitId":"-"},"content":""},{"lineNumber":285,"author":{"gitId":"-"},"content":" protected abstract SqlDataBundle doRemoveAndRestoreSqlDataBundle(SqlDataBundle testData);"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":" protected void putDocuments(DataBundle testData) {"},{"lineNumber":288,"author":{"gitId":"-"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":289,"author":{"gitId":"-"},"content":" boolean isOperationSuccess \u003d doPutDocuments(testData);"},{"lineNumber":290,"author":{"gitId":"-"},"content":" while (!isOperationSuccess \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":292,"author":{"gitId":"-"},"content":" print(\"Re-trying putDocuments\");"},{"lineNumber":293,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":294,"author":{"gitId":"-"},"content":" isOperationSuccess \u003d doPutDocuments(testData);"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":" assertTrue(isOperationSuccess);"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" protected abstract boolean doPutDocuments(DataBundle testData);"},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"domoberzin"},"content":" protected void putSqlDocuments(SqlDataBundle testData) {"},{"lineNumber":302,"author":{"gitId":"domoberzin"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":303,"author":{"gitId":"domoberzin"},"content":" boolean isOperationSuccess \u003d doPutDocumentsSql(testData);"},{"lineNumber":304,"author":{"gitId":"domoberzin"},"content":" while (!isOperationSuccess \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":305,"author":{"gitId":"domoberzin"},"content":" retryLimit--;"},{"lineNumber":306,"author":{"gitId":"domoberzin"},"content":" print(\"Re-trying putSqlDocuments\");"},{"lineNumber":307,"author":{"gitId":"domoberzin"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":308,"author":{"gitId":"domoberzin"},"content":" isOperationSuccess \u003d doPutDocumentsSql(testData);"},{"lineNumber":309,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":310,"author":{"gitId":"domoberzin"},"content":" assertTrue(isOperationSuccess);"},{"lineNumber":311,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":312,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":313,"author":{"gitId":"domoberzin"},"content":" protected abstract boolean doPutDocumentsSql(SqlDataBundle testData);"},{"lineNumber":314,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":13,"-":301}},{"path":"src/test/java/teammates/test/BaseTestCaseWithLocalDatabaseAccess.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.testcontainers.containers.PostgreSQLContainer;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterSuite;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeSuite;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import com.google.cloud.datastore.DatastoreOptions;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import com.google.cloud.datastore.testing.LocalDatastoreHelper;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.ObjectifyFactory;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.ObjectifyService;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.util.Closeable;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.DeadlineExtensionAttributes;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.logic.api.LogicExtension;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.logic.core.LogicStarter;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.sqllogic.api.Logic;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.storage.api.OfyHelper;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.search.AccountRequestSearchManager;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.search.InstructorSearchManager;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.storage.search.SearchManagerFactory;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.storage.search.StudentSearchManager;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Base class for all tests which require access to a locally run database."},{"lineNumber":44,"author":{"gitId":"-"},"content":" *"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * \u003cp\u003eAs all tests are run against a single DB instance and we use shared test data for most tests,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * the tests need to be run in a single thread to prevent test data contamination across different tests."},{"lineNumber":47,"author":{"gitId":"-"},"content":" */"},{"lineNumber":48,"author":{"gitId":"-"},"content":"@Test(singleThreaded \u003d true)"},{"lineNumber":49,"author":{"gitId":"-"},"content":"public abstract class BaseTestCaseWithLocalDatabaseAccess extends BaseTestCaseWithDatabaseAccess {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private static final PostgreSQLContainer\u003c?\u003e PGSQL \u003d new PostgreSQLContainer\u003c\u003e(\"postgres:15.1-alpine\");"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" private static final LocalDatastoreHelper LOCAL_DATASTORE_HELPER \u003d LocalDatastoreHelper.newBuilder()"},{"lineNumber":53,"author":{"gitId":"-"},"content":" .setConsistency(1.0)"},{"lineNumber":54,"author":{"gitId":"-"},"content":" .setPort(TestProperties.TEST_LOCALDATASTORE_PORT)"},{"lineNumber":55,"author":{"gitId":"-"},"content":" .setStoreOnDisk(false)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * sqlLogic for use in test cases."},{"lineNumber":59,"author":{"gitId":"-"},"content":" */"},{"lineNumber":60,"author":{"gitId":"-"},"content":" protected Logic sqlLogic;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" private final LogicExtension logic \u003d new LogicExtension();"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private Closeable closeable;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @BeforeSuite"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void setupDbLayer() throws Exception {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" PGSQL.start();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" HibernateUtil.buildSessionFactory(PGSQL.getJdbcUrl(), PGSQL.getUsername(), PGSQL.getPassword());"},{"lineNumber":68,"author":{"gitId":"-"},"content":" teammates.sqllogic.core.LogicStarter.initializeDependencies();"},{"lineNumber":69,"author":{"gitId":"-"},"content":" sqlLogic \u003d Logic.inst();"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.start();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" DatastoreOptions options \u003d LOCAL_DATASTORE_HELPER.getOptions();"},{"lineNumber":73,"author":{"gitId":"-"},"content":" ObjectifyService.init(new ObjectifyFactory("},{"lineNumber":74,"author":{"gitId":"-"},"content":" options.getService()"},{"lineNumber":75,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":76,"author":{"gitId":"-"},"content":" OfyHelper.registerEntityClasses();"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerAccountRequestSearchManager("},{"lineNumber":79,"author":{"gitId":"-"},"content":" new AccountRequestSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":80,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerInstructorSearchManager("},{"lineNumber":81,"author":{"gitId":"-"},"content":" new InstructorSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":82,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerStudentSearchManager("},{"lineNumber":83,"author":{"gitId":"-"},"content":" new StudentSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" teammates.storage.sqlsearch.SearchManagerFactory.registerAccountRequestSearchManager("},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.sqlsearch.AccountRequestSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" teammates.storage.sqlsearch.SearchManagerFactory.registerInstructorSearchManager("},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.sqlsearch.InstructorSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" teammates.storage.sqlsearch.SearchManagerFactory.registerStudentSearchManager("},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.sqlsearch.StudentSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" LogicStarter.initializeDependencies();"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public void setupObjectify() {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" closeable \u003d ObjectifyService.begin();"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public void tearDownObjectify() {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" closeable.close();"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void resetDbLayer() throws Exception {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" SearchManagerFactory.getAccountRequestSearchManager().resetCollections();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" SearchManagerFactory.getInstructorSearchManager().resetCollections();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" SearchManagerFactory.getStudentSearchManager().resetCollections();"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.reset();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" @AfterSuite"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public void tearDownLocalDatastoreHelper() throws Exception {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" PGSQL.close();"},{"lineNumber":117,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.stop();"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":121,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" HibernateUtil.beginTransaction();"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" @AfterMethod"},{"lineNumber":126,"author":{"gitId":"-"},"content":" protected void tearDown() {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" HibernateUtil.rollbackTransaction();"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":131,"author":{"gitId":"-"},"content":" protected AccountAttributes getAccount(AccountAttributes account) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return logic.getAccount(account.getGoogleId());"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":136,"author":{"gitId":"-"},"content":" protected CourseAttributes getCourse(CourseAttributes course) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return logic.getCourse(course.getId());"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":141,"author":{"gitId":"-"},"content":" protected FeedbackQuestionAttributes getFeedbackQuestion(FeedbackQuestionAttributes fq) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" return logic.getFeedbackQuestion(fq.getFeedbackSessionName(), fq.getCourseId(), fq.getQuestionNumber());"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":146,"author":{"gitId":"-"},"content":" protected FeedbackResponseCommentAttributes getFeedbackResponseComment(FeedbackResponseCommentAttributes frc) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" return logic.getFeedbackResponseComment(frc.getFeedbackResponseId(), frc.getCommentGiver(), frc.getCreatedAt());"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":151,"author":{"gitId":"-"},"content":" protected FeedbackResponseAttributes getFeedbackResponse(FeedbackResponseAttributes fr) {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return logic.getFeedbackResponse(fr.getFeedbackQuestionId(), fr.getGiver(), fr.getRecipient());"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":156,"author":{"gitId":"-"},"content":" protected FeedbackSessionAttributes getFeedbackSession(FeedbackSessionAttributes fs) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" return logic.getFeedbackSession(fs.getFeedbackSessionName(), fs.getCourseId());"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":161,"author":{"gitId":"-"},"content":" protected InstructorAttributes getInstructor(InstructorAttributes instructor) {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" return instructor.getGoogleId() \u003d\u003d null"},{"lineNumber":163,"author":{"gitId":"-"},"content":" ? logic.getInstructorForEmail(instructor.getCourseId(), instructor.getEmail())"},{"lineNumber":164,"author":{"gitId":"-"},"content":" : logic.getInstructorForGoogleId(instructor.getCourseId(), instructor.getGoogleId());"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":168,"author":{"gitId":"-"},"content":" protected StudentAttributes getStudent(StudentAttributes student) {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" return logic.getStudentForEmail(student.getCourse(), student.getEmail());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" }"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":173,"author":{"gitId":"-"},"content":" protected AccountRequestAttributes getAccountRequest(AccountRequestAttributes accountRequest) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" return logic.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":178,"author":{"gitId":"-"},"content":" protected DeadlineExtensionAttributes getDeadlineExtension(DeadlineExtensionAttributes deadlineExtension) {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" return logic.getDeadlineExtension("},{"lineNumber":180,"author":{"gitId":"-"},"content":" deadlineExtension.getCourseId(), deadlineExtension.getFeedbackSessionName(),"},{"lineNumber":181,"author":{"gitId":"-"},"content":" deadlineExtension.getUserEmail(), deadlineExtension.getIsInstructor());"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":185,"author":{"gitId":"-"},"content":" protected NotificationAttributes getNotification(NotificationAttributes notification) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return logic.getNotification(notification.getNotificationId());"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" protected void removeAndRestoreTypicalDataBundle() {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" DataBundle dataBundle \u003d getTypicalDataBundle();"},{"lineNumber":191,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(dataBundle);"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":195,"author":{"gitId":"-"},"content":" protected boolean doRemoveAndRestoreDataBundle(DataBundle dataBundle) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" logic.removeDataBundle(dataBundle);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" logic.persistDataBundle(dataBundle);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":202,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":207,"author":{"gitId":"-"},"content":" protected SqlDataBundle doRemoveAndRestoreSqlDataBundle(SqlDataBundle dataBundle) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" sqlLogic.removeDataBundle(dataBundle);"},{"lineNumber":210,"author":{"gitId":"-"},"content":" return sqlLogic.persistDataBundle(dataBundle);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":213,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":218,"author":{"gitId":"-"},"content":" protected boolean doPutDocuments(DataBundle dataBundle) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" logic.putDocuments(dataBundle);"},{"lineNumber":221,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":222,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":229,"author":{"gitId":"domoberzin"},"content":" protected boolean doPutDocumentsSql(SqlDataBundle dataBundle) {"},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":" sqlLogic.putDocuments(dataBundle);"},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":" return true;"},{"lineNumber":233,"author":{"gitId":"domoberzin"},"content":" } catch (Exception e) {"},{"lineNumber":234,"author":{"gitId":"domoberzin"},"content":" e.printStackTrace();"},{"lineNumber":235,"author":{"gitId":"domoberzin"},"content":" return false;"},{"lineNumber":236,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":237,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":238,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" protected Account getAccountFromDatabase(String googleId) {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" return sqlLogic.getAccountForGoogleId(googleId);"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" protected void clearObjectifyCache() {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" ObjectifyService.ofy().clear();"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":18,"-":229}},{"path":"src/test/java/teammates/test/BaseTestCaseWithSqlDatabaseAccess.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.BaseEntity;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.UsageStatistics;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.ui.output.ApiOutput;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.ui.output.CourseData;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.ui.output.DeadlineExtensionData;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackQuestionData;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponseCommentData;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponseData;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionData;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.ui.output.NotificationData;"},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.output.NumberOfEntitiesToGiveFeedbackToSetting;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.ui.output.UsageStatisticsData;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Base class for all test cases which are allowed to access the database."},{"lineNumber":35,"author":{"gitId":"-"},"content":" */"},{"lineNumber":36,"author":{"gitId":"-"},"content":"public abstract class BaseTestCaseWithSqlDatabaseAccess extends BaseTestCase {"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" private static final int VERIFICATION_RETRY_COUNT \u003d 5;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final int VERIFICATION_RETRY_DELAY_IN_MS \u003d 1000;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private static final int OPERATION_RETRY_COUNT \u003d 5;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private static final int OPERATION_RETRY_DELAY_IN_MS \u003d 1000;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Removes and restores the databundle, with retries."},{"lineNumber":45,"author":{"gitId":"-"},"content":" */"},{"lineNumber":46,"author":{"gitId":"-"},"content":" protected SqlDataBundle removeAndRestoreDataBundle(SqlDataBundle testData) {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" SqlDataBundle dataBundle \u003d doRemoveAndRestoreDataBundle(testData);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" while (dataBundle \u003d\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" print(\"Re-trying removeAndRestoreDataBundle\");"},{"lineNumber":52,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dataBundle \u003d doRemoveAndRestoreDataBundle(testData);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" assertNotNull(dataBundle);"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return dataBundle;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" protected abstract SqlDataBundle doRemoveAndRestoreDataBundle(SqlDataBundle testData);"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":62,"author":{"gitId":"-"},"content":" * Verifies that two entities are equal."},{"lineNumber":63,"author":{"gitId":"-"},"content":" */"},{"lineNumber":64,"author":{"gitId":"-"},"content":" protected void verifyEquals(BaseEntity expected, ApiOutput actual) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" if (expected instanceof FeedbackQuestion) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" FeedbackQuestion expectedQuestion \u003d (FeedbackQuestion) expected;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails expectedQuestionDetails \u003d expectedQuestion.getQuestionDetailsCopy();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" FeedbackQuestionData actualQuestion \u003d (FeedbackQuestionData) actual;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails actualQuestionDetails \u003d actualQuestion.getQuestionDetails();"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getQuestionNumber(), (Integer) actualQuestion.getQuestionNumber());"},{"lineNumber":71,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getDescription(), actualQuestion.getQuestionDescription());"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getGiverType(), actualQuestion.getGiverType());"},{"lineNumber":73,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getRecipientType(), actualQuestion.getRecipientType());"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" if (expectedQuestion.getNumOfEntitiesToGiveFeedbackTo() \u003d\u003d Const.MAX_POSSIBLE_RECIPIENTS) {"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" assertEquals(actualQuestion.getNumberOfEntitiesToGiveFeedbackToSetting(),"},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" NumberOfEntitiesToGiveFeedbackToSetting.UNLIMITED);"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" assertNull(actualQuestion.getCustomNumberOfEntitiesToGiveFeedbackTo());"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" assertEquals(actualQuestion.getNumberOfEntitiesToGiveFeedbackToSetting(),"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" NumberOfEntitiesToGiveFeedbackToSetting.CUSTOM);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getNumOfEntitiesToGiveFeedbackTo(),"},{"lineNumber":82,"author":{"gitId":"-"},"content":" actualQuestion.getCustomNumberOfEntitiesToGiveFeedbackTo());"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestionDetails.getJsonString(), actualQuestionDetails.getJsonString());"},{"lineNumber":85,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponse) {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" FeedbackResponse expectedFeedbackResponse \u003d (FeedbackResponse) expected;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" FeedbackResponseDetails expectedResponseDetails \u003d"},{"lineNumber":88,"author":{"gitId":"-"},"content":" expectedFeedbackResponse.getFeedbackResponseDetailsCopy();"},{"lineNumber":89,"author":{"gitId":"-"},"content":" FeedbackResponseData actualResponse \u003d (FeedbackResponseData) actual;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" FeedbackResponseDetails actualResponseDetails \u003d actualResponse.getResponseDetails();"},{"lineNumber":91,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponse.getGiver(), actualResponse.getGiverIdentifier());"},{"lineNumber":92,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponse.getRecipient(), actualResponse.getRecipientIdentifier());"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertEquals(expectedResponseDetails.getAnswerString(),"},{"lineNumber":94,"author":{"gitId":"-"},"content":" actualResponse.getResponseDetails().getAnswerString());"},{"lineNumber":95,"author":{"gitId":"-"},"content":" assertEquals(expectedResponseDetails.getQuestionType(),"},{"lineNumber":96,"author":{"gitId":"-"},"content":" actualResponse.getResponseDetails().getQuestionType());"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertEquals(expectedResponseDetails.getJsonString(), actualResponseDetails.getJsonString());"},{"lineNumber":98,"author":{"gitId":"-"},"content":" } else if (expected instanceof Account) {"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Account expectedAccount \u003d (Account) expected;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" AccountData actualAccount \u003d (AccountData) actual;"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(expectedAccount.getGoogleId(), actualAccount.getGoogleId());"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedAccount.getName(), actualAccount.getName());"},{"lineNumber":103,"author":{"gitId":"-"},"content":" assertEquals(expectedAccount.getEmail(), actualAccount.getEmail());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" } else if (expected instanceof Course) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Course expectedCourse \u003d (Course) expected;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" CourseData actualCourse \u003d (CourseData) actual;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertEquals(expectedCourse.getName(), actualCourse.getCourseName());"},{"lineNumber":108,"author":{"gitId":"-"},"content":" assertEquals(expectedCourse.getTimeZone(), actualCourse.getTimeZone());"},{"lineNumber":109,"author":{"gitId":"-"},"content":" assertEquals(expectedCourse.getInstitute(), actualCourse.getInstitute());"},{"lineNumber":110,"author":{"gitId":"-"},"content":" } else if (expected instanceof DeadlineExtension) {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" DeadlineExtension expectedDeadlineExtension \u003d (DeadlineExtension) expected;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" DeadlineExtensionData actualDeadlineExtension \u003d (DeadlineExtensionData) actual;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assertEquals(expectedDeadlineExtension.getEndTime().toEpochMilli(), actualDeadlineExtension.getEndTime());"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertEquals(expectedDeadlineExtension.isClosingSoonEmailSent(),"},{"lineNumber":115,"author":{"gitId":"-"},"content":" actualDeadlineExtension.getSentClosingEmail());"},{"lineNumber":116,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseComment) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" FeedbackResponseComment expectedFeedbackResponseComment \u003d (FeedbackResponseComment) expected;"},{"lineNumber":118,"author":{"gitId":"-"},"content":" FeedbackResponseCommentData actualComment \u003d (FeedbackResponseCommentData) actual;"},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponseComment.getGiver(), actualComment.getCommentGiver());"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponseComment.getCommentText(), actualComment.getCommentText());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponseComment.getIsVisibilityFollowingFeedbackQuestion(),"},{"lineNumber":122,"author":{"gitId":"-"},"content":" actualComment.isVisibilityFollowingFeedbackQuestion());"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponseComment.getLastEditorEmail(), actualComment.getLastEditorEmail());"},{"lineNumber":124,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackSession) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" FeedbackSession expectedFeedbackSession \u003d (FeedbackSession) expected;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" FeedbackSessionData actualFeedbackSession \u003d (FeedbackSessionData) actual;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getName(), actualFeedbackSession.getFeedbackSessionName());"},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getInstructions(), actualFeedbackSession.getInstructions());"},{"lineNumber":129,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getStartTime().toEpochMilli(),"},{"lineNumber":130,"author":{"gitId":"-"},"content":" actualFeedbackSession.getSubmissionStartTimestamp());"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getEndTime().toEpochMilli(),"},{"lineNumber":132,"author":{"gitId":"-"},"content":" actualFeedbackSession.getSubmissionEndTimestamp());"},{"lineNumber":133,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getSessionVisibleFromTime().toEpochMilli(),"},{"lineNumber":134,"author":{"gitId":"-"},"content":" actualFeedbackSession.getSessionVisibleFromTimestamp().longValue());"},{"lineNumber":135,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getResultsVisibleFromTime().toEpochMilli(),"},{"lineNumber":136,"author":{"gitId":"-"},"content":" actualFeedbackSession.getResultVisibleFromTimestamp().longValue());"},{"lineNumber":137,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getGracePeriod().toMinutes(),"},{"lineNumber":138,"author":{"gitId":"-"},"content":" actualFeedbackSession.getGracePeriod().longValue());"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.isClosingEmailEnabled(),"},{"lineNumber":140,"author":{"gitId":"-"},"content":" actualFeedbackSession.getIsClosingEmailEnabled());"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.isPublishedEmailEnabled(),"},{"lineNumber":142,"author":{"gitId":"-"},"content":" actualFeedbackSession.getIsPublishedEmailEnabled());"},{"lineNumber":143,"author":{"gitId":"-"},"content":" } else if (expected instanceof Instructor) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" Instructor expectedInstructor \u003d (Instructor) expected;"},{"lineNumber":145,"author":{"gitId":"-"},"content":" InstructorData actualInstructor \u003d (InstructorData) actual;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getCourseId(), actualInstructor.getCourseId());"},{"lineNumber":147,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getName(), actualInstructor.getName());"},{"lineNumber":148,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getEmail(), actualInstructor.getEmail());"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getRegKey(), actualInstructor.getKey());"},{"lineNumber":150,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.isDisplayedToStudents(), actualInstructor.getIsDisplayedToStudents());"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getDisplayName(), actualInstructor.getDisplayedToStudentsAs());"},{"lineNumber":152,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getRole(), actualInstructor.getRole());"},{"lineNumber":153,"author":{"gitId":"-"},"content":" } else if (expected instanceof Notification) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" Notification expectedNotification \u003d (Notification) expected;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" NotificationData actualNotification \u003d (NotificationData) actual;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getStartTime().toEpochMilli(), actualNotification.getStartTimestamp());"},{"lineNumber":157,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getEndTime().toEpochMilli(), actualNotification.getEndTimestamp());"},{"lineNumber":158,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getStyle(), actualNotification.getStyle());"},{"lineNumber":159,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getTargetUser(), actualNotification.getTargetUser());"},{"lineNumber":160,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getTitle(), actualNotification.getTitle());"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getMessage(), actualNotification.getMessage());"},{"lineNumber":162,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.isShown(), actualNotification.isShown());"},{"lineNumber":163,"author":{"gitId":"-"},"content":" } else if (expected instanceof Student) {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" Student expectedStudent \u003d (Student) expected;"},{"lineNumber":165,"author":{"gitId":"-"},"content":" StudentData actualStudent \u003d (StudentData) actual;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getCourseId(), actualStudent.getCourseId());"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getName(), actualStudent.getName());"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getEmail(), actualStudent.getEmail());"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getRegKey(), actualStudent.getKey());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getComments(), actualStudent.getComments());"},{"lineNumber":171,"author":{"gitId":"-"},"content":" // TODO: A student might not have a team or section."},{"lineNumber":172,"author":{"gitId":"-"},"content":" // assertEquals(expectedStudent.getTeamName(), actualStudent.getTeamName());"},{"lineNumber":173,"author":{"gitId":"-"},"content":" // assertEquals(expectedStudent.getSectionName(), actualStudent.getSectionName());"},{"lineNumber":174,"author":{"gitId":"-"},"content":" } else if (expected instanceof UsageStatistics) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" UsageStatistics expectedUsageStatistics \u003d (UsageStatistics) expected;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" UsageStatisticsData actualUsageStatistics \u003d (UsageStatisticsData) actual;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getStartTime().toEpochMilli(), actualUsageStatistics.getStartTime());"},{"lineNumber":178,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getTimePeriod(), actualUsageStatistics.getTimePeriod());"},{"lineNumber":179,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumResponses(), actualUsageStatistics.getNumResponses());"},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumCourses(), actualUsageStatistics.getNumCourses());"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumStudents(), actualUsageStatistics.getNumStudents());"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumInstructors(), actualUsageStatistics.getNumInstructors());"},{"lineNumber":183,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumAccountRequests(),"},{"lineNumber":184,"author":{"gitId":"-"},"content":" actualUsageStatistics.getNumAccountRequests());"},{"lineNumber":185,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumEmails(), actualUsageStatistics.getNumEmails());"},{"lineNumber":186,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumSubmissions(), actualUsageStatistics.getNumSubmissions());"},{"lineNumber":187,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" fail(\"Unknown entity\");"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":193,"author":{"gitId":"-"},"content":" * Verifies that the given entity is present in the database."},{"lineNumber":194,"author":{"gitId":"-"},"content":" */"},{"lineNumber":195,"author":{"gitId":"-"},"content":" protected void verifyPresentInDatabase(BaseEntity expected) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" int retryLimit \u003d VERIFICATION_RETRY_COUNT;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" ApiOutput actual \u003d getEntity(expected);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" while (actual \u003d\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(VERIFICATION_RETRY_DELAY_IN_MS);"},{"lineNumber":201,"author":{"gitId":"-"},"content":" actual \u003d getEntity(expected);"},{"lineNumber":202,"author":{"gitId":"-"},"content":" }"},{"lineNumber":203,"author":{"gitId":"-"},"content":" verifyEquals(expected, actual);"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * Verifies that the given entity is absent in the database."},{"lineNumber":208,"author":{"gitId":"-"},"content":" */"},{"lineNumber":209,"author":{"gitId":"-"},"content":" protected void verifyAbsentInDatabase(BaseEntity expected) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" int retryLimit \u003d VERIFICATION_RETRY_COUNT;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" ApiOutput actual \u003d getEntity(expected);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" while (actual !\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":214,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(VERIFICATION_RETRY_DELAY_IN_MS);"},{"lineNumber":215,"author":{"gitId":"-"},"content":" actual \u003d getEntity(expected);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":" assertNull(actual);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" private ApiOutput getEntity(BaseEntity entity) {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (entity instanceof Student) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" return getStudent((Student) entity);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" } else if (entity instanceof FeedbackQuestion) {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return getFeedbackQuestion((FeedbackQuestion) entity);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" } else if (entity instanceof FeedbackResponse) {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" return getFeedbackResponse((FeedbackResponse) entity);"},{"lineNumber":227,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown entity type\");"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" protected abstract FeedbackQuestionData getFeedbackQuestion(FeedbackQuestion fq);"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" protected abstract FeedbackResponseData getFeedbackResponse(FeedbackResponse fq);"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" protected abstract StudentData getStudent(Student student);"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":10,"-":228}},{"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/notification-banner/notification-banner.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"\u003cdiv id\u003d\"notification-banner\" class\u003d\"banner\" [ngClass]\u003d\"notifications[0].style | notificationStyleClass\" *ngIf\u003d\"isShown \u0026\u0026 notifications.length \u003e 0\" [attr.data-testid]\u003d\"notifications[0].notificationId\" @collapseAnim\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-close-notif\" type\u003d\"button\" class\u003d\"btn-close\" aria-label\u003d\"Close\" (click)\u003d\"closeNotification()\"\u003e\u003c/button\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003ch5\u003e{{ notifications[0].title }}\u003c/h5\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"banner-text\" [innerHTML]\u003d\"notifications[0].message\"\u003e\u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"d-flex flex-row-reverse mt-3 me-2\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-mark-as-read\" type\u003d\"button\" [ngClass]\u003d\"getButtonClass(notifications[0])\" (click)\u003d\"markNotificationAsRead(notifications[0])\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" Mark as Read"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"yuanxi1":1,"-":9}},{"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}}] +[{"path":"docs/_markbind/layouts/default.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"{% include \"_markbind/layouts/header.md\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\" class\u003d\"fixed-header-padding\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"* About TEAMMATES :expanded:"},{"lineNumber":9,"author":{"gitId":"-"},"content":" * [Introduction]({{ baseUrl }}/index.html)"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * [Overview]({{ baseUrl }}/overview.html)"},{"lineNumber":11,"author":{"gitId":"-"},"content":"* Getting Started :expanded:"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/setting-up.html)"},{"lineNumber":13,"author":{"gitId":"-"},"content":"* [Contributing]({{ baseUrl }}/contributing-doc.html)"},{"lineNumber":14,"author":{"gitId":"-"},"content":"* Workflow :expanded:"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * [Issues]({{ baseUrl }}/issues.html)"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * [Process]({{ baseUrl }}/process.html)"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * [Development]({{ baseUrl }}/development.html)"},{"lineNumber":18,"author":{"gitId":"-"},"content":"* [Design]({{ baseUrl }}/design.html)"},{"lineNumber":19,"author":{"gitId":"-"},"content":"* Best Practices :expanded:"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * [Coding]({{ baseUrl }}/best-practices/coding.html)"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * [Testing]({{ baseUrl }}/best-practices/testing.html)"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * [Data Migration]({{ baseUrl }}/best-practices/data-migration.html)"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * [UI Design]({{ baseUrl }}/best-practices/ui-design.html)"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * [Accessibility]({{ baseUrl }}/best-practices/accessibility.html)"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * [Mobile-Friendliness]({{ baseUrl }}/best-practices/mobile-friendliness.html)"},{"lineNumber":26,"author":{"gitId":"-"},"content":"* How-to :expanded:"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * [Captcha]({{ baseUrl }}/captcha.html)"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * [Documentation]({{ baseUrl }}/documentation.html)"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * [Emails]({{ baseUrl }}/emails.html)"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * [Unit Testing]({{ baseUrl }}/unit-testing.html)"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [End-to-End Testing]({{ baseUrl }}/e2e-testing.html)"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Performance Testing]({{ baseUrl }}/performance-testing.html)"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [Accessibility Testing]({{ baseUrl }}/axe-testing.html)"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Search]({{ baseUrl }}/search.html)"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * [Snapshot Testing]({{ baseUrl }}/snapshot-testing.html)"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Static Analysis]({{ baseUrl }}/static-analysis.html)"},{"lineNumber":37,"author":{"gitId":"-"},"content":"* [Troubleshooting Guide]({{ baseUrl }}/troubleshooting-guide.html)"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* [Glossary]({{ baseUrl }}/glossary.html)"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\" class\u003d\"fixed-header-padding\"\u003e"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" \u003cbreadcrumb/\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" {{ content }}"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\" class\u003d\"fixed-header-padding\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":"{% include \"_markbind/layouts/footer.md\" %}"}],"authorContributionMap":{"jingting1412":3,"-":50}},{"path":"docs/_markbind/layouts/footer.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cfooter\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"\u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"text-center\"\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" \u003csmall\u003e[Generated by {{MarkBind}} on {{timestamp}}]\u003c/small\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"\u003c/footer\u003e"}],"authorContributionMap":{"jingting1412":6}},{"path":"docs/_markbind/layouts/header.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003chead-bottom\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{ baseUrl }}/stylesheets/main.css\"\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003c/head-bottom\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003cheader sticky\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cnavbar type\u003d\"inverse\"\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{ baseUrl }}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"{{ baseUrl }}/images/teammateslogo.png\" width\u003d\"150\" alt\u003d\"Logo\" caption\u003d\"\"/\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cspan style\u003d\"font-style:italic;font-size:small\"\u003e[dev docs]\u003c/span\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003c/a\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{ baseUrl }}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{ baseUrl }}/contributing-doc.html\" class\u003d\"nav-link\"\u003eContributing\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"https://teammatesv4.appspot.com/\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eProduct Website \u003cmd\u003e:glyphicon-share-alt:\u003c/md\u003e\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/TEAMMATES/teammates\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003c/form\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003c/li\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003c/navbar\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":"\u003c/header\u003e"}],"authorContributionMap":{"jingting1412":21}},{"path":"docs/design.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" title: \"Design\""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"# Design"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"## Architecture"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/highlevelArchitecture.puml\"/\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"TEAMMATES is a Web application that runs on Google App Engine (GAE). Given above is an overview of the main components."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"- **UI (Browser)**: The UI seen by users consists of Web pages containing HTML, CSS (for styling) and JavaScript (for client-side interactions such as sorting, input validation, etc.). This UI is a single HTML page generated by Angular framework. The initial page request is sent to the server over HTTP, and requests for data are sent asynchronously with AJAX."},{"lineNumber":14,"author":{"gitId":"-"},"content":"- **UI (Server)**: The entry point for the application back end logic is designed as a REST-ful controller."},{"lineNumber":15,"author":{"gitId":"-"},"content":"- **Logic**: The main logic of the application is in POJOs (Plain Old Java Objects)."},{"lineNumber":16,"author":{"gitId":"-"},"content":"- **Storage**: The storage layer of the application uses the persistence framework provided by **Google Cloud Datastore**, a NoSQL database."},{"lineNumber":17,"author":{"gitId":"-"},"content":"- **Test Driver**: TEAMMATES makes heavy use of automated regression testing. Test data is transmitted using JSON format."},{"lineNumber":18,"author":{"gitId":"-"},"content":" - `TestNG` is used for Java testing (all levels) and `Jest` for JavaScript unit-testing."},{"lineNumber":19,"author":{"gitId":"-"},"content":"- **E2E**: The E2E (end-to-end) component is used to interact with the application as a whole with Web browsers. Its primary function is for E2E tests."},{"lineNumber":20,"author":{"gitId":"-"},"content":" - `Selenium (Java)` is used to automate E2E testing with actual Web browsers."},{"lineNumber":21,"author":{"gitId":"-"},"content":"- **Client**: The Client component can connect to the back end directly without using a Web browser. It is used for administrative purposes, e.g. migrating data to a new schema."},{"lineNumber":22,"author":{"gitId":"-"},"content":"- **Common**: The Common component contains utility code (data transfer objects, helper classes, etc.) used across the application."},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"The diagram below shows how the code in each component is organized into packages and the dependencies between them."},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/packageDiagram.puml\"/\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"Notes:"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"- `[logic] - [ui::website] - [ui::webapi]` represent an application of `Model-View-Controller` pattern."},{"lineNumber":31,"author":{"gitId":"-"},"content":" - `ui::website` is not a real package; it is a conceptual package representing the front-end of the application."},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"## UI Component"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"The diagram below shows the object structure of the UI component."},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/UiComponent.puml\"/\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"Notes:"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"- `ui::website` is not a Java package. It is written in Angular framework and consists of HTML, SCSS, and TypeScript files. The framework will build those files into HTML, CSS and JavaScript files ready to be used by standard Web browsers."},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"The UI component is the first stop for 99% of all requests that are received by the application."},{"lineNumber":44,"author":{"gitId":"-"},"content":"Such a request will go through the following steps:"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"1. Request received by the GAE server."},{"lineNumber":47,"author":{"gitId":"-"},"content":"1. Custom filters are applied according to the order specified in `web.xml`, e.g. `OriginCheckFilter`."},{"lineNumber":48,"author":{"gitId":"-"},"content":"1. Request forwarded to a `*Servlet` object as specified in `web.xml` for further processing, depending on the type of request."},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"There are two general types of requests: user-invoked requests and automated (GAE server-invoked) requests, which are processed differently."},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"### User-invoked requests"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"User-invoked requests are all requests made by the users of the application, typically from the Web browser (i.e. by navigating to a particular URL of the application)."},{"lineNumber":55,"author":{"gitId":"-"},"content":"The request will be processed as follows:"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/UiWorkflow.puml\"/\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"The initial request for the web page will be processed as follows:"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Request forwarded to `WebPageServlet`."},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. `WebPageServlet` returns the built single web page (`index.html`)."},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. The browser will render the page and execute the page scripts, most of the time requiring AJAX requests to the server."},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":"Subsequent AJAX requests sent to the server will be processed as follows:"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":"1. Request forwarded to the `WebApiServlet`."},{"lineNumber":68,"author":{"gitId":"-"},"content":"1. `WebApiServlet` uses the `ActionFactory` to generate the matching `Action` object, e.g. `GetFeedbackSessionsAction`."},{"lineNumber":69,"author":{"gitId":"-"},"content":"1. `WebApiServlet` executes the action."},{"lineNumber":70,"author":{"gitId":"-"},"content":" 1. The `Action` object checks the access rights of the user. If the action is allowed, it will be performed, interacting with the `Logic` component as necessary."},{"lineNumber":71,"author":{"gitId":"-"},"content":" 1. The `Action` packages and processes the result into an `ActionResult` object. The most common format is `JsonResult` (requests for obtaining data or processing existing data) and other formats can be defined as necessary."},{"lineNumber":72,"author":{"gitId":"-"},"content":"1. `WebApiServlet` sends the result back to the browser which will then process it on the front-end."},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":"Requests for static asset files (e.g. CSS, JS files, images) are served directly without going through `web.xml` configuration at all."},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"The Web API is protected by two layers of access control check:"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"- Origin check: This mitigates [CSRF attack](https://owasp.org/www-community/attacks/csrf)."},{"lineNumber":79,"author":{"gitId":"-"},"content":"- Authentication and authorization check: This checks if the logged in user (or lack thereof) has sufficient privileges to trigger the API\u0027s actions."},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"Special keys (`csrf key` and `backdoor key`) can be used to bypass each of the checks, typically for testing purpose. Those keys are strings known only to the person who deployed the application (typically, the administrator)."},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"### Automated requests"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":"Automated requests are all requests sent automatically by the GAE server during specific periods of time."},{"lineNumber":86,"author":{"gitId":"-"},"content":"This type of request will be processed as follows:"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":"1. The source of the request will be checked for administrator privilege. If this privilege is absent (e.g. non-administrator users trying to invoke the automated actions), the request will be dropped and a `403 Forbidden` status will be returned."},{"lineNumber":89,"author":{"gitId":"-"},"content":" - Requests generated by the GAE server are equipped with this privilege."},{"lineNumber":90,"author":{"gitId":"-"},"content":" - Administrators can manually invoke these requests; this is particularly useful in testing the actions associated with those requests."},{"lineNumber":91,"author":{"gitId":"-"},"content":"1. Request forwarded to the `WebApiServlet` and subsequent actions are the same as user-invoked AJAX requests."},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":"GAE server sends such automated requests through two different configurations:"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":"- Cron jobs: These are jobs that are automatically scheduled for a specified period of time, e.g. scheduling feedback session opening reminders. It is configured in `cron.yaml`."},{"lineNumber":96,"author":{"gitId":"-"},"content":"- Task queue workers: These are hybrids of user-invoked and GAE-invoked in that they are queued by users (i.e. users request for the tasks to be added to queue), but executed by GAE (i.e. GAE determines when and which tasks in the queue are executed at any point of time). This is typically used for tasks that may take a long time to finish and might be blocking user\u0027s interaction. It is configured in `queue.yaml` as well as the `TaskQueue` nested class of the [Const](https://github.com/TEAMMATES/teammates/blob/master/src/main/java/teammates/common/util/Const.java) class."},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"### Template Method pattern"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":"- Since the high-level workflow of processing a request is same for any request (differing by the two request types only), we use the [Template Method pattern](http://en.wikipedia.org/wiki/Template_method_pattern) to abstract the process flow into the `Action` classes."},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"### Policies"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"On designing API endpoints (for AJAX requests):"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"- Design endpoints for resources. For example, `FeedbackSession` is a resource. The corresponding endpoint is `/session`. We use `GET`, `POST`, `PUT`, `DELETE` HTTP methods to get, create, update and delete the resource respectively."},{"lineNumber":107,"author":{"gitId":"-"},"content":"- Prefer multiple REST calls over single RPC (Remote Procedure Call) calls."},{"lineNumber":108,"author":{"gitId":"-"},"content":" - Reason 1: REST paradigm promotes reuse of many business logic and is not dependent of the structure of the requesting web page (or any other type of requesting agent)."},{"lineNumber":109,"author":{"gitId":"-"},"content":" - Reason 2: Multiple REST calls can be parallelized which will improve performance."},{"lineNumber":110,"author":{"gitId":"-"},"content":"- Separate access control logic and execution logic completely."},{"lineNumber":111,"author":{"gitId":"-"},"content":" - In the case that an endpoint serves multiple purposes, we use `Intent` to distinguish the intent for the request. For example, instructors can access `/session` with intent `INSTRUCTOR_SUBMISSION` or `FULL_DETAIL`. Some `Intent` will naturally require stricter access rights."},{"lineNumber":112,"author":{"gitId":"-"},"content":"- Prefer HTTP request body over URL parameters (key-value) to contain data for `POST` and `PUT` requests."},{"lineNumber":113,"author":{"gitId":"-"},"content":" - Reason 1: The URL parameters are used to identify a specific resource for an endpoint, not what should be done to them."},{"lineNumber":114,"author":{"gitId":"-"},"content":" - Reason 2: Request body is not limited to key-value format which allows proper design and validation."},{"lineNumber":115,"author":{"gitId":"-"},"content":" - Data Transfer Objects (DTOs) which represent different API requests and responses are defined in `request` and `output` package respectively."},{"lineNumber":116,"author":{"gitId":"-"},"content":"- Preprocess data sent/received by the server to hide complexities. For example, timestamp is passed as UNIX epoch milliseconds in the output while it is represented as `Instant` in the back-end."},{"lineNumber":117,"author":{"gitId":"-"},"content":" - Some constructors in the `output` package contain logic to hide \"hacks\" in the backend."},{"lineNumber":118,"author":{"gitId":"-"},"content":" - Some getters/setters in the `request` package contain logic to cater the conventions in the backend."},{"lineNumber":119,"author":{"gitId":"-"},"content":" - Some fields are required be hidden in the API response, mostly for data privacy purposes. Whenever required, there should be methods in the request output objects catered for this."},{"lineNumber":120,"author":{"gitId":"-"},"content":"- API endpoints should not be concerned with how data is presented."},{"lineNumber":121,"author":{"gitId":"-"},"content":" - Case study 1: some endpoint will pass timezone information via two information: timezone ID and UNIX epoch milliseconds. It is up to the front-end on how to make use of those two pieces of information."},{"lineNumber":122,"author":{"gitId":"-"},"content":" - Case study 2: CSV file for session result or student list is just a different way of presenting the same information in the web page. Due to this, when downloading CSV, the web page will request the same information as that used when displaying in web page and do the necessary conversion to CSV."},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":"On data exchange between front-end and back-end:"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"- Back-end is the single source of truth for all data format and the code used by front-end is generated from this."},{"lineNumber":127,"author":{"gitId":"-"},"content":" - Some important constants (including API endpoints information) are synced to `api-const.ts`."},{"lineNumber":128,"author":{"gitId":"-"},"content":" - The schemas of the DTOs defined in `output` and `request` packages are synced to `api-output.ts` and `api-request.ts` in the frontend."},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"On handling exceptions:"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":"- The UI component is responsible for catching all exceptions and transforming them to properly formed, user-friendly output format. It includes the status message shown to user as well as the HTTP status code."},{"lineNumber":133,"author":{"gitId":"-"},"content":" - As a consequence, the UI component cannot throw any exception, because there is no layer which will catch those exceptions if it does."},{"lineNumber":134,"author":{"gitId":"-"},"content":"- In order to streamline the process, custom runtime exception classes which correspond to different HTTP status codes are used. For example, there is `EntityNotFoundException` which corresponds to HTTP 404, `UnauthorizedAccessException` which corresponds to HTTP 403, etc."},{"lineNumber":135,"author":{"gitId":"-"},"content":" - It is highly preferred to throw these custom exceptions instead of setting the HTTP status manually in the action class, as the API layer has been configured to automatically log the exception and assign the correct status code to the HTTP response."},{"lineNumber":136,"author":{"gitId":"-"},"content":"- All `4XX` responses must be accompanied with logging at `warning` level or above. `5XX` responses must be accompanied with `severe` level logging."},{"lineNumber":137,"author":{"gitId":"-"},"content":" - `502` (Bad Gateway) responses may skip the `severe` level logging if the upstream components (where the error happened) already did the `severe` level logging."},{"lineNumber":138,"author":{"gitId":"-"},"content":"- We use the HTTP status codes as close to their standard definition in [RFC7231](https://tools.ietf.org/html/rfc7231) as possible."},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":"## Logic Component"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"The `Logic` component handles the business logic of TEAMMATES. In particular, it is responsible for:"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":"- Managing relationships between entities, e.g. cascade logic for create/update/delete."},{"lineNumber":145,"author":{"gitId":"-"},"content":"- Managing transactions, e.g. ensuring atomicity of a transaction."},{"lineNumber":146,"author":{"gitId":"-"},"content":"- Sanitizing input values received from the UI component."},{"lineNumber":147,"author":{"gitId":"-"},"content":"- Connecting to GCP or third-party services, e.g. for adding tasks to the task queue and for sending emails with third-party providers."},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/LogicComponent.puml\"/\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"- **`logic.api`**: Provides the API of the component to be accessed by the UI."},{"lineNumber":154,"author":{"gitId":"-"},"content":"- **`logic.core`**: Contains the core logic of the system."},{"lineNumber":155,"author":{"gitId":"-"},"content":"- **`logic.external`**: Holds the logic of external services such as task queue service."},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":"### Logic API"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"Represented by these classes:"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"- `Logic`: A [Facade class](http://en.wikipedia.org/wiki/Facade_pattern) which connects to the several `*Logic` classes to handle the logic related to various types of data and to access data from the `Storage` component."},{"lineNumber":162,"author":{"gitId":"-"},"content":"- `UserProvision`: Retrieves user information (based on request cookies)."},{"lineNumber":163,"author":{"gitId":"-"},"content":"- `EmailGenerator`: Generates emails to be sent."},{"lineNumber":164,"author":{"gitId":"-"},"content":"- `EmailSender`: Sends email with the provider chosen based on the build configuration."},{"lineNumber":165,"author":{"gitId":"-"},"content":"- `TaskQueuer`: Adds tasks to the task queue, i.e. to be executed at a later time."},{"lineNumber":166,"author":{"gitId":"-"},"content":"- `LogsProcessor`: For more advanced usage of logging that cannot be captured by the standard logger class."},{"lineNumber":167,"author":{"gitId":"-"},"content":"- `RecaptchaVerifier`: For verification of the reCAPTCHA token."},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":"Many classes in this layer make use of proxy pattern, i.e. they only connect to production services such as Google Cloud Tasks in the staging/production server."},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":"### Policies"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"Access control:"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":"+ Although this component provides methods that are relevant to access control (e.g. providing user information), the access control check itself does not happen in this component. The UI is expected to check access control (using `GateKeeper` class) before calling a method in the logic component."},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":"API for creating entities:"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":"+ Null parameters: Causes an assertion failure."},{"lineNumber":180,"author":{"gitId":"-"},"content":"+ Invalid parameters: Throws `InvalidParametersException`."},{"lineNumber":181,"author":{"gitId":"-"},"content":"+ Entity already exists: Throws `EntityAlreadyExistsException` (escalated from Storage level)."},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":"API for retrieving entities:"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":"+ Attempting to retrieve objects using `null` parameters: Causes an assertion failure."},{"lineNumber":186,"author":{"gitId":"-"},"content":"+ Entity not found:"},{"lineNumber":187,"author":{"gitId":"-"},"content":" - Returns `null` if the target entity not found. This way, read operations can be used easily for checking the existence of an entity."},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":"API for updating entities:"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"+ Update is done using `*UpdateOptions` inside every `*Attributes`. The `UpdateOptions` will specify what is used to identify the entity to update and what will be updated."},{"lineNumber":192,"author":{"gitId":"-"},"content":"+ Entity not found: Throws `EntityDoesNotExistException`."},{"lineNumber":193,"author":{"gitId":"-"},"content":"+ Invalid parameters: Throws `InvalidParametersException`."},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"API for deleting entities:"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":"+ FailDeleteSilentlyPolicy: In general, delete operation do not throw exceptions if the target entity does not exist. This is because if it does not exist, it is as good as deleted."},{"lineNumber":198,"author":{"gitId":"-"},"content":"+ Cascade policy: When a parent entity is deleted, entities that have referential integrity with the deleted entity should also be deleted."},{"lineNumber":199,"author":{"gitId":"-"},"content":" Refer to the API for the cascade logic."},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"## Storage Component"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":"The `Storage` component performs CRUD (Create, Read, Update, Delete) operations on data entities individually."},{"lineNumber":204,"author":{"gitId":"-"},"content":"It contains minimal logic beyond what is directly relevant to CRUD operations."},{"lineNumber":205,"author":{"gitId":"-"},"content":"In particular, it is reponsible for:"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":"- Validating data inside entities before creating/updating them, to ensure they are in a valid state."},{"lineNumber":208,"author":{"gitId":"-"},"content":"- Hiding the complexities of the database from the `Logic` component."},{"lineNumber":209,"author":{"gitId":"-"},"content":"- Hiding the persistable objects: Classes in the `storage::entity` package are not visible outside this component to hide information specific to data persistence."},{"lineNumber":210,"author":{"gitId":"-"},"content":" - Instead, a corresponding non-persistent [data transfer object](http://en.wikipedia.org/wiki/Data_transfer_object) named `*Attributes` (e.g., `CourseAttributes` is the data transfer object for `Course` entities) object is returned. These datatransfer classes are in `common::datatransfer` package, to be explained later."},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":"The `Storage` component does not perform any cascade delete/create operations. Cascade logic is handled by the `Logic` component."},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/StorageComponent.puml\"/\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"+ **`storage.api`**: Provides the API of the component to be accessed by the logic component."},{"lineNumber":219,"author":{"gitId":"-"},"content":"+ **`storage.entity`**: Classes that represent persistable entities."},{"lineNumber":220,"author":{"gitId":"-"},"content":"+ **`storage.search`**: Classes for dealing with searching and indexing."},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\"/\u003e"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"Note that the navigability of the association links between entity objects appear to be in the reverse direction of what we see in a normal OOP design."},{"lineNumber":225,"author":{"gitId":"-"},"content":"This is because we want to keep the data schema flexible so that new entity types can be added later with minimal modifications to existing elements."},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"### Storage API"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"Represented by the `*Db` classes. These classes act as the bridge to the database."},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"### Policies"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":"Add and Delete operations try to wait until data is persisted in the database before returning. This is not enough to compensate for eventual consistency involving multiple servers in the Google Cloud Datastore environment. However, it is expected to avoid test failures caused by eventual consistency in dev server and reduce such problems in the live server."},{"lineNumber":234,"author":{"gitId":"-"},"content":"Note: \u0027Eventual consistency\u0027 here means it takes some time for a database operation to propagate across all replicas of the Google Cloud Datastore. As a result, the data may be in an inconsistent states for short periods of time although things should become consistent \u0027eventually\u0027. For example, an object we deleted may appear to still exist for a short while."},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":"Implementation of Transaction Control has been minimized due to limitations of Google Cloud Datastore environment and the nature of our data schema."},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":"API for creating:"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":"+ Attempt to create an entity that already exists: Throws `EntityAlreadyExistsException`."},{"lineNumber":241,"author":{"gitId":"-"},"content":"+ Attempt to create an entity with invalid data: Throws `InvalidParametersException`."},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":"API for retrieving:"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":"+ Attempt to retrieve an entity that does not exist: Returns `null`."},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":"API for updating:"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":"+ Attempt to update an entity that does not exist: Throws `EntityDoesNotExistException`."},{"lineNumber":250,"author":{"gitId":"-"},"content":"+ Attempt to update an entity with invalid data: Throws `InvalidParametersException`."},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":"API for deleting:"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":"+ Attempt to delete an entity that does not exist: Fails silently."},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":"## Common Component"},{"lineNumber":257,"author":{"gitId":"-"},"content":""},{"lineNumber":258,"author":{"gitId":"-"},"content":"The Common component contains common utilities used across TEAMMATES."},{"lineNumber":259,"author":{"gitId":"-"},"content":""},{"lineNumber":260,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/CommonComponent.puml\"/\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":263,"author":{"gitId":"-"},"content":""},{"lineNumber":264,"author":{"gitId":"-"},"content":"- **`common.util`**: Contains utility classes."},{"lineNumber":265,"author":{"gitId":"-"},"content":"- **`common.exceptions`**: Contains custom exceptions."},{"lineNumber":266,"author":{"gitId":"-"},"content":"- **`common.datatransfer`**: Contains data transfer objects."},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":"`common.datatransfer` package contains lightweight \"data transfer object\" classes for transferring data among components. They can be combined in various ways to transfer structured data between components. Given below are three examples."},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/DataTransferClasses.puml\"/\u003e"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":"1. `Test Driver` can use the `DataBundle` in this manner to send an arbitrary number of objects to be persisted in the database."},{"lineNumber":273,"author":{"gitId":"-"},"content":"1. This structure can be used to transfer search results of a student or instructor or response comments."},{"lineNumber":274,"author":{"gitId":"-"},"content":"1. This structure can be used to send results of a feedback session (e.g., when showing a feedback session report to an instructor)."},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":"Some of these classes are methodless (and thus more of a data structure rather than a class); these classes use public variables for data for easy access."},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":"## Test Driver Component"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":"This component automates the testing of TEAMMATES."},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/TestDriverComponent.puml\"/\u003e"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":"The test driver component\u0027s package structure follows the corresponding production package structure\u0027s exactly,"},{"lineNumber":285,"author":{"gitId":"-"},"content":"e.g. `teammates.logic.core.*` will contain the test cases for the production code inside `teammates.logic.core` package."},{"lineNumber":286,"author":{"gitId":"-"},"content":"In the same spirit, for the front end, each `*.component.ts` will have the corresponding `*.component.spec.ts` in the same folder (similarly for `*.service.ts`, `*.pipe.ts`, etc.)."},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":"The test driver component introduces the following additional packages:"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":"- **`architecture`**: Contains test cases used by one of the lint tools to check for architectural integrity."},{"lineNumber":291,"author":{"gitId":"-"},"content":"- **`test`**: Contains infrastructure and helpers needed for running the tests. Also contains the test cases for the said infrastructure/helpers."},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":"Notes:"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":"- Component tests: Some of these are pure unit tests (i.e. testing one component in isolation) while others are integration tests that test units as well as integration of units with each other."},{"lineNumber":296,"author":{"gitId":"-"},"content":"- Front-end files (particularly TypeScript) are tested separately with `Jest`. The test cases are found in `*.spec.ts` files."},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":"This is how TEAMMATES testing maps to standard types of testing."},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":"```"},{"lineNumber":301,"author":{"gitId":"-"},"content":"Normal"},{"lineNumber":302,"author":{"gitId":"-"},"content":"|-----acceptance tests-----|-------------------system tests-------------------|-----integration tests-----|-----unit tests-----|"},{"lineNumber":303,"author":{"gitId":"-"},"content":"|--------manual testing--------|------automated E2E tests------|-------------------automated component tests-------------------|"},{"lineNumber":304,"author":{"gitId":"-"},"content":"TEAMMATES"},{"lineNumber":305,"author":{"gitId":"-"},"content":"```"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":"## E2E Component"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":"The E2E component has no knowledge of the internal workings of the application and can only interact either with Web browser (as a whole application) or REST API calls (for the back-end logic). Its primary function is for E2E tests."},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/E2EComponent.puml\"/\u003e"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"- **`e2e.util`**: Contains helpers needed for running E2E tests. Also contains the test cases for the said infrastructure/helpers."},{"lineNumber":316,"author":{"gitId":"-"},"content":"- **`e2e.pageobjects`**: Contains abstractions of the pages as they appear on a Browser (i.e. SUTs)."},{"lineNumber":317,"author":{"gitId":"-"},"content":"- **`e2e.cases`**: Contains system test cases for testing the application as a whole."},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":"## Client Component"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":"The Client component contains scripts that can connect directly to the application back-end for administrative purposes, such as migrating data to a new schema and calculating statistics."},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"jingting1412"},"content":"\u003cpuml src\u003d\"diagrams/ClientComponent.puml\"/\u003e"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":"Package overview:"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":"- **`client.util`**: Contains helpers needed for client scripts."},{"lineNumber":328,"author":{"gitId":"-"},"content":"- **`client.connector`**: Classes needed to connect to the back end directly."},{"lineNumber":329,"author":{"gitId":"-"},"content":"- **`client.scripts`**: Scripts that deal with the back end data for administrative purposes."}],"authorContributionMap":{"jingting1412":12,"-":317}},{"path":"src/e2e/java/teammates/e2e/cases/AdminNotificationsPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.LocalDate;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.time.LocalDateTime;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.ZoneId;"},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import java.util.UUID;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.AdminNotificationsPage;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.NotificationData;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#ADMIN_NOTIFICATIONS_PAGE}."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class AdminNotificationsPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" private Notification[] notifications \u003d new Notification[2];"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":26,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/AdminNotificationsPageE2ETest.json\");"},{"lineNumber":28,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" sqlTestData \u003d removeAndRestoreSqlDataBundle("},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" loadSqlDataBundle(\"/AdminNotificationsPageE2ETest_SqlEntities.json\"));"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" notifications[0] \u003d sqlTestData.notifications.get(\"notification1\");"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" notifications[1] \u003d sqlTestData.notifications.get(\"notification2\");"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" ______TS(\"verify loaded data\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":" AppUrl url \u003d createFrontendUrl(Const.WebPageURIs.ADMIN_NOTIFICATIONS_PAGE);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" AdminNotificationsPage notificationsPage \u003d loginAdminToPage(url, AdminNotificationsPage.class);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // Only validates that the notifications are present in the notifications table instead of checking every row"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // This is because the page will display all notifications in the database, which is not predictable"},{"lineNumber":44,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(notifications[0]);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(notifications[1]);"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" NotificationData notif \u003d BACKDOOR.getNotificationData(notifications[0].getId().toString());"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getNotificationId(), notifications[0].getId().toString());"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getMessage(), notifications[0].getMessage());"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getTitle(), notifications[0].getTitle());"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" notif \u003d BACKDOOR.getNotificationData(notifications[1].getId().toString());"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getNotificationId(), notifications[1].getId().toString());"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getMessage(), notifications[1].getMessage());"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getTitle(), notifications[1].getTitle());"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" ______TS(\"add new notification\");"},{"lineNumber":56,"author":{"gitId":"-"},"content":" int currentYear \u003d LocalDate.now().getYear();"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" Notification newNotification \u003d new Notification("},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" LocalDateTime.of(currentYear + 5, 2, 2, 12, 0).atZone(ZoneId.of(\"UTC\")).toInstant(),"},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" LocalDateTime.of(currentYear + 5, 2, 3, 12, 0).atZone(ZoneId.of(\"UTC\")).toInstant(),"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" NotificationStyle.INFO,"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" NotificationTargetUser.STUDENT,"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" \"New E2E test notification 1\","},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" \"\u003cp\u003eNew E2E test notification message\u003c/p\u003e\""},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" );"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" notificationsPage.addNotification(newNotification);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" notificationsPage.verifyStatusMessage(\"Notification created successfully.\");"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" // Replace placeholder ID with actual ID of created notification"},{"lineNumber":70,"author":{"gitId":"-"},"content":" notificationsPage.sortNotificationsTableByDescendingCreateTime();"},{"lineNumber":71,"author":{"gitId":"-"},"content":" String newestNotificationId \u003d notificationsPage.getFirstRowNotificationId();"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" newNotification.setId(UUID.fromString(newestNotificationId));"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" // Checks that notification is in the database first"},{"lineNumber":75,"author":{"gitId":"-"},"content":" // so that newNotification is updated with the created time before checking table row"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":" notif \u003d BACKDOOR.getNotificationData(newestNotificationId);"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getNotificationId(), newestNotificationId);"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getMessage(), newNotification.getMessage());"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" assertEquals(notif.getTitle(), newNotification.getTitle());"},{"lineNumber":80,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(newNotification);"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" ______TS(\"edit notification\");"},{"lineNumber":83,"author":{"gitId":"-"},"content":" newNotification.setStartTime(LocalDateTime.of(currentYear + 7, 2, 2, 12, 0).atZone(ZoneId.of(\"UTC\")).toInstant());"},{"lineNumber":84,"author":{"gitId":"-"},"content":" newNotification.setEndTime(LocalDateTime.of(currentYear + 7, 2, 3, 12, 0).atZone(ZoneId.of(\"UTC\")).toInstant());"},{"lineNumber":85,"author":{"gitId":"-"},"content":" newNotification.setStyle(NotificationStyle.DANGER);"},{"lineNumber":86,"author":{"gitId":"-"},"content":" newNotification.setTargetUser(NotificationTargetUser.INSTRUCTOR);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" newNotification.setTitle(\"Edited E2E test notification 1\");"},{"lineNumber":88,"author":{"gitId":"-"},"content":" newNotification.setMessage(\"\u003cp\u003eEdited E2E test notification message\u003c/p\u003e\");"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" notificationsPage.editNotification(newNotification);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" notificationsPage.verifyStatusMessage(\"Notification updated successfully.\");"},{"lineNumber":92,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(newNotification);"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" // verify that notification is present in database by reloading"},{"lineNumber":95,"author":{"gitId":"-"},"content":" notificationsPage.reloadPage();"},{"lineNumber":96,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotificationsTableRow(newNotification);"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" ______TS(\"delete notification\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" notificationsPage.deleteNotification(newNotification);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" notificationsPage.verifyStatusMessage(\"Notification has been deleted.\");"},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" notif \u003d BACKDOOR.getNotificationData(newestNotificationId);"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":" assertNull(notif);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void classTeardown() {"},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" for (Notification notification : sqlTestData.notifications.values()) {"},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":" BACKDOOR.deleteNotification(notification.getId().toString());"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":33,"-":79}},{"path":"src/e2e/java/teammates/e2e/cases/AdminSearchPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.AdminSearchPage;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#ADMIN_SEARCH_PAGE}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class AdminSearchPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/AdminSearchPageE2ETest.json\");"},{"lineNumber":30,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" putDocuments(testData);"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" sqlTestData \u003d loadSqlDataBundle(\"/AdminSearchPageE2ETest_SqlEntities.json\");"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" removeAndRestoreSqlDataBundle(sqlTestData);"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" putSqlDocuments(sqlTestData);"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" AppUrl url \u003d createFrontendUrl(Const.WebPageURIs.ADMIN_SEARCH_PAGE);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" AdminSearchPage searchPage \u003d loginAdminToPage(url, AdminSearchPage.class);"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" CourseAttributes course \u003d testData.courses.get(\"typicalCourse1\");"},{"lineNumber":48,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d testData.students.get(\"student1InCourse1\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d testData.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" AccountRequest accountRequest \u003d sqlTestData.accountRequests.get(\"instructor1OfCourse1\");"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Search student email\");"},{"lineNumber":53,"author":{"gitId":"-"},"content":" String searchContent \u003d student.getEmail();"},{"lineNumber":54,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":55,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" String studentDetails \u003d getExpectedStudentDetails(student);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" String studentManageAccountLink \u003d getExpectedStudentManageAccountLink(student);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" String studentHomePageLink \u003d getExpectedStudentHomePageLink(student);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" int numExpandedRows \u003d getExpectedNumExpandedRows(student);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" searchPage.verifyStudentRowContent(student, course, studentDetails, studentManageAccountLink,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" studentHomePageLink);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" searchPage.verifyStudentExpandedLinks(student, numExpandedRows);"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Reset student google id\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":" searchPage.resetStudentGoogleId(student);"},{"lineNumber":66,"author":{"gitId":"-"},"content":" student.setGoogleId(null);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" studentManageAccountLink \u003d getExpectedStudentManageAccountLink(student);"},{"lineNumber":68,"author":{"gitId":"-"},"content":" studentHomePageLink \u003d getExpectedStudentHomePageLink(student);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" searchPage.verifyStudentRowContent(student, course, studentDetails, studentManageAccountLink,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" studentHomePageLink);"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Regenerate registration key for a course student\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" searchPage.clickExpandStudentLinks();"},{"lineNumber":74,"author":{"gitId":"-"},"content":" String originalJoinLink \u003d searchPage.getStudentJoinLink(student);"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" searchPage.regenerateStudentKey(student);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" searchPage.verifyRegenerateStudentKey(student, originalJoinLink);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" searchPage.waitForPageToLoad();"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Search for instructor email\");"},{"lineNumber":81,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":82,"author":{"gitId":"-"},"content":" searchContent \u003d instructor.getEmail();"},{"lineNumber":83,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":85,"author":{"gitId":"-"},"content":" String instructorManageAccountLink \u003d getExpectedInstructorManageAccountLink(instructor);"},{"lineNumber":86,"author":{"gitId":"-"},"content":" String instructorHomePageLink \u003d getExpectedInstructorHomePageLink(instructor);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" searchPage.verifyInstructorRowContent(instructor, course, instructorManageAccountLink,"},{"lineNumber":88,"author":{"gitId":"-"},"content":" instructorHomePageLink);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" searchPage.verifyInstructorExpandedLinks(instructor);"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Reset instructor google id\");"},{"lineNumber":92,"author":{"gitId":"-"},"content":" searchPage.resetInstructorGoogleId(instructor);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" instructor.setGoogleId(null);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" instructorManageAccountLink \u003d getExpectedInstructorManageAccountLink(instructor);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" instructorHomePageLink \u003d getExpectedInstructorHomePageLink(instructor);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" searchPage.verifyInstructorRowContent(instructor, course, instructorManageAccountLink,"},{"lineNumber":97,"author":{"gitId":"-"},"content":" instructorHomePageLink);"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Regenerate registration key for an instructor\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":" searchPage.clickExpandInstructorLinks();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" originalJoinLink \u003d searchPage.getInstructorJoinLink(instructor);"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" searchPage.regenerateInstructorKey(instructor);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" searchPage.verifyRegenerateInstructorKey(instructor, originalJoinLink);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" searchPage.waitForPageToLoad();"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Search for account request by email\");"},{"lineNumber":108,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" searchContent \u003d accountRequest.getEmail();"},{"lineNumber":110,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" searchPage.verifyAccountRequestRowContent(accountRequest);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" searchPage.verifyAccountRequestExpandedLinks(accountRequest);"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Search common search key\");"},{"lineNumber":116,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":117,"author":{"gitId":"-"},"content":" searchContent \u003d \"Course1\";"},{"lineNumber":118,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":120,"author":{"gitId":"-"},"content":" searchPage.verifyStudentRowContent(student, course, studentDetails, studentManageAccountLink,"},{"lineNumber":121,"author":{"gitId":"-"},"content":" studentHomePageLink);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" searchPage.verifyInstructorRowContent(instructor, course, instructorManageAccountLink,"},{"lineNumber":123,"author":{"gitId":"-"},"content":" instructorHomePageLink);"},{"lineNumber":124,"author":{"gitId":"-"},"content":" searchPage.verifyAccountRequestRowContent(accountRequest);"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Expand and collapse links\");"},{"lineNumber":127,"author":{"gitId":"-"},"content":" searchPage.verifyLinkExpansionButtons(student, instructor, accountRequest);"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Reset account request successful\");"},{"lineNumber":130,"author":{"gitId":"-"},"content":" searchContent \u003d accountRequest.getEmail();"},{"lineNumber":131,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":132,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":134,"author":{"gitId":"-"},"content":" searchPage.clickResetAccountRequestButton(accountRequest);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" assertNull(BACKDOOR.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()).getRegisteredAt());"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" ______TS(\"Typical case: Delete account request successful\");"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" accountRequest \u003d sqlTestData.accountRequests.get(\"unregisteredInstructor1\");"},{"lineNumber":139,"author":{"gitId":"-"},"content":" searchContent \u003d accountRequest.getEmail();"},{"lineNumber":140,"author":{"gitId":"-"},"content":" searchPage.clearSearchBox();"},{"lineNumber":141,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":143,"author":{"gitId":"-"},"content":" searchPage.clickDeleteAccountRequestButton(accountRequest);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" assertNull(BACKDOOR.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()));"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" private String getExpectedStudentDetails(StudentAttributes student) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" return String.format(\"%s [%s] (%s)\", student.getCourse(),"},{"lineNumber":149,"author":{"gitId":"-"},"content":" student.getSection() \u003d\u003d null ? Const.DEFAULT_SECTION : student.getSection(), student.getTeam());"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" private String getExpectedStudentHomePageLink(StudentAttributes student) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" return student.isRegistered() ? createFrontendUrl(Const.WebPageURIs.STUDENT_HOME_PAGE)"},{"lineNumber":154,"author":{"gitId":"-"},"content":" .withUserId(student.getGoogleId())"},{"lineNumber":155,"author":{"gitId":"-"},"content":" .toAbsoluteString()"},{"lineNumber":156,"author":{"gitId":"-"},"content":" : \"\";"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" private String getExpectedStudentManageAccountLink(StudentAttributes student) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return student.isRegistered() ? createFrontendUrl(Const.WebPageURIs.ADMIN_ACCOUNTS_PAGE)"},{"lineNumber":161,"author":{"gitId":"-"},"content":" .withParam(Const.ParamsNames.INSTRUCTOR_ID, student.getGoogleId())"},{"lineNumber":162,"author":{"gitId":"-"},"content":" .toAbsoluteString()"},{"lineNumber":163,"author":{"gitId":"-"},"content":" : \"\";"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" private int getExpectedNumExpandedRows(StudentAttributes student) {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" int expectedNumExpandedRows \u003d 2;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" for (FeedbackSessionAttributes sessions : testData.feedbackSessions.values()) {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (sessions.getCourseId().equals(student.getCourse())) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" expectedNumExpandedRows +\u003d 1;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" if (sessions.getResultsVisibleFromTime().isBefore(Instant.now())) {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" expectedNumExpandedRows +\u003d 1;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return expectedNumExpandedRows;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" private String getExpectedInstructorHomePageLink(InstructorAttributes instructor) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" String googleId \u003d instructor.isRegistered() ? instructor.getGoogleId() : \"\";"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_HOME_PAGE)"},{"lineNumber":182,"author":{"gitId":"-"},"content":" .withUserId(googleId)"},{"lineNumber":183,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" private String getExpectedInstructorManageAccountLink(InstructorAttributes instructor) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" String googleId \u003d instructor.isRegistered() ? instructor.getGoogleId() : \"\";"},{"lineNumber":188,"author":{"gitId":"-"},"content":" return createFrontendUrl(Const.WebPageURIs.ADMIN_ACCOUNTS_PAGE)"},{"lineNumber":189,"author":{"gitId":"-"},"content":" .withParam(Const.ParamsNames.INSTRUCTOR_ID, googleId)"},{"lineNumber":190,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" @AfterClass"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" public void classTeardown() {"},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" for (AccountRequest request : sqlTestData.accountRequests.values()) {"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":" BACKDOOR.deleteAccountRequest(request.getEmail(), request.getInstitute());"},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":14,"-":186}},{"path":"src/e2e/java/teammates/e2e/cases/BaseE2ETestCase.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.nio.file.Files;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.nio.file.Paths;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.ITestContext;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountAttributes;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.DeadlineExtensionAttributes;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.exception.HttpRequestFailedException;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.AppPage;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.Browser;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.DevServerLoginPage;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.HomePage;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.e2e.util.BackDoor;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.e2e.util.EmailAccount;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCaseWithDatabaseAccess;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.test.FileHelper;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.test.ThreadHelper;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * Base class for all browser tests."},{"lineNumber":41,"author":{"gitId":"-"},"content":" *"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis type of test has no knowledge of the workings of the application,"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * and can only communicate via the UI or via {@link BackDoor} to obtain/transmit data."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"-"},"content":"public abstract class BaseE2ETestCase extends BaseTestCaseWithDatabaseAccess {"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Backdoor used to call APIs."},{"lineNumber":49,"author":{"gitId":"-"},"content":" */"},{"lineNumber":50,"author":{"gitId":"-"},"content":" protected static final BackDoor BACKDOOR \u003d BackDoor.getInstance();"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * Data to be used in the test."},{"lineNumber":54,"author":{"gitId":"-"},"content":" */"},{"lineNumber":55,"author":{"gitId":"-"},"content":" protected DataBundle testData;"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Sql Data to be used in the test."},{"lineNumber":59,"author":{"gitId":"-"},"content":" */"},{"lineNumber":60,"author":{"gitId":"-"},"content":" protected SqlDataBundle sqlTestData;"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" private Browser browser;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void baseClassSetup() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" prepareTestData();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" prepareBrowser();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Prepares the browser used for the current test."},{"lineNumber":72,"author":{"gitId":"-"},"content":" */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" protected void prepareBrowser() {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" browser \u003d new Browser();"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Prepares the test data used for the current test."},{"lineNumber":79,"author":{"gitId":"-"},"content":" */"},{"lineNumber":80,"author":{"gitId":"-"},"content":" protected abstract void prepareTestData();"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * Contains all the tests for the page."},{"lineNumber":84,"author":{"gitId":"-"},"content":" *"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis approach is chosen so that setup and teardown are only needed once per test page,"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * thereby saving time. While it necessitates failed tests to be restarted from the beginning,"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * test failures are rare and thus not causing significant overhead."},{"lineNumber":88,"author":{"gitId":"-"},"content":" */"},{"lineNumber":89,"author":{"gitId":"-"},"content":" protected abstract void testAll();"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":92,"author":{"gitId":"-"},"content":" protected String getTestDataFolder() {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" return TestProperties.TEST_DATA_FOLDER;"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void baseClassTearDown(ITestContext context) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" if (browser \u003d\u003d null) {"},{"lineNumber":99,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":" boolean isSuccess \u003d context.getFailedTests().getAllMethods()"},{"lineNumber":102,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":103,"author":{"gitId":"-"},"content":" .noneMatch(method -\u003e method.getConstructorOrMethod().getMethod().getDeclaringClass() \u003d\u003d this.getClass());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (isSuccess || TestProperties.CLOSE_BROWSER_ON_FAILURE) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" browser.close();"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Creates an {@link AppUrl} for the supplied {@code relativeUrl} parameter."},{"lineNumber":111,"author":{"gitId":"-"},"content":" * The base URL will be the value of test.app.frontend.url in test.properties."},{"lineNumber":112,"author":{"gitId":"-"},"content":" * {@code relativeUrl} must start with a \"/\"."},{"lineNumber":113,"author":{"gitId":"-"},"content":" */"},{"lineNumber":114,"author":{"gitId":"-"},"content":" protected static AppUrl createFrontendUrl(String relativeUrl) {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" return new AppUrl(TestProperties.TEAMMATES_FRONTEND_URL + relativeUrl);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * Creates an {@link AppUrl} for the supplied {@code relativeUrl} parameter."},{"lineNumber":120,"author":{"gitId":"-"},"content":" * The base URL will be the value of test.app.backend.url in test.properties."},{"lineNumber":121,"author":{"gitId":"-"},"content":" * {@code relativeUrl} must start with a \"/\"."},{"lineNumber":122,"author":{"gitId":"-"},"content":" */"},{"lineNumber":123,"author":{"gitId":"-"},"content":" protected static AppUrl createBackendUrl(String relativeUrl) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" return new AppUrl(TestProperties.TEAMMATES_BACKEND_URL + relativeUrl);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":128,"author":{"gitId":"-"},"content":" * Logs in to a page using the given credentials."},{"lineNumber":129,"author":{"gitId":"-"},"content":" */"},{"lineNumber":130,"author":{"gitId":"-"},"content":" protected \u003cT extends AppPage\u003e T loginToPage(AppUrl url, Class\u003cT\u003e typeOfPage, String userId) {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" // When not using dev server, Google blocks log in by automation."},{"lineNumber":132,"author":{"gitId":"-"},"content":" // To work around that, we inject the user cookie directly into the browser session."},{"lineNumber":133,"author":{"gitId":"-"},"content":" if (!TestProperties.isDevServer()) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // In order for the cookie injection to work, we need to be in the domain."},{"lineNumber":135,"author":{"gitId":"-"},"content":" // Use the home page to minimize the page load time."},{"lineNumber":136,"author":{"gitId":"-"},"content":" browser.goToUrl(TestProperties.TEAMMATES_FRONTEND_URL);"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" String cookieValue \u003d BACKDOOR.getUserCookie(userId);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" browser.addCookie(Const.SecurityConfig.AUTH_COOKIE_NAME, cookieValue, true, true);"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" return getNewPageInstance(url, typeOfPage);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" // This will be redirected to the dev server login page."},{"lineNumber":145,"author":{"gitId":"-"},"content":" browser.goToUrl(url.toAbsoluteString());"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" DevServerLoginPage loginPage \u003d AppPage.getNewPageInstance(browser, DevServerLoginPage.class);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" loginPage.loginAsUser(userId);"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" return getNewPageInstance(url, typeOfPage);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * Logs in to a page using admin credentials."},{"lineNumber":155,"author":{"gitId":"-"},"content":" */"},{"lineNumber":156,"author":{"gitId":"-"},"content":" protected \u003cT extends AppPage\u003e T loginAdminToPage(AppUrl url, Class\u003cT\u003e typeOfPage) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" return loginToPage(url, typeOfPage, TestProperties.TEST_ADMIN);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * Equivalent to clicking the \u0027logout\u0027 link in the top menu of the page."},{"lineNumber":162,"author":{"gitId":"-"},"content":" */"},{"lineNumber":163,"author":{"gitId":"-"},"content":" protected void logout() {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" AppUrl url \u003d createBackendUrl(Const.WebPageURIs.LOGOUT);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" if (!TestProperties.TEAMMATES_FRONTEND_URL.equals(TestProperties.TEAMMATES_BACKEND_URL)) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" url \u003d url.withParam(\"frontendUrl\", TestProperties.TEAMMATES_FRONTEND_URL);"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" browser.goToUrl(url.toAbsoluteString());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" AppPage.getNewPageInstance(browser, HomePage.class).waitForPageToLoad();"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * Deletes file with fileName from the downloads folder."},{"lineNumber":175,"author":{"gitId":"-"},"content":" */"},{"lineNumber":176,"author":{"gitId":"-"},"content":" protected void deleteDownloadsFile(String fileName) {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" String filePath \u003d TestProperties.TEST_DOWNLOADS_FOLDER + fileName;"},{"lineNumber":178,"author":{"gitId":"-"},"content":" FileHelper.deleteFile(filePath);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":182,"author":{"gitId":"-"},"content":" * Verifies downloaded file has correct fileName and contains expected content."},{"lineNumber":183,"author":{"gitId":"-"},"content":" */"},{"lineNumber":184,"author":{"gitId":"-"},"content":" protected void verifyDownloadedFile(String expectedFileName, List\u003cString\u003e expectedContent) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" String filePath \u003d TestProperties.TEST_DOWNLOADS_FOLDER + expectedFileName;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" int retryLimit \u003d TestProperties.TEST_TIMEOUT;"},{"lineNumber":187,"author":{"gitId":"-"},"content":" boolean actual \u003d Files.exists(Paths.get(filePath));"},{"lineNumber":188,"author":{"gitId":"-"},"content":" while (!actual \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" actual \u003d Files.exists(Paths.get(filePath));"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" String actualContent \u003d FileHelper.readFile(filePath);"},{"lineNumber":197,"author":{"gitId":"-"},"content":" for (String content : expectedContent) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" assertTrue(actualContent.contains(content));"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":202,"author":{"gitId":"-"},"content":" }"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * Visits the URL and gets the page object representation of the visited web page in the browser."},{"lineNumber":207,"author":{"gitId":"-"},"content":" */"},{"lineNumber":208,"author":{"gitId":"-"},"content":" protected \u003cT extends AppPage\u003e T getNewPageInstance(AppUrl url, Class\u003cT\u003e typeOfPage) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" browser.goToUrl(url.toAbsoluteString());"},{"lineNumber":210,"author":{"gitId":"-"},"content":" return AppPage.getNewPageInstance(browser, typeOfPage);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":214,"author":{"gitId":"-"},"content":" * Verifies that email with subject is found in inbox."},{"lineNumber":215,"author":{"gitId":"-"},"content":" * Email used must be an authentic gmail account."},{"lineNumber":216,"author":{"gitId":"-"},"content":" */"},{"lineNumber":217,"author":{"gitId":"-"},"content":" protected void verifyEmailSent(String email, String subject) {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" if (TestProperties.isDevServer() || !TestProperties.INCLUDE_EMAIL_VERIFICATION) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (!TestProperties.TEST_EMAIL.equals(email)) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" fail(\"Email verification is allowed only on preset test email.\");"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":" EmailAccount emailAccount \u003d new EmailAccount(email);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" emailAccount.getUserAuthenticated();"},{"lineNumber":227,"author":{"gitId":"-"},"content":" int retryLimit \u003d 5;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" boolean actual \u003d emailAccount.isRecentEmailWithSubjectPresent(subject, TestProperties.TEST_SENDER_EMAIL);"},{"lineNumber":229,"author":{"gitId":"-"},"content":" while (!actual \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":231,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" actual \u003d emailAccount.isRecentEmailWithSubjectPresent(subject, TestProperties.TEST_SENDER_EMAIL);"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }"},{"lineNumber":234,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":235,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":236,"author":{"gitId":"-"},"content":" fail(\"Failed to verify email sent:\" + e);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" AccountAttributes getAccount(String googleId) {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" return BACKDOOR.getAccount(googleId);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":245,"author":{"gitId":"-"},"content":" protected AccountAttributes getAccount(AccountAttributes account) {"},{"lineNumber":246,"author":{"gitId":"-"},"content":" return getAccount(account.getGoogleId());"},{"lineNumber":247,"author":{"gitId":"-"},"content":" }"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":" CourseAttributes getCourse(String courseId) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return BACKDOOR.getCourse(courseId);"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":254,"author":{"gitId":"-"},"content":" protected CourseAttributes getCourse(CourseAttributes course) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return getCourse(course.getId());"},{"lineNumber":256,"author":{"gitId":"-"},"content":" }"},{"lineNumber":257,"author":{"gitId":"-"},"content":""},{"lineNumber":258,"author":{"gitId":"-"},"content":" CourseAttributes getArchivedCourse(String instructorId, String courseId) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" return BACKDOOR.getArchivedCourse(instructorId, courseId);"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes getFeedbackQuestion(String courseId, String feedbackSessionName, int qnNumber) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackQuestion(courseId, feedbackSessionName, qnNumber);"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":267,"author":{"gitId":"-"},"content":" protected FeedbackQuestionAttributes getFeedbackQuestion(FeedbackQuestionAttributes fq) {"},{"lineNumber":268,"author":{"gitId":"-"},"content":" return getFeedbackQuestion(fq.getCourseId(), fq.getFeedbackSessionName(), fq.getQuestionNumber());"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" FeedbackResponseCommentAttributes getFeedbackResponseComment(String feedbackResponseId) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackResponseComment(feedbackResponseId);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":276,"author":{"gitId":"-"},"content":" protected FeedbackResponseCommentAttributes getFeedbackResponseComment(FeedbackResponseCommentAttributes frc) {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" return getFeedbackResponseComment(frc.getFeedbackResponseId());"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes getFeedbackResponse(String feedbackQuestionId, String giver, String recipient) {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackResponse(feedbackQuestionId, giver, recipient);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":285,"author":{"gitId":"-"},"content":" protected FeedbackResponseAttributes getFeedbackResponse(FeedbackResponseAttributes fr) {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" return getFeedbackResponse(fr.getFeedbackQuestionId(), fr.getGiver(), fr.getRecipient());"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes getFeedbackSession(String courseId, String feedbackSessionName) {"},{"lineNumber":290,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackSession(courseId, feedbackSessionName);"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":294,"author":{"gitId":"-"},"content":" protected FeedbackSessionAttributes getFeedbackSession(FeedbackSessionAttributes fs) {"},{"lineNumber":295,"author":{"gitId":"-"},"content":" return getFeedbackSession(fs.getCourseId(), fs.getFeedbackSessionName());"},{"lineNumber":296,"author":{"gitId":"-"},"content":" }"},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes getSoftDeletedSession(String feedbackSessionName, String instructorId) {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" return BACKDOOR.getSoftDeletedSession(feedbackSessionName, instructorId);"},{"lineNumber":300,"author":{"gitId":"-"},"content":" }"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":" InstructorAttributes getInstructor(String courseId, String instructorEmail) {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" return BACKDOOR.getInstructor(courseId, instructorEmail);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":307,"author":{"gitId":"-"},"content":" protected InstructorAttributes getInstructor(InstructorAttributes instructor) {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" return getInstructor(instructor.getCourseId(), instructor.getEmail());"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":312,"author":{"gitId":"-"},"content":" * Gets registration key for a given instructor."},{"lineNumber":313,"author":{"gitId":"-"},"content":" */"},{"lineNumber":314,"author":{"gitId":"-"},"content":" protected String getKeyForInstructor(String courseId, String instructorEmail) {"},{"lineNumber":315,"author":{"gitId":"-"},"content":" return getInstructor(courseId, instructorEmail).getKey();"},{"lineNumber":316,"author":{"gitId":"-"},"content":" }"},{"lineNumber":317,"author":{"gitId":"-"},"content":""},{"lineNumber":318,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":319,"author":{"gitId":"-"},"content":" protected StudentAttributes getStudent(StudentAttributes student) {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" return BACKDOOR.getStudent(student.getCourse(), student.getEmail());"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":324,"author":{"gitId":"-"},"content":" * Gets registration key for a given student."},{"lineNumber":325,"author":{"gitId":"-"},"content":" */"},{"lineNumber":326,"author":{"gitId":"-"},"content":" protected String getKeyForStudent(StudentAttributes student) {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" return getStudent(student).getKey();"},{"lineNumber":328,"author":{"gitId":"-"},"content":" }"},{"lineNumber":329,"author":{"gitId":"-"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":331,"author":{"gitId":"-"},"content":" protected AccountRequestAttributes getAccountRequest(AccountRequestAttributes accountRequest) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" return BACKDOOR.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" NotificationAttributes getNotification(String notificationId) {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" return BACKDOOR.getNotification(notificationId);"},{"lineNumber":337,"author":{"gitId":"-"},"content":" }"},{"lineNumber":338,"author":{"gitId":"-"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":340,"author":{"gitId":"-"},"content":" protected NotificationAttributes getNotification(NotificationAttributes notification) {"},{"lineNumber":341,"author":{"gitId":"-"},"content":" return getNotification(notification.getNotificationId());"},{"lineNumber":342,"author":{"gitId":"-"},"content":" }"},{"lineNumber":343,"author":{"gitId":"-"},"content":""},{"lineNumber":344,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":345,"author":{"gitId":"-"},"content":" protected DeadlineExtensionAttributes getDeadlineExtension(DeadlineExtensionAttributes deadlineExtension) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" return BACKDOOR.getDeadlineExtension("},{"lineNumber":347,"author":{"gitId":"-"},"content":" deadlineExtension.getCourseId(), deadlineExtension.getFeedbackSessionName(),"},{"lineNumber":348,"author":{"gitId":"-"},"content":" deadlineExtension.getUserEmail(), deadlineExtension.getIsInstructor());"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":350,"author":{"gitId":"-"},"content":""},{"lineNumber":351,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":352,"author":{"gitId":"-"},"content":" protected boolean doRemoveAndRestoreDataBundle(DataBundle testData) {"},{"lineNumber":353,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":354,"author":{"gitId":"-"},"content":" BACKDOOR.removeAndRestoreDataBundle(testData);"},{"lineNumber":355,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":356,"author":{"gitId":"-"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":357,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":358,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":359,"author":{"gitId":"-"},"content":" }"},{"lineNumber":360,"author":{"gitId":"-"},"content":" }"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":363,"author":{"gitId":"-"},"content":" protected SqlDataBundle doRemoveAndRestoreSqlDataBundle(SqlDataBundle testData) {"},{"lineNumber":364,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":365,"author":{"gitId":"-"},"content":" return BACKDOOR.removeAndRestoreSqlDataBundle(testData);"},{"lineNumber":366,"author":{"gitId":"-"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":367,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":368,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":" }"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":373,"author":{"gitId":"-"},"content":" protected boolean doPutDocuments(DataBundle testData) {"},{"lineNumber":374,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":375,"author":{"gitId":"-"},"content":" BACKDOOR.putDocuments(testData);"},{"lineNumber":376,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":377,"author":{"gitId":"-"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":379,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":380,"author":{"gitId":"-"},"content":" }"},{"lineNumber":381,"author":{"gitId":"-"},"content":" }"},{"lineNumber":382,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":383,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":384,"author":{"gitId":"domoberzin"},"content":" protected boolean doPutDocumentsSql(SqlDataBundle testData) {"},{"lineNumber":385,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":386,"author":{"gitId":"domoberzin"},"content":" BACKDOOR.putSqlDocuments(testData);"},{"lineNumber":387,"author":{"gitId":"domoberzin"},"content":" return true;"},{"lineNumber":388,"author":{"gitId":"domoberzin"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":389,"author":{"gitId":"domoberzin"},"content":" e.printStackTrace();"},{"lineNumber":390,"author":{"gitId":"domoberzin"},"content":" return false;"},{"lineNumber":391,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":392,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":393,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":11,"-":382}},{"path":"src/e2e/java/teammates/e2e/cases/InstructorNotificationsPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import java.util.Set;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import java.util.stream.Collectors;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import java.util.stream.Stream;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorNotificationsPage;"},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_NOTIFICATIONS_PAGE}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class InstructorNotificationsPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/InstructorNotificationsPageE2ETest.json\");"},{"lineNumber":26,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" sqlTestData \u003d removeAndRestoreSqlDataBundle("},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":" loadSqlDataBundle(\"/InstructorNotificationsPageE2ETest_SqlEntities.json\"));"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" Account account \u003d sqlTestData.accounts.get(\"INotifs.instr\");"},{"lineNumber":35,"author":{"gitId":"-"},"content":" AppUrl notificationsPageUrl \u003d createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_NOTIFICATIONS_PAGE);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" InstructorNotificationsPage notificationsPage \u003d loginToPage(notificationsPageUrl, InstructorNotificationsPage.class,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" account.getGoogleId());"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" ______TS(\"verify that only active notifications with correct target user are shown\");"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" Notification[] notShownNotifications \u003d {"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification2\"),"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"expiredNotification1\"),"},{"lineNumber":43,"author":{"gitId":"-"},"content":" };"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" Notification[] shownNotifications \u003d {"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification1\"),"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification3\"),"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification4\"),"},{"lineNumber":48,"author":{"gitId":"-"},"content":" };"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" Notification[] readNotifications \u003d {"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" sqlTestData.notifications.get(\"notification4\"),"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" Set\u003cString\u003e readNotificationsIds \u003d Stream.of(readNotifications)"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":" .map(readNotification -\u003e readNotification.getId().toString())"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" .collect(Collectors.toSet());"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" notificationsPage.verifyNotShownNotifications(notShownNotifications);"},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" notificationsPage.verifyShownNotifications(shownNotifications, readNotificationsIds);"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" ______TS(\"mark notification as read\");"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" Notification notificationToMarkAsRead \u003d sqlTestData.notifications.get(\"notification3\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" notificationsPage.markNotificationAsRead(notificationToMarkAsRead);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" notificationsPage.verifyStatusMessage(\"Notification marked as read.\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" // Verify that account\u0027s readNotifications attribute is updated"},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" AccountData accountFromDb \u003d BACKDOOR.getAccountData(account.getGoogleId());"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" assertTrue(accountFromDb.getReadNotifications().containsKey(notificationToMarkAsRead.getId().toString()));"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" ______TS(\"notification banner is not visible\");"},{"lineNumber":71,"author":{"gitId":"-"},"content":" assertFalse(notificationsPage.isBannerVisible());"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public void classTeardown() {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" for (NotificationAttributes notification : testData.notifications.values()) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" BACKDOOR.deleteNotification(notification.getNotificationId());"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":28,"-":53}},{"path":"src/e2e/java/teammates/e2e/cases/InstructorSearchPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorCourseStudentDetailsEditPage;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorCourseStudentDetailsViewPage;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorSearchPage;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorStudentRecordsPage;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SEARCH_PAGE}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class InstructorSearchPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" sqlTestData \u003d removeAndRestoreSqlDataBundle("},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" loadSqlDataBundle(\"/InstructorSearchPageE2ETest_SqlEntities.json\"));"},{"lineNumber":30,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/InstructorSearchPageE2ETest.json\");"},{"lineNumber":31,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" putDocuments(testData);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" String instructorId \u003d sqlTestData.accounts.get(\"instructor1OfCourse1\").getGoogleId();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" AppUrl searchPageUrl \u003d createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_SEARCH_PAGE);"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" InstructorSearchPage searchPage \u003d loginToPage(searchPageUrl, InstructorSearchPage.class, instructorId);"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" ______TS(\"cannot click search button if no search term is entered\");"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" searchPage.search(\"\");"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" ______TS(\"search with no result\");"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" searchPage.search(\"thiswillnothitanything\");"},{"lineNumber":54,"author":{"gitId":"-"},"content":" searchPage.verifyStatusMessage(\"No results found.\");"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" ______TS(\"search for students\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" searchPage.search(\"student2\");"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" CourseAttributes course1 \u003d testData.courses.get(\"typicalCourse1\");"},{"lineNumber":61,"author":{"gitId":"-"},"content":" CourseAttributes course2 \u003d testData.courses.get(\"typicalCourse2\");"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" StudentAttributes[] studentsInCourse1 \u003d {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" testData.students.get(\"student2.2InCourse1\"),"},{"lineNumber":65,"author":{"gitId":"-"},"content":" testData.students.get(\"student2InCourse1\"),"},{"lineNumber":66,"author":{"gitId":"-"},"content":" };"},{"lineNumber":67,"author":{"gitId":"-"},"content":" StudentAttributes[] studentsInCourse2 \u003d {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" testData.students.get(\"student2.2InCourse2\"),"},{"lineNumber":69,"author":{"gitId":"-"},"content":" testData.students.get(\"student2InCourse2\"),"},{"lineNumber":70,"author":{"gitId":"-"},"content":" };"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" Map\u003cString, StudentAttributes[]\u003e courseIdToStudents \u003d new HashMap\u003c\u003e();"},{"lineNumber":73,"author":{"gitId":"-"},"content":" courseIdToStudents.put(course1.getId(), studentsInCourse1);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" courseIdToStudents.put(course2.getId(), studentsInCourse2);"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" Map\u003cString, CourseAttributes\u003e courseIdToCourse \u003d new HashMap\u003c\u003e();"},{"lineNumber":77,"author":{"gitId":"-"},"content":" courseIdToCourse.put(course1.getId(), course1);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" courseIdToCourse.put(course2.getId(), course2);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" searchPage.verifyStudentDetails(courseIdToCourse, courseIdToStudents);"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" ______TS(\"link: view student details page\");"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" StudentAttributes studentToView \u003d testData.students.get(\"student2.2InCourse1\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":" String studentEmail \u003d studentToView.getEmail();"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" InstructorCourseStudentDetailsViewPage studentDetailsViewPage \u003d"},{"lineNumber":88,"author":{"gitId":"-"},"content":" searchPage.clickViewStudent(course1, studentEmail);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" studentDetailsViewPage.verifyIsCorrectPage(course1.getId(), studentEmail);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" studentDetailsViewPage.closeCurrentWindowAndSwitchToParentWindow();"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" ______TS(\"link: edit student details page\");"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" InstructorCourseStudentDetailsEditPage studentDetailsEditPage \u003d"},{"lineNumber":95,"author":{"gitId":"-"},"content":" searchPage.clickEditStudent(course1, studentEmail);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" studentDetailsEditPage.verifyIsCorrectPage(course1.getId(), studentEmail);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" studentDetailsEditPage.closeCurrentWindowAndSwitchToParentWindow();"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" ______TS(\"link: view all records page\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" InstructorStudentRecordsPage studentRecordsPage \u003d"},{"lineNumber":102,"author":{"gitId":"-"},"content":" searchPage.clickViewAllRecords(course1, studentEmail);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" studentRecordsPage.verifyIsCorrectPage(course1.getId(), studentToView.getName());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" studentRecordsPage.closeCurrentWindowAndSwitchToParentWindow();"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" ______TS(\"action: delete student\");"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" StudentAttributes studentToDelete \u003d testData.students.get(\"student2InCourse2\");"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" searchPage.deleteStudent(course2, studentToDelete.getEmail());"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" StudentAttributes[] studentsAfterDelete \u003d {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" testData.students.get(\"student2.2InCourse2\"),"},{"lineNumber":114,"author":{"gitId":"-"},"content":" };"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" searchPage.verifyStudentDetails(course2, studentsAfterDelete);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" verifyAbsentInDatabase(studentToDelete);"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":3,"-":118}},{"path":"src/e2e/java/teammates/e2e/cases/NotificationBannerE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.StudentHomePage;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * SUT: The reusable notification banner, which can be displayed across many pages."},{"lineNumber":15,"author":{"gitId":"-"},"content":" * {@link Const.WebPageURIs#STUDENT_HOME_PAGE} is used to test the behaviour of the banner in this case,"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * {@link Const.WebPageURIs#STUDENT_NOTIFICATIONS_PAGE}"},{"lineNumber":17,"author":{"gitId":"-"},"content":" */"},{"lineNumber":18,"author":{"gitId":"-"},"content":"public class NotificationBannerE2ETest extends BaseE2ETestCase {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":20,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/NotificationBannerE2ETest.json\");"},{"lineNumber":22,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":" sqlTestData \u003d removeAndRestoreSqlDataBundle("},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":" loadSqlDataBundle(\"/NotificationBannerE2ETest_SqlEntities.json\"));"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":28,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"-"},"content":" protected void testAll() {"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d sqlTestData.accounts.get(\"NotifBanner.student\");"},{"lineNumber":31,"author":{"gitId":"-"},"content":" AppUrl studentHomePageUrl \u003d createFrontendUrl(Const.WebPageURIs.STUDENT_HOME_PAGE);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" StudentHomePage studentHomePage \u003d loginToPage(studentHomePageUrl, StudentHomePage.class,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" account.getGoogleId());"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" ______TS(\"verify active notification with correct information is shown\");"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertTrue(studentHomePage.isBannerVisible());"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" ______TS(\"close notification\");"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // After user closes a notification banner, it should not appear till user refreshes page"},{"lineNumber":40,"author":{"gitId":"-"},"content":" studentHomePage.clickCloseNotificationBannerButton();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertFalse(studentHomePage.isBannerVisible());"},{"lineNumber":42,"author":{"gitId":"-"},"content":" studentHomePage.reloadPage();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertTrue(studentHomePage.isBannerVisible());"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" ______TS(\"mark notification as read\");"},{"lineNumber":46,"author":{"gitId":"-"},"content":" studentHomePage.reloadPage();"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assertTrue(studentHomePage.isBannerVisible());"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" String notificationId \u003d studentHomePage.getNotificationId();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" studentHomePage.clickMarkAsReadButton();"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" AccountData accountFromDb \u003d BACKDOOR.getAccountData(account.getGoogleId());"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" studentHomePage.verifyStatusMessage(\"Notification marked as read.\");"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertFalse(studentHomePage.isBannerVisible());"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" assertTrue(accountFromDb.getReadNotifications().containsKey(notificationId));"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public void classTeardown() {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" for (NotificationAttributes notification : testData.notifications.values()) {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" BACKDOOR.deleteNotification(notification.getNotificationId());"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":9,"-":56}},{"path":"src/e2e/java/teammates/e2e/cases/axe/AdminSearchPageAxeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases.axe;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import com.deque.html.axecore.results.Results;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.AdminSearchPage;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#ADMIN_SEARCH_PAGE}."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class AdminSearchPageAxeTest extends BaseAxeTestCase {"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":18,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" }"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/AdminSearchPageE2ETest.json\");"},{"lineNumber":24,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":25,"author":{"gitId":"-"},"content":" putDocuments(testData);"},{"lineNumber":26,"author":{"gitId":"-"},"content":" sqlTestData \u003d loadSqlDataBundle(\"/AdminSearchPageE2ETest_SqlEntities.json\");"},{"lineNumber":27,"author":{"gitId":"-"},"content":" removeAndRestoreSqlDataBundle(sqlTestData);"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" putSqlDocuments(sqlTestData);"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" AppUrl url \u003d createFrontendUrl(Const.WebPageURIs.ADMIN_SEARCH_PAGE);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" AdminSearchPage searchPage \u003d loginAdminToPage(url, AdminSearchPage.class);"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" searchPage.inputSearchContent(testData.students.get(\"student1InCourse1\").getEmail());"},{"lineNumber":42,"author":{"gitId":"-"},"content":" searchPage.clickSearchButton();"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" Results results \u003d getAxeBuilder().analyze(searchPage.getBrowser().getDriver());"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assertTrue(formatViolations(results), results.violationFree());"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":1,"-":47}},{"path":"src/e2e/java/teammates/e2e/cases/axe/InstructorSearchPageAxeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases.axe;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import com.deque.html.axecore.results.Results;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.InstructorSearchPage;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SEARCH_PAGE}."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class InstructorSearchPageAxeTest extends BaseAxeTestCase {"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":18,"author":{"gitId":"-"},"content":" protected void prepareTestData() {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" }"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" sqlTestData \u003d loadSqlDataBundle(\"/InstructorSearchPageE2ETest_SqlEntities.json\");"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testData \u003d loadDataBundle(\"/InstructorSearchPageE2ETest.json\");"},{"lineNumber":25,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":26,"author":{"gitId":"-"},"content":" putDocuments(testData);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":30,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public void testAll() {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" AppUrl searchPageUrl \u003d createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_SEARCH_PAGE);"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" InstructorSearchPage searchPage \u003d loginToPage(searchPageUrl, InstructorSearchPage.class,"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" sqlTestData.accounts.get(\"instructor1OfCourse1\").getGoogleId());"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" searchPage.search(\"student2\");"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" Results results \u003d getAxeBuilder().analyze(searchPage.getBrowser().getDriver());"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertTrue(formatViolations(results), results.violationFree());"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":2,"-":45}},{"path":"src/e2e/java/teammates/e2e/cases/sql/AdminSearchPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.e2e.pageobjects.AdminSearchPage;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link Const.WebPageURIs#ADMIN_SEARCH_PAGE}."},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":"public class AdminSearchPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" protected void prepareTestData() {"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" testData \u003d removeAndRestoreDataBundle(loadSqlDataBundle(\"/AdminSearchPageE2ESqlTest.json\"));"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" putDocuments(testData);"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" public void testAll() {"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" if (!TestProperties.INCLUDE_SEARCH_TESTS) {"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" AppUrl url \u003d createFrontendUrl(Const.WebPageURIs.ADMIN_SEARCH_PAGE);"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" AdminSearchPage searchPage \u003d loginAdminToPage(url, AdminSearchPage.class);"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" Course course \u003d testData.courses.get(\"typicalCourse1\");"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":" Student student \u003d testData.students.get(\"student1InCourse1\");"},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" Instructor instructor \u003d testData.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" AccountRequest accountRequest \u003d testData.accountRequests.get(\"instructor1OfCourse1\");"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Search student email\");"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" String searchContent \u003d student.getEmail();"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" searchPage.clickSearchButton();"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" String studentDetails \u003d getExpectedStudentDetails(student);"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" String studentManageAccountLink \u003d getExpectedStudentManageAccountLink(student);"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" String studentHomePageLink \u003d getExpectedStudentHomePageLink(student);"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" int numExpandedRows \u003d getExpectedNumExpandedRows(student);"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyStudentRowContent(student, course, studentDetails, studentManageAccountLink,"},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" studentHomePageLink);"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyStudentExpandedLinks(student, numExpandedRows);"},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Reset student google id\");"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" searchPage.resetStudentGoogleId(student);"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" student.setGoogleId(null);"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyStudentRowContentAfterReset(student, course);"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Regenerate registration key for a course student\");"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" searchPage.clickExpandStudentLinks();"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":" String originalJoinLink \u003d searchPage.getStudentJoinLink(student);"},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" searchPage.regenerateStudentKey(student);"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyRegenerateStudentKey(student, originalJoinLink);"},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" searchPage.waitForPageToLoad();"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Search for instructor email\");"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" searchPage.clearSearchBox();"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" searchContent \u003d instructor.getEmail();"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" searchPage.clickSearchButton();"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":" String instructorManageAccountLink \u003d getExpectedInstructorManageAccountLink(instructor);"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" String instructorHomePageLink \u003d getExpectedInstructorHomePageLink(instructor);"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyInstructorRowContent(instructor, course, instructorManageAccountLink,"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" instructorHomePageLink);"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyInstructorExpandedLinks(instructor);"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Reset instructor google id\");"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":" searchPage.resetInstructorGoogleId(instructor);"},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyInstructorRowContentAfterReset(instructor, course);"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Regenerate registration key for an instructor\");"},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" searchPage.clickExpandInstructorLinks();"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" originalJoinLink \u003d searchPage.getInstructorJoinLink(instructor);"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" searchPage.regenerateInstructorKey(instructor);"},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyRegenerateInstructorKey(instructor, originalJoinLink);"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" searchPage.waitForPageToLoad();"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Search for account request by email\");"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" searchPage.clearSearchBox();"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" searchContent \u003d accountRequest.getEmail();"},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" searchPage.clickSearchButton();"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyAccountRequestRowContent(accountRequest);"},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyAccountRequestExpandedLinks(accountRequest);"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Search common search key\");"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":" searchPage.clearSearchBox();"},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" searchContent \u003d \"Course1\";"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" searchPage.clickSearchButton();"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyStudentRowContentAfterReset(student, course);"},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyInstructorRowContentAfterReset(instructor, course);"},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyAccountRequestRowContent(accountRequest);"},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Expand and collapse links\");"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":" searchPage.verifyLinkExpansionButtons(student, instructor, accountRequest);"},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Reset account request successful\");"},{"lineNumber":114,"author":{"gitId":"domoberzin"},"content":" searchContent \u003d \"ASearch.instructor1@gmail.tmt\";"},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":" searchPage.clearSearchBox();"},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" searchPage.clickSearchButton();"},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":" searchPage.clickResetAccountRequestButton(accountRequest);"},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" assertNull(BACKDOOR.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()).getRegisteredAt());"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case: Delete account request successful\");"},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":" accountRequest \u003d testData.accountRequests.get(\"unregisteredInstructor1\");"},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" searchContent \u003d accountRequest.getEmail();"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" searchPage.clearSearchBox();"},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":" searchPage.inputSearchContent(searchContent);"},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" searchPage.clickSearchButton();"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" searchPage.clickDeleteAccountRequestButton(accountRequest);"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" assertNull(BACKDOOR.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()));"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" private String getExpectedStudentDetails(Student student) {"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":" return String.format(\"%s [%s] (%s)\", student.getCourse().getId(),"},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" student.getSection() \u003d\u003d null"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" ? Const.DEFAULT_SECTION"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":" : student.getSection().getName(), student.getTeam().getName());"},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" private String getExpectedStudentHomePageLink(Student student) {"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":" return student.isRegistered() ? createFrontendUrl(Const.WebPageURIs.STUDENT_HOME_PAGE)"},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" .withUserId(student.getGoogleId())"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" .toAbsoluteString()"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" : \"\";"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" private String getExpectedStudentManageAccountLink(Student student) {"},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" return student.isRegistered() ? createFrontendUrl(Const.WebPageURIs.ADMIN_ACCOUNTS_PAGE)"},{"lineNumber":147,"author":{"gitId":"domoberzin"},"content":" .withParam(Const.ParamsNames.INSTRUCTOR_ID, student.getGoogleId())"},{"lineNumber":148,"author":{"gitId":"domoberzin"},"content":" .toAbsoluteString()"},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":" : \"\";"},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":151,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":152,"author":{"gitId":"domoberzin"},"content":" private int getExpectedNumExpandedRows(Student student) {"},{"lineNumber":153,"author":{"gitId":"domoberzin"},"content":" int expectedNumExpandedRows \u003d 2;"},{"lineNumber":154,"author":{"gitId":"domoberzin"},"content":" for (FeedbackSession sessions : testData.feedbackSessions.values()) {"},{"lineNumber":155,"author":{"gitId":"domoberzin"},"content":" if (sessions.getCourse().equals(student.getCourse())) {"},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":" expectedNumExpandedRows +\u003d 1;"},{"lineNumber":157,"author":{"gitId":"domoberzin"},"content":" if (sessions.getResultsVisibleFromTime().isBefore(Instant.now())) {"},{"lineNumber":158,"author":{"gitId":"domoberzin"},"content":" expectedNumExpandedRows +\u003d 1;"},{"lineNumber":159,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":160,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":161,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":162,"author":{"gitId":"domoberzin"},"content":" return expectedNumExpandedRows;"},{"lineNumber":163,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":164,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":165,"author":{"gitId":"domoberzin"},"content":" private String getExpectedInstructorHomePageLink(Instructor instructor) {"},{"lineNumber":166,"author":{"gitId":"domoberzin"},"content":" String googleId \u003d instructor.isRegistered() ? instructor.getGoogleId() : \"\";"},{"lineNumber":167,"author":{"gitId":"domoberzin"},"content":" return createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_HOME_PAGE)"},{"lineNumber":168,"author":{"gitId":"domoberzin"},"content":" .withUserId(googleId)"},{"lineNumber":169,"author":{"gitId":"domoberzin"},"content":" .toAbsoluteString();"},{"lineNumber":170,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":171,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":172,"author":{"gitId":"domoberzin"},"content":" private String getExpectedInstructorManageAccountLink(Instructor instructor) {"},{"lineNumber":173,"author":{"gitId":"domoberzin"},"content":" String googleId \u003d instructor.isRegistered() ? instructor.getGoogleId() : \"\";"},{"lineNumber":174,"author":{"gitId":"domoberzin"},"content":" return createFrontendUrl(Const.WebPageURIs.ADMIN_ACCOUNTS_PAGE)"},{"lineNumber":175,"author":{"gitId":"domoberzin"},"content":" .withParam(Const.ParamsNames.INSTRUCTOR_ID, googleId)"},{"lineNumber":176,"author":{"gitId":"domoberzin"},"content":" .toAbsoluteString();"},{"lineNumber":177,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":178,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":179,"author":{"gitId":"domoberzin"},"content":" @AfterClass"},{"lineNumber":180,"author":{"gitId":"domoberzin"},"content":" public void classTeardown() {"},{"lineNumber":181,"author":{"gitId":"domoberzin"},"content":" for (AccountRequest request : testData.accountRequests.values()) {"},{"lineNumber":182,"author":{"gitId":"domoberzin"},"content":" BACKDOOR.deleteAccountRequest(request.getEmail(), request.getInstitute());"},{"lineNumber":183,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":184,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":185,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":185}},{"path":"src/e2e/java/teammates/e2e/cases/sql/BaseE2ETestCase.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.nio.file.Files;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.nio.file.Paths;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.ITestContext;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.HttpRequestFailedException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.AppPage;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.Browser;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.DevServerLoginPage;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.e2e.pageobjects.HomePage;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.e2e.util.BackDoor;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.e2e.util.EmailAccount;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.test.FileHelper;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.test.ThreadHelper;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackQuestionData;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponseData;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Base class for all browser tests."},{"lineNumber":35,"author":{"gitId":"-"},"content":" *"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis type of test has no knowledge of the workings of the application,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * and can only communicate via the UI or via {@link BackDoor} to obtain/transmit data."},{"lineNumber":38,"author":{"gitId":"-"},"content":" */"},{"lineNumber":39,"author":{"gitId":"-"},"content":"public abstract class BaseE2ETestCase extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Backdoor used to call APIs."},{"lineNumber":43,"author":{"gitId":"-"},"content":" */"},{"lineNumber":44,"author":{"gitId":"-"},"content":" protected static final BackDoor BACKDOOR \u003d BackDoor.getInstance();"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * DataBundle used in tests."},{"lineNumber":48,"author":{"gitId":"-"},"content":" */"},{"lineNumber":49,"author":{"gitId":"-"},"content":" protected SqlDataBundle testData;"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" private Browser browser;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public void baseClassSetup() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" prepareTestData();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" prepareBrowser();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Prepares the browser used for the current test."},{"lineNumber":61,"author":{"gitId":"-"},"content":" */"},{"lineNumber":62,"author":{"gitId":"-"},"content":" protected void prepareBrowser() {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" browser \u003d new Browser();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * Prepares the test data used for the current test."},{"lineNumber":68,"author":{"gitId":"-"},"content":" */"},{"lineNumber":69,"author":{"gitId":"-"},"content":" protected abstract void prepareTestData();"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * Contains all the tests for the page."},{"lineNumber":73,"author":{"gitId":"-"},"content":" *"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis approach is chosen so that setup and teardown are only needed once per test page,"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * thereby saving time. While it necessitates failed tests to be restarted from the beginning,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * test failures are rare and thus not causing significant overhead."},{"lineNumber":77,"author":{"gitId":"-"},"content":" */"},{"lineNumber":78,"author":{"gitId":"-"},"content":" protected abstract void testAll();"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":81,"author":{"gitId":"-"},"content":" protected String getTestDataFolder() {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return TestProperties.TEST_DATA_FOLDER;"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void baseClassTearDown(ITestContext context) {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" if (browser \u003d\u003d null) {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":" boolean isSuccess \u003d context.getFailedTests().getAllMethods()"},{"lineNumber":91,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":92,"author":{"gitId":"-"},"content":" .noneMatch(method -\u003e method.getConstructorOrMethod().getMethod().getDeclaringClass() \u003d\u003d this.getClass());"},{"lineNumber":93,"author":{"gitId":"-"},"content":" if (isSuccess || TestProperties.CLOSE_BROWSER_ON_FAILURE) {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" browser.close();"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * Creates an {@link AppUrl} for the supplied {@code relativeUrl} parameter."},{"lineNumber":100,"author":{"gitId":"-"},"content":" * The base URL will be the value of test.app.frontend.url in test.properties."},{"lineNumber":101,"author":{"gitId":"-"},"content":" * {@code relativeUrl} must start with a \"/\"."},{"lineNumber":102,"author":{"gitId":"-"},"content":" */"},{"lineNumber":103,"author":{"gitId":"-"},"content":" protected static AppUrl createFrontendUrl(String relativeUrl) {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" return new AppUrl(TestProperties.TEAMMATES_FRONTEND_URL + relativeUrl);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":108,"author":{"gitId":"-"},"content":" * Creates an {@link AppUrl} for the supplied {@code relativeUrl} parameter."},{"lineNumber":109,"author":{"gitId":"-"},"content":" * The base URL will be the value of test.app.backend.url in test.properties."},{"lineNumber":110,"author":{"gitId":"-"},"content":" * {@code relativeUrl} must start with a \"/\"."},{"lineNumber":111,"author":{"gitId":"-"},"content":" */"},{"lineNumber":112,"author":{"gitId":"-"},"content":" protected static AppUrl createBackendUrl(String relativeUrl) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" return new AppUrl(TestProperties.TEAMMATES_BACKEND_URL + relativeUrl);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Logs in to a page using the given credentials."},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" protected \u003cT extends AppPage\u003e T loginToPage(AppUrl url, Class\u003cT\u003e typeOfPage, String userId) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // When not using dev server, Google blocks log in by automation."},{"lineNumber":121,"author":{"gitId":"-"},"content":" // To work around that, we inject the user cookie directly into the browser session."},{"lineNumber":122,"author":{"gitId":"-"},"content":" if (!TestProperties.isDevServer()) {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" // In order for the cookie injection to work, we need to be in the domain."},{"lineNumber":124,"author":{"gitId":"-"},"content":" // Use the home page to minimize the page load time."},{"lineNumber":125,"author":{"gitId":"-"},"content":" browser.goToUrl(TestProperties.TEAMMATES_FRONTEND_URL);"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" String cookieValue \u003d BACKDOOR.getUserCookie(userId);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" browser.addCookie(Const.SecurityConfig.AUTH_COOKIE_NAME, cookieValue, true, true);"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" return getNewPageInstance(url, typeOfPage);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" // This will be redirected to the dev server login page."},{"lineNumber":134,"author":{"gitId":"-"},"content":" browser.goToUrl(url.toAbsoluteString());"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" DevServerLoginPage loginPage \u003d AppPage.getNewPageInstance(browser, DevServerLoginPage.class);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" loginPage.loginAsUser(userId);"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" return getNewPageInstance(url, typeOfPage);"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * Logs in to a page using admin credentials."},{"lineNumber":144,"author":{"gitId":"-"},"content":" */"},{"lineNumber":145,"author":{"gitId":"-"},"content":" protected \u003cT extends AppPage\u003e T loginAdminToPage(AppUrl url, Class\u003cT\u003e typeOfPage) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" return loginToPage(url, typeOfPage, TestProperties.TEST_ADMIN);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":150,"author":{"gitId":"-"},"content":" * Equivalent to clicking the \u0027logout\u0027 link in the top menu of the page."},{"lineNumber":151,"author":{"gitId":"-"},"content":" */"},{"lineNumber":152,"author":{"gitId":"-"},"content":" protected void logout() {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" AppUrl url \u003d createBackendUrl(Const.WebPageURIs.LOGOUT);"},{"lineNumber":154,"author":{"gitId":"-"},"content":" if (!TestProperties.TEAMMATES_FRONTEND_URL.equals(TestProperties.TEAMMATES_BACKEND_URL)) {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" url \u003d url.withParam(\"frontendUrl\", TestProperties.TEAMMATES_FRONTEND_URL);"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" browser.goToUrl(url.toAbsoluteString());"},{"lineNumber":159,"author":{"gitId":"-"},"content":" AppPage.getNewPageInstance(browser, HomePage.class).waitForPageToLoad();"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":163,"author":{"gitId":"-"},"content":" * Deletes file with fileName from the downloads folder."},{"lineNumber":164,"author":{"gitId":"-"},"content":" */"},{"lineNumber":165,"author":{"gitId":"-"},"content":" protected void deleteDownloadsFile(String fileName) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" String filePath \u003d TestProperties.TEST_DOWNLOADS_FOLDER + fileName;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" FileHelper.deleteFile(filePath);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":171,"author":{"gitId":"-"},"content":" * Verifies downloaded file has correct fileName and contains expected content."},{"lineNumber":172,"author":{"gitId":"-"},"content":" */"},{"lineNumber":173,"author":{"gitId":"-"},"content":" protected void verifyDownloadedFile(String expectedFileName, List\u003cString\u003e expectedContent) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" String filePath \u003d TestProperties.TEST_DOWNLOADS_FOLDER + expectedFileName;"},{"lineNumber":175,"author":{"gitId":"-"},"content":" int retryLimit \u003d TestProperties.TEST_TIMEOUT;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" boolean actual \u003d Files.exists(Paths.get(filePath));"},{"lineNumber":177,"author":{"gitId":"-"},"content":" while (!actual \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":179,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":180,"author":{"gitId":"-"},"content":" actual \u003d Files.exists(Paths.get(filePath));"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" String actualContent \u003d FileHelper.readFile(filePath);"},{"lineNumber":186,"author":{"gitId":"-"},"content":" for (String content : expectedContent) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" assertTrue(actualContent.contains(content));"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":195,"author":{"gitId":"-"},"content":" * Visits the URL and gets the page object representation of the visited web page in the browser."},{"lineNumber":196,"author":{"gitId":"-"},"content":" */"},{"lineNumber":197,"author":{"gitId":"-"},"content":" protected \u003cT extends AppPage\u003e T getNewPageInstance(AppUrl url, Class\u003cT\u003e typeOfPage) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" browser.goToUrl(url.toAbsoluteString());"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return AppPage.getNewPageInstance(browser, typeOfPage);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":203,"author":{"gitId":"-"},"content":" * Verifies that email with subject is found in inbox."},{"lineNumber":204,"author":{"gitId":"-"},"content":" * Email used must be an authentic gmail account."},{"lineNumber":205,"author":{"gitId":"-"},"content":" */"},{"lineNumber":206,"author":{"gitId":"-"},"content":" protected void verifyEmailSent(String email, String subject) {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" if (TestProperties.isDevServer() || !TestProperties.INCLUDE_EMAIL_VERIFICATION) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":" if (!TestProperties.TEST_EMAIL.equals(email)) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" fail(\"Email verification is allowed only on preset test email.\");"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":" EmailAccount emailAccount \u003d new EmailAccount(email);"},{"lineNumber":214,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" emailAccount.getUserAuthenticated();"},{"lineNumber":216,"author":{"gitId":"-"},"content":" int retryLimit \u003d 5;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" boolean actual \u003d emailAccount.isRecentEmailWithSubjectPresent(subject, TestProperties.TEST_SENDER_EMAIL);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" while (!actual \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":221,"author":{"gitId":"-"},"content":" actual \u003d emailAccount.isRecentEmailWithSubjectPresent(subject, TestProperties.TEST_SENDER_EMAIL);"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":224,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" fail(\"Failed to verify email sent:\" + e);"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }"},{"lineNumber":227,"author":{"gitId":"-"},"content":" }"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":230,"author":{"gitId":"-"},"content":" * Removes and restores the databundle using BACKDOOR."},{"lineNumber":231,"author":{"gitId":"-"},"content":" */"},{"lineNumber":232,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":233,"author":{"gitId":"-"},"content":" protected SqlDataBundle doRemoveAndRestoreDataBundle(SqlDataBundle testData) {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" return BACKDOOR.removeAndRestoreSqlDataBundle(testData);"},{"lineNumber":236,"author":{"gitId":"-"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":238,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":" FeedbackQuestionData getFeedbackQuestion(String courseId, String feedbackSessionName, int qnNumber) {"},{"lineNumber":243,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackQuestionData(courseId, feedbackSessionName, qnNumber);"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":247,"author":{"gitId":"-"},"content":" protected FeedbackQuestionData getFeedbackQuestion(FeedbackQuestion fq) {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" return getFeedbackQuestion(fq.getCourseId(), fq.getFeedbackSession().getName(), fq.getQuestionNumber());"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":" FeedbackResponseData getFeedbackResponse(String questionId, String giver, String recipient) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" return BACKDOOR.getFeedbackResponseData(questionId, giver, recipient);"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":""},{"lineNumber":255,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":256,"author":{"gitId":"-"},"content":" protected FeedbackResponseData getFeedbackResponse(FeedbackResponse fr) {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" return getFeedbackResponse(fr.getFeedbackQuestion().getId().toString(), fr.getGiver(), fr.getRecipient());"},{"lineNumber":258,"author":{"gitId":"-"},"content":" }"},{"lineNumber":259,"author":{"gitId":"-"},"content":""},{"lineNumber":260,"author":{"gitId":"-"},"content":" StudentData getStudent(String courseId, String studentEmailAddress) {"},{"lineNumber":261,"author":{"gitId":"-"},"content":" return BACKDOOR.getStudentData(courseId, studentEmailAddress);"},{"lineNumber":262,"author":{"gitId":"-"},"content":" }"},{"lineNumber":263,"author":{"gitId":"-"},"content":""},{"lineNumber":264,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":265,"author":{"gitId":"-"},"content":" protected StudentData getStudent(Student student) {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" return getStudent(student.getCourseId(), student.getEmail());"},{"lineNumber":267,"author":{"gitId":"-"},"content":" }"},{"lineNumber":268,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":269,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":270,"author":{"gitId":"domoberzin"},"content":" * Puts the documents in the database using BACKDOOR."},{"lineNumber":271,"author":{"gitId":"domoberzin"},"content":" * @param dataBundle the data to be put in the database"},{"lineNumber":272,"author":{"gitId":"domoberzin"},"content":" * @return the result of the operation"},{"lineNumber":273,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":274,"author":{"gitId":"domoberzin"},"content":" protected String putDocuments(SqlDataBundle dataBundle) {"},{"lineNumber":275,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":276,"author":{"gitId":"domoberzin"},"content":" return BACKDOOR.putSqlDocuments(dataBundle);"},{"lineNumber":277,"author":{"gitId":"domoberzin"},"content":" } catch (HttpRequestFailedException e) {"},{"lineNumber":278,"author":{"gitId":"domoberzin"},"content":" e.printStackTrace();"},{"lineNumber":279,"author":{"gitId":"domoberzin"},"content":" return null;"},{"lineNumber":280,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":281,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":14,"-":268}},{"path":"src/e2e/java/teammates/e2e/cases/sql/FeedbackMcqQuestionE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dishenggg"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import java.util.stream.Collectors;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqQuestionDetails;"},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqResponseDetails;"},{"lineNumber":11,"author":{"gitId":"dishenggg"},"content":"import teammates.e2e.pageobjects.FeedbackSubmitPage;"},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"import teammates.e2e.pageobjects.InstructorFeedbackEditPage;"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"dishenggg"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SESSION_EDIT_PAGE},"},{"lineNumber":18,"author":{"gitId":"dishenggg"},"content":" * {@link Const.WebPageURIs#SESSION_SUBMISSION_PAGE}"},{"lineNumber":19,"author":{"gitId":"dishenggg"},"content":" * specifically for MCQ questions."},{"lineNumber":20,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":21,"author":{"gitId":"dishenggg"},"content":"public class FeedbackMcqQuestionE2ETest extends BaseFeedbackQuestionE2ETest {"},{"lineNumber":22,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":23,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"dishenggg"},"content":" protected void prepareTestData() {"},{"lineNumber":25,"author":{"gitId":"dishenggg"},"content":" testData \u003d removeAndRestoreDataBundle(loadSqlDataBundle(\"/FeedbackMcqQuestionE2ESqlTest.json\"));"},{"lineNumber":26,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" instructor \u003d testData.instructors.get(\"instructor\");"},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":" course \u003d testData.courses.get(\"course\");"},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":" feedbackSession \u003d testData.feedbackSessions.get(\"openSession\");"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":" student \u003d testData.students.get(\"alice.tmms@FMcqQn.CS2104\");"},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":" public void testAll() {"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" testEditPage();"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" logout();"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":" testSubmitPage();"},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":" protected void testEditPage() {"},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":" InstructorFeedbackEditPage feedbackEditPage \u003d loginToFeedbackEditPage();"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion loadedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\");"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" FeedbackMcqQuestionDetails questionDetails \u003d (FeedbackMcqQuestionDetails) loadedQuestion"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" .getQuestionDetailsCopy();"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMcqQuestionDetails(1, questionDetails);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" ______TS(\"add new question\");"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" // add new question exactly like loaded question"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":" loadedQuestion.setQuestionNumber(2);"},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.addMcqQuestion(loadedQuestion);"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMcqQuestionDetails(2, questionDetails);"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" ______TS(\"copy question\");"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion copiedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForSecondSession\");"},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":" questionDetails \u003d (FeedbackMcqQuestionDetails) copiedQuestion.getQuestionDetailsCopy();"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.copyQuestion(copiedQuestion.getCourseId(),"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.setFeedbackSession(feedbackSession);"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.setQuestionNumber(3);"},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMcqQuestionDetails(3, questionDetails);"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(copiedQuestion);"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":" ______TS(\"edit question\");"},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":" questionDetails \u003d (FeedbackMcqQuestionDetails) loadedQuestion.getQuestionDetailsCopy();"},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":" questionDetails.setHasAssignedWeights(false);"},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMcqWeights(new ArrayList\u003c\u003e());"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" questionDetails.setOtherEnabled(false);"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" questionDetails.setQuestionDropdownEnabled(false);"},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMcqOtherWeight(0);"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e choices \u003d questionDetails.getMcqChoices();"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" choices.add(\"Edited choice\");"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMcqChoices(choices);"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" loadedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\").makeDeepCopy(feedbackSession);"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":" loadedQuestion.setQuestionDetails(questionDetails);"},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.editMcqQuestion(2, questionDetails);"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.waitForPageToLoad();"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMcqQuestionDetails(2, questionDetails);"},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":" protected void testSubmitPage() {"},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" FeedbackSubmitPage feedbackSubmitPage \u003d loginToFeedbackSubmitPage();"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":93,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":94,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion question \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\");"},{"lineNumber":95,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.verifyMcqQuestion(1, \"\","},{"lineNumber":96,"author":{"gitId":"dishenggg"},"content":" (FeedbackMcqQuestionDetails) question.getQuestionDetailsCopy());"},{"lineNumber":97,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":98,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify question with generated options\");"},{"lineNumber":99,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.verifyGeneratedMcqQuestion(3, \"\", getGeneratedStudentOptions());"},{"lineNumber":100,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":101,"author":{"gitId":"dishenggg"},"content":" ______TS(\"submit response\");"},{"lineNumber":102,"author":{"gitId":"dishenggg"},"content":" FeedbackResponse response \u003d getResponse(question, false, \"UI\");"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.fillMcqResponse(1, \"\", response);"},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":107,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":108,"author":{"gitId":"dishenggg"},"content":" // ______TS(\"check previous response\");"},{"lineNumber":109,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":110,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.verifyMcqResponse(1, \"\", response);"},{"lineNumber":111,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":112,"author":{"gitId":"dishenggg"},"content":" // ______TS(\"edit response\");"},{"lineNumber":113,"author":{"gitId":"dishenggg"},"content":" // response \u003d getResponse(questionId, true, \"This is the edited response.\");"},{"lineNumber":114,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.fillMcqResponse(1, \"\", response);"},{"lineNumber":115,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":116,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":117,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":118,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.verifyMcqResponse(1, \"\", response);"},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":" private List\u003cString\u003e getGeneratedStudentOptions() {"},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" return testData.students.values().stream()"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":" .filter(s -\u003e s.getCourse().equals(student.getCourse()))"},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" .map(s -\u003e s.getName() + \" (\" + s.getTeam().getName() + \")\")"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" .collect(Collectors.toList());"},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":" private FeedbackResponse getResponse(FeedbackQuestion feedbackQuestion, boolean isOther, String answer) {"},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" FeedbackMcqResponseDetails details \u003d new FeedbackMcqResponseDetails();"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":" if (isOther) {"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" details.setOther(true);"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":" details.setOtherFieldContent(answer);"},{"lineNumber":134,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" details.setAnswer(answer);"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":" return FeedbackResponse.makeResponse(feedbackQuestion, student.getEmail(), null, instructor.getEmail(), null,"},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":" details);"},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":140,"author":{"gitId":"dishenggg"},"content":"}"}],"authorContributionMap":{"dishenggg":140}},{"path":"src/e2e/java/teammates/e2e/cases/sql/FeedbackMsqQuestionE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dishenggg"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import java.util.Arrays;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import java.util.stream.Collectors;"},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":11,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqResponseDetails;"},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.Const;"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":"import teammates.e2e.pageobjects.FeedbackSubmitPage;"},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":"import teammates.e2e.pageobjects.InstructorFeedbackEditPage;"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":17,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":19,"author":{"gitId":"dishenggg"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"dishenggg"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SESSION_EDIT_PAGE},"},{"lineNumber":21,"author":{"gitId":"dishenggg"},"content":" * {@link Const.WebPageURIs#SESSION_SUBMISSION_PAGE}"},{"lineNumber":22,"author":{"gitId":"dishenggg"},"content":" * specifically for msq questions."},{"lineNumber":23,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":24,"author":{"gitId":"dishenggg"},"content":"public class FeedbackMsqQuestionE2ETest extends BaseFeedbackQuestionE2ETest {"},{"lineNumber":25,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":26,"author":{"gitId":"dishenggg"},"content":" protected void prepareTestData() {"},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" testData \u003d removeAndRestoreDataBundle(loadSqlDataBundle(\"/FeedbackMsqQuestionE2ESqlTest.json\"));"},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":" instructor \u003d testData.instructors.get(\"instructor\");"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":" course \u003d testData.courses.get(\"course\");"},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" feedbackSession \u003d testData.feedbackSessions.get(\"openSession\");"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":" student \u003d testData.students.get(\"alice.tmms@FMsqQn.CS2104\");"},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" public void testAll() {"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":" testEditPage();"},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":" logout();"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" testSubmitPage();"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" protected void testEditPage() {"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" InstructorFeedbackEditPage feedbackEditPage \u003d loginToFeedbackEditPage();"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion loadedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\")"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" .makeDeepCopy(feedbackSession);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqQuestionDetails questionDetails \u003d (FeedbackMsqQuestionDetails) loadedQuestion"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" .getQuestionDetailsCopy();"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMsqQuestionDetails(1, questionDetails);"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" ______TS(\"add new question\");"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":" // add new question exactly like loaded question"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" loadedQuestion.setQuestionNumber(2);"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.addMsqQuestion(loadedQuestion);"},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMsqQuestionDetails(2, questionDetails);"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" ______TS(\"copy question\");"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion copiedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForSecondSession\");"},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" questionDetails \u003d (FeedbackMsqQuestionDetails) copiedQuestion.getQuestionDetailsCopy();"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.copyQuestion(copiedQuestion.getCourseId(),"},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.setFeedbackSession(feedbackSession);"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" copiedQuestion.setQuestionNumber(3);"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMsqQuestionDetails(3, questionDetails);"},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(copiedQuestion);"},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":" ______TS(\"edit question\");"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" questionDetails \u003d (FeedbackMsqQuestionDetails) loadedQuestion.getQuestionDetailsCopy();"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" questionDetails.setHasAssignedWeights(false);"},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMsqWeights(new ArrayList\u003c\u003e());"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" questionDetails.setOtherEnabled(false);"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMsqOtherWeight(0);"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMaxSelectableChoices(Const.POINTS_NO_VALUE);"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e choices \u003d questionDetails.getMsqChoices();"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":" choices.add(\"Edited choice\");"},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" questionDetails.setMsqChoices(choices);"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" loadedQuestion.setQuestionDetails(questionDetails);"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.editMsqQuestion(2, questionDetails);"},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.waitForPageToLoad();"},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" feedbackEditPage.verifyMsqQuestionDetails(2, questionDetails);"},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":" protected void testSubmitPage() {"},{"lineNumber":93,"author":{"gitId":"dishenggg"},"content":" FeedbackSubmitPage feedbackSubmitPage \u003d loginToFeedbackSubmitPage();"},{"lineNumber":94,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":95,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":96,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion question \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\");"},{"lineNumber":97,"author":{"gitId":"dishenggg"},"content":" Student receiver \u003d testData.students.get(\"benny.tmms@FMsqQn.CS2104\");"},{"lineNumber":98,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.verifyMsqQuestion(1, receiver.getName(),"},{"lineNumber":99,"author":{"gitId":"dishenggg"},"content":" (FeedbackMsqQuestionDetails) question.getQuestionDetailsCopy());"},{"lineNumber":100,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":101,"author":{"gitId":"dishenggg"},"content":" ______TS(\"verify loaded question with generated options\");"},{"lineNumber":102,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion generatedQn \u003d testData.feedbackQuestions.get(\"qn1ForSecondSession\");"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.verifyGeneratedMsqQuestion(3, \"\","},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":" (FeedbackMsqQuestionDetails) generatedQn.getQuestionDetailsCopy(), getGeneratedTeams());"},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":" ______TS(\"submit response\");"},{"lineNumber":107,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e answers \u003d Arrays.asList(\"Leadership\", \"This is the other response.\");"},{"lineNumber":108,"author":{"gitId":"dishenggg"},"content":" FeedbackResponse response \u003d getResponse(question, receiver, answers.get(answers.size() - 1), answers);"},{"lineNumber":109,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.fillMsqResponse(1, receiver.getName(), response);"},{"lineNumber":110,"author":{"gitId":"dishenggg"},"content":" feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":111,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":112,"author":{"gitId":"dishenggg"},"content":" // TODO: uncomment when SubmitFeedbackResponse is working"},{"lineNumber":113,"author":{"gitId":"dishenggg"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":114,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":115,"author":{"gitId":"dishenggg"},"content":" // ______TS(\"check previous response\");"},{"lineNumber":116,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":117,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.verifyMsqResponse(1, receiver.getName(), response);"},{"lineNumber":118,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":" // ______TS(\"edit response\");"},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" // answers \u003d Arrays.asList(\"\");"},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":" // response \u003d getResponse(question, receiver, \"\", answers);"},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.fillMsqResponse(1, receiver.getName(), response);"},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" // feedbackSubmitPage.verifyMsqResponse(1, receiver.getName(), response);"},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" private List\u003cString\u003e getGeneratedTeams() {"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":" return testData.students.values().stream()"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" .filter(s -\u003e s.getCourse().equals(student.getCourse()))"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":" .map(s -\u003e s.getTeam().getName())"},{"lineNumber":134,"author":{"gitId":"dishenggg"},"content":" .distinct()"},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" .collect(Collectors.toList());"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":" private FeedbackResponse getResponse(FeedbackQuestion feedbackQuestion, Student receiver, String other,"},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e answers) {"},{"lineNumber":140,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqResponseDetails details \u003d new FeedbackMsqResponseDetails();"},{"lineNumber":141,"author":{"gitId":"dishenggg"},"content":" if (!other.isEmpty()) {"},{"lineNumber":142,"author":{"gitId":"dishenggg"},"content":" details.setOther(true);"},{"lineNumber":143,"author":{"gitId":"dishenggg"},"content":" details.setOtherFieldContent(other);"},{"lineNumber":144,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":145,"author":{"gitId":"dishenggg"},"content":" details.setAnswers(answers);"},{"lineNumber":146,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":147,"author":{"gitId":"dishenggg"},"content":" return FeedbackResponse.makeResponse(feedbackQuestion, student.getEmail(), student.getSection(),"},{"lineNumber":148,"author":{"gitId":"dishenggg"},"content":" receiver.getEmail(), receiver.getSection(), details);"},{"lineNumber":149,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":150,"author":{"gitId":"dishenggg"},"content":"}"}],"authorContributionMap":{"dishenggg":150}},{"path":"src/e2e/java/teammates/e2e/cases/sql/FeedbackRankOptionQuestionE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsQuestionDetails;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsResponseDetails;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.questions.FeedbackRankQuestionDetails;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import teammates.e2e.pageobjects.FeedbackSubmitPage;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import teammates.e2e.pageobjects.InstructorFeedbackEditPage;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_SESSION_EDIT_PAGE},"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" * {@link Const.WebPageURIs#SESSION_SUBMISSION_PAGE}"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" * specifically for RankOption questions."},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"public class FeedbackRankOptionQuestionE2ETest extends BaseFeedbackQuestionE2ETest {"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" protected void prepareTestData() {"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" testData \u003d removeAndRestoreDataBundle(loadSqlDataBundle(\"/FeedbackRankOptionQuestionE2ESqlTest.json\"));"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" instructor \u003d testData.instructors.get(\"instructor\");"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" course \u003d testData.courses.get(\"course\");"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" feedbackSession \u003d testData.feedbackSessions.get(\"openSession\");"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" student \u003d testData.students.get(\"alice.tmms@FRankOptQn.CS2104\");"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" public void testAll() {"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" testEditPage();"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" logout();"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" testSubmitPage();"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" protected void testEditPage() {"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" InstructorFeedbackEditPage feedbackEditPage \u003d loginToFeedbackEditPage();"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" FeedbackQuestion loadedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\")"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" .makeDeepCopy(feedbackSession);"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" FeedbackRankOptionsQuestionDetails questionDetails \u003d (FeedbackRankOptionsQuestionDetails) loadedQuestion"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" .getQuestionDetailsCopy();"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.verifyRankQuestionDetails(1, questionDetails);"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"add new question\");"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" // add new question exactly like loaded question"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" loadedQuestion.setQuestionNumber(2);"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.addRankOptionsQuestion(loadedQuestion);"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.verifyRankQuestionDetails(2, questionDetails);"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"copy question\");"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" FeedbackQuestion copiedQuestion \u003d testData.feedbackQuestions.get(\"qn1ForSecondSession\");"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" questionDetails \u003d (FeedbackRankOptionsQuestionDetails) copiedQuestion.getQuestionDetailsCopy();"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.copyQuestion(copiedQuestion.getCourseId(),"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" copiedQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" copiedQuestion.setFeedbackSession(feedbackSession);"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" copiedQuestion.setQuestionNumber(3);"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.verifyRankQuestionDetails(3, questionDetails);"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" verifyPresentInDatabase(copiedQuestion);"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"edit question\");"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" questionDetails \u003d (FeedbackRankOptionsQuestionDetails) loadedQuestion.getQuestionDetailsCopy();"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" List\u003cString\u003e options \u003d questionDetails.getOptions();"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" options.remove(0);"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" options.set(1, \"Edited option.\");"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" questionDetails.setOptions(options);"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" questionDetails.setAreDuplicatesAllowed(true);"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" questionDetails.setMaxOptionsToBeRanked(Const.POINTS_NO_VALUE);"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" questionDetails.setMinOptionsToBeRanked(1);"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" loadedQuestion.setQuestionDetails(questionDetails);"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.editRankQuestion(2, questionDetails);"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.waitForPageToLoad();"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" feedbackEditPage.verifyRankQuestionDetails(2, questionDetails);"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" verifyPresentInDatabase(loadedQuestion);"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" protected void testSubmitPage() {"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" FeedbackSubmitPage feedbackSubmitPage \u003d loginToFeedbackSubmitPage();"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"verify loaded question\");"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" FeedbackQuestion question \u003d testData.feedbackQuestions.get(\"qn1ForFirstSession\");"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" Student receiver \u003d testData.students.get(\"benny.tmms@FRankOptQn.CS2104\");"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" feedbackSubmitPage.verifyRankQuestion(1, receiver.getName(),"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" (FeedbackRankQuestionDetails) question.getQuestionDetailsCopy());"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"submit response\");"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponse response \u003d getResponse(question, receiver, Arrays.asList(2, 1, 3,"},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" Const.POINTS_NOT_SUBMITTED));"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" feedbackSubmitPage.fillRankOptionResponse(1, receiver.getName(), response);"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" // ______TS(\"check previous response\");"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage.verifyRankOptionResponse(1, receiver.getName(), response);"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" // ______TS(\"edit response\");"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" // response \u003d getResponse(questionId, receiver,"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" // Arrays.asList(Const.POINTS_NOT_SUBMITTED, 1, 3, 2));"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage.fillRankOptionResponse(1, receiver.getName(), response);"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage.clickSubmitQuestionButton(1);"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage \u003d getFeedbackSubmitPage();"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" // feedbackSubmitPage.verifyRankOptionResponse(1, receiver.getName(), response);"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" // verifyPresentInDatabase(response);"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" private FeedbackResponse getResponse(FeedbackQuestion question, Student receiver, List\u003cInteger\u003e answers) {"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" FeedbackRankOptionsResponseDetails details \u003d new FeedbackRankOptionsResponseDetails();"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" details.setAnswers(answers);"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" return FeedbackResponse.makeResponse(question, student.getEmail(), null, receiver.getEmail(), null, details);"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":128}},{"path":"src/e2e/java/teammates/e2e/cases/sql/InstructorNotificationsPageE2ETest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"package teammates.e2e.cases.sql;"},{"lineNumber":2,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import java.util.Set;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":"import java.util.stream.Collectors;"},{"lineNumber":5,"author":{"gitId":"yuanxi1"},"content":"import java.util.stream.Stream;"},{"lineNumber":6,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.AppUrl;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"yuanxi1"},"content":"import teammates.e2e.pageobjects.InstructorNotificationsPage;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":15,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":" * SUT: {@link Const.WebPageURIs#INSTRUCTOR_NOTIFICATIONS_PAGE}."},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":20,"author":{"gitId":"yuanxi1"},"content":"public class InstructorNotificationsPageE2ETest extends BaseE2ETestCase {"},{"lineNumber":21,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":" protected void prepareTestData() {"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":" testData \u003d loadSqlDataBundle(\"/InstructorNotificationsPageE2ESqlTest.json\");"},{"lineNumber":25,"author":{"gitId":"yuanxi1"},"content":" removeAndRestoreDataBundle(testData);"},{"lineNumber":26,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":29,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" protected void testAll() {"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d testData.accounts.get(\"INotifs.instr\");"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":" AppUrl notificationsPageUrl \u003d createFrontendUrl(Const.WebPageURIs.INSTRUCTOR_NOTIFICATIONS_PAGE);"},{"lineNumber":33,"author":{"gitId":"yuanxi1"},"content":" InstructorNotificationsPage notificationsPage \u003d loginToPage(notificationsPageUrl, InstructorNotificationsPage.class,"},{"lineNumber":34,"author":{"gitId":"yuanxi1"},"content":" account.getGoogleId());"},{"lineNumber":35,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"verify that only active notifications with correct target user are shown\");"},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":" Notification[] notShownNotifications \u003d {"},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification2\"),"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"expiredNotification1\"),"},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" Notification[] shownNotifications \u003d {"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification1\"),"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification3\"),"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification4\"),"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" Notification[] readNotifications \u003d {"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" testData.notifications.get(\"notification4\"),"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" Set\u003cString\u003e readNotificationsIds \u003d Stream.of(readNotifications)"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" .map(readNotification -\u003e readNotification.getId().toString())"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" .collect(Collectors.toSet());"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" notificationsPage.verifyNotShownNotifications(notShownNotifications);"},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":" notificationsPage.verifyShownNotifications(shownNotifications, readNotificationsIds);"},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"mark notification as read\");"},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" Notification notificationToMarkAsRead \u003d testData.notifications.get(\"notification3\");"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" notificationsPage.markNotificationAsRead(notificationToMarkAsRead);"},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" notificationsPage.verifyStatusMessage(\"Notification marked as read.\");"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":" // Verify that account\u0027s readNotifications attribute is updated"},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":" AccountData accountFromDb \u003d BACKDOOR.getAccountData(account.getGoogleId());"},{"lineNumber":65,"author":{"gitId":"yuanxi1"},"content":" assertTrue(accountFromDb.getReadNotifications().containsKey(notificationToMarkAsRead.getId().toString()));"},{"lineNumber":66,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":67,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"notification banner is not visible\");"},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" assertFalse(notificationsPage.isBannerVisible());"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" @AfterClass"},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":" public void classTeardown() {"},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" for (Notification notification : testData.notifications.values()) {"},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" BACKDOOR.deleteNotification(notification.getId());"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":"}"}],"authorContributionMap":{"yuanxi1":78}},{"path":"src/e2e/java/teammates/e2e/pageobjects/AdminNotificationsPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.time.ZoneId;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.ZonedDateTime;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.FindBy;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Page Object Model for the admin notifications page."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class AdminNotificationsPage extends AppPage {"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-add-notification\")"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private WebElement addNotificationButton;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-create-notification\")"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private WebElement createNotificationButton;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-edit-notification\")"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private WebElement editNotificationButton;"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notifications-timezone\")"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private WebElement notificationsTimezone;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-target-user\")"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private WebElement notificationTargetUserDropdown;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-style\")"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private WebElement notificationStyleDropdown;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-title\")"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private WebElement notificationTitleTextBox;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-message\")"},{"lineNumber":43,"author":{"gitId":"-"},"content":" private WebElement notificationMessageEditor;"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-start-date\")"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private WebElement startDateBox;"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-start-time\")"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private WebElement startTimeDropdown;"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-end-date\")"},{"lineNumber":52,"author":{"gitId":"-"},"content":" private WebElement endDateBox;"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notification-end-time\")"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private WebElement endTimeDropdown;"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"notifications-table\")"},{"lineNumber":58,"author":{"gitId":"-"},"content":" private WebElement notificationsTable;"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" public AdminNotificationsPage(Browser browser) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":65,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" return getPageSource().contains(\"Notifications\");"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" public void verifyNotificationsTableRow(Notification notification) {"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" WebElement notificationRow \u003d notificationsTable.findElement(By.id(notification.getId().toString()));"},{"lineNumber":71,"author":{"gitId":"-"},"content":" verifyTableRowValues(notificationRow, getNotificationTableDisplayDetails(notification));"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" public void addNotification(Notification notification) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" clickAddNotificationButton();"},{"lineNumber":76,"author":{"gitId":"-"},"content":" waitForElementPresence(By.id(\"btn-create-notification\"));"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" fillNotificationForm(notification);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" clickCreateNotificationButton();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" public void editNotification(Notification notification) {"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" WebElement notificationRow \u003d notificationsTable.findElement(By.id(notification.getId().toString()));"},{"lineNumber":86,"author":{"gitId":"-"},"content":" WebElement editButton \u003d notificationRow.findElement(By.className(\"btn-light\"));"},{"lineNumber":87,"author":{"gitId":"-"},"content":" editButton.click();"},{"lineNumber":88,"author":{"gitId":"-"},"content":" waitForElementPresence(By.id(\"btn-edit-notification\"));"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" fillNotificationForm(notification);"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" clickEditNotificationButton();"},{"lineNumber":93,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" public void deleteNotification(Notification notification) {"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" WebElement notificationRow \u003d notificationsTable.findElement(By.id(notification.getId().toString()));"},{"lineNumber":98,"author":{"gitId":"-"},"content":" WebElement deleteButton \u003d notificationRow.findElement(By.className(\"btn-danger\"));"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" deleteButton.click();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":102,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" public void fillNotificationForm(Notification notification) {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(notificationTargetUserDropdown, getTargetUserText(notification.getTargetUser()));"},{"lineNumber":107,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(notificationStyleDropdown, getNotificationStyle(notification.getStyle()));"},{"lineNumber":108,"author":{"gitId":"-"},"content":" fillTextBox(notificationTitleTextBox, notification.getTitle());"},{"lineNumber":109,"author":{"gitId":"-"},"content":" setMessage(notification.getMessage());"},{"lineNumber":110,"author":{"gitId":"-"},"content":" setNotificationStartDateTime(notification.getStartTime());"},{"lineNumber":111,"author":{"gitId":"-"},"content":" setNotificationEndDateTime(notification.getEndTime());"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" public String getFirstRowNotificationId() {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e notificationRows \u003d"},{"lineNumber":116,"author":{"gitId":"-"},"content":" notificationsTable.findElement(By.tagName(\"tbody\")).findElements(By.tagName(\"tr\"));"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return notificationRows.get(0).getAttribute(\"id\");"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" public void sortNotificationsTableByDescendingCreateTime() {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" WebElement creationTimeHeader \u003d notificationsTable.findElements(By.tagName(\"th\")).get(5);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" if (creationTimeHeader.findElements(By.className(\"fa-sort-down\")).size() \u003d\u003d 0) {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" click(creationTimeHeader);"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" private void clickAddNotificationButton() {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" click(addNotificationButton);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" private void clickCreateNotificationButton() {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" click(createNotificationButton);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" private void clickEditNotificationButton() {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" click(editNotificationButton);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" private void setMessage(String message) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" writeToRichTextEditor(notificationMessageEditor, message);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" private void setNotificationStartDateTime(Instant startInstant) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" setDateTime(startDateBox, startTimeDropdown, startInstant);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" private void setNotificationEndDateTime(Instant endInstant) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" setDateTime(endDateBox, endTimeDropdown, endInstant);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" private void setDateTime(WebElement dateBox, WebElement timeBox, Instant startInstant) {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" fillDatePicker(dateBox, startInstant, getTimezone());"},{"lineNumber":153,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(timeBox.findElement(By.tagName(\"select\")), getInputTimeString(startInstant));"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":" private String[] getNotificationTableDisplayDetails(Notification notification) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" return new String[] {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" notification.getTitle(),"},{"lineNumber":159,"author":{"gitId":"-"},"content":" getTableDisplayDateString(notification.getStartTime()),"},{"lineNumber":160,"author":{"gitId":"-"},"content":" getTableDisplayDateString(notification.getEndTime()),"},{"lineNumber":161,"author":{"gitId":"-"},"content":" notification.getTargetUser().toString(),"},{"lineNumber":162,"author":{"gitId":"-"},"content":" getNotificationStyle(notification.getStyle()),"},{"lineNumber":163,"author":{"gitId":"-"},"content":" };"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" private String getTimezone() {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return notificationsTimezone.getText().replace(\"All dates are displayed in \", \"\").replace(\" time.\", \"\");"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" private String getInputTimeString(Instant instant) {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" String timezone \u003d getTimezone();"},{"lineNumber":172,"author":{"gitId":"-"},"content":" ZonedDateTime dateTime \u003d instant.atZone(ZoneId.of(timezone));"},{"lineNumber":173,"author":{"gitId":"-"},"content":" if (dateTime.getHour() \u003d\u003d 0 \u0026\u0026 dateTime.getMinute() \u003d\u003d 0) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" return \"23:59H\";"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timezone, \"HH:00\") + \"H\";"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" private String getTableDisplayDateString(Instant date) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(date, getTimezone(), \"d MMM h:mm a\");"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" private String getTargetUserText(NotificationTargetUser userType) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" switch (userType) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" case STUDENT:"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return \"Students\";"},{"lineNumber":187,"author":{"gitId":"-"},"content":" case INSTRUCTOR:"},{"lineNumber":188,"author":{"gitId":"-"},"content":" return \"Instructors\";"},{"lineNumber":189,"author":{"gitId":"-"},"content":" case GENERAL:"},{"lineNumber":190,"author":{"gitId":"-"},"content":" return \"General (for both students and instructors)\";"},{"lineNumber":191,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":192,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" private String getNotificationStyle(NotificationStyle style) {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" switch (style) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" case PRIMARY:"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return \"Primary (blue)\";"},{"lineNumber":200,"author":{"gitId":"-"},"content":" case SECONDARY:"},{"lineNumber":201,"author":{"gitId":"-"},"content":" return \"Secondary (grey)\";"},{"lineNumber":202,"author":{"gitId":"-"},"content":" case SUCCESS:"},{"lineNumber":203,"author":{"gitId":"-"},"content":" return \"Success (green)\";"},{"lineNumber":204,"author":{"gitId":"-"},"content":" case DANGER:"},{"lineNumber":205,"author":{"gitId":"-"},"content":" return \"Danger (red)\";"},{"lineNumber":206,"author":{"gitId":"-"},"content":" case WARNING:"},{"lineNumber":207,"author":{"gitId":"-"},"content":" return \"Warning (yellow)\";"},{"lineNumber":208,"author":{"gitId":"-"},"content":" case INFO:"},{"lineNumber":209,"author":{"gitId":"-"},"content":" return \"Info (cyan)\";"},{"lineNumber":210,"author":{"gitId":"-"},"content":" case LIGHT:"},{"lineNumber":211,"author":{"gitId":"-"},"content":" return \"Light\";"},{"lineNumber":212,"author":{"gitId":"-"},"content":" case DARK:"},{"lineNumber":213,"author":{"gitId":"-"},"content":" return \"Dark\";"},{"lineNumber":214,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":215,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":10,"-":209}},{"path":"src/e2e/java/teammates/e2e/pageobjects/AdminSearchPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertEquals;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertFalse;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertNotEquals;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.openqa.selenium.NoSuchElementException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.FindBy;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Represents the admin home page of the website."},{"lineNumber":27,"author":{"gitId":"-"},"content":" */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"public class AdminSearchPage extends AppPage {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_DETAILS \u003d 1;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_NAME \u003d 2;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_GOOGLE_ID \u003d 3;"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_INSTITUTE \u003d 4;"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_COMMENTS \u003d 5;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final int STUDENT_COL_OPTIONS \u003d 6;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_COURSE_ID \u003d 1;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_NAME \u003d 2;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_GOOGLE_ID \u003d 3;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_INSTITUTE \u003d 4;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private static final int INSTRUCTOR_COL_OPTIONS \u003d 5;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_NAME \u003d 1;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_EMAIL \u003d 2;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_INSTITUTE \u003d 3;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_CREATED_AT \u003d 4;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private static final int ACCOUNT_REQUEST_COL_REGISTERED_AT \u003d 5;"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" private static final String EXPANDED_ROWS_HEADER_EMAIL \u003d \"Email\";"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private static final String EXPANDED_ROWS_HEADER_COURSE_JOIN_LINK \u003d \"Course Join Link\";"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private static final String EXPANDED_ROWS_HEADER_ACCOUNT_REGISTRATION_LINK \u003d \"Account Registration Link\";"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private static final String LINK_TEXT_RESET_GOOGLE_ID \u003d \"Reset Google ID\";"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"search-box\")"},{"lineNumber":54,"author":{"gitId":"-"},"content":" private WebElement inputBox;"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"search-button\")"},{"lineNumber":57,"author":{"gitId":"-"},"content":" private WebElement searchButton;"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"show-student-links\")"},{"lineNumber":60,"author":{"gitId":"-"},"content":" private WebElement expandStudentLinksButton;"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"show-instructor-links\")"},{"lineNumber":63,"author":{"gitId":"-"},"content":" private WebElement expandInstructorLinksButton;"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"show-account-request-links\")"},{"lineNumber":66,"author":{"gitId":"-"},"content":" private WebElement expandAccountRequestLinksButton;"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"hide-student-links\")"},{"lineNumber":69,"author":{"gitId":"-"},"content":" private WebElement collapseStudentLinksButton;"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"hide-instructor-links\")"},{"lineNumber":72,"author":{"gitId":"-"},"content":" private WebElement collapseInstructorLinksButton;"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"hide-account-request-links\")"},{"lineNumber":75,"author":{"gitId":"-"},"content":" private WebElement collapseAccountRequestLinksButton;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" public AdminSearchPage(Browser browser) {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":82,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return getPageSource().contains(\"Admin Search\u003c/h1\u003e\");"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void inputSearchContent(String content) {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" inputBox.sendKeys(content);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" public void clearSearchBox() {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" inputBox.clear();"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" public void clickSearchButton() {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" click(searchButton);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" public void regenerateStudentKey(Student student) {"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" studentRow.findElement(By.xpath(\"//button[text()\u003d\u0027Regenerate key\u0027]\")).click();"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" waitForPageToLoad(true);"},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" public void regenerateStudentKey(StudentAttributes student) {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" studentRow.findElement(By.xpath(\"//button[text()\u003d\u0027Regenerate key\u0027]\")).click();"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":" public void verifyRegenerateStudentKey(Student student, String originalJoinLink) {"},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":" verifyStatusMessage(\"Student\u0027s key for this course has been successfully regenerated,\""},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" + \" and the email has been sent.\");"},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" String regeneratedJoinLink \u003d getStudentJoinLink(student);"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(regeneratedJoinLink, originalJoinLink);"},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" public void verifyRegenerateStudentKey(StudentAttributes student, String originalJoinLink) {"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" verifyStatusMessage(\"Student\u0027s key for this course has been successfully regenerated,\""},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":" + \" and the email has been sent.\");"},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" String regeneratedJoinLink \u003d getStudentJoinLink(student);"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(regeneratedJoinLink, originalJoinLink);"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" public void regenerateInstructorKey(Instructor instructor) {"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" instructorRow.findElement(By.xpath(\"//button[text()\u003d\u0027Regenerate key\u0027]\")).click();"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" waitForPageToLoad(true);"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" public void regenerateInstructorKey(InstructorAttributes instructor) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" instructorRow.findElement(By.xpath(\"//button[text()\u003d\u0027Regenerate key\u0027]\")).click();"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":144,"author":{"gitId":"-"},"content":" waitForPageToLoad(true);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" public void clickExpandStudentLinks() {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" click(expandStudentLinksButton);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" public void clickExpandInstructorLinks() {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" click(expandInstructorLinksButton);"},{"lineNumber":154,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" public void clickExpandAccountRequestLinks() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" click(expandAccountRequestLinksButton);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" public void clickCollapseStudentLinks() {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" click(collapseStudentLinksButton);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" public void clickCollapseInstructorLinks() {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" click(collapseInstructorLinksButton);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":170,"author":{"gitId":"-"},"content":" }"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" public void clickCollapseAccountRequestLinks() {"},{"lineNumber":173,"author":{"gitId":"-"},"content":" click(collapseAccountRequestLinksButton);"},{"lineNumber":174,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" public String removeSpanFromText(String text) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" return text.replace(\"\u003cspan class\u003d\\\"highlighted-text\\\"\u003e\", \"\").replace(\"\u003c/span\u003e\", \"\");"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"domoberzin"},"content":" public WebElement getStudentRow(Student student) {"},{"lineNumber":182,"author":{"gitId":"domoberzin"},"content":" String details \u003d String.format(\"%s [%s] (%s)\", student.getCourse().getId(),"},{"lineNumber":183,"author":{"gitId":"domoberzin"},"content":" student.getSection() \u003d\u003d null"},{"lineNumber":184,"author":{"gitId":"domoberzin"},"content":" ? Const.DEFAULT_SECTION"},{"lineNumber":185,"author":{"gitId":"domoberzin"},"content":" : student.getSection().getName(), student.getTeam().getName());"},{"lineNumber":186,"author":{"gitId":"domoberzin"},"content":" WebElement table \u003d browser.driver.findElement(By.id(\"search-table-student\"));"},{"lineNumber":187,"author":{"gitId":"domoberzin"},"content":" List\u003cWebElement\u003e rows \u003d table.findElements(By.tagName(\"tr\"));"},{"lineNumber":188,"author":{"gitId":"domoberzin"},"content":" for (WebElement row : rows) {"},{"lineNumber":189,"author":{"gitId":"domoberzin"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":190,"author":{"gitId":"domoberzin"},"content":" if (!columns.isEmpty() \u0026\u0026 removeSpanFromText(columns.get(STUDENT_COL_DETAILS - 1)"},{"lineNumber":191,"author":{"gitId":"domoberzin"},"content":" .getAttribute(\"innerHTML\")).contains(details)"},{"lineNumber":192,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 removeSpanFromText(columns.get(STUDENT_COL_NAME - 1)"},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" .getAttribute(\"innerHTML\")).contains(student.getName())) {"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" return row;"},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":" return null;"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" public WebElement getStudentRow(StudentAttributes student) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" String details \u003d String.format(\"%s [%s] (%s)\", student.getCourse(),"},{"lineNumber":202,"author":{"gitId":"-"},"content":" student.getSection() \u003d\u003d null ? Const.DEFAULT_SECTION : student.getSection(), student.getTeam());"},{"lineNumber":203,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d browser.driver.findElements(By.cssSelector(\"#search-table-student tbody tr\"));"},{"lineNumber":204,"author":{"gitId":"-"},"content":" for (WebElement row : rows) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":206,"author":{"gitId":"-"},"content":" if (removeSpanFromText(columns.get(STUDENT_COL_DETAILS - 1)"},{"lineNumber":207,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(details)"},{"lineNumber":208,"author":{"gitId":"-"},"content":" \u0026\u0026 removeSpanFromText(columns.get(STUDENT_COL_NAME - 1)"},{"lineNumber":209,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(student.getName())) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" return row;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":" public String getStudentDetails(WebElement studentRow) {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_DETAILS);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" public String getStudentName(WebElement studentRow) {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_NAME);"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":" public String getStudentGoogleId(WebElement studentRow) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_GOOGLE_ID);"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":" public String getStudentHomeLink(WebElement studentRow) {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" return getColumnLink(studentRow, STUDENT_COL_GOOGLE_ID);"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" public String getStudentInstitute(WebElement studentRow) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_INSTITUTE);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" public String getStudentComments(WebElement studentRow) {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" return getColumnText(studentRow, STUDENT_COL_COMMENTS);"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" public String getStudentManageAccountLink(WebElement studentRow) {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" return getColumnLink(studentRow, STUDENT_COL_OPTIONS);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" public String getStudentEmail(WebElement studentRow) {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(studentRow, EXPANDED_ROWS_HEADER_EMAIL);"},{"lineNumber":246,"author":{"gitId":"-"},"content":" }"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" public String getStudentJoinLink(WebElement studentRow) {"},{"lineNumber":249,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(studentRow, EXPANDED_ROWS_HEADER_COURSE_JOIN_LINK);"},{"lineNumber":250,"author":{"gitId":"-"},"content":" }"},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"domoberzin"},"content":" public String getStudentJoinLink(Student student) {"},{"lineNumber":253,"author":{"gitId":"domoberzin"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":254,"author":{"gitId":"domoberzin"},"content":" return getStudentJoinLink(studentRow);"},{"lineNumber":255,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":256,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":" public String getStudentJoinLink(StudentAttributes student) {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":259,"author":{"gitId":"-"},"content":" return getStudentJoinLink(studentRow);"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"domoberzin"},"content":" public void resetStudentGoogleId(Student student) {"},{"lineNumber":263,"author":{"gitId":"domoberzin"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":264,"author":{"gitId":"domoberzin"},"content":" WebElement link \u003d studentRow.findElement(By.linkText(LINK_TEXT_RESET_GOOGLE_ID));"},{"lineNumber":265,"author":{"gitId":"domoberzin"},"content":" link.click();"},{"lineNumber":266,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":267,"author":{"gitId":"domoberzin"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":268,"author":{"gitId":"domoberzin"},"content":" waitForElementStaleness(link);"},{"lineNumber":269,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":270,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" public void resetStudentGoogleId(StudentAttributes student) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" WebElement link \u003d studentRow.findElement(By.linkText(LINK_TEXT_RESET_GOOGLE_ID));"},{"lineNumber":274,"author":{"gitId":"-"},"content":" link.click();"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":277,"author":{"gitId":"-"},"content":" waitForElementStaleness(link);"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"domoberzin"},"content":" public WebElement getInstructorRow(Instructor instructor) {"},{"lineNumber":281,"author":{"gitId":"domoberzin"},"content":" WebElement table \u003d browser.driver.findElement(By.id(\"search-table-instructor\"));"},{"lineNumber":282,"author":{"gitId":"domoberzin"},"content":" List\u003cWebElement\u003e rows \u003d table.findElements(By.tagName(\"tr\"));"},{"lineNumber":283,"author":{"gitId":"domoberzin"},"content":" for (WebElement row : rows) {"},{"lineNumber":284,"author":{"gitId":"domoberzin"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":285,"author":{"gitId":"domoberzin"},"content":" if (columns.size() \u003e\u003d 3 \u0026\u0026 (removeSpanFromText(columns.get(2)"},{"lineNumber":286,"author":{"gitId":"domoberzin"},"content":" .getAttribute(\"innerHTML\")).contains(instructor.getGoogleId())"},{"lineNumber":287,"author":{"gitId":"domoberzin"},"content":" || removeSpanFromText(columns.get(1)"},{"lineNumber":288,"author":{"gitId":"domoberzin"},"content":" .getAttribute(\"innerHTML\")).contains(instructor.getName()))) {"},{"lineNumber":289,"author":{"gitId":"domoberzin"},"content":" return row;"},{"lineNumber":290,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":291,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":292,"author":{"gitId":"domoberzin"},"content":" return null;"},{"lineNumber":293,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":294,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":" public WebElement getInstructorRow(InstructorAttributes instructor) {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" String courseId \u003d instructor.getCourseId();"},{"lineNumber":297,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d browser.driver.findElements(By.cssSelector(\"#search-table-instructor tbody tr\"));"},{"lineNumber":298,"author":{"gitId":"-"},"content":" for (WebElement row : rows) {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":300,"author":{"gitId":"-"},"content":" if (removeSpanFromText(columns.get(INSTRUCTOR_COL_COURSE_ID - 1)"},{"lineNumber":301,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(courseId)"},{"lineNumber":302,"author":{"gitId":"-"},"content":" \u0026\u0026 removeSpanFromText(columns.get(INSTRUCTOR_COL_NAME - 1)"},{"lineNumber":303,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(instructor.getName())) {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" return row;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" }"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":308,"author":{"gitId":"-"},"content":" }"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" public String getInstructorCourseId(WebElement instructorRow) {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" return getColumnText(instructorRow, INSTRUCTOR_COL_COURSE_ID);"},{"lineNumber":312,"author":{"gitId":"-"},"content":" }"},{"lineNumber":313,"author":{"gitId":"-"},"content":""},{"lineNumber":314,"author":{"gitId":"-"},"content":" public String getInstructorName(WebElement instructorRow) {"},{"lineNumber":315,"author":{"gitId":"-"},"content":" return getColumnText(instructorRow, INSTRUCTOR_COL_NAME);"},{"lineNumber":316,"author":{"gitId":"-"},"content":" }"},{"lineNumber":317,"author":{"gitId":"-"},"content":""},{"lineNumber":318,"author":{"gitId":"-"},"content":" public String getInstructorGoogleId(WebElement instructorRow) {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" return getColumnText(instructorRow, INSTRUCTOR_COL_GOOGLE_ID);"},{"lineNumber":320,"author":{"gitId":"-"},"content":" }"},{"lineNumber":321,"author":{"gitId":"-"},"content":""},{"lineNumber":322,"author":{"gitId":"-"},"content":" public String getInstructorHomePageLink(WebElement instructorRow) {"},{"lineNumber":323,"author":{"gitId":"-"},"content":" return getColumnLink(instructorRow, INSTRUCTOR_COL_GOOGLE_ID);"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" public String getInstructorInstitute(WebElement instructorRow) {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" return getColumnText(instructorRow, INSTRUCTOR_COL_INSTITUTE);"},{"lineNumber":328,"author":{"gitId":"-"},"content":" }"},{"lineNumber":329,"author":{"gitId":"-"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":" public String getInstructorManageAccountLink(WebElement instructorRow) {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" return getColumnLink(instructorRow, INSTRUCTOR_COL_OPTIONS);"},{"lineNumber":332,"author":{"gitId":"-"},"content":" }"},{"lineNumber":333,"author":{"gitId":"-"},"content":""},{"lineNumber":334,"author":{"gitId":"-"},"content":" public String getInstructorEmail(WebElement instructorRow) {"},{"lineNumber":335,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(instructorRow, EXPANDED_ROWS_HEADER_EMAIL);"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" public String getInstructorJoinLink(WebElement instructorRow) {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(instructorRow, EXPANDED_ROWS_HEADER_COURSE_JOIN_LINK);"},{"lineNumber":340,"author":{"gitId":"-"},"content":" }"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"domoberzin"},"content":" public String getInstructorJoinLink(Instructor instructor) {"},{"lineNumber":343,"author":{"gitId":"domoberzin"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":344,"author":{"gitId":"domoberzin"},"content":" return getInstructorJoinLink(instructorRow);"},{"lineNumber":345,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":346,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" public String getInstructorJoinLink(InstructorAttributes instructor) {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":349,"author":{"gitId":"-"},"content":" return getInstructorJoinLink(instructorRow);"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":""},{"lineNumber":352,"author":{"gitId":"domoberzin"},"content":" public void resetInstructorGoogleId(Instructor instructor) {"},{"lineNumber":353,"author":{"gitId":"domoberzin"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":354,"author":{"gitId":"domoberzin"},"content":" WebElement link \u003d instructorRow.findElement(By.linkText(LINK_TEXT_RESET_GOOGLE_ID));"},{"lineNumber":355,"author":{"gitId":"domoberzin"},"content":" link.click();"},{"lineNumber":356,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":357,"author":{"gitId":"domoberzin"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":358,"author":{"gitId":"domoberzin"},"content":" waitForElementStaleness(link);"},{"lineNumber":359,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":360,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":361,"author":{"gitId":"-"},"content":" public void resetInstructorGoogleId(InstructorAttributes instructor) {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":363,"author":{"gitId":"-"},"content":" WebElement link \u003d instructorRow.findElement(By.linkText(LINK_TEXT_RESET_GOOGLE_ID));"},{"lineNumber":364,"author":{"gitId":"-"},"content":" link.click();"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":367,"author":{"gitId":"-"},"content":" waitForElementStaleness(link);"},{"lineNumber":368,"author":{"gitId":"-"},"content":" }"},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":" public WebElement getAccountRequestRow(AccountRequestAttributes accountRequest) {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" String email \u003d accountRequest.getEmail();"},{"lineNumber":372,"author":{"gitId":"-"},"content":" String institute \u003d accountRequest.getInstitute();"},{"lineNumber":373,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d browser.driver.findElements(By.cssSelector(\"#search-table-account-request tbody tr\"));"},{"lineNumber":374,"author":{"gitId":"-"},"content":" for (WebElement row : rows) {"},{"lineNumber":375,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":376,"author":{"gitId":"-"},"content":" if (removeSpanFromText(columns.get(ACCOUNT_REQUEST_COL_EMAIL - 1)"},{"lineNumber":377,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(email)"},{"lineNumber":378,"author":{"gitId":"-"},"content":" \u0026\u0026 removeSpanFromText(columns.get(ACCOUNT_REQUEST_COL_INSTITUTE - 1)"},{"lineNumber":379,"author":{"gitId":"-"},"content":" .getAttribute(\"innerHTML\")).contains(institute)) {"},{"lineNumber":380,"author":{"gitId":"-"},"content":" return row;"},{"lineNumber":381,"author":{"gitId":"-"},"content":" }"},{"lineNumber":382,"author":{"gitId":"-"},"content":" }"},{"lineNumber":383,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":384,"author":{"gitId":"-"},"content":" }"},{"lineNumber":385,"author":{"gitId":"-"},"content":""},{"lineNumber":386,"author":{"gitId":"domoberzin"},"content":" public WebElement getAccountRequestRow(AccountRequest accountRequest) {"},{"lineNumber":387,"author":{"gitId":"domoberzin"},"content":" String email \u003d accountRequest.getEmail();"},{"lineNumber":388,"author":{"gitId":"domoberzin"},"content":" String institute \u003d accountRequest.getInstitute();"},{"lineNumber":389,"author":{"gitId":"domoberzin"},"content":" List\u003cWebElement\u003e rows \u003d browser.driver.findElements(By.cssSelector(\"#search-table-account-request tbody tr\"));"},{"lineNumber":390,"author":{"gitId":"domoberzin"},"content":" for (WebElement row : rows) {"},{"lineNumber":391,"author":{"gitId":"domoberzin"},"content":" List\u003cWebElement\u003e columns \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":392,"author":{"gitId":"domoberzin"},"content":" if (removeSpanFromText(columns.get(ACCOUNT_REQUEST_COL_EMAIL - 1)"},{"lineNumber":393,"author":{"gitId":"domoberzin"},"content":" .getAttribute(\"innerHTML\")).contains(email)"},{"lineNumber":394,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 removeSpanFromText(columns.get(ACCOUNT_REQUEST_COL_INSTITUTE - 1)"},{"lineNumber":395,"author":{"gitId":"domoberzin"},"content":" .getAttribute(\"innerHTML\")).contains(institute)) {"},{"lineNumber":396,"author":{"gitId":"domoberzin"},"content":" return row;"},{"lineNumber":397,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":398,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":399,"author":{"gitId":"domoberzin"},"content":" return null;"},{"lineNumber":400,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":401,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":402,"author":{"gitId":"-"},"content":" public String getAccountRequestName(WebElement accountRequestRow) {"},{"lineNumber":403,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_NAME);"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" public String getAccountRequestEmail(WebElement accountRequestRow) {"},{"lineNumber":407,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_EMAIL);"},{"lineNumber":408,"author":{"gitId":"-"},"content":" }"},{"lineNumber":409,"author":{"gitId":"-"},"content":""},{"lineNumber":410,"author":{"gitId":"-"},"content":" public String getAccountRequestInstitute(WebElement accountRequestRow) {"},{"lineNumber":411,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_INSTITUTE);"},{"lineNumber":412,"author":{"gitId":"-"},"content":" }"},{"lineNumber":413,"author":{"gitId":"-"},"content":""},{"lineNumber":414,"author":{"gitId":"-"},"content":" public String getAccountRequestCreatedAt(WebElement accountRequestRow) {"},{"lineNumber":415,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_CREATED_AT);"},{"lineNumber":416,"author":{"gitId":"-"},"content":" }"},{"lineNumber":417,"author":{"gitId":"-"},"content":""},{"lineNumber":418,"author":{"gitId":"-"},"content":" public String getAccountRequestRegisteredAt(WebElement accountRequestRow) {"},{"lineNumber":419,"author":{"gitId":"-"},"content":" return getColumnText(accountRequestRow, ACCOUNT_REQUEST_COL_REGISTERED_AT);"},{"lineNumber":420,"author":{"gitId":"-"},"content":" }"},{"lineNumber":421,"author":{"gitId":"-"},"content":""},{"lineNumber":422,"author":{"gitId":"-"},"content":" public String getAccountRequestRegistrationLink(WebElement accountRequestRow) {"},{"lineNumber":423,"author":{"gitId":"-"},"content":" return getExpandedRowInputValue(accountRequestRow, EXPANDED_ROWS_HEADER_ACCOUNT_REGISTRATION_LINK);"},{"lineNumber":424,"author":{"gitId":"-"},"content":" }"},{"lineNumber":425,"author":{"gitId":"-"},"content":""},{"lineNumber":426,"author":{"gitId":"-"},"content":" public void clickDeleteAccountRequestButton(AccountRequestAttributes accountRequest) {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":428,"author":{"gitId":"-"},"content":" WebElement deleteButton \u003d accountRequestRow.findElement(By.cssSelector(\"[id^\u003d\u0027delete-account-request-\u0027]\"));"},{"lineNumber":429,"author":{"gitId":"-"},"content":" deleteButton.click();"},{"lineNumber":430,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":431,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":432,"author":{"gitId":"-"},"content":" }"},{"lineNumber":433,"author":{"gitId":"-"},"content":""},{"lineNumber":434,"author":{"gitId":"domoberzin"},"content":" public void clickDeleteAccountRequestButton(AccountRequest accountRequest) {"},{"lineNumber":435,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":436,"author":{"gitId":"domoberzin"},"content":" WebElement deleteButton \u003d accountRequestRow.findElement(By.cssSelector(\"[id^\u003d\u0027delete-account-request-\u0027]\"));"},{"lineNumber":437,"author":{"gitId":"domoberzin"},"content":" deleteButton.click();"},{"lineNumber":438,"author":{"gitId":"domoberzin"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":439,"author":{"gitId":"domoberzin"},"content":" waitForPageToLoad();"},{"lineNumber":440,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":441,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":442,"author":{"gitId":"-"},"content":" public void clickResetAccountRequestButton(AccountRequestAttributes accountRequest) {"},{"lineNumber":443,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":444,"author":{"gitId":"-"},"content":" WebElement deleteButton \u003d accountRequestRow.findElement(By.cssSelector(\"[id^\u003d\u0027reset-account-request-\u0027]\"));"},{"lineNumber":445,"author":{"gitId":"-"},"content":" deleteButton.click();"},{"lineNumber":446,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":447,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":448,"author":{"gitId":"-"},"content":" }"},{"lineNumber":449,"author":{"gitId":"-"},"content":""},{"lineNumber":450,"author":{"gitId":"domoberzin"},"content":" public void clickResetAccountRequestButton(AccountRequest accountRequest) {"},{"lineNumber":451,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":452,"author":{"gitId":"domoberzin"},"content":" WebElement deleteButton \u003d accountRequestRow.findElement(By.cssSelector(\"[id^\u003d\u0027reset-account-request-\u0027]\"));"},{"lineNumber":453,"author":{"gitId":"domoberzin"},"content":" deleteButton.click();"},{"lineNumber":454,"author":{"gitId":"domoberzin"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":455,"author":{"gitId":"domoberzin"},"content":" waitForPageToLoad();"},{"lineNumber":456,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":457,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":458,"author":{"gitId":"-"},"content":" public int getNumExpandedRows(WebElement row) {"},{"lineNumber":459,"author":{"gitId":"-"},"content":" String xpath \u003d \"following-sibling::tr[1]/td/ul/li\";"},{"lineNumber":460,"author":{"gitId":"-"},"content":" return row.findElements(By.xpath(xpath)).size();"},{"lineNumber":461,"author":{"gitId":"-"},"content":" }"},{"lineNumber":462,"author":{"gitId":"-"},"content":""},{"lineNumber":463,"author":{"gitId":"-"},"content":" private String getColumnText(WebElement row, int columnNum) {"},{"lineNumber":464,"author":{"gitId":"-"},"content":" String xpath \u003d String.format(\"td[%d]\", columnNum);"},{"lineNumber":465,"author":{"gitId":"-"},"content":" return row.findElement(By.xpath(xpath)).getText();"},{"lineNumber":466,"author":{"gitId":"-"},"content":" }"},{"lineNumber":467,"author":{"gitId":"-"},"content":""},{"lineNumber":468,"author":{"gitId":"-"},"content":" private String getColumnLink(WebElement row, int columnNum) {"},{"lineNumber":469,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":470,"author":{"gitId":"-"},"content":" String xpath \u003d String.format(\"td[%d]/a\", columnNum);"},{"lineNumber":471,"author":{"gitId":"-"},"content":" return row.findElement(By.xpath(xpath)).getAttribute(\"href\");"},{"lineNumber":472,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":473,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":474,"author":{"gitId":"-"},"content":" }"},{"lineNumber":475,"author":{"gitId":"-"},"content":" }"},{"lineNumber":476,"author":{"gitId":"-"},"content":""},{"lineNumber":477,"author":{"gitId":"-"},"content":" private String getExpandedRowInputValue(WebElement row, String rowHeader) {"},{"lineNumber":478,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":479,"author":{"gitId":"-"},"content":" String xpath \u003d String.format(\"following-sibling::tr[1]/td/ul/li[contains(., \u0027%s\u0027)]/input\", rowHeader);"},{"lineNumber":480,"author":{"gitId":"-"},"content":" return row.findElement(By.xpath(xpath)).getAttribute(\"value\");"},{"lineNumber":481,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":482,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":483,"author":{"gitId":"-"},"content":" }"},{"lineNumber":484,"author":{"gitId":"-"},"content":" }"},{"lineNumber":485,"author":{"gitId":"-"},"content":""},{"lineNumber":486,"author":{"gitId":"domoberzin"},"content":" public void verifyStudentRowContent(Student student, Course course,"},{"lineNumber":487,"author":{"gitId":"domoberzin"},"content":" String expectedDetails, String expectedManageAccountLink,"},{"lineNumber":488,"author":{"gitId":"domoberzin"},"content":" String expectedHomePageLink) {"},{"lineNumber":489,"author":{"gitId":"domoberzin"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":490,"author":{"gitId":"domoberzin"},"content":" String actualDetails \u003d getStudentDetails(studentRow);"},{"lineNumber":491,"author":{"gitId":"domoberzin"},"content":" String actualName \u003d getStudentName(studentRow);"},{"lineNumber":492,"author":{"gitId":"domoberzin"},"content":" String actualGoogleId \u003d getStudentGoogleId(studentRow);"},{"lineNumber":493,"author":{"gitId":"domoberzin"},"content":" String actualHomepageLink \u003d getStudentHomeLink(studentRow);"},{"lineNumber":494,"author":{"gitId":"domoberzin"},"content":" String actualInstitute \u003d getStudentInstitute(studentRow);"},{"lineNumber":495,"author":{"gitId":"domoberzin"},"content":" String actualComment \u003d getStudentComments(studentRow);"},{"lineNumber":496,"author":{"gitId":"domoberzin"},"content":" String actualManageAccountLink \u003d getStudentManageAccountLink(studentRow);"},{"lineNumber":497,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":498,"author":{"gitId":"domoberzin"},"content":" String expectedName \u003d student.getName();"},{"lineNumber":499,"author":{"gitId":"domoberzin"},"content":" String expectedGoogleId \u003d StringHelper.convertToEmptyStringIfNull(student.getGoogleId());"},{"lineNumber":500,"author":{"gitId":"domoberzin"},"content":" String expectedInstitute \u003d StringHelper.convertToEmptyStringIfNull(course.getInstitute());"},{"lineNumber":501,"author":{"gitId":"domoberzin"},"content":" String expectedComment \u003d StringHelper.convertToEmptyStringIfNull(student.getComments());"},{"lineNumber":502,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":503,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedDetails, actualDetails);"},{"lineNumber":504,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedName, actualName);"},{"lineNumber":505,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedGoogleId, actualGoogleId);"},{"lineNumber":506,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedInstitute, actualInstitute);"},{"lineNumber":507,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedComment, actualComment);"},{"lineNumber":508,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedManageAccountLink, actualManageAccountLink);"},{"lineNumber":509,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedHomePageLink, actualHomepageLink);"},{"lineNumber":510,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":511,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":512,"author":{"gitId":"-"},"content":" public void verifyStudentRowContent(StudentAttributes student, CourseAttributes course,"},{"lineNumber":513,"author":{"gitId":"-"},"content":" String expectedDetails, String expectedManageAccountLink,"},{"lineNumber":514,"author":{"gitId":"-"},"content":" String expectedHomePageLink) {"},{"lineNumber":515,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":516,"author":{"gitId":"-"},"content":" String actualDetails \u003d getStudentDetails(studentRow);"},{"lineNumber":517,"author":{"gitId":"-"},"content":" String actualName \u003d getStudentName(studentRow);"},{"lineNumber":518,"author":{"gitId":"-"},"content":" String actualGoogleId \u003d getStudentGoogleId(studentRow);"},{"lineNumber":519,"author":{"gitId":"-"},"content":" String actualHomepageLink \u003d getStudentHomeLink(studentRow);"},{"lineNumber":520,"author":{"gitId":"-"},"content":" String actualInstitute \u003d getStudentInstitute(studentRow);"},{"lineNumber":521,"author":{"gitId":"-"},"content":" String actualComment \u003d getStudentComments(studentRow);"},{"lineNumber":522,"author":{"gitId":"-"},"content":" String actualManageAccountLink \u003d getStudentManageAccountLink(studentRow);"},{"lineNumber":523,"author":{"gitId":"-"},"content":""},{"lineNumber":524,"author":{"gitId":"-"},"content":" String expectedName \u003d student.getName();"},{"lineNumber":525,"author":{"gitId":"-"},"content":" String expectedGoogleId \u003d StringHelper.convertToEmptyStringIfNull(student.getGoogleId());"},{"lineNumber":526,"author":{"gitId":"-"},"content":" String expectedInstitute \u003d StringHelper.convertToEmptyStringIfNull(course.getInstitute());"},{"lineNumber":527,"author":{"gitId":"-"},"content":" String expectedComment \u003d StringHelper.convertToEmptyStringIfNull(student.getComments());"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" assertEquals(expectedDetails, actualDetails);"},{"lineNumber":530,"author":{"gitId":"-"},"content":" assertEquals(expectedName, actualName);"},{"lineNumber":531,"author":{"gitId":"-"},"content":" assertEquals(expectedGoogleId, actualGoogleId);"},{"lineNumber":532,"author":{"gitId":"-"},"content":" assertEquals(expectedInstitute, actualInstitute);"},{"lineNumber":533,"author":{"gitId":"-"},"content":" assertEquals(expectedComment, actualComment);"},{"lineNumber":534,"author":{"gitId":"-"},"content":" assertEquals(expectedManageAccountLink, actualManageAccountLink);"},{"lineNumber":535,"author":{"gitId":"-"},"content":" assertEquals(expectedHomePageLink, actualHomepageLink);"},{"lineNumber":536,"author":{"gitId":"-"},"content":" }"},{"lineNumber":537,"author":{"gitId":"-"},"content":""},{"lineNumber":538,"author":{"gitId":"domoberzin"},"content":" public void verifyStudentRowContentAfterReset(Student student, Course course) {"},{"lineNumber":539,"author":{"gitId":"domoberzin"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":540,"author":{"gitId":"domoberzin"},"content":" String actualName \u003d getStudentName(studentRow);"},{"lineNumber":541,"author":{"gitId":"domoberzin"},"content":" String actualInstitute \u003d getStudentInstitute(studentRow);"},{"lineNumber":542,"author":{"gitId":"domoberzin"},"content":" String actualComment \u003d getStudentComments(studentRow);"},{"lineNumber":543,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":544,"author":{"gitId":"domoberzin"},"content":" String expectedName \u003d student.getName();"},{"lineNumber":545,"author":{"gitId":"domoberzin"},"content":" String expectedInstitute \u003d StringHelper.convertToEmptyStringIfNull(course.getInstitute());"},{"lineNumber":546,"author":{"gitId":"domoberzin"},"content":" String expectedComment \u003d StringHelper.convertToEmptyStringIfNull(student.getComments());"},{"lineNumber":547,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":548,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedName, actualName);"},{"lineNumber":549,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedInstitute, actualInstitute);"},{"lineNumber":550,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedComment, actualComment);"},{"lineNumber":551,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":552,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":553,"author":{"gitId":"domoberzin"},"content":" public void verifyStudentExpandedLinks(Student student, int expectedNumExpandedRows) {"},{"lineNumber":554,"author":{"gitId":"domoberzin"},"content":" clickExpandStudentLinks();"},{"lineNumber":555,"author":{"gitId":"domoberzin"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":556,"author":{"gitId":"domoberzin"},"content":" String actualEmail \u003d getStudentEmail(studentRow);"},{"lineNumber":557,"author":{"gitId":"domoberzin"},"content":" String actualJoinLink \u003d getStudentJoinLink(studentRow);"},{"lineNumber":558,"author":{"gitId":"domoberzin"},"content":" int actualNumExpandedRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":559,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":560,"author":{"gitId":"domoberzin"},"content":" String expectedEmail \u003d student.getEmail();"},{"lineNumber":561,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":562,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedEmail, actualEmail);"},{"lineNumber":563,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(\"\", actualJoinLink);"},{"lineNumber":564,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedNumExpandedRows, actualNumExpandedRows);"},{"lineNumber":565,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":566,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":567,"author":{"gitId":"-"},"content":" public void verifyStudentExpandedLinks(StudentAttributes student, int expectedNumExpandedRows) {"},{"lineNumber":568,"author":{"gitId":"-"},"content":" clickExpandStudentLinks();"},{"lineNumber":569,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":570,"author":{"gitId":"-"},"content":" String actualEmail \u003d getStudentEmail(studentRow);"},{"lineNumber":571,"author":{"gitId":"-"},"content":" String actualJoinLink \u003d getStudentJoinLink(studentRow);"},{"lineNumber":572,"author":{"gitId":"-"},"content":" int actualNumExpandedRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":573,"author":{"gitId":"-"},"content":""},{"lineNumber":574,"author":{"gitId":"-"},"content":" String expectedEmail \u003d student.getEmail();"},{"lineNumber":575,"author":{"gitId":"-"},"content":""},{"lineNumber":576,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, actualEmail);"},{"lineNumber":577,"author":{"gitId":"-"},"content":" assertNotEquals(\"\", actualJoinLink);"},{"lineNumber":578,"author":{"gitId":"-"},"content":" assertEquals(expectedNumExpandedRows, actualNumExpandedRows);"},{"lineNumber":579,"author":{"gitId":"-"},"content":" }"},{"lineNumber":580,"author":{"gitId":"-"},"content":""},{"lineNumber":581,"author":{"gitId":"domoberzin"},"content":" public void verifyInstructorRowContent(Instructor instructor, Course course,"},{"lineNumber":582,"author":{"gitId":"domoberzin"},"content":" String expectedManageAccountLink, String expectedHomePageLink) {"},{"lineNumber":583,"author":{"gitId":"domoberzin"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":584,"author":{"gitId":"domoberzin"},"content":" String actualCourseId \u003d getInstructorCourseId(instructorRow);"},{"lineNumber":585,"author":{"gitId":"domoberzin"},"content":" String actualName \u003d getInstructorName(instructorRow);"},{"lineNumber":586,"author":{"gitId":"domoberzin"},"content":" String actualGoogleId \u003d getInstructorGoogleId(instructorRow);"},{"lineNumber":587,"author":{"gitId":"domoberzin"},"content":" String actualHomePageLink \u003d getInstructorHomePageLink(instructorRow);"},{"lineNumber":588,"author":{"gitId":"domoberzin"},"content":" String actualInstitute \u003d getInstructorInstitute(instructorRow);"},{"lineNumber":589,"author":{"gitId":"domoberzin"},"content":" String actualManageAccountLink \u003d getInstructorManageAccountLink(instructorRow);"},{"lineNumber":590,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":591,"author":{"gitId":"domoberzin"},"content":" String expectedCourseId \u003d instructor.getCourseId();"},{"lineNumber":592,"author":{"gitId":"domoberzin"},"content":" String expectedName \u003d instructor.getName();"},{"lineNumber":593,"author":{"gitId":"domoberzin"},"content":" String expectedGoogleId \u003d StringHelper.convertToEmptyStringIfNull(instructor.getGoogleId());"},{"lineNumber":594,"author":{"gitId":"domoberzin"},"content":" String expectedInstitute \u003d StringHelper.convertToEmptyStringIfNull(course.getInstitute());"},{"lineNumber":595,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":596,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedCourseId, actualCourseId);"},{"lineNumber":597,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedName, actualName);"},{"lineNumber":598,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedGoogleId, actualGoogleId);"},{"lineNumber":599,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedHomePageLink, actualHomePageLink);"},{"lineNumber":600,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedInstitute, actualInstitute);"},{"lineNumber":601,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedManageAccountLink, actualManageAccountLink);"},{"lineNumber":602,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":603,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":604,"author":{"gitId":"-"},"content":" public void verifyInstructorRowContent(InstructorAttributes instructor, CourseAttributes course,"},{"lineNumber":605,"author":{"gitId":"-"},"content":" String expectedManageAccountLink, String expectedHomePageLink) {"},{"lineNumber":606,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":607,"author":{"gitId":"-"},"content":" String actualCourseId \u003d getInstructorCourseId(instructorRow);"},{"lineNumber":608,"author":{"gitId":"-"},"content":" String actualName \u003d getInstructorName(instructorRow);"},{"lineNumber":609,"author":{"gitId":"-"},"content":" String actualGoogleId \u003d getInstructorGoogleId(instructorRow);"},{"lineNumber":610,"author":{"gitId":"-"},"content":" String actualHomePageLink \u003d getInstructorHomePageLink(instructorRow);"},{"lineNumber":611,"author":{"gitId":"-"},"content":" String actualInstitute \u003d getInstructorInstitute(instructorRow);"},{"lineNumber":612,"author":{"gitId":"-"},"content":" String actualManageAccountLink \u003d getInstructorManageAccountLink(instructorRow);"},{"lineNumber":613,"author":{"gitId":"-"},"content":""},{"lineNumber":614,"author":{"gitId":"-"},"content":" String expectedCourseId \u003d instructor.getCourseId();"},{"lineNumber":615,"author":{"gitId":"-"},"content":" String expectedName \u003d instructor.getName();"},{"lineNumber":616,"author":{"gitId":"-"},"content":" String expectedGoogleId \u003d StringHelper.convertToEmptyStringIfNull(instructor.getGoogleId());"},{"lineNumber":617,"author":{"gitId":"-"},"content":" String expectedInstitute \u003d StringHelper.convertToEmptyStringIfNull(course.getInstitute());"},{"lineNumber":618,"author":{"gitId":"-"},"content":""},{"lineNumber":619,"author":{"gitId":"-"},"content":" assertEquals(expectedCourseId, actualCourseId);"},{"lineNumber":620,"author":{"gitId":"-"},"content":" assertEquals(expectedName, actualName);"},{"lineNumber":621,"author":{"gitId":"-"},"content":" assertEquals(expectedGoogleId, actualGoogleId);"},{"lineNumber":622,"author":{"gitId":"-"},"content":" assertEquals(expectedHomePageLink, actualHomePageLink);"},{"lineNumber":623,"author":{"gitId":"-"},"content":" assertEquals(expectedInstitute, actualInstitute);"},{"lineNumber":624,"author":{"gitId":"-"},"content":" assertEquals(expectedManageAccountLink, actualManageAccountLink);"},{"lineNumber":625,"author":{"gitId":"-"},"content":" }"},{"lineNumber":626,"author":{"gitId":"-"},"content":""},{"lineNumber":627,"author":{"gitId":"domoberzin"},"content":" public void verifyInstructorRowContentAfterReset(Instructor instructor, Course course) {"},{"lineNumber":628,"author":{"gitId":"domoberzin"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":629,"author":{"gitId":"domoberzin"},"content":" String actualCourseId \u003d getInstructorCourseId(instructorRow);"},{"lineNumber":630,"author":{"gitId":"domoberzin"},"content":" String actualName \u003d getInstructorName(instructorRow);"},{"lineNumber":631,"author":{"gitId":"domoberzin"},"content":" String actualInstitute \u003d getInstructorInstitute(instructorRow);"},{"lineNumber":632,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":633,"author":{"gitId":"domoberzin"},"content":" String expectedCourseId \u003d instructor.getCourseId();"},{"lineNumber":634,"author":{"gitId":"domoberzin"},"content":" String expectedName \u003d instructor.getName();"},{"lineNumber":635,"author":{"gitId":"domoberzin"},"content":" String expectedInstitute \u003d StringHelper.convertToEmptyStringIfNull(course.getInstitute());"},{"lineNumber":636,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":637,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedCourseId, actualCourseId);"},{"lineNumber":638,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedName, actualName);"},{"lineNumber":639,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedInstitute, actualInstitute);"},{"lineNumber":640,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":641,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":642,"author":{"gitId":"domoberzin"},"content":" public void verifyInstructorExpandedLinks(Instructor instructor) {"},{"lineNumber":643,"author":{"gitId":"domoberzin"},"content":" clickExpandInstructorLinks();"},{"lineNumber":644,"author":{"gitId":"domoberzin"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":645,"author":{"gitId":"domoberzin"},"content":" String actualEmail \u003d getInstructorEmail(instructorRow);"},{"lineNumber":646,"author":{"gitId":"domoberzin"},"content":" String actualJoinLink \u003d getInstructorJoinLink(instructorRow);"},{"lineNumber":647,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":648,"author":{"gitId":"domoberzin"},"content":" String expectedEmail \u003d instructor.getEmail();"},{"lineNumber":649,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":650,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedEmail, actualEmail);"},{"lineNumber":651,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(\"\", actualJoinLink);"},{"lineNumber":652,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":653,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":654,"author":{"gitId":"-"},"content":" public void verifyInstructorExpandedLinks(InstructorAttributes instructor) {"},{"lineNumber":655,"author":{"gitId":"-"},"content":" clickExpandInstructorLinks();"},{"lineNumber":656,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":657,"author":{"gitId":"-"},"content":" String actualEmail \u003d getInstructorEmail(instructorRow);"},{"lineNumber":658,"author":{"gitId":"-"},"content":" String actualJoinLink \u003d getInstructorJoinLink(instructorRow);"},{"lineNumber":659,"author":{"gitId":"-"},"content":""},{"lineNumber":660,"author":{"gitId":"-"},"content":" String expectedEmail \u003d instructor.getEmail();"},{"lineNumber":661,"author":{"gitId":"-"},"content":""},{"lineNumber":662,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, actualEmail);"},{"lineNumber":663,"author":{"gitId":"-"},"content":" assertNotEquals(\"\", actualJoinLink);"},{"lineNumber":664,"author":{"gitId":"-"},"content":" }"},{"lineNumber":665,"author":{"gitId":"-"},"content":""},{"lineNumber":666,"author":{"gitId":"-"},"content":" public void verifyAccountRequestRowContent(AccountRequestAttributes accountRequest) {"},{"lineNumber":667,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":668,"author":{"gitId":"-"},"content":" String actualName \u003d getAccountRequestName(accountRequestRow);"},{"lineNumber":669,"author":{"gitId":"-"},"content":" String actualEmail \u003d getAccountRequestEmail(accountRequestRow);"},{"lineNumber":670,"author":{"gitId":"-"},"content":" String actualInstitute \u003d getAccountRequestInstitute(accountRequestRow);"},{"lineNumber":671,"author":{"gitId":"-"},"content":" String actualCreatedAt \u003d getAccountRequestCreatedAt(accountRequestRow);"},{"lineNumber":672,"author":{"gitId":"-"},"content":" String actualRegisteredAt \u003d getAccountRequestRegisteredAt(accountRequestRow);"},{"lineNumber":673,"author":{"gitId":"-"},"content":""},{"lineNumber":674,"author":{"gitId":"-"},"content":" assertEquals(accountRequest.getName(), actualName);"},{"lineNumber":675,"author":{"gitId":"-"},"content":" assertEquals(accountRequest.getEmail(), actualEmail);"},{"lineNumber":676,"author":{"gitId":"-"},"content":" assertEquals(accountRequest.getInstitute(), actualInstitute);"},{"lineNumber":677,"author":{"gitId":"-"},"content":" assertFalse(actualCreatedAt.isBlank());"},{"lineNumber":678,"author":{"gitId":"-"},"content":" if (accountRequest.getRegisteredAt() \u003d\u003d null) {"},{"lineNumber":679,"author":{"gitId":"-"},"content":" assertEquals(\"Not Registered Yet\", actualRegisteredAt);"},{"lineNumber":680,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":681,"author":{"gitId":"-"},"content":" assertFalse(actualRegisteredAt.isBlank());"},{"lineNumber":682,"author":{"gitId":"-"},"content":" }"},{"lineNumber":683,"author":{"gitId":"-"},"content":" }"},{"lineNumber":684,"author":{"gitId":"-"},"content":""},{"lineNumber":685,"author":{"gitId":"domoberzin"},"content":" public void verifyAccountRequestRowContent(AccountRequest accountRequest) {"},{"lineNumber":686,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":687,"author":{"gitId":"domoberzin"},"content":" String actualName \u003d getAccountRequestName(accountRequestRow);"},{"lineNumber":688,"author":{"gitId":"domoberzin"},"content":" String actualEmail \u003d getAccountRequestEmail(accountRequestRow);"},{"lineNumber":689,"author":{"gitId":"domoberzin"},"content":" String actualInstitute \u003d getAccountRequestInstitute(accountRequestRow);"},{"lineNumber":690,"author":{"gitId":"domoberzin"},"content":" String actualCreatedAt \u003d getAccountRequestCreatedAt(accountRequestRow);"},{"lineNumber":691,"author":{"gitId":"domoberzin"},"content":" String actualRegisteredAt \u003d getAccountRequestRegisteredAt(accountRequestRow);"},{"lineNumber":692,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":693,"author":{"gitId":"domoberzin"},"content":" assertEquals(accountRequest.getName(), actualName);"},{"lineNumber":694,"author":{"gitId":"domoberzin"},"content":" assertEquals(accountRequest.getEmail(), actualEmail);"},{"lineNumber":695,"author":{"gitId":"domoberzin"},"content":" assertEquals(accountRequest.getInstitute(), actualInstitute);"},{"lineNumber":696,"author":{"gitId":"domoberzin"},"content":" assertFalse(actualCreatedAt.isBlank());"},{"lineNumber":697,"author":{"gitId":"domoberzin"},"content":" if (accountRequest.getRegisteredAt() \u003d\u003d null) {"},{"lineNumber":698,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Not Registered Yet\", actualRegisteredAt);"},{"lineNumber":699,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":700,"author":{"gitId":"domoberzin"},"content":" assertFalse(actualRegisteredAt.isBlank());"},{"lineNumber":701,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":702,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":703,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":704,"author":{"gitId":"-"},"content":" public void verifyAccountRequestExpandedLinks(AccountRequestAttributes accountRequest) {"},{"lineNumber":705,"author":{"gitId":"-"},"content":" clickExpandAccountRequestLinks();"},{"lineNumber":706,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":707,"author":{"gitId":"-"},"content":" String actualRegistrationLink \u003d getAccountRequestRegistrationLink(accountRequestRow);"},{"lineNumber":708,"author":{"gitId":"-"},"content":""},{"lineNumber":709,"author":{"gitId":"-"},"content":" assertFalse(actualRegistrationLink.isBlank());"},{"lineNumber":710,"author":{"gitId":"-"},"content":" }"},{"lineNumber":711,"author":{"gitId":"-"},"content":""},{"lineNumber":712,"author":{"gitId":"domoberzin"},"content":" public void verifyAccountRequestExpandedLinks(AccountRequest accountRequest) {"},{"lineNumber":713,"author":{"gitId":"domoberzin"},"content":" clickExpandAccountRequestLinks();"},{"lineNumber":714,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":715,"author":{"gitId":"domoberzin"},"content":" String actualRegistrationLink \u003d getAccountRequestRegistrationLink(accountRequestRow);"},{"lineNumber":716,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":717,"author":{"gitId":"domoberzin"},"content":" assertFalse(actualRegistrationLink.isBlank());"},{"lineNumber":718,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":719,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":720,"author":{"gitId":"domoberzin"},"content":" public void verifyLinkExpansionButtons(Student student,"},{"lineNumber":721,"author":{"gitId":"domoberzin"},"content":" Instructor instructor, AccountRequest accountRequest) {"},{"lineNumber":722,"author":{"gitId":"domoberzin"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":723,"author":{"gitId":"domoberzin"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":724,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":725,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":726,"author":{"gitId":"domoberzin"},"content":" clickExpandStudentLinks();"},{"lineNumber":727,"author":{"gitId":"domoberzin"},"content":" clickExpandInstructorLinks();"},{"lineNumber":728,"author":{"gitId":"domoberzin"},"content":" clickExpandAccountRequestLinks();"},{"lineNumber":729,"author":{"gitId":"domoberzin"},"content":" int numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":730,"author":{"gitId":"domoberzin"},"content":" int numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":731,"author":{"gitId":"domoberzin"},"content":" int numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":732,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":733,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":734,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":735,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":736,"author":{"gitId":"domoberzin"},"content":" clickCollapseInstructorLinks();"},{"lineNumber":737,"author":{"gitId":"domoberzin"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":738,"author":{"gitId":"domoberzin"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":739,"author":{"gitId":"domoberzin"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":740,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":741,"author":{"gitId":"domoberzin"},"content":" assertEquals(numExpandedInstructorRows, 0);"},{"lineNumber":742,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":743,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":744,"author":{"gitId":"domoberzin"},"content":" clickExpandInstructorLinks();"},{"lineNumber":745,"author":{"gitId":"domoberzin"},"content":" clickCollapseStudentLinks();"},{"lineNumber":746,"author":{"gitId":"domoberzin"},"content":" clickCollapseAccountRequestLinks();"},{"lineNumber":747,"author":{"gitId":"domoberzin"},"content":" waitUntilAnimationFinish();"},{"lineNumber":748,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":749,"author":{"gitId":"domoberzin"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":750,"author":{"gitId":"domoberzin"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":751,"author":{"gitId":"domoberzin"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":752,"author":{"gitId":"domoberzin"},"content":" assertEquals(numExpandedStudentRows, 0);"},{"lineNumber":753,"author":{"gitId":"domoberzin"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":754,"author":{"gitId":"domoberzin"},"content":" assertEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":755,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":756,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":757,"author":{"gitId":"-"},"content":" public void verifyLinkExpansionButtons(StudentAttributes student,"},{"lineNumber":758,"author":{"gitId":"-"},"content":" InstructorAttributes instructor, AccountRequestAttributes accountRequest) {"},{"lineNumber":759,"author":{"gitId":"-"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":760,"author":{"gitId":"-"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":761,"author":{"gitId":"-"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":762,"author":{"gitId":"-"},"content":""},{"lineNumber":763,"author":{"gitId":"-"},"content":" clickExpandStudentLinks();"},{"lineNumber":764,"author":{"gitId":"-"},"content":" clickExpandInstructorLinks();"},{"lineNumber":765,"author":{"gitId":"-"},"content":" clickExpandAccountRequestLinks();"},{"lineNumber":766,"author":{"gitId":"-"},"content":" int numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":767,"author":{"gitId":"-"},"content":" int numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":768,"author":{"gitId":"-"},"content":" int numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":769,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":770,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":771,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":772,"author":{"gitId":"-"},"content":""},{"lineNumber":773,"author":{"gitId":"-"},"content":" clickCollapseInstructorLinks();"},{"lineNumber":774,"author":{"gitId":"-"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":775,"author":{"gitId":"-"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":776,"author":{"gitId":"-"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":777,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":778,"author":{"gitId":"-"},"content":" assertEquals(numExpandedInstructorRows, 0);"},{"lineNumber":779,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":780,"author":{"gitId":"-"},"content":""},{"lineNumber":781,"author":{"gitId":"-"},"content":" clickExpandInstructorLinks();"},{"lineNumber":782,"author":{"gitId":"-"},"content":" clickCollapseStudentLinks();"},{"lineNumber":783,"author":{"gitId":"-"},"content":" clickCollapseAccountRequestLinks();"},{"lineNumber":784,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish();"},{"lineNumber":785,"author":{"gitId":"-"},"content":""},{"lineNumber":786,"author":{"gitId":"-"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":787,"author":{"gitId":"-"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":788,"author":{"gitId":"-"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":789,"author":{"gitId":"-"},"content":" assertEquals(numExpandedStudentRows, 0);"},{"lineNumber":790,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":791,"author":{"gitId":"-"},"content":" assertEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":792,"author":{"gitId":"-"},"content":" }"},{"lineNumber":793,"author":{"gitId":"-"},"content":""},{"lineNumber":794,"author":{"gitId":"domoberzin"},"content":" public void verifyLinkExpansionButtons(StudentAttributes student,"},{"lineNumber":795,"author":{"gitId":"domoberzin"},"content":" InstructorAttributes instructor, AccountRequest accountRequest) {"},{"lineNumber":796,"author":{"gitId":"domoberzin"},"content":" WebElement studentRow \u003d getStudentRow(student);"},{"lineNumber":797,"author":{"gitId":"domoberzin"},"content":" WebElement instructorRow \u003d getInstructorRow(instructor);"},{"lineNumber":798,"author":{"gitId":"domoberzin"},"content":" WebElement accountRequestRow \u003d getAccountRequestRow(accountRequest);"},{"lineNumber":799,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":800,"author":{"gitId":"domoberzin"},"content":" clickExpandStudentLinks();"},{"lineNumber":801,"author":{"gitId":"domoberzin"},"content":" clickExpandInstructorLinks();"},{"lineNumber":802,"author":{"gitId":"domoberzin"},"content":" clickExpandAccountRequestLinks();"},{"lineNumber":803,"author":{"gitId":"domoberzin"},"content":" int numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":804,"author":{"gitId":"domoberzin"},"content":" int numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":805,"author":{"gitId":"-"},"content":" int numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":806,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":807,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":808,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":809,"author":{"gitId":"-"},"content":""},{"lineNumber":810,"author":{"gitId":"-"},"content":" clickCollapseInstructorLinks();"},{"lineNumber":811,"author":{"gitId":"-"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":812,"author":{"gitId":"-"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":813,"author":{"gitId":"-"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":814,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedStudentRows, 0);"},{"lineNumber":815,"author":{"gitId":"-"},"content":" assertEquals(numExpandedInstructorRows, 0);"},{"lineNumber":816,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":817,"author":{"gitId":"-"},"content":""},{"lineNumber":818,"author":{"gitId":"-"},"content":" clickExpandInstructorLinks();"},{"lineNumber":819,"author":{"gitId":"-"},"content":" clickCollapseStudentLinks();"},{"lineNumber":820,"author":{"gitId":"-"},"content":" clickCollapseAccountRequestLinks();"},{"lineNumber":821,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish();"},{"lineNumber":822,"author":{"gitId":"-"},"content":""},{"lineNumber":823,"author":{"gitId":"-"},"content":" numExpandedStudentRows \u003d getNumExpandedRows(studentRow);"},{"lineNumber":824,"author":{"gitId":"-"},"content":" numExpandedInstructorRows \u003d getNumExpandedRows(instructorRow);"},{"lineNumber":825,"author":{"gitId":"-"},"content":" numExpandedAccountRequestRows \u003d getNumExpandedRows(accountRequestRow);"},{"lineNumber":826,"author":{"gitId":"-"},"content":" assertEquals(numExpandedStudentRows, 0);"},{"lineNumber":827,"author":{"gitId":"-"},"content":" assertNotEquals(numExpandedInstructorRows, 0);"},{"lineNumber":828,"author":{"gitId":"-"},"content":" assertEquals(numExpandedAccountRequestRows, 0);"},{"lineNumber":829,"author":{"gitId":"-"},"content":" }"},{"lineNumber":830,"author":{"gitId":"-"},"content":""},{"lineNumber":831,"author":{"gitId":"domoberzin"},"content":" public void verifyRegenerateInstructorKey(Instructor instructor, String originalJoinLink) {"},{"lineNumber":832,"author":{"gitId":"domoberzin"},"content":" verifyStatusMessage(\"Instructor\u0027s key for this course has been successfully regenerated,\""},{"lineNumber":833,"author":{"gitId":"-"},"content":" + \" and the email has been sent.\");"},{"lineNumber":834,"author":{"gitId":"-"},"content":""},{"lineNumber":835,"author":{"gitId":"domoberzin"},"content":" String regeneratedJoinLink \u003d getInstructorJoinLink(instructor);"},{"lineNumber":836,"author":{"gitId":"-"},"content":" assertNotEquals(regeneratedJoinLink, originalJoinLink);"},{"lineNumber":837,"author":{"gitId":"-"},"content":" }"},{"lineNumber":838,"author":{"gitId":"-"},"content":""},{"lineNumber":839,"author":{"gitId":"-"},"content":" public void verifyRegenerateInstructorKey(InstructorAttributes instructor, String originalJoinLink) {"},{"lineNumber":840,"author":{"gitId":"-"},"content":" verifyStatusMessage(\"Instructor\u0027s key for this course has been successfully regenerated,\""},{"lineNumber":841,"author":{"gitId":"-"},"content":" + \" and the email has been sent.\");"},{"lineNumber":842,"author":{"gitId":"-"},"content":""},{"lineNumber":843,"author":{"gitId":"-"},"content":" String regeneratedJoinLink \u003d getInstructorJoinLink(instructor);"},{"lineNumber":844,"author":{"gitId":"-"},"content":" assertNotEquals(regeneratedJoinLink, originalJoinLink);"},{"lineNumber":845,"author":{"gitId":"-"},"content":" }"},{"lineNumber":846,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":313,"-":533}},{"path":"src/e2e/java/teammates/e2e/pageobjects/AppPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static com.google.common.base.Preconditions.checkNotNull;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertEquals;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertNotEquals;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertNotNull;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertTrue;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.io.File;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.lang.reflect.Constructor;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.lang.reflect.InvocationTargetException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.time.Duration;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.time.ZoneId;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.time.ZonedDateTime;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.time.format.DateTimeFormatter;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":"import java.util.Locale;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import org.openqa.selenium.InvalidElementStateException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import org.openqa.selenium.JavascriptExecutor;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import org.openqa.selenium.Keys;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import org.openqa.selenium.NoSuchElementException;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebDriverException;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import org.openqa.selenium.remote.RemoteWebElement;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import org.openqa.selenium.remote.UselessFileDetector;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.PageFactory;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.ui.ExpectedCondition;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.ui.ExpectedConditions;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.ui.Select;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.ui.WebDriverWait;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.e2e.util.MaximumRetriesExceededException;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.e2e.util.RetryManager;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import teammates.e2e.util.Retryable;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import teammates.e2e.util.TestProperties;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import teammates.test.FileHelper;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import teammates.test.ThreadHelper;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * An abstract class that represents a browser-loaded page of the app and"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * provides ways to interact with it. Also contains methods to validate some"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * aspects of the page, e.g. HTML page source."},{"lineNumber":51,"author":{"gitId":"-"},"content":" *"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * \u003cp\u003eNote: We are using the Page Object pattern here."},{"lineNumber":53,"author":{"gitId":"-"},"content":" *"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * @see \u003ca href\u003d\"https://martinfowler.com/bliki/PageObject.html\"\u003ehttps://martinfowler.com/bliki/PageObject.html\u003c/a\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" */"},{"lineNumber":56,"author":{"gitId":"-"},"content":"public abstract class AppPage {"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" private static final String CLEAR_ELEMENT_SCRIPT;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" private static final String SCROLL_ELEMENT_TO_CENTER_AND_CLICK_SCRIPT;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" private static final String READ_TINYMCE_CONTENT_SCRIPT;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" private static final String WRITE_TO_TINYMCE_SCRIPT;"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" static {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" CLEAR_ELEMENT_SCRIPT \u003d FileHelper.readFile(\"src/e2e/resources/scripts/clearElementWithoutEvents.js\");"},{"lineNumber":66,"author":{"gitId":"-"},"content":" SCROLL_ELEMENT_TO_CENTER_AND_CLICK_SCRIPT \u003d FileHelper"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .readFile(\"src/e2e/resources/scripts/scrollElementToCenterAndClick.js\");"},{"lineNumber":68,"author":{"gitId":"-"},"content":" READ_TINYMCE_CONTENT_SCRIPT \u003d FileHelper.readFile(\"src/e2e/resources/scripts/readTinyMCEContent.js\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" WRITE_TO_TINYMCE_SCRIPT \u003d FileHelper.readFile(\"src/e2e/resources/scripts/writeToTinyMCE.js\");"},{"lineNumber":70,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" /** Browser instance the page is loaded into. */"},{"lineNumber":76,"author":{"gitId":"-"},"content":" protected Browser browser;"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" /** Use for retrying due to transient UI issues. */"},{"lineNumber":79,"author":{"gitId":"-"},"content":" protected RetryManager uiRetryManager \u003d new RetryManager((TestProperties.TEST_TIMEOUT + 1) / 2);"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * Used by subclasses to create a {@code AppPage} object to wrap around the"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * given {@code browser} object. Fails if the page content does not match"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * the page type, as defined by the sub-class."},{"lineNumber":85,"author":{"gitId":"-"},"content":" */"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public AppPage(Browser browser) {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" this.browser \u003d browser;"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" boolean isCorrectPageType;"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" isCorrectPageType \u003d containsExpectedPageContents();"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" if (isCorrectPageType) {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" // ignore and try again"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" // To minimize test failures due to eventual consistency, we try to"},{"lineNumber":102,"author":{"gitId":"-"},"content":" // reload the page and compare once more."},{"lineNumber":103,"author":{"gitId":"-"},"content":" System.out.println(\"#### Incorrect page type: going to try reloading the page.\");"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(2000);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" reloadPage();"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" isCorrectPageType \u003d containsExpectedPageContents();"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" if (isCorrectPageType) {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" System.out.println(\"######### Not in the correct page! ##########\");"},{"lineNumber":116,"author":{"gitId":"-"},"content":" throw new IllegalStateException(\"Not in the correct page!\");"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" public Browser getBrowser() {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" return browser;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":124,"author":{"gitId":"-"},"content":" * Gets a new page object representation of the currently open web page in the browser."},{"lineNumber":125,"author":{"gitId":"-"},"content":" *"},{"lineNumber":126,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails if the new page content does not match content expected in a page of"},{"lineNumber":127,"author":{"gitId":"-"},"content":" * the type indicated by the parameter {@code typeOfPage}."},{"lineNumber":128,"author":{"gitId":"-"},"content":" */"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public static \u003cT extends AppPage\u003e T getNewPageInstance(Browser currentBrowser, Class\u003cT\u003e typeOfPage) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish(currentBrowser);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Constructor\u003cT\u003e constructor \u003d typeOfPage.getConstructor(Browser.class);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" T page \u003d constructor.newInstance(currentBrowser);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" PageFactory.initElements(currentBrowser.driver, page);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" page.waitForPageToLoad();"},{"lineNumber":136,"author":{"gitId":"-"},"content":" return page;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" } catch (InvocationTargetException e) {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (e.getCause() instanceof IllegalStateException) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" throw (IllegalStateException) e.getCause();"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" } catch (NoSuchMethodException | IllegalAccessException | InstantiationException e) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"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":" * Fails if the new page content does not match content expected in a page of"},{"lineNumber":149,"author":{"gitId":"-"},"content":" * the type indicated by the parameter {@code newPageType}."},{"lineNumber":150,"author":{"gitId":"-"},"content":" */"},{"lineNumber":151,"author":{"gitId":"-"},"content":" public \u003cT extends AppPage\u003e T changePageType(Class\u003cT\u003e newPageType) {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return getNewPageInstance(browser, newPageType);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" public \u003cE\u003e E waitFor(ExpectedCondition\u003cE\u003e expectedCondition) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" WebDriverWait wait \u003d new WebDriverWait(browser.driver, Duration.ofSeconds(TestProperties.TEST_TIMEOUT));"},{"lineNumber":157,"author":{"gitId":"-"},"content":" return wait.until(expectedCondition);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * Waits until the page is fully loaded."},{"lineNumber":162,"author":{"gitId":"-"},"content":" */"},{"lineNumber":163,"author":{"gitId":"-"},"content":" public void waitForPageToLoad() {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" waitForPageToLoad(false);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":168,"author":{"gitId":"-"},"content":" * Waits until the page is fully loaded."},{"lineNumber":169,"author":{"gitId":"-"},"content":" *"},{"lineNumber":170,"author":{"gitId":"-"},"content":" * @param excludeToast Set this to true if toast message\u0027s disappearance should not be counted"},{"lineNumber":171,"author":{"gitId":"-"},"content":" * as criteria for page load\u0027s completion."},{"lineNumber":172,"author":{"gitId":"-"},"content":" */"},{"lineNumber":173,"author":{"gitId":"-"},"content":" public void waitForPageToLoad(boolean excludeToast) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" browser.waitForPageLoad(excludeToast);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" public void waitForElementVisibility(WebElement element) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" waitFor(ExpectedConditions.visibilityOf(element));"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":" public void waitForElementVisibility(By by) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" waitFor(ExpectedConditions.visibilityOfElementLocated(by));"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" public void waitForElementToBeClickable(WebElement element) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" waitFor(ExpectedConditions.elementToBeClickable(element));"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" public static void waitUntilAnimationFinish(Browser browser) {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" WebDriverWait wait \u003d new WebDriverWait(browser.driver, Duration.ofSeconds(TestProperties.TEST_TIMEOUT));"},{"lineNumber":191,"author":{"gitId":"-"},"content":" wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className(\"ng-animating\")));"},{"lineNumber":192,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" public void waitUntilAnimationFinish() {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish(browser);"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":200,"author":{"gitId":"-"},"content":" * Waits until an element is no longer attached to the DOM or the timeout expires."},{"lineNumber":201,"author":{"gitId":"-"},"content":" * @param element the WebElement that expires after {@link TestProperties#TEST_TIMEOUT}"},{"lineNumber":202,"author":{"gitId":"-"},"content":" * @see org.openqa.selenium.support.ui.FluentWait#until(java.util.function.Function)"},{"lineNumber":203,"author":{"gitId":"-"},"content":" */"},{"lineNumber":204,"author":{"gitId":"-"},"content":" public void waitForElementStaleness(WebElement element) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" waitFor(ExpectedConditions.stalenessOf(element));"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" public void verifyUnclickable(WebElement element) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" if (\"a\".equals(element.getTagName())) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" assertTrue(element.getAttribute(\"class\").contains(\"disabled\"));"},{"lineNumber":211,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" assertNotNull(element.getAttribute(\"disabled\"));"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":217,"author":{"gitId":"-"},"content":" * Waits for a confirmation modal to appear and click the confirm button."},{"lineNumber":218,"author":{"gitId":"-"},"content":" */"},{"lineNumber":219,"author":{"gitId":"-"},"content":" public void waitForConfirmationModalAndClickOk() {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" waitForModalShown();"},{"lineNumber":221,"author":{"gitId":"-"},"content":" waitForElementVisibility(By.className(\"modal-btn-ok\"));"},{"lineNumber":222,"author":{"gitId":"-"},"content":" WebElement okayButton \u003d browser.driver.findElement(By.className(\"modal-btn-ok\"));"},{"lineNumber":223,"author":{"gitId":"-"},"content":" waitForElementToBeClickable(okayButton);"},{"lineNumber":224,"author":{"gitId":"-"},"content":" clickDismissModalButtonAndWaitForModalHidden(okayButton);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" private void waitForModalShown() {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" // Possible exploration: Change to listening to modal shown event as"},{"lineNumber":229,"author":{"gitId":"-"},"content":" // this is based on the implementation detail assumption that once modal-backdrop is added the modal is shown"},{"lineNumber":230,"author":{"gitId":"-"},"content":" waitForElementVisibility(By.className(\"modal-backdrop\"));"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" void waitForModalHidden(WebElement modalBackdrop) {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" // Possible exploration: Change to listening to modal hidden event as"},{"lineNumber":235,"author":{"gitId":"-"},"content":" // this is based on the implementation detail assumption that once modal-backdrop is removed the modal is hidden"},{"lineNumber":236,"author":{"gitId":"-"},"content":" waitForElementStaleness(modalBackdrop);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * Waits for the element to appear in the page, up to the timeout specified."},{"lineNumber":241,"author":{"gitId":"-"},"content":" */"},{"lineNumber":242,"author":{"gitId":"-"},"content":" public WebElement waitForElementPresence(By by) {"},{"lineNumber":243,"author":{"gitId":"-"},"content":" return waitFor(ExpectedConditions.presenceOfElementLocated(by));"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" public void reloadPage() {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" browser.goToUrl(browser.driver.getCurrentUrl());"},{"lineNumber":248,"author":{"gitId":"-"},"content":" waitForPageToLoad();"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":" protected Object executeScript(String script, Object... args) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" JavascriptExecutor javascriptExecutor \u003d (JavascriptExecutor) browser.driver;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" return javascriptExecutor.executeScript(script, args);"},{"lineNumber":254,"author":{"gitId":"-"},"content":" }"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":257,"author":{"gitId":"-"},"content":" * Returns the HTML source of the currently loaded page."},{"lineNumber":258,"author":{"gitId":"-"},"content":" */"},{"lineNumber":259,"author":{"gitId":"-"},"content":" public String getPageSource() {"},{"lineNumber":260,"author":{"gitId":"-"},"content":" return browser.driver.getPageSource();"},{"lineNumber":261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" public String getTitle() {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" return browser.driver.getTitle();"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":" public String getPageTitle() {"},{"lineNumber":268,"author":{"gitId":"-"},"content":" return waitForElementPresence(By.tagName(\"h1\")).getText();"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" public void click(By by) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" WebElement element \u003d browser.driver.findElement(by);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" click(element);"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" protected void click(WebElement element) {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" executeScript(\"arguments[0].click();\", element);"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":281,"author":{"gitId":"-"},"content":" * Simulates the clearing and sending of keys to an element."},{"lineNumber":282,"author":{"gitId":"-"},"content":" *"},{"lineNumber":283,"author":{"gitId":"-"},"content":" * \u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This method is not the same as using {@link WebElement#clear} followed by {@link WebElement#sendKeys}."},{"lineNumber":284,"author":{"gitId":"-"},"content":" * It avoids double firing of the {@code change} event which may occur when {@link WebElement#clear} is followed by"},{"lineNumber":285,"author":{"gitId":"-"},"content":" * {@link WebElement#sendKeys}."},{"lineNumber":286,"author":{"gitId":"-"},"content":" *"},{"lineNumber":287,"author":{"gitId":"-"},"content":" * @see AppPage#clearWithoutEvents(WebElement)"},{"lineNumber":288,"author":{"gitId":"-"},"content":" */"},{"lineNumber":289,"author":{"gitId":"-"},"content":" private void clearAndSendKeys(WebElement element, CharSequence... keysToSend) {"},{"lineNumber":290,"author":{"gitId":"-"},"content":" Map\u003cString, Object\u003e result \u003d clearWithoutEvents(element);"},{"lineNumber":291,"author":{"gitId":"-"},"content":" @SuppressWarnings(\"unchecked\")"},{"lineNumber":292,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e errors \u003d (Map\u003cString, String\u003e) result.get(\"errors\");"},{"lineNumber":293,"author":{"gitId":"-"},"content":" if (errors !\u003d null) {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" throw new InvalidElementStateException(errors.get(\"detail\"));"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":" element.sendKeys(keysToSend);"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":301,"author":{"gitId":"-"},"content":" * Clears any kind of editable element, but without firing the {@code change} event (unlike {@link WebElement#clear()})."},{"lineNumber":302,"author":{"gitId":"-"},"content":" * Avoid using this method if {@link WebElement#clear()} meets the requirements as this method depends on implementation"},{"lineNumber":303,"author":{"gitId":"-"},"content":" * details."},{"lineNumber":304,"author":{"gitId":"-"},"content":" */"},{"lineNumber":305,"author":{"gitId":"-"},"content":" private Map\u003cString, Object\u003e clearWithoutEvents(WebElement element) {"},{"lineNumber":306,"author":{"gitId":"-"},"content":" // This method is a close mirror of HtmlUnitWebElement#clear(), except that events are not handled. Note that"},{"lineNumber":307,"author":{"gitId":"-"},"content":" // HtmlUnitWebElement is mirrored as opposed to RemoteWebElement (which is used with actual browsers) for convenience"},{"lineNumber":308,"author":{"gitId":"-"},"content":" // and the implementation can differ."},{"lineNumber":309,"author":{"gitId":"-"},"content":" checkNotNull(element);"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" // Adapted from ExpectedConditions#stalenessOf which forces a staleness check. This allows a meaningful"},{"lineNumber":312,"author":{"gitId":"-"},"content":" // StaleElementReferenceException to be thrown rather than just getting a boolean from ExpectedConditions."},{"lineNumber":313,"author":{"gitId":"-"},"content":" element.isEnabled();"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":" // Fail safe in case the implementation of staleness checks is changed"},{"lineNumber":316,"author":{"gitId":"-"},"content":" if (isExpectedCondition(ExpectedConditions.stalenessOf(element))) {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" throw new AssertionError("},{"lineNumber":318,"author":{"gitId":"-"},"content":" \"Element is stale but should have been caught earlier by element.isEnabled().\");"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" @SuppressWarnings(\"unchecked\")"},{"lineNumber":322,"author":{"gitId":"-"},"content":" Map\u003cString, Object\u003e result \u003d (Map\u003cString, Object\u003e) executeScript(CLEAR_ELEMENT_SCRIPT, element);"},{"lineNumber":323,"author":{"gitId":"-"},"content":" return result;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" protected void fillTextBox(WebElement textBoxElement, String value) {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" scrollElementToCenterAndClick(textBoxElement);"},{"lineNumber":329,"author":{"gitId":"-"},"content":" } catch (WebDriverException e) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" // It is important that a text box element is clickable before we fill it but due to legacy reasons we continue"},{"lineNumber":331,"author":{"gitId":"-"},"content":" // attempting to fill the text box element even if it\u0027s not clickable (which may lead to an unexpected failure"},{"lineNumber":332,"author":{"gitId":"-"},"content":" // later on)"},{"lineNumber":333,"author":{"gitId":"-"},"content":" System.out.println(\"Unexpectedly not able to click on the text box element because of: \");"},{"lineNumber":334,"author":{"gitId":"-"},"content":" System.out.println(e);"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":" // If the intended value is empty `clear` works well enough for us"},{"lineNumber":338,"author":{"gitId":"-"},"content":" if (value.isEmpty()) {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" textBoxElement.clear();"},{"lineNumber":340,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":341,"author":{"gitId":"-"},"content":" }"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"-"},"content":" // Otherwise we need to do special handling of entering input because `clear` and `sendKeys` work differently."},{"lineNumber":344,"author":{"gitId":"-"},"content":" // See documentation for `clearAndSendKeys` for more details."},{"lineNumber":345,"author":{"gitId":"-"},"content":" clearAndSendKeys(textBoxElement, value);"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" textBoxElement.sendKeys(Keys.TAB); // blur the element to receive events"},{"lineNumber":348,"author":{"gitId":"-"},"content":" }"},{"lineNumber":349,"author":{"gitId":"-"},"content":""},{"lineNumber":350,"author":{"gitId":"-"},"content":" protected void fillDatePicker(WebElement dateBox, Instant startInstant, String timeZone) {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" WebElement buttonToOpenPicker \u003d dateBox.findElement(By.tagName(\"button\"));"},{"lineNumber":352,"author":{"gitId":"-"},"content":" click(buttonToOpenPicker);"},{"lineNumber":353,"author":{"gitId":"-"},"content":""},{"lineNumber":354,"author":{"gitId":"-"},"content":" WebElement datePicker \u003d dateBox.findElement(By.tagName(\"ngb-datepicker\"));"},{"lineNumber":355,"author":{"gitId":"-"},"content":" WebElement monthAndYearPicker \u003d datePicker.findElement(By.tagName(\"ngb-datepicker-navigation-select\"));"},{"lineNumber":356,"author":{"gitId":"-"},"content":" WebElement monthPicker \u003d monthAndYearPicker.findElement(By.cssSelector(\"[title\u003d\u0027Select month\u0027]\"));"},{"lineNumber":357,"author":{"gitId":"-"},"content":" WebElement yearPicker \u003d monthAndYearPicker.findElement(By.cssSelector(\"[title\u003d\u0027Select year\u0027]\"));"},{"lineNumber":358,"author":{"gitId":"-"},"content":" WebElement dayPicker \u003d datePicker.findElement(By.cssSelector(\"ngb-datepicker-month\"));"},{"lineNumber":359,"author":{"gitId":"-"},"content":""},{"lineNumber":360,"author":{"gitId":"-"},"content":" String year \u003d getYearString(startInstant, timeZone);"},{"lineNumber":361,"author":{"gitId":"-"},"content":" String month \u003d getMonthString(startInstant, timeZone);"},{"lineNumber":362,"author":{"gitId":"-"},"content":" String date \u003d getFullDateString(startInstant, timeZone);"},{"lineNumber":363,"author":{"gitId":"-"},"content":""},{"lineNumber":364,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(yearPicker, year);"},{"lineNumber":365,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(monthPicker, month);"},{"lineNumber":366,"author":{"gitId":"-"},"content":" click(dayPicker.findElement(By.cssSelector(String.format(\"[aria-label\u003d\u0027%s\u0027]\", date))));"},{"lineNumber":367,"author":{"gitId":"-"},"content":" }"},{"lineNumber":368,"author":{"gitId":"-"},"content":""},{"lineNumber":369,"author":{"gitId":"-"},"content":" protected void fillFileBox(RemoteWebElement fileBoxElement, String fileName) {"},{"lineNumber":370,"author":{"gitId":"-"},"content":" if (fileName.isEmpty()) {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" fileBoxElement.clear();"},{"lineNumber":372,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" fileBoxElement.setFileDetector(new UselessFileDetector());"},{"lineNumber":374,"author":{"gitId":"-"},"content":" String filePath \u003d new File(fileName).getAbsolutePath();"},{"lineNumber":375,"author":{"gitId":"-"},"content":" fileBoxElement.sendKeys(filePath);"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":" }"},{"lineNumber":378,"author":{"gitId":"-"},"content":""},{"lineNumber":379,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":380,"author":{"gitId":"-"},"content":" * Get rich text from editor."},{"lineNumber":381,"author":{"gitId":"-"},"content":" */"},{"lineNumber":382,"author":{"gitId":"-"},"content":" protected String getEditorRichText(WebElement editor) {"},{"lineNumber":383,"author":{"gitId":"-"},"content":" waitForElementPresence(By.tagName(\"iframe\"));"},{"lineNumber":384,"author":{"gitId":"-"},"content":" String id \u003d editor.findElement(By.tagName(\"textarea\")).getAttribute(\"id\");"},{"lineNumber":385,"author":{"gitId":"-"},"content":" return (String) ((JavascriptExecutor) browser.driver)"},{"lineNumber":386,"author":{"gitId":"-"},"content":" .executeAsyncScript(READ_TINYMCE_CONTENT_SCRIPT, id);"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":390,"author":{"gitId":"-"},"content":" * Write rich text to editor."},{"lineNumber":391,"author":{"gitId":"-"},"content":" */"},{"lineNumber":392,"author":{"gitId":"-"},"content":" protected void writeToRichTextEditor(WebElement editor, String text) {"},{"lineNumber":393,"author":{"gitId":"-"},"content":" waitForElementPresence(By.tagName(\"iframe\"));"},{"lineNumber":394,"author":{"gitId":"-"},"content":" String id \u003d editor.findElement(By.tagName(\"textarea\")).getAttribute(\"id\");"},{"lineNumber":395,"author":{"gitId":"-"},"content":" ((JavascriptExecutor) browser.driver).executeAsyncScript(WRITE_TO_TINYMCE_SCRIPT, id, text);"},{"lineNumber":396,"author":{"gitId":"-"},"content":" }"},{"lineNumber":397,"author":{"gitId":"-"},"content":""},{"lineNumber":398,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":399,"author":{"gitId":"-"},"content":" * Select the option, if it is not already selected."},{"lineNumber":400,"author":{"gitId":"-"},"content":" * No action taken if it is already selected."},{"lineNumber":401,"author":{"gitId":"-"},"content":" */"},{"lineNumber":402,"author":{"gitId":"-"},"content":" protected void markOptionAsSelected(WebElement option) {"},{"lineNumber":403,"author":{"gitId":"-"},"content":" waitForElementVisibility(option);"},{"lineNumber":404,"author":{"gitId":"-"},"content":" if (!option.isSelected()) {"},{"lineNumber":405,"author":{"gitId":"-"},"content":" click(option);"},{"lineNumber":406,"author":{"gitId":"-"},"content":" }"},{"lineNumber":407,"author":{"gitId":"-"},"content":" }"},{"lineNumber":408,"author":{"gitId":"-"},"content":""},{"lineNumber":409,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":410,"author":{"gitId":"-"},"content":" * Unselect the option, if it is not already unselected."},{"lineNumber":411,"author":{"gitId":"-"},"content":" * No action taken if it is already unselected\u0027."},{"lineNumber":412,"author":{"gitId":"-"},"content":" */"},{"lineNumber":413,"author":{"gitId":"-"},"content":" protected void markOptionAsUnselected(WebElement option) {"},{"lineNumber":414,"author":{"gitId":"-"},"content":" waitForElementVisibility(option);"},{"lineNumber":415,"author":{"gitId":"-"},"content":" if (option.isSelected()) {"},{"lineNumber":416,"author":{"gitId":"-"},"content":" click(option);"},{"lineNumber":417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":418,"author":{"gitId":"-"},"content":" }"},{"lineNumber":419,"author":{"gitId":"-"},"content":""},{"lineNumber":420,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":421,"author":{"gitId":"-"},"content":" * Returns the text of the option selected in the dropdown."},{"lineNumber":422,"author":{"gitId":"-"},"content":" */"},{"lineNumber":423,"author":{"gitId":"-"},"content":" protected String getSelectedDropdownOptionText(WebElement dropdown) {"},{"lineNumber":424,"author":{"gitId":"-"},"content":" Select select \u003d new Select(dropdown);"},{"lineNumber":425,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":426,"author":{"gitId":"-"},"content":" uiRetryManager.runUntilNoRecognizedException(new Retryable(\"Wait for dropdown text to load\") {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":428,"author":{"gitId":"-"},"content":" public void run() {"},{"lineNumber":429,"author":{"gitId":"-"},"content":" String txt \u003d select.getFirstSelectedOption().getText();"},{"lineNumber":430,"author":{"gitId":"-"},"content":" assertNotEquals(\"\", txt);"},{"lineNumber":431,"author":{"gitId":"-"},"content":" }"},{"lineNumber":432,"author":{"gitId":"-"},"content":" }, WebDriverException.class, AssertionError.class);"},{"lineNumber":433,"author":{"gitId":"-"},"content":" return select.getFirstSelectedOption().getText();"},{"lineNumber":434,"author":{"gitId":"-"},"content":" } catch (MaximumRetriesExceededException e) {"},{"lineNumber":435,"author":{"gitId":"-"},"content":" return select.getFirstSelectedOption().getText();"},{"lineNumber":436,"author":{"gitId":"-"},"content":" }"},{"lineNumber":437,"author":{"gitId":"-"},"content":" }"},{"lineNumber":438,"author":{"gitId":"-"},"content":""},{"lineNumber":439,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":440,"author":{"gitId":"-"},"content":" * Selects option in dropdown based on visible text."},{"lineNumber":441,"author":{"gitId":"-"},"content":" */"},{"lineNumber":442,"author":{"gitId":"-"},"content":" protected void selectDropdownOptionByText(WebElement dropdown, String text) {"},{"lineNumber":443,"author":{"gitId":"-"},"content":" scrollElementToCenter(dropdown);"},{"lineNumber":444,"author":{"gitId":"-"},"content":" Select select \u003d new Select(dropdown);"},{"lineNumber":445,"author":{"gitId":"-"},"content":" select.selectByVisibleText(text);"},{"lineNumber":446,"author":{"gitId":"-"},"content":" }"},{"lineNumber":447,"author":{"gitId":"-"},"content":""},{"lineNumber":448,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":449,"author":{"gitId":"-"},"content":" * Selects option in dropdown based on value."},{"lineNumber":450,"author":{"gitId":"-"},"content":" */"},{"lineNumber":451,"author":{"gitId":"-"},"content":" protected void selectDropdownOptionByValue(WebElement dropdown, String value) {"},{"lineNumber":452,"author":{"gitId":"-"},"content":" scrollElementToCenter(dropdown);"},{"lineNumber":453,"author":{"gitId":"-"},"content":" Select select \u003d new Select(dropdown);"},{"lineNumber":454,"author":{"gitId":"-"},"content":" select.selectByValue(value);"},{"lineNumber":455,"author":{"gitId":"-"},"content":" }"},{"lineNumber":456,"author":{"gitId":"-"},"content":""},{"lineNumber":457,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":458,"author":{"gitId":"-"},"content":" * Asserts that all values in the body of the given table are equal to the expectedTableBodyValues."},{"lineNumber":459,"author":{"gitId":"-"},"content":" */"},{"lineNumber":460,"author":{"gitId":"-"},"content":" protected void verifyTableBodyValues(WebElement table, String[][] expectedTableBodyValues) {"},{"lineNumber":461,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElement(By.tagName(\"tbody\")).findElements(By.tagName(\"tr\"));"},{"lineNumber":462,"author":{"gitId":"-"},"content":" assertTrue(expectedTableBodyValues.length \u003c\u003d rows.size());"},{"lineNumber":463,"author":{"gitId":"-"},"content":" for (int rowIndex \u003d 0; rowIndex \u003c expectedTableBodyValues.length; rowIndex++) {"},{"lineNumber":464,"author":{"gitId":"-"},"content":" verifyTableRowValues(rows.get(rowIndex), expectedTableBodyValues[rowIndex]);"},{"lineNumber":465,"author":{"gitId":"-"},"content":" }"},{"lineNumber":466,"author":{"gitId":"-"},"content":" }"},{"lineNumber":467,"author":{"gitId":"-"},"content":""},{"lineNumber":468,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":469,"author":{"gitId":"-"},"content":" * Asserts that all values in the row header of the given table are equal to the expectedRowHeaderValues."},{"lineNumber":470,"author":{"gitId":"-"},"content":" */"},{"lineNumber":471,"author":{"gitId":"-"},"content":" protected void verifyTableRowHeaderValues(WebElement table, String[][] expectedTableRowHeaderValues) {"},{"lineNumber":472,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElement(By.tagName(\"thead\")).findElements(By.tagName(\"tr\"));"},{"lineNumber":473,"author":{"gitId":"-"},"content":" assertTrue(expectedTableRowHeaderValues.length \u003c\u003d rows.size());"},{"lineNumber":474,"author":{"gitId":"-"},"content":" for (int rowIndex \u003d 0; rowIndex \u003c expectedTableRowHeaderValues.length; rowIndex++) {"},{"lineNumber":475,"author":{"gitId":"-"},"content":" verifyTableHeaderValues(rows.get(rowIndex), expectedTableRowHeaderValues[rowIndex]);"},{"lineNumber":476,"author":{"gitId":"-"},"content":" }"},{"lineNumber":477,"author":{"gitId":"-"},"content":" }"},{"lineNumber":478,"author":{"gitId":"-"},"content":""},{"lineNumber":479,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":480,"author":{"gitId":"-"},"content":" * Asserts that all values in the column header of the given table are equal to the expectedTablColumnHeaderValues."},{"lineNumber":481,"author":{"gitId":"-"},"content":" */"},{"lineNumber":482,"author":{"gitId":"-"},"content":" protected void verifyTableColumnHeaderValues(WebElement table, String[][] expectedTablColumnHeaderValues) {"},{"lineNumber":483,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElement(By.tagName(\"tbody\")).findElements(By.tagName(\"tr\"));"},{"lineNumber":484,"author":{"gitId":"-"},"content":" assertTrue(expectedTablColumnHeaderValues.length \u003c\u003d rows.size());"},{"lineNumber":485,"author":{"gitId":"-"},"content":" for (int rowIndex \u003d 0; rowIndex \u003c expectedTablColumnHeaderValues.length; rowIndex++) {"},{"lineNumber":486,"author":{"gitId":"-"},"content":" verifyTableHeaderValues(rows.get(rowIndex), expectedTablColumnHeaderValues[rowIndex]);"},{"lineNumber":487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":488,"author":{"gitId":"-"},"content":" }"},{"lineNumber":489,"author":{"gitId":"-"},"content":""},{"lineNumber":490,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":491,"author":{"gitId":"-"},"content":" * Asserts that all data values in the given table row are equal to the expectedRowValues."},{"lineNumber":492,"author":{"gitId":"-"},"content":" */"},{"lineNumber":493,"author":{"gitId":"-"},"content":" protected void verifyTableRowValues(WebElement row, String[] expectedRowValues) {"},{"lineNumber":494,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e cells \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":495,"author":{"gitId":"-"},"content":" assertTrue(expectedRowValues.length \u003c\u003d cells.size());"},{"lineNumber":496,"author":{"gitId":"-"},"content":" for (int cellIndex \u003d 0; cellIndex \u003c expectedRowValues.length; cellIndex++) {"},{"lineNumber":497,"author":{"gitId":"-"},"content":" assertEquals(expectedRowValues[cellIndex], cells.get(cellIndex).getText());"},{"lineNumber":498,"author":{"gitId":"-"},"content":" }"},{"lineNumber":499,"author":{"gitId":"-"},"content":" }"},{"lineNumber":500,"author":{"gitId":"-"},"content":""},{"lineNumber":501,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":502,"author":{"gitId":"-"},"content":" * Asserts that all header values in the given table row are equal to the expectedRowHeaderValues."},{"lineNumber":503,"author":{"gitId":"-"},"content":" */"},{"lineNumber":504,"author":{"gitId":"-"},"content":" protected void verifyTableHeaderValues(WebElement row, String[] expectedRowHeaderValues) {"},{"lineNumber":505,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e cells \u003d row.findElements(By.tagName(\"th\"));"},{"lineNumber":506,"author":{"gitId":"-"},"content":" assertTrue(expectedRowHeaderValues.length \u003c\u003d cells.size());"},{"lineNumber":507,"author":{"gitId":"-"},"content":" for (int cellIndex \u003d 0; cellIndex \u003c expectedRowHeaderValues.length; cellIndex++) {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" assertEquals(expectedRowHeaderValues[cellIndex], cells.get(cellIndex).getText());"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" }"},{"lineNumber":511,"author":{"gitId":"-"},"content":""},{"lineNumber":512,"author":{"gitId":"-"},"content":" public void verifyBannerContent(NotificationAttributes expected) {"},{"lineNumber":513,"author":{"gitId":"-"},"content":" WebElement banner \u003d browser.driver.findElement(By.className(\"banner\"));"},{"lineNumber":514,"author":{"gitId":"-"},"content":" String title \u003d banner.findElement(By.tagName(\"h5\")).getText();"},{"lineNumber":515,"author":{"gitId":"-"},"content":" String message \u003d banner.findElement(By.className(\"banner-text\")).getAttribute(\"innerHTML\");"},{"lineNumber":516,"author":{"gitId":"-"},"content":" assertEquals(expected.getTitle(), title);"},{"lineNumber":517,"author":{"gitId":"-"},"content":" assertEquals(expected.getMessage(), message);"},{"lineNumber":518,"author":{"gitId":"-"},"content":" }"},{"lineNumber":519,"author":{"gitId":"-"},"content":""},{"lineNumber":520,"author":{"gitId":"-"},"content":" public boolean isBannerVisible() {"},{"lineNumber":521,"author":{"gitId":"-"},"content":" return isElementVisible(By.className(\"banner\"));"},{"lineNumber":522,"author":{"gitId":"-"},"content":" }"},{"lineNumber":523,"author":{"gitId":"-"},"content":""},{"lineNumber":524,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":525,"author":{"gitId":"-"},"content":" * Clicks the element and clicks \u0027Yes\u0027 in the follow up dialog box."},{"lineNumber":526,"author":{"gitId":"-"},"content":" * Fails if there is no dialog box."},{"lineNumber":527,"author":{"gitId":"-"},"content":" * @return the resulting page."},{"lineNumber":528,"author":{"gitId":"-"},"content":" */"},{"lineNumber":529,"author":{"gitId":"-"},"content":" public AppPage clickAndConfirm(WebElement elementToClick) {"},{"lineNumber":530,"author":{"gitId":"-"},"content":" click(elementToClick);"},{"lineNumber":531,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":532,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":533,"author":{"gitId":"-"},"content":" }"},{"lineNumber":534,"author":{"gitId":"-"},"content":""},{"lineNumber":535,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":536,"author":{"gitId":"-"},"content":" * Returns True if the page contains some basic elements expected in a page of the"},{"lineNumber":537,"author":{"gitId":"-"},"content":" * specific type. e.g., the top heading."},{"lineNumber":538,"author":{"gitId":"-"},"content":" */"},{"lineNumber":539,"author":{"gitId":"-"},"content":" protected abstract boolean containsExpectedPageContents();"},{"lineNumber":540,"author":{"gitId":"-"},"content":""},{"lineNumber":541,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":542,"author":{"gitId":"-"},"content":" * Returns True if there is a corresponding element for the given locator."},{"lineNumber":543,"author":{"gitId":"-"},"content":" */"},{"lineNumber":544,"author":{"gitId":"-"},"content":" public boolean isElementPresent(By by) {"},{"lineNumber":545,"author":{"gitId":"-"},"content":" return browser.driver.findElements(by).size() !\u003d 0;"},{"lineNumber":546,"author":{"gitId":"-"},"content":" }"},{"lineNumber":547,"author":{"gitId":"-"},"content":""},{"lineNumber":548,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":549,"author":{"gitId":"-"},"content":" * Returns True if there is a corresponding element for the given id or name."},{"lineNumber":550,"author":{"gitId":"-"},"content":" */"},{"lineNumber":551,"author":{"gitId":"-"},"content":" public boolean isElementPresent(String elementId) {"},{"lineNumber":552,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":553,"author":{"gitId":"-"},"content":" browser.driver.findElement(By.id(elementId));"},{"lineNumber":554,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":555,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":556,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":557,"author":{"gitId":"-"},"content":" }"},{"lineNumber":558,"author":{"gitId":"-"},"content":" }"},{"lineNumber":559,"author":{"gitId":"-"},"content":""},{"lineNumber":560,"author":{"gitId":"-"},"content":" public boolean isElementVisible(By by) {"},{"lineNumber":561,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":562,"author":{"gitId":"-"},"content":" return browser.driver.findElement(by).isDisplayed();"},{"lineNumber":563,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":564,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":565,"author":{"gitId":"-"},"content":" }"},{"lineNumber":566,"author":{"gitId":"-"},"content":" }"},{"lineNumber":567,"author":{"gitId":"-"},"content":""},{"lineNumber":568,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":569,"author":{"gitId":"-"},"content":" * Returns true if the expected condition is evaluated to true immediately."},{"lineNumber":570,"author":{"gitId":"-"},"content":" * @see ExpectedConditions"},{"lineNumber":571,"author":{"gitId":"-"},"content":" */"},{"lineNumber":572,"author":{"gitId":"-"},"content":" private boolean isExpectedCondition(ExpectedCondition\u003c?\u003e expectedCondition) {"},{"lineNumber":573,"author":{"gitId":"-"},"content":" Object value \u003d expectedCondition.apply(browser.driver);"},{"lineNumber":574,"author":{"gitId":"-"},"content":" if (value \u003d\u003d null) {"},{"lineNumber":575,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":576,"author":{"gitId":"-"},"content":" }"},{"lineNumber":577,"author":{"gitId":"-"},"content":""},{"lineNumber":578,"author":{"gitId":"-"},"content":" if (value.getClass() \u003d\u003d Boolean.class) {"},{"lineNumber":579,"author":{"gitId":"-"},"content":" return (boolean) value;"},{"lineNumber":580,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":581,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":582,"author":{"gitId":"-"},"content":" }"},{"lineNumber":583,"author":{"gitId":"-"},"content":" }"},{"lineNumber":584,"author":{"gitId":"-"},"content":""},{"lineNumber":585,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":586,"author":{"gitId":"-"},"content":" * Clicks a button (can be inside or outside the modal) that dismisses the modal and waits for the modal to be hidden."},{"lineNumber":587,"author":{"gitId":"-"},"content":" * The caller must ensure the button is in the modal or a timeout will occur while waiting for the modal to be hidden."},{"lineNumber":588,"author":{"gitId":"-"},"content":" * @param dismissModalButton a button that dismisses the modal"},{"lineNumber":589,"author":{"gitId":"-"},"content":" */"},{"lineNumber":590,"author":{"gitId":"-"},"content":" public void clickDismissModalButtonAndWaitForModalHidden(WebElement dismissModalButton) {"},{"lineNumber":591,"author":{"gitId":"-"},"content":" // Note: Should first check if the button can actually dismiss the modal otherwise the state will be consistent."},{"lineNumber":592,"author":{"gitId":"-"},"content":" // However, it is too difficult to check."},{"lineNumber":593,"author":{"gitId":"-"},"content":""},{"lineNumber":594,"author":{"gitId":"-"},"content":" WebElement modalBackdrop \u003d browser.driver.findElement(By.className(\"modal-backdrop\"));"},{"lineNumber":595,"author":{"gitId":"-"},"content":""},{"lineNumber":596,"author":{"gitId":"-"},"content":" click(dismissModalButton);"},{"lineNumber":597,"author":{"gitId":"-"},"content":" waitForModalHidden(modalBackdrop);"},{"lineNumber":598,"author":{"gitId":"-"},"content":" }"},{"lineNumber":599,"author":{"gitId":"-"},"content":""},{"lineNumber":600,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":601,"author":{"gitId":"-"},"content":" * Scrolls element to center and clicks on it."},{"lineNumber":602,"author":{"gitId":"-"},"content":" *"},{"lineNumber":603,"author":{"gitId":"-"},"content":" * \u003cp\u003eAs compared to {@link org.openqa.selenium.interactions.Actions#moveToElement(WebElement)}, this method is"},{"lineNumber":604,"author":{"gitId":"-"},"content":" * more reliable as the element will not get blocked by elements such as the header."},{"lineNumber":605,"author":{"gitId":"-"},"content":" *"},{"lineNumber":606,"author":{"gitId":"-"},"content":" * \u003cp\u003eFurthermore, {@link org.openqa.selenium.interactions.Actions#moveToElement(WebElement)} is currently not"},{"lineNumber":607,"author":{"gitId":"-"},"content":" * working in Geckodriver."},{"lineNumber":608,"author":{"gitId":"-"},"content":" *"},{"lineNumber":609,"author":{"gitId":"-"},"content":" * \u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e A \"scroll into view\" Actions primitive is in progress and may allow scrolling element to center."},{"lineNumber":610,"author":{"gitId":"-"},"content":" * Tracking issue:"},{"lineNumber":611,"author":{"gitId":"-"},"content":" * \u003ca href\u003d\"https://github.com/w3c/webdriver/issues/1005\"\u003eMissing \"scroll into view\" Actions primitive\u003c/a\u003e."},{"lineNumber":612,"author":{"gitId":"-"},"content":" *"},{"lineNumber":613,"author":{"gitId":"-"},"content":" * \u003cp\u003eAlso note that there are some other caveats, for example"},{"lineNumber":614,"author":{"gitId":"-"},"content":" * {@code new Actions(browser.driver).moveToElement(...).click(...).perform()} does not behave consistently across"},{"lineNumber":615,"author":{"gitId":"-"},"content":" * browsers."},{"lineNumber":616,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":617,"author":{"gitId":"-"},"content":" * \u003cli\u003eIn FirefoxDriver, the element is scrolled to and then a click is attempted on the element."},{"lineNumber":618,"author":{"gitId":"-"},"content":" * \u003cli\u003eIn ChromeDriver, the mouse is scrolled to the element and then a click is attempted on the mouse coordinate,"},{"lineNumber":619,"author":{"gitId":"-"},"content":" * which means another element can actually be clicked (such as the header or a blocking pop-up)."},{"lineNumber":620,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":621,"author":{"gitId":"-"},"content":" *"},{"lineNumber":622,"author":{"gitId":"-"},"content":" * \u003cp\u003eChromeDriver also automatically scrolls to an element when clicking an element if it is not in the viewport."},{"lineNumber":623,"author":{"gitId":"-"},"content":" */"},{"lineNumber":624,"author":{"gitId":"-"},"content":" void scrollElementToCenterAndClick(WebElement element) {"},{"lineNumber":625,"author":{"gitId":"-"},"content":" // TODO: migrate to `scrollIntoView` when Geckodriver is adopted"},{"lineNumber":626,"author":{"gitId":"-"},"content":" scrollElementToCenter(element);"},{"lineNumber":627,"author":{"gitId":"-"},"content":" element.click();"},{"lineNumber":628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":629,"author":{"gitId":"-"},"content":""},{"lineNumber":630,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":631,"author":{"gitId":"-"},"content":" * Scrolls element to center."},{"lineNumber":632,"author":{"gitId":"-"},"content":" */"},{"lineNumber":633,"author":{"gitId":"-"},"content":" void scrollElementToCenter(WebElement element) {"},{"lineNumber":634,"author":{"gitId":"-"},"content":" executeScript(SCROLL_ELEMENT_TO_CENTER_AND_CLICK_SCRIPT, element);"},{"lineNumber":635,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":636,"author":{"gitId":"-"},"content":" }"},{"lineNumber":637,"author":{"gitId":"-"},"content":""},{"lineNumber":638,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":639,"author":{"gitId":"-"},"content":" * Asserts message in toast is equal to the expected message."},{"lineNumber":640,"author":{"gitId":"-"},"content":" */"},{"lineNumber":641,"author":{"gitId":"-"},"content":" public void verifyStatusMessage(String expectedMessage) {"},{"lineNumber":642,"author":{"gitId":"-"},"content":" verifyStatusMessageWithLinks(expectedMessage, new String[] {});"},{"lineNumber":643,"author":{"gitId":"-"},"content":" closeToast();"},{"lineNumber":644,"author":{"gitId":"-"},"content":" }"},{"lineNumber":645,"author":{"gitId":"-"},"content":""},{"lineNumber":646,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":647,"author":{"gitId":"-"},"content":" * Asserts message in toast is equal to the expected message and contains the expected links."},{"lineNumber":648,"author":{"gitId":"-"},"content":" */"},{"lineNumber":649,"author":{"gitId":"-"},"content":" public void verifyStatusMessageWithLinks(String expectedMessage, String[] expectedLinks) {"},{"lineNumber":650,"author":{"gitId":"-"},"content":" WebElement[] statusMessage \u003d new WebElement[1];"},{"lineNumber":651,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":652,"author":{"gitId":"-"},"content":" uiRetryManager.runUntilNoRecognizedException(new Retryable(\"Verify status to user\") {"},{"lineNumber":653,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":654,"author":{"gitId":"-"},"content":" public void run() {"},{"lineNumber":655,"author":{"gitId":"-"},"content":" statusMessage[0] \u003d waitForElementPresence(By.className(\"toast-body\"));"},{"lineNumber":656,"author":{"gitId":"-"},"content":" assertEquals(expectedMessage, statusMessage[0].getText());"},{"lineNumber":657,"author":{"gitId":"-"},"content":" }"},{"lineNumber":658,"author":{"gitId":"-"},"content":" }, WebDriverException.class, AssertionError.class);"},{"lineNumber":659,"author":{"gitId":"-"},"content":" } catch (MaximumRetriesExceededException e) {"},{"lineNumber":660,"author":{"gitId":"-"},"content":" statusMessage[0] \u003d waitForElementPresence(By.className(\"toast-body\"));"},{"lineNumber":661,"author":{"gitId":"-"},"content":" assertEquals(expectedMessage, statusMessage[0].getText());"},{"lineNumber":662,"author":{"gitId":"-"},"content":" } finally {"},{"lineNumber":663,"author":{"gitId":"-"},"content":" if (expectedLinks.length \u003e 0) {"},{"lineNumber":664,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e actualLinks \u003d statusMessage[0].findElements(By.tagName(\"a\"));"},{"lineNumber":665,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c expectedLinks.length; i++) {"},{"lineNumber":666,"author":{"gitId":"-"},"content":" assertTrue(actualLinks.get(i).getAttribute(\"href\").contains(expectedLinks[i]));"},{"lineNumber":667,"author":{"gitId":"-"},"content":" }"},{"lineNumber":668,"author":{"gitId":"-"},"content":" }"},{"lineNumber":669,"author":{"gitId":"-"},"content":" }"},{"lineNumber":670,"author":{"gitId":"-"},"content":" }"},{"lineNumber":671,"author":{"gitId":"-"},"content":""},{"lineNumber":672,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":673,"author":{"gitId":"-"},"content":" * Closes toast message."},{"lineNumber":674,"author":{"gitId":"-"},"content":" */"},{"lineNumber":675,"author":{"gitId":"-"},"content":" public void closeToast() {"},{"lineNumber":676,"author":{"gitId":"-"},"content":" WebElement toastCloseButton \u003d waitForElementPresence(By.className(\"btn-close\"));"},{"lineNumber":677,"author":{"gitId":"-"},"content":" click(toastCloseButton);"},{"lineNumber":678,"author":{"gitId":"-"},"content":" }"},{"lineNumber":679,"author":{"gitId":"-"},"content":""},{"lineNumber":680,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":681,"author":{"gitId":"-"},"content":" * Switches to the new browser window just opened."},{"lineNumber":682,"author":{"gitId":"-"},"content":" */"},{"lineNumber":683,"author":{"gitId":"-"},"content":" protected void switchToNewWindow() {"},{"lineNumber":684,"author":{"gitId":"-"},"content":" browser.switchToNewWindow();"},{"lineNumber":685,"author":{"gitId":"-"},"content":" }"},{"lineNumber":686,"author":{"gitId":"-"},"content":""},{"lineNumber":687,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":688,"author":{"gitId":"-"},"content":" * Closes current window and switches back to parent window."},{"lineNumber":689,"author":{"gitId":"-"},"content":" */"},{"lineNumber":690,"author":{"gitId":"-"},"content":" public void closeCurrentWindowAndSwitchToParentWindow() {"},{"lineNumber":691,"author":{"gitId":"-"},"content":" browser.closeCurrentWindowAndSwitchToParentWindow();"},{"lineNumber":692,"author":{"gitId":"-"},"content":" }"},{"lineNumber":693,"author":{"gitId":"-"},"content":""},{"lineNumber":694,"author":{"gitId":"-"},"content":" String getDisplayGiverName(FeedbackParticipantType type) {"},{"lineNumber":695,"author":{"gitId":"-"},"content":" switch (type) {"},{"lineNumber":696,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":697,"author":{"gitId":"-"},"content":" return \"Feedback session creator (i.e., me)\";"},{"lineNumber":698,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":699,"author":{"gitId":"-"},"content":" return \"Students in this course\";"},{"lineNumber":700,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":701,"author":{"gitId":"-"},"content":" return \"Instructors in this course\";"},{"lineNumber":702,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":703,"author":{"gitId":"-"},"content":" return \"Teams in this course\";"},{"lineNumber":704,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":705,"author":{"gitId":"-"},"content":" throw new IllegalArgumentException(\"Unknown FeedbackParticipantType: \" + type);"},{"lineNumber":706,"author":{"gitId":"-"},"content":" }"},{"lineNumber":707,"author":{"gitId":"-"},"content":" }"},{"lineNumber":708,"author":{"gitId":"-"},"content":""},{"lineNumber":709,"author":{"gitId":"-"},"content":" String getDisplayRecipientName(FeedbackParticipantType type) {"},{"lineNumber":710,"author":{"gitId":"-"},"content":" switch (type) {"},{"lineNumber":711,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":712,"author":{"gitId":"-"},"content":" return \"Giver (Self feedback)\";"},{"lineNumber":713,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":714,"author":{"gitId":"-"},"content":" return \"Other students in the same section\";"},{"lineNumber":715,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":716,"author":{"gitId":"-"},"content":" return \"Students in the course\";"},{"lineNumber":717,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":718,"author":{"gitId":"-"},"content":" return \"Other students in the course\";"},{"lineNumber":719,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":720,"author":{"gitId":"-"},"content":" return \"Instructors in the course\";"},{"lineNumber":721,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":722,"author":{"gitId":"-"},"content":" return \"Other teams in the same section\";"},{"lineNumber":723,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":724,"author":{"gitId":"-"},"content":" return \"Teams in the course\";"},{"lineNumber":725,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":726,"author":{"gitId":"-"},"content":" return \"Other teams in the course\";"},{"lineNumber":727,"author":{"gitId":"-"},"content":" case OWN_TEAM:"},{"lineNumber":728,"author":{"gitId":"-"},"content":" return \"Giver\u0027s team\";"},{"lineNumber":729,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":730,"author":{"gitId":"-"},"content":" return \"Giver\u0027s team members\";"},{"lineNumber":731,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":732,"author":{"gitId":"-"},"content":" return \"Giver\u0027s team members and Giver\";"},{"lineNumber":733,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":734,"author":{"gitId":"-"},"content":" return \"Nobody specific (For general class feedback)\";"},{"lineNumber":735,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":736,"author":{"gitId":"-"},"content":" throw new IllegalArgumentException(\"Unknown FeedbackParticipantType: \" + type);"},{"lineNumber":737,"author":{"gitId":"-"},"content":" }"},{"lineNumber":738,"author":{"gitId":"-"},"content":" }"},{"lineNumber":739,"author":{"gitId":"-"},"content":""},{"lineNumber":740,"author":{"gitId":"-"},"content":" String getDisplayedDateTime(Instant instant, String timeZone, String pattern) {"},{"lineNumber":741,"author":{"gitId":"-"},"content":" ZonedDateTime zonedDateTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone(instant, timeZone, false)"},{"lineNumber":742,"author":{"gitId":"-"},"content":" .atZone(ZoneId.of(timeZone));"},{"lineNumber":743,"author":{"gitId":"yuanxi1"},"content":" return DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH).format(zonedDateTime);"},{"lineNumber":744,"author":{"gitId":"-"},"content":" }"},{"lineNumber":745,"author":{"gitId":"-"},"content":""},{"lineNumber":746,"author":{"gitId":"-"},"content":" private String getFullDateString(Instant instant, String timeZone) {"},{"lineNumber":747,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"EEEE, MMMM d, yyyy\");"},{"lineNumber":748,"author":{"gitId":"-"},"content":" }"},{"lineNumber":749,"author":{"gitId":"-"},"content":""},{"lineNumber":750,"author":{"gitId":"-"},"content":" private String getYearString(Instant instant, String timeZone) {"},{"lineNumber":751,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"yyyy\");"},{"lineNumber":752,"author":{"gitId":"-"},"content":" }"},{"lineNumber":753,"author":{"gitId":"-"},"content":""},{"lineNumber":754,"author":{"gitId":"-"},"content":" private String getMonthString(Instant instant, String timeZone) {"},{"lineNumber":755,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"MMM\");"},{"lineNumber":756,"author":{"gitId":"-"},"content":" }"},{"lineNumber":757,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":2,"-":755}},{"path":"src/e2e/java/teammates/e2e/pageobjects/FeedbackSubmitPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertEquals;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertFalse;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertTrue;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.junit.Assert.fail;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.openqa.selenium.NoSuchElementException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackConstantSumQuestionDetails;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackConstantSumResponseDetails;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackContributionQuestionDetails;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackContributionResponseDetails;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqQuestionDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqResponseDetails;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqResponseDetails;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackNumericalScaleQuestionDetails;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackNumericalScaleResponseDetails;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsQuestionDetails;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsResponseDetails;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankQuestionDetails;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankRecipientsResponseDetails;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRubricQuestionDetails;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRubricResponseDetails;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextQuestionDetails;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextResponseDetails;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Represents the feedback submission page of the website."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"-"},"content":"public class FeedbackSubmitPage extends AppPage {"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" public FeedbackSubmitPage(Browser browser) {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":52,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (isElementPresent(By.className(\"modal-content\"))) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return getPageTitle().contains(\"Submit Feedback\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" public void verifyFeedbackSessionDetails(FeedbackSessionAttributes feedbackSession, CourseAttributes course) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertEquals(getCourseId(), feedbackSession.getCourseId());"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertEquals(getCourseName(), course.getName());"},{"lineNumber":62,"author":{"gitId":"-"},"content":" assertEquals(getCourseInstitute(), course.getInstitute());"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertEquals(getFeedbackSessionName(), feedbackSession.getFeedbackSessionName());"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertDateEquals(getOpeningTime(), feedbackSession.getStartTime(), feedbackSession.getTimeZone());"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertDateEquals(getClosingTime(), feedbackSession.getEndTime(), feedbackSession.getTimeZone());"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertEquals(getInstructions(), feedbackSession.getInstructions());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void verifyNumQuestions(int expected) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertEquals(browser.driver.findElements(By.cssSelector(\"[id^\u003d\u0027question-submission-form-qn-\u0027]\")).size(), expected);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void verifyQuestionDetails(int qnNumber, FeedbackQuestionAttributes questionAttributes) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assertEquals(getQuestionBrief(qnNumber), questionAttributes.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":75,"author":{"gitId":"-"},"content":" verifyVisibilityList(qnNumber, questionAttributes);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" if (questionAttributes.getQuestionDescription() !\u003d null) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertEquals(getQuestionDescription(qnNumber), questionAttributes.getQuestionDescription());"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void verifyLimitedRecipients(int qnNumber, int numRecipients, List\u003cString\u003e recipientNames) {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientDropdowns \u003d getQuestionForm(qnNumber)"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .findElements(By.cssSelector(\"[id^\u003d\u0027recipient-dropdown-qn-\u0027]\"));"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertEquals(numRecipients, recipientDropdowns.size());"},{"lineNumber":85,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipients \u003d recipientDropdowns.get(0).findElements(By.tagName(\"option\"));"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertEquals(recipientNames.size(), recipients.size() - 1);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" Collections.sort(recipientNames);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c recipientNames.size(); i++) {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertEquals(recipientNames.get(i), recipients.get(i + 1).getText());"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void verifyRecipients(int qnNumber, List\u003cString\u003e recipientNames, String role) {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Collections.sort(recipientNames);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c recipientNames.size(); i++) {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertEquals(recipientNames.get(i) + \" (\" + role + \")\","},{"lineNumber":98,"author":{"gitId":"-"},"content":" questionForm.findElement(By.id(\"recipient-name-qn-\" + qnNumber + \"-idx-\" + i)).getText());"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" public void verifyWarningMessageForPartialResponse(int[] unansweredQuestions) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" click(getSubmitAllQuestionsButton());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" StringBuilder expectedSb \u003d new StringBuilder();"},{"lineNumber":105,"author":{"gitId":"-"},"content":" for (int unansweredQuestion : unansweredQuestions) {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" expectedSb.append(unansweredQuestion).append(\", \");"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":" String expectedString \u003d expectedSb.toString().substring(0, expectedSb.length() - 2) + \".\";"},{"lineNumber":109,"author":{"gitId":"-"},"content":" String warningString \u003d waitForElementPresence(By.id(\"not-answered-questions\")).getText();"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertEquals(warningString.split(\": \")[1], expectedString);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" waitForConfirmationModalAndClickOk();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" public void verifyCannotSubmit() {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" WebElement submitButton \u003d waitForElementPresence(By.cssSelector(\"[id^\u003d\u0027btn-submit-qn-\u0027]\"));"},{"lineNumber":116,"author":{"gitId":"-"},"content":" if (submitButton !\u003d null) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertFalse(submitButton.isEnabled());"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" public void addComment(int qnNumber, String recipient, String newComment) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" WebElement commentSection \u003d getCommentSection(qnNumber, recipient);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" click(commentSection.findElement(By.className(\"btn-add-comment\")));"},{"lineNumber":124,"author":{"gitId":"-"},"content":" writeToCommentEditor(commentSection, newComment);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" public void editComment(int qnNumber, String recipient, String editedComment) {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" WebElement commentSection \u003d getCommentSection(qnNumber, recipient);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" click(commentSection.findElement(By.className(\"btn-edit-comment\")));"},{"lineNumber":130,"author":{"gitId":"-"},"content":" writeToCommentEditor(commentSection, editedComment);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void deleteComment(int qnNumber, String recipient) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" clickAndConfirm(getCommentSection(qnNumber, recipient).findElement(By.className(\"btn-delete-comment\")));"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" public void verifyComment(int qnNumber, String recipient, String expectedComment) {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" WebElement commentSection \u003d getCommentSection(qnNumber, recipient);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" String actualComment \u003d commentSection.findElement(By.className(\"comment-text\")).getAttribute(\"innerHTML\");"},{"lineNumber":140,"author":{"gitId":"-"},"content":" assertEquals(expectedComment, actualComment);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" public void verifyNoCommentPresent(int qnNumber, String recipient) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" int numComments \u003d getCommentSection(qnNumber, recipient).findElements(By.className(\"comment-text\")).size();"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertEquals(numComments, 0);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" public void verifyTextQuestion(int qnNumber, FeedbackTextQuestionDetails questionDetails) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" String recommendedLengthText \u003d getQuestionForm(qnNumber).findElement(By.id(\"recommended-length\")).getText();"},{"lineNumber":150,"author":{"gitId":"-"},"content":" assertEquals(recommendedLengthText, \"Recommended length for the answer: \""},{"lineNumber":151,"author":{"gitId":"-"},"content":" + questionDetails.getRecommendedLength() + \" words\");"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" public void fillTextResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" FeedbackTextResponseDetails responseDetails \u003d (FeedbackTextResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":156,"author":{"gitId":"-"},"content":" writeToRichTextEditor(getTextResponseEditor(qnNumber, recipient), responseDetails.getAnswer());"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" public void fillTextResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" FeedbackTextResponseDetails responseDetails \u003d"},{"lineNumber":161,"author":{"gitId":"-"},"content":" (FeedbackTextResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" writeToRichTextEditor(getTextResponseEditor(qnNumber, recipient), responseDetails.getAnswer());"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" public void verifyTextResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" FeedbackTextResponseDetails responseDetails \u003d (FeedbackTextResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":167,"author":{"gitId":"-"},"content":" int responseLength \u003d responseDetails.getAnswer().split(\" \").length;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(getEditorRichText(getTextResponseEditor(qnNumber, recipient)), responseDetails.getAnswer());"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertEquals(getResponseLengthText(qnNumber, recipient), \"Response length: \" + responseLength"},{"lineNumber":170,"author":{"gitId":"-"},"content":" + \" words\");"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" public void verifyTextResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" FeedbackTextResponseDetails responseDetails \u003d"},{"lineNumber":175,"author":{"gitId":"-"},"content":" (FeedbackTextResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":176,"author":{"gitId":"-"},"content":" int responseLength \u003d responseDetails.getAnswer().split(\" \").length;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" assertEquals(getEditorRichText(getTextResponseEditor(qnNumber, recipient)), responseDetails.getAnswer());"},{"lineNumber":178,"author":{"gitId":"-"},"content":" assertEquals(getResponseLengthText(qnNumber, recipient), \"Response length: \" + responseLength"},{"lineNumber":179,"author":{"gitId":"-"},"content":" + \" words\");"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" public void verifyMcqQuestion(int qnNumber, String recipient, FeedbackMcqQuestionDetails questionDetails) {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" List\u003cString\u003e mcqChoices \u003d questionDetails.getMcqChoices();"},{"lineNumber":184,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c mcqChoices.size(); i++) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" assertEquals(mcqChoices.get(i), optionTexts.get(i).getText());"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" if (questionDetails.isOtherEnabled()) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" assertEquals(\"Other\", getMcqSection(qnNumber, recipient).findElement(By.id(\"other-option\")).getText());"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" public void verifyGeneratedMcqQuestion(int qnNumber, String recipient, List\u003cString\u003e options) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":197,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" assertEquals(options.get(i), optionTexts.get(i).getText());"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" public void fillMcqResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" FeedbackMcqResponseDetails responseDetails \u003d (FeedbackMcqResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":204,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMcqOtherOptionRadioBtn(qnNumber, recipient));"},{"lineNumber":206,"author":{"gitId":"-"},"content":" fillTextBox(getMcqOtherOptionTextbox(qnNumber, recipient), responseDetails.getOtherFieldContent());"},{"lineNumber":207,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" if (optionTexts.get(i).getText().equals(responseDetails.getAnswer())) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMcqRadioBtns(qnNumber, recipient).get(i));"},{"lineNumber":212,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"dishenggg"},"content":" public void fillMcqResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":219,"author":{"gitId":"dishenggg"},"content":" FeedbackMcqResponseDetails responseDetails \u003d (FeedbackMcqResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":220,"author":{"gitId":"dishenggg"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":221,"author":{"gitId":"dishenggg"},"content":" markOptionAsSelected(getMcqOtherOptionRadioBtn(qnNumber, recipient));"},{"lineNumber":222,"author":{"gitId":"dishenggg"},"content":" fillTextBox(getMcqOtherOptionTextbox(qnNumber, recipient), responseDetails.getOtherFieldContent());"},{"lineNumber":223,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":224,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":225,"author":{"gitId":"dishenggg"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":226,"author":{"gitId":"dishenggg"},"content":" if (optionTexts.get(i).getText().equals(responseDetails.getAnswer())) {"},{"lineNumber":227,"author":{"gitId":"dishenggg"},"content":" markOptionAsSelected(getMcqRadioBtns(qnNumber, recipient).get(i));"},{"lineNumber":228,"author":{"gitId":"dishenggg"},"content":" break;"},{"lineNumber":229,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":230,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":231,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":232,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":233,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" public void verifyMcqResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" FeedbackMcqResponseDetails responseDetails \u003d (FeedbackMcqResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":236,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" assertTrue(getMcqOtherOptionRadioBtn(qnNumber, recipient).isSelected());"},{"lineNumber":238,"author":{"gitId":"-"},"content":" assertEquals(getMcqOtherOptionTextbox(qnNumber, recipient).getAttribute(\"value\"),"},{"lineNumber":239,"author":{"gitId":"-"},"content":" responseDetails.getOtherFieldContent());"},{"lineNumber":240,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMcqOptions(qnNumber, recipient);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e radioBtns \u003d getMcqRadioBtns(qnNumber, recipient);"},{"lineNumber":243,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" if (optionTexts.get(i).getText().equals(responseDetails.getAnswer())) {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" assertTrue(radioBtns.get(i).isSelected());"},{"lineNumber":246,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" }"},{"lineNumber":248,"author":{"gitId":"-"},"content":" assertFalse(radioBtns.get(i).isSelected());"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":" }"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" public void verifyMsqQuestion(int qnNumber, String recipient, FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" List\u003cString\u003e msqChoices \u003d questionDetails.getMsqChoices();"},{"lineNumber":255,"author":{"gitId":"-"},"content":" if (questionDetails.isOtherEnabled()) {"},{"lineNumber":256,"author":{"gitId":"-"},"content":" msqChoices.add(\"Other\");"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":" if (questionDetails.getMinSelectableChoices() \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" msqChoices.add(\"None of the above\");"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":262,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c msqChoices.size(); i++) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" assertEquals(msqChoices.get(i), optionTexts.get(i).getText());"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":" verifyMsqSelectableOptionsMessage(qnNumber, questionDetails);"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":" private void verifyMsqSelectableOptionsMessage(int qnNumber, FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" if (questionDetails.getMinSelectableChoices() !\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":270,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"min-options-message\")).getText(),"},{"lineNumber":271,"author":{"gitId":"-"},"content":" \"Choose at least \" + questionDetails.getMinSelectableChoices() + \" options.\");"},{"lineNumber":272,"author":{"gitId":"-"},"content":" }"},{"lineNumber":273,"author":{"gitId":"-"},"content":" if (questionDetails.getMaxSelectableChoices() !\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":274,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"max-options-message\")).getText(),"},{"lineNumber":275,"author":{"gitId":"-"},"content":" \"Choose no more than \" + questionDetails.getMaxSelectableChoices() + \" options.\");"},{"lineNumber":276,"author":{"gitId":"-"},"content":" }"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" public void verifyGeneratedMsqQuestion(int qnNumber, String recipient, FeedbackMsqQuestionDetails questionDetails,"},{"lineNumber":280,"author":{"gitId":"-"},"content":" List\u003cString\u003e options) {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" assertEquals(options.get(i), optionTexts.get(i).getText());"},{"lineNumber":284,"author":{"gitId":"-"},"content":" }"},{"lineNumber":285,"author":{"gitId":"-"},"content":" verifyMsqSelectableOptionsMessage(qnNumber, questionDetails);"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" public void fillMsqResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" FeedbackMsqResponseDetails responseDetails \u003d (FeedbackMsqResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":290,"author":{"gitId":"-"},"content":" List\u003cString\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":291,"author":{"gitId":"-"},"content":" if (answers.get(0).isEmpty()) {"},{"lineNumber":292,"author":{"gitId":"-"},"content":" answers.add(\"None of the above\");"},{"lineNumber":293,"author":{"gitId":"-"},"content":" }"},{"lineNumber":294,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":295,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e checkboxes \u003d getMsqCheckboxes(qnNumber, recipient);"},{"lineNumber":296,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":297,"author":{"gitId":"-"},"content":" if (answers.contains(optionTexts.get(i).getText())) {"},{"lineNumber":298,"author":{"gitId":"-"},"content":" markOptionAsSelected(checkboxes.get(i));"},{"lineNumber":299,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" markOptionAsUnselected(checkboxes.get(i));"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":" }"},{"lineNumber":303,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMsqOtherOptionCheckbox(qnNumber, recipient));"},{"lineNumber":305,"author":{"gitId":"-"},"content":" fillTextBox(getMsqOtherOptionTextbox(qnNumber, recipient), responseDetails.getOtherFieldContent());"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"dishenggg"},"content":" public void fillMsqResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":310,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqResponseDetails responseDetails \u003d (FeedbackMsqResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":311,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":312,"author":{"gitId":"dishenggg"},"content":" if (answers.get(0).isEmpty()) {"},{"lineNumber":313,"author":{"gitId":"dishenggg"},"content":" answers.add(\"None of the above\");"},{"lineNumber":314,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":315,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":316,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e checkboxes \u003d getMsqCheckboxes(qnNumber, recipient);"},{"lineNumber":317,"author":{"gitId":"dishenggg"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":318,"author":{"gitId":"dishenggg"},"content":" if (answers.contains(optionTexts.get(i).getText())) {"},{"lineNumber":319,"author":{"gitId":"dishenggg"},"content":" markOptionAsSelected(checkboxes.get(i));"},{"lineNumber":320,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":321,"author":{"gitId":"dishenggg"},"content":" markOptionAsUnselected(checkboxes.get(i));"},{"lineNumber":322,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":323,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":324,"author":{"gitId":"dishenggg"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":325,"author":{"gitId":"dishenggg"},"content":" markOptionAsSelected(getMsqOtherOptionCheckbox(qnNumber, recipient));"},{"lineNumber":326,"author":{"gitId":"dishenggg"},"content":" fillTextBox(getMsqOtherOptionTextbox(qnNumber, recipient), responseDetails.getOtherFieldContent());"},{"lineNumber":327,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":328,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":329,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":" public void verifyMsqResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" FeedbackMsqResponseDetails responseDetails \u003d (FeedbackMsqResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":332,"author":{"gitId":"-"},"content":" List\u003cString\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":333,"author":{"gitId":"-"},"content":" if (answers.get(0).isEmpty()) {"},{"lineNumber":334,"author":{"gitId":"-"},"content":" answers.add(\"None of the above\");"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":337,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e checkboxes \u003d getMsqCheckboxes(qnNumber, recipient);"},{"lineNumber":338,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" if (answers.contains(optionTexts.get(i).getText())) {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" assertTrue(checkboxes.get(i).isSelected());"},{"lineNumber":341,"author":{"gitId":"-"},"content":" } else if (\"Other\".equals(optionTexts.get(i).getText())) {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" assertEquals(checkboxes.get(i).isSelected(), responseDetails.isOther());"},{"lineNumber":343,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":344,"author":{"gitId":"-"},"content":" assertFalse(checkboxes.get(i).isSelected());"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":" }"},{"lineNumber":347,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" assertEquals(getMsqOtherOptionTextbox(qnNumber, recipient).getAttribute(\"value\"),"},{"lineNumber":349,"author":{"gitId":"-"},"content":" responseDetails.getOtherFieldContent());"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"dishenggg"},"content":" public void verifyMsqResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":354,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqResponseDetails responseDetails \u003d (FeedbackMsqResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":355,"author":{"gitId":"dishenggg"},"content":" List\u003cString\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":356,"author":{"gitId":"dishenggg"},"content":" if (answers.get(0).isEmpty()) {"},{"lineNumber":357,"author":{"gitId":"dishenggg"},"content":" answers.add(\"None of the above\");"},{"lineNumber":358,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":359,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e optionTexts \u003d getMsqOptions(qnNumber, recipient);"},{"lineNumber":360,"author":{"gitId":"dishenggg"},"content":" List\u003cWebElement\u003e checkboxes \u003d getMsqCheckboxes(qnNumber, recipient);"},{"lineNumber":361,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c optionTexts.size(); i++) {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" if (answers.contains(optionTexts.get(i).getText())) {"},{"lineNumber":363,"author":{"gitId":"-"},"content":" assertTrue(checkboxes.get(i).isSelected());"},{"lineNumber":364,"author":{"gitId":"-"},"content":" } else if (\"Other\".equals(optionTexts.get(i).getText())) {"},{"lineNumber":365,"author":{"gitId":"-"},"content":" assertEquals(checkboxes.get(i).isSelected(), responseDetails.isOther());"},{"lineNumber":366,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":367,"author":{"gitId":"-"},"content":" assertFalse(checkboxes.get(i).isSelected());"},{"lineNumber":368,"author":{"gitId":"-"},"content":" }"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":" if (responseDetails.isOther()) {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" assertEquals(getMsqOtherOptionTextbox(qnNumber, recipient).getAttribute(\"value\"),"},{"lineNumber":372,"author":{"gitId":"-"},"content":" responseDetails.getOtherFieldContent());"},{"lineNumber":373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":374,"author":{"gitId":"-"},"content":" }"},{"lineNumber":375,"author":{"gitId":"-"},"content":""},{"lineNumber":376,"author":{"gitId":"-"},"content":" public void verifyNumScaleQuestion(int qnNumber, String recipient,"},{"lineNumber":377,"author":{"gitId":"-"},"content":" FeedbackNumericalScaleQuestionDetails questionDetails) {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" double step \u003d questionDetails.getStep();"},{"lineNumber":379,"author":{"gitId":"-"},"content":" double twoSteps \u003d 2 * step;"},{"lineNumber":380,"author":{"gitId":"-"},"content":" double min \u003d questionDetails.getMinScale();"},{"lineNumber":381,"author":{"gitId":"-"},"content":" double max \u003d questionDetails.getMaxScale();"},{"lineNumber":382,"author":{"gitId":"-"},"content":" String possibleValues \u003d String.format(\"Possible values: [%s, %s, %s, ..., %s, %s, %s]\","},{"lineNumber":383,"author":{"gitId":"-"},"content":" getDoubleString(min), getDoubleString(min + step), getDoubleString(min + twoSteps),"},{"lineNumber":384,"author":{"gitId":"-"},"content":" getDoubleString(max - twoSteps), getDoubleString(max - step), getDoubleString(max));"},{"lineNumber":385,"author":{"gitId":"-"},"content":" String actualValues \u003d getNumScaleSection(qnNumber, recipient).findElement(By.id(\"possible-values\")).getText();"},{"lineNumber":386,"author":{"gitId":"-"},"content":" assertEquals(actualValues, possibleValues);"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"-"},"content":" public void fillNumScaleResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":390,"author":{"gitId":"-"},"content":" FeedbackNumericalScaleResponseDetails responseDetails \u003d"},{"lineNumber":391,"author":{"gitId":"-"},"content":" (FeedbackNumericalScaleResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":392,"author":{"gitId":"-"},"content":" fillTextBox(getNumScaleInput(qnNumber, recipient), Double.toString(responseDetails.getAnswer()));"},{"lineNumber":393,"author":{"gitId":"-"},"content":" }"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":" public void verifyNumScaleResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" FeedbackNumericalScaleResponseDetails responseDetails \u003d"},{"lineNumber":397,"author":{"gitId":"-"},"content":" (FeedbackNumericalScaleResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":398,"author":{"gitId":"-"},"content":" assertEquals(getNumScaleInput(qnNumber, recipient).getAttribute(\"value\"),"},{"lineNumber":399,"author":{"gitId":"-"},"content":" getDoubleString(responseDetails.getAnswer()));"},{"lineNumber":400,"author":{"gitId":"-"},"content":" }"},{"lineNumber":401,"author":{"gitId":"-"},"content":""},{"lineNumber":402,"author":{"gitId":"-"},"content":" public void verifyConstSumQuestion(int qnNumber, String recipient,"},{"lineNumber":403,"author":{"gitId":"-"},"content":" FeedbackConstantSumQuestionDetails questionDetails) {"},{"lineNumber":404,"author":{"gitId":"-"},"content":" if (!questionDetails.isDistributeToRecipients()) {"},{"lineNumber":405,"author":{"gitId":"-"},"content":" List\u003cString\u003e constSumOptions \u003d questionDetails.getConstSumOptions();"},{"lineNumber":406,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getConstSumOptions(qnNumber, recipient);"},{"lineNumber":407,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c constSumOptions.size(); i++) {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" assertEquals(constSumOptions.get(i), optionTexts.get(i).getText());"},{"lineNumber":409,"author":{"gitId":"-"},"content":" }"},{"lineNumber":410,"author":{"gitId":"-"},"content":" }"},{"lineNumber":411,"author":{"gitId":"-"},"content":""},{"lineNumber":412,"author":{"gitId":"-"},"content":" int totalPoints \u003d questionDetails.getPoints();"},{"lineNumber":413,"author":{"gitId":"-"},"content":" if (questionDetails.isPointsPerOption()) {"},{"lineNumber":414,"author":{"gitId":"-"},"content":" totalPoints *\u003d questionDetails.getNumOfConstSumOptions();"},{"lineNumber":415,"author":{"gitId":"-"},"content":" }"},{"lineNumber":416,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"total-points-message\")).getText(),"},{"lineNumber":417,"author":{"gitId":"-"},"content":" \"Total points distributed should add up to \" + totalPoints + \".\");"},{"lineNumber":418,"author":{"gitId":"-"},"content":""},{"lineNumber":419,"author":{"gitId":"-"},"content":" if (questionDetails.isForceUnevenDistribution()) {"},{"lineNumber":420,"author":{"gitId":"-"},"content":" String entityType \u003d questionDetails.isDistributeToRecipients() ? \"recipient\" : \"option\";"},{"lineNumber":421,"author":{"gitId":"-"},"content":" if (\"All options\".equals(questionDetails.getDistributePointsFor())) {"},{"lineNumber":422,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"all-uneven-message\")).getText(),"},{"lineNumber":423,"author":{"gitId":"-"},"content":" \"Every \" + entityType + \" should be allocated different number of points.\");"},{"lineNumber":424,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"one-uneven-message\")).getText(),"},{"lineNumber":426,"author":{"gitId":"-"},"content":" \"At least one \" + entityType + \" should be allocated different number of points.\");"},{"lineNumber":427,"author":{"gitId":"-"},"content":" }"},{"lineNumber":428,"author":{"gitId":"-"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":" }"},{"lineNumber":430,"author":{"gitId":"-"},"content":""},{"lineNumber":431,"author":{"gitId":"-"},"content":" public void fillConstSumOptionResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":432,"author":{"gitId":"-"},"content":" FeedbackConstantSumResponseDetails responseDetails \u003d"},{"lineNumber":433,"author":{"gitId":"-"},"content":" (FeedbackConstantSumResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":434,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":435,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e constSumInputs \u003d getConstSumInputs(qnNumber, recipient);"},{"lineNumber":436,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":437,"author":{"gitId":"-"},"content":" fillTextBox(constSumInputs.get(i), Integer.toString(answers.get(i)));"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":" }"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" public void verifyConstSumOptionResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":442,"author":{"gitId":"-"},"content":" FeedbackConstantSumResponseDetails responseDetails \u003d"},{"lineNumber":443,"author":{"gitId":"-"},"content":" (FeedbackConstantSumResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":444,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":445,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e constSumInputs \u003d getConstSumInputs(qnNumber, recipient);"},{"lineNumber":446,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":447,"author":{"gitId":"-"},"content":" assertEquals(constSumInputs.get(i).getAttribute(\"value\"), Integer.toString(answers.get(i)));"},{"lineNumber":448,"author":{"gitId":"-"},"content":" }"},{"lineNumber":449,"author":{"gitId":"-"},"content":" }"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":" public void fillConstSumRecipientResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":452,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientInputs \u003d getConstSumRecipientInputs(qnNumber);"},{"lineNumber":453,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":454,"author":{"gitId":"-"},"content":" FeedbackConstantSumResponseDetails response \u003d"},{"lineNumber":455,"author":{"gitId":"-"},"content":" (FeedbackConstantSumResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":456,"author":{"gitId":"-"},"content":" fillTextBox(recipientInputs.get(i), Integer.toString(response.getAnswers().get(0)));"},{"lineNumber":457,"author":{"gitId":"-"},"content":" }"},{"lineNumber":458,"author":{"gitId":"-"},"content":" }"},{"lineNumber":459,"author":{"gitId":"-"},"content":""},{"lineNumber":460,"author":{"gitId":"-"},"content":" public void verifyConstSumRecipientResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":461,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientInputs \u003d getConstSumRecipientInputs(qnNumber);"},{"lineNumber":462,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":463,"author":{"gitId":"-"},"content":" FeedbackConstantSumResponseDetails response \u003d"},{"lineNumber":464,"author":{"gitId":"-"},"content":" (FeedbackConstantSumResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":465,"author":{"gitId":"-"},"content":" assertEquals(recipientInputs.get(i).getAttribute(\"value\"),"},{"lineNumber":466,"author":{"gitId":"-"},"content":" Integer.toString(response.getAnswers().get(0)));"},{"lineNumber":467,"author":{"gitId":"-"},"content":" }"},{"lineNumber":468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":469,"author":{"gitId":"-"},"content":""},{"lineNumber":470,"author":{"gitId":"-"},"content":" public void verifyContributionQuestion(int qnNumber, FeedbackContributionQuestionDetails questionDetails) {"},{"lineNumber":471,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":472,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getContributionDropdowns(qnNumber).get(0), \"Not Sure\");"},{"lineNumber":473,"author":{"gitId":"-"},"content":" assertTrue(questionDetails.isNotSureAllowed());"},{"lineNumber":474,"author":{"gitId":"-"},"content":" assertFalse(questionDetails.isZeroSum());"},{"lineNumber":475,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":476,"author":{"gitId":"-"},"content":" assertFalse(questionDetails.isNotSureAllowed());"},{"lineNumber":477,"author":{"gitId":"-"},"content":" }"},{"lineNumber":478,"author":{"gitId":"-"},"content":" }"},{"lineNumber":479,"author":{"gitId":"-"},"content":""},{"lineNumber":480,"author":{"gitId":"-"},"content":" public void fillContributionResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":481,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e dropdowns \u003d getContributionDropdowns(qnNumber);"},{"lineNumber":482,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":483,"author":{"gitId":"-"},"content":" FeedbackContributionResponseDetails response \u003d"},{"lineNumber":484,"author":{"gitId":"-"},"content":" (FeedbackContributionResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":485,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(dropdowns.get(i), getContributionString(response.getAnswer()));"},{"lineNumber":486,"author":{"gitId":"-"},"content":" }"},{"lineNumber":487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":488,"author":{"gitId":"-"},"content":""},{"lineNumber":489,"author":{"gitId":"-"},"content":" public void verifyContributionResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":490,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e dropdowns \u003d getContributionDropdowns(qnNumber);"},{"lineNumber":491,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":492,"author":{"gitId":"-"},"content":" FeedbackContributionResponseDetails response \u003d"},{"lineNumber":493,"author":{"gitId":"-"},"content":" (FeedbackContributionResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":494,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(dropdowns.get(i)), getContributionString(response.getAnswer()));"},{"lineNumber":495,"author":{"gitId":"-"},"content":" }"},{"lineNumber":496,"author":{"gitId":"-"},"content":" }"},{"lineNumber":497,"author":{"gitId":"-"},"content":""},{"lineNumber":498,"author":{"gitId":"-"},"content":" public void verifyRubricQuestion(int qnNumber, String recipient, FeedbackRubricQuestionDetails questionDetails) {"},{"lineNumber":499,"author":{"gitId":"-"},"content":" List\u003cString\u003e choices \u003d questionDetails.getRubricChoices();"},{"lineNumber":500,"author":{"gitId":"-"},"content":" List\u003cString\u003e subQuestions \u003d questionDetails.getRubricSubQuestions();"},{"lineNumber":501,"author":{"gitId":"-"},"content":" List\u003cList\u003cString\u003e\u003e descriptions \u003d questionDetails.getRubricDescriptions();"},{"lineNumber":502,"author":{"gitId":"-"},"content":""},{"lineNumber":503,"author":{"gitId":"-"},"content":" String[][] expectedTableData \u003d new String[subQuestions.size()][choices.size()];"},{"lineNumber":504,"author":{"gitId":"-"},"content":" String[][] expectedTableRowHeader \u003d new String[1][choices.size()];"},{"lineNumber":505,"author":{"gitId":"-"},"content":" String[][] expectedTableColumnHeader \u003d new String[subQuestions.size()][1];"},{"lineNumber":506,"author":{"gitId":"-"},"content":""},{"lineNumber":507,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c choices.size(); i++) {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" expectedTableRowHeader[0][i] \u003d choices.get(i);"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c subQuestions.size(); i++) {"},{"lineNumber":511,"author":{"gitId":"-"},"content":" expectedTableColumnHeader[i][0] \u003d subQuestions.get(i);"},{"lineNumber":512,"author":{"gitId":"-"},"content":" }"},{"lineNumber":513,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c descriptions.size(); i++) {"},{"lineNumber":514,"author":{"gitId":"-"},"content":" List\u003cString\u003e description \u003d descriptions.get(i);"},{"lineNumber":515,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c description.size(); j++) {"},{"lineNumber":516,"author":{"gitId":"-"},"content":" expectedTableData[i][j] \u003d description.get(j);"},{"lineNumber":517,"author":{"gitId":"-"},"content":" }"},{"lineNumber":518,"author":{"gitId":"-"},"content":" }"},{"lineNumber":519,"author":{"gitId":"-"},"content":" WebElement rubricTable \u003d getRubricTable(qnNumber, recipient);"},{"lineNumber":520,"author":{"gitId":"-"},"content":" verifyTableBodyValues(rubricTable, expectedTableData);"},{"lineNumber":521,"author":{"gitId":"-"},"content":" verifyTableRowHeaderValues(rubricTable, expectedTableRowHeader);"},{"lineNumber":522,"author":{"gitId":"-"},"content":" verifyTableColumnHeaderValues(rubricTable, expectedTableColumnHeader);"},{"lineNumber":523,"author":{"gitId":"-"},"content":" }"},{"lineNumber":524,"author":{"gitId":"-"},"content":""},{"lineNumber":525,"author":{"gitId":"-"},"content":" public void fillRubricResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":526,"author":{"gitId":"-"},"content":" FeedbackRubricResponseDetails responseDetails \u003d"},{"lineNumber":527,"author":{"gitId":"-"},"content":" (FeedbackRubricResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":528,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswer();"},{"lineNumber":529,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":530,"author":{"gitId":"-"},"content":" click(getRubricInputs(qnNumber, recipient, i + 2).get(answers.get(i)));"},{"lineNumber":531,"author":{"gitId":"-"},"content":" }"},{"lineNumber":532,"author":{"gitId":"-"},"content":" }"},{"lineNumber":533,"author":{"gitId":"-"},"content":""},{"lineNumber":534,"author":{"gitId":"-"},"content":" public void verifyRubricResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":535,"author":{"gitId":"-"},"content":" FeedbackRubricResponseDetails responseDetails \u003d"},{"lineNumber":536,"author":{"gitId":"-"},"content":" (FeedbackRubricResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":537,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswer();"},{"lineNumber":538,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":539,"author":{"gitId":"-"},"content":" assertTrue(getRubricInputs(qnNumber, recipient, i + 2).get(answers.get(i)).isSelected());"},{"lineNumber":540,"author":{"gitId":"-"},"content":" }"},{"lineNumber":541,"author":{"gitId":"-"},"content":" }"},{"lineNumber":542,"author":{"gitId":"-"},"content":""},{"lineNumber":543,"author":{"gitId":"-"},"content":" public void verifyRankQuestion(int qnNumber, String recipient, FeedbackRankQuestionDetails questionDetails) {"},{"lineNumber":544,"author":{"gitId":"-"},"content":" if (questionDetails.getMaxOptionsToBeRanked() !\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":545,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"max-options-message\")).getText(),"},{"lineNumber":546,"author":{"gitId":"-"},"content":" \"Rank no more than \" + questionDetails.getMaxOptionsToBeRanked() + \" options.\");"},{"lineNumber":547,"author":{"gitId":"-"},"content":" }"},{"lineNumber":548,"author":{"gitId":"-"},"content":" if (questionDetails.getMinOptionsToBeRanked() !\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":549,"author":{"gitId":"-"},"content":" assertEquals(getQuestionForm(qnNumber).findElement(By.id(\"min-options-message\")).getText(),"},{"lineNumber":550,"author":{"gitId":"-"},"content":" \"Rank at least \" + questionDetails.getMinOptionsToBeRanked() + \" options.\");"},{"lineNumber":551,"author":{"gitId":"-"},"content":" }"},{"lineNumber":552,"author":{"gitId":"-"},"content":" if (questionDetails instanceof FeedbackRankOptionsQuestionDetails) {"},{"lineNumber":553,"author":{"gitId":"-"},"content":" FeedbackRankOptionsQuestionDetails optionDetails \u003d (FeedbackRankOptionsQuestionDetails) questionDetails;"},{"lineNumber":554,"author":{"gitId":"-"},"content":" List\u003cString\u003e options \u003d optionDetails.getOptions();"},{"lineNumber":555,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e optionTexts \u003d getRankOptions(qnNumber, recipient);"},{"lineNumber":556,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":557,"author":{"gitId":"-"},"content":" assertEquals(options.get(i), optionTexts.get(i).getText());"},{"lineNumber":558,"author":{"gitId":"-"},"content":" }"},{"lineNumber":559,"author":{"gitId":"-"},"content":" }"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":""},{"lineNumber":562,"author":{"gitId":"-"},"content":" public void fillRankOptionResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":563,"author":{"gitId":"-"},"content":" FeedbackRankOptionsResponseDetails responseDetails \u003d"},{"lineNumber":564,"author":{"gitId":"-"},"content":" (FeedbackRankOptionsResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":565,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":566,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":567,"author":{"gitId":"-"},"content":" if (answers.get(i) \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":568,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getRankOptionsDropdowns(qnNumber, recipient).get(i), \"\");"},{"lineNumber":569,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":570,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getRankOptionsDropdowns(qnNumber, recipient).get(i),"},{"lineNumber":571,"author":{"gitId":"-"},"content":" Integer.toString(answers.get(i)));"},{"lineNumber":572,"author":{"gitId":"-"},"content":" }"},{"lineNumber":573,"author":{"gitId":"-"},"content":" }"},{"lineNumber":574,"author":{"gitId":"-"},"content":" }"},{"lineNumber":575,"author":{"gitId":"-"},"content":""},{"lineNumber":576,"author":{"gitId":"mingyuanc"},"content":" public void fillRankOptionResponse(int qnNumber, String recipient, FeedbackResponse response) {"},{"lineNumber":577,"author":{"gitId":"mingyuanc"},"content":" FeedbackRankOptionsResponseDetails responseDetails \u003d"},{"lineNumber":578,"author":{"gitId":"mingyuanc"},"content":" (FeedbackRankOptionsResponseDetails) response.getFeedbackResponseDetailsCopy();"},{"lineNumber":579,"author":{"gitId":"mingyuanc"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":580,"author":{"gitId":"mingyuanc"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":581,"author":{"gitId":"mingyuanc"},"content":" if (answers.get(i) \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":582,"author":{"gitId":"mingyuanc"},"content":" selectDropdownOptionByText(getRankOptionsDropdowns(qnNumber, recipient).get(i), \"\");"},{"lineNumber":583,"author":{"gitId":"mingyuanc"},"content":" } else {"},{"lineNumber":584,"author":{"gitId":"mingyuanc"},"content":" selectDropdownOptionByText(getRankOptionsDropdowns(qnNumber, recipient).get(i),"},{"lineNumber":585,"author":{"gitId":"mingyuanc"},"content":" Integer.toString(answers.get(i)));"},{"lineNumber":586,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":587,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":588,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":589,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":590,"author":{"gitId":"-"},"content":" public void verifyRankOptionResponse(int qnNumber, String recipient, FeedbackResponseAttributes response) {"},{"lineNumber":591,"author":{"gitId":"-"},"content":" FeedbackRankOptionsResponseDetails responseDetails \u003d"},{"lineNumber":592,"author":{"gitId":"-"},"content":" (FeedbackRankOptionsResponseDetails) response.getResponseDetailsCopy();"},{"lineNumber":593,"author":{"gitId":"-"},"content":" List\u003cInteger\u003e answers \u003d responseDetails.getAnswers();"},{"lineNumber":594,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c answers.size(); i++) {"},{"lineNumber":595,"author":{"gitId":"-"},"content":" if (answers.get(i) \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":596,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(getRankOptionsDropdowns(qnNumber, recipient).get(i)),"},{"lineNumber":597,"author":{"gitId":"-"},"content":" \"\");"},{"lineNumber":598,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":599,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(getRankOptionsDropdowns(qnNumber, recipient).get(i)),"},{"lineNumber":600,"author":{"gitId":"-"},"content":" Integer.toString(answers.get(i)));"},{"lineNumber":601,"author":{"gitId":"-"},"content":" }"},{"lineNumber":602,"author":{"gitId":"-"},"content":" }"},{"lineNumber":603,"author":{"gitId":"-"},"content":" }"},{"lineNumber":604,"author":{"gitId":"-"},"content":""},{"lineNumber":605,"author":{"gitId":"-"},"content":" public void fillRankRecipientResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":606,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientDropdowns \u003d getRankRecipientDropdowns(qnNumber);"},{"lineNumber":607,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":608,"author":{"gitId":"-"},"content":" FeedbackRankRecipientsResponseDetails response \u003d"},{"lineNumber":609,"author":{"gitId":"-"},"content":" (FeedbackRankRecipientsResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":610,"author":{"gitId":"-"},"content":" if (response.getAnswer() \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":611,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(recipientDropdowns.get(i), \"\");"},{"lineNumber":612,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":613,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(recipientDropdowns.get(i), Integer.toString(response.getAnswer()));"},{"lineNumber":614,"author":{"gitId":"-"},"content":" }"},{"lineNumber":615,"author":{"gitId":"-"},"content":" }"},{"lineNumber":616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" public void verifyRankRecipientResponse(int qnNumber, List\u003cFeedbackResponseAttributes\u003e responses) {"},{"lineNumber":619,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientDropdowns \u003d getRankRecipientDropdowns(qnNumber);"},{"lineNumber":620,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c responses.size(); i++) {"},{"lineNumber":621,"author":{"gitId":"-"},"content":" FeedbackRankRecipientsResponseDetails response \u003d"},{"lineNumber":622,"author":{"gitId":"-"},"content":" (FeedbackRankRecipientsResponseDetails) responses.get(i).getResponseDetailsCopy();"},{"lineNumber":623,"author":{"gitId":"-"},"content":" if (response.getAnswer() \u003d\u003d Const.POINTS_NOT_SUBMITTED) {"},{"lineNumber":624,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(recipientDropdowns.get(i)), \"\");"},{"lineNumber":625,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":626,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(recipientDropdowns.get(i)),"},{"lineNumber":627,"author":{"gitId":"-"},"content":" Integer.toString(response.getAnswer()));"},{"lineNumber":628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":629,"author":{"gitId":"-"},"content":" }"},{"lineNumber":630,"author":{"gitId":"-"},"content":" }"},{"lineNumber":631,"author":{"gitId":"-"},"content":""},{"lineNumber":632,"author":{"gitId":"-"},"content":" private String getCourseId() {"},{"lineNumber":633,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"course-id\")).getText();"},{"lineNumber":634,"author":{"gitId":"-"},"content":" }"},{"lineNumber":635,"author":{"gitId":"-"},"content":""},{"lineNumber":636,"author":{"gitId":"-"},"content":" private String getCourseName() {"},{"lineNumber":637,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"course-name\")).getText();"},{"lineNumber":638,"author":{"gitId":"-"},"content":" }"},{"lineNumber":639,"author":{"gitId":"-"},"content":""},{"lineNumber":640,"author":{"gitId":"-"},"content":" private String getCourseInstitute() {"},{"lineNumber":641,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"course-institute\")).getText();"},{"lineNumber":642,"author":{"gitId":"-"},"content":" }"},{"lineNumber":643,"author":{"gitId":"-"},"content":""},{"lineNumber":644,"author":{"gitId":"-"},"content":" private String getFeedbackSessionName() {"},{"lineNumber":645,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"fs-name\")).getText();"},{"lineNumber":646,"author":{"gitId":"-"},"content":" }"},{"lineNumber":647,"author":{"gitId":"-"},"content":""},{"lineNumber":648,"author":{"gitId":"-"},"content":" private String getOpeningTime() {"},{"lineNumber":649,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"opening-time\")).getText();"},{"lineNumber":650,"author":{"gitId":"-"},"content":" }"},{"lineNumber":651,"author":{"gitId":"-"},"content":""},{"lineNumber":652,"author":{"gitId":"-"},"content":" private String getClosingTime() {"},{"lineNumber":653,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"closing-time\")).getText();"},{"lineNumber":654,"author":{"gitId":"-"},"content":" }"},{"lineNumber":655,"author":{"gitId":"-"},"content":""},{"lineNumber":656,"author":{"gitId":"-"},"content":" private String getInstructions() {"},{"lineNumber":657,"author":{"gitId":"-"},"content":" return browser.driver.findElement(By.id(\"instructions\")).getAttribute(\"innerHTML\");"},{"lineNumber":658,"author":{"gitId":"-"},"content":" }"},{"lineNumber":659,"author":{"gitId":"-"},"content":""},{"lineNumber":660,"author":{"gitId":"-"},"content":" private void assertDateEquals(String actual, Instant instant, String timeZone) {"},{"lineNumber":661,"author":{"gitId":"-"},"content":" String dateStrWithAbbr \u003d getDateStringWithAbbr(instant, timeZone);"},{"lineNumber":662,"author":{"gitId":"-"},"content":" String dateStrWithOffset \u003d getDateStringWithOffset(instant, timeZone);"},{"lineNumber":663,"author":{"gitId":"-"},"content":""},{"lineNumber":664,"author":{"gitId":"-"},"content":" boolean isExpected \u003d actual.equals(dateStrWithAbbr) || actual.equals(dateStrWithOffset);"},{"lineNumber":665,"author":{"gitId":"-"},"content":" assertTrue(isExpected);"},{"lineNumber":666,"author":{"gitId":"-"},"content":" }"},{"lineNumber":667,"author":{"gitId":"-"},"content":""},{"lineNumber":668,"author":{"gitId":"-"},"content":" private String getDateStringWithAbbr(Instant instant, String timeZone) {"},{"lineNumber":669,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"EE, dd MMM, yyyy, hh:mm a z\");"},{"lineNumber":670,"author":{"gitId":"-"},"content":" }"},{"lineNumber":671,"author":{"gitId":"-"},"content":""},{"lineNumber":672,"author":{"gitId":"-"},"content":" private String getDateStringWithOffset(Instant instant, String timeZone) {"},{"lineNumber":673,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"EE, dd MMM, yyyy, hh:mm a X\");"},{"lineNumber":674,"author":{"gitId":"-"},"content":" }"},{"lineNumber":675,"author":{"gitId":"-"},"content":""},{"lineNumber":676,"author":{"gitId":"-"},"content":" private WebElement getQuestionForm(int qnNumber) {"},{"lineNumber":677,"author":{"gitId":"-"},"content":" By questionFormId \u003d By.id(\"question-submission-form-qn-\" + qnNumber);"},{"lineNumber":678,"author":{"gitId":"-"},"content":" waitForElementPresence(questionFormId);"},{"lineNumber":679,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d browser.driver.findElement(questionFormId);"},{"lineNumber":680,"author":{"gitId":"-"},"content":" // Scroll to the question to ensure that the details are fully loaded"},{"lineNumber":681,"author":{"gitId":"-"},"content":" scrollElementToCenter(questionForm);"},{"lineNumber":682,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish();"},{"lineNumber":683,"author":{"gitId":"-"},"content":" return questionForm;"},{"lineNumber":684,"author":{"gitId":"-"},"content":" }"},{"lineNumber":685,"author":{"gitId":"-"},"content":""},{"lineNumber":686,"author":{"gitId":"-"},"content":" private String getQuestionBrief(int qnNumber) {"},{"lineNumber":687,"author":{"gitId":"-"},"content":" String questionDetails \u003d getQuestionForm(qnNumber).findElement(By.className(\"question-details\")).getText();"},{"lineNumber":688,"author":{"gitId":"-"},"content":" return questionDetails.split(\": \")[1];"},{"lineNumber":689,"author":{"gitId":"-"},"content":" }"},{"lineNumber":690,"author":{"gitId":"-"},"content":""},{"lineNumber":691,"author":{"gitId":"-"},"content":" private void verifyVisibilityList(int qnNumber, FeedbackQuestionAttributes questionAttributes) {"},{"lineNumber":692,"author":{"gitId":"-"},"content":" if (questionAttributes.getShowResponsesTo().isEmpty()) {"},{"lineNumber":693,"author":{"gitId":"-"},"content":" verifyVisibilityStringPresent(qnNumber, \"No-one can see your responses\");"},{"lineNumber":694,"author":{"gitId":"-"},"content":" }"},{"lineNumber":695,"author":{"gitId":"-"},"content":" if (questionAttributes.getRecipientType().equals(FeedbackParticipantType.SELF)) {"},{"lineNumber":696,"author":{"gitId":"-"},"content":" verifyVisibilityStringPresent(qnNumber, \"You can see your own feedback in the results page later on.\");"},{"lineNumber":697,"author":{"gitId":"-"},"content":" }"},{"lineNumber":698,"author":{"gitId":"-"},"content":" for (FeedbackParticipantType viewerType : questionAttributes.getShowResponsesTo()) {"},{"lineNumber":699,"author":{"gitId":"-"},"content":" verifyVisibilityStringPresent(qnNumber, getVisibilityString(questionAttributes, viewerType));"},{"lineNumber":700,"author":{"gitId":"-"},"content":" }"},{"lineNumber":701,"author":{"gitId":"-"},"content":" }"},{"lineNumber":702,"author":{"gitId":"-"},"content":""},{"lineNumber":703,"author":{"gitId":"-"},"content":" private void verifyVisibilityStringPresent(int qnNumber, String expectedString) {"},{"lineNumber":704,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e visibilityStrings \u003d getQuestionForm(qnNumber).findElement(By.className(\"visibility-list\"))"},{"lineNumber":705,"author":{"gitId":"-"},"content":" .findElements(By.tagName(\"li\"));"},{"lineNumber":706,"author":{"gitId":"-"},"content":" for (WebElement visibilityString : visibilityStrings) {"},{"lineNumber":707,"author":{"gitId":"-"},"content":" if (visibilityString.getText().equals(expectedString)) {"},{"lineNumber":708,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":709,"author":{"gitId":"-"},"content":" }"},{"lineNumber":710,"author":{"gitId":"-"},"content":" }"},{"lineNumber":711,"author":{"gitId":"-"},"content":" fail(\"Expected visibility string not found: \" + qnNumber + \": \" + expectedString);"},{"lineNumber":712,"author":{"gitId":"-"},"content":" }"},{"lineNumber":713,"author":{"gitId":"-"},"content":""},{"lineNumber":714,"author":{"gitId":"-"},"content":" private String getVisibilityString(FeedbackQuestionAttributes questionAttributes,"},{"lineNumber":715,"author":{"gitId":"-"},"content":" FeedbackParticipantType viewerType) {"},{"lineNumber":716,"author":{"gitId":"-"},"content":" if (!questionAttributes.getShowResponsesTo().contains(viewerType)) {"},{"lineNumber":717,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":718,"author":{"gitId":"-"},"content":" }"},{"lineNumber":719,"author":{"gitId":"-"},"content":""},{"lineNumber":720,"author":{"gitId":"-"},"content":" StringBuilder message \u003d new StringBuilder(getViewerString(viewerType, questionAttributes.getRecipientType()));"},{"lineNumber":721,"author":{"gitId":"-"},"content":" message.append(\" can see your response\");"},{"lineNumber":722,"author":{"gitId":"-"},"content":" if (questionAttributes.getShowRecipientNameTo().contains(viewerType)) {"},{"lineNumber":723,"author":{"gitId":"-"},"content":" message.append(\", the name of the recipient\");"},{"lineNumber":724,"author":{"gitId":"-"},"content":" if (questionAttributes.getShowGiverNameTo().contains(viewerType)) {"},{"lineNumber":725,"author":{"gitId":"-"},"content":" message.append(\", and your name\");"},{"lineNumber":726,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":727,"author":{"gitId":"-"},"content":" message.append(\", but not your name\");"},{"lineNumber":728,"author":{"gitId":"-"},"content":" }"},{"lineNumber":729,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":730,"author":{"gitId":"-"},"content":" if (questionAttributes.getShowGiverNameTo().contains(viewerType)) {"},{"lineNumber":731,"author":{"gitId":"-"},"content":" message.append(\", and your name, but not the name of the recipient\");"},{"lineNumber":732,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":733,"author":{"gitId":"-"},"content":" message.append(\", but not the name of the recipient, or your name\");"},{"lineNumber":734,"author":{"gitId":"-"},"content":" }"},{"lineNumber":735,"author":{"gitId":"-"},"content":" }"},{"lineNumber":736,"author":{"gitId":"-"},"content":" return message.toString();"},{"lineNumber":737,"author":{"gitId":"-"},"content":" }"},{"lineNumber":738,"author":{"gitId":"-"},"content":""},{"lineNumber":739,"author":{"gitId":"-"},"content":" private String getViewerString(FeedbackParticipantType viewerType, FeedbackParticipantType recipientType) {"},{"lineNumber":740,"author":{"gitId":"-"},"content":" switch (viewerType) {"},{"lineNumber":741,"author":{"gitId":"-"},"content":" case RECEIVER:"},{"lineNumber":742,"author":{"gitId":"-"},"content":" return \"The receiving \" + getRecipientString(recipientType);"},{"lineNumber":743,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":744,"author":{"gitId":"-"},"content":" return \"Your team members\";"},{"lineNumber":745,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":746,"author":{"gitId":"-"},"content":" return \"Other students in the course\";"},{"lineNumber":747,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":748,"author":{"gitId":"-"},"content":" return \"Instructors in this course\";"},{"lineNumber":749,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":750,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown viewer type\");"},{"lineNumber":751,"author":{"gitId":"-"},"content":" }"},{"lineNumber":752,"author":{"gitId":"-"},"content":" }"},{"lineNumber":753,"author":{"gitId":"-"},"content":""},{"lineNumber":754,"author":{"gitId":"-"},"content":" private String getRecipientString(FeedbackParticipantType recipientType) {"},{"lineNumber":755,"author":{"gitId":"-"},"content":" switch (recipientType) {"},{"lineNumber":756,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":757,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":758,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":759,"author":{"gitId":"-"},"content":" return \"teams\";"},{"lineNumber":760,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":761,"author":{"gitId":"-"},"content":" return \"student\";"},{"lineNumber":762,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":763,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":764,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":765,"author":{"gitId":"-"},"content":" return \"students\";"},{"lineNumber":766,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":767,"author":{"gitId":"-"},"content":" return \"instructors\";"},{"lineNumber":768,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":769,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown recipientType\");"},{"lineNumber":770,"author":{"gitId":"-"},"content":" }"},{"lineNumber":771,"author":{"gitId":"-"},"content":" }"},{"lineNumber":772,"author":{"gitId":"-"},"content":""},{"lineNumber":773,"author":{"gitId":"-"},"content":" public void clickSubmitQuestionButton(int qnNumber) {"},{"lineNumber":774,"author":{"gitId":"-"},"content":" WebElement submitQnButton \u003d waitForElementPresence(By.id(\"btn-submit-qn-\" + qnNumber));"},{"lineNumber":775,"author":{"gitId":"-"},"content":" clickAndConfirm(submitQnButton);"},{"lineNumber":776,"author":{"gitId":"-"},"content":" }"},{"lineNumber":777,"author":{"gitId":"-"},"content":""},{"lineNumber":778,"author":{"gitId":"-"},"content":" public void clickSubmitAllQuestionsButton() {"},{"lineNumber":779,"author":{"gitId":"-"},"content":" clickAndConfirm(getSubmitAllQuestionsButton());"},{"lineNumber":780,"author":{"gitId":"-"},"content":" }"},{"lineNumber":781,"author":{"gitId":"-"},"content":""},{"lineNumber":782,"author":{"gitId":"-"},"content":" private WebElement getSubmitAllQuestionsButton() {"},{"lineNumber":783,"author":{"gitId":"-"},"content":" return waitForElementPresence(By.id(\"btn-submit\"));"},{"lineNumber":784,"author":{"gitId":"-"},"content":" }"},{"lineNumber":785,"author":{"gitId":"-"},"content":""},{"lineNumber":786,"author":{"gitId":"-"},"content":" private String getQuestionDescription(int qnNumber) {"},{"lineNumber":787,"author":{"gitId":"-"},"content":" return getQuestionForm(qnNumber).findElement(By.className(\"question-description\")).getAttribute(\"innerHTML\");"},{"lineNumber":788,"author":{"gitId":"-"},"content":" }"},{"lineNumber":789,"author":{"gitId":"-"},"content":""},{"lineNumber":790,"author":{"gitId":"-"},"content":" private WebElement getCommentSection(int qnNumber, String recipient) {"},{"lineNumber":791,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":792,"author":{"gitId":"-"},"content":" return getQuestionForm(qnNumber).findElement(By.id(\"comment-section-qn-\" + qnNumber + \"-idx-\" + recipientIndex));"},{"lineNumber":793,"author":{"gitId":"-"},"content":" }"},{"lineNumber":794,"author":{"gitId":"-"},"content":""},{"lineNumber":795,"author":{"gitId":"-"},"content":" private void writeToCommentEditor(WebElement commentSection, String comment) {"},{"lineNumber":796,"author":{"gitId":"-"},"content":" scrollElementToCenter(commentSection);"},{"lineNumber":797,"author":{"gitId":"-"},"content":" waitForElementPresence(By.tagName(\"editor\"));"},{"lineNumber":798,"author":{"gitId":"-"},"content":" writeToRichTextEditor(commentSection.findElement(By.tagName(\"editor\")), comment);"},{"lineNumber":799,"author":{"gitId":"-"},"content":" }"},{"lineNumber":800,"author":{"gitId":"-"},"content":""},{"lineNumber":801,"author":{"gitId":"-"},"content":" private int getRecipientIndex(int qnNumber, String recipient) {"},{"lineNumber":802,"author":{"gitId":"-"},"content":" // For questions with recipient none or self."},{"lineNumber":803,"author":{"gitId":"-"},"content":" if (recipient.isEmpty()) {"},{"lineNumber":804,"author":{"gitId":"-"},"content":" return 0;"},{"lineNumber":805,"author":{"gitId":"-"},"content":" }"},{"lineNumber":806,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":807,"author":{"gitId":"-"},"content":" // For questions with flexible recipient."},{"lineNumber":808,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":809,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e recipientDropdowns \u003d"},{"lineNumber":810,"author":{"gitId":"-"},"content":" questionForm.findElements(By.cssSelector(\"[id^\u003d\u0027recipient-dropdown-qn-\u0027]\"));"},{"lineNumber":811,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c recipientDropdowns.size(); i++) {"},{"lineNumber":812,"author":{"gitId":"-"},"content":" String dropdownText \u003d getSelectedDropdownOptionText(recipientDropdowns.get(i));"},{"lineNumber":813,"author":{"gitId":"-"},"content":" if (dropdownText.isEmpty()) {"},{"lineNumber":814,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(recipientDropdowns.get(i), recipient);"},{"lineNumber":815,"author":{"gitId":"-"},"content":" return i;"},{"lineNumber":816,"author":{"gitId":"-"},"content":" } else if (dropdownText.equals(recipient)) {"},{"lineNumber":817,"author":{"gitId":"-"},"content":" return i;"},{"lineNumber":818,"author":{"gitId":"-"},"content":" }"},{"lineNumber":819,"author":{"gitId":"-"},"content":" }"},{"lineNumber":820,"author":{"gitId":"-"},"content":" } catch (NoSuchElementException e) {"},{"lineNumber":821,"author":{"gitId":"-"},"content":" // continue"},{"lineNumber":822,"author":{"gitId":"-"},"content":" }"},{"lineNumber":823,"author":{"gitId":"-"},"content":" int limit \u003d 20; // we are not likely to set test data exceeding this number"},{"lineNumber":824,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c limit; i++) {"},{"lineNumber":825,"author":{"gitId":"-"},"content":" if (questionForm.findElement(By.id(\"recipient-name-qn-\" + qnNumber + \"-idx-\" + i))"},{"lineNumber":826,"author":{"gitId":"-"},"content":" .getText().contains(recipient)) {"},{"lineNumber":827,"author":{"gitId":"-"},"content":" return i;"},{"lineNumber":828,"author":{"gitId":"-"},"content":" }"},{"lineNumber":829,"author":{"gitId":"-"},"content":" }"},{"lineNumber":830,"author":{"gitId":"-"},"content":" return -1;"},{"lineNumber":831,"author":{"gitId":"-"},"content":" }"},{"lineNumber":832,"author":{"gitId":"-"},"content":""},{"lineNumber":833,"author":{"gitId":"-"},"content":" private WebElement getTextResponseEditor(int qnNumber, String recipient) {"},{"lineNumber":834,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":835,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":836,"author":{"gitId":"-"},"content":" WebElement editor \u003d questionForm.findElements(By.tagName(\"tm-rich-text-editor\")).get(recipientIndex);"},{"lineNumber":837,"author":{"gitId":"-"},"content":" scrollElementToCenter(editor);"},{"lineNumber":838,"author":{"gitId":"-"},"content":" return editor;"},{"lineNumber":839,"author":{"gitId":"-"},"content":" }"},{"lineNumber":840,"author":{"gitId":"-"},"content":""},{"lineNumber":841,"author":{"gitId":"-"},"content":" private String getResponseLengthText(int qnNumber, String recipient) {"},{"lineNumber":842,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":843,"author":{"gitId":"-"},"content":" return getQuestionForm(qnNumber).findElements(By.id(\"response-length\")).get(recipientIndex).getText();"},{"lineNumber":844,"author":{"gitId":"-"},"content":" }"},{"lineNumber":845,"author":{"gitId":"-"},"content":""},{"lineNumber":846,"author":{"gitId":"-"},"content":" private String getDoubleString(Double value) {"},{"lineNumber":847,"author":{"gitId":"-"},"content":" return value % 1 \u003d\u003d 0 ? Integer.toString(value.intValue()) : Double.toString(value);"},{"lineNumber":848,"author":{"gitId":"-"},"content":" }"},{"lineNumber":849,"author":{"gitId":"-"},"content":""},{"lineNumber":850,"author":{"gitId":"-"},"content":" private WebElement getMcqSection(int qnNumber, String recipient) {"},{"lineNumber":851,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":852,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":853,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-mcq-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":854,"author":{"gitId":"-"},"content":" }"},{"lineNumber":855,"author":{"gitId":"-"},"content":""},{"lineNumber":856,"author":{"gitId":"-"},"content":" private WebElement getMcqOtherOptionRadioBtn(int qnNumber, String recipient) {"},{"lineNumber":857,"author":{"gitId":"-"},"content":" WebElement mcqSection \u003d getMcqSection(qnNumber, recipient);"},{"lineNumber":858,"author":{"gitId":"-"},"content":" return mcqSection.findElement(By.cssSelector(\"#other-option input[type\u003dradio]\"));"},{"lineNumber":859,"author":{"gitId":"-"},"content":" }"},{"lineNumber":860,"author":{"gitId":"-"},"content":""},{"lineNumber":861,"author":{"gitId":"-"},"content":" private WebElement getMcqOtherOptionTextbox(int qnNumber, String recipient) {"},{"lineNumber":862,"author":{"gitId":"-"},"content":" WebElement mcqSection \u003d getMcqSection(qnNumber, recipient);"},{"lineNumber":863,"author":{"gitId":"-"},"content":" return mcqSection.findElement(By.cssSelector(\"#other-option input[type\u003dtext]\"));"},{"lineNumber":864,"author":{"gitId":"-"},"content":" }"},{"lineNumber":865,"author":{"gitId":"-"},"content":""},{"lineNumber":866,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getMcqOptions(int qnNumber, String recipient) {"},{"lineNumber":867,"author":{"gitId":"-"},"content":" WebElement mcqSection \u003d getMcqSection(qnNumber, recipient);"},{"lineNumber":868,"author":{"gitId":"-"},"content":" return mcqSection.findElements(By.className(\"option-text\"));"},{"lineNumber":869,"author":{"gitId":"-"},"content":" }"},{"lineNumber":870,"author":{"gitId":"-"},"content":""},{"lineNumber":871,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getMcqRadioBtns(int qnNumber, String recipient) {"},{"lineNumber":872,"author":{"gitId":"-"},"content":" WebElement mcqSection \u003d getMcqSection(qnNumber, recipient);"},{"lineNumber":873,"author":{"gitId":"-"},"content":" return mcqSection.findElements(By.cssSelector(\"input[type\u003dradio]\"));"},{"lineNumber":874,"author":{"gitId":"-"},"content":" }"},{"lineNumber":875,"author":{"gitId":"-"},"content":""},{"lineNumber":876,"author":{"gitId":"-"},"content":" private WebElement getMsqSection(int qnNumber, String recipient) {"},{"lineNumber":877,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":878,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":879,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-msq-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":880,"author":{"gitId":"-"},"content":" }"},{"lineNumber":881,"author":{"gitId":"-"},"content":""},{"lineNumber":882,"author":{"gitId":"-"},"content":" private WebElement getMsqOtherOptionCheckbox(int qnNumber, String recipient) {"},{"lineNumber":883,"author":{"gitId":"-"},"content":" WebElement msqSection \u003d getMsqSection(qnNumber, recipient);"},{"lineNumber":884,"author":{"gitId":"-"},"content":" return msqSection.findElement(By.cssSelector(\"#other-option input[type\u003dcheckbox]\"));"},{"lineNumber":885,"author":{"gitId":"-"},"content":" }"},{"lineNumber":886,"author":{"gitId":"-"},"content":""},{"lineNumber":887,"author":{"gitId":"-"},"content":" private WebElement getMsqOtherOptionTextbox(int qnNumber, String recipient) {"},{"lineNumber":888,"author":{"gitId":"-"},"content":" WebElement msqSection \u003d getMsqSection(qnNumber, recipient);"},{"lineNumber":889,"author":{"gitId":"-"},"content":" return msqSection.findElement(By.cssSelector(\"#other-option input[type\u003dtext]\"));"},{"lineNumber":890,"author":{"gitId":"-"},"content":" }"},{"lineNumber":891,"author":{"gitId":"-"},"content":""},{"lineNumber":892,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getMsqOptions(int qnNumber, String recipient) {"},{"lineNumber":893,"author":{"gitId":"-"},"content":" WebElement msqSection \u003d getMsqSection(qnNumber, recipient);"},{"lineNumber":894,"author":{"gitId":"-"},"content":" return msqSection.findElements(By.tagName(\"strong\"));"},{"lineNumber":895,"author":{"gitId":"-"},"content":" }"},{"lineNumber":896,"author":{"gitId":"-"},"content":""},{"lineNumber":897,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getMsqCheckboxes(int qnNumber, String recipient) {"},{"lineNumber":898,"author":{"gitId":"-"},"content":" WebElement msqSection \u003d getMsqSection(qnNumber, recipient);"},{"lineNumber":899,"author":{"gitId":"-"},"content":" return msqSection.findElements(By.cssSelector(\"input[type\u003dcheckbox]\"));"},{"lineNumber":900,"author":{"gitId":"-"},"content":" }"},{"lineNumber":901,"author":{"gitId":"-"},"content":""},{"lineNumber":902,"author":{"gitId":"-"},"content":" private WebElement getNumScaleSection(int qnNumber, String recipient) {"},{"lineNumber":903,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":904,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":905,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-num-scale-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":906,"author":{"gitId":"-"},"content":" }"},{"lineNumber":907,"author":{"gitId":"-"},"content":""},{"lineNumber":908,"author":{"gitId":"-"},"content":" private WebElement getNumScaleInput(int qnNumber, String recipient) {"},{"lineNumber":909,"author":{"gitId":"-"},"content":" WebElement numScaleSection \u003d getNumScaleSection(qnNumber, recipient);"},{"lineNumber":910,"author":{"gitId":"-"},"content":" return numScaleSection.findElement(By.tagName(\"input\"));"},{"lineNumber":911,"author":{"gitId":"-"},"content":" }"},{"lineNumber":912,"author":{"gitId":"-"},"content":""},{"lineNumber":913,"author":{"gitId":"-"},"content":" private WebElement getConstSumOptionsSection(int qnNumber, String recipient) {"},{"lineNumber":914,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":915,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":916,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-constsum-options-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":917,"author":{"gitId":"-"},"content":" }"},{"lineNumber":918,"author":{"gitId":"-"},"content":""},{"lineNumber":919,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getConstSumOptions(int qnNumber, String recipient) {"},{"lineNumber":920,"author":{"gitId":"-"},"content":" WebElement constSumOptionSection \u003d getConstSumOptionsSection(qnNumber, recipient);"},{"lineNumber":921,"author":{"gitId":"-"},"content":" return constSumOptionSection.findElements(By.tagName(\"strong\"));"},{"lineNumber":922,"author":{"gitId":"-"},"content":" }"},{"lineNumber":923,"author":{"gitId":"-"},"content":""},{"lineNumber":924,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getConstSumInputs(int qnNumber, String recipient) {"},{"lineNumber":925,"author":{"gitId":"-"},"content":" WebElement constSumOptionSection \u003d getConstSumOptionsSection(qnNumber, recipient);"},{"lineNumber":926,"author":{"gitId":"-"},"content":" return constSumOptionSection.findElements(By.cssSelector(\"input[type\u003dnumber]\"));"},{"lineNumber":927,"author":{"gitId":"-"},"content":" }"},{"lineNumber":928,"author":{"gitId":"-"},"content":""},{"lineNumber":929,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getConstSumRecipientInputs(int qnNumber) {"},{"lineNumber":930,"author":{"gitId":"-"},"content":" return getQuestionForm(qnNumber).findElements(By.cssSelector(\"input[type\u003dnumber]\"));"},{"lineNumber":931,"author":{"gitId":"-"},"content":" }"},{"lineNumber":932,"author":{"gitId":"-"},"content":""},{"lineNumber":933,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getContributionDropdowns(int questionNum) {"},{"lineNumber":934,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElements(By.tagName(\"select\"));"},{"lineNumber":935,"author":{"gitId":"-"},"content":" }"},{"lineNumber":936,"author":{"gitId":"-"},"content":""},{"lineNumber":937,"author":{"gitId":"-"},"content":" private String getContributionString(int answer) {"},{"lineNumber":938,"author":{"gitId":"-"},"content":" if (answer \u003d\u003d Const.POINTS_NOT_SURE) {"},{"lineNumber":939,"author":{"gitId":"-"},"content":" return \"Not Sure\";"},{"lineNumber":940,"author":{"gitId":"-"},"content":" } else if (answer \u003d\u003d Const.POINTS_EQUAL_SHARE) {"},{"lineNumber":941,"author":{"gitId":"-"},"content":" return \"Equal share\";"},{"lineNumber":942,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":943,"author":{"gitId":"-"},"content":" return \"Equal share\" + (answer \u003e 100 ? \" + \" : \" - \") + Math.abs(answer - 100) + \"%\";"},{"lineNumber":944,"author":{"gitId":"-"},"content":" }"},{"lineNumber":945,"author":{"gitId":"-"},"content":" }"},{"lineNumber":946,"author":{"gitId":"-"},"content":""},{"lineNumber":947,"author":{"gitId":"-"},"content":" private WebElement getRubricSection(int qnNumber, String recipient) {"},{"lineNumber":948,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":949,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":950,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-rubric-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":951,"author":{"gitId":"-"},"content":" }"},{"lineNumber":952,"author":{"gitId":"-"},"content":""},{"lineNumber":953,"author":{"gitId":"-"},"content":" private WebElement getRubricTable(int qnNumber, String recipient) {"},{"lineNumber":954,"author":{"gitId":"-"},"content":" return getRubricSection(qnNumber, recipient).findElement(By.tagName(\"table\"));"},{"lineNumber":955,"author":{"gitId":"-"},"content":" }"},{"lineNumber":956,"author":{"gitId":"-"},"content":""},{"lineNumber":957,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRubricInputs(int qnNumber, String recipient, int rowNumber) {"},{"lineNumber":958,"author":{"gitId":"-"},"content":" WebElement rubricRow \u003d getRubricSection(qnNumber, recipient).findElements(By.tagName(\"tr\")).get(rowNumber - 1);"},{"lineNumber":959,"author":{"gitId":"-"},"content":" return rubricRow.findElements(By.tagName(\"input\"));"},{"lineNumber":960,"author":{"gitId":"-"},"content":" }"},{"lineNumber":961,"author":{"gitId":"-"},"content":""},{"lineNumber":962,"author":{"gitId":"-"},"content":" private WebElement getRankOptionsSection(int qnNumber, String recipient) {"},{"lineNumber":963,"author":{"gitId":"-"},"content":" int recipientIndex \u003d getRecipientIndex(qnNumber, recipient);"},{"lineNumber":964,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(qnNumber);"},{"lineNumber":965,"author":{"gitId":"-"},"content":" return questionForm.findElements(By.tagName(\"tm-rank-options-question-edit-answer-form\")).get(recipientIndex);"},{"lineNumber":966,"author":{"gitId":"-"},"content":" }"},{"lineNumber":967,"author":{"gitId":"-"},"content":""},{"lineNumber":968,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRankOptions(int questionNum, String recipient) {"},{"lineNumber":969,"author":{"gitId":"-"},"content":" WebElement rankSection \u003d getRankOptionsSection(questionNum, recipient);"},{"lineNumber":970,"author":{"gitId":"-"},"content":" return rankSection.findElements(By.tagName(\"strong\"));"},{"lineNumber":971,"author":{"gitId":"-"},"content":" }"},{"lineNumber":972,"author":{"gitId":"-"},"content":""},{"lineNumber":973,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRankOptionsDropdowns(int questionNum, String recipient) {"},{"lineNumber":974,"author":{"gitId":"-"},"content":" WebElement rankSection \u003d getRankOptionsSection(questionNum, recipient);"},{"lineNumber":975,"author":{"gitId":"-"},"content":" return rankSection.findElements(By.tagName(\"select\"));"},{"lineNumber":976,"author":{"gitId":"-"},"content":" }"},{"lineNumber":977,"author":{"gitId":"-"},"content":""},{"lineNumber":978,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRankRecipientDropdowns(int questionNum) {"},{"lineNumber":979,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElements(By.tagName(\"select\"));"},{"lineNumber":980,"author":{"gitId":"-"},"content":" }"},{"lineNumber":981,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":45,"mingyuanc":14,"-":922}},{"path":"src/e2e/java/teammates/e2e/pageobjects/InstructorFeedbackEditPage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertEquals;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertFalse;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertTrue;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.time.ZoneId;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.time.ZonedDateTime;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Arrays;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.openqa.selenium.Keys;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import org.openqa.selenium.support.FindBy;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackConstantSumQuestionDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackContributionQuestionDetails;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqQuestionDetails;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackNumericalScaleQuestionDetails;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionType;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsQuestionDetails;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankQuestionDetails;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRubricQuestionDetails;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextQuestionDetails;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.test.ThreadHelper;"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * Represents the instructor feedback edit page of the website."},{"lineNumber":41,"author":{"gitId":"-"},"content":" */"},{"lineNumber":42,"author":{"gitId":"-"},"content":"public class InstructorFeedbackEditPage extends AppPage {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" private static final String CUSTOM_FEEDBACK_PATH_OPTION \u003d \"Custom feedback path\";"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_PATH_SEPARATOR \u003d \" will give feedback on \";"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private static final String CUSTOM_VISIBILITY_OPTION \u003d \"Custom visibility options\";"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-fs-edit\")"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private WebElement fsEditButton;"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-fs-save\")"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private WebElement fsSaveButton;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-fs-copy\")"},{"lineNumber":54,"author":{"gitId":"-"},"content":" private WebElement fsCopyButton;"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"edit-course-id\")"},{"lineNumber":57,"author":{"gitId":"-"},"content":" private WebElement courseIdTextBox;"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"time-zone\")"},{"lineNumber":60,"author":{"gitId":"-"},"content":" private WebElement timezoneDropDown;"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"course-name\")"},{"lineNumber":63,"author":{"gitId":"-"},"content":" private WebElement courseNameTextBox;"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"edit-session-name\")"},{"lineNumber":66,"author":{"gitId":"-"},"content":" private WebElement sessionNameTextBox;"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"instructions\")"},{"lineNumber":69,"author":{"gitId":"-"},"content":" private WebElement instructionsEditor;"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-start-date\")"},{"lineNumber":72,"author":{"gitId":"-"},"content":" private WebElement startDateBox;"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-start-time\")"},{"lineNumber":75,"author":{"gitId":"-"},"content":" private WebElement startTimeDropdown;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-end-date\")"},{"lineNumber":78,"author":{"gitId":"-"},"content":" private WebElement endDateBox;"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-end-time\")"},{"lineNumber":81,"author":{"gitId":"-"},"content":" private WebElement endTimeDropdown;"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"grace-period\")"},{"lineNumber":84,"author":{"gitId":"-"},"content":" private WebElement gracePeriodDropdown;"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"submission-status\")"},{"lineNumber":87,"author":{"gitId":"-"},"content":" private WebElement submissionStatusTextBox;"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"published-status\")"},{"lineNumber":90,"author":{"gitId":"-"},"content":" private WebElement publishStatusTextBox;"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-change-visibility\")"},{"lineNumber":93,"author":{"gitId":"-"},"content":" private WebElement changeVisibilityButton;"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"session-visibility-custom\")"},{"lineNumber":96,"author":{"gitId":"-"},"content":" private WebElement customSessionVisibleTimeButton;"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"session-visibility-date\")"},{"lineNumber":99,"author":{"gitId":"-"},"content":" private WebElement sessionVisibilityDateBox;"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"session-visibility-time\")"},{"lineNumber":102,"author":{"gitId":"-"},"content":" private WebElement sessionVisibilityTimeDropdown;"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"session-visibility-at-open\")"},{"lineNumber":105,"author":{"gitId":"-"},"content":" private WebElement openSessionVisibleTimeButton;"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-custom\")"},{"lineNumber":108,"author":{"gitId":"-"},"content":" private WebElement customResponseVisibleTimeButton;"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-date\")"},{"lineNumber":111,"author":{"gitId":"-"},"content":" private WebElement responseVisibilityDateBox;"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-time\")"},{"lineNumber":114,"author":{"gitId":"-"},"content":" private WebElement responseVisibilityTimeDropdown;"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-immediately\")"},{"lineNumber":117,"author":{"gitId":"-"},"content":" private WebElement immediateResponseVisibleTimeButton;"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"response-visibility-manually\")"},{"lineNumber":120,"author":{"gitId":"-"},"content":" private WebElement manualResponseVisibleTimeButton;"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-change-email\")"},{"lineNumber":123,"author":{"gitId":"-"},"content":" private WebElement changeEmailButton;"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"email-opening\")"},{"lineNumber":126,"author":{"gitId":"-"},"content":" private WebElement openingSessionEmailCheckbox;"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"email-closing\")"},{"lineNumber":129,"author":{"gitId":"-"},"content":" private WebElement closingSessionEmailCheckbox;"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"email-published\")"},{"lineNumber":132,"author":{"gitId":"-"},"content":" private WebElement publishedSessionEmailCheckbox;"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-new-question\")"},{"lineNumber":135,"author":{"gitId":"-"},"content":" private WebElement addNewQuestionButton;"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-copy-question\")"},{"lineNumber":138,"author":{"gitId":"-"},"content":" private WebElement copyQuestionButton;"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"preview-student\")"},{"lineNumber":141,"author":{"gitId":"-"},"content":" private WebElement previewAsStudentDropdown;"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-preview-student\")"},{"lineNumber":144,"author":{"gitId":"-"},"content":" private WebElement previewAsStudentButton;"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"preview-instructor\")"},{"lineNumber":147,"author":{"gitId":"-"},"content":" private WebElement previewAsInstructorDropdown;"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" @FindBy(id \u003d \"btn-preview-instructor\")"},{"lineNumber":150,"author":{"gitId":"-"},"content":" private WebElement previewAsInstructorButton;"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" public InstructorFeedbackEditPage(Browser browser) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":157,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" return getPageTitle().contains(\"Edit Feedback Session\");"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":" public void verifySessionDetails(CourseAttributes course, FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" waitForElementPresence(By.id(\"instructions\"));"},{"lineNumber":163,"author":{"gitId":"-"},"content":" assertEquals(getCourseId(), course.getId());"},{"lineNumber":164,"author":{"gitId":"-"},"content":" assertEquals(getCourseName(), course.getName());"},{"lineNumber":165,"author":{"gitId":"-"},"content":" assertEquals(getTimeZone(), feedbackSession.getTimeZone());"},{"lineNumber":166,"author":{"gitId":"-"},"content":" assertEquals(getFeedbackSessionName(), feedbackSession.getFeedbackSessionName());"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assertEquals(getInstructions(), feedbackSession.getInstructions());"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(getStartDate(), getDateString(feedbackSession.getStartTime(), feedbackSession.getTimeZone()));"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertEquals(getStartTime(), getTimeString(feedbackSession.getStartTime(), feedbackSession.getTimeZone()));"},{"lineNumber":170,"author":{"gitId":"-"},"content":" assertEquals(getEndDate(), getDateString(feedbackSession.getEndTime(), feedbackSession.getTimeZone()));"},{"lineNumber":171,"author":{"gitId":"-"},"content":" assertEquals(getEndTime(), getTimeString(feedbackSession.getEndTime(), feedbackSession.getTimeZone()));"},{"lineNumber":172,"author":{"gitId":"-"},"content":" assertEquals(getGracePeriod(), feedbackSession.getGracePeriodMinutes() + \" min\");"},{"lineNumber":173,"author":{"gitId":"-"},"content":" verifySubmissionStatus(feedbackSession);"},{"lineNumber":174,"author":{"gitId":"-"},"content":" verifyPublishedStatus(feedbackSession);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" verifyVisibilitySettings(feedbackSession);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" verifyEmailSettings(feedbackSession);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" private void verifySubmissionStatus(FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" String submissionStatus \u003d getSubmissionStatus();"},{"lineNumber":181,"author":{"gitId":"-"},"content":" if (feedbackSession.isClosed()) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertEquals(submissionStatus, \"Closed\");"},{"lineNumber":183,"author":{"gitId":"-"},"content":" } else if (feedbackSession.isVisible() \u0026\u0026 (feedbackSession.isOpened() || feedbackSession.isInGracePeriod())) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" assertEquals(submissionStatus, \"Open\");"},{"lineNumber":185,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" assertEquals(submissionStatus, \"Awaiting\");"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" private void verifyPublishedStatus(FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" String publishedStatus \u003d getPublishedStatus();"},{"lineNumber":192,"author":{"gitId":"-"},"content":" if (feedbackSession.isPublished()) {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertEquals(publishedStatus, \"Published\");"},{"lineNumber":194,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" assertEquals(publishedStatus, \"Not Published\");"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" private void verifyVisibilitySettings(FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" Instant sessionVisibleTime \u003d feedbackSession.getSessionVisibleFromTime();"},{"lineNumber":201,"author":{"gitId":"-"},"content":" Instant responseVisibleTime \u003d feedbackSession.getResultsVisibleFromTime();"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" // Default settings, assert setting section not expanded"},{"lineNumber":204,"author":{"gitId":"-"},"content":" if (sessionVisibleTime.equals(Const.TIME_REPRESENTS_FOLLOW_OPENING)"},{"lineNumber":205,"author":{"gitId":"-"},"content":" \u0026\u0026 responseVisibleTime.equals(Const.TIME_REPRESENTS_LATER)) {"},{"lineNumber":206,"author":{"gitId":"-"},"content":" assertTrue(isElementPresent(\"btn-change-visibility\"));"},{"lineNumber":207,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }"},{"lineNumber":209,"author":{"gitId":"-"},"content":" verifySessionVisibilitySettings(sessionVisibleTime, feedbackSession);"},{"lineNumber":210,"author":{"gitId":"-"},"content":" verifyResponseVisibilitySettings(responseVisibleTime, feedbackSession);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" private void verifySessionVisibilitySettings(Instant sessionVisibleTime,"},{"lineNumber":214,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" if (sessionVisibleTime.equals(Const.TIME_REPRESENTS_FOLLOW_OPENING)) {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" assertTrue(openSessionVisibleTimeButton.isSelected());"},{"lineNumber":217,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" assertTrue(customSessionVisibleTimeButton.isSelected());"},{"lineNumber":219,"author":{"gitId":"-"},"content":" assertEquals(getSessionVisibilityDate(), getDateString(feedbackSession.getSessionVisibleFromTime(),"},{"lineNumber":220,"author":{"gitId":"-"},"content":" feedbackSession.getTimeZone()));"},{"lineNumber":221,"author":{"gitId":"-"},"content":" assertEquals(getSessionVisibilityTime(), getTimeString(feedbackSession.getSessionVisibleFromTime(),"},{"lineNumber":222,"author":{"gitId":"-"},"content":" feedbackSession.getTimeZone()));"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" private void verifyResponseVisibilitySettings(Instant responseVisibleTime,"},{"lineNumber":227,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" if (responseVisibleTime.equals(Const.TIME_REPRESENTS_FOLLOW_VISIBLE)) {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" assertTrue(immediateResponseVisibleTimeButton.isSelected());"},{"lineNumber":230,"author":{"gitId":"-"},"content":" } else if (responseVisibleTime.equals(Const.TIME_REPRESENTS_LATER)) {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" assertTrue(manualResponseVisibleTimeButton.isSelected());"},{"lineNumber":232,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" assertTrue(customSessionVisibleTimeButton.isSelected());"},{"lineNumber":234,"author":{"gitId":"-"},"content":" assertEquals(getResponseVisibilityDate(), getDateString(feedbackSession.getResultsVisibleFromTime(),"},{"lineNumber":235,"author":{"gitId":"-"},"content":" feedbackSession.getTimeZone()));"},{"lineNumber":236,"author":{"gitId":"-"},"content":" assertEquals(getResponseVisibilityTime(), getTimeString(feedbackSession.getResultsVisibleFromTime(),"},{"lineNumber":237,"author":{"gitId":"-"},"content":" feedbackSession.getTimeZone()));"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" private void verifyEmailSettings(FeedbackSessionAttributes feedbackSession) {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" boolean isOpeningEmailEnabled \u003d feedbackSession.isOpeningEmailEnabled();"},{"lineNumber":243,"author":{"gitId":"-"},"content":" boolean isClosingEmailEnabled \u003d feedbackSession.isClosingEmailEnabled();"},{"lineNumber":244,"author":{"gitId":"-"},"content":" boolean isPublishedEmailEnabled \u003d feedbackSession.isPublishedEmailEnabled();"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" // Default settings, assert setting section not expanded"},{"lineNumber":247,"author":{"gitId":"-"},"content":" if (isOpeningEmailEnabled \u0026\u0026 isClosingEmailEnabled \u0026\u0026 isPublishedEmailEnabled) {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" assertTrue(isElementPresent(\"btn-change-email\"));"},{"lineNumber":249,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":250,"author":{"gitId":"-"},"content":" }"},{"lineNumber":251,"author":{"gitId":"-"},"content":" if (isOpeningEmailEnabled) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" assertTrue(openingSessionEmailCheckbox.isSelected());"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":" if (isClosingEmailEnabled) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" assertTrue(closingSessionEmailCheckbox.isSelected());"},{"lineNumber":256,"author":{"gitId":"-"},"content":" }"},{"lineNumber":257,"author":{"gitId":"-"},"content":" if (isPublishedEmailEnabled) {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" assertTrue(publishedSessionEmailCheckbox.isSelected());"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" public void editSessionDetails(FeedbackSessionAttributes newFeedbackSessionDetails) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" click(fsEditButton);"},{"lineNumber":264,"author":{"gitId":"-"},"content":" setInstructions(newFeedbackSessionDetails.getInstructions());"},{"lineNumber":265,"author":{"gitId":"-"},"content":" setSessionStartDateTime(newFeedbackSessionDetails.getStartTime(), newFeedbackSessionDetails.getTimeZone());"},{"lineNumber":266,"author":{"gitId":"-"},"content":" setSessionEndDateTime(newFeedbackSessionDetails.getEndTime(), newFeedbackSessionDetails.getTimeZone());"},{"lineNumber":267,"author":{"gitId":"-"},"content":" selectGracePeriod(newFeedbackSessionDetails.getGracePeriodMinutes());"},{"lineNumber":268,"author":{"gitId":"-"},"content":" setVisibilitySettings(newFeedbackSessionDetails);"},{"lineNumber":269,"author":{"gitId":"-"},"content":" setEmailSettings(newFeedbackSessionDetails);"},{"lineNumber":270,"author":{"gitId":"-"},"content":" click(fsSaveButton);"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }"},{"lineNumber":272,"author":{"gitId":"-"},"content":""},{"lineNumber":273,"author":{"gitId":"-"},"content":" public void copySessionToOtherCourse(CourseAttributes otherCourse, String sessionName) {"},{"lineNumber":274,"author":{"gitId":"-"},"content":" click(fsCopyButton);"},{"lineNumber":275,"author":{"gitId":"-"},"content":" WebElement copyFsModal \u003d waitForElementPresence(By.id(\"copy-course-modal\"));"},{"lineNumber":276,"author":{"gitId":"-"},"content":""},{"lineNumber":277,"author":{"gitId":"-"},"content":" fillTextBox(copyFsModal.findElement(By.id(\"copy-session-name\")), sessionName);"},{"lineNumber":278,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e options \u003d copyFsModal.findElements(By.className(\"form-check\"));"},{"lineNumber":279,"author":{"gitId":"-"},"content":" for (WebElement option : options) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" String courseId \u003d option.findElement(By.cssSelector(\"label span\")).getText();"},{"lineNumber":281,"author":{"gitId":"-"},"content":" if (courseId.equals(otherCourse.getId())) {"},{"lineNumber":282,"author":{"gitId":"-"},"content":" click(option.findElement(By.tagName(\"input\")));"},{"lineNumber":283,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":284,"author":{"gitId":"-"},"content":" }"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":" click(browser.driver.findElement(By.id(\"btn-confirm-copy-course\")));"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" public void deleteSession() {"},{"lineNumber":290,"author":{"gitId":"-"},"content":" clickAndConfirm(waitForElementPresence(By.id(\"btn-fs-delete\")));"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" public FeedbackSubmitPage previewAsStudent(StudentAttributes student) {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(previewAsStudentDropdown, String.format(\"[%s] %s\", student.getTeam(), student.getName()));"},{"lineNumber":295,"author":{"gitId":"-"},"content":" click(previewAsStudentButton);"},{"lineNumber":296,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(2000);"},{"lineNumber":297,"author":{"gitId":"-"},"content":" switchToNewWindow();"},{"lineNumber":298,"author":{"gitId":"-"},"content":" return changePageType(FeedbackSubmitPage.class);"},{"lineNumber":299,"author":{"gitId":"-"},"content":" }"},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"-"},"content":" public FeedbackSubmitPage previewAsInstructor(InstructorAttributes instructor) {"},{"lineNumber":302,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(previewAsInstructorDropdown, instructor.getName());"},{"lineNumber":303,"author":{"gitId":"-"},"content":" click(previewAsInstructorButton);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(2000);"},{"lineNumber":305,"author":{"gitId":"-"},"content":" switchToNewWindow();"},{"lineNumber":306,"author":{"gitId":"-"},"content":" return changePageType(FeedbackSubmitPage.class);"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" public void verifyNumQuestions(int expected) {"},{"lineNumber":310,"author":{"gitId":"-"},"content":" assertEquals(getNumQuestions(), expected);"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":" public void verifyQuestionDetails(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":314,"author":{"gitId":"-"},"content":" scrollElementToCenter(getQuestionForm(questionNum));"},{"lineNumber":315,"author":{"gitId":"-"},"content":" assertEquals(feedbackQuestion.getQuestionType(), getQuestionType(questionNum));"},{"lineNumber":316,"author":{"gitId":"-"},"content":" assertEquals(feedbackQuestion.getQuestionNumber(), getQuestionNumber(questionNum));"},{"lineNumber":317,"author":{"gitId":"-"},"content":" assertEquals(feedbackQuestion.getQuestionDetailsCopy().getQuestionText(), getQuestionBrief(questionNum));"},{"lineNumber":318,"author":{"gitId":"-"},"content":" assertEquals(getQuestionDescription(questionNum), feedbackQuestion.getQuestionDescription());"},{"lineNumber":319,"author":{"gitId":"-"},"content":" verifyFeedbackPathSettings(questionNum, feedbackQuestion);"},{"lineNumber":320,"author":{"gitId":"-"},"content":" verifyQuestionVisibilitySettings(questionNum, feedbackQuestion);"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" private void verifyFeedbackPathSettings(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" assertEquals(getDisplayGiverName(feedbackQuestion.getGiverType()), getFeedbackGiver(questionNum));"},{"lineNumber":325,"author":{"gitId":"-"},"content":" String feedbackReceiver \u003d getFeedbackReceiver(questionNum);"},{"lineNumber":326,"author":{"gitId":"-"},"content":" assertEquals(getDisplayRecipientName(feedbackQuestion.getRecipientType()), feedbackReceiver);"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" if (feedbackReceiver.equals(getDisplayRecipientName(FeedbackParticipantType.INSTRUCTORS))"},{"lineNumber":329,"author":{"gitId":"-"},"content":" || feedbackReceiver.equals(getDisplayRecipientName(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF))"},{"lineNumber":330,"author":{"gitId":"-"},"content":" || feedbackReceiver.equals(getDisplayRecipientName(FeedbackParticipantType.TEAMS_EXCLUDING_SELF))) {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" verifyNumberOfEntitiesToGiveFeedbackTo(questionNum, feedbackQuestion.getNumberOfEntitiesToGiveFeedbackTo());"},{"lineNumber":332,"author":{"gitId":"-"},"content":" }"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" private void verifyNumberOfEntitiesToGiveFeedbackTo(int questionNum, int numberOfEntitiesToGiveFeedbackTo) {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":337,"author":{"gitId":"-"},"content":" WebElement feedbackPathPanel \u003d questionForm.findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":338,"author":{"gitId":"-"},"content":" if (numberOfEntitiesToGiveFeedbackTo \u003d\u003d Const.MAX_POSSIBLE_RECIPIENTS) {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" assertTrue(feedbackPathPanel.findElement(By.id(\"unlimited-recipients\")).isSelected());"},{"lineNumber":340,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":341,"author":{"gitId":"-"},"content":" assertTrue(feedbackPathPanel.findElement(By.id(\"custom-recipients\")).isSelected());"},{"lineNumber":342,"author":{"gitId":"-"},"content":" assertEquals(feedbackPathPanel.findElement(By.id(\"custom-recipients-number\")).getAttribute(\"value\"),"},{"lineNumber":343,"author":{"gitId":"-"},"content":" Integer.toString(numberOfEntitiesToGiveFeedbackTo));"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" private void verifyQuestionVisibilitySettings(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":349,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":350,"author":{"gitId":"-"},"content":" String visibility \u003d visibilityPanel.findElement(By.cssSelector(\"#btn-question-visibility span\")).getText();"},{"lineNumber":351,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showResponsesTo \u003d feedbackQuestion.getShowResponsesTo();"},{"lineNumber":352,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo \u003d feedbackQuestion.getShowGiverNameTo();"},{"lineNumber":353,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showRecipientNameTo \u003d feedbackQuestion.getShowRecipientNameTo();"},{"lineNumber":354,"author":{"gitId":"-"},"content":""},{"lineNumber":355,"author":{"gitId":"-"},"content":" switch (visibility) {"},{"lineNumber":356,"author":{"gitId":"-"},"content":" case \"Shown anonymously to recipient and giver\u0027s team members, visible to instructors\":"},{"lineNumber":357,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":358,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":359,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.OWN_TEAM_MEMBERS));"},{"lineNumber":360,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 3);"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":363,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 1);"},{"lineNumber":364,"author":{"gitId":"-"},"content":""},{"lineNumber":365,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":366,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":367,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":368,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":" case \"Visible to instructors only\":"},{"lineNumber":371,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":372,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 1);"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":375,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 1);"},{"lineNumber":376,"author":{"gitId":"-"},"content":""},{"lineNumber":377,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":378,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 1);"},{"lineNumber":379,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":" case \"Shown anonymously to recipient and instructors\":"},{"lineNumber":382,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":383,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":384,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 2);"},{"lineNumber":385,"author":{"gitId":"-"},"content":""},{"lineNumber":386,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 0);"},{"lineNumber":387,"author":{"gitId":"-"},"content":""},{"lineNumber":388,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":389,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":390,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":391,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":392,"author":{"gitId":"-"},"content":""},{"lineNumber":393,"author":{"gitId":"-"},"content":" case \"Shown anonymously to recipient, visible to instructors\":"},{"lineNumber":394,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":395,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":396,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 2);"},{"lineNumber":397,"author":{"gitId":"-"},"content":""},{"lineNumber":398,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":399,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 1);"},{"lineNumber":400,"author":{"gitId":"-"},"content":""},{"lineNumber":401,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":402,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":403,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":404,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" case \"Shown anonymously to recipient and giver/recipient\u0027s team members, visible to instructors\":"},{"lineNumber":407,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":408,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":409,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.OWN_TEAM_MEMBERS));"},{"lineNumber":410,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS));"},{"lineNumber":411,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 4);"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":414,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 1);"},{"lineNumber":415,"author":{"gitId":"-"},"content":""},{"lineNumber":416,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":417,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":418,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":419,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":420,"author":{"gitId":"-"},"content":""},{"lineNumber":421,"author":{"gitId":"-"},"content":" case \"Visible to recipient and instructors\":"},{"lineNumber":422,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":423,"author":{"gitId":"-"},"content":" assertTrue(showResponsesTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":424,"author":{"gitId":"-"},"content":" assertEquals(showResponsesTo.size(), 2);"},{"lineNumber":425,"author":{"gitId":"-"},"content":""},{"lineNumber":426,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":427,"author":{"gitId":"-"},"content":" assertTrue(showGiverNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":428,"author":{"gitId":"-"},"content":" assertEquals(showGiverNameTo.size(), 2);"},{"lineNumber":429,"author":{"gitId":"-"},"content":""},{"lineNumber":430,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":431,"author":{"gitId":"-"},"content":" assertTrue(showRecipientNameTo.contains(FeedbackParticipantType.RECEIVER));"},{"lineNumber":432,"author":{"gitId":"-"},"content":" assertEquals(showRecipientNameTo.size(), 2);"},{"lineNumber":433,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":434,"author":{"gitId":"-"},"content":""},{"lineNumber":435,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":436,"author":{"gitId":"-"},"content":" verifyCustomQuestionVisibility(questionNum, feedbackQuestion);"},{"lineNumber":437,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":" }"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" private void verifyCustomQuestionVisibility(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":442,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":443,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":444,"author":{"gitId":"-"},"content":" String visibility \u003d visibilityPanel.findElement(By.cssSelector(\"#btn-question-visibility span\")).getText();"},{"lineNumber":445,"author":{"gitId":"-"},"content":" assertEquals(visibility, CUSTOM_VISIBILITY_OPTION);"},{"lineNumber":446,"author":{"gitId":"-"},"content":""},{"lineNumber":447,"author":{"gitId":"-"},"content":" FeedbackParticipantType giver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":448,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":449,"author":{"gitId":"-"},"content":" WebElement customVisibilityTable \u003d visibilityPanel.findElement(By.id(\"custom-visibility-table\"));"},{"lineNumber":450,"author":{"gitId":"-"},"content":" assertVisibilityBoxesSelected(customVisibilityTable, giver, receiver, feedbackQuestion.getShowResponsesTo(), 1);"},{"lineNumber":451,"author":{"gitId":"-"},"content":" assertVisibilityBoxesSelected(customVisibilityTable, giver, receiver, feedbackQuestion.getShowGiverNameTo(), 2);"},{"lineNumber":452,"author":{"gitId":"-"},"content":" assertVisibilityBoxesSelected(customVisibilityTable, giver, receiver, feedbackQuestion.getShowRecipientNameTo(), 3);"},{"lineNumber":453,"author":{"gitId":"-"},"content":" }"},{"lineNumber":454,"author":{"gitId":"-"},"content":""},{"lineNumber":455,"author":{"gitId":"-"},"content":" private void assertVisibilityBoxesSelected(WebElement table, FeedbackParticipantType giver,"},{"lineNumber":456,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver, List\u003cFeedbackParticipantType\u003e participants,"},{"lineNumber":457,"author":{"gitId":"-"},"content":" int colNum) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e possibleTypes \u003d new ArrayList\u003c\u003e(Arrays.asList(FeedbackParticipantType.RECEIVER,"},{"lineNumber":459,"author":{"gitId":"-"},"content":" FeedbackParticipantType.OWN_TEAM_MEMBERS, FeedbackParticipantType.RECEIVER_TEAM_MEMBERS,"},{"lineNumber":460,"author":{"gitId":"-"},"content":" FeedbackParticipantType.STUDENTS, FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":461,"author":{"gitId":"-"},"content":" if (!giver.equals(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":462,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.OWN_TEAM_MEMBERS);"},{"lineNumber":463,"author":{"gitId":"-"},"content":" }"},{"lineNumber":464,"author":{"gitId":"-"},"content":" if (!receiver.equals(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":465,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":466,"author":{"gitId":"-"},"content":" }"},{"lineNumber":467,"author":{"gitId":"-"},"content":" if (receiver.equals(FeedbackParticipantType.NONE)"},{"lineNumber":468,"author":{"gitId":"-"},"content":" || receiver.equals(FeedbackParticipantType.SELF)"},{"lineNumber":469,"author":{"gitId":"-"},"content":" || receiver.equals(FeedbackParticipantType.OWN_TEAM)) {"},{"lineNumber":470,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER);"},{"lineNumber":471,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":472,"author":{"gitId":"-"},"content":" }"},{"lineNumber":473,"author":{"gitId":"-"},"content":""},{"lineNumber":474,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElements(By.tagName(\"tr\"));"},{"lineNumber":475,"author":{"gitId":"-"},"content":" int index \u003d colNum - 1;"},{"lineNumber":476,"author":{"gitId":"-"},"content":" for (FeedbackParticipantType participant : participants) {"},{"lineNumber":477,"author":{"gitId":"-"},"content":" assertTrue(rows.get(possibleTypes.indexOf(participant)).findElements(By.tagName(\"input\")).get(index)"},{"lineNumber":478,"author":{"gitId":"-"},"content":" .isSelected());"},{"lineNumber":479,"author":{"gitId":"-"},"content":" }"},{"lineNumber":480,"author":{"gitId":"-"},"content":" }"},{"lineNumber":481,"author":{"gitId":"-"},"content":""},{"lineNumber":482,"author":{"gitId":"-"},"content":" public void addTemplateQuestion(int optionNum) {"},{"lineNumber":483,"author":{"gitId":"-"},"content":" addNewQuestion(1);"},{"lineNumber":484,"author":{"gitId":"-"},"content":" WebElement templateQuestionModal \u003d waitForElementPresence(By.id(\"template-question-modal\"));"},{"lineNumber":485,"author":{"gitId":"-"},"content":""},{"lineNumber":486,"author":{"gitId":"-"},"content":" click(templateQuestionModal.findElements(By.tagName(\"input\")).get(optionNum - 1));"},{"lineNumber":487,"author":{"gitId":"-"},"content":" clickAndWaitForNewQuestion(browser.driver.findElement(By.id(\"btn-confirm-template\")));"},{"lineNumber":488,"author":{"gitId":"-"},"content":" }"},{"lineNumber":489,"author":{"gitId":"-"},"content":""},{"lineNumber":490,"author":{"gitId":"-"},"content":" public void copyQuestion(String courseId, String questionText) {"},{"lineNumber":491,"author":{"gitId":"-"},"content":" click(copyQuestionButton);"},{"lineNumber":492,"author":{"gitId":"-"},"content":" WebElement copyQuestionModal \u003d waitForElementPresence(By.id(\"copy-question-modal\"));"},{"lineNumber":493,"author":{"gitId":"-"},"content":""},{"lineNumber":494,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e cards \u003d copyQuestionModal.findElements(By.className(\"card\"));"},{"lineNumber":495,"author":{"gitId":"-"},"content":" for (WebElement card : cards) {"},{"lineNumber":496,"author":{"gitId":"-"},"content":" WebElement cardHeader \u003d card.findElement(By.className(\"card-header\"));"},{"lineNumber":497,"author":{"gitId":"-"},"content":" if (cardHeader.getText().startsWith(\"[\" + courseId + \"]\")) {"},{"lineNumber":498,"author":{"gitId":"-"},"content":" click(cardHeader);"},{"lineNumber":499,"author":{"gitId":"-"},"content":" WebElement cardBody \u003d waitForElementPresence(By.className(\"card-body\"));"},{"lineNumber":500,"author":{"gitId":"-"},"content":" // Reload questions"},{"lineNumber":501,"author":{"gitId":"-"},"content":" WebElement reloadBtn \u003d cardBody.findElement(By.tagName(\"button\"));"},{"lineNumber":502,"author":{"gitId":"-"},"content":" click(reloadBtn);"},{"lineNumber":503,"author":{"gitId":"-"},"content":" WebElement table \u003d waitForElementPresence(By.id(\"copy-question-table\"));"},{"lineNumber":504,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElements(By.cssSelector(\"tbody tr\"));"},{"lineNumber":505,"author":{"gitId":"-"},"content":" for (WebElement row : rows) {"},{"lineNumber":506,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e cells \u003d row.findElements(By.tagName(\"td\"));"},{"lineNumber":507,"author":{"gitId":"-"},"content":" if (cells.get(2).getText().equals(questionText)) {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" markOptionAsSelected(cells.get(0).findElement(By.tagName(\"input\")));"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" }"},{"lineNumber":511,"author":{"gitId":"-"},"content":" }"},{"lineNumber":512,"author":{"gitId":"-"},"content":" }"},{"lineNumber":513,"author":{"gitId":"-"},"content":" clickAndWaitForNewQuestion(browser.driver.findElement(By.id(\"btn-confirm-copy-question\")));"},{"lineNumber":514,"author":{"gitId":"-"},"content":" }"},{"lineNumber":515,"author":{"gitId":"-"},"content":""},{"lineNumber":516,"author":{"gitId":"-"},"content":" public void editQuestionNumber(int questionNum, int newQuestionNumber) {"},{"lineNumber":517,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":518,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getQuestionForm(questionNum).findElement(By.id(\"question-number-dropdown\")),"},{"lineNumber":519,"author":{"gitId":"-"},"content":" Integer.toString(newQuestionNumber));"},{"lineNumber":520,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":521,"author":{"gitId":"-"},"content":" }"},{"lineNumber":522,"author":{"gitId":"-"},"content":""},{"lineNumber":523,"author":{"gitId":"-"},"content":" public void editQuestionDetails(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":524,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":525,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":526,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":527,"author":{"gitId":"-"},"content":" }"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" private void inputQuestionDetails(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":530,"author":{"gitId":"-"},"content":" setQuestionBrief(questionNum, feedbackQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":531,"author":{"gitId":"-"},"content":" setQuestionDescription(questionNum, feedbackQuestion.getQuestionDescription());"},{"lineNumber":532,"author":{"gitId":"-"},"content":" FeedbackQuestionType questionType \u003d feedbackQuestion.getQuestionType();"},{"lineNumber":533,"author":{"gitId":"-"},"content":" if (!questionType.equals(FeedbackQuestionType.CONTRIB)) {"},{"lineNumber":534,"author":{"gitId":"-"},"content":" setFeedbackPath(questionNum, feedbackQuestion);"},{"lineNumber":535,"author":{"gitId":"-"},"content":" setQuestionVisibility(questionNum, feedbackQuestion);"},{"lineNumber":536,"author":{"gitId":"-"},"content":" }"},{"lineNumber":537,"author":{"gitId":"-"},"content":" }"},{"lineNumber":538,"author":{"gitId":"-"},"content":""},{"lineNumber":539,"author":{"gitId":"-"},"content":" private void inputQuestionDetails(int questionNum, FeedbackQuestion feedbackQuestion) {"},{"lineNumber":540,"author":{"gitId":"-"},"content":" setQuestionBrief(questionNum, feedbackQuestion.getQuestionDetailsCopy().getQuestionText());"},{"lineNumber":541,"author":{"gitId":"-"},"content":" setQuestionDescription(questionNum, feedbackQuestion.getDescription());"},{"lineNumber":542,"author":{"gitId":"-"},"content":" FeedbackQuestionType questionType \u003d feedbackQuestion.getQuestionDetailsCopy().getQuestionType();"},{"lineNumber":543,"author":{"gitId":"-"},"content":" if (!questionType.equals(FeedbackQuestionType.CONTRIB)) {"},{"lineNumber":544,"author":{"gitId":"-"},"content":" setFeedbackPath(questionNum, feedbackQuestion);"},{"lineNumber":545,"author":{"gitId":"-"},"content":" setQuestionVisibility(questionNum, feedbackQuestion);"},{"lineNumber":546,"author":{"gitId":"-"},"content":" }"},{"lineNumber":547,"author":{"gitId":"-"},"content":" }"},{"lineNumber":548,"author":{"gitId":"-"},"content":""},{"lineNumber":549,"author":{"gitId":"-"},"content":" public void duplicateQuestion(int questionNum) {"},{"lineNumber":550,"author":{"gitId":"-"},"content":" clickAndWaitForNewQuestion(getQuestionForm(questionNum).findElement(By.id(\"btn-duplicate-question\")));"},{"lineNumber":551,"author":{"gitId":"-"},"content":" }"},{"lineNumber":552,"author":{"gitId":"-"},"content":""},{"lineNumber":553,"author":{"gitId":"-"},"content":" public void deleteQuestion(int questionNum) {"},{"lineNumber":554,"author":{"gitId":"-"},"content":" clickAndConfirm(getQuestionForm(questionNum).findElement(By.id(\"btn-delete-question\")));"},{"lineNumber":555,"author":{"gitId":"-"},"content":" }"},{"lineNumber":556,"author":{"gitId":"-"},"content":""},{"lineNumber":557,"author":{"gitId":"-"},"content":" public void verifyTextQuestionDetails(int questionNum, FeedbackTextQuestionDetails questionDetails) {"},{"lineNumber":558,"author":{"gitId":"-"},"content":" String recommendLength \u003d getRecommendedTextLengthField(questionNum).getAttribute(\"value\");"},{"lineNumber":559,"author":{"gitId":"-"},"content":" assertEquals(recommendLength, questionDetails.getRecommendedLength().toString());"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":""},{"lineNumber":562,"author":{"gitId":"-"},"content":" public void addTextQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":563,"author":{"gitId":"-"},"content":" addNewQuestion(2);"},{"lineNumber":564,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":565,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":566,"author":{"gitId":"-"},"content":" FeedbackTextQuestionDetails questionDetails \u003d"},{"lineNumber":567,"author":{"gitId":"-"},"content":" (FeedbackTextQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":568,"author":{"gitId":"-"},"content":" fillTextBox(getRecommendedTextLengthField(questionNum), questionDetails.getRecommendedLength().toString());"},{"lineNumber":569,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":570,"author":{"gitId":"-"},"content":" }"},{"lineNumber":571,"author":{"gitId":"-"},"content":""},{"lineNumber":572,"author":{"gitId":"-"},"content":" public void addTextQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":573,"author":{"gitId":"-"},"content":" addNewQuestion(2);"},{"lineNumber":574,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":575,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":576,"author":{"gitId":"-"},"content":" FeedbackTextQuestionDetails questionDetails \u003d"},{"lineNumber":577,"author":{"gitId":"-"},"content":" (FeedbackTextQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":578,"author":{"gitId":"-"},"content":" fillTextBox(getRecommendedTextLengthField(questionNum), questionDetails.getRecommendedLength().toString());"},{"lineNumber":579,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":580,"author":{"gitId":"-"},"content":" }"},{"lineNumber":581,"author":{"gitId":"-"},"content":""},{"lineNumber":582,"author":{"gitId":"-"},"content":" public void editTextQuestion(int questionNum, FeedbackTextQuestionDetails textQuestionDetails) {"},{"lineNumber":583,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":584,"author":{"gitId":"-"},"content":" WebElement recommendedTextLengthField \u003d getRecommendedTextLengthField(questionNum);"},{"lineNumber":585,"author":{"gitId":"-"},"content":" waitForElementToBeClickable(recommendedTextLengthField);"},{"lineNumber":586,"author":{"gitId":"-"},"content":" fillTextBox(recommendedTextLengthField, textQuestionDetails.getRecommendedLength().toString());"},{"lineNumber":587,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":588,"author":{"gitId":"-"},"content":" }"},{"lineNumber":589,"author":{"gitId":"-"},"content":""},{"lineNumber":590,"author":{"gitId":"-"},"content":" public void verifyMcqQuestionDetails(int questionNum, FeedbackMcqQuestionDetails questionDetails) {"},{"lineNumber":591,"author":{"gitId":"-"},"content":" if (verifyGeneratedOptions(questionNum, questionDetails.getGenerateOptionsFor())) {"},{"lineNumber":592,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":593,"author":{"gitId":"-"},"content":" }"},{"lineNumber":594,"author":{"gitId":"-"},"content":" verifyOptions(questionNum, questionDetails.getMcqChoices());"},{"lineNumber":595,"author":{"gitId":"-"},"content":" verifyOptionWeights(questionNum, questionDetails.isHasAssignedWeights(), questionDetails.getMcqWeights());"},{"lineNumber":596,"author":{"gitId":"-"},"content":" verifyOtherOption(questionNum, questionDetails.isOtherEnabled(), questionDetails.getMcqOtherWeight());"},{"lineNumber":597,"author":{"gitId":"-"},"content":" }"},{"lineNumber":598,"author":{"gitId":"-"},"content":""},{"lineNumber":599,"author":{"gitId":"-"},"content":" public void addMcqQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":600,"author":{"gitId":"-"},"content":" addNewQuestion(3);"},{"lineNumber":601,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":602,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":603,"author":{"gitId":"-"},"content":" FeedbackMcqQuestionDetails questionDetails \u003d (FeedbackMcqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":604,"author":{"gitId":"-"},"content":" inputMcqDetails(questionNum, questionDetails);"},{"lineNumber":605,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":606,"author":{"gitId":"-"},"content":" }"},{"lineNumber":607,"author":{"gitId":"-"},"content":""},{"lineNumber":608,"author":{"gitId":"dishenggg"},"content":" public void addMcqQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":609,"author":{"gitId":"dishenggg"},"content":" addNewQuestion(3);"},{"lineNumber":610,"author":{"gitId":"dishenggg"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":611,"author":{"gitId":"dishenggg"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":612,"author":{"gitId":"-"},"content":" FeedbackMcqQuestionDetails questionDetails \u003d (FeedbackMcqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":613,"author":{"gitId":"-"},"content":" inputMcqDetails(questionNum, questionDetails);"},{"lineNumber":614,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":615,"author":{"gitId":"-"},"content":" }"},{"lineNumber":616,"author":{"gitId":"-"},"content":""},{"lineNumber":617,"author":{"gitId":"-"},"content":" public void editMcqQuestion(int questionNum, FeedbackMcqQuestionDetails questionDetails) {"},{"lineNumber":618,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":619,"author":{"gitId":"-"},"content":" inputMcqDetails(questionNum, questionDetails);"},{"lineNumber":620,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":621,"author":{"gitId":"-"},"content":" }"},{"lineNumber":622,"author":{"gitId":"-"},"content":""},{"lineNumber":623,"author":{"gitId":"-"},"content":" public void verifyMsqQuestionDetails(int questionNum, FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":624,"author":{"gitId":"-"},"content":" verifyMaxOptions(questionNum, questionDetails.getMaxSelectableChoices());"},{"lineNumber":625,"author":{"gitId":"-"},"content":" verifyMinOptions(questionNum, questionDetails.getMinSelectableChoices());"},{"lineNumber":626,"author":{"gitId":"-"},"content":" if (verifyGeneratedOptions(questionNum, questionDetails.getGenerateOptionsFor())) {"},{"lineNumber":627,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":629,"author":{"gitId":"-"},"content":" verifyOptions(questionNum, questionDetails.getMsqChoices());"},{"lineNumber":630,"author":{"gitId":"-"},"content":" verifyOptionWeights(questionNum, questionDetails.isHasAssignedWeights(), questionDetails.getMsqWeights());"},{"lineNumber":631,"author":{"gitId":"-"},"content":" verifyOtherOption(questionNum, questionDetails.isOtherEnabled(), questionDetails.getMsqOtherWeight());"},{"lineNumber":632,"author":{"gitId":"-"},"content":" }"},{"lineNumber":633,"author":{"gitId":"-"},"content":""},{"lineNumber":634,"author":{"gitId":"-"},"content":" public void addMsqQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":635,"author":{"gitId":"-"},"content":" addNewQuestion(4);"},{"lineNumber":636,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":637,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":638,"author":{"gitId":"-"},"content":" FeedbackMsqQuestionDetails questionDetails \u003d (FeedbackMsqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":639,"author":{"gitId":"-"},"content":" inputMsqDetails(questionNum, questionDetails);"},{"lineNumber":640,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":641,"author":{"gitId":"-"},"content":" }"},{"lineNumber":642,"author":{"gitId":"-"},"content":""},{"lineNumber":643,"author":{"gitId":"dishenggg"},"content":" public void addMsqQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":644,"author":{"gitId":"dishenggg"},"content":" addNewQuestion(4);"},{"lineNumber":645,"author":{"gitId":"dishenggg"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":646,"author":{"gitId":"dishenggg"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":647,"author":{"gitId":"dishenggg"},"content":" FeedbackMsqQuestionDetails questionDetails \u003d (FeedbackMsqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":648,"author":{"gitId":"dishenggg"},"content":" inputMsqDetails(questionNum, questionDetails);"},{"lineNumber":649,"author":{"gitId":"dishenggg"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":650,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":651,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":652,"author":{"gitId":"-"},"content":" public void editMsqQuestion(int questionNum, FeedbackMsqQuestionDetails msqQuestionDetails) {"},{"lineNumber":653,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":654,"author":{"gitId":"-"},"content":" inputMsqDetails(questionNum, msqQuestionDetails);"},{"lineNumber":655,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":656,"author":{"gitId":"-"},"content":" }"},{"lineNumber":657,"author":{"gitId":"-"},"content":""},{"lineNumber":658,"author":{"gitId":"-"},"content":" public void verifyNumScaleQuestionDetails(int questionNum, FeedbackNumericalScaleQuestionDetails questionDetails) {"},{"lineNumber":659,"author":{"gitId":"-"},"content":" assertEquals(getMinNumscaleInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":660,"author":{"gitId":"-"},"content":" Integer.toString(questionDetails.getMinScale()));"},{"lineNumber":661,"author":{"gitId":"-"},"content":" assertEquals(getNumScaleIncrementInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":662,"author":{"gitId":"-"},"content":" getDoubleString(questionDetails.getStep()));"},{"lineNumber":663,"author":{"gitId":"-"},"content":" assertEquals(getMaxNumscaleInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":664,"author":{"gitId":"-"},"content":" Integer.toString(questionDetails.getMaxScale()));"},{"lineNumber":665,"author":{"gitId":"-"},"content":" }"},{"lineNumber":666,"author":{"gitId":"-"},"content":""},{"lineNumber":667,"author":{"gitId":"-"},"content":" public void addNumScaleQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":668,"author":{"gitId":"-"},"content":" addNewQuestion(5);"},{"lineNumber":669,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":670,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":671,"author":{"gitId":"-"},"content":" FeedbackNumericalScaleQuestionDetails questionDetails \u003d"},{"lineNumber":672,"author":{"gitId":"-"},"content":" (FeedbackNumericalScaleQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":673,"author":{"gitId":"-"},"content":" inputNumScaleDetails(questionNum, questionDetails);"},{"lineNumber":674,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":675,"author":{"gitId":"-"},"content":" }"},{"lineNumber":676,"author":{"gitId":"-"},"content":""},{"lineNumber":677,"author":{"gitId":"-"},"content":" public void editNumScaleQuestion(int questionNum, FeedbackNumericalScaleQuestionDetails questionDetails) {"},{"lineNumber":678,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":679,"author":{"gitId":"-"},"content":" inputNumScaleDetails(questionNum, questionDetails);"},{"lineNumber":680,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":681,"author":{"gitId":"-"},"content":" }"},{"lineNumber":682,"author":{"gitId":"-"},"content":""},{"lineNumber":683,"author":{"gitId":"-"},"content":" public void verifyConstSumQuestionDetails(int questionNum, FeedbackConstantSumQuestionDetails questionDetails) {"},{"lineNumber":684,"author":{"gitId":"-"},"content":" if (!questionDetails.isDistributeToRecipients()) {"},{"lineNumber":685,"author":{"gitId":"-"},"content":" verifyOptions(questionNum, questionDetails.getConstSumOptions());"},{"lineNumber":686,"author":{"gitId":"-"},"content":" }"},{"lineNumber":687,"author":{"gitId":"-"},"content":""},{"lineNumber":688,"author":{"gitId":"-"},"content":" if (questionDetails.isPointsPerOption()) {"},{"lineNumber":689,"author":{"gitId":"-"},"content":" assertTrue(getConstSumPerOptionPointsRadioBtn(questionNum).isSelected());"},{"lineNumber":690,"author":{"gitId":"-"},"content":" assertEquals(getConstSumPerOptionPointsInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":691,"author":{"gitId":"-"},"content":" Integer.toString(questionDetails.getPoints()));"},{"lineNumber":692,"author":{"gitId":"-"},"content":" assertFalse(getConstSumTotalPointsRadioBtn(questionNum).isSelected());"},{"lineNumber":693,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":694,"author":{"gitId":"-"},"content":" assertTrue(getConstSumTotalPointsRadioBtn(questionNum).isSelected());"},{"lineNumber":695,"author":{"gitId":"-"},"content":" assertEquals(getConstSumTotalPointsInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":696,"author":{"gitId":"-"},"content":" Integer.toString(questionDetails.getPoints()));"},{"lineNumber":697,"author":{"gitId":"-"},"content":" assertFalse(getConstSumPerOptionPointsRadioBtn(questionNum).isSelected());"},{"lineNumber":698,"author":{"gitId":"-"},"content":" }"},{"lineNumber":699,"author":{"gitId":"-"},"content":""},{"lineNumber":700,"author":{"gitId":"-"},"content":" if (questionDetails.isForceUnevenDistribution()) {"},{"lineNumber":701,"author":{"gitId":"-"},"content":" String distributeFor \u003d questionDetails.getDistributePointsFor();"},{"lineNumber":702,"author":{"gitId":"-"},"content":" assertTrue(getConstSumUnevenDistributionCheckbox(questionNum).isSelected());"},{"lineNumber":703,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(getConstSumUnevenDistributionDropdown(questionNum)).trim(),"},{"lineNumber":704,"author":{"gitId":"-"},"content":" \"All options\".equals(distributeFor) ? \"Every option\" : distributeFor);"},{"lineNumber":705,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":706,"author":{"gitId":"-"},"content":" assertFalse(getConstSumUnevenDistributionCheckbox(questionNum).isSelected());"},{"lineNumber":707,"author":{"gitId":"-"},"content":" }"},{"lineNumber":708,"author":{"gitId":"-"},"content":" }"},{"lineNumber":709,"author":{"gitId":"-"},"content":""},{"lineNumber":710,"author":{"gitId":"-"},"content":" public void addConstSumOptionQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":711,"author":{"gitId":"-"},"content":" addNewQuestion(6);"},{"lineNumber":712,"author":{"gitId":"-"},"content":" addConstSumQuestion(feedbackQuestion);"},{"lineNumber":713,"author":{"gitId":"-"},"content":" }"},{"lineNumber":714,"author":{"gitId":"-"},"content":""},{"lineNumber":715,"author":{"gitId":"-"},"content":" public void addConstSumRecipientQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":716,"author":{"gitId":"-"},"content":" addNewQuestion(7);"},{"lineNumber":717,"author":{"gitId":"-"},"content":" addConstSumQuestion(feedbackQuestion);"},{"lineNumber":718,"author":{"gitId":"-"},"content":" }"},{"lineNumber":719,"author":{"gitId":"-"},"content":""},{"lineNumber":720,"author":{"gitId":"-"},"content":" public void addConstSumQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":721,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":722,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":723,"author":{"gitId":"-"},"content":" FeedbackConstantSumQuestionDetails questionDetails \u003d"},{"lineNumber":724,"author":{"gitId":"-"},"content":" (FeedbackConstantSumQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":725,"author":{"gitId":"-"},"content":" inputConstSumDetails(questionNum, questionDetails);"},{"lineNumber":726,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":727,"author":{"gitId":"-"},"content":" }"},{"lineNumber":728,"author":{"gitId":"-"},"content":""},{"lineNumber":729,"author":{"gitId":"-"},"content":" public void editConstSumQuestion(int questionNum, FeedbackConstantSumQuestionDetails csQuestionDetails) {"},{"lineNumber":730,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":731,"author":{"gitId":"-"},"content":" inputConstSumDetails(questionNum, csQuestionDetails);"},{"lineNumber":732,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":733,"author":{"gitId":"-"},"content":" }"},{"lineNumber":734,"author":{"gitId":"-"},"content":""},{"lineNumber":735,"author":{"gitId":"-"},"content":" public void verifyContributionQuestionDetails(int questionNum, FeedbackContributionQuestionDetails questionDetails) {"},{"lineNumber":736,"author":{"gitId":"-"},"content":" assertEquals(questionDetails.isZeroSum(), getZeroSumCheckbox(questionNum).isSelected());"},{"lineNumber":737,"author":{"gitId":"-"},"content":" assertEquals(questionDetails.isNotSureAllowed(), getAllowNotSureContributionCheckbox(questionNum).isSelected());"},{"lineNumber":738,"author":{"gitId":"-"},"content":" if (questionDetails.isZeroSum()) {"},{"lineNumber":739,"author":{"gitId":"-"},"content":" assertFalse(questionDetails.isNotSureAllowed());"},{"lineNumber":740,"author":{"gitId":"-"},"content":" }"},{"lineNumber":741,"author":{"gitId":"-"},"content":" }"},{"lineNumber":742,"author":{"gitId":"-"},"content":""},{"lineNumber":743,"author":{"gitId":"-"},"content":" public void addContributionQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":744,"author":{"gitId":"-"},"content":" addNewQuestion(8);"},{"lineNumber":745,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":746,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":747,"author":{"gitId":"-"},"content":" FeedbackContributionQuestionDetails questionDetails \u003d"},{"lineNumber":748,"author":{"gitId":"-"},"content":" (FeedbackContributionQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":749,"author":{"gitId":"-"},"content":" inputContributionDetails(questionNum, questionDetails);"},{"lineNumber":750,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":751,"author":{"gitId":"-"},"content":" }"},{"lineNumber":752,"author":{"gitId":"-"},"content":""},{"lineNumber":753,"author":{"gitId":"-"},"content":" public void editContributionQuestion(int questionNum, FeedbackContributionQuestionDetails questionDetails) {"},{"lineNumber":754,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":755,"author":{"gitId":"-"},"content":" inputContributionDetails(questionNum, questionDetails);"},{"lineNumber":756,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":757,"author":{"gitId":"-"},"content":" }"},{"lineNumber":758,"author":{"gitId":"-"},"content":""},{"lineNumber":759,"author":{"gitId":"-"},"content":" public void verifyRubricQuestionDetails(int questionNum, FeedbackRubricQuestionDetails questionDetails) {"},{"lineNumber":760,"author":{"gitId":"-"},"content":" int numChoices \u003d questionDetails.getNumOfRubricChoices();"},{"lineNumber":761,"author":{"gitId":"-"},"content":" List\u003cString\u003e choices \u003d questionDetails.getRubricChoices();"},{"lineNumber":762,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numChoices; i++) {"},{"lineNumber":763,"author":{"gitId":"-"},"content":" assertEquals(choices.get(i), getRubricChoiceInputs(questionNum).get(i).getAttribute(\"value\"));"},{"lineNumber":764,"author":{"gitId":"-"},"content":" }"},{"lineNumber":765,"author":{"gitId":"-"},"content":""},{"lineNumber":766,"author":{"gitId":"-"},"content":" int numSubQn \u003d questionDetails.getNumOfRubricSubQuestions();"},{"lineNumber":767,"author":{"gitId":"-"},"content":" List\u003cString\u003e subQuestions \u003d questionDetails.getRubricSubQuestions();"},{"lineNumber":768,"author":{"gitId":"-"},"content":" List\u003cList\u003cString\u003e\u003e descriptions \u003d questionDetails.getRubricDescriptions();"},{"lineNumber":769,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQn; i++) {"},{"lineNumber":770,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e textAreas \u003d getRubricTextareas(questionNum, i + 2);"},{"lineNumber":771,"author":{"gitId":"-"},"content":" assertEquals(subQuestions.get(i), textAreas.get(0).getAttribute(\"value\"));"},{"lineNumber":772,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c numChoices; j++) {"},{"lineNumber":773,"author":{"gitId":"-"},"content":" assertEquals(descriptions.get(i).get(j), textAreas.get(j + 1).getAttribute(\"value\"));"},{"lineNumber":774,"author":{"gitId":"-"},"content":" }"},{"lineNumber":775,"author":{"gitId":"-"},"content":" }"},{"lineNumber":776,"author":{"gitId":"-"},"content":""},{"lineNumber":777,"author":{"gitId":"-"},"content":" if (questionDetails.isHasAssignedWeights()) {"},{"lineNumber":778,"author":{"gitId":"-"},"content":" assertTrue(getWeightCheckbox(questionNum).isSelected());"},{"lineNumber":779,"author":{"gitId":"-"},"content":" List\u003cList\u003cDouble\u003e\u003e weights \u003d questionDetails.getRubricWeights();"},{"lineNumber":780,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQn; i++) {"},{"lineNumber":781,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rubricWeights \u003d getRubricWeights(questionNum, i + 2);"},{"lineNumber":782,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c numChoices; j++) {"},{"lineNumber":783,"author":{"gitId":"-"},"content":" assertEquals(getDoubleString(weights.get(i).get(j)),"},{"lineNumber":784,"author":{"gitId":"-"},"content":" rubricWeights.get(j).getAttribute(\"value\"));"},{"lineNumber":785,"author":{"gitId":"-"},"content":" }"},{"lineNumber":786,"author":{"gitId":"-"},"content":" }"},{"lineNumber":787,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":788,"author":{"gitId":"-"},"content":" assertFalse(getWeightCheckbox(questionNum).isSelected());"},{"lineNumber":789,"author":{"gitId":"-"},"content":" }"},{"lineNumber":790,"author":{"gitId":"-"},"content":" }"},{"lineNumber":791,"author":{"gitId":"-"},"content":""},{"lineNumber":792,"author":{"gitId":"-"},"content":" public void addRubricQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":793,"author":{"gitId":"-"},"content":" addNewQuestion(9);"},{"lineNumber":794,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":795,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":796,"author":{"gitId":"-"},"content":" FeedbackRubricQuestionDetails questionDetails \u003d"},{"lineNumber":797,"author":{"gitId":"-"},"content":" (FeedbackRubricQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":798,"author":{"gitId":"-"},"content":" inputRubricDetails(questionNum, questionDetails);"},{"lineNumber":799,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":800,"author":{"gitId":"-"},"content":" }"},{"lineNumber":801,"author":{"gitId":"-"},"content":""},{"lineNumber":802,"author":{"gitId":"-"},"content":" public void editRubricQuestion(int questionNum, FeedbackRubricQuestionDetails questionDetails) {"},{"lineNumber":803,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":804,"author":{"gitId":"-"},"content":" inputRubricDetails(questionNum, questionDetails);"},{"lineNumber":805,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":806,"author":{"gitId":"-"},"content":" }"},{"lineNumber":807,"author":{"gitId":"-"},"content":""},{"lineNumber":808,"author":{"gitId":"-"},"content":" public void verifyRankQuestionDetails(int questionNum, FeedbackRankQuestionDetails questionDetails) {"},{"lineNumber":809,"author":{"gitId":"-"},"content":" if (questionDetails instanceof FeedbackRankOptionsQuestionDetails) {"},{"lineNumber":810,"author":{"gitId":"-"},"content":" FeedbackRankOptionsQuestionDetails optionDetails \u003d (FeedbackRankOptionsQuestionDetails) questionDetails;"},{"lineNumber":811,"author":{"gitId":"-"},"content":" verifyOptions(questionNum, optionDetails.getOptions());"},{"lineNumber":812,"author":{"gitId":"-"},"content":" }"},{"lineNumber":813,"author":{"gitId":"-"},"content":" assertEquals(getAllowDuplicateRankCheckbox(questionNum).isSelected(), questionDetails.isAreDuplicatesAllowed());"},{"lineNumber":814,"author":{"gitId":"-"},"content":" verifyMaxOptions(questionNum, questionDetails.getMaxOptionsToBeRanked());"},{"lineNumber":815,"author":{"gitId":"-"},"content":" verifyMinOptions(questionNum, questionDetails.getMinOptionsToBeRanked());"},{"lineNumber":816,"author":{"gitId":"-"},"content":" }"},{"lineNumber":817,"author":{"gitId":"-"},"content":""},{"lineNumber":818,"author":{"gitId":"-"},"content":" public void addRankOptionsQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":819,"author":{"gitId":"-"},"content":" addNewQuestion(10);"},{"lineNumber":820,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":821,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":822,"author":{"gitId":"-"},"content":" FeedbackRankOptionsQuestionDetails questionDetails \u003d"},{"lineNumber":823,"author":{"gitId":"-"},"content":" (FeedbackRankOptionsQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":824,"author":{"gitId":"-"},"content":" inputRankDetails(questionNum, questionDetails);"},{"lineNumber":825,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":826,"author":{"gitId":"-"},"content":" }"},{"lineNumber":827,"author":{"gitId":"-"},"content":""},{"lineNumber":828,"author":{"gitId":"mingyuanc"},"content":" public void addRankOptionsQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":829,"author":{"gitId":"mingyuanc"},"content":" addNewQuestion(10);"},{"lineNumber":830,"author":{"gitId":"mingyuanc"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":831,"author":{"gitId":"mingyuanc"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":832,"author":{"gitId":"mingyuanc"},"content":" FeedbackRankOptionsQuestionDetails questionDetails \u003d"},{"lineNumber":833,"author":{"gitId":"-"},"content":" (FeedbackRankOptionsQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":834,"author":{"gitId":"-"},"content":" inputRankDetails(questionNum, questionDetails);"},{"lineNumber":835,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":836,"author":{"gitId":"-"},"content":" }"},{"lineNumber":837,"author":{"gitId":"-"},"content":""},{"lineNumber":838,"author":{"gitId":"-"},"content":" public void addRankRecipientsQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":839,"author":{"gitId":"-"},"content":" addNewQuestion(11);"},{"lineNumber":840,"author":{"gitId":"-"},"content":" int questionNum \u003d getNumQuestions();"},{"lineNumber":841,"author":{"gitId":"-"},"content":" inputQuestionDetails(questionNum, feedbackQuestion);"},{"lineNumber":842,"author":{"gitId":"-"},"content":" FeedbackRankQuestionDetails questionDetails \u003d"},{"lineNumber":843,"author":{"gitId":"-"},"content":" (FeedbackRankQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":844,"author":{"gitId":"-"},"content":" inputRankDetails(questionNum, questionDetails);"},{"lineNumber":845,"author":{"gitId":"-"},"content":" clickSaveNewQuestionButton();"},{"lineNumber":846,"author":{"gitId":"-"},"content":" }"},{"lineNumber":847,"author":{"gitId":"-"},"content":""},{"lineNumber":848,"author":{"gitId":"-"},"content":" public void editRankQuestion(int questionNum, FeedbackRankQuestionDetails questionDetails) {"},{"lineNumber":849,"author":{"gitId":"-"},"content":" clickEditQuestionButton(questionNum);"},{"lineNumber":850,"author":{"gitId":"-"},"content":" inputRankDetails(questionNum, questionDetails);"},{"lineNumber":851,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":852,"author":{"gitId":"-"},"content":" }"},{"lineNumber":853,"author":{"gitId":"-"},"content":""},{"lineNumber":854,"author":{"gitId":"-"},"content":" private String getCourseId() {"},{"lineNumber":855,"author":{"gitId":"-"},"content":" return courseIdTextBox.getText();"},{"lineNumber":856,"author":{"gitId":"-"},"content":" }"},{"lineNumber":857,"author":{"gitId":"-"},"content":""},{"lineNumber":858,"author":{"gitId":"-"},"content":" private String getCourseName() {"},{"lineNumber":859,"author":{"gitId":"-"},"content":" return courseNameTextBox.getText();"},{"lineNumber":860,"author":{"gitId":"-"},"content":" }"},{"lineNumber":861,"author":{"gitId":"-"},"content":""},{"lineNumber":862,"author":{"gitId":"-"},"content":" private String getTimeZone() {"},{"lineNumber":863,"author":{"gitId":"-"},"content":" return timezoneDropDown.getText();"},{"lineNumber":864,"author":{"gitId":"-"},"content":" }"},{"lineNumber":865,"author":{"gitId":"-"},"content":""},{"lineNumber":866,"author":{"gitId":"-"},"content":" private String getFeedbackSessionName() {"},{"lineNumber":867,"author":{"gitId":"-"},"content":" return sessionNameTextBox.getText();"},{"lineNumber":868,"author":{"gitId":"-"},"content":" }"},{"lineNumber":869,"author":{"gitId":"-"},"content":""},{"lineNumber":870,"author":{"gitId":"-"},"content":" private String getInstructions() {"},{"lineNumber":871,"author":{"gitId":"-"},"content":" return getEditorRichText(instructionsEditor.findElement(By.tagName(\"editor\")));"},{"lineNumber":872,"author":{"gitId":"-"},"content":" }"},{"lineNumber":873,"author":{"gitId":"-"},"content":""},{"lineNumber":874,"author":{"gitId":"-"},"content":" private String getStartDate() {"},{"lineNumber":875,"author":{"gitId":"-"},"content":" return startDateBox.findElement(By.tagName(\"input\")).getAttribute(\"value\");"},{"lineNumber":876,"author":{"gitId":"-"},"content":" }"},{"lineNumber":877,"author":{"gitId":"-"},"content":""},{"lineNumber":878,"author":{"gitId":"-"},"content":" private String getStartTime() {"},{"lineNumber":879,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(startTimeDropdown.findElement(By.tagName(\"select\")));"},{"lineNumber":880,"author":{"gitId":"-"},"content":" }"},{"lineNumber":881,"author":{"gitId":"-"},"content":""},{"lineNumber":882,"author":{"gitId":"-"},"content":" private String getEndDate() {"},{"lineNumber":883,"author":{"gitId":"-"},"content":" return endDateBox.findElement(By.tagName(\"input\")).getAttribute(\"value\");"},{"lineNumber":884,"author":{"gitId":"-"},"content":" }"},{"lineNumber":885,"author":{"gitId":"-"},"content":""},{"lineNumber":886,"author":{"gitId":"-"},"content":" private String getEndTime() {"},{"lineNumber":887,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(endTimeDropdown.findElement(By.tagName(\"select\")));"},{"lineNumber":888,"author":{"gitId":"-"},"content":" }"},{"lineNumber":889,"author":{"gitId":"-"},"content":""},{"lineNumber":890,"author":{"gitId":"-"},"content":" private String getSessionVisibilityDate() {"},{"lineNumber":891,"author":{"gitId":"-"},"content":" return sessionVisibilityDateBox.findElement(By.tagName(\"input\")).getAttribute(\"value\");"},{"lineNumber":892,"author":{"gitId":"-"},"content":" }"},{"lineNumber":893,"author":{"gitId":"-"},"content":""},{"lineNumber":894,"author":{"gitId":"-"},"content":" private String getSessionVisibilityTime() {"},{"lineNumber":895,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(sessionVisibilityTimeDropdown.findElement(By.tagName(\"select\")));"},{"lineNumber":896,"author":{"gitId":"-"},"content":" }"},{"lineNumber":897,"author":{"gitId":"-"},"content":""},{"lineNumber":898,"author":{"gitId":"-"},"content":" private String getResponseVisibilityDate() {"},{"lineNumber":899,"author":{"gitId":"-"},"content":" return responseVisibilityDateBox.findElement(By.tagName(\"input\"))"},{"lineNumber":900,"author":{"gitId":"-"},"content":" .getAttribute(\"value\");"},{"lineNumber":901,"author":{"gitId":"-"},"content":" }"},{"lineNumber":902,"author":{"gitId":"-"},"content":""},{"lineNumber":903,"author":{"gitId":"-"},"content":" private String getResponseVisibilityTime() {"},{"lineNumber":904,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(responseVisibilityTimeDropdown.findElement(By.tagName(\"select\")));"},{"lineNumber":905,"author":{"gitId":"-"},"content":" }"},{"lineNumber":906,"author":{"gitId":"-"},"content":""},{"lineNumber":907,"author":{"gitId":"-"},"content":" private String getGracePeriod() {"},{"lineNumber":908,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(gracePeriodDropdown);"},{"lineNumber":909,"author":{"gitId":"-"},"content":" }"},{"lineNumber":910,"author":{"gitId":"-"},"content":""},{"lineNumber":911,"author":{"gitId":"-"},"content":" private String getSubmissionStatus() {"},{"lineNumber":912,"author":{"gitId":"-"},"content":" return submissionStatusTextBox.getText();"},{"lineNumber":913,"author":{"gitId":"-"},"content":" }"},{"lineNumber":914,"author":{"gitId":"-"},"content":""},{"lineNumber":915,"author":{"gitId":"-"},"content":" private String getPublishedStatus() {"},{"lineNumber":916,"author":{"gitId":"-"},"content":" return publishStatusTextBox.getText();"},{"lineNumber":917,"author":{"gitId":"-"},"content":" }"},{"lineNumber":918,"author":{"gitId":"-"},"content":""},{"lineNumber":919,"author":{"gitId":"-"},"content":" private String getDateString(Instant instant, String timeZone) {"},{"lineNumber":920,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"EE, dd MMM, yyyy\");"},{"lineNumber":921,"author":{"gitId":"-"},"content":" }"},{"lineNumber":922,"author":{"gitId":"-"},"content":""},{"lineNumber":923,"author":{"gitId":"-"},"content":" private String getTimeString(Instant instant, String timeZone) {"},{"lineNumber":924,"author":{"gitId":"-"},"content":" ZonedDateTime dateTime \u003d instant.atZone(ZoneId.of(timeZone));"},{"lineNumber":925,"author":{"gitId":"-"},"content":" if (dateTime.getHour() \u003d\u003d 0 \u0026\u0026 dateTime.getMinute() \u003d\u003d 0) {"},{"lineNumber":926,"author":{"gitId":"-"},"content":" return \"23:59H\";"},{"lineNumber":927,"author":{"gitId":"-"},"content":" }"},{"lineNumber":928,"author":{"gitId":"-"},"content":" return getDisplayedDateTime(instant, timeZone, \"HH:00\") + \"H\";"},{"lineNumber":929,"author":{"gitId":"-"},"content":" }"},{"lineNumber":930,"author":{"gitId":"-"},"content":""},{"lineNumber":931,"author":{"gitId":"-"},"content":" private void setInstructions(String newInstructions) {"},{"lineNumber":932,"author":{"gitId":"-"},"content":" writeToRichTextEditor(instructionsEditor.findElement(By.tagName(\"editor\")), newInstructions);"},{"lineNumber":933,"author":{"gitId":"-"},"content":" }"},{"lineNumber":934,"author":{"gitId":"-"},"content":""},{"lineNumber":935,"author":{"gitId":"-"},"content":" private void setSessionStartDateTime(Instant startInstant, String timeZone) {"},{"lineNumber":936,"author":{"gitId":"-"},"content":" setDateTime(startDateBox, startTimeDropdown, startInstant, timeZone);"},{"lineNumber":937,"author":{"gitId":"-"},"content":" }"},{"lineNumber":938,"author":{"gitId":"-"},"content":""},{"lineNumber":939,"author":{"gitId":"-"},"content":" private void setSessionEndDateTime(Instant endInstant, String timeZone) {"},{"lineNumber":940,"author":{"gitId":"-"},"content":" setDateTime(endDateBox, endTimeDropdown, endInstant, timeZone);"},{"lineNumber":941,"author":{"gitId":"-"},"content":" }"},{"lineNumber":942,"author":{"gitId":"-"},"content":""},{"lineNumber":943,"author":{"gitId":"-"},"content":" private void setVisibilityDateTime(Instant startInstant, String timeZone) {"},{"lineNumber":944,"author":{"gitId":"-"},"content":" setDateTime(sessionVisibilityDateBox, sessionVisibilityTimeDropdown, startInstant, timeZone);"},{"lineNumber":945,"author":{"gitId":"-"},"content":" }"},{"lineNumber":946,"author":{"gitId":"-"},"content":""},{"lineNumber":947,"author":{"gitId":"-"},"content":" private void setResponseDateTime(Instant endInstant, String timeZone) {"},{"lineNumber":948,"author":{"gitId":"-"},"content":" setDateTime(responseVisibilityDateBox, responseVisibilityTimeDropdown, endInstant, timeZone);"},{"lineNumber":949,"author":{"gitId":"-"},"content":" }"},{"lineNumber":950,"author":{"gitId":"-"},"content":""},{"lineNumber":951,"author":{"gitId":"-"},"content":" private void setDateTime(WebElement dateBox, WebElement timeBox, Instant startInstant, String timeZone) {"},{"lineNumber":952,"author":{"gitId":"-"},"content":" fillDatePicker(dateBox, startInstant, timeZone);"},{"lineNumber":953,"author":{"gitId":"-"},"content":""},{"lineNumber":954,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(timeBox.findElement(By.tagName(\"select\")), getTimeString(startInstant, timeZone));"},{"lineNumber":955,"author":{"gitId":"-"},"content":" }"},{"lineNumber":956,"author":{"gitId":"-"},"content":""},{"lineNumber":957,"author":{"gitId":"-"},"content":" private void selectGracePeriod(long gracePeriodMinutes) {"},{"lineNumber":958,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(gracePeriodDropdown, gracePeriodMinutes + \" min\");"},{"lineNumber":959,"author":{"gitId":"-"},"content":" }"},{"lineNumber":960,"author":{"gitId":"-"},"content":""},{"lineNumber":961,"author":{"gitId":"-"},"content":" private void setVisibilitySettings(FeedbackSessionAttributes newFeedbackSession) {"},{"lineNumber":962,"author":{"gitId":"-"},"content":" showVisibilitySettings();"},{"lineNumber":963,"author":{"gitId":"-"},"content":""},{"lineNumber":964,"author":{"gitId":"-"},"content":" setSessionVisibilitySettings(newFeedbackSession);"},{"lineNumber":965,"author":{"gitId":"-"},"content":" setResponseVisibilitySettings(newFeedbackSession);"},{"lineNumber":966,"author":{"gitId":"-"},"content":" }"},{"lineNumber":967,"author":{"gitId":"-"},"content":""},{"lineNumber":968,"author":{"gitId":"-"},"content":" private void setSessionVisibilitySettings(FeedbackSessionAttributes newFeedbackSession) {"},{"lineNumber":969,"author":{"gitId":"-"},"content":" Instant sessionDateTime \u003d newFeedbackSession.getSessionVisibleFromTime();"},{"lineNumber":970,"author":{"gitId":"-"},"content":" if (sessionDateTime.equals(Const.TIME_REPRESENTS_FOLLOW_OPENING)) {"},{"lineNumber":971,"author":{"gitId":"-"},"content":" click(openSessionVisibleTimeButton);"},{"lineNumber":972,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":973,"author":{"gitId":"-"},"content":" click(customSessionVisibleTimeButton);"},{"lineNumber":974,"author":{"gitId":"-"},"content":" setVisibilityDateTime(sessionDateTime, newFeedbackSession.getTimeZone());"},{"lineNumber":975,"author":{"gitId":"-"},"content":" }"},{"lineNumber":976,"author":{"gitId":"-"},"content":" }"},{"lineNumber":977,"author":{"gitId":"-"},"content":""},{"lineNumber":978,"author":{"gitId":"-"},"content":" private void setResponseVisibilitySettings(FeedbackSessionAttributes newFeedbackSession) {"},{"lineNumber":979,"author":{"gitId":"-"},"content":" Instant responseDateTime \u003d newFeedbackSession.getResultsVisibleFromTime();"},{"lineNumber":980,"author":{"gitId":"-"},"content":" if (responseDateTime.equals(Const.TIME_REPRESENTS_FOLLOW_VISIBLE)) {"},{"lineNumber":981,"author":{"gitId":"-"},"content":" click(immediateResponseVisibleTimeButton);"},{"lineNumber":982,"author":{"gitId":"-"},"content":" } else if (responseDateTime.equals(Const.TIME_REPRESENTS_LATER)) {"},{"lineNumber":983,"author":{"gitId":"-"},"content":" click(manualResponseVisibleTimeButton);"},{"lineNumber":984,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":985,"author":{"gitId":"-"},"content":" click(customResponseVisibleTimeButton);"},{"lineNumber":986,"author":{"gitId":"-"},"content":" setResponseDateTime(responseDateTime, newFeedbackSession.getTimeZone());"},{"lineNumber":987,"author":{"gitId":"-"},"content":" }"},{"lineNumber":988,"author":{"gitId":"-"},"content":" }"},{"lineNumber":989,"author":{"gitId":"-"},"content":""},{"lineNumber":990,"author":{"gitId":"-"},"content":" private void setEmailSettings(FeedbackSessionAttributes newFeedbackSessionDetails) {"},{"lineNumber":991,"author":{"gitId":"-"},"content":" showEmailSettings();"},{"lineNumber":992,"author":{"gitId":"-"},"content":" if (newFeedbackSessionDetails.isOpeningEmailEnabled() !\u003d openingSessionEmailCheckbox.isSelected()) {"},{"lineNumber":993,"author":{"gitId":"-"},"content":" click(openingSessionEmailCheckbox);"},{"lineNumber":994,"author":{"gitId":"-"},"content":" }"},{"lineNumber":995,"author":{"gitId":"-"},"content":" if (newFeedbackSessionDetails.isClosingEmailEnabled() !\u003d closingSessionEmailCheckbox.isSelected()) {"},{"lineNumber":996,"author":{"gitId":"-"},"content":" click(closingSessionEmailCheckbox);"},{"lineNumber":997,"author":{"gitId":"-"},"content":" }"},{"lineNumber":998,"author":{"gitId":"-"},"content":" if (newFeedbackSessionDetails.isPublishedEmailEnabled() !\u003d publishedSessionEmailCheckbox.isSelected()) {"},{"lineNumber":999,"author":{"gitId":"-"},"content":" click(publishedSessionEmailCheckbox);"},{"lineNumber":1000,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1001,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1002,"author":{"gitId":"-"},"content":""},{"lineNumber":1003,"author":{"gitId":"-"},"content":" private void showVisibilitySettings() {"},{"lineNumber":1004,"author":{"gitId":"-"},"content":" if (isElementPresent(By.id(\"btn-change-visibility\"))) {"},{"lineNumber":1005,"author":{"gitId":"-"},"content":" click(changeVisibilityButton);"},{"lineNumber":1006,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1007,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1008,"author":{"gitId":"-"},"content":""},{"lineNumber":1009,"author":{"gitId":"-"},"content":" private void showEmailSettings() {"},{"lineNumber":1010,"author":{"gitId":"-"},"content":" if (isElementPresent(By.id(\"btn-change-email\"))) {"},{"lineNumber":1011,"author":{"gitId":"-"},"content":" click(changeEmailButton);"},{"lineNumber":1012,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1013,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1014,"author":{"gitId":"-"},"content":""},{"lineNumber":1015,"author":{"gitId":"-"},"content":" private int getNumQuestions() {"},{"lineNumber":1016,"author":{"gitId":"-"},"content":" return browser.driver.findElements(By.tagName(\"tm-question-edit-form\")).size();"},{"lineNumber":1017,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1018,"author":{"gitId":"-"},"content":""},{"lineNumber":1019,"author":{"gitId":"-"},"content":" private WebElement getQuestionForm(int questionNum) {"},{"lineNumber":1020,"author":{"gitId":"-"},"content":" return browser.driver.findElements(By.tagName(\"tm-question-edit-form\")).get(questionNum - 1);"},{"lineNumber":1021,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1022,"author":{"gitId":"-"},"content":""},{"lineNumber":1023,"author":{"gitId":"-"},"content":" private FeedbackQuestionType getQuestionType(int questionNum) {"},{"lineNumber":1024,"author":{"gitId":"-"},"content":" String questionType \u003d getQuestionForm(questionNum).findElement(By.id(\"question-type\")).getText().trim();"},{"lineNumber":1025,"author":{"gitId":"-"},"content":""},{"lineNumber":1026,"author":{"gitId":"-"},"content":" switch (questionType) {"},{"lineNumber":1027,"author":{"gitId":"-"},"content":" case \"Essay question\":"},{"lineNumber":1028,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.TEXT;"},{"lineNumber":1029,"author":{"gitId":"-"},"content":" case \"Multiple-Choice (single answer) question\":"},{"lineNumber":1030,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.MCQ;"},{"lineNumber":1031,"author":{"gitId":"-"},"content":" case \"Multiple-choice (multiple answers) question\":"},{"lineNumber":1032,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.MSQ;"},{"lineNumber":1033,"author":{"gitId":"-"},"content":" case \"Numerical Scale Question\":"},{"lineNumber":1034,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.NUMSCALE;"},{"lineNumber":1035,"author":{"gitId":"-"},"content":" case \"Distribute points (among options) question\":"},{"lineNumber":1036,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.CONSTSUM_OPTIONS;"},{"lineNumber":1037,"author":{"gitId":"-"},"content":" case \"Distribute points (among recipients) question\":"},{"lineNumber":1038,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.CONSTSUM_RECIPIENTS;"},{"lineNumber":1039,"author":{"gitId":"-"},"content":" case \"Team contribution question\":"},{"lineNumber":1040,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.CONTRIB;"},{"lineNumber":1041,"author":{"gitId":"-"},"content":" case \"Rubric question\":"},{"lineNumber":1042,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.RUBRIC;"},{"lineNumber":1043,"author":{"gitId":"-"},"content":" case \"Rank (options) question\":"},{"lineNumber":1044,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.RANK_OPTIONS;"},{"lineNumber":1045,"author":{"gitId":"-"},"content":" case \"Rank (recipients) question\":"},{"lineNumber":1046,"author":{"gitId":"-"},"content":" return FeedbackQuestionType.RANK_RECIPIENTS;"},{"lineNumber":1047,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":1048,"author":{"gitId":"-"},"content":" throw new IllegalArgumentException(\"Unknown FeedbackQuestionType\");"},{"lineNumber":1049,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1050,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1051,"author":{"gitId":"-"},"content":""},{"lineNumber":1052,"author":{"gitId":"-"},"content":" private int getQuestionNumber(int questionNum) {"},{"lineNumber":1053,"author":{"gitId":"-"},"content":" return Integer.parseInt(getQuestionForm(questionNum).findElement(By.id(\"question-number\")).getText());"},{"lineNumber":1054,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1055,"author":{"gitId":"-"},"content":""},{"lineNumber":1056,"author":{"gitId":"-"},"content":" private String getQuestionBrief(int questionNum) {"},{"lineNumber":1057,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"question-brief\")).getAttribute(\"value\");"},{"lineNumber":1058,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1059,"author":{"gitId":"-"},"content":""},{"lineNumber":1060,"author":{"gitId":"-"},"content":" private String getQuestionDescription(int questionNum) {"},{"lineNumber":1061,"author":{"gitId":"-"},"content":" WebElement editor \u003d waitForElementPresence(By.cssSelector(\"#question-form-\" + questionNum + \" editor\"));"},{"lineNumber":1062,"author":{"gitId":"-"},"content":" return getEditorRichText(editor);"},{"lineNumber":1063,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1064,"author":{"gitId":"-"},"content":""},{"lineNumber":1065,"author":{"gitId":"-"},"content":" private String getFeedbackGiver(int questionNum) {"},{"lineNumber":1066,"author":{"gitId":"-"},"content":" String feedbackPath \u003d getFeedbackPath(questionNum);"},{"lineNumber":1067,"author":{"gitId":"-"},"content":" if (CUSTOM_FEEDBACK_PATH_OPTION.equals(feedbackPath)) {"},{"lineNumber":1068,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(getQuestionForm(questionNum)"},{"lineNumber":1069,"author":{"gitId":"-"},"content":" .findElement(By.tagName(\"tm-feedback-path-panel\"))"},{"lineNumber":1070,"author":{"gitId":"-"},"content":" .findElement(By.id(\"giver-type\")));"},{"lineNumber":1071,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1072,"author":{"gitId":"-"},"content":" return feedbackPath.split(FEEDBACK_PATH_SEPARATOR)[0];"},{"lineNumber":1073,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1074,"author":{"gitId":"-"},"content":""},{"lineNumber":1075,"author":{"gitId":"-"},"content":" private String getFeedbackReceiver(int questionNum) {"},{"lineNumber":1076,"author":{"gitId":"-"},"content":" String feedbackPath \u003d getFeedbackPath(questionNum);"},{"lineNumber":1077,"author":{"gitId":"-"},"content":" if (CUSTOM_FEEDBACK_PATH_OPTION.equals(feedbackPath)) {"},{"lineNumber":1078,"author":{"gitId":"-"},"content":" return getSelectedDropdownOptionText(getQuestionForm(questionNum)"},{"lineNumber":1079,"author":{"gitId":"-"},"content":" .findElement(By.tagName(\"tm-feedback-path-panel\"))"},{"lineNumber":1080,"author":{"gitId":"-"},"content":" .findElement(By.id(\"receiver-type\")));"},{"lineNumber":1081,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1082,"author":{"gitId":"-"},"content":" return feedbackPath.split(FEEDBACK_PATH_SEPARATOR)[1];"},{"lineNumber":1083,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1084,"author":{"gitId":"-"},"content":""},{"lineNumber":1085,"author":{"gitId":"-"},"content":" private String getFeedbackPath(int questionNum) {"},{"lineNumber":1086,"author":{"gitId":"-"},"content":" WebElement feedbackPathPanel \u003d getQuestionForm(questionNum).findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":1087,"author":{"gitId":"-"},"content":" return feedbackPathPanel.findElement(By.cssSelector(\"#btn-feedback-path span\")).getText();"},{"lineNumber":1088,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1089,"author":{"gitId":"-"},"content":""},{"lineNumber":1090,"author":{"gitId":"-"},"content":" private void setQuestionBrief(int questionNum, String newBrief) {"},{"lineNumber":1091,"author":{"gitId":"-"},"content":" fillTextBox(getQuestionForm(questionNum).findElement(By.id(\"question-brief\")), newBrief);"},{"lineNumber":1092,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1093,"author":{"gitId":"-"},"content":""},{"lineNumber":1094,"author":{"gitId":"-"},"content":" private void setQuestionDescription(int questionNum, String newDescription) {"},{"lineNumber":1095,"author":{"gitId":"-"},"content":" WebElement editor \u003d waitForElementPresence(By.cssSelector(\"#question-form-\" + questionNum + \" editor\"));"},{"lineNumber":1096,"author":{"gitId":"-"},"content":" writeToRichTextEditor(editor, newDescription);"},{"lineNumber":1097,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1098,"author":{"gitId":"-"},"content":""},{"lineNumber":1099,"author":{"gitId":"-"},"content":" private void setFeedbackPath(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":1100,"author":{"gitId":"-"},"content":" FeedbackParticipantType newGiver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":1101,"author":{"gitId":"-"},"content":" FeedbackParticipantType newRecipient \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":1102,"author":{"gitId":"-"},"content":" String feedbackPath \u003d getFeedbackPath(questionNum);"},{"lineNumber":1103,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum).findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":1104,"author":{"gitId":"-"},"content":" if (!CUSTOM_FEEDBACK_PATH_OPTION.equals(feedbackPath)) {"},{"lineNumber":1105,"author":{"gitId":"-"},"content":" selectFeedbackPathDropdownOption(questionNum, CUSTOM_FEEDBACK_PATH_OPTION + \"...\");"},{"lineNumber":1106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1107,"author":{"gitId":"-"},"content":" // Set to type STUDENT first to adjust NumberOfEntitiesToGiveFeedbackTo"},{"lineNumber":1108,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"giver-type\")),"},{"lineNumber":1109,"author":{"gitId":"-"},"content":" getDisplayGiverName(FeedbackParticipantType.STUDENTS));"},{"lineNumber":1110,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"receiver-type\")),"},{"lineNumber":1111,"author":{"gitId":"-"},"content":" getDisplayRecipientName(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF));"},{"lineNumber":1112,"author":{"gitId":"-"},"content":" if (feedbackQuestion.getNumberOfEntitiesToGiveFeedbackTo() \u003d\u003d Const.MAX_POSSIBLE_RECIPIENTS) {"},{"lineNumber":1113,"author":{"gitId":"-"},"content":" click(questionForm.findElement(By.id(\"unlimited-recipients\")));"},{"lineNumber":1114,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1115,"author":{"gitId":"-"},"content":" click(questionForm.findElement(By.id(\"custom-recipients\")));"},{"lineNumber":1116,"author":{"gitId":"-"},"content":" fillTextBox(questionForm.findElement(By.id(\"custom-recipients-number\")),"},{"lineNumber":1117,"author":{"gitId":"-"},"content":" Integer.toString(feedbackQuestion.getNumberOfEntitiesToGiveFeedbackTo()));"},{"lineNumber":1118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1119,"author":{"gitId":"-"},"content":""},{"lineNumber":1120,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"giver-type\")), getDisplayGiverName(newGiver));"},{"lineNumber":1121,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"receiver-type\")),"},{"lineNumber":1122,"author":{"gitId":"-"},"content":" getDisplayRecipientName(newRecipient));"},{"lineNumber":1123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1124,"author":{"gitId":"-"},"content":""},{"lineNumber":1125,"author":{"gitId":"-"},"content":" private void setFeedbackPath(int questionNum, FeedbackQuestion feedbackQuestion) {"},{"lineNumber":1126,"author":{"gitId":"-"},"content":" FeedbackParticipantType newGiver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":1127,"author":{"gitId":"-"},"content":" FeedbackParticipantType newRecipient \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":1128,"author":{"gitId":"-"},"content":" String feedbackPath \u003d getFeedbackPath(questionNum);"},{"lineNumber":1129,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum).findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":1130,"author":{"gitId":"-"},"content":" if (!CUSTOM_FEEDBACK_PATH_OPTION.equals(feedbackPath)) {"},{"lineNumber":1131,"author":{"gitId":"-"},"content":" selectFeedbackPathDropdownOption(questionNum, CUSTOM_FEEDBACK_PATH_OPTION + \"...\");"},{"lineNumber":1132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1133,"author":{"gitId":"-"},"content":" // Set to type STUDENT first to adjust NumberOfEntitiesToGiveFeedbackTo"},{"lineNumber":1134,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"giver-type\")),"},{"lineNumber":1135,"author":{"gitId":"-"},"content":" getDisplayGiverName(FeedbackParticipantType.STUDENTS));"},{"lineNumber":1136,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"receiver-type\")),"},{"lineNumber":1137,"author":{"gitId":"-"},"content":" getDisplayRecipientName(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF));"},{"lineNumber":1138,"author":{"gitId":"-"},"content":" if (feedbackQuestion.getNumOfEntitiesToGiveFeedbackTo() \u003d\u003d Const.MAX_POSSIBLE_RECIPIENTS) {"},{"lineNumber":1139,"author":{"gitId":"-"},"content":" click(questionForm.findElement(By.id(\"unlimited-recipients\")));"},{"lineNumber":1140,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1141,"author":{"gitId":"-"},"content":" click(questionForm.findElement(By.id(\"custom-recipients\")));"},{"lineNumber":1142,"author":{"gitId":"-"},"content":" fillTextBox(questionForm.findElement(By.id(\"custom-recipients-number\")),"},{"lineNumber":1143,"author":{"gitId":"-"},"content":" Integer.toString(feedbackQuestion.getNumOfEntitiesToGiveFeedbackTo()));"},{"lineNumber":1144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1145,"author":{"gitId":"-"},"content":""},{"lineNumber":1146,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"giver-type\")), getDisplayGiverName(newGiver));"},{"lineNumber":1147,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(questionForm.findElement(By.id(\"receiver-type\")),"},{"lineNumber":1148,"author":{"gitId":"-"},"content":" getDisplayRecipientName(newRecipient));"},{"lineNumber":1149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1150,"author":{"gitId":"-"},"content":""},{"lineNumber":1151,"author":{"gitId":"-"},"content":" private void selectFeedbackPathDropdownOption(int questionNum, String text) {"},{"lineNumber":1152,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":1153,"author":{"gitId":"-"},"content":" WebElement feedbackPathPanel \u003d questionForm.findElement(By.tagName(\"tm-feedback-path-panel\"));"},{"lineNumber":1154,"author":{"gitId":"-"},"content":" click(feedbackPathPanel.findElement(By.id(\"btn-feedback-path\")));"},{"lineNumber":1155,"author":{"gitId":"-"},"content":" WebElement dropdown \u003d feedbackPathPanel.findElement(By.id(\"feedback-path-dropdown\"));"},{"lineNumber":1156,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e options \u003d dropdown.findElements(By.className(\"dropdown-button\"));"},{"lineNumber":1157,"author":{"gitId":"-"},"content":" for (WebElement option : options) {"},{"lineNumber":1158,"author":{"gitId":"-"},"content":" if (option.getText().equals(text)) {"},{"lineNumber":1159,"author":{"gitId":"-"},"content":" click(option);"},{"lineNumber":1160,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":1161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1164,"author":{"gitId":"-"},"content":""},{"lineNumber":1165,"author":{"gitId":"-"},"content":" private void clickEditQuestionButton(int questionNum) {"},{"lineNumber":1166,"author":{"gitId":"-"},"content":" click(getQuestionForm(questionNum).findElement(By.id(\"btn-edit-question\")));"},{"lineNumber":1167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1168,"author":{"gitId":"-"},"content":""},{"lineNumber":1169,"author":{"gitId":"-"},"content":" private void clickSaveQuestionButton(int questionNum) {"},{"lineNumber":1170,"author":{"gitId":"-"},"content":" WebElement saveButton \u003d getQuestionForm(questionNum).findElement(By.id(\"btn-save-question\"));"},{"lineNumber":1171,"author":{"gitId":"-"},"content":" click(saveButton);"},{"lineNumber":1172,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(1000);"},{"lineNumber":1173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1174,"author":{"gitId":"-"},"content":""},{"lineNumber":1175,"author":{"gitId":"-"},"content":" private void setQuestionVisibility(int questionNum, FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":1176,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":1177,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":1178,"author":{"gitId":"-"},"content":" String visibility \u003d visibilityPanel.findElement(By.cssSelector(\"#btn-question-visibility span\")).getText();"},{"lineNumber":1179,"author":{"gitId":"-"},"content":" if (!CUSTOM_VISIBILITY_OPTION.equals(visibility)) {"},{"lineNumber":1180,"author":{"gitId":"-"},"content":" selectVisibilityDropdownOption(questionNum, CUSTOM_VISIBILITY_OPTION + \"...\");"},{"lineNumber":1181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1182,"author":{"gitId":"-"},"content":""},{"lineNumber":1183,"author":{"gitId":"-"},"content":" FeedbackParticipantType giver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":1184,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":1185,"author":{"gitId":"-"},"content":" WebElement customVisibilityTable \u003d visibilityPanel.findElement(By.id(\"custom-visibility-table\"));"},{"lineNumber":1186,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowResponsesTo(), 1);"},{"lineNumber":1187,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowGiverNameTo(), 2);"},{"lineNumber":1188,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowRecipientNameTo(), 3);"},{"lineNumber":1189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1190,"author":{"gitId":"-"},"content":""},{"lineNumber":1191,"author":{"gitId":"-"},"content":" private void setQuestionVisibility(int questionNum, FeedbackQuestion feedbackQuestion) {"},{"lineNumber":1192,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":1193,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":1194,"author":{"gitId":"-"},"content":" String visibility \u003d visibilityPanel.findElement(By.cssSelector(\"#btn-question-visibility span\")).getText();"},{"lineNumber":1195,"author":{"gitId":"-"},"content":" if (!CUSTOM_VISIBILITY_OPTION.equals(visibility)) {"},{"lineNumber":1196,"author":{"gitId":"-"},"content":" selectVisibilityDropdownOption(questionNum, CUSTOM_VISIBILITY_OPTION + \"...\");"},{"lineNumber":1197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1198,"author":{"gitId":"-"},"content":""},{"lineNumber":1199,"author":{"gitId":"-"},"content":" FeedbackParticipantType giver \u003d feedbackQuestion.getGiverType();"},{"lineNumber":1200,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver \u003d feedbackQuestion.getRecipientType();"},{"lineNumber":1201,"author":{"gitId":"-"},"content":" WebElement customVisibilityTable \u003d visibilityPanel.findElement(By.id(\"custom-visibility-table\"));"},{"lineNumber":1202,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowResponsesTo(), 1);"},{"lineNumber":1203,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowGiverNameTo(), 2);"},{"lineNumber":1204,"author":{"gitId":"-"},"content":" selectVisibilityBoxes(customVisibilityTable, giver, receiver, feedbackQuestion.getShowRecipientNameTo(), 3);"},{"lineNumber":1205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1206,"author":{"gitId":"-"},"content":""},{"lineNumber":1207,"author":{"gitId":"-"},"content":" private void selectVisibilityBoxes(WebElement table, FeedbackParticipantType giver,"},{"lineNumber":1208,"author":{"gitId":"-"},"content":" FeedbackParticipantType receiver, List\u003cFeedbackParticipantType\u003e participants,"},{"lineNumber":1209,"author":{"gitId":"-"},"content":" int colNum) {"},{"lineNumber":1210,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e possibleTypes \u003d new ArrayList\u003c\u003e(Arrays.asList(FeedbackParticipantType.RECEIVER,"},{"lineNumber":1211,"author":{"gitId":"-"},"content":" FeedbackParticipantType.OWN_TEAM_MEMBERS, FeedbackParticipantType.RECEIVER_TEAM_MEMBERS,"},{"lineNumber":1212,"author":{"gitId":"-"},"content":" FeedbackParticipantType.STUDENTS, FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":1213,"author":{"gitId":"-"},"content":" if (!giver.equals(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":1214,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.OWN_TEAM_MEMBERS);"},{"lineNumber":1215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1216,"author":{"gitId":"-"},"content":" if (!receiver.equals(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF)) {"},{"lineNumber":1217,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":1218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1219,"author":{"gitId":"-"},"content":" if (receiver.equals(FeedbackParticipantType.NONE)"},{"lineNumber":1220,"author":{"gitId":"-"},"content":" || receiver.equals(FeedbackParticipantType.SELF)"},{"lineNumber":1221,"author":{"gitId":"-"},"content":" || receiver.equals(FeedbackParticipantType.OWN_TEAM)) {"},{"lineNumber":1222,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER);"},{"lineNumber":1223,"author":{"gitId":"-"},"content":" possibleTypes.remove(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":1224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1225,"author":{"gitId":"-"},"content":""},{"lineNumber":1226,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e rows \u003d table.findElements(By.tagName(\"tr\"));"},{"lineNumber":1227,"author":{"gitId":"-"},"content":" int index \u003d colNum - 1;"},{"lineNumber":1228,"author":{"gitId":"-"},"content":" for (FeedbackParticipantType participant : participants) {"},{"lineNumber":1229,"author":{"gitId":"-"},"content":" markOptionAsSelected(rows.get(possibleTypes.indexOf(participant)).findElements(By.tagName(\"input\")).get(index));"},{"lineNumber":1230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1232,"author":{"gitId":"-"},"content":""},{"lineNumber":1233,"author":{"gitId":"-"},"content":" private void selectVisibilityDropdownOption(int questionNum, String text) {"},{"lineNumber":1234,"author":{"gitId":"-"},"content":" WebElement questionForm \u003d getQuestionForm(questionNum);"},{"lineNumber":1235,"author":{"gitId":"-"},"content":" WebElement visibilityPanel \u003d questionForm.findElement(By.tagName(\"tm-visibility-panel\"));"},{"lineNumber":1236,"author":{"gitId":"-"},"content":" click(visibilityPanel.findElement(By.id(\"btn-question-visibility\")));"},{"lineNumber":1237,"author":{"gitId":"-"},"content":" WebElement dropdown \u003d visibilityPanel.findElement(By.id(\"question-visibility-dropdown\"));"},{"lineNumber":1238,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e options \u003d dropdown.findElements(By.className(\"dropdown-button\"));"},{"lineNumber":1239,"author":{"gitId":"-"},"content":" for (WebElement option : options) {"},{"lineNumber":1240,"author":{"gitId":"-"},"content":" if (option.getText().equals(text)) {"},{"lineNumber":1241,"author":{"gitId":"-"},"content":" click(option);"},{"lineNumber":1242,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":1243,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1246,"author":{"gitId":"-"},"content":""},{"lineNumber":1247,"author":{"gitId":"-"},"content":" private void clickAndWaitForNewQuestion(WebElement button) {"},{"lineNumber":1248,"author":{"gitId":"-"},"content":" int newQuestionNum \u003d getNumQuestions() + 1;"},{"lineNumber":1249,"author":{"gitId":"-"},"content":" click(button);"},{"lineNumber":1250,"author":{"gitId":"-"},"content":" waitForElementPresence(By.id(\"question-form-\" + newQuestionNum));"},{"lineNumber":1251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1252,"author":{"gitId":"-"},"content":""},{"lineNumber":1253,"author":{"gitId":"-"},"content":" private void addNewQuestion(int optionNumber) {"},{"lineNumber":1254,"author":{"gitId":"-"},"content":" click(addNewQuestionButton);"},{"lineNumber":1255,"author":{"gitId":"-"},"content":" WebElement newQuestionDropdown \u003d waitForElementPresence(By.id(\"new-question-dropdown\"));"},{"lineNumber":1256,"author":{"gitId":"-"},"content":" WebElement optionButton \u003d newQuestionDropdown.findElements(By.tagName(\"button\")).get(optionNumber - 1);"},{"lineNumber":1257,"author":{"gitId":"-"},"content":" if (optionNumber \u003d\u003d 1) {"},{"lineNumber":1258,"author":{"gitId":"-"},"content":" click(optionButton);"},{"lineNumber":1259,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1260,"author":{"gitId":"-"},"content":" clickAndWaitForNewQuestion(optionButton);"},{"lineNumber":1261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1262,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1263,"author":{"gitId":"-"},"content":""},{"lineNumber":1264,"author":{"gitId":"-"},"content":" private void clickSaveNewQuestionButton() {"},{"lineNumber":1265,"author":{"gitId":"-"},"content":" WebElement saveButton \u003d browser.driver.findElement(By.id(\"btn-save-new\"));"},{"lineNumber":1266,"author":{"gitId":"-"},"content":" click(saveButton);"},{"lineNumber":1267,"author":{"gitId":"-"},"content":" waitForElementStaleness(saveButton);"},{"lineNumber":1268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1269,"author":{"gitId":"-"},"content":""},{"lineNumber":1270,"author":{"gitId":"-"},"content":" private WebElement getRecommendedTextLengthField(int questionNum) {"},{"lineNumber":1271,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum)"},{"lineNumber":1272,"author":{"gitId":"-"},"content":" .findElement(By.tagName(\"tm-text-question-edit-details-form\"))"},{"lineNumber":1273,"author":{"gitId":"-"},"content":" .findElement(By.id(\"recommended-length\"));"},{"lineNumber":1274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1275,"author":{"gitId":"-"},"content":""},{"lineNumber":1276,"author":{"gitId":"-"},"content":" private WebElement getGenerateOptionsCheckbox(int questionNum) {"},{"lineNumber":1277,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"generate-checkbox\"));"},{"lineNumber":1278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1279,"author":{"gitId":"-"},"content":""},{"lineNumber":1280,"author":{"gitId":"-"},"content":" private WebElement getGenerateOptionsDropdown(int questionNum) {"},{"lineNumber":1281,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"generate-dropdown\"));"},{"lineNumber":1282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1283,"author":{"gitId":"-"},"content":""},{"lineNumber":1284,"author":{"gitId":"-"},"content":" private WebElement getWeightCheckbox(int questionNum) {"},{"lineNumber":1285,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"weights-checkbox\"));"},{"lineNumber":1286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1287,"author":{"gitId":"-"},"content":""},{"lineNumber":1288,"author":{"gitId":"-"},"content":" private WebElement getOtherOptionCheckbox(int questionNum) {"},{"lineNumber":1289,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"other-checkbox\"));"},{"lineNumber":1290,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1291,"author":{"gitId":"-"},"content":""},{"lineNumber":1292,"author":{"gitId":"-"},"content":" private WebElement getQuestionDropdownCheckbox(int questionNum) {"},{"lineNumber":1293,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"make-question-dropdown\"));"},{"lineNumber":1294,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1295,"author":{"gitId":"-"},"content":""},{"lineNumber":1296,"author":{"gitId":"-"},"content":" private String getGeneratedOptionString(FeedbackParticipantType type) {"},{"lineNumber":1297,"author":{"gitId":"-"},"content":" switch (type) {"},{"lineNumber":1298,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":1299,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":1300,"author":{"gitId":"-"},"content":" return \"students\";"},{"lineNumber":1301,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":1302,"author":{"gitId":"-"},"content":" return \"students (excluding self)\";"},{"lineNumber":1303,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":1304,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":1305,"author":{"gitId":"-"},"content":" return \"teams\";"},{"lineNumber":1306,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":1307,"author":{"gitId":"-"},"content":" return \"teams (excluding own team)\";"},{"lineNumber":1308,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":1309,"author":{"gitId":"-"},"content":" return \"instructors\";"},{"lineNumber":1310,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":1311,"author":{"gitId":"-"},"content":" return \"unknown\";"},{"lineNumber":1312,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1313,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1314,"author":{"gitId":"-"},"content":""},{"lineNumber":1315,"author":{"gitId":"-"},"content":" private String getDoubleString(Double value) {"},{"lineNumber":1316,"author":{"gitId":"-"},"content":" return value % 1 \u003d\u003d 0 ? Integer.toString(value.intValue()) : Double.toString(value);"},{"lineNumber":1317,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1318,"author":{"gitId":"-"},"content":""},{"lineNumber":1319,"author":{"gitId":"-"},"content":" private WebElement getOptionsSection(int questionNum) {"},{"lineNumber":1320,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"options-section\"));"},{"lineNumber":1321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1322,"author":{"gitId":"-"},"content":""},{"lineNumber":1323,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getOptionInputs(int questionNum) {"},{"lineNumber":1324,"author":{"gitId":"-"},"content":" WebElement optionsSection \u003d getOptionsSection(questionNum);"},{"lineNumber":1325,"author":{"gitId":"-"},"content":" return optionsSection.findElements(By.cssSelector(\"input[type\u003d\u0027text\u0027]\"));"},{"lineNumber":1326,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1327,"author":{"gitId":"-"},"content":""},{"lineNumber":1328,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getOptionWeightInputs(int questionNum) {"},{"lineNumber":1329,"author":{"gitId":"-"},"content":" WebElement optionsSection \u003d getOptionsSection(questionNum);"},{"lineNumber":1330,"author":{"gitId":"-"},"content":" return optionsSection.findElements(By.cssSelector(\"tm-weight-field input\"));"},{"lineNumber":1331,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1332,"author":{"gitId":"-"},"content":""},{"lineNumber":1333,"author":{"gitId":"-"},"content":" private WebElement getOtherWeightInput(int questionNum) {"},{"lineNumber":1334,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"other-weight\"));"},{"lineNumber":1335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1336,"author":{"gitId":"-"},"content":""},{"lineNumber":1337,"author":{"gitId":"-"},"content":" private boolean verifyGeneratedOptions(int questionNum, FeedbackParticipantType participantType) {"},{"lineNumber":1338,"author":{"gitId":"-"},"content":" if (!participantType.equals(FeedbackParticipantType.NONE)) {"},{"lineNumber":1339,"author":{"gitId":"-"},"content":" assertTrue(getGenerateOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1340,"author":{"gitId":"-"},"content":" assertEquals(getSelectedDropdownOptionText(getGenerateOptionsDropdown(questionNum)),"},{"lineNumber":1341,"author":{"gitId":"-"},"content":" getGeneratedOptionString(participantType));"},{"lineNumber":1342,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":1343,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1344,"author":{"gitId":"-"},"content":" assertFalse(getGenerateOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1345,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":1346,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1347,"author":{"gitId":"-"},"content":""},{"lineNumber":1348,"author":{"gitId":"-"},"content":" private void verifyOptions(int questionNum, List\u003cString\u003e options) {"},{"lineNumber":1349,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e inputs \u003d getOptionInputs(questionNum);"},{"lineNumber":1350,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":1351,"author":{"gitId":"-"},"content":" assertEquals(options.get(i), inputs.get(i).getAttribute(\"value\"));"},{"lineNumber":1352,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1353,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1354,"author":{"gitId":"-"},"content":""},{"lineNumber":1355,"author":{"gitId":"-"},"content":" private void verifyOptionWeights(int questionNum, boolean hasWeights, List\u003cDouble\u003e weights) {"},{"lineNumber":1356,"author":{"gitId":"-"},"content":" if (hasWeights) {"},{"lineNumber":1357,"author":{"gitId":"-"},"content":" assertTrue(getWeightCheckbox(questionNum).isSelected());"},{"lineNumber":1358,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e weightInputs \u003d getOptionWeightInputs(questionNum);"},{"lineNumber":1359,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c weights.size(); i++) {"},{"lineNumber":1360,"author":{"gitId":"-"},"content":" assertEquals(getDoubleString(weights.get(i)), weightInputs.get(i).getAttribute(\"value\"));"},{"lineNumber":1361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1362,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1363,"author":{"gitId":"-"},"content":" assertFalse(getWeightCheckbox(questionNum).isSelected());"},{"lineNumber":1364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1366,"author":{"gitId":"-"},"content":""},{"lineNumber":1367,"author":{"gitId":"-"},"content":" private void verifyOtherOption(int questionNum, boolean hasOther, Double weight) {"},{"lineNumber":1368,"author":{"gitId":"-"},"content":" if (hasOther) {"},{"lineNumber":1369,"author":{"gitId":"-"},"content":" assertTrue(getOtherOptionCheckbox(questionNum).isSelected());"},{"lineNumber":1370,"author":{"gitId":"-"},"content":" if (weight \u003e 0) {"},{"lineNumber":1371,"author":{"gitId":"-"},"content":" String otherWeight \u003d getOtherWeightInput(questionNum).getAttribute(\"value\");"},{"lineNumber":1372,"author":{"gitId":"-"},"content":" assertEquals(getDoubleString(weight), otherWeight);"},{"lineNumber":1373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1374,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1375,"author":{"gitId":"-"},"content":" assertFalse(getOtherOptionCheckbox(questionNum).isSelected());"},{"lineNumber":1376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1377,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1378,"author":{"gitId":"-"},"content":""},{"lineNumber":1379,"author":{"gitId":"-"},"content":" private void inputMcqDetails(int questionNum, FeedbackMcqQuestionDetails questionDetails) {"},{"lineNumber":1380,"author":{"gitId":"-"},"content":" if (inputGenerateOptions(questionNum, questionDetails.getGenerateOptionsFor())) {"},{"lineNumber":1381,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":1382,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1383,"author":{"gitId":"-"},"content":""},{"lineNumber":1384,"author":{"gitId":"-"},"content":" inputOptions(questionNum, questionDetails.getMcqChoices());"},{"lineNumber":1385,"author":{"gitId":"-"},"content":" inputOptionWeights(questionNum, questionDetails.isHasAssignedWeights(), questionDetails.getMcqWeights());"},{"lineNumber":1386,"author":{"gitId":"-"},"content":" inputOtherChoice(questionNum, questionDetails.isOtherEnabled(), questionDetails.getMcqOtherWeight());"},{"lineNumber":1387,"author":{"gitId":"-"},"content":" inputDropdownEnabledChoice(questionNum, questionDetails.isQuestionDropdownEnabled());"},{"lineNumber":1388,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1389,"author":{"gitId":"-"},"content":""},{"lineNumber":1390,"author":{"gitId":"-"},"content":" private boolean inputGenerateOptions(int questionNum, FeedbackParticipantType participantType) {"},{"lineNumber":1391,"author":{"gitId":"-"},"content":" if (!participantType.equals(FeedbackParticipantType.NONE)) {"},{"lineNumber":1392,"author":{"gitId":"-"},"content":" markOptionAsSelected(getGenerateOptionsCheckbox(questionNum));"},{"lineNumber":1393,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getGenerateOptionsDropdown(questionNum),"},{"lineNumber":1394,"author":{"gitId":"-"},"content":" getGeneratedOptionString(participantType));"},{"lineNumber":1395,"author":{"gitId":"-"},"content":" clickSaveQuestionButton(questionNum);"},{"lineNumber":1396,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":1397,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1398,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getGenerateOptionsCheckbox(questionNum));"},{"lineNumber":1399,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":1400,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1401,"author":{"gitId":"-"},"content":""},{"lineNumber":1402,"author":{"gitId":"-"},"content":" private void inputOptions(int questionNum, List\u003cString\u003e options) {"},{"lineNumber":1403,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e inputs \u003d getOptionInputs(questionNum);"},{"lineNumber":1404,"author":{"gitId":"-"},"content":" int numInputsNeeded \u003d options.size() - inputs.size();"},{"lineNumber":1405,"author":{"gitId":"-"},"content":" if (numInputsNeeded \u003e 0) {"},{"lineNumber":1406,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numInputsNeeded; i++) {"},{"lineNumber":1407,"author":{"gitId":"-"},"content":" click(getQuestionForm(questionNum).findElement(By.id(\"btn-add-option\")));"},{"lineNumber":1408,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1409,"author":{"gitId":"-"},"content":" inputs \u003d getOptionInputs(questionNum);"},{"lineNumber":1410,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1411,"author":{"gitId":"-"},"content":" if (numInputsNeeded \u003c 0) {"},{"lineNumber":1412,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c -numInputsNeeded; i++) {"},{"lineNumber":1413,"author":{"gitId":"-"},"content":" click(getOptionsSection(questionNum).findElement(By.tagName(\"button\")));"},{"lineNumber":1414,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1415,"author":{"gitId":"-"},"content":" inputs \u003d getOptionInputs(questionNum);"},{"lineNumber":1416,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1417,"author":{"gitId":"-"},"content":""},{"lineNumber":1418,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c options.size(); i++) {"},{"lineNumber":1419,"author":{"gitId":"-"},"content":" fillTextBox(inputs.get(i), options.get(i));"},{"lineNumber":1420,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1421,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1422,"author":{"gitId":"-"},"content":""},{"lineNumber":1423,"author":{"gitId":"-"},"content":" private void inputOptionWeights(int questionNum, boolean hasWeights, List\u003cDouble\u003e weights) {"},{"lineNumber":1424,"author":{"gitId":"-"},"content":" if (hasWeights) {"},{"lineNumber":1425,"author":{"gitId":"-"},"content":" markOptionAsSelected(getWeightCheckbox(questionNum));"},{"lineNumber":1426,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e weightInputs \u003d getOptionWeightInputs(questionNum);"},{"lineNumber":1427,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c weights.size(); i++) {"},{"lineNumber":1428,"author":{"gitId":"-"},"content":" fillTextBox(weightInputs.get(i), getDoubleString(weights.get(i)));"},{"lineNumber":1429,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1430,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1431,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getWeightCheckbox(questionNum));"},{"lineNumber":1432,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1433,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1434,"author":{"gitId":"-"},"content":""},{"lineNumber":1435,"author":{"gitId":"-"},"content":" private void inputOtherChoice(int questionNum, boolean hasOther, Double otherWeight) {"},{"lineNumber":1436,"author":{"gitId":"-"},"content":" if (hasOther) {"},{"lineNumber":1437,"author":{"gitId":"-"},"content":" markOptionAsSelected(getOtherOptionCheckbox(questionNum));"},{"lineNumber":1438,"author":{"gitId":"-"},"content":" if (otherWeight \u003e 0) {"},{"lineNumber":1439,"author":{"gitId":"-"},"content":" fillTextBox(getOtherWeightInput(questionNum), getDoubleString(otherWeight));"},{"lineNumber":1440,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1441,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1442,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getOtherOptionCheckbox(questionNum));"},{"lineNumber":1443,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1444,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1445,"author":{"gitId":"-"},"content":""},{"lineNumber":1446,"author":{"gitId":"-"},"content":" private void inputDropdownEnabledChoice(int questionNum, boolean hasOther) {"},{"lineNumber":1447,"author":{"gitId":"-"},"content":" if (hasOther) {"},{"lineNumber":1448,"author":{"gitId":"-"},"content":" markOptionAsSelected(getQuestionDropdownCheckbox(questionNum));"},{"lineNumber":1449,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1450,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getQuestionDropdownCheckbox(questionNum));"},{"lineNumber":1451,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1452,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1453,"author":{"gitId":"-"},"content":""},{"lineNumber":1454,"author":{"gitId":"-"},"content":" private WebElement getMaxOptionsCheckbox(int questionNum) {"},{"lineNumber":1455,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"max-options-checkbox\"));"},{"lineNumber":1456,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1457,"author":{"gitId":"-"},"content":""},{"lineNumber":1458,"author":{"gitId":"-"},"content":" private WebElement getMaxOptionsInput(int questionNum) {"},{"lineNumber":1459,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"max-options\"));"},{"lineNumber":1460,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1461,"author":{"gitId":"-"},"content":""},{"lineNumber":1462,"author":{"gitId":"-"},"content":" private WebElement getMinOptionsCheckbox(int questionNum) {"},{"lineNumber":1463,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"min-options-checkbox\"));"},{"lineNumber":1464,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1465,"author":{"gitId":"-"},"content":""},{"lineNumber":1466,"author":{"gitId":"-"},"content":" private WebElement getMinOptionsInput(int questionNum) {"},{"lineNumber":1467,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"min-options\"));"},{"lineNumber":1468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1469,"author":{"gitId":"-"},"content":""},{"lineNumber":1470,"author":{"gitId":"-"},"content":" private void verifyMaxOptions(int questionNum, int maxOptions) {"},{"lineNumber":1471,"author":{"gitId":"-"},"content":" if (maxOptions \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":1472,"author":{"gitId":"-"},"content":" assertFalse(getMaxOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1473,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1474,"author":{"gitId":"-"},"content":" assertTrue(getMaxOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1475,"author":{"gitId":"-"},"content":" assertEquals(getMaxOptionsInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":1476,"author":{"gitId":"-"},"content":" Integer.toString(maxOptions));"},{"lineNumber":1477,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1478,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1479,"author":{"gitId":"-"},"content":""},{"lineNumber":1480,"author":{"gitId":"-"},"content":" private void verifyMinOptions(int questionNum, int minOptions) {"},{"lineNumber":1481,"author":{"gitId":"-"},"content":" if (minOptions \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":1482,"author":{"gitId":"-"},"content":" assertFalse(getMinOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1483,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1484,"author":{"gitId":"-"},"content":" assertTrue(getMinOptionsCheckbox(questionNum).isSelected());"},{"lineNumber":1485,"author":{"gitId":"-"},"content":" assertEquals(getMinOptionsInput(questionNum).getAttribute(\"value\"),"},{"lineNumber":1486,"author":{"gitId":"-"},"content":" Integer.toString(minOptions));"},{"lineNumber":1487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1488,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1489,"author":{"gitId":"-"},"content":""},{"lineNumber":1490,"author":{"gitId":"-"},"content":" private void inputMsqDetails(int questionNum, FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":1491,"author":{"gitId":"-"},"content":" if (inputGenerateOptions(questionNum, questionDetails.getGenerateOptionsFor())) {"},{"lineNumber":1492,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":1493,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1494,"author":{"gitId":"-"},"content":""},{"lineNumber":1495,"author":{"gitId":"-"},"content":" inputOptions(questionNum, questionDetails.getMsqChoices());"},{"lineNumber":1496,"author":{"gitId":"-"},"content":" inputOptionWeights(questionNum, questionDetails.isHasAssignedWeights(), questionDetails.getMsqWeights());"},{"lineNumber":1497,"author":{"gitId":"-"},"content":" inputOtherChoice(questionNum, questionDetails.isOtherEnabled(), questionDetails.getMsqOtherWeight());"},{"lineNumber":1498,"author":{"gitId":"-"},"content":" inputMaxOptions(questionNum, questionDetails.getMaxSelectableChoices());"},{"lineNumber":1499,"author":{"gitId":"-"},"content":" inputMinOptions(questionNum, questionDetails.getMinSelectableChoices());"},{"lineNumber":1500,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1501,"author":{"gitId":"-"},"content":""},{"lineNumber":1502,"author":{"gitId":"-"},"content":" private void inputMaxOptions(int questionNum, int maxOptions) {"},{"lineNumber":1503,"author":{"gitId":"-"},"content":" if (maxOptions \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":1504,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getMaxOptionsCheckbox(questionNum));"},{"lineNumber":1505,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1506,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMaxOptionsCheckbox(questionNum));"},{"lineNumber":1507,"author":{"gitId":"-"},"content":" fillTextBox(getMaxOptionsInput(questionNum), Integer.toString(maxOptions));"},{"lineNumber":1508,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1510,"author":{"gitId":"-"},"content":""},{"lineNumber":1511,"author":{"gitId":"-"},"content":" private void inputMinOptions(int questionNum, int minOptions) {"},{"lineNumber":1512,"author":{"gitId":"-"},"content":" if (minOptions \u003d\u003d Const.POINTS_NO_VALUE) {"},{"lineNumber":1513,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getMinOptionsCheckbox(questionNum));"},{"lineNumber":1514,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1515,"author":{"gitId":"-"},"content":" markOptionAsSelected(getMinOptionsCheckbox(questionNum));"},{"lineNumber":1516,"author":{"gitId":"-"},"content":" fillTextBox(getMinOptionsInput(questionNum), Integer.toString(minOptions));"},{"lineNumber":1517,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1518,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1519,"author":{"gitId":"-"},"content":""},{"lineNumber":1520,"author":{"gitId":"-"},"content":" private WebElement getMinNumscaleInput(int questionNum) {"},{"lineNumber":1521,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"min-value\"));"},{"lineNumber":1522,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1523,"author":{"gitId":"-"},"content":""},{"lineNumber":1524,"author":{"gitId":"-"},"content":" private WebElement getMaxNumscaleInput(int questionNum) {"},{"lineNumber":1525,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"max-value\"));"},{"lineNumber":1526,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1527,"author":{"gitId":"-"},"content":""},{"lineNumber":1528,"author":{"gitId":"-"},"content":" private WebElement getNumScaleIncrementInput(int questionNum) {"},{"lineNumber":1529,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"increment-value\"));"},{"lineNumber":1530,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1531,"author":{"gitId":"-"},"content":""},{"lineNumber":1532,"author":{"gitId":"-"},"content":" private void inputNumScaleDetails(int questionNum, FeedbackNumericalScaleQuestionDetails questionDetails) {"},{"lineNumber":1533,"author":{"gitId":"-"},"content":" inputNumScaleValue(getMinNumscaleInput(questionNum), Integer.toString(questionDetails.getMinScale()));"},{"lineNumber":1534,"author":{"gitId":"-"},"content":" inputNumScaleValue(getNumScaleIncrementInput(questionNum), getDoubleString(questionDetails.getStep()));"},{"lineNumber":1535,"author":{"gitId":"-"},"content":" inputNumScaleValue(getMaxNumscaleInput(questionNum), Integer.toString(questionDetails.getMaxScale()));"},{"lineNumber":1536,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1537,"author":{"gitId":"-"},"content":""},{"lineNumber":1538,"author":{"gitId":"-"},"content":" private void inputNumScaleValue(WebElement input, String value) {"},{"lineNumber":1539,"author":{"gitId":"-"},"content":" input.clear();"},{"lineNumber":1540,"author":{"gitId":"-"},"content":" input.sendKeys(value);"},{"lineNumber":1541,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1542,"author":{"gitId":"-"},"content":""},{"lineNumber":1543,"author":{"gitId":"-"},"content":" private WebElement getConstSumTotalPointsRadioBtn(int questionNum) {"},{"lineNumber":1544,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"total-points-radio\"));"},{"lineNumber":1545,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1546,"author":{"gitId":"-"},"content":""},{"lineNumber":1547,"author":{"gitId":"-"},"content":" private WebElement getConstSumTotalPointsInput(int questionNum) {"},{"lineNumber":1548,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"total-points\"));"},{"lineNumber":1549,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1550,"author":{"gitId":"-"},"content":""},{"lineNumber":1551,"author":{"gitId":"-"},"content":" private WebElement getConstSumPerOptionPointsRadioBtn(int questionNum) {"},{"lineNumber":1552,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"per-option-points-radio\"));"},{"lineNumber":1553,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1554,"author":{"gitId":"-"},"content":""},{"lineNumber":1555,"author":{"gitId":"-"},"content":" private WebElement getConstSumPerOptionPointsInput(int questionNum) {"},{"lineNumber":1556,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"per-option-points\"));"},{"lineNumber":1557,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1558,"author":{"gitId":"-"},"content":""},{"lineNumber":1559,"author":{"gitId":"-"},"content":" private WebElement getConstSumUnevenDistributionCheckbox(int questionNum) {"},{"lineNumber":1560,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"uneven-distribution-checkbox\"));"},{"lineNumber":1561,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1562,"author":{"gitId":"-"},"content":""},{"lineNumber":1563,"author":{"gitId":"-"},"content":" private WebElement getConstSumUnevenDistributionDropdown(int questionNum) {"},{"lineNumber":1564,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"uneven-distribution-dropdown\"));"},{"lineNumber":1565,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1566,"author":{"gitId":"-"},"content":""},{"lineNumber":1567,"author":{"gitId":"-"},"content":" private void inputConstSumDetails(int questionNum, FeedbackConstantSumQuestionDetails questionDetails) {"},{"lineNumber":1568,"author":{"gitId":"-"},"content":" if (!questionDetails.isDistributeToRecipients()) {"},{"lineNumber":1569,"author":{"gitId":"-"},"content":" inputOptions(questionNum, questionDetails.getConstSumOptions());"},{"lineNumber":1570,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1571,"author":{"gitId":"-"},"content":" if (questionDetails.isPointsPerOption()) {"},{"lineNumber":1572,"author":{"gitId":"-"},"content":" click(getConstSumPerOptionPointsRadioBtn(questionNum));"},{"lineNumber":1573,"author":{"gitId":"-"},"content":" fillTextBox(getConstSumPerOptionPointsInput(questionNum), Integer.toString(questionDetails.getPoints()));"},{"lineNumber":1574,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1575,"author":{"gitId":"-"},"content":" click(getConstSumTotalPointsRadioBtn(questionNum));"},{"lineNumber":1576,"author":{"gitId":"-"},"content":" fillTextBox(getConstSumTotalPointsInput(questionNum), Integer.toString(questionDetails.getPoints()));"},{"lineNumber":1577,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1578,"author":{"gitId":"-"},"content":" String distributeFor \u003d questionDetails.getDistributePointsFor();"},{"lineNumber":1579,"author":{"gitId":"-"},"content":" if (questionDetails.isForceUnevenDistribution()) {"},{"lineNumber":1580,"author":{"gitId":"-"},"content":" markOptionAsSelected(getConstSumUnevenDistributionCheckbox(questionNum));"},{"lineNumber":1581,"author":{"gitId":"-"},"content":" selectDropdownOptionByText(getConstSumUnevenDistributionDropdown(questionNum),"},{"lineNumber":1582,"author":{"gitId":"-"},"content":" \"All options\".equals(distributeFor) ? \"Every option\" : distributeFor);"},{"lineNumber":1583,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1584,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getConstSumUnevenDistributionCheckbox(questionNum));"},{"lineNumber":1585,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1586,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1587,"author":{"gitId":"-"},"content":""},{"lineNumber":1588,"author":{"gitId":"-"},"content":" private WebElement getZeroSumCheckbox(int questionNum) {"},{"lineNumber":1589,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"zero-sum-checkbox\"));"},{"lineNumber":1590,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1591,"author":{"gitId":"-"},"content":""},{"lineNumber":1592,"author":{"gitId":"-"},"content":" private WebElement getAllowNotSureContributionCheckbox(int questionNum) {"},{"lineNumber":1593,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"not-sure-checkbox\"));"},{"lineNumber":1594,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1595,"author":{"gitId":"-"},"content":""},{"lineNumber":1596,"author":{"gitId":"-"},"content":" private void inputContributionDetails(int questionNum, FeedbackContributionQuestionDetails questionDetails) {"},{"lineNumber":1597,"author":{"gitId":"-"},"content":" if (questionDetails.isZeroSum()) {"},{"lineNumber":1598,"author":{"gitId":"-"},"content":" markOptionAsSelected(getZeroSumCheckbox(questionNum));"},{"lineNumber":1599,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1600,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getZeroSumCheckbox(questionNum));"},{"lineNumber":1601,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1602,"author":{"gitId":"-"},"content":" if (questionDetails.isNotSureAllowed()) {"},{"lineNumber":1603,"author":{"gitId":"-"},"content":" markOptionAsSelected(getAllowNotSureContributionCheckbox(questionNum));"},{"lineNumber":1604,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1605,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getAllowNotSureContributionCheckbox(questionNum));"},{"lineNumber":1606,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1607,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1608,"author":{"gitId":"-"},"content":""},{"lineNumber":1609,"author":{"gitId":"-"},"content":" private WebElement getRubricRow(int questionNum, int rowNumber) {"},{"lineNumber":1610,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElements(By.cssSelector(\"tm-rubric-question-edit-details-form tr\"))"},{"lineNumber":1611,"author":{"gitId":"-"},"content":" .get(rowNumber - 1);"},{"lineNumber":1612,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1613,"author":{"gitId":"-"},"content":""},{"lineNumber":1614,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRubricChoiceInputs(int questionNum) {"},{"lineNumber":1615,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, 1).findElements(By.tagName(\"input\"));"},{"lineNumber":1616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1617,"author":{"gitId":"-"},"content":""},{"lineNumber":1618,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRubricTextareas(int questionNum, int rowNum) {"},{"lineNumber":1619,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, rowNum).findElements(By.tagName(\"textarea\"));"},{"lineNumber":1620,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1621,"author":{"gitId":"-"},"content":""},{"lineNumber":1622,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getRubricWeights(int questionNum, int rowNum) {"},{"lineNumber":1623,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, rowNum).findElements(By.tagName(\"input\"));"},{"lineNumber":1624,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1625,"author":{"gitId":"-"},"content":""},{"lineNumber":1626,"author":{"gitId":"-"},"content":" private WebElement getRubricDeleteSubQnBtn(int questionNum, int rowNum) {"},{"lineNumber":1627,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, rowNum).findElement(By.id(\"btn-delete-subquestion\"));"},{"lineNumber":1628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1629,"author":{"gitId":"-"},"content":""},{"lineNumber":1630,"author":{"gitId":"-"},"content":" private WebElement getRubricDeleteChoiceBtn(int questionNum, int colNum) {"},{"lineNumber":1631,"author":{"gitId":"-"},"content":" return getRubricRow(questionNum, getNumRubricRows(questionNum)).findElements(By.id(\"btn-delete-choice\")).get(colNum);"},{"lineNumber":1632,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1633,"author":{"gitId":"-"},"content":""},{"lineNumber":1634,"author":{"gitId":"-"},"content":" private int getNumRubricRows(int questionNum) {"},{"lineNumber":1635,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElements(By.cssSelector(\"#rubric-table tr\")).size();"},{"lineNumber":1636,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1637,"author":{"gitId":"-"},"content":""},{"lineNumber":1638,"author":{"gitId":"-"},"content":" private int getNumRubricCols(int questionNum) {"},{"lineNumber":1639,"author":{"gitId":"-"},"content":" WebElement row \u003d getRubricRow(questionNum, 1);"},{"lineNumber":1640,"author":{"gitId":"-"},"content":" return row.findElements(By.tagName(\"td\")).size() + row.findElements(By.tagName(\"th\")).size();"},{"lineNumber":1641,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1642,"author":{"gitId":"-"},"content":""},{"lineNumber":1643,"author":{"gitId":"-"},"content":" private void inputRubricDetails(int questionNum, FeedbackRubricQuestionDetails questionDetails) {"},{"lineNumber":1644,"author":{"gitId":"-"},"content":" int numSubQn \u003d questionDetails.getNumOfRubricSubQuestions();"},{"lineNumber":1645,"author":{"gitId":"-"},"content":" int numChoices \u003d questionDetails.getNumOfRubricChoices();"},{"lineNumber":1646,"author":{"gitId":"-"},"content":" adjustNumRubricFields(questionNum, numSubQn, numChoices);"},{"lineNumber":1647,"author":{"gitId":"-"},"content":""},{"lineNumber":1648,"author":{"gitId":"-"},"content":" List\u003cString\u003e choices \u003d questionDetails.getRubricChoices();"},{"lineNumber":1649,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numChoices; i++) {"},{"lineNumber":1650,"author":{"gitId":"-"},"content":" fillTextBox(getRubricChoiceInputs(questionNum).get(i), choices.get(i));"},{"lineNumber":1651,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1652,"author":{"gitId":"-"},"content":""},{"lineNumber":1653,"author":{"gitId":"-"},"content":" List\u003cString\u003e subQuestions \u003d questionDetails.getRubricSubQuestions();"},{"lineNumber":1654,"author":{"gitId":"-"},"content":" List\u003cList\u003cString\u003e\u003e descriptions \u003d questionDetails.getRubricDescriptions();"},{"lineNumber":1655,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQn; i++) {"},{"lineNumber":1656,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e textAreas \u003d getRubricTextareas(questionNum, i + 2);"},{"lineNumber":1657,"author":{"gitId":"-"},"content":" fillTextBox(textAreas.get(0), subQuestions.get(i));"},{"lineNumber":1658,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c numChoices; j++) {"},{"lineNumber":1659,"author":{"gitId":"-"},"content":" fillTextBox(textAreas.get(j + 1), descriptions.get(i).get(j));"},{"lineNumber":1660,"author":{"gitId":"-"},"content":" if (descriptions.get(i).get(j).isEmpty()) {"},{"lineNumber":1661,"author":{"gitId":"-"},"content":" // using clear does not send the required event"},{"lineNumber":1662,"author":{"gitId":"-"},"content":" // as a workaround, after clearing without event, enter a random character and delete it"},{"lineNumber":1663,"author":{"gitId":"-"},"content":" textAreas.get(j + 1).sendKeys(\"a\");"},{"lineNumber":1664,"author":{"gitId":"-"},"content":" textAreas.get(j + 1).sendKeys(Keys.BACK_SPACE);"},{"lineNumber":1665,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1666,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1667,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1668,"author":{"gitId":"-"},"content":""},{"lineNumber":1669,"author":{"gitId":"-"},"content":" if (questionDetails.isHasAssignedWeights()) {"},{"lineNumber":1670,"author":{"gitId":"-"},"content":" markOptionAsSelected(getWeightCheckbox(questionNum));"},{"lineNumber":1671,"author":{"gitId":"-"},"content":" List\u003cList\u003cDouble\u003e\u003e weights \u003d questionDetails.getRubricWeights();"},{"lineNumber":1672,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQn; i++) {"},{"lineNumber":1673,"author":{"gitId":"-"},"content":" for (int j \u003d 0; j \u003c numChoices; j++) {"},{"lineNumber":1674,"author":{"gitId":"-"},"content":" fillTextBox(getRubricWeights(questionNum, i + 2).get(j), getDoubleString(weights.get(i).get(j)));"},{"lineNumber":1675,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1676,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1677,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1678,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getWeightCheckbox(questionNum));"},{"lineNumber":1679,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1680,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1681,"author":{"gitId":"-"},"content":""},{"lineNumber":1682,"author":{"gitId":"-"},"content":" private void adjustNumRubricFields(int questionNum, int numSubQn, int numChoices) {"},{"lineNumber":1683,"author":{"gitId":"-"},"content":" int numSubQnsNeeded \u003d numSubQn - (getNumRubricRows(questionNum) - 2);"},{"lineNumber":1684,"author":{"gitId":"-"},"content":" int numChoicesNeeded \u003d numChoices - (getNumRubricCols(questionNum) - 1);"},{"lineNumber":1685,"author":{"gitId":"-"},"content":" if (numSubQnsNeeded \u003e 0) {"},{"lineNumber":1686,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numSubQnsNeeded; i++) {"},{"lineNumber":1687,"author":{"gitId":"-"},"content":" click(getQuestionForm(questionNum).findElement(By.id(\"btn-add-row\")));"},{"lineNumber":1688,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1689,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1690,"author":{"gitId":"-"},"content":" if (numChoicesNeeded \u003e 0) {"},{"lineNumber":1691,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c numChoicesNeeded; i++) {"},{"lineNumber":1692,"author":{"gitId":"-"},"content":" click(getQuestionForm(questionNum).findElement(By.id(\"btn-add-col\")));"},{"lineNumber":1693,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1694,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1695,"author":{"gitId":"-"},"content":" if (numSubQnsNeeded \u003c 0) {"},{"lineNumber":1696,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c -numSubQnsNeeded; i++) {"},{"lineNumber":1697,"author":{"gitId":"-"},"content":" click(getRubricDeleteSubQnBtn(questionNum, 2));"},{"lineNumber":1698,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1699,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1700,"author":{"gitId":"-"},"content":" if (numChoicesNeeded \u003c 0) {"},{"lineNumber":1701,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c -numChoicesNeeded; i++) {"},{"lineNumber":1702,"author":{"gitId":"-"},"content":" clickAndConfirm(getRubricDeleteChoiceBtn(questionNum, 2));"},{"lineNumber":1703,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1704,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1705,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1706,"author":{"gitId":"-"},"content":""},{"lineNumber":1707,"author":{"gitId":"-"},"content":" private WebElement getAllowDuplicateRankCheckbox(int questionNum) {"},{"lineNumber":1708,"author":{"gitId":"-"},"content":" return getQuestionForm(questionNum).findElement(By.id(\"duplicate-rank-checkbox\"));"},{"lineNumber":1709,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1710,"author":{"gitId":"-"},"content":""},{"lineNumber":1711,"author":{"gitId":"-"},"content":" private void inputRankDetails(int questionNum, FeedbackRankQuestionDetails questionDetails) {"},{"lineNumber":1712,"author":{"gitId":"-"},"content":" if (questionDetails instanceof FeedbackRankOptionsQuestionDetails) {"},{"lineNumber":1713,"author":{"gitId":"-"},"content":" FeedbackRankOptionsQuestionDetails optionDetails \u003d (FeedbackRankOptionsQuestionDetails) questionDetails;"},{"lineNumber":1714,"author":{"gitId":"-"},"content":" inputOptions(questionNum, optionDetails.getOptions());"},{"lineNumber":1715,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1716,"author":{"gitId":"-"},"content":" if (questionDetails.isAreDuplicatesAllowed()) {"},{"lineNumber":1717,"author":{"gitId":"-"},"content":" markOptionAsSelected(getAllowDuplicateRankCheckbox(questionNum));"},{"lineNumber":1718,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":1719,"author":{"gitId":"-"},"content":" markOptionAsUnselected(getAllowDuplicateRankCheckbox(questionNum));"},{"lineNumber":1720,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1721,"author":{"gitId":"-"},"content":" inputMaxOptions(questionNum, questionDetails.getMaxOptionsToBeRanked());"},{"lineNumber":1722,"author":{"gitId":"-"},"content":" inputMinOptions(questionNum, questionDetails.getMinOptionsToBeRanked());"},{"lineNumber":1723,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1724,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":13,"mingyuanc":5,"-":1706}},{"path":"src/e2e/java/teammates/e2e/pageobjects/StudentHomePage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.e2e.pageobjects;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.Assert.assertTrue;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.openqa.selenium.By;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.openqa.selenium.WebElement;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Page Object Model for student home page."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class StudentHomePage extends AppPage {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" public StudentHomePage(Browser browser) {"},{"lineNumber":16,"author":{"gitId":"-"},"content":" super(browser);"},{"lineNumber":17,"author":{"gitId":"-"},"content":" }"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":20,"author":{"gitId":"-"},"content":" protected boolean containsExpectedPageContents() {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" return \"Student Home\".equals(getPageTitle());"},{"lineNumber":22,"author":{"gitId":"-"},"content":" }"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private List\u003cWebElement\u003e getStudentHomeCoursePanels() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return browser.driver.findElements(By.cssSelector(\"div.card.bg-light\"));"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" public int getStudentHomeCoursePanelIndex(String courseName) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" List\u003cWebElement\u003e coursePanels \u003d getStudentHomeCoursePanels();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" int coursePanelIndex \u003d -1;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c coursePanels.size(); i++) {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (coursePanels.get(i).getText().contains(courseName)) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" coursePanelIndex \u003d i;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertTrue(coursePanelIndex \u003e\u003d 0);"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return coursePanelIndex;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" public void verifyVisibleFeedbackSessionToStudents(String feedbackSessionName, int index) {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertTrue(getStudentHomeCoursePanels().get(index)"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .findElement(By.cssSelector(\"div.table-responsive table.table tbody\")).getText()"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .contains(feedbackSessionName));"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" public void clickCloseNotificationBannerButton() {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" WebElement closeNotifButton \u003d browser.driver.findElement(By.id(\"btn-close-notif\"));"},{"lineNumber":48,"author":{"gitId":"-"},"content":" waitForElementToBeClickable(closeNotifButton);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" click(closeNotifButton);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" public void clickMarkAsReadButton() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" WebElement markNotifAsReadButton \u003d browser.driver.findElement(By.id(\"btn-mark-as-read\"));"},{"lineNumber":55,"author":{"gitId":"-"},"content":" waitForElementToBeClickable(markNotifAsReadButton);"},{"lineNumber":56,"author":{"gitId":"-"},"content":" click(markNotifAsReadButton);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" waitUntilAnimationFinish();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" public String getNotificationId() {"},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" WebElement notificationBanner \u003d browser.driver.findElement(By.id(\"notification-banner\"));"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":" return notificationBanner.getAttribute(\"data-testid\");"},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":5,"-":60}},{"path":"src/it/java/teammates/it/sqllogic/core/AccountsLogicIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.AccountsLogic;"},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":"import teammates.sqllogic.core.CoursesLogic;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.NotificationsLogic;"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":"import teammates.sqllogic.core.UsersLogic;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountsDb;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":"import teammates.test.AssertHelper;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * SUT: {@link AccountsLogic}."},{"lineNumber":36,"author":{"gitId":"-"},"content":" */"},{"lineNumber":37,"author":{"gitId":"-"},"content":"public class AccountsLogicIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" private AccountsLogic accountsLogic \u003d AccountsLogic.inst();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private NotificationsLogic notificationsLogic \u003d NotificationsLogic.inst();"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" private UsersLogic usersLogic \u003d UsersLogic.inst();"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" private CoursesLogic coursesLogic \u003d CoursesLogic.inst();"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" private AccountsDb accountsDb \u003d AccountsDb.inst();"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" private SqlDataBundle typicalDataBundle;"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" @BeforeClass"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" public void setupClass() {"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" super.setupClass();"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" typicalDataBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":" @BeforeMethod"},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":" protected void setUp() throws Exception {"},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" super.setUp();"},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" persistDataBundle(typicalDataBundle);"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.flushSession();"},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.clearSession();"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications()"},{"lineNumber":66,"author":{"gitId":"-"},"content":" throws EntityAlreadyExistsException, InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" ______TS(\"success: mark notification as read\");"},{"lineNumber":68,"author":{"gitId":"-"},"content":" Account account \u003d new Account(\"google-id\", \"name\", \"email@teammates.com\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" Notification notification \u003d new Notification(Instant.parse(\"2011-01-01T00:00:00Z\"),"},{"lineNumber":70,"author":{"gitId":"-"},"content":" Instant.parse(\"2099-01-01T00:00:00Z\"), NotificationStyle.DANGER, NotificationTargetUser.GENERAL,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"A deprecation note\", \"\u003cp\u003eDeprecation happens in three minutes\u003c/p\u003e\");"},{"lineNumber":72,"author":{"gitId":"-"},"content":" accountsDb.createAccount(account);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" notificationsLogic.createNotification(notification);"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":76,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":77,"author":{"gitId":"-"},"content":" accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime());"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" Account actualAccount \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" List\u003cReadNotification\u003e accountReadNotifications \u003d actualAccount.getReadNotifications();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" assertEquals(1, accountReadNotifications.size());"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertSame(actualAccount, accountReadNotifications.get(0).getAccount());"},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertSame(notification, accountReadNotifications.get(0).getNotification());"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":" public void testJoinCourseForStudent()"},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" throws EntityAlreadyExistsException, InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":89,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":" Student student2YetToJoinCourse \u003d typicalDataBundle.students.get(\"student2YetToJoinCourse4\");"},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" Student student3YetToJoinCourse \u003d typicalDataBundle.students.get(\"student3YetToJoinCourse4\");"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":" Student studentInCourse \u003d typicalDataBundle.students.get(\"student1InCourse1\");"},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" String loggedInGoogleId \u003d \"AccLogicT.student.id\";"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: wrong key\");"},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":" String wrongKey \u003d StringHelper.encrypt(\"wrongkey\");"},{"lineNumber":99,"author":{"gitId":"yuanxi1"},"content":" EntityDoesNotExistException ednee \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(wrongKey, loggedInGoogleId));"},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"No student with given registration key: \" + wrongKey, ednee.getMessage());"},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: invalid parameters\");"},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" InvalidParametersException ipe \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(), \"wrong student\"));"},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" AssertHelper.assertContains(FieldValidator.REASON_INCORRECT_FORMAT, ipe.getMessage());"},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":109,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: googleID belongs to an existing student in the course\");"},{"lineNumber":110,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":111,"author":{"gitId":"yuanxi1"},"content":" EntityAlreadyExistsException eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":112,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(),"},{"lineNumber":113,"author":{"gitId":"yuanxi1"},"content":" studentInCourse.getGoogleId()));"},{"lineNumber":114,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Student has already joined course\", eaee.getMessage());"},{"lineNumber":115,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":116,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: with encryption and new account to be created\");"},{"lineNumber":117,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":118,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(), loggedInGoogleId);"},{"lineNumber":119,"author":{"gitId":"yuanxi1"},"content":" Account accountCreated \u003d accountsLogic.getAccountForGoogleId(loggedInGoogleId);"},{"lineNumber":120,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":121,"author":{"gitId":"yuanxi1"},"content":" assertEquals(loggedInGoogleId, usersLogic.getStudentForEmail("},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":" student2YetToJoinCourse.getCourseId(), student2YetToJoinCourse.getEmail()).getGoogleId());"},{"lineNumber":123,"author":{"gitId":"yuanxi1"},"content":" assertNotNull(accountCreated);"},{"lineNumber":124,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":125,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: student joined but account already exists\");"},{"lineNumber":126,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" String existingAccountId \u003d \"existingAccountId\";"},{"lineNumber":128,"author":{"gitId":"yuanxi1"},"content":" Account existingAccount \u003d new Account(existingAccountId, \"accountName\", student3YetToJoinCourse.getEmail());"},{"lineNumber":129,"author":{"gitId":"yuanxi1"},"content":" accountsDb.createAccount(existingAccount);"},{"lineNumber":130,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":131,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.joinCourseForStudent(student3YetToJoinCourse.getRegKey(), existingAccountId);"},{"lineNumber":132,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":" assertEquals(existingAccountId, usersLogic.getStudentForEmail("},{"lineNumber":134,"author":{"gitId":"yuanxi1"},"content":" student3YetToJoinCourse.getCourseId(), student3YetToJoinCourse.getEmail()).getGoogleId());"},{"lineNumber":135,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":136,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: already joined\");"},{"lineNumber":137,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":138,"author":{"gitId":"yuanxi1"},"content":" eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":139,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(), loggedInGoogleId));"},{"lineNumber":140,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Student has already joined course\", eaee.getMessage());"},{"lineNumber":141,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: course is deleted\");"},{"lineNumber":143,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":144,"author":{"gitId":"yuanxi1"},"content":" Course originalCourse \u003d usersLogic.getStudentForEmail("},{"lineNumber":145,"author":{"gitId":"yuanxi1"},"content":" student2YetToJoinCourse.getCourseId(), student2YetToJoinCourse.getEmail()).getCourse();"},{"lineNumber":146,"author":{"gitId":"yuanxi1"},"content":" coursesLogic.moveCourseToRecycleBin(originalCourse.getId());"},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":148,"author":{"gitId":"yuanxi1"},"content":" ednee \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":149,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForStudent(student2YetToJoinCourse.getRegKey(),"},{"lineNumber":150,"author":{"gitId":"yuanxi1"},"content":" loggedInGoogleId));"},{"lineNumber":151,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"The course you are trying to join has been deleted by an instructor\", ednee.getMessage());"},{"lineNumber":152,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":153,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":154,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":155,"author":{"gitId":"yuanxi1"},"content":" public void testJoinCourseForInstructor() throws Exception {"},{"lineNumber":156,"author":{"gitId":"yuanxi1"},"content":" String instructorIdAlreadyJoinedCourse \u003d \"instructor1\";"},{"lineNumber":157,"author":{"gitId":"yuanxi1"},"content":" Instructor instructor2YetToJoinCourse \u003d typicalDataBundle.instructors.get(\"instructor2YetToJoinCourse4\");"},{"lineNumber":158,"author":{"gitId":"yuanxi1"},"content":" Instructor instructor3YetToJoinCourse \u003d typicalDataBundle.instructors.get(\"instructor3YetToJoinCourse4\");"},{"lineNumber":159,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":160,"author":{"gitId":"yuanxi1"},"content":" String loggedInGoogleId \u003d \"AccLogicT.instr.id\";"},{"lineNumber":161,"author":{"gitId":"yuanxi1"},"content":" String[] key \u003d new String[] {"},{"lineNumber":162,"author":{"gitId":"yuanxi1"},"content":" getRegKeyForInstructor(instructor2YetToJoinCourse.getCourseId(), instructor2YetToJoinCourse.getEmail()),"},{"lineNumber":163,"author":{"gitId":"yuanxi1"},"content":" getRegKeyForInstructor(instructor2YetToJoinCourse.getCourseId(), instructor3YetToJoinCourse.getEmail()),"},{"lineNumber":164,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":165,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: googleID belongs to an existing instructor in the course\");"},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":" EntityAlreadyExistsException eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor("},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" key[0], instructorIdAlreadyJoinedCourse));"},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Instructor has already joined course\", eaee.getMessage());"},{"lineNumber":172,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: instructor joined and new account be created\");"},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.joinCourseForInstructor(key[0], loggedInGoogleId);"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":" Instructor joinedInstructor \u003d usersLogic.getInstructorForEmail("},{"lineNumber":178,"author":{"gitId":"yuanxi1"},"content":" instructor2YetToJoinCourse.getCourseId(), instructor2YetToJoinCourse.getEmail());"},{"lineNumber":179,"author":{"gitId":"yuanxi1"},"content":" assertEquals(loggedInGoogleId, joinedInstructor.getGoogleId());"},{"lineNumber":180,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":181,"author":{"gitId":"yuanxi1"},"content":" Account accountCreated \u003d accountsLogic.getAccountForGoogleId(loggedInGoogleId);"},{"lineNumber":182,"author":{"gitId":"yuanxi1"},"content":" assertNotNull(accountCreated);"},{"lineNumber":183,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":184,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: instructor joined but account already exists\");"},{"lineNumber":185,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":186,"author":{"gitId":"yuanxi1"},"content":" String existingAccountId \u003d \"existingAccountId\";"},{"lineNumber":187,"author":{"gitId":"yuanxi1"},"content":" Account existingAccount \u003d new Account(existingAccountId, \"accountName\", instructor3YetToJoinCourse.getEmail());"},{"lineNumber":188,"author":{"gitId":"yuanxi1"},"content":" accountsDb.createAccount(existingAccount);"},{"lineNumber":189,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":190,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.joinCourseForInstructor(key[1], existingAccount.getGoogleId());"},{"lineNumber":191,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":192,"author":{"gitId":"yuanxi1"},"content":" joinedInstructor \u003d usersLogic.getInstructorForEmail("},{"lineNumber":193,"author":{"gitId":"yuanxi1"},"content":" instructor3YetToJoinCourse.getCourseId(), existingAccount.getEmail());"},{"lineNumber":194,"author":{"gitId":"yuanxi1"},"content":" assertEquals(existingAccountId, joinedInstructor.getGoogleId());"},{"lineNumber":195,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":196,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: instructor already joined\");"},{"lineNumber":197,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":198,"author":{"gitId":"yuanxi1"},"content":" eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":199,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor(key[0], loggedInGoogleId));"},{"lineNumber":200,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Instructor has already joined course\", eaee.getMessage());"},{"lineNumber":201,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":202,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: key belongs to a different user\");"},{"lineNumber":203,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":204,"author":{"gitId":"yuanxi1"},"content":" eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":205,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor(key[0], \"otherUserId\"));"},{"lineNumber":206,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Instructor has already joined course\", eaee.getMessage());"},{"lineNumber":207,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":208,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: invalid key\");"},{"lineNumber":209,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":210,"author":{"gitId":"yuanxi1"},"content":" String invalidKey \u003d StringHelper.encrypt(\"invalidKey\");"},{"lineNumber":211,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":212,"author":{"gitId":"yuanxi1"},"content":" EntityDoesNotExistException ednee \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":213,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor(invalidKey, loggedInGoogleId));"},{"lineNumber":214,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"No instructor with given registration key: \" + invalidKey,"},{"lineNumber":215,"author":{"gitId":"yuanxi1"},"content":" ednee.getMessage());"},{"lineNumber":216,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":217,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: course deleted\");"},{"lineNumber":218,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":219,"author":{"gitId":"yuanxi1"},"content":" Course originalCourse \u003d usersLogic.getInstructorForEmail("},{"lineNumber":220,"author":{"gitId":"yuanxi1"},"content":" instructor2YetToJoinCourse.getCourseId(), instructor2YetToJoinCourse.getEmail()).getCourse();"},{"lineNumber":221,"author":{"gitId":"yuanxi1"},"content":" coursesLogic.moveCourseToRecycleBin(originalCourse.getId());"},{"lineNumber":222,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":223,"author":{"gitId":"yuanxi1"},"content":" ednee \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":224,"author":{"gitId":"yuanxi1"},"content":" () -\u003e accountsLogic.joinCourseForInstructor(instructor2YetToJoinCourse.getRegKey(),"},{"lineNumber":225,"author":{"gitId":"yuanxi1"},"content":" instructor2YetToJoinCourse.getGoogleId()));"},{"lineNumber":226,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"The course you are trying to join has been deleted by an instructor\", ednee.getMessage());"},{"lineNumber":227,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":228,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":229,"author":{"gitId":"yuanxi1"},"content":" private String getRegKeyForInstructor(String courseId, String email) {"},{"lineNumber":230,"author":{"gitId":"yuanxi1"},"content":" return usersLogic.getInstructorForEmail(courseId, email).getRegKey();"},{"lineNumber":231,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":179,"-":53}},{"path":"src/it/java/teammates/it/sqllogic/core/FeedbackQuestionsLogicIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionType;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextQuestionDetails;"},{"lineNumber":16,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackQuestionsLogic;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackVisibilityType;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.ui.output.NumberOfEntitiesToGiveFeedbackToSetting;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackQuestionUpdateRequest;"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackQuestionsLogic}."},{"lineNumber":30,"author":{"gitId":"-"},"content":" */"},{"lineNumber":31,"author":{"gitId":"-"},"content":"public class FeedbackQuestionsLogicIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic \u003d FeedbackQuestionsLogic.inst();"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private SqlDataBundle typicalDataBundle;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" super.setupClass();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" typicalDataBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":46,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":48,"author":{"gitId":"-"},"content":" persistDataBundle(typicalDataBundle);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":53,"author":{"gitId":"marquestye"},"content":" public void testCreateFeedbackQuestion() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":55,"author":{"gitId":"-"},"content":" FeedbackTextQuestionDetails newQuestionDetails \u003d new FeedbackTextQuestionDetails(\"New question text.\");"},{"lineNumber":56,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showTos \u003d new ArrayList\u003c\u003e();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" showTos.add(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" FeedbackQuestion newQuestion \u003d FeedbackQuestion.makeQuestion(fs, 6, \"This is a new text question\","},{"lineNumber":59,"author":{"gitId":"-"},"content":" FeedbackParticipantType.STUDENTS, FeedbackParticipantType.OWN_TEAM_MEMBERS, -100,"},{"lineNumber":60,"author":{"gitId":"-"},"content":" showTos, showTos, showTos, newQuestionDetails);"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" newQuestion \u003d fqLogic.createFeedbackQuestion(newQuestion);"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" FeedbackQuestion actualQuestion \u003d fqLogic.getFeedbackQuestion(newQuestion.getId());"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" verifyEquals(newQuestion, actualQuestion);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForSession() {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":72,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d typicalDataBundle.feedbackQuestions.get(\"qn2InSession1InCourse1\");"},{"lineNumber":74,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d typicalDataBundle.feedbackQuestions.get(\"qn3InSession1InCourse1\");"},{"lineNumber":75,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d typicalDataBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":76,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d typicalDataBundle.feedbackQuestions.get(\"qn5InSession1InCourse1\");"},{"lineNumber":77,"author":{"gitId":"-"},"content":" FeedbackQuestion fq6 \u003d typicalDataBundle.feedbackQuestions.get(\"qn6InSession1InCourse1NoResponses\");"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2, fq3, fq4, fq5, fq6);"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForSession(fs);"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertTrue(expectedQuestions.containsAll(actualQuestions));"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public void testUpdateFeedbackQuestionCascade() throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":90,"author":{"gitId":"-"},"content":" fq1.setDescription(\"New question description\");"},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackQuestionUpdateRequest updateRequest \u003d generateFeedbackQuestionUpdateRequest("},{"lineNumber":92,"author":{"gitId":"-"},"content":" fq1.getQuestionNumber(),"},{"lineNumber":93,"author":{"gitId":"-"},"content":" fq1.getDescription(),"},{"lineNumber":94,"author":{"gitId":"-"},"content":" fq1.getQuestionDetailsCopy(),"},{"lineNumber":95,"author":{"gitId":"-"},"content":" fq1.getQuestionDetailsCopy().getQuestionType(),"},{"lineNumber":96,"author":{"gitId":"-"},"content":" fq1.getGiverType(),"},{"lineNumber":97,"author":{"gitId":"-"},"content":" fq1.getRecipientType(),"},{"lineNumber":98,"author":{"gitId":"-"},"content":" fq1.getNumOfEntitiesToGiveFeedbackTo(),"},{"lineNumber":99,"author":{"gitId":"-"},"content":" fq1.getShowResponsesTo(),"},{"lineNumber":100,"author":{"gitId":"-"},"content":" fq1.getShowGiverNameTo(),"},{"lineNumber":101,"author":{"gitId":"-"},"content":" fq1.getShowRecipientNameTo()"},{"lineNumber":102,"author":{"gitId":"-"},"content":" );"},{"lineNumber":103,"author":{"gitId":"-"},"content":" updateRequest.setNumberOfEntitiesToGiveFeedbackToSetting(NumberOfEntitiesToGiveFeedbackToSetting.CUSTOM);"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" fqLogic.updateFeedbackQuestionCascade(fq1.getId(), updateRequest);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" FeedbackQuestion actualFeedbackQuestion \u003d fqLogic.getFeedbackQuestion(fq1.getId());"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" verifyEquals(fq1, actualFeedbackQuestion);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" private FeedbackQuestionUpdateRequest generateFeedbackQuestionUpdateRequest("},{"lineNumber":113,"author":{"gitId":"-"},"content":" int questionNumber,"},{"lineNumber":114,"author":{"gitId":"-"},"content":" String questionDescription,"},{"lineNumber":115,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails,"},{"lineNumber":116,"author":{"gitId":"-"},"content":" FeedbackQuestionType questionType,"},{"lineNumber":117,"author":{"gitId":"-"},"content":" FeedbackParticipantType giverType,"},{"lineNumber":118,"author":{"gitId":"-"},"content":" FeedbackParticipantType recipientType,"},{"lineNumber":119,"author":{"gitId":"-"},"content":" Integer customNumberOfEntitiesToGiveFeedbackTo,"},{"lineNumber":120,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":121,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo,"},{"lineNumber":122,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showRecipientNameTo"},{"lineNumber":123,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" FeedbackQuestionUpdateRequest updateRequest \u003d new FeedbackQuestionUpdateRequest();"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" updateRequest.setQuestionNumber(questionNumber);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" updateRequest.setQuestionDescription(questionDescription);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" updateRequest.setQuestionDetails(questionDetails);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" updateRequest.setQuestionType(questionType);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" updateRequest.setGiverType(giverType);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" updateRequest.setRecipientType(recipientType);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" updateRequest.setCustomNumberOfEntitiesToGiveFeedbackTo(customNumberOfEntitiesToGiveFeedbackTo);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" updateRequest.setShowResponsesTo(convertToFeedbackVisibilityType(showResponsesTo));"},{"lineNumber":134,"author":{"gitId":"-"},"content":" updateRequest.setShowGiverNameTo(convertToFeedbackVisibilityType(showGiverNameTo));"},{"lineNumber":135,"author":{"gitId":"-"},"content":" updateRequest.setShowRecipientNameTo(convertToFeedbackVisibilityType(showRecipientNameTo));"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" return updateRequest;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" private List\u003cFeedbackVisibilityType\u003e convertToFeedbackVisibilityType("},{"lineNumber":141,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e feedbackParticipantTypes) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" return feedbackParticipantTypes.stream().map(feedbackParticipantType -\u003e {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" switch (feedbackParticipantType) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":145,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.STUDENTS;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":147,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.INSTRUCTORS;"},{"lineNumber":148,"author":{"gitId":"-"},"content":" case RECEIVER:"},{"lineNumber":149,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.RECIPIENT;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":151,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.GIVER_TEAM_MEMBERS;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" case RECEIVER_TEAM_MEMBERS:"},{"lineNumber":153,"author":{"gitId":"-"},"content":" return FeedbackVisibilityType.RECIPIENT_TEAM_MEMBERS;"},{"lineNumber":154,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":155,"author":{"gitId":"-"},"content":" assert false : \"Unknown feedbackParticipantType\" + feedbackParticipantType;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }).collect(Collectors.toList());"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":2,"-":159}},{"path":"src/it/java/teammates/it/storage/sqlapi/AccountRequestsDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountRequestsDb;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * SUT: {@link AccountRequestsDb}."},{"lineNumber":15,"author":{"gitId":"-"},"content":" */"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class AccountRequestsDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":" private final AccountRequestsDb accountRequestDb \u003d AccountRequestsDb.inst();"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public void testCreateReadDeleteAccountRequest() throws Exception {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ______TS(\"Create account request, does not exists, succeeds\");"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":25,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" ______TS(\"Read account request using the given email and institute\");"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" AccountRequest actualAccReqEmalAndInstitute \u003d"},{"lineNumber":30,"author":{"gitId":"-"},"content":" accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":31,"author":{"gitId":"-"},"content":" verifyEquals(accountRequest, actualAccReqEmalAndInstitute);"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" ______TS(\"Read account request using the given registration key\");"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" AccountRequest actualAccReqRegistrationKey \u003d"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" accountRequestDb.getAccountRequestByRegistrationKey(accountRequest.getRegistrationKey());"},{"lineNumber":37,"author":{"gitId":"-"},"content":" verifyEquals(accountRequest, actualAccReqRegistrationKey);"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" ______TS(\"Read account request using the given start and end timing\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" List\u003cAccountRequest\u003e actualAccReqCreatedAt \u003d"},{"lineNumber":42,"author":{"gitId":"-"},"content":" accountRequestDb.getAccountRequests(accountRequest.getCreatedAt(), accountRequest.getCreatedAt());"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(1, actualAccReqCreatedAt.size());"},{"lineNumber":44,"author":{"gitId":"-"},"content":" verifyEquals(accountRequest, actualAccReqCreatedAt.get(0));"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" ______TS(\"Read account request not found using the outside start and end timing\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" List\u003cAccountRequest\u003e actualAccReqCreatedAtOutside \u003d"},{"lineNumber":49,"author":{"gitId":"-"},"content":" accountRequestDb.getAccountRequests("},{"lineNumber":50,"author":{"gitId":"-"},"content":" accountRequest.getCreatedAt().minusMillis(3000),"},{"lineNumber":51,"author":{"gitId":"-"},"content":" accountRequest.getCreatedAt().minusMillis(2000));"},{"lineNumber":52,"author":{"gitId":"-"},"content":" assertEquals(0, actualAccReqCreatedAtOutside.size());"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" ______TS(\"Create acccount request, already exists, execption thrown\");"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" AccountRequest identicalAccountRequest \u003d"},{"lineNumber":57,"author":{"gitId":"-"},"content":" new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertNotSame(accountRequest, identicalAccountRequest);"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" () -\u003e accountRequestDb.createAccountRequest(identicalAccountRequest));"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" ______TS(\"Delete account request that was created\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" accountRequestDb.deleteAccountRequest(accountRequest);"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" AccountRequest actualAccountRequest \u003d"},{"lineNumber":68,"author":{"gitId":"-"},"content":" accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":69,"author":{"gitId":"-"},"content":" assertNull(actualAccountRequest);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void testUpdateAccountRequest() throws Exception {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" ______TS(\"Update account request, does not exists, exception thrown\");"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":79,"author":{"gitId":"-"},"content":" () -\u003e accountRequestDb.updateAccountRequest(accountRequest));"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" ______TS(\"Update account request, already exists, update successful\");"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" accountRequest.setName(\"new account request name\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" accountRequestDb.updateAccountRequest(accountRequest);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest("},{"lineNumber":88,"author":{"gitId":"-"},"content":" accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":89,"author":{"gitId":"-"},"content":" verifyEquals(accountRequest, actual);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateAccountRequestEmailField() throws Exception {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in email field\");"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in email field"},{"lineNumber":97,"author":{"gitId":"-"},"content":" String email \u003d \"email\u0027/**/OR/**/1\u003d1/**/@gmail.com\";"},{"lineNumber":98,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(email, \"name\", \"institute\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":101,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":103,"author":{"gitId":"-"},"content":" assertEquals(email, actual.getEmail());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateAccountRequestNameField() throws Exception {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in name field\");"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in name field"},{"lineNumber":111,"author":{"gitId":"-"},"content":" String name \u003d \"name\u0027; SELECT * FROM account_requests; --\";"},{"lineNumber":112,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", name, \"institute\");"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":115,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertEquals(name, actual.getName());"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateAccountRequestInstituteField() throws Exception {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in institute field\");"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in institute field"},{"lineNumber":125,"author":{"gitId":"-"},"content":" String institute \u003d \"institute\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":126,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", institute);"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":129,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), institute);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertEquals(institute, actual.getInstitute());"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetAccountRequest() throws Exception {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getAccountRequest\");"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":139,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" String instituteInjection \u003d \"institute\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":142,"author":{"gitId":"-"},"content":" AccountRequest actualInjection \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), instituteInjection);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" assertNull(actualInjection);"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":150,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetAccountRequestByRegistrationKey() throws Exception {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getAccountRequestByRegistrationKey\");"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":154,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" String regKeyInjection \u003d \"regKey\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":157,"author":{"gitId":"-"},"content":" AccountRequest actualInjection \u003d accountRequestDb.getAccountRequestByRegistrationKey(regKeyInjection);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" assertNull(actualInjection);"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequestByRegistrationKey(accountRequest.getRegistrationKey());"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":165,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateAccountRequest() throws Exception {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in updateAccountRequest\");"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":169,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" String nameInjection \u003d \"newName\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":172,"author":{"gitId":"-"},"content":" accountRequest.setName(nameInjection);"},{"lineNumber":173,"author":{"gitId":"-"},"content":" accountRequestDb.updateAccountRequest(accountRequest);"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":176,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":180,"author":{"gitId":"-"},"content":" public void testSqlInjectionInDeleteAccountRequest() throws Exception {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in deleteAccountRequest\");"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":184,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" String emailInjection \u003d \"email\u0027/**/OR/**/1\u003d1/**/@gmail.com\";"},{"lineNumber":187,"author":{"gitId":"-"},"content":" String nameInjection \u003d \"name\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":188,"author":{"gitId":"-"},"content":" String instituteInjection \u003d \"institute\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":189,"author":{"gitId":"-"},"content":" AccountRequest accountRequestInjection \u003d new AccountRequest(emailInjection, nameInjection, instituteInjection);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" accountRequestDb.deleteAccountRequest(accountRequestInjection);"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":197,"author":{"gitId":"-"},"content":" public void testSqlInjectionSearchAccountRequestsInWholeSystem() throws Exception {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in searchAccountRequestsInWholeSystem\");"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d new AccountRequest(\"test@gmail.com\", \"name\", \"institute\");"},{"lineNumber":201,"author":{"gitId":"-"},"content":" accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" String searchInjection \u003d \"institute\u0027; DROP TABLE account_requests; --\";"},{"lineNumber":204,"author":{"gitId":"-"},"content":" List\u003cAccountRequest\u003e actualInjection \u003d accountRequestDb.searchAccountRequestsInWholeSystem(searchInjection);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" assertEquals(0, actualInjection.size());"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" AccountRequest actual \u003d accountRequestDb.getAccountRequest(\"test@gmail.com\", \"institute\");"},{"lineNumber":208,"author":{"gitId":"-"},"content":" assertEquals(accountRequest, actual);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":1,"-":209}},{"path":"src/it/java/teammates/it/storage/sqlapi/CoursesDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.CoursesDb;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * SUT: {@link CoursesDb}."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class CoursesDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final CoursesDb coursesDb \u003d CoursesDb.inst();"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" public void testGetCourse() throws Exception {"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: get course that does not exist\");"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" Course actual \u003d coursesDb.getCourse(\"non-existent-course-id\");"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" assertNull(actual);"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null assertion exception thrown\");"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getCourse(null));"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: get course that already exists\");"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" Course expected \u003d getTypicalCourse();"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(expected);"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" actual \u003d coursesDb.getCourse(expected.getId());"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" verifyEquals(expected, actual);"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public void testCreateCourse() throws Exception {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" ______TS(\"success: create course that does not exist\");"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":45,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" Course actualCourse \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":" verifyEquals(course, actualCourse);"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null course assertion exception thrown\");"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.createCourse(null));"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: invalid course details\");"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" Course invalidCourse \u003d new Course(\"course-id\", \"!@#!@#\", \"Asia/Singapore\", \"institute\");"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" assertThrows(InvalidParametersException.class, () -\u003e coursesDb.createCourse(invalidCourse));"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" ______TS(\"failure: create course that already exist, execption thrown\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Course identicalCourse \u003d getTypicalCourse();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertNotSame(course, identicalCourse);"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertThrows(EntityAlreadyExistsException.class, () -\u003e coursesDb.createCourse(identicalCourse));"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public void testUpdateCourse() throws Exception {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" ______TS(\"failure: update course that does not exist, exception thrown\");"},{"lineNumber":66,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertThrows(EntityDoesNotExistException.class, () -\u003e coursesDb.updateCourse(course));"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null course assertion exception thrown\");"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.updateCourse(null));"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: update course that already exists\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" course.setName(\"new course name\");"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" coursesDb.updateCourse(course);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" Course actual \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":78,"author":{"gitId":"-"},"content":" verifyEquals(course, actual);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" ______TS(\"success: update detached course that already exists\");"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" // same id, different name"},{"lineNumber":83,"author":{"gitId":"-"},"content":" Course detachedCourse \u003d getTypicalCourse();"},{"lineNumber":84,"author":{"gitId":"-"},"content":" detachedCourse.setName(\"different-name\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" coursesDb.updateCourse(detachedCourse);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" verifyEquals(course, detachedCourse);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" public void testDeleteCourse() throws Exception {"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: delete course that already exists\");"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" coursesDb.deleteCourse(course);"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" Course actualCourse \u003d coursesDb.getCourse(course.getId());"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":" assertNull(actualCourse);"},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":" public void testCreateSection() throws Exception {"},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: create section that does not exist\");"},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":" coursesDb.createSection(section);"},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" Section actualSection \u003d coursesDb.getSectionByName(course.getId(), section.getName());"},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" verifyEquals(section, actualSection);"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null section assertion exception thrown\");"},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.createSection(null));"},{"lineNumber":114,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: invalid section details\");"},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":" Section invalidSection \u003d new Section(course, null);"},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" assertThrows(InvalidParametersException.class, () -\u003e coursesDb.createSection(invalidSection));"},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: create section that already exist, execption thrown\");"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":" assertThrows(EntityAlreadyExistsException.class, () -\u003e coursesDb.createSection(section));"},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" public void testGetSectionByName() throws Exception {"},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" coursesDb.createSection(section);"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null courseId assertion exception thrown\");"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getSectionByName(null, section.getName()));"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null sectionName assertion exception thrown\");"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getSectionByName(course.getId(), null));"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: get section that already exists\");"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":" Section actualSection \u003d coursesDb.getSectionByName(course.getId(), section.getName());"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" verifyEquals(section, actualSection);"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: get section that does not exist\");"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" Section nonExistentSection \u003d coursesDb.getSectionByName(course.getId(), \"non-existent-section-name\");"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" assertNull(nonExistentSection);"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":146,"author":{"gitId":"-"},"content":" public void testGetSectionByCourseIdAndTeam() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":148,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":149,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":151,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null courseId assertion exception thrown\");"},{"lineNumber":155,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getSectionByCourseIdAndTeam(null, team.getName()));"},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":157,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null teamName assertion exception thrown\");"},{"lineNumber":158,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getSectionByCourseIdAndTeam(course.getId(), null));"},{"lineNumber":159,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Section actualSection \u003d coursesDb.getSectionByCourseIdAndTeam(course.getId(), team.getName());"},{"lineNumber":162,"author":{"gitId":"-"},"content":" verifyEquals(section, actualSection);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public void testGetTeamsForSection() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":168,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":169,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":170,"author":{"gitId":"-"},"content":" Team team1 \u003d new Team(section, \"team-name1\");"},{"lineNumber":171,"author":{"gitId":"-"},"content":" section.addTeam(team1);"},{"lineNumber":172,"author":{"gitId":"-"},"content":" Team team2 \u003d new Team(section, \"team-name2\");"},{"lineNumber":173,"author":{"gitId":"-"},"content":" section.addTeam(team2);"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e expectedTeams \u003d List.of(team1, team2);"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null section assertion exception thrown\");"},{"lineNumber":180,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getTeamsForSection(null));"},{"lineNumber":181,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":183,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actualTeams \u003d coursesDb.getTeamsForSection(section);"},{"lineNumber":184,"author":{"gitId":"-"},"content":" assertEquals(expectedTeams.size(), actualTeams.size());"},{"lineNumber":185,"author":{"gitId":"-"},"content":" assertTrue(expectedTeams.containsAll(actualTeams));"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":189,"author":{"gitId":"domoberzin"},"content":" public void testDeleteSectionsByCourseId() throws Exception {"},{"lineNumber":190,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":191,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":192,"author":{"gitId":"domoberzin"},"content":" List\u003cSection\u003e expectedSections \u003d new ArrayList\u003c\u003e();"},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" for (int i \u003d 0; i \u003c 5; i++) {"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" Section newSection \u003d new Section(course, \"section-name\" + i);"},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" expectedSections.add(newSection);"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":" course.addSection(newSection);"},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":" assertNotNull(coursesDb.getSectionByName(course.getId(), newSection.getName()));"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":200,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: delete sections by course id\");"},{"lineNumber":201,"author":{"gitId":"domoberzin"},"content":" coursesDb.deleteSectionsByCourseId(course.getId());"},{"lineNumber":202,"author":{"gitId":"domoberzin"},"content":" for (Section section : expectedSections) {"},{"lineNumber":203,"author":{"gitId":"domoberzin"},"content":" Section actualSection \u003d coursesDb.getSectionByName(course.getId(), section.getName());"},{"lineNumber":204,"author":{"gitId":"domoberzin"},"content":" assertNull(actualSection);"},{"lineNumber":205,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":206,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":207,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":209,"author":{"gitId":"-"},"content":" public void testGetTeamsForCourse() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" Section section1 \u003d new Section(course, \"section-name1\");"},{"lineNumber":213,"author":{"gitId":"-"},"content":" course.addSection(section1);"},{"lineNumber":214,"author":{"gitId":"-"},"content":" Team team1 \u003d new Team(section1, \"team-name1\");"},{"lineNumber":215,"author":{"gitId":"-"},"content":" section1.addTeam(team1);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" Team team2 \u003d new Team(section1, \"team-name2\");"},{"lineNumber":217,"author":{"gitId":"-"},"content":" section1.addTeam(team2);"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" Section section2 \u003d new Section(course, \"section-name2\");"},{"lineNumber":220,"author":{"gitId":"-"},"content":" course.addSection(section2);"},{"lineNumber":221,"author":{"gitId":"-"},"content":" Team team3 \u003d new Team(section2, \"team-name3\");"},{"lineNumber":222,"author":{"gitId":"-"},"content":" section2.addTeam(team3);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" Team team4 \u003d new Team(section2, \"team-name4\");"},{"lineNumber":224,"author":{"gitId":"-"},"content":" section2.addTeam(team4);"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e expectedTeams \u003d List.of(team1, team2, team3, team4);"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null courseId assertion exception thrown\");"},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getTeamsForCourse(null));"},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":234,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actualTeams \u003d coursesDb.getTeamsForCourse(course.getId());"},{"lineNumber":235,"author":{"gitId":"-"},"content":" assertEquals(expectedTeams.size(), actualTeams.size());"},{"lineNumber":236,"author":{"gitId":"-"},"content":" assertTrue(expectedTeams.containsAll(actualTeams));"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":239,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":240,"author":{"gitId":"domoberzin"},"content":" public void testCreateTeam() throws Exception {"},{"lineNumber":241,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":242,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":243,"author":{"gitId":"domoberzin"},"content":" Team team \u003d new Team(section, \"team-name1\");"},{"lineNumber":244,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":245,"author":{"gitId":"domoberzin"},"content":" coursesDb.createSection(section);"},{"lineNumber":246,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":247,"author":{"gitId":"domoberzin"},"content":" assertNotNull(coursesDb.getSectionByName(course.getId(), section.getName()));"},{"lineNumber":248,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":249,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null team assertion exception thrown\");"},{"lineNumber":250,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.createTeam(null));"},{"lineNumber":251,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":252,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: create team that does not exist\");"},{"lineNumber":253,"author":{"gitId":"domoberzin"},"content":" coursesDb.createTeam(team);"},{"lineNumber":254,"author":{"gitId":"domoberzin"},"content":" Team actualTeam \u003d coursesDb.getTeamByName(section.getId(), team.getName());"},{"lineNumber":255,"author":{"gitId":"domoberzin"},"content":" verifyEquals(team, actualTeam);"},{"lineNumber":256,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":257,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: invalid team details\");"},{"lineNumber":258,"author":{"gitId":"domoberzin"},"content":" Team invalidTeam \u003d new Team(section, null);"},{"lineNumber":259,"author":{"gitId":"domoberzin"},"content":" assertThrows(InvalidParametersException.class, () -\u003e coursesDb.createTeam(invalidTeam));"},{"lineNumber":260,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":261,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: create team that already exist, execption thrown\");"},{"lineNumber":262,"author":{"gitId":"domoberzin"},"content":" assertThrows(EntityAlreadyExistsException.class, () -\u003e coursesDb.createTeam(team));"},{"lineNumber":263,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":264,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":265,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":266,"author":{"gitId":"domoberzin"},"content":" public void testGetTeamByName() throws Exception {"},{"lineNumber":267,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":268,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":269,"author":{"gitId":"domoberzin"},"content":" Team team \u003d new Team(section, \"team-name1\");"},{"lineNumber":270,"author":{"gitId":"domoberzin"},"content":" coursesDb.createCourse(course);"},{"lineNumber":271,"author":{"gitId":"domoberzin"},"content":" coursesDb.createSection(section);"},{"lineNumber":272,"author":{"gitId":"domoberzin"},"content":" coursesDb.createTeam(team);"},{"lineNumber":273,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":274,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: get team that already exists\");"},{"lineNumber":275,"author":{"gitId":"domoberzin"},"content":" Team actualTeam \u003d coursesDb.getTeamByName(section.getId(), team.getName());"},{"lineNumber":276,"author":{"gitId":"domoberzin"},"content":" verifyEquals(team, actualTeam);"},{"lineNumber":277,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":278,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null sectionId assertion exception thrown\");"},{"lineNumber":279,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getTeamByName(null, team.getName()));"},{"lineNumber":280,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":281,"author":{"gitId":"domoberzin"},"content":" ______TS(\"failure: null teamName assertion exception thrown\");"},{"lineNumber":282,"author":{"gitId":"domoberzin"},"content":" assertThrows(AssertionError.class, () -\u003e coursesDb.getTeamByName(section.getId(), null));"},{"lineNumber":283,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":284,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: null return\");"},{"lineNumber":285,"author":{"gitId":"domoberzin"},"content":" Team nonExistentTeam \u003d coursesDb.getTeamByName(section.getId(), \"non-existent-team-name\");"},{"lineNumber":286,"author":{"gitId":"domoberzin"},"content":" assertNull(nonExistentTeam);"},{"lineNumber":287,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":290,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateCourse() throws Exception {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in createCourse\");"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in name field"},{"lineNumber":294,"author":{"gitId":"-"},"content":" String courseName \u003d \"test\u0027; DROP TABLE courses; --\";"},{"lineNumber":295,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", courseName, \"UTC\", \"teammates\");"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":298,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":299,"author":{"gitId":"-"},"content":" Course actual \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":300,"author":{"gitId":"-"},"content":" assertEquals(courseName, actual.getName());"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":304,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetCourse() throws Exception {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getCourse\");"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"teammates\");"},{"lineNumber":308,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in courseId field"},{"lineNumber":311,"author":{"gitId":"-"},"content":" String courseId \u003d \"test\u0027 OR 1 \u003d 1; --\";"},{"lineNumber":312,"author":{"gitId":"-"},"content":" Course actual \u003d coursesDb.getCourse(courseId);"},{"lineNumber":313,"author":{"gitId":"-"},"content":" assertEquals(null, actual);"},{"lineNumber":314,"author":{"gitId":"-"},"content":" }"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":317,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateCourse() throws Exception {"},{"lineNumber":318,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in updateCourse\");"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"name\", \"UTC\", \"institute\");"},{"lineNumber":321,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":324,"author":{"gitId":"-"},"content":" String newName \u003d \"newName\u0027; DROP TABLE courses; --\";"},{"lineNumber":325,"author":{"gitId":"-"},"content":" course.setName(newName);"},{"lineNumber":326,"author":{"gitId":"-"},"content":" coursesDb.updateCourse(course);"},{"lineNumber":327,"author":{"gitId":"-"},"content":" Course actual \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":328,"author":{"gitId":"-"},"content":" assertEquals(newName, actual.getName());"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":""},{"lineNumber":331,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":332,"author":{"gitId":"-"},"content":" public void testSqlInjectionInDeleteCourse() throws Exception {"},{"lineNumber":333,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in deleteCourse\");"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"name\", \"UTC\", \"institute\");"},{"lineNumber":336,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" String name \u003d \"newName\u0027; DELETE FROM courses; --\";"},{"lineNumber":339,"author":{"gitId":"-"},"content":" Course injectionCourse \u003d new Course(\"course-id-injection\", name, \"UTC\", \"institute\");"},{"lineNumber":340,"author":{"gitId":"-"},"content":" coursesDb.createCourse(injectionCourse);"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":" coursesDb.deleteCourse(injectionCourse);"},{"lineNumber":343,"author":{"gitId":"-"},"content":" Course actualInjectionCourse \u003d coursesDb.getCourse(\"course-id-injection\");"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":" // The course should be deleted"},{"lineNumber":346,"author":{"gitId":"-"},"content":" assertEquals(null, actualInjectionCourse);"},{"lineNumber":347,"author":{"gitId":"-"},"content":""},{"lineNumber":348,"author":{"gitId":"-"},"content":" // All other courses should not be deleted"},{"lineNumber":349,"author":{"gitId":"-"},"content":" Course actualCourse \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":350,"author":{"gitId":"-"},"content":" assertEquals(course, actualCourse);"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":354,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateSection() throws Exception {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in createSection\");"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":" // Attempt to use SQL commands in sectionName fields"},{"lineNumber":358,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"name\", \"UTC\", \"institute\");"},{"lineNumber":359,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":360,"author":{"gitId":"-"},"content":" String sectionName \u003d \"section\u0027; DROP TABLE courses; --\";"},{"lineNumber":361,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, sectionName);"},{"lineNumber":362,"author":{"gitId":"-"},"content":""},{"lineNumber":363,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":364,"author":{"gitId":"-"},"content":" coursesDb.createSection(section);"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" // Check that we are still able to get courses"},{"lineNumber":367,"author":{"gitId":"-"},"content":" Course actualCourse \u003d coursesDb.getCourse(\"course-id\");"},{"lineNumber":368,"author":{"gitId":"-"},"content":" assertEquals(course, actualCourse);"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":""},{"lineNumber":371,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":372,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetSectionByName() throws Exception {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getSectionByName\");"},{"lineNumber":374,"author":{"gitId":"-"},"content":""},{"lineNumber":375,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":376,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":377,"author":{"gitId":"-"},"content":" String sectionName \u003d \"section-name\";"},{"lineNumber":378,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, sectionName);"},{"lineNumber":379,"author":{"gitId":"-"},"content":""},{"lineNumber":380,"author":{"gitId":"-"},"content":" coursesDb.createSection(section);"},{"lineNumber":381,"author":{"gitId":"-"},"content":" Section actual \u003d coursesDb.getSectionByName(\"course-id\", \"section-name\u0027; DROP TABLE courses; --\");"},{"lineNumber":382,"author":{"gitId":"-"},"content":" assertEquals(null, actual);"},{"lineNumber":383,"author":{"gitId":"-"},"content":" Section actualSection \u003d coursesDb.getSectionByName(\"course-id\", sectionName);"},{"lineNumber":384,"author":{"gitId":"-"},"content":" assertEquals(sectionName, actualSection.getName());"},{"lineNumber":385,"author":{"gitId":"-"},"content":" }"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":388,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetSectionByCourseIdAndTeam() throws Exception {"},{"lineNumber":389,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getSectionByCourseIdAndTeam\");"},{"lineNumber":390,"author":{"gitId":"-"},"content":""},{"lineNumber":391,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":392,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":393,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":394,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":395,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":396,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":397,"author":{"gitId":"-"},"content":""},{"lineNumber":398,"author":{"gitId":"-"},"content":" // The system should treat the input as a plain text string"},{"lineNumber":399,"author":{"gitId":"-"},"content":" String teamNameInjection \u003d \"team-name\u0027; DROP TABLE courses; --\";"},{"lineNumber":400,"author":{"gitId":"-"},"content":" Section actual \u003d coursesDb.getSectionByCourseIdAndTeam(\"course-id\", teamNameInjection);"},{"lineNumber":401,"author":{"gitId":"-"},"content":" assertEquals(null, actual);"},{"lineNumber":402,"author":{"gitId":"-"},"content":" Section actualSection \u003d coursesDb.getSectionByCourseIdAndTeam(\"course-id\", \"team-name\");"},{"lineNumber":403,"author":{"gitId":"-"},"content":" assertEquals(\"team-name\", actualSection.getTeams().get(0).getName());"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":407,"author":{"gitId":"-"},"content":" public void testSqlInjectionInDeleteSectionsByCourseId() throws Exception {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in deleteSectionsByCourseId\");"},{"lineNumber":409,"author":{"gitId":"-"},"content":""},{"lineNumber":410,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"name\", \"UTC\", \"institute\");"},{"lineNumber":411,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":412,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":413,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":414,"author":{"gitId":"-"},"content":""},{"lineNumber":415,"author":{"gitId":"-"},"content":" String courseId \u003d \"course-id\u0027; DELETE FROM courses; --\";"},{"lineNumber":416,"author":{"gitId":"-"},"content":" coursesDb.deleteSectionsByCourseId(courseId);"},{"lineNumber":417,"author":{"gitId":"-"},"content":""},{"lineNumber":418,"author":{"gitId":"-"},"content":" // The sections should not be deleted"},{"lineNumber":419,"author":{"gitId":"-"},"content":" Section actualSection \u003d coursesDb.getSectionByName(\"course-id\", \"section-name\");"},{"lineNumber":420,"author":{"gitId":"-"},"content":" assertEquals(section, actualSection);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" }"},{"lineNumber":422,"author":{"gitId":"-"},"content":""},{"lineNumber":423,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":424,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetTeamsForSection() throws Exception {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getTeamsForSection\");"},{"lineNumber":426,"author":{"gitId":"-"},"content":""},{"lineNumber":427,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":428,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":429,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":430,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":431,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":432,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":433,"author":{"gitId":"-"},"content":""},{"lineNumber":434,"author":{"gitId":"-"},"content":" String sectionName \u003d \"section-name\u0027 OR 1 \u003d 1; --\";"},{"lineNumber":435,"author":{"gitId":"-"},"content":" Section sectionInjection \u003d new Section(course, sectionName);"},{"lineNumber":436,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actual \u003d coursesDb.getTeamsForSection(sectionInjection);"},{"lineNumber":437,"author":{"gitId":"-"},"content":" assertEquals(0, actual.size());"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":""},{"lineNumber":440,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":441,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetTeamsForCourse() throws Exception {"},{"lineNumber":442,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getTeamsForCourse\");"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":445,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":446,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":447,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":448,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":449,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":" String courseId \u003d \"course-id\u0027 OR 1 \u003d 1; --\";"},{"lineNumber":452,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actual \u003d coursesDb.getTeamsForCourse(courseId);"},{"lineNumber":453,"author":{"gitId":"-"},"content":" assertEquals(0, actual.size());"},{"lineNumber":454,"author":{"gitId":"-"},"content":" }"},{"lineNumber":455,"author":{"gitId":"-"},"content":""},{"lineNumber":456,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":457,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateTeam() throws Exception {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in createTeam\");"},{"lineNumber":459,"author":{"gitId":"-"},"content":""},{"lineNumber":460,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":461,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":462,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":463,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":464,"author":{"gitId":"-"},"content":""},{"lineNumber":465,"author":{"gitId":"-"},"content":" String teamName \u003d \"team\u0027; DROP TABLE courses; --\";"},{"lineNumber":466,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, teamName);"},{"lineNumber":467,"author":{"gitId":"-"},"content":" coursesDb.createTeam(team);"},{"lineNumber":468,"author":{"gitId":"-"},"content":""},{"lineNumber":469,"author":{"gitId":"-"},"content":" List\u003cTeam\u003e actual \u003d coursesDb.getTeamsForSection(section);"},{"lineNumber":470,"author":{"gitId":"-"},"content":" assertEquals(1, actual.size());"},{"lineNumber":471,"author":{"gitId":"-"},"content":" assertEquals(teamName, actual.get(0).getName());"},{"lineNumber":472,"author":{"gitId":"-"},"content":" }"},{"lineNumber":473,"author":{"gitId":"-"},"content":""},{"lineNumber":474,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":475,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetTeamByName() throws Exception {"},{"lineNumber":476,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in getTeamByName\");"},{"lineNumber":477,"author":{"gitId":"-"},"content":""},{"lineNumber":478,"author":{"gitId":"-"},"content":" Course course \u003d new Course(\"course-id\", \"course-name\", \"UTC\", \"institute\");"},{"lineNumber":479,"author":{"gitId":"-"},"content":" Section section \u003d new Section(course, \"section-name\");"},{"lineNumber":480,"author":{"gitId":"-"},"content":" course.addSection(section);"},{"lineNumber":481,"author":{"gitId":"-"},"content":" Team team \u003d new Team(section, \"team-name\");"},{"lineNumber":482,"author":{"gitId":"-"},"content":" section.addTeam(team);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" coursesDb.createCourse(course);"},{"lineNumber":484,"author":{"gitId":"-"},"content":""},{"lineNumber":485,"author":{"gitId":"-"},"content":" String teamName \u003d \"team-name\u0027; DROP TABLE courses; --\";"},{"lineNumber":486,"author":{"gitId":"-"},"content":" Team actual \u003d coursesDb.getTeamByName(section.getId(), teamName);"},{"lineNumber":487,"author":{"gitId":"-"},"content":" assertEquals(null, actual);"},{"lineNumber":488,"author":{"gitId":"-"},"content":" Team actualTeam \u003d coursesDb.getTeamByName(section.getId(), \"team-name\");"},{"lineNumber":489,"author":{"gitId":"-"},"content":" assertEquals(team, actualTeam);"},{"lineNumber":490,"author":{"gitId":"-"},"content":" }"},{"lineNumber":491,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":165,"-":326}},{"path":"src/it/java/teammates/it/storage/sqlapi/FeedbackQuestionsDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import java.util.UUID;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackQuestionsDb;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackQuestionsDb}."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class FeedbackQuestionsDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" private final FeedbackQuestionsDb fqDb \u003d FeedbackQuestionsDb.inst();"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" private SqlDataBundle typicalDataBundle;"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" super.setupClass();"},{"lineNumber":34,"author":{"gitId":"-"},"content":" typicalDataBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":39,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" persistDataBundle(typicalDataBundle);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" public void testGetFeedbackQuestion() {"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion expectedFq \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion actualFq \u003d fqDb.getFeedbackQuestion(expectedFq.getId());"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" assertEquals(expectedFq, actualFq);"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: does not exist, returns null\");"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":" actualFq \u003d fqDb.getFeedbackQuestion(UUID.randomUUID());"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" assertNull(actualFq);"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: null parameter, assertion error\");"},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" assertThrows(AssertionError.class, () -\u003e fqDb.getFeedbackQuestion(null));"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" public void testCreateFeedbackQuestion() throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion expectedFq \u003d getTypicalFeedbackQuestionForSession("},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":" getTypicalFeedbackSessionForCourse(getTypicalCourse()));"},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" fqDb.createFeedbackQuestion(expectedFq);"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(expectedFq);"},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: duplicate question, throws error\");"},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityAlreadyExistsException.class, () -\u003e fqDb.createFeedbackQuestion(expectedFq));"},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: invalid question, throws error\");"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion invalidFq \u003d getTypicalFeedbackQuestionForSession("},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" getTypicalFeedbackSessionForCourse(getTypicalCourse()));"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" invalidFq.setGiverType(FeedbackParticipantType.RECEIVER);"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" assertThrows(InvalidParametersException.class, () -\u003e fqDb.createFeedbackQuestion(invalidFq));"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" assertNull(fqDb.getFeedbackQuestion(invalidFq.getId()));"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: null parameter, assertion error\");"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" assertThrows(AssertionError.class, () -\u003e fqDb.createFeedbackQuestion(null));"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForSession() {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":89,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":90,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d typicalDataBundle.feedbackQuestions.get(\"qn2InSession1InCourse1\");"},{"lineNumber":92,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d typicalDataBundle.feedbackQuestions.get(\"qn3InSession1InCourse1\");"},{"lineNumber":93,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d typicalDataBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":94,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d typicalDataBundle.feedbackQuestions.get(\"qn5InSession1InCourse1\");"},{"lineNumber":95,"author":{"gitId":"-"},"content":" FeedbackQuestion fq6 \u003d typicalDataBundle.feedbackQuestions.get(\"qn6InSession1InCourse1NoResponses\");"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2, fq3, fq4, fq5, fq6);"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqDb.getFeedbackQuestionsForSession(fs.getId());"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertTrue(expectedQuestions.containsAll(actualQuestions));"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: session does not exist, returns no questions\");"},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":" actualQuestions \u003d fqDb.getFeedbackQuestionsForSession(UUID.randomUUID());"},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":" assertEquals(0, actualQuestions.size());"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForGiverType() {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":112,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":114,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d typicalDataBundle.feedbackQuestions.get(\"qn2InSession1InCourse1\");"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2);"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.STUDENTS);"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertTrue(expectedQuestions.containsAll(actualQuestions));"},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: session does not exist, returns no questions\");"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":" fs \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" actualQuestions \u003d fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.STUDENTS);"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" assertEquals(0, actualQuestions.size());"},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" public void testDeleteFeedbackQuestion() {"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" FeedbackQuestion fq \u003d typicalDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":" verifyPresentInDatabase(fq);"},{"lineNumber":134,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" fqDb.deleteFeedbackQuestion(fq.getId());"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":" assertNull(fqDb.getFeedbackQuestion(fq.getId()));"},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: null parameter, assertion error\");"},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" assertThrows(AssertionError.class, () -\u003e fqDb.deleteFeedbackQuestion(null));"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":143,"author":{"gitId":"-"},"content":" public void testHasFeedbackQuestionsForGiverType() {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" Course course \u003d typicalDataBundle.courses.get(\"course1\");"},{"lineNumber":146,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d typicalDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" boolean actual \u003d fqDb.hasFeedbackQuestionsForGiverType("},{"lineNumber":149,"author":{"gitId":"-"},"content":" fs.getName(), course.getId(), FeedbackParticipantType.STUDENTS);"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":152,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":153,"author":{"gitId":"dishenggg"},"content":" ______TS(\"failure: session/course does not exist, returns false\");"},{"lineNumber":154,"author":{"gitId":"dishenggg"},"content":" actual \u003d fqDb.hasFeedbackQuestionsForGiverType(\"session-name\", \"course-id\", FeedbackParticipantType.STUDENTS);"},{"lineNumber":155,"author":{"gitId":"dishenggg"},"content":" assertFalse(actual);"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":70,"-":87}},{"path":"src/it/java/teammates/it/storage/sqlapi/FeedbackResponseCommentsDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import java.util.UUID;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackResponseCommentsDb}."},{"lineNumber":28,"author":{"gitId":"-"},"content":" */"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public class FeedbackResponseCommentsDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private final FeedbackResponseCommentsDb frcDb \u003d FeedbackResponseCommentsDb.inst();"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" private SqlDataBundle testDataBundle;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" super.setupClass();"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" testDataBundle \u003d loadSqlDataBundle(\"/FeedbackResponsesITBundle.json\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":44,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" persistDataBundle(testDataBundle);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" HibernateUtil.clearSession();"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public void testGetFeedbackResponseCommentForResponseFromParticipant() {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment expectedComment \u003d testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":" FeedbackResponseComment actualComment \u003d frcDb.getFeedbackResponseCommentForResponseFromParticipant(fr.getId());"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" assertEquals(expectedComment, actualComment);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" private FeedbackResponseComment prepareSqlInjectionTest() {"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment frc \u003d testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertNotNull(frcDb.getFeedbackResponseComment(frc.getId()));"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" return frc;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" private void checkSqlInjectionFailed(FeedbackResponseComment frc) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertNotNull(frcDb.getFeedbackResponseComment(frc.getId()));"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateGiverEmailOfFeedbackResponseComments() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d prepareSqlInjectionTest();"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027; DELETE FROM feedback_response_comments;--\";"},{"lineNumber":78,"author":{"gitId":"-"},"content":" frcDb.updateGiverEmailOfFeedbackResponseComments(sqli, \"\", \"\");"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" checkSqlInjectionFailed(frc);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateLastEditorEmailOfFeedbackResponseComments() {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d prepareSqlInjectionTest();"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027; DELETE FROM feedback_response_comments;--\";"},{"lineNumber":88,"author":{"gitId":"-"},"content":" frcDb.updateLastEditorEmailOfFeedbackResponseComments(sqli, \"\", \"\");"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" checkSqlInjectionFailed(frc);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":94,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateFeedbackResponseComment() throws Exception {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d prepareSqlInjectionTest();"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" Section s \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027\u0027);/**/DELETE/**/FROM/**/feedback_response_comments;--@gmail.com\";"},{"lineNumber":101,"author":{"gitId":"-"},"content":" FeedbackResponseComment newFrc \u003d new FeedbackResponseComment("},{"lineNumber":102,"author":{"gitId":"-"},"content":" fr, \"\", FeedbackParticipantType.INSTRUCTORS, s, s, \"\","},{"lineNumber":103,"author":{"gitId":"-"},"content":" false, false,"},{"lineNumber":104,"author":{"gitId":"-"},"content":" new ArrayList\u003cFeedbackParticipantType\u003e(), new ArrayList\u003cFeedbackParticipantType\u003e(), sqli);"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" frcDb.createFeedbackResponseComment(newFrc);"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" checkSqlInjectionFailed(frc);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public void testSqlInjectionInUpdateFeedbackResponseComment() throws Exception {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d prepareSqlInjectionTest();"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027\u0027);/**/DELETE/**/FROM/**/feedback_response_comments;--@gmail.com\";"},{"lineNumber":116,"author":{"gitId":"-"},"content":" frc.setLastEditorEmail(sqli);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" frcDb.updateFeedbackResponseComment(frc);"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" checkSqlInjectionFailed(frc);"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForSession_matchFound_success() {"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session with comments\");"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" FeedbackSession sessionWithComments \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e expected \u003d List.of("},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\"),"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse1ForQ1\"),"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse2ForQ1\"),"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ2s\"),"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ3\"),"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForSession("},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" course.getId(), sessionWithComments.getName());"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForSession_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" FeedbackSession session \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":" ______TS(\"Course not found\");"},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForSession(\"not_exist\", session.getName());"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session not found\");"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSession(course.getId(), \"Nonexistent session\");"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session without comments\");"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" FeedbackSession sessionWithoutComments \u003d testDataBundle.feedbackSessions.get(\"ongoingSession1InCourse1\");"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSession(course.getId(), sessionWithoutComments.getName());"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForQuestion_matchFound_success() {"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question with comments\");"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion questionWithComments \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e expectedComments \u003d List.of("},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\"),"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse1ForQ1\"),"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse2ForQ1\"),"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForQuestion(questionWithComments.getId());"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expectedComments, results);"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForQuestion_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question not found\");"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" UUID nonexistentQuestionId \u003d UUID.fromString(\"11110000-0000-0000-0000-000000000000\");"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForQuestion(nonexistentQuestionId);"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question without comments\");"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion questionWithoutComments \u003d testDataBundle.feedbackQuestions.get(\"qn5InSession1InCourse1\");"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestion(questionWithoutComments.getId());"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForSessionInSection_matchFound_success()"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" FeedbackSession session1 \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" FeedbackSession session2 \u003d testDataBundle.feedbackSessions.get(\"session2InTypicalCourse\");"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 1 Session 2 match\");"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e expected \u003d List.of("},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1InSession2\")"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" course.getId(), session2.getName(), section1.getName());"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 2 Session 1 match\");"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" course.getId(), session1.getName(), section2.getName());"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForSessionInSection_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" FeedbackSession session1 \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" FeedbackSession session2 \u003d testDataBundle.feedbackSessions.get(\"session2InTypicalCourse\");"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" ______TS(\"Course not found\");"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" \"not_exist\", session1.getName(), section1.getName());"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session not found\");"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" course.getId(), \"Nonexistent session\", section1.getName());"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section not found\");"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" course.getId(), session1.getName(), \"Nonexistent section\");"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching comments exist\");"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":" course.getId(), session2.getName(), section2.getName());"},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForQuestionInSection_matchFound_success() {"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question1 \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question2 \u003d testDataBundle.feedbackQuestions.get(\"qn2InSession1InCourse1\");"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 1 Question 1 match\");"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e expected \u003d List.of("},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\"),"},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse1ForQ1\"),"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment2ToResponse2ForQ1\"),"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" question1.getId(), section1.getName());"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 2 Question 1 match\");"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse4ForQ1\")"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" question1.getId(), section2.getName());"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section 1 Question 2 match\");"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ2s\")"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" question2.getId(), section1.getName());"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" assertListCommentsEqual(expected, results);"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponseCommentsForQuestionInSection_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" Section section \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question1 \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question2 \u003d testDataBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question not found\");"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" UUID nonexistentQuestionId \u003d UUID.fromString(\"11110000-0000-0000-0000-000000000000\");"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" nonexistentQuestionId, section.getName());"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" ______TS(\"Section not found\");"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection(question1.getId(), \"Nonexistent section\");"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching comments exist\");"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" results \u003d frcDb.getFeedbackResponseCommentsForQuestionInSection(question2.getId(), section.getName());"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" private void assertListCommentsEqual(List\u003cFeedbackResponseComment\u003e expected, List\u003cFeedbackResponseComment\u003e actual) {"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" assertTrue("},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" String.format(\"List contents are not equal.%nExpected: %s,%nActual: %s\","},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" expected.toString(), actual.toString()),"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(expected).equals(new HashSet\u003c\u003e(actual)));"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" assertEquals(\"List size not equal.\", expected.size(), actual.size());"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":202,"-":104}},{"path":"src/it/java/teammates/it/storage/sqlapi/FeedbackResponsesDbIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.UUID;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextResponseDetails;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponsesDb;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackTextResponse;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackResponsesDb}."},{"lineNumber":29,"author":{"gitId":"-"},"content":" */"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public class FeedbackResponsesDbIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private final FeedbackResponsesDb frDb \u003d FeedbackResponsesDb.inst();"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private final FeedbackResponseCommentsDb frcDb \u003d FeedbackResponseCommentsDb.inst();"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" private SqlDataBundle testDataBundle;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" super.setupClass();"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" testDataBundle \u003d loadSqlDataBundle(\"/FeedbackResponsesITBundle.json\");"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":46,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" persistDataBundle(testDataBundle);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" HibernateUtil.clearSession();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public void testGetFeedbackResponsesFromGiverForQuestion() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expectedQuestions \u003d List.of("},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ1\"),"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\")"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e actualQuestions \u003d"},{"lineNumber":64,"author":{"gitId":"-"},"content":" frDb.getFeedbackResponsesFromGiverForQuestion(fq.getId(), \"student1@teammates.tmt\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertTrue(expectedQuestions.containsAll(actualQuestions));"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public void testDeleteFeedbackResponsesForQuestionCascade() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr1 \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr2 \u003d testDataBundle.feedbackResponses.get(\"response2ForQ1\");"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment frc1 \u003d testDataBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\");"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponsesForQuestionCascade(fq.getId());"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" assertNull(frDb.getFeedbackResponse(fr1.getId()));"},{"lineNumber":81,"author":{"gitId":"-"},"content":" assertNull(frDb.getFeedbackResponse(fr2.getId()));"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertNull(frcDb.getFeedbackResponseComment(frc1.getId()));"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void testDeleteFeedback() {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr1 \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponse(fr1);"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" assertNull(frDb.getFeedbackResponse(fr1.getId()));"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public void testHasResponsesFromGiverInSession() {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" FeedbackSession fs \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" boolean actualHasReponses1 \u003d"},{"lineNumber":102,"author":{"gitId":"-"},"content":" frDb.hasResponsesFromGiverInSession(\"student1@teammates.tmt\", fs.getName(), course.getId());"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" assertTrue(actualHasReponses1);"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" ______TS(\"student with no responses\");"},{"lineNumber":107,"author":{"gitId":"-"},"content":" boolean actualHasReponses2 \u003d"},{"lineNumber":108,"author":{"gitId":"-"},"content":" frDb.hasResponsesFromGiverInSession(\"studentnorespones@teammates.tmt\", fs.getName(), course.getId());"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertFalse(actualHasReponses2);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":114,"author":{"gitId":"-"},"content":" public void testAreThereResponsesForQuestion() {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq1 \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" boolean actualResponse1 \u003d"},{"lineNumber":119,"author":{"gitId":"-"},"content":" frDb.areThereResponsesForQuestion(fq1.getId());"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertTrue(actualResponse1);"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" ______TS(\"feedback question with no responses\");"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq2 \u003d testDataBundle.feedbackQuestions.get(\"qn6InSession1InCourse1NoResponses\");"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" boolean actualResponse2 \u003d"},{"lineNumber":127,"author":{"gitId":"-"},"content":" frDb.areThereResponsesForQuestion(fq2.getId());"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" assertFalse(actualResponse2);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void testHasResponsesForCourse() {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ______TS(\"success: typical case\");"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" boolean actual \u003d"},{"lineNumber":138,"author":{"gitId":"-"},"content":" frDb.hasResponsesForCourse(course.getId());"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" assertTrue(actual);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" private FeedbackResponse prepareSqlInjectionTest() {"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" FeedbackResponse fr \u003d testDataBundle.feedbackResponses.get(\"response1ForQ1\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertNotNull(frDb.getFeedbackResponse(fr.getId()));"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" return fr;"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" private void checkSqliFailed(FeedbackResponse fr) {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" // If SQLi is successful, feedback responses would have been deleted from db."},{"lineNumber":152,"author":{"gitId":"-"},"content":" // So get will return null."},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertNotNull(frDb.getFeedbackResponse(fr.getId()));"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":157,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetFeedbackResponsesFromGiverForCourse() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in GetFeedbackResponsesFromGiverForCourse, courseId param\");"},{"lineNumber":161,"author":{"gitId":"-"},"content":" String courseId \u003d \"\u0027; DELETE FROM feedback_responses;--\";"},{"lineNumber":162,"author":{"gitId":"-"},"content":" frDb.getFeedbackResponsesFromGiverForCourse(courseId, \"\");"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":168,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetFeedbackResponsesForRecipientForCourse() {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in GetFeedbackResponsesForRecipientForCourse, courseId param\");"},{"lineNumber":172,"author":{"gitId":"-"},"content":" String courseId \u003d \"\u0027; DELETE FROM feedback_responses;--\";"},{"lineNumber":173,"author":{"gitId":"-"},"content":" frDb.getFeedbackResponsesForRecipientForCourse(courseId, \"\");"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":179,"author":{"gitId":"-"},"content":" public void testSqlInjectionInGetFeedbackResponsesFromGiverForQuestion() {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in GetFeedbackResponsesFromGiverForQuestion, giverEmail param\");"},{"lineNumber":183,"author":{"gitId":"-"},"content":" String giverEmail \u003d \"\u0027;/**/DELETE/**/FROM/**/feedback_responses;--@gmail.com\";"},{"lineNumber":184,"author":{"gitId":"-"},"content":" frDb.getFeedbackResponsesFromGiverForQuestion(fr.getId(), giverEmail);"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public void testSqlInjectionInHasResponsesFromGiverInSession() {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in HasResponsesFromGiverInSession, giver param\");"},{"lineNumber":194,"author":{"gitId":"-"},"content":" String giver \u003d \"\u0027; DELETE FROM feedback_responses;--\";"},{"lineNumber":195,"author":{"gitId":"-"},"content":" frDb.hasResponsesFromGiverInSession(giver, \"\", \"\");"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" }"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":201,"author":{"gitId":"-"},"content":" public void testSqlInjectionInHasResponsesForCourse() {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" ______TS(\"SQL Injection test in HasResponsesForCourse, courseId param\");"},{"lineNumber":205,"author":{"gitId":"-"},"content":" String courseId \u003d \"\u0027; DELETE FROM feedback_responses;--\";"},{"lineNumber":206,"author":{"gitId":"-"},"content":" frDb.hasResponsesForCourse(courseId);"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":212,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCreateFeedbackResponse() throws Exception {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" Section s \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":217,"author":{"gitId":"-"},"content":" String dummyUuid \u003d \"00000000-0000-4000-8000-000000000001\";"},{"lineNumber":218,"author":{"gitId":"-"},"content":" FeedbackResponseDetails frd \u003d new FeedbackTextResponseDetails();"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027, \" + dummyUuid + \", \" + dummyUuid + \"); DELETE FROM feedback_responses;--\";"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" FeedbackResponse newFr \u003d new FeedbackTextResponse(fq, \"\", s, sqli, s, frd);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" frDb.createFeedbackResponse(newFr);"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":229,"author":{"gitId":"-"},"content":" public void testSqlInjectionInCpdateFeedbackResponse() throws Exception {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d prepareSqlInjectionTest();"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" String sqli \u003d \"\u0027\u0027); DELETE FROM feedback_response_comments;--\";"},{"lineNumber":233,"author":{"gitId":"-"},"content":" fr.setGiver(sqli);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" frDb.updateFeedbackResponse(fr);"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" checkSqliFailed(fr);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForRecipientForQuestion_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question not found\");"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" String recipient \u003d \"student1@teammates.tmt\";"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" UUID nonexistentQuestionId \u003d UUID.fromString(\"11110000-0000-0000-0000-000000000000\");"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e results \u003d frDb.getFeedbackResponsesForRecipientForQuestion(nonexistentQuestionId, recipient);"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist\");"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion questionWithNoResponses \u003d testDataBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForRecipientForQuestion(questionWithNoResponses.getId(), recipient);"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForRecipientForQuestion_matchFound_success() {"},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" ______TS(\"Matching responses exist\");"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" String recipient \u003d \"student2@teammates.tmt\";"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expected \u003d List.of("},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ1\")"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e actual \u003d frDb.getFeedbackResponsesForRecipientForQuestion(question.getId(), recipient);"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForSessionInSection_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" String section3 \u003d testDataBundle.sections.get(\"section3InCourse1\").getName();"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" FeedbackSession session \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":" String courseId \u003d session.getCourse().getId();"},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for giver section\");"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.GIVER;"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e results \u003d frDb.getFeedbackResponsesForSessionInSection("},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" session, courseId, section3, fetchType);"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for recipient section\");"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.RECEIVER;"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForSessionInSection(session, courseId, section3, fetchType);"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for both giver and recipient section\");"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForSessionInSection(session, courseId, section3, fetchType);"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForSessionInSection_matchFound_success() {"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" Course course \u003d testDataBundle.courses.get(\"course1\");"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" FeedbackSession session1 \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match giver section 1 in session 1\");"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.GIVER;"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expected \u003d List.of("},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ1\"),"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ1\"),"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ2\"),"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ2\"),"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ3\"),"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\"),"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ2\")"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e actual \u003d frDb.getFeedbackResponsesForSessionInSection("},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" session1, course.getId(), section1.getName(), fetchType);"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match recipient section 2 in session 1\");"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.RECEIVER;"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\"),"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ2\"),"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForSessionInSection(session1, course.getId(),"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" section2.getName(), fetchType);"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match both giver and recipient section 2 in session 1\");"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForSessionInSection(session1, course.getId(),"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" section2.getName(), fetchType);"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForQuestionInSection_matchNotFound_shouldReturnEmptyList() {"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" String section1 \u003d testDataBundle.sections.get(\"section1InCourse1\").getName();"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" String section3 \u003d testDataBundle.sections.get(\"section3InCourse1\").getName();"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" ______TS(\"Question not found\");"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":" UUID nonexistentQuestionId \u003d UUID.fromString(\"11110000-0000-0000-0000-000000000000\");"},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e results \u003d frDb.getFeedbackResponsesForQuestionInSection(nonexistentQuestionId,"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" section1, fetchType);"},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for giver section\");"},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" UUID questionId \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\").getId();"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.GIVER;"},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForQuestionInSection(questionId, section3, fetchType);"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for recipient section\");"},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.RECEIVER;"},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForQuestionInSection(questionId, section3, fetchType);"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" ______TS(\"No matching responses exist for both giver and recipient section\");"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":" results \u003d frDb.getFeedbackResponsesForQuestionInSection(questionId, section3, fetchType);"},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" assertEquals(0, results.size());"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":362,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":363,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForQuestionInSection_matchFound_success() {"},{"lineNumber":364,"author":{"gitId":"xenosf"},"content":" Section section1 \u003d testDataBundle.sections.get(\"section1InCourse1\");"},{"lineNumber":365,"author":{"gitId":"xenosf"},"content":" Section section2 \u003d testDataBundle.sections.get(\"section2InCourse1\");"},{"lineNumber":366,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question1 \u003d testDataBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":367,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":368,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match giver section 1 for Q1\");"},{"lineNumber":369,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.GIVER;"},{"lineNumber":370,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expected \u003d List.of("},{"lineNumber":371,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ1\"),"},{"lineNumber":372,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ1\"),"},{"lineNumber":373,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\")"},{"lineNumber":374,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":375,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e actual \u003d frDb.getFeedbackResponsesForQuestionInSection(question1.getId(),"},{"lineNumber":376,"author":{"gitId":"xenosf"},"content":" section1.getName(), fetchType);"},{"lineNumber":377,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":378,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":379,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match recipient section 2 for Q1\");"},{"lineNumber":380,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.RECEIVER;"},{"lineNumber":381,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":382,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\"),"},{"lineNumber":383,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":384,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":385,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForQuestionInSection(question1.getId(), section2.getName(), fetchType);"},{"lineNumber":386,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":387,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":388,"author":{"gitId":"xenosf"},"content":" ______TS(\"Match both giver and recipient section 2 for Q1\");"},{"lineNumber":389,"author":{"gitId":"xenosf"},"content":" fetchType \u003d FeedbackResultFetchType.BOTH;"},{"lineNumber":390,"author":{"gitId":"xenosf"},"content":" expected \u003d List.of("},{"lineNumber":391,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":392,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":393,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForQuestionInSection(question1.getId(), section2.getName(), fetchType);"},{"lineNumber":394,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":395,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":396,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":397,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":398,"author":{"gitId":"xenosf"},"content":" public void testGetFeedbackResponsesForSession() {"},{"lineNumber":399,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session has responses\");"},{"lineNumber":400,"author":{"gitId":"xenosf"},"content":" FeedbackSession sessionWithResponses \u003d testDataBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":401,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e expected \u003d List.of("},{"lineNumber":402,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ1\"),"},{"lineNumber":403,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ1\"),"},{"lineNumber":404,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ2\"),"},{"lineNumber":405,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response2ForQ2\"),"},{"lineNumber":406,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response1ForQ3\"),"},{"lineNumber":407,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ1\"),"},{"lineNumber":408,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response3ForQ2\"),"},{"lineNumber":409,"author":{"gitId":"xenosf"},"content":" testDataBundle.feedbackResponses.get(\"response4ForQ1\")"},{"lineNumber":410,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":411,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e actual \u003d frDb.getFeedbackResponsesForSession(sessionWithResponses,"},{"lineNumber":412,"author":{"gitId":"xenosf"},"content":" sessionWithResponses.getCourse().getId());"},{"lineNumber":413,"author":{"gitId":"xenosf"},"content":" assertListResponsesEqual(expected, actual);"},{"lineNumber":414,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":415,"author":{"gitId":"xenosf"},"content":" ______TS(\"Session has no responses\");"},{"lineNumber":416,"author":{"gitId":"xenosf"},"content":" FeedbackSession sessionWithoutResponses \u003d testDataBundle.feedbackSessions.get("},{"lineNumber":417,"author":{"gitId":"xenosf"},"content":" \"unpublishedSession1InTypicalCourse\");"},{"lineNumber":418,"author":{"gitId":"xenosf"},"content":" actual \u003d frDb.getFeedbackResponsesForSession(sessionWithoutResponses, sessionWithResponses.getCourse().getId());"},{"lineNumber":419,"author":{"gitId":"xenosf"},"content":" assertEquals(0, actual.size());"},{"lineNumber":420,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":421,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":422,"author":{"gitId":"xenosf"},"content":" private void assertListResponsesEqual(List\u003cFeedbackResponse\u003e expected, List\u003cFeedbackResponse\u003e actual) {"},{"lineNumber":423,"author":{"gitId":"xenosf"},"content":" assertEquals(\"List size not equal.\", expected.size(), actual.size());"},{"lineNumber":424,"author":{"gitId":"xenosf"},"content":" assertTrue("},{"lineNumber":425,"author":{"gitId":"xenosf"},"content":" String.format(\"List contents are not equal.%nExpected: %s,%nActual: %s\","},{"lineNumber":426,"author":{"gitId":"xenosf"},"content":" expected.toString(), actual.toString()),"},{"lineNumber":427,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(expected).equals(new HashSet\u003c\u003e(actual)));"},{"lineNumber":428,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":215,"-":214}},{"path":"src/it/java/teammates/it/storage/sqlsearch/AccountRequestSearchIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.storage.sqlsearch;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlapi.AccountRequestsDb;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.test.AssertHelper;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.test.TestProperties;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link AccountRequestsDb},"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":" * {@link teammates.storage.search.AccountRequestSearchDocument}."},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":"public class AccountRequestSearchIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" private final SqlDataBundle typicalBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" private final AccountRequestsDb accountRequestsDb \u003d AccountRequestsDb.inst();"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" putDocuments(typicalBundle);"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" public void allTests() throws Exception {"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1General \u003d typicalBundle.accountRequests.get(\"instructor1\");"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2General \u003d typicalBundle.accountRequests.get(\"instructor2\");"},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1InCourse1 \u003d typicalBundle.accountRequests.get(\"instructor1OfCourse1\");"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2InCourse1 \u003d typicalBundle.accountRequests.get(\"instructor2OfCourse1\");"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1InCourse2 \u003d typicalBundle.accountRequests.get(\"instructor1OfCourse2\");"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2InCourse2 \u003d typicalBundle.accountRequests.get(\"instructor2OfCourse2\");"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1InCourse3 \u003d typicalBundle.accountRequests.get(\"instructor1OfCourse3\");"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2InCourse3 \u003d typicalBundle.accountRequests.get(\"instructor2OfCourse3\");"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" AccountRequest insInUnregCourse \u003d typicalBundle.accountRequests.get(\"instructor3\");"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" AccountRequest unregisteredInstructor1 \u003d"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" typicalBundle.accountRequests.get(\"unregisteredInstructor1\");"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" AccountRequest unregisteredInstructor2 \u003d"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" typicalBundle.accountRequests.get(\"unregisteredInstructor2\");"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; query string does not match anyone\");"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequest\u003e results \u003d"},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.searchAccountRequestsInWholeSystem(\"non-existent\");"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results);"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; empty query string does not match anyone\");"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\");"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results);"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; query string matches some account requests\");"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"Instructor 1\\\"\");"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins1InCourse1, ins1InCourse2, ins1InCourse3, unregisteredInstructor1, ins1General);"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; query string should be case-insensitive\");"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"InStRuCtOr 2\\\"\");"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins2InCourse1, ins2InCourse2, ins2InCourse3, unregisteredInstructor2, ins2General);"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; account requests should be searchable by their name\");"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"Instructor 3 of CourseNoRegister\\\"\");"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, insInUnregCourse);"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; account requests should be searchable by their email\");"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"instr2@course2.tmt\");"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins2InCourse2);"},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; account requests should be searchable by their institute\");"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"TEAMMATES Test Institute 2\\\"\");"},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, unregisteredInstructor2);"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; unregistered account requests should be searchable\");"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"unregisteredinstructor1@gmail.tmt\\\"\");"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, unregisteredInstructor1);"},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; deleted account requests no longer searchable\");"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.deleteAccountRequest(ins1InCourse1);"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"instructor 1\\\"\");"},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins1InCourse2, ins1InCourse3, unregisteredInstructor1, ins1General);"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; account requests created without searchability unsearchable\");"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.createAccountRequest(ins1InCourse1);"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"instructor 1\\\"\");"},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins1InCourse2, ins1InCourse3, unregisteredInstructor1, ins1General);"},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" ______TS(\"success: search for account requests; deleting account request without deleting document:\""},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" + \"document deleted during search, account request unsearchable\");"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.deleteAccountRequest(ins2InCourse1);"},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"instructor 2\\\"\");"},{"lineNumber":114,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins2InCourse2, ins2InCourse3, unregisteredInstructor2, ins2General);"},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":" public void testSearchAccountRequest_deleteAfterSearch_shouldNotBeSearchable() throws Exception {"},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins1InCourse2 \u003d typicalBundle.accountRequests.get(\"instructor1OfCourse2\");"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" AccountRequest ins2InCourse2 \u003d typicalBundle.accountRequests.get(\"instructor2OfCourse2\");"},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" // there is search result before deletion"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequest\u003e results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"of Course 2\\\"\");"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins1InCourse2, ins2InCourse2);"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":" // delete an account request"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.deleteAccountRequest(ins1InCourse2);"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" // the search result will change"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"of Course 2\\\"\");"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, ins2InCourse2);"},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":" // delete all account requests"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" accountRequestsDb.deleteAccountRequest(ins2InCourse2);"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" // there should be no search result"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" results \u003d accountRequestsDb.searchAccountRequestsInWholeSystem(\"\\\"of Course 2\\\"\");"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results);"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" public void testSearchAccountRequest_noSearchService_shouldThrowException() {"},{"lineNumber":147,"author":{"gitId":"domoberzin"},"content":" if (TestProperties.isSearchServiceActive()) {"},{"lineNumber":148,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":151,"author":{"gitId":"domoberzin"},"content":" assertThrows(SearchServiceException.class,"},{"lineNumber":152,"author":{"gitId":"domoberzin"},"content":" () -\u003e accountRequestsDb.searchAccountRequestsInWholeSystem(\"anything\"));"},{"lineNumber":153,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":154,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":155,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":" * Verifies that search results match with expected output."},{"lineNumber":157,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":158,"author":{"gitId":"domoberzin"},"content":" * @param actual the results from the search query."},{"lineNumber":159,"author":{"gitId":"domoberzin"},"content":" * @param expected the expected results for the search query."},{"lineNumber":160,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":161,"author":{"gitId":"domoberzin"},"content":" private static void verifySearchResults(List\u003cAccountRequest\u003e actual,"},{"lineNumber":162,"author":{"gitId":"domoberzin"},"content":" AccountRequest... expected) {"},{"lineNumber":163,"author":{"gitId":"domoberzin"},"content":" assertEquals(expected.length, actual.size());"},{"lineNumber":164,"author":{"gitId":"domoberzin"},"content":" AssertHelper.assertSameContentIgnoreOrder(Arrays.asList(expected), actual);"},{"lineNumber":165,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":166,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":167,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":167}},{"path":"src/it/java/teammates/it/storage/sqlsearch/InstructorSearchIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.storage.sqlsearch;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.UsersDb;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.test.AssertHelper;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.test.TestProperties;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link UsersDb},"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * {@link teammates.storage.sqlsearch.InstructorSearchDocument}."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class InstructorSearchIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final SqlDataBundle typicalBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private final UsersDb usersDb \u003d UsersDb.inst();"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":29,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":31,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" putDocuments(typicalBundle);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void allTests() throws Exception {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" Instructor ins1InCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":43,"author":{"gitId":"-"},"content":" Instructor ins2InCourse1 \u003d typicalBundle.instructors.get(\"instructor2OfCourse1\");"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" Instructor ins1InCourse4 \u003d typicalBundle.instructors.get(\"instructor1OfCourse4\");"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" Instructor ins2InCourse4 \u003d typicalBundle.instructors.get(\"instructor2YetToJoinCourse4\");"},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" Instructor ins3InCourse4 \u003d typicalBundle.instructors.get(\"instructor3YetToJoinCourse4\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":" Instructor insInArchivedCourse \u003d typicalBundle.instructors.get(\"instructorOfArchivedCourse\");"},{"lineNumber":48,"author":{"gitId":"-"},"content":" Instructor insInUnregCourse \u003d typicalBundle.instructors.get(\"instructorOfUnregisteredCourse\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" Instructor insUniqueDisplayName \u003d typicalBundle.instructors.get(\"instructorOfCourse2WithUniqueDisplayName\");"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Instructor ins1InCourse3 \u003d typicalBundle.instructors.get(\"instructor1OfCourse3\");"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" Instructor unregisteredInsInCourse1 \u003d typicalBundle.instructors.get(\"unregisteredInstructorOfCourse1\");"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; query string does not match anyone\");"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e results \u003d usersDb.searchInstructorsInWholeSystem(\"non-existent\");"},{"lineNumber":56,"author":{"gitId":"-"},"content":" verifySearchResults(results);"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; empty query string does not match anyone\");"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\");"},{"lineNumber":61,"author":{"gitId":"-"},"content":" verifySearchResults(results);"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; query string matches some instructors\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor of\\\"\");"},{"lineNumber":66,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInArchivedCourse, insInUnregCourse, insUniqueDisplayName);"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; query string should be case-insensitive\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"InStRuCtOr 2\\\"\");"},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, ins2InCourse1, ins2InCourse4);"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors in archived courses should be included\");"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor Of Archived Course\\\"\");"},{"lineNumber":76,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInArchivedCourse);"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" ______TS("},{"lineNumber":79,"author":{"gitId":"-"},"content":" \"success: search for instructors in whole system; instructors in unregistered course should be included\");"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor Of Unregistered Course\\\"\");"},{"lineNumber":82,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInUnregCourse);"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by course id\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, ins1InCourse1, ins2InCourse1, unregisteredInsInCourse1);"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by course name\");"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Typical Course 1\\\"\");"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, ins1InCourse1, ins2InCourse1, unregisteredInsInCourse1);"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by their name\");"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor Of Unregistered Course\\\"\");"},{"lineNumber":97,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInUnregCourse);"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by their email\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"instr2@teammates.tmt\");"},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, ins2InCourse1, ins2InCourse4);"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by their role\");"},{"lineNumber":105,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Co-owner\\\"\");"},{"lineNumber":106,"author":{"gitId":"-"},"content":" verifySearchResults(results, ins1InCourse1, insInArchivedCourse,"},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" insInUnregCourse, insUniqueDisplayName, ins1InCourse3,"},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":" ins1InCourse4, ins2InCourse4, ins3InCourse4);"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors should be searchable by displayed name\");"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" String displayName \u003d insUniqueDisplayName.getDisplayName();"},{"lineNumber":113,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(displayName);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" verifySearchResults(results, insUniqueDisplayName);"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; deleted instructors no longer searchable\");"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" usersDb.deleteUser(insUniqueDisplayName);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor of\\\"\");"},{"lineNumber":120,"author":{"gitId":"-"},"content":" verifySearchResults(results, insInArchivedCourse, insInUnregCourse);"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" // This method used to use usersDb.putEntity, not sure if the .createInstructor method has the same functionality"},{"lineNumber":123,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; instructors created without searchability unsearchable\");"},{"lineNumber":124,"author":{"gitId":"-"},"content":" usersDb.createInstructor(insUniqueDisplayName);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor of\\\"\");"},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" verifySearchResults(results, insInArchivedCourse, insInUnregCourse, insUniqueDisplayName);"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" ______TS(\"success: search for instructors in whole system; deleting instructor without deleting document:\""},{"lineNumber":129,"author":{"gitId":"-"},"content":" + \"document deleted during search, instructor unsearchable\");"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" usersDb.deleteUser(ins1InCourse3);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"Instructor 1\\\"\");"},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, ins1InCourse1, ins1InCourse4);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":137,"author":{"gitId":"-"},"content":" public void testSearchInstructor_deleteAfterSearch_shouldNotBeSearchable() throws Exception {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" Instructor ins1InCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":143,"author":{"gitId":"-"},"content":" Instructor ins2InCourse1 \u003d typicalBundle.instructors.get(\"instructor2OfCourse1\");"},{"lineNumber":144,"author":{"gitId":"dishenggg"},"content":" Instructor unregisteredInsInCourse1 \u003d typicalBundle.instructors.get(\"unregisteredInstructorOfCourse1\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":147,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, ins1InCourse1, ins2InCourse1, unregisteredInsInCourse1);"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" usersDb.deleteUser(ins1InCourse1);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":151,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, ins2InCourse1, unregisteredInsInCourse1);"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" // This used to test .deleteInstructors, but we don\u0027t seem to have a similar method to delete all users in course"},{"lineNumber":154,"author":{"gitId":"-"},"content":" usersDb.deleteUser(ins2InCourse1);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":156,"author":{"gitId":"dishenggg"},"content":" verifySearchResults(results, unregisteredInsInCourse1);"},{"lineNumber":157,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":158,"author":{"gitId":"dishenggg"},"content":" usersDb.deleteUser(unregisteredInsInCourse1);"},{"lineNumber":159,"author":{"gitId":"dishenggg"},"content":" results \u003d usersDb.searchInstructorsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":160,"author":{"gitId":"-"},"content":" verifySearchResults(results);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":164,"author":{"gitId":"-"},"content":" public void testSearchInstructor_noSearchService_shouldThrowException() {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" if (TestProperties.isSearchServiceActive()) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertThrows(SearchServiceException.class,"},{"lineNumber":170,"author":{"gitId":"-"},"content":" () -\u003e usersDb.searchInstructorsInWholeSystem(\"anything\"));"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * Verifies that search results match with expected output."},{"lineNumber":175,"author":{"gitId":"-"},"content":" *"},{"lineNumber":176,"author":{"gitId":"-"},"content":" * @param actual the results from the search query."},{"lineNumber":177,"author":{"gitId":"-"},"content":" * @param expected the expected results for the search query."},{"lineNumber":178,"author":{"gitId":"-"},"content":" */"},{"lineNumber":179,"author":{"gitId":"-"},"content":" private static void verifySearchResults(List\u003cInstructor\u003e actual,"},{"lineNumber":180,"author":{"gitId":"-"},"content":" Instructor... expected) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertEquals(expected.length, actual.size());"},{"lineNumber":182,"author":{"gitId":"-"},"content":" AssertHelper.assertSameContentIgnoreOrder(Arrays.asList(expected), actual);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":1,"yuanxi1":8,"dishenggg":10,"-":165}},{"path":"src/it/java/teammates/it/storage/sqlsearch/StudentSearchIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"package teammates.it.storage.sqlsearch;"},{"lineNumber":2,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":6,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":9,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"yuanxi1"},"content":"import teammates.it.test.BaseTestCaseWithSqlDatabaseAccess;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlapi.UsersDb;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":15,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":"import teammates.test.AssertHelper;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.test.TestProperties;"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"yuanxi1"},"content":" * SUT: {@link UsersDb},"},{"lineNumber":21,"author":{"gitId":"yuanxi1"},"content":" * {@link teammates.storage.sqlsearch.InstructorSearchDocument}."},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":"public class StudentSearchIT extends BaseTestCaseWithSqlDatabaseAccess {"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":25,"author":{"gitId":"yuanxi1"},"content":" private final SqlDataBundle typicalBundle \u003d getTypicalSqlDataBundle();"},{"lineNumber":26,"author":{"gitId":"yuanxi1"},"content":" private final UsersDb usersDb \u003d UsersDb.inst();"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"yuanxi1"},"content":" @BeforeMethod"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" protected void setUp() throws Exception {"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":" super.setUp();"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":33,"author":{"gitId":"yuanxi1"},"content":" putDocuments(typicalBundle);"},{"lineNumber":34,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.flushSession();"},{"lineNumber":35,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" public void allTests() throws Exception {"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" Student stu2InCourse1 \u003d typicalBundle.students.get(\"student2InCourse1\");"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" Student stu3InCourse1 \u003d typicalBundle.students.get(\"student3InCourse1\");"},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":" Student stu4InCourse1 \u003d typicalBundle.students.get(\"student4InCourse1\");"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse2 \u003d typicalBundle.students.get(\"student1InCourse2\");"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" Student unregisteredStuInCourse1 \u003d typicalBundle.students.get(\"unregisteredStudentInCourse1\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" Student stu1InCourse3 \u003d typicalBundle.students.get(\"student1InCourse3\");"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse4 \u003d typicalBundle.students.get(\"student1InCourse4\");"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" Student stuOfArchivedCourse \u003d typicalBundle.students.get(\"studentOfArchivedCourse\");"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" Instructor ins1InCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" Instructor ins1InCourse4 \u003d typicalBundle.instructors.get(\"instructor1OfCourse4\");"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; query string does not match anyone\");"},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudent\u003e results \u003d usersDb.searchStudentsInWholeSystem(\"non-existent\");"},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results);"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; empty query string does not match anyone\");"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\");"},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results);"},{"lineNumber":65,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":66,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; query string matches some students\");"},{"lineNumber":67,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"student1\\\"\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" verifySearchResults(results, stu1InCourse1, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; query string should be case-insensitive\");"},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"sTuDeNt1\\\"\");"},{"lineNumber":74,"author":{"gitId":"-"},"content":" verifySearchResults(results, stu1InCourse1, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students in archived courses should be included\");"},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"Student In Archived Course\\\"\");"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, stuOfArchivedCourse);"},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students should be searchable by course id\");"},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"course-1\\\"\");"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":" verifySearchResults(results, stu1InCourse1, stu2InCourse1, stu3InCourse1, stu4InCourse1, unregisteredStuInCourse1);"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students should be searchable by course name\");"},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"Typical Course 1\\\"\");"},{"lineNumber":89,"author":{"gitId":"marquestye"},"content":" verifySearchResults(results, stu1InCourse1, stu2InCourse1, stu3InCourse1, stu4InCourse1, unregisteredStuInCourse1);"},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students should be searchable by their name\");"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"student3 In Course1\\\"\");"},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(results, stu3InCourse1);"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; students should be searchable by their email\");"},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"student1@teammates.tmt\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" verifySearchResults(results, stu1InCourse1, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students; query string matches some students; results restricted \""},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" + \"based on instructor\u0027s privilege\");"},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":" List\u003cInstructor\u003e ins1OfCourse1 \u003d Arrays.asList("},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" new Instructor[] { ins1InCourse1 });"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":" List\u003cInstructor\u003e ins1OfCourse4 \u003d Arrays.asList("},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" new Instructor[] { ins1InCourse4 });"},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudent\u003e studentList \u003d usersDb.searchStudents(\"student1\", ins1OfCourse1);"},{"lineNumber":109,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":110,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(studentList, stu1InCourse1);"},{"lineNumber":111,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":112,"author":{"gitId":"yuanxi1"},"content":" studentList \u003d usersDb.searchStudents(\"student1\", ins1OfCourse4);"},{"lineNumber":113,"author":{"gitId":"yuanxi1"},"content":" verifySearchResults(studentList, stu1InCourse4);"},{"lineNumber":114,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":115,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: search for students in whole system; deleted students no longer searchable\");"},{"lineNumber":116,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":117,"author":{"gitId":"yuanxi1"},"content":" usersDb.deleteUser(stu1InCourse1);"},{"lineNumber":118,"author":{"gitId":"yuanxi1"},"content":" results \u003d usersDb.searchStudentsInWholeSystem(\"\\\"student1\\\"\");"},{"lineNumber":119,"author":{"gitId":"-"},"content":" verifySearchResults(results, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":120,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":121,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":123,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":124,"author":{"gitId":"yuanxi1"},"content":" public void testSearchStudent_deleteAfterSearch_shouldNotBeSearchable() throws Exception {"},{"lineNumber":125,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":126,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":128,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":129,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":130,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse2 \u003d typicalBundle.students.get(\"student1InCourse2\");"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Student stu1InCourse3 \u003d typicalBundle.students.get(\"student1InCourse3\");"},{"lineNumber":132,"author":{"gitId":"yuanxi1"},"content":" Student stu1InCourse4 \u003d typicalBundle.students.get(\"student1InCourse4\");"},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":134,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudent\u003e studentList \u003d usersDb.searchStudentsInWholeSystem(\"student1\");"},{"lineNumber":135,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":136,"author":{"gitId":"yuanxi1"},"content":" // there is search result before deletion"},{"lineNumber":137,"author":{"gitId":"-"},"content":" verifySearchResults(studentList, stu1InCourse1, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":138,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":139,"author":{"gitId":"yuanxi1"},"content":" // delete a student"},{"lineNumber":140,"author":{"gitId":"yuanxi1"},"content":" usersDb.deleteUser(stu1InCourse1);"},{"lineNumber":141,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" // the search result will change"},{"lineNumber":143,"author":{"gitId":"yuanxi1"},"content":" studentList \u003d usersDb.searchStudentsInWholeSystem(\"student1\");"},{"lineNumber":144,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" verifySearchResults(studentList, stu1InCourse2, stu1InCourse3, stu1InCourse4);"},{"lineNumber":146,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":" // delete all students in course 2"},{"lineNumber":148,"author":{"gitId":"yuanxi1"},"content":" usersDb.deleteUser(stu1InCourse2);"},{"lineNumber":149,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":150,"author":{"gitId":"yuanxi1"},"content":" // the search result will change"},{"lineNumber":151,"author":{"gitId":"yuanxi1"},"content":" studentList \u003d usersDb.searchStudentsInWholeSystem(\"student1\");"},{"lineNumber":152,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" verifySearchResults(studentList, stu1InCourse3, stu1InCourse4);"},{"lineNumber":154,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":155,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":156,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":157,"author":{"gitId":"yuanxi1"},"content":" public void testSearchStudent_noSearchService_shouldThrowException() {"},{"lineNumber":158,"author":{"gitId":"yuanxi1"},"content":" if (TestProperties.isSearchServiceActive()) {"},{"lineNumber":159,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":160,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":161,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":162,"author":{"gitId":"yuanxi1"},"content":" assertThrows(SearchServiceException.class,"},{"lineNumber":163,"author":{"gitId":"yuanxi1"},"content":" () -\u003e usersDb.searchStudentsInWholeSystem(\"anything\"));"},{"lineNumber":164,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":165,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":" * Verifies that search results match with expected output."},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":" *"},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" * @param actual the results from the search query."},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" * @param expected the expected results for the search query."},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":172,"author":{"gitId":"yuanxi1"},"content":" private static void verifySearchResults(List\u003cStudent\u003e actual,"},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":" Student... expected) {"},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":" assertEquals(expected.length, actual.size());"},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" AssertHelper.assertSameContentIgnoreOrder(Arrays.asList(expected), actual);"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":"}"}],"authorContributionMap":{"yuanxi1":165,"marquestye":3,"-":9}},{"path":"src/it/java/teammates/it/test/BaseTestCaseWithSqlDatabaseAccess.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testcontainers.containers.PostgreSQLContainer;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterSuite;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeSuite;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import com.google.cloud.datastore.DatastoreOptions;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import com.google.cloud.datastore.testing.LocalDatastoreHelper;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.ObjectifyFactory;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.ObjectifyService;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.util.Closeable;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.sqllogic.api.Logic;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.LogicStarter;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.api.OfyHelper;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.BaseEntity;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.UsageStatistics;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.AccountRequestSearchManager;"},{"lineNumber":47,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.InstructorSearchManager;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.SearchManagerFactory;"},{"lineNumber":49,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.StudentSearchManager;"},{"lineNumber":50,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * Base test case for tests that access the database."},{"lineNumber":54,"author":{"gitId":"-"},"content":" */"},{"lineNumber":55,"author":{"gitId":"-"},"content":"@Test(singleThreaded \u003d true)"},{"lineNumber":56,"author":{"gitId":"-"},"content":"public class BaseTestCaseWithSqlDatabaseAccess extends BaseTestCase {"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" private static final PostgreSQLContainer\u003c?\u003e PGSQL \u003d new PostgreSQLContainer\u003c\u003e(\"postgres:15.1-alpine\");"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" private static final LocalDatastoreHelper LOCAL_DATASTORE_HELPER \u003d LocalDatastoreHelper.newBuilder()"},{"lineNumber":61,"author":{"gitId":"-"},"content":" .setConsistency(1.0)"},{"lineNumber":62,"author":{"gitId":"-"},"content":" .setPort(TestProperties.TEST_LOCALDATASTORE_PORT)"},{"lineNumber":63,"author":{"gitId":"-"},"content":" .setStoreOnDisk(false)"},{"lineNumber":64,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" private final Logic logic \u003d Logic.inst();"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" private Closeable closeable;"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" @BeforeSuite"},{"lineNumber":71,"author":{"gitId":"-"},"content":" protected static void setUpSuite() throws Exception {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" PGSQL.start();"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // Temporarily disable migration utility"},{"lineNumber":74,"author":{"gitId":"-"},"content":" // DbMigrationUtil.resetDb(PGSQL.getJdbcUrl(), PGSQL.getUsername(),"},{"lineNumber":75,"author":{"gitId":"-"},"content":" // PGSQL.getPassword());"},{"lineNumber":76,"author":{"gitId":"-"},"content":" HibernateUtil.buildSessionFactory(PGSQL.getJdbcUrl(), PGSQL.getUsername(), PGSQL.getPassword());"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" LogicStarter.initializeDependencies();"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerAccountRequestSearchManager("},{"lineNumber":81,"author":{"gitId":"-"},"content":" new AccountRequestSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":82,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerInstructorSearchManager("},{"lineNumber":83,"author":{"gitId":"-"},"content":" new InstructorSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":84,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerStudentSearchManager("},{"lineNumber":85,"author":{"gitId":"-"},"content":" new StudentSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" // TODO: remove after migration, needed for dual db support"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" teammates.storage.search.SearchManagerFactory.registerAccountRequestSearchManager("},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.search.AccountRequestSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" teammates.storage.search.SearchManagerFactory.registerInstructorSearchManager("},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.search.InstructorSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" teammates.storage.search.SearchManagerFactory.registerStudentSearchManager("},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.search.StudentSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" teammates.logic.core.LogicStarter.initializeDependencies();"},{"lineNumber":97,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.start();"},{"lineNumber":98,"author":{"gitId":"-"},"content":" DatastoreOptions options \u003d LOCAL_DATASTORE_HELPER.getOptions();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" ObjectifyService.init(new ObjectifyFactory("},{"lineNumber":100,"author":{"gitId":"-"},"content":" options.getService()));"},{"lineNumber":101,"author":{"gitId":"-"},"content":" OfyHelper.registerEntityClasses();"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void setupClass() {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" closeable \u003d ObjectifyService.begin();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public void tearDownClass() {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" closeable.close();"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" SearchManagerFactory.getAccountRequestSearchManager().resetCollections();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" SearchManagerFactory.getInstructorSearchManager().resetCollections();"},{"lineNumber":116,"author":{"gitId":"-"},"content":" SearchManagerFactory.getStudentSearchManager().resetCollections();"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" @AfterSuite"},{"lineNumber":120,"author":{"gitId":"-"},"content":" protected static void tearDownSuite() throws Exception {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" PGSQL.close();"},{"lineNumber":122,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.stop();"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":126,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" HibernateUtil.beginTransaction();"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" @AfterMethod"},{"lineNumber":131,"author":{"gitId":"-"},"content":" protected void tearDown() {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" HibernateUtil.rollbackTransaction();"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":136,"author":{"gitId":"-"},"content":" protected String getTestDataFolder() {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return TestProperties.TEST_DATA_FOLDER;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Persist data bundle into the db."},{"lineNumber":142,"author":{"gitId":"-"},"content":" */"},{"lineNumber":143,"author":{"gitId":"-"},"content":" protected void persistDataBundle(SqlDataBundle dataBundle)"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" logic.persistDataBundle(dataBundle);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":149,"author":{"gitId":"-"},"content":" * Puts searchable documents from the data bundle to the solr database."},{"lineNumber":150,"author":{"gitId":"-"},"content":" */"},{"lineNumber":151,"author":{"gitId":"-"},"content":" protected void putDocuments(SqlDataBundle dataBundle) throws SearchServiceException {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" logic.putDocuments(dataBundle);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Verifies that two entities are equal."},{"lineNumber":157,"author":{"gitId":"-"},"content":" */"},{"lineNumber":158,"author":{"gitId":"-"},"content":" protected void verifyEquals(BaseEntity expected, BaseEntity actual) {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" if (expected instanceof Course) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" Course expectedCourse \u003d (Course) expected;"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Course actualCourse \u003d (Course) actual;"},{"lineNumber":162,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedCourse, actualCourse);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedCourse), JsonUtils.toJson(actualCourse));"},{"lineNumber":164,"author":{"gitId":"-"},"content":" } else if (expected instanceof DeadlineExtension) {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" DeadlineExtension expectedDeadlineExtension \u003d (DeadlineExtension) expected;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" DeadlineExtension actualDeadlineExtension \u003d (DeadlineExtension) actual;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedDeadlineExtension, actualDeadlineExtension);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedDeadlineExtension), JsonUtils.toJson(actualDeadlineExtension));"},{"lineNumber":169,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackSession) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" FeedbackSession expectedSession \u003d (FeedbackSession) expected;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" FeedbackSession actualSession \u003d (FeedbackSession) actual;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedSession, actualSession);"},{"lineNumber":173,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedSession), JsonUtils.toJson(actualSession));"},{"lineNumber":174,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackQuestion) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" FeedbackQuestion expectedQuestion \u003d (FeedbackQuestion) expected;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" FeedbackQuestion actualQuestion \u003d (FeedbackQuestion) actual;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedQuestion, actualQuestion);"},{"lineNumber":178,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedQuestion), JsonUtils.toJson(actualQuestion));"},{"lineNumber":179,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponse) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" FeedbackResponse expectedResponse \u003d (FeedbackResponse) expected;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" FeedbackResponse actualResponse \u003d (FeedbackResponse) actual;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedResponse, actualResponse);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedResponse), JsonUtils.toJson(actualResponse));"},{"lineNumber":184,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseComment) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" FeedbackResponseComment expectedComment \u003d (FeedbackResponseComment) expected;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" FeedbackResponseComment actualComment \u003d (FeedbackResponseComment) actual;"},{"lineNumber":187,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedComment, actualComment);"},{"lineNumber":188,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedComment), JsonUtils.toJson(actualComment));"},{"lineNumber":189,"author":{"gitId":"-"},"content":" } else if (expected instanceof Notification) {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" Notification expectedNotification \u003d (Notification) expected;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" Notification actualNotification \u003d (Notification) actual;"},{"lineNumber":192,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedNotification, actualNotification);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedNotification), JsonUtils.toJson(actualNotification));"},{"lineNumber":194,"author":{"gitId":"-"},"content":" } else if (expected instanceof Account) {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" Account expectedAccount \u003d (Account) expected;"},{"lineNumber":196,"author":{"gitId":"-"},"content":" Account actualAccount \u003d (Account) actual;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedAccount, actualAccount);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedAccount), JsonUtils.toJson(actualAccount));"},{"lineNumber":199,"author":{"gitId":"-"},"content":" } else if (expected instanceof AccountRequest) {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" AccountRequest expectedAccountRequest \u003d (AccountRequest) expected;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" AccountRequest actualAccountRequest \u003d (AccountRequest) actual;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedAccountRequest, actualAccountRequest);"},{"lineNumber":203,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedAccountRequest), JsonUtils.toJson(actualAccountRequest));"},{"lineNumber":204,"author":{"gitId":"-"},"content":" } else if (expected instanceof UsageStatistics) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" UsageStatistics expectedUsageStatistics \u003d (UsageStatistics) expected;"},{"lineNumber":206,"author":{"gitId":"-"},"content":" UsageStatistics actualUsageStatistics \u003d (UsageStatistics) actual;"},{"lineNumber":207,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedUsageStatistics, actualUsageStatistics);"},{"lineNumber":208,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedUsageStatistics), JsonUtils.toJson(actualUsageStatistics));"},{"lineNumber":209,"author":{"gitId":"-"},"content":" } else if (expected instanceof Instructor) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" Instructor expectedInstructor \u003d (Instructor) expected;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" Instructor actualInstructor \u003d (Instructor) actual;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedInstructor, actualInstructor);"},{"lineNumber":213,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedInstructor), JsonUtils.toJson(actualInstructor));"},{"lineNumber":214,"author":{"gitId":"-"},"content":" } else if (expected instanceof Student) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" Student expectedStudent \u003d (Student) expected;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" Student actualStudent \u003d (Student) actual;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedStudent, actualStudent);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedStudent), JsonUtils.toJson(actualStudent));"},{"lineNumber":219,"author":{"gitId":"-"},"content":" } else if (expected instanceof Section) {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" Section expectedSection \u003d (Section) expected;"},{"lineNumber":221,"author":{"gitId":"-"},"content":" Section actualSection \u003d (Section) actual;"},{"lineNumber":222,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedSection, actualSection);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedSection), JsonUtils.toJson(actualSection));"},{"lineNumber":224,"author":{"gitId":"-"},"content":" } else if (expected instanceof Team) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" Team expectedTeam \u003d (Team) expected;"},{"lineNumber":226,"author":{"gitId":"-"},"content":" Team actualTeam \u003d (Team) actual;"},{"lineNumber":227,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedTeam, actualTeam);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedTeam), JsonUtils.toJson(actualTeam));"},{"lineNumber":229,"author":{"gitId":"-"},"content":" } else if (expected instanceof ReadNotification) {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" ReadNotification expectedReadNotification \u003d (ReadNotification) expected;"},{"lineNumber":231,"author":{"gitId":"-"},"content":" ReadNotification actualReadNotification \u003d (ReadNotification) actual;"},{"lineNumber":232,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedReadNotification, actualReadNotification);"},{"lineNumber":233,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" fail(\"Unknown entity\");"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":239,"author":{"gitId":"-"},"content":" * Verifies that the given entity is present in the database."},{"lineNumber":240,"author":{"gitId":"-"},"content":" */"},{"lineNumber":241,"author":{"gitId":"-"},"content":" protected void verifyPresentInDatabase(BaseEntity expected) {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" assertNotNull(expected);"},{"lineNumber":243,"author":{"gitId":"-"},"content":" BaseEntity actual \u003d getEntity(expected);"},{"lineNumber":244,"author":{"gitId":"-"},"content":" verifyEquals(expected, actual);"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" private BaseEntity getEntity(BaseEntity entity) {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" if (entity instanceof Course) {"},{"lineNumber":249,"author":{"gitId":"-"},"content":" return logic.getCourse(((Course) entity).getId());"},{"lineNumber":250,"author":{"gitId":"-"},"content":" } else if (entity instanceof FeedbackSession) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" return logic.getFeedbackSession(((FeedbackSession) entity).getId());"},{"lineNumber":252,"author":{"gitId":"dishenggg"},"content":" } else if (entity instanceof FeedbackQuestion) {"},{"lineNumber":253,"author":{"gitId":"dishenggg"},"content":" return logic.getFeedbackQuestion(((FeedbackQuestion) entity).getId());"},{"lineNumber":254,"author":{"gitId":"-"},"content":" } else if (entity instanceof Account) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return logic.getAccount(((Account) entity).getId());"},{"lineNumber":256,"author":{"gitId":"-"},"content":" } else if (entity instanceof Notification) {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" return logic.getNotification(((Notification) entity).getId());"},{"lineNumber":258,"author":{"gitId":"-"},"content":" } else if (entity instanceof AccountRequest) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d (AccountRequest) entity;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" return logic.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":261,"author":{"gitId":"yuanxi1"},"content":" } else if (entity instanceof Instructor) {"},{"lineNumber":262,"author":{"gitId":"yuanxi1"},"content":" return logic.getInstructor(((Instructor) entity).getId());"},{"lineNumber":263,"author":{"gitId":"yuanxi1"},"content":" } else if (entity instanceof Student) {"},{"lineNumber":264,"author":{"gitId":"yuanxi1"},"content":" return logic.getStudent(((Student) entity).getId());"},{"lineNumber":265,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown entity type\");"},{"lineNumber":267,"author":{"gitId":"-"},"content":" }"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Course expected, Course actual) {"},{"lineNumber":271,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":272,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":273,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(DeadlineExtension expected, DeadlineExtension actual) {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":278,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":279,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackSession expected, FeedbackSession actual) {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":284,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":285,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackQuestion expected, FeedbackQuestion actual) {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":290,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":291,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":292,"author":{"gitId":"-"},"content":" }"},{"lineNumber":293,"author":{"gitId":"-"},"content":""},{"lineNumber":294,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackResponse expected, FeedbackResponse actual) {"},{"lineNumber":295,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":296,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":297,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackResponseComment expected, FeedbackResponseComment actual) {"},{"lineNumber":301,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":302,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":303,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Notification expected, Notification actual) {"},{"lineNumber":307,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":308,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":309,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":310,"author":{"gitId":"-"},"content":" }"},{"lineNumber":311,"author":{"gitId":"-"},"content":""},{"lineNumber":312,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Account expected, Account actual) {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":314,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":315,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":316,"author":{"gitId":"-"},"content":" }"},{"lineNumber":317,"author":{"gitId":"-"},"content":""},{"lineNumber":318,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(AccountRequest expected, AccountRequest actual) {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":320,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":321,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":322,"author":{"gitId":"-"},"content":" }"},{"lineNumber":323,"author":{"gitId":"-"},"content":""},{"lineNumber":324,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(UsageStatistics expected, UsageStatistics actual) {"},{"lineNumber":325,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":326,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":327,"author":{"gitId":"-"},"content":" }"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Instructor expected, Instructor actual) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":331,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":332,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Student expected, Student actual) {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":337,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":338,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":339,"author":{"gitId":"-"},"content":" }"},{"lineNumber":340,"author":{"gitId":"-"},"content":""},{"lineNumber":341,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Section expected, Section actual) {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":343,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":344,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(Team expected, Team actual) {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":349,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":350,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(ReadNotification expected, ReadNotification actual) {"},{"lineNumber":354,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":355,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":356,"author":{"gitId":"-"},"content":" }"},{"lineNumber":357,"author":{"gitId":"-"},"content":""},{"lineNumber":358,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":359,"author":{"gitId":"-"},"content":" * Generates a UUID that is different from the given {@code uuid}."},{"lineNumber":360,"author":{"gitId":"-"},"content":" */"},{"lineNumber":361,"author":{"gitId":"-"},"content":" protected UUID generateDifferentUuid(UUID uuid) {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" UUID ret \u003d UUID.randomUUID();"},{"lineNumber":363,"author":{"gitId":"-"},"content":" while (ret.equals(uuid)) {"},{"lineNumber":364,"author":{"gitId":"-"},"content":" ret \u003d UUID.randomUUID();"},{"lineNumber":365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":366,"author":{"gitId":"-"},"content":" return ret;"},{"lineNumber":367,"author":{"gitId":"-"},"content":" }"},{"lineNumber":368,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":8,"yuanxi1":4,"dishenggg":2,"-":354}},{"path":"src/it/java/teammates/it/ui/webapi/AccountRequestSearchIndexingWorkerActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.test.TestProperties;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.AccountRequestSearchIndexingWorkerAction;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link AccountRequestSearchIndexingWorkerAction}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":"public class AccountRequestSearchIndexingWorkerActionIT extends BaseActionIT\u003cAccountRequestSearchIndexingWorkerAction\u003e {"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"-"},"content":" protected String getActionUri() {"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" return Const.TaskQueue.ACCOUNT_REQUEST_SEARCH_INDEXING_WORKER_URL;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" protected String getRequestMethod() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return POST;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public void testExecute() throws Exception {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" AccountRequest accountRequest \u003d typicalBundle.accountRequests.get(\"instructor1\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" ______TS(\"account request not yet indexed should not be searchable\");"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequest\u003e accountRequestsList \u003d"},{"lineNumber":53,"author":{"gitId":"-"},"content":" logic.searchAccountRequestsInWholeSystem(accountRequest.getEmail());"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertEquals(0, accountRequestsList.size());"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" ______TS(\"account request indexed should be searchable\");"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" ParamsNames.INSTRUCTOR_EMAIL, accountRequest.getEmail(),"},{"lineNumber":60,"author":{"gitId":"-"},"content":" ParamsNames.INSTRUCTOR_INSTITUTION, accountRequest.getInstitute(),"},{"lineNumber":61,"author":{"gitId":"-"},"content":" };"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" AccountRequestSearchIndexingWorkerAction action \u003d getAction(submissionParams);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" getJsonResult(action);"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" accountRequestsList \u003d logic.searchAccountRequestsInWholeSystem(accountRequest.getEmail());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertEquals(1, accountRequestsList.size());"},{"lineNumber":68,"author":{"gitId":"-"},"content":" assertEquals(accountRequest.getName(), accountRequestsList.get(0).getName());"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" verifyOnlyAdminCanAccess(course);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":26,"-":52}},{"path":"src/it/java/teammates/it/ui/webapi/CreateInstructorActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.request.InstructorCreateRequest;"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.webapi.CreateInstructorAction;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.webapi.InvalidOperationException;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@link CreateInstructorAction}."},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"public class CreateInstructorActionIT extends BaseActionIT\u003cCreateInstructorAction\u003e {"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" @BeforeMethod"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" protected void setUp() throws Exception {"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" super.setUp();"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" HibernateUtil.flushSession();"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" protected String getActionUri() {"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" return Const.ResourceURIs.INSTRUCTOR;"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" protected String getRequestMethod() {"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" return POST;"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" protected void testExecute() {"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" // see test cases below"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" protected void testExecute_typicalCase_shouldPass() throws Exception {"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" loginAsAdmin();"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" Course course1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" String[] params \u003d {"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, course1.getId(),"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" InstructorCreateRequest instructorCreateRequest \u003d new InstructorCreateRequest("},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" \"00000000-0000-4000-8000-000000000006\", \"newInstructorName\","},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" \"newInstructorEmail@mail.com\", Const.InstructorPermissionRoleNames.INSTRUCTOR_PERMISSION_ROLE_COOWNER,"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" \"instructorDisplayName\", false);"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" CreateInstructorAction action \u003d getAction(instructorCreateRequest, params);"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" JsonResult response \u003d getJsonResult(action);"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" InstructorData instructorData \u003d (InstructorData) response.getOutput();"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" Instructor createdInstructor \u003d logic.getInstructorForEmail(course1.getId(), instructorCreateRequest.getEmail());"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" assertEquals(createdInstructor.getName(), instructorCreateRequest.getName());"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" assertEquals(createdInstructor.getEmail(), instructorCreateRequest.getEmail());"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" assertEquals(createdInstructor.getName(), instructorData.getName());"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" assertEquals(createdInstructor.getEmail(), instructorData.getEmail());"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" assertFalse(createdInstructor.isDisplayedToStudents());"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" assertTrue(createdInstructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_COURSE));"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" assertTrue(createdInstructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR));"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" assertTrue(createdInstructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_SESSION));"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" assertTrue(createdInstructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_STUDENT));"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" protected void testExecute_uniqueEmailClash_shouldFail() throws Exception {"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor1OfCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" loginAsAdmin();"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" String[] params \u003d {"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, instructor1OfCourse1.getCourseId(),"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" InstructorCreateRequest instructorCreateRequest \u003d new InstructorCreateRequest("},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" instructor1OfCourse1.getCourseId(), \"instructor3ofCourse1\","},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" instructor1OfCourse1.getEmail(), Const.InstructorPermissionRoleNames.INSTRUCTOR_PERMISSION_ROLE_TUTOR,"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" \"instructor3ofCourse1\", false);"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" CreateInstructorAction action \u003d getAction(instructorCreateRequest, params);"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" assertThrows(InvalidOperationException.class, action::execute);"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor2OfCourse1\");"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"Admins can access\");"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" verifyAccessibleForAdmin(submissionParams);"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"only instructors of the same course can access\");"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":" verifyOnlyInstructorsOfTheSameCourseWithCorrectCoursePrivilegeCanAccess(course,"},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR, submissionParams);"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"instructors of other courses cannot access\");"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" verifyInaccessibleForInstructorsOfOtherCourses(course, submissionParams);"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":119}},{"path":"src/it/java/teammates/it/ui/webapi/DeleteStudentsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.DeleteStudentsAction;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * SUT: {@link DeleteStudentsAction}."},{"lineNumber":17,"author":{"gitId":"-"},"content":" */"},{"lineNumber":18,"author":{"gitId":"-"},"content":"public class DeleteStudentsActionIT extends BaseActionIT\u003cDeleteStudentsAction\u003e {"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":22,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":24,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":25,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"-"},"content":" String getActionUri() {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" return Const.ResourceURIs.STUDENTS;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"-"},"content":" String getRequestMethod() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return DELETE;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"-"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":42,"author":{"gitId":"-"},"content":" String courseId \u003d instructor.getCourseId();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // TODO Remove limit after migration completes"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" int deleteLimit \u003d 4;"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case delete a limited number of students\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsToDelete \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"marquestye"},"content":" assertEquals(5, studentsToDelete.size());"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, courseId,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" Const.ParamsNames.LIMIT, String.valueOf(deleteLimit),"},{"lineNumber":56,"author":{"gitId":"-"},"content":" };"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" DeleteStudentsAction deleteStudentsAction \u003d getAction(params);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" getJsonResult(deleteStudentsAction);"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" for (Student student : studentsToDelete) {"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" assertNull(logic.getStudentByRegistrationKey(student.getRegKey()));"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" ______TS(\"Random course given, fails silently\");"},{"lineNumber":66,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, \"non-existent-course-id\","},{"lineNumber":68,"author":{"gitId":"-"},"content":" Const.ParamsNames.LIMIT, String.valueOf(deleteLimit),"},{"lineNumber":69,"author":{"gitId":"-"},"content":" };"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" deleteStudentsAction \u003d getAction(params);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" getJsonResult(deleteStudentsAction);"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" ______TS(\"Invalid params\");"},{"lineNumber":75,"author":{"gitId":"-"},"content":" verifyHttpParameterFailure();"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":80,"author":{"gitId":"-"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":85,"author":{"gitId":"-"},"content":" };"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" verifyOnlyInstructorsOfTheSameCourseWithCorrectCoursePrivilegeCanAccess("},{"lineNumber":88,"author":{"gitId":"-"},"content":" course, Const.InstructorPermissions.CAN_MODIFY_STUDENT, params);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":1,"dishenggg":2,"-":88}},{"path":"src/it/java/teammates/it/ui/webapi/EnrollStudentsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import java.util.Arrays;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.EnrollStudentsData;"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.request.StudentsEnrollRequest;"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.EnrollStudentsAction;"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.InvalidOperationException;"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link EnrollStudentsAction}."},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":"public class EnrollStudentsActionIT extends BaseActionIT\u003cEnrollStudentsAction\u003e {"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" protected String getActionUri() {"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" return Const.ResourceURIs.STUDENTS;"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" protected String getRequestMethod() {"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" return PUT;"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" private StudentsEnrollRequest prepareRequest(List\u003cStudent\u003e students) {"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" List\u003cStudentsEnrollRequest.StudentEnrollRequest\u003e studentEnrollRequests \u003d new ArrayList\u003c\u003e();"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" students.forEach(student -\u003e {"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" studentEnrollRequests.add(new StudentsEnrollRequest.StudentEnrollRequest(student.getName(),"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" student.getEmail(), student.getTeam().getName(), student.getSection().getName(), student.getComments()));"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" });"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" return new StudentsEnrollRequest(studentEnrollRequests);"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" public void testExecute() throws Exception {"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d typicalBundle.students.get(\"student1InCourse1\").getCourseId();"},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" Course course \u003d logic.getCourse(courseId);"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" Section section \u003d logic.getSection(courseId, \"Section 1\");"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":" Team team \u003d logic.getTeamOrCreate(section, \"Team 1\");"},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" Student newStudent \u003d new Student(course, \"Test Student\", \"test@email.com\", \"Test Comment\", team);"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":" String[] params \u003d new String[] {"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, courseId,"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e students \u003d new ArrayList\u003c\u003e(logic.getStudentsForCourse(courseId));"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":" assertEquals(5, students.size());"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical Success Case For Enrolling a Student\");"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" StudentsEnrollRequest request \u003d prepareRequest(Arrays.asList(newStudent));"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" EnrollStudentsAction enrollStudentsAction \u003d getAction(request, params);"},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" JsonResult res \u003d getJsonResult(enrollStudentsAction);"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":" EnrollStudentsData data \u003d (EnrollStudentsData) res.getOutput();"},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" assertEquals(1, data.getStudentsData().getStudents().size());"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentsInCourse \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":" assertEquals(6, studentsInCourse.size());"},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Fail to enroll due to duplicate team name across sections\");"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" String expectedMessage \u003d \"Team \\\"%s\\\" is detected in both Section \\\"%s\\\" and Section \\\"%s\\\".\""},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" + \" Please use different team names in different sections.\";"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" Section newSection \u003d logic.getSection(courseId, \"Section 3\");"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" Team newTeam \u003d new Team(newSection, \"Team 1\");"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" newStudent \u003d new Student(course, \"Test Student\", \"test@email.com\", \"Test Comment\", newTeam);"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" Student secondStudent \u003d new Student(course, \"Test Student 2\", \"test2@email.com\", \"Test Comment\","},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" team);"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" StudentsEnrollRequest req \u003d prepareRequest(Arrays.asList(secondStudent, newStudent));"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":" InvalidOperationException exception \u003d verifyInvalidOperation(req, params);"},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" assertEquals(String.format(expectedMessage, \"Team 1\", \"Section 3\", \"Section 1\"), exception.getMessage());"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical Success Case For Changing Details (except email) of a Student\");"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" Section section3 \u003d logic.getSection(courseId, \"Section 3\");"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" Team team3 \u003d logic.getTeamOrCreate(section3, \"Team 3\");"},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":" Student changedTeam \u003d new Student(course, \"Student 1\", \"student1@teammates.tmt\", \"Test Comment\", team3);"},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":" request \u003d prepareRequest(Arrays.asList(changedTeam));"},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" enrollStudentsAction \u003d getAction(request, params);"},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" res \u003d getJsonResult(enrollStudentsAction);"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":" data \u003d (EnrollStudentsData) res.getOutput();"},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" assertEquals(1, data.getStudentsData().getStudents().size());"},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" studentsInCourse \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":114,"author":{"gitId":"marquestye"},"content":" assertEquals(6, studentsInCourse.size());"},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":" // Verify that changes have cascaded to feedback responses"},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" String giverEmail \u003d \"student1@teammates.tmt\";"},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":" logic.getFeedbackResponsesFromGiverForCourse(courseId, giverEmail);"},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesFromUser) {"},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" assertEquals(logic.getSection(courseId, \"Section 3\"), response.getGiverSection());"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" logic.getFeedbackResponsesForRecipientForCourse(courseId, giverEmail);"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesToUser) {"},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":" assertEquals(logic.getSection(courseId, \"Section 3\"), response.getRecipientSection());"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponseComment\u003e commentsFromUser \u003d logic.getFeedbackResponseCommentsForResponse(response.getId());"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponseComment comment : commentsFromUser) {"},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" if (comment.getGiver().equals(giverEmail)) {"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" assertEquals(logic.getSection(courseId, \"Section 3\"), comment.getGiverSection());"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" String[] params \u003d new String[] {"},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":147,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":148,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":" verifyOnlyInstructorsOfTheSameCourseWithCorrectCoursePrivilegeCanAccess("},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":" course, Const.InstructorPermissions.CAN_MODIFY_STUDENT, params);"},{"lineNumber":151,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":152,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":149,"marquestye":3}},{"path":"src/it/java/teammates/it/ui/webapi/FeedbackSessionClosingRemindersActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Duration;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.FeedbackSessionClosingRemindersAction;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackSessionClosingRemindersAction}."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class FeedbackSessionClosingRemindersActionIT extends BaseActionIT\u003cFeedbackSessionClosingRemindersAction\u003e {"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":27,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":28,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":32,"author":{"gitId":"-"},"content":" prepareSession();"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private void prepareSession() {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // DEADLINE EXTENSIONS"},{"lineNumber":37,"author":{"gitId":"-"},"content":" String[] deKeys \u003d {\"student1InCourse1Session1\", \"instructor1InCourse1Session1\"};"},{"lineNumber":38,"author":{"gitId":"-"},"content":" List\u003cDeadlineExtension\u003e exts \u003d new ArrayList\u003c\u003e();"},{"lineNumber":39,"author":{"gitId":"-"},"content":" for (String deKey : deKeys) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exts.add(typicalBundle.deadlineExtensions.get(deKey));"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" // FEEDBACK QUESTIONS"},{"lineNumber":44,"author":{"gitId":"-"},"content":" String[] fqKeys \u003d {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"qn1InSession1InCourse1\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"qn2InSession1InCourse1\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"qn3InSession1InCourse1\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"qn4InSession1InCourse1\","},{"lineNumber":49,"author":{"gitId":"-"},"content":" \"qn5InSession1InCourse1\","},{"lineNumber":50,"author":{"gitId":"-"},"content":" \"qn6InSession1InCourse1NoResponses\","},{"lineNumber":51,"author":{"gitId":"-"},"content":" };"},{"lineNumber":52,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e qns \u003d new ArrayList\u003c\u003e();"},{"lineNumber":53,"author":{"gitId":"-"},"content":" for (String fqKey : fqKeys) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" qns.add(typicalBundle.feedbackQuestions.get(fqKey));"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":58,"author":{"gitId":"-"},"content":" session.setDeadlineExtensions(exts);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" session.setFeedbackQuestions(qns);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":63,"author":{"gitId":"-"},"content":" String getActionUri() {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return Const.CronJobURIs.AUTOMATED_FEEDBACK_CLOSING_REMINDERS;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":68,"author":{"gitId":"-"},"content":" String getRequestMethod() {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return GET;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":73,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":74,"author":{"gitId":"-"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":76,"author":{"gitId":"-"},"content":" verifyOnlyAdminCanAccess(course);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":81,"author":{"gitId":"-"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" loginAsAdmin();"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 1: email tasks added for 1 all users of 1 session\");"},{"lineNumber":85,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess1();"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 2: email tasks added for 1 all users of 1 session and 1 deadline extension\");"},{"lineNumber":88,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess2();"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 3: Only 1 email task queued -- \""},{"lineNumber":91,"author":{"gitId":"-"},"content":" + \"0 for session: already sent, \""},{"lineNumber":92,"author":{"gitId":"-"},"content":" + \"1 for deadline extension: closing-soon not sent yet\");"},{"lineNumber":93,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess3();"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 4: No tasks queued -- \""},{"lineNumber":96,"author":{"gitId":"-"},"content":" + \"both session and deadline extensions have already sent closing-soon emails\");"},{"lineNumber":97,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess4();"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case 5: No tasks queued -- session\u0027s closing-soon email disabled\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":" textExecute_typicalSuccess5();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess1() {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":106,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":109,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(false);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":111,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertTrue(session.isClosingSoonEmailSent());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertTrue(session.getDeadlineExtensions().stream().allMatch(de -\u003e !de.isClosingSoonEmailSent()));"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"marquestye"},"content":" // 7 email tasks queued:"},{"lineNumber":124,"author":{"gitId":"marquestye"},"content":" // 1 co-owner, 5 students and 3 instructors,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" // but 1 student and 1 instructor have deadline extensions (should not receive email)"},{"lineNumber":126,"author":{"gitId":"marquestye"},"content":" verifySpecifiedTasksAdded(Const.TaskQueue.SEND_EMAIL_QUEUE_NAME, 7);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess2() {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":135,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(false);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":137,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" DeadlineExtension de \u003d session.getDeadlineExtensions().get(0);"},{"lineNumber":140,"author":{"gitId":"-"},"content":" de.setEndTime(now.plusSeconds(oneHour * 16));"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assertTrue(session.isClosingSoonEmailSent());"},{"lineNumber":150,"author":{"gitId":"-"},"content":" assertTrue(de.isClosingSoonEmailSent());"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"marquestye"},"content":" // 8 email tasks queued:"},{"lineNumber":153,"author":{"gitId":"marquestye"},"content":" // - 7 emails: 1 co-owner, 5 students and 3 instructors,"},{"lineNumber":154,"author":{"gitId":"-"},"content":" // but 1 student and 1 instructor have deadline extensions (should not receive email)"},{"lineNumber":155,"author":{"gitId":"-"},"content":" // - 1 email: 1 student deadline extension"},{"lineNumber":156,"author":{"gitId":"marquestye"},"content":" verifySpecifiedTasksAdded(Const.TaskQueue.SEND_EMAIL_QUEUE_NAME, 8);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess3() {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":165,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(true);"},{"lineNumber":166,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":167,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" DeadlineExtension de \u003d session.getDeadlineExtensions().get(0);"},{"lineNumber":170,"author":{"gitId":"-"},"content":" de.setEndTime(now.plusSeconds(oneHour * 16));"},{"lineNumber":171,"author":{"gitId":"-"},"content":" de.setClosingSoonEmailSent(false);"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertTrue(session.isClosingSoonEmailSent());"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertTrue(de.isClosingSoonEmailSent());"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" // 1 email tasks queued:"},{"lineNumber":184,"author":{"gitId":"-"},"content":" // - 0 emails: session already sent closing-soon emails"},{"lineNumber":185,"author":{"gitId":"-"},"content":" // - 1 email: 1 student deadline extension where closing-soon email not sent yet"},{"lineNumber":186,"author":{"gitId":"-"},"content":" verifySpecifiedTasksAdded(Const.TaskQueue.SEND_EMAIL_QUEUE_NAME, 1);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess4() {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":192,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":195,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(true);"},{"lineNumber":196,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":197,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" DeadlineExtension de \u003d session.getDeadlineExtensions().get(0);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" de.setEndTime(now.plusSeconds(oneHour * 16));"},{"lineNumber":201,"author":{"gitId":"-"},"content":" de.setClosingSoonEmailSent(true);"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":206,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":207,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":208,"author":{"gitId":"-"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":210,"author":{"gitId":"-"},"content":" assertTrue(session.isClosingSoonEmailSent());"},{"lineNumber":211,"author":{"gitId":"-"},"content":" assertTrue(de.isClosingSoonEmailSent());"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" verifyNoTasksAdded();"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":" private void textExecute_typicalSuccess5() {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" long oneHour \u003d 60 * 60;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":219,"author":{"gitId":"-"},"content":" Duration noGracePeriod \u003d Duration.between(now, now);"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":222,"author":{"gitId":"-"},"content":" session.setClosingEmailEnabled(false);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent(false);"},{"lineNumber":224,"author":{"gitId":"-"},"content":" session.setEndTime(now.plusSeconds((oneHour * 23) + 60));"},{"lineNumber":225,"author":{"gitId":"-"},"content":" session.setGracePeriod(noGracePeriod);"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" DeadlineExtension de \u003d session.getDeadlineExtensions().get(0);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" de.setEndTime(now.plusSeconds(oneHour * 16));"},{"lineNumber":229,"author":{"gitId":"-"},"content":" de.setClosingSoonEmailSent(false);"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" String[] params \u003d {};"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" FeedbackSessionClosingRemindersAction action1 \u003d getAction(params);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" JsonResult actionOutput1 \u003d getJsonResult(action1);"},{"lineNumber":235,"author":{"gitId":"-"},"content":" MessageOutput response1 \u003d (MessageOutput) actionOutput1.getOutput();"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":" assertEquals(\"Successful\", response1.getMessage());"},{"lineNumber":238,"author":{"gitId":"-"},"content":" assertTrue(!session.isClosingSoonEmailSent());"},{"lineNumber":239,"author":{"gitId":"-"},"content":" assertTrue(!de.isClosingSoonEmailSent());"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" verifyNoTasksAdded();"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":6,"-":237}},{"path":"src/it/java/teammates/it/ui/webapi/GetCourseJoinStatusActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dishenggg"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.output.JoinStatus;"},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.webapi.GetCourseJoinStatusAction;"},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":11,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":" * SUT: {@link GetCourseJoinStatusAction}."},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"public class GetCourseJoinStatusActionIT extends BaseActionIT\u003cGetCourseJoinStatusAction\u003e {"},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":17,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":18,"author":{"gitId":"dishenggg"},"content":" @BeforeMethod"},{"lineNumber":19,"author":{"gitId":"dishenggg"},"content":" protected void setUp() throws Exception {"},{"lineNumber":20,"author":{"gitId":"dishenggg"},"content":" super.setUp();"},{"lineNumber":21,"author":{"gitId":"dishenggg"},"content":" this.typicalBundle \u003d loadSqlDataBundle(\"/typicalDataBundle.json\");"},{"lineNumber":22,"author":{"gitId":"dishenggg"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":23,"author":{"gitId":"dishenggg"},"content":" HibernateUtil.flushSession();"},{"lineNumber":24,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":25,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":26,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" protected String getActionUri() {"},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":" return Const.ResourceURIs.JOIN;"},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":" protected String getRequestMethod() {"},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" return GET;"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":" protected void testExecute() {"},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" loginAsUnregistered(\"unreg.user\");"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Not enough parameters\");"},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" verifyHttpParameterFailure();"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" verifyHttpParameterFailure("},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, \"regkey\""},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" );"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" verifyHttpParameterFailure("},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" );"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: student is already registered\");"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":" String registeredStudentKey \u003d"},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" logic.getStudentForEmail(\"course-1\", \"student1@teammates.tmt\").getRegKey();"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" String[] params \u003d new String[] {"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, registeredStudentKey,"},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":" GetCourseJoinStatusAction getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" JsonResult result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" JoinStatus output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":" assertTrue(output.getHasJoined());"},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: student is not registered\");"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" String unregisteredStudentKey \u003d"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":" logic.getStudentForEmail(\"course-1\", \"unregisteredStudentInCourse1@teammates.tmt\").getRegKey();"},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, unregisteredStudentKey,"},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" assertFalse(output.getHasJoined());"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Failure case: regkey is not valid for student\");"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, \"ANXKJZNZXNJCZXKJDNKSDA\","},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":" verifyEntityNotFound(params);"},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: instructor is already registered\");"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":93,"author":{"gitId":"dishenggg"},"content":" String registeredInstructorKey \u003d"},{"lineNumber":94,"author":{"gitId":"dishenggg"},"content":" logic.getInstructorForEmail(\"course-1\", \"instr1@teammates.tmt\").getRegKey();"},{"lineNumber":95,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":96,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":97,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, registeredInstructorKey,"},{"lineNumber":98,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":99,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":100,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":101,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":102,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":" assertTrue(output.getHasJoined());"},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":107,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: instructor is not registered\");"},{"lineNumber":108,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":109,"author":{"gitId":"dishenggg"},"content":" String unregisteredInstructorKey \u003d"},{"lineNumber":110,"author":{"gitId":"dishenggg"},"content":" logic.getInstructorForEmail(\"course-1\", \"unregisteredInstructor@teammates.tmt\").getRegKey();"},{"lineNumber":111,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":112,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":113,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, unregisteredInstructorKey,"},{"lineNumber":114,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":115,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":116,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":117,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":118,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":" assertFalse(output.getHasJoined());"},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Failure case: regkey is not valid for instructor\");"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, \"ANXKJZNZXNJCZXKJDNKSDA\","},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" verifyEntityNotFound(params);"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: account request not used, instructor has not joined course\");"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" String accountRequestNotUsedKey \u003d logic.getAccountRequest(\"unregisteredinstructor1@gmail.tmt\","},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" \"TEAMMATES Test Institute 1\").getRegistrationKey();"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, accountRequestNotUsedKey,"},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":140,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.IS_CREATING_ACCOUNT, \"true\","},{"lineNumber":141,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":142,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":143,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":144,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":145,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":146,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":147,"author":{"gitId":"dishenggg"},"content":" assertFalse(output.getHasJoined());"},{"lineNumber":148,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":149,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Normal case: account request already used, instructor has joined course\");"},{"lineNumber":150,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":151,"author":{"gitId":"dishenggg"},"content":" String accountRequestUsedKey \u003d"},{"lineNumber":152,"author":{"gitId":"dishenggg"},"content":" logic.getAccountRequest(\"instr1@teammates.tmt\", \"TEAMMATES Test Institute 1\").getRegistrationKey();"},{"lineNumber":153,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":154,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":155,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, accountRequestUsedKey,"},{"lineNumber":156,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":157,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.IS_CREATING_ACCOUNT, \"true\","},{"lineNumber":158,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":159,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":160,"author":{"gitId":"dishenggg"},"content":" getCourseJoinStatusAction \u003d getAction(params);"},{"lineNumber":161,"author":{"gitId":"dishenggg"},"content":" result \u003d getJsonResult(getCourseJoinStatusAction);"},{"lineNumber":162,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":163,"author":{"gitId":"dishenggg"},"content":" output \u003d (JoinStatus) result.getOutput();"},{"lineNumber":164,"author":{"gitId":"dishenggg"},"content":" assertTrue(output.getHasJoined());"},{"lineNumber":165,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":166,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Failure case: account request regkey is not valid\");"},{"lineNumber":167,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":168,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":169,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, \"invalid-registration-key\","},{"lineNumber":170,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":171,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.IS_CREATING_ACCOUNT, \"true\","},{"lineNumber":172,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":173,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":174,"author":{"gitId":"dishenggg"},"content":" verifyEntityNotFound(params);"},{"lineNumber":175,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":176,"author":{"gitId":"dishenggg"},"content":" ______TS(\"Failure case: invalid entity type\");"},{"lineNumber":177,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":178,"author":{"gitId":"dishenggg"},"content":" params \u003d new String[] {"},{"lineNumber":179,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.REGKEY, unregisteredStudentKey,"},{"lineNumber":180,"author":{"gitId":"dishenggg"},"content":" Const.ParamsNames.ENTITY_TYPE, \"unknown\","},{"lineNumber":181,"author":{"gitId":"dishenggg"},"content":" };"},{"lineNumber":182,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":183,"author":{"gitId":"dishenggg"},"content":" verifyHttpParameterFailure(params);"},{"lineNumber":184,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":185,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":186,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":187,"author":{"gitId":"dishenggg"},"content":" @Override"},{"lineNumber":188,"author":{"gitId":"dishenggg"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":189,"author":{"gitId":"dishenggg"},"content":" verifyAnyLoggedInUserCanAccess();"},{"lineNumber":190,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":191,"author":{"gitId":"dishenggg"},"content":"}"}],"authorContributionMap":{"domoberzin":1,"dishenggg":190}},{"path":"src/it/java/teammates/it/ui/webapi/GetFeedbackSessionSubmittedGiverSetActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import com.google.common.collect.Sets;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.FeedbackSessionSubmittedGiverSet;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.GetFeedbackSessionSubmittedGiverSetAction;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link GetFeedbackSessionSubmittedGiverSetAction}."},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"public class GetFeedbackSessionSubmittedGiverSetActionIT extends BaseActionIT\u003cGetFeedbackSessionSubmittedGiverSetAction\u003e {"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" protected String getActionUri() {"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" return Const.ResourceURIs.SESSION_SUBMITTED_GIVER_SET;"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" protected String getRequestMethod() {"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" return GET;"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" protected void testExecute() {"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":" Instructor instructor1OfCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" String instructorId \u003d instructor1OfCourse1.getGoogleId();"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fsa \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" loginAsInstructor(instructorId);"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Not enough parameters\");"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" verifyHttpParameterFailure();"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Typical case\");"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, fsa.getName(),"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" GetFeedbackSessionSubmittedGiverSetAction pageAction \u003d getAction(submissionParams);"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" JsonResult result \u003d getJsonResult(pageAction);"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" FeedbackSessionSubmittedGiverSet output \u003d (FeedbackSessionSubmittedGiverSet) result.getOutput();"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" assertEquals(Sets.newHashSet(\"student1@teammates.tmt\", \"student2@teammates.tmt\","},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" \"student3@teammates.tmt\"), output.getGiverIdentifiers());"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fsa \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, fsa.getName(),"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":" verifyOnlyInstructorsOfTheSameCourseCanAccess(course, submissionParams);"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":78}},{"path":"src/it/java/teammates/it/ui/webapi/GetInstructorsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorsData;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.ui.request.Intent;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.GetInstructorsAction;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link GetInstructorsAction}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class GetInstructorsActionIT extends BaseActionIT\u003cGetInstructorsAction\u003e {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":25,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":27,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"-"},"content":" protected String getActionUri() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return Const.ResourceURIs.INSTRUCTORS;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" protected String getRequestMethod() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return GET;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"-"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case with FULL_DETAIL\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":51,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":52,"author":{"gitId":"-"},"content":" };"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" GetInstructorsAction action \u003d getAction(params);"},{"lineNumber":55,"author":{"gitId":"-"},"content":" JsonResult jsonResult \u003d getJsonResult(action);"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" InstructorsData output \u003d (InstructorsData) jsonResult.getOutput();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" List\u003cInstructorData\u003e instructors \u003d output.getInstructors();"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":" assertEquals(3, instructors.size());"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case with no intent\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":65,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, null,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" };"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" action \u003d getAction(params);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" jsonResult \u003d getJsonResult(action);"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" output \u003d (InstructorsData) jsonResult.getOutput();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" instructors \u003d output.getInstructors();"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" assertEquals(3, instructors.size());"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" for (InstructorData instructorData : instructors) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertNull(instructorData.getGoogleId());"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertNull(instructorData.getJoinState());"},{"lineNumber":79,"author":{"gitId":"-"},"content":" assertNull(instructorData.getIsDisplayedToStudents());"},{"lineNumber":80,"author":{"gitId":"-"},"content":" assertNull(instructorData.getRole());"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" ______TS(\"Unknown intent\");"},{"lineNumber":84,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, \"Unknown\","},{"lineNumber":87,"author":{"gitId":"-"},"content":" };"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" verifyHttpParameterFailure(params);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":93,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":94,"author":{"gitId":"-"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":96,"author":{"gitId":"-"},"content":" Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" ______TS(\"Course not found, logged in as instructor, intent FULL_DETAIL\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, \"does-not-exist-id\","},{"lineNumber":103,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":104,"author":{"gitId":"-"},"content":" };"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" verifyEntityNotFoundAcl(params);"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" ______TS(\"Course not found, logged in as student, intent undefined\");"},{"lineNumber":109,"author":{"gitId":"-"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, \"does-not-exist-id\","},{"lineNumber":113,"author":{"gitId":"-"},"content":" };"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" verifyEntityNotFoundAcl(params);"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" ______TS(\"Unknown login entity, intent FULL_DETAIL\");"},{"lineNumber":118,"author":{"gitId":"-"},"content":" loginAsUnregistered(\"unregistered\");"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":122,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":123,"author":{"gitId":"-"},"content":" };"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" ______TS(\"Unknown login entity, intent undefined\");"},{"lineNumber":128,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":130,"author":{"gitId":"-"},"content":" };"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" ______TS(\"Unknown intent, logged in as instructor\");"},{"lineNumber":135,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":139,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, \"Unknown\","},{"lineNumber":140,"author":{"gitId":"-"},"content":" };"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" verifyHttpParameterFailureAcl(params);"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" ______TS(\"Intent FULL_DETAIL, should authenticate as instructor\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, instructor.getCourseId(),"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":148,"author":{"gitId":"-"},"content":" };"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" verifyOnlyInstructorsOfTheSameCourseCanAccess(instructor.getCourse(), params);"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" ______TS(\"Intent undefined, should authenticate as student, access own course\");"},{"lineNumber":153,"author":{"gitId":"-"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, student.getCourseId(),"},{"lineNumber":157,"author":{"gitId":"-"},"content":" };"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" verifyCanAccess(params);"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":" ______TS(\"Intent undefined, should authenticate as student, access other course\");"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Student otherStudent \u003d typicalBundle.students.get(\"student1InCourse2\");"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" assertNotEquals(otherStudent.getCourse(), student.getCourse());"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, otherStudent.getCourseId(),"},{"lineNumber":168,"author":{"gitId":"-"},"content":" };"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":2,"-":171}},{"path":"src/it/java/teammates/it/ui/webapi/GetSessionResponseStatsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.FeedbackSessionStatsData;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.GetSessionResponseStatsAction;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link GetSessionResponseStatsAction}."},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"public class GetSessionResponseStatsActionIT extends BaseActionIT\u003cGetSessionResponseStatsAction\u003e {"},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" String getActionUri() {"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" return Const.ResourceURIs.SESSION_STATS;"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" String getRequestMethod() {"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" return GET;"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" protected void testExecute() {"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" ______TS(\"typical: instructor accesses feedback stats of his/her course\");"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" FeedbackSession accessibleFs \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFs.getName(),"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, accessibleFs.getCourse().getId(),"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" GetSessionResponseStatsAction a \u003d getAction(submissionParams);"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" JsonResult r \u003d getJsonResult(a);"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" FeedbackSessionStatsData output \u003d (FeedbackSessionStatsData) r.getOutput();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertEquals(8, output.getExpectedTotal());"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" assertEquals(3, output.getSubmittedTotal());"},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" ______TS(\"fail: instructor accesses stats of non-existent feedback session\");"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" String nonexistentFeedbackSession \u003d \"nonexistentFeedbackSession\";"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, nonexistentFeedbackSession,"},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, accessibleFs.getCourse().getId(),"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" verifyEntityNotFound(submissionParams);"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" ______TS(\"accessible for admin\");"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" verifyAccessibleForAdmin();"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" ______TS(\"accessible for authenticated instructor\");"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" Course course1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" FeedbackSession accessibleFs \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFs.getName(),"},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" Const.ParamsNames.COURSE_ID, accessibleFs.getCourse().getId(),"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":" };"},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" verifyOnlyInstructorsOfTheSameCourseCanAccess(course1, submissionParams);"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":85,"-":1}},{"path":"src/it/java/teammates/it/ui/webapi/GetSessionResultsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.Test;"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"import teammates.ui.output.SessionResultsData;"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":"import teammates.ui.request.Intent;"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"import teammates.ui.webapi.GetSessionResultsAction;"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" * SUT: {@link GetSessionResultsAction}."},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":"public class GetSessionResultsActionIT extends BaseActionIT\u003cGetSessionResultsAction\u003e {"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" protected String getActionUri() {"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" return Const.ResourceURIs.RESULT;"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" protected String getRequestMethod() {"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" return GET;"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" @BeforeMethod"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" protected void setUp() throws Exception {"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" super.setUp();"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" logoutUser();"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" HibernateUtil.flushSession();"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" HibernateUtil.clearSession();"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" protected void testExecute() {"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" ______TS(\"Typical: Instructor accesses results of their course\");"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" FeedbackSession accessibleFeedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFeedbackSession.getName(),"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.name(),"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" GetSessionResultsAction a \u003d getAction(submissionParams);"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" JsonResult r \u003d getJsonResult(a);"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" SessionResultsData output \u003d (SessionResultsData) r.getOutput();"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" SessionResultsData expectedResults \u003d SessionResultsData.initForInstructor("},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" logic.getSessionResultsForCourse(accessibleFeedbackSession,"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(),"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" null, null, FeedbackResultFetchType.BOTH));"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" assertTrue(isSessionResultsDataEqual(expectedResults, output));"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" ______TS(\"Typical: Instructor accesses results of their course with breakdown\");"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" Set\u003cSection\u003e sections \u003d new HashSet\u003c\u003e();"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" typicalBundle.feedbackResponses.values().forEach(resp -\u003e {"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" sections.add(resp.getGiverSection());"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" sections.add(resp.getRecipientSection());"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" for (FeedbackResultFetchType fetchType : FeedbackResultFetchType.values()) {"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" for (Section section : sections) {"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFeedbackSession.getName(),"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.name(),"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_RESULTS_GROUPBYSECTION, section.getName(),"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_RESULTS_SECTION_BY_GIVER_RECEIVER, fetchType.name(),"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" a \u003d getAction(submissionParams);"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" r \u003d getJsonResult(a);"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" output \u003d (SessionResultsData) r.getOutput();"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" expectedResults \u003d SessionResultsData.initForInstructor("},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" logic.getSessionResultsForCourse(accessibleFeedbackSession,"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(),"},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":" null, section.getName(), fetchType));"},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" assertTrue(isSessionResultsDataEqual(expectedResults, output));"},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" ______TS(\"Typical: Instructor previews session results as student\");"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":112,"author":{"gitId":"xenosf"},"content":" Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":113,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":114,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFeedbackSession.getName(),"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":117,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.name(),"},{"lineNumber":118,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.PREVIEWAS, student.getEmail(),"},{"lineNumber":119,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":120,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":" a \u003d getAction(submissionParams);"},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" r \u003d getJsonResult(a);"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" output \u003d (SessionResultsData) r.getOutput();"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":" expectedResults \u003d SessionResultsData.initForStudent("},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" logic.getSessionResultsForUser(accessibleFeedbackSession,"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" student.getEmail(),"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" false, null, true),"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" student);"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" assertTrue(isSessionResultsDataEqual(expectedResults, output));"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" ______TS(\"Typical: Student accesses results of their course\");"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, accessibleFeedbackSession.getName(),"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.name(),"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" a \u003d getAction(submissionParams);"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":" r \u003d getJsonResult(a);"},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" output \u003d (SessionResultsData) r.getOutput();"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":" expectedResults \u003d SessionResultsData.initForStudent("},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":" logic.getSessionResultsForUser(accessibleFeedbackSession,"},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" accessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" student.getEmail(),"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" false, null, false),"},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" student);"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" assertTrue(isSessionResultsDataEqual(expectedResults, output));"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" String[] submissionParams;"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" FeedbackSession publishedFeedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" FeedbackSession inaccessibleFeedbackSession \u003d typicalBundle.feedbackSessions.get("},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" \"unpublishedSession1InTypicalCourse\");"},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" ______TS(\"Inaccessible for authenticated instructor when unpublished\");"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, inaccessibleFeedbackSession.getName(),"},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, inaccessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.INSTRUCTOR_RESULT.name(),"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" verifyCannotAccess(submissionParams);"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":" ______TS(\"Inaccessible for authenticated student when unpublished\");"},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, inaccessibleFeedbackSession.getName(),"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, inaccessibleFeedbackSession.getCourse().getId(),"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.name(),"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":" Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" loginAsStudent(student1InCourse1.getGoogleId());"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" verifyCannotAccess(submissionParams);"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" ______TS(\"Accessible for authenticated instructor when published\");"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, publishedFeedbackSession.getName(),"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.INSTRUCTOR_RESULT.name(),"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" verifyAccessibleForInstructorsOfTheSameCourse(course, submissionParams);"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" verifyInaccessibleForInstructorsOfOtherCourses(course, submissionParams);"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" ______TS(\"Accessible for authenticated student when published\");"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, publishedFeedbackSession.getName(),"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.name(),"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" verifyAccessibleForStudentsOfTheSameCourse(course, submissionParams);"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" verifyInaccessibleForStudentsOfOtherCourse(course, submissionParams);"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" ______TS(\"Invalid intent\");"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, publishedFeedbackSession.getName(),"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, publishedFeedbackSession.getCourse().getId(),"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.INSTRUCTOR_SUBMISSION.name(),"},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" verifyHttpParameterFailure(submissionParams);"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, publishedFeedbackSession.getName(),"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, publishedFeedbackSession.getCourse().getId(),"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_SUBMISSION.name(),"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" verifyHttpParameterFailure(submissionParams);"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" private boolean isSessionResultsDataEqual(SessionResultsData self, SessionResultsData other) {"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" List\u003cSessionResultsData.QuestionOutput\u003e thisQuestions \u003d self.getQuestions();"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" List\u003cSessionResultsData.QuestionOutput\u003e otherQuestions \u003d other.getQuestions();"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" if (thisQuestions.size() !\u003d otherQuestions.size()) {"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" for (int i \u003d 0; i \u003c thisQuestions.size(); i++) {"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":" SessionResultsData.QuestionOutput thisQuestion \u003d thisQuestions.get(i);"},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" SessionResultsData.QuestionOutput otherQuestion \u003d otherQuestions.get(i);"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" if (!isQuestionOutputEqual(thisQuestion, otherQuestion)) {"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" private boolean isQuestionOutputEqual(SessionResultsData.QuestionOutput self,"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":" SessionResultsData.QuestionOutput other) {"},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":" if (!JsonUtils.toJson(self.getFeedbackQuestion()).equals(JsonUtils.toJson(other.getFeedbackQuestion()))"},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" || !self.getQuestionStatistics().equals(other.getQuestionStatistics())"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" || self.getHasResponseButNotVisibleForPreview() !\u003d other.getHasResponseButNotVisibleForPreview()"},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":" || self.getHasCommentNotVisibleForPreview() !\u003d other.getHasCommentNotVisibleForPreview()) {"},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" List\u003cSessionResultsData.ResponseOutput\u003e thisResponses;"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" List\u003cSessionResultsData.ResponseOutput\u003e otherResponses;"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" thisResponses \u003d self.getAllResponses();"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" otherResponses \u003d other.getAllResponses();"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" if (thisResponses.size() !\u003d otherResponses.size()) {"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" for (int j \u003d 0; j \u003c thisResponses.size(); j++) {"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" if (!isResponseOutputEqual(thisResponses.get(j), otherResponses.get(j))) {"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" private boolean isResponseOutputEqual(SessionResultsData.ResponseOutput self,"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" SessionResultsData.ResponseOutput other) {"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" return self.getGiver().equals(other.getGiver())"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getGiverTeam().equals(other.getGiverTeam())"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getGiverSection().equals(other.getGiverSection())"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getRecipient().equals(other.getRecipient())"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getRecipientTeam().equals(other.getRecipientTeam())"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getRecipientSection().equals(other.getRecipientSection())"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 self.getResponseDetails().getJsonString().equals(other.getResponseDetails().getJsonString());"},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_withoutCorrectAuthInfoAccessStudentResult_shouldFail() throws Exception {"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" Course typicalCourse1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse1.getId(),"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" verifyInaccessibleForUnregisteredUsers(submissionParams);"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_studentAccessOwnCourseSessionResult_shouldPass() throws Exception {"},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":" Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" Course typicalCourse1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse1.getId(),"},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" loginAsStudent(student1InCourse1.getGoogleId());"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" verifyCanAccess(submissionParams);"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_studentAccessUnpublishedSessionStudentResult_shouldFail() {"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" Course typicalCourse \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" FeedbackSession unpublishedFeedbackSession \u003d typicalBundle.feedbackSessions.get(\"session2InTypicalCourse\");"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse.getId(),"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, unpublishedFeedbackSession.getName(),"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" loginAsStudent(student1InCourse1.getGoogleId());"},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" verifyCannotAccess(submissionParams);"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_accessStudentSessionResultWithMasqueradeMode_shouldPass() throws Exception {"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" Course typicalCourse1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse1.getId(),"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" loginAsAdmin();"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" verifyCanMasquerade(student1InCourse1.getGoogleId(), submissionParams);"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_studentAccessOtherCourseSessionResult_shouldFail() {"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" Student studentInOtherCourse \u003d typicalBundle.students.get(\"student2InCourse1\");"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" Course otherCourse \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" Course course \u003d typicalBundle.courses.get(\"course3\");"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"ongoingSession1InCourse3\");"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.STUDENT_RESULT.toString(),"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" loginAsStudent(studentInOtherCourse.getGoogleId());"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" verifyCannotAccess(submissionParams);"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":" // Malicious api call using course Id of the student to bypass the check"},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":" submissionParams[1] \u003d otherCourse.getId();"},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" verifyEntityNotFoundAcl(submissionParams);"},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" public void testAccessControl_instructorAccessHisCourseFullDetail_shouldPass() throws Exception {"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":" Course typicalCourse1 \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d typicalBundle.feedbackSessions.get(\"session1InCourse1\");"},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.COURSE_ID, typicalCourse1.getId(),"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSession.getName(),"},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString(),"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":" verifyOnlyInstructorsOfTheSameCourseCanAccess(typicalCourse1, submissionParams);"},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":361}},{"path":"src/it/java/teammates/it/ui/webapi/GetStudentsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentsData;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.GetStudentsAction;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * SUT: {@link GetStudentsAction}."},{"lineNumber":20,"author":{"gitId":"-"},"content":" */"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class GetStudentsActionIT extends BaseActionIT\u003cGetStudentsAction\u003e {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":25,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" super.setUp();"},{"lineNumber":27,"author":{"gitId":"-"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":28,"author":{"gitId":"-"},"content":" HibernateUtil.flushSession();"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"-"},"content":" String getActionUri() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return Const.ResourceURIs.STUDENTS;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":37,"author":{"gitId":"-"},"content":" String getRequestMethod() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return GET;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"-"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":46,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case with only course id, logged in as instructor\");"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":53,"author":{"gitId":"-"},"content":" };"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" GetStudentsAction getStudentsAction \u003d getAction(params);"},{"lineNumber":56,"author":{"gitId":"-"},"content":" JsonResult jsonResult \u003d getJsonResult(getStudentsAction);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" StudentsData response \u003d (StudentsData) jsonResult.getOutput();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" List\u003cStudentData\u003e students \u003d response.getStudents();"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"marquestye"},"content":" assertEquals(5, students.size());"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" StudentData firstStudentInStudents \u003d students.get(0);"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertNull(firstStudentInStudents.getGoogleId());"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertNull(firstStudentInStudents.getKey());"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertEquals(student.getName(), firstStudentInStudents.getName());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertEquals(student.getCourseId(), firstStudentInStudents.getCourseId());"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" logoutUser();"},{"lineNumber":70,"author":{"gitId":"-"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" ______TS(\"Typical Success Case with course id and team name, logged in as student\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":75,"author":{"gitId":"-"},"content":" Const.ParamsNames.TEAM_NAME, student.getTeamName(),"},{"lineNumber":76,"author":{"gitId":"-"},"content":" };"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" getStudentsAction \u003d getAction(params);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" jsonResult \u003d getJsonResult(getStudentsAction);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" response \u003d (StudentsData) jsonResult.getOutput();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" students \u003d response.getStudents();"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" Student expectedOtherTeamMember \u003d typicalBundle.students.get(\"student2InCourse1\");"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" assertEquals(4, students.size());"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" StudentData actualOtherTeamMember \u003d students.get(1);"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertNull(actualOtherTeamMember.getGoogleId());"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertNull(actualOtherTeamMember.getKey());"},{"lineNumber":91,"author":{"gitId":"-"},"content":" assertEquals(expectedOtherTeamMember.getName(), actualOtherTeamMember.getName());"},{"lineNumber":92,"author":{"gitId":"-"},"content":" assertEquals(expectedOtherTeamMember.getCourseId(), actualOtherTeamMember.getCourseId());"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":97,"author":{"gitId":"-"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":100,"author":{"gitId":"-"},"content":" Instructor instructor \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" ______TS(\"Only instructors with correct privilege can access\");"},{"lineNumber":103,"author":{"gitId":"-"},"content":" String[] params \u003d new String[] {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":105,"author":{"gitId":"-"},"content":" };"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" loginAsInstructor(instructor.getGoogleId());"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" verifyCanAccess(params);"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" ______TS(\"Student to view team members\");"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":115,"author":{"gitId":"-"},"content":" Const.ParamsNames.TEAM_NAME, student.getTeamName(),"},{"lineNumber":116,"author":{"gitId":"-"},"content":" };"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" loginAsStudent(student.getGoogleId());"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" verifyCanAccess(params);"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" ______TS(\"Unknown login entity\");"},{"lineNumber":123,"author":{"gitId":"-"},"content":" loginAsUnregistered(\"does-not-exist-id\");"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":127,"author":{"gitId":"-"},"content":" };"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" params \u003d new String[] {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Const.ParamsNames.COURSE_ID, course.getId(),"},{"lineNumber":133,"author":{"gitId":"-"},"content":" Const.ParamsNames.TEAM_NAME, student.getTeamName(),"},{"lineNumber":134,"author":{"gitId":"-"},"content":" };"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" verifyCannotAccess(params);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":1,"dishenggg":1,"-":137}},{"path":"src/it/java/teammates/it/ui/webapi/InstructorSearchIndexingWorkerActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":"import teammates.test.TestProperties;"},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.webapi.InstructorSearchIndexingWorkerAction;"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@link InstructorSearchIndexingWorkerAction}."},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"public class InstructorSearchIndexingWorkerActionIT extends BaseActionIT\u003cInstructorSearchIndexingWorkerAction\u003e {"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" @BeforeMethod"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" protected void setUp() throws Exception {"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" super.setUp();"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" HibernateUtil.flushSession();"},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" protected String getActionUri() {"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" return Const.TaskQueue.INSTRUCTOR_SEARCH_INDEXING_WORKER_URL;"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" protected String getRequestMethod() {"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" return POST;"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" public void testExecute() throws Exception {"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" return;"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"instructor not yet indexed should not be searchable\");"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" List\u003cInstructor\u003e instructorList \u003d logic.searchInstructorsInWholeSystem(instructor1.getEmail());"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" assertEquals(0, instructorList.size());"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" ______TS(\"instructor indexed should be searchable\");"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, instructor1.getCourseId(),"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.INSTRUCTOR_EMAIL, instructor1.getEmail(),"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" InstructorSearchIndexingWorkerAction action \u003d getAction(submissionParams);"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" getJsonResult(action);"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" instructorList \u003d logic.searchInstructorsInWholeSystem(instructor1.getEmail());"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" assertEquals(1, instructorList.size());"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" assertEquals(instructor1.getId(), instructorList.get(0).getId());"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" @Override"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.COURSE_ID, instructor1.getCourseId(),"},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" Const.ParamsNames.INSTRUCTOR_EMAIL, instructor1.getEmail(),"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" };"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" verifyOnlyAdminCanAccess(course, submissionParams);"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":79}},{"path":"src/it/java/teammates/it/ui/webapi/JoinCourseActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.Test;"},{"lineNumber":5,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":6,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.EmailType;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.EmailWrapper;"},{"lineNumber":9,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":12,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.webapi.InvalidOperationException;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.webapi.JoinCourseAction;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":15,"author":{"gitId":"yuanxi1"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":" * SUT: {@link JoinCourseAction}."},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"public class JoinCourseActionIT extends BaseActionIT\u003cJoinCourseAction\u003e {"},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":20,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"yuanxi1"},"content":" @BeforeMethod"},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":" protected void setUp() throws Exception {"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":" super.setUp();"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":25,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.flushSession();"},{"lineNumber":26,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"yuanxi1"},"content":" String getActionUri() {"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" return Const.ResourceURIs.JOIN;"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":33,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"yuanxi1"},"content":" String getRequestMethod() {"},{"lineNumber":35,"author":{"gitId":"yuanxi1"},"content":" return PUT;"},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" Student studentYetToJoinCourse \u003d typicalBundle.students.get(\"student2YetToJoinCourse4\");"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" String student1RegKey \u003d"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" getRegKeyForStudent(studentYetToJoinCourse.getCourseId(), studentYetToJoinCourse.getEmail());"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" String loggedInGoogleIdStu \u003d \"AccLogicT.student.id\";"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" Instructor instructorYetToJoinCourse \u003d typicalBundle.instructors.get(\"instructor2YetToJoinCourse4\");"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" String instructor1RegKey \u003d"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" getRegKeyForInstructor(instructorYetToJoinCourse.getCourseId(), instructorYetToJoinCourse.getEmail());"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" String loggedInGoogleIdInst \u003d \"AccLogicT.instr.id\";"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: student joins course\");"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" loginAsUnregistered(loggedInGoogleIdStu);"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, student1RegKey,"},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":" JoinCourseAction joinCourseAction \u003d getAction(submissionParams);"},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":" getJsonResult(joinCourseAction);"},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":" verifyNumberOfEmailsSent(1);"},{"lineNumber":65,"author":{"gitId":"yuanxi1"},"content":" EmailWrapper email \u003d mockEmailSender.getEmailsSent().get(0);"},{"lineNumber":66,"author":{"gitId":"yuanxi1"},"content":" assertEquals("},{"lineNumber":67,"author":{"gitId":"yuanxi1"},"content":" String.format(EmailType.USER_COURSE_REGISTER.getSubject(), \"Typical Course 4\", \"course-4\"),"},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" email.getSubject());"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: student is already registered\");"},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, student1RegKey,"},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":" InvalidOperationException ioe \u003d verifyInvalidOperation(submissionParams);"},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Student has already joined course\", ioe.getMessage());"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":" verifyNoEmailsSent();"},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"success: instructor joins course\");"},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":84,"author":{"gitId":"yuanxi1"},"content":" loginAsUnregistered(loggedInGoogleIdInst);"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, instructor1RegKey,"},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":89,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" joinCourseAction \u003d getAction(submissionParams);"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":" getJsonResult(joinCourseAction);"},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" verifyNumberOfEmailsSent(1);"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":" email \u003d mockEmailSender.getEmailsSent().get(0);"},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" assertEquals("},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":" String.format(EmailType.USER_COURSE_REGISTER.getSubject(), \"Typical Course 4\", \"course-4\"),"},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":" email.getSubject());"},{"lineNumber":99,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: instructor is already registered\");"},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, instructor1RegKey,"},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" ioe \u003d verifyInvalidOperation(submissionParams);"},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Instructor has already joined course\", ioe.getMessage());"},{"lineNumber":109,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":110,"author":{"gitId":"yuanxi1"},"content":" verifyNoEmailsSent();"},{"lineNumber":111,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":112,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: invalid regkey\");"},{"lineNumber":113,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":114,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":115,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, \"ANXKJZNZXNJCZXKJDNKSDA\","},{"lineNumber":116,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.STUDENT,"},{"lineNumber":117,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":118,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":119,"author":{"gitId":"yuanxi1"},"content":" verifyEntityNotFound(submissionParams);"},{"lineNumber":120,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":121,"author":{"gitId":"yuanxi1"},"content":" verifyNoEmailsSent();"},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":123,"author":{"gitId":"yuanxi1"},"content":" ______TS(\"failure: invalid entity type\");"},{"lineNumber":124,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":125,"author":{"gitId":"yuanxi1"},"content":" submissionParams \u003d new String[] {"},{"lineNumber":126,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.REGKEY, student1RegKey,"},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, \"invalid_entity_type\","},{"lineNumber":128,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":129,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":130,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(submissionParams);"},{"lineNumber":131,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":132,"author":{"gitId":"yuanxi1"},"content":" verifyNoEmailsSent();"},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":134,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":135,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":136,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":137,"author":{"gitId":"yuanxi1"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":138,"author":{"gitId":"yuanxi1"},"content":" verifyAnyLoggedInUserCanAccess();"},{"lineNumber":139,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":140,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":141,"author":{"gitId":"yuanxi1"},"content":" private String getRegKeyForStudent(String courseId, String email) {"},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" return logic.getStudentForEmail(courseId, email).getRegKey();"},{"lineNumber":143,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":144,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":145,"author":{"gitId":"yuanxi1"},"content":" private String getRegKeyForInstructor(String courseId, String email) {"},{"lineNumber":146,"author":{"gitId":"yuanxi1"},"content":" return logic.getInstructorForEmail(courseId, email).getRegKey();"},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":148,"author":{"gitId":"yuanxi1"},"content":"}"}],"authorContributionMap":{"yuanxi1":148}},{"path":"src/it/java/teammates/it/ui/webapi/SearchAccountRequestsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"domoberzin"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":5,"author":{"gitId":"domoberzin"},"content":"import org.testng.annotations.Test;"},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":12,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"import teammates.test.TestProperties;"},{"lineNumber":14,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.AccountRequestsData;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.ui.webapi.SearchAccountRequestsAction;"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":" * SUT: {@link SearchAccountRequestsAction}."},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":"public class SearchAccountRequestsActionIT extends BaseActionIT\u003cSearchAccountRequestsAction\u003e {"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":25,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" verifyOnlyAdminCanAccess(course);"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" @BeforeMethod"},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" protected void setUp() throws Exception {"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" super.setUp();"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" putDocuments(typicalBundle);"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" HibernateUtil.flushSession();"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" protected String getActionUri() {"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" return Const.ResourceURIs.SEARCH_ACCOUNT_REQUESTS;"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" protected String getRequestMethod() {"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" return GET;"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" protected void testExecute() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search with SearchService disabled\");"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, \"randomString123\" };"},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" SearchAccountRequestsAction action \u003d getAction(submissionParams);"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" JsonResult result \u003d getJsonResult(action, HttpStatus.SC_NOT_IMPLEMENTED);"},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" MessageOutput output \u003d (MessageOutput) result.getOutput();"},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Full-text search is not available.\", output.getMessage());"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":" AccountRequest accountRequest \u003d typicalBundle.accountRequests.get(\"instructor1\");"},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" loginAsAdmin();"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search via Email\");"},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" String[] submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, accountRequest.getEmail() };"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":" SearchAccountRequestsAction action \u003d getAction(submissionParams);"},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" JsonResult result \u003d getJsonResult(action, 200);"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" AccountRequestsData response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().stream()"},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" .filter(i -\u003e i.getName().equals(accountRequest.getName()))"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" .findAny()"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" .isPresent());"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().get(0).getRegistrationKey() !\u003d null);"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search via Institute\");"},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, accountRequest.getInstitute() };"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" action \u003d getAction(submissionParams);"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" result \u003d getJsonResult(action, 200);"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().stream()"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":" .filter(i -\u003e i.getName().equals(accountRequest.getName()))"},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" .findAny()"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" .isPresent());"},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().get(0).getRegistrationKey() !\u003d null);"},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search via Name\");"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, accountRequest.getName() };"},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" action \u003d getAction(submissionParams);"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" result \u003d getJsonResult(action, 200);"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().stream()"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" .filter(i -\u003e i.getName().equals(accountRequest.getName()))"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" .findAny()"},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" .isPresent());"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().get(0).getRegistrationKey() !\u003d null);"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search Duplicate Name\");"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, \"Instructor\" };"},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" action \u003d getAction(submissionParams);"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":" result \u003d getJsonResult(action, 200);"},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" assertTrue(response.getAccountRequests().get(0).getRegistrationKey() !\u003d null);"},{"lineNumber":105,"author":{"gitId":"domoberzin"},"content":" assertEquals(11, response.getAccountRequests().size());"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" ______TS(\"Search result with 0 matches\");"},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" submissionParams \u003d new String[] { Const.ParamsNames.SEARCH_KEY, \"randomString123\" };"},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" action \u003d getAction(submissionParams);"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":" result \u003d getJsonResult(action, 200);"},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" response \u003d (AccountRequestsData) result.getOutput();"},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" assertEquals(0, response.getAccountRequests().size());"},{"lineNumber":114,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":"}"}],"authorContributionMap":{"domoberzin":115}},{"path":"src/it/java/teammates/it/ui/webapi/SearchStudentsActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":5,"author":{"gitId":"yuanxi1"},"content":"import org.testng.annotations.Test;"},{"lineNumber":6,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":7,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":8,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":9,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":12,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":"import teammates.test.TestProperties;"},{"lineNumber":15,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.output.StudentsData;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"import teammates.ui.webapi.SearchStudentsAction;"},{"lineNumber":19,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":20,"author":{"gitId":"yuanxi1"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"yuanxi1"},"content":" * SUT: {@link SearchStudentsAction}."},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":"public class SearchStudentsActionIT extends BaseActionIT\u003cSearchStudentsAction\u003e {"},{"lineNumber":24,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":25,"author":{"gitId":"yuanxi1"},"content":" private final Student student1InCourse1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":26,"author":{"gitId":"yuanxi1"},"content":" private final Instructor instructor1OfCourse1 \u003d typicalBundle.instructors.get(\"instructor1OfCourse1\");"},{"lineNumber":27,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":28,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"yuanxi1"},"content":" @BeforeMethod"},{"lineNumber":30,"author":{"gitId":"yuanxi1"},"content":" protected void setUp() throws Exception {"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":" super.setUp();"},{"lineNumber":32,"author":{"gitId":"yuanxi1"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":33,"author":{"gitId":"yuanxi1"},"content":" putDocuments(typicalBundle);"},{"lineNumber":34,"author":{"gitId":"yuanxi1"},"content":" HibernateUtil.flushSession();"},{"lineNumber":35,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" protected String getActionUri() {"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":" return Const.ResourceURIs.SEARCH_STUDENTS;"},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" protected String getRequestMethod() {"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" return GET;"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" protected void testExecute() {"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" // See test cases below."},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" public void execute_invalidParameters_parameterFailure() {"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure();"},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":57,"author":{"gitId":"yuanxi1"},"content":" String[] notEnoughParams \u003d new String[] {"},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"dummy\","},{"lineNumber":59,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(notEnoughParams);"},{"lineNumber":61,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":62,"author":{"gitId":"yuanxi1"},"content":" String[] invalidEntityParams \u003d new String[] {"},{"lineNumber":63,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"dummy\","},{"lineNumber":64,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, \"dummy\","},{"lineNumber":65,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":66,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(invalidEntityParams);"},{"lineNumber":67,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" String[] adminParams \u003d new String[] {"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"dummy\","},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":" String[] instructorParams \u003d new String[] {"},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"dummy\","},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(instructorParams);"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":" loginAsInstructor(instructor1OfCourse1.getGoogleId());"},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":" verifyHttpParameterFailure(adminParams);"},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":84,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":" public void execute_adminSearchName_success() {"},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":89,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" String[] accNameParams \u003d new String[] {"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, student1InCourse1.getName(),"},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(accNameParams);"},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":99,"author":{"gitId":"marquestye"},"content":" assertEquals(11, response.getStudents().size());"},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":" public void execute_adminSearchCourseId_success() {"},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":108,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":109,"author":{"gitId":"yuanxi1"},"content":" String[] accCourseIdParams \u003d new String[] {"},{"lineNumber":110,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, student1InCourse1.getCourseId(),"},{"lineNumber":111,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":112,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":113,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(accCourseIdParams);"},{"lineNumber":114,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":115,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":116,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":117,"author":{"gitId":"marquestye"},"content":" assertEquals(11, response.getStudents().size());"},{"lineNumber":118,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":119,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":120,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":121,"author":{"gitId":"yuanxi1"},"content":" public void execute_adminSearchEmail_success() {"},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":123,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":124,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":125,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":126,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" String[] emailParams \u003d new String[] {"},{"lineNumber":128,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, student1InCourse1.getEmail(),"},{"lineNumber":129,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":130,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":131,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":132,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(emailParams);"},{"lineNumber":133,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":134,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":135,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" assertEquals(4, response.getStudents().size());"},{"lineNumber":137,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":138,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":139,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":140,"author":{"gitId":"yuanxi1"},"content":" public void execute_adminSearchNoMatch_noMatch() {"},{"lineNumber":141,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":143,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":144,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":145,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":146,"author":{"gitId":"yuanxi1"},"content":" String[] accNameParams \u003d new String[] {"},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"minuscoronavirus\","},{"lineNumber":148,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":149,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":150,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(accNameParams);"},{"lineNumber":151,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":152,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":153,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":154,"author":{"gitId":"yuanxi1"},"content":" assertEquals(0, response.getStudents().size());"},{"lineNumber":155,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":156,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":157,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":158,"author":{"gitId":"yuanxi1"},"content":" public void execute_instructorSearchGoogleId_matchOnlyStudentsInCourse() {"},{"lineNumber":159,"author":{"gitId":"yuanxi1"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":160,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":161,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":162,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":163,"author":{"gitId":"yuanxi1"},"content":" loginAsInstructor(instructor1OfCourse1.getGoogleId());"},{"lineNumber":164,"author":{"gitId":"yuanxi1"},"content":" String[] googleIdParams \u003d new String[] {"},{"lineNumber":165,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"student1\","},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(googleIdParams);"},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a);"},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" StudentsData response \u003d (StudentsData) result.getOutput();"},{"lineNumber":172,"author":{"gitId":"-"},"content":" assertEquals(3, response.getStudents().size());"},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":" public void execute_noSearchService_shouldReturn501() {"},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":" if (TestProperties.isSearchServiceActive()) {"},{"lineNumber":178,"author":{"gitId":"yuanxi1"},"content":" return;"},{"lineNumber":179,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":180,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":181,"author":{"gitId":"yuanxi1"},"content":" loginAsInstructor(instructor1OfCourse1.getGoogleId());"},{"lineNumber":182,"author":{"gitId":"yuanxi1"},"content":" String[] params \u003d new String[] {"},{"lineNumber":183,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"anything\","},{"lineNumber":184,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR,"},{"lineNumber":185,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":186,"author":{"gitId":"yuanxi1"},"content":" SearchStudentsAction a \u003d getAction(params);"},{"lineNumber":187,"author":{"gitId":"yuanxi1"},"content":" JsonResult result \u003d getJsonResult(a, HttpStatus.SC_NOT_IMPLEMENTED);"},{"lineNumber":188,"author":{"gitId":"yuanxi1"},"content":" MessageOutput output \u003d (MessageOutput) result.getOutput();"},{"lineNumber":189,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":190,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Full-text search is not available.\", output.getMessage());"},{"lineNumber":191,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":192,"author":{"gitId":"yuanxi1"},"content":" loginAsAdmin();"},{"lineNumber":193,"author":{"gitId":"yuanxi1"},"content":" params \u003d new String[] {"},{"lineNumber":194,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.SEARCH_KEY, \"anything\","},{"lineNumber":195,"author":{"gitId":"yuanxi1"},"content":" Const.ParamsNames.ENTITY_TYPE, Const.EntityType.ADMIN,"},{"lineNumber":196,"author":{"gitId":"yuanxi1"},"content":" };"},{"lineNumber":197,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":198,"author":{"gitId":"yuanxi1"},"content":" a \u003d getAction(params);"},{"lineNumber":199,"author":{"gitId":"yuanxi1"},"content":" result \u003d getJsonResult(a, HttpStatus.SC_NOT_IMPLEMENTED);"},{"lineNumber":200,"author":{"gitId":"yuanxi1"},"content":" output \u003d (MessageOutput) result.getOutput();"},{"lineNumber":201,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":202,"author":{"gitId":"yuanxi1"},"content":" assertEquals(\"Full-text search is not available.\", output.getMessage());"},{"lineNumber":203,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":204,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":205,"author":{"gitId":"yuanxi1"},"content":" @Override"},{"lineNumber":206,"author":{"gitId":"yuanxi1"},"content":" @Test"},{"lineNumber":207,"author":{"gitId":"yuanxi1"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":208,"author":{"gitId":"yuanxi1"},"content":" verifyAccessibleForAdmin();"},{"lineNumber":209,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":210,"author":{"gitId":"yuanxi1"},"content":" verifyOnlyInstructorsCanAccess(course);"},{"lineNumber":211,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":212,"author":{"gitId":"yuanxi1"},"content":"}"}],"authorContributionMap":{"yuanxi1":208,"marquestye":2,"-":2}},{"path":"src/it/java/teammates/it/ui/webapi/StudentSearchIndexingWorkerActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.Test;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const.TaskQueue;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlsearch.SearchManagerFactory;"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"import teammates.test.TestProperties;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"import teammates.ui.webapi.StudentSearchIndexingWorkerAction;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" * SUT: {@link StudentSearchIndexingWorkerAction}."},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"public class StudentSearchIndexingWorkerActionIT extends BaseActionIT\u003cStudentSearchIndexingWorkerAction\u003e {"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" private final Student student \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" @BeforeMethod"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" protected void setUp() throws Exception {"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" super.setUp();"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" HibernateUtil.flushSession();"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" SearchManagerFactory.getStudentSearchManager().resetCollections();"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" protected String getActionUri() {"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" return TaskQueue.STUDENT_SEARCH_INDEXING_WORKER_URL;"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" protected String getRequestMethod() {"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" return POST;"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" protected void testExecute() throws Exception {"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" // See test cases below"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" protected void testExecute_studentNotYetIndexed_shouldNotBeSearchable() throws Exception {"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" return;"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" List\u003cStudent\u003e studentList \u003d logic.searchStudentsInWholeSystem(student.getEmail());"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" assertEquals(0, studentList.size());"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" protected void testExecute_studentIndexed_shouldBeSearchable() throws Exception {"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" if (!TestProperties.isSearchServiceActive()) {"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" return;"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" ParamsNames.COURSE_ID, student.getCourseId(),"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" ParamsNames.STUDENT_EMAIL, student.getEmail(),"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" };"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" StudentSearchIndexingWorkerAction action \u003d getAction(submissionParams);"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" getJsonResult(action);"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" List\u003cStudent\u003e studentList \u003d logic.searchStudentsInWholeSystem(student.getEmail());"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" assertEquals(1, studentList.size());"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" assertEquals(student.getName(), studentList.get(0).getName());"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" protected void testAccessControl() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" verifyOnlyAdminCanAccess(course);"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":85}},{"path":"src/it/java/teammates/it/ui/webapi/UpdateStudentActionIT.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marquestye"},"content":"package teammates.it.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":3,"author":{"gitId":"marquestye"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"marquestye"},"content":"import java.util.UUID;"},{"lineNumber":5,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":6,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":7,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.Test;"},{"lineNumber":8,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":9,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.EmailType;"},{"lineNumber":11,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.EmailWrapper;"},{"lineNumber":12,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":13,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":14,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.StringHelperExtension;"},{"lineNumber":15,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":16,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":17,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":19,"author":{"gitId":"marquestye"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":20,"author":{"gitId":"marquestye"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":21,"author":{"gitId":"marquestye"},"content":"import teammates.ui.request.StudentUpdateRequest;"},{"lineNumber":22,"author":{"gitId":"marquestye"},"content":"import teammates.ui.webapi.EntityNotFoundException;"},{"lineNumber":23,"author":{"gitId":"marquestye"},"content":"import teammates.ui.webapi.InvalidOperationException;"},{"lineNumber":24,"author":{"gitId":"marquestye"},"content":"import teammates.ui.webapi.JsonResult;"},{"lineNumber":25,"author":{"gitId":"marquestye"},"content":"import teammates.ui.webapi.UpdateStudentAction;"},{"lineNumber":26,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":27,"author":{"gitId":"marquestye"},"content":"/**"},{"lineNumber":28,"author":{"gitId":"marquestye"},"content":" * SUT: {@link UpdateStudentAction}."},{"lineNumber":29,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":30,"author":{"gitId":"marquestye"},"content":"public class UpdateStudentActionIT extends BaseActionIT\u003cUpdateStudentAction\u003e {"},{"lineNumber":31,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":32,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":33,"author":{"gitId":"marquestye"},"content":" @BeforeMethod"},{"lineNumber":34,"author":{"gitId":"marquestye"},"content":" protected void setUp() throws Exception {"},{"lineNumber":35,"author":{"gitId":"marquestye"},"content":" super.setUp();"},{"lineNumber":36,"author":{"gitId":"marquestye"},"content":" persistDataBundle(typicalBundle);"},{"lineNumber":37,"author":{"gitId":"marquestye"},"content":" HibernateUtil.flushSession();"},{"lineNumber":38,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":39,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":40,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":41,"author":{"gitId":"marquestye"},"content":" protected String getActionUri() {"},{"lineNumber":42,"author":{"gitId":"marquestye"},"content":" return Const.ResourceURIs.STUDENT;"},{"lineNumber":43,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":44,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":45,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":" protected String getRequestMethod() {"},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" return PUT;"},{"lineNumber":48,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":49,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":50,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":51,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":52,"author":{"gitId":"marquestye"},"content":" public void testExecute() throws Exception {"},{"lineNumber":53,"author":{"gitId":"marquestye"},"content":" assert true;"},{"lineNumber":54,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":55,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":56,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":57,"author":{"gitId":"marquestye"},"content":" public void testExecute_invalidParameters_failure() throws Exception {"},{"lineNumber":58,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":59,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":60,"author":{"gitId":"marquestye"},"content":" ______TS(\"no parameters\");"},{"lineNumber":61,"author":{"gitId":"marquestye"},"content":" verifyHttpParameterFailure();"},{"lineNumber":62,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":63,"author":{"gitId":"marquestye"},"content":" ______TS(\"null student email\");"},{"lineNumber":64,"author":{"gitId":"marquestye"},"content":" String[] invalidParams \u003d new String[] {"},{"lineNumber":65,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":66,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":67,"author":{"gitId":"marquestye"},"content":" verifyHttpParameterFailure(invalidParams);"},{"lineNumber":68,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":69,"author":{"gitId":"marquestye"},"content":" ______TS(\"null course id\");"},{"lineNumber":70,"author":{"gitId":"marquestye"},"content":" invalidParams \u003d new String[] {"},{"lineNumber":71,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":72,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":73,"author":{"gitId":"marquestye"},"content":" verifyHttpParameterFailure(invalidParams);"},{"lineNumber":74,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":75,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":78,"author":{"gitId":"marquestye"},"content":" public void testExecute_typicalCase_success() throws Exception {"},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" String originalEmail \u003d student1.getEmail();"},{"lineNumber":82,"author":{"gitId":"marquestye"},"content":" Team originalTeam \u003d student1.getTeam();"},{"lineNumber":83,"author":{"gitId":"marquestye"},"content":" String originalComments \u003d student1.getComments();"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":85,"author":{"gitId":"marquestye"},"content":" String newStudentEmail \u003d \"newemail@gmail.tmt\";"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":" String newStudentTeam \u003d \"new student\u0027s team\";"},{"lineNumber":87,"author":{"gitId":"marquestye"},"content":" String newStudentComments \u003d \"this is new comment after editing\";"},{"lineNumber":88,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), newStudentEmail,"},{"lineNumber":89,"author":{"gitId":"marquestye"},"content":" newStudentTeam, student1.getSectionName(), newStudentComments, true);"},{"lineNumber":90,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":91,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":92,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":93,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":94,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":95,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":96,"author":{"gitId":"marquestye"},"content":" UpdateStudentAction updateAction \u003d getAction(updateRequest, submissionParams);"},{"lineNumber":97,"author":{"gitId":"marquestye"},"content":" JsonResult actionOutput \u003d getJsonResult(updateAction);"},{"lineNumber":98,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":99,"author":{"gitId":"marquestye"},"content":" MessageOutput msgOutput \u003d (MessageOutput) actionOutput.getOutput();"},{"lineNumber":100,"author":{"gitId":"marquestye"},"content":" assertEquals(\"Student has been updated and email sent\", msgOutput.getMessage());"},{"lineNumber":101,"author":{"gitId":"marquestye"},"content":" verifyNumberOfEmailsSent(1);"},{"lineNumber":102,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":103,"author":{"gitId":"marquestye"},"content":" Student updatedStudent \u003d logic.getStudent(student1.getId());"},{"lineNumber":104,"author":{"gitId":"marquestye"},"content":" assertEquals(updatedStudent.getEmail(), newStudentEmail);"},{"lineNumber":105,"author":{"gitId":"marquestye"},"content":" assertEquals(updatedStudent.getTeamName(), newStudentTeam);"},{"lineNumber":106,"author":{"gitId":"marquestye"},"content":" assertEquals(updatedStudent.getComments(), newStudentComments);"},{"lineNumber":107,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":108,"author":{"gitId":"marquestye"},"content":" EmailWrapper email \u003d getEmailsSent().get(0);"},{"lineNumber":109,"author":{"gitId":"marquestye"},"content":" String courseName \u003d logic.getCourse(student1.getCourseId()).getName();"},{"lineNumber":110,"author":{"gitId":"marquestye"},"content":" assertEquals(String.format(EmailType.STUDENT_EMAIL_CHANGED.getSubject(), courseName,"},{"lineNumber":111,"author":{"gitId":"marquestye"},"content":" student1.getCourseId()), email.getSubject());"},{"lineNumber":112,"author":{"gitId":"marquestye"},"content":" assertEquals(newStudentEmail, email.getRecipient());"},{"lineNumber":113,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":114,"author":{"gitId":"marquestye"},"content":" verifySpecifiedTasksAdded(Const.TaskQueue.SEARCH_INDEXING_QUEUE_NAME, 1);"},{"lineNumber":115,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":116,"author":{"gitId":"marquestye"},"content":" resetStudent(student1.getId(), originalEmail, originalTeam, originalComments);"},{"lineNumber":117,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":118,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":119,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":120,"author":{"gitId":"marquestye"},"content":" public void testExecute_studentDetailsWithWhitespace_success() throws Exception {"},{"lineNumber":121,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":122,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":123,"author":{"gitId":"marquestye"},"content":" String originalEmail \u003d student1.getEmail();"},{"lineNumber":124,"author":{"gitId":"marquestye"},"content":" Team originalTeam \u003d student1.getTeam();"},{"lineNumber":125,"author":{"gitId":"marquestye"},"content":" String originalComments \u003d student1.getComments();"},{"lineNumber":126,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":127,"author":{"gitId":"marquestye"},"content":" String newStudentEmailToBeTrimmed \u003d \" student1@teammates.tmt \"; // after trim, this is equal to originalEmail"},{"lineNumber":128,"author":{"gitId":"marquestye"},"content":" String newStudentTeamToBeTrimmed \u003d \" New team \";"},{"lineNumber":129,"author":{"gitId":"marquestye"},"content":" String newStudentCommentsToBeTrimmed \u003d \" this is new comment after editing \";"},{"lineNumber":130,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), newStudentEmailToBeTrimmed,"},{"lineNumber":131,"author":{"gitId":"marquestye"},"content":" newStudentTeamToBeTrimmed, student1.getSectionName(), newStudentCommentsToBeTrimmed, true);"},{"lineNumber":132,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":133,"author":{"gitId":"marquestye"},"content":" String[] submissionParamsToBeTrimmed \u003d new String[] {"},{"lineNumber":134,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":135,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":136,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":137,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":138,"author":{"gitId":"marquestye"},"content":" UpdateStudentAction actionToBeTrimmed \u003d getAction(updateRequest, submissionParamsToBeTrimmed);"},{"lineNumber":139,"author":{"gitId":"marquestye"},"content":" JsonResult outputToBeTrimmed \u003d getJsonResult(actionToBeTrimmed);"},{"lineNumber":140,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":141,"author":{"gitId":"marquestye"},"content":" MessageOutput msgTrimmedOutput \u003d (MessageOutput) outputToBeTrimmed.getOutput();"},{"lineNumber":142,"author":{"gitId":"marquestye"},"content":" assertEquals(\"Student has been updated\", msgTrimmedOutput.getMessage());"},{"lineNumber":143,"author":{"gitId":"marquestye"},"content":" verifyNoEmailsSent();"},{"lineNumber":144,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":145,"author":{"gitId":"marquestye"},"content":" resetStudent(student1.getId(), originalEmail, originalTeam, originalComments);"},{"lineNumber":146,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":147,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":148,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":149,"author":{"gitId":"marquestye"},"content":" public void testExecute_emailHasTooManyCharacters_failure() throws Exception {"},{"lineNumber":150,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":151,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":152,"author":{"gitId":"marquestye"},"content":" String invalidStudentEmail \u003d StringHelperExtension.generateStringOfLength(255 - \"@gmail.tmt\".length())"},{"lineNumber":153,"author":{"gitId":"marquestye"},"content":" + \"@gmail.tmt\";"},{"lineNumber":154,"author":{"gitId":"marquestye"},"content":" assertEquals(FieldValidator.EMAIL_MAX_LENGTH + 1, invalidStudentEmail.length());"},{"lineNumber":155,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":156,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), invalidStudentEmail,"},{"lineNumber":157,"author":{"gitId":"marquestye"},"content":" student1.getTeamName(), student1.getSectionName(), student1.getComments(), false);"},{"lineNumber":158,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":159,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":160,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":161,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":162,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":163,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":164,"author":{"gitId":"marquestye"},"content":" InvalidHttpRequestBodyException ihrbe \u003d verifyHttpRequestBodyFailure(updateRequest, submissionParams);"},{"lineNumber":165,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":166,"author":{"gitId":"marquestye"},"content":" assertEquals(getPopulatedErrorMessage(FieldValidator.EMAIL_ERROR_MESSAGE, invalidStudentEmail,"},{"lineNumber":167,"author":{"gitId":"marquestye"},"content":" FieldValidator.EMAIL_FIELD_NAME, FieldValidator.REASON_TOO_LONG,"},{"lineNumber":168,"author":{"gitId":"marquestye"},"content":" FieldValidator.EMAIL_MAX_LENGTH),"},{"lineNumber":169,"author":{"gitId":"marquestye"},"content":" ihrbe.getMessage());"},{"lineNumber":170,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":171,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":172,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":173,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":174,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":175,"author":{"gitId":"marquestye"},"content":" public void testExecute_emailTakenByOthers_failure() {"},{"lineNumber":176,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":177,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":178,"author":{"gitId":"marquestye"},"content":" Student student2 \u003d typicalBundle.students.get(\"student2InCourse1\");"},{"lineNumber":179,"author":{"gitId":"marquestye"},"content":" String takenStudentEmail \u003d student2.getEmail();"},{"lineNumber":180,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":181,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), takenStudentEmail,"},{"lineNumber":182,"author":{"gitId":"marquestye"},"content":" student1.getTeamName(), student1.getSectionName(), student1.getComments(), false);"},{"lineNumber":183,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":184,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":185,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":186,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":187,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":188,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":189,"author":{"gitId":"marquestye"},"content":" InvalidOperationException ioe \u003d verifyInvalidOperation(updateRequest, submissionParams);"},{"lineNumber":190,"author":{"gitId":"marquestye"},"content":" assertEquals(\"Trying to update to an email that is already in use\", ioe.getMessage());"},{"lineNumber":191,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":192,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":193,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":194,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":195,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":196,"author":{"gitId":"marquestye"},"content":" public void testExecute_studentDoesNotExist_failure() {"},{"lineNumber":197,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":198,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":199,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), student1.getEmail(),"},{"lineNumber":200,"author":{"gitId":"marquestye"},"content":" student1.getTeamName(), student1.getSectionName(), student1.getComments(), false);"},{"lineNumber":201,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":202,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":203,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":204,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, \"notinuseemail@gmail.tmt\","},{"lineNumber":205,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":206,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":207,"author":{"gitId":"marquestye"},"content":" EntityNotFoundException enfe \u003d verifyEntityNotFound(updateRequest, submissionParams);"},{"lineNumber":208,"author":{"gitId":"marquestye"},"content":" assertEquals(\"The student you tried to edit does not exist. \""},{"lineNumber":209,"author":{"gitId":"marquestye"},"content":" + \"If the student was created during the last few minutes, \""},{"lineNumber":210,"author":{"gitId":"marquestye"},"content":" + \"try again in a few more minutes as the student may still be being saved.\","},{"lineNumber":211,"author":{"gitId":"marquestye"},"content":" enfe.getMessage());"},{"lineNumber":212,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":213,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":214,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":215,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":216,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":217,"author":{"gitId":"marquestye"},"content":" public void testExecute_studentTeamExistsInAnotherSection_failure() throws Exception {"},{"lineNumber":218,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":219,"author":{"gitId":"marquestye"},"content":" Student student4 \u003d typicalBundle.students.get(\"student4InCourse1\");"},{"lineNumber":220,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":221,"author":{"gitId":"marquestye"},"content":" assertNotEquals(student1.getSection(), student4.getSection());"},{"lineNumber":222,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":223,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d new StudentUpdateRequest(student1.getName(), student1.getEmail(),"},{"lineNumber":224,"author":{"gitId":"marquestye"},"content":" student4.getTeamName(), student1.getSectionName(), student1.getComments(), true);"},{"lineNumber":225,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":226,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":227,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":228,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":229,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":230,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":231,"author":{"gitId":"marquestye"},"content":" InvalidOperationException ioe \u003d verifyInvalidOperation(updateRequest, submissionParams);"},{"lineNumber":232,"author":{"gitId":"marquestye"},"content":" String expectedErrorMessage \u003d String.format(\"Team \\\"%s\\\" is detected in both Section \\\"%s\\\" and Section \\\"%s\\\".\""},{"lineNumber":233,"author":{"gitId":"marquestye"},"content":" + \" Please use different team names in different sections.\", student4.getTeamName(),"},{"lineNumber":234,"author":{"gitId":"marquestye"},"content":" student1.getSectionName(), student4.getSectionName());"},{"lineNumber":235,"author":{"gitId":"marquestye"},"content":" assertEquals(expectedErrorMessage, ioe.getMessage());"},{"lineNumber":236,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":237,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":238,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":239,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":240,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":241,"author":{"gitId":"marquestye"},"content":" public void testExecute_sectionFull_failure() throws Exception {"},{"lineNumber":242,"author":{"gitId":"marquestye"},"content":" Student studentToJoinMaxSection \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":243,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":244,"author":{"gitId":"marquestye"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":245,"author":{"gitId":"marquestye"},"content":" String courseId \u003d studentToJoinMaxSection.getCourseId();"},{"lineNumber":246,"author":{"gitId":"marquestye"},"content":" String sectionInMaxCapacity \u003d \"sectionInMaxCapacity\";"},{"lineNumber":247,"author":{"gitId":"marquestye"},"content":" Section section \u003d logic.getSectionOrCreate(courseId, sectionInMaxCapacity);"},{"lineNumber":248,"author":{"gitId":"marquestye"},"content":" Team team \u003d logic.getTeamOrCreate(section, \"randomTeamName\");"},{"lineNumber":249,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":250,"author":{"gitId":"marquestye"},"content":" for (int i \u003d 0; i \u003c Const.SECTION_SIZE_LIMIT; i++) {"},{"lineNumber":251,"author":{"gitId":"marquestye"},"content":" Student addedStudent \u003d new Student(course, \"Name \" + i, i + \"email@test.com\", \"cmt\" + i, team);"},{"lineNumber":252,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":253,"author":{"gitId":"marquestye"},"content":" logic.createStudent(addedStudent);"},{"lineNumber":254,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":255,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":256,"author":{"gitId":"marquestye"},"content":" List\u003cStudent\u003e studentList \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":257,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":258,"author":{"gitId":"marquestye"},"content":" assertEquals(Const.SECTION_SIZE_LIMIT,"},{"lineNumber":259,"author":{"gitId":"marquestye"},"content":" studentList.stream().filter(student -\u003e student.getSectionName().equals(sectionInMaxCapacity)).count());"},{"lineNumber":260,"author":{"gitId":"marquestye"},"content":" assertEquals(courseId, studentToJoinMaxSection.getCourseId());"},{"lineNumber":261,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":262,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d"},{"lineNumber":263,"author":{"gitId":"marquestye"},"content":" new StudentUpdateRequest(studentToJoinMaxSection.getName(), studentToJoinMaxSection.getEmail(),"},{"lineNumber":264,"author":{"gitId":"marquestye"},"content":" \"randomTeamName\", sectionInMaxCapacity,"},{"lineNumber":265,"author":{"gitId":"marquestye"},"content":" studentToJoinMaxSection.getComments(), true);"},{"lineNumber":266,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":267,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":268,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, studentToJoinMaxSection.getCourseId(),"},{"lineNumber":269,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, studentToJoinMaxSection.getEmail(),"},{"lineNumber":270,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":271,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":272,"author":{"gitId":"marquestye"},"content":" InvalidOperationException ioe \u003d verifyInvalidOperation(updateRequest, submissionParams);"},{"lineNumber":273,"author":{"gitId":"marquestye"},"content":" String expectedErrorMessage \u003d String.format(\"You are trying enroll more than %d students in section \\\"%s\\\". \""},{"lineNumber":274,"author":{"gitId":"marquestye"},"content":" + \"To avoid performance problems, please do not enroll more than %d students in a single section.\","},{"lineNumber":275,"author":{"gitId":"marquestye"},"content":" Const.SECTION_SIZE_LIMIT, sectionInMaxCapacity, Const.SECTION_SIZE_LIMIT);"},{"lineNumber":276,"author":{"gitId":"marquestye"},"content":" assertEquals(expectedErrorMessage, ioe.getMessage());"},{"lineNumber":277,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":278,"author":{"gitId":"marquestye"},"content":" verifyNoTasksAdded();"},{"lineNumber":279,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":280,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":281,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":282,"author":{"gitId":"marquestye"},"content":" public void testExecute_renameEmptySectionNameToDefault_success() {"},{"lineNumber":283,"author":{"gitId":"marquestye"},"content":" Student student4 \u003d typicalBundle.students.get(\"student4InCourse1\");"},{"lineNumber":284,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":285,"author":{"gitId":"marquestye"},"content":" Team originalTeam \u003d student4.getTeam();"},{"lineNumber":286,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":287,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest emptySectionUpdateRequest \u003d new StudentUpdateRequest(student4.getName(), student4.getEmail(),"},{"lineNumber":288,"author":{"gitId":"marquestye"},"content":" student4.getTeamName(), \"\", student4.getComments(), true);"},{"lineNumber":289,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":290,"author":{"gitId":"marquestye"},"content":" String[] emptySectionSubmissionParams \u003d new String[] {"},{"lineNumber":291,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student4.getCourseId(),"},{"lineNumber":292,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student4.getEmail(),"},{"lineNumber":293,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":294,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":295,"author":{"gitId":"marquestye"},"content":" UpdateStudentAction updateEmptySectionAction \u003d getAction(emptySectionUpdateRequest, emptySectionSubmissionParams);"},{"lineNumber":296,"author":{"gitId":"marquestye"},"content":" JsonResult emptySectionActionOutput \u003d getJsonResult(updateEmptySectionAction);"},{"lineNumber":297,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":298,"author":{"gitId":"marquestye"},"content":" MessageOutput emptySectionMsgOutput \u003d (MessageOutput) emptySectionActionOutput.getOutput();"},{"lineNumber":299,"author":{"gitId":"marquestye"},"content":" assertEquals(\"Student has been updated\", emptySectionMsgOutput.getMessage());"},{"lineNumber":300,"author":{"gitId":"marquestye"},"content":" verifyNoEmailsSent();"},{"lineNumber":301,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":302,"author":{"gitId":"marquestye"},"content":" // verify student in database"},{"lineNumber":303,"author":{"gitId":"marquestye"},"content":" Student actualStudent \u003d"},{"lineNumber":304,"author":{"gitId":"marquestye"},"content":" logic.getStudentForEmail(student4.getCourseId(), student4.getEmail());"},{"lineNumber":305,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getCourse(), actualStudent.getCourse());"},{"lineNumber":306,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getName(), actualStudent.getName());"},{"lineNumber":307,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getEmail(), actualStudent.getEmail());"},{"lineNumber":308,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getTeam(), actualStudent.getTeam());"},{"lineNumber":309,"author":{"gitId":"marquestye"},"content":" assertEquals(Const.DEFAULT_SECTION, actualStudent.getSectionName());"},{"lineNumber":310,"author":{"gitId":"marquestye"},"content":" assertEquals(student4.getComments(), actualStudent.getComments());"},{"lineNumber":311,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":312,"author":{"gitId":"marquestye"},"content":" resetStudent(student4.getId(), student4.getEmail(), originalTeam, student4.getComments());"},{"lineNumber":313,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":314,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":315,"author":{"gitId":"marquestye"},"content":" @Override"},{"lineNumber":316,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":317,"author":{"gitId":"marquestye"},"content":" protected void testAccessControl() throws Exception {"},{"lineNumber":318,"author":{"gitId":"marquestye"},"content":" Student student1 \u003d typicalBundle.students.get(\"student1InCourse1\");"},{"lineNumber":319,"author":{"gitId":"marquestye"},"content":" Course course \u003d typicalBundle.courses.get(\"course1\");"},{"lineNumber":320,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":321,"author":{"gitId":"marquestye"},"content":" String[] submissionParams \u003d new String[] {"},{"lineNumber":322,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.COURSE_ID, student1.getCourseId(),"},{"lineNumber":323,"author":{"gitId":"marquestye"},"content":" Const.ParamsNames.STUDENT_EMAIL, student1.getEmail(),"},{"lineNumber":324,"author":{"gitId":"marquestye"},"content":" };"},{"lineNumber":325,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":326,"author":{"gitId":"marquestye"},"content":" verifyOnlyInstructorsOfTheSameCourseWithCorrectCoursePrivilegeCanAccess("},{"lineNumber":327,"author":{"gitId":"marquestye"},"content":" course, Const.InstructorPermissions.CAN_MODIFY_STUDENT, submissionParams);"},{"lineNumber":328,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":329,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":330,"author":{"gitId":"marquestye"},"content":" private void resetStudent(UUID studentId, String originalEmail, Team originalTeam, String originalComments) {"},{"lineNumber":331,"author":{"gitId":"marquestye"},"content":" Student updatedStudent \u003d logic.getStudent(studentId);"},{"lineNumber":332,"author":{"gitId":"marquestye"},"content":" updatedStudent.setEmail(originalEmail);"},{"lineNumber":333,"author":{"gitId":"marquestye"},"content":" updatedStudent.setTeam(originalTeam);"},{"lineNumber":334,"author":{"gitId":"marquestye"},"content":" updatedStudent.setComments(originalComments);"},{"lineNumber":335,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":336,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":337,"author":{"gitId":"marquestye"},"content":"}"}],"authorContributionMap":{"marquestye":337}},{"path":"src/main/java/teammates/common/datatransfer/SqlSessionResultsBundle.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.common.datatransfer;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.LinkedHashMap;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import java.util.Map;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" * Represents detailed results for a feedback session."},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"public class SqlSessionResultsBundle {"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" private final List\u003cFeedbackQuestion\u003e questions;"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" private final Set\u003cFeedbackQuestion\u003e questionsNotVisibleForPreviewSet;"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" private final Set\u003cFeedbackQuestion\u003e questionsWithCommentNotVisibleForPreviewSet;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionResponseMap;"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionMissingResponseMap;"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackResponse, List\u003cFeedbackResponseComment\u003e\u003e responseCommentsMap;"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable;"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" private final Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable;"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" private final Map\u003cLong, Boolean\u003e commentGiverVisibilityTable;"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" private final SqlCourseRoster roster;"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle(List\u003cFeedbackQuestion\u003e questions,"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e questionsNotVisibleForPreviewSet,"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e questionsWithCommentNotVisibleForPreviewSet,"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responses,"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses,"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable,"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable,"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, List\u003cFeedbackResponseComment\u003e\u003e responseCommentsMap,"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" Map\u003cLong, Boolean\u003e commentGiverVisibilityTable,"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster roster) {"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" this.questions \u003d questions;"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" this.questionsNotVisibleForPreviewSet \u003d questionsNotVisibleForPreviewSet;"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" this.questionsWithCommentNotVisibleForPreviewSet \u003d questionsWithCommentNotVisibleForPreviewSet;"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" this.responseCommentsMap \u003d responseCommentsMap;"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" this.responseGiverVisibilityTable \u003d responseGiverVisibilityTable;"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" this.responseRecipientVisibilityTable \u003d responseRecipientVisibilityTable;"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" this.commentGiverVisibilityTable \u003d commentGiverVisibilityTable;"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" this.roster \u003d roster;"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" this.questionResponseMap \u003d buildQuestionToResponseMap(responses);"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" this.questionMissingResponseMap \u003d buildQuestionToResponseMap(missingResponses);"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" private Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e buildQuestionToResponseMap("},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responses) {"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" // build question to response map"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionToResponseMap \u003d new LinkedHashMap\u003c\u003e();"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" questionToResponseMap.put(question, new ArrayList\u003c\u003e());"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responsesForQuestion \u003d questionToResponseMap.get(question);"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" responsesForQuestion.add(response);"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" return questionToResponseMap;"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" * Returns true if the giver of a response is visible to the current user."},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" * Returns false otherwise."},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" public boolean isResponseGiverVisible(FeedbackResponse response) {"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" return isResponseParticipantVisible(true, response);"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" * Returns true if the recipient of a response is visible to the current user."},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" * Returns false otherwise."},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" public boolean isResponseRecipientVisible(FeedbackResponse response) {"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" return isResponseParticipantVisible(false, response);"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" * Checks if the giver/recipient for a response is visible/hidden from the current user."},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" private boolean isResponseParticipantVisible(boolean isGiver, FeedbackResponse response) {"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType participantType;"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" boolean isVisible;"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" if (isGiver) {"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" isVisible \u003d responseGiverVisibilityTable.get(response);"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" participantType \u003d question.getGiverType();"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" isVisible \u003d responseRecipientVisibilityTable.get(response);"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" participantType \u003d question.getRecipientType();"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" boolean isTypeNone \u003d participantType \u003d\u003d FeedbackParticipantType.NONE;"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" return isVisible || isTypeNone;"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" * Returns true if the giver of a comment is visible to the current user."},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" * Returns false otherwise."},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":" public boolean isCommentGiverVisible(FeedbackResponseComment comment) {"},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" return commentGiverVisibilityTable.get(comment.getId());"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":112,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":113,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":114,"author":{"gitId":"xenosf"},"content":" * Gets the anonymous name for a given name."},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" * \u003cp\u003eThe anonymous name will be deterministic based on {@code name}."},{"lineNumber":117,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":118,"author":{"gitId":"xenosf"},"content":" public static String getAnonName(FeedbackParticipantType type, String name) {"},{"lineNumber":119,"author":{"gitId":"xenosf"},"content":" String hashedEncryptedName \u003d getHashOfName(getEncryptedName(name));"},{"lineNumber":120,"author":{"gitId":"xenosf"},"content":" String participantType \u003d type.toSingularFormString();"},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":" return String.format("},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT + \" %s %s\", participantType, hashedEncryptedName);"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e getQuestionResponseMap() {"},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" return questionResponseMap;"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e getQuestionMissingResponseMap() {"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" return questionMissingResponseMap;"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" private static String getEncryptedName(String name) {"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" return StringHelper.encrypt(name);"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" private static String getHashOfName(String name) {"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" return Long.toString(Math.abs((long) name.hashCode()));"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackQuestion\u003e getQuestions() {"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" return questions;"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackResponse, List\u003cFeedbackResponseComment\u003e\u003e getResponseCommentsMap() {"},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":" return responseCommentsMap;"},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":" public SqlCourseRoster getRoster() {"},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" return roster;"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackResponse, Boolean\u003e getResponseGiverVisibilityTable() {"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" return responseGiverVisibilityTable;"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" public Map\u003cFeedbackResponse, Boolean\u003e getResponseRecipientVisibilityTable() {"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" return responseRecipientVisibilityTable;"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" public Map\u003cLong, Boolean\u003e getCommentGiverVisibilityTable() {"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" return commentGiverVisibilityTable;"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" public Set\u003cFeedbackQuestion\u003e getQuestionsNotVisibleForPreviewSet() {"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" return questionsNotVisibleForPreviewSet;"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" public Set\u003cFeedbackQuestion\u003e getQuestionsWithCommentNotVisibleForPreviewSet() {"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" return questionsWithCommentNotVisibleForPreviewSet;"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":172}},{"path":"src/main/java/teammates/common/datatransfer/attributes/StudentAttributes.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.common.datatransfer.attributes;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Comparator;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Objects;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.Config;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.entity.CourseStudent;"},{"lineNumber":14,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * The data transfer object for {@link CourseStudent} entities."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public final class StudentAttributes extends EntityAttributes\u003cCourseStudent\u003e {"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" private String email;"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private String course;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private String name;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private String googleId;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private String comments;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private String team;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private String section;"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private transient String key;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private transient Instant createdAt;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private transient Instant updatedAt;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private StudentAttributes(String courseId, String email) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" this.course \u003d courseId;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" this.email \u003d email;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" this.googleId \u003d \"\";"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this.section \u003d Const.DEFAULT_SECTION;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.createdAt \u003d Const.TIME_REPRESENTS_DEFAULT_TIMESTAMP;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.updatedAt \u003d Const.TIME_REPRESENTS_DEFAULT_TIMESTAMP;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Gets the {@link StudentAttributes} instance of the given {@link CourseStudent}."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public static StudentAttributes valueOf(CourseStudent student) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" StudentAttributes studentAttributes \u003d new StudentAttributes(student.getCourseId(), student.getEmail());"},{"lineNumber":47,"author":{"gitId":"-"},"content":" studentAttributes.name \u003d student.getName();"},{"lineNumber":48,"author":{"gitId":"-"},"content":" if (student.getGoogleId() !\u003d null) {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" studentAttributes.googleId \u003d student.getGoogleId();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":" studentAttributes.team \u003d student.getTeamName();"},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (student.getSectionName() !\u003d null) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" studentAttributes.section \u003d student.getSectionName();"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" studentAttributes.comments \u003d student.getComments();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" studentAttributes.key \u003d student.getRegistrationKey();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" if (student.getCreatedAt() !\u003d null) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" studentAttributes.createdAt \u003d student.getCreatedAt();"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" if (student.getUpdatedAt() !\u003d null) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" studentAttributes.updatedAt \u003d student.getUpdatedAt();"},{"lineNumber":62,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":63,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":64,"author":{"gitId":"marquestye"},"content":" return studentAttributes;"},{"lineNumber":65,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":66,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":67,"author":{"gitId":"marquestye"},"content":" /**"},{"lineNumber":68,"author":{"gitId":"marquestye"},"content":" * Gets the {@link StudentAttributes} instance of the given {@link Student}."},{"lineNumber":69,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":70,"author":{"gitId":"marquestye"},"content":" public static StudentAttributes valueOf(Student student) {"},{"lineNumber":71,"author":{"gitId":"marquestye"},"content":" StudentAttributes studentAttributes \u003d new StudentAttributes(student.getCourseId(), student.getEmail());"},{"lineNumber":72,"author":{"gitId":"marquestye"},"content":" studentAttributes.name \u003d student.getName();"},{"lineNumber":73,"author":{"gitId":"marquestye"},"content":" if (student.getGoogleId() !\u003d null) {"},{"lineNumber":74,"author":{"gitId":"marquestye"},"content":" studentAttributes.googleId \u003d student.getGoogleId();"},{"lineNumber":75,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":" studentAttributes.team \u003d student.getTeamName();"},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":" if (student.getSectionName() !\u003d null) {"},{"lineNumber":78,"author":{"gitId":"marquestye"},"content":" studentAttributes.section \u003d student.getSectionName();"},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":" studentAttributes.comments \u003d student.getComments();"},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" // studentAttributes.key \u003d student.getRegistrationKey();"},{"lineNumber":82,"author":{"gitId":"marquestye"},"content":" if (student.getCreatedAt() !\u003d null) {"},{"lineNumber":83,"author":{"gitId":"marquestye"},"content":" studentAttributes.createdAt \u003d student.getCreatedAt();"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":85,"author":{"gitId":"marquestye"},"content":" if (student.getUpdatedAt() !\u003d null) {"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":" studentAttributes.updatedAt \u003d student.getUpdatedAt();"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" return studentAttributes;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Return a builder for {@link StudentAttributes}."},{"lineNumber":94,"author":{"gitId":"-"},"content":" */"},{"lineNumber":95,"author":{"gitId":"-"},"content":" public static Builder builder(String courseId, String email) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" return new Builder(courseId, email);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Gets a deep copy of this object."},{"lineNumber":101,"author":{"gitId":"-"},"content":" */"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public StudentAttributes getCopy() {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" StudentAttributes studentAttributes \u003d new StudentAttributes(course, email);"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" studentAttributes.name \u003d name;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" studentAttributes.googleId \u003d googleId;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" studentAttributes.team \u003d team;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" studentAttributes.section \u003d section;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" studentAttributes.comments \u003d comments;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" studentAttributes.key \u003d key;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" studentAttributes.createdAt \u003d createdAt;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" studentAttributes.updatedAt \u003d updatedAt;"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" return studentAttributes;"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" public boolean isRegistered() {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" return googleId !\u003d null \u0026\u0026 !googleId.trim().isEmpty();"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" public String getRegistrationUrl() {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return Config.getFrontEndAppUrl(Const.WebPageURIs.JOIN_PAGE)"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .withRegistrationKey(key)"},{"lineNumber":124,"author":{"gitId":"-"},"content":" .withEntityType(Const.EntityType.STUDENT)"},{"lineNumber":125,"author":{"gitId":"-"},"content":" .toString();"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" public String getName() {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" return name;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" public void setName(String name) {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" this.name \u003d name;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" public String getEmail() {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" public void setEmail(String email) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" this.email \u003d email;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" public String getCourse() {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" return course;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" public void setCourse(String course) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" this.course \u003d course;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" public String getGoogleId() {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" return googleId;"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void setGoogleId(String googleId) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.googleId \u003d googleId;"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" public String getKey() {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" return key;"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" public void setKey(String key) {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" this.key \u003d key;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" }"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":169,"author":{"gitId":"-"},"content":" * Format: email%courseId e.g., adam@gmail.com%cs1101."},{"lineNumber":170,"author":{"gitId":"-"},"content":" */"},{"lineNumber":171,"author":{"gitId":"-"},"content":" public String getId() {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" return email + \"%\" + course;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" public String getSection() {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return section;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" public void setSection(String section) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" this.section \u003d section;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" public String getTeam() {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" return team;"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" public void setTeam(String team) {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" this.team \u003d team;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" public String getComments() {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" return comments;"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" public void setComments(String comments) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" this.comments \u003d comments;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":200,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" if (other \u003d\u003d null) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" } else if (this \u003d\u003d other) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" } else if (this.getClass() \u003d\u003d other.getClass()) {"},{"lineNumber":206,"author":{"gitId":"-"},"content":" StudentAttributes otherStudent \u003d (StudentAttributes) other;"},{"lineNumber":207,"author":{"gitId":"-"},"content":" return Objects.equals(this.course, otherStudent.course)"},{"lineNumber":208,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.name, otherStudent.name)"},{"lineNumber":209,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.email, otherStudent.email)"},{"lineNumber":210,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.googleId, otherStudent.googleId)"},{"lineNumber":211,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.comments, otherStudent.comments)"},{"lineNumber":212,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.team, otherStudent.team)"},{"lineNumber":213,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(this.section, otherStudent.section);"},{"lineNumber":214,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":220,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" // id is allowed to be null when the student is not registered"},{"lineNumber":222,"author":{"gitId":"-"},"content":" assert team !\u003d null;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" assert comments !\u003d null;"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" List\u003cString\u003e errors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" if (isRegistered()) {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForGoogleId(googleId), errors);"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForCourseId(course), errors);"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForEmail(email), errors);"},{"lineNumber":234,"author":{"gitId":"-"},"content":""},{"lineNumber":235,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForTeamName(team), errors);"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForSectionName(section), errors);"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForStudentRoleComments(comments), errors);"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForPersonName(name), errors);"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" return errors;"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * Sorts the list of students by the section name, then team name, then name."},{"lineNumber":248,"author":{"gitId":"-"},"content":" */"},{"lineNumber":249,"author":{"gitId":"-"},"content":" public static void sortBySectionName(List\u003cStudentAttributes\u003e students) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" students.sort(Comparator.comparing((StudentAttributes student) -\u003e student.section)"},{"lineNumber":251,"author":{"gitId":"-"},"content":" .thenComparing(student -\u003e student.team)"},{"lineNumber":252,"author":{"gitId":"-"},"content":" .thenComparing(student -\u003e student.name));"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":""},{"lineNumber":255,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":256,"author":{"gitId":"-"},"content":" * Sorts the list of students by the team name, then name."},{"lineNumber":257,"author":{"gitId":"-"},"content":" */"},{"lineNumber":258,"author":{"gitId":"-"},"content":" public static void sortByTeamName(List\u003cStudentAttributes\u003e students) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" students.sort(Comparator.comparing((StudentAttributes student) -\u003e student.team)"},{"lineNumber":260,"author":{"gitId":"-"},"content":" .thenComparing(student -\u003e student.name));"},{"lineNumber":261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":264,"author":{"gitId":"-"},"content":" public CourseStudent toEntity() {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" return new CourseStudent(email, name, googleId, comments, course, team, section);"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":269,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":270,"author":{"gitId":"-"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();"},{"lineNumber":271,"author":{"gitId":"-"},"content":" stringBuilder.append(this.email).append(this.name).append(this.course)"},{"lineNumber":272,"author":{"gitId":"-"},"content":" .append(this.googleId).append(this.team).append(this.section).append(this.comments);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" return stringBuilder.toString().hashCode();"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":277,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" return \"Student:\" + name + \"[\" + email + \"]\";"},{"lineNumber":279,"author":{"gitId":"-"},"content":" }"},{"lineNumber":280,"author":{"gitId":"-"},"content":""},{"lineNumber":281,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":282,"author":{"gitId":"-"},"content":" public void sanitizeForSaving() {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" googleId \u003d SanitizationHelper.sanitizeGoogleId(googleId);"},{"lineNumber":284,"author":{"gitId":"-"},"content":" name \u003d SanitizationHelper.sanitizeName(name);"},{"lineNumber":285,"author":{"gitId":"-"},"content":" comments \u003d SanitizationHelper.sanitizeTextField(comments);"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" public Instant getCreatedAt() {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" return createdAt;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" }"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" public Instant getUpdatedAt() {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" return updatedAt;"},{"lineNumber":294,"author":{"gitId":"-"},"content":" }"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":" public void setCreatedAt(Instant createdAt) {"},{"lineNumber":297,"author":{"gitId":"-"},"content":" this.createdAt \u003d createdAt;"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" public void setUpdatedAt(Instant updatedAt) {"},{"lineNumber":301,"author":{"gitId":"-"},"content":" this.updatedAt \u003d updatedAt;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" }"},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":305,"author":{"gitId":"-"},"content":" * Updates with {@link UpdateOptions}."},{"lineNumber":306,"author":{"gitId":"-"},"content":" */"},{"lineNumber":307,"author":{"gitId":"-"},"content":" public void update(UpdateOptions updateOptions) {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" updateOptions.newEmailOption.ifPresent(s -\u003e email \u003d s);"},{"lineNumber":309,"author":{"gitId":"-"},"content":" updateOptions.nameOption.ifPresent(s -\u003e name \u003d s);"},{"lineNumber":310,"author":{"gitId":"-"},"content":" updateOptions.commentOption.ifPresent(s -\u003e comments \u003d s);"},{"lineNumber":311,"author":{"gitId":"-"},"content":" updateOptions.googleIdOption.ifPresent(s -\u003e googleId \u003d s);"},{"lineNumber":312,"author":{"gitId":"-"},"content":" updateOptions.teamNameOption.ifPresent(s -\u003e team \u003d s);"},{"lineNumber":313,"author":{"gitId":"-"},"content":" updateOptions.sectionNameOption.ifPresent(s -\u003e section \u003d s);"},{"lineNumber":314,"author":{"gitId":"-"},"content":" }"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":317,"author":{"gitId":"-"},"content":" * Returns a {@link UpdateOptions.Builder} to build {@link UpdateOptions} for a student."},{"lineNumber":318,"author":{"gitId":"-"},"content":" */"},{"lineNumber":319,"author":{"gitId":"-"},"content":" public static UpdateOptions.Builder updateOptionsBuilder(String courseId, String email) {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" return new UpdateOptions.Builder(courseId, email);"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":324,"author":{"gitId":"-"},"content":" * A builder class for {@link StudentAttributes}."},{"lineNumber":325,"author":{"gitId":"-"},"content":" */"},{"lineNumber":326,"author":{"gitId":"-"},"content":" public static class Builder extends BasicBuilder\u003cStudentAttributes, Builder\u003e {"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" private final StudentAttributes studentAttributes;"},{"lineNumber":329,"author":{"gitId":"-"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":" private Builder(String courseId, String email) {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" super(new UpdateOptions(courseId, email));"},{"lineNumber":332,"author":{"gitId":"-"},"content":" thisBuilder \u003d this;"},{"lineNumber":333,"author":{"gitId":"-"},"content":""},{"lineNumber":334,"author":{"gitId":"-"},"content":" studentAttributes \u003d new StudentAttributes(courseId, email);"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":338,"author":{"gitId":"-"},"content":" public StudentAttributes build() {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" studentAttributes.update(updateOptions);"},{"lineNumber":340,"author":{"gitId":"-"},"content":""},{"lineNumber":341,"author":{"gitId":"-"},"content":" return studentAttributes;"},{"lineNumber":342,"author":{"gitId":"-"},"content":" }"},{"lineNumber":343,"author":{"gitId":"-"},"content":" }"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":346,"author":{"gitId":"-"},"content":" * Helper class to specify the fields to update in {@link StudentAttributes}."},{"lineNumber":347,"author":{"gitId":"-"},"content":" */"},{"lineNumber":348,"author":{"gitId":"-"},"content":" public static class UpdateOptions {"},{"lineNumber":349,"author":{"gitId":"-"},"content":" private String courseId;"},{"lineNumber":350,"author":{"gitId":"-"},"content":" private String email;"},{"lineNumber":351,"author":{"gitId":"-"},"content":""},{"lineNumber":352,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e newEmailOption \u003d UpdateOption.empty();"},{"lineNumber":353,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e nameOption \u003d UpdateOption.empty();"},{"lineNumber":354,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e commentOption \u003d UpdateOption.empty();"},{"lineNumber":355,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e googleIdOption \u003d UpdateOption.empty();"},{"lineNumber":356,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e teamNameOption \u003d UpdateOption.empty();"},{"lineNumber":357,"author":{"gitId":"-"},"content":" private UpdateOption\u003cString\u003e sectionNameOption \u003d UpdateOption.empty();"},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":" private UpdateOptions(String courseId, String email) {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":361,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":362,"author":{"gitId":"-"},"content":""},{"lineNumber":363,"author":{"gitId":"-"},"content":" this.courseId \u003d courseId;"},{"lineNumber":364,"author":{"gitId":"-"},"content":" this.email \u003d email;"},{"lineNumber":365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":366,"author":{"gitId":"-"},"content":""},{"lineNumber":367,"author":{"gitId":"-"},"content":" public String getCourseId() {"},{"lineNumber":368,"author":{"gitId":"-"},"content":" return courseId;"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":""},{"lineNumber":371,"author":{"gitId":"-"},"content":" public String getEmail() {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":374,"author":{"gitId":"-"},"content":""},{"lineNumber":375,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":376,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":377,"author":{"gitId":"-"},"content":" return \"StudentAttributes.UpdateOptions [\""},{"lineNumber":378,"author":{"gitId":"-"},"content":" + \"courseId \u003d \" + courseId"},{"lineNumber":379,"author":{"gitId":"-"},"content":" + \", email \u003d \" + email"},{"lineNumber":380,"author":{"gitId":"-"},"content":" + \", newEmail \u003d \" + newEmailOption"},{"lineNumber":381,"author":{"gitId":"-"},"content":" + \", name \u003d \" + nameOption"},{"lineNumber":382,"author":{"gitId":"-"},"content":" + \", comment \u003d \" + commentOption"},{"lineNumber":383,"author":{"gitId":"-"},"content":" + \", googleId \u003d \" + googleIdOption"},{"lineNumber":384,"author":{"gitId":"-"},"content":" + \", teamName \u003d \" + teamNameOption"},{"lineNumber":385,"author":{"gitId":"-"},"content":" + \", sectionName \u003d \" + sectionNameOption"},{"lineNumber":386,"author":{"gitId":"-"},"content":" + \"]\";"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":390,"author":{"gitId":"-"},"content":" * Builder class to build {@link UpdateOptions}."},{"lineNumber":391,"author":{"gitId":"-"},"content":" */"},{"lineNumber":392,"author":{"gitId":"-"},"content":" public static class Builder extends BasicBuilder\u003cUpdateOptions, Builder\u003e {"},{"lineNumber":393,"author":{"gitId":"-"},"content":""},{"lineNumber":394,"author":{"gitId":"-"},"content":" private Builder(String courseId, String email) {"},{"lineNumber":395,"author":{"gitId":"-"},"content":" super(new UpdateOptions(courseId, email));"},{"lineNumber":396,"author":{"gitId":"-"},"content":" thisBuilder \u003d this;"},{"lineNumber":397,"author":{"gitId":"-"},"content":" }"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":" public Builder withNewEmail(String email) {"},{"lineNumber":400,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":401,"author":{"gitId":"-"},"content":""},{"lineNumber":402,"author":{"gitId":"-"},"content":" updateOptions.newEmailOption \u003d UpdateOption.of(email);"},{"lineNumber":403,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":407,"author":{"gitId":"-"},"content":" public UpdateOptions build() {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" return updateOptions;"},{"lineNumber":409,"author":{"gitId":"-"},"content":" }"},{"lineNumber":410,"author":{"gitId":"-"},"content":""},{"lineNumber":411,"author":{"gitId":"-"},"content":" }"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":" }"},{"lineNumber":414,"author":{"gitId":"-"},"content":""},{"lineNumber":415,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":416,"author":{"gitId":"-"},"content":" * Basic builder to build {@link StudentAttributes} related classes."},{"lineNumber":417,"author":{"gitId":"-"},"content":" *"},{"lineNumber":418,"author":{"gitId":"-"},"content":" * @param \u003cT\u003e type to be built"},{"lineNumber":419,"author":{"gitId":"-"},"content":" * @param \u003cB\u003e type of the builder"},{"lineNumber":420,"author":{"gitId":"-"},"content":" */"},{"lineNumber":421,"author":{"gitId":"-"},"content":" private abstract static class BasicBuilder\u003cT, B extends BasicBuilder\u003cT, B\u003e\u003e {"},{"lineNumber":422,"author":{"gitId":"-"},"content":""},{"lineNumber":423,"author":{"gitId":"-"},"content":" UpdateOptions updateOptions;"},{"lineNumber":424,"author":{"gitId":"-"},"content":" B thisBuilder;"},{"lineNumber":425,"author":{"gitId":"-"},"content":""},{"lineNumber":426,"author":{"gitId":"-"},"content":" BasicBuilder(UpdateOptions updateOptions) {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" this.updateOptions \u003d updateOptions;"},{"lineNumber":428,"author":{"gitId":"-"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":""},{"lineNumber":430,"author":{"gitId":"-"},"content":" public B withName(String name) {"},{"lineNumber":431,"author":{"gitId":"-"},"content":" assert name !\u003d null;"},{"lineNumber":432,"author":{"gitId":"-"},"content":""},{"lineNumber":433,"author":{"gitId":"-"},"content":" updateOptions.nameOption \u003d UpdateOption.of(name);"},{"lineNumber":434,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":435,"author":{"gitId":"-"},"content":" }"},{"lineNumber":436,"author":{"gitId":"-"},"content":""},{"lineNumber":437,"author":{"gitId":"-"},"content":" public B withComment(String comment) {"},{"lineNumber":438,"author":{"gitId":"-"},"content":" assert comment !\u003d null;"},{"lineNumber":439,"author":{"gitId":"-"},"content":""},{"lineNumber":440,"author":{"gitId":"-"},"content":" updateOptions.commentOption \u003d UpdateOption.of(comment);"},{"lineNumber":441,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":442,"author":{"gitId":"-"},"content":" }"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" public B withGoogleId(String googleId) {"},{"lineNumber":445,"author":{"gitId":"-"},"content":" // google id can be set to null"},{"lineNumber":446,"author":{"gitId":"-"},"content":" updateOptions.googleIdOption \u003d UpdateOption.of(googleId);"},{"lineNumber":447,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":448,"author":{"gitId":"-"},"content":" }"},{"lineNumber":449,"author":{"gitId":"-"},"content":""},{"lineNumber":450,"author":{"gitId":"-"},"content":" public B withTeamName(String teamName) {"},{"lineNumber":451,"author":{"gitId":"-"},"content":" assert teamName !\u003d null;"},{"lineNumber":452,"author":{"gitId":"-"},"content":""},{"lineNumber":453,"author":{"gitId":"-"},"content":" updateOptions.teamNameOption \u003d UpdateOption.of(teamName);"},{"lineNumber":454,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":455,"author":{"gitId":"-"},"content":" }"},{"lineNumber":456,"author":{"gitId":"-"},"content":""},{"lineNumber":457,"author":{"gitId":"-"},"content":" public B withSectionName(String sectionName) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" assert sectionName !\u003d null;"},{"lineNumber":459,"author":{"gitId":"-"},"content":""},{"lineNumber":460,"author":{"gitId":"-"},"content":" updateOptions.sectionNameOption \u003d UpdateOption.of(sectionName);"},{"lineNumber":461,"author":{"gitId":"-"},"content":" return thisBuilder;"},{"lineNumber":462,"author":{"gitId":"-"},"content":" }"},{"lineNumber":463,"author":{"gitId":"-"},"content":""},{"lineNumber":464,"author":{"gitId":"-"},"content":" public abstract T build();"},{"lineNumber":465,"author":{"gitId":"-"},"content":""},{"lineNumber":466,"author":{"gitId":"-"},"content":" }"},{"lineNumber":467,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":26,"-":441}},{"path":"src/main/java/teammates/common/datatransfer/questions/FeedbackQuestionDetails.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.common.datatransfer.questions;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SessionResultsBundle;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * A class holding the details for a specific question type."},{"lineNumber":14,"author":{"gitId":"-"},"content":" * This abstract class is inherited by concrete Feedback*QuestionDetails"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * classes which provides the implementation for the various abstract methods"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * such that pages can render the correct information/forms depending on the"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * question type"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public abstract class FeedbackQuestionDetails {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private FeedbackQuestionType questionType;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private String questionText;"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" protected FeedbackQuestionDetails(FeedbackQuestionType questionType) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" this.questionType \u003d questionType;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" protected FeedbackQuestionDetails(FeedbackQuestionType questionType, String questionText) {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.questionType \u003d questionType;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" this.questionText \u003d questionText;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Get question result statistics as JSON string."},{"lineNumber":34,"author":{"gitId":"-"},"content":" */"},{"lineNumber":35,"author":{"gitId":"-"},"content":" @SuppressWarnings(\"PMD.EmptyMethodInAbstractClassShouldBeAbstract\")"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public String getQuestionResultStatisticsJson("},{"lineNumber":37,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question, String studentEmail, SessionResultsBundle bundle) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" // Statistics are calculated in the front-end as it is dependent on the responses being filtered."},{"lineNumber":39,"author":{"gitId":"-"},"content":" // The only exception is contribution question, where there is only one statistics for the entire question."},{"lineNumber":40,"author":{"gitId":"-"},"content":" // It is also necessary to calculate contribution question statistics here"},{"lineNumber":41,"author":{"gitId":"-"},"content":" // to be displayed in student result page as students are not supposed to be able to see the exact responses."},{"lineNumber":42,"author":{"gitId":"-"},"content":" return \"\";"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" * Get question result statistics as JSON string."},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" @SuppressWarnings(\"PMD.EmptyMethodInAbstractClassShouldBeAbstract\")"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" public String getQuestionResultStatisticsJson("},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question, String studentEmail, SqlSessionResultsBundle bundle) {"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" // Statistics are calculated in the front-end as it is dependent on the responses being filtered."},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" // The only exception is contribution question, where there is only one statistics for the entire question."},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" // It is also necessary to calculate contribution question statistics here"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" // to be displayed in student result page as students are not supposed to be able to see the exact responses."},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" return \"\";"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * Checks whether the changes to the question details require deletion of corresponding responses."},{"lineNumber":60,"author":{"gitId":"-"},"content":" */"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public abstract boolean shouldChangesRequireResponseDeletion(FeedbackQuestionDetails newDetails);"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":64,"author":{"gitId":"-"},"content":" * Individual responses are shown by default."},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Override for specific question types if necessary."},{"lineNumber":66,"author":{"gitId":"-"},"content":" *"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * @return boolean indicating if individual responses are to be shown to students."},{"lineNumber":68,"author":{"gitId":"-"},"content":" */"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public boolean isIndividualResponsesShownToStudents() {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Validates the question details."},{"lineNumber":75,"author":{"gitId":"-"},"content":" * @return A {@code List\u003cString\u003e} of error messages (to show as status message to user) if any, or an"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * empty list if question details are valid."},{"lineNumber":77,"author":{"gitId":"-"},"content":" */"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public abstract List\u003cString\u003e validateQuestionDetails();"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Validates the list of response details."},{"lineNumber":82,"author":{"gitId":"-"},"content":" * @return A {@code List\u003cString\u003e} of error messages (to show as status message to user) if any, or an"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * empty list if all response details are valid."},{"lineNumber":84,"author":{"gitId":"-"},"content":" */"},{"lineNumber":85,"author":{"gitId":"-"},"content":" public abstract List\u003cString\u003e validateResponsesDetails(List\u003cFeedbackResponseDetails\u003e responseDetails, int numRecipients);"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Validates if giverType and recipientType are valid for the question type."},{"lineNumber":89,"author":{"gitId":"-"},"content":" * Validates visibility options as well."},{"lineNumber":90,"author":{"gitId":"-"},"content":" *"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * \u003cp\u003eOverride in Feedback*QuestionDetails if necessary."},{"lineNumber":92,"author":{"gitId":"-"},"content":" * @return error message detailing the error, or an empty string if valid."},{"lineNumber":93,"author":{"gitId":"-"},"content":" */"},{"lineNumber":94,"author":{"gitId":"-"},"content":" public abstract String validateGiverRecipientVisibility(FeedbackQuestionAttributes feedbackQuestionAttributes);"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * Validates if giverType and recipientType are valid for the question type."},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Validates visibility options as well."},{"lineNumber":99,"author":{"gitId":"-"},"content":" *"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * \u003cp\u003eOverride in Feedback*QuestionDetails if necessary."},{"lineNumber":101,"author":{"gitId":"-"},"content":" * @return error message detailing the error, or an empty string if valid."},{"lineNumber":102,"author":{"gitId":"-"},"content":" */"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public abstract String validateGiverRecipientVisibility(FeedbackQuestion feedbackQuestion);"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * Checks whether instructor comments are allowed for the question."},{"lineNumber":107,"author":{"gitId":"-"},"content":" */"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public boolean isInstructorCommentsOnResponsesAllowed() {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":113,"author":{"gitId":"-"},"content":" * Checks whether missing responses should be generated."},{"lineNumber":114,"author":{"gitId":"-"},"content":" */"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public boolean shouldGenerateMissingResponses(FeedbackQuestionAttributes question) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" // generate combinations against all students/teams are meaningless"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return question.getRecipientType() !\u003d FeedbackParticipantType.STUDENTS"},{"lineNumber":118,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.STUDENTS_EXCLUDING_SELF"},{"lineNumber":119,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":120,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.TEAMS_EXCLUDING_SELF;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" * Checks whether missing responses should be generated."},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" public boolean shouldGenerateMissingResponses(FeedbackQuestion question) {"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" // generate combinations against all students/teams are meaningless"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" return question.getRecipientType() !\u003d FeedbackParticipantType.STUDENTS"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.STUDENTS_EXCLUDING_SELF"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.TEAMS_EXCLUDING_SELF;"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public boolean equals(Object obj) {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" if (this \u003d\u003d obj) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (obj \u003d\u003d null || obj.getClass() !\u003d this.getClass()) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" // Json string contains all attributes of a `FeedbackQuestionDetails` object,"},{"lineNumber":145,"author":{"gitId":"-"},"content":" // so it is sufficient to use it to compare two `FeedbackQuestionDetails` objects."},{"lineNumber":146,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails other \u003d (FeedbackQuestionDetails) obj;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" return this.getJsonString().equals(other.getJsonString());"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":151,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return this.getJsonString().hashCode();"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Returns a JSON string representation of the question details."},{"lineNumber":157,"author":{"gitId":"-"},"content":" */"},{"lineNumber":158,"author":{"gitId":"-"},"content":" public String getJsonString() {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" assert questionType !\u003d null;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return JsonUtils.toJson(this, questionType.getQuestionDetailsClass());"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":164,"author":{"gitId":"-"},"content":" * Returns a deep copy of the question details."},{"lineNumber":165,"author":{"gitId":"-"},"content":" */"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public FeedbackQuestionDetails getDeepCopy() {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assert questionType !\u003d null;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" String serializedDetails \u003d getJsonString();"},{"lineNumber":169,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(serializedDetails, questionType.getQuestionDetailsClass());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" }"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" public FeedbackQuestionType getQuestionType() {"},{"lineNumber":173,"author":{"gitId":"-"},"content":" return questionType;"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":" public void setQuestionType(FeedbackQuestionType questionType) {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" this.questionType \u003d questionType;"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" public String getQuestionText() {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return questionText;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" public void setQuestionText(String questionText) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" this.questionText \u003d questionText;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":25,"-":162}},{"path":"src/main/java/teammates/common/util/Const.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.common.util;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.nio.charset.Charset;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.nio.charset.StandardCharsets;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.Duration;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Stores constants that are widely used across classes."},{"lineNumber":12,"author":{"gitId":"-"},"content":" * this class contains several nested classes, each containing a specific"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * category of constants."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public final class Const {"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" // This section holds constants that are defined as constants primarily because they are repeated in many places."},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String USER_NOBODY_TEXT \u003d \"-\";"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" public static final String USER_TEAM_FOR_INSTRUCTOR \u003d \"Instructors\";"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR \u003d \"Instructor\";"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT \u003d \"Anonymous\";"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final int SECTION_SIZE_LIMIT \u003d 100;"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static final String DEFAULT_SECTION \u003d \"None\";"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static final Section DEFAULT_SQL_SECTION \u003d null;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static final String UNKNOWN_INSTITUTION \u003d \"Unknown Institution\";"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final String DEFAULT_TIME_ZONE \u003d \"UTC\";"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static final Charset ENCODING \u003d StandardCharsets.UTF_8;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static final Duration FEEDBACK_SESSIONS_SEARCH_WINDOW \u003d Duration.ofDays(30);"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static final Duration LOGS_RETENTION_PERIOD \u003d Duration.ofDays(30);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public static final Duration COOKIE_VALIDITY_PERIOD \u003d Duration.ofDays(7);"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static final int SEARCH_QUERY_SIZE_LIMIT \u003d 50;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final String ERROR_CREATE_ENTITY_ALREADY_EXISTS \u003d \"Trying to create an entity that exists: %s\";"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public static final String ERROR_UPDATE_NON_EXISTENT \u003d \"Trying to update non-existent Entity: \";"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" public static final String MISSING_RESPONSE_TEXT \u003d \"No Response\";"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" // These constants are used as variable values to mean that the variable is in a \u0027special\u0027 state."},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static final int INT_UNINITIALIZED \u003d -9999;"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final int MAX_POSSIBLE_RECIPIENTS \u003d -100;"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static final int POINTS_EQUAL_SHARE \u003d 100;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public static final int POINTS_NOT_SURE \u003d -101;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static final int POINTS_NOT_SUBMITTED \u003d -999;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static final int POINTS_NO_VALUE \u003d Integer.MIN_VALUE;"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static final String GENERAL_QUESTION \u003d \"%GENERAL%\";"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_FOLLOW_OPENING;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_FOLLOW_VISIBLE;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_LATER;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_NOW;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public static final Instant TIME_REPRESENTS_DEFAULT_TIMESTAMP;"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" static {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_FOLLOW_OPENING \u003d TimeHelper.parseInstant(\"1970-12-31T00:00:00Z\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_FOLLOW_VISIBLE \u003d TimeHelper.parseInstant(\"1970-06-22T00:00:00Z\");"},{"lineNumber":70,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_LATER \u003d TimeHelper.parseInstant(\"1970-01-01T00:00:00Z\");"},{"lineNumber":71,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_NOW \u003d TimeHelper.parseInstant(\"1970-02-14T00:00:00Z\");"},{"lineNumber":72,"author":{"gitId":"-"},"content":" TIME_REPRESENTS_DEFAULT_TIMESTAMP \u003d TimeHelper.parseInstant(\"2011-01-01T00:00:00Z\");"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" public static final String TEST_EMAIL_DOMAIN \u003d \"@gmail.tmt\";"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" // Other Constants"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" private Const() {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" // Utility class containing constants"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Represents role names for instructors based on their permission settings."},{"lineNumber":85,"author":{"gitId":"-"},"content":" */"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public static class InstructorPermissionRoleNames {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_COOWNER \u003d \"Co-owner\";"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_MANAGER \u003d \"Manager\";"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_OBSERVER \u003d \"Observer\";"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_TUTOR \u003d \"Tutor\";"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PERMISSION_ROLE_CUSTOM \u003d \"Custom\";"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Represents atomic permission for instructors."},{"lineNumber":96,"author":{"gitId":"-"},"content":" */"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public static class InstructorPermissions {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_COURSE \u003d \"canmodifycourse\";"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_INSTRUCTOR \u003d \"canmodifyinstructor\";"},{"lineNumber":100,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_SESSION \u003d \"canmodifysession\";"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_STUDENT \u003d \"canmodifystudent\";"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public static final String CAN_VIEW_STUDENT_IN_SECTIONS \u003d \"canviewstudentinsection\";"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public static final String CAN_VIEW_SESSION_IN_SECTIONS \u003d \"canviewsessioninsection\";"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public static final String CAN_SUBMIT_SESSION_IN_SECTIONS \u003d \"cansubmitsessioninsection\";"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public static final String CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS \u003d \"canmodifysessioncommentinsection\";"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Represents keys for HTTP requests to the API layer."},{"lineNumber":110,"author":{"gitId":"-"},"content":" */"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public static class ParamsNames {"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" public static final String IS_IN_RECYCLE_BIN \u003d \"isinrecyclebin\";"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" public static final String IS_STUDENT_REJOINING \u003d \"isstudentrejoining\";"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public static final String IS_INSTRUCTOR_REJOINING \u003d \"isinstructorrejoining\";"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" public static final String COURSE_ID \u003d \"courseid\";"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public static final String COURSE_STATUS \u003d \"coursestatus\";"},{"lineNumber":120,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_ID \u003d \"instructorid\";"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_EMAIL \u003d \"instructoremail\";"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_INSTITUTION \u003d \"instructorinstitution\";"},{"lineNumber":123,"author":{"gitId":"-"},"content":" public static final String IS_CREATING_ACCOUNT \u003d \"iscreatingaccount\";"},{"lineNumber":124,"author":{"gitId":"-"},"content":" public static final String IS_INSTRUCTOR \u003d \"isinstructor\";"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_NAME \u003d \"fsname\";"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_STARTTIME \u003d \"starttime\";"},{"lineNumber":128,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_ENDTIME \u003d \"endtime\";"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_MODERATED_PERSON \u003d \"moderatedperson\";"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_LOG_TYPE \u003d \"fsltype\";"},{"lineNumber":131,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_LOG_STARTTIME \u003d \"fslstarttime\";"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_LOG_ENDTIME \u003d \"fslendtime\";"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_QUESTION_ID \u003d \"questionid\";"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public static final String SINGLE_RECIPIENT_ID_FOR_SUBMISSION \u003d \"singlerecipientidforsubmission\";"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_RESPONSE_ID \u003d \"responseid\";"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_RESPONSE_COMMENT_ID \u003d \"responsecommentid\";"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_RESULTS_GROUPBYSECTION \u003d \"frgroupbysection\";"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_RESULTS_SECTION_BY_GIVER_RECEIVER \u003d \"frsessionbygiverreceiver\";"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" public static final String PREVIEWAS \u003d \"previewas\";"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" public static final String STUDENT_ID \u003d \"googleid\";"},{"lineNumber":148,"author":{"gitId":"-"},"content":" public static final String INVITER_ID \u003d \"invitergoogleid\";"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" public static final String REGKEY \u003d \"key\";"},{"lineNumber":151,"author":{"gitId":"-"},"content":" public static final String STUDENT_EMAIL \u003d \"studentemail\";"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" public static final String SECTION_NAME \u003d \"sectionname\";"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" public static final String TEAM_NAME \u003d \"teamname\";"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" public static final String ERROR \u003d \"error\";"},{"lineNumber":158,"author":{"gitId":"-"},"content":" public static final String USER_ID \u003d \"user\";"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" public static final String SEARCH_KEY \u003d \"searchkey\";"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" public static final String USER_CAPTCHA_RESPONSE \u003d \"captcharesponse\";"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" public static final String EMAIL_TYPE \u003d \"emailtype\";"},{"lineNumber":165,"author":{"gitId":"-"},"content":" public static final String USER_EMAIL \u003d \"useremail\";"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" public static final String ENTITY_TYPE \u003d \"entitytype\";"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" public static final String INTENT \u003d \"intent\";"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" public static final String TIMEZONE \u003d \"timezone\";"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" public static final String NOTIFY_ABOUT_DEADLINES \u003d \"notifydeadlines\";"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_STARTTIME \u003d \"starttime\";"},{"lineNumber":176,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_ENDTIME \u003d \"endtime\";"},{"lineNumber":177,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_SEVERITY \u003d \"severity\";"},{"lineNumber":178,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_MIN_SEVERITY \u003d \"minseverity\";"},{"lineNumber":179,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_TRACE \u003d \"traceid\";"},{"lineNumber":180,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_ACTION_CLASS \u003d \"actionclass\";"},{"lineNumber":181,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_EMAIL \u003d \"email\";"},{"lineNumber":182,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_EVENT \u003d \"logevent\";"},{"lineNumber":183,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_SOURCE_LOCATION_FILE \u003d \"sourcelocationfile\";"},{"lineNumber":184,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_SOURCE_LOCATION_FUNCTION \u003d \"sourcelocationfunction\";"},{"lineNumber":185,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_EXCEPTION_CLASS \u003d \"exceptionclass\";"},{"lineNumber":186,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_LATENCY \u003d \"latency\";"},{"lineNumber":187,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_STATUS \u003d \"status\";"},{"lineNumber":188,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_VERSION \u003d \"version\";"},{"lineNumber":189,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_EXTRA_FILTERS \u003d \"extrafilters\";"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public static final String QUERY_LOGS_ORDER \u003d \"order\";"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" public static final String LIMIT \u003d \"limit\";"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION_ID \u003d \"notificationid\";"},{"lineNumber":195,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION_TARGET_USER \u003d \"usertype\";"},{"lineNumber":196,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION_IS_FETCHING_ALL \u003d \"isfetchingall\";"},{"lineNumber":197,"author":{"gitId":"-"},"content":" public static final String NOTFICATION_END_TIME \u003d \"endtime\";"},{"lineNumber":198,"author":{"gitId":"-"},"content":" public static final String CONTINUE_URL \u003d \"continueurl\";"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":202,"author":{"gitId":"-"},"content":" * Represents custom header names used by the system."},{"lineNumber":203,"author":{"gitId":"-"},"content":" */"},{"lineNumber":204,"author":{"gitId":"-"},"content":" public static class HeaderNames {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" public static final String BACKDOOR_KEY \u003d \"Backdoor-Key\";"},{"lineNumber":206,"author":{"gitId":"-"},"content":" public static final String CSRF_KEY \u003d \"CSRF-Key\";"},{"lineNumber":207,"author":{"gitId":"-"},"content":" public static final String WEB_VERSION \u003d \"X-WEB-VERSION\";"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public static final String CSRF_TOKEN \u003d \"X-CSRF-TOKEN\";"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":212,"author":{"gitId":"-"},"content":" * The course status respect to the instructor\u0027s point of view."},{"lineNumber":213,"author":{"gitId":"-"},"content":" * This parameter is used to get a course list for instructor."},{"lineNumber":214,"author":{"gitId":"-"},"content":" */"},{"lineNumber":215,"author":{"gitId":"-"},"content":" public static class CourseStatus {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" public static final String ACTIVE \u003d \"active\";"},{"lineNumber":217,"author":{"gitId":"-"},"content":" public static final String ARCHIVED \u003d \"archived\";"},{"lineNumber":218,"author":{"gitId":"-"},"content":" public static final String SOFT_DELETED \u003d \"softDeleted\";"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":222,"author":{"gitId":"-"},"content":" * Represents user types."},{"lineNumber":223,"author":{"gitId":"-"},"content":" */"},{"lineNumber":224,"author":{"gitId":"-"},"content":" public static class EntityType {"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" public static final String STUDENT \u003d \"student\";"},{"lineNumber":227,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR \u003d \"instructor\";"},{"lineNumber":228,"author":{"gitId":"-"},"content":" public static final String ADMIN \u003d \"admin\";"},{"lineNumber":229,"author":{"gitId":"-"},"content":" public static final String MAINTAINER \u003d \"maintainer\";"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":234,"author":{"gitId":"-"},"content":" * Represents security-related configuration."},{"lineNumber":235,"author":{"gitId":"-"},"content":" */"},{"lineNumber":236,"author":{"gitId":"-"},"content":" public static class SecurityConfig {"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" public static final String CSRF_COOKIE_NAME \u003d \"CSRF-TOKEN\";"},{"lineNumber":239,"author":{"gitId":"-"},"content":" public static final String AUTH_COOKIE_NAME \u003d \"AUTH-TOKEN\";"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Represents URIs of accessible pages in the front-end in past versions (V6 and before)."},{"lineNumber":245,"author":{"gitId":"-"},"content":" */"},{"lineNumber":246,"author":{"gitId":"-"},"content":" @Deprecated"},{"lineNumber":247,"author":{"gitId":"-"},"content":" public static class LegacyURIs {"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_JOIN \u003d \"/page/instructorCourseJoin\";"},{"lineNumber":250,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_JOIN \u003d \"/page/studentCourseJoin\";"},{"lineNumber":251,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_JOIN_NEW \u003d \"/page/studentCourseJoinAuthentication\";"},{"lineNumber":252,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_HOME_PAGE \u003d \"/page/instructorHomePage\";"},{"lineNumber":253,"author":{"gitId":"-"},"content":" public static final String STUDENT_HOME_PAGE \u003d \"/page/studentHomePage\";"},{"lineNumber":254,"author":{"gitId":"-"},"content":" public static final String STUDENT_FEEDBACK_SUBMISSION_EDIT_PAGE \u003d \"/page/studentFeedbackSubmissionEditPage\";"},{"lineNumber":255,"author":{"gitId":"-"},"content":" public static final String STUDENT_FEEDBACK_RESULTS_PAGE \u003d \"/page/studentFeedbackResultsPage\";"},{"lineNumber":256,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_FEEDBACK_SUBMISSION_EDIT_PAGE \u003d \"/page/instructorFeedbackSubmissionEditPage\";"},{"lineNumber":257,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_FEEDBACK_RESULTS_PAGE \u003d \"/page/instructorFeedbackResultsPage\";"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":262,"author":{"gitId":"-"},"content":" * Represents URIs of accessible pages in the front-end."},{"lineNumber":263,"author":{"gitId":"-"},"content":" */"},{"lineNumber":264,"author":{"gitId":"-"},"content":" public static class WebPageURIs {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" public static final String LOGIN \u003d \"/login\";"},{"lineNumber":266,"author":{"gitId":"-"},"content":" public static final String LOGOUT \u003d \"/logout\";"},{"lineNumber":267,"author":{"gitId":"-"},"content":" private static final String URI_PREFIX \u003d \"/web\";"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" private static final String STUDENT_PAGE \u003d URI_PREFIX + \"/\" + EntityType.STUDENT;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" private static final String INSTRUCTOR_PAGE \u003d URI_PREFIX + \"/\" + EntityType.INSTRUCTOR;"},{"lineNumber":271,"author":{"gitId":"-"},"content":" private static final String ADMIN_PAGE \u003d URI_PREFIX + \"/\" + EntityType.ADMIN;"},{"lineNumber":272,"author":{"gitId":"-"},"content":" private static final String MAINTAINER_PAGE \u003d URI_PREFIX + \"/\" + EntityType.MAINTAINER;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" private static final String FRONT_PAGE \u003d URI_PREFIX + \"/front\";"},{"lineNumber":274,"author":{"gitId":"-"},"content":" public static final String JOIN_PAGE \u003d URI_PREFIX + \"/join\";"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" public static final String ADMIN_HOME_PAGE \u003d ADMIN_PAGE + \"/home\";"},{"lineNumber":277,"author":{"gitId":"-"},"content":" public static final String ADMIN_ACCOUNTS_PAGE \u003d ADMIN_PAGE + \"/accounts\";"},{"lineNumber":278,"author":{"gitId":"-"},"content":" public static final String ADMIN_SEARCH_PAGE \u003d ADMIN_PAGE + \"/search\";"},{"lineNumber":279,"author":{"gitId":"-"},"content":" public static final String ADMIN_SESSIONS_PAGE \u003d ADMIN_PAGE + \"/sessions\";"},{"lineNumber":280,"author":{"gitId":"-"},"content":" public static final String ADMIN_TIMEZONE_PAGE \u003d ADMIN_PAGE + \"/timezone\";"},{"lineNumber":281,"author":{"gitId":"-"},"content":" public static final String ADMIN_LOGS_PAGE \u003d ADMIN_PAGE + \"/logs\";"},{"lineNumber":282,"author":{"gitId":"-"},"content":" public static final String ADMIN_NOTIFICATIONS_PAGE \u003d ADMIN_PAGE + \"/notifications\";"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" public static final String MAINTAINER_HOME_PAGE \u003d MAINTAINER_PAGE + \"/home\";"},{"lineNumber":285,"author":{"gitId":"-"},"content":""},{"lineNumber":286,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_HOME_PAGE \u003d INSTRUCTOR_PAGE + \"/home\";"},{"lineNumber":287,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SEARCH_PAGE \u003d INSTRUCTOR_PAGE + \"/search\";"},{"lineNumber":288,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSIONS_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions\";"},{"lineNumber":289,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_SUBMISSION_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions/submission\";"},{"lineNumber":290,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_EDIT_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions/edit\";"},{"lineNumber":291,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_INDIVIDUAL_EXTENSION_PAGE \u003d INSTRUCTOR_PAGE"},{"lineNumber":292,"author":{"gitId":"-"},"content":" + \"/sessions/individual-extension\";"},{"lineNumber":293,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_RESULTS_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions/result\";"},{"lineNumber":294,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SESSION_REPORT_PAGE \u003d INSTRUCTOR_PAGE + \"/sessions/report\";"},{"lineNumber":295,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSES_PAGE \u003d INSTRUCTOR_PAGE + \"/courses\";"},{"lineNumber":296,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_DETAILS_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/details\";"},{"lineNumber":297,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_EDIT_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/edit\";"},{"lineNumber":298,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_ENROLL_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/enroll\";"},{"lineNumber":299,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_STUDENT_DETAILS_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/student/details\";"},{"lineNumber":300,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_STUDENT_DETAILS_EDIT_PAGE \u003d INSTRUCTOR_PAGE + \"/courses/student/edit\";"},{"lineNumber":301,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_STUDENT_LIST_PAGE \u003d INSTRUCTOR_PAGE + \"/students\";"},{"lineNumber":302,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_STUDENT_RECORDS_PAGE \u003d INSTRUCTOR_PAGE + \"/students/records\";"},{"lineNumber":303,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_STUDENT_ACTIVITY_LOGS_PAGE \u003d INSTRUCTOR_PAGE"},{"lineNumber":304,"author":{"gitId":"-"},"content":" + \"/courses/student-activity-logs\";"},{"lineNumber":305,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_NOTIFICATIONS_PAGE \u003d INSTRUCTOR_PAGE + \"/notifications\";"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" public static final String STUDENT_HOME_PAGE \u003d STUDENT_PAGE + \"/home\";"},{"lineNumber":308,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_DETAILS_PAGE \u003d STUDENT_PAGE + \"/course\";"},{"lineNumber":309,"author":{"gitId":"-"},"content":" public static final String STUDENT_SESSION_SUBMISSION_PAGE \u003d STUDENT_PAGE + \"/sessions/submission\";"},{"lineNumber":310,"author":{"gitId":"-"},"content":" public static final String STUDENT_SESSION_RESULTS_PAGE \u003d STUDENT_PAGE + \"/sessions/result\";"},{"lineNumber":311,"author":{"gitId":"-"},"content":" public static final String STUDENT_NOTIFICATIONS_PAGE \u003d STUDENT_PAGE + \"/notifications\";"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":" public static final String SESSION_RESULTS_PAGE \u003d URI_PREFIX + \"/sessions/result\";"},{"lineNumber":314,"author":{"gitId":"-"},"content":" public static final String SESSION_SUBMISSION_PAGE \u003d URI_PREFIX + \"/sessions/submission\";"},{"lineNumber":315,"author":{"gitId":"-"},"content":" public static final String SESSIONS_LINK_RECOVERY_PAGE \u003d FRONT_PAGE + \"/help/session-links-recovery\";"},{"lineNumber":316,"author":{"gitId":"-"},"content":" }"},{"lineNumber":317,"author":{"gitId":"-"},"content":""},{"lineNumber":318,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":319,"author":{"gitId":"-"},"content":" * Represents URIs of resource endpoints."},{"lineNumber":320,"author":{"gitId":"-"},"content":" */"},{"lineNumber":321,"author":{"gitId":"-"},"content":" public static class ResourceURIs {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" private static final String URI_PREFIX \u003d \"/webapi\";"},{"lineNumber":323,"author":{"gitId":"-"},"content":""},{"lineNumber":324,"author":{"gitId":"-"},"content":" public static final String DATABUNDLE \u003d URI_PREFIX + \"/databundle\";"},{"lineNumber":325,"author":{"gitId":"-"},"content":" public static final String SQL_DATABUNDLE \u003d URI_PREFIX + \"/databundle/sql\";"},{"lineNumber":326,"author":{"gitId":"-"},"content":" public static final String DATABUNDLE_DOCUMENTS \u003d URI_PREFIX + \"/databundle/documents\";"},{"lineNumber":327,"author":{"gitId":"-"},"content":" public static final String DEADLINE_EXTENSION \u003d URI_PREFIX + \"/deadlineextension\";"},{"lineNumber":328,"author":{"gitId":"-"},"content":" public static final String EXCEPTION \u003d URI_PREFIX + \"/exception\";"},{"lineNumber":329,"author":{"gitId":"-"},"content":" public static final String ERROR_REPORT \u003d URI_PREFIX + \"/errorreport\";"},{"lineNumber":330,"author":{"gitId":"-"},"content":" public static final String AUTH \u003d URI_PREFIX + \"/auth\";"},{"lineNumber":331,"author":{"gitId":"-"},"content":" public static final String AUTH_REGKEY \u003d URI_PREFIX + \"/auth/regkey\";"},{"lineNumber":332,"author":{"gitId":"-"},"content":" public static final String ACCOUNT \u003d URI_PREFIX + \"/account\";"},{"lineNumber":333,"author":{"gitId":"-"},"content":" public static final String ACCOUNT_RESET \u003d URI_PREFIX + \"/account/reset\";"},{"lineNumber":334,"author":{"gitId":"-"},"content":" public static final String ACCOUNT_REQUEST \u003d URI_PREFIX + \"/account/request\";"},{"lineNumber":335,"author":{"gitId":"-"},"content":" public static final String ACCOUNT_REQUEST_RESET \u003d ACCOUNT_REQUEST + \"/reset\";"},{"lineNumber":336,"author":{"gitId":"-"},"content":" public static final String ACCOUNTS \u003d URI_PREFIX + \"/accounts\";"},{"lineNumber":337,"author":{"gitId":"-"},"content":" public static final String RESPONSE_COMMENT \u003d URI_PREFIX + \"/responsecomment\";"},{"lineNumber":338,"author":{"gitId":"-"},"content":" public static final String COURSE \u003d URI_PREFIX + \"/course\";"},{"lineNumber":339,"author":{"gitId":"-"},"content":" public static final String COURSE_ARCHIVE \u003d URI_PREFIX + \"/course/archive\";"},{"lineNumber":340,"author":{"gitId":"-"},"content":" public static final String BIN_COURSE \u003d URI_PREFIX + \"/bin/course\";"},{"lineNumber":341,"author":{"gitId":"-"},"content":" public static final String COURSE_SECTIONS \u003d URI_PREFIX + \"/course/sections\";"},{"lineNumber":342,"author":{"gitId":"-"},"content":" public static final String COURSES \u003d URI_PREFIX + \"/courses\";"},{"lineNumber":343,"author":{"gitId":"-"},"content":" public static final String INSTRUCTORS \u003d URI_PREFIX + \"/instructors\";"},{"lineNumber":344,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR \u003d URI_PREFIX + \"/instructor\";"},{"lineNumber":345,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_PRIVILEGE \u003d URI_PREFIX + \"/instructor/privilege\";"},{"lineNumber":346,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_KEY \u003d URI_PREFIX + \"/instructor/key\";"},{"lineNumber":347,"author":{"gitId":"-"},"content":" public static final String RESULT \u003d URI_PREFIX + \"/result\";"},{"lineNumber":348,"author":{"gitId":"-"},"content":" public static final String STUDENTS \u003d URI_PREFIX + \"/students\";"},{"lineNumber":349,"author":{"gitId":"-"},"content":" public static final String STUDENT \u003d URI_PREFIX + \"/student\";"},{"lineNumber":350,"author":{"gitId":"-"},"content":" public static final String STUDENT_KEY \u003d URI_PREFIX + \"/student/key\";"},{"lineNumber":351,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION \u003d URI_PREFIX + \"/notification\";"},{"lineNumber":352,"author":{"gitId":"-"},"content":" public static final String NOTIFICATIONS \u003d URI_PREFIX + \"/notifications\";"},{"lineNumber":353,"author":{"gitId":"-"},"content":" public static final String NOTIFICATION_READ \u003d URI_PREFIX + \"/notification/read\";"},{"lineNumber":354,"author":{"gitId":"-"},"content":" public static final String SESSIONS_ONGOING \u003d URI_PREFIX + \"/sessions/ongoing\";"},{"lineNumber":355,"author":{"gitId":"-"},"content":" public static final String SESSION \u003d URI_PREFIX + \"/session\";"},{"lineNumber":356,"author":{"gitId":"-"},"content":" public static final String SESSION_PUBLISH \u003d URI_PREFIX + \"/session/publish\";"},{"lineNumber":357,"author":{"gitId":"-"},"content":" public static final String SESSION_REMIND_SUBMISSION \u003d URI_PREFIX + \"/session/remind/submission\";"},{"lineNumber":358,"author":{"gitId":"-"},"content":" public static final String SESSION_REMIND_RESULT \u003d URI_PREFIX + \"/session/remind/result\";"},{"lineNumber":359,"author":{"gitId":"-"},"content":" public static final String SESSION_STATS \u003d URI_PREFIX + \"/session/stats\";"},{"lineNumber":360,"author":{"gitId":"-"},"content":" public static final String SESSION_SUBMITTED_GIVER_SET \u003d URI_PREFIX + \"/session/submitted/giverset\";"},{"lineNumber":361,"author":{"gitId":"-"},"content":" public static final String SESSIONS \u003d URI_PREFIX + \"/sessions\";"},{"lineNumber":362,"author":{"gitId":"-"},"content":" public static final String SEARCH_ACCOUNT_REQUESTS \u003d URI_PREFIX + \"/search/accountrequests\";"},{"lineNumber":363,"author":{"gitId":"-"},"content":" public static final String SEARCH_INSTRUCTORS \u003d URI_PREFIX + \"/search/instructors\";"},{"lineNumber":364,"author":{"gitId":"-"},"content":" public static final String SEARCH_STUDENTS \u003d URI_PREFIX + \"/search/students\";"},{"lineNumber":365,"author":{"gitId":"-"},"content":" public static final String BIN_SESSION \u003d URI_PREFIX + \"/bin/session\";"},{"lineNumber":366,"author":{"gitId":"-"},"content":" public static final String QUESTIONS \u003d URI_PREFIX + \"/questions\";"},{"lineNumber":367,"author":{"gitId":"-"},"content":" public static final String QUESTION \u003d URI_PREFIX + \"/question\";"},{"lineNumber":368,"author":{"gitId":"-"},"content":" public static final String QUESTION_RECIPIENTS \u003d URI_PREFIX + \"/question/recipients\";"},{"lineNumber":369,"author":{"gitId":"-"},"content":" public static final String RESPONSES \u003d URI_PREFIX + \"/responses\";"},{"lineNumber":370,"author":{"gitId":"-"},"content":" public static final String USAGE_STATISTICS \u003d URI_PREFIX + \"/usagestats\";"},{"lineNumber":371,"author":{"gitId":"-"},"content":" public static final String HAS_RESPONSES \u003d URI_PREFIX + \"/hasResponses\";"},{"lineNumber":372,"author":{"gitId":"-"},"content":" public static final String JOIN \u003d URI_PREFIX + \"/join\";"},{"lineNumber":373,"author":{"gitId":"-"},"content":" public static final String JOIN_REMIND \u003d URI_PREFIX + \"/join/remind\";"},{"lineNumber":374,"author":{"gitId":"-"},"content":" public static final String TIMEZONE \u003d URI_PREFIX + \"/timezone\";"},{"lineNumber":375,"author":{"gitId":"-"},"content":" public static final String SESSION_LINKS_RECOVERY \u003d URI_PREFIX + \"/sessionlinksrecovery\";"},{"lineNumber":376,"author":{"gitId":"-"},"content":" public static final String EMAIL \u003d URI_PREFIX + \"/email\";"},{"lineNumber":377,"author":{"gitId":"-"},"content":" public static final String LOGIN_EMAIL \u003d URI_PREFIX + \"/email/login\";"},{"lineNumber":378,"author":{"gitId":"-"},"content":" public static final String SESSION_LOGS \u003d URI_PREFIX + \"/logs/session\";"},{"lineNumber":379,"author":{"gitId":"-"},"content":" public static final String LOGS \u003d URI_PREFIX + \"/logs/query\";"},{"lineNumber":380,"author":{"gitId":"-"},"content":" public static final String ACTION_CLASS \u003d URI_PREFIX + \"/actionclass\";"},{"lineNumber":381,"author":{"gitId":"-"},"content":" public static final String USER_COOKIE \u003d URI_PREFIX + \"/cookie\";"},{"lineNumber":382,"author":{"gitId":"-"},"content":" }"},{"lineNumber":383,"author":{"gitId":"-"},"content":""},{"lineNumber":384,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":385,"author":{"gitId":"-"},"content":" * Represents URIs of endpoints used by cron jobs."},{"lineNumber":386,"author":{"gitId":"-"},"content":" */"},{"lineNumber":387,"author":{"gitId":"-"},"content":" public static class CronJobURIs {"},{"lineNumber":388,"author":{"gitId":"-"},"content":" private static final String URI_PREFIX \u003d \"/auto\";"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_LOG_COMPILATION \u003d URI_PREFIX + \"/compileLogs\";"},{"lineNumber":391,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_DATASTORE_BACKUP \u003d URI_PREFIX + \"/datastoreBackup\";"},{"lineNumber":392,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_OPENING_SOON_REMINDERS \u003d"},{"lineNumber":393,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionOpeningSoonReminders\";"},{"lineNumber":394,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_OPENING_REMINDERS \u003d"},{"lineNumber":395,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionOpeningReminders\";"},{"lineNumber":396,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_CLOSED_REMINDERS \u003d"},{"lineNumber":397,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionClosedReminders\";"},{"lineNumber":398,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_CLOSING_REMINDERS \u003d"},{"lineNumber":399,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionClosingReminders\";"},{"lineNumber":400,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_FEEDBACK_PUBLISHED_REMINDERS \u003d"},{"lineNumber":401,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionPublishedReminders\";"},{"lineNumber":402,"author":{"gitId":"-"},"content":" public static final String AUTOMATED_USAGE_STATISTICS_COLLECTION \u003d"},{"lineNumber":403,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/calculateUsageStatistics\";"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":407,"author":{"gitId":"-"},"content":" * Configurations for task queue."},{"lineNumber":408,"author":{"gitId":"-"},"content":" */"},{"lineNumber":409,"author":{"gitId":"-"},"content":" public static class TaskQueue {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" public static final String URI_PREFIX \u003d \"/worker\";"},{"lineNumber":411,"author":{"gitId":"-"},"content":""},{"lineNumber":412,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_PUBLISHED_EMAIL_QUEUE_NAME \u003d"},{"lineNumber":413,"author":{"gitId":"-"},"content":" \"feedback-session-published-email-queue\";"},{"lineNumber":414,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_PUBLISHED_EMAIL_WORKER_URL \u003d"},{"lineNumber":415,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionPublishedEmail\";"},{"lineNumber":416,"author":{"gitId":"-"},"content":""},{"lineNumber":417,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_RESEND_PUBLISHED_EMAIL_QUEUE_NAME \u003d"},{"lineNumber":418,"author":{"gitId":"-"},"content":" \"feedback-session-resend-published-email-queue\";"},{"lineNumber":419,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_RESEND_PUBLISHED_EMAIL_WORKER_URL \u003d"},{"lineNumber":420,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionResendPublishedEmail\";"},{"lineNumber":421,"author":{"gitId":"-"},"content":""},{"lineNumber":422,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_REMIND_EMAIL_QUEUE_NAME \u003d \"feedback-session-remind-email-queue\";"},{"lineNumber":423,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_REMIND_EMAIL_WORKER_URL \u003d URI_PREFIX + \"/feedbackSessionRemindEmail\";"},{"lineNumber":424,"author":{"gitId":"-"},"content":""},{"lineNumber":425,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_REMIND_PARTICULAR_USERS_EMAIL_QUEUE_NAME \u003d"},{"lineNumber":426,"author":{"gitId":"-"},"content":" \"feedback-session-remind-particular-users-email-queue\";"},{"lineNumber":427,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_REMIND_PARTICULAR_USERS_EMAIL_WORKER_URL \u003d"},{"lineNumber":428,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionRemindParticularUsersEmail\";"},{"lineNumber":429,"author":{"gitId":"-"},"content":""},{"lineNumber":430,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_UNPUBLISHED_EMAIL_QUEUE_NAME \u003d"},{"lineNumber":431,"author":{"gitId":"-"},"content":" \"feedback-session-unpublished-email-queue\";"},{"lineNumber":432,"author":{"gitId":"-"},"content":" public static final String FEEDBACK_SESSION_UNPUBLISHED_EMAIL_WORKER_URL \u003d"},{"lineNumber":433,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/feedbackSessionUnpublishedEmail\";"},{"lineNumber":434,"author":{"gitId":"-"},"content":""},{"lineNumber":435,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_JOIN_EMAIL_QUEUE_NAME \u003d \"instructor-course-join-email-queue\";"},{"lineNumber":436,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_COURSE_JOIN_EMAIL_WORKER_URL \u003d URI_PREFIX + \"/instructorCourseJoinEmail\";"},{"lineNumber":437,"author":{"gitId":"-"},"content":""},{"lineNumber":438,"author":{"gitId":"-"},"content":" public static final String SEND_EMAIL_QUEUE_NAME \u003d \"send-email-queue\";"},{"lineNumber":439,"author":{"gitId":"-"},"content":" public static final String SEND_EMAIL_WORKER_URL \u003d URI_PREFIX + \"/sendEmail\";"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_JOIN_EMAIL_QUEUE_NAME \u003d \"student-course-join-email-queue\";"},{"lineNumber":442,"author":{"gitId":"-"},"content":" public static final String STUDENT_COURSE_JOIN_EMAIL_WORKER_URL \u003d URI_PREFIX + \"/studentCourseJoinEmail\";"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" public static final String SEARCH_INDEXING_QUEUE_NAME \u003d \"search-indexing-queue\";"},{"lineNumber":445,"author":{"gitId":"-"},"content":" public static final String INSTRUCTOR_SEARCH_INDEXING_WORKER_URL \u003d URI_PREFIX + \"/instructorSearchIndexing\";"},{"lineNumber":446,"author":{"gitId":"-"},"content":" public static final String ACCOUNT_REQUEST_SEARCH_INDEXING_WORKER_URL \u003d"},{"lineNumber":447,"author":{"gitId":"-"},"content":" URI_PREFIX + \"/accountRequestSearchIndexing\";"},{"lineNumber":448,"author":{"gitId":"-"},"content":" public static final String STUDENT_SEARCH_INDEXING_WORKER_URL \u003d URI_PREFIX + \"/studentSearchIndexing\";"},{"lineNumber":449,"author":{"gitId":"-"},"content":" }"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":2,"-":449}},{"path":"src/main/java/teammates/sqllogic/api/Logic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.api;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Set;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import javax.annotation.Nullable;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackQuestionRecipient;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EnrollException;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.exception.InstructorUpdateException;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.exception.StudentUpdateException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.AccountRequestsLogic;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.AccountsLogic;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.CoursesLogic;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.DataBundleLogic;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.DeadlineExtensionsLogic;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackQuestionsLogic;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackResponseCommentsLogic;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackResponsesLogic;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackSessionsLogic;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.NotificationsLogic;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.UsageStatisticsLogic;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.UsersLogic;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":47,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":49,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.UsageStatistics;"},{"lineNumber":50,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":51,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackQuestionUpdateRequest;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackResponseCommentUpdateRequest;"},{"lineNumber":53,"author":{"gitId":"-"},"content":"import teammates.ui.request.InstructorCreateRequest;"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Provides the business logic for production usage of the system."},{"lineNumber":57,"author":{"gitId":"-"},"content":" *"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis is a Facade class which simply forwards the method to internal classes."},{"lineNumber":59,"author":{"gitId":"-"},"content":" */"},{"lineNumber":60,"author":{"gitId":"-"},"content":"public class Logic {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" private static final Logic instance \u003d new Logic();"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" final AccountsLogic accountsLogic \u003d AccountsLogic.inst();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" final AccountRequestsLogic accountRequestLogic \u003d AccountRequestsLogic.inst();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" final CoursesLogic coursesLogic \u003d CoursesLogic.inst();"},{"lineNumber":66,"author":{"gitId":"-"},"content":" final DeadlineExtensionsLogic deadlineExtensionsLogic \u003d DeadlineExtensionsLogic.inst();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" final FeedbackQuestionsLogic feedbackQuestionsLogic \u003d FeedbackQuestionsLogic.inst();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" final FeedbackResponsesLogic feedbackResponsesLogic \u003d FeedbackResponsesLogic.inst();"},{"lineNumber":69,"author":{"gitId":"-"},"content":" final FeedbackResponseCommentsLogic feedbackResponseCommentsLogic \u003d FeedbackResponseCommentsLogic.inst();"},{"lineNumber":70,"author":{"gitId":"-"},"content":" final FeedbackSessionsLogic feedbackSessionsLogic \u003d FeedbackSessionsLogic.inst();"},{"lineNumber":71,"author":{"gitId":"-"},"content":" final UsageStatisticsLogic usageStatisticsLogic \u003d UsageStatisticsLogic.inst();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" final UsersLogic usersLogic \u003d UsersLogic.inst();"},{"lineNumber":73,"author":{"gitId":"-"},"content":" final NotificationsLogic notificationsLogic \u003d NotificationsLogic.inst();"},{"lineNumber":74,"author":{"gitId":"-"},"content":" final DataBundleLogic dataBundleLogic \u003d DataBundleLogic.inst();"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" Logic() {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" public static Logic inst() {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * Creates an account request."},{"lineNumber":86,"author":{"gitId":"-"},"content":" *"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * @return newly created account request."},{"lineNumber":88,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the account request details are invalid."},{"lineNumber":89,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the account request already exists."},{"lineNumber":90,"author":{"gitId":"-"},"content":" */"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequest(String name, String email, String institute)"},{"lineNumber":92,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" return accountRequestLogic.createAccountRequest(name, email, institute);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Creates a or gets an account request."},{"lineNumber":99,"author":{"gitId":"-"},"content":" *"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * @return newly created account request."},{"lineNumber":101,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the account request details are invalid."},{"lineNumber":102,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the account request already exists."},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequestWithTransaction(String name, String email, String institute)"},{"lineNumber":105,"author":{"gitId":"-"},"content":" throws InvalidParametersException {"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" return accountRequestLogic.createOrGetAccountRequestWithTransaction(name, email, institute);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Gets the account request with the given email and institute."},{"lineNumber":112,"author":{"gitId":"-"},"content":" *"},{"lineNumber":113,"author":{"gitId":"-"},"content":" * @return account request with the given email and institute."},{"lineNumber":114,"author":{"gitId":"-"},"content":" */"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public AccountRequest getAccountRequest(String email, String institute) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" return accountRequestLogic.getAccountRequest(email, institute);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":" /**"},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" * Gets the account request with the associated {@code regkey}."},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":" *"},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":" * @return account request with the associated {@code regkey}."},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":" public AccountRequest getAccountRequestByRegistrationKey(String regkey) {"},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" return accountRequestLogic.getAccountRequestByRegistrationKey(regkey);"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":129,"author":{"gitId":"-"},"content":" * Updates the given account request."},{"lineNumber":130,"author":{"gitId":"-"},"content":" *"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * @return the updated account request."},{"lineNumber":132,"author":{"gitId":"-"},"content":" */"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public AccountRequest updateAccountRequest(AccountRequest accountRequest)"},{"lineNumber":134,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return accountRequestLogic.updateAccountRequest(accountRequest);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"-"},"content":" * Creates/Resets the account request with the given email and institute"},{"lineNumber":140,"author":{"gitId":"-"},"content":" * such that it is not registered."},{"lineNumber":141,"author":{"gitId":"-"},"content":" *"},{"lineNumber":142,"author":{"gitId":"-"},"content":" * @return account request that is unregistered with the"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * email and institute."},{"lineNumber":144,"author":{"gitId":"-"},"content":" */"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public AccountRequest resetAccountRequest(String email, String institute)"},{"lineNumber":146,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" return accountRequestLogic.resetAccountRequest(email, institute);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":151,"author":{"gitId":"-"},"content":" * Deletes account request by email and institute."},{"lineNumber":152,"author":{"gitId":"-"},"content":" *"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * \u003cli\u003eFails silently if no such account request.\u003c/li\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":" *"},{"lineNumber":157,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":" * All parameters are non-null."},{"lineNumber":159,"author":{"gitId":"-"},"content":" */"},{"lineNumber":160,"author":{"gitId":"-"},"content":" public void deleteAccountRequest(String email, String institute) {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" accountRequestLogic.deleteAccountRequest(email, institute);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":165,"author":{"gitId":"-"},"content":" * Gets an account."},{"lineNumber":166,"author":{"gitId":"-"},"content":" */"},{"lineNumber":167,"author":{"gitId":"-"},"content":" public Account getAccount(UUID id) {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" return accountsLogic.getAccount(id);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * Gets an account by googleId."},{"lineNumber":173,"author":{"gitId":"-"},"content":" */"},{"lineNumber":174,"author":{"gitId":"-"},"content":" public Account getAccountForGoogleId(String googleId) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return accountsLogic.getAccountForGoogleId(googleId);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":179,"author":{"gitId":"-"},"content":" * Get a list of accounts associated with email provided."},{"lineNumber":180,"author":{"gitId":"-"},"content":" */"},{"lineNumber":181,"author":{"gitId":"-"},"content":" public List\u003cAccount\u003e getAccountsForEmail(String email) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" return accountsLogic.getAccountsForEmail(email);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":186,"author":{"gitId":"-"},"content":" * Creates an account."},{"lineNumber":187,"author":{"gitId":"-"},"content":" *"},{"lineNumber":188,"author":{"gitId":"-"},"content":" * @return the created account"},{"lineNumber":189,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the account is not valid"},{"lineNumber":190,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the account already exists in the database."},{"lineNumber":191,"author":{"gitId":"-"},"content":" */"},{"lineNumber":192,"author":{"gitId":"-"},"content":" public Account createAccount(Account account)"},{"lineNumber":193,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" return accountsLogic.createAccount(account);"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":198,"author":{"gitId":"-"},"content":" * Deletes account by googleId."},{"lineNumber":199,"author":{"gitId":"-"},"content":" *"},{"lineNumber":200,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":201,"author":{"gitId":"-"},"content":" * \u003cli\u003eFails silently if no such account.\u003c/li\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":203,"author":{"gitId":"-"},"content":" *"},{"lineNumber":204,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":205,"author":{"gitId":"-"},"content":" * All parameters are non-null."},{"lineNumber":206,"author":{"gitId":"-"},"content":" */"},{"lineNumber":207,"author":{"gitId":"-"},"content":" public void deleteAccount(String googleId) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccount(googleId);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":212,"author":{"gitId":"-"},"content":" * Deletes account and all users by googleId."},{"lineNumber":213,"author":{"gitId":"-"},"content":" *"},{"lineNumber":214,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * \u003cli\u003eFails silently if no such account.\u003c/li\u003e"},{"lineNumber":216,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":217,"author":{"gitId":"-"},"content":" *"},{"lineNumber":218,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":219,"author":{"gitId":"-"},"content":" * All parameters are non-null."},{"lineNumber":220,"author":{"gitId":"-"},"content":" */"},{"lineNumber":221,"author":{"gitId":"-"},"content":" public void deleteAccountCascade(String googleId) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccountCascade(googleId);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":226,"author":{"gitId":"-"},"content":" * Gets all students associated with a googleId."},{"lineNumber":227,"author":{"gitId":"-"},"content":" */"},{"lineNumber":228,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByGoogleId(String googleId) {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" return usersLogic.getStudentsByGoogleId(googleId);"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":233,"author":{"gitId":"-"},"content":" * Gets a course by course id."},{"lineNumber":234,"author":{"gitId":"-"},"content":" * @param courseId courseId of the course."},{"lineNumber":235,"author":{"gitId":"-"},"content":" * @return the specified course."},{"lineNumber":236,"author":{"gitId":"-"},"content":" */"},{"lineNumber":237,"author":{"gitId":"-"},"content":" public Course getCourse(String courseId) {"},{"lineNumber":238,"author":{"gitId":"-"},"content":" return coursesLogic.getCourse(courseId);"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":242,"author":{"gitId":"domoberzin"},"content":" * Gets a section from a course by section name."},{"lineNumber":243,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":244,"author":{"gitId":"domoberzin"},"content":" public Section getSection(String courseId, String section) {"},{"lineNumber":245,"author":{"gitId":"domoberzin"},"content":" return usersLogic.getSection(courseId, section);"},{"lineNumber":246,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":247,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Gets courses associated with student."},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":251,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":252,"author":{"gitId":"-"},"content":" */"},{"lineNumber":253,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getCoursesForStudentAccount(String googleId) {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" return coursesLogic.getCoursesForStudentAccount(googleId);"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":260,"author":{"gitId":"-"},"content":" * Gets courses associated with instructors."},{"lineNumber":261,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":262,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":263,"author":{"gitId":"-"},"content":" *"},{"lineNumber":264,"author":{"gitId":"-"},"content":" * @return Courses the given instructors is in except for courses in Recycle Bin."},{"lineNumber":265,"author":{"gitId":"-"},"content":" */"},{"lineNumber":266,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getCoursesForInstructors(List\u003cInstructor\u003e instructorsList) {"},{"lineNumber":267,"author":{"gitId":"-"},"content":" assert instructorsList !\u003d null;"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" return coursesLogic.getCoursesForInstructors(instructorsList);"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":273,"author":{"gitId":"-"},"content":" * Gets courses associated with instructors that are soft deleted."},{"lineNumber":274,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":276,"author":{"gitId":"-"},"content":" *"},{"lineNumber":277,"author":{"gitId":"-"},"content":" * @return Courses in Recycle Bin that the given instructors is in."},{"lineNumber":278,"author":{"gitId":"-"},"content":" */"},{"lineNumber":279,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getSoftDeletedCoursesForInstructors(List\u003cInstructor\u003e instructorsList) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" assert instructorsList !\u003d null;"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" return coursesLogic.getSoftDeletedCoursesForInstructors(instructorsList);"},{"lineNumber":283,"author":{"gitId":"-"},"content":" }"},{"lineNumber":284,"author":{"gitId":"-"},"content":""},{"lineNumber":285,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":286,"author":{"gitId":"yuanxi1"},"content":" * Gets the institute of the course."},{"lineNumber":287,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":288,"author":{"gitId":"yuanxi1"},"content":" public String getCourseInstitute(String courseId) {"},{"lineNumber":289,"author":{"gitId":"yuanxi1"},"content":" return coursesLogic.getCourseInstitute(courseId);"},{"lineNumber":290,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":291,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * Creates a course."},{"lineNumber":294,"author":{"gitId":"-"},"content":" * @param course the course to create."},{"lineNumber":295,"author":{"gitId":"-"},"content":" * @return the created course."},{"lineNumber":296,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the course is not valid."},{"lineNumber":297,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the course already exists."},{"lineNumber":298,"author":{"gitId":"-"},"content":" */"},{"lineNumber":299,"author":{"gitId":"-"},"content":" public Course createCourse(Course course) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" return coursesLogic.createCourse(course);"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":304,"author":{"gitId":"-"},"content":" * Deletes a course by course id."},{"lineNumber":305,"author":{"gitId":"-"},"content":" * @param courseId of course."},{"lineNumber":306,"author":{"gitId":"-"},"content":" */"},{"lineNumber":307,"author":{"gitId":"-"},"content":" public void deleteCourseCascade(String courseId) {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" coursesLogic.deleteCourseCascade(courseId);"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":312,"author":{"gitId":"domoberzin"},"content":" * Updates a student by {@link Student}."},{"lineNumber":313,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":314,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf email changed, update by recreating the student and cascade update all responses"},{"lineNumber":315,"author":{"gitId":"marquestye"},"content":" * and comments the student gives/receives."},{"lineNumber":316,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":317,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf team changed, cascade delete all responses the student gives/receives within that team."},{"lineNumber":318,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":319,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf section changed, cascade update all responses the student gives/receives."},{"lineNumber":320,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":321,"author":{"gitId":"domoberzin"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":322,"author":{"gitId":"marquestye"},"content":" * * Student parameter is non-null."},{"lineNumber":323,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":324,"author":{"gitId":"domoberzin"},"content":" * @return updated student"},{"lineNumber":325,"author":{"gitId":"domoberzin"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":326,"author":{"gitId":"domoberzin"},"content":" * @throws EntityDoesNotExistException if the student cannot be found"},{"lineNumber":327,"author":{"gitId":"domoberzin"},"content":" * @throws EntityAlreadyExistsException if the student cannot be updated"},{"lineNumber":328,"author":{"gitId":"domoberzin"},"content":" * by recreation because of an existent student"},{"lineNumber":329,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":330,"author":{"gitId":"domoberzin"},"content":" public Student updateStudentCascade(Student student)"},{"lineNumber":331,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":332,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":333,"author":{"gitId":"domoberzin"},"content":" assert student !\u003d null;"},{"lineNumber":334,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":335,"author":{"gitId":"domoberzin"},"content":" return usersLogic.updateStudentCascade(student);"},{"lineNumber":336,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":337,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":339,"author":{"gitId":"-"},"content":" * Moves a course to Recycle Bin by its given corresponding ID."},{"lineNumber":340,"author":{"gitId":"-"},"content":" * @return the deletion timestamp assigned to the course."},{"lineNumber":341,"author":{"gitId":"-"},"content":" */"},{"lineNumber":342,"author":{"gitId":"-"},"content":" public Course moveCourseToRecycleBin(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":343,"author":{"gitId":"-"},"content":" return coursesLogic.moveCourseToRecycleBin(courseId);"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":347,"author":{"gitId":"-"},"content":" * Restores a course and all data related to the course from Recycle Bin by"},{"lineNumber":348,"author":{"gitId":"-"},"content":" * its given corresponding ID."},{"lineNumber":349,"author":{"gitId":"-"},"content":" */"},{"lineNumber":350,"author":{"gitId":"-"},"content":" public void restoreCourseFromRecycleBin(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" coursesLogic.restoreCourseFromRecycleBin(courseId);"},{"lineNumber":352,"author":{"gitId":"-"},"content":" }"},{"lineNumber":353,"author":{"gitId":"-"},"content":""},{"lineNumber":354,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":355,"author":{"gitId":"-"},"content":" * Updates a course."},{"lineNumber":356,"author":{"gitId":"-"},"content":" *"},{"lineNumber":357,"author":{"gitId":"-"},"content":" * @return updated course"},{"lineNumber":358,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":359,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the course cannot be found"},{"lineNumber":360,"author":{"gitId":"-"},"content":" */"},{"lineNumber":361,"author":{"gitId":"-"},"content":" public Course updateCourse(String courseId, String name, String timezone)"},{"lineNumber":362,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":363,"author":{"gitId":"-"},"content":" return coursesLogic.updateCourse(courseId, name, timezone);"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":367,"author":{"gitId":"-"},"content":" * Gets a list of section names for the given {@code courseId}."},{"lineNumber":368,"author":{"gitId":"-"},"content":" */"},{"lineNumber":369,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getSectionNamesForCourse(String courseId)"},{"lineNumber":370,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" return coursesLogic.getSectionNamesForCourse(courseId);"},{"lineNumber":372,"author":{"gitId":"-"},"content":" }"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":375,"author":{"gitId":"-"},"content":" * Get section by {@code courseId} and {@code teamName}."},{"lineNumber":376,"author":{"gitId":"-"},"content":" */"},{"lineNumber":377,"author":{"gitId":"-"},"content":" public Section getSectionByCourseIdAndTeam(String courseId, String teamName) {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" return coursesLogic.getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":379,"author":{"gitId":"-"},"content":" }"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":382,"author":{"gitId":"-"},"content":" * Creates a deadline extension."},{"lineNumber":383,"author":{"gitId":"-"},"content":" *"},{"lineNumber":384,"author":{"gitId":"-"},"content":" * @return created deadline extension"},{"lineNumber":385,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the deadline extension is not valid"},{"lineNumber":386,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the deadline extension already exist"},{"lineNumber":387,"author":{"gitId":"-"},"content":" */"},{"lineNumber":388,"author":{"gitId":"-"},"content":" public DeadlineExtension createDeadlineExtension(DeadlineExtension deadlineExtension)"},{"lineNumber":389,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":390,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.createDeadlineExtension(deadlineExtension);"},{"lineNumber":391,"author":{"gitId":"-"},"content":" }"},{"lineNumber":392,"author":{"gitId":"-"},"content":""},{"lineNumber":393,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":394,"author":{"gitId":"-"},"content":" * Updates a deadline extension."},{"lineNumber":395,"author":{"gitId":"-"},"content":" *"},{"lineNumber":396,"author":{"gitId":"-"},"content":" * @return updated deadline extension"},{"lineNumber":397,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the deadline extension does not exist"},{"lineNumber":398,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the deadline extension is not valid"},{"lineNumber":399,"author":{"gitId":"-"},"content":" *"},{"lineNumber":400,"author":{"gitId":"-"},"content":" */"},{"lineNumber":401,"author":{"gitId":"-"},"content":" public DeadlineExtension updateDeadlineExtension(DeadlineExtension de)"},{"lineNumber":402,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":403,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.updateDeadlineExtension(de);"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":407,"author":{"gitId":"-"},"content":" * Deletes a deadline extension."},{"lineNumber":408,"author":{"gitId":"-"},"content":" */"},{"lineNumber":409,"author":{"gitId":"-"},"content":" public void deleteDeadlineExtension(DeadlineExtension de) {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.deleteDeadlineExtension(de);"},{"lineNumber":411,"author":{"gitId":"-"},"content":" }"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":414,"author":{"gitId":"-"},"content":" * Fetch the deadline extension for a given user and session feedback."},{"lineNumber":415,"author":{"gitId":"-"},"content":" *"},{"lineNumber":416,"author":{"gitId":"-"},"content":" * @return deadline extension instant if exists, else the default end time instant"},{"lineNumber":417,"author":{"gitId":"-"},"content":" * for the session feedback."},{"lineNumber":418,"author":{"gitId":"-"},"content":" */"},{"lineNumber":419,"author":{"gitId":"-"},"content":" public Instant getDeadlineForUser(FeedbackSession session, User user) {"},{"lineNumber":420,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.getDeadlineForUser(session, user);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" }"},{"lineNumber":422,"author":{"gitId":"-"},"content":""},{"lineNumber":423,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":424,"author":{"gitId":"-"},"content":" * Fetch the deadline extension for a given user and session feedback."},{"lineNumber":425,"author":{"gitId":"-"},"content":" *"},{"lineNumber":426,"author":{"gitId":"-"},"content":" * @return deadline extension instant if exists, else return null since no deadline extensions."},{"lineNumber":427,"author":{"gitId":"-"},"content":" */"},{"lineNumber":428,"author":{"gitId":"-"},"content":" public Instant getExtendedDeadlineForUser(FeedbackSession session, User user) {"},{"lineNumber":429,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.getExtendedDeadlineForUser(session, user);"},{"lineNumber":430,"author":{"gitId":"-"},"content":" }"},{"lineNumber":431,"author":{"gitId":"-"},"content":""},{"lineNumber":432,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":433,"author":{"gitId":"-"},"content":" * Gets a list of deadline extensions with endTime coming up soon"},{"lineNumber":434,"author":{"gitId":"-"},"content":" * and possibly need a closing email to be sent."},{"lineNumber":435,"author":{"gitId":"-"},"content":" */"},{"lineNumber":436,"author":{"gitId":"-"},"content":" public List\u003cDeadlineExtension\u003e getDeadlineExtensionsPossiblyNeedingClosingEmail() {"},{"lineNumber":437,"author":{"gitId":"-"},"content":" return deadlineExtensionsLogic.getDeadlineExtensionsPossiblyNeedingClosingEmail();"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":""},{"lineNumber":440,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":441,"author":{"gitId":"-"},"content":" * Gets a feedback session."},{"lineNumber":442,"author":{"gitId":"-"},"content":" *"},{"lineNumber":443,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":444,"author":{"gitId":"-"},"content":" */"},{"lineNumber":445,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(UUID id) {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSession(id);"},{"lineNumber":447,"author":{"gitId":"-"},"content":" }"},{"lineNumber":448,"author":{"gitId":"-"},"content":""},{"lineNumber":449,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":450,"author":{"gitId":"-"},"content":" * Gets a feedback session for {@code feedbackSessionName} and {@code courseId}."},{"lineNumber":451,"author":{"gitId":"-"},"content":" *"},{"lineNumber":452,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":453,"author":{"gitId":"-"},"content":" */"},{"lineNumber":454,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":455,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":456,"author":{"gitId":"-"},"content":" }"},{"lineNumber":457,"author":{"gitId":"-"},"content":""},{"lineNumber":458,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":459,"author":{"gitId":"-"},"content":" * Gets a feedback session from the recycle bin."},{"lineNumber":460,"author":{"gitId":"-"},"content":" *"},{"lineNumber":461,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":462,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":463,"author":{"gitId":"-"},"content":" *"},{"lineNumber":464,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":465,"author":{"gitId":"-"},"content":" */"},{"lineNumber":466,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSessionFromRecycleBin(String feedbackSessionName, String courseId) {"},{"lineNumber":467,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":468,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":469,"author":{"gitId":"-"},"content":""},{"lineNumber":470,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionFromRecycleBin(feedbackSessionName, courseId);"},{"lineNumber":471,"author":{"gitId":"-"},"content":" }"},{"lineNumber":472,"author":{"gitId":"-"},"content":""},{"lineNumber":473,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":474,"author":{"gitId":"-"},"content":" * Returns a {@code List} of feedback sessions in the Recycle Bin for the instructors."},{"lineNumber":475,"author":{"gitId":"-"},"content":" * \u003cbr\u003e"},{"lineNumber":476,"author":{"gitId":"-"},"content":" * Omits sessions if the corresponding courses are archived or in Recycle Bin"},{"lineNumber":477,"author":{"gitId":"-"},"content":" */"},{"lineNumber":478,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getSoftDeletedFeedbackSessionsForInstructors("},{"lineNumber":479,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList) {"},{"lineNumber":480,"author":{"gitId":"-"},"content":" assert instructorList !\u003d null;"},{"lineNumber":481,"author":{"gitId":"-"},"content":""},{"lineNumber":482,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getSoftDeletedFeedbackSessionsForInstructors(instructorList);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" }"},{"lineNumber":484,"author":{"gitId":"-"},"content":""},{"lineNumber":485,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":486,"author":{"gitId":"-"},"content":" * Gets a list of feedback sessions for instructors."},{"lineNumber":487,"author":{"gitId":"-"},"content":" */"},{"lineNumber":488,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForInstructors("},{"lineNumber":489,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList) {"},{"lineNumber":490,"author":{"gitId":"-"},"content":" assert instructorList !\u003d null;"},{"lineNumber":491,"author":{"gitId":"-"},"content":""},{"lineNumber":492,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsForInstructors(instructorList);"},{"lineNumber":493,"author":{"gitId":"-"},"content":" }"},{"lineNumber":494,"author":{"gitId":"-"},"content":""},{"lineNumber":495,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":496,"author":{"gitId":"-"},"content":" * Gets all and only the feedback sessions ongoing within a range of time."},{"lineNumber":497,"author":{"gitId":"-"},"content":" */"},{"lineNumber":498,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getOngoingSessions(Instant rangeStart, Instant rangeEnd) {"},{"lineNumber":499,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getOngoingSessions(rangeStart, rangeEnd);"},{"lineNumber":500,"author":{"gitId":"-"},"content":" }"},{"lineNumber":501,"author":{"gitId":"-"},"content":""},{"lineNumber":502,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":503,"author":{"gitId":"-"},"content":" * Gets a set of giver identifiers that has at least one response under a feedback session."},{"lineNumber":504,"author":{"gitId":"-"},"content":" */"},{"lineNumber":505,"author":{"gitId":"-"},"content":" public Set\u003cString\u003e getGiverSetThatAnsweredFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":506,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":507,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":508,"author":{"gitId":"-"},"content":""},{"lineNumber":509,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getGiverSetThatAnsweredFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":510,"author":{"gitId":"-"},"content":" }"},{"lineNumber":511,"author":{"gitId":"-"},"content":""},{"lineNumber":512,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":513,"author":{"gitId":"-"},"content":" * Updates a feedback session."},{"lineNumber":514,"author":{"gitId":"-"},"content":" *"},{"lineNumber":515,"author":{"gitId":"-"},"content":" * @return returns the updated feedback session."},{"lineNumber":516,"author":{"gitId":"-"},"content":" */"},{"lineNumber":517,"author":{"gitId":"-"},"content":" public FeedbackSession updateFeedbackSession(FeedbackSession feedbackSession)"},{"lineNumber":518,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":519,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.updateFeedbackSession(feedbackSession);"},{"lineNumber":520,"author":{"gitId":"-"},"content":" }"},{"lineNumber":521,"author":{"gitId":"-"},"content":""},{"lineNumber":522,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":523,"author":{"gitId":"-"},"content":" * Returns a list of sessions that require automated emails to be sent as they are published."},{"lineNumber":524,"author":{"gitId":"-"},"content":" */"},{"lineNumber":525,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent() {"},{"lineNumber":526,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent();"},{"lineNumber":527,"author":{"gitId":"-"},"content":" }"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":530,"author":{"gitId":"-"},"content":" * Creates a feedback session."},{"lineNumber":531,"author":{"gitId":"-"},"content":" *"},{"lineNumber":532,"author":{"gitId":"-"},"content":" * @return returns the created feedback session."},{"lineNumber":533,"author":{"gitId":"-"},"content":" */"},{"lineNumber":534,"author":{"gitId":"-"},"content":" public FeedbackSession createFeedbackSession(FeedbackSession feedbackSession)"},{"lineNumber":535,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":536,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":537,"author":{"gitId":"-"},"content":" assert feedbackSession.getCourse() !\u003d null \u0026\u0026 feedbackSession.getCourse().getId() !\u003d null;"},{"lineNumber":538,"author":{"gitId":"-"},"content":""},{"lineNumber":539,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.createFeedbackSession(feedbackSession);"},{"lineNumber":540,"author":{"gitId":"-"},"content":" }"},{"lineNumber":541,"author":{"gitId":"-"},"content":""},{"lineNumber":542,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":543,"author":{"gitId":"-"},"content":" * Gets all feedback sessions of a course, except those that are soft-deleted."},{"lineNumber":544,"author":{"gitId":"-"},"content":" */"},{"lineNumber":545,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForCourse(String courseId) {"},{"lineNumber":546,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsForCourse(courseId);"},{"lineNumber":547,"author":{"gitId":"-"},"content":" }"},{"lineNumber":548,"author":{"gitId":"-"},"content":""},{"lineNumber":549,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":550,"author":{"gitId":"-"},"content":" * Creates a new feedback question."},{"lineNumber":551,"author":{"gitId":"-"},"content":" *"},{"lineNumber":552,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":553,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":554,"author":{"gitId":"-"},"content":" *"},{"lineNumber":555,"author":{"gitId":"-"},"content":" * @return the created question"},{"lineNumber":556,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the question is invalid"},{"lineNumber":557,"author":{"gitId":"marquestye"},"content":" * @throws EntityAlreadyExistsException if the question already exists"},{"lineNumber":558,"author":{"gitId":"-"},"content":" */"},{"lineNumber":559,"author":{"gitId":"marquestye"},"content":" public FeedbackQuestion createFeedbackQuestion(FeedbackQuestion feedbackQuestion)"},{"lineNumber":560,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":561,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":562,"author":{"gitId":"-"},"content":" }"},{"lineNumber":563,"author":{"gitId":"-"},"content":""},{"lineNumber":564,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":565,"author":{"gitId":"-"},"content":" * Publishes a feedback session."},{"lineNumber":566,"author":{"gitId":"-"},"content":" * @return the published feedback session"},{"lineNumber":567,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":568,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if session is already published"},{"lineNumber":569,"author":{"gitId":"-"},"content":" */"},{"lineNumber":570,"author":{"gitId":"-"},"content":" public FeedbackSession publishFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":571,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":572,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":573,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":574,"author":{"gitId":"-"},"content":""},{"lineNumber":575,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.publishFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":576,"author":{"gitId":"-"},"content":" }"},{"lineNumber":577,"author":{"gitId":"-"},"content":""},{"lineNumber":578,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":579,"author":{"gitId":"-"},"content":" * Checks whether a student has attempted a feedback session."},{"lineNumber":580,"author":{"gitId":"-"},"content":" *"},{"lineNumber":581,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf there is no question for students, the feedback session is considered as attempted.\u003c/p\u003e"},{"lineNumber":582,"author":{"gitId":"-"},"content":" */"},{"lineNumber":583,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionAttemptedByStudent(FeedbackSession session, String userEmail, String userTeam) {"},{"lineNumber":584,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.isFeedbackSessionAttemptedByStudent(session, userEmail, userTeam);"},{"lineNumber":585,"author":{"gitId":"-"},"content":" }"},{"lineNumber":586,"author":{"gitId":"-"},"content":""},{"lineNumber":587,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":588,"author":{"gitId":"-"},"content":" * Checks whether an instructor has attempted a feedback session."},{"lineNumber":589,"author":{"gitId":"-"},"content":" *"},{"lineNumber":590,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf there is no question for instructors, the feedback session is considered as attempted.\u003c/p\u003e"},{"lineNumber":591,"author":{"gitId":"-"},"content":" */"},{"lineNumber":592,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionAttemptedByInstructor(FeedbackSession session, String userEmail) {"},{"lineNumber":593,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.isFeedbackSessionAttemptedByInstructor(session, userEmail);"},{"lineNumber":594,"author":{"gitId":"-"},"content":" }"},{"lineNumber":595,"author":{"gitId":"-"},"content":""},{"lineNumber":596,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":597,"author":{"gitId":"-"},"content":" * Deletes a feedback session cascade to its associated questions, responses, deadline extensions and comments."},{"lineNumber":598,"author":{"gitId":"-"},"content":" *"},{"lineNumber":599,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":600,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":601,"author":{"gitId":"-"},"content":" */"},{"lineNumber":602,"author":{"gitId":"-"},"content":" public void deleteFeedbackSessionCascade(String feedbackSessionName, String courseId) {"},{"lineNumber":603,"author":{"gitId":"-"},"content":" feedbackSessionsLogic.deleteFeedbackSessionCascade(feedbackSessionName, courseId);"},{"lineNumber":604,"author":{"gitId":"-"},"content":" }"},{"lineNumber":605,"author":{"gitId":"-"},"content":""},{"lineNumber":606,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":607,"author":{"gitId":"-"},"content":" * Soft-deletes a specific session to Recycle Bin."},{"lineNumber":608,"author":{"gitId":"-"},"content":" */"},{"lineNumber":609,"author":{"gitId":"-"},"content":" public void moveFeedbackSessionToRecycleBin(String feedbackSessionName, String courseId)"},{"lineNumber":610,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":611,"author":{"gitId":"-"},"content":""},{"lineNumber":612,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":613,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":614,"author":{"gitId":"-"},"content":""},{"lineNumber":615,"author":{"gitId":"-"},"content":" feedbackSessionsLogic.moveFeedbackSessionToRecycleBin(feedbackSessionName, courseId);"},{"lineNumber":616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":619,"author":{"gitId":"-"},"content":" * Restores a specific session from Recycle Bin to feedback sessions table."},{"lineNumber":620,"author":{"gitId":"-"},"content":" */"},{"lineNumber":621,"author":{"gitId":"-"},"content":" public void restoreFeedbackSessionFromRecycleBin(String feedbackSessionName, String courseId)"},{"lineNumber":622,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":623,"author":{"gitId":"-"},"content":""},{"lineNumber":624,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":625,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":626,"author":{"gitId":"-"},"content":""},{"lineNumber":627,"author":{"gitId":"-"},"content":" feedbackSessionsLogic.restoreFeedbackSessionFromRecycleBin(feedbackSessionName, courseId);"},{"lineNumber":628,"author":{"gitId":"-"},"content":" }"},{"lineNumber":629,"author":{"gitId":"-"},"content":""},{"lineNumber":630,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":631,"author":{"gitId":"-"},"content":" * Unpublishes a feedback session."},{"lineNumber":632,"author":{"gitId":"-"},"content":" * @return the unpublished feedback session"},{"lineNumber":633,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":634,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException"},{"lineNumber":635,"author":{"gitId":"-"},"content":" * if the feedback session is not ready to be unpublished."},{"lineNumber":636,"author":{"gitId":"-"},"content":" */"},{"lineNumber":637,"author":{"gitId":"-"},"content":" public FeedbackSession unpublishFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":638,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":639,"author":{"gitId":"-"},"content":""},{"lineNumber":640,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":641,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":642,"author":{"gitId":"-"},"content":""},{"lineNumber":643,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.unpublishFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":644,"author":{"gitId":"-"},"content":" }"},{"lineNumber":645,"author":{"gitId":"-"},"content":""},{"lineNumber":646,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":647,"author":{"gitId":"-"},"content":" * After an update to feedback session\u0027s fields, may need to adjust the email status of the session."},{"lineNumber":648,"author":{"gitId":"-"},"content":" * @param session recently updated session."},{"lineNumber":649,"author":{"gitId":"-"},"content":" */"},{"lineNumber":650,"author":{"gitId":"-"},"content":" public void adjustFeedbackSessionEmailStatusAfterUpdate(FeedbackSession session) {"},{"lineNumber":651,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":652,"author":{"gitId":"-"},"content":" feedbackSessionsLogic.adjustFeedbackSessionEmailStatusAfterUpdate(session);"},{"lineNumber":653,"author":{"gitId":"-"},"content":" }"},{"lineNumber":654,"author":{"gitId":"-"},"content":""},{"lineNumber":655,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":656,"author":{"gitId":"domoberzin"},"content":" * Gets the expected number of submissions for a feedback session."},{"lineNumber":657,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":658,"author":{"gitId":"domoberzin"},"content":" * \u003cbr\u003ePreconditions: \u003cbr\u003e"},{"lineNumber":659,"author":{"gitId":"domoberzin"},"content":" * * All parameters are non-null."},{"lineNumber":660,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":661,"author":{"gitId":"domoberzin"},"content":" public int getExpectedTotalSubmission(FeedbackSession fs) {"},{"lineNumber":662,"author":{"gitId":"domoberzin"},"content":" assert fs !\u003d null;"},{"lineNumber":663,"author":{"gitId":"domoberzin"},"content":" return feedbackSessionsLogic.getExpectedTotalSubmission(fs);"},{"lineNumber":664,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":665,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":666,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":667,"author":{"gitId":"domoberzin"},"content":" * Gets the actual number of submissions for a feedback session."},{"lineNumber":668,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":669,"author":{"gitId":"domoberzin"},"content":" * \u003cbr\u003ePreconditions: \u003cbr\u003e"},{"lineNumber":670,"author":{"gitId":"domoberzin"},"content":" * * All parameters are non-null."},{"lineNumber":671,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":672,"author":{"gitId":"domoberzin"},"content":" public int getActualTotalSubmission(FeedbackSession fs) {"},{"lineNumber":673,"author":{"gitId":"domoberzin"},"content":" assert fs !\u003d null;"},{"lineNumber":674,"author":{"gitId":"domoberzin"},"content":" return feedbackSessionsLogic.getActualTotalSubmission(fs);"},{"lineNumber":675,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":676,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":677,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":678,"author":{"gitId":"-"},"content":" * Get usage statistics within a time range."},{"lineNumber":679,"author":{"gitId":"-"},"content":" */"},{"lineNumber":680,"author":{"gitId":"-"},"content":" public List\u003cUsageStatistics\u003e getUsageStatisticsForTimeRange(Instant startTime, Instant endTime) {"},{"lineNumber":681,"author":{"gitId":"-"},"content":" return usageStatisticsLogic.getUsageStatisticsForTimeRange(startTime, endTime);"},{"lineNumber":682,"author":{"gitId":"-"},"content":" }"},{"lineNumber":683,"author":{"gitId":"-"},"content":""},{"lineNumber":684,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":685,"author":{"gitId":"-"},"content":" * Calculate usage statistics within a time range."},{"lineNumber":686,"author":{"gitId":"-"},"content":" */"},{"lineNumber":687,"author":{"gitId":"-"},"content":" public UsageStatistics calculateEntitiesStatisticsForTimeRange(Instant startTime, Instant endTime) {"},{"lineNumber":688,"author":{"gitId":"-"},"content":" return usageStatisticsLogic.calculateEntitiesStatisticsForTimeRange(startTime, endTime);"},{"lineNumber":689,"author":{"gitId":"-"},"content":" }"},{"lineNumber":690,"author":{"gitId":"-"},"content":""},{"lineNumber":691,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":692,"author":{"gitId":"-"},"content":" * Create usage statistics within a time range."},{"lineNumber":693,"author":{"gitId":"-"},"content":" */"},{"lineNumber":694,"author":{"gitId":"-"},"content":" public void createUsageStatistics(UsageStatistics attributes)"},{"lineNumber":695,"author":{"gitId":"-"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":696,"author":{"gitId":"-"},"content":" usageStatisticsLogic.createUsageStatistics(attributes);"},{"lineNumber":697,"author":{"gitId":"-"},"content":" }"},{"lineNumber":698,"author":{"gitId":"-"},"content":""},{"lineNumber":699,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":700,"author":{"gitId":"-"},"content":" * Creates a notification."},{"lineNumber":701,"author":{"gitId":"-"},"content":" *"},{"lineNumber":702,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":703,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":704,"author":{"gitId":"-"},"content":" *"},{"lineNumber":705,"author":{"gitId":"-"},"content":" * @return created notification"},{"lineNumber":706,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the notification is not valid"},{"lineNumber":707,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the notification exists in the database"},{"lineNumber":708,"author":{"gitId":"-"},"content":" */"},{"lineNumber":709,"author":{"gitId":"-"},"content":" public Notification createNotification(Notification notification) throws"},{"lineNumber":710,"author":{"gitId":"-"},"content":" InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":711,"author":{"gitId":"-"},"content":" return notificationsLogic.createNotification(notification);"},{"lineNumber":712,"author":{"gitId":"-"},"content":" }"},{"lineNumber":713,"author":{"gitId":"-"},"content":""},{"lineNumber":714,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":715,"author":{"gitId":"-"},"content":" * Gets a notification by ID."},{"lineNumber":716,"author":{"gitId":"-"},"content":" *"},{"lineNumber":717,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":718,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":719,"author":{"gitId":"-"},"content":" *"},{"lineNumber":720,"author":{"gitId":"-"},"content":" * @return Null if no match found."},{"lineNumber":721,"author":{"gitId":"-"},"content":" */"},{"lineNumber":722,"author":{"gitId":"-"},"content":" public Notification getNotification(UUID notificationId) {"},{"lineNumber":723,"author":{"gitId":"-"},"content":" return notificationsLogic.getNotification(notificationId);"},{"lineNumber":724,"author":{"gitId":"-"},"content":" }"},{"lineNumber":725,"author":{"gitId":"-"},"content":""},{"lineNumber":726,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":727,"author":{"gitId":"-"},"content":" * Updates a notification."},{"lineNumber":728,"author":{"gitId":"-"},"content":" *"},{"lineNumber":729,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":730,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":731,"author":{"gitId":"-"},"content":" * @return updated notification"},{"lineNumber":732,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the notification is not valid"},{"lineNumber":733,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the notification does not exist in the database"},{"lineNumber":734,"author":{"gitId":"-"},"content":" */"},{"lineNumber":735,"author":{"gitId":"-"},"content":" public Notification updateNotification(UUID notificationId, Instant startTime, Instant endTime,"},{"lineNumber":736,"author":{"gitId":"-"},"content":" NotificationStyle style, NotificationTargetUser targetUser, String title,"},{"lineNumber":737,"author":{"gitId":"-"},"content":" String message) throws"},{"lineNumber":738,"author":{"gitId":"-"},"content":" InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":739,"author":{"gitId":"-"},"content":" return notificationsLogic.updateNotification(notificationId, startTime, endTime, style, targetUser, title, message);"},{"lineNumber":740,"author":{"gitId":"-"},"content":" }"},{"lineNumber":741,"author":{"gitId":"-"},"content":""},{"lineNumber":742,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":743,"author":{"gitId":"-"},"content":" * Deletes notification by ID."},{"lineNumber":744,"author":{"gitId":"-"},"content":" *"},{"lineNumber":745,"author":{"gitId":"-"},"content":" * \u003cul\u003e"},{"lineNumber":746,"author":{"gitId":"-"},"content":" * \u003cli\u003eFails silently if no such notification.\u003c/li\u003e"},{"lineNumber":747,"author":{"gitId":"-"},"content":" * \u003c/ul\u003e"},{"lineNumber":748,"author":{"gitId":"-"},"content":" *"},{"lineNumber":749,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":750,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":751,"author":{"gitId":"-"},"content":" */"},{"lineNumber":752,"author":{"gitId":"-"},"content":" public void deleteNotification(UUID notificationId) {"},{"lineNumber":753,"author":{"gitId":"-"},"content":" notificationsLogic.deleteNotification(notificationId);"},{"lineNumber":754,"author":{"gitId":"-"},"content":" }"},{"lineNumber":755,"author":{"gitId":"-"},"content":""},{"lineNumber":756,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":757,"author":{"gitId":"-"},"content":" * Get a list of IDs of the read notifications of the account."},{"lineNumber":758,"author":{"gitId":"-"},"content":" */"},{"lineNumber":759,"author":{"gitId":"-"},"content":" public List\u003cUUID\u003e getReadNotificationsId(String id) {"},{"lineNumber":760,"author":{"gitId":"-"},"content":" return accountsLogic.getReadNotificationsId(id);"},{"lineNumber":761,"author":{"gitId":"-"},"content":" }"},{"lineNumber":762,"author":{"gitId":"-"},"content":""},{"lineNumber":763,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":764,"author":{"gitId":"-"},"content":" * Updates user read status for notification with ID {@code notificationId} and expiry time {@code endTime}."},{"lineNumber":765,"author":{"gitId":"-"},"content":" *"},{"lineNumber":766,"author":{"gitId":"-"},"content":" * \u003cp\u003ePreconditions:\u003c/p\u003e"},{"lineNumber":767,"author":{"gitId":"-"},"content":" * * All parameters are non-null. {@code endTime} must be after current moment."},{"lineNumber":768,"author":{"gitId":"-"},"content":" */"},{"lineNumber":769,"author":{"gitId":"-"},"content":" public List\u003cUUID\u003e updateReadNotifications(String id, UUID notificationId, Instant endTime)"},{"lineNumber":770,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":771,"author":{"gitId":"-"},"content":" return accountsLogic.updateReadNotifications(id, notificationId, endTime);"},{"lineNumber":772,"author":{"gitId":"-"},"content":" }"},{"lineNumber":773,"author":{"gitId":"-"},"content":""},{"lineNumber":774,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":775,"author":{"gitId":"-"},"content":" * Gets instructor associated with {@code id}."},{"lineNumber":776,"author":{"gitId":"-"},"content":" *"},{"lineNumber":777,"author":{"gitId":"-"},"content":" * @param id Id of Instructor."},{"lineNumber":778,"author":{"gitId":"-"},"content":" * @return Returns Instructor if found else null."},{"lineNumber":779,"author":{"gitId":"-"},"content":" */"},{"lineNumber":780,"author":{"gitId":"-"},"content":" public Instructor getInstructor(UUID id) {"},{"lineNumber":781,"author":{"gitId":"-"},"content":" return usersLogic.getInstructor(id);"},{"lineNumber":782,"author":{"gitId":"-"},"content":" }"},{"lineNumber":783,"author":{"gitId":"-"},"content":""},{"lineNumber":784,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":785,"author":{"gitId":"-"},"content":" * Gets instructor associated with {@code courseId} and {@code email}."},{"lineNumber":786,"author":{"gitId":"-"},"content":" */"},{"lineNumber":787,"author":{"gitId":"-"},"content":" public Instructor getInstructorForEmail(String courseId, String email) {"},{"lineNumber":788,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorForEmail(courseId, email);"},{"lineNumber":789,"author":{"gitId":"-"},"content":" }"},{"lineNumber":790,"author":{"gitId":"-"},"content":""},{"lineNumber":791,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":792,"author":{"gitId":"-"},"content":" * Gets an instructor by associated {@code regkey}."},{"lineNumber":793,"author":{"gitId":"-"},"content":" */"},{"lineNumber":794,"author":{"gitId":"-"},"content":" public Instructor getInstructorByRegistrationKey(String regKey) {"},{"lineNumber":795,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorByRegistrationKey(regKey);"},{"lineNumber":796,"author":{"gitId":"-"},"content":" }"},{"lineNumber":797,"author":{"gitId":"-"},"content":""},{"lineNumber":798,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":799,"author":{"gitId":"-"},"content":" * Gets an instructor by associated {@code googleId}."},{"lineNumber":800,"author":{"gitId":"-"},"content":" */"},{"lineNumber":801,"author":{"gitId":"-"},"content":" public Instructor getInstructorByGoogleId(String courseId, String googleId) {"},{"lineNumber":802,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorByGoogleId(courseId, googleId);"},{"lineNumber":803,"author":{"gitId":"-"},"content":" }"},{"lineNumber":804,"author":{"gitId":"-"},"content":""},{"lineNumber":805,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":806,"author":{"gitId":"-"},"content":" * Gets list of instructors by {@code googleId}."},{"lineNumber":807,"author":{"gitId":"-"},"content":" */"},{"lineNumber":808,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForGoogleId(String googleId) {"},{"lineNumber":809,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorsForGoogleId(googleId);"},{"lineNumber":810,"author":{"gitId":"-"},"content":" }"},{"lineNumber":811,"author":{"gitId":"-"},"content":""},{"lineNumber":812,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":813,"author":{"gitId":"-"},"content":" * Gets instructors by associated {@code courseId}."},{"lineNumber":814,"author":{"gitId":"-"},"content":" */"},{"lineNumber":815,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsByCourse(String courseId) {"},{"lineNumber":816,"author":{"gitId":"-"},"content":" return usersLogic.getInstructorsForCourse(courseId);"},{"lineNumber":817,"author":{"gitId":"-"},"content":" }"},{"lineNumber":818,"author":{"gitId":"-"},"content":""},{"lineNumber":819,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":820,"author":{"gitId":"-"},"content":" * Creates an instructor."},{"lineNumber":821,"author":{"gitId":"-"},"content":" */"},{"lineNumber":822,"author":{"gitId":"-"},"content":" public Instructor createInstructor(Instructor instructor)"},{"lineNumber":823,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":824,"author":{"gitId":"-"},"content":" return usersLogic.createInstructor(instructor);"},{"lineNumber":825,"author":{"gitId":"-"},"content":" }"},{"lineNumber":826,"author":{"gitId":"-"},"content":""},{"lineNumber":827,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":828,"author":{"gitId":"-"},"content":" * Make the instructor join the course, i.e. associate the Google ID to the instructor.\u003cbr\u003e"},{"lineNumber":829,"author":{"gitId":"-"},"content":" * Creates an account for the instructor if no existing account is found."},{"lineNumber":830,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":831,"author":{"gitId":"-"},"content":" * * Parameters regkey and googleId are non-null."},{"lineNumber":832,"author":{"gitId":"-"},"content":" */"},{"lineNumber":833,"author":{"gitId":"-"},"content":" public Instructor joinCourseForInstructor(String regkey, String googleId)"},{"lineNumber":834,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":835,"author":{"gitId":"-"},"content":""},{"lineNumber":836,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":837,"author":{"gitId":"-"},"content":" assert regkey !\u003d null;"},{"lineNumber":838,"author":{"gitId":"-"},"content":""},{"lineNumber":839,"author":{"gitId":"-"},"content":" return accountsLogic.joinCourseForInstructor(regkey, googleId);"},{"lineNumber":840,"author":{"gitId":"-"},"content":" }"},{"lineNumber":841,"author":{"gitId":"-"},"content":""},{"lineNumber":842,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":843,"author":{"gitId":"-"},"content":" * Validates that the join course request is valid, then"},{"lineNumber":844,"author":{"gitId":"-"},"content":" * makes the instructor join the course, i.e. associate an account to the instructor with the given googleId."},{"lineNumber":845,"author":{"gitId":"-"},"content":" * Creates an account for the instructor if no existing account is found."},{"lineNumber":846,"author":{"gitId":"-"},"content":" * Preconditions:"},{"lineNumber":847,"author":{"gitId":"-"},"content":" * Parameters regkey and googleId are non-null."},{"lineNumber":848,"author":{"gitId":"-"},"content":" */"},{"lineNumber":849,"author":{"gitId":"-"},"content":" public Instructor joinCourseForInstructor(String googleId, Instructor instructor)"},{"lineNumber":850,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":851,"author":{"gitId":"-"},"content":" if (googleId \u003d\u003d null) {"},{"lineNumber":852,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Instructor\u0027s googleId cannot be null\");"},{"lineNumber":853,"author":{"gitId":"-"},"content":" }"},{"lineNumber":854,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":855,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Instructor cannot be null\");"},{"lineNumber":856,"author":{"gitId":"-"},"content":" }"},{"lineNumber":857,"author":{"gitId":"-"},"content":""},{"lineNumber":858,"author":{"gitId":"-"},"content":" validateJoinCourseRequest(googleId, instructor);"},{"lineNumber":859,"author":{"gitId":"-"},"content":" return usersLogic.joinCourseForInstructor(googleId, instructor);"},{"lineNumber":860,"author":{"gitId":"-"},"content":" }"},{"lineNumber":861,"author":{"gitId":"-"},"content":""},{"lineNumber":862,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":863,"author":{"gitId":"-"},"content":" * Validates that the instructor can join the course it has as courseId field."},{"lineNumber":864,"author":{"gitId":"-"},"content":" *"},{"lineNumber":865,"author":{"gitId":"-"},"content":" * @return true if the instructor can join the course."},{"lineNumber":866,"author":{"gitId":"-"},"content":" * @throws Exception if the instructor cannot join the course."},{"lineNumber":867,"author":{"gitId":"-"},"content":" */"},{"lineNumber":868,"author":{"gitId":"-"},"content":" private boolean validateJoinCourseRequest(String googleId, Instructor instructor)"},{"lineNumber":869,"author":{"gitId":"-"},"content":" throws EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":870,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":871,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Instructor not found\");"},{"lineNumber":872,"author":{"gitId":"-"},"content":" }"},{"lineNumber":873,"author":{"gitId":"-"},"content":""},{"lineNumber":874,"author":{"gitId":"-"},"content":" // check course exists and has not been deleted"},{"lineNumber":875,"author":{"gitId":"-"},"content":" Course course \u003d getCourse(instructor.getCourseId());"},{"lineNumber":876,"author":{"gitId":"-"},"content":""},{"lineNumber":877,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":878,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Course with id \" + instructor.getCourseId() + \" does not exist\");"},{"lineNumber":879,"author":{"gitId":"-"},"content":" }"},{"lineNumber":880,"author":{"gitId":"-"},"content":" if (course.isCourseDeleted()) {"},{"lineNumber":881,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"The course you are trying to join has been deleted by an instructor\");"},{"lineNumber":882,"author":{"gitId":"-"},"content":" }"},{"lineNumber":883,"author":{"gitId":"-"},"content":""},{"lineNumber":884,"author":{"gitId":"-"},"content":" if (instructor.isRegistered()) {"},{"lineNumber":885,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":886,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":887,"author":{"gitId":"-"},"content":" // Check if this Google ID has already joined this course with courseId"},{"lineNumber":888,"author":{"gitId":"-"},"content":" Instructor existingInstructor \u003d"},{"lineNumber":889,"author":{"gitId":"-"},"content":" usersLogic.getInstructorByGoogleId(instructor.getCourseId(), googleId);"},{"lineNumber":890,"author":{"gitId":"-"},"content":" if (existingInstructor !\u003d null) {"},{"lineNumber":891,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":892,"author":{"gitId":"-"},"content":" }"},{"lineNumber":893,"author":{"gitId":"-"},"content":" }"},{"lineNumber":894,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":895,"author":{"gitId":"-"},"content":" }"},{"lineNumber":896,"author":{"gitId":"-"},"content":""},{"lineNumber":897,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":898,"author":{"gitId":"-"},"content":" * Searches instructors in the whole system. Used by admin only."},{"lineNumber":899,"author":{"gitId":"-"},"content":" *"},{"lineNumber":900,"author":{"gitId":"-"},"content":" * @return List of found instructors in the whole system. Null if no result found."},{"lineNumber":901,"author":{"gitId":"-"},"content":" */"},{"lineNumber":902,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e searchInstructorsInWholeSystem(String queryString)"},{"lineNumber":903,"author":{"gitId":"-"},"content":" throws SearchServiceException {"},{"lineNumber":904,"author":{"gitId":"-"},"content":" assert queryString !\u003d null;"},{"lineNumber":905,"author":{"gitId":"-"},"content":""},{"lineNumber":906,"author":{"gitId":"-"},"content":" return usersLogic.searchInstructorsInWholeSystem(queryString);"},{"lineNumber":907,"author":{"gitId":"-"},"content":" }"},{"lineNumber":908,"author":{"gitId":"-"},"content":""},{"lineNumber":909,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":910,"author":{"gitId":"-"},"content":" * Updates an instructor and cascades to responses and comments if needed."},{"lineNumber":911,"author":{"gitId":"-"},"content":" *"},{"lineNumber":912,"author":{"gitId":"-"},"content":" * @return updated instructor"},{"lineNumber":913,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the instructor update request is invalid"},{"lineNumber":914,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if the update violates instructor validity"},{"lineNumber":915,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the instructor does not exist in the database"},{"lineNumber":916,"author":{"gitId":"-"},"content":" */"},{"lineNumber":917,"author":{"gitId":"-"},"content":" public Instructor updateInstructorCascade(String courseId, InstructorCreateRequest instructorRequest) throws"},{"lineNumber":918,"author":{"gitId":"-"},"content":" InvalidParametersException, InstructorUpdateException, EntityDoesNotExistException {"},{"lineNumber":919,"author":{"gitId":"-"},"content":" return usersLogic.updateInstructorCascade(courseId, instructorRequest);"},{"lineNumber":920,"author":{"gitId":"-"},"content":" }"},{"lineNumber":921,"author":{"gitId":"-"},"content":""},{"lineNumber":922,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":923,"author":{"gitId":"-"},"content":" * Checks if an instructor with {@code googleId} can create a course with {@code institute}."},{"lineNumber":924,"author":{"gitId":"-"},"content":" */"},{"lineNumber":925,"author":{"gitId":"-"},"content":" public boolean canInstructorCreateCourse(String googleId, String institute) {"},{"lineNumber":926,"author":{"gitId":"-"},"content":" return usersLogic.canInstructorCreateCourse(googleId, institute);"},{"lineNumber":927,"author":{"gitId":"-"},"content":" }"},{"lineNumber":928,"author":{"gitId":"-"},"content":""},{"lineNumber":929,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":930,"author":{"gitId":"-"},"content":" * Gets student associated with {@code id}."},{"lineNumber":931,"author":{"gitId":"-"},"content":" *"},{"lineNumber":932,"author":{"gitId":"-"},"content":" * @param id Id of Student."},{"lineNumber":933,"author":{"gitId":"-"},"content":" * @return Returns Student if found else null."},{"lineNumber":934,"author":{"gitId":"-"},"content":" */"},{"lineNumber":935,"author":{"gitId":"-"},"content":" public Student getStudent(UUID id) {"},{"lineNumber":936,"author":{"gitId":"-"},"content":" return usersLogic.getStudent(id);"},{"lineNumber":937,"author":{"gitId":"-"},"content":" }"},{"lineNumber":938,"author":{"gitId":"-"},"content":""},{"lineNumber":939,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":940,"author":{"gitId":"-"},"content":" * Gets student associated with {@code courseId} and {@code email}."},{"lineNumber":941,"author":{"gitId":"-"},"content":" */"},{"lineNumber":942,"author":{"gitId":"-"},"content":" public Student getStudentForEmail(String courseId, String email) {"},{"lineNumber":943,"author":{"gitId":"-"},"content":" return usersLogic.getStudentForEmail(courseId, email);"},{"lineNumber":944,"author":{"gitId":"-"},"content":" }"},{"lineNumber":945,"author":{"gitId":"-"},"content":""},{"lineNumber":946,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":947,"author":{"gitId":"-"},"content":" * Check if the students with the provided emails exist in the course."},{"lineNumber":948,"author":{"gitId":"-"},"content":" */"},{"lineNumber":949,"author":{"gitId":"-"},"content":" public boolean verifyStudentsExistInCourse(String courseId, List\u003cString\u003e emails) {"},{"lineNumber":950,"author":{"gitId":"-"},"content":" return usersLogic.verifyStudentsExistInCourse(courseId, emails);"},{"lineNumber":951,"author":{"gitId":"-"},"content":" }"},{"lineNumber":952,"author":{"gitId":"-"},"content":""},{"lineNumber":953,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":954,"author":{"gitId":"-"},"content":" * Check if the instructors with the provided emails exist in the course."},{"lineNumber":955,"author":{"gitId":"-"},"content":" */"},{"lineNumber":956,"author":{"gitId":"-"},"content":" public boolean verifyInstructorsExistInCourse(String courseId, List\u003cString\u003e emails) {"},{"lineNumber":957,"author":{"gitId":"-"},"content":" return usersLogic.verifyInstructorsExistInCourse(courseId, emails);"},{"lineNumber":958,"author":{"gitId":"-"},"content":" }"},{"lineNumber":959,"author":{"gitId":"-"},"content":""},{"lineNumber":960,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":961,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":962,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":963,"author":{"gitId":"-"},"content":" * @return Empty list if none found."},{"lineNumber":964,"author":{"gitId":"-"},"content":" */"},{"lineNumber":965,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForCourse(String courseId) {"},{"lineNumber":966,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":967,"author":{"gitId":"-"},"content":" return usersLogic.getStudentsForCourse(courseId);"},{"lineNumber":968,"author":{"gitId":"-"},"content":" }"},{"lineNumber":969,"author":{"gitId":"-"},"content":""},{"lineNumber":970,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":971,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":972,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":973,"author":{"gitId":"-"},"content":" * @return Empty list if none found."},{"lineNumber":974,"author":{"gitId":"-"},"content":" */"},{"lineNumber":975,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getUnregisteredStudentsForCourse(String courseId) {"},{"lineNumber":976,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":977,"author":{"gitId":"-"},"content":" return usersLogic.getUnregisteredStudentsForCourse(courseId);"},{"lineNumber":978,"author":{"gitId":"-"},"content":" }"},{"lineNumber":979,"author":{"gitId":"-"},"content":""},{"lineNumber":980,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":981,"author":{"gitId":"-"},"content":" * Gets a student by associated {@code regkey}."},{"lineNumber":982,"author":{"gitId":"-"},"content":" */"},{"lineNumber":983,"author":{"gitId":"-"},"content":" public Student getStudentByRegistrationKey(String regKey) {"},{"lineNumber":984,"author":{"gitId":"-"},"content":" return usersLogic.getStudentByRegistrationKey(regKey);"},{"lineNumber":985,"author":{"gitId":"-"},"content":" }"},{"lineNumber":986,"author":{"gitId":"-"},"content":""},{"lineNumber":987,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":988,"author":{"gitId":"-"},"content":" * Gets a student by associated {@code googleId}."},{"lineNumber":989,"author":{"gitId":"-"},"content":" */"},{"lineNumber":990,"author":{"gitId":"-"},"content":" public Student getStudentByGoogleId(String courseId, String googleId) {"},{"lineNumber":991,"author":{"gitId":"-"},"content":" return usersLogic.getStudentByGoogleId(courseId, googleId);"},{"lineNumber":992,"author":{"gitId":"-"},"content":" }"},{"lineNumber":993,"author":{"gitId":"-"},"content":""},{"lineNumber":994,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":995,"author":{"gitId":"-"},"content":" * Gets students by associated {@code teamName} and {@code courseId}."},{"lineNumber":996,"author":{"gitId":"-"},"content":" */"},{"lineNumber":997,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByTeamName(String teamName, String courseId) {"},{"lineNumber":998,"author":{"gitId":"-"},"content":" return usersLogic.getStudentsForTeam(teamName, courseId);"},{"lineNumber":999,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1000,"author":{"gitId":"-"},"content":""},{"lineNumber":1001,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1002,"author":{"gitId":"domoberzin"},"content":" * Gets a team by associated {@code courseId} and {@code sectionName}."},{"lineNumber":1003,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1004,"author":{"gitId":"domoberzin"},"content":" public Section getSectionOrCreate(String courseId, String sectionName) {"},{"lineNumber":1005,"author":{"gitId":"domoberzin"},"content":" return usersLogic.getSectionOrCreate(courseId, sectionName);"},{"lineNumber":1006,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1007,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1008,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1009,"author":{"gitId":"domoberzin"},"content":" * Gets a team by associated {@code section} and {@code teamName}."},{"lineNumber":1010,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1011,"author":{"gitId":"domoberzin"},"content":" public Team getTeamOrCreate(Section section, String teamName) {"},{"lineNumber":1012,"author":{"gitId":"domoberzin"},"content":" return usersLogic.getTeamOrCreate(section, teamName);"},{"lineNumber":1013,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1014,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1015,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1016,"author":{"gitId":"-"},"content":" * Creates a student."},{"lineNumber":1017,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1018,"author":{"gitId":"-"},"content":" * @return the created student"},{"lineNumber":1019,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the student is not valid"},{"lineNumber":1020,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the student already exists in the database."},{"lineNumber":1021,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1022,"author":{"gitId":"-"},"content":" public Student createStudent(Student student) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":1023,"author":{"gitId":"-"},"content":" return usersLogic.createStudent(student);"},{"lineNumber":1024,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1025,"author":{"gitId":"-"},"content":""},{"lineNumber":1026,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":1027,"author":{"gitId":"yuanxi1"},"content":" * Search for students. Preconditions: all parameters are non-null."},{"lineNumber":1028,"author":{"gitId":"yuanxi1"},"content":" * @param instructors a list of Instructors associated to a googleId,"},{"lineNumber":1029,"author":{"gitId":"yuanxi1"},"content":" * used for filtering of search result"},{"lineNumber":1030,"author":{"gitId":"yuanxi1"},"content":" * @return Null if no match found"},{"lineNumber":1031,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":1032,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudents(String queryString, List\u003cInstructor\u003e instructors)"},{"lineNumber":1033,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":1034,"author":{"gitId":"yuanxi1"},"content":" assert queryString !\u003d null;"},{"lineNumber":1035,"author":{"gitId":"yuanxi1"},"content":" assert instructors !\u003d null;"},{"lineNumber":1036,"author":{"gitId":"yuanxi1"},"content":" return usersLogic.searchStudents(queryString, instructors);"},{"lineNumber":1037,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":1038,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1039,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":1040,"author":{"gitId":"yuanxi1"},"content":" * This method should be used by admin only since the searching does not restrict the"},{"lineNumber":1041,"author":{"gitId":"yuanxi1"},"content":" * visibility according to the logged-in user\u0027s google ID. This is used by admin to"},{"lineNumber":1042,"author":{"gitId":"yuanxi1"},"content":" * search students in the whole system."},{"lineNumber":1043,"author":{"gitId":"yuanxi1"},"content":" * @return Null if no match found."},{"lineNumber":1044,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":1045,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudentsInWholeSystem(String queryString)"},{"lineNumber":1046,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":1047,"author":{"gitId":"yuanxi1"},"content":" assert queryString !\u003d null;"},{"lineNumber":1048,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1049,"author":{"gitId":"yuanxi1"},"content":" return usersLogic.searchStudentsInWholeSystem(queryString);"},{"lineNumber":1050,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":1051,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1052,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1053,"author":{"gitId":"-"},"content":" * Deletes a student cascade its associated feedback responses, deadline"},{"lineNumber":1054,"author":{"gitId":"-"},"content":" * extensions and comments."},{"lineNumber":1055,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1056,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the student does not exist."},{"lineNumber":1057,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1058,"author":{"gitId":"-"},"content":" * \u003cbr/\u003e"},{"lineNumber":1059,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr/\u003e"},{"lineNumber":1060,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1061,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1062,"author":{"gitId":"-"},"content":" public void deleteStudentCascade(String courseId, String studentEmail) {"},{"lineNumber":1063,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1064,"author":{"gitId":"-"},"content":" assert studentEmail !\u003d null;"},{"lineNumber":1065,"author":{"gitId":"-"},"content":""},{"lineNumber":1066,"author":{"gitId":"-"},"content":" usersLogic.deleteStudentCascade(courseId, studentEmail);"},{"lineNumber":1067,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1068,"author":{"gitId":"-"},"content":""},{"lineNumber":1069,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1070,"author":{"gitId":"-"},"content":" * Deletes all the students in the course cascade their associated responses, deadline extensions and comments."},{"lineNumber":1071,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1072,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr\u003e"},{"lineNumber":1073,"author":{"gitId":"-"},"content":" * Parameter is non-null."},{"lineNumber":1074,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1075,"author":{"gitId":"-"},"content":" public void deleteStudentsInCourseCascade(String courseId) {"},{"lineNumber":1076,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1077,"author":{"gitId":"-"},"content":""},{"lineNumber":1078,"author":{"gitId":"-"},"content":" usersLogic.deleteStudentsInCourseCascade(courseId);"},{"lineNumber":1079,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1080,"author":{"gitId":"-"},"content":""},{"lineNumber":1081,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":1082,"author":{"gitId":"yuanxi1"},"content":" * Make the student join the course, i.e. associate the Google ID to the student.\u003cbr\u003e"},{"lineNumber":1083,"author":{"gitId":"yuanxi1"},"content":" * Create an account for the student if no existing account is found."},{"lineNumber":1084,"author":{"gitId":"yuanxi1"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":1085,"author":{"gitId":"yuanxi1"},"content":" * * All parameters are non-null."},{"lineNumber":1086,"author":{"gitId":"yuanxi1"},"content":" * @param key the registration key"},{"lineNumber":1087,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":1088,"author":{"gitId":"yuanxi1"},"content":" public Student joinCourseForStudent(String key, String googleId)"},{"lineNumber":1089,"author":{"gitId":"yuanxi1"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":1090,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1091,"author":{"gitId":"yuanxi1"},"content":" assert googleId !\u003d null;"},{"lineNumber":1092,"author":{"gitId":"yuanxi1"},"content":" assert key !\u003d null;"},{"lineNumber":1093,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1094,"author":{"gitId":"yuanxi1"},"content":" return accountsLogic.joinCourseForStudent(key, googleId);"},{"lineNumber":1095,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1096,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":1097,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":1098,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1099,"author":{"gitId":"-"},"content":" * Gets all instructors and students by associated {@code googleId}."},{"lineNumber":1100,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1101,"author":{"gitId":"-"},"content":" public List\u003cUser\u003e getAllUsersByGoogleId(String googleId) {"},{"lineNumber":1102,"author":{"gitId":"-"},"content":" return usersLogic.getAllUsersByGoogleId(googleId);"},{"lineNumber":1103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1104,"author":{"gitId":"-"},"content":""},{"lineNumber":1105,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1106,"author":{"gitId":"-"},"content":" * Deletes a user."},{"lineNumber":1107,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1108,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the user does not exist.\u003c/p\u003e"},{"lineNumber":1109,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1110,"author":{"gitId":"-"},"content":" public \u003cT extends User\u003e void deleteUser(T user) {"},{"lineNumber":1111,"author":{"gitId":"-"},"content":" usersLogic.deleteUser(user);"},{"lineNumber":1112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1113,"author":{"gitId":"-"},"content":""},{"lineNumber":1114,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1115,"author":{"gitId":"-"},"content":" * Deletes an instructor and cascades deletion to"},{"lineNumber":1116,"author":{"gitId":"-"},"content":" * associated feedback responses, deadline extensions and comments."},{"lineNumber":1117,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1118,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the instructor does not exist."},{"lineNumber":1119,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1120,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1121,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1122,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1123,"author":{"gitId":"-"},"content":" public void deleteInstructorCascade(String courseId, String email) {"},{"lineNumber":1124,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1125,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":1126,"author":{"gitId":"-"},"content":""},{"lineNumber":1127,"author":{"gitId":"-"},"content":" usersLogic.deleteInstructorCascade(courseId, email);"},{"lineNumber":1128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1129,"author":{"gitId":"-"},"content":""},{"lineNumber":1130,"author":{"gitId":"-"},"content":" public List\u003cNotification\u003e getAllNotifications() {"},{"lineNumber":1131,"author":{"gitId":"-"},"content":" return notificationsLogic.getAllNotifications();"},{"lineNumber":1132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1133,"author":{"gitId":"-"},"content":""},{"lineNumber":1134,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1135,"author":{"gitId":"-"},"content":" * Resets the googleId associated with the instructor."},{"lineNumber":1136,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1137,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1138,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1139,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1140,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException If instructor cannot be found with given email and courseId."},{"lineNumber":1141,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1142,"author":{"gitId":"-"},"content":" public void resetInstructorGoogleId(String email, String courseId, String googleId)"},{"lineNumber":1143,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":1144,"author":{"gitId":"-"},"content":" usersLogic.resetInstructorGoogleId(email, courseId, googleId);"},{"lineNumber":1145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1146,"author":{"gitId":"-"},"content":""},{"lineNumber":1147,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1148,"author":{"gitId":"-"},"content":" * Resets the googleId associated with the student."},{"lineNumber":1149,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1150,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1151,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1152,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1153,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException If student cannot be found with given email and courseId."},{"lineNumber":1154,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1155,"author":{"gitId":"-"},"content":" public void resetStudentGoogleId(String email, String courseId, String googleId)"},{"lineNumber":1156,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":1157,"author":{"gitId":"-"},"content":" usersLogic.resetStudentGoogleId(email, courseId, googleId);"},{"lineNumber":1158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1159,"author":{"gitId":"-"},"content":""},{"lineNumber":1160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1161,"author":{"gitId":"-"},"content":" * Regenerates the registration key for the instructor with email address {@code email} in course {@code courseId}."},{"lineNumber":1162,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1163,"author":{"gitId":"-"},"content":" * @return the instructor with the new registration key."},{"lineNumber":1164,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if system was unable to generate a new registration key."},{"lineNumber":1165,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the instructor does not exist."},{"lineNumber":1166,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1167,"author":{"gitId":"-"},"content":" public Instructor regenerateInstructorRegistrationKey(String courseId, String email)"},{"lineNumber":1168,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InstructorUpdateException {"},{"lineNumber":1169,"author":{"gitId":"-"},"content":""},{"lineNumber":1170,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1171,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":1172,"author":{"gitId":"-"},"content":""},{"lineNumber":1173,"author":{"gitId":"-"},"content":" return usersLogic.regenerateInstructorRegistrationKey(courseId, email);"},{"lineNumber":1174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1175,"author":{"gitId":"-"},"content":""},{"lineNumber":1176,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1177,"author":{"gitId":"-"},"content":" * Regenerates the registration key for the student with email address {@code email} in course {@code courseId}."},{"lineNumber":1178,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1179,"author":{"gitId":"-"},"content":" * @return the student with the new registration key."},{"lineNumber":1180,"author":{"gitId":"-"},"content":" * @throws StudentUpdateException if system was unable to generate a new registration key."},{"lineNumber":1181,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the student does not exist."},{"lineNumber":1182,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1183,"author":{"gitId":"-"},"content":" public Student regenerateStudentRegistrationKey(String courseId, String email)"},{"lineNumber":1184,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, StudentUpdateException {"},{"lineNumber":1185,"author":{"gitId":"-"},"content":""},{"lineNumber":1186,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1187,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":1188,"author":{"gitId":"-"},"content":""},{"lineNumber":1189,"author":{"gitId":"-"},"content":" return usersLogic.regenerateStudentRegistrationKey(courseId, email);"},{"lineNumber":1190,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1191,"author":{"gitId":"-"},"content":""},{"lineNumber":1192,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1193,"author":{"gitId":"-"},"content":" * Updates the instructor being edited to ensure validity of instructors for the course."},{"lineNumber":1194,"author":{"gitId":"-"},"content":" * * Preconditions: \u003cbr\u003e"},{"lineNumber":1195,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1196,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1197,"author":{"gitId":"-"},"content":" * @see UsersLogic#updateToEnsureValidityOfInstructorsForTheCourse(String, Instructor)"},{"lineNumber":1198,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1199,"author":{"gitId":"-"},"content":" public void updateToEnsureValidityOfInstructorsForTheCourse(String courseId, Instructor instructorToEdit) {"},{"lineNumber":1200,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1201,"author":{"gitId":"-"},"content":" assert instructorToEdit !\u003d null;"},{"lineNumber":1202,"author":{"gitId":"-"},"content":""},{"lineNumber":1203,"author":{"gitId":"-"},"content":" usersLogic.updateToEnsureValidityOfInstructorsForTheCourse(courseId, instructorToEdit);"},{"lineNumber":1204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1205,"author":{"gitId":"-"},"content":""},{"lineNumber":1206,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1207,"author":{"gitId":"-"},"content":" * Returns active notification for general users and the specified {@code targetUser}."},{"lineNumber":1208,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1209,"author":{"gitId":"-"},"content":" public List\u003cNotification\u003e getActiveNotificationsByTargetUser(NotificationTargetUser targetUser) {"},{"lineNumber":1210,"author":{"gitId":"-"},"content":" return notificationsLogic.getActiveNotificationsByTargetUser(targetUser);"},{"lineNumber":1211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1212,"author":{"gitId":"-"},"content":""},{"lineNumber":1213,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1214,"author":{"gitId":"-"},"content":" * Gets all questions for a feedback session.\u003cbr\u003e"},{"lineNumber":1215,"author":{"gitId":"-"},"content":" * Returns an empty list if they are no questions"},{"lineNumber":1216,"author":{"gitId":"-"},"content":" * for the session."},{"lineNumber":1217,"author":{"gitId":"-"},"content":" * Preconditions: \u003cbr\u003e"},{"lineNumber":1218,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1219,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1220,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForSession(FeedbackSession feedbackSession) {"},{"lineNumber":1221,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1222,"author":{"gitId":"-"},"content":""},{"lineNumber":1223,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getFeedbackQuestionsForSession(feedbackSession);"},{"lineNumber":1224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1225,"author":{"gitId":"-"},"content":""},{"lineNumber":1226,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1227,"author":{"gitId":"-"},"content":" * Gets a list of all questions for the given session that"},{"lineNumber":1228,"author":{"gitId":"-"},"content":" * students can view/submit."},{"lineNumber":1229,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1230,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForStudents(FeedbackSession feedbackSession) {"},{"lineNumber":1231,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1232,"author":{"gitId":"-"},"content":""},{"lineNumber":1233,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getFeedbackQuestionsForStudents(feedbackSession);"},{"lineNumber":1234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1235,"author":{"gitId":"-"},"content":""},{"lineNumber":1236,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1237,"author":{"gitId":"-"},"content":" * Gets a {@code List} of all questions for the given session that"},{"lineNumber":1238,"author":{"gitId":"-"},"content":" * instructor can view/submit."},{"lineNumber":1239,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1240,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForInstructors("},{"lineNumber":1241,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, String instructorEmail) {"},{"lineNumber":1242,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1243,"author":{"gitId":"-"},"content":""},{"lineNumber":1244,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getFeedbackQuestionsForInstructors(feedbackSession, instructorEmail);"},{"lineNumber":1245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1246,"author":{"gitId":"-"},"content":""},{"lineNumber":1247,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1248,"author":{"gitId":"xenosf"},"content":" * Gets the session result for a feedback session."},{"lineNumber":1249,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1250,"author":{"gitId":"xenosf"},"content":" * @see FeedbackResponsesLogic#getSessionResultsForCourse("},{"lineNumber":1251,"author":{"gitId":"xenosf"},"content":" * FeedbackSession, String, String, String, Section, FeedbackResultFetchType)"},{"lineNumber":1252,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1253,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle getSessionResultsForCourse("},{"lineNumber":1254,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String userEmail,"},{"lineNumber":1255,"author":{"gitId":"xenosf"},"content":" @Nullable UUID questionId, @Nullable String sectionName, @Nullable FeedbackResultFetchType fetchType) {"},{"lineNumber":1256,"author":{"gitId":"xenosf"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1257,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":1258,"author":{"gitId":"xenosf"},"content":" assert userEmail !\u003d null;"},{"lineNumber":1259,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1260,"author":{"gitId":"xenosf"},"content":" return feedbackResponsesLogic.getSessionResultsForCourse("},{"lineNumber":1261,"author":{"gitId":"xenosf"},"content":" feedbackSession, courseId, userEmail, questionId, sectionName, fetchType);"},{"lineNumber":1262,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1263,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1264,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1265,"author":{"gitId":"xenosf"},"content":" * Gets the session result for a feedback session for the given user."},{"lineNumber":1266,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1267,"author":{"gitId":"xenosf"},"content":" * @see FeedbackResponsesLogic#getSessionResultsForUser(FeedbackSession, String, String, boolean, String)"},{"lineNumber":1268,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1269,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle getSessionResultsForUser("},{"lineNumber":1270,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String userEmail, boolean isInstructor,"},{"lineNumber":1271,"author":{"gitId":"xenosf"},"content":" @Nullable UUID questionId, boolean isPreviewResults) {"},{"lineNumber":1272,"author":{"gitId":"xenosf"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":1273,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":1274,"author":{"gitId":"xenosf"},"content":" assert userEmail !\u003d null;"},{"lineNumber":1275,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1276,"author":{"gitId":"xenosf"},"content":" return feedbackResponsesLogic.getSessionResultsForUser("},{"lineNumber":1277,"author":{"gitId":"xenosf"},"content":" feedbackSession, courseId, userEmail, isInstructor, questionId, isPreviewResults);"},{"lineNumber":1278,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1279,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1280,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1281,"author":{"gitId":"-"},"content":" * Persists the given data bundle to the database."},{"lineNumber":1282,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1283,"author":{"gitId":"-"},"content":" public SqlDataBundle persistDataBundle(SqlDataBundle dataBundle)"},{"lineNumber":1284,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":1285,"author":{"gitId":"-"},"content":" return dataBundleLogic.persistDataBundle(dataBundle);"},{"lineNumber":1286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1287,"author":{"gitId":"-"},"content":""},{"lineNumber":1288,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1289,"author":{"gitId":"-"},"content":" * Puts searchable documents from the data bundle to the database."},{"lineNumber":1290,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1291,"author":{"gitId":"-"},"content":" * @see DataBundleLogic#putDocuments(DataBundle)"},{"lineNumber":1292,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1293,"author":{"gitId":"-"},"content":" public void putDocuments(SqlDataBundle dataBundle) throws SearchServiceException {"},{"lineNumber":1294,"author":{"gitId":"-"},"content":" dataBundleLogic.putDocuments(dataBundle);"},{"lineNumber":1295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1296,"author":{"gitId":"-"},"content":""},{"lineNumber":1297,"author":{"gitId":"mingyuanc"},"content":" /**"},{"lineNumber":1298,"author":{"gitId":"mingyuanc"},"content":" * Puts searchable instructor to the database."},{"lineNumber":1299,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":1300,"author":{"gitId":"mingyuanc"},"content":" public void putInstructorDocument(Instructor instructor) throws SearchServiceException {"},{"lineNumber":1301,"author":{"gitId":"mingyuanc"},"content":" usersLogic.putInstructorDocument(instructor);"},{"lineNumber":1302,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":1303,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":1304,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1305,"author":{"gitId":"domoberzin"},"content":" * Creates or updates search document for the given account request."},{"lineNumber":1306,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":1307,"author":{"gitId":"domoberzin"},"content":" * @see AccountRequestsLogic#putDocument(AccountRequest)"},{"lineNumber":1308,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1309,"author":{"gitId":"domoberzin"},"content":" public void putAccountRequestDocument(AccountRequest accountRequest) throws SearchServiceException {"},{"lineNumber":1310,"author":{"gitId":"domoberzin"},"content":" accountRequestLogic.putDocument(accountRequest);"},{"lineNumber":1311,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1312,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1313,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1314,"author":{"gitId":"-"},"content":" * Removes the given data bundle from the database."},{"lineNumber":1315,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1316,"author":{"gitId":"-"},"content":" public void removeDataBundle(SqlDataBundle dataBundle) throws InvalidParametersException {"},{"lineNumber":1317,"author":{"gitId":"-"},"content":" dataBundleLogic.removeDataBundle(dataBundle);"},{"lineNumber":1318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1319,"author":{"gitId":"-"},"content":""},{"lineNumber":1320,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1321,"author":{"gitId":"-"},"content":" * Populates fields that need dynamic generation in a question."},{"lineNumber":1322,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1323,"author":{"gitId":"-"},"content":" * \u003cp\u003eCurrently, only MCQ/MSQ needs to generate choices dynamically.\u003c/p\u003e"},{"lineNumber":1324,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1325,"author":{"gitId":"-"},"content":" * @param feedbackQuestion the question to populate"},{"lineNumber":1326,"author":{"gitId":"-"},"content":" * @param courseId the ID of the course"},{"lineNumber":1327,"author":{"gitId":"-"},"content":" * @param emailOfEntityDoingQuestion the email of the entity doing the question"},{"lineNumber":1328,"author":{"gitId":"-"},"content":" * @param teamOfEntityDoingQuestion the team of the entity doing the question. If the entity is an instructor,"},{"lineNumber":1329,"author":{"gitId":"-"},"content":" * it can be {@code null}."},{"lineNumber":1330,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1331,"author":{"gitId":"-"},"content":" public void populateFieldsToGenerateInQuestion(FeedbackQuestion feedbackQuestion,"},{"lineNumber":1332,"author":{"gitId":"-"},"content":" String courseId, String emailOfEntityDoingQuestion,"},{"lineNumber":1333,"author":{"gitId":"-"},"content":" String teamOfEntityDoingQuestion) {"},{"lineNumber":1334,"author":{"gitId":"-"},"content":" assert feedbackQuestion !\u003d null;"},{"lineNumber":1335,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":1336,"author":{"gitId":"-"},"content":" assert emailOfEntityDoingQuestion !\u003d null;"},{"lineNumber":1337,"author":{"gitId":"-"},"content":""},{"lineNumber":1338,"author":{"gitId":"-"},"content":" feedbackQuestionsLogic.populateFieldsToGenerateInQuestion("},{"lineNumber":1339,"author":{"gitId":"-"},"content":" feedbackQuestion, courseId, emailOfEntityDoingQuestion, teamOfEntityDoingQuestion);"},{"lineNumber":1340,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1341,"author":{"gitId":"-"},"content":""},{"lineNumber":1342,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1343,"author":{"gitId":"-"},"content":" * Gets a feedback question."},{"lineNumber":1344,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1345,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":1346,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1347,"author":{"gitId":"-"},"content":" public FeedbackQuestion getFeedbackQuestion(UUID id) {"},{"lineNumber":1348,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getFeedbackQuestion(id);"},{"lineNumber":1349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1350,"author":{"gitId":"-"},"content":""},{"lineNumber":1351,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1352,"author":{"gitId":"-"},"content":" * Deletes a feedback question cascade its responses and comments."},{"lineNumber":1353,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1354,"author":{"gitId":"-"},"content":" * \u003cp\u003eSilently fail if question does not exist."},{"lineNumber":1355,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1356,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1357,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1358,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1359,"author":{"gitId":"-"},"content":" public void deleteFeedbackQuestionCascade(UUID questionId) {"},{"lineNumber":1360,"author":{"gitId":"-"},"content":" feedbackQuestionsLogic.deleteFeedbackQuestionCascade(questionId);"},{"lineNumber":1361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1362,"author":{"gitId":"-"},"content":""},{"lineNumber":1363,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1364,"author":{"gitId":"-"},"content":" * Gets the recipients of a feedback question for student."},{"lineNumber":1365,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1366,"author":{"gitId":"-"},"content":" * @see FeedbackQuestionsLogic#getRecipientsOfQuestion"},{"lineNumber":1367,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1368,"author":{"gitId":"-"},"content":" public Map\u003cString, FeedbackQuestionRecipient\u003e getRecipientsOfQuestion("},{"lineNumber":1369,"author":{"gitId":"-"},"content":" FeedbackQuestion question,"},{"lineNumber":1370,"author":{"gitId":"-"},"content":" @Nullable Instructor instructorGiver, @Nullable Student studentGiver) {"},{"lineNumber":1371,"author":{"gitId":"-"},"content":" assert question !\u003d null;"},{"lineNumber":1372,"author":{"gitId":"-"},"content":""},{"lineNumber":1373,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.getRecipientsOfQuestion(question, instructorGiver, studentGiver, null);"},{"lineNumber":1374,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1375,"author":{"gitId":"-"},"content":""},{"lineNumber":1376,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1377,"author":{"gitId":"-"},"content":" * Gets a feedbackResponse or null if it does not exist."},{"lineNumber":1378,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1379,"author":{"gitId":"-"},"content":" public FeedbackResponse getFeedbackResponse(UUID frId) {"},{"lineNumber":1380,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.getFeedbackResponse(frId);"},{"lineNumber":1381,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1382,"author":{"gitId":"-"},"content":""},{"lineNumber":1383,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1384,"author":{"gitId":"-"},"content":" * Creates a feedback response."},{"lineNumber":1385,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1386,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1387,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1388,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1389,"author":{"gitId":"-"},"content":" * @return created feedback response"},{"lineNumber":1390,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the response is not valid"},{"lineNumber":1391,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the response already exist"},{"lineNumber":1392,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1393,"author":{"gitId":"-"},"content":" public FeedbackResponse createFeedbackResponse(FeedbackResponse feedbackResponse)"},{"lineNumber":1394,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":1395,"author":{"gitId":"-"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":1396,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.createFeedbackResponse(feedbackResponse);"},{"lineNumber":1397,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1398,"author":{"gitId":"-"},"content":""},{"lineNumber":1399,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1400,"author":{"gitId":"-"},"content":" * Deletes a feedback response and cascades its associated comments."},{"lineNumber":1401,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1402,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1403,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1404,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1405,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesAndCommentsCascade(FeedbackResponse feedbackResponse) {"},{"lineNumber":1406,"author":{"gitId":"-"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":1407,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.deleteFeedbackResponsesAndCommentsCascade(feedbackResponse);"},{"lineNumber":1408,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1409,"author":{"gitId":"-"},"content":""},{"lineNumber":1410,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1411,"author":{"gitId":"-"},"content":" * Get existing feedback responses from instructor for the given question."},{"lineNumber":1412,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1413,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromInstructorForQuestion("},{"lineNumber":1414,"author":{"gitId":"-"},"content":" FeedbackQuestion question, Instructor instructor) {"},{"lineNumber":1415,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.getFeedbackResponsesFromInstructorForQuestion("},{"lineNumber":1416,"author":{"gitId":"-"},"content":" question, instructor);"},{"lineNumber":1417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1418,"author":{"gitId":"-"},"content":""},{"lineNumber":1419,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1420,"author":{"gitId":"-"},"content":" * Get existing feedback responses from student or his team for the given"},{"lineNumber":1421,"author":{"gitId":"-"},"content":" * question."},{"lineNumber":1422,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1423,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromStudentOrTeamForQuestion("},{"lineNumber":1424,"author":{"gitId":"-"},"content":" FeedbackQuestion question, Student student) {"},{"lineNumber":1425,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.getFeedbackResponsesFromStudentOrTeamForQuestion("},{"lineNumber":1426,"author":{"gitId":"-"},"content":" question, student);"},{"lineNumber":1427,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1428,"author":{"gitId":"-"},"content":""},{"lineNumber":1429,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1430,"author":{"gitId":"-"},"content":" * Gets an feedback response comment by feedback response comment id."},{"lineNumber":1431,"author":{"gitId":"-"},"content":" * @param id of feedback response comment."},{"lineNumber":1432,"author":{"gitId":"-"},"content":" * @return the specified feedback response comment."},{"lineNumber":1433,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1434,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseComment(Long id) {"},{"lineNumber":1435,"author":{"gitId":"-"},"content":" return feedbackResponseCommentsLogic.getFeedbackResponseComment(id);"},{"lineNumber":1436,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1437,"author":{"gitId":"-"},"content":""},{"lineNumber":1438,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1439,"author":{"gitId":"-"},"content":" * Updates a feedback response comment."},{"lineNumber":1440,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment does not exist"},{"lineNumber":1441,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1442,"author":{"gitId":"-"},"content":" public FeedbackResponseComment updateFeedbackResponseComment(Long frcId,"},{"lineNumber":1443,"author":{"gitId":"-"},"content":" FeedbackResponseCommentUpdateRequest updateRequest, String updaterEmail)"},{"lineNumber":1444,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":1445,"author":{"gitId":"-"},"content":" return feedbackResponseCommentsLogic.updateFeedbackResponseComment(frcId, updateRequest, updaterEmail);"},{"lineNumber":1446,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1447,"author":{"gitId":"-"},"content":""},{"lineNumber":1448,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1449,"author":{"gitId":"-"},"content":" * Updates a feedback response and comments by {@link FeedbackResponse}."},{"lineNumber":1450,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1451,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade updates its associated feedback response comment"},{"lineNumber":1452,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1453,"author":{"gitId":"-"},"content":" * \u003cbr/\u003ePreconditions: \u003cbr/\u003e"},{"lineNumber":1454,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1455,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1456,"author":{"gitId":"-"},"content":" * @return updated feedback response"},{"lineNumber":1457,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":1458,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment cannot be found"},{"lineNumber":1459,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1460,"author":{"gitId":"-"},"content":" public FeedbackResponse updateFeedbackResponseCascade(FeedbackResponse feedbackResponse)"},{"lineNumber":1461,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":1462,"author":{"gitId":"-"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":1463,"author":{"gitId":"-"},"content":""},{"lineNumber":1464,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.updateFeedbackResponseCascade(feedbackResponse);"},{"lineNumber":1465,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1466,"author":{"gitId":"-"},"content":""},{"lineNumber":1467,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1468,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a question."},{"lineNumber":1469,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1470,"author":{"gitId":"-"},"content":" public boolean areThereResponsesForQuestion(UUID questionId) {"},{"lineNumber":1471,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.areThereResponsesForQuestion(questionId);"},{"lineNumber":1472,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1473,"author":{"gitId":"-"},"content":""},{"lineNumber":1474,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1475,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a course."},{"lineNumber":1476,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1477,"author":{"gitId":"-"},"content":" public boolean hasResponsesForCourse(String courseId) {"},{"lineNumber":1478,"author":{"gitId":"-"},"content":" return feedbackResponsesLogic.hasResponsesForCourse(courseId);"},{"lineNumber":1479,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1480,"author":{"gitId":"-"},"content":""},{"lineNumber":1481,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1482,"author":{"gitId":"-"},"content":" * Gets the comment associated with the response."},{"lineNumber":1483,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1484,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseCommentForResponseFromParticipant("},{"lineNumber":1485,"author":{"gitId":"-"},"content":" UUID feedbackResponseId) {"},{"lineNumber":1486,"author":{"gitId":"-"},"content":" return feedbackResponseCommentsLogic.getFeedbackResponseCommentForResponseFromParticipant(feedbackResponseId);"},{"lineNumber":1487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1488,"author":{"gitId":"-"},"content":""},{"lineNumber":1489,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1490,"author":{"gitId":"-"},"content":" * Creates a feedback response comment."},{"lineNumber":1491,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the comment alreadty exists"},{"lineNumber":1492,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the comment is invalid"},{"lineNumber":1493,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1494,"author":{"gitId":"-"},"content":" public FeedbackResponseComment createFeedbackResponseComment(FeedbackResponseComment frc)"},{"lineNumber":1495,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":1496,"author":{"gitId":"-"},"content":" return feedbackResponseCommentsLogic.createFeedbackResponseComment(frc);"},{"lineNumber":1497,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1498,"author":{"gitId":"-"},"content":""},{"lineNumber":1499,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1500,"author":{"gitId":"-"},"content":" * Deletes a feedbackResponseComment."},{"lineNumber":1501,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1502,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponseComment(Long frcId) {"},{"lineNumber":1503,"author":{"gitId":"-"},"content":" feedbackResponseCommentsLogic.deleteFeedbackResponseComment(frcId);"},{"lineNumber":1504,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1505,"author":{"gitId":"-"},"content":""},{"lineNumber":1506,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1507,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback responses from a giver for a question."},{"lineNumber":1508,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1509,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForCourse(String courseId, String giverEmail) {"},{"lineNumber":1510,"author":{"gitId":"domoberzin"},"content":" return feedbackResponsesLogic.getFeedbackResponsesFromGiverForCourse(courseId, giverEmail);"},{"lineNumber":1511,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1512,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1513,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1514,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback responses for a recipient for a course."},{"lineNumber":1515,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1516,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForCourse(String courseId, String recipientEmail) {"},{"lineNumber":1517,"author":{"gitId":"domoberzin"},"content":" return feedbackResponsesLogic.getFeedbackResponsesForRecipientForCourse(courseId, recipientEmail);"},{"lineNumber":1518,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1519,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1520,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1521,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback response comments for a feedback response."},{"lineNumber":1522,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1523,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForResponse(UUID feedbackResponse) {"},{"lineNumber":1524,"author":{"gitId":"domoberzin"},"content":" return feedbackResponseCommentsLogic.getFeedbackResponseCommentsForResponse(feedbackResponse);"},{"lineNumber":1525,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1526,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1527,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1528,"author":{"gitId":"domoberzin"},"content":" * Validates sections for any limit violations and teams for any team name violations."},{"lineNumber":1529,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":1530,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003ePreconditions: \u003cbr\u003e"},{"lineNumber":1531,"author":{"gitId":"domoberzin"},"content":" * * All parameters are non-null."},{"lineNumber":1532,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":1533,"author":{"gitId":"domoberzin"},"content":" * @see StudentsLogic#validateSectionsAndTeams(List, String)"},{"lineNumber":1534,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1535,"author":{"gitId":"domoberzin"},"content":" public void validateSectionsAndTeams("},{"lineNumber":1536,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentList, String courseId) throws EnrollException {"},{"lineNumber":1537,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1538,"author":{"gitId":"domoberzin"},"content":" assert studentList !\u003d null;"},{"lineNumber":1539,"author":{"gitId":"domoberzin"},"content":" assert courseId !\u003d null;"},{"lineNumber":1540,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1541,"author":{"gitId":"domoberzin"},"content":" usersLogic.validateSectionsAndTeams(studentList, courseId);"},{"lineNumber":1542,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1543,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1544,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1545,"author":{"gitId":"domoberzin"},"content":" * Updates a feedback question by {@code FeedbackQuestionUpdateRequest}."},{"lineNumber":1546,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1547,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade adjust the question number of questions in the same session."},{"lineNumber":1548,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1549,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade adjust the existing response of the question."},{"lineNumber":1550,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1551,"author":{"gitId":"-"},"content":" * \u003cbr/\u003e Preconditions: \u003cbr/\u003e"},{"lineNumber":1552,"author":{"gitId":"-"},"content":" * * All parameters are non-null."},{"lineNumber":1553,"author":{"gitId":"-"},"content":" *"},{"lineNumber":1554,"author":{"gitId":"-"},"content":" * @return updated feedback question"},{"lineNumber":1555,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":1556,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback question cannot be found"},{"lineNumber":1557,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1558,"author":{"gitId":"-"},"content":" public FeedbackQuestion updateFeedbackQuestionCascade(UUID questionId, FeedbackQuestionUpdateRequest updateRequest)"},{"lineNumber":1559,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":1560,"author":{"gitId":"-"},"content":" return feedbackQuestionsLogic.updateFeedbackQuestionCascade(questionId, updateRequest);"},{"lineNumber":1561,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1562,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1563,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1564,"author":{"gitId":"-"},"content":" * Returns a list of feedback sessions that need an \"Open\" email to be sent."},{"lineNumber":1565,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1566,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsWhichNeedOpenEmailsToBeSent() {"},{"lineNumber":1567,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsWhichNeedOpenEmailsToBeSent();"},{"lineNumber":1568,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1569,"author":{"gitId":"-"},"content":""},{"lineNumber":1570,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1571,"author":{"gitId":"-"},"content":" * Returns a list of sessions that were closed within past hour."},{"lineNumber":1572,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1573,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsClosedWithinThePastHour() {"},{"lineNumber":1574,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsClosedWithinThePastHour();"},{"lineNumber":1575,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1576,"author":{"gitId":"-"},"content":""},{"lineNumber":1577,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1578,"author":{"gitId":"xenosf"},"content":" * Creates or updates search document for the given student."},{"lineNumber":1579,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1580,"author":{"gitId":"xenosf"},"content":" * @see UsersLogic#putStudentDocument(Student)"},{"lineNumber":1581,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1582,"author":{"gitId":"xenosf"},"content":" public void putStudentDocument(Student student) throws SearchServiceException {"},{"lineNumber":1583,"author":{"gitId":"xenosf"},"content":" usersLogic.putStudentDocument(student);"},{"lineNumber":1584,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1585,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1586,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":1587,"author":{"gitId":"domoberzin"},"content":" * This is used by admin to search account requests in the whole system."},{"lineNumber":1588,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":1589,"author":{"gitId":"domoberzin"},"content":" * @return A list of {@link AccountRequest} or {@code null} if no match found."},{"lineNumber":1590,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":1591,"author":{"gitId":"domoberzin"},"content":" public List\u003cAccountRequest\u003e searchAccountRequestsInWholeSystem(String queryString)"},{"lineNumber":1592,"author":{"gitId":"domoberzin"},"content":" throws SearchServiceException {"},{"lineNumber":1593,"author":{"gitId":"domoberzin"},"content":" assert queryString !\u003d null;"},{"lineNumber":1594,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":1595,"author":{"gitId":"domoberzin"},"content":" return accountRequestLogic.searchAccountRequestsInWholeSystem(queryString);"},{"lineNumber":1596,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":1597,"author":{"gitId":"-"},"content":""},{"lineNumber":1598,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1599,"author":{"gitId":"-"},"content":" * Returns a list of sessions that are going to close soon."},{"lineNumber":1600,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1601,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsClosingWithinTimeLimit() {"},{"lineNumber":1602,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsClosingWithinTimeLimit();"},{"lineNumber":1603,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1604,"author":{"gitId":"-"},"content":""},{"lineNumber":1605,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1606,"author":{"gitId":"-"},"content":" * Returns a list of sessions that are going to open soon."},{"lineNumber":1607,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1608,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsOpeningWithinTimeLimit() {"},{"lineNumber":1609,"author":{"gitId":"-"},"content":" return feedbackSessionsLogic.getFeedbackSessionsOpeningWithinTimeLimit();"},{"lineNumber":1610,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1611,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":130,"yuanxi1":50,"marquestye":5,"xenosf":44,"dishenggg":9,"mingyuanc":7,"-":1366}},{"path":"src/main/java/teammates/sqllogic/api/SqlEmailGenerator.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.api;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Set;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.ErrorLogEntry;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.Config;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailType;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailWrapper;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.util.RequestTracer;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.util.Templates;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.util.Templates.EmailTemplates;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.CoursesLogic;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.DeadlineExtensionsLogic;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.FeedbackSessionsLogic;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.UsersLogic;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Handles operations related to generating emails to be sent from provided templates."},{"lineNumber":37,"author":{"gitId":"-"},"content":" *"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * @see EmailTemplates"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * @see EmailType"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * @see EmailWrapper"},{"lineNumber":41,"author":{"gitId":"-"},"content":" */"},{"lineNumber":42,"author":{"gitId":"-"},"content":"public final class SqlEmailGenerator {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // feedback action strings"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_ACTION_SUBMIT_EDIT_OR_VIEW \u003d \"submit, edit or view\";"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_ACTION_VIEW \u003d \"view\";"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_ACTION_SUBMIT_OR_UPDATE \u003d"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \", in case you have not submitted yet or wish to update your submission. \";"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private static final String HTML_NO_ACTION_REQUIRED \u003d \"\u003cmark\u003eNo action is required if you have already submitted\u003c/mark\u003e\";"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" // status-related strings"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_STATUS_SESSION_OPEN \u003d \"is still open for submissions\""},{"lineNumber":52,"author":{"gitId":"-"},"content":" + FEEDBACK_ACTION_SUBMIT_OR_UPDATE + HTML_NO_ACTION_REQUIRED;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_STATUS_SESSION_OPENING \u003d \"is now open\";"},{"lineNumber":54,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_STATUS_SESSION_CLOSING \u003d \"is closing soon\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" + FEEDBACK_ACTION_SUBMIT_OR_UPDATE + HTML_NO_ACTION_REQUIRED;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_STATUS_SESSION_CLOSED \u003d \"is now closed for submission\";"},{"lineNumber":57,"author":{"gitId":"-"},"content":" private static final String FEEDBACK_STATUS_SESSION_OPENING_SOON \u003d \"is due to open soon\";"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" private static final String DATETIME_DISPLAY_FORMAT \u003d \"EEE, dd MMM yyyy, hh:mm a z\";"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" private static final long SESSION_LINK_RECOVERY_DURATION_IN_DAYS \u003d 90;"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" private static final SqlEmailGenerator instance \u003d new SqlEmailGenerator();"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" private final CoursesLogic coursesLogic \u003d CoursesLogic.inst();"},{"lineNumber":66,"author":{"gitId":"-"},"content":" private final DeadlineExtensionsLogic deLogic \u003d DeadlineExtensionsLogic.inst();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" private final FeedbackSessionsLogic fsLogic \u003d FeedbackSessionsLogic.inst();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" private final UsersLogic usersLogic \u003d UsersLogic.inst();"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" private SqlEmailGenerator() {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" public static SqlEmailGenerator inst() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Generate Feedback Session Opening emails."},{"lineNumber":80,"author":{"gitId":"-"},"content":" */"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateFeedbackSessionOpeningEmails(FeedbackSession session) {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return generateFeedbackSessionOpeningOrClosingEmails(session, EmailType.FEEDBACK_OPENING);"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" private List\u003cEmailWrapper\u003e generateFeedbackSessionOpeningOrClosingEmails("},{"lineNumber":86,"author":{"gitId":"-"},"content":" FeedbackSession session, EmailType emailType) {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" Course course \u003d session.getCourse();"},{"lineNumber":88,"author":{"gitId":"-"},"content":" boolean isEmailNeededForStudents \u003d fsLogic.isFeedbackSessionForUserTypeToAnswer(session, false);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" boolean isEmailNeededForInstructors \u003d fsLogic.isFeedbackSessionForUserTypeToAnswer(session, true);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsToNotify \u003d isEmailNeededForStudents"},{"lineNumber":91,"author":{"gitId":"-"},"content":" ? usersLogic.getCoOwnersForCourse(course.getId())"},{"lineNumber":92,"author":{"gitId":"-"},"content":" : new ArrayList\u003c\u003e();"},{"lineNumber":93,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students \u003d isEmailNeededForStudents"},{"lineNumber":94,"author":{"gitId":"-"},"content":" ? usersLogic.getStudentsForCourse(course.getId())"},{"lineNumber":95,"author":{"gitId":"-"},"content":" : new ArrayList\u003c\u003e();"},{"lineNumber":96,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d isEmailNeededForInstructors"},{"lineNumber":97,"author":{"gitId":"-"},"content":" ? usersLogic.getInstructorsForCourse(course.getId())"},{"lineNumber":98,"author":{"gitId":"-"},"content":" : new ArrayList\u003c\u003e();"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" if (emailType \u003d\u003d EmailType.FEEDBACK_CLOSING) {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" List\u003cDeadlineExtension\u003e deadlines \u003d session.getDeadlineExtensions();"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Set\u003cUUID\u003e userIds \u003d deadlines.stream()"},{"lineNumber":103,"author":{"gitId":"-"},"content":" .map(d -\u003e d.getUser().getId())"},{"lineNumber":104,"author":{"gitId":"-"},"content":" .collect(Collectors.toSet());"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" // student."},{"lineNumber":107,"author":{"gitId":"-"},"content":" students \u003d students.stream()"},{"lineNumber":108,"author":{"gitId":"-"},"content":" .filter(x -\u003e !userIds.contains(x.getId()))"},{"lineNumber":109,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" // instructor."},{"lineNumber":112,"author":{"gitId":"-"},"content":" instructors \u003d instructors.stream()"},{"lineNumber":113,"author":{"gitId":"-"},"content":" .filter(x -\u003e !userIds.contains(x.getId()))"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" String status \u003d emailType \u003d\u003d EmailType.FEEDBACK_OPENING"},{"lineNumber":118,"author":{"gitId":"-"},"content":" ? FEEDBACK_STATUS_SESSION_OPENING"},{"lineNumber":119,"author":{"gitId":"-"},"content":" : FEEDBACK_STATUS_SESSION_CLOSING;"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" String template \u003d emailType \u003d\u003d EmailType.FEEDBACK_OPENING"},{"lineNumber":122,"author":{"gitId":"-"},"content":" ? EmailTemplates.USER_FEEDBACK_SESSION_OPENING.replace(\"${status}\", status)"},{"lineNumber":123,"author":{"gitId":"-"},"content":" : EmailTemplates.USER_FEEDBACK_SESSION.replace(\"${status}\", status);"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" return generateFeedbackSessionEmailBases(course, session, students, instructors, instructorsToNotify, template,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" emailType, FEEDBACK_ACTION_SUBMIT_EDIT_OR_VIEW);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":130,"author":{"gitId":"-"},"content":" * Generates the feedback session opening soon emails for the given {@code session}."},{"lineNumber":131,"author":{"gitId":"-"},"content":" *"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis is useful for e.g. in case the feedback session opening info was set wrongly."},{"lineNumber":133,"author":{"gitId":"-"},"content":" */"},{"lineNumber":134,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateFeedbackSessionOpeningSoonEmails(FeedbackSession session) {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return generateFeedbackSessionOpeningSoonOrClosedEmails(session, EmailType.FEEDBACK_OPENING_SOON);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" private List\u003cEmailWrapper\u003e generateFeedbackSessionOpeningSoonOrClosedEmails("},{"lineNumber":139,"author":{"gitId":"-"},"content":" FeedbackSession session, EmailType emailType) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" Course course \u003d session.getCourse();"},{"lineNumber":141,"author":{"gitId":"-"},"content":" // Notify only course co-owners"},{"lineNumber":142,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e coOwners \u003d usersLogic.getCoOwnersForCourse(course.getId());"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return coOwners.stream()"},{"lineNumber":144,"author":{"gitId":"-"},"content":" .map(coOwner -\u003e generateFeedbackSessionEmailBaseForCoowner(course, session, coOwner, emailType))"},{"lineNumber":145,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" private EmailWrapper generateFeedbackSessionEmailBaseForCoowner("},{"lineNumber":149,"author":{"gitId":"-"},"content":" Course course, FeedbackSession session, Instructor coOwner, EmailType emailType) {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" String additionalNotes;"},{"lineNumber":151,"author":{"gitId":"-"},"content":" String status;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" if (emailType \u003d\u003d EmailType.FEEDBACK_OPENING_SOON) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" String editUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.INSTRUCTOR_SESSION_EDIT_PAGE)"},{"lineNumber":154,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":155,"author":{"gitId":"-"},"content":" .withSessionName(session.getName())"},{"lineNumber":156,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":157,"author":{"gitId":"-"},"content":" // If instructor has not joined the course, populate additional notes with information to join course."},{"lineNumber":158,"author":{"gitId":"-"},"content":" if (coOwner.isRegistered()) {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" additionalNotes \u003d fillUpEditFeedbackSessionDetailsFragment(editUrl);"},{"lineNumber":160,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" additionalNotes \u003d fillUpJoinCourseBeforeEditFeedbackSessionDetailsFragment(editUrl,"},{"lineNumber":162,"author":{"gitId":"-"},"content":" getInstructorCourseJoinUrl(coOwner));"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":" status \u003d FEEDBACK_STATUS_SESSION_OPENING_SOON;"},{"lineNumber":165,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" String reportUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.INSTRUCTOR_SESSION_REPORT_PAGE)"},{"lineNumber":167,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":168,"author":{"gitId":"-"},"content":" .withSessionName(session.getName())"},{"lineNumber":169,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":170,"author":{"gitId":"-"},"content":" additionalNotes \u003d fillUpViewResponsesDetailsFragment(reportUrl);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" status \u003d FEEDBACK_STATUS_SESSION_CLOSED;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":" Instant startTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":175,"author":{"gitId":"-"},"content":" session.getStartTime(), session.getCourse().getTimeZone(), false);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" Instant endTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":177,"author":{"gitId":"-"},"content":" session.getEndTime(), session.getCourse().getTimeZone(), false);"},{"lineNumber":178,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate(EmailTemplates.OWNER_FEEDBACK_SESSION,"},{"lineNumber":179,"author":{"gitId":"-"},"content":" \"${status}\", status,"},{"lineNumber":180,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(coOwner.getName()),"},{"lineNumber":181,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":182,"author":{"gitId":"-"},"content":" \"${courseId}\", SanitizationHelper.sanitizeForHtml(course.getId()),"},{"lineNumber":183,"author":{"gitId":"-"},"content":" \"${feedbackSessionName}\", SanitizationHelper.sanitizeForHtml(session.getName()),"},{"lineNumber":184,"author":{"gitId":"-"},"content":" \"${deadline}\", SanitizationHelper.sanitizeForHtml("},{"lineNumber":185,"author":{"gitId":"-"},"content":" TimeHelper.formatInstant(endTime, session.getCourse().getTimeZone(), DATETIME_DISPLAY_FORMAT)),"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \"${sessionInstructions}\", session.getInstructionsString(),"},{"lineNumber":187,"author":{"gitId":"-"},"content":" \"${startTime}\", SanitizationHelper.sanitizeForHtml("},{"lineNumber":188,"author":{"gitId":"-"},"content":" TimeHelper.formatInstant(startTime, session.getCourse().getTimeZone(), DATETIME_DISPLAY_FORMAT)),"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \"${additionalNotes}\", additionalNotes);"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(coOwner.getEmail());"},{"lineNumber":192,"author":{"gitId":"-"},"content":" email.setType(emailType);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), session.getName());"},{"lineNumber":194,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":195,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":199,"author":{"gitId":"-"},"content":" * Generates the fragment for instructions on how to edit details for feedback session at {@code editUrl}."},{"lineNumber":200,"author":{"gitId":"-"},"content":" */"},{"lineNumber":201,"author":{"gitId":"-"},"content":" private String fillUpEditFeedbackSessionDetailsFragment(String editUrl) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" return Templates.populateTemplate(EmailTemplates.FRAGMENT_OPENING_SOON_EDIT_DETAILS,"},{"lineNumber":203,"author":{"gitId":"-"},"content":" \"${sessionEditUrl}\", editUrl);"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * Generates the fragment for instructions on how to view responses for feedback session at {@code reportUrl}."},{"lineNumber":208,"author":{"gitId":"-"},"content":" */"},{"lineNumber":209,"author":{"gitId":"-"},"content":" private String fillUpViewResponsesDetailsFragment(String reportUrl) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" return Templates.populateTemplate(EmailTemplates.FRAGMENT_CLOSED_VIEW_RESPONSES,"},{"lineNumber":211,"author":{"gitId":"-"},"content":" \"${reportUrl}\", reportUrl);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * Generates the fragment for instructions on how to edit details for feedback session at {@code editUrl} and"},{"lineNumber":216,"author":{"gitId":"-"},"content":" * how to join the course at {@code joinUrl}."},{"lineNumber":217,"author":{"gitId":"-"},"content":" */"},{"lineNumber":218,"author":{"gitId":"-"},"content":" private String fillUpJoinCourseBeforeEditFeedbackSessionDetailsFragment(String editUrl, String joinUrl) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" return Templates.populateTemplate(EmailTemplates.FRAGMENT_OPENING_SOON_JOIN_COURSE_BEFORE_EDIT_DETAILS,"},{"lineNumber":220,"author":{"gitId":"-"},"content":" \"${sessionEditUrl}\", editUrl,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" \"${joinUrl}\", joinUrl"},{"lineNumber":222,"author":{"gitId":"-"},"content":" );"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":226,"author":{"gitId":"-"},"content":" * Generates the feedback session reminder emails for the given {@code session} for {@code students}"},{"lineNumber":227,"author":{"gitId":"-"},"content":" * and {@code instructorsToRemind}. In addition, the emails will also be forwarded to {@code instructorsToNotify}."},{"lineNumber":228,"author":{"gitId":"-"},"content":" */"},{"lineNumber":229,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateFeedbackSessionReminderEmails("},{"lineNumber":230,"author":{"gitId":"-"},"content":" FeedbackSession session, List\u003cStudent\u003e students,"},{"lineNumber":231,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsToRemind, Instructor instructorToNotify) {"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" Course course \u003d session.getCourse();"},{"lineNumber":234,"author":{"gitId":"-"},"content":" String template \u003d EmailTemplates.USER_FEEDBACK_SESSION.replace(\"${status}\", FEEDBACK_STATUS_SESSION_OPEN);"},{"lineNumber":235,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorToNotifyAsList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":236,"author":{"gitId":"-"},"content":" if (instructorToNotify !\u003d null) {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" instructorToNotifyAsList.add(instructorToNotify);"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" return generateFeedbackSessionEmailBases(course, session, students, instructorsToRemind, instructorToNotifyAsList,"},{"lineNumber":241,"author":{"gitId":"-"},"content":" template, EmailType.FEEDBACK_SESSION_REMINDER, FEEDBACK_ACTION_SUBMIT_EDIT_OR_VIEW);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Generates the email containing the summary of the feedback sessions"},{"lineNumber":246,"author":{"gitId":"-"},"content":" * email for the given {@code courseId} for {@code userEmail}."},{"lineNumber":247,"author":{"gitId":"-"},"content":" * @param courseId - ID of the course"},{"lineNumber":248,"author":{"gitId":"-"},"content":" * @param userEmail - Email of student to send feedback session summary to"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * @param emailType - The email type which corresponds to the reason behind why the links are being resent"},{"lineNumber":250,"author":{"gitId":"-"},"content":" */"},{"lineNumber":251,"author":{"gitId":"-"},"content":" public EmailWrapper generateFeedbackSessionSummaryOfCourse("},{"lineNumber":252,"author":{"gitId":"-"},"content":" String courseId, String userEmail, EmailType emailType) {"},{"lineNumber":253,"author":{"gitId":"-"},"content":" assert emailType \u003d\u003d EmailType.STUDENT_EMAIL_CHANGED"},{"lineNumber":254,"author":{"gitId":"-"},"content":" || emailType \u003d\u003d EmailType.STUDENT_COURSE_LINKS_REGENERATED"},{"lineNumber":255,"author":{"gitId":"-"},"content":" || emailType \u003d\u003d EmailType.INSTRUCTOR_COURSE_LINKS_REGENERATED;"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":" Course course \u003d coursesLogic.getCourse(courseId);"},{"lineNumber":258,"author":{"gitId":"-"},"content":" boolean isInstructor \u003d emailType \u003d\u003d EmailType.INSTRUCTOR_COURSE_LINKS_REGENERATED;"},{"lineNumber":259,"author":{"gitId":"domoberzin"},"content":" Student student \u003d usersLogic.getStudentForEmail(courseId, userEmail);"},{"lineNumber":260,"author":{"gitId":"-"},"content":" Instructor instructor \u003d null;"},{"lineNumber":261,"author":{"gitId":"-"},"content":" if (isInstructor) {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" instructor \u003d usersLogic.getInstructorForEmail(courseId, userEmail);"},{"lineNumber":263,"author":{"gitId":"-"},"content":" }"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":266,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e fsInCourse \u003d fsLogic.getFeedbackSessionsForCourse(courseId);"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":" for (FeedbackSession fs : fsInCourse) {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" if (fs.isOpenEmailSent() || fs.isPublishedEmailSent()) {"},{"lineNumber":270,"author":{"gitId":"-"},"content":" sessions.add(fs);"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }"},{"lineNumber":272,"author":{"gitId":"-"},"content":" }"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":" StringBuilder linksFragmentValue \u003d new StringBuilder(1000);"},{"lineNumber":275,"author":{"gitId":"-"},"content":" String joinUrl \u003d Config.getFrontEndAppUrl("},{"lineNumber":276,"author":{"gitId":"-"},"content":" isInstructor ? instructor.getRegistrationUrl() : student.getRegistrationUrl()).toAbsoluteString();"},{"lineNumber":277,"author":{"gitId":"-"},"content":" boolean isYetToJoinCourse \u003d isInstructor ? isYetToJoinCourse(instructor) : isYetToJoinCourse(student);"},{"lineNumber":278,"author":{"gitId":"-"},"content":" String joinFragmentTemplate \u003d isInstructor"},{"lineNumber":279,"author":{"gitId":"-"},"content":" ? EmailTemplates.FRAGMENT_INSTRUCTOR_COURSE_REJOIN_AFTER_REGKEY_RESET"},{"lineNumber":280,"author":{"gitId":"-"},"content":" : emailType \u003d\u003d EmailType.STUDENT_EMAIL_CHANGED"},{"lineNumber":281,"author":{"gitId":"-"},"content":" ? EmailTemplates.FRAGMENT_STUDENT_COURSE_JOIN"},{"lineNumber":282,"author":{"gitId":"-"},"content":" : EmailTemplates.FRAGMENT_STUDENT_COURSE_REJOIN_AFTER_REGKEY_RESET;"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" String joinFragmentValue \u003d isYetToJoinCourse"},{"lineNumber":285,"author":{"gitId":"-"},"content":" ? Templates.populateTemplate(joinFragmentTemplate,"},{"lineNumber":286,"author":{"gitId":"-"},"content":" \"${joinUrl}\", joinUrl,"},{"lineNumber":287,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":288,"author":{"gitId":"-"},"content":" \"${coOwnersEmails}\", generateCoOwnersEmailsLine(course.getId()),"},{"lineNumber":289,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL)"},{"lineNumber":290,"author":{"gitId":"-"},"content":" : \"\";"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" for (FeedbackSession fs : sessions) {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" String submitUrlHtml \u003d \"(Feedback session is not yet opened)\";"},{"lineNumber":294,"author":{"gitId":"-"},"content":" String reportUrlHtml \u003d \"(Feedback session is not yet published)\";"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":" String userKey \u003d isInstructor ? instructor.getRegKey() : student.getRegKey();"},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":" if (fs.isOpened() || fs.isClosed()) {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" String submitUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSION_SUBMISSION_PAGE)"},{"lineNumber":300,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":301,"author":{"gitId":"-"},"content":" .withSessionName(fs.getName())"},{"lineNumber":302,"author":{"gitId":"-"},"content":" .withRegistrationKey(userKey)"},{"lineNumber":303,"author":{"gitId":"-"},"content":" .withEntityType(isInstructor ? Const.EntityType.INSTRUCTOR : \"\")"},{"lineNumber":304,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":305,"author":{"gitId":"-"},"content":" submitUrlHtml \u003d \"\u003ca href\u003d\\\"\" + submitUrl + \"\\\"\u003e\" + submitUrl + \"\u003c/a\u003e\";"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" if (fs.isPublished()) {"},{"lineNumber":309,"author":{"gitId":"-"},"content":" String reportUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSION_RESULTS_PAGE)"},{"lineNumber":310,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":311,"author":{"gitId":"-"},"content":" .withSessionName(fs.getName())"},{"lineNumber":312,"author":{"gitId":"-"},"content":" .withRegistrationKey(userKey)"},{"lineNumber":313,"author":{"gitId":"-"},"content":" .withEntityType(isInstructor ? Const.EntityType.INSTRUCTOR : \"\")"},{"lineNumber":314,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":315,"author":{"gitId":"-"},"content":" reportUrlHtml \u003d \"\u003ca href\u003d\\\"\" + reportUrl + \"\\\"\u003e\" + reportUrl + \"\u003c/a\u003e\";"},{"lineNumber":316,"author":{"gitId":"-"},"content":" }"},{"lineNumber":317,"author":{"gitId":"-"},"content":""},{"lineNumber":318,"author":{"gitId":"-"},"content":" Instant endTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":319,"author":{"gitId":"-"},"content":" fs.getEndTime(), fs.getCourse().getTimeZone(), false);"},{"lineNumber":320,"author":{"gitId":"-"},"content":" linksFragmentValue.append(Templates.populateTemplate("},{"lineNumber":321,"author":{"gitId":"-"},"content":" EmailTemplates.FRAGMENT_SINGLE_FEEDBACK_SESSION_LINKS,"},{"lineNumber":322,"author":{"gitId":"-"},"content":" \"${feedbackSessionName}\", fs.getName(),"},{"lineNumber":323,"author":{"gitId":"-"},"content":" \"${deadline}\", TimeHelper.formatInstant(endTime, fs.getCourse().getTimeZone(), DATETIME_DISPLAY_FORMAT)"},{"lineNumber":324,"author":{"gitId":"-"},"content":" + (fs.isClosed() ? \" (Passed)\" : \"\"),"},{"lineNumber":325,"author":{"gitId":"-"},"content":" \"${submitUrl}\", submitUrlHtml,"},{"lineNumber":326,"author":{"gitId":"-"},"content":" \"${reportUrl}\", reportUrlHtml));"},{"lineNumber":327,"author":{"gitId":"-"},"content":" }"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":" if (linksFragmentValue.length() \u003d\u003d 0) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" linksFragmentValue.append(\"No links found.\");"},{"lineNumber":331,"author":{"gitId":"-"},"content":" }"},{"lineNumber":332,"author":{"gitId":"-"},"content":""},{"lineNumber":333,"author":{"gitId":"-"},"content":" String additionalContactInformation \u003d getAdditionalContactInformationFragment(course, isInstructor);"},{"lineNumber":334,"author":{"gitId":"-"},"content":" String resendLinksTemplate \u003d emailType \u003d\u003d EmailType.STUDENT_EMAIL_CHANGED"},{"lineNumber":335,"author":{"gitId":"-"},"content":" ? Templates.EmailTemplates.USER_FEEDBACK_SESSION_RESEND_ALL_LINKS"},{"lineNumber":336,"author":{"gitId":"-"},"content":" : Templates.EmailTemplates.USER_REGKEY_REGENERATION_RESEND_ALL_COURSE_LINKS;"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" String userName \u003d isInstructor ? instructor.getName() : student.getName();"},{"lineNumber":339,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate(resendLinksTemplate,"},{"lineNumber":340,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(userName),"},{"lineNumber":341,"author":{"gitId":"-"},"content":" \"${userEmail}\", userEmail,"},{"lineNumber":342,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":343,"author":{"gitId":"-"},"content":" \"${courseId}\", course.getId(),"},{"lineNumber":344,"author":{"gitId":"-"},"content":" \"${joinFragment}\", joinFragmentValue,"},{"lineNumber":345,"author":{"gitId":"-"},"content":" \"${linksFragment}\", linksFragmentValue.toString(),"},{"lineNumber":346,"author":{"gitId":"-"},"content":" \"${additionalContactInformation}\", additionalContactInformation);"},{"lineNumber":347,"author":{"gitId":"-"},"content":""},{"lineNumber":348,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(userEmail);"},{"lineNumber":349,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":350,"author":{"gitId":"-"},"content":" email.setType(emailType);"},{"lineNumber":351,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), course.getId());"},{"lineNumber":352,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":353,"author":{"gitId":"-"},"content":" }"},{"lineNumber":354,"author":{"gitId":"-"},"content":""},{"lineNumber":355,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":356,"author":{"gitId":"-"},"content":" * Generates for the student an recovery email listing the links to submit/view responses for all feedback sessions"},{"lineNumber":357,"author":{"gitId":"-"},"content":" * under {@code recoveryEmailAddress} in the past 180 days. If no student with {@code recoveryEmailAddress} is"},{"lineNumber":358,"author":{"gitId":"-"},"content":" * found, generate an email stating that there is no such student in the system. If no feedback sessions are found,"},{"lineNumber":359,"author":{"gitId":"-"},"content":" * generate an email stating no feedback sessions found."},{"lineNumber":360,"author":{"gitId":"-"},"content":" */"},{"lineNumber":361,"author":{"gitId":"-"},"content":" public EmailWrapper generateSessionLinksRecoveryEmailForStudent(String recoveryEmailAddress,"},{"lineNumber":362,"author":{"gitId":"-"},"content":" String studentNameFromDatastore, Map\u003cCourseAttributes, StringBuilder\u003e dataStoreLinkFragmentMap) {"},{"lineNumber":363,"author":{"gitId":"-"},"content":""},{"lineNumber":364,"author":{"gitId":"-"},"content":" // Datastore attributes should be removed once migration is completed"},{"lineNumber":365,"author":{"gitId":"-"},"content":" String emptyName \u003d \"\";"},{"lineNumber":366,"author":{"gitId":"-"},"content":" boolean noDataStoreStudent \u003d studentNameFromDatastore.equals(emptyName); // student name cannot be empty"},{"lineNumber":367,"author":{"gitId":"-"},"content":""},{"lineNumber":368,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsForEmail \u003d usersLogic.getAllStudentsForEmail(recoveryEmailAddress);"},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":" if (studentsForEmail.isEmpty() \u0026\u0026 noDataStoreStudent) {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" return generateSessionLinksRecoveryEmailForNonExistentStudent(recoveryEmailAddress);"},{"lineNumber":372,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" return generateSessionLinksRecoveryEmailForExistingStudent(recoveryEmailAddress, studentsForEmail,"},{"lineNumber":374,"author":{"gitId":"-"},"content":" studentNameFromDatastore, dataStoreLinkFragmentMap);"},{"lineNumber":375,"author":{"gitId":"-"},"content":" }"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"-"},"content":" private EmailWrapper generateSessionLinksRecoveryEmailForNonExistentStudent(String recoveryEmailAddress) {"},{"lineNumber":379,"author":{"gitId":"-"},"content":" String recoveryUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSIONS_LINK_RECOVERY_PAGE).toAbsoluteString();"},{"lineNumber":380,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate("},{"lineNumber":381,"author":{"gitId":"-"},"content":" EmailTemplates.SESSION_LINKS_RECOVERY_EMAIL_NOT_FOUND,"},{"lineNumber":382,"author":{"gitId":"-"},"content":" \"${userEmail}\", SanitizationHelper.sanitizeForHtml(recoveryEmailAddress),"},{"lineNumber":383,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL,"},{"lineNumber":384,"author":{"gitId":"-"},"content":" \"${teammateHomePageLink}\", Config.getFrontEndAppUrl(\"/\").toAbsoluteString(),"},{"lineNumber":385,"author":{"gitId":"-"},"content":" \"${sessionsRecoveryLink}\", recoveryUrl);"},{"lineNumber":386,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(recoveryEmailAddress);"},{"lineNumber":387,"author":{"gitId":"-"},"content":" email.setType(EmailType.SESSION_LINKS_RECOVERY);"},{"lineNumber":388,"author":{"gitId":"-"},"content":" email.setSubjectFromType();"},{"lineNumber":389,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":390,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":391,"author":{"gitId":"-"},"content":" }"},{"lineNumber":392,"author":{"gitId":"-"},"content":""},{"lineNumber":393,"author":{"gitId":"-"},"content":" private EmailWrapper generateSessionLinksRecoveryEmailForExistingStudent(String recoveryEmailAddress,"},{"lineNumber":394,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsForEmail, String studentNameFromDatastore,"},{"lineNumber":395,"author":{"gitId":"-"},"content":" Map\u003cCourseAttributes, StringBuilder\u003e dataStoreLinkFragmentMap) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" assert !studentsForEmail.isEmpty() || studentNameFromDatastore !\u003d null;"},{"lineNumber":397,"author":{"gitId":"-"},"content":" int firstStudentIdx \u003d 0;"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":" Map\u003cCourse, StringBuilder\u003e linkFragmentsMap \u003d generateLinkFragmentsMap(studentsForEmail);"},{"lineNumber":400,"author":{"gitId":"-"},"content":""},{"lineNumber":401,"author":{"gitId":"-"},"content":" String emailBody;"},{"lineNumber":402,"author":{"gitId":"-"},"content":""},{"lineNumber":403,"author":{"gitId":"-"},"content":" String studentName;"},{"lineNumber":404,"author":{"gitId":"-"},"content":""},{"lineNumber":405,"author":{"gitId":"-"},"content":" if (studentsForEmail.isEmpty()) {"},{"lineNumber":406,"author":{"gitId":"-"},"content":" studentName \u003d studentNameFromDatastore;"},{"lineNumber":407,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" studentName \u003d studentsForEmail.get(firstStudentIdx).getName();"},{"lineNumber":409,"author":{"gitId":"-"},"content":" }"},{"lineNumber":410,"author":{"gitId":"-"},"content":""},{"lineNumber":411,"author":{"gitId":"-"},"content":" var recoveryUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSIONS_LINK_RECOVERY_PAGE).toAbsoluteString();"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":" if (linkFragmentsMap.isEmpty() \u0026\u0026 dataStoreLinkFragmentMap.isEmpty()) {"},{"lineNumber":414,"author":{"gitId":"-"},"content":" emailBody \u003d Templates.populateTemplate("},{"lineNumber":415,"author":{"gitId":"-"},"content":" EmailTemplates.SESSION_LINKS_RECOVERY_ACCESS_LINKS_NONE,"},{"lineNumber":416,"author":{"gitId":"-"},"content":" \"${teammateHomePageLink}\", Config.getFrontEndAppUrl(\"/\").toAbsoluteString(),"},{"lineNumber":417,"author":{"gitId":"-"},"content":" \"${userEmail}\", SanitizationHelper.sanitizeForHtml(recoveryEmailAddress),"},{"lineNumber":418,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL,"},{"lineNumber":419,"author":{"gitId":"-"},"content":" \"${sessionsRecoveryLink}\", recoveryUrl);"},{"lineNumber":420,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":421,"author":{"gitId":"-"},"content":" var courseFragments \u003d new StringBuilder(10000);"},{"lineNumber":422,"author":{"gitId":"-"},"content":" linkFragmentsMap.forEach((course, linksFragments) -\u003e {"},{"lineNumber":423,"author":{"gitId":"-"},"content":" String courseBody \u003d Templates.populateTemplate("},{"lineNumber":424,"author":{"gitId":"-"},"content":" EmailTemplates.FRAGMENT_SESSION_LINKS_RECOVERY_ACCESS_LINKS_BY_COURSE,"},{"lineNumber":425,"author":{"gitId":"-"},"content":" \"${sessionFragment}\", linksFragments.toString(),"},{"lineNumber":426,"author":{"gitId":"-"},"content":" \"${courseName}\", course.getName());"},{"lineNumber":427,"author":{"gitId":"-"},"content":" courseFragments.append(courseBody);"},{"lineNumber":428,"author":{"gitId":"-"},"content":" });"},{"lineNumber":429,"author":{"gitId":"-"},"content":""},{"lineNumber":430,"author":{"gitId":"-"},"content":" // To remove after migrating to postgres"},{"lineNumber":431,"author":{"gitId":"-"},"content":" dataStoreLinkFragmentMap.forEach((course, linksFragments) -\u003e {"},{"lineNumber":432,"author":{"gitId":"-"},"content":" String courseBody \u003d Templates.populateTemplate("},{"lineNumber":433,"author":{"gitId":"-"},"content":" EmailTemplates.FRAGMENT_SESSION_LINKS_RECOVERY_ACCESS_LINKS_BY_COURSE,"},{"lineNumber":434,"author":{"gitId":"-"},"content":" \"${sessionFragment}\", linksFragments.toString(),"},{"lineNumber":435,"author":{"gitId":"-"},"content":" \"${courseName}\", course.getName());"},{"lineNumber":436,"author":{"gitId":"-"},"content":" courseFragments.append(courseBody);"},{"lineNumber":437,"author":{"gitId":"-"},"content":" });"},{"lineNumber":438,"author":{"gitId":"-"},"content":" emailBody \u003d Templates.populateTemplate("},{"lineNumber":439,"author":{"gitId":"-"},"content":" EmailTemplates.SESSION_LINKS_RECOVERY_ACCESS_LINKS,"},{"lineNumber":440,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(studentName),"},{"lineNumber":441,"author":{"gitId":"-"},"content":" \"${linksFragment}\", courseFragments.toString(),"},{"lineNumber":442,"author":{"gitId":"-"},"content":" \"${userEmail}\", SanitizationHelper.sanitizeForHtml(recoveryEmailAddress),"},{"lineNumber":443,"author":{"gitId":"-"},"content":" \"${teammateHomePageLink}\", Config.getFrontEndAppUrl(\"/\").toAbsoluteString(),"},{"lineNumber":444,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL,"},{"lineNumber":445,"author":{"gitId":"-"},"content":" \"${sessionsRecoveryLink}\", recoveryUrl);"},{"lineNumber":446,"author":{"gitId":"-"},"content":" }"},{"lineNumber":447,"author":{"gitId":"-"},"content":""},{"lineNumber":448,"author":{"gitId":"-"},"content":" var email \u003d getEmptyEmailAddressedToEmail(recoveryEmailAddress);"},{"lineNumber":449,"author":{"gitId":"-"},"content":" email.setType(EmailType.SESSION_LINKS_RECOVERY);"},{"lineNumber":450,"author":{"gitId":"-"},"content":" email.setSubjectFromType();"},{"lineNumber":451,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":452,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":453,"author":{"gitId":"-"},"content":" }"},{"lineNumber":454,"author":{"gitId":"-"},"content":""},{"lineNumber":455,"author":{"gitId":"-"},"content":" private Map\u003cCourse, StringBuilder\u003e generateLinkFragmentsMap(List\u003cStudent\u003e studentsForEmail) {"},{"lineNumber":456,"author":{"gitId":"-"},"content":" Instant searchStartTime \u003d TimeHelper.getInstantDaysOffsetBeforeNow(SESSION_LINK_RECOVERY_DURATION_IN_DAYS);"},{"lineNumber":457,"author":{"gitId":"-"},"content":" Map\u003cCourse, StringBuilder\u003e linkFragmentsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":458,"author":{"gitId":"-"},"content":""},{"lineNumber":459,"author":{"gitId":"-"},"content":" for (var student : studentsForEmail) {"},{"lineNumber":460,"author":{"gitId":"-"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":461,"author":{"gitId":"-"},"content":" // Query students\u0027 courses first"},{"lineNumber":462,"author":{"gitId":"-"},"content":" // as a student will likely be in only a small number of courses."},{"lineNumber":463,"author":{"gitId":"-"},"content":" Course course \u003d student.getCourse();"},{"lineNumber":464,"author":{"gitId":"-"},"content":" String courseId \u003d course.getId();"},{"lineNumber":465,"author":{"gitId":"-"},"content":""},{"lineNumber":466,"author":{"gitId":"-"},"content":" StringBuilder linksFragmentValue;"},{"lineNumber":467,"author":{"gitId":"-"},"content":" if (linkFragmentsMap.containsKey(course)) {"},{"lineNumber":468,"author":{"gitId":"-"},"content":" linksFragmentValue \u003d linkFragmentsMap.get(course);"},{"lineNumber":469,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":470,"author":{"gitId":"-"},"content":" linksFragmentValue \u003d new StringBuilder(5000);"},{"lineNumber":471,"author":{"gitId":"-"},"content":" }"},{"lineNumber":472,"author":{"gitId":"-"},"content":""},{"lineNumber":473,"author":{"gitId":"-"},"content":" for (var session : fsLogic.getFeedbackSessionsForCourseStartingAfter(courseId, searchStartTime)) {"},{"lineNumber":474,"author":{"gitId":"-"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":475,"author":{"gitId":"-"},"content":" var submitUrlHtml \u003d \"\";"},{"lineNumber":476,"author":{"gitId":"-"},"content":" var reportUrlHtml \u003d \"\";"},{"lineNumber":477,"author":{"gitId":"-"},"content":""},{"lineNumber":478,"author":{"gitId":"-"},"content":" if (session.isOpened() || session.isClosed()) {"},{"lineNumber":479,"author":{"gitId":"-"},"content":" var submitUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSION_SUBMISSION_PAGE)"},{"lineNumber":480,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":481,"author":{"gitId":"-"},"content":" .withSessionName(session.getName())"},{"lineNumber":482,"author":{"gitId":"-"},"content":" .withRegistrationKey(student.getRegKey())"},{"lineNumber":483,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":484,"author":{"gitId":"-"},"content":" submitUrlHtml \u003d \"[\u003ca href\u003d\\\"\" + submitUrl + \"\\\"\u003esubmission link\u003c/a\u003e]\";"},{"lineNumber":485,"author":{"gitId":"-"},"content":" }"},{"lineNumber":486,"author":{"gitId":"-"},"content":""},{"lineNumber":487,"author":{"gitId":"-"},"content":" if (session.isPublished()) {"},{"lineNumber":488,"author":{"gitId":"-"},"content":" var reportUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSION_RESULTS_PAGE)"},{"lineNumber":489,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":490,"author":{"gitId":"-"},"content":" .withSessionName(session.getName())"},{"lineNumber":491,"author":{"gitId":"-"},"content":" .withRegistrationKey(student.getRegKey())"},{"lineNumber":492,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":493,"author":{"gitId":"-"},"content":" reportUrlHtml \u003d \"[\u003ca href\u003d\\\"\" + reportUrl + \"\\\"\u003eresult link\u003c/a\u003e]\";"},{"lineNumber":494,"author":{"gitId":"-"},"content":" }"},{"lineNumber":495,"author":{"gitId":"-"},"content":""},{"lineNumber":496,"author":{"gitId":"-"},"content":" if (submitUrlHtml.isEmpty() \u0026\u0026 reportUrlHtml.isEmpty()) {"},{"lineNumber":497,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":498,"author":{"gitId":"-"},"content":" }"},{"lineNumber":499,"author":{"gitId":"-"},"content":""},{"lineNumber":500,"author":{"gitId":"-"},"content":" linksFragmentValue.append(Templates.populateTemplate("},{"lineNumber":501,"author":{"gitId":"-"},"content":" EmailTemplates.FRAGMENT_SESSION_LINKS_RECOVERY_ACCESS_LINKS_BY_SESSION,"},{"lineNumber":502,"author":{"gitId":"-"},"content":" \"${sessionName}\", session.getName(),"},{"lineNumber":503,"author":{"gitId":"-"},"content":" \"${submitUrl}\", submitUrlHtml,"},{"lineNumber":504,"author":{"gitId":"-"},"content":" \"${reportUrl}\", reportUrlHtml));"},{"lineNumber":505,"author":{"gitId":"-"},"content":""},{"lineNumber":506,"author":{"gitId":"-"},"content":" linkFragmentsMap.putIfAbsent(course, linksFragmentValue);"},{"lineNumber":507,"author":{"gitId":"-"},"content":" }"},{"lineNumber":508,"author":{"gitId":"-"},"content":" }"},{"lineNumber":509,"author":{"gitId":"-"},"content":" return linkFragmentsMap;"},{"lineNumber":510,"author":{"gitId":"-"},"content":""},{"lineNumber":511,"author":{"gitId":"-"},"content":" }"},{"lineNumber":512,"author":{"gitId":"-"},"content":""},{"lineNumber":513,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":514,"author":{"gitId":"-"},"content":" * Generates the feedback session closing emails for the given {@code session}."},{"lineNumber":515,"author":{"gitId":"-"},"content":" *"},{"lineNumber":516,"author":{"gitId":"-"},"content":" * \u003cp\u003eStudents and instructors with deadline extensions are not notified."},{"lineNumber":517,"author":{"gitId":"-"},"content":" */"},{"lineNumber":518,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateFeedbackSessionClosingEmails(FeedbackSession session) {"},{"lineNumber":519,"author":{"gitId":"-"},"content":" return generateFeedbackSessionOpeningOrClosingEmails(session, EmailType.FEEDBACK_CLOSING);"},{"lineNumber":520,"author":{"gitId":"-"},"content":" }"},{"lineNumber":521,"author":{"gitId":"-"},"content":""},{"lineNumber":522,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":523,"author":{"gitId":"-"},"content":" * Generates the feedback session closed emails for the given {@code session}."},{"lineNumber":524,"author":{"gitId":"-"},"content":" */"},{"lineNumber":525,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateFeedbackSessionClosedEmails(FeedbackSession session) {"},{"lineNumber":526,"author":{"gitId":"-"},"content":" return generateFeedbackSessionOpeningSoonOrClosedEmails(session, EmailType.FEEDBACK_CLOSED);"},{"lineNumber":527,"author":{"gitId":"-"},"content":" }"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":530,"author":{"gitId":"-"},"content":" * Generates the feedback session closing emails for users with deadline extensions."},{"lineNumber":531,"author":{"gitId":"-"},"content":" */"},{"lineNumber":532,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateFeedbackSessionClosingWithExtensionEmails("},{"lineNumber":533,"author":{"gitId":"-"},"content":" FeedbackSession session, List\u003cDeadlineExtension\u003e deadlineExtensions) {"},{"lineNumber":534,"author":{"gitId":"-"},"content":" Course course \u003d session.getCourse();"},{"lineNumber":535,"author":{"gitId":"-"},"content":""},{"lineNumber":536,"author":{"gitId":"-"},"content":" boolean isEmailNeededForStudents \u003d"},{"lineNumber":537,"author":{"gitId":"-"},"content":" !deadlineExtensions.isEmpty() \u0026\u0026 fsLogic.isFeedbackSessionForUserTypeToAnswer(session, false);"},{"lineNumber":538,"author":{"gitId":"-"},"content":" boolean isEmailNeededForInstructors \u003d"},{"lineNumber":539,"author":{"gitId":"-"},"content":" !deadlineExtensions.isEmpty() \u0026\u0026 fsLogic.isFeedbackSessionForUserTypeToAnswer(session, true);"},{"lineNumber":540,"author":{"gitId":"-"},"content":""},{"lineNumber":541,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students \u003d new ArrayList\u003c\u003e();"},{"lineNumber":542,"author":{"gitId":"-"},"content":" if (isEmailNeededForStudents) {"},{"lineNumber":543,"author":{"gitId":"-"},"content":" for (DeadlineExtension de : deadlineExtensions) {"},{"lineNumber":544,"author":{"gitId":"-"},"content":" Student student \u003d usersLogic.getStudentForEmail(course.getId(), de.getUser().getEmail());"},{"lineNumber":545,"author":{"gitId":"-"},"content":" if (student !\u003d null) {"},{"lineNumber":546,"author":{"gitId":"-"},"content":" students.add(student);"},{"lineNumber":547,"author":{"gitId":"-"},"content":" }"},{"lineNumber":548,"author":{"gitId":"-"},"content":" }"},{"lineNumber":549,"author":{"gitId":"-"},"content":" }"},{"lineNumber":550,"author":{"gitId":"-"},"content":""},{"lineNumber":551,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":552,"author":{"gitId":"-"},"content":" if (isEmailNeededForInstructors) {"},{"lineNumber":553,"author":{"gitId":"-"},"content":" for (DeadlineExtension de : deadlineExtensions) {"},{"lineNumber":554,"author":{"gitId":"-"},"content":" Instructor instructor \u003d"},{"lineNumber":555,"author":{"gitId":"-"},"content":" usersLogic.getInstructorForEmail(course.getId(), de.getUser().getEmail());"},{"lineNumber":556,"author":{"gitId":"-"},"content":" if (instructor !\u003d null) {"},{"lineNumber":557,"author":{"gitId":"-"},"content":" instructors.add(instructor);"},{"lineNumber":558,"author":{"gitId":"-"},"content":" }"},{"lineNumber":559,"author":{"gitId":"-"},"content":" }"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":""},{"lineNumber":562,"author":{"gitId":"-"},"content":" String template \u003d EmailTemplates.USER_FEEDBACK_SESSION.replace(\"${status}\", FEEDBACK_STATUS_SESSION_CLOSING);"},{"lineNumber":563,"author":{"gitId":"-"},"content":" EmailType type \u003d EmailType.FEEDBACK_CLOSING;"},{"lineNumber":564,"author":{"gitId":"-"},"content":" String feedbackAction \u003d FEEDBACK_ACTION_SUBMIT_EDIT_OR_VIEW;"},{"lineNumber":565,"author":{"gitId":"-"},"content":" List\u003cEmailWrapper\u003e emails \u003d new ArrayList\u003c\u003e();"},{"lineNumber":566,"author":{"gitId":"-"},"content":" for (Student student : students) {"},{"lineNumber":567,"author":{"gitId":"-"},"content":" emails.addAll(generateFeedbackSessionEmailBases(course, session, Collections.singletonList(student),"},{"lineNumber":568,"author":{"gitId":"-"},"content":" Collections.emptyList(), Collections.emptyList(), template, type, feedbackAction));"},{"lineNumber":569,"author":{"gitId":"-"},"content":" }"},{"lineNumber":570,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":571,"author":{"gitId":"-"},"content":" emails.addAll(generateFeedbackSessionEmailBases(course, session, Collections.emptyList(),"},{"lineNumber":572,"author":{"gitId":"-"},"content":" Collections.singletonList(instructor), Collections.emptyList(), template, type, feedbackAction));"},{"lineNumber":573,"author":{"gitId":"-"},"content":" }"},{"lineNumber":574,"author":{"gitId":"-"},"content":" return emails;"},{"lineNumber":575,"author":{"gitId":"-"},"content":" }"},{"lineNumber":576,"author":{"gitId":"-"},"content":""},{"lineNumber":577,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":578,"author":{"gitId":"-"},"content":" * Generates the feedback session published emails for the given {@code session}."},{"lineNumber":579,"author":{"gitId":"-"},"content":" */"},{"lineNumber":580,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateFeedbackSessionPublishedEmails(FeedbackSession session) {"},{"lineNumber":581,"author":{"gitId":"-"},"content":" return generateFeedbackSessionPublishedOrUnpublishedEmails(session, EmailType.FEEDBACK_PUBLISHED);"},{"lineNumber":582,"author":{"gitId":"-"},"content":" }"},{"lineNumber":583,"author":{"gitId":"-"},"content":""},{"lineNumber":584,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":585,"author":{"gitId":"-"},"content":" * Generates the feedback session published emails for the given {@code students} and"},{"lineNumber":586,"author":{"gitId":"-"},"content":" * {@code instructors} in {@code session}."},{"lineNumber":587,"author":{"gitId":"-"},"content":" */"},{"lineNumber":588,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateFeedbackSessionPublishedEmails(FeedbackSession session,"},{"lineNumber":589,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students, List\u003cInstructor\u003e instructors,"},{"lineNumber":590,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsToNotify) {"},{"lineNumber":591,"author":{"gitId":"-"},"content":" return generateFeedbackSessionPublishedOrUnpublishedEmails("},{"lineNumber":592,"author":{"gitId":"-"},"content":" session, students, instructors, instructorsToNotify, EmailType.FEEDBACK_PUBLISHED);"},{"lineNumber":593,"author":{"gitId":"-"},"content":" }"},{"lineNumber":594,"author":{"gitId":"-"},"content":""},{"lineNumber":595,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":596,"author":{"gitId":"-"},"content":" * Generates the feedback session unpublished emails for the given {@code session}."},{"lineNumber":597,"author":{"gitId":"-"},"content":" */"},{"lineNumber":598,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateFeedbackSessionUnpublishedEmails(FeedbackSession session) {"},{"lineNumber":599,"author":{"gitId":"-"},"content":" return generateFeedbackSessionPublishedOrUnpublishedEmails(session, EmailType.FEEDBACK_UNPUBLISHED);"},{"lineNumber":600,"author":{"gitId":"-"},"content":" }"},{"lineNumber":601,"author":{"gitId":"-"},"content":""},{"lineNumber":602,"author":{"gitId":"-"},"content":" private List\u003cEmailWrapper\u003e generateFeedbackSessionPublishedOrUnpublishedEmails("},{"lineNumber":603,"author":{"gitId":"-"},"content":" FeedbackSession session, EmailType emailType) {"},{"lineNumber":604,"author":{"gitId":"-"},"content":" boolean isEmailNeededForStudents \u003d fsLogic.isFeedbackSessionViewableToUserType(session, false);"},{"lineNumber":605,"author":{"gitId":"-"},"content":" boolean isEmailNeededForInstructors \u003d fsLogic.isFeedbackSessionViewableToUserType(session, true);"},{"lineNumber":606,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsToNotify \u003d isEmailNeededForStudents"},{"lineNumber":607,"author":{"gitId":"-"},"content":" ? usersLogic.getCoOwnersForCourse(session.getCourse().getId())"},{"lineNumber":608,"author":{"gitId":"-"},"content":" : new ArrayList\u003c\u003e();"},{"lineNumber":609,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students \u003d isEmailNeededForStudents"},{"lineNumber":610,"author":{"gitId":"-"},"content":" ? usersLogic.getStudentsForCourse(session.getCourse().getId())"},{"lineNumber":611,"author":{"gitId":"-"},"content":" : new ArrayList\u003c\u003e();"},{"lineNumber":612,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d isEmailNeededForInstructors"},{"lineNumber":613,"author":{"gitId":"-"},"content":" ? usersLogic.getInstructorsForCourse(session.getCourse().getId())"},{"lineNumber":614,"author":{"gitId":"-"},"content":" : new ArrayList\u003c\u003e();"},{"lineNumber":615,"author":{"gitId":"-"},"content":""},{"lineNumber":616,"author":{"gitId":"-"},"content":" return generateFeedbackSessionPublishedOrUnpublishedEmails("},{"lineNumber":617,"author":{"gitId":"-"},"content":" session, students, instructors, instructorsToNotify, emailType);"},{"lineNumber":618,"author":{"gitId":"-"},"content":" }"},{"lineNumber":619,"author":{"gitId":"-"},"content":""},{"lineNumber":620,"author":{"gitId":"-"},"content":" private List\u003cEmailWrapper\u003e generateFeedbackSessionPublishedOrUnpublishedEmails("},{"lineNumber":621,"author":{"gitId":"-"},"content":" FeedbackSession session, List\u003cStudent\u003e students,"},{"lineNumber":622,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors, List\u003cInstructor\u003e instructorsToNotify, EmailType emailType) {"},{"lineNumber":623,"author":{"gitId":"-"},"content":" Course course \u003d session.getCourse();"},{"lineNumber":624,"author":{"gitId":"-"},"content":" String template;"},{"lineNumber":625,"author":{"gitId":"-"},"content":" String action;"},{"lineNumber":626,"author":{"gitId":"-"},"content":" if (emailType \u003d\u003d EmailType.FEEDBACK_PUBLISHED) {"},{"lineNumber":627,"author":{"gitId":"-"},"content":" template \u003d EmailTemplates.USER_FEEDBACK_SESSION_PUBLISHED;"},{"lineNumber":628,"author":{"gitId":"-"},"content":" action \u003d FEEDBACK_ACTION_VIEW;"},{"lineNumber":629,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":630,"author":{"gitId":"-"},"content":" template \u003d EmailTemplates.USER_FEEDBACK_SESSION_UNPUBLISHED;"},{"lineNumber":631,"author":{"gitId":"-"},"content":" action \u003d FEEDBACK_ACTION_SUBMIT_EDIT_OR_VIEW;"},{"lineNumber":632,"author":{"gitId":"-"},"content":" }"},{"lineNumber":633,"author":{"gitId":"-"},"content":""},{"lineNumber":634,"author":{"gitId":"-"},"content":" return generateFeedbackSessionEmailBases(course, session, students, instructors, instructorsToNotify, template,"},{"lineNumber":635,"author":{"gitId":"-"},"content":" emailType, action);"},{"lineNumber":636,"author":{"gitId":"-"},"content":" }"},{"lineNumber":637,"author":{"gitId":"-"},"content":""},{"lineNumber":638,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":639,"author":{"gitId":"-"},"content":" * Generates deadline extension granted emails."},{"lineNumber":640,"author":{"gitId":"-"},"content":" */"},{"lineNumber":641,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateDeadlineGrantedEmails(Course course,"},{"lineNumber":642,"author":{"gitId":"-"},"content":" FeedbackSession session, Map\u003cString, Instant\u003e createdDeadlines, boolean areInstructors) {"},{"lineNumber":643,"author":{"gitId":"-"},"content":" return createdDeadlines.entrySet()"},{"lineNumber":644,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":645,"author":{"gitId":"-"},"content":" .map(entry -\u003e"},{"lineNumber":646,"author":{"gitId":"-"},"content":" generateDeadlineExtensionEmail(course, session,"},{"lineNumber":647,"author":{"gitId":"-"},"content":" session.getEndTime(), entry.getValue(), EmailType.DEADLINE_EXTENSION_GRANTED,"},{"lineNumber":648,"author":{"gitId":"-"},"content":" entry.getKey(), areInstructors))"},{"lineNumber":649,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":650,"author":{"gitId":"-"},"content":" }"},{"lineNumber":651,"author":{"gitId":"-"},"content":""},{"lineNumber":652,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":653,"author":{"gitId":"-"},"content":" * Generates deadline extension updated emails."},{"lineNumber":654,"author":{"gitId":"-"},"content":" */"},{"lineNumber":655,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateDeadlineUpdatedEmails(Course course, FeedbackSession session,"},{"lineNumber":656,"author":{"gitId":"-"},"content":" Map\u003cString, Instant\u003e updatedDeadlines, Map\u003cString, Instant\u003e oldDeadlines, boolean areInstructors) {"},{"lineNumber":657,"author":{"gitId":"-"},"content":" return updatedDeadlines.entrySet()"},{"lineNumber":658,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":659,"author":{"gitId":"-"},"content":" .map(entry -\u003e"},{"lineNumber":660,"author":{"gitId":"-"},"content":" generateDeadlineExtensionEmail(course, session,"},{"lineNumber":661,"author":{"gitId":"-"},"content":" oldDeadlines.get(entry.getKey()), entry.getValue(), EmailType.DEADLINE_EXTENSION_UPDATED,"},{"lineNumber":662,"author":{"gitId":"-"},"content":" entry.getKey(), areInstructors))"},{"lineNumber":663,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":664,"author":{"gitId":"-"},"content":" }"},{"lineNumber":665,"author":{"gitId":"-"},"content":""},{"lineNumber":666,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":667,"author":{"gitId":"-"},"content":" * Generates deadline extension revoked emails."},{"lineNumber":668,"author":{"gitId":"-"},"content":" */"},{"lineNumber":669,"author":{"gitId":"-"},"content":" public List\u003cEmailWrapper\u003e generateDeadlineRevokedEmails(Course course,"},{"lineNumber":670,"author":{"gitId":"-"},"content":" FeedbackSession session, Map\u003cString, Instant\u003e revokedDeadlines, boolean areInstructors) {"},{"lineNumber":671,"author":{"gitId":"-"},"content":" return revokedDeadlines.entrySet()"},{"lineNumber":672,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":673,"author":{"gitId":"-"},"content":" .map(entry -\u003e"},{"lineNumber":674,"author":{"gitId":"-"},"content":" generateDeadlineExtensionEmail(course, session,"},{"lineNumber":675,"author":{"gitId":"-"},"content":" entry.getValue(), session.getEndTime(), EmailType.DEADLINE_EXTENSION_REVOKED,"},{"lineNumber":676,"author":{"gitId":"-"},"content":" entry.getKey(), areInstructors))"},{"lineNumber":677,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":678,"author":{"gitId":"-"},"content":" }"},{"lineNumber":679,"author":{"gitId":"-"},"content":""},{"lineNumber":680,"author":{"gitId":"-"},"content":" private EmailWrapper generateDeadlineExtensionEmail("},{"lineNumber":681,"author":{"gitId":"-"},"content":" Course course, FeedbackSession session, Instant oldEndTime, Instant endTime,"},{"lineNumber":682,"author":{"gitId":"-"},"content":" EmailType emailType, String userEmail, boolean isInstructor) {"},{"lineNumber":683,"author":{"gitId":"-"},"content":" String status;"},{"lineNumber":684,"author":{"gitId":"-"},"content":""},{"lineNumber":685,"author":{"gitId":"-"},"content":" switch (emailType) {"},{"lineNumber":686,"author":{"gitId":"-"},"content":" case DEADLINE_EXTENSION_GRANTED:"},{"lineNumber":687,"author":{"gitId":"-"},"content":" status \u003d \"You have been granted a deadline extension for the following feedback session.\";"},{"lineNumber":688,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":689,"author":{"gitId":"-"},"content":" case DEADLINE_EXTENSION_UPDATED:"},{"lineNumber":690,"author":{"gitId":"-"},"content":" status \u003d \"Your deadline for the following feedback session has been updated.\";"},{"lineNumber":691,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":692,"author":{"gitId":"-"},"content":" case DEADLINE_EXTENSION_REVOKED:"},{"lineNumber":693,"author":{"gitId":"-"},"content":" status \u003d \"Your deadline extension for the following feedback session has been revoked.\";"},{"lineNumber":694,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":695,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":696,"author":{"gitId":"-"},"content":" throw new AssertionError(\"Invalid email type: \" + emailType);"},{"lineNumber":697,"author":{"gitId":"-"},"content":" }"},{"lineNumber":698,"author":{"gitId":"-"},"content":""},{"lineNumber":699,"author":{"gitId":"-"},"content":" String additionalContactInformation \u003d getAdditionalContactInformationFragment(course, isInstructor);"},{"lineNumber":700,"author":{"gitId":"-"},"content":" Instant oldEndTimeFormatted \u003d"},{"lineNumber":701,"author":{"gitId":"-"},"content":" TimeHelper.getMidnightAdjustedInstantBasedOnZone(oldEndTime, session.getCourse().getTimeZone(), false);"},{"lineNumber":702,"author":{"gitId":"-"},"content":" Instant newEndTimeFormatted \u003d"},{"lineNumber":703,"author":{"gitId":"-"},"content":" TimeHelper.getMidnightAdjustedInstantBasedOnZone(endTime, session.getCourse().getTimeZone(), false);"},{"lineNumber":704,"author":{"gitId":"-"},"content":" String template \u003d EmailTemplates.USER_DEADLINE_EXTENSION"},{"lineNumber":705,"author":{"gitId":"-"},"content":" .replace(\"${status}\", status)"},{"lineNumber":706,"author":{"gitId":"-"},"content":" .replace(\"${oldEndTime}\", SanitizationHelper.sanitizeForHtml("},{"lineNumber":707,"author":{"gitId":"-"},"content":" TimeHelper.formatInstant(oldEndTimeFormatted,"},{"lineNumber":708,"author":{"gitId":"-"},"content":" session.getCourse().getTimeZone(), DATETIME_DISPLAY_FORMAT)))"},{"lineNumber":709,"author":{"gitId":"-"},"content":" .replace(\"${newEndTime}\", SanitizationHelper.sanitizeForHtml("},{"lineNumber":710,"author":{"gitId":"-"},"content":" TimeHelper.formatInstant(newEndTimeFormatted,"},{"lineNumber":711,"author":{"gitId":"-"},"content":" session.getCourse().getTimeZone(), DATETIME_DISPLAY_FORMAT)));"},{"lineNumber":712,"author":{"gitId":"-"},"content":" String feedbackAction \u003d FEEDBACK_ACTION_SUBMIT_EDIT_OR_VIEW;"},{"lineNumber":713,"author":{"gitId":"-"},"content":""},{"lineNumber":714,"author":{"gitId":"-"},"content":" if (isInstructor) {"},{"lineNumber":715,"author":{"gitId":"-"},"content":" Instructor instructor \u003d usersLogic.getInstructorForEmail(course.getId(), userEmail);"},{"lineNumber":716,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":717,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":718,"author":{"gitId":"-"},"content":" }"},{"lineNumber":719,"author":{"gitId":"-"},"content":" return generateFeedbackSessionEmailBaseForInstructors("},{"lineNumber":720,"author":{"gitId":"-"},"content":" course, session, instructor, template, emailType, feedbackAction, additionalContactInformation);"},{"lineNumber":721,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":722,"author":{"gitId":"-"},"content":" Student student \u003d usersLogic.getStudentForEmail(course.getId(), userEmail);"},{"lineNumber":723,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":724,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":725,"author":{"gitId":"-"},"content":" }"},{"lineNumber":726,"author":{"gitId":"-"},"content":" return generateFeedbackSessionEmailBaseForStudents("},{"lineNumber":727,"author":{"gitId":"-"},"content":" course, session, student, template, emailType, feedbackAction, additionalContactInformation);"},{"lineNumber":728,"author":{"gitId":"-"},"content":" }"},{"lineNumber":729,"author":{"gitId":"-"},"content":" }"},{"lineNumber":730,"author":{"gitId":"-"},"content":""},{"lineNumber":731,"author":{"gitId":"-"},"content":" private List\u003cEmailWrapper\u003e generateFeedbackSessionEmailBases("},{"lineNumber":732,"author":{"gitId":"-"},"content":" Course course, FeedbackSession session, List\u003cStudent\u003e students,"},{"lineNumber":733,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors, List\u003cInstructor\u003e instructorsToNotify, String template,"},{"lineNumber":734,"author":{"gitId":"-"},"content":" EmailType type, String feedbackAction) {"},{"lineNumber":735,"author":{"gitId":"-"},"content":" StringBuilder studentAdditionalContactBuilder \u003d new StringBuilder();"},{"lineNumber":736,"author":{"gitId":"-"},"content":" StringBuilder instructorAdditionalContactBuilder \u003d new StringBuilder();"},{"lineNumber":737,"author":{"gitId":"-"},"content":" studentAdditionalContactBuilder.append(getAdditionalContactInformationFragment(course, false));"},{"lineNumber":738,"author":{"gitId":"-"},"content":" instructorAdditionalContactBuilder.append(getAdditionalContactInformationFragment(course, true));"},{"lineNumber":739,"author":{"gitId":"-"},"content":""},{"lineNumber":740,"author":{"gitId":"-"},"content":" List\u003cEmailWrapper\u003e emails \u003d new ArrayList\u003c\u003e();"},{"lineNumber":741,"author":{"gitId":"-"},"content":" for (Student student : students) {"},{"lineNumber":742,"author":{"gitId":"-"},"content":" emails.add(generateFeedbackSessionEmailBaseForStudents(course, session, student,"},{"lineNumber":743,"author":{"gitId":"-"},"content":" template, type, feedbackAction, studentAdditionalContactBuilder.toString()));"},{"lineNumber":744,"author":{"gitId":"-"},"content":" }"},{"lineNumber":745,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":746,"author":{"gitId":"-"},"content":" emails.add(generateFeedbackSessionEmailBaseForInstructors(course, session, instructor,"},{"lineNumber":747,"author":{"gitId":"-"},"content":" template, type, feedbackAction, instructorAdditionalContactBuilder.toString()));"},{"lineNumber":748,"author":{"gitId":"-"},"content":" }"},{"lineNumber":749,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructorsToNotify) {"},{"lineNumber":750,"author":{"gitId":"-"},"content":" emails.add(generateFeedbackSessionEmailBaseForNotifiedInstructors(course, session, instructor,"},{"lineNumber":751,"author":{"gitId":"-"},"content":" template, type, feedbackAction, studentAdditionalContactBuilder.toString()));"},{"lineNumber":752,"author":{"gitId":"-"},"content":" }"},{"lineNumber":753,"author":{"gitId":"-"},"content":" return emails;"},{"lineNumber":754,"author":{"gitId":"-"},"content":" }"},{"lineNumber":755,"author":{"gitId":"-"},"content":""},{"lineNumber":756,"author":{"gitId":"-"},"content":" private EmailWrapper generateFeedbackSessionEmailBaseForStudents("},{"lineNumber":757,"author":{"gitId":"-"},"content":" Course course, FeedbackSession session, Student student, String template,"},{"lineNumber":758,"author":{"gitId":"-"},"content":" EmailType type, String feedbackAction, String additionalContactInformation) {"},{"lineNumber":759,"author":{"gitId":"-"},"content":" String submitUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSION_SUBMISSION_PAGE)"},{"lineNumber":760,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":761,"author":{"gitId":"-"},"content":" .withSessionName(session.getName())"},{"lineNumber":762,"author":{"gitId":"-"},"content":" .withRegistrationKey(student.getRegKey())"},{"lineNumber":763,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":764,"author":{"gitId":"-"},"content":""},{"lineNumber":765,"author":{"gitId":"-"},"content":" String reportUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSION_RESULTS_PAGE)"},{"lineNumber":766,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":767,"author":{"gitId":"-"},"content":" .withSessionName(session.getName())"},{"lineNumber":768,"author":{"gitId":"-"},"content":" .withRegistrationKey(student.getRegKey())"},{"lineNumber":769,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":770,"author":{"gitId":"-"},"content":""},{"lineNumber":771,"author":{"gitId":"-"},"content":" Instant deadline \u003d deLogic.getDeadlineForUser(session, student);"},{"lineNumber":772,"author":{"gitId":"-"},"content":""},{"lineNumber":773,"author":{"gitId":"-"},"content":" Instant endTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":774,"author":{"gitId":"-"},"content":" deadline, session.getCourse().getTimeZone(), false);"},{"lineNumber":775,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate(template,"},{"lineNumber":776,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(student.getName()),"},{"lineNumber":777,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":778,"author":{"gitId":"-"},"content":" \"${courseId}\", SanitizationHelper.sanitizeForHtml(course.getId()),"},{"lineNumber":779,"author":{"gitId":"-"},"content":" \"${feedbackSessionName}\", SanitizationHelper.sanitizeForHtml(session.getName()),"},{"lineNumber":780,"author":{"gitId":"-"},"content":" \"${deadline}\", SanitizationHelper.sanitizeForHtml("},{"lineNumber":781,"author":{"gitId":"-"},"content":" TimeHelper.formatInstant(endTime, session.getCourse().getTimeZone(), DATETIME_DISPLAY_FORMAT))"},{"lineNumber":782,"author":{"gitId":"-"},"content":" + (session.getEndTime().equals(deadline) ? \"\" : \" (after extension)\"),"},{"lineNumber":783,"author":{"gitId":"-"},"content":" \"${instructorPreamble}\", \"\","},{"lineNumber":784,"author":{"gitId":"-"},"content":" \"${sessionInstructions}\", session.getInstructionsString(),"},{"lineNumber":785,"author":{"gitId":"-"},"content":" \"${submitUrl}\", submitUrl,"},{"lineNumber":786,"author":{"gitId":"-"},"content":" \"${reportUrl}\", reportUrl,"},{"lineNumber":787,"author":{"gitId":"-"},"content":" \"${feedbackAction}\", feedbackAction,"},{"lineNumber":788,"author":{"gitId":"-"},"content":" \"${additionalContactInformation}\", additionalContactInformation);"},{"lineNumber":789,"author":{"gitId":"-"},"content":""},{"lineNumber":790,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(student.getEmail());"},{"lineNumber":791,"author":{"gitId":"-"},"content":" email.setType(type);"},{"lineNumber":792,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), session.getName());"},{"lineNumber":793,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":794,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":795,"author":{"gitId":"-"},"content":" }"},{"lineNumber":796,"author":{"gitId":"-"},"content":""},{"lineNumber":797,"author":{"gitId":"-"},"content":" private EmailWrapper generateFeedbackSessionEmailBaseForInstructors("},{"lineNumber":798,"author":{"gitId":"-"},"content":" Course course, FeedbackSession session, Instructor instructor,"},{"lineNumber":799,"author":{"gitId":"-"},"content":" String template, EmailType type, String feedbackAction, String additionalContactInformation) {"},{"lineNumber":800,"author":{"gitId":"-"},"content":" String submitUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSION_SUBMISSION_PAGE)"},{"lineNumber":801,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":802,"author":{"gitId":"-"},"content":" .withSessionName(session.getName())"},{"lineNumber":803,"author":{"gitId":"-"},"content":" .withRegistrationKey(instructor.getRegKey())"},{"lineNumber":804,"author":{"gitId":"-"},"content":" .withEntityType(Const.EntityType.INSTRUCTOR)"},{"lineNumber":805,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":806,"author":{"gitId":"-"},"content":""},{"lineNumber":807,"author":{"gitId":"-"},"content":" String reportUrl \u003d Config.getFrontEndAppUrl(Const.WebPageURIs.SESSION_RESULTS_PAGE)"},{"lineNumber":808,"author":{"gitId":"-"},"content":" .withCourseId(course.getId())"},{"lineNumber":809,"author":{"gitId":"-"},"content":" .withSessionName(session.getName())"},{"lineNumber":810,"author":{"gitId":"-"},"content":" .withRegistrationKey(instructor.getRegKey())"},{"lineNumber":811,"author":{"gitId":"-"},"content":" .withEntityType(Const.EntityType.INSTRUCTOR)"},{"lineNumber":812,"author":{"gitId":"-"},"content":" .toAbsoluteString();"},{"lineNumber":813,"author":{"gitId":"-"},"content":""},{"lineNumber":814,"author":{"gitId":"-"},"content":" Instant deadline \u003d deLogic.getDeadlineForUser(session, instructor);"},{"lineNumber":815,"author":{"gitId":"-"},"content":""},{"lineNumber":816,"author":{"gitId":"-"},"content":" Instant endTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":817,"author":{"gitId":"-"},"content":" deadline, session.getCourse().getTimeZone(), false);"},{"lineNumber":818,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate(template,"},{"lineNumber":819,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(instructor.getName()),"},{"lineNumber":820,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":821,"author":{"gitId":"-"},"content":" \"${courseId}\", SanitizationHelper.sanitizeForHtml(course.getId()),"},{"lineNumber":822,"author":{"gitId":"-"},"content":" \"${feedbackSessionName}\", SanitizationHelper.sanitizeForHtml(session.getName()),"},{"lineNumber":823,"author":{"gitId":"-"},"content":" \"${deadline}\", SanitizationHelper.sanitizeForHtml("},{"lineNumber":824,"author":{"gitId":"-"},"content":" TimeHelper.formatInstant(endTime, session.getCourse().getTimeZone(), DATETIME_DISPLAY_FORMAT))"},{"lineNumber":825,"author":{"gitId":"-"},"content":" + (session.getEndTime().equals(deadline) ? \"\" : \" (after extension)\"),"},{"lineNumber":826,"author":{"gitId":"-"},"content":" \"${instructorPreamble}\", \"\","},{"lineNumber":827,"author":{"gitId":"-"},"content":" \"${sessionInstructions}\", session.getInstructionsString(),"},{"lineNumber":828,"author":{"gitId":"-"},"content":" \"${submitUrl}\", submitUrl,"},{"lineNumber":829,"author":{"gitId":"-"},"content":" \"${reportUrl}\", reportUrl,"},{"lineNumber":830,"author":{"gitId":"-"},"content":" \"${feedbackAction}\", feedbackAction,"},{"lineNumber":831,"author":{"gitId":"-"},"content":" \"${additionalContactInformation}\", additionalContactInformation);"},{"lineNumber":832,"author":{"gitId":"-"},"content":""},{"lineNumber":833,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(instructor.getEmail());"},{"lineNumber":834,"author":{"gitId":"-"},"content":" email.setType(type);"},{"lineNumber":835,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), session.getName());"},{"lineNumber":836,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":837,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":838,"author":{"gitId":"-"},"content":" }"},{"lineNumber":839,"author":{"gitId":"-"},"content":""},{"lineNumber":840,"author":{"gitId":"-"},"content":" private EmailWrapper generateFeedbackSessionEmailBaseForNotifiedInstructors("},{"lineNumber":841,"author":{"gitId":"-"},"content":" Course course, FeedbackSession session, Instructor instructor,"},{"lineNumber":842,"author":{"gitId":"-"},"content":" String template, EmailType type, String feedbackAction, String additionalContactInformation) {"},{"lineNumber":843,"author":{"gitId":"-"},"content":""},{"lineNumber":844,"author":{"gitId":"-"},"content":" Instant endTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":845,"author":{"gitId":"-"},"content":" session.getEndTime(), session.getCourse().getTimeZone(), false);"},{"lineNumber":846,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate(template,"},{"lineNumber":847,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(instructor.getName()),"},{"lineNumber":848,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":849,"author":{"gitId":"-"},"content":" \"${courseId}\", SanitizationHelper.sanitizeForHtml(course.getId()),"},{"lineNumber":850,"author":{"gitId":"-"},"content":" \"${feedbackSessionName}\", SanitizationHelper.sanitizeForHtml(session.getName()),"},{"lineNumber":851,"author":{"gitId":"-"},"content":" \"${deadline}\", SanitizationHelper.sanitizeForHtml("},{"lineNumber":852,"author":{"gitId":"-"},"content":" TimeHelper.formatInstant(endTime, session.getCourse().getTimeZone(), DATETIME_DISPLAY_FORMAT)),"},{"lineNumber":853,"author":{"gitId":"-"},"content":" \"${instructorPreamble}\", fillUpInstructorPreamble(course),"},{"lineNumber":854,"author":{"gitId":"-"},"content":" \"${sessionInstructions}\", session.getInstructionsString(),"},{"lineNumber":855,"author":{"gitId":"-"},"content":" \"${submitUrl}\", \"{in the actual email sent to the students, this will be the unique link}\","},{"lineNumber":856,"author":{"gitId":"-"},"content":" \"${reportUrl}\", \"{in the actual email sent to the students, this will be the unique link}\","},{"lineNumber":857,"author":{"gitId":"-"},"content":" \"${feedbackAction}\", feedbackAction,"},{"lineNumber":858,"author":{"gitId":"-"},"content":" \"${additionalContactInformation}\", additionalContactInformation);"},{"lineNumber":859,"author":{"gitId":"-"},"content":""},{"lineNumber":860,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(instructor.getEmail());"},{"lineNumber":861,"author":{"gitId":"-"},"content":" email.setType(type);"},{"lineNumber":862,"author":{"gitId":"-"},"content":" email.setIsCopy(true);"},{"lineNumber":863,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), session.getName());"},{"lineNumber":864,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":865,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":866,"author":{"gitId":"-"},"content":" }"},{"lineNumber":867,"author":{"gitId":"-"},"content":""},{"lineNumber":868,"author":{"gitId":"-"},"content":" private boolean isYetToJoinCourse(Student student) {"},{"lineNumber":869,"author":{"gitId":"domoberzin"},"content":" return student.getAccount() \u003d\u003d null || student.getAccount().getGoogleId().isEmpty();"},{"lineNumber":870,"author":{"gitId":"-"},"content":" }"},{"lineNumber":871,"author":{"gitId":"-"},"content":""},{"lineNumber":872,"author":{"gitId":"-"},"content":" private boolean isYetToJoinCourse(Instructor instructor) {"},{"lineNumber":873,"author":{"gitId":"domoberzin"},"content":" return instructor.getAccount() \u003d\u003d null || instructor.getAccount().getGoogleId().isEmpty();"},{"lineNumber":874,"author":{"gitId":"-"},"content":" }"},{"lineNumber":875,"author":{"gitId":"-"},"content":""},{"lineNumber":876,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":877,"author":{"gitId":"-"},"content":" * Generates the new instructor account join email for the given {@code instructor}."},{"lineNumber":878,"author":{"gitId":"-"},"content":" */"},{"lineNumber":879,"author":{"gitId":"-"},"content":" public EmailWrapper generateNewInstructorAccountJoinEmail("},{"lineNumber":880,"author":{"gitId":"-"},"content":" String instructorEmail, String instructorName, String joinUrl) {"},{"lineNumber":881,"author":{"gitId":"-"},"content":""},{"lineNumber":882,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate(EmailTemplates.NEW_INSTRUCTOR_ACCOUNT_WELCOME,"},{"lineNumber":883,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(instructorName),"},{"lineNumber":884,"author":{"gitId":"-"},"content":" \"${joinUrl}\", joinUrl);"},{"lineNumber":885,"author":{"gitId":"-"},"content":""},{"lineNumber":886,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(instructorEmail);"},{"lineNumber":887,"author":{"gitId":"-"},"content":" email.setBcc(Config.SUPPORT_EMAIL);"},{"lineNumber":888,"author":{"gitId":"-"},"content":" email.setType(EmailType.NEW_INSTRUCTOR_ACCOUNT);"},{"lineNumber":889,"author":{"gitId":"-"},"content":" email.setSubjectFromType(SanitizationHelper.sanitizeForHtml(instructorName));"},{"lineNumber":890,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":891,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":892,"author":{"gitId":"-"},"content":" }"},{"lineNumber":893,"author":{"gitId":"-"},"content":""},{"lineNumber":894,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":895,"author":{"gitId":"-"},"content":" * Generates the course join email for the given {@code student} in {@code course}."},{"lineNumber":896,"author":{"gitId":"-"},"content":" */"},{"lineNumber":897,"author":{"gitId":"-"},"content":" public EmailWrapper generateStudentCourseJoinEmail(Course course, Student student) {"},{"lineNumber":898,"author":{"gitId":"-"},"content":""},{"lineNumber":899,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate("},{"lineNumber":900,"author":{"gitId":"-"},"content":" fillUpStudentJoinFragment(student),"},{"lineNumber":901,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(student.getName()),"},{"lineNumber":902,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":903,"author":{"gitId":"-"},"content":" \"${coOwnersEmails}\", generateCoOwnersEmailsLine(course.getId()),"},{"lineNumber":904,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL);"},{"lineNumber":905,"author":{"gitId":"-"},"content":""},{"lineNumber":906,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(student.getEmail());"},{"lineNumber":907,"author":{"gitId":"-"},"content":" email.setType(EmailType.STUDENT_COURSE_JOIN);"},{"lineNumber":908,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), course.getId());"},{"lineNumber":909,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":910,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":911,"author":{"gitId":"-"},"content":" }"},{"lineNumber":912,"author":{"gitId":"-"},"content":""},{"lineNumber":913,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":914,"author":{"gitId":"-"},"content":" * Generates the course re-join email for the given {@code student} in {@code course}."},{"lineNumber":915,"author":{"gitId":"-"},"content":" */"},{"lineNumber":916,"author":{"gitId":"-"},"content":" public EmailWrapper generateStudentCourseRejoinEmailAfterGoogleIdReset("},{"lineNumber":917,"author":{"gitId":"-"},"content":" Course course, Student student) {"},{"lineNumber":918,"author":{"gitId":"-"},"content":""},{"lineNumber":919,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate("},{"lineNumber":920,"author":{"gitId":"-"},"content":" fillUpStudentRejoinAfterGoogleIdResetFragment(student),"},{"lineNumber":921,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(student.getName()),"},{"lineNumber":922,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":923,"author":{"gitId":"-"},"content":" \"${coOwnersEmails}\", generateCoOwnersEmailsLine(course.getId()),"},{"lineNumber":924,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL);"},{"lineNumber":925,"author":{"gitId":"-"},"content":""},{"lineNumber":926,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(student.getEmail());"},{"lineNumber":927,"author":{"gitId":"-"},"content":" email.setType(EmailType.STUDENT_COURSE_REJOIN_AFTER_GOOGLE_ID_RESET);"},{"lineNumber":928,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), course.getId());"},{"lineNumber":929,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":930,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":931,"author":{"gitId":"-"},"content":" }"},{"lineNumber":932,"author":{"gitId":"-"},"content":""},{"lineNumber":933,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":934,"author":{"gitId":"-"},"content":" * Generates the course join email for the given {@code instructor} in {@code course}."},{"lineNumber":935,"author":{"gitId":"-"},"content":" * Also specifies contact information of {@code inviter}."},{"lineNumber":936,"author":{"gitId":"-"},"content":" */"},{"lineNumber":937,"author":{"gitId":"-"},"content":" public EmailWrapper generateInstructorCourseJoinEmail(Account inviter,"},{"lineNumber":938,"author":{"gitId":"-"},"content":" Instructor instructor, Course course) {"},{"lineNumber":939,"author":{"gitId":"-"},"content":""},{"lineNumber":940,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate("},{"lineNumber":941,"author":{"gitId":"-"},"content":" fillUpInstructorJoinFragment(instructor),"},{"lineNumber":942,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(instructor.getName()),"},{"lineNumber":943,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":944,"author":{"gitId":"-"},"content":" \"${inviterName}\", SanitizationHelper.sanitizeForHtml(inviter.getName()),"},{"lineNumber":945,"author":{"gitId":"-"},"content":" \"${inviterEmail}\", SanitizationHelper.sanitizeForHtml(inviter.getEmail()),"},{"lineNumber":946,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL);"},{"lineNumber":947,"author":{"gitId":"-"},"content":""},{"lineNumber":948,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(instructor.getEmail());"},{"lineNumber":949,"author":{"gitId":"-"},"content":" email.setType(EmailType.INSTRUCTOR_COURSE_JOIN);"},{"lineNumber":950,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), course.getId());"},{"lineNumber":951,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":952,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":953,"author":{"gitId":"-"},"content":" }"},{"lineNumber":954,"author":{"gitId":"-"},"content":""},{"lineNumber":955,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":956,"author":{"gitId":"-"},"content":" * Generates the course re-join email for the given {@code instructor} in {@code course}."},{"lineNumber":957,"author":{"gitId":"-"},"content":" */"},{"lineNumber":958,"author":{"gitId":"-"},"content":" public EmailWrapper generateInstructorCourseRejoinEmailAfterGoogleIdReset("},{"lineNumber":959,"author":{"gitId":"-"},"content":" Instructor instructor, Course course) {"},{"lineNumber":960,"author":{"gitId":"-"},"content":""},{"lineNumber":961,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate("},{"lineNumber":962,"author":{"gitId":"-"},"content":" fillUpInstructorRejoinAfterGoogleIdResetFragment(instructor),"},{"lineNumber":963,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(instructor.getName()),"},{"lineNumber":964,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":965,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL);"},{"lineNumber":966,"author":{"gitId":"-"},"content":""},{"lineNumber":967,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(instructor.getEmail());"},{"lineNumber":968,"author":{"gitId":"-"},"content":" email.setType(EmailType.INSTRUCTOR_COURSE_REJOIN_AFTER_GOOGLE_ID_RESET);"},{"lineNumber":969,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), course.getId());"},{"lineNumber":970,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":971,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":972,"author":{"gitId":"-"},"content":" }"},{"lineNumber":973,"author":{"gitId":"-"},"content":""},{"lineNumber":974,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":975,"author":{"gitId":"-"},"content":" * Generates the course registered email for the user with the given details in {@code course}."},{"lineNumber":976,"author":{"gitId":"-"},"content":" */"},{"lineNumber":977,"author":{"gitId":"-"},"content":" public EmailWrapper generateUserCourseRegisteredEmail("},{"lineNumber":978,"author":{"gitId":"-"},"content":" String name, String emailAddress, String googleId, boolean isInstructor, Course course) {"},{"lineNumber":979,"author":{"gitId":"-"},"content":" String emailBody \u003d Templates.populateTemplate(EmailTemplates.USER_COURSE_REGISTER,"},{"lineNumber":980,"author":{"gitId":"-"},"content":" \"${userName}\", SanitizationHelper.sanitizeForHtml(name),"},{"lineNumber":981,"author":{"gitId":"-"},"content":" \"${userType}\", isInstructor ? \"an instructor\" : \"a student\","},{"lineNumber":982,"author":{"gitId":"-"},"content":" \"${courseId}\", SanitizationHelper.sanitizeForHtml(course.getId()),"},{"lineNumber":983,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()),"},{"lineNumber":984,"author":{"gitId":"-"},"content":" \"${googleId}\", SanitizationHelper.sanitizeForHtml(googleId),"},{"lineNumber":985,"author":{"gitId":"-"},"content":" \"${appUrl}\", isInstructor"},{"lineNumber":986,"author":{"gitId":"-"},"content":" ? Config.getFrontEndAppUrl(Const.WebPageURIs.INSTRUCTOR_HOME_PAGE).toAbsoluteString()"},{"lineNumber":987,"author":{"gitId":"-"},"content":" : Config.getFrontEndAppUrl(Const.WebPageURIs.STUDENT_HOME_PAGE).toAbsoluteString(),"},{"lineNumber":988,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL);"},{"lineNumber":989,"author":{"gitId":"-"},"content":""},{"lineNumber":990,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(emailAddress);"},{"lineNumber":991,"author":{"gitId":"-"},"content":" email.setType(EmailType.USER_COURSE_REGISTER);"},{"lineNumber":992,"author":{"gitId":"-"},"content":" email.setSubjectFromType(course.getName(), course.getId());"},{"lineNumber":993,"author":{"gitId":"-"},"content":" email.setContent(emailBody);"},{"lineNumber":994,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":995,"author":{"gitId":"-"},"content":" }"},{"lineNumber":996,"author":{"gitId":"-"},"content":""},{"lineNumber":997,"author":{"gitId":"-"},"content":" private String fillUpStudentJoinFragment(Student student) {"},{"lineNumber":998,"author":{"gitId":"-"},"content":" String joinUrl \u003d Config.getFrontEndAppUrl(student.getRegistrationUrl()).toAbsoluteString();"},{"lineNumber":999,"author":{"gitId":"-"},"content":""},{"lineNumber":1000,"author":{"gitId":"-"},"content":" return Templates.populateTemplate(EmailTemplates.USER_COURSE_JOIN,"},{"lineNumber":1001,"author":{"gitId":"-"},"content":" \"${joinFragment}\", EmailTemplates.FRAGMENT_STUDENT_COURSE_JOIN,"},{"lineNumber":1002,"author":{"gitId":"-"},"content":" \"${joinUrl}\", joinUrl);"},{"lineNumber":1003,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1004,"author":{"gitId":"-"},"content":""},{"lineNumber":1005,"author":{"gitId":"-"},"content":" private String fillUpStudentRejoinAfterGoogleIdResetFragment(Student student) {"},{"lineNumber":1006,"author":{"gitId":"-"},"content":" String joinUrl \u003d Config.getFrontEndAppUrl(student.getRegistrationUrl()).toAbsoluteString();"},{"lineNumber":1007,"author":{"gitId":"-"},"content":""},{"lineNumber":1008,"author":{"gitId":"-"},"content":" return Templates.populateTemplate(EmailTemplates.USER_COURSE_JOIN,"},{"lineNumber":1009,"author":{"gitId":"-"},"content":" \"${joinFragment}\", EmailTemplates.FRAGMENT_STUDENT_COURSE_REJOIN_AFTER_GOOGLE_ID_RESET,"},{"lineNumber":1010,"author":{"gitId":"-"},"content":" \"${joinUrl}\", joinUrl,"},{"lineNumber":1011,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL);"},{"lineNumber":1012,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1013,"author":{"gitId":"-"},"content":""},{"lineNumber":1014,"author":{"gitId":"-"},"content":" private String getInstructorCourseJoinUrl(Instructor instructor) {"},{"lineNumber":1015,"author":{"gitId":"-"},"content":" return Config.getFrontEndAppUrl(instructor.getRegistrationUrl()).toAbsoluteString();"},{"lineNumber":1016,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1017,"author":{"gitId":"-"},"content":""},{"lineNumber":1018,"author":{"gitId":"-"},"content":" private String fillUpInstructorJoinFragment(Instructor instructor) {"},{"lineNumber":1019,"author":{"gitId":"-"},"content":" return Templates.populateTemplate(EmailTemplates.USER_COURSE_JOIN,"},{"lineNumber":1020,"author":{"gitId":"-"},"content":" \"${joinFragment}\", EmailTemplates.FRAGMENT_INSTRUCTOR_COURSE_JOIN,"},{"lineNumber":1021,"author":{"gitId":"-"},"content":" \"${joinUrl}\", getInstructorCourseJoinUrl(instructor));"},{"lineNumber":1022,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1023,"author":{"gitId":"-"},"content":""},{"lineNumber":1024,"author":{"gitId":"-"},"content":" private String fillUpInstructorRejoinAfterGoogleIdResetFragment(Instructor instructor) {"},{"lineNumber":1025,"author":{"gitId":"-"},"content":" String joinUrl \u003d Config.getFrontEndAppUrl(instructor.getRegistrationUrl()).toAbsoluteString();"},{"lineNumber":1026,"author":{"gitId":"-"},"content":""},{"lineNumber":1027,"author":{"gitId":"-"},"content":" return Templates.populateTemplate(EmailTemplates.USER_COURSE_JOIN,"},{"lineNumber":1028,"author":{"gitId":"-"},"content":" \"${joinFragment}\", EmailTemplates.FRAGMENT_INSTRUCTOR_COURSE_REJOIN_AFTER_GOOGLE_ID_RESET,"},{"lineNumber":1029,"author":{"gitId":"-"},"content":" \"${joinUrl}\", joinUrl,"},{"lineNumber":1030,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL);"},{"lineNumber":1031,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1032,"author":{"gitId":"-"},"content":""},{"lineNumber":1033,"author":{"gitId":"-"},"content":" private String fillUpInstructorPreamble(Course course) {"},{"lineNumber":1034,"author":{"gitId":"-"},"content":" return Templates.populateTemplate(EmailTemplates.FRAGMENT_INSTRUCTOR_COPY_PREAMBLE,"},{"lineNumber":1035,"author":{"gitId":"-"},"content":" \"${courseId}\", SanitizationHelper.sanitizeForHtml(course.getId()),"},{"lineNumber":1036,"author":{"gitId":"-"},"content":" \"${courseName}\", SanitizationHelper.sanitizeForHtml(course.getName()));"},{"lineNumber":1037,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1038,"author":{"gitId":"-"},"content":""},{"lineNumber":1039,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1040,"author":{"gitId":"-"},"content":" * Generates the logs compilation email for the given {@code logs}."},{"lineNumber":1041,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1042,"author":{"gitId":"-"},"content":" public EmailWrapper generateCompiledLogsEmail(List\u003cErrorLogEntry\u003e logs) {"},{"lineNumber":1043,"author":{"gitId":"-"},"content":" StringBuilder emailBody \u003d new StringBuilder();"},{"lineNumber":1044,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c logs.size(); i++) {"},{"lineNumber":1045,"author":{"gitId":"-"},"content":" emailBody.append(generateSevereErrorLogLine(i, logs.get(i).getMessage(),"},{"lineNumber":1046,"author":{"gitId":"-"},"content":" logs.get(i).getSeverity(), logs.get(i).getTraceId()));"},{"lineNumber":1047,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1048,"author":{"gitId":"-"},"content":""},{"lineNumber":1049,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d getEmptyEmailAddressedToEmail(Config.SUPPORT_EMAIL);"},{"lineNumber":1050,"author":{"gitId":"-"},"content":" email.setType(EmailType.SEVERE_LOGS_COMPILATION);"},{"lineNumber":1051,"author":{"gitId":"-"},"content":" email.setSubjectFromType(Config.APP_VERSION);"},{"lineNumber":1052,"author":{"gitId":"-"},"content":" email.setContent(emailBody.toString());"},{"lineNumber":1053,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":1054,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1055,"author":{"gitId":"-"},"content":""},{"lineNumber":1056,"author":{"gitId":"-"},"content":" private String generateSevereErrorLogLine(int index, String logMessage, String logLevel, String traceId) {"},{"lineNumber":1057,"author":{"gitId":"-"},"content":" return Templates.populateTemplate("},{"lineNumber":1058,"author":{"gitId":"-"},"content":" EmailTemplates.SEVERE_ERROR_LOG_LINE,"},{"lineNumber":1059,"author":{"gitId":"-"},"content":" \"${index}\", String.valueOf(index),"},{"lineNumber":1060,"author":{"gitId":"-"},"content":" \"${errorType}\", logLevel,"},{"lineNumber":1061,"author":{"gitId":"-"},"content":" \"${errorMessage}\", logMessage.replaceAll(\"\\n\", \"\\n\u003cbr\u003e\"),"},{"lineNumber":1062,"author":{"gitId":"-"},"content":" \"${traceId}\", traceId);"},{"lineNumber":1063,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1064,"author":{"gitId":"-"},"content":""},{"lineNumber":1065,"author":{"gitId":"-"},"content":" private EmailWrapper getEmptyEmailAddressedToEmail(String recipient) {"},{"lineNumber":1066,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d new EmailWrapper();"},{"lineNumber":1067,"author":{"gitId":"-"},"content":" email.setRecipient(recipient);"},{"lineNumber":1068,"author":{"gitId":"-"},"content":" email.setSenderEmail(Config.EMAIL_SENDEREMAIL);"},{"lineNumber":1069,"author":{"gitId":"-"},"content":" email.setSenderName(Config.EMAIL_SENDERNAME);"},{"lineNumber":1070,"author":{"gitId":"-"},"content":" email.setReplyTo(Config.EMAIL_REPLYTO);"},{"lineNumber":1071,"author":{"gitId":"-"},"content":" return email;"},{"lineNumber":1072,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1073,"author":{"gitId":"-"},"content":""},{"lineNumber":1074,"author":{"gitId":"-"},"content":" private String generateCoOwnersEmailsLine(String courseId) {"},{"lineNumber":1075,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e coOwners \u003d usersLogic.getCoOwnersForCourse(courseId);"},{"lineNumber":1076,"author":{"gitId":"-"},"content":" if (coOwners.isEmpty()) {"},{"lineNumber":1077,"author":{"gitId":"-"},"content":" return \"(No contactable instructors found)\";"},{"lineNumber":1078,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1079,"author":{"gitId":"-"},"content":" StringBuilder coOwnersEmailsLine \u003d new StringBuilder();"},{"lineNumber":1080,"author":{"gitId":"-"},"content":" for (Instructor coOwner : coOwners) {"},{"lineNumber":1081,"author":{"gitId":"-"},"content":" coOwnersEmailsLine"},{"lineNumber":1082,"author":{"gitId":"-"},"content":" .append(SanitizationHelper.sanitizeForHtml(coOwner.getName()))"},{"lineNumber":1083,"author":{"gitId":"-"},"content":" .append(\" (\")"},{"lineNumber":1084,"author":{"gitId":"-"},"content":" .append(coOwner.getEmail())"},{"lineNumber":1085,"author":{"gitId":"-"},"content":" .append(\"), \");"},{"lineNumber":1086,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1087,"author":{"gitId":"-"},"content":" return coOwnersEmailsLine.substring(0, coOwnersEmailsLine.length() - 2);"},{"lineNumber":1088,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1089,"author":{"gitId":"-"},"content":""},{"lineNumber":1090,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1091,"author":{"gitId":"-"},"content":" * Generates additional contact information for User Email Templates."},{"lineNumber":1092,"author":{"gitId":"-"},"content":" * @return The contact information after replacing the placeholders."},{"lineNumber":1093,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1094,"author":{"gitId":"-"},"content":" private String getAdditionalContactInformationFragment(Course course, boolean isInstructor) {"},{"lineNumber":1095,"author":{"gitId":"-"},"content":" String particulars \u003d isInstructor ? \"instructor data (e.g. wrong permission, misspelled name)\""},{"lineNumber":1096,"author":{"gitId":"-"},"content":" : \"team/student data (e.g. wrong team, misspelled name)\";"},{"lineNumber":1097,"author":{"gitId":"-"},"content":" return Templates.populateTemplate(EmailTemplates.FRAGMENT_SESSION_ADDITIONAL_CONTACT_INFORMATION,"},{"lineNumber":1098,"author":{"gitId":"-"},"content":" \"${particulars}\", particulars,"},{"lineNumber":1099,"author":{"gitId":"-"},"content":" \"${coOwnersEmails}\", generateCoOwnersEmailsLine(course.getId()),"},{"lineNumber":1100,"author":{"gitId":"-"},"content":" \"${supportEmail}\", Config.SUPPORT_EMAIL);"},{"lineNumber":1101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1102,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":3,"-":1099}},{"path":"src/main/java/teammates/sqllogic/core/AccountRequestsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountRequestsDb;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.AccountRequestSearchManager;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * Handles operations related to account requests."},{"lineNumber":16,"author":{"gitId":"-"},"content":" *"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * @see AccountRequest"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * @see AccountRequestsDb"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public final class AccountRequestsLogic {"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" private static final AccountRequestsLogic instance \u003d new AccountRequestsLogic();"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private AccountRequestsDb accountRequestDb;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" private AccountRequestsLogic() {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // prevent notification"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static AccountRequestsLogic inst() {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Initialise dependencies for {@code AccountRequestLogic} object."},{"lineNumber":36,"author":{"gitId":"-"},"content":" */"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void initLogicDependencies(AccountRequestsDb accountRequestDb) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.accountRequestDb \u003d accountRequestDb;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" private AccountRequestSearchManager getSearchManager() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return accountRequestDb.getSearchManager();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * Creates or updates search document for the given account request."},{"lineNumber":47,"author":{"gitId":"-"},"content":" */"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public void putDocument(AccountRequest accountRequest) throws SearchServiceException {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" getSearchManager().putDocument(accountRequest);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * Creates an account request."},{"lineNumber":54,"author":{"gitId":"-"},"content":" */"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequest(AccountRequest accountRequest)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return accountRequestDb.createAccountRequest(accountRequest);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":61,"author":{"gitId":"-"},"content":" * Creates an account request."},{"lineNumber":62,"author":{"gitId":"-"},"content":" */"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequest(String name, String email, String institute)"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" AccountRequest toCreate \u003d new AccountRequest(email, name, institute);"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" return accountRequestDb.createAccountRequest(toCreate);"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Gets account request associated with the {@code email} and {@code institute}."},{"lineNumber":72,"author":{"gitId":"-"},"content":" */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public AccountRequest getAccountRequest(String email, String institute) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" return accountRequestDb.getAccountRequest(email, institute);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Updates an account request."},{"lineNumber":80,"author":{"gitId":"-"},"content":" */"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public AccountRequest updateAccountRequest(AccountRequest accountRequest)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return accountRequestDb.updateAccountRequest(accountRequest);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":" /**"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":" * Gets account request associated with the {@code regkey}."},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":" public AccountRequest getAccountRequestByRegistrationKey(String regkey) {"},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":" return accountRequestDb.getAccountRequestByRegistrationKey(regkey);"},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Creates/resets the account request with the given email and institute such that it is not registered."},{"lineNumber":95,"author":{"gitId":"-"},"content":" */"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public AccountRequest resetAccountRequest(String email, String institute)"},{"lineNumber":97,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" AccountRequest accountRequest \u003d accountRequestDb.getAccountRequest(email, institute);"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" if (accountRequest \u003d\u003d null) {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Failed to reset since AccountRequest with \""},{"lineNumber":102,"author":{"gitId":"-"},"content":" + \"the given email and institute cannot be found.\");"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":" accountRequest.setRegisteredAt(null);"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" return accountRequestDb.updateAccountRequest(accountRequest);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Deletes account request associated with the {@code email} and {@code institute}."},{"lineNumber":111,"author":{"gitId":"-"},"content":" *"},{"lineNumber":112,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if no account requests with the given email and institute to delete can be found.\u003c/p\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" *"},{"lineNumber":114,"author":{"gitId":"-"},"content":" */"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public void deleteAccountRequest(String email, String institute) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" AccountRequest toDelete \u003d accountRequestDb.getAccountRequest(email, institute);"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" accountRequestDb.deleteAccountRequest(toDelete);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":" * Searches for account requests in the whole system."},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" * @return A list of {@link AccountRequest} or {@code null} if no match found."},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" public List\u003cAccountRequest\u003e searchAccountRequestsInWholeSystem(String queryString)"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" throws SearchServiceException {"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" return accountRequestDb.searchAccountRequestsInWholeSystem(queryString);"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Creates an or gets an account request."},{"lineNumber":133,"author":{"gitId":"-"},"content":" */"},{"lineNumber":134,"author":{"gitId":"-"},"content":" public AccountRequest createOrGetAccountRequestWithTransaction(String name, String email, String institute)"},{"lineNumber":135,"author":{"gitId":"-"},"content":" throws InvalidParametersException {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" AccountRequest toCreate \u003d new AccountRequest(email, name, institute);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" HibernateUtil.beginTransaction();"},{"lineNumber":138,"author":{"gitId":"-"},"content":" AccountRequest accountRequest;"},{"lineNumber":139,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" accountRequest \u003d accountRequestDb.createAccountRequest(toCreate);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" HibernateUtil.commitTransaction();"},{"lineNumber":142,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" HibernateUtil.rollbackTransaction();"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(ipe);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // Use existing account request"},{"lineNumber":147,"author":{"gitId":"-"},"content":" accountRequest \u003d getAccountRequest(email, institute);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" HibernateUtil.commitTransaction();"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return accountRequest;"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":12,"dishenggg":7,"-":133}},{"path":"src/main/java/teammates/sqllogic/core/AccountsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountsDb;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":13,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Handles operations related to accounts."},{"lineNumber":22,"author":{"gitId":"-"},"content":" *"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * @see Account"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * @see AccountsDb"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public final class AccountsLogic {"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" private static final AccountsLogic instance \u003d new AccountsLogic();"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private AccountsDb accountsDb;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private NotificationsLogic notificationsLogic;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"yuanxi1"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":37,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" private AccountsLogic() {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" void initLogicDependencies(AccountsDb accountsDb, NotificationsLogic notificationsLogic,"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" UsersLogic usersLogic, CoursesLogic coursesLogic) {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.accountsDb \u003d accountsDb;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" this.notificationsLogic \u003d notificationsLogic;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" this.coursesLogic \u003d coursesLogic;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static AccountsLogic inst() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Gets an account."},{"lineNumber":56,"author":{"gitId":"-"},"content":" */"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public Account getAccount(UUID id) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return accountsDb.getAccount(id);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * Gets an account by googleId."},{"lineNumber":64,"author":{"gitId":"-"},"content":" */"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public Account getAccountForGoogleId(String googleId) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" return accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * Gets accounts associated with email."},{"lineNumber":73,"author":{"gitId":"-"},"content":" */"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public List\u003cAccount\u003e getAccountsForEmail(String email) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" return accountsDb.getAccountsByEmail(email);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Creates an account."},{"lineNumber":82,"author":{"gitId":"-"},"content":" *"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * @return the created account"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the account is not valid"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the account already exists in the"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * database."},{"lineNumber":87,"author":{"gitId":"-"},"content":" */"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public Account createAccount(Account account)"},{"lineNumber":89,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assert account !\u003d null;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return accountsDb.createAccount(account);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Deletes account associated with the {@code googleId}."},{"lineNumber":96,"author":{"gitId":"-"},"content":" *"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the account doesn\u0027t exist.\u003c/p\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":" */"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public void deleteAccount(String googleId) {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" Account account \u003d getAccountForGoogleId(googleId);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" accountsDb.deleteAccount(account);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Deletes account and all users associated with the {@code googleId}."},{"lineNumber":108,"author":{"gitId":"-"},"content":" *"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the account doesn\u0027t exist.\u003c/p\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":" */"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public void deleteAccountCascade(String googleId) {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" List\u003cUser\u003e usersToDelete \u003d usersLogic.getAllUsersByGoogleId(googleId);"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" for (User user : usersToDelete) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" usersLogic.deleteUser(user);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" deleteAccount(googleId);"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":124,"author":{"gitId":"-"},"content":" * Updates the readNotifications of an account."},{"lineNumber":125,"author":{"gitId":"-"},"content":" *"},{"lineNumber":126,"author":{"gitId":"-"},"content":" * @param googleId google ID of the user who read the notification."},{"lineNumber":127,"author":{"gitId":"-"},"content":" * @param notificationId ID of notification to be marked as read."},{"lineNumber":128,"author":{"gitId":"-"},"content":" * @param endTime the expiry time of the notification, i.e. notification"},{"lineNumber":129,"author":{"gitId":"-"},"content":" * will not be shown after this time."},{"lineNumber":130,"author":{"gitId":"-"},"content":" * @return the account with updated read notifications."},{"lineNumber":131,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the notification has expired."},{"lineNumber":132,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if account or notification does not"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * exist."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public List\u003cUUID\u003e updateReadNotifications(String googleId, UUID notificationId, Instant endTime)"},{"lineNumber":136,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" Account account \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (account \u003d\u003d null) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to update the read notifications of a non-existent account.\");"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" Notification notification \u003d notificationsLogic.getNotification(notificationId);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" if (notification \u003d\u003d null) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to mark as read a notification that does not exist.\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":" if (endTime.isBefore(Instant.now())) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Trying to mark an expired notification as read.\");"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" ReadNotification readNotification \u003d new ReadNotification(account, notification);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" account.addReadNotification(readNotification);"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" return account.getReadNotifications().stream()"},{"lineNumber":154,"author":{"gitId":"-"},"content":" .map(n -\u003e n.getNotification().getId())"},{"lineNumber":155,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":159,"author":{"gitId":"-"},"content":" * Gets ids of read notifications in an account."},{"lineNumber":160,"author":{"gitId":"-"},"content":" */"},{"lineNumber":161,"author":{"gitId":"-"},"content":" public List\u003cUUID\u003e getReadNotificationsId(String googleId) {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" return accountsDb.getAccountByGoogleId(googleId).getReadNotifications().stream()"},{"lineNumber":163,"author":{"gitId":"-"},"content":" .map(n -\u003e n.getNotification().getId())"},{"lineNumber":164,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":" * Joins the user as a student."},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" public Student joinCourseForStudent(String registrationKey, String googleId)"},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":172,"author":{"gitId":"yuanxi1"},"content":" Student student \u003d validateStudentJoinRequest(registrationKey, googleId);"},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" // Create an account if it doesn\u0027t exist"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":" if (account \u003d\u003d null) {"},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":" account \u003d new Account(googleId, student.getName(), student.getEmail());"},{"lineNumber":178,"author":{"gitId":"yuanxi1"},"content":" createAccount(account);"},{"lineNumber":179,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":180,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":181,"author":{"gitId":"yuanxi1"},"content":" if (student.getAccount() \u003d\u003d null) {"},{"lineNumber":182,"author":{"gitId":"yuanxi1"},"content":" student.setAccount(account);"},{"lineNumber":183,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":184,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":185,"author":{"gitId":"yuanxi1"},"content":" return student;"},{"lineNumber":186,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":187,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":188,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":189,"author":{"gitId":"yuanxi1"},"content":" * Joins the user as an instructor."},{"lineNumber":190,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":191,"author":{"gitId":"yuanxi1"},"content":" public Instructor joinCourseForInstructor(String key, String googleId)"},{"lineNumber":192,"author":{"gitId":"yuanxi1"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":193,"author":{"gitId":"yuanxi1"},"content":" Instructor instructor \u003d validateInstructorJoinRequest(key, googleId);"},{"lineNumber":194,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":195,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":196,"author":{"gitId":"yuanxi1"},"content":" if (account \u003d\u003d null) {"},{"lineNumber":197,"author":{"gitId":"yuanxi1"},"content":" try {"},{"lineNumber":198,"author":{"gitId":"yuanxi1"},"content":" account \u003d new Account(googleId, instructor.getName(), instructor.getEmail());"},{"lineNumber":199,"author":{"gitId":"yuanxi1"},"content":" createAccount(account);"},{"lineNumber":200,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":201,"author":{"gitId":"yuanxi1"},"content":" assert false : \"Account already exists.\";"},{"lineNumber":202,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":203,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":204,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":205,"author":{"gitId":"yuanxi1"},"content":" instructor.setAccount(account);"},{"lineNumber":206,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":207,"author":{"gitId":"yuanxi1"},"content":" // Update the googleId of the student entity for the instructor which was created from sample data."},{"lineNumber":208,"author":{"gitId":"yuanxi1"},"content":" Student student \u003d usersLogic.getStudentForEmail(instructor.getCourseId(), instructor.getEmail());"},{"lineNumber":209,"author":{"gitId":"yuanxi1"},"content":" if (student !\u003d null) {"},{"lineNumber":210,"author":{"gitId":"yuanxi1"},"content":" student.setAccount(account);"},{"lineNumber":211,"author":{"gitId":"yuanxi1"},"content":" usersLogic.updateStudentCascade(student);"},{"lineNumber":212,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":213,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":214,"author":{"gitId":"yuanxi1"},"content":" return instructor;"},{"lineNumber":215,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":216,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":217,"author":{"gitId":"yuanxi1"},"content":" private Instructor validateInstructorJoinRequest(String registrationKey, String googleId)"},{"lineNumber":218,"author":{"gitId":"yuanxi1"},"content":" throws EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":219,"author":{"gitId":"yuanxi1"},"content":" Instructor instructorForKey \u003d usersLogic.getInstructorByRegistrationKey(registrationKey);"},{"lineNumber":220,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":221,"author":{"gitId":"yuanxi1"},"content":" if (instructorForKey \u003d\u003d null) {"},{"lineNumber":222,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"No instructor with given registration key: \" + registrationKey);"},{"lineNumber":223,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":224,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":225,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesLogic.getCourse(instructorForKey.getCourseId());"},{"lineNumber":226,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":227,"author":{"gitId":"yuanxi1"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":228,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"Course with id \" + instructorForKey.getCourseId() + \" does not exist\");"},{"lineNumber":229,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":230,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":231,"author":{"gitId":"yuanxi1"},"content":" if (course.isCourseDeleted()) {"},{"lineNumber":232,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"The course you are trying to join has been deleted by an instructor\");"},{"lineNumber":233,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":234,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":235,"author":{"gitId":"yuanxi1"},"content":" if (instructorForKey.isRegistered()) {"},{"lineNumber":236,"author":{"gitId":"yuanxi1"},"content":" if (instructorForKey.getGoogleId().equals(googleId)) {"},{"lineNumber":237,"author":{"gitId":"yuanxi1"},"content":" Account existingAccount \u003d accountsDb.getAccountByGoogleId(googleId);"},{"lineNumber":238,"author":{"gitId":"yuanxi1"},"content":" if (existingAccount !\u003d null) {"},{"lineNumber":239,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":240,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":241,"author":{"gitId":"yuanxi1"},"content":" } else {"},{"lineNumber":242,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":243,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":244,"author":{"gitId":"yuanxi1"},"content":" } else {"},{"lineNumber":245,"author":{"gitId":"yuanxi1"},"content":" // Check if this Google ID has already joined this course"},{"lineNumber":246,"author":{"gitId":"yuanxi1"},"content":" Instructor existingInstructor \u003d"},{"lineNumber":247,"author":{"gitId":"yuanxi1"},"content":" usersLogic.getInstructorByGoogleId(instructorForKey.getCourseId(), googleId);"},{"lineNumber":248,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":249,"author":{"gitId":"yuanxi1"},"content":" if (existingInstructor !\u003d null) {"},{"lineNumber":250,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Instructor has already joined course\");"},{"lineNumber":251,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":252,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":253,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":254,"author":{"gitId":"yuanxi1"},"content":" return instructorForKey;"},{"lineNumber":255,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":256,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":257,"author":{"gitId":"yuanxi1"},"content":" private Student validateStudentJoinRequest(String registrationKey, String googleId)"},{"lineNumber":258,"author":{"gitId":"yuanxi1"},"content":" throws EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":259,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":260,"author":{"gitId":"yuanxi1"},"content":" Student studentRole \u003d usersLogic.getStudentByRegistrationKey(registrationKey);"},{"lineNumber":261,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":262,"author":{"gitId":"yuanxi1"},"content":" if (studentRole \u003d\u003d null) {"},{"lineNumber":263,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"No student with given registration key: \" + registrationKey);"},{"lineNumber":264,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":265,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":266,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesLogic.getCourse(studentRole.getCourseId());"},{"lineNumber":267,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":268,"author":{"gitId":"yuanxi1"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":269,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"Course with id \" + studentRole.getCourseId() + \" does not exist\");"},{"lineNumber":270,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":271,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":272,"author":{"gitId":"yuanxi1"},"content":" if (course.isCourseDeleted()) {"},{"lineNumber":273,"author":{"gitId":"yuanxi1"},"content":" throw new EntityDoesNotExistException(\"The course you are trying to join has been deleted by an instructor\");"},{"lineNumber":274,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":275,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":276,"author":{"gitId":"yuanxi1"},"content":" if (studentRole.isRegistered()) {"},{"lineNumber":277,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Student has already joined course\");"},{"lineNumber":278,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":279,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":280,"author":{"gitId":"yuanxi1"},"content":" // Check if this Google ID has already joined this course"},{"lineNumber":281,"author":{"gitId":"yuanxi1"},"content":" Student existingStudent \u003d"},{"lineNumber":282,"author":{"gitId":"yuanxi1"},"content":" usersLogic.getStudentByGoogleId(studentRole.getCourseId(), googleId);"},{"lineNumber":283,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":284,"author":{"gitId":"yuanxi1"},"content":" if (existingStudent !\u003d null) {"},{"lineNumber":285,"author":{"gitId":"yuanxi1"},"content":" throw new EntityAlreadyExistsException(\"Student has already joined course\");"},{"lineNumber":286,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":287,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":288,"author":{"gitId":"yuanxi1"},"content":" return studentRole;"},{"lineNumber":289,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":290,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":132,"-":158}},{"path":"src/main/java/teammates/sqllogic/core/CoursesLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Comparator;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.CoursesDb;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Handles operations related to courses."},{"lineNumber":23,"author":{"gitId":"-"},"content":" *"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * @see Course"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * @see CoursesDb"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public final class CoursesLogic {"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final CoursesLogic instance \u003d new CoursesLogic();"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private CoursesDb coursesDb;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private FeedbackSessionsLogic fsLogic;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" private CoursesLogic() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static CoursesLogic inst() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" void initLogicDependencies(CoursesDb coursesDb, FeedbackSessionsLogic fsLogic, UsersLogic usersLogic) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.coursesDb \u003d coursesDb;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.fsLogic \u003d fsLogic;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * Creates a course."},{"lineNumber":53,"author":{"gitId":"-"},"content":" *"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * @return the created course"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the course is not valid"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the course already exists in the"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * database."},{"lineNumber":58,"author":{"gitId":"-"},"content":" */"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public Course createCourse(Course course) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return coursesDb.createCourse(course);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":64,"author":{"gitId":"-"},"content":" * Gets a course by course id."},{"lineNumber":65,"author":{"gitId":"-"},"content":" *"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * @param courseId of course."},{"lineNumber":67,"author":{"gitId":"-"},"content":" * @return the specified course."},{"lineNumber":68,"author":{"gitId":"-"},"content":" */"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public Course getCourse(String courseId) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return coursesDb.getCourse(courseId);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Returns a list of {@link Course} for all courses a given student is enrolled in."},{"lineNumber":75,"author":{"gitId":"-"},"content":" *"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * @param googleId The Google ID of the student"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getCoursesForStudentAccount(String googleId) {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students \u003d usersLogic.getAllStudentsByGoogleId(googleId);"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" return students"},{"lineNumber":82,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .map(Student::getCourse)"},{"lineNumber":84,"author":{"gitId":"-"},"content":" .filter(course -\u003e !course.isCourseDeleted())"},{"lineNumber":85,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * Returns a list of {@link Course} for all courses for a given list of instructors"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * except for courses in Recycle Bin."},{"lineNumber":91,"author":{"gitId":"-"},"content":" */"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getCoursesForInstructors(List\u003cInstructor\u003e instructors) {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assert instructors !\u003d null;"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" return instructors"},{"lineNumber":96,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":97,"author":{"gitId":"-"},"content":" .map(Instructor::getCourse)"},{"lineNumber":98,"author":{"gitId":"-"},"content":" .filter(course -\u003e !course.isCourseDeleted())"},{"lineNumber":99,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * Returns a list of soft-deleted {@link Course} for a given list of instructors."},{"lineNumber":104,"author":{"gitId":"-"},"content":" */"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public List\u003cCourse\u003e getSoftDeletedCoursesForInstructors(List\u003cInstructor\u003e instructors) {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assert instructors !\u003d null;"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" return instructors"},{"lineNumber":109,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .map(Instructor::getCourse)"},{"lineNumber":111,"author":{"gitId":"-"},"content":" .filter(course -\u003e course.isCourseDeleted())"},{"lineNumber":112,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Deletes a course and cascade its students, instructors, sessions, responses, deadline extensions and comments."},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Fails silently if no such course."},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public void deleteCourseCascade(String courseId) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" Course course \u003d coursesDb.getCourse(courseId);"},{"lineNumber":121,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" usersLogic.deleteStudentsInCourseCascade(courseId);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e feedbackSessions \u003d fsLogic.getFeedbackSessionsForCourse(courseId);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" feedbackSessions.forEach(feedbackSession -\u003e {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" fsLogic.deleteFeedbackSessionCascade(feedbackSession.getName(), courseId);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" });"},{"lineNumber":130,"author":{"gitId":"-"},"content":" coursesDb.deleteSectionsByCourseId(courseId);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d usersLogic.getInstructorsForCourse(courseId);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" instructors.forEach(instructor -\u003e {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" usersLogic.deleteInstructorCascade(courseId, instructor.getEmail());"},{"lineNumber":134,"author":{"gitId":"-"},"content":" });"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" coursesDb.deleteCourse(course);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":140,"author":{"gitId":"-"},"content":" * Moves a course to Recycle Bin by its given corresponding ID."},{"lineNumber":141,"author":{"gitId":"-"},"content":" *"},{"lineNumber":142,"author":{"gitId":"-"},"content":" * @return the time when the course is moved to the recycle bin."},{"lineNumber":143,"author":{"gitId":"-"},"content":" */"},{"lineNumber":144,"author":{"gitId":"-"},"content":" public Course moveCourseToRecycleBin(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" Course course \u003d coursesDb.getCourse(courseId);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to move a non-existent course to recycling bin.\");"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" Instant now \u003d Instant.now();"},{"lineNumber":151,"author":{"gitId":"-"},"content":" course.setDeletedAt(now);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return course;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Restores a course from Recycle Bin by its given corresponding ID."},{"lineNumber":157,"author":{"gitId":"-"},"content":" */"},{"lineNumber":158,"author":{"gitId":"-"},"content":" public void restoreCourseFromRecycleBin(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" Course course \u003d coursesDb.getCourse(courseId);"},{"lineNumber":160,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to restore a non-existent course from recycling bin.\");"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" course.setDeletedAt(null);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":168,"author":{"gitId":"-"},"content":" * Updates a course."},{"lineNumber":169,"author":{"gitId":"-"},"content":" *"},{"lineNumber":170,"author":{"gitId":"-"},"content":" * @return updated course"},{"lineNumber":171,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the course cannot be found"},{"lineNumber":173,"author":{"gitId":"-"},"content":" */"},{"lineNumber":174,"author":{"gitId":"-"},"content":" public Course updateCourse(String courseId, String name, String timezone)"},{"lineNumber":175,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" Course course \u003d getCourse(courseId);"},{"lineNumber":177,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT + Course.class);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":" course.setName(name);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" course.setTimeZone(timezone);"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" if (!course.isValid()) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(course.getInvalidityInfo());"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" return course;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":191,"author":{"gitId":"-"},"content":" * Creates a section."},{"lineNumber":192,"author":{"gitId":"-"},"content":" */"},{"lineNumber":193,"author":{"gitId":"-"},"content":" public Section createSection(Section section) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" return coursesDb.createSection(section);"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":198,"author":{"gitId":"-"},"content":" * Get section by {@code courseId} and {@code teamName}."},{"lineNumber":199,"author":{"gitId":"-"},"content":" */"},{"lineNumber":200,"author":{"gitId":"-"},"content":" public Section getSectionByCourseIdAndTeam(String courseId, String teamName) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" assert teamName !\u003d null;"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" return coursesDb.getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * Gets a list of section names for the given {@code courseId}."},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getSectionNamesForCourse(String courseId) throws EntityDoesNotExistException {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" Course course \u003d getCourse(courseId);"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to get section names for a non-existent course.\");"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" return course.getSections()"},{"lineNumber":219,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":220,"author":{"gitId":"-"},"content":" .map(section -\u003e section.getName())"},{"lineNumber":221,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":225,"author":{"gitId":"yuanxi1"},"content":" * Gets the institute of the course."},{"lineNumber":226,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":227,"author":{"gitId":"yuanxi1"},"content":" public String getCourseInstitute(String courseId) {"},{"lineNumber":228,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d getCourse(courseId);"},{"lineNumber":229,"author":{"gitId":"yuanxi1"},"content":" assert course !\u003d null : \"Trying to getCourseInstitute for inexistent course with id \" + courseId;"},{"lineNumber":230,"author":{"gitId":"yuanxi1"},"content":" return course.getInstitute();"},{"lineNumber":231,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":232,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":234,"author":{"gitId":"-"},"content":" * Creates a team."},{"lineNumber":235,"author":{"gitId":"-"},"content":" */"},{"lineNumber":236,"author":{"gitId":"-"},"content":" public Team createTeam(Team team) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" return coursesDb.createTeam(team);"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":241,"author":{"gitId":"-"},"content":" * Returns teams for a particular section."},{"lineNumber":242,"author":{"gitId":"-"},"content":" */"},{"lineNumber":243,"author":{"gitId":"-"},"content":" public List\u003cTeam\u003e getTeamsForSection(Section section) {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" return coursesDb.getTeamsForSection(section);"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":248,"author":{"gitId":"-"},"content":" * Returns teams for a course."},{"lineNumber":249,"author":{"gitId":"-"},"content":" */"},{"lineNumber":250,"author":{"gitId":"-"},"content":" public List\u003cTeam\u003e getTeamsForCourse(String courseId) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" return coursesDb.getTeamsForCourse(courseId);"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":255,"author":{"gitId":"-"},"content":" * Sorts the courses list alphabetically by id."},{"lineNumber":256,"author":{"gitId":"-"},"content":" */"},{"lineNumber":257,"author":{"gitId":"-"},"content":" public static void sortById(List\u003cCourse\u003e courses) {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" courses.sort(Comparator.comparing(Course::getId));"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":9,"-":251}},{"path":"src/main/java/teammates/sqllogic/core/DataBundleLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Collection;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Handles operations related to data bundles."},{"lineNumber":32,"author":{"gitId":"-"},"content":" *"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * @see DataBundle"},{"lineNumber":34,"author":{"gitId":"-"},"content":" */"},{"lineNumber":35,"author":{"gitId":"-"},"content":"public final class DataBundleLogic {"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final DataBundleLogic instance \u003d new DataBundleLogic();"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" private AccountsLogic accountsLogic;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private AccountRequestsLogic accountRequestsLogic;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":42,"author":{"gitId":"-"},"content":" private DeadlineExtensionsLogic deadlineExtensionsLogic;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" private FeedbackSessionsLogic fsLogic;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic frLogic;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsLogic frcLogic;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" private NotificationsLogic notificationsLogic;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" private DataBundleLogic() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static DataBundleLogic inst() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" void initLogicDependencies(AccountsLogic accountsLogic, AccountRequestsLogic accountRequestsLogic,"},{"lineNumber":59,"author":{"gitId":"-"},"content":" CoursesLogic coursesLogic,"},{"lineNumber":60,"author":{"gitId":"-"},"content":" DeadlineExtensionsLogic deadlineExtensionsLogic, FeedbackSessionsLogic fsLogic,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" FeedbackQuestionsLogic fqLogic, FeedbackResponsesLogic frLogic,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" FeedbackResponseCommentsLogic frcLogic,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" NotificationsLogic notificationsLogic, UsersLogic usersLogic) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" this.accountsLogic \u003d accountsLogic;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.accountRequestsLogic \u003d accountRequestsLogic;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.coursesLogic \u003d coursesLogic;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" this.deadlineExtensionsLogic \u003d deadlineExtensionsLogic;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" this.fsLogic \u003d fsLogic;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" this.fqLogic \u003d fqLogic;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" this.frLogic \u003d frLogic;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" this.frcLogic \u003d frcLogic;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" this.notificationsLogic \u003d notificationsLogic;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * Deserialize JSON into a data bundle."},{"lineNumber":78,"author":{"gitId":"-"},"content":" *"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * \u003cp\u003eNOTE: apart from for Course, ids used in the jsonString may be any valid UUID"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * and are used only to link entities together. They will be replaced by a random"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * UUID when deserialized and hence do not need to be checked if they exist in the"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * database previously.\u003c/p\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" *"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * @param jsonString containing entities to persist at once to the database."},{"lineNumber":85,"author":{"gitId":"-"},"content":" * CourseID must be a valid UUID not currently in use."},{"lineNumber":86,"author":{"gitId":"-"},"content":" * For other entities, replaces the given ids with randomly generated UUIDs."},{"lineNumber":87,"author":{"gitId":"-"},"content":" * @return newly created DataBundle"},{"lineNumber":88,"author":{"gitId":"-"},"content":" */"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public static SqlDataBundle deserializeDataBundle(String jsonString) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" SqlDataBundle dataBundle \u003d JsonUtils.fromJson(jsonString, SqlDataBundle.class);"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" Collection\u003cAccount\u003e accounts \u003d dataBundle.accounts.values();"},{"lineNumber":93,"author":{"gitId":"-"},"content":" Collection\u003cAccountRequest\u003e accountRequests \u003d dataBundle.accountRequests.values();"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Collection\u003cCourse\u003e courses \u003d dataBundle.courses.values();"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Collection\u003cSection\u003e sections \u003d dataBundle.sections.values();"},{"lineNumber":96,"author":{"gitId":"-"},"content":" Collection\u003cTeam\u003e teams \u003d dataBundle.teams.values();"},{"lineNumber":97,"author":{"gitId":"-"},"content":" Collection\u003cInstructor\u003e instructors \u003d dataBundle.instructors.values();"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Collection\u003cStudent\u003e students \u003d dataBundle.students.values();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackSession\u003e sessions \u003d dataBundle.feedbackSessions.values();"},{"lineNumber":100,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackQuestion\u003e questions \u003d dataBundle.feedbackQuestions.values();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackResponse\u003e responses \u003d dataBundle.feedbackResponses.values();"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackResponseComment\u003e responseComments \u003d dataBundle.feedbackResponseComments.values();"},{"lineNumber":103,"author":{"gitId":"-"},"content":" Collection\u003cDeadlineExtension\u003e deadlineExtensions \u003d dataBundle.deadlineExtensions.values();"},{"lineNumber":104,"author":{"gitId":"-"},"content":" Collection\u003cNotification\u003e notifications \u003d dataBundle.notifications.values();"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Collection\u003cReadNotification\u003e readNotifications \u003d dataBundle.readNotifications.values();"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" // Mapping of IDs or placeholder IDs to actual entity"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Map\u003cString, Course\u003e coursesMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Map\u003cUUID, Section\u003e sectionsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":110,"author":{"gitId":"-"},"content":" Map\u003cUUID, Team\u003e teamsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":111,"author":{"gitId":"-"},"content":" Map\u003cUUID, FeedbackSession\u003e sessionsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" Map\u003cUUID, FeedbackQuestion\u003e questionMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":113,"author":{"gitId":"-"},"content":" Map\u003cUUID, FeedbackResponse\u003e responseMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" Map\u003cUUID, Account\u003e accountsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" Map\u003cUUID, User\u003e usersMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":116,"author":{"gitId":"-"},"content":" Map\u003cUUID, Notification\u003e notificationsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" // Replace any placeholder IDs with newly generated UUIDs"},{"lineNumber":119,"author":{"gitId":"-"},"content":" // Store mapping of placeholder ID to actual entity to keep track of"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // associations between entities"},{"lineNumber":121,"author":{"gitId":"-"},"content":" for (AccountRequest accountRequest : accountRequests) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" accountRequest.setId(UUID.randomUUID());"},{"lineNumber":123,"author":{"gitId":"-"},"content":" accountRequest.generateNewRegistrationKey();"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" for (Course course : courses) {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" coursesMap.put(course.getId(), course);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" for (Section section : sections) {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d section.getId();"},{"lineNumber":132,"author":{"gitId":"-"},"content":" section.setId(UUID.randomUUID());"},{"lineNumber":133,"author":{"gitId":"-"},"content":" sectionsMap.put(placeholderId, section);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" Course course \u003d coursesMap.get(section.getCourse().getId());"},{"lineNumber":135,"author":{"gitId":"-"},"content":" section.setCourse(course);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" for (Team team : teams) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d team.getId();"},{"lineNumber":140,"author":{"gitId":"-"},"content":" team.setId(UUID.randomUUID());"},{"lineNumber":141,"author":{"gitId":"-"},"content":" teamsMap.put(placeholderId, team);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" Section section \u003d sectionsMap.get(team.getSection().getId());"},{"lineNumber":143,"author":{"gitId":"-"},"content":" team.setSection(section);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d session.getId();"},{"lineNumber":148,"author":{"gitId":"-"},"content":" session.setId(UUID.randomUUID());"},{"lineNumber":149,"author":{"gitId":"-"},"content":" sessionsMap.put(placeholderId, session);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" Course course \u003d coursesMap.get(session.getCourse().getId());"},{"lineNumber":151,"author":{"gitId":"-"},"content":" session.setCourse(course);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d question.getId();"},{"lineNumber":156,"author":{"gitId":"-"},"content":" question.setId(UUID.randomUUID());"},{"lineNumber":157,"author":{"gitId":"-"},"content":" questionMap.put(placeholderId, question);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d sessionsMap.get(question.getFeedbackSession().getId());"},{"lineNumber":159,"author":{"gitId":"-"},"content":" question.setFeedbackSession(fs);"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d response.getId();"},{"lineNumber":164,"author":{"gitId":"-"},"content":" response.setId(UUID.randomUUID());"},{"lineNumber":165,"author":{"gitId":"-"},"content":" responseMap.put(placeholderId, response);"},{"lineNumber":166,"author":{"gitId":"-"},"content":" FeedbackQuestion fq \u003d questionMap.get(response.getFeedbackQuestion().getId());"},{"lineNumber":167,"author":{"gitId":"-"},"content":" Section giverSection \u003d sectionsMap.get(response.getGiverSection().getId());"},{"lineNumber":168,"author":{"gitId":"-"},"content":" Section recipientSection \u003d response.getRecipientSection() !\u003d null"},{"lineNumber":169,"author":{"gitId":"-"},"content":" ? sectionsMap.get(response.getRecipientSection().getId()) : null;"},{"lineNumber":170,"author":{"gitId":"-"},"content":" response.setFeedbackQuestion(fq);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" response.setGiverSection(giverSection);"},{"lineNumber":172,"author":{"gitId":"-"},"content":" response.setRecipientSection(recipientSection);"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" FeedbackResponse fr \u003d responseMap.get(responseComment.getFeedbackResponse().getId());"},{"lineNumber":177,"author":{"gitId":"-"},"content":" Section giverSection \u003d sectionsMap.get(responseComment.getGiverSection().getId());"},{"lineNumber":178,"author":{"gitId":"-"},"content":" Section recipientSection \u003d sectionsMap.get(responseComment.getRecipientSection().getId());"},{"lineNumber":179,"author":{"gitId":"-"},"content":" responseComment.setFeedbackResponse(fr);"},{"lineNumber":180,"author":{"gitId":"-"},"content":" responseComment.setGiverSection(giverSection);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" responseComment.setRecipientSection(recipientSection);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" for (Account account : accounts) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d account.getId();"},{"lineNumber":186,"author":{"gitId":"-"},"content":" account.setId(UUID.randomUUID());"},{"lineNumber":187,"author":{"gitId":"-"},"content":" accountsMap.put(placeholderId, account);"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d instructor.getId();"},{"lineNumber":192,"author":{"gitId":"-"},"content":" instructor.setId(UUID.randomUUID());"},{"lineNumber":193,"author":{"gitId":"-"},"content":" usersMap.put(placeholderId, instructor);"},{"lineNumber":194,"author":{"gitId":"-"},"content":" Course course \u003d coursesMap.get(instructor.getCourse().getId());"},{"lineNumber":195,"author":{"gitId":"-"},"content":" instructor.setCourse(course);"},{"lineNumber":196,"author":{"gitId":"-"},"content":" if (instructor.getAccount() !\u003d null) {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" Account account \u003d accountsMap.get(instructor.getAccount().getId());"},{"lineNumber":198,"author":{"gitId":"-"},"content":" instructor.setAccount(account);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":" instructor.generateNewRegistrationKey();"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" for (Student student : students) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d student.getId();"},{"lineNumber":205,"author":{"gitId":"-"},"content":" student.setId(UUID.randomUUID());"},{"lineNumber":206,"author":{"gitId":"-"},"content":" usersMap.put(placeholderId, student);"},{"lineNumber":207,"author":{"gitId":"-"},"content":" Course course \u003d coursesMap.get(student.getCourse().getId());"},{"lineNumber":208,"author":{"gitId":"-"},"content":" student.setCourse(course);"},{"lineNumber":209,"author":{"gitId":"-"},"content":" Team team \u003d teamsMap.get(student.getTeam().getId());"},{"lineNumber":210,"author":{"gitId":"-"},"content":" student.setTeam(team);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" if (student.getAccount() !\u003d null) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" Account account \u003d accountsMap.get(student.getAccount().getId());"},{"lineNumber":213,"author":{"gitId":"-"},"content":" student.setAccount(account);"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" student.generateNewRegistrationKey();"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" for (Notification notification : notifications) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" UUID placeholderId \u003d notification.getId();"},{"lineNumber":220,"author":{"gitId":"-"},"content":" notification.setId(UUID.randomUUID());"},{"lineNumber":221,"author":{"gitId":"-"},"content":" notificationsMap.put(placeholderId, notification);"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":" for (ReadNotification readNotification : readNotifications) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" readNotification.setId(UUID.randomUUID());"},{"lineNumber":226,"author":{"gitId":"-"},"content":" Account account \u003d accountsMap.get(readNotification.getAccount().getId());"},{"lineNumber":227,"author":{"gitId":"-"},"content":" readNotification.setAccount(account);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" account.addReadNotification(readNotification);"},{"lineNumber":229,"author":{"gitId":"-"},"content":" Notification notification \u003d notificationsMap.get(readNotification.getNotification().getId());"},{"lineNumber":230,"author":{"gitId":"-"},"content":" readNotification.setNotification(notification);"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" for (DeadlineExtension deadlineExtension : deadlineExtensions) {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" deadlineExtension.setId(UUID.randomUUID());"},{"lineNumber":235,"author":{"gitId":"-"},"content":" FeedbackSession session \u003d sessionsMap.get(deadlineExtension.getFeedbackSession().getId());"},{"lineNumber":236,"author":{"gitId":"-"},"content":" deadlineExtension.setFeedbackSession(session);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" User user \u003d usersMap.get(deadlineExtension.getUser().getId());"},{"lineNumber":238,"author":{"gitId":"-"},"content":" deadlineExtension.setUser(user);"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" return dataBundle;"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Persists data in the given {@link DataBundle} to the database."},{"lineNumber":246,"author":{"gitId":"-"},"content":" *"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if invalid data is encountered."},{"lineNumber":248,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if an entity was not found."},{"lineNumber":249,"author":{"gitId":"-"},"content":" * (ReadNotification requires Account and Notification to be created)"},{"lineNumber":250,"author":{"gitId":"-"},"content":" */"},{"lineNumber":251,"author":{"gitId":"-"},"content":" public SqlDataBundle persistDataBundle(SqlDataBundle dataBundle)"},{"lineNumber":252,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException, EntityDoesNotExistException {"},{"lineNumber":253,"author":{"gitId":"-"},"content":" if (dataBundle \u003d\u003d null) {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Null data bundle\");"},{"lineNumber":255,"author":{"gitId":"-"},"content":" }"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"yuanxi1"},"content":" linkEntities(dataBundle);"},{"lineNumber":258,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" Collection\u003cAccount\u003e accounts \u003d dataBundle.accounts.values();"},{"lineNumber":260,"author":{"gitId":"-"},"content":" Collection\u003cAccountRequest\u003e accountRequests \u003d dataBundle.accountRequests.values();"},{"lineNumber":261,"author":{"gitId":"-"},"content":" Collection\u003cCourse\u003e courses \u003d dataBundle.courses.values();"},{"lineNumber":262,"author":{"gitId":"-"},"content":" Collection\u003cSection\u003e sections \u003d dataBundle.sections.values();"},{"lineNumber":263,"author":{"gitId":"-"},"content":" Collection\u003cTeam\u003e teams \u003d dataBundle.teams.values();"},{"lineNumber":264,"author":{"gitId":"-"},"content":" Collection\u003cInstructor\u003e instructors \u003d dataBundle.instructors.values();"},{"lineNumber":265,"author":{"gitId":"-"},"content":" Collection\u003cStudent\u003e students \u003d dataBundle.students.values();"},{"lineNumber":266,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackSession\u003e sessions \u003d dataBundle.feedbackSessions.values();"},{"lineNumber":267,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackQuestion\u003e questions \u003d dataBundle.feedbackQuestions.values();"},{"lineNumber":268,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackResponse\u003e responses \u003d dataBundle.feedbackResponses.values();"},{"lineNumber":269,"author":{"gitId":"-"},"content":" Collection\u003cFeedbackResponseComment\u003e responseComments \u003d dataBundle.feedbackResponseComments.values();"},{"lineNumber":270,"author":{"gitId":"-"},"content":" Collection\u003cDeadlineExtension\u003e deadlineExtensions \u003d dataBundle.deadlineExtensions.values();"},{"lineNumber":271,"author":{"gitId":"-"},"content":" Collection\u003cNotification\u003e notifications \u003d dataBundle.notifications.values();"},{"lineNumber":272,"author":{"gitId":"-"},"content":" Collection\u003cReadNotification\u003e readNotifications \u003d dataBundle.readNotifications.values();"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":" for (AccountRequest accountRequest : accountRequests) {"},{"lineNumber":275,"author":{"gitId":"-"},"content":" accountRequestsLogic.createAccountRequest(accountRequest);"},{"lineNumber":276,"author":{"gitId":"-"},"content":" }"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":" for (Notification notification : notifications) {"},{"lineNumber":279,"author":{"gitId":"-"},"content":" notificationsLogic.createNotification(notification);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" for (Course course : courses) {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" coursesLogic.createCourse(course);"},{"lineNumber":284,"author":{"gitId":"-"},"content":" }"},{"lineNumber":285,"author":{"gitId":"-"},"content":""},{"lineNumber":286,"author":{"gitId":"-"},"content":" for (Section section : sections) {"},{"lineNumber":287,"author":{"gitId":"-"},"content":" coursesLogic.createSection(section);"},{"lineNumber":288,"author":{"gitId":"-"},"content":" }"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":" for (Team team : teams) {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" coursesLogic.createTeam(team);"},{"lineNumber":292,"author":{"gitId":"-"},"content":" }"},{"lineNumber":293,"author":{"gitId":"-"},"content":""},{"lineNumber":294,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":295,"author":{"gitId":"-"},"content":" fsLogic.createFeedbackSession(session);"},{"lineNumber":296,"author":{"gitId":"-"},"content":" }"},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" fqLogic.createFeedbackQuestion(question);"},{"lineNumber":300,"author":{"gitId":"-"},"content":" }"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" frLogic.createFeedbackResponse(response);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":307,"author":{"gitId":"-"},"content":" responseComment.setId(null);"},{"lineNumber":308,"author":{"gitId":"-"},"content":" frcLogic.createFeedbackResponseComment(responseComment);"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" for (Account account : accounts) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" accountsLogic.createAccount(account);"},{"lineNumber":313,"author":{"gitId":"-"},"content":" }"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" usersLogic.createInstructor(instructor);"},{"lineNumber":317,"author":{"gitId":"-"},"content":" }"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":" for (Student student : students) {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" usersLogic.createStudent(student);"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" for (ReadNotification readNotification : readNotifications) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" accountsLogic.updateReadNotifications(readNotification.getAccount().getGoogleId(),"},{"lineNumber":325,"author":{"gitId":"-"},"content":" readNotification.getNotification().getId(), readNotification.getNotification().getEndTime());"},{"lineNumber":326,"author":{"gitId":"-"},"content":" }"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" for (DeadlineExtension deadlineExtension : deadlineExtensions) {"},{"lineNumber":329,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.createDeadlineExtension(deadlineExtension);"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }"},{"lineNumber":331,"author":{"gitId":"-"},"content":""},{"lineNumber":332,"author":{"gitId":"-"},"content":" return dataBundle;"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":336,"author":{"gitId":"-"},"content":" * Removes the items in the data bundle from the database."},{"lineNumber":337,"author":{"gitId":"-"},"content":" */"},{"lineNumber":338,"author":{"gitId":"-"},"content":" public void removeDataBundle(SqlDataBundle dataBundle) throws InvalidParametersException {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" if (dataBundle \u003d\u003d null) {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Data bundle is null\");"},{"lineNumber":341,"author":{"gitId":"-"},"content":" }"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"yuanxi1"},"content":" linkEntities(dataBundle);"},{"lineNumber":344,"author":{"gitId":"-"},"content":" dataBundle.courses.values().forEach(course -\u003e {"},{"lineNumber":345,"author":{"gitId":"-"},"content":" coursesLogic.deleteCourseCascade(course.getId());"},{"lineNumber":346,"author":{"gitId":"-"},"content":" });"},{"lineNumber":347,"author":{"gitId":"-"},"content":" dataBundle.notifications.values().forEach(notification -\u003e {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" notificationsLogic.deleteNotification(notification.getId());"},{"lineNumber":349,"author":{"gitId":"-"},"content":" });"},{"lineNumber":350,"author":{"gitId":"-"},"content":" dataBundle.accounts.values().forEach(account -\u003e {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccount(account.getGoogleId());"},{"lineNumber":352,"author":{"gitId":"-"},"content":" });"},{"lineNumber":353,"author":{"gitId":"-"},"content":" dataBundle.accountRequests.values().forEach(accountRequest -\u003e {"},{"lineNumber":354,"author":{"gitId":"-"},"content":" accountRequestsLogic.deleteAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":355,"author":{"gitId":"-"},"content":" });"},{"lineNumber":356,"author":{"gitId":"-"},"content":" }"},{"lineNumber":357,"author":{"gitId":"-"},"content":""},{"lineNumber":358,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":359,"author":{"gitId":"-"},"content":" * Creates document for entities that have document, i.e. searchable."},{"lineNumber":360,"author":{"gitId":"-"},"content":" */"},{"lineNumber":361,"author":{"gitId":"-"},"content":" public void putDocuments(SqlDataBundle dataBundle) throws SearchServiceException {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" Map\u003cString, Student\u003e students \u003d dataBundle.students;"},{"lineNumber":363,"author":{"gitId":"-"},"content":" for (Student student : students.values()) {"},{"lineNumber":364,"author":{"gitId":"-"},"content":" usersLogic.putStudentDocument(student);"},{"lineNumber":365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":366,"author":{"gitId":"-"},"content":""},{"lineNumber":367,"author":{"gitId":"-"},"content":" Map\u003cString, Instructor\u003e instructors \u003d dataBundle.instructors;"},{"lineNumber":368,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors.values()) {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" usersLogic.putInstructorDocument(instructor);"},{"lineNumber":370,"author":{"gitId":"-"},"content":" }"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":" Map\u003cString, AccountRequest\u003e accountRequests \u003d dataBundle.accountRequests;"},{"lineNumber":373,"author":{"gitId":"-"},"content":" for (AccountRequest accountRequest : accountRequests.values()) {"},{"lineNumber":374,"author":{"gitId":"-"},"content":" accountRequestsLogic.putDocument(accountRequest);"},{"lineNumber":375,"author":{"gitId":"-"},"content":" }"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"yuanxi1"},"content":" private static void linkEntities(SqlDataBundle dataBundle) {"},{"lineNumber":379,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cAccount\u003e accounts \u003d dataBundle.accounts.values();"},{"lineNumber":380,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cCourse\u003e courses \u003d dataBundle.courses.values();"},{"lineNumber":381,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cSection\u003e sections \u003d dataBundle.sections.values();"},{"lineNumber":382,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cTeam\u003e teams \u003d dataBundle.teams.values();"},{"lineNumber":383,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cInstructor\u003e instructors \u003d dataBundle.instructors.values();"},{"lineNumber":384,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cStudent\u003e students \u003d dataBundle.students.values();"},{"lineNumber":385,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cFeedbackSession\u003e sessions \u003d dataBundle.feedbackSessions.values();"},{"lineNumber":386,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cFeedbackQuestion\u003e questions \u003d dataBundle.feedbackQuestions.values();"},{"lineNumber":387,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cFeedbackResponse\u003e responses \u003d dataBundle.feedbackResponses.values();"},{"lineNumber":388,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cFeedbackResponseComment\u003e responseComments \u003d dataBundle.feedbackResponseComments.values();"},{"lineNumber":389,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cDeadlineExtension\u003e deadlineExtensions \u003d dataBundle.deadlineExtensions.values();"},{"lineNumber":390,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cNotification\u003e notifications \u003d dataBundle.notifications.values();"},{"lineNumber":391,"author":{"gitId":"yuanxi1"},"content":" Collection\u003cReadNotification\u003e readNotifications \u003d dataBundle.readNotifications.values();"},{"lineNumber":392,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":393,"author":{"gitId":"yuanxi1"},"content":" // Mapping of IDs or placeholder IDs to actual entity"},{"lineNumber":394,"author":{"gitId":"yuanxi1"},"content":" Map\u003cString, Course\u003e coursesMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":395,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, Section\u003e sectionsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":396,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, Team\u003e teamsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":397,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, FeedbackSession\u003e sessionsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":398,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, FeedbackQuestion\u003e questionMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":399,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, FeedbackResponse\u003e responseMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":400,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, Account\u003e accountsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":401,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, User\u003e usersMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":402,"author":{"gitId":"yuanxi1"},"content":" Map\u003cUUID, Notification\u003e notificationsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":403,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":404,"author":{"gitId":"yuanxi1"},"content":" for (Course course : courses) {"},{"lineNumber":405,"author":{"gitId":"yuanxi1"},"content":" coursesMap.put(course.getId(), course);"},{"lineNumber":406,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":407,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":408,"author":{"gitId":"yuanxi1"},"content":" for (Section section : sections) {"},{"lineNumber":409,"author":{"gitId":"yuanxi1"},"content":" sectionsMap.put(section.getId(), section);"},{"lineNumber":410,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesMap.get(section.getCourse().getId());"},{"lineNumber":411,"author":{"gitId":"yuanxi1"},"content":" section.setCourse(course);"},{"lineNumber":412,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":413,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":414,"author":{"gitId":"yuanxi1"},"content":" for (Team team : teams) {"},{"lineNumber":415,"author":{"gitId":"yuanxi1"},"content":" teamsMap.put(team.getId(), team);"},{"lineNumber":416,"author":{"gitId":"yuanxi1"},"content":" Section section \u003d sectionsMap.get(team.getSection().getId());"},{"lineNumber":417,"author":{"gitId":"yuanxi1"},"content":" team.setSection(section);"},{"lineNumber":418,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":419,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":420,"author":{"gitId":"yuanxi1"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":421,"author":{"gitId":"yuanxi1"},"content":" sessionsMap.put(session.getId(), session);"},{"lineNumber":422,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesMap.get(session.getCourse().getId());"},{"lineNumber":423,"author":{"gitId":"yuanxi1"},"content":" session.setCourse(course);"},{"lineNumber":424,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":425,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":426,"author":{"gitId":"yuanxi1"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":427,"author":{"gitId":"yuanxi1"},"content":" questionMap.put(question.getId(), question);"},{"lineNumber":428,"author":{"gitId":"yuanxi1"},"content":" FeedbackSession fs \u003d sessionsMap.get(question.getFeedbackSession().getId());"},{"lineNumber":429,"author":{"gitId":"yuanxi1"},"content":" question.setFeedbackSession(fs);"},{"lineNumber":430,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":431,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":432,"author":{"gitId":"yuanxi1"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":433,"author":{"gitId":"yuanxi1"},"content":" UUID placeholderId \u003d response.getId();"},{"lineNumber":434,"author":{"gitId":"yuanxi1"},"content":" responseMap.put(placeholderId, response);"},{"lineNumber":435,"author":{"gitId":"yuanxi1"},"content":" FeedbackQuestion fq \u003d questionMap.get(response.getFeedbackQuestion().getId());"},{"lineNumber":436,"author":{"gitId":"yuanxi1"},"content":" Section giverSection \u003d sectionsMap.get(response.getGiverSection().getId());"},{"lineNumber":437,"author":{"gitId":"yuanxi1"},"content":" Section recipientSection \u003d response.getRecipientSection() !\u003d null"},{"lineNumber":438,"author":{"gitId":"yuanxi1"},"content":" ? sectionsMap.get(response.getRecipientSection().getId()) : null;"},{"lineNumber":439,"author":{"gitId":"yuanxi1"},"content":" response.setFeedbackQuestion(fq);"},{"lineNumber":440,"author":{"gitId":"yuanxi1"},"content":" response.setGiverSection(giverSection);"},{"lineNumber":441,"author":{"gitId":"yuanxi1"},"content":" response.setRecipientSection(recipientSection);"},{"lineNumber":442,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":443,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":444,"author":{"gitId":"yuanxi1"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":445,"author":{"gitId":"yuanxi1"},"content":" FeedbackResponse fr \u003d responseMap.get(responseComment.getFeedbackResponse().getId());"},{"lineNumber":446,"author":{"gitId":"yuanxi1"},"content":" Section giverSection \u003d sectionsMap.get(responseComment.getGiverSection().getId());"},{"lineNumber":447,"author":{"gitId":"yuanxi1"},"content":" Section recipientSection \u003d sectionsMap.get(responseComment.getRecipientSection().getId());"},{"lineNumber":448,"author":{"gitId":"yuanxi1"},"content":" responseComment.setFeedbackResponse(fr);"},{"lineNumber":449,"author":{"gitId":"yuanxi1"},"content":" responseComment.setGiverSection(giverSection);"},{"lineNumber":450,"author":{"gitId":"yuanxi1"},"content":" responseComment.setRecipientSection(recipientSection);"},{"lineNumber":451,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":452,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":453,"author":{"gitId":"yuanxi1"},"content":" for (Account account : accounts) {"},{"lineNumber":454,"author":{"gitId":"yuanxi1"},"content":" accountsMap.put(account.getId(), account);"},{"lineNumber":455,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":456,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":457,"author":{"gitId":"yuanxi1"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":458,"author":{"gitId":"yuanxi1"},"content":" usersMap.put(instructor.getId(), instructor);"},{"lineNumber":459,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesMap.get(instructor.getCourse().getId());"},{"lineNumber":460,"author":{"gitId":"yuanxi1"},"content":" instructor.setCourse(course);"},{"lineNumber":461,"author":{"gitId":"yuanxi1"},"content":" if (instructor.getAccount() !\u003d null) {"},{"lineNumber":462,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsMap.get(instructor.getAccount().getId());"},{"lineNumber":463,"author":{"gitId":"yuanxi1"},"content":" instructor.setAccount(account);"},{"lineNumber":464,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":465,"author":{"gitId":"yuanxi1"},"content":" instructor.generateNewRegistrationKey();"},{"lineNumber":466,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":467,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":468,"author":{"gitId":"yuanxi1"},"content":" for (Student student : students) {"},{"lineNumber":469,"author":{"gitId":"yuanxi1"},"content":" usersMap.put(student.getId(), student);"},{"lineNumber":470,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d coursesMap.get(student.getCourse().getId());"},{"lineNumber":471,"author":{"gitId":"yuanxi1"},"content":" student.setCourse(course);"},{"lineNumber":472,"author":{"gitId":"yuanxi1"},"content":" Team team \u003d teamsMap.get(student.getTeam().getId());"},{"lineNumber":473,"author":{"gitId":"yuanxi1"},"content":" student.setTeam(team);"},{"lineNumber":474,"author":{"gitId":"yuanxi1"},"content":" if (student.getAccount() !\u003d null) {"},{"lineNumber":475,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsMap.get(student.getAccount().getId());"},{"lineNumber":476,"author":{"gitId":"yuanxi1"},"content":" student.setAccount(account);"},{"lineNumber":477,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":478,"author":{"gitId":"yuanxi1"},"content":" student.generateNewRegistrationKey();"},{"lineNumber":479,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":480,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":481,"author":{"gitId":"yuanxi1"},"content":" for (Notification notification : notifications) {"},{"lineNumber":482,"author":{"gitId":"yuanxi1"},"content":" notificationsMap.put(notification.getId(), notification);"},{"lineNumber":483,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":484,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":485,"author":{"gitId":"yuanxi1"},"content":" for (ReadNotification readNotification : readNotifications) {"},{"lineNumber":486,"author":{"gitId":"yuanxi1"},"content":" Account account \u003d accountsMap.get(readNotification.getAccount().getId());"},{"lineNumber":487,"author":{"gitId":"yuanxi1"},"content":" readNotification.setAccount(account);"},{"lineNumber":488,"author":{"gitId":"yuanxi1"},"content":" Notification notification \u003d notificationsMap.get(readNotification.getNotification().getId());"},{"lineNumber":489,"author":{"gitId":"yuanxi1"},"content":" readNotification.setNotification(notification);"},{"lineNumber":490,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":491,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":492,"author":{"gitId":"yuanxi1"},"content":" for (DeadlineExtension deadlineExtension : deadlineExtensions) {"},{"lineNumber":493,"author":{"gitId":"yuanxi1"},"content":" FeedbackSession session \u003d sessionsMap.get(deadlineExtension.getFeedbackSession().getId());"},{"lineNumber":494,"author":{"gitId":"yuanxi1"},"content":" deadlineExtension.setFeedbackSession(session);"},{"lineNumber":495,"author":{"gitId":"yuanxi1"},"content":" User user \u003d usersMap.get(deadlineExtension.getUser().getId());"},{"lineNumber":496,"author":{"gitId":"yuanxi1"},"content":" deadlineExtension.setUser(user);"},{"lineNumber":497,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":498,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":499,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":124,"-":375}},{"path":"src/main/java/teammates/sqllogic/core/FeedbackQuestionsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Set;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"import javax.annotation.Nullable;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackQuestionRecipient;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMcqQuestionDetails;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionType;"},{"lineNumber":22,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackQuestionsDb;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackMcqQuestion;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackMsqQuestion;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackQuestionUpdateRequest;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Handles operations related to feedback questions."},{"lineNumber":38,"author":{"gitId":"-"},"content":" *"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * @see FeedbackQuestion"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * @see FeedbackQuestionsDb"},{"lineNumber":41,"author":{"gitId":"-"},"content":" */"},{"lineNumber":42,"author":{"gitId":"-"},"content":"public final class FeedbackQuestionsLogic {"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" static final String USER_NAME_FOR_SELF \u003d \"Myself\";"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" private static final FeedbackQuestionsLogic instance \u003d new FeedbackQuestionsLogic();"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private FeedbackQuestionsDb fqDb;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic frLogic;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private FeedbackSessionsLogic feedbackSessionsLogic;"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static FeedbackQuestionsLogic inst() {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" void initLogicDependencies(FeedbackQuestionsDb fqDb, CoursesLogic coursesLogic, FeedbackResponsesLogic frLogic,"},{"lineNumber":64,"author":{"gitId":"-"},"content":" UsersLogic usersLogic, FeedbackSessionsLogic feedbackSessionsLogic) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.fqDb \u003d fqDb;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.coursesLogic \u003d coursesLogic;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" this.frLogic \u003d frLogic;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" this.feedbackSessionsLogic \u003d feedbackSessionsLogic;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Creates a new feedback question."},{"lineNumber":74,"author":{"gitId":"-"},"content":" *"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * @return the created question"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the question is invalid"},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":" * @throws EntityAlreadyExistsException if the question already exists"},{"lineNumber":78,"author":{"gitId":"-"},"content":" */"},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" public FeedbackQuestion createFeedbackQuestion(FeedbackQuestion feedbackQuestion)"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion createdQuestion \u003d fqDb.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsBefore \u003d getFeedbackQuestionsForSession(feedbackQuestion.getFeedbackSession());"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":" questionsBefore.remove(createdQuestion);"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" adjustQuestionNumbers(questionsBefore.size() + 1, createdQuestion.getQuestionNumber(), questionsBefore);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return createdQuestion;"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Gets an feedback question by feedback question id."},{"lineNumber":92,"author":{"gitId":"-"},"content":" * @param id of feedback question."},{"lineNumber":93,"author":{"gitId":"-"},"content":" * @return the specified feedback question."},{"lineNumber":94,"author":{"gitId":"-"},"content":" */"},{"lineNumber":95,"author":{"gitId":"-"},"content":" public FeedbackQuestion getFeedbackQuestion(UUID id) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" return fqDb.getFeedbackQuestion(id);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Gets a {@link List} of every FeedbackQuestion in the given session."},{"lineNumber":101,"author":{"gitId":"-"},"content":" */"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForSession(FeedbackSession feedbackSession) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d fqDb.getFeedbackQuestionsForSession(feedbackSession.getId());"},{"lineNumber":105,"author":{"gitId":"-"},"content":" questions.sort(null);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" // check whether the question numbers are consistent"},{"lineNumber":108,"author":{"gitId":"-"},"content":" if (questions.size() \u003e 1 \u0026\u0026 !areQuestionNumbersConsistent(questions)) {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" log.severe(feedbackSession.getCourse().getId() + \": \" + feedbackSession.getName()"},{"lineNumber":110,"author":{"gitId":"-"},"content":" + \" has invalid question numbers\");"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Checks if there are any questions for the given session that instructors can view/submit."},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public boolean hasFeedbackQuestionsForInstructors(List\u003cFeedbackQuestion\u003e fqs, boolean isCreator) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" boolean hasQuestions \u003d hasFeedbackQuestionsForGiverType(fqs, FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":121,"author":{"gitId":"-"},"content":" if (hasQuestions) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" if (isCreator) {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" hasQuestions \u003d hasFeedbackQuestionsForGiverType(fqs, FeedbackParticipantType.SELF);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" return hasQuestions;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Gets a {@code List} of all questions for the given session that instructors can view/submit."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForInstructors("},{"lineNumber":136,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, String userEmail) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":" questions.addAll("},{"lineNumber":140,"author":{"gitId":"-"},"content":" fqDb.getFeedbackQuestionsForGiverType("},{"lineNumber":141,"author":{"gitId":"-"},"content":" feedbackSession, FeedbackParticipantType.INSTRUCTORS));"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" if (feedbackSession.getCreatorEmail().equals(userEmail)) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" questions.addAll("},{"lineNumber":145,"author":{"gitId":"-"},"content":" fqDb.getFeedbackQuestionsForGiverType("},{"lineNumber":146,"author":{"gitId":"-"},"content":" feedbackSession, FeedbackParticipantType.SELF));"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * Gets a {@code List} of all questions for the given session that students can view/submit."},{"lineNumber":154,"author":{"gitId":"-"},"content":" */"},{"lineNumber":155,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForStudents(FeedbackSession feedbackSession) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" questions.addAll(fqDb.getFeedbackQuestionsForGiverType(feedbackSession, FeedbackParticipantType.STUDENTS));"},{"lineNumber":159,"author":{"gitId":"-"},"content":" questions.addAll(fqDb.getFeedbackQuestionsForGiverType(feedbackSession, FeedbackParticipantType.SELF));"},{"lineNumber":160,"author":{"gitId":"dishenggg"},"content":" questions.sort(null);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":165,"author":{"gitId":"-"},"content":" * Updates a feedback question."},{"lineNumber":166,"author":{"gitId":"-"},"content":" *"},{"lineNumber":167,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade adjust the question number of questions in the same session."},{"lineNumber":168,"author":{"gitId":"-"},"content":" *"},{"lineNumber":169,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade adjust the existing response of the question."},{"lineNumber":170,"author":{"gitId":"-"},"content":" *"},{"lineNumber":171,"author":{"gitId":"-"},"content":" * @return updated feedback question"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":173,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback question cannot be found"},{"lineNumber":174,"author":{"gitId":"-"},"content":" */"},{"lineNumber":175,"author":{"gitId":"-"},"content":" public FeedbackQuestion updateFeedbackQuestionCascade(UUID questionId, FeedbackQuestionUpdateRequest updateRequest)"},{"lineNumber":176,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d fqDb.getFeedbackQuestion(questionId);"},{"lineNumber":178,"author":{"gitId":"-"},"content":" if (question \u003d\u003d null) {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to update a feedback question that does not exist.\");"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" int oldQuestionNumber \u003d question.getQuestionNumber();"},{"lineNumber":183,"author":{"gitId":"-"},"content":" int newQuestionNumber \u003d updateRequest.getQuestionNumber();"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e previousQuestionsInSession \u003d new ArrayList\u003c\u003e();"},{"lineNumber":186,"author":{"gitId":"-"},"content":" if (oldQuestionNumber !\u003d newQuestionNumber) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" // get questions in session before update"},{"lineNumber":188,"author":{"gitId":"-"},"content":" previousQuestionsInSession \u003d getFeedbackQuestionsForSession(question.getFeedbackSession());"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" // update question"},{"lineNumber":192,"author":{"gitId":"-"},"content":" question.setQuestionNumber(updateRequest.getQuestionNumber());"},{"lineNumber":193,"author":{"gitId":"-"},"content":" question.setDescription(updateRequest.getQuestionDescription());"},{"lineNumber":194,"author":{"gitId":"-"},"content":" question.setQuestionDetails(updateRequest.getQuestionDetails());"},{"lineNumber":195,"author":{"gitId":"-"},"content":" question.setGiverType(updateRequest.getGiverType());"},{"lineNumber":196,"author":{"gitId":"-"},"content":" question.setRecipientType(updateRequest.getRecipientType());"},{"lineNumber":197,"author":{"gitId":"-"},"content":" question.setNumOfEntitiesToGiveFeedbackTo(updateRequest.getNumberOfEntitiesToGiveFeedbackTo());"},{"lineNumber":198,"author":{"gitId":"-"},"content":" question.setShowResponsesTo(updateRequest.getShowResponsesTo());"},{"lineNumber":199,"author":{"gitId":"-"},"content":" question.setShowGiverNameTo(updateRequest.getShowGiverNameTo());"},{"lineNumber":200,"author":{"gitId":"-"},"content":" question.setShowRecipientNameTo(updateRequest.getShowRecipientNameTo());"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" // validate questions (giver \u0026 recipient)"},{"lineNumber":203,"author":{"gitId":"-"},"content":" String err \u003d question.getQuestionDetailsCopy().validateGiverRecipientVisibility(question);"},{"lineNumber":204,"author":{"gitId":"-"},"content":" if (!err.isEmpty()) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(err);"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":" // validate questions (question details)"},{"lineNumber":208,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":209,"author":{"gitId":"-"},"content":" List\u003cString\u003e questionDetailsErrors \u003d questionDetails.validateQuestionDetails();"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" if (!questionDetailsErrors.isEmpty()) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(questionDetailsErrors.toString());"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":" if (oldQuestionNumber !\u003d newQuestionNumber) {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" // shift other feedback questions (generate an empty \"slot\")"},{"lineNumber":217,"author":{"gitId":"-"},"content":" adjustQuestionNumbers(oldQuestionNumber, newQuestionNumber, previousQuestionsInSession);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" // adjust responses"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (question.areResponseDeletionsRequiredForChanges(updateRequest.getGiverType(),"},{"lineNumber":222,"author":{"gitId":"-"},"content":" updateRequest.getRecipientType(), updateRequest.getQuestionDetails())) {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" frLogic.deleteFeedbackResponsesForQuestionCascade(question.getId());"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" return question;"},{"lineNumber":227,"author":{"gitId":"-"},"content":" }"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":230,"author":{"gitId":"-"},"content":" * Checks if there are any questions for the given session that students can view/submit."},{"lineNumber":231,"author":{"gitId":"-"},"content":" */"},{"lineNumber":232,"author":{"gitId":"-"},"content":" public boolean hasFeedbackQuestionsForStudents(List\u003cFeedbackQuestion\u003e fqs) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" return hasFeedbackQuestionsForGiverType(fqs, FeedbackParticipantType.STUDENTS)"},{"lineNumber":234,"author":{"gitId":"-"},"content":" || hasFeedbackQuestionsForGiverType(fqs, FeedbackParticipantType.TEAMS);"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":238,"author":{"gitId":"-"},"content":" * Checks if there is any feedback questions in a session in a course for the given giver type."},{"lineNumber":239,"author":{"gitId":"-"},"content":" */"},{"lineNumber":240,"author":{"gitId":"-"},"content":" public boolean hasFeedbackQuestionsForGiverType("},{"lineNumber":241,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e feedbackQuestions, FeedbackParticipantType giverType) {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" assert feedbackQuestions !\u003d null;"},{"lineNumber":243,"author":{"gitId":"-"},"content":" assert giverType !\u003d null;"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":" for (FeedbackQuestion fq : feedbackQuestions) {"},{"lineNumber":246,"author":{"gitId":"-"},"content":" if (fq.getGiverType() \u003d\u003d giverType) {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" // TODO can be removed once we are sure that question numbers will be consistent"},{"lineNumber":254,"author":{"gitId":"-"},"content":" private boolean areQuestionNumbersConsistent(List\u003cFeedbackQuestion\u003e questions) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" Set\u003cInteger\u003e questionNumbersInSession \u003d new HashSet\u003c\u003e();"},{"lineNumber":256,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" if (!questionNumbersInSession.add(question.getQuestionNumber())) {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" for (int i \u003d 1; i \u003c\u003d questions.size(); i++) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" if (!questionNumbersInSession.contains(i)) {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":272,"author":{"gitId":"-"},"content":" * Adjust questions between the old and new number,"},{"lineNumber":273,"author":{"gitId":"-"},"content":" * if the new number is smaller, then shift up (increase qn#) all questions in between."},{"lineNumber":274,"author":{"gitId":"-"},"content":" * if the new number is bigger, then shift down(decrease qn#) all questions in between."},{"lineNumber":275,"author":{"gitId":"-"},"content":" */"},{"lineNumber":276,"author":{"gitId":"-"},"content":" private void adjustQuestionNumbers(int oldQuestionNumber, int newQuestionNumber, List\u003cFeedbackQuestion\u003e questions) {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" if (oldQuestionNumber \u003e newQuestionNumber \u0026\u0026 oldQuestionNumber \u003e\u003d 1) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" for (int i \u003d oldQuestionNumber - 1; i \u003e\u003d newQuestionNumber; i--) {"},{"lineNumber":279,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d questions.get(i - 1);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" question.setQuestionNumber(question.getQuestionNumber() + 1);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":" } else if (oldQuestionNumber \u003c newQuestionNumber \u0026\u0026 oldQuestionNumber \u003c questions.size()) {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" for (int i \u003d oldQuestionNumber + 1; i \u003c\u003d newQuestionNumber; i++) {"},{"lineNumber":284,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d questions.get(i - 1);"},{"lineNumber":285,"author":{"gitId":"-"},"content":" question.setQuestionNumber(question.getQuestionNumber() - 1);"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":" }"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":291,"author":{"gitId":"-"},"content":" * Populates fields that need dynamic generation in a question."},{"lineNumber":292,"author":{"gitId":"-"},"content":" *"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * \u003cp\u003eCurrently, only MCQ/MSQ needs to generate choices dynamically.\u003c/p\u003e"},{"lineNumber":294,"author":{"gitId":"-"},"content":" *"},{"lineNumber":295,"author":{"gitId":"-"},"content":" * @param feedbackQuestion the question to populate"},{"lineNumber":296,"author":{"gitId":"-"},"content":" * @param courseId the ID of the course"},{"lineNumber":297,"author":{"gitId":"-"},"content":" * @param emailOfEntityDoingQuestion the email of the entity doing the question"},{"lineNumber":298,"author":{"gitId":"-"},"content":" * @param teamOfEntityDoingQuestion the team of the entity doing the question. If the entity is an instructor,"},{"lineNumber":299,"author":{"gitId":"-"},"content":" * it can be {@code null}."},{"lineNumber":300,"author":{"gitId":"-"},"content":" */"},{"lineNumber":301,"author":{"gitId":"-"},"content":" public void populateFieldsToGenerateInQuestion(FeedbackQuestion feedbackQuestion,"},{"lineNumber":302,"author":{"gitId":"-"},"content":" String courseId, String emailOfEntityDoingQuestion, String teamOfEntityDoingQuestion) {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" List\u003cString\u003e optionList;"},{"lineNumber":304,"author":{"gitId":"-"},"content":""},{"lineNumber":305,"author":{"gitId":"-"},"content":" FeedbackParticipantType generateOptionsFor;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" FeedbackQuestionType questionType \u003d feedbackQuestion.getQuestionDetailsCopy().getQuestionType();"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" if (questionType \u003d\u003d FeedbackQuestionType.MCQ) {"},{"lineNumber":309,"author":{"gitId":"-"},"content":" FeedbackMcqQuestionDetails feedbackMcqQuestionDetails \u003d"},{"lineNumber":310,"author":{"gitId":"-"},"content":" (FeedbackMcqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":311,"author":{"gitId":"-"},"content":" optionList \u003d feedbackMcqQuestionDetails.getMcqChoices();"},{"lineNumber":312,"author":{"gitId":"-"},"content":" generateOptionsFor \u003d feedbackMcqQuestionDetails.getGenerateOptionsFor();"},{"lineNumber":313,"author":{"gitId":"-"},"content":" } else if (questionType \u003d\u003d FeedbackQuestionType.MSQ) {"},{"lineNumber":314,"author":{"gitId":"-"},"content":" FeedbackMsqQuestionDetails feedbackMsqQuestionDetails \u003d"},{"lineNumber":315,"author":{"gitId":"-"},"content":" (FeedbackMsqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":316,"author":{"gitId":"-"},"content":" optionList \u003d feedbackMsqQuestionDetails.getMsqChoices();"},{"lineNumber":317,"author":{"gitId":"-"},"content":" generateOptionsFor \u003d feedbackMsqQuestionDetails.getGenerateOptionsFor();"},{"lineNumber":318,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" // other question types"},{"lineNumber":320,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" switch (generateOptionsFor) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":325,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":326,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":327,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":328,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":329,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentList;"},{"lineNumber":330,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.STUDENTS_IN_SAME_SECTION) {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" Student student \u003d"},{"lineNumber":332,"author":{"gitId":"-"},"content":" usersLogic.getStudentForEmail(courseId, emailOfEntityDoingQuestion);"},{"lineNumber":333,"author":{"gitId":"-"},"content":" studentList \u003d usersLogic.getStudentsForSection(student.getSectionName(), courseId);"},{"lineNumber":334,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":335,"author":{"gitId":"-"},"content":" studentList \u003d usersLogic.getStudentsForCourse(courseId);"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.STUDENTS_EXCLUDING_SELF) {"},{"lineNumber":339,"author":{"gitId":"-"},"content":" studentList.removeIf(studentInList -\u003e studentInList.getEmail().equals(emailOfEntityDoingQuestion));"},{"lineNumber":340,"author":{"gitId":"-"},"content":" }"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":" for (Student student : studentList) {"},{"lineNumber":343,"author":{"gitId":"dishenggg"},"content":" optionList.add(student.getName() + \" (\" + student.getTeam().getName() + \")\");"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" optionList.sort(null);"},{"lineNumber":347,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":348,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":349,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":350,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":351,"author":{"gitId":"-"},"content":" List\u003cString\u003e teams;"},{"lineNumber":352,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION) {"},{"lineNumber":353,"author":{"gitId":"-"},"content":" Student student \u003d"},{"lineNumber":354,"author":{"gitId":"-"},"content":" usersLogic.getStudentForEmail(courseId, emailOfEntityDoingQuestion);"},{"lineNumber":355,"author":{"gitId":"-"},"content":" teams \u003d coursesLogic.getTeamsForSection(student.getSection())"},{"lineNumber":356,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":357,"author":{"gitId":"-"},"content":" .map(team -\u003e { return team.getName(); })"},{"lineNumber":358,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":359,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" teams \u003d coursesLogic.getTeamsForCourse(courseId)"},{"lineNumber":361,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":362,"author":{"gitId":"-"},"content":" .map(team -\u003e { return team.getName(); })"},{"lineNumber":363,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.TEAMS_EXCLUDING_SELF) {"},{"lineNumber":367,"author":{"gitId":"-"},"content":" teams.removeIf(team -\u003e team.equals(teamOfEntityDoingQuestion));"},{"lineNumber":368,"author":{"gitId":"-"},"content":" }"},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":" for (String team : teams) {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" optionList.add(team);"},{"lineNumber":372,"author":{"gitId":"-"},"content":" }"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" optionList.sort(null);"},{"lineNumber":375,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":376,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":377,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":378,"author":{"gitId":"-"},"content":" if (teamOfEntityDoingQuestion !\u003d null) {"},{"lineNumber":379,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e teamMembers \u003d usersLogic.getStudentsForTeam(teamOfEntityDoingQuestion,"},{"lineNumber":380,"author":{"gitId":"-"},"content":" courseId);"},{"lineNumber":381,"author":{"gitId":"-"},"content":""},{"lineNumber":382,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.OWN_TEAM_MEMBERS) {"},{"lineNumber":383,"author":{"gitId":"-"},"content":" teamMembers.removeIf(teamMember -\u003e teamMember.getEmail().equals(emailOfEntityDoingQuestion));"},{"lineNumber":384,"author":{"gitId":"-"},"content":" }"},{"lineNumber":385,"author":{"gitId":"-"},"content":""},{"lineNumber":386,"author":{"gitId":"-"},"content":" teamMembers.forEach(teamMember -\u003e optionList.add(teamMember.getName()));"},{"lineNumber":387,"author":{"gitId":"-"},"content":""},{"lineNumber":388,"author":{"gitId":"-"},"content":" optionList.sort(null);"},{"lineNumber":389,"author":{"gitId":"-"},"content":" }"},{"lineNumber":390,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":391,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":392,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList \u003d"},{"lineNumber":393,"author":{"gitId":"-"},"content":" usersLogic.getInstructorsForCourse(courseId);"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructorList) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" optionList.add(instructor.getName());"},{"lineNumber":397,"author":{"gitId":"-"},"content":" }"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":" optionList.sort(null);"},{"lineNumber":400,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":401,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":402,"author":{"gitId":"-"},"content":" assert false : \"Trying to generate options for neither students, teams nor instructors\";"},{"lineNumber":403,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" }"},{"lineNumber":405,"author":{"gitId":"-"},"content":""},{"lineNumber":406,"author":{"gitId":"-"},"content":" if (questionType \u003d\u003d FeedbackQuestionType.MCQ) {"},{"lineNumber":407,"author":{"gitId":"-"},"content":" FeedbackMcqQuestionDetails feedbackMcqQuestionDetails \u003d"},{"lineNumber":408,"author":{"gitId":"-"},"content":" (FeedbackMcqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":409,"author":{"gitId":"-"},"content":" feedbackMcqQuestionDetails.setMcqChoices(optionList);"},{"lineNumber":410,"author":{"gitId":"-"},"content":" ((FeedbackMcqQuestion) feedbackQuestion).setFeedBackQuestionDetails(feedbackMcqQuestionDetails);"},{"lineNumber":411,"author":{"gitId":"-"},"content":" } else if (questionType \u003d\u003d FeedbackQuestionType.MSQ) {"},{"lineNumber":412,"author":{"gitId":"-"},"content":" FeedbackMsqQuestionDetails feedbackMsqQuestionDetails \u003d"},{"lineNumber":413,"author":{"gitId":"-"},"content":" (FeedbackMsqQuestionDetails) feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":414,"author":{"gitId":"-"},"content":" feedbackMsqQuestionDetails.setMsqChoices(optionList);"},{"lineNumber":415,"author":{"gitId":"-"},"content":" ((FeedbackMsqQuestion) feedbackQuestion).setFeedBackQuestionDetails(feedbackMsqQuestionDetails);"},{"lineNumber":416,"author":{"gitId":"-"},"content":" }"},{"lineNumber":417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":418,"author":{"gitId":"-"},"content":""},{"lineNumber":419,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":420,"author":{"gitId":"-"},"content":" * Gets the recipients of a feedback question including recipient section and team."},{"lineNumber":421,"author":{"gitId":"-"},"content":" *"},{"lineNumber":422,"author":{"gitId":"-"},"content":" * @param question the feedback question"},{"lineNumber":423,"author":{"gitId":"-"},"content":" * @param instructorGiver can be null for student giver"},{"lineNumber":424,"author":{"gitId":"-"},"content":" * @param studentGiver can be null for instructor giver"},{"lineNumber":425,"author":{"gitId":"-"},"content":" * @param courseRoster if provided, the function can be completed without touching database"},{"lineNumber":426,"author":{"gitId":"-"},"content":" * @return a Map of {@code FeedbackQuestionRecipient} as the value and identifier as the key."},{"lineNumber":427,"author":{"gitId":"-"},"content":" */"},{"lineNumber":428,"author":{"gitId":"-"},"content":" public Map\u003cString, FeedbackQuestionRecipient\u003e getRecipientsOfQuestion("},{"lineNumber":429,"author":{"gitId":"-"},"content":" FeedbackQuestion question,"},{"lineNumber":430,"author":{"gitId":"-"},"content":" @Nullable Instructor instructorGiver, @Nullable Student studentGiver,"},{"lineNumber":431,"author":{"gitId":"-"},"content":" @Nullable SqlCourseRoster courseRoster) {"},{"lineNumber":432,"author":{"gitId":"-"},"content":" assert instructorGiver !\u003d null || studentGiver !\u003d null;"},{"lineNumber":433,"author":{"gitId":"-"},"content":""},{"lineNumber":434,"author":{"gitId":"-"},"content":" String courseId \u003d question.getCourseId();"},{"lineNumber":435,"author":{"gitId":"-"},"content":""},{"lineNumber":436,"author":{"gitId":"-"},"content":" Map\u003cString, FeedbackQuestionRecipient\u003e recipients \u003d new HashMap\u003c\u003e();"},{"lineNumber":437,"author":{"gitId":"-"},"content":""},{"lineNumber":438,"author":{"gitId":"-"},"content":" boolean isStudentGiver \u003d studentGiver !\u003d null;"},{"lineNumber":439,"author":{"gitId":"-"},"content":" boolean isInstructorGiver \u003d instructorGiver !\u003d null;"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" String giverEmail \u003d \"\";"},{"lineNumber":442,"author":{"gitId":"-"},"content":" String giverTeam \u003d \"\";"},{"lineNumber":443,"author":{"gitId":"-"},"content":" String giverSection \u003d \"\";"},{"lineNumber":444,"author":{"gitId":"-"},"content":" if (isStudentGiver) {"},{"lineNumber":445,"author":{"gitId":"-"},"content":" giverEmail \u003d studentGiver.getEmail();"},{"lineNumber":446,"author":{"gitId":"-"},"content":" giverTeam \u003d studentGiver.getTeamName();"},{"lineNumber":447,"author":{"gitId":"-"},"content":" giverSection \u003d studentGiver.getSectionName();"},{"lineNumber":448,"author":{"gitId":"-"},"content":" } else if (isInstructorGiver) {"},{"lineNumber":449,"author":{"gitId":"-"},"content":" giverEmail \u003d instructorGiver.getEmail();"},{"lineNumber":450,"author":{"gitId":"-"},"content":" giverTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":451,"author":{"gitId":"-"},"content":" giverSection \u003d Const.DEFAULT_SECTION;"},{"lineNumber":452,"author":{"gitId":"-"},"content":" }"},{"lineNumber":453,"author":{"gitId":"-"},"content":""},{"lineNumber":454,"author":{"gitId":"-"},"content":" FeedbackParticipantType recipientType \u003d question.getRecipientType();"},{"lineNumber":455,"author":{"gitId":"-"},"content":" FeedbackParticipantType generateOptionsFor \u003d recipientType;"},{"lineNumber":456,"author":{"gitId":"-"},"content":""},{"lineNumber":457,"author":{"gitId":"-"},"content":" switch (recipientType) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":459,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":460,"author":{"gitId":"-"},"content":" recipients.put(giverTeam,"},{"lineNumber":461,"author":{"gitId":"-"},"content":" new FeedbackQuestionRecipient(giverTeam, giverTeam));"},{"lineNumber":462,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":463,"author":{"gitId":"-"},"content":" recipients.put(giverEmail,"},{"lineNumber":464,"author":{"gitId":"-"},"content":" new FeedbackQuestionRecipient(USER_NAME_FOR_SELF, giverEmail));"},{"lineNumber":465,"author":{"gitId":"-"},"content":" }"},{"lineNumber":466,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":467,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":468,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":469,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":470,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentList;"},{"lineNumber":471,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":472,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.STUDENTS_IN_SAME_SECTION) {"},{"lineNumber":473,"author":{"gitId":"-"},"content":" studentList \u003d usersLogic.getStudentsForSection(giverSection, courseId);"},{"lineNumber":474,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":475,"author":{"gitId":"-"},"content":" studentList \u003d usersLogic.getStudentsForCourse(courseId);"},{"lineNumber":476,"author":{"gitId":"-"},"content":" }"},{"lineNumber":477,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":478,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.STUDENTS_IN_SAME_SECTION) {"},{"lineNumber":479,"author":{"gitId":"-"},"content":" final String finalGiverSection \u003d giverSection;"},{"lineNumber":480,"author":{"gitId":"-"},"content":" studentList \u003d courseRoster.getStudents().stream()"},{"lineNumber":481,"author":{"gitId":"-"},"content":" .filter(studentAttributes -\u003e studentAttributes.getSectionName()"},{"lineNumber":482,"author":{"gitId":"-"},"content":" .equals(finalGiverSection)).collect(Collectors.toList());"},{"lineNumber":483,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":484,"author":{"gitId":"-"},"content":" studentList \u003d courseRoster.getStudents();"},{"lineNumber":485,"author":{"gitId":"-"},"content":" }"},{"lineNumber":486,"author":{"gitId":"-"},"content":" }"},{"lineNumber":487,"author":{"gitId":"-"},"content":" for (Student student : studentList) {"},{"lineNumber":488,"author":{"gitId":"-"},"content":" if (isInstructorGiver \u0026\u0026 !instructorGiver.isAllowedForPrivilege("},{"lineNumber":489,"author":{"gitId":"-"},"content":" student.getSectionName(), question.getFeedbackSession().getName(),"},{"lineNumber":490,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_SUBMIT_SESSION_IN_SECTIONS)) {"},{"lineNumber":491,"author":{"gitId":"-"},"content":" // instructor can only see students in allowed sections for him/her"},{"lineNumber":492,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":493,"author":{"gitId":"-"},"content":" }"},{"lineNumber":494,"author":{"gitId":"-"},"content":" // Ensure student does not evaluate him/herself if it\u0027s STUDENTS_EXCLUDING_SELF or"},{"lineNumber":495,"author":{"gitId":"-"},"content":" // STUDENTS_IN_SAME_SECTION"},{"lineNumber":496,"author":{"gitId":"-"},"content":" if (giverEmail.equals(student.getEmail()) \u0026\u0026 generateOptionsFor !\u003d FeedbackParticipantType.STUDENTS) {"},{"lineNumber":497,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":498,"author":{"gitId":"-"},"content":" }"},{"lineNumber":499,"author":{"gitId":"-"},"content":" recipients.put(student.getEmail(), new FeedbackQuestionRecipient(student.getName(), student.getEmail(),"},{"lineNumber":500,"author":{"gitId":"-"},"content":" student.getSectionName(), student.getTeamName()));"},{"lineNumber":501,"author":{"gitId":"-"},"content":" }"},{"lineNumber":502,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":503,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":504,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsInCourse;"},{"lineNumber":505,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":506,"author":{"gitId":"-"},"content":" instructorsInCourse \u003d usersLogic.getInstructorsForCourse(courseId);"},{"lineNumber":507,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" instructorsInCourse \u003d courseRoster.getInstructors();"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" for (Instructor instr : instructorsInCourse) {"},{"lineNumber":511,"author":{"gitId":"-"},"content":" // remove hidden instructors for students"},{"lineNumber":512,"author":{"gitId":"-"},"content":" if (isStudentGiver \u0026\u0026 !instr.isDisplayedToStudents()) {"},{"lineNumber":513,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":514,"author":{"gitId":"-"},"content":" }"},{"lineNumber":515,"author":{"gitId":"-"},"content":" // Ensure instructor does not evaluate himself"},{"lineNumber":516,"author":{"gitId":"-"},"content":" if (!giverEmail.equals(instr.getEmail())) {"},{"lineNumber":517,"author":{"gitId":"-"},"content":" recipients.put(instr.getEmail(),"},{"lineNumber":518,"author":{"gitId":"-"},"content":" new FeedbackQuestionRecipient(instr.getName(), instr.getEmail()));"},{"lineNumber":519,"author":{"gitId":"-"},"content":" }"},{"lineNumber":520,"author":{"gitId":"-"},"content":" }"},{"lineNumber":521,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":522,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":523,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":524,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":525,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cStudent\u003e\u003e teamToTeamMembersTable;"},{"lineNumber":526,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e teamStudents;"},{"lineNumber":527,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":528,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION) {"},{"lineNumber":529,"author":{"gitId":"-"},"content":" teamStudents \u003d usersLogic.getStudentsForSection(giverSection, courseId);"},{"lineNumber":530,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":531,"author":{"gitId":"-"},"content":" teamStudents \u003d usersLogic.getStudentsForCourse(courseId);"},{"lineNumber":532,"author":{"gitId":"-"},"content":" }"},{"lineNumber":533,"author":{"gitId":"-"},"content":" teamToTeamMembersTable \u003d SqlCourseRoster.buildTeamToMembersTable(teamStudents);"},{"lineNumber":534,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":535,"author":{"gitId":"-"},"content":" if (generateOptionsFor \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION) {"},{"lineNumber":536,"author":{"gitId":"-"},"content":" final String finalGiverSection \u003d giverSection;"},{"lineNumber":537,"author":{"gitId":"-"},"content":" teamStudents \u003d courseRoster.getStudents().stream()"},{"lineNumber":538,"author":{"gitId":"-"},"content":" .filter(student -\u003e student.getSectionName().equals(finalGiverSection))"},{"lineNumber":539,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":540,"author":{"gitId":"-"},"content":" teamToTeamMembersTable \u003d SqlCourseRoster.buildTeamToMembersTable(teamStudents);"},{"lineNumber":541,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":542,"author":{"gitId":"-"},"content":" teamToTeamMembersTable \u003d courseRoster.getTeamToMembersTable();"},{"lineNumber":543,"author":{"gitId":"-"},"content":" }"},{"lineNumber":544,"author":{"gitId":"-"},"content":" }"},{"lineNumber":545,"author":{"gitId":"-"},"content":" for (Map.Entry\u003cString, List\u003cStudent\u003e\u003e team : teamToTeamMembersTable.entrySet()) {"},{"lineNumber":546,"author":{"gitId":"-"},"content":" if (isInstructorGiver \u0026\u0026 !instructorGiver.isAllowedForPrivilege("},{"lineNumber":547,"author":{"gitId":"-"},"content":" team.getValue().iterator().next().getSectionName(),"},{"lineNumber":548,"author":{"gitId":"-"},"content":" question.getFeedbackSession().getName(),"},{"lineNumber":549,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_SUBMIT_SESSION_IN_SECTIONS)) {"},{"lineNumber":550,"author":{"gitId":"-"},"content":" // instructor can only see teams in allowed sections for him/her"},{"lineNumber":551,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":552,"author":{"gitId":"-"},"content":" }"},{"lineNumber":553,"author":{"gitId":"-"},"content":" // Ensure student(\u0027s team) does not evaluate own team if it\u0027s TEAMS_EXCLUDING_SELF or"},{"lineNumber":554,"author":{"gitId":"-"},"content":" // TEAMS_IN_SAME_SECTION"},{"lineNumber":555,"author":{"gitId":"-"},"content":" if (giverTeam.equals(team.getKey()) \u0026\u0026 generateOptionsFor !\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":556,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":557,"author":{"gitId":"-"},"content":" }"},{"lineNumber":558,"author":{"gitId":"-"},"content":" // recipientEmail doubles as team name in this case."},{"lineNumber":559,"author":{"gitId":"-"},"content":" recipients.put(team.getKey(), new FeedbackQuestionRecipient(team.getKey(), team.getKey()));"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":562,"author":{"gitId":"-"},"content":" case OWN_TEAM:"},{"lineNumber":563,"author":{"gitId":"-"},"content":" recipients.put(giverTeam, new FeedbackQuestionRecipient(giverTeam, giverTeam));"},{"lineNumber":564,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":565,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":566,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students;"},{"lineNumber":567,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":568,"author":{"gitId":"-"},"content":" students \u003d usersLogic.getStudentsForTeam(giverTeam, courseId);"},{"lineNumber":569,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":570,"author":{"gitId":"-"},"content":" students \u003d courseRoster.getTeamToMembersTable().getOrDefault(giverTeam, Collections.emptyList());"},{"lineNumber":571,"author":{"gitId":"-"},"content":" }"},{"lineNumber":572,"author":{"gitId":"-"},"content":" for (Student student : students) {"},{"lineNumber":573,"author":{"gitId":"-"},"content":" if (!student.getEmail().equals(giverEmail)) {"},{"lineNumber":574,"author":{"gitId":"-"},"content":" recipients.put(student.getEmail(), new FeedbackQuestionRecipient(student.getName(), student.getEmail(),"},{"lineNumber":575,"author":{"gitId":"-"},"content":" student.getSectionName(), student.getTeamName()));"},{"lineNumber":576,"author":{"gitId":"-"},"content":" }"},{"lineNumber":577,"author":{"gitId":"-"},"content":" }"},{"lineNumber":578,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":579,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":580,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e teamMembers;"},{"lineNumber":581,"author":{"gitId":"-"},"content":" if (courseRoster \u003d\u003d null) {"},{"lineNumber":582,"author":{"gitId":"-"},"content":" teamMembers \u003d usersLogic.getStudentsForTeam(giverTeam, courseId);"},{"lineNumber":583,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":584,"author":{"gitId":"-"},"content":" teamMembers \u003d courseRoster.getTeamToMembersTable().getOrDefault(giverTeam, Collections.emptyList());"},{"lineNumber":585,"author":{"gitId":"-"},"content":" }"},{"lineNumber":586,"author":{"gitId":"-"},"content":" for (Student student : teamMembers) {"},{"lineNumber":587,"author":{"gitId":"-"},"content":" // accepts self feedback too"},{"lineNumber":588,"author":{"gitId":"-"},"content":" recipients.put(student.getEmail(), new FeedbackQuestionRecipient(student.getName(), student.getEmail(),"},{"lineNumber":589,"author":{"gitId":"-"},"content":" student.getSectionName(), student.getTeamName()));"},{"lineNumber":590,"author":{"gitId":"-"},"content":" }"},{"lineNumber":591,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":592,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":593,"author":{"gitId":"-"},"content":" recipients.put(Const.GENERAL_QUESTION,"},{"lineNumber":594,"author":{"gitId":"-"},"content":" new FeedbackQuestionRecipient(Const.GENERAL_QUESTION, Const.GENERAL_QUESTION));"},{"lineNumber":595,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":596,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":597,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":598,"author":{"gitId":"-"},"content":" }"},{"lineNumber":599,"author":{"gitId":"-"},"content":" return recipients;"},{"lineNumber":600,"author":{"gitId":"-"},"content":" }"},{"lineNumber":601,"author":{"gitId":"-"},"content":""},{"lineNumber":602,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":603,"author":{"gitId":"-"},"content":" * Returns true if a session has question in a specific giverType."},{"lineNumber":604,"author":{"gitId":"-"},"content":" */"},{"lineNumber":605,"author":{"gitId":"-"},"content":" public boolean sessionHasQuestionsForGiverType("},{"lineNumber":606,"author":{"gitId":"-"},"content":" String feedbackSessionName, String courseId, FeedbackParticipantType giverType) {"},{"lineNumber":607,"author":{"gitId":"-"},"content":" return fqDb.hasFeedbackQuestionsForGiverType(feedbackSessionName, courseId, giverType);"},{"lineNumber":608,"author":{"gitId":"-"},"content":" }"},{"lineNumber":609,"author":{"gitId":"-"},"content":""},{"lineNumber":610,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":611,"author":{"gitId":"-"},"content":" * Returns true if a session has question in either STUDENTS type or TEAMS type."},{"lineNumber":612,"author":{"gitId":"-"},"content":" */"},{"lineNumber":613,"author":{"gitId":"-"},"content":" public boolean sessionHasQuestionsForStudent(String feedbackSessionName, String courseId) {"},{"lineNumber":614,"author":{"gitId":"-"},"content":" return fqDb.hasFeedbackQuestionsForGiverType(feedbackSessionName, courseId, FeedbackParticipantType.STUDENTS)"},{"lineNumber":615,"author":{"gitId":"-"},"content":" || fqDb.hasFeedbackQuestionsForGiverType(feedbackSessionName, courseId, FeedbackParticipantType.TEAMS);"},{"lineNumber":616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":619,"author":{"gitId":"-"},"content":" * Deletes a feedback question cascade its responses and comments."},{"lineNumber":620,"author":{"gitId":"-"},"content":" *"},{"lineNumber":621,"author":{"gitId":"-"},"content":" * \u003cp\u003eSilently fail if question does not exist."},{"lineNumber":622,"author":{"gitId":"-"},"content":" */"},{"lineNumber":623,"author":{"gitId":"-"},"content":" public void deleteFeedbackQuestionCascade(UUID feedbackQuestionId) {"},{"lineNumber":624,"author":{"gitId":"-"},"content":" fqDb.deleteFeedbackQuestion(feedbackQuestionId);"},{"lineNumber":625,"author":{"gitId":"-"},"content":" }"},{"lineNumber":626,"author":{"gitId":"-"},"content":""},{"lineNumber":627,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":628,"author":{"gitId":"-"},"content":" * Filters the feedback questions in a course, with specified question type."},{"lineNumber":629,"author":{"gitId":"-"},"content":" * @param courseId the course to search from"},{"lineNumber":630,"author":{"gitId":"-"},"content":" * @param questionType the question type to search on"},{"lineNumber":631,"author":{"gitId":"-"},"content":" * @return a list of filtered questions"},{"lineNumber":632,"author":{"gitId":"-"},"content":" */"},{"lineNumber":633,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionForCourseWithType("},{"lineNumber":634,"author":{"gitId":"-"},"content":" String courseId, FeedbackQuestionType questionType) {"},{"lineNumber":635,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e feedbackSessions \u003d feedbackSessionsLogic.getFeedbackSessionsForCourse(courseId);"},{"lineNumber":636,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e feedbackQuestions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":637,"author":{"gitId":"-"},"content":""},{"lineNumber":638,"author":{"gitId":"-"},"content":" for (FeedbackSession session : feedbackSessions) {"},{"lineNumber":639,"author":{"gitId":"-"},"content":" feedbackQuestions.addAll(getFeedbackQuestionsForSession(session));"},{"lineNumber":640,"author":{"gitId":"-"},"content":" }"},{"lineNumber":641,"author":{"gitId":"-"},"content":""},{"lineNumber":642,"author":{"gitId":"-"},"content":" return feedbackQuestions"},{"lineNumber":643,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":644,"author":{"gitId":"-"},"content":" .filter(q -\u003e q.getQuestionDetailsCopy().getQuestionType().equals(questionType))"},{"lineNumber":645,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":646,"author":{"gitId":"-"},"content":" }"},{"lineNumber":647,"author":{"gitId":"-"},"content":""},{"lineNumber":648,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":649,"author":{"gitId":"xenosf"},"content":" * Builds a complete giver to recipient map for a {@code relatedQuestion}."},{"lineNumber":650,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":651,"author":{"gitId":"xenosf"},"content":" * @param relatedQuestion The question to be considered"},{"lineNumber":652,"author":{"gitId":"xenosf"},"content":" * @param courseRoster the roster in the course"},{"lineNumber":653,"author":{"gitId":"xenosf"},"content":" * @return a map from giver to recipient for the question."},{"lineNumber":654,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":655,"author":{"gitId":"xenosf"},"content":" public Map\u003cString, Set\u003cString\u003e\u003e buildCompleteGiverRecipientMap("},{"lineNumber":656,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion, SqlCourseRoster courseRoster) {"},{"lineNumber":657,"author":{"gitId":"xenosf"},"content":" Map\u003cString, Set\u003cString\u003e\u003e completeGiverRecipientMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":658,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":659,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e possibleGiverEmails \u003d getPossibleGivers(relatedQuestion, courseRoster);"},{"lineNumber":660,"author":{"gitId":"xenosf"},"content":" for (String possibleGiverEmail : possibleGiverEmails) {"},{"lineNumber":661,"author":{"gitId":"xenosf"},"content":" switch (relatedQuestion.getGiverType()) {"},{"lineNumber":662,"author":{"gitId":"xenosf"},"content":" case STUDENTS:"},{"lineNumber":663,"author":{"gitId":"xenosf"},"content":" Student studentGiver \u003d courseRoster.getStudentForEmail(possibleGiverEmail);"},{"lineNumber":664,"author":{"gitId":"xenosf"},"content":" completeGiverRecipientMap"},{"lineNumber":665,"author":{"gitId":"xenosf"},"content":" .computeIfAbsent(possibleGiverEmail, key -\u003e new HashSet\u003c\u003e())"},{"lineNumber":666,"author":{"gitId":"xenosf"},"content":" .addAll(getRecipientsOfQuestion("},{"lineNumber":667,"author":{"gitId":"xenosf"},"content":" relatedQuestion, null, studentGiver, courseRoster).keySet());"},{"lineNumber":668,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":669,"author":{"gitId":"xenosf"},"content":" case TEAMS:"},{"lineNumber":670,"author":{"gitId":"xenosf"},"content":" Student oneTeamMember \u003d"},{"lineNumber":671,"author":{"gitId":"xenosf"},"content":" courseRoster.getTeamToMembersTable().get(possibleGiverEmail).iterator().next();"},{"lineNumber":672,"author":{"gitId":"xenosf"},"content":" completeGiverRecipientMap"},{"lineNumber":673,"author":{"gitId":"xenosf"},"content":" .computeIfAbsent(possibleGiverEmail, key -\u003e new HashSet\u003c\u003e())"},{"lineNumber":674,"author":{"gitId":"xenosf"},"content":" .addAll(getRecipientsOfQuestion("},{"lineNumber":675,"author":{"gitId":"xenosf"},"content":" relatedQuestion, null, oneTeamMember, courseRoster).keySet());"},{"lineNumber":676,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":677,"author":{"gitId":"xenosf"},"content":" case INSTRUCTORS:"},{"lineNumber":678,"author":{"gitId":"xenosf"},"content":" case SELF:"},{"lineNumber":679,"author":{"gitId":"xenosf"},"content":" Instructor instructorGiver \u003d courseRoster.getInstructorForEmail(possibleGiverEmail);"},{"lineNumber":680,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":681,"author":{"gitId":"xenosf"},"content":" // only happens when a session creator quits their course"},{"lineNumber":682,"author":{"gitId":"xenosf"},"content":" if (instructorGiver \u003d\u003d null) {"},{"lineNumber":683,"author":{"gitId":"xenosf"},"content":" instructorGiver \u003d new Instructor("},{"lineNumber":684,"author":{"gitId":"xenosf"},"content":" relatedQuestion.getCourse(),"},{"lineNumber":685,"author":{"gitId":"xenosf"},"content":" USER_NAME_FOR_SELF,"},{"lineNumber":686,"author":{"gitId":"xenosf"},"content":" possibleGiverEmail,"},{"lineNumber":687,"author":{"gitId":"xenosf"},"content":" false,"},{"lineNumber":688,"author":{"gitId":"xenosf"},"content":" USER_NAME_FOR_SELF,"},{"lineNumber":689,"author":{"gitId":"xenosf"},"content":" null,"},{"lineNumber":690,"author":{"gitId":"xenosf"},"content":" null"},{"lineNumber":691,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":692,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":693,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":694,"author":{"gitId":"xenosf"},"content":" completeGiverRecipientMap"},{"lineNumber":695,"author":{"gitId":"xenosf"},"content":" .computeIfAbsent(possibleGiverEmail, key -\u003e new HashSet\u003c\u003e())"},{"lineNumber":696,"author":{"gitId":"xenosf"},"content":" .addAll(getRecipientsOfQuestion("},{"lineNumber":697,"author":{"gitId":"xenosf"},"content":" relatedQuestion, instructorGiver, null, courseRoster).keySet());"},{"lineNumber":698,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":699,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":700,"author":{"gitId":"xenosf"},"content":" log.severe(\"Invalid giver type specified\");"},{"lineNumber":701,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":702,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":703,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":704,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":705,"author":{"gitId":"xenosf"},"content":" return completeGiverRecipientMap;"},{"lineNumber":706,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":707,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":708,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":709,"author":{"gitId":"xenosf"},"content":" * Gets possible giver identifiers for a feedback question."},{"lineNumber":710,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":711,"author":{"gitId":"xenosf"},"content":" * @param fq the feedback question"},{"lineNumber":712,"author":{"gitId":"xenosf"},"content":" * @param courseRoster roster of all students and instructors"},{"lineNumber":713,"author":{"gitId":"xenosf"},"content":" * @return a list of giver identifier"},{"lineNumber":714,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":715,"author":{"gitId":"xenosf"},"content":" private List\u003cString\u003e getPossibleGivers("},{"lineNumber":716,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq, SqlCourseRoster courseRoster) {"},{"lineNumber":717,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType giverType \u003d fq.getGiverType();"},{"lineNumber":718,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e possibleGivers \u003d new ArrayList\u003c\u003e();"},{"lineNumber":719,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":720,"author":{"gitId":"xenosf"},"content":" switch (giverType) {"},{"lineNumber":721,"author":{"gitId":"xenosf"},"content":" case STUDENTS:"},{"lineNumber":722,"author":{"gitId":"xenosf"},"content":" possibleGivers \u003d courseRoster.getStudents()"},{"lineNumber":723,"author":{"gitId":"xenosf"},"content":" .stream()"},{"lineNumber":724,"author":{"gitId":"xenosf"},"content":" .map(Student::getEmail)"},{"lineNumber":725,"author":{"gitId":"xenosf"},"content":" .collect(Collectors.toList());"},{"lineNumber":726,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":727,"author":{"gitId":"xenosf"},"content":" case INSTRUCTORS:"},{"lineNumber":728,"author":{"gitId":"xenosf"},"content":" possibleGivers \u003d courseRoster.getInstructors()"},{"lineNumber":729,"author":{"gitId":"xenosf"},"content":" .stream()"},{"lineNumber":730,"author":{"gitId":"xenosf"},"content":" .map(Instructor::getEmail)"},{"lineNumber":731,"author":{"gitId":"xenosf"},"content":" .collect(Collectors.toList());"},{"lineNumber":732,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":733,"author":{"gitId":"xenosf"},"content":" case TEAMS:"},{"lineNumber":734,"author":{"gitId":"xenosf"},"content":" possibleGivers \u003d new ArrayList\u003c\u003e(courseRoster.getTeamToMembersTable().keySet());"},{"lineNumber":735,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":736,"author":{"gitId":"xenosf"},"content":" case SELF:"},{"lineNumber":737,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d"},{"lineNumber":738,"author":{"gitId":"xenosf"},"content":" feedbackSessionsLogic.getFeedbackSession(fq.getFeedbackSessionName(), fq.getCourseId());"},{"lineNumber":739,"author":{"gitId":"xenosf"},"content":" possibleGivers \u003d Collections.singletonList(feedbackSession.getCreatorEmail());"},{"lineNumber":740,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":741,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":742,"author":{"gitId":"xenosf"},"content":" log.severe(\"Invalid giver type specified\");"},{"lineNumber":743,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":744,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":745,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":746,"author":{"gitId":"xenosf"},"content":" return possibleGivers;"},{"lineNumber":747,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":748,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":749,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":6,"xenosf":101,"dishenggg":2,"-":640}},{"path":"src/main/java/teammates/sqllogic/core/FeedbackResponseCommentsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import javax.annotation.Nullable;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackResponseCommentUpdateRequest;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Handles operations related to feedback response comments."},{"lineNumber":23,"author":{"gitId":"-"},"content":" *"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * @see FeedbackResponseComment"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * @see FeedbackResponseCommentsDb"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public final class FeedbackResponseCommentsLogic {"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final FeedbackResponseCommentsLogic instance \u003d new FeedbackResponseCommentsLogic();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsDb frcDb;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsLogic() {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static FeedbackResponseCommentsLogic inst() {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Initialize dependencies for {@code FeedbackResponseCommentsLogic}."},{"lineNumber":42,"author":{"gitId":"-"},"content":" */"},{"lineNumber":43,"author":{"gitId":"-"},"content":" void initLogicDependencies(FeedbackResponseCommentsDb frcDb) {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.frcDb \u003d frcDb;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Gets an feedback response comment by feedback response comment id."},{"lineNumber":49,"author":{"gitId":"-"},"content":" * @param id of feedback response comment."},{"lineNumber":50,"author":{"gitId":"-"},"content":" * @return the specified feedback response comment."},{"lineNumber":51,"author":{"gitId":"-"},"content":" */"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseComment(Long id) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return frcDb.getFeedbackResponseComment(id);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":57,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback response comments for a response."},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":59,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentForResponse(UUID feedbackResponseId) {"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" return frcDb.getFeedbackResponseCommentsForResponse(feedbackResponseId);"},{"lineNumber":61,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":62,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":63,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" * Gets all response comments for a response."},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":66,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForResponse(UUID feedbackResponseId) {"},{"lineNumber":67,"author":{"gitId":"domoberzin"},"content":" assert feedbackResponseId !\u003d null;"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" return frcDb.getFeedbackResponseCommentsForResponse(feedbackResponseId);"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Gets the comment associated with the response."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseCommentForResponseFromParticipant("},{"lineNumber":76,"author":{"gitId":"-"},"content":" UUID feedbackResponseId) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return frcDb.getFeedbackResponseCommentForResponseFromParticipant(feedbackResponseId);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Creates a feedback response comment."},{"lineNumber":82,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the comment alreadty exists"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the comment is invalid"},{"lineNumber":84,"author":{"gitId":"-"},"content":" */"},{"lineNumber":85,"author":{"gitId":"-"},"content":" public FeedbackResponseComment createFeedbackResponseComment(FeedbackResponseComment frc)"},{"lineNumber":86,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return frcDb.createFeedbackResponseComment(frc);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Deletes a feedbackResponseComment."},{"lineNumber":92,"author":{"gitId":"-"},"content":" */"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponseComment(Long frcId) {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" frcDb.deleteFeedbackResponseComment(frcId);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Updates a feedback response comment by {@link FeedbackResponseComment}."},{"lineNumber":99,"author":{"gitId":"-"},"content":" *"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * @return updated comment"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment cannot be found"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public FeedbackResponseComment updateFeedbackResponseComment(FeedbackResponseComment feedbackResponseComment)"},{"lineNumber":105,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" return frcDb.updateFeedbackResponseComment(feedbackResponseComment);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Updates a feedback response comment."},{"lineNumber":112,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment does not exist"},{"lineNumber":113,"author":{"gitId":"-"},"content":" */"},{"lineNumber":114,"author":{"gitId":"-"},"content":" public FeedbackResponseComment updateFeedbackResponseComment(Long frcId,"},{"lineNumber":115,"author":{"gitId":"-"},"content":" FeedbackResponseCommentUpdateRequest updateRequest, String updaterEmail)"},{"lineNumber":116,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" FeedbackResponseComment comment \u003d frcDb.getFeedbackResponseComment(frcId);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" if (comment \u003d\u003d null) {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to update a feedback response comment that does not exist.\");"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" comment.setCommentText(updateRequest.getCommentText());"},{"lineNumber":123,"author":{"gitId":"-"},"content":" comment.setShowCommentTo(updateRequest.getShowCommentTo());"},{"lineNumber":124,"author":{"gitId":"-"},"content":" comment.setShowGiverNameTo(updateRequest.getShowGiverNameTo());"},{"lineNumber":125,"author":{"gitId":"-"},"content":" comment.setLastEditorEmail(updaterEmail);"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" return comment;"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" * Updates all feedback response comments with new emails."},{"lineNumber":132,"author":{"gitId":"-"},"content":" */"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void updateFeedbackResponseCommentsEmails(String courseId, String oldEmail, String updatedEmail) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" frcDb.updateGiverEmailOfFeedbackResponseComments(courseId, oldEmail, updatedEmail);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" frcDb.updateLastEditorEmailOfFeedbackResponseComments(courseId, oldEmail, updatedEmail);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":" * Updates all feedback response comments with new sections."},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" public void updateFeedbackResponseCommentsForResponse(FeedbackResponse response)"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponseComment\u003e comments \u003d getFeedbackResponseCommentForResponse(response.getId());"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponseComment comment : comments) {"},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" comment.setGiverSection(response.getGiverSection());"},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" comment.setRecipientSection(response.getRecipientSection());"},{"lineNumber":147,"author":{"gitId":"domoberzin"},"content":" frcDb.updateFeedbackResponseComment(comment);"},{"lineNumber":148,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" * Gets all feedback response comments for session in a section."},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" * @param courseId the course ID of the feedback session"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" * @param feedbackSessionName the feedback session name"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" * @param sectionName if null, will retrieve all comments in the session"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" * @return a list of feedback response comments"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentForSessionInSection("},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, @Nullable String sectionName) {"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" if (sectionName \u003d\u003d null) {"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" return frcDb.getFeedbackResponseCommentsForSession(courseId, feedbackSessionName);"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" return frcDb.getFeedbackResponseCommentsForSessionInSection(courseId, feedbackSessionName, sectionName);"},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" * Gets all feedback response comments for a question in a section."},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" * @param questionId the ID of the question"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" * @param sectionName if null, will retrieve all comments for the question"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" * @return a list of feedback response comments"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentForQuestionInSection("},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" UUID questionId, @Nullable String sectionName) {"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" if (sectionName \u003d\u003d null) {"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" return frcDb.getFeedbackResponseCommentsForQuestion(questionId);"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" return frcDb.getFeedbackResponseCommentsForQuestionInSection(questionId, sectionName);"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" * Verifies whether the comment is visible to certain user."},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" * @return true/false"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" public boolean checkIsResponseCommentVisibleForUser(String userEmail, boolean isInstructor,"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" Student student, Set\u003cString\u003e studentsEmailInTeam, FeedbackResponse response,"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion, FeedbackResponseComment relatedComment) {"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" if (response \u003d\u003d null || relatedQuestion \u003d\u003d null) {"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" boolean isVisibilityFollowingFeedbackQuestion \u003d relatedComment.getIsVisibilityFollowingFeedbackQuestion();"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" boolean isVisibleToGiver \u003d isVisibilityFollowingFeedbackQuestion"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" || relatedComment.checkIsVisibleTo(FeedbackParticipantType.GIVER);"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" boolean isVisibleToUser \u003d checkIsVisibleToUser(userEmail, response, relatedQuestion, relatedComment,"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" isVisibleToGiver, isInstructor, !isInstructor);"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" boolean isVisibleToUserTeam \u003d checkIsVisibleToUserTeam(student, studentsEmailInTeam, response,"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" relatedQuestion, relatedComment, !isInstructor);"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" return isVisibleToUser || isVisibleToUserTeam;"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" private boolean checkIsVisibleToUserTeam(Student student, Set\u003cString\u003e studentsEmailInTeam,"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response, FeedbackQuestion relatedQuestion,"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment relatedComment, boolean isUserStudent) {"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" boolean isUserInResponseRecipientTeamAndRelatedResponseCommentVisibleToRecipients \u003d"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" isUserStudent"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 relatedQuestion.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 checkIsResponseCommentVisibleTo(relatedQuestion, relatedComment,"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType.RECEIVER)"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 response.getRecipient().equals(student.getTeamName());"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" boolean isUserInResponseGiverTeamAndRelatedResponseCommentVisibleToGiversTeamMembers \u003d"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" (relatedQuestion.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" || checkIsResponseCommentVisibleTo(relatedQuestion, relatedComment,"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType.OWN_TEAM_MEMBERS))"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (studentsEmailInTeam.contains(response.getGiver())"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" || isUserStudent \u0026\u0026 student.getTeamName().equals(response.getGiver()));"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" boolean isUserInResponseRecipientTeamAndRelatedResponseCommentVisibleToRecipientsTeamMembers \u003d"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" checkIsResponseCommentVisibleTo(relatedQuestion, relatedComment,"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType.RECEIVER_TEAM_MEMBERS)"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 studentsEmailInTeam.contains(response.getRecipient());"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" return isUserInResponseRecipientTeamAndRelatedResponseCommentVisibleToRecipients"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" || isUserInResponseGiverTeamAndRelatedResponseCommentVisibleToGiversTeamMembers"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":" || isUserInResponseRecipientTeamAndRelatedResponseCommentVisibleToRecipientsTeamMembers;"},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":" private boolean checkIsVisibleToUser(String userEmail, FeedbackResponse response,"},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion, FeedbackResponseComment relatedComment,"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" boolean isVisibleToGiver, boolean isUserInstructor, boolean isUserStudent) {"},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" boolean isUserInstructorAndRelatedResponseCommentVisibleToInstructors \u003d"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" isUserInstructor \u0026\u0026 checkIsResponseCommentVisibleTo(relatedQuestion, relatedComment,"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" boolean isUserResponseRecipientAndRelatedResponseCommentVisibleToRecipients \u003d"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" response.getRecipient().equals(userEmail) \u0026\u0026 checkIsResponseCommentVisibleTo(relatedQuestion,"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" relatedComment, FeedbackParticipantType.RECEIVER);"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" boolean isUserResponseGiverAndRelatedResponseCommentVisibleToGivers \u003d"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" response.getGiver().equals(userEmail) \u0026\u0026 isVisibleToGiver;"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" boolean isUserRelatedResponseCommentGiver \u003d relatedComment.getGiver().equals(userEmail);"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" boolean isUserStudentAndRelatedResponseCommentVisibleToStudents \u003d"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" isUserStudent \u0026\u0026 checkIsResponseCommentVisibleTo(relatedQuestion,"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" relatedComment, FeedbackParticipantType.STUDENTS);"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" return isUserInstructorAndRelatedResponseCommentVisibleToInstructors"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" || isUserResponseRecipientAndRelatedResponseCommentVisibleToRecipients"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" || isUserResponseGiverAndRelatedResponseCommentVisibleToGivers"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" || isUserRelatedResponseCommentGiver"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" || isUserStudentAndRelatedResponseCommentVisibleToStudents;"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" private boolean checkIsResponseCommentVisibleTo(FeedbackQuestion relatedQuestion,"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment relatedComment,"},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType viewerType) {"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" boolean isVisibilityFollowingFeedbackQuestion \u003d relatedComment.getIsVisibilityFollowingFeedbackQuestion();"},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" return isVisibilityFollowingFeedbackQuestion"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" ? relatedQuestion.isResponseVisibleTo(viewerType)"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" : relatedComment.checkIsVisibleTo(viewerType);"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" * Returns true if the comment\u0027s giver name is visible to certain user."},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" public boolean checkIsNameVisibleToUser(FeedbackResponseComment comment, FeedbackResponse response,"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" String userEmail, SqlCourseRoster roster) {"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackParticipantType\u003e showNameTo \u003d comment.getShowGiverNameTo();"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" //in the old ver, name is always visible"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" if (showNameTo \u003d\u003d null || comment.getIsVisibilityFollowingFeedbackQuestion()) {"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":" //comment giver can always see"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" if (userEmail.equals(comment.getGiver())) {"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" return checkIsFeedbackParticipantNameVisibleToUser(response, userEmail, roster, showNameTo);"},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" private boolean checkIsFeedbackParticipantNameVisibleToUser(FeedbackResponse response,"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" String userEmail, SqlCourseRoster roster, List\u003cFeedbackParticipantType\u003e showNameTo) {"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" String responseGiverTeam \u003d \"giverTeam\";"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" if (roster.getStudentForEmail(response.getGiver()) !\u003d null) {"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" responseGiverTeam \u003d roster.getStudentForEmail(response.getGiver()).getTeamName();"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" String responseRecipientTeam \u003d \"recipientTeam\";"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" if (roster.getStudentForEmail(response.getRecipient()) !\u003d null) {"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" responseRecipientTeam \u003d roster.getStudentForEmail(response.getRecipient()).getTeamName();"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" String currentUserTeam \u003d \"currentUserTeam\";"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" if (roster.getStudentForEmail(userEmail) !\u003d null) {"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":" currentUserTeam \u003d roster.getStudentForEmail(userEmail).getTeamName();"},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" for (FeedbackParticipantType type : showNameTo) {"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" switch (type) {"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" case INSTRUCTORS:"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" if (roster.getInstructorForEmail(userEmail) !\u003d null) {"},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" if (responseGiverTeam.equals(currentUserTeam)) {"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" case RECEIVER:"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" if (userEmail.equals(response.getRecipient())) {"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":" case RECEIVER_TEAM_MEMBERS:"},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" if (responseRecipientTeam.equals(currentUserTeam)) {"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" case STUDENTS:"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" if (roster.getStudentForEmail(userEmail) !\u003d null) {"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" case GIVER:"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":" if (userEmail.equals(response.getGiver())) {"},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":343,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":32,"xenosf":199,"-":112}},{"path":"src/main/java/teammates/sqllogic/core/FeedbackResponsesLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.Collections;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.HashMap;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import javax.annotation.Nullable;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionType;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankRecipientsResponseDetails;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.RequestTracer;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponsesDb;"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.responses.FeedbackMissingResponse;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackRankRecipientsResponse;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" * Handles operations related to feedback responses."},{"lineNumber":40,"author":{"gitId":"-"},"content":" *"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * @see FeedbackResponse"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * @see FeedbackResponsesDb"},{"lineNumber":43,"author":{"gitId":"-"},"content":" */"},{"lineNumber":44,"author":{"gitId":"-"},"content":"public final class FeedbackResponsesLogic {"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" private static final FeedbackResponsesLogic instance \u003d new FeedbackResponsesLogic();"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" private FeedbackResponsesDb frDb;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic;"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" private FeedbackResponseCommentsLogic frcLogic;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static FeedbackResponsesLogic inst() {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":62,"author":{"gitId":"-"},"content":" * Initialize dependencies for {@code FeedbackResponsesLogic}."},{"lineNumber":63,"author":{"gitId":"-"},"content":" */"},{"lineNumber":64,"author":{"gitId":"domoberzin"},"content":" void initLogicDependencies(FeedbackResponsesDb frDb,"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" UsersLogic usersLogic, FeedbackQuestionsLogic fqLogic, FeedbackResponseCommentsLogic frcLogic) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.frDb \u003d frDb;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" this.fqLogic \u003d fqLogic;"},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" this.frcLogic \u003d frcLogic;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Gets a feedbackResponse or null if it does not exist."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public FeedbackResponse getFeedbackResponse(UUID frId) {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponse(frId);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * Returns true if the responses of the question are visible to students."},{"lineNumber":81,"author":{"gitId":"-"},"content":" */"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public boolean isResponseOfFeedbackQuestionVisibleToStudent(FeedbackQuestion question) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" if (question.isResponseVisibleTo(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":" boolean isStudentRecipientType \u003d"},{"lineNumber":87,"author":{"gitId":"-"},"content":" question.getRecipientType().equals(FeedbackParticipantType.STUDENTS)"},{"lineNumber":88,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.STUDENTS_EXCLUDING_SELF)"},{"lineNumber":89,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.STUDENTS_IN_SAME_SECTION)"},{"lineNumber":90,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.OWN_TEAM_MEMBERS)"},{"lineNumber":91,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.OWN_TEAM_MEMBERS_INCLUDING_SELF)"},{"lineNumber":92,"author":{"gitId":"-"},"content":" || question.getRecipientType().equals(FeedbackParticipantType.GIVER)"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getGiverType().equals(FeedbackParticipantType.STUDENTS);"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" if ((isStudentRecipientType || question.getRecipientType().isTeam())"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u0026\u0026 question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)) {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":100,"author":{"gitId":"-"},"content":" || question.isResponseVisibleTo(FeedbackParticipantType.OWN_TEAM_MEMBERS)) {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Returns true if the responses of the question are visible to instructors."},{"lineNumber":108,"author":{"gitId":"-"},"content":" */"},{"lineNumber":109,"author":{"gitId":"-"},"content":" public boolean isResponseOfFeedbackQuestionVisibleToInstructor(FeedbackQuestion question) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return question.isResponseVisibleTo(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Checks whether a giver has responded a session."},{"lineNumber":115,"author":{"gitId":"-"},"content":" */"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public boolean hasGiverRespondedForSession(String giverIdentifier, List\u003cFeedbackQuestion\u003e questions) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assert questions !\u003d null;"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questions) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" boolean hasResponse \u003d question"},{"lineNumber":121,"author":{"gitId":"-"},"content":" .getFeedbackResponses()"},{"lineNumber":122,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .anyMatch(response -\u003e response.getGiver().equals(giverIdentifier));"},{"lineNumber":124,"author":{"gitId":"-"},"content":" if (hasResponse) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Checks whether a giver has responded a session."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public boolean hasGiverRespondedForSession(String giver, String feedbackSessionName, String courseId) {"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" return frDb.hasResponsesFromGiverInSession(giver, feedbackSessionName, courseId);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Creates a feedback response."},{"lineNumber":142,"author":{"gitId":"-"},"content":" * @return the created response"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the response is not valid"},{"lineNumber":144,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the response already exist"},{"lineNumber":145,"author":{"gitId":"-"},"content":" */"},{"lineNumber":146,"author":{"gitId":"-"},"content":" public FeedbackResponse createFeedbackResponse(FeedbackResponse feedbackResponse)"},{"lineNumber":147,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" return frDb.createFeedbackResponse(feedbackResponse);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":152,"author":{"gitId":"-"},"content":" * Get existing feedback responses from instructor for the given question."},{"lineNumber":153,"author":{"gitId":"-"},"content":" */"},{"lineNumber":154,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromInstructorForQuestion("},{"lineNumber":155,"author":{"gitId":"-"},"content":" FeedbackQuestion question, Instructor instructor) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":157,"author":{"gitId":"-"},"content":" question.getId(), instructor.getEmail());"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * Get existing feedback responses from student or his team for the given"},{"lineNumber":162,"author":{"gitId":"-"},"content":" * question."},{"lineNumber":163,"author":{"gitId":"-"},"content":" */"},{"lineNumber":164,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromStudentOrTeamForQuestion("},{"lineNumber":165,"author":{"gitId":"-"},"content":" FeedbackQuestion question, Student student) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return getFeedbackResponsesFromTeamForQuestion("},{"lineNumber":168,"author":{"gitId":"-"},"content":" question.getId(), question.getCourseId(), student.getTeamName(), null);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesFromGiverForQuestion(question.getId(), student.getEmail());"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponse\u003e getFeedbackResponsesFromTeamForQuestion("},{"lineNumber":174,"author":{"gitId":"-"},"content":" UUID feedbackQuestionId, String courseId, String teamName, @Nullable SqlCourseRoster courseRoster) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":177,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsInTeam \u003d courseRoster \u003d\u003d null"},{"lineNumber":178,"author":{"gitId":"-"},"content":" ? usersLogic.getStudentsForTeam(teamName, courseId) : courseRoster.getTeamToMembersTable().get(teamName);"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" for (Student student : studentsInTeam) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" responses.addAll(frDb.getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":182,"author":{"gitId":"-"},"content":" feedbackQuestionId, student.getEmail()));"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" responses.addAll(frDb.getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":186,"author":{"gitId":"-"},"content":" feedbackQuestionId, teamName));"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return responses;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":191,"author":{"gitId":"-"},"content":" * Updates a non-null feedback response by {@link FeedbackResponse}."},{"lineNumber":192,"author":{"gitId":"-"},"content":" *"},{"lineNumber":193,"author":{"gitId":"-"},"content":" * \u003cp\u003eCascade updates its associated feedback response comment"},{"lineNumber":194,"author":{"gitId":"-"},"content":" * (e.g. associated response ID, giverSection and recipientSection)."},{"lineNumber":195,"author":{"gitId":"-"},"content":" *"},{"lineNumber":196,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf the giver/recipient field is changed, the response is updated by recreating the response"},{"lineNumber":197,"author":{"gitId":"-"},"content":" * as question-giver-recipient is the primary key."},{"lineNumber":198,"author":{"gitId":"-"},"content":" *"},{"lineNumber":199,"author":{"gitId":"-"},"content":" * @return updated feedback response"},{"lineNumber":200,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":201,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the comment cannot be found"},{"lineNumber":202,"author":{"gitId":"-"},"content":" */"},{"lineNumber":203,"author":{"gitId":"-"},"content":" public FeedbackResponse updateFeedbackResponseCascade(FeedbackResponse feedbackResponse)"},{"lineNumber":204,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" FeedbackResponse oldResponse \u003d frDb.getFeedbackResponse(feedbackResponse.getId());"},{"lineNumber":207,"author":{"gitId":"-"},"content":" FeedbackResponse newResponse \u003d frDb.updateFeedbackResponse(feedbackResponse);"},{"lineNumber":208,"author":{"gitId":"-"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":" boolean isGiverSectionChanged \u003d !oldResponse.getGiverSection().equals(newResponse.getGiverSection());"},{"lineNumber":210,"author":{"gitId":"-"},"content":" boolean isRecipientSectionChanged \u003d !oldResponse.getRecipientSection().equals(newResponse.getRecipientSection());"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" if (isGiverSectionChanged || isRecipientSectionChanged) {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseComment\u003e oldResponseComments \u003d"},{"lineNumber":214,"author":{"gitId":"-"},"content":" frcLogic.getFeedbackResponseCommentForResponse(oldResponse.getId());"},{"lineNumber":215,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment oldResponseComment : oldResponseComments) {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" if (isGiverSectionChanged) {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" oldResponseComment.setGiverSection(newResponse.getGiverSection());"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" if (isRecipientSectionChanged) {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" oldResponseComment.setRecipientSection(newResponse.getRecipientSection());"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":" frcLogic.updateFeedbackResponseComment(oldResponseComment);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" }"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":" return newResponse;"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":233,"author":{"gitId":"-"},"content":" * Deletes a feedback response cascade its associated feedback response comments."},{"lineNumber":234,"author":{"gitId":"-"},"content":" * Implicitly makes use of CascadeType.REMOVE."},{"lineNumber":235,"author":{"gitId":"-"},"content":" */"},{"lineNumber":236,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesAndCommentsCascade(FeedbackResponse feedbackResponse) {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponse(feedbackResponse);"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":241,"author":{"gitId":"-"},"content":" * Deletes all feedback responses of a question cascade its associated comments."},{"lineNumber":242,"author":{"gitId":"-"},"content":" */"},{"lineNumber":243,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesForQuestionCascade(UUID feedbackQuestionId) {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" // delete all responses, comments of the question"},{"lineNumber":245,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponsesForQuestionCascade(feedbackQuestionId);"},{"lineNumber":246,"author":{"gitId":"-"},"content":" }"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a question."},{"lineNumber":250,"author":{"gitId":"-"},"content":" */"},{"lineNumber":251,"author":{"gitId":"-"},"content":" public boolean areThereResponsesForQuestion(UUID questionId) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" return frDb.areThereResponsesForQuestion(questionId);"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":""},{"lineNumber":255,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":256,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a course."},{"lineNumber":257,"author":{"gitId":"-"},"content":" */"},{"lineNumber":258,"author":{"gitId":"-"},"content":" public boolean hasResponsesForCourse(String courseId) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" return frDb.hasResponsesForCourse(courseId);"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":264,"author":{"gitId":"-"},"content":" * Deletes all feedback responses involved an entity, cascade its associated comments."},{"lineNumber":265,"author":{"gitId":"-"},"content":" * Deletion will automatically be cascaded to each feedback response\u0027s comments,"},{"lineNumber":266,"author":{"gitId":"-"},"content":" * handled by Hibernate using the OnDelete annotation."},{"lineNumber":267,"author":{"gitId":"-"},"content":" */"},{"lineNumber":268,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesForCourseCascade(String courseId, String entityEmail) {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" // delete responses from the entity"},{"lineNumber":270,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responsesFromStudent \u003d"},{"lineNumber":271,"author":{"gitId":"-"},"content":" getFeedbackResponsesFromGiverForCourse(courseId, entityEmail);"},{"lineNumber":272,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responsesFromStudent) {"},{"lineNumber":273,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponse(response);"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" // delete responses to the entity"},{"lineNumber":277,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responsesToStudent \u003d"},{"lineNumber":278,"author":{"gitId":"-"},"content":" getFeedbackResponsesForRecipientForCourse(courseId, entityEmail);"},{"lineNumber":279,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responsesToStudent) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" frDb.deleteFeedbackResponse(response);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":285,"author":{"gitId":"-"},"content":" * Gets all responses given by a user for a course."},{"lineNumber":286,"author":{"gitId":"-"},"content":" */"},{"lineNumber":287,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForCourse("},{"lineNumber":288,"author":{"gitId":"-"},"content":" String courseId, String giver) {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" assert giver !\u003d null;"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesFromGiverForCourse(courseId, giver);"},{"lineNumber":293,"author":{"gitId":"-"},"content":" }"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":296,"author":{"gitId":"-"},"content":" * Gets all responses received by a user for a course."},{"lineNumber":297,"author":{"gitId":"-"},"content":" */"},{"lineNumber":298,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForCourse("},{"lineNumber":299,"author":{"gitId":"-"},"content":" String courseId, String recipient) {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" assert recipient !\u003d null;"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesForRecipientForCourse(courseId, recipient);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":307,"author":{"gitId":"-"},"content":" * Gets all responses given by a user for a question."},{"lineNumber":308,"author":{"gitId":"-"},"content":" */"},{"lineNumber":309,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":310,"author":{"gitId":"-"},"content":" UUID feedbackQuestionId, String giver) {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" return frDb.getFeedbackResponsesFromGiverForQuestion(feedbackQuestionId, giver);"},{"lineNumber":312,"author":{"gitId":"-"},"content":" }"},{"lineNumber":313,"author":{"gitId":"-"},"content":""},{"lineNumber":314,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" * Gets all responses for a question."},{"lineNumber":316,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":317,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForQuestion(UUID feedbackQuestionId) {"},{"lineNumber":318,"author":{"gitId":"domoberzin"},"content":" return frDb.getResponsesForQuestion(feedbackQuestionId);"},{"lineNumber":319,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":320,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":322,"author":{"gitId":"-"},"content":" * Updates the relevant responses before the deletion of a student."},{"lineNumber":323,"author":{"gitId":"-"},"content":" * This method takes care of the following:"},{"lineNumber":324,"author":{"gitId":"-"},"content":" * Making existing responses of \u0027rank recipient question\u0027 consistent."},{"lineNumber":325,"author":{"gitId":"-"},"content":" */"},{"lineNumber":326,"author":{"gitId":"-"},"content":" public void updateRankRecipientQuestionResponsesAfterDeletingStudent(String courseId) {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e filteredQuestions \u003d"},{"lineNumber":328,"author":{"gitId":"-"},"content":" fqLogic.getFeedbackQuestionForCourseWithType(courseId, FeedbackQuestionType.RANK_RECIPIENTS);"},{"lineNumber":329,"author":{"gitId":"-"},"content":" SqlCourseRoster roster \u003d new SqlCourseRoster("},{"lineNumber":330,"author":{"gitId":"-"},"content":" usersLogic.getStudentsForCourse(courseId),"},{"lineNumber":331,"author":{"gitId":"-"},"content":" usersLogic.getInstructorsForCourse(courseId));"},{"lineNumber":332,"author":{"gitId":"-"},"content":""},{"lineNumber":333,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : filteredQuestions) {"},{"lineNumber":334,"author":{"gitId":"-"},"content":" makeRankRecipientQuestionResponsesConsistent(question, roster);"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":339,"author":{"gitId":"-"},"content":" * Makes the rankings by one giver in the response to a \u0027rank recipient question\u0027 consistent, after deleting a"},{"lineNumber":340,"author":{"gitId":"-"},"content":" * student."},{"lineNumber":341,"author":{"gitId":"-"},"content":" * \u003cp\u003e"},{"lineNumber":342,"author":{"gitId":"-"},"content":" * Fails silently if the question type is not \u0027rank recipient question\u0027."},{"lineNumber":343,"author":{"gitId":"-"},"content":" * \u003c/p\u003e"},{"lineNumber":344,"author":{"gitId":"-"},"content":" */"},{"lineNumber":345,"author":{"gitId":"-"},"content":" private void makeRankRecipientQuestionResponsesConsistent("},{"lineNumber":346,"author":{"gitId":"-"},"content":" FeedbackQuestion question, SqlCourseRoster roster) {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" assert !question.getQuestionDetailsCopy().getQuestionType()"},{"lineNumber":348,"author":{"gitId":"-"},"content":" .equals(FeedbackQuestionType.RANK_RECIPIENTS);"},{"lineNumber":349,"author":{"gitId":"-"},"content":""},{"lineNumber":350,"author":{"gitId":"-"},"content":" FeedbackParticipantType giverType \u003d question.getGiverType();"},{"lineNumber":351,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":352,"author":{"gitId":"-"},"content":" int numberOfRecipients \u003d 0;"},{"lineNumber":353,"author":{"gitId":"-"},"content":""},{"lineNumber":354,"author":{"gitId":"-"},"content":" switch (giverType) {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":356,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":357,"author":{"gitId":"-"},"content":" for (Instructor instructor : roster.getInstructors()) {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" numberOfRecipients \u003d"},{"lineNumber":359,"author":{"gitId":"-"},"content":" fqLogic.getRecipientsOfQuestion(question, instructor, null, roster).size();"},{"lineNumber":360,"author":{"gitId":"-"},"content":" responses \u003d getFeedbackResponsesFromGiverForQuestion(question.getId(), instructor.getEmail());"},{"lineNumber":361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":362,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":363,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":364,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":365,"author":{"gitId":"-"},"content":" Student firstMemberOfTeam;"},{"lineNumber":366,"author":{"gitId":"-"},"content":" String team;"},{"lineNumber":367,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cStudent\u003e\u003e teams \u003d roster.getTeamToMembersTable();"},{"lineNumber":368,"author":{"gitId":"-"},"content":" for (Map.Entry\u003cString, List\u003cStudent\u003e\u003e entry : teams.entrySet()) {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" team \u003d entry.getKey();"},{"lineNumber":370,"author":{"gitId":"-"},"content":" firstMemberOfTeam \u003d entry.getValue().get(0);"},{"lineNumber":371,"author":{"gitId":"-"},"content":" numberOfRecipients \u003d"},{"lineNumber":372,"author":{"gitId":"-"},"content":" fqLogic.getRecipientsOfQuestion(question, null, firstMemberOfTeam, roster).size();"},{"lineNumber":373,"author":{"gitId":"-"},"content":" responses \u003d"},{"lineNumber":374,"author":{"gitId":"-"},"content":" getFeedbackResponsesFromTeamForQuestion("},{"lineNumber":375,"author":{"gitId":"-"},"content":" question.getId(), question.getCourseId(), team, roster);"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":378,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":379,"author":{"gitId":"-"},"content":" for (Student student : roster.getStudents()) {"},{"lineNumber":380,"author":{"gitId":"-"},"content":" numberOfRecipients \u003d"},{"lineNumber":381,"author":{"gitId":"-"},"content":" fqLogic.getRecipientsOfQuestion(question, null, student, roster).size();"},{"lineNumber":382,"author":{"gitId":"-"},"content":" responses \u003d getFeedbackResponsesFromGiverForQuestion(question.getId(), student.getEmail());"},{"lineNumber":383,"author":{"gitId":"-"},"content":" }"},{"lineNumber":384,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":385,"author":{"gitId":"-"},"content":" }"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" updateFeedbackResponsesForRankRecipientQuestions(responses, numberOfRecipients);"},{"lineNumber":388,"author":{"gitId":"-"},"content":" }"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":391,"author":{"gitId":"-"},"content":" * Updates responses for \u0027rank recipient question\u0027, such that the ranks in the responses are consistent."},{"lineNumber":392,"author":{"gitId":"-"},"content":" * @param responses responses to one feedback question, from one giver"},{"lineNumber":393,"author":{"gitId":"-"},"content":" * @param maxRank the maximum rank in each response"},{"lineNumber":394,"author":{"gitId":"-"},"content":" */"},{"lineNumber":395,"author":{"gitId":"-"},"content":" private void updateFeedbackResponsesForRankRecipientQuestions("},{"lineNumber":396,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responses, int maxRank) {"},{"lineNumber":397,"author":{"gitId":"-"},"content":" if (maxRank \u003c\u003d 0) {"},{"lineNumber":398,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":399,"author":{"gitId":"-"},"content":" }"},{"lineNumber":400,"author":{"gitId":"-"},"content":""},{"lineNumber":401,"author":{"gitId":"-"},"content":" FeedbackRankRecipientsResponseDetails responseDetails;"},{"lineNumber":402,"author":{"gitId":"-"},"content":" boolean[] isRankUsed;"},{"lineNumber":403,"author":{"gitId":"-"},"content":" boolean isUpdateNeeded \u003d false;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" int answer;"},{"lineNumber":405,"author":{"gitId":"-"},"content":" int maxUnusedRank \u003d 0;"},{"lineNumber":406,"author":{"gitId":"-"},"content":""},{"lineNumber":407,"author":{"gitId":"-"},"content":" // Checks whether update is needed."},{"lineNumber":408,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":409,"author":{"gitId":"-"},"content":" if (!(response instanceof FeedbackRankRecipientsResponse)) {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":411,"author":{"gitId":"-"},"content":" }"},{"lineNumber":412,"author":{"gitId":"-"},"content":" responseDetails \u003d ((FeedbackRankRecipientsResponse) response).getAnswer();"},{"lineNumber":413,"author":{"gitId":"-"},"content":" answer \u003d responseDetails.getAnswer();"},{"lineNumber":414,"author":{"gitId":"-"},"content":" if (answer \u003e maxRank) {"},{"lineNumber":415,"author":{"gitId":"-"},"content":" isUpdateNeeded \u003d true;"},{"lineNumber":416,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":417,"author":{"gitId":"-"},"content":" }"},{"lineNumber":418,"author":{"gitId":"-"},"content":" }"},{"lineNumber":419,"author":{"gitId":"-"},"content":""},{"lineNumber":420,"author":{"gitId":"-"},"content":" // Updates repeatedly, until all responses are consistent."},{"lineNumber":421,"author":{"gitId":"-"},"content":" while (isUpdateNeeded) {"},{"lineNumber":422,"author":{"gitId":"-"},"content":" isUpdateNeeded \u003d false; // will be set to true again once invalid rank appears after update"},{"lineNumber":423,"author":{"gitId":"-"},"content":" isRankUsed \u003d new boolean[maxRank];"},{"lineNumber":424,"author":{"gitId":"-"},"content":""},{"lineNumber":425,"author":{"gitId":"-"},"content":" // Obtains the largest unused rank."},{"lineNumber":426,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" if (!(response instanceof FeedbackRankRecipientsResponse)) {"},{"lineNumber":428,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":429,"author":{"gitId":"-"},"content":" }"},{"lineNumber":430,"author":{"gitId":"-"},"content":" responseDetails \u003d ((FeedbackRankRecipientsResponse) response).getAnswer();"},{"lineNumber":431,"author":{"gitId":"-"},"content":" answer \u003d responseDetails.getAnswer();"},{"lineNumber":432,"author":{"gitId":"-"},"content":" if (answer \u003c\u003d maxRank) {"},{"lineNumber":433,"author":{"gitId":"-"},"content":" isRankUsed[answer - 1] \u003d true;"},{"lineNumber":434,"author":{"gitId":"-"},"content":" }"},{"lineNumber":435,"author":{"gitId":"-"},"content":" }"},{"lineNumber":436,"author":{"gitId":"-"},"content":" for (int i \u003d maxRank - 1; i \u003e\u003d 0; i--) {"},{"lineNumber":437,"author":{"gitId":"-"},"content":" if (!isRankUsed[i]) {"},{"lineNumber":438,"author":{"gitId":"-"},"content":" maxUnusedRank \u003d i + 1;"},{"lineNumber":439,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":440,"author":{"gitId":"-"},"content":" }"},{"lineNumber":441,"author":{"gitId":"-"},"content":" }"},{"lineNumber":442,"author":{"gitId":"-"},"content":" assert maxUnusedRank \u003e 0; // if update is needed, there must be at least one unused rank"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":445,"author":{"gitId":"-"},"content":" if (response instanceof FeedbackRankRecipientsResponse) {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" responseDetails \u003d ((FeedbackRankRecipientsResponse) response).getAnswer();"},{"lineNumber":447,"author":{"gitId":"-"},"content":" answer \u003d responseDetails.getAnswer();"},{"lineNumber":448,"author":{"gitId":"-"},"content":" if (answer \u003e maxUnusedRank) {"},{"lineNumber":449,"author":{"gitId":"-"},"content":" answer--;"},{"lineNumber":450,"author":{"gitId":"-"},"content":" responseDetails.setAnswer(answer);"},{"lineNumber":451,"author":{"gitId":"-"},"content":" }"},{"lineNumber":452,"author":{"gitId":"-"},"content":" if (answer \u003e maxRank) {"},{"lineNumber":453,"author":{"gitId":"-"},"content":" isUpdateNeeded \u003d true; // sets the flag to true if the updated rank is still invalid"},{"lineNumber":454,"author":{"gitId":"-"},"content":" }"},{"lineNumber":455,"author":{"gitId":"-"},"content":" }"},{"lineNumber":456,"author":{"gitId":"-"},"content":" }"},{"lineNumber":457,"author":{"gitId":"-"},"content":" }"},{"lineNumber":458,"author":{"gitId":"-"},"content":" }"},{"lineNumber":459,"author":{"gitId":"-"},"content":""},{"lineNumber":460,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":461,"author":{"gitId":"domoberzin"},"content":" * Updates responses for a student when his team changes."},{"lineNumber":462,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003e"},{"lineNumber":463,"author":{"gitId":"domoberzin"},"content":" * This is done by deleting responses that are no longer relevant to him in his new team."},{"lineNumber":464,"author":{"gitId":"domoberzin"},"content":" * \u003c/p\u003e"},{"lineNumber":465,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":466,"author":{"gitId":"domoberzin"},"content":" public void updateFeedbackResponsesForChangingTeam(Course course, String newEmail, Team newTeam, Team oldTeam)"},{"lineNumber":467,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":468,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":469,"author":{"gitId":"domoberzin"},"content":" FeedbackQuestion qn;"},{"lineNumber":470,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":471,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":472,"author":{"gitId":"domoberzin"},"content":" getFeedbackResponsesFromGiverForCourse(course.getId(), newEmail);"},{"lineNumber":473,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":474,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesFromUser) {"},{"lineNumber":475,"author":{"gitId":"domoberzin"},"content":" qn \u003d fqLogic.getFeedbackQuestion(response.getId());"},{"lineNumber":476,"author":{"gitId":"domoberzin"},"content":" if (qn !\u003d null \u0026\u0026 qn.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":477,"author":{"gitId":"domoberzin"},"content":" deleteFeedbackResponsesForQuestionCascade(qn.getId());"},{"lineNumber":478,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":479,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":480,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":481,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":482,"author":{"gitId":"domoberzin"},"content":" getFeedbackResponsesForRecipientForCourse(course.getId(), newEmail);"},{"lineNumber":483,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":484,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesToUser) {"},{"lineNumber":485,"author":{"gitId":"domoberzin"},"content":" qn \u003d fqLogic.getFeedbackQuestion(response.getId());"},{"lineNumber":486,"author":{"gitId":"domoberzin"},"content":" if (qn !\u003d null \u0026\u0026 qn.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":487,"author":{"gitId":"domoberzin"},"content":" deleteFeedbackResponsesForQuestionCascade(qn.getId());"},{"lineNumber":488,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":489,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":490,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":491,"author":{"gitId":"domoberzin"},"content":" boolean isOldTeamEmpty \u003d usersLogic.getStudentsForTeam(oldTeam.getName(), course.getId()).isEmpty();"},{"lineNumber":492,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":493,"author":{"gitId":"domoberzin"},"content":" if (isOldTeamEmpty) {"},{"lineNumber":494,"author":{"gitId":"domoberzin"},"content":" deleteFeedbackResponsesForCourseCascade(course.getId(), oldTeam.getName());"},{"lineNumber":495,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":496,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":497,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":498,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":499,"author":{"gitId":"domoberzin"},"content":" * Updates responses for a student when his section changes."},{"lineNumber":500,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":501,"author":{"gitId":"domoberzin"},"content":" public void updateFeedbackResponsesForChangingSection(Course course, String newEmail, Section newSection)"},{"lineNumber":502,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":503,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":504,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":505,"author":{"gitId":"domoberzin"},"content":" getFeedbackResponsesFromGiverForCourse(course.getId(), newEmail);"},{"lineNumber":506,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":507,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesFromUser) {"},{"lineNumber":508,"author":{"gitId":"domoberzin"},"content":" response.setGiverSection(newSection);"},{"lineNumber":509,"author":{"gitId":"domoberzin"},"content":" frDb.updateFeedbackResponse(response);"},{"lineNumber":510,"author":{"gitId":"domoberzin"},"content":" frcLogic.updateFeedbackResponseCommentsForResponse(response);"},{"lineNumber":511,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":512,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":513,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":514,"author":{"gitId":"domoberzin"},"content":" getFeedbackResponsesForRecipientForCourse(course.getId(), newEmail);"},{"lineNumber":515,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":516,"author":{"gitId":"domoberzin"},"content":" for (FeedbackResponse response : responsesToUser) {"},{"lineNumber":517,"author":{"gitId":"domoberzin"},"content":" response.setRecipientSection(newSection);"},{"lineNumber":518,"author":{"gitId":"domoberzin"},"content":" frDb.updateFeedbackResponse(response);"},{"lineNumber":519,"author":{"gitId":"domoberzin"},"content":" frcLogic.updateFeedbackResponseCommentsForResponse(response);"},{"lineNumber":520,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":521,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":522,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":523,"author":{"gitId":"marquestye"},"content":" /**"},{"lineNumber":524,"author":{"gitId":"marquestye"},"content":" * Updates a student\u0027s email in their given/received responses."},{"lineNumber":525,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":526,"author":{"gitId":"marquestye"},"content":" public void updateFeedbackResponsesForChangingEmail(String courseId, String oldEmail, String newEmail)"},{"lineNumber":527,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":528,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":529,"author":{"gitId":"marquestye"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":530,"author":{"gitId":"marquestye"},"content":" getFeedbackResponsesFromGiverForCourse(courseId, oldEmail);"},{"lineNumber":531,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":532,"author":{"gitId":"marquestye"},"content":" for (FeedbackResponse response : responsesFromUser) {"},{"lineNumber":533,"author":{"gitId":"marquestye"},"content":" response.setGiver(newEmail);"},{"lineNumber":534,"author":{"gitId":"marquestye"},"content":" frDb.updateFeedbackResponse(response);"},{"lineNumber":535,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":536,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":537,"author":{"gitId":"marquestye"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":538,"author":{"gitId":"marquestye"},"content":" getFeedbackResponsesForRecipientForCourse(courseId, oldEmail);"},{"lineNumber":539,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":540,"author":{"gitId":"marquestye"},"content":" for (FeedbackResponse response : responsesToUser) {"},{"lineNumber":541,"author":{"gitId":"marquestye"},"content":" response.setRecipient(newEmail);"},{"lineNumber":542,"author":{"gitId":"marquestye"},"content":" frDb.updateFeedbackResponse(response);"},{"lineNumber":543,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":544,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":545,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":546,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackQuestion\u003e getQuestionsForSession("},{"lineNumber":547,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, @Nullable UUID questionId) {"},{"lineNumber":548,"author":{"gitId":"xenosf"},"content":" if (questionId \u003d\u003d null) {"},{"lineNumber":549,"author":{"gitId":"xenosf"},"content":" return fqLogic.getFeedbackQuestionsForSession(feedbackSession);"},{"lineNumber":550,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":551,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d fqLogic.getFeedbackQuestion(questionId);"},{"lineNumber":552,"author":{"gitId":"xenosf"},"content":" return fq \u003d\u003d null ? Collections.emptyList() : Collections.singletonList(fq);"},{"lineNumber":553,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":554,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":555,"author":{"gitId":"xenosf"},"content":" private SqlSessionResultsBundle buildResultsBundle("},{"lineNumber":556,"author":{"gitId":"xenosf"},"content":" boolean isCourseWide, FeedbackSession feedbackSession, String courseId, String sectionName, UUID questionId,"},{"lineNumber":557,"author":{"gitId":"xenosf"},"content":" boolean isInstructor, String userEmail, Instructor instructor, Student student,"},{"lineNumber":558,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster roster, List\u003cFeedbackQuestion\u003e allQuestions,"},{"lineNumber":559,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e allResponses, boolean isPreviewResults) {"},{"lineNumber":560,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":561,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e questionsNotVisibleToInstructors \u003d new HashSet\u003c\u003e();"},{"lineNumber":562,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion qn : allQuestions) {"},{"lineNumber":563,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":564,"author":{"gitId":"xenosf"},"content":" // set questions that should not be visible to instructors if results are being previewed"},{"lineNumber":565,"author":{"gitId":"xenosf"},"content":" if (isPreviewResults \u0026\u0026 !checkCanInstructorsSeeQuestion(qn)) {"},{"lineNumber":566,"author":{"gitId":"xenosf"},"content":" questionsNotVisibleToInstructors.add(qn);"},{"lineNumber":567,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":568,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":569,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":570,"author":{"gitId":"xenosf"},"content":" // load comment(s)"},{"lineNumber":571,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e allComments;"},{"lineNumber":572,"author":{"gitId":"xenosf"},"content":" if (questionId \u003d\u003d null) {"},{"lineNumber":573,"author":{"gitId":"xenosf"},"content":" allComments \u003d frcLogic.getFeedbackResponseCommentForSessionInSection("},{"lineNumber":574,"author":{"gitId":"xenosf"},"content":" courseId, feedbackSession.getName(), sectionName);"},{"lineNumber":575,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":576,"author":{"gitId":"xenosf"},"content":" allComments \u003d frcLogic.getFeedbackResponseCommentForQuestionInSection(questionId, sectionName);"},{"lineNumber":577,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":578,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":579,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":580,"author":{"gitId":"xenosf"},"content":" // related questions, responses, and comment"},{"lineNumber":581,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackQuestion\u003e relatedQuestions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":582,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e relatedResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":583,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, List\u003cFeedbackResponseComment\u003e\u003e relatedCommentsMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":584,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e relatedQuestionsNotVisibleForPreviewSet \u003d new HashSet\u003c\u003e();"},{"lineNumber":585,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e relatedQuestionsWithCommentNotVisibleForPreview \u003d new HashSet\u003c\u003e();"},{"lineNumber":586,"author":{"gitId":"xenosf"},"content":" if (isCourseWide) {"},{"lineNumber":587,"author":{"gitId":"xenosf"},"content":" // all questions are related questions when viewing course-wide result"},{"lineNumber":588,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion qn : allQuestions) {"},{"lineNumber":589,"author":{"gitId":"xenosf"},"content":" relatedQuestions.add(qn);"},{"lineNumber":590,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":591,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":592,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":593,"author":{"gitId":"xenosf"},"content":" Set\u003cString\u003e studentsEmailInTeam \u003d new HashSet\u003c\u003e();"},{"lineNumber":594,"author":{"gitId":"xenosf"},"content":" if (student !\u003d null) {"},{"lineNumber":595,"author":{"gitId":"xenosf"},"content":" for (Student studentInTeam"},{"lineNumber":596,"author":{"gitId":"xenosf"},"content":" : roster.getTeamToMembersTable().getOrDefault(student.getTeam(), Collections.emptyList())) {"},{"lineNumber":597,"author":{"gitId":"xenosf"},"content":" studentsEmailInTeam.add(studentInTeam.getEmail());"},{"lineNumber":598,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":599,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":600,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":601,"author":{"gitId":"xenosf"},"content":" // visibility table for each response and comment"},{"lineNumber":602,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":603,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":604,"author":{"gitId":"xenosf"},"content":" Map\u003cLong, Boolean\u003e commentVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":605,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":606,"author":{"gitId":"xenosf"},"content":" // build response"},{"lineNumber":607,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse response : allResponses) {"},{"lineNumber":608,"author":{"gitId":"xenosf"},"content":" if (isPreviewResults"},{"lineNumber":609,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 relatedQuestionsNotVisibleForPreviewSet.contains(response.getFeedbackQuestion())) {"},{"lineNumber":610,"author":{"gitId":"xenosf"},"content":" // corresponding question\u0027s responses will not be shown to previewer, ignore the response"},{"lineNumber":611,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":612,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":613,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion correspondingQuestion \u003d response.getFeedbackQuestion();"},{"lineNumber":614,"author":{"gitId":"xenosf"},"content":" if (correspondingQuestion \u003d\u003d null) {"},{"lineNumber":615,"author":{"gitId":"xenosf"},"content":" // orphan response without corresponding question, ignore it"},{"lineNumber":616,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":617,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":618,"author":{"gitId":"xenosf"},"content":" // check visibility of response"},{"lineNumber":619,"author":{"gitId":"xenosf"},"content":" boolean isVisibleResponse \u003d isResponseVisibleForUser("},{"lineNumber":620,"author":{"gitId":"xenosf"},"content":" userEmail, isInstructor, student, studentsEmailInTeam, response, correspondingQuestion, instructor);"},{"lineNumber":621,"author":{"gitId":"xenosf"},"content":" if (!isVisibleResponse) {"},{"lineNumber":622,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":623,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":624,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":625,"author":{"gitId":"xenosf"},"content":" // if previewing results and corresponding question should not be visible to instructors,"},{"lineNumber":626,"author":{"gitId":"xenosf"},"content":" // note down the question and do not add the response"},{"lineNumber":627,"author":{"gitId":"xenosf"},"content":" if (isPreviewResults \u0026\u0026 questionsNotVisibleToInstructors.contains(response.getFeedbackQuestion())) {"},{"lineNumber":628,"author":{"gitId":"xenosf"},"content":" relatedQuestionsNotVisibleForPreviewSet.add(response.getFeedbackQuestion());"},{"lineNumber":629,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":630,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":631,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":632,"author":{"gitId":"xenosf"},"content":" // if there are viewable responses, the corresponding question becomes related"},{"lineNumber":633,"author":{"gitId":"xenosf"},"content":" relatedQuestions.add(response.getFeedbackQuestion());"},{"lineNumber":634,"author":{"gitId":"xenosf"},"content":" relatedResponses.add(response);"},{"lineNumber":635,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":636,"author":{"gitId":"xenosf"},"content":" // generate giver/recipient name visibility table"},{"lineNumber":637,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response,"},{"lineNumber":638,"author":{"gitId":"xenosf"},"content":" isNameVisibleToUser(correspondingQuestion, response, userEmail, isInstructor, true, roster));"},{"lineNumber":639,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response,"},{"lineNumber":640,"author":{"gitId":"xenosf"},"content":" isNameVisibleToUser(correspondingQuestion, response, userEmail, isInstructor, false, roster));"},{"lineNumber":641,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":642,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":643,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":644,"author":{"gitId":"xenosf"},"content":" // build comment"},{"lineNumber":645,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponseComment frc : allComments) {"},{"lineNumber":646,"author":{"gitId":"xenosf"},"content":" FeedbackResponse relatedResponse \u003d frc.getFeedbackResponse();"},{"lineNumber":647,"author":{"gitId":"xenosf"},"content":" // the comment needs to be relevant to the question and response"},{"lineNumber":648,"author":{"gitId":"xenosf"},"content":" if (relatedResponse \u003d\u003d null) {"},{"lineNumber":649,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":650,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":651,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion \u003d relatedResponse.getFeedbackQuestion();"},{"lineNumber":652,"author":{"gitId":"xenosf"},"content":" if (relatedQuestion \u003d\u003d null) {"},{"lineNumber":653,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":654,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":655,"author":{"gitId":"xenosf"},"content":" // check visibility of comment"},{"lineNumber":656,"author":{"gitId":"xenosf"},"content":" boolean isVisibleResponseComment \u003d frcLogic.checkIsResponseCommentVisibleForUser("},{"lineNumber":657,"author":{"gitId":"xenosf"},"content":" userEmail, isInstructor, student, studentsEmailInTeam, relatedResponse, relatedQuestion, frc);"},{"lineNumber":658,"author":{"gitId":"xenosf"},"content":" if (!isVisibleResponseComment) {"},{"lineNumber":659,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":660,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":661,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":662,"author":{"gitId":"xenosf"},"content":" // if previewing results and the comment should not be visible to instructors,"},{"lineNumber":663,"author":{"gitId":"xenosf"},"content":" // note down the corresponding question and do not add the comment"},{"lineNumber":664,"author":{"gitId":"xenosf"},"content":" if (isPreviewResults \u0026\u0026 !checkCanInstructorsSeeComment(frc)) {"},{"lineNumber":665,"author":{"gitId":"xenosf"},"content":" relatedQuestionsWithCommentNotVisibleForPreview.add(frc.getFeedbackResponse().getFeedbackQuestion());"},{"lineNumber":666,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":667,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":668,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":669,"author":{"gitId":"xenosf"},"content":" relatedCommentsMap.computeIfAbsent(relatedResponse, key -\u003e new ArrayList\u003c\u003e()).add(frc);"},{"lineNumber":670,"author":{"gitId":"xenosf"},"content":" // generate comment giver name visibility table"},{"lineNumber":671,"author":{"gitId":"xenosf"},"content":" commentVisibilityTable.put(frc.getId(),"},{"lineNumber":672,"author":{"gitId":"xenosf"},"content":" frcLogic.checkIsNameVisibleToUser(frc, relatedResponse, userEmail, roster));"},{"lineNumber":673,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":674,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":675,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":676,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e existingResponses \u003d new ArrayList\u003c\u003e(relatedResponses);"},{"lineNumber":677,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses \u003d Collections.emptyList();"},{"lineNumber":678,"author":{"gitId":"xenosf"},"content":" if (isCourseWide) {"},{"lineNumber":679,"author":{"gitId":"xenosf"},"content":" missingResponses \u003d buildMissingResponses("},{"lineNumber":680,"author":{"gitId":"xenosf"},"content":" instructor, responseGiverVisibilityTable, responseRecipientVisibilityTable, relatedQuestions,"},{"lineNumber":681,"author":{"gitId":"xenosf"},"content":" existingResponses, roster, sectionName);"},{"lineNumber":682,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":683,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":684,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":685,"author":{"gitId":"xenosf"},"content":" return new SqlSessionResultsBundle(relatedQuestions, relatedQuestionsNotVisibleForPreviewSet,"},{"lineNumber":686,"author":{"gitId":"xenosf"},"content":" relatedQuestionsWithCommentNotVisibleForPreview, existingResponses, missingResponses,"},{"lineNumber":687,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable, responseRecipientVisibilityTable, relatedCommentsMap,"},{"lineNumber":688,"author":{"gitId":"xenosf"},"content":" commentVisibilityTable, roster);"},{"lineNumber":689,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":690,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":691,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":692,"author":{"gitId":"xenosf"},"content":" * Gets the session result for a feedback session."},{"lineNumber":693,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":694,"author":{"gitId":"xenosf"},"content":" * @param feedbackSession the feedback session"},{"lineNumber":695,"author":{"gitId":"xenosf"},"content":" * @param courseId the ID of the course"},{"lineNumber":696,"author":{"gitId":"xenosf"},"content":" * @param instructorEmail the instructor viewing the feedback session"},{"lineNumber":697,"author":{"gitId":"xenosf"},"content":" * @param questionId if not null, will only return partial bundle for the question"},{"lineNumber":698,"author":{"gitId":"xenosf"},"content":" * @param sectionName if not null, will only return partial bundle for the section"},{"lineNumber":699,"author":{"gitId":"xenosf"},"content":" * @param fetchType if not null, will fetch responses by giver, receiver sections, or both"},{"lineNumber":700,"author":{"gitId":"xenosf"},"content":" * @return the session result bundle"},{"lineNumber":701,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":702,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle getSessionResultsForCourse("},{"lineNumber":703,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String instructorEmail,"},{"lineNumber":704,"author":{"gitId":"xenosf"},"content":" @Nullable UUID questionId, @Nullable String sectionName, @Nullable FeedbackResultFetchType fetchType) {"},{"lineNumber":705,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":706,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster roster \u003d new SqlCourseRoster("},{"lineNumber":707,"author":{"gitId":"xenosf"},"content":" usersLogic.getStudentsForCourse(courseId),"},{"lineNumber":708,"author":{"gitId":"xenosf"},"content":" usersLogic.getInstructorsForCourse(courseId));"},{"lineNumber":709,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":710,"author":{"gitId":"xenosf"},"content":" // load question(s)"},{"lineNumber":711,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackQuestion\u003e allQuestions \u003d getQuestionsForSession(feedbackSession, questionId);"},{"lineNumber":712,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":713,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":714,"author":{"gitId":"xenosf"},"content":" // load response(s)"},{"lineNumber":715,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e allResponses;"},{"lineNumber":716,"author":{"gitId":"xenosf"},"content":" // load all response for instructors and passively filter them later"},{"lineNumber":717,"author":{"gitId":"xenosf"},"content":" if (questionId \u003d\u003d null) {"},{"lineNumber":718,"author":{"gitId":"xenosf"},"content":" allResponses \u003d getFeedbackResponsesForSessionInSection(feedbackSession, courseId, sectionName, fetchType);"},{"lineNumber":719,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":720,"author":{"gitId":"xenosf"},"content":" allResponses \u003d getFeedbackResponsesForQuestionInSection(questionId, sectionName, fetchType);"},{"lineNumber":721,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":722,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":723,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":724,"author":{"gitId":"xenosf"},"content":" // consider the current viewing user"},{"lineNumber":725,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d usersLogic.getInstructorForEmail(courseId, instructorEmail);"},{"lineNumber":726,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":727,"author":{"gitId":"xenosf"},"content":" return buildResultsBundle(true, feedbackSession, courseId, sectionName, questionId, true, instructorEmail,"},{"lineNumber":728,"author":{"gitId":"xenosf"},"content":" instructor, null, roster, allQuestions, allResponses, false);"},{"lineNumber":729,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":730,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":731,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":732,"author":{"gitId":"xenosf"},"content":" * Gets the session result for a feedback session for the given user."},{"lineNumber":733,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":734,"author":{"gitId":"xenosf"},"content":" * @param feedbackSession the feedback session"},{"lineNumber":735,"author":{"gitId":"xenosf"},"content":" * @param courseId the ID of the course"},{"lineNumber":736,"author":{"gitId":"xenosf"},"content":" * @param userEmail the user viewing the feedback session"},{"lineNumber":737,"author":{"gitId":"xenosf"},"content":" * @param isInstructor true if the user is an instructor"},{"lineNumber":738,"author":{"gitId":"xenosf"},"content":" * @param questionId if not null, will only return partial bundle for the question"},{"lineNumber":739,"author":{"gitId":"xenosf"},"content":" * @param isPreviewResults true if getting session results for preview purpose"},{"lineNumber":740,"author":{"gitId":"xenosf"},"content":" * @return the session result bundle"},{"lineNumber":741,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":742,"author":{"gitId":"xenosf"},"content":" public SqlSessionResultsBundle getSessionResultsForUser("},{"lineNumber":743,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String userEmail, boolean isInstructor,"},{"lineNumber":744,"author":{"gitId":"xenosf"},"content":" @Nullable UUID questionId, boolean isPreviewResults) {"},{"lineNumber":745,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster roster \u003d new SqlCourseRoster("},{"lineNumber":746,"author":{"gitId":"xenosf"},"content":" usersLogic.getStudentsForCourse(courseId),"},{"lineNumber":747,"author":{"gitId":"xenosf"},"content":" usersLogic.getInstructorsForCourse(courseId));"},{"lineNumber":748,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":749,"author":{"gitId":"xenosf"},"content":" // load question(s)"},{"lineNumber":750,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackQuestion\u003e allQuestions \u003d getQuestionsForSession(feedbackSession, questionId);"},{"lineNumber":751,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":752,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":753,"author":{"gitId":"xenosf"},"content":" // load response(s)"},{"lineNumber":754,"author":{"gitId":"xenosf"},"content":" Student student \u003d isInstructor ? null : usersLogic.getStudentForEmail(courseId, userEmail);"},{"lineNumber":755,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d isInstructor ? usersLogic.getInstructorForEmail(courseId, userEmail) : null;"},{"lineNumber":756,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e allResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":757,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion question : allQuestions) {"},{"lineNumber":758,"author":{"gitId":"xenosf"},"content":" // load viewable responses for students/instructors proactively"},{"lineNumber":759,"author":{"gitId":"xenosf"},"content":" // this is cost-effective as in most of time responses for the whole session will not be viewable to individuals"},{"lineNumber":760,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e viewableResponses \u003d isInstructor"},{"lineNumber":761,"author":{"gitId":"xenosf"},"content":" ? getFeedbackResponsesToOrFromInstructorForQuestion(question, instructor)"},{"lineNumber":762,"author":{"gitId":"xenosf"},"content":" : getViewableFeedbackResponsesForStudentForQuestion(question, student, roster);"},{"lineNumber":763,"author":{"gitId":"xenosf"},"content":" allResponses.addAll(viewableResponses);"},{"lineNumber":764,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":765,"author":{"gitId":"xenosf"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":766,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":767,"author":{"gitId":"xenosf"},"content":" return buildResultsBundle(false, feedbackSession, courseId, null, questionId, isInstructor, userEmail,"},{"lineNumber":768,"author":{"gitId":"xenosf"},"content":" instructor, student, roster, allQuestions, allResponses, isPreviewResults);"},{"lineNumber":769,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":770,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":771,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":772,"author":{"gitId":"xenosf"},"content":" * Builds viewable missing responses for the session for instructor."},{"lineNumber":773,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":774,"author":{"gitId":"xenosf"},"content":" * @param instructor the instructor"},{"lineNumber":775,"author":{"gitId":"xenosf"},"content":" * @param responseGiverVisibilityTable"},{"lineNumber":776,"author":{"gitId":"xenosf"},"content":" * the giver visibility table which will be updated with the visibility of missing responses"},{"lineNumber":777,"author":{"gitId":"xenosf"},"content":" * @param responseRecipientVisibilityTable"},{"lineNumber":778,"author":{"gitId":"xenosf"},"content":" * the recipient visibility table which will be updated with the visibility of missing responses"},{"lineNumber":779,"author":{"gitId":"xenosf"},"content":" * @param relatedQuestions the relevant questions"},{"lineNumber":780,"author":{"gitId":"xenosf"},"content":" * @param existingResponses existing responses"},{"lineNumber":781,"author":{"gitId":"xenosf"},"content":" * @param courseRoster the course roster"},{"lineNumber":782,"author":{"gitId":"xenosf"},"content":" * @param sectionName if not null, will only build missing responses for the section"},{"lineNumber":783,"author":{"gitId":"xenosf"},"content":" * @return a list of missing responses for the session."},{"lineNumber":784,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":785,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackResponse\u003e buildMissingResponses("},{"lineNumber":786,"author":{"gitId":"xenosf"},"content":" Instructor instructor, Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable,"},{"lineNumber":787,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable, List\u003cFeedbackQuestion\u003e relatedQuestions,"},{"lineNumber":788,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e existingResponses, SqlCourseRoster courseRoster, @Nullable String sectionName) {"},{"lineNumber":789,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":790,"author":{"gitId":"xenosf"},"content":" // first get all possible giver recipient pairs"},{"lineNumber":791,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackQuestion, Map\u003cString, Set\u003cString\u003e\u003e\u003e questionCompleteGiverRecipientMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":792,"author":{"gitId":"xenosf"},"content":" for (FeedbackQuestion feedbackQuestion : relatedQuestions) {"},{"lineNumber":793,"author":{"gitId":"xenosf"},"content":" if (feedbackQuestion.getQuestionDetailsCopy().shouldGenerateMissingResponses(feedbackQuestion)) {"},{"lineNumber":794,"author":{"gitId":"xenosf"},"content":" questionCompleteGiverRecipientMap.put(feedbackQuestion,"},{"lineNumber":795,"author":{"gitId":"xenosf"},"content":" fqLogic.buildCompleteGiverRecipientMap(feedbackQuestion, courseRoster));"},{"lineNumber":796,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":797,"author":{"gitId":"xenosf"},"content":" questionCompleteGiverRecipientMap.put(feedbackQuestion, new HashMap\u003c\u003e());"},{"lineNumber":798,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":799,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":800,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":801,"author":{"gitId":"xenosf"},"content":" // remove the existing responses in those pairs"},{"lineNumber":802,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse existingResponse : existingResponses) {"},{"lineNumber":803,"author":{"gitId":"xenosf"},"content":" Map\u003cString, Set\u003cString\u003e\u003e currGiverRecipientMap \u003d"},{"lineNumber":804,"author":{"gitId":"xenosf"},"content":" questionCompleteGiverRecipientMap.get(existingResponse.getFeedbackQuestion());"},{"lineNumber":805,"author":{"gitId":"xenosf"},"content":" if (!currGiverRecipientMap.containsKey(existingResponse.getGiver())) {"},{"lineNumber":806,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":807,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":808,"author":{"gitId":"xenosf"},"content":" currGiverRecipientMap.get(existingResponse.getGiver()).remove(existingResponse.getRecipient());"},{"lineNumber":809,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":810,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":811,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":812,"author":{"gitId":"xenosf"},"content":" // build dummy responses"},{"lineNumber":813,"author":{"gitId":"xenosf"},"content":" for (Map.Entry\u003cFeedbackQuestion, Map\u003cString, Set\u003cString\u003e\u003e\u003e currGiverRecipientMapEntry"},{"lineNumber":814,"author":{"gitId":"xenosf"},"content":" : questionCompleteGiverRecipientMap.entrySet()) {"},{"lineNumber":815,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion correspondingQuestion \u003d currGiverRecipientMapEntry.getKey();"},{"lineNumber":816,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":817,"author":{"gitId":"xenosf"},"content":" for (Map.Entry\u003cString, Set\u003cString\u003e\u003e giverRecipientEntry"},{"lineNumber":818,"author":{"gitId":"xenosf"},"content":" : currGiverRecipientMapEntry.getValue().entrySet()) {"},{"lineNumber":819,"author":{"gitId":"xenosf"},"content":" // giver"},{"lineNumber":820,"author":{"gitId":"xenosf"},"content":" String giverIdentifier \u003d giverRecipientEntry.getKey();"},{"lineNumber":821,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster.ParticipantInfo giverInfo \u003d courseRoster.getInfoForIdentifier(giverIdentifier);"},{"lineNumber":822,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":823,"author":{"gitId":"xenosf"},"content":" for (String recipientIdentifier : giverRecipientEntry.getValue()) {"},{"lineNumber":824,"author":{"gitId":"xenosf"},"content":" // recipient"},{"lineNumber":825,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster.ParticipantInfo recipientInfo \u003d courseRoster.getInfoForIdentifier(recipientIdentifier);"},{"lineNumber":826,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":827,"author":{"gitId":"xenosf"},"content":" // skip responses not in current section"},{"lineNumber":828,"author":{"gitId":"xenosf"},"content":" if (sectionName !\u003d null"},{"lineNumber":829,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 !giverInfo.getSectionName().equals(sectionName)"},{"lineNumber":830,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 !recipientInfo.getSectionName().equals(sectionName)) {"},{"lineNumber":831,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":832,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":833,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":834,"author":{"gitId":"xenosf"},"content":" FeedbackResponse missingResponse \u003d new FeedbackMissingResponse("},{"lineNumber":835,"author":{"gitId":"xenosf"},"content":" correspondingQuestion,"},{"lineNumber":836,"author":{"gitId":"xenosf"},"content":" giverIdentifier, giverInfo.getSectionName(),"},{"lineNumber":837,"author":{"gitId":"xenosf"},"content":" recipientIdentifier, recipientInfo.getSectionName());"},{"lineNumber":838,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":839,"author":{"gitId":"xenosf"},"content":" // check visibility of the missing response"},{"lineNumber":840,"author":{"gitId":"xenosf"},"content":" boolean isVisibleResponse \u003d isResponseVisibleForUser("},{"lineNumber":841,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(), true, null, Collections.emptySet(),"},{"lineNumber":842,"author":{"gitId":"xenosf"},"content":" missingResponse, correspondingQuestion, instructor);"},{"lineNumber":843,"author":{"gitId":"xenosf"},"content":" if (!isVisibleResponse) {"},{"lineNumber":844,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":845,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":846,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":847,"author":{"gitId":"xenosf"},"content":" // generate giver/recipient name visibility table"},{"lineNumber":848,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(missingResponse,"},{"lineNumber":849,"author":{"gitId":"xenosf"},"content":" isNameVisibleToUser(correspondingQuestion, missingResponse,"},{"lineNumber":850,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(), true, true, courseRoster));"},{"lineNumber":851,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(missingResponse,"},{"lineNumber":852,"author":{"gitId":"xenosf"},"content":" isNameVisibleToUser(correspondingQuestion, missingResponse,"},{"lineNumber":853,"author":{"gitId":"xenosf"},"content":" instructor.getEmail(), true, false, courseRoster));"},{"lineNumber":854,"author":{"gitId":"xenosf"},"content":" missingResponses.add(missingResponse);"},{"lineNumber":855,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":856,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":857,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":858,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":859,"author":{"gitId":"xenosf"},"content":" return missingResponses;"},{"lineNumber":860,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":861,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":862,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":863,"author":{"gitId":"xenosf"},"content":" * Checks whether the giver name of a response is visible to an user."},{"lineNumber":864,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":865,"author":{"gitId":"xenosf"},"content":" public boolean isNameVisibleToUser("},{"lineNumber":866,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question,"},{"lineNumber":867,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response,"},{"lineNumber":868,"author":{"gitId":"xenosf"},"content":" String userEmail,"},{"lineNumber":869,"author":{"gitId":"xenosf"},"content":" boolean isInstructor, boolean isGiverName, SqlCourseRoster roster) {"},{"lineNumber":870,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":871,"author":{"gitId":"xenosf"},"content":" if (question \u003d\u003d null) {"},{"lineNumber":872,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":873,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":874,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":875,"author":{"gitId":"xenosf"},"content":" // Early return if user is giver"},{"lineNumber":876,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS) {"},{"lineNumber":877,"author":{"gitId":"xenosf"},"content":" // if response is given by team, then anyone in the team can see the response"},{"lineNumber":878,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentInTeam(userEmail, response.getGiver())) {"},{"lineNumber":879,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":880,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":881,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":882,"author":{"gitId":"xenosf"},"content":" if (response.getGiver().equals(userEmail)) {"},{"lineNumber":883,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":884,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":885,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":886,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":887,"author":{"gitId":"xenosf"},"content":" return isFeedbackParticipantNameVisibleToUser(question, response,"},{"lineNumber":888,"author":{"gitId":"xenosf"},"content":" userEmail, isInstructor, isGiverName, roster);"},{"lineNumber":889,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":890,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":891,"author":{"gitId":"xenosf"},"content":" private boolean isFeedbackParticipantNameVisibleToUser("},{"lineNumber":892,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question, FeedbackResponse response,"},{"lineNumber":893,"author":{"gitId":"xenosf"},"content":" String userEmail, boolean isInstructor, boolean isGiverName, SqlCourseRoster roster) {"},{"lineNumber":894,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackParticipantType\u003e showNameTo \u003d isGiverName"},{"lineNumber":895,"author":{"gitId":"xenosf"},"content":" ? question.getShowGiverNameTo()"},{"lineNumber":896,"author":{"gitId":"xenosf"},"content":" : question.getShowRecipientNameTo();"},{"lineNumber":897,"author":{"gitId":"xenosf"},"content":" for (FeedbackParticipantType type : showNameTo) {"},{"lineNumber":898,"author":{"gitId":"xenosf"},"content":" switch (type) {"},{"lineNumber":899,"author":{"gitId":"xenosf"},"content":" case INSTRUCTORS:"},{"lineNumber":900,"author":{"gitId":"xenosf"},"content":" if (roster.getInstructorForEmail(userEmail) !\u003d null \u0026\u0026 isInstructor) {"},{"lineNumber":901,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":902,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":903,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":904,"author":{"gitId":"xenosf"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":905,"author":{"gitId":"xenosf"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":906,"author":{"gitId":"xenosf"},"content":" // Refers to Giver\u0027s Team Members"},{"lineNumber":907,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentsInSameTeam(response.getGiver(), userEmail)) {"},{"lineNumber":908,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":909,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":910,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":911,"author":{"gitId":"xenosf"},"content":" case RECEIVER:"},{"lineNumber":912,"author":{"gitId":"xenosf"},"content":" // Response to team"},{"lineNumber":913,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType().isTeam()) {"},{"lineNumber":914,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentInTeam(userEmail, response.getRecipient())) {"},{"lineNumber":915,"author":{"gitId":"xenosf"},"content":" // this is a team name"},{"lineNumber":916,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":917,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":918,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":919,"author":{"gitId":"xenosf"},"content":" // Response to individual"},{"lineNumber":920,"author":{"gitId":"xenosf"},"content":" } else if (response.getRecipient().equals(userEmail)) {"},{"lineNumber":921,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":922,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":923,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":924,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":925,"author":{"gitId":"xenosf"},"content":" case RECEIVER_TEAM_MEMBERS:"},{"lineNumber":926,"author":{"gitId":"xenosf"},"content":" // Response to team; recipient \u003d teamName"},{"lineNumber":927,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType().isTeam()) {"},{"lineNumber":928,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentInTeam(userEmail, response.getRecipient())) {"},{"lineNumber":929,"author":{"gitId":"xenosf"},"content":" // this is a team name"},{"lineNumber":930,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":931,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":932,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":933,"author":{"gitId":"xenosf"},"content":" } else if (roster.isStudentsInSameTeam(response.getRecipient(), userEmail)) {"},{"lineNumber":934,"author":{"gitId":"xenosf"},"content":" // Response to individual"},{"lineNumber":935,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":936,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":937,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":938,"author":{"gitId":"xenosf"},"content":" case STUDENTS:"},{"lineNumber":939,"author":{"gitId":"xenosf"},"content":" if (roster.isStudentInCourse(userEmail)) {"},{"lineNumber":940,"author":{"gitId":"xenosf"},"content":" return true;"},{"lineNumber":941,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":942,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":943,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":944,"author":{"gitId":"xenosf"},"content":" assert false : \"Invalid FeedbackParticipantType for showNameTo in \""},{"lineNumber":945,"author":{"gitId":"xenosf"},"content":" + \"FeedbackResponseLogic.isFeedbackParticipantNameVisibleToUser()\";"},{"lineNumber":946,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":947,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":948,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":949,"author":{"gitId":"xenosf"},"content":" return false;"},{"lineNumber":950,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":951,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":952,"author":{"gitId":"xenosf"},"content":" private boolean isResponseVisibleForUser("},{"lineNumber":953,"author":{"gitId":"xenosf"},"content":" String userEmail, boolean isInstructor, Student student,"},{"lineNumber":954,"author":{"gitId":"xenosf"},"content":" Set\u003cString\u003e studentsEmailInTeam, FeedbackResponse response,"},{"lineNumber":955,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion relatedQuestion, Instructor instructor) {"},{"lineNumber":956,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":957,"author":{"gitId":"xenosf"},"content":" boolean isVisibleResponse \u003d false;"},{"lineNumber":958,"author":{"gitId":"xenosf"},"content":" if (isInstructor \u0026\u0026 relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.INSTRUCTORS)"},{"lineNumber":959,"author":{"gitId":"xenosf"},"content":" || response.getRecipient().equals(userEmail)"},{"lineNumber":960,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)"},{"lineNumber":961,"author":{"gitId":"xenosf"},"content":" || response.getGiver().equals(userEmail)"},{"lineNumber":962,"author":{"gitId":"xenosf"},"content":" || !isInstructor \u0026\u0026 relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":963,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":964,"author":{"gitId":"xenosf"},"content":" } else if (studentsEmailInTeam !\u003d null \u0026\u0026 !isInstructor) {"},{"lineNumber":965,"author":{"gitId":"xenosf"},"content":" if ((relatedQuestion.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":966,"author":{"gitId":"xenosf"},"content":" || relatedQuestion.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION"},{"lineNumber":967,"author":{"gitId":"xenosf"},"content":" || relatedQuestion.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS_EXCLUDING_SELF)"},{"lineNumber":968,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)"},{"lineNumber":969,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 response.getRecipient().equals(student.getTeamName())) {"},{"lineNumber":970,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":971,"author":{"gitId":"xenosf"},"content":" } else if (relatedQuestion.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":972,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 response.getGiver().equals(student.getTeamName())) {"},{"lineNumber":973,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":974,"author":{"gitId":"xenosf"},"content":" } else if (relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.OWN_TEAM_MEMBERS)"},{"lineNumber":975,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 studentsEmailInTeam.contains(response.getGiver())) {"},{"lineNumber":976,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":977,"author":{"gitId":"xenosf"},"content":" } else if (relatedQuestion.isResponseVisibleTo(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS)"},{"lineNumber":978,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 studentsEmailInTeam.contains(response.getRecipient())) {"},{"lineNumber":979,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d true;"},{"lineNumber":980,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":981,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":982,"author":{"gitId":"xenosf"},"content":" if (isVisibleResponse \u0026\u0026 instructor !\u003d null) {"},{"lineNumber":983,"author":{"gitId":"xenosf"},"content":" boolean isGiverSectionRestricted \u003d"},{"lineNumber":984,"author":{"gitId":"xenosf"},"content":" !instructor.isAllowedForPrivilege(response.getGiverSectionName(),"},{"lineNumber":985,"author":{"gitId":"xenosf"},"content":" response.getFeedbackQuestion().getFeedbackSession().getName(),"},{"lineNumber":986,"author":{"gitId":"xenosf"},"content":" Const.InstructorPermissions.CAN_VIEW_SESSION_IN_SECTIONS);"},{"lineNumber":987,"author":{"gitId":"xenosf"},"content":" // If instructors are not restricted to view the giver\u0027s section,"},{"lineNumber":988,"author":{"gitId":"xenosf"},"content":" // they are allowed to view responses to GENERAL, subject to visibility options"},{"lineNumber":989,"author":{"gitId":"xenosf"},"content":" boolean isRecipientSectionRestricted \u003d"},{"lineNumber":990,"author":{"gitId":"xenosf"},"content":" relatedQuestion.getRecipientType() !\u003d FeedbackParticipantType.NONE"},{"lineNumber":991,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 !instructor.isAllowedForPrivilege(response.getRecipientSectionName(),"},{"lineNumber":992,"author":{"gitId":"xenosf"},"content":" response.getFeedbackQuestion().getFeedbackSession().getName(),"},{"lineNumber":993,"author":{"gitId":"xenosf"},"content":" Const.InstructorPermissions.CAN_VIEW_SESSION_IN_SECTIONS);"},{"lineNumber":994,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":995,"author":{"gitId":"xenosf"},"content":" boolean isNotAllowedForInstructor \u003d isGiverSectionRestricted || isRecipientSectionRestricted;"},{"lineNumber":996,"author":{"gitId":"xenosf"},"content":" if (isNotAllowedForInstructor) {"},{"lineNumber":997,"author":{"gitId":"xenosf"},"content":" isVisibleResponse \u003d false;"},{"lineNumber":998,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":999,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1000,"author":{"gitId":"xenosf"},"content":" return isVisibleResponse;"},{"lineNumber":1001,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1002,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1003,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1004,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1005,"author":{"gitId":"xenosf"},"content":" * Gets all responses for a session."},{"lineNumber":1006,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1007,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e getFeedbackResponsesForSession("},{"lineNumber":1008,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId) {"},{"lineNumber":1009,"author":{"gitId":"xenosf"},"content":" return frDb.getFeedbackResponsesForSession(feedbackSession, courseId);"},{"lineNumber":1010,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1011,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1012,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1013,"author":{"gitId":"xenosf"},"content":" * Gets all responses given to/from a section in a feedback session in a course."},{"lineNumber":1014,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1015,"author":{"gitId":"xenosf"},"content":" * @param feedbackSession the session"},{"lineNumber":1016,"author":{"gitId":"xenosf"},"content":" * @param courseId the course ID of the session"},{"lineNumber":1017,"author":{"gitId":"xenosf"},"content":" * @param sectionName if null, will retrieve all responses in the session"},{"lineNumber":1018,"author":{"gitId":"xenosf"},"content":" * @param fetchType if not null, will retrieve responses by giver, receiver sections, or both"},{"lineNumber":1019,"author":{"gitId":"xenosf"},"content":" * @return a list of responses"},{"lineNumber":1020,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1021,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForSessionInSection("},{"lineNumber":1022,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, @Nullable String sectionName,"},{"lineNumber":1023,"author":{"gitId":"xenosf"},"content":" @Nullable FeedbackResultFetchType fetchType) {"},{"lineNumber":1024,"author":{"gitId":"xenosf"},"content":" if (sectionName \u003d\u003d null) {"},{"lineNumber":1025,"author":{"gitId":"xenosf"},"content":" return getFeedbackResponsesForSession(feedbackSession, courseId);"},{"lineNumber":1026,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1027,"author":{"gitId":"xenosf"},"content":" return frDb.getFeedbackResponsesForSessionInSection(feedbackSession, courseId, sectionName, fetchType);"},{"lineNumber":1028,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1029,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1030,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1031,"author":{"gitId":"xenosf"},"content":" * Gets all responses given to/from a section for a question."},{"lineNumber":1032,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":1033,"author":{"gitId":"xenosf"},"content":" * @param feedbackQuestionId the question UUID"},{"lineNumber":1034,"author":{"gitId":"xenosf"},"content":" * @param sectionName if null, will retrieve all responses for the question"},{"lineNumber":1035,"author":{"gitId":"xenosf"},"content":" * @return a list of responses"},{"lineNumber":1036,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1037,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForQuestionInSection("},{"lineNumber":1038,"author":{"gitId":"xenosf"},"content":" UUID feedbackQuestionId, @Nullable String sectionName, FeedbackResultFetchType fetchType) {"},{"lineNumber":1039,"author":{"gitId":"xenosf"},"content":" if (sectionName \u003d\u003d null) {"},{"lineNumber":1040,"author":{"gitId":"xenosf"},"content":" return getFeedbackResponsesForQuestion(feedbackQuestionId);"},{"lineNumber":1041,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1042,"author":{"gitId":"xenosf"},"content":" return frDb.getFeedbackResponsesForQuestionInSection(feedbackQuestionId, sectionName, fetchType);"},{"lineNumber":1043,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1044,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1045,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1046,"author":{"gitId":"xenosf"},"content":" * Returns feedback responses given/received by an instructor."},{"lineNumber":1047,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1048,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackResponse\u003e getFeedbackResponsesToOrFromInstructorForQuestion("},{"lineNumber":1049,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question, Instructor instructor) {"},{"lineNumber":1050,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackResponse\u003e viewableResponses \u003d new HashSet\u003c\u003e();"},{"lineNumber":1051,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1052,"author":{"gitId":"xenosf"},"content":" // Add responses that the instructor submitted him/herself"},{"lineNumber":1053,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":1054,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1055,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesFromGiverForQuestion(question.getId(), instructor.getEmail())"},{"lineNumber":1056,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1057,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1058,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1059,"author":{"gitId":"xenosf"},"content":" // Add responses that user is a receiver of when response is visible to receiver or instructors"},{"lineNumber":1060,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":1061,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)"},{"lineNumber":1062,"author":{"gitId":"xenosf"},"content":" || question.isResponseVisibleTo(FeedbackParticipantType.INSTRUCTORS))) {"},{"lineNumber":1063,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1064,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesForRecipientForQuestion(question.getId(), instructor.getEmail())"},{"lineNumber":1065,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1066,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1067,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1068,"author":{"gitId":"xenosf"},"content":" return new ArrayList\u003c\u003e(viewableResponses);"},{"lineNumber":1069,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1070,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1071,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1072,"author":{"gitId":"xenosf"},"content":" * Returns viewable feedback responses for a student."},{"lineNumber":1073,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1074,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackResponse\u003e getViewableFeedbackResponsesForStudentForQuestion("},{"lineNumber":1075,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question, Student student, SqlCourseRoster courseRoster) {"},{"lineNumber":1076,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackResponse\u003e viewableResponses \u003d new HashSet\u003c\u003e();"},{"lineNumber":1077,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1078,"author":{"gitId":"xenosf"},"content":" // Add responses that the student submitted him/herself"},{"lineNumber":1079,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":1080,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1081,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesFromGiverForQuestion(question.getId(), student.getEmail())"},{"lineNumber":1082,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1083,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1084,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1085,"author":{"gitId":"xenosf"},"content":" // Add responses that user is a receiver of when response is visible to receiver"},{"lineNumber":1086,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":1087,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)) {"},{"lineNumber":1088,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1089,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesForRecipientForQuestion(question.getId(), student.getEmail())"},{"lineNumber":1090,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1091,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1092,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1093,"author":{"gitId":"xenosf"},"content":" if (question.isResponseVisibleTo(FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":1094,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll(getFeedbackResponsesForQuestion(question.getId()));"},{"lineNumber":1095,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1096,"author":{"gitId":"xenosf"},"content":" // Early return as STUDENTS covers all cases below."},{"lineNumber":1097,"author":{"gitId":"xenosf"},"content":" return new ArrayList\u003c\u003e(viewableResponses);"},{"lineNumber":1098,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1099,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1100,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType().isTeam()"},{"lineNumber":1101,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER)) {"},{"lineNumber":1102,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1103,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesForRecipientForQuestion(question.getId(), student.getTeamName())"},{"lineNumber":1104,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":1105,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1106,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1107,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":1108,"author":{"gitId":"xenosf"},"content":" || question.isResponseVisibleTo(FeedbackParticipantType.OWN_TEAM_MEMBERS)) {"},{"lineNumber":1109,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll("},{"lineNumber":1110,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesFromTeamForQuestion("},{"lineNumber":1111,"author":{"gitId":"xenosf"},"content":" question.getId(), question.getCourseId(), student.getTeamName(), courseRoster));"},{"lineNumber":1112,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1113,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1114,"author":{"gitId":"xenosf"},"content":" if (question.isResponseVisibleTo(FeedbackParticipantType.RECEIVER_TEAM_MEMBERS)) {"},{"lineNumber":1115,"author":{"gitId":"xenosf"},"content":" for (Student studentInTeam : courseRoster.getTeamToMembersTable().get(student.getTeamName())) {"},{"lineNumber":1116,"author":{"gitId":"xenosf"},"content":" if (studentInTeam.getEmail().equals(student.getEmail())) {"},{"lineNumber":1117,"author":{"gitId":"xenosf"},"content":" continue;"},{"lineNumber":1118,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1119,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responses \u003d"},{"lineNumber":1120,"author":{"gitId":"xenosf"},"content":" getFeedbackResponsesForRecipientForQuestion(question.getId(), studentInTeam.getEmail());"},{"lineNumber":1121,"author":{"gitId":"xenosf"},"content":" viewableResponses.addAll(responses);"},{"lineNumber":1122,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1123,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1124,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1125,"author":{"gitId":"xenosf"},"content":" return new ArrayList\u003c\u003e(viewableResponses);"},{"lineNumber":1126,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1127,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1128,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1129,"author":{"gitId":"xenosf"},"content":" * Gets all responses received by a user for a question."},{"lineNumber":1130,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1131,"author":{"gitId":"xenosf"},"content":" private List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForQuestion("},{"lineNumber":1132,"author":{"gitId":"xenosf"},"content":" UUID feedbackQuestionId, String userEmail) {"},{"lineNumber":1133,"author":{"gitId":"xenosf"},"content":" return frDb.getFeedbackResponsesForRecipientForQuestion(feedbackQuestionId, userEmail);"},{"lineNumber":1134,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1135,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1136,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1137,"author":{"gitId":"xenosf"},"content":" * Checks whether instructors can see the question."},{"lineNumber":1138,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1139,"author":{"gitId":"xenosf"},"content":" boolean checkCanInstructorsSeeQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":1140,"author":{"gitId":"xenosf"},"content":" boolean isResponseVisibleToInstructor \u003d"},{"lineNumber":1141,"author":{"gitId":"xenosf"},"content":" feedbackQuestion.getShowResponsesTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1142,"author":{"gitId":"xenosf"},"content":" boolean isGiverVisibleToInstructor \u003d"},{"lineNumber":1143,"author":{"gitId":"xenosf"},"content":" feedbackQuestion.getShowGiverNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1144,"author":{"gitId":"xenosf"},"content":" boolean isRecipientVisibleToInstructor \u003d"},{"lineNumber":1145,"author":{"gitId":"xenosf"},"content":" feedbackQuestion.getShowRecipientNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1146,"author":{"gitId":"xenosf"},"content":" return isResponseVisibleToInstructor \u0026\u0026 isGiverVisibleToInstructor \u0026\u0026 isRecipientVisibleToInstructor;"},{"lineNumber":1147,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1148,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1149,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1150,"author":{"gitId":"xenosf"},"content":" * Checks whether instructors can see the comment."},{"lineNumber":1151,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1152,"author":{"gitId":"xenosf"},"content":" boolean checkCanInstructorsSeeComment(FeedbackResponseComment feedbackResponseComment) {"},{"lineNumber":1153,"author":{"gitId":"xenosf"},"content":" boolean isCommentVisibleToInstructor \u003d"},{"lineNumber":1154,"author":{"gitId":"xenosf"},"content":" feedbackResponseComment.getShowCommentTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1155,"author":{"gitId":"xenosf"},"content":" boolean isGiverVisibleToInstructor \u003d"},{"lineNumber":1156,"author":{"gitId":"xenosf"},"content":" feedbackResponseComment.getShowGiverNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":1157,"author":{"gitId":"xenosf"},"content":" return isCommentVisibleToInstructor \u0026\u0026 isGiverVisibleToInstructor;"},{"lineNumber":1158,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1159,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1160,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":77,"marquestye":23,"xenosf":626,"-":434}},{"path":"src/main/java/teammates/sqllogic/core/FeedbackSessionsLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.HashSet;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Set;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackSessionsDb;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Handles operations related to feedback sessions."},{"lineNumber":25,"author":{"gitId":"-"},"content":" *"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * @see FeedbackSession"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * @see FeedbackSessionsDb"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public final class FeedbackSessionsLogic {"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final String ERROR_NON_EXISTENT_FS_STRING_FORMAT \u003d \"Trying to %s a non-existent feedback session: \";"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final String ERROR_NON_EXISTENT_FS_UPDATE \u003d String.format(ERROR_NON_EXISTENT_FS_STRING_FORMAT, \"update\");"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final String ERROR_FS_ALREADY_PUBLISH \u003d \"Error publishing feedback session: \""},{"lineNumber":36,"author":{"gitId":"-"},"content":" + \"Session has already been published.\";"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final String ERROR_FS_ALREADY_UNPUBLISH \u003d \"Error unpublishing feedback session: \""},{"lineNumber":38,"author":{"gitId":"-"},"content":" + \"Session has already been unpublished.\";"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" private static final int NUMBER_OF_HOURS_BEFORE_CLOSING_ALERT \u003d 24;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private static final int NUMBER_OF_HOURS_BEFORE_OPENING_SOON_ALERT \u003d 24;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" private static final FeedbackSessionsLogic instance \u003d new FeedbackSessionsLogic();"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" private FeedbackSessionsDb fsDb;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic frLogic;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" private UsersLogic usersLogic;"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" private FeedbackSessionsLogic() {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" public static FeedbackSessionsLogic inst() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" void initLogicDependencies(FeedbackSessionsDb fsDb, CoursesLogic coursesLogic,"},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" FeedbackResponsesLogic frLogic, FeedbackQuestionsLogic fqLogic, UsersLogic usersLogic) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.fsDb \u003d fsDb;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" this.frLogic \u003d frLogic;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" this.fqLogic \u003d fqLogic;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" this.coursesLogic \u003d coursesLogic;"},{"lineNumber":65,"author":{"gitId":"domoberzin"},"content":" this.usersLogic \u003d usersLogic;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * Gets a feedback session."},{"lineNumber":70,"author":{"gitId":"-"},"content":" *"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":72,"author":{"gitId":"-"},"content":" */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(UUID id) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return fsDb.getFeedbackSession(id);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Gets a feedback session for {@code feedbackSessionName} and {@code courseId}."},{"lineNumber":80,"author":{"gitId":"-"},"content":" *"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":82,"author":{"gitId":"-"},"content":" */"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" return fsDb.getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Gets all feedback sessions of a course, except those that are soft-deleted."},{"lineNumber":92,"author":{"gitId":"-"},"content":" */"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForCourse(String courseId) {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return fsDb.getFeedbackSessionEntitiesForCourse(courseId).stream()"},{"lineNumber":95,"author":{"gitId":"-"},"content":" .filter(fs -\u003e fs.getDeletedAt() \u003d\u003d null)"},{"lineNumber":96,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Gets all feedback sessions of a course started after time, except those that are soft-deleted."},{"lineNumber":101,"author":{"gitId":"-"},"content":" */"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForCourseStartingAfter(String courseId, Instant after) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return fsDb.getFeedbackSessionEntitiesForCourseStartingAfter(courseId, after).stream()"},{"lineNumber":104,"author":{"gitId":"-"},"content":" .filter(session -\u003e session.getDeletedAt() \u003d\u003d null)"},{"lineNumber":105,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Gets a feedback session from the recycle bin."},{"lineNumber":110,"author":{"gitId":"-"},"content":" *"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * @return null if not found."},{"lineNumber":112,"author":{"gitId":"-"},"content":" */"},{"lineNumber":113,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSessionFromRecycleBin(String feedbackSessionName, String courseId) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" return fsDb.getSoftDeletedFeedbackSession(courseId, feedbackSessionName);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * Gets a list of feedback sessions for instructors."},{"lineNumber":119,"author":{"gitId":"-"},"content":" */"},{"lineNumber":120,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsForInstructors("},{"lineNumber":121,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e courseNotDeletedInstructorList \u003d instructorList.stream()"},{"lineNumber":124,"author":{"gitId":"-"},"content":" .filter(instructor -\u003e coursesLogic.getCourse(instructor.getCourseId()).getDeletedAt() \u003d\u003d null)"},{"lineNumber":125,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e fsList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" for (Instructor instructor : courseNotDeletedInstructorList) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" fsList.addAll(getFeedbackSessionsForCourse(instructor.getCourseId()));"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" return fsList;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":137,"author":{"gitId":"-"},"content":" * Returns a {@code List} of feedback sessions in the Recycle Bin for the instructors."},{"lineNumber":138,"author":{"gitId":"-"},"content":" * \u003cbr\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":" * Omits sessions if the corresponding courses are archived or in Recycle Bin"},{"lineNumber":140,"author":{"gitId":"-"},"content":" */"},{"lineNumber":141,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getSoftDeletedFeedbackSessionsForInstructors("},{"lineNumber":142,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorList) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e courseNotDeletedInstructorList \u003d instructorList.stream()"},{"lineNumber":145,"author":{"gitId":"-"},"content":" .filter(instructor -\u003e coursesLogic.getCourse(instructor.getCourseId()).getDeletedAt() \u003d\u003d null)"},{"lineNumber":146,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e fsList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" for (Instructor instructor : courseNotDeletedInstructorList) {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" fsList.addAll(fsDb.getSoftDeletedFeedbackSessionsForCourse(instructor.getCourseId()));"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" return fsList;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":158,"author":{"gitId":"-"},"content":" * Gets all and only the feedback sessions ongoing within a range of time."},{"lineNumber":159,"author":{"gitId":"-"},"content":" */"},{"lineNumber":160,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getOngoingSessions(Instant rangeStart, Instant rangeEnd) {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" return fsDb.getOngoingSessions(rangeStart, rangeEnd);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":165,"author":{"gitId":"-"},"content":" * Gets a set of giver identifiers that has at least one response under a feedback session."},{"lineNumber":166,"author":{"gitId":"-"},"content":" */"},{"lineNumber":167,"author":{"gitId":"-"},"content":" public Set\u003cString\u003e getGiverSetThatAnsweredFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession \u003d fsDb.getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" Set\u003cString\u003e giverSet \u003d new HashSet\u003c\u003e();"},{"lineNumber":174,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":175,"author":{"gitId":"domoberzin"},"content":" fqLogic.getFeedbackQuestionsForSession(feedbackSession).forEach(question -\u003e {"},{"lineNumber":176,"author":{"gitId":"domoberzin"},"content":" frLogic.getFeedbackResponsesForQuestion(question.getId()).forEach(response -\u003e {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" giverSet.add(response.getGiver());"},{"lineNumber":178,"author":{"gitId":"-"},"content":" });"},{"lineNumber":179,"author":{"gitId":"-"},"content":" });"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":" return giverSet;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":185,"author":{"gitId":"domoberzin"},"content":" * Gets a set of giver identifiers that has at least one response under a feedback session."},{"lineNumber":186,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":187,"author":{"gitId":"domoberzin"},"content":" public Set\u003cString\u003e getGiverSetThatAnsweredFeedbackSession(FeedbackSession fs) {"},{"lineNumber":188,"author":{"gitId":"domoberzin"},"content":" assert fs !\u003d null;"},{"lineNumber":189,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":190,"author":{"gitId":"domoberzin"},"content":" Set\u003cString\u003e giverSet \u003d new HashSet\u003c\u003e();"},{"lineNumber":191,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":192,"author":{"gitId":"domoberzin"},"content":" fqLogic.getFeedbackQuestionsForSession(fs).forEach(question -\u003e {"},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" frLogic.getFeedbackResponsesForQuestion(question.getId()).forEach(response -\u003e {"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" giverSet.add(response.getGiver());"},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" });"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":" });"},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" return giverSet;"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":200,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":202,"author":{"gitId":"-"},"content":" * Creates a feedback session."},{"lineNumber":203,"author":{"gitId":"-"},"content":" *"},{"lineNumber":204,"author":{"gitId":"-"},"content":" * @return created feedback session"},{"lineNumber":205,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the session is not valid"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the session already exist"},{"lineNumber":207,"author":{"gitId":"-"},"content":" */"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public FeedbackSession createFeedbackSession(FeedbackSession session)"},{"lineNumber":209,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" return fsDb.createFeedbackSession(session);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * Updates a feedback session."},{"lineNumber":216,"author":{"gitId":"-"},"content":" *"},{"lineNumber":217,"author":{"gitId":"-"},"content":" * @return updated feedback session"},{"lineNumber":218,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session does not exist"},{"lineNumber":219,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the new fields for feedback session are invalid"},{"lineNumber":220,"author":{"gitId":"-"},"content":" */"},{"lineNumber":221,"author":{"gitId":"-"},"content":" public FeedbackSession updateFeedbackSession(FeedbackSession session)"},{"lineNumber":222,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" return fsDb.updateFeedbackSession(session);"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":227,"author":{"gitId":"-"},"content":" * Unpublishes a feedback session."},{"lineNumber":228,"author":{"gitId":"-"},"content":" *"},{"lineNumber":229,"author":{"gitId":"-"},"content":" * @return the unpublished feedback session"},{"lineNumber":230,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if session is already unpublished"},{"lineNumber":231,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":232,"author":{"gitId":"-"},"content":" */"},{"lineNumber":233,"author":{"gitId":"-"},"content":" public FeedbackSession unpublishFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":234,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" FeedbackSession sessionToUnpublish \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" if (sessionToUnpublish \u003d\u003d null) {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_NON_EXISTENT_FS_UPDATE + courseId + \"/\" + feedbackSessionName);"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":" if (!sessionToUnpublish.isPublished()) {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(ERROR_FS_ALREADY_UNPUBLISH);"},{"lineNumber":243,"author":{"gitId":"-"},"content":" }"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":" sessionToUnpublish.setResultsVisibleFromTime(Const.TIME_REPRESENTS_LATER);"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" return sessionToUnpublish;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":251,"author":{"gitId":"-"},"content":" * Publishes a feedback session."},{"lineNumber":252,"author":{"gitId":"-"},"content":" *"},{"lineNumber":253,"author":{"gitId":"-"},"content":" * @return the published feedback session"},{"lineNumber":254,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if session is already published"},{"lineNumber":255,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":256,"author":{"gitId":"-"},"content":" */"},{"lineNumber":257,"author":{"gitId":"-"},"content":" public FeedbackSession publishFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":258,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InvalidParametersException {"},{"lineNumber":259,"author":{"gitId":"-"},"content":""},{"lineNumber":260,"author":{"gitId":"-"},"content":" FeedbackSession sessionToPublish \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" if (sessionToPublish \u003d\u003d null) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_NON_EXISTENT_FS_UPDATE + courseId + \"/\" + feedbackSessionName);"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":" if (sessionToPublish.isPublished()) {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(ERROR_FS_ALREADY_PUBLISH);"},{"lineNumber":267,"author":{"gitId":"-"},"content":" }"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" sessionToPublish.setResultsVisibleFromTime(Instant.now());"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" return sessionToPublish;"},{"lineNumber":272,"author":{"gitId":"-"},"content":" }"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":275,"author":{"gitId":"-"},"content":" * Deletes a feedback session cascade to its associated questions, responses, deadline extensions and comments."},{"lineNumber":276,"author":{"gitId":"-"},"content":" */"},{"lineNumber":277,"author":{"gitId":"-"},"content":" public void deleteFeedbackSessionCascade(String feedbackSessionName, String courseId) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession \u003d fsDb.getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":279,"author":{"gitId":"-"},"content":" fsDb.deleteFeedbackSession(feedbackSession);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":283,"author":{"gitId":"-"},"content":" * Soft-deletes a specific feedback session to Recycle Bin."},{"lineNumber":284,"author":{"gitId":"-"},"content":" * @return the time when the feedback session is moved to the recycle bin"},{"lineNumber":285,"author":{"gitId":"-"},"content":" */"},{"lineNumber":286,"author":{"gitId":"-"},"content":" public Instant moveFeedbackSessionToRecycleBin(String feedbackSessionName, String courseId)"},{"lineNumber":287,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" return fsDb.softDeleteFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":290,"author":{"gitId":"-"},"content":" }"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * Restores a specific feedback session from Recycle Bin."},{"lineNumber":294,"author":{"gitId":"-"},"content":" */"},{"lineNumber":295,"author":{"gitId":"-"},"content":" public void restoreFeedbackSessionFromRecycleBin(String feedbackSessionName, String courseId)"},{"lineNumber":296,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":297,"author":{"gitId":"-"},"content":" fsDb.restoreDeletedFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":301,"author":{"gitId":"-"},"content":" * Returns true if there are any questions for the specified user type (students/instructors) to answer."},{"lineNumber":302,"author":{"gitId":"-"},"content":" */"},{"lineNumber":303,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionForUserTypeToAnswer(FeedbackSession session, boolean isInstructor) {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" if (!session.isVisible()) {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" return isInstructor"},{"lineNumber":309,"author":{"gitId":"-"},"content":" ? fqLogic.hasFeedbackQuestionsForInstructors(session.getFeedbackQuestions(), false)"},{"lineNumber":310,"author":{"gitId":"-"},"content":" : fqLogic.hasFeedbackQuestionsForStudents(session.getFeedbackQuestions());"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":314,"author":{"gitId":"-"},"content":" * Returns true if the feedback session is viewable by the given user type (students/instructors)."},{"lineNumber":315,"author":{"gitId":"-"},"content":" */"},{"lineNumber":316,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionViewableToUserType(FeedbackSession session, boolean isInstructor) {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" // Allow user to view the feedback session if there are questions for them"},{"lineNumber":318,"author":{"gitId":"-"},"content":" if (isFeedbackSessionForUserTypeToAnswer(session, isInstructor)) {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":320,"author":{"gitId":"-"},"content":" }"},{"lineNumber":321,"author":{"gitId":"-"},"content":""},{"lineNumber":322,"author":{"gitId":"-"},"content":" // Allow user to view the feedback session if there are any question whose responses are visible to the user"},{"lineNumber":323,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsWithVisibleResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":324,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsForUser \u003d session.getFeedbackQuestions();"},{"lineNumber":325,"author":{"gitId":"-"},"content":" for (FeedbackQuestion question : questionsForUser) {"},{"lineNumber":326,"author":{"gitId":"-"},"content":" if (!isInstructor \u0026\u0026 frLogic.isResponseOfFeedbackQuestionVisibleToStudent(question)"},{"lineNumber":327,"author":{"gitId":"-"},"content":" || isInstructor \u0026\u0026 frLogic.isResponseOfFeedbackQuestionVisibleToInstructor(question)) {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" // We only need one question with visible responses for the entire session to be visible"},{"lineNumber":329,"author":{"gitId":"-"},"content":" questionsWithVisibleResponses.add(question);"},{"lineNumber":330,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":331,"author":{"gitId":"-"},"content":" }"},{"lineNumber":332,"author":{"gitId":"-"},"content":" }"},{"lineNumber":333,"author":{"gitId":"-"},"content":""},{"lineNumber":334,"author":{"gitId":"-"},"content":" return session.isVisible() \u0026\u0026 !questionsWithVisibleResponses.isEmpty();"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":338,"author":{"gitId":"-"},"content":" * Checks whether a student has attempted a feedback session."},{"lineNumber":339,"author":{"gitId":"-"},"content":" *"},{"lineNumber":340,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf feedback session consists of all team questions, session is attempted by student only"},{"lineNumber":341,"author":{"gitId":"-"},"content":" * if someone from the team has responded. If feedback session has some individual questions,"},{"lineNumber":342,"author":{"gitId":"-"},"content":" * session is attempted only if the student has responded to any of the individual questions"},{"lineNumber":343,"author":{"gitId":"-"},"content":" * (regardless of the completion status of the team questions).\u003c/p\u003e"},{"lineNumber":344,"author":{"gitId":"-"},"content":" */"},{"lineNumber":345,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionAttemptedByStudent(FeedbackSession session, String userEmail, String userTeam) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":347,"author":{"gitId":"-"},"content":" assert userEmail !\u003d null;"},{"lineNumber":348,"author":{"gitId":"-"},"content":" assert userTeam !\u003d null;"},{"lineNumber":349,"author":{"gitId":"-"},"content":""},{"lineNumber":350,"author":{"gitId":"-"},"content":" if (!fqLogic.hasFeedbackQuestionsForStudents(session.getFeedbackQuestions())) {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" // if there are no questions for student, session is attempted"},{"lineNumber":352,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":353,"author":{"gitId":"-"},"content":" } else if (fqLogic.hasFeedbackQuestionsForGiverType("},{"lineNumber":354,"author":{"gitId":"-"},"content":" session.getFeedbackQuestions(), FeedbackParticipantType.STUDENTS)) {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" // case where there are some individual questions"},{"lineNumber":356,"author":{"gitId":"-"},"content":" return frLogic.hasGiverRespondedForSession(userEmail, session.getFeedbackQuestions());"},{"lineNumber":357,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" // case where all are team questions"},{"lineNumber":359,"author":{"gitId":"-"},"content":" return frLogic.hasGiverRespondedForSession(userTeam, session.getFeedbackQuestions());"},{"lineNumber":360,"author":{"gitId":"-"},"content":" }"},{"lineNumber":361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":362,"author":{"gitId":"-"},"content":""},{"lineNumber":363,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":364,"author":{"gitId":"-"},"content":" * Checks whether an instructor has attempted a feedback session."},{"lineNumber":365,"author":{"gitId":"-"},"content":" *"},{"lineNumber":366,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf there is no question for instructors, the feedback session is considered as attempted.\u003c/p\u003e"},{"lineNumber":367,"author":{"gitId":"-"},"content":" */"},{"lineNumber":368,"author":{"gitId":"-"},"content":" public boolean isFeedbackSessionAttemptedByInstructor(FeedbackSession session, String userEmail) {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":370,"author":{"gitId":"-"},"content":" assert userEmail !\u003d null;"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":" if (frLogic.hasGiverRespondedForSession(userEmail, session.getFeedbackQuestions())) {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":374,"author":{"gitId":"-"},"content":" }"},{"lineNumber":375,"author":{"gitId":"-"},"content":""},{"lineNumber":376,"author":{"gitId":"-"},"content":" // if there is no question for instructor, session is attempted"},{"lineNumber":377,"author":{"gitId":"-"},"content":" return !fqLogic.hasFeedbackQuestionsForInstructors(session.getFeedbackQuestions(), session.isCreator(userEmail));"},{"lineNumber":378,"author":{"gitId":"-"},"content":" }"},{"lineNumber":379,"author":{"gitId":"-"},"content":""},{"lineNumber":380,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":381,"author":{"gitId":"-"},"content":" * After an update to feedback session\u0027s fields, may need to adjust the email status of the session."},{"lineNumber":382,"author":{"gitId":"-"},"content":" * @param session recently updated session."},{"lineNumber":383,"author":{"gitId":"-"},"content":" */"},{"lineNumber":384,"author":{"gitId":"-"},"content":" public void adjustFeedbackSessionEmailStatusAfterUpdate(FeedbackSession session) {"},{"lineNumber":385,"author":{"gitId":"-"},"content":" // reset isOpenEmailSent if the session has opened but is being un-opened"},{"lineNumber":386,"author":{"gitId":"-"},"content":" // now, or else leave it as sent if so."},{"lineNumber":387,"author":{"gitId":"-"},"content":" if (session.isOpenEmailSent()) {"},{"lineNumber":388,"author":{"gitId":"-"},"content":" session.setOpenEmailSent(session.isOpened());"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":" // also reset isOpeningSoonEmailSent"},{"lineNumber":391,"author":{"gitId":"-"},"content":" session.setOpeningSoonEmailSent("},{"lineNumber":392,"author":{"gitId":"domoberzin"},"content":" session.isOpened() || session.isOpeningInHours(NUMBER_OF_HOURS_BEFORE_OPENING_SOON_ALERT));"},{"lineNumber":393,"author":{"gitId":"-"},"content":" }"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":" // reset isClosedEmailSent if the session has closed but is being un-closed"},{"lineNumber":396,"author":{"gitId":"-"},"content":" // now, or else leave it as sent if so."},{"lineNumber":397,"author":{"gitId":"-"},"content":" if (session.isClosedEmailSent()) {"},{"lineNumber":398,"author":{"gitId":"-"},"content":" session.setClosedEmailSent(session.isClosed());"},{"lineNumber":399,"author":{"gitId":"-"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" // also reset isClosingSoonEmailSent"},{"lineNumber":401,"author":{"gitId":"-"},"content":" session.setClosingSoonEmailSent("},{"lineNumber":402,"author":{"gitId":"domoberzin"},"content":" session.isClosed() || session.isClosedAfter(NUMBER_OF_HOURS_BEFORE_CLOSING_ALERT));"},{"lineNumber":403,"author":{"gitId":"-"},"content":" }"},{"lineNumber":404,"author":{"gitId":"-"},"content":""},{"lineNumber":405,"author":{"gitId":"-"},"content":" // reset isPublishedEmailSent if the session has been published but is"},{"lineNumber":406,"author":{"gitId":"-"},"content":" // going to be unpublished now, or else leave it as sent if so."},{"lineNumber":407,"author":{"gitId":"-"},"content":" if (session.isPublishedEmailSent()) {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" session.setPublishedEmailSent(session.isPublished());"},{"lineNumber":409,"author":{"gitId":"-"},"content":" }"},{"lineNumber":410,"author":{"gitId":"-"},"content":" }"},{"lineNumber":411,"author":{"gitId":"-"},"content":""},{"lineNumber":412,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":413,"author":{"gitId":"-"},"content":" * Criteria: must be published, publishEmail must be enabled and"},{"lineNumber":414,"author":{"gitId":"-"},"content":" * resultsVisibleTime must be custom."},{"lineNumber":415,"author":{"gitId":"-"},"content":" *"},{"lineNumber":416,"author":{"gitId":"-"},"content":" * @return returns a list of sessions that require automated emails to be"},{"lineNumber":417,"author":{"gitId":"-"},"content":" * sent as they are published"},{"lineNumber":418,"author":{"gitId":"-"},"content":" */"},{"lineNumber":419,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent() {"},{"lineNumber":420,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessionsToSendEmailsFor \u003d new ArrayList\u003c\u003e();"},{"lineNumber":421,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingPublishedEmail();"},{"lineNumber":422,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":423,"author":{"gitId":"-"},"content":""},{"lineNumber":424,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" // automated emails are required only for custom publish times"},{"lineNumber":426,"author":{"gitId":"-"},"content":" if (session.isPublished()"},{"lineNumber":427,"author":{"gitId":"-"},"content":" \u0026\u0026 !TimeHelper.isSpecialTime(session.getResultsVisibleFromTime())"},{"lineNumber":428,"author":{"gitId":"-"},"content":" \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":429,"author":{"gitId":"-"},"content":" sessionsToSendEmailsFor.add(session);"},{"lineNumber":430,"author":{"gitId":"-"},"content":" }"},{"lineNumber":431,"author":{"gitId":"-"},"content":" }"},{"lineNumber":432,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":433,"author":{"gitId":"-"},"content":" sessionsToSendEmailsFor.size()));"},{"lineNumber":434,"author":{"gitId":"-"},"content":" return sessionsToSendEmailsFor;"},{"lineNumber":435,"author":{"gitId":"-"},"content":" }"},{"lineNumber":436,"author":{"gitId":"-"},"content":""},{"lineNumber":437,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":438,"author":{"gitId":"-"},"content":" * Returns a list of sessions that are going to close within the next 24 hours."},{"lineNumber":439,"author":{"gitId":"-"},"content":" */"},{"lineNumber":440,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsClosingWithinTimeLimit() {"},{"lineNumber":441,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e requiredSessions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":442,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingClosingSoonEmail();"},{"lineNumber":443,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":444,"author":{"gitId":"-"},"content":""},{"lineNumber":445,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" if (session.isClosingWithinTimeLimit(NUMBER_OF_HOURS_BEFORE_CLOSING_ALERT)"},{"lineNumber":447,"author":{"gitId":"-"},"content":" \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":448,"author":{"gitId":"-"},"content":" requiredSessions.add(session);"},{"lineNumber":449,"author":{"gitId":"-"},"content":" }"},{"lineNumber":450,"author":{"gitId":"-"},"content":" }"},{"lineNumber":451,"author":{"gitId":"-"},"content":""},{"lineNumber":452,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":453,"author":{"gitId":"-"},"content":" requiredSessions.size()));"},{"lineNumber":454,"author":{"gitId":"-"},"content":" return requiredSessions;"},{"lineNumber":455,"author":{"gitId":"-"},"content":" }"},{"lineNumber":456,"author":{"gitId":"-"},"content":""},{"lineNumber":457,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":458,"author":{"gitId":"-"},"content":" * Returns a list of sessions that are going to open in 24 hours."},{"lineNumber":459,"author":{"gitId":"-"},"content":" */"},{"lineNumber":460,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsOpeningWithinTimeLimit() {"},{"lineNumber":461,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e requiredSessions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":462,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingOpeningSoonEmail();"},{"lineNumber":463,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":464,"author":{"gitId":"-"},"content":""},{"lineNumber":465,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":466,"author":{"gitId":"-"},"content":" if (session.isOpeningWithinTimeLimit(NUMBER_OF_HOURS_BEFORE_OPENING_SOON_ALERT)"},{"lineNumber":467,"author":{"gitId":"-"},"content":" \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":468,"author":{"gitId":"-"},"content":" requiredSessions.add(session);"},{"lineNumber":469,"author":{"gitId":"-"},"content":" }"},{"lineNumber":470,"author":{"gitId":"-"},"content":" }"},{"lineNumber":471,"author":{"gitId":"-"},"content":""},{"lineNumber":472,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":473,"author":{"gitId":"-"},"content":" requiredSessions.size()));"},{"lineNumber":474,"author":{"gitId":"-"},"content":" return requiredSessions;"},{"lineNumber":475,"author":{"gitId":"-"},"content":" }"},{"lineNumber":476,"author":{"gitId":"-"},"content":""},{"lineNumber":477,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":478,"author":{"gitId":"-"},"content":" * Returns a list of sessions that were closed within past hour."},{"lineNumber":479,"author":{"gitId":"-"},"content":" */"},{"lineNumber":480,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsClosedWithinThePastHour() {"},{"lineNumber":481,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e requiredSessions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":482,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingClosedEmail();"},{"lineNumber":483,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":484,"author":{"gitId":"-"},"content":""},{"lineNumber":485,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":486,"author":{"gitId":"-"},"content":" // is session closed in the past 1 hour"},{"lineNumber":487,"author":{"gitId":"-"},"content":" if (session.isClosedWithinPastHour()"},{"lineNumber":488,"author":{"gitId":"-"},"content":" \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":489,"author":{"gitId":"-"},"content":" requiredSessions.add(session);"},{"lineNumber":490,"author":{"gitId":"-"},"content":" }"},{"lineNumber":491,"author":{"gitId":"-"},"content":" }"},{"lineNumber":492,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":493,"author":{"gitId":"-"},"content":" requiredSessions.size()));"},{"lineNumber":494,"author":{"gitId":"-"},"content":" return requiredSessions;"},{"lineNumber":495,"author":{"gitId":"-"},"content":" }"},{"lineNumber":496,"author":{"gitId":"-"},"content":""},{"lineNumber":497,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":498,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which start within the last 2 hours"},{"lineNumber":499,"author":{"gitId":"-"},"content":" * and need an open email to be sent."},{"lineNumber":500,"author":{"gitId":"-"},"content":" */"},{"lineNumber":501,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsWhichNeedOpenEmailsToBeSent() {"},{"lineNumber":502,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessionsToSendEmailsFor \u003d new ArrayList\u003c\u003e();"},{"lineNumber":503,"author":{"gitId":"-"},"content":" List\u003cFeedbackSession\u003e sessions \u003d fsDb.getFeedbackSessionsPossiblyNeedingOpenEmail();"},{"lineNumber":504,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration: %d\", sessions.size()));"},{"lineNumber":505,"author":{"gitId":"-"},"content":""},{"lineNumber":506,"author":{"gitId":"-"},"content":" for (FeedbackSession session : sessions) {"},{"lineNumber":507,"author":{"gitId":"-"},"content":" if (session.isOpened() \u0026\u0026 session.getCourse().getDeletedAt() \u003d\u003d null) {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" sessionsToSendEmailsFor.add(session);"},{"lineNumber":509,"author":{"gitId":"-"},"content":" }"},{"lineNumber":510,"author":{"gitId":"-"},"content":" }"},{"lineNumber":511,"author":{"gitId":"-"},"content":""},{"lineNumber":512,"author":{"gitId":"-"},"content":" log.info(String.format(\"Number of sessions under consideration after filtering: %d\","},{"lineNumber":513,"author":{"gitId":"-"},"content":" sessionsToSendEmailsFor.size()));"},{"lineNumber":514,"author":{"gitId":"-"},"content":" return sessionsToSendEmailsFor;"},{"lineNumber":515,"author":{"gitId":"-"},"content":" }"},{"lineNumber":516,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":517,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":518,"author":{"gitId":"domoberzin"},"content":" * Gets the expected number of submissions for a feedback session."},{"lineNumber":519,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":520,"author":{"gitId":"domoberzin"},"content":" public int getExpectedTotalSubmission(FeedbackSession fs) {"},{"lineNumber":521,"author":{"gitId":"domoberzin"},"content":" int expectedTotal \u003d 0;"},{"lineNumber":522,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d fqLogic.getFeedbackQuestionsForSession(fs);"},{"lineNumber":523,"author":{"gitId":"domoberzin"},"content":" if (fqLogic.hasFeedbackQuestionsForStudents(questions)) {"},{"lineNumber":524,"author":{"gitId":"domoberzin"},"content":" expectedTotal +\u003d usersLogic.getStudentsForCourse(fs.getCourse().getId()).size();"},{"lineNumber":525,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":526,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":527,"author":{"gitId":"domoberzin"},"content":" // Pre-flight check to ensure there are questions for instructors."},{"lineNumber":528,"author":{"gitId":"domoberzin"},"content":" if (!fqLogic.hasFeedbackQuestionsForInstructors(questions, true)) {"},{"lineNumber":529,"author":{"gitId":"domoberzin"},"content":" return expectedTotal;"},{"lineNumber":530,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":531,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":532,"author":{"gitId":"domoberzin"},"content":" List\u003cInstructor\u003e instructors \u003d usersLogic.getInstructorsForCourse(fs.getCourse().getId());"},{"lineNumber":533,"author":{"gitId":"domoberzin"},"content":" if (instructors.isEmpty()) {"},{"lineNumber":534,"author":{"gitId":"domoberzin"},"content":" return expectedTotal;"},{"lineNumber":535,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":536,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":537,"author":{"gitId":"domoberzin"},"content":" // Check presence of questions for instructors."},{"lineNumber":538,"author":{"gitId":"domoberzin"},"content":" if (fqLogic.hasFeedbackQuestionsForInstructors(fqLogic.getFeedbackQuestionsForSession(fs), false)) {"},{"lineNumber":539,"author":{"gitId":"domoberzin"},"content":" expectedTotal +\u003d instructors.size();"},{"lineNumber":540,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":541,"author":{"gitId":"domoberzin"},"content":" // No questions for instructors. There must be questions for creator."},{"lineNumber":542,"author":{"gitId":"domoberzin"},"content":" List\u003cInstructor\u003e creators \u003d instructors.stream()"},{"lineNumber":543,"author":{"gitId":"domoberzin"},"content":" .filter(instructor -\u003e fs.getCreatorEmail().equals(instructor.getEmail()))"},{"lineNumber":544,"author":{"gitId":"domoberzin"},"content":" .collect(Collectors.toList());"},{"lineNumber":545,"author":{"gitId":"domoberzin"},"content":" expectedTotal +\u003d creators.size();"},{"lineNumber":546,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":547,"author":{"gitId":"domoberzin"},"content":" return expectedTotal;"},{"lineNumber":548,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":549,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":550,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":551,"author":{"gitId":"domoberzin"},"content":" * Gets the actual number of submissions for a feedback session."},{"lineNumber":552,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":553,"author":{"gitId":"domoberzin"},"content":" public int getActualTotalSubmission(FeedbackSession fs) {"},{"lineNumber":554,"author":{"gitId":"domoberzin"},"content":" return getGiverSetThatAnsweredFeedbackSession(fs).size();"},{"lineNumber":555,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":556,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":65,"-":491}},{"path":"src/main/java/teammates/sqllogic/core/LogicStarter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import javax.servlet.ServletContextEvent;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import javax.servlet.ServletContextListener;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountRequestsDb;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountsDb;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.CoursesDb;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.DeadlineExtensionsDb;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackQuestionsDb;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackResponsesDb;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackSessionsDb;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.NotificationsDb;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.UsageStatisticsDb;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.UsersDb;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * Setup in web.xml to register logic classes at application startup."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class LogicStarter implements ServletContextListener {"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Registers dependencies between different logic classes."},{"lineNumber":28,"author":{"gitId":"-"},"content":" */"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static void initializeDependencies() {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" AccountsLogic accountsLogic \u003d AccountsLogic.inst();"},{"lineNumber":31,"author":{"gitId":"-"},"content":" AccountRequestsLogic accountRequestsLogic \u003d AccountRequestsLogic.inst();"},{"lineNumber":32,"author":{"gitId":"-"},"content":" CoursesLogic coursesLogic \u003d CoursesLogic.inst();"},{"lineNumber":33,"author":{"gitId":"-"},"content":" DataBundleLogic dataBundleLogic \u003d DataBundleLogic.inst();"},{"lineNumber":34,"author":{"gitId":"-"},"content":" DeadlineExtensionsLogic deadlineExtensionsLogic \u003d DeadlineExtensionsLogic.inst();"},{"lineNumber":35,"author":{"gitId":"-"},"content":" FeedbackSessionsLogic fsLogic \u003d FeedbackSessionsLogic.inst();"},{"lineNumber":36,"author":{"gitId":"-"},"content":" FeedbackResponsesLogic frLogic \u003d FeedbackResponsesLogic.inst();"},{"lineNumber":37,"author":{"gitId":"-"},"content":" FeedbackResponseCommentsLogic frcLogic \u003d FeedbackResponseCommentsLogic.inst();"},{"lineNumber":38,"author":{"gitId":"-"},"content":" FeedbackQuestionsLogic fqLogic \u003d FeedbackQuestionsLogic.inst();"},{"lineNumber":39,"author":{"gitId":"-"},"content":" NotificationsLogic notificationsLogic \u003d NotificationsLogic.inst();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" UsageStatisticsLogic usageStatisticsLogic \u003d UsageStatisticsLogic.inst();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" UsersLogic usersLogic \u003d UsersLogic.inst();"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" accountRequestsLogic.initLogicDependencies(AccountRequestsDb.inst());"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.initLogicDependencies(AccountsDb.inst(), notificationsLogic, usersLogic, coursesLogic);"},{"lineNumber":45,"author":{"gitId":"-"},"content":" coursesLogic.initLogicDependencies(CoursesDb.inst(), fsLogic, usersLogic);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" dataBundleLogic.initLogicDependencies(accountsLogic, accountRequestsLogic, coursesLogic,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic, fsLogic, fqLogic, frLogic, frcLogic,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" notificationsLogic, usersLogic);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.initLogicDependencies(DeadlineExtensionsDb.inst(), fsLogic);"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" fsLogic.initLogicDependencies(FeedbackSessionsDb.inst(), coursesLogic, frLogic, fqLogic, usersLogic);"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" frLogic.initLogicDependencies(FeedbackResponsesDb.inst(), usersLogic, fqLogic, frcLogic);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" frcLogic.initLogicDependencies(FeedbackResponseCommentsDb.inst());"},{"lineNumber":53,"author":{"gitId":"-"},"content":" fqLogic.initLogicDependencies(FeedbackQuestionsDb.inst(), coursesLogic, frLogic, usersLogic, fsLogic);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" notificationsLogic.initLogicDependencies(NotificationsDb.inst());"},{"lineNumber":55,"author":{"gitId":"-"},"content":" usageStatisticsLogic.initLogicDependencies(UsageStatisticsDb.inst());"},{"lineNumber":56,"author":{"gitId":"-"},"content":" usersLogic.initLogicDependencies(UsersDb.inst(), accountsLogic, frLogic, frcLogic, deadlineExtensionsLogic);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" log.info(\"Initialized dependencies between logic classes\");"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void contextInitialized(ServletContextEvent event) {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" // Invoked by Jetty at application startup."},{"lineNumber":63,"author":{"gitId":"-"},"content":" initializeDependencies();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public void contextDestroyed(ServletContextEvent event) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // Nothing to do"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":2,"yuanxi1":1,"-":68}},{"path":"src/main/java/teammates/sqllogic/core/UsersLogic.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"marquestye"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Comparator;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import java.util.StringJoiner;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPermissionRole;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPrivileges;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EnrollException;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.exception.InstructorUpdateException;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.exception.StudentUpdateException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.util.RequestTracer;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.UsersDb;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.InstructorSearchManager;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.StudentSearchManager;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.ui.request.InstructorCreateRequest;"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Handles operations related to user (instructor \u0026 student)."},{"lineNumber":42,"author":{"gitId":"-"},"content":" *"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * @see User"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * @see UsersDb"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */"},{"lineNumber":46,"author":{"gitId":"-"},"content":"public final class UsersLogic {"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" static final String ERROR_INVALID_TEAM_NAME \u003d"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" \"Team \\\"%s\\\" is detected in both Section \\\"%s\\\" and Section \\\"%s\\\".\";"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" static final String ERROR_INVALID_TEAM_NAME_INSTRUCTION \u003d"},{"lineNumber":51,"author":{"gitId":"domoberzin"},"content":" \"Please use different team names in different sections.\";"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":" static final String ERROR_ENROLL_EXCEED_SECTION_LIMIT \u003d"},{"lineNumber":53,"author":{"gitId":"domoberzin"},"content":" \"You are trying enroll more than %s students in section \\\"%s\\\".\";"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":" static final String ERROR_ENROLL_EXCEED_SECTION_LIMIT_INSTRUCTION \u003d"},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" \"To avoid performance problems, please do not enroll more than %s students in a single section.\";"},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" private static final UsersLogic instance \u003d new UsersLogic();"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" private static final int MAX_KEY_REGENERATION_TRIES \u003d 10;"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" private UsersDb usersDb;"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" private AccountsLogic accountsLogic;"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" private FeedbackResponsesLogic feedbackResponsesLogic;"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsLogic feedbackResponseCommentsLogic;"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" private DeadlineExtensionsLogic deadlineExtensionsLogic;"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" private UsersLogic() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" public static UsersLogic inst() {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" void initLogicDependencies(UsersDb usersDb, AccountsLogic accountsLogic, FeedbackResponsesLogic feedbackResponsesLogic,"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" FeedbackResponseCommentsLogic feedbackResponseCommentsLogic,"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" DeadlineExtensionsLogic deadlineExtensionsLogic) {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.usersDb \u003d usersDb;"},{"lineNumber":83,"author":{"gitId":"-"},"content":" this.accountsLogic \u003d accountsLogic;"},{"lineNumber":84,"author":{"gitId":"-"},"content":" this.feedbackResponsesLogic \u003d feedbackResponsesLogic;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.feedbackResponseCommentsLogic \u003d feedbackResponseCommentsLogic;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.deadlineExtensionsLogic \u003d deadlineExtensionsLogic;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" private InstructorSearchManager getInstructorSearchManager() {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return usersDb.getInstructorSearchManager();"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" private StudentSearchManager getStudentSearchManager() {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return usersDb.getStudentSearchManager();"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Creates or updates search document for the given instructor."},{"lineNumber":99,"author":{"gitId":"-"},"content":" */"},{"lineNumber":100,"author":{"gitId":"-"},"content":" public void putInstructorDocument(Instructor instructor) throws SearchServiceException {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" getInstructorSearchManager().putDocument(instructor);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * Creates or updates search document for the given student."},{"lineNumber":106,"author":{"gitId":"-"},"content":" */"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public void putStudentDocument(Student student) throws SearchServiceException {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" getStudentSearchManager().putDocument(student);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":112,"author":{"gitId":"-"},"content":" * Create an instructor."},{"lineNumber":113,"author":{"gitId":"-"},"content":" *"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * @return the created instructor"},{"lineNumber":115,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the instructor is not valid"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the instructor already exists in the"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * database."},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public Instructor createInstructor(Instructor instructor)"},{"lineNumber":120,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" if (getInstructorForEmail(instructor.getCourseId(), instructor.getEmail()) !\u003d null) {"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":" throw new EntityAlreadyExistsException(\"Instructor already exists.\");"},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":" return usersDb.createInstructor(instructor);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":128,"author":{"gitId":"-"},"content":" * Updates an instructor and cascades to responses and comments if needed."},{"lineNumber":129,"author":{"gitId":"-"},"content":" *"},{"lineNumber":130,"author":{"gitId":"-"},"content":" * @return updated instructor"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the instructor update request is invalid"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if the update violates instructor validity"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the instructor does not exist in the database"},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" public Instructor updateInstructorCascade(String courseId, InstructorCreateRequest instructorRequest) throws"},{"lineNumber":136,"author":{"gitId":"-"},"content":" InvalidParametersException, InstructorUpdateException, EntityDoesNotExistException {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" Instructor instructor;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" String instructorId \u003d instructorRequest.getId();"},{"lineNumber":139,"author":{"gitId":"-"},"content":" if (instructorId \u003d\u003d null) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" instructor \u003d getInstructorForEmail(courseId, instructorRequest.getEmail());"},{"lineNumber":141,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" instructor \u003d getInstructorByGoogleId(courseId, instructorId);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(\"Trying to update an instructor that does not exist.\");"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" verifyAtLeastOneInstructorIsDisplayed("},{"lineNumber":150,"author":{"gitId":"-"},"content":" courseId, instructor.isDisplayedToStudents(), instructorRequest.getIsDisplayedToStudent());"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" String originalEmail \u003d instructor.getEmail();"},{"lineNumber":153,"author":{"gitId":"-"},"content":" boolean needsCascade \u003d false;"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" String newDisplayName \u003d instructorRequest.getDisplayName();"},{"lineNumber":156,"author":{"gitId":"-"},"content":" if (newDisplayName \u003d\u003d null || newDisplayName.isEmpty()) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" newDisplayName \u003d Const.DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR;"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" instructor.setName(SanitizationHelper.sanitizeName(instructorRequest.getName()));"},{"lineNumber":161,"author":{"gitId":"-"},"content":" instructor.setEmail(SanitizationHelper.sanitizeEmail(instructorRequest.getEmail()));"},{"lineNumber":162,"author":{"gitId":"-"},"content":" instructor.setRole(InstructorPermissionRole.getEnum(instructorRequest.getRoleName()));"},{"lineNumber":163,"author":{"gitId":"-"},"content":" instructor.setPrivileges(new InstructorPrivileges(instructorRequest.getRoleName()));"},{"lineNumber":164,"author":{"gitId":"-"},"content":" instructor.setDisplayName(SanitizationHelper.sanitizeName(newDisplayName));"},{"lineNumber":165,"author":{"gitId":"-"},"content":" instructor.setDisplayedToStudents(instructorRequest.getIsDisplayedToStudent());"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" String newEmail \u003d instructor.getEmail();"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (!originalEmail.equals(newEmail)) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" needsCascade \u003d true;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" if (!instructor.isValid()) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(instructor.getInvalidityInfo());"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" if (needsCascade) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" // cascade responses"},{"lineNumber":179,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responsesFromUser \u003d"},{"lineNumber":180,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.getFeedbackResponsesFromGiverForCourse(courseId, originalEmail);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" for (FeedbackResponse responseFromUser : responsesFromUser) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d responseFromUser.getFeedbackQuestion();"},{"lineNumber":183,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":184,"author":{"gitId":"-"},"content":" || question.getGiverType() \u003d\u003d FeedbackParticipantType.SELF) {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" responseFromUser.setGiver(newEmail);"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponse\u003e responsesToUser \u003d"},{"lineNumber":189,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.getFeedbackResponsesForRecipientForCourse(courseId, originalEmail);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" for (FeedbackResponse responseToUser : responsesToUser) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" FeedbackQuestion question \u003d responseToUser.getFeedbackQuestion();"},{"lineNumber":192,"author":{"gitId":"-"},"content":" if (question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":193,"author":{"gitId":"-"},"content":" || question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":194,"author":{"gitId":"-"},"content":" \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.SELF) {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" responseToUser.setRecipient(newEmail);"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":" // cascade comments"},{"lineNumber":199,"author":{"gitId":"-"},"content":" feedbackResponseCommentsLogic.updateFeedbackResponseCommentsEmails(courseId, originalEmail, newEmail);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" return instructor;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * Verifies that at least one instructor is displayed to studens."},{"lineNumber":207,"author":{"gitId":"-"},"content":" *"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if there is no instructor displayed to students."},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" void verifyAtLeastOneInstructorIsDisplayed(String courseId, boolean isOriginalInstructorDisplayed,"},{"lineNumber":211,"author":{"gitId":"-"},"content":" boolean isEditedInstructorDisplayed)"},{"lineNumber":212,"author":{"gitId":"-"},"content":" throws InstructorUpdateException {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsDisplayed \u003d usersDb.getInstructorsDisplayedToStudents(courseId);"},{"lineNumber":214,"author":{"gitId":"-"},"content":" boolean isEditedInstructorChangedToNonVisible \u003d isOriginalInstructorDisplayed \u0026\u0026 !isEditedInstructorDisplayed;"},{"lineNumber":215,"author":{"gitId":"-"},"content":" boolean isNoInstructorMadeVisible \u003d instructorsDisplayed.isEmpty() \u0026\u0026 !isEditedInstructorDisplayed;"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" if (isNoInstructorMadeVisible || instructorsDisplayed.size() \u003d\u003d 1 \u0026\u0026 isEditedInstructorChangedToNonVisible) {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" throw new InstructorUpdateException(\"At least one instructor must be displayed to students\");"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":223,"author":{"gitId":"-"},"content":" * Creates a student."},{"lineNumber":224,"author":{"gitId":"-"},"content":" *"},{"lineNumber":225,"author":{"gitId":"-"},"content":" * @return the created student"},{"lineNumber":226,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the student is not valid"},{"lineNumber":227,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the student already exists in the"},{"lineNumber":228,"author":{"gitId":"-"},"content":" * database."},{"lineNumber":229,"author":{"gitId":"-"},"content":" */"},{"lineNumber":230,"author":{"gitId":"-"},"content":" public Student createStudent(Student student) throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" return usersDb.createStudent(student);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":235,"author":{"gitId":"-"},"content":" * Gets instructor associated with {@code id}."},{"lineNumber":236,"author":{"gitId":"-"},"content":" *"},{"lineNumber":237,"author":{"gitId":"-"},"content":" * @param id Id of Instructor."},{"lineNumber":238,"author":{"gitId":"-"},"content":" * @return Returns Instructor if found else null."},{"lineNumber":239,"author":{"gitId":"-"},"content":" */"},{"lineNumber":240,"author":{"gitId":"-"},"content":" public Instructor getInstructor(UUID id) {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" return usersDb.getInstructor(id);"},{"lineNumber":244,"author":{"gitId":"-"},"content":" }"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * Gets the instructor with the specified email."},{"lineNumber":248,"author":{"gitId":"-"},"content":" */"},{"lineNumber":249,"author":{"gitId":"-"},"content":" public Instructor getInstructorForEmail(String courseId, String userEmail) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return usersDb.getInstructorForEmail(courseId, userEmail);"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":254,"author":{"gitId":"-"},"content":" * Gets instructors matching any of the specified emails."},{"lineNumber":255,"author":{"gitId":"-"},"content":" */"},{"lineNumber":256,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForEmails(String courseId, List\u003cString\u003e userEmails) {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" return usersDb.getInstructorsForEmails(courseId, userEmails);"},{"lineNumber":258,"author":{"gitId":"-"},"content":" }"},{"lineNumber":259,"author":{"gitId":"-"},"content":""},{"lineNumber":260,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":261,"author":{"gitId":"-"},"content":" * Gets an instructor by associated {@code regkey}."},{"lineNumber":262,"author":{"gitId":"-"},"content":" */"},{"lineNumber":263,"author":{"gitId":"-"},"content":" public Instructor getInstructorByRegistrationKey(String regKey) {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" assert regKey !\u003d null;"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":" return usersDb.getInstructorByRegKey(regKey);"},{"lineNumber":267,"author":{"gitId":"-"},"content":" }"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":270,"author":{"gitId":"-"},"content":" * Gets an instructor by associated {@code googleId}."},{"lineNumber":271,"author":{"gitId":"-"},"content":" */"},{"lineNumber":272,"author":{"gitId":"-"},"content":" public Instructor getInstructorByGoogleId(String courseId, String googleId) {"},{"lineNumber":273,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":274,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" return usersDb.getInstructorByGoogleId(courseId, googleId);"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":280,"author":{"gitId":"-"},"content":" * Searches instructors in the whole system. Used by admin only."},{"lineNumber":281,"author":{"gitId":"-"},"content":" *"},{"lineNumber":282,"author":{"gitId":"-"},"content":" * @return List of found instructors in the whole system. Null if no result found."},{"lineNumber":283,"author":{"gitId":"-"},"content":" */"},{"lineNumber":284,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e searchInstructorsInWholeSystem(String queryString)"},{"lineNumber":285,"author":{"gitId":"-"},"content":" throws SearchServiceException {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" return usersDb.searchInstructorsInWholeSystem(queryString);"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":290,"author":{"gitId":"-"},"content":" * Deletes an instructor or student."},{"lineNumber":291,"author":{"gitId":"-"},"content":" */"},{"lineNumber":292,"author":{"gitId":"-"},"content":" public \u003cT extends User\u003e void deleteUser(T user) {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" usersDb.deleteUser(user);"},{"lineNumber":294,"author":{"gitId":"-"},"content":" }"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":297,"author":{"gitId":"-"},"content":" * Deletes an instructor and cascades deletion to"},{"lineNumber":298,"author":{"gitId":"-"},"content":" * associated feedback responses, deadline extensions and comments."},{"lineNumber":299,"author":{"gitId":"-"},"content":" *"},{"lineNumber":300,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the instructor does not exist."},{"lineNumber":301,"author":{"gitId":"-"},"content":" */"},{"lineNumber":302,"author":{"gitId":"-"},"content":" public void deleteInstructorCascade(String courseId, String email) {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" Instructor instructor \u003d getInstructorForEmail(courseId, email);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.deleteFeedbackResponsesForCourseCascade(courseId, email);"},{"lineNumber":309,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.deleteDeadlineExtensionsForUser(instructor);"},{"lineNumber":310,"author":{"gitId":"-"},"content":" deleteUser(instructor);"},{"lineNumber":311,"author":{"gitId":"-"},"content":" }"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":314,"author":{"gitId":"-"},"content":" * Gets the list of instructors with co-owner privileges in a course."},{"lineNumber":315,"author":{"gitId":"-"},"content":" */"},{"lineNumber":316,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getCoOwnersForCourse(String courseId) {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d getInstructorsForCourse(courseId);"},{"lineNumber":318,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorsWithCoOwnerPrivileges \u003d new ArrayList\u003c\u003e();"},{"lineNumber":319,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" if (!instructor.hasCoownerPrivileges()) {"},{"lineNumber":321,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" }"},{"lineNumber":323,"author":{"gitId":"-"},"content":" instructorsWithCoOwnerPrivileges.add(instructor);"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":" return instructorsWithCoOwnerPrivileges;"},{"lineNumber":326,"author":{"gitId":"-"},"content":" }"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":329,"author":{"gitId":"-"},"content":" * Gets a list of instructors for the specified course."},{"lineNumber":330,"author":{"gitId":"-"},"content":" */"},{"lineNumber":331,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForCourse(String courseId) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructorReturnList \u003d usersDb.getInstructorsForCourse(courseId);"},{"lineNumber":333,"author":{"gitId":"-"},"content":" sortByName(instructorReturnList);"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" return instructorReturnList;"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":339,"author":{"gitId":"-"},"content":" * Check if the instructors with the provided emails exist in the course."},{"lineNumber":340,"author":{"gitId":"-"},"content":" */"},{"lineNumber":341,"author":{"gitId":"-"},"content":" public boolean verifyInstructorsExistInCourse(String courseId, List\u003cString\u003e emails) {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d usersDb.getInstructorsForEmails(courseId, emails);"},{"lineNumber":343,"author":{"gitId":"-"},"content":" Map\u003cString, User\u003e emailInstructorMap \u003d convertUserListToEmailUserMap(instructors);"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":" for (String email : emails) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" if (!emailInstructorMap.containsKey(email)) {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":348,"author":{"gitId":"-"},"content":" }"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":350,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":354,"author":{"gitId":"-"},"content":" * Gets all instructors associated with a googleId."},{"lineNumber":355,"author":{"gitId":"-"},"content":" */"},{"lineNumber":356,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForGoogleId(String googleId) {"},{"lineNumber":357,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":358,"author":{"gitId":"-"},"content":" return usersDb.getInstructorsForGoogleId(googleId);"},{"lineNumber":359,"author":{"gitId":"-"},"content":" }"},{"lineNumber":360,"author":{"gitId":"-"},"content":""},{"lineNumber":361,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":362,"author":{"gitId":"-"},"content":" * Make the instructor join the course, i.e. associate an account to the instructor with the given googleId."},{"lineNumber":363,"author":{"gitId":"-"},"content":" * Creates an account for the instructor if no existing account is found."},{"lineNumber":364,"author":{"gitId":"-"},"content":" * Preconditions:"},{"lineNumber":365,"author":{"gitId":"-"},"content":" * Parameters regkey and googleId are non-null."},{"lineNumber":366,"author":{"gitId":"-"},"content":" * @throws EntityAlreadyExistsException if the instructor already exists in the database."},{"lineNumber":367,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if the instructor parameters are not valid"},{"lineNumber":368,"author":{"gitId":"-"},"content":" */"},{"lineNumber":369,"author":{"gitId":"-"},"content":" public Instructor joinCourseForInstructor(String googleId, Instructor instructor)"},{"lineNumber":370,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" if (googleId \u003d\u003d null) {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Instructor\u0027s googleId cannot be null\");"},{"lineNumber":373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":374,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":375,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(\"Instructor cannot be null\");"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"-"},"content":" // setting account for instructor sets it as registered"},{"lineNumber":379,"author":{"gitId":"-"},"content":" if (instructor.getAccount() \u003d\u003d null) {"},{"lineNumber":380,"author":{"gitId":"-"},"content":" Account dbAccount \u003d accountsLogic.getAccountForGoogleId(googleId);"},{"lineNumber":381,"author":{"gitId":"-"},"content":" if (dbAccount !\u003d null) {"},{"lineNumber":382,"author":{"gitId":"-"},"content":" instructor.setAccount(dbAccount);"},{"lineNumber":383,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":384,"author":{"gitId":"-"},"content":" Account account \u003d new Account(googleId, instructor.getName(), instructor.getEmail());"},{"lineNumber":385,"author":{"gitId":"-"},"content":" instructor.setAccount(account);"},{"lineNumber":386,"author":{"gitId":"-"},"content":" accountsLogic.createAccount(account);"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":389,"author":{"gitId":"-"},"content":" instructor.setGoogleId(googleId);"},{"lineNumber":390,"author":{"gitId":"-"},"content":" }"},{"lineNumber":391,"author":{"gitId":"-"},"content":" usersDb.updateUser(instructor);"},{"lineNumber":392,"author":{"gitId":"-"},"content":""},{"lineNumber":393,"author":{"gitId":"-"},"content":" // Update the googleId of the student entity for the instructor which was created from sample data."},{"lineNumber":394,"author":{"gitId":"-"},"content":" Student student \u003d getStudentForEmail(instructor.getCourseId(), instructor.getEmail());"},{"lineNumber":395,"author":{"gitId":"-"},"content":" if (student !\u003d null) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" if (student.getAccount() \u003d\u003d null) {"},{"lineNumber":397,"author":{"gitId":"-"},"content":" Account account \u003d new Account(googleId, student.getName(), student.getEmail());"},{"lineNumber":398,"author":{"gitId":"-"},"content":" student.setAccount(account);"},{"lineNumber":399,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":400,"author":{"gitId":"-"},"content":" student.getAccount().setGoogleId(googleId);"},{"lineNumber":401,"author":{"gitId":"-"},"content":" }"},{"lineNumber":402,"author":{"gitId":"-"},"content":" usersDb.updateUser(student);"},{"lineNumber":403,"author":{"gitId":"-"},"content":" }"},{"lineNumber":404,"author":{"gitId":"-"},"content":""},{"lineNumber":405,"author":{"gitId":"-"},"content":" return instructor;"},{"lineNumber":406,"author":{"gitId":"-"},"content":" }"},{"lineNumber":407,"author":{"gitId":"-"},"content":""},{"lineNumber":408,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":409,"author":{"gitId":"-"},"content":" * Regenerates the registration key for the instructor with email address {@code email} in course {@code courseId}."},{"lineNumber":410,"author":{"gitId":"-"},"content":" *"},{"lineNumber":411,"author":{"gitId":"-"},"content":" * @return the instructor with the new registration key."},{"lineNumber":412,"author":{"gitId":"-"},"content":" * @throws InstructorUpdateException if system was unable to generate a new registration key."},{"lineNumber":413,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the instructor does not exist."},{"lineNumber":414,"author":{"gitId":"-"},"content":" */"},{"lineNumber":415,"author":{"gitId":"-"},"content":" public Instructor regenerateInstructorRegistrationKey(String courseId, String email)"},{"lineNumber":416,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, InstructorUpdateException {"},{"lineNumber":417,"author":{"gitId":"-"},"content":" Instructor instructor \u003d getInstructorForEmail(courseId, email);"},{"lineNumber":418,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":419,"author":{"gitId":"-"},"content":" String errorMessage \u003d String.format("},{"lineNumber":420,"author":{"gitId":"-"},"content":" \"The instructor with the email %s could not be found for the course with ID [%s].\", email, courseId);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(errorMessage);"},{"lineNumber":422,"author":{"gitId":"-"},"content":" }"},{"lineNumber":423,"author":{"gitId":"-"},"content":""},{"lineNumber":424,"author":{"gitId":"-"},"content":" String oldKey \u003d instructor.getRegKey();"},{"lineNumber":425,"author":{"gitId":"-"},"content":" int numTries \u003d 0;"},{"lineNumber":426,"author":{"gitId":"-"},"content":" while (numTries \u003c MAX_KEY_REGENERATION_TRIES) {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" instructor.generateNewRegistrationKey();"},{"lineNumber":428,"author":{"gitId":"-"},"content":" if (!instructor.getRegKey().equals(oldKey)) {"},{"lineNumber":429,"author":{"gitId":"-"},"content":" return instructor;"},{"lineNumber":430,"author":{"gitId":"-"},"content":" }"},{"lineNumber":431,"author":{"gitId":"-"},"content":" numTries++;"},{"lineNumber":432,"author":{"gitId":"-"},"content":" }"},{"lineNumber":433,"author":{"gitId":"-"},"content":""},{"lineNumber":434,"author":{"gitId":"-"},"content":" throw new InstructorUpdateException(\"Could not regenerate a new course registration key for the instructor.\");"},{"lineNumber":435,"author":{"gitId":"-"},"content":" }"},{"lineNumber":436,"author":{"gitId":"-"},"content":""},{"lineNumber":437,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":438,"author":{"gitId":"-"},"content":" * Regenerates the registration key for the student with email address {@code email} in course {@code courseId}."},{"lineNumber":439,"author":{"gitId":"-"},"content":" *"},{"lineNumber":440,"author":{"gitId":"-"},"content":" * @return the student with the new registration key."},{"lineNumber":441,"author":{"gitId":"-"},"content":" * @throws StudentUpdateException if system was unable to generate a new registration key."},{"lineNumber":442,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the student does not exist."},{"lineNumber":443,"author":{"gitId":"-"},"content":" */"},{"lineNumber":444,"author":{"gitId":"-"},"content":" public Student regenerateStudentRegistrationKey(String courseId, String email)"},{"lineNumber":445,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException, StudentUpdateException {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" Student student \u003d getStudentForEmail(courseId, email);"},{"lineNumber":447,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":448,"author":{"gitId":"-"},"content":" String errorMessage \u003d String.format("},{"lineNumber":449,"author":{"gitId":"-"},"content":" \"The student with the email %s could not be found for the course with ID [%s].\", email, courseId);"},{"lineNumber":450,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(errorMessage);"},{"lineNumber":451,"author":{"gitId":"-"},"content":" }"},{"lineNumber":452,"author":{"gitId":"-"},"content":""},{"lineNumber":453,"author":{"gitId":"-"},"content":" String oldKey \u003d student.getRegKey();"},{"lineNumber":454,"author":{"gitId":"-"},"content":" int numTries \u003d 0;"},{"lineNumber":455,"author":{"gitId":"-"},"content":" while (numTries \u003c MAX_KEY_REGENERATION_TRIES) {"},{"lineNumber":456,"author":{"gitId":"-"},"content":" student.generateNewRegistrationKey();"},{"lineNumber":457,"author":{"gitId":"-"},"content":" if (!student.getRegKey().equals(oldKey)) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" return student;"},{"lineNumber":459,"author":{"gitId":"-"},"content":" }"},{"lineNumber":460,"author":{"gitId":"-"},"content":" numTries++;"},{"lineNumber":461,"author":{"gitId":"-"},"content":" }"},{"lineNumber":462,"author":{"gitId":"-"},"content":""},{"lineNumber":463,"author":{"gitId":"-"},"content":" throw new StudentUpdateException(\"Could not regenerate a new course registration key for the student.\");"},{"lineNumber":464,"author":{"gitId":"-"},"content":" }"},{"lineNumber":465,"author":{"gitId":"-"},"content":""},{"lineNumber":466,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":467,"author":{"gitId":"-"},"content":" * Returns true if the user associated with the googleId is an instructor in any course in the system."},{"lineNumber":468,"author":{"gitId":"-"},"content":" */"},{"lineNumber":469,"author":{"gitId":"-"},"content":" public boolean isInstructorInAnyCourse(String googleId) {"},{"lineNumber":470,"author":{"gitId":"-"},"content":" return !usersDb.getAllInstructorsByGoogleId(googleId).isEmpty();"},{"lineNumber":471,"author":{"gitId":"-"},"content":" }"},{"lineNumber":472,"author":{"gitId":"-"},"content":""},{"lineNumber":473,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":474,"author":{"gitId":"-"},"content":" * Gets student associated with {@code id}."},{"lineNumber":475,"author":{"gitId":"-"},"content":" *"},{"lineNumber":476,"author":{"gitId":"-"},"content":" * @param id Id of Student."},{"lineNumber":477,"author":{"gitId":"-"},"content":" * @return Returns Student if found else null."},{"lineNumber":478,"author":{"gitId":"-"},"content":" */"},{"lineNumber":479,"author":{"gitId":"-"},"content":" public Student getStudent(UUID id) {"},{"lineNumber":480,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":481,"author":{"gitId":"-"},"content":""},{"lineNumber":482,"author":{"gitId":"-"},"content":" return usersDb.getStudent(id);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" }"},{"lineNumber":484,"author":{"gitId":"-"},"content":""},{"lineNumber":485,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":486,"author":{"gitId":"-"},"content":" * Gets the student with the specified email."},{"lineNumber":487,"author":{"gitId":"-"},"content":" */"},{"lineNumber":488,"author":{"gitId":"-"},"content":" public Student getStudentForEmail(String courseId, String userEmail) {"},{"lineNumber":489,"author":{"gitId":"-"},"content":" return usersDb.getStudentForEmail(courseId, userEmail);"},{"lineNumber":490,"author":{"gitId":"-"},"content":" }"},{"lineNumber":491,"author":{"gitId":"-"},"content":""},{"lineNumber":492,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":493,"author":{"gitId":"-"},"content":" * Check if the students with the provided emails exist in the course."},{"lineNumber":494,"author":{"gitId":"-"},"content":" */"},{"lineNumber":495,"author":{"gitId":"-"},"content":" public boolean verifyStudentsExistInCourse(String courseId, List\u003cString\u003e emails) {"},{"lineNumber":496,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students \u003d usersDb.getStudentsForEmails(courseId, emails);"},{"lineNumber":497,"author":{"gitId":"-"},"content":" Map\u003cString, User\u003e emailStudentMap \u003d convertUserListToEmailUserMap(students);"},{"lineNumber":498,"author":{"gitId":"-"},"content":""},{"lineNumber":499,"author":{"gitId":"-"},"content":" for (String email : emails) {"},{"lineNumber":500,"author":{"gitId":"-"},"content":" if (!emailStudentMap.containsKey(email)) {"},{"lineNumber":501,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":502,"author":{"gitId":"-"},"content":" }"},{"lineNumber":503,"author":{"gitId":"-"},"content":" }"},{"lineNumber":504,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":505,"author":{"gitId":"-"},"content":" }"},{"lineNumber":506,"author":{"gitId":"-"},"content":""},{"lineNumber":507,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":508,"author":{"gitId":"-"},"content":" * Gets a list of students with the specified email."},{"lineNumber":509,"author":{"gitId":"-"},"content":" */"},{"lineNumber":510,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getAllStudentsForEmail(String email) {"},{"lineNumber":511,"author":{"gitId":"-"},"content":" return usersDb.getAllStudentsForEmail(email);"},{"lineNumber":512,"author":{"gitId":"-"},"content":" }"},{"lineNumber":513,"author":{"gitId":"-"},"content":""},{"lineNumber":514,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":515,"author":{"gitId":"-"},"content":" * Gets all students associated with a googleId."},{"lineNumber":516,"author":{"gitId":"-"},"content":" */"},{"lineNumber":517,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getAllStudentsByGoogleId(String googleId) {"},{"lineNumber":518,"author":{"gitId":"-"},"content":" return usersDb.getAllStudentsByGoogleId(googleId);"},{"lineNumber":519,"author":{"gitId":"-"},"content":" }"},{"lineNumber":520,"author":{"gitId":"-"},"content":""},{"lineNumber":521,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":522,"author":{"gitId":"-"},"content":" * Gets a list of students for the specified course."},{"lineNumber":523,"author":{"gitId":"-"},"content":" */"},{"lineNumber":524,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForCourse(String courseId) {"},{"lineNumber":525,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentReturnList \u003d usersDb.getStudentsForCourse(courseId);"},{"lineNumber":526,"author":{"gitId":"-"},"content":" sortByName(studentReturnList);"},{"lineNumber":527,"author":{"gitId":"-"},"content":""},{"lineNumber":528,"author":{"gitId":"-"},"content":" return studentReturnList;"},{"lineNumber":529,"author":{"gitId":"-"},"content":" }"},{"lineNumber":530,"author":{"gitId":"-"},"content":""},{"lineNumber":531,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":532,"author":{"gitId":"-"},"content":" * Gets a list of unregistered students for the specified course."},{"lineNumber":533,"author":{"gitId":"-"},"content":" */"},{"lineNumber":534,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getUnregisteredStudentsForCourse(String courseId) {"},{"lineNumber":535,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e students \u003d getStudentsForCourse(courseId);"},{"lineNumber":536,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e unregisteredStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":537,"author":{"gitId":"-"},"content":""},{"lineNumber":538,"author":{"gitId":"-"},"content":" for (Student s : students) {"},{"lineNumber":539,"author":{"gitId":"-"},"content":" if (s.getAccount() \u003d\u003d null) {"},{"lineNumber":540,"author":{"gitId":"-"},"content":" unregisteredStudents.add(s);"},{"lineNumber":541,"author":{"gitId":"-"},"content":" }"},{"lineNumber":542,"author":{"gitId":"-"},"content":" }"},{"lineNumber":543,"author":{"gitId":"-"},"content":""},{"lineNumber":544,"author":{"gitId":"-"},"content":" return unregisteredStudents;"},{"lineNumber":545,"author":{"gitId":"-"},"content":" }"},{"lineNumber":546,"author":{"gitId":"-"},"content":""},{"lineNumber":547,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":548,"author":{"gitId":"yuanxi1"},"content":" * Searches for students."},{"lineNumber":549,"author":{"gitId":"yuanxi1"},"content":" *"},{"lineNumber":550,"author":{"gitId":"yuanxi1"},"content":" * @param instructors the constraint that restricts the search result"},{"lineNumber":551,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":552,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudents(String queryString, List\u003cInstructor\u003e instructors)"},{"lineNumber":553,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":554,"author":{"gitId":"yuanxi1"},"content":" return usersDb.searchStudents(queryString, instructors);"},{"lineNumber":555,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":556,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":557,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":558,"author":{"gitId":"yuanxi1"},"content":" * This method should be used by admin only since the searching does not restrict the"},{"lineNumber":559,"author":{"gitId":"yuanxi1"},"content":" * visibility according to the logged-in user\u0027s google ID. This is used by admin to"},{"lineNumber":560,"author":{"gitId":"yuanxi1"},"content":" * search students in the whole system."},{"lineNumber":561,"author":{"gitId":"yuanxi1"},"content":" * @return null if no result found"},{"lineNumber":562,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":563,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudentsInWholeSystem(String queryString)"},{"lineNumber":564,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":565,"author":{"gitId":"yuanxi1"},"content":" return usersDb.searchStudentsInWholeSystem(queryString);"},{"lineNumber":566,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":567,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":568,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":569,"author":{"gitId":"-"},"content":" * Gets all students of a section."},{"lineNumber":570,"author":{"gitId":"-"},"content":" */"},{"lineNumber":571,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForSection(String sectionName, String courseId) {"},{"lineNumber":572,"author":{"gitId":"-"},"content":" return usersDb.getStudentsForSection(sectionName, courseId);"},{"lineNumber":573,"author":{"gitId":"-"},"content":" }"},{"lineNumber":574,"author":{"gitId":"-"},"content":""},{"lineNumber":575,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":576,"author":{"gitId":"-"},"content":" * Gets all students of a team."},{"lineNumber":577,"author":{"gitId":"-"},"content":" */"},{"lineNumber":578,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForTeam(String teamName, String courseId) {"},{"lineNumber":579,"author":{"gitId":"-"},"content":" return usersDb.getStudentsForTeam(teamName, courseId);"},{"lineNumber":580,"author":{"gitId":"-"},"content":" }"},{"lineNumber":581,"author":{"gitId":"-"},"content":""},{"lineNumber":582,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":583,"author":{"gitId":"-"},"content":" * Gets a student by associated {@code regkey}."},{"lineNumber":584,"author":{"gitId":"-"},"content":" */"},{"lineNumber":585,"author":{"gitId":"-"},"content":" public Student getStudentByRegistrationKey(String regKey) {"},{"lineNumber":586,"author":{"gitId":"-"},"content":" assert regKey !\u003d null;"},{"lineNumber":587,"author":{"gitId":"-"},"content":""},{"lineNumber":588,"author":{"gitId":"-"},"content":" return usersDb.getStudentByRegKey(regKey);"},{"lineNumber":589,"author":{"gitId":"-"},"content":" }"},{"lineNumber":590,"author":{"gitId":"-"},"content":""},{"lineNumber":591,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":592,"author":{"gitId":"-"},"content":" * Gets a student by associated {@code googleId}."},{"lineNumber":593,"author":{"gitId":"-"},"content":" */"},{"lineNumber":594,"author":{"gitId":"-"},"content":" public Student getStudentByGoogleId(String courseId, String googleId) {"},{"lineNumber":595,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":596,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":597,"author":{"gitId":"-"},"content":""},{"lineNumber":598,"author":{"gitId":"-"},"content":" return usersDb.getStudentByGoogleId(courseId, googleId);"},{"lineNumber":599,"author":{"gitId":"-"},"content":" }"},{"lineNumber":600,"author":{"gitId":"-"},"content":""},{"lineNumber":601,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":602,"author":{"gitId":"-"},"content":" * Gets all students associated with a googleId."},{"lineNumber":603,"author":{"gitId":"-"},"content":" */"},{"lineNumber":604,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByGoogleId(String googleId) {"},{"lineNumber":605,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":606,"author":{"gitId":"-"},"content":""},{"lineNumber":607,"author":{"gitId":"-"},"content":" return usersDb.getStudentsByGoogleId(googleId);"},{"lineNumber":608,"author":{"gitId":"-"},"content":" }"},{"lineNumber":609,"author":{"gitId":"-"},"content":""},{"lineNumber":610,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":611,"author":{"gitId":"-"},"content":" * Returns true if the user associated with the googleId is a student in any"},{"lineNumber":612,"author":{"gitId":"-"},"content":" * course in the system."},{"lineNumber":613,"author":{"gitId":"-"},"content":" */"},{"lineNumber":614,"author":{"gitId":"-"},"content":" public boolean isStudentInAnyCourse(String googleId) {"},{"lineNumber":615,"author":{"gitId":"-"},"content":" return !usersDb.getAllStudentsByGoogleId(googleId).isEmpty();"},{"lineNumber":616,"author":{"gitId":"-"},"content":" }"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":619,"author":{"gitId":"-"},"content":" * Gets all instructors and students by {@code googleId}."},{"lineNumber":620,"author":{"gitId":"-"},"content":" */"},{"lineNumber":621,"author":{"gitId":"-"},"content":" public List\u003cUser\u003e getAllUsersByGoogleId(String googleId) {"},{"lineNumber":622,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":623,"author":{"gitId":"-"},"content":""},{"lineNumber":624,"author":{"gitId":"-"},"content":" return usersDb.getAllUsersByGoogleId(googleId);"},{"lineNumber":625,"author":{"gitId":"-"},"content":" }"},{"lineNumber":626,"author":{"gitId":"-"},"content":""},{"lineNumber":627,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":628,"author":{"gitId":"domoberzin"},"content":" * Gets the section with the name in a particular course."},{"lineNumber":629,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":630,"author":{"gitId":"domoberzin"},"content":" public Section getSection(String courseId, String sectionName) {"},{"lineNumber":631,"author":{"gitId":"domoberzin"},"content":" return usersDb.getSection(courseId, sectionName);"},{"lineNumber":632,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":633,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":634,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":635,"author":{"gitId":"domoberzin"},"content":" * Gets the section with the name in a particular course, otherwise creates a new section."},{"lineNumber":636,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":637,"author":{"gitId":"domoberzin"},"content":" public Section getSectionOrCreate(String courseId, String sectionName) {"},{"lineNumber":638,"author":{"gitId":"domoberzin"},"content":" return usersDb.getSectionOrCreate(courseId, sectionName);"},{"lineNumber":639,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":640,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":641,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":642,"author":{"gitId":"domoberzin"},"content":" * Gets the team with the name in a particular session, otherwise creates a new team."},{"lineNumber":643,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":644,"author":{"gitId":"domoberzin"},"content":" public Team getTeamOrCreate(Section section, String teamName) {"},{"lineNumber":645,"author":{"gitId":"domoberzin"},"content":" return usersDb.getTeamOrCreate(section, teamName);"},{"lineNumber":646,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":647,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":648,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":649,"author":{"gitId":"-"},"content":" * Checks if there are any other registered instructors that can modify instructors."},{"lineNumber":650,"author":{"gitId":"-"},"content":" * If there are none, the instructor currently being edited will be granted the privilege"},{"lineNumber":651,"author":{"gitId":"-"},"content":" * of modifying instructors automatically."},{"lineNumber":652,"author":{"gitId":"-"},"content":" *"},{"lineNumber":653,"author":{"gitId":"-"},"content":" * @param courseId Id of the course."},{"lineNumber":654,"author":{"gitId":"-"},"content":" * @param instructorToEdit Instructor that will be edited."},{"lineNumber":655,"author":{"gitId":"-"},"content":" * This may be modified within the method."},{"lineNumber":656,"author":{"gitId":"-"},"content":" */"},{"lineNumber":657,"author":{"gitId":"-"},"content":" public void updateToEnsureValidityOfInstructorsForTheCourse(String courseId, Instructor instructorToEdit) {"},{"lineNumber":658,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors \u003d getInstructorsForCourse(courseId);"},{"lineNumber":659,"author":{"gitId":"-"},"content":" int numOfInstrCanModifyInstructor \u003d 0;"},{"lineNumber":660,"author":{"gitId":"-"},"content":" Instructor instrWithModifyInstructorPrivilege \u003d null;"},{"lineNumber":661,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":662,"author":{"gitId":"-"},"content":" if (instructor.isAllowedForPrivilege(Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR)) {"},{"lineNumber":663,"author":{"gitId":"-"},"content":" numOfInstrCanModifyInstructor++;"},{"lineNumber":664,"author":{"gitId":"-"},"content":" instrWithModifyInstructorPrivilege \u003d instructor;"},{"lineNumber":665,"author":{"gitId":"-"},"content":" }"},{"lineNumber":666,"author":{"gitId":"-"},"content":" }"},{"lineNumber":667,"author":{"gitId":"-"},"content":" boolean isLastRegInstructorWithPrivilege \u003d numOfInstrCanModifyInstructor \u003c\u003d 1"},{"lineNumber":668,"author":{"gitId":"-"},"content":" \u0026\u0026 instrWithModifyInstructorPrivilege !\u003d null"},{"lineNumber":669,"author":{"gitId":"-"},"content":" \u0026\u0026 (!instrWithModifyInstructorPrivilege.isRegistered()"},{"lineNumber":670,"author":{"gitId":"-"},"content":" || instrWithModifyInstructorPrivilege.getGoogleId()"},{"lineNumber":671,"author":{"gitId":"-"},"content":" .equals(instructorToEdit.getGoogleId()));"},{"lineNumber":672,"author":{"gitId":"-"},"content":" if (isLastRegInstructorWithPrivilege) {"},{"lineNumber":673,"author":{"gitId":"-"},"content":" instructorToEdit.getPrivileges().updatePrivilege(Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR, true);"},{"lineNumber":674,"author":{"gitId":"-"},"content":" }"},{"lineNumber":675,"author":{"gitId":"-"},"content":" }"},{"lineNumber":676,"author":{"gitId":"-"},"content":""},{"lineNumber":677,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":678,"author":{"gitId":"-"},"content":" * Deletes a student along with its associated feedback responses, deadline extensions and comments."},{"lineNumber":679,"author":{"gitId":"-"},"content":" *"},{"lineNumber":680,"author":{"gitId":"-"},"content":" * \u003cp\u003eFails silently if the student does not exist."},{"lineNumber":681,"author":{"gitId":"-"},"content":" */"},{"lineNumber":682,"author":{"gitId":"-"},"content":" public void deleteStudentCascade(String courseId, String studentEmail) {"},{"lineNumber":683,"author":{"gitId":"-"},"content":" Student student \u003d getStudentForEmail(courseId, studentEmail);"},{"lineNumber":684,"author":{"gitId":"-"},"content":""},{"lineNumber":685,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":686,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":687,"author":{"gitId":"-"},"content":" }"},{"lineNumber":688,"author":{"gitId":"-"},"content":""},{"lineNumber":689,"author":{"gitId":"-"},"content":" feedbackResponsesLogic"},{"lineNumber":690,"author":{"gitId":"-"},"content":" .deleteFeedbackResponsesForCourseCascade(courseId, studentEmail);"},{"lineNumber":691,"author":{"gitId":"-"},"content":""},{"lineNumber":692,"author":{"gitId":"-"},"content":" if (usersDb.getStudentCountForTeam(student.getTeamName(), student.getCourseId()) \u003d\u003d 1) {"},{"lineNumber":693,"author":{"gitId":"-"},"content":" // the student is the only student in the team, delete responses related to the team"},{"lineNumber":694,"author":{"gitId":"-"},"content":" feedbackResponsesLogic"},{"lineNumber":695,"author":{"gitId":"-"},"content":" .deleteFeedbackResponsesForCourseCascade("},{"lineNumber":696,"author":{"gitId":"-"},"content":" student.getCourse().getId(), student.getTeamName());"},{"lineNumber":697,"author":{"gitId":"-"},"content":" }"},{"lineNumber":698,"author":{"gitId":"-"},"content":""},{"lineNumber":699,"author":{"gitId":"-"},"content":" deadlineExtensionsLogic.deleteDeadlineExtensionsForUser(student);"},{"lineNumber":700,"author":{"gitId":"-"},"content":" deleteUser(student);"},{"lineNumber":701,"author":{"gitId":"-"},"content":" feedbackResponsesLogic.updateRankRecipientQuestionResponsesAfterDeletingStudent(courseId);"},{"lineNumber":702,"author":{"gitId":"-"},"content":" }"},{"lineNumber":703,"author":{"gitId":"-"},"content":""},{"lineNumber":704,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":705,"author":{"gitId":"-"},"content":" * Deletes students in the course cascade their associated responses, deadline extensions, and comments."},{"lineNumber":706,"author":{"gitId":"-"},"content":" */"},{"lineNumber":707,"author":{"gitId":"-"},"content":" public void deleteStudentsInCourseCascade(String courseId) {"},{"lineNumber":708,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsInCourse \u003d getStudentsForCourse(courseId);"},{"lineNumber":709,"author":{"gitId":"-"},"content":""},{"lineNumber":710,"author":{"gitId":"-"},"content":" for (Student student : studentsInCourse) {"},{"lineNumber":711,"author":{"gitId":"-"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":712,"author":{"gitId":"-"},"content":" deleteStudentCascade(courseId, student.getEmail());"},{"lineNumber":713,"author":{"gitId":"-"},"content":" }"},{"lineNumber":714,"author":{"gitId":"-"},"content":" }"},{"lineNumber":715,"author":{"gitId":"-"},"content":""},{"lineNumber":716,"author":{"gitId":"marquestye"},"content":" private boolean isEmailChanged(String originalEmail, String newEmail) {"},{"lineNumber":717,"author":{"gitId":"marquestye"},"content":" return newEmail !\u003d null \u0026\u0026 !originalEmail.equals(newEmail);"},{"lineNumber":718,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":719,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":720,"author":{"gitId":"domoberzin"},"content":" private boolean isTeamChanged(Team originalTeam, Team newTeam) {"},{"lineNumber":721,"author":{"gitId":"domoberzin"},"content":" return newTeam !\u003d null \u0026\u0026 originalTeam !\u003d null"},{"lineNumber":722,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 !originalTeam.equals(newTeam);"},{"lineNumber":723,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":724,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":725,"author":{"gitId":"domoberzin"},"content":" private boolean isSectionChanged(Section originalSection, Section newSection) {"},{"lineNumber":726,"author":{"gitId":"domoberzin"},"content":" return newSection !\u003d null \u0026\u0026 originalSection !\u003d null"},{"lineNumber":727,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 !originalSection.equals(newSection);"},{"lineNumber":728,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":729,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":730,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":731,"author":{"gitId":"domoberzin"},"content":" * Updates a student by {@link Student}."},{"lineNumber":732,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":733,"author":{"gitId":"marquestye"},"content":" * \u003cp\u003eIf email changed, update by recreating the student and cascade update all responses"},{"lineNumber":734,"author":{"gitId":"marquestye"},"content":" * and comments the student gives/receives."},{"lineNumber":735,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":736,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf team changed, cascade delete all responses the student gives/receives within that team."},{"lineNumber":737,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":738,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eIf section changed, cascade update all responses the student gives/receives."},{"lineNumber":739,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":740,"author":{"gitId":"domoberzin"},"content":" * @return updated student"},{"lineNumber":741,"author":{"gitId":"domoberzin"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":742,"author":{"gitId":"domoberzin"},"content":" * @throws EntityDoesNotExistException if the student cannot be found"},{"lineNumber":743,"author":{"gitId":"domoberzin"},"content":" * @throws EntityAlreadyExistsException if the student cannot be updated"},{"lineNumber":744,"author":{"gitId":"domoberzin"},"content":" * by recreation because of an existent student"},{"lineNumber":745,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":746,"author":{"gitId":"domoberzin"},"content":" public Student updateStudentCascade(Student student)"},{"lineNumber":747,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException, EntityAlreadyExistsException {"},{"lineNumber":748,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":749,"author":{"gitId":"marquestye"},"content":" String courseId \u003d student.getCourseId();"},{"lineNumber":750,"author":{"gitId":"marquestye"},"content":" Student originalStudent \u003d getStudent(student.getId());"},{"lineNumber":751,"author":{"gitId":"marquestye"},"content":" String originalEmail \u003d originalStudent.getEmail();"},{"lineNumber":752,"author":{"gitId":"marquestye"},"content":" boolean changedEmail \u003d isEmailChanged(originalEmail, student.getEmail());"},{"lineNumber":753,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":754,"author":{"gitId":"marquestye"},"content":" // check for email conflict"},{"lineNumber":755,"author":{"gitId":"marquestye"},"content":" Student s \u003d usersDb.getStudentForEmail(courseId, student.getEmail());"},{"lineNumber":756,"author":{"gitId":"marquestye"},"content":" if (changedEmail \u0026\u0026 s !\u003d null) {"},{"lineNumber":757,"author":{"gitId":"marquestye"},"content":" String errorMessage \u003d String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, s.toString());"},{"lineNumber":758,"author":{"gitId":"marquestye"},"content":" throw new EntityAlreadyExistsException(errorMessage);"},{"lineNumber":759,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":760,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":761,"author":{"gitId":"domoberzin"},"content":" Team originalTeam \u003d originalStudent.getTeam();"},{"lineNumber":762,"author":{"gitId":"domoberzin"},"content":" Section originalSection \u003d originalStudent.getSection();"},{"lineNumber":763,"author":{"gitId":"domoberzin"},"content":" boolean changedTeam \u003d isTeamChanged(originalTeam, student.getTeam());"},{"lineNumber":764,"author":{"gitId":"domoberzin"},"content":" boolean changedSection \u003d isSectionChanged(originalSection, student.getSection());"},{"lineNumber":765,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":766,"author":{"gitId":"marquestye"},"content":" // update student"},{"lineNumber":767,"author":{"gitId":"marquestye"},"content":" usersDb.checkBeforeUpdateStudent(student);"},{"lineNumber":768,"author":{"gitId":"domoberzin"},"content":" originalStudent.setName(student.getName());"},{"lineNumber":769,"author":{"gitId":"domoberzin"},"content":" originalStudent.setTeam(student.getTeam());"},{"lineNumber":770,"author":{"gitId":"domoberzin"},"content":" originalStudent.setEmail(student.getEmail());"},{"lineNumber":771,"author":{"gitId":"domoberzin"},"content":" originalStudent.setComments(student.getComments());"},{"lineNumber":772,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":773,"author":{"gitId":"marquestye"},"content":" // cascade email changes to responses and comments"},{"lineNumber":774,"author":{"gitId":"marquestye"},"content":" if (changedEmail) {"},{"lineNumber":775,"author":{"gitId":"marquestye"},"content":" feedbackResponsesLogic.updateFeedbackResponsesForChangingEmail(courseId, originalEmail, student.getEmail());"},{"lineNumber":776,"author":{"gitId":"marquestye"},"content":" feedbackResponseCommentsLogic.updateFeedbackResponseCommentsEmails(courseId, originalEmail, student.getEmail());"},{"lineNumber":777,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":778,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":779,"author":{"gitId":"domoberzin"},"content":" // adjust submissions if moving to a different team"},{"lineNumber":780,"author":{"gitId":"domoberzin"},"content":" if (changedTeam) {"},{"lineNumber":781,"author":{"gitId":"marquestye"},"content":" feedbackResponsesLogic.updateFeedbackResponsesForChangingTeam(student.getCourse(), student.getEmail(),"},{"lineNumber":782,"author":{"gitId":"marquestye"},"content":" student.getTeam(), originalTeam);"},{"lineNumber":783,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":784,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":785,"author":{"gitId":"domoberzin"},"content":" // update the new section name in responses"},{"lineNumber":786,"author":{"gitId":"domoberzin"},"content":" if (changedSection) {"},{"lineNumber":787,"author":{"gitId":"domoberzin"},"content":" feedbackResponsesLogic.updateFeedbackResponsesForChangingSection("},{"lineNumber":788,"author":{"gitId":"marquestye"},"content":" student.getCourse(), student.getEmail(), student.getSection());"},{"lineNumber":789,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":790,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":791,"author":{"gitId":"marquestye"},"content":" return originalStudent;"},{"lineNumber":792,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":793,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":794,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":795,"author":{"gitId":"-"},"content":" * Resets the googleId associated with the instructor."},{"lineNumber":796,"author":{"gitId":"-"},"content":" */"},{"lineNumber":797,"author":{"gitId":"-"},"content":" public void resetInstructorGoogleId(String email, String courseId, String googleId)"},{"lineNumber":798,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":799,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":800,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":801,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":802,"author":{"gitId":"-"},"content":""},{"lineNumber":803,"author":{"gitId":"-"},"content":" Instructor instructor \u003d getInstructorForEmail(courseId, email);"},{"lineNumber":804,"author":{"gitId":"-"},"content":""},{"lineNumber":805,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":806,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT"},{"lineNumber":807,"author":{"gitId":"-"},"content":" + \"Instructor [courseId\u003d\" + courseId + \", email\u003d\" + email + \"]\");"},{"lineNumber":808,"author":{"gitId":"-"},"content":" }"},{"lineNumber":809,"author":{"gitId":"-"},"content":""},{"lineNumber":810,"author":{"gitId":"-"},"content":" instructor.setAccount(null);"},{"lineNumber":811,"author":{"gitId":"-"},"content":""},{"lineNumber":812,"author":{"gitId":"-"},"content":" if (usersDb.getAllUsersByGoogleId(googleId).isEmpty()) {"},{"lineNumber":813,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccountCascade(googleId);"},{"lineNumber":814,"author":{"gitId":"-"},"content":" }"},{"lineNumber":815,"author":{"gitId":"-"},"content":" }"},{"lineNumber":816,"author":{"gitId":"-"},"content":""},{"lineNumber":817,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":818,"author":{"gitId":"domoberzin"},"content":" * Validates sections for any limit violations and teams for any team name violations."},{"lineNumber":819,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":820,"author":{"gitId":"domoberzin"},"content":" public void validateSectionsAndTeams("},{"lineNumber":821,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentList, String courseId) throws EnrollException {"},{"lineNumber":822,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":823,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e mergedList \u003d getMergedList(studentList, courseId);"},{"lineNumber":824,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":825,"author":{"gitId":"domoberzin"},"content":" if (mergedList.size() \u003c 2) { // no conflicts"},{"lineNumber":826,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":827,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":828,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":829,"author":{"gitId":"domoberzin"},"content":" String errorMessage \u003d getSectionInvalidityInfo(mergedList) + getTeamInvalidityInfo(mergedList);"},{"lineNumber":830,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":831,"author":{"gitId":"domoberzin"},"content":" if (!errorMessage.isEmpty()) {"},{"lineNumber":832,"author":{"gitId":"domoberzin"},"content":" throw new EnrollException(errorMessage);"},{"lineNumber":833,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":834,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":835,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":836,"author":{"gitId":"domoberzin"},"content":" private List\u003cStudent\u003e getMergedList(List\u003cStudent\u003e studentList, String courseId) {"},{"lineNumber":837,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":838,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e mergedList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":839,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentsInCourse \u003d getStudentsForCourse(courseId);"},{"lineNumber":840,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":841,"author":{"gitId":"domoberzin"},"content":" for (Student student : studentList) {"},{"lineNumber":842,"author":{"gitId":"domoberzin"},"content":" mergedList.add(student);"},{"lineNumber":843,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":844,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":845,"author":{"gitId":"domoberzin"},"content":" for (Student student : studentsInCourse) {"},{"lineNumber":846,"author":{"gitId":"domoberzin"},"content":" if (!isInEnrollList(student, mergedList)) {"},{"lineNumber":847,"author":{"gitId":"domoberzin"},"content":" mergedList.add(student);"},{"lineNumber":848,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":849,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":850,"author":{"gitId":"domoberzin"},"content":" return mergedList;"},{"lineNumber":851,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":852,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":853,"author":{"gitId":"domoberzin"},"content":" private String getSectionInvalidityInfo(List\u003cStudent\u003e mergedList) {"},{"lineNumber":854,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":855,"author":{"gitId":"domoberzin"},"content":" mergedList.sort(Comparator.comparing((Student student) -\u003e student.getSectionName())"},{"lineNumber":856,"author":{"gitId":"domoberzin"},"content":" .thenComparing(student -\u003e student.getTeamName())"},{"lineNumber":857,"author":{"gitId":"domoberzin"},"content":" .thenComparing(student -\u003e student.getName()));"},{"lineNumber":858,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":859,"author":{"gitId":"domoberzin"},"content":" List\u003cString\u003e invalidSectionList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":860,"author":{"gitId":"domoberzin"},"content":" int studentsCount \u003d 1;"},{"lineNumber":861,"author":{"gitId":"domoberzin"},"content":" for (int i \u003d 1; i \u003c mergedList.size(); i++) {"},{"lineNumber":862,"author":{"gitId":"domoberzin"},"content":" Student currentStudent \u003d mergedList.get(i);"},{"lineNumber":863,"author":{"gitId":"domoberzin"},"content":" Student previousStudent \u003d mergedList.get(i - 1);"},{"lineNumber":864,"author":{"gitId":"domoberzin"},"content":" if (currentStudent.getSectionName().equals(previousStudent.getSectionName())) {"},{"lineNumber":865,"author":{"gitId":"domoberzin"},"content":" studentsCount++;"},{"lineNumber":866,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":867,"author":{"gitId":"domoberzin"},"content":" if (studentsCount \u003e Const.SECTION_SIZE_LIMIT) {"},{"lineNumber":868,"author":{"gitId":"domoberzin"},"content":" invalidSectionList.add(previousStudent.getSectionName());"},{"lineNumber":869,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":870,"author":{"gitId":"domoberzin"},"content":" studentsCount \u003d 1;"},{"lineNumber":871,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":872,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":873,"author":{"gitId":"domoberzin"},"content":" if (i \u003d\u003d mergedList.size() - 1 \u0026\u0026 studentsCount \u003e Const.SECTION_SIZE_LIMIT) {"},{"lineNumber":874,"author":{"gitId":"domoberzin"},"content":" invalidSectionList.add(currentStudent.getSectionName());"},{"lineNumber":875,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":876,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":877,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":878,"author":{"gitId":"domoberzin"},"content":" StringJoiner errorMessage \u003d new StringJoiner(\" \");"},{"lineNumber":879,"author":{"gitId":"domoberzin"},"content":" for (String section : invalidSectionList) {"},{"lineNumber":880,"author":{"gitId":"domoberzin"},"content":" errorMessage.add(String.format("},{"lineNumber":881,"author":{"gitId":"domoberzin"},"content":" ERROR_ENROLL_EXCEED_SECTION_LIMIT,"},{"lineNumber":882,"author":{"gitId":"domoberzin"},"content":" Const.SECTION_SIZE_LIMIT, section));"},{"lineNumber":883,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":884,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":885,"author":{"gitId":"domoberzin"},"content":" if (!invalidSectionList.isEmpty()) {"},{"lineNumber":886,"author":{"gitId":"domoberzin"},"content":" errorMessage.add(String.format("},{"lineNumber":887,"author":{"gitId":"domoberzin"},"content":" ERROR_ENROLL_EXCEED_SECTION_LIMIT_INSTRUCTION,"},{"lineNumber":888,"author":{"gitId":"domoberzin"},"content":" Const.SECTION_SIZE_LIMIT));"},{"lineNumber":889,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":890,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":891,"author":{"gitId":"domoberzin"},"content":" return errorMessage.toString();"},{"lineNumber":892,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":893,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":894,"author":{"gitId":"domoberzin"},"content":" private String getTeamInvalidityInfo(List\u003cStudent\u003e mergedList) {"},{"lineNumber":895,"author":{"gitId":"domoberzin"},"content":" StringJoiner errorMessage \u003d new StringJoiner(\" \");"},{"lineNumber":896,"author":{"gitId":"domoberzin"},"content":" mergedList.sort(Comparator.comparing((Student student) -\u003e student.getTeamName())"},{"lineNumber":897,"author":{"gitId":"domoberzin"},"content":" .thenComparing(student -\u003e student.getName()));"},{"lineNumber":898,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":899,"author":{"gitId":"domoberzin"},"content":" List\u003cString\u003e invalidTeamList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":900,"author":{"gitId":"domoberzin"},"content":" for (int i \u003d 1; i \u003c mergedList.size(); i++) {"},{"lineNumber":901,"author":{"gitId":"domoberzin"},"content":" Student currentStudent \u003d mergedList.get(i);"},{"lineNumber":902,"author":{"gitId":"domoberzin"},"content":" Student previousStudent \u003d mergedList.get(i - 1);"},{"lineNumber":903,"author":{"gitId":"domoberzin"},"content":" if (currentStudent.getTeamName().equals(previousStudent.getTeamName())"},{"lineNumber":904,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 !currentStudent.getSectionName().equals(previousStudent.getSectionName())"},{"lineNumber":905,"author":{"gitId":"domoberzin"},"content":" \u0026\u0026 !invalidTeamList.contains(currentStudent.getTeamName())) {"},{"lineNumber":906,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":907,"author":{"gitId":"domoberzin"},"content":" errorMessage.add(String.format(ERROR_INVALID_TEAM_NAME,"},{"lineNumber":908,"author":{"gitId":"domoberzin"},"content":" currentStudent.getTeamName(),"},{"lineNumber":909,"author":{"gitId":"domoberzin"},"content":" previousStudent.getSectionName(),"},{"lineNumber":910,"author":{"gitId":"domoberzin"},"content":" currentStudent.getSectionName()));"},{"lineNumber":911,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":912,"author":{"gitId":"domoberzin"},"content":" invalidTeamList.add(currentStudent.getTeamName());"},{"lineNumber":913,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":914,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":915,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":916,"author":{"gitId":"domoberzin"},"content":" if (!invalidTeamList.isEmpty()) {"},{"lineNumber":917,"author":{"gitId":"domoberzin"},"content":" errorMessage.add(ERROR_INVALID_TEAM_NAME_INSTRUCTION);"},{"lineNumber":918,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":919,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":920,"author":{"gitId":"domoberzin"},"content":" return errorMessage.toString();"},{"lineNumber":921,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":922,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":923,"author":{"gitId":"domoberzin"},"content":" private boolean isInEnrollList(Student student,"},{"lineNumber":924,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentInfoList) {"},{"lineNumber":925,"author":{"gitId":"domoberzin"},"content":" for (Student studentInfo : studentInfoList) {"},{"lineNumber":926,"author":{"gitId":"domoberzin"},"content":" if (studentInfo.getEmail().equalsIgnoreCase(student.getEmail())) {"},{"lineNumber":927,"author":{"gitId":"domoberzin"},"content":" return true;"},{"lineNumber":928,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":929,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":930,"author":{"gitId":"domoberzin"},"content":" return false;"},{"lineNumber":931,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":932,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":933,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":934,"author":{"gitId":"-"},"content":" * Resets the googleId associated with the student."},{"lineNumber":935,"author":{"gitId":"-"},"content":" */"},{"lineNumber":936,"author":{"gitId":"-"},"content":" public void resetStudentGoogleId(String email, String courseId, String googleId)"},{"lineNumber":937,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":938,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":939,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":940,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":941,"author":{"gitId":"-"},"content":""},{"lineNumber":942,"author":{"gitId":"-"},"content":" Student student \u003d getStudentForEmail(courseId, email);"},{"lineNumber":943,"author":{"gitId":"-"},"content":""},{"lineNumber":944,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":945,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT"},{"lineNumber":946,"author":{"gitId":"-"},"content":" + \"Student [courseId\u003d\" + courseId + \", email\u003d\" + email + \"]\");"},{"lineNumber":947,"author":{"gitId":"-"},"content":" }"},{"lineNumber":948,"author":{"gitId":"-"},"content":""},{"lineNumber":949,"author":{"gitId":"-"},"content":" student.setAccount(null);"},{"lineNumber":950,"author":{"gitId":"-"},"content":""},{"lineNumber":951,"author":{"gitId":"-"},"content":" if (usersDb.getAllUsersByGoogleId(googleId).isEmpty()) {"},{"lineNumber":952,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccountCascade(googleId);"},{"lineNumber":953,"author":{"gitId":"-"},"content":" }"},{"lineNumber":954,"author":{"gitId":"-"},"content":" }"},{"lineNumber":955,"author":{"gitId":"-"},"content":""},{"lineNumber":956,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":957,"author":{"gitId":"-"},"content":" * Sorts the instructors list alphabetically by name."},{"lineNumber":958,"author":{"gitId":"-"},"content":" */"},{"lineNumber":959,"author":{"gitId":"-"},"content":" public static \u003cT extends User\u003e void sortByName(List\u003cT\u003e users) {"},{"lineNumber":960,"author":{"gitId":"-"},"content":" users.sort(Comparator.comparing(user -\u003e user.getName().toLowerCase()));"},{"lineNumber":961,"author":{"gitId":"-"},"content":" }"},{"lineNumber":962,"author":{"gitId":"-"},"content":""},{"lineNumber":963,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":964,"author":{"gitId":"-"},"content":" * Checks if an instructor with {@code googleId} can create a course with"},{"lineNumber":965,"author":{"gitId":"-"},"content":" * {@code institute}"},{"lineNumber":966,"author":{"gitId":"-"},"content":" * (ie. has an existing course(s) with the same {@code institute})."},{"lineNumber":967,"author":{"gitId":"-"},"content":" */"},{"lineNumber":968,"author":{"gitId":"-"},"content":" public boolean canInstructorCreateCourse(String googleId, String institute) {"},{"lineNumber":969,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":970,"author":{"gitId":"-"},"content":" assert institute !\u003d null;"},{"lineNumber":971,"author":{"gitId":"-"},"content":""},{"lineNumber":972,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e existingInstructors \u003d getInstructorsForGoogleId(googleId);"},{"lineNumber":973,"author":{"gitId":"-"},"content":" return existingInstructors"},{"lineNumber":974,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":975,"author":{"gitId":"-"},"content":" .filter(Instructor::hasCoownerPrivileges)"},{"lineNumber":976,"author":{"gitId":"-"},"content":" .map(instructor -\u003e instructor.getCourse())"},{"lineNumber":977,"author":{"gitId":"-"},"content":" .anyMatch(course -\u003e institute.equals(course.getInstitute()));"},{"lineNumber":978,"author":{"gitId":"-"},"content":" }"},{"lineNumber":979,"author":{"gitId":"-"},"content":""},{"lineNumber":980,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":981,"author":{"gitId":"-"},"content":" * Utility function to convert user list to email-user map for faster email lookup."},{"lineNumber":982,"author":{"gitId":"-"},"content":" *"},{"lineNumber":983,"author":{"gitId":"-"},"content":" * @param users users list which contains users with unique email addresses"},{"lineNumber":984,"author":{"gitId":"-"},"content":" * @return email-user map for faster email lookup"},{"lineNumber":985,"author":{"gitId":"-"},"content":" */"},{"lineNumber":986,"author":{"gitId":"-"},"content":" private Map\u003cString, User\u003e convertUserListToEmailUserMap(List\u003c? extends User\u003e users) {"},{"lineNumber":987,"author":{"gitId":"-"},"content":" Map\u003cString, User\u003e emailUserMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":988,"author":{"gitId":"-"},"content":" users.forEach(u -\u003e emailUserMap.put(u.getEmail(), u));"},{"lineNumber":989,"author":{"gitId":"-"},"content":""},{"lineNumber":990,"author":{"gitId":"-"},"content":" return emailUserMap;"},{"lineNumber":991,"author":{"gitId":"-"},"content":" }"},{"lineNumber":992,"author":{"gitId":"-"},"content":""},{"lineNumber":993,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":201,"yuanxi1":21,"marquestye":30,"mingyuanc":3,"-":738}},{"path":"src/main/java/teammates/storage/sqlapi/AccountRequestsDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import java.util.ArrayList;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import java.util.Collections;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":15,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.AccountRequestSearchManager;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.SearchManagerFactory;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.TypedQuery;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Generates CRUD operations for AccountRequest."},{"lineNumber":28,"author":{"gitId":"-"},"content":" *"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * @see AccountRequest"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */"},{"lineNumber":31,"author":{"gitId":"-"},"content":"public final class AccountRequestsDb extends EntitiesDb {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final AccountRequestsDb instance \u003d new AccountRequestsDb();"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private AccountRequestsDb() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" // prevent instantiation"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static AccountRequestsDb inst() {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" public AccountRequestSearchManager getSearchManager() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return SearchManagerFactory.getAccountRequestSearchManager();"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * Creates an AccountRequest in the database."},{"lineNumber":48,"author":{"gitId":"-"},"content":" */"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public AccountRequest createAccountRequest(AccountRequest accountRequest)"},{"lineNumber":50,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" assert accountRequest !\u003d null;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (!accountRequest.isValid()) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(accountRequest.getInvalidityInfo());"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" // don\u0027t need to check registrationKey for uniqueness since it is generated using email + institute"},{"lineNumber":58,"author":{"gitId":"-"},"content":" if (getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()) !\u003d null) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException("},{"lineNumber":60,"author":{"gitId":"-"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, accountRequest.toString()));"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" persist(accountRequest);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return accountRequest;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Get AccountRequest by {@code email} and {@code institute} from database."},{"lineNumber":69,"author":{"gitId":"-"},"content":" */"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public AccountRequest getAccountRequest(String email, String institute) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cAccountRequest\u003e cr \u003d cb.createQuery(AccountRequest.class);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" Root\u003cAccountRequest\u003e root \u003d cr.from(AccountRequest.class);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.and(cb.equal("},{"lineNumber":75,"author":{"gitId":"-"},"content":" root.get(\"email\"), email), cb.equal(root.get(\"institute\"), institute)));"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" TypedQuery\u003cAccountRequest\u003e query \u003d HibernateUtil.createQuery(cr);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return query.getResultStream().findFirst().orElse(null);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * Get AccountRequest by {@code registrationKey} from database."},{"lineNumber":83,"author":{"gitId":"-"},"content":" */"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" public AccountRequest getAccountRequestByRegistrationKey(String registrationKey) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":86,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cAccountRequest\u003e cr \u003d cb.createQuery(AccountRequest.class);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" Root\u003cAccountRequest\u003e root \u003d cr.from(AccountRequest.class);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.equal(root.get(\"registrationKey\"), registrationKey));"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" TypedQuery\u003cAccountRequest\u003e query \u003d HibernateUtil.createQuery(cr);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return query.getResultStream().findFirst().orElse(null);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Get AccountRequest with {@code createdTime} within the times {@code startTime} and {@code endTime}."},{"lineNumber":96,"author":{"gitId":"-"},"content":" */"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public List\u003cAccountRequest\u003e getAccountRequests(Instant startTime, Instant endTime) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cAccountRequest\u003e cr \u003d cb.createQuery(AccountRequest.class);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" Root\u003cAccountRequest\u003e root \u003d cr.from(AccountRequest.class);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.and(cb.greaterThanOrEqualTo(root.get(\"createdAt\"), startTime),"},{"lineNumber":102,"author":{"gitId":"-"},"content":" cb.lessThanOrEqualTo(root.get(\"createdAt\"), endTime)));"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" TypedQuery\u003cAccountRequest\u003e query \u003d HibernateUtil.createQuery(cr);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return query.getResultList();"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Updates or creates (if does not exist) the AccountRequest in the database."},{"lineNumber":110,"author":{"gitId":"-"},"content":" */"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public AccountRequest updateAccountRequest(AccountRequest accountRequest)"},{"lineNumber":112,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assert accountRequest !\u003d null;"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" if (!accountRequest.isValid()) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(accountRequest.getInvalidityInfo());"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" if (getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()) \u003d\u003d null) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException("},{"lineNumber":121,"author":{"gitId":"-"},"content":" String.format(ERROR_UPDATE_NON_EXISTENT, accountRequest.toString()));"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" merge(accountRequest);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return accountRequest;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":129,"author":{"gitId":"-"},"content":" * Deletes an AccountRequest."},{"lineNumber":130,"author":{"gitId":"-"},"content":" */"},{"lineNumber":131,"author":{"gitId":"-"},"content":" public void deleteAccountRequest(AccountRequest accountRequest) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" if (accountRequest !\u003d null) {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" delete(accountRequest);"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" deleteDocumentByAccountRequestId(accountRequest.getId());"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":" * Removes search document for the given account request."},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":" public void deleteDocumentByAccountRequestId(UUID accountRequestId) {"},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" if (getSearchManager() !\u003d null) {"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":" // Solr saves the id with the prefix \"java.util.UUID:\", so we need to add it here to"},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":" // identify and delete the document from the index"},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" getSearchManager().deleteDocuments("},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" Collections.singletonList(\"java.util.UUID:\" + accountRequestId.toString()));"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":151,"author":{"gitId":"domoberzin"},"content":" * Searches all account requests in the system."},{"lineNumber":152,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":153,"author":{"gitId":"domoberzin"},"content":" * \u003cp\u003eThis is used by admin to search account requests in the whole system."},{"lineNumber":154,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":155,"author":{"gitId":"domoberzin"},"content":" public List\u003cAccountRequest\u003e searchAccountRequestsInWholeSystem(String queryString)"},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":" throws SearchServiceException {"},{"lineNumber":157,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":158,"author":{"gitId":"domoberzin"},"content":" if (queryString.trim().isEmpty()) {"},{"lineNumber":159,"author":{"gitId":"domoberzin"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":160,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":161,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":162,"author":{"gitId":"domoberzin"},"content":" return getSearchManager().searchAccountRequests(queryString);"},{"lineNumber":163,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":32,"dishenggg":1,"-":131}},{"path":"src/main/java/teammates/storage/sqlapi/FeedbackQuestionsDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"marquestye"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":9,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":10,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Handles CRUD operations for feedback questions."},{"lineNumber":23,"author":{"gitId":"-"},"content":" *"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * @see FeedbackQuestion"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public final class FeedbackQuestionsDb extends EntitiesDb {"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" private static final FeedbackQuestionsDb instance \u003d new FeedbackQuestionsDb();"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private FeedbackQuestionsDb() {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static FeedbackQuestionsDb inst() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Creates a new feedback question."},{"lineNumber":40,"author":{"gitId":"-"},"content":" *"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * @return the created question"},{"lineNumber":42,"author":{"gitId":"marquestye"},"content":" * @throws InvalidParametersException if the question is invalid"},{"lineNumber":43,"author":{"gitId":"marquestye"},"content":" * @throws EntityAlreadyExistsException if the question already exists"},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"marquestye"},"content":" public FeedbackQuestion createFeedbackQuestion(FeedbackQuestion feedbackQuestion)"},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" assert feedbackQuestion !\u003d null;"},{"lineNumber":48,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":49,"author":{"gitId":"marquestye"},"content":" if (!feedbackQuestion.isValid()) {"},{"lineNumber":50,"author":{"gitId":"marquestye"},"content":" throw new InvalidParametersException(feedbackQuestion.getInvalidityInfo());"},{"lineNumber":51,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":52,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":53,"author":{"gitId":"marquestye"},"content":" if (getFeedbackQuestion(feedbackQuestion.getId()) !\u003d null) {"},{"lineNumber":54,"author":{"gitId":"marquestye"},"content":" String errorMessage \u003d String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, feedbackQuestion.toString());"},{"lineNumber":55,"author":{"gitId":"marquestye"},"content":" throw new EntityAlreadyExistsException(errorMessage);"},{"lineNumber":56,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":57,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" persist(feedbackQuestion);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return feedbackQuestion;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * Gets a feedback question."},{"lineNumber":64,"author":{"gitId":"-"},"content":" *"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * @return null if not found"},{"lineNumber":66,"author":{"gitId":"-"},"content":" */"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public FeedbackQuestion getFeedbackQuestion(UUID fqId) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" assert fqId !\u003d null;"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" return HibernateUtil.get(FeedbackQuestion.class, fqId);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Gets all feedback questions of a session."},{"lineNumber":75,"author":{"gitId":"-"},"content":" */"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForSession(UUID fdId) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":78,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackQuestion\u003e cq \u003d cb.createQuery(FeedbackQuestion.class);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Root\u003cFeedbackQuestion\u003e fqRoot \u003d cq.from(FeedbackQuestion.class);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fqJoin \u003d fqRoot.join(\"feedbackSession\");"},{"lineNumber":81,"author":{"gitId":"-"},"content":" cq.select(fqRoot).where(cb.equal(fqJoin.get(\"id\"), fdId));"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * Gets a list of feedback questions by {@code feedbackSession} and {@code giverType}."},{"lineNumber":87,"author":{"gitId":"-"},"content":" *"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * @return null if not found"},{"lineNumber":89,"author":{"gitId":"-"},"content":" */"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public List\u003cFeedbackQuestion\u003e getFeedbackQuestionsForGiverType("},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, FeedbackParticipantType giverType) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assert giverType !\u003d null;"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":96,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackQuestion\u003e cq \u003d cb.createQuery(FeedbackQuestion.class);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" Root\u003cFeedbackQuestion\u003e root \u003d cq.from(FeedbackQuestion.class);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fqJoin \u003d root.join(\"feedbackSession\");"},{"lineNumber":99,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":100,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":101,"author":{"gitId":"-"},"content":" cb.equal(fqJoin.get(\"id\"), feedbackSession.getId()),"},{"lineNumber":102,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giverType\"), giverType)));"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Deletes a feedback question."},{"lineNumber":108,"author":{"gitId":"-"},"content":" */"},{"lineNumber":109,"author":{"gitId":"-"},"content":" public void deleteFeedbackQuestion(UUID fqId) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assert fqId !\u003d null;"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" FeedbackQuestion fq \u003d getFeedbackQuestion(fqId);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (fq !\u003d null) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" delete(fq);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * Checks if there is any feedback questions in a session in a course for the given giver type."},{"lineNumber":120,"author":{"gitId":"-"},"content":" */"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public boolean hasFeedbackQuestionsForGiverType("},{"lineNumber":122,"author":{"gitId":"-"},"content":" String feedbackSessionName, String courseId, FeedbackParticipantType giverType) {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":124,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackQuestion\u003e cq \u003d cb.createQuery(FeedbackQuestion.class);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" Root\u003cFeedbackQuestion\u003e root \u003d cq.from(FeedbackQuestion.class);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d root.join(\"feedbackSession\");"},{"lineNumber":127,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":130,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":131,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":132,"author":{"gitId":"-"},"content":" cb.equal(fsJoin.get(\"name\"), feedbackSessionName),"},{"lineNumber":133,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giverType\"), giverType)));"},{"lineNumber":134,"author":{"gitId":"-"},"content":" return !HibernateUtil.createQuery(cq).getResultList().isEmpty();"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":19,"-":117}},{"path":"src/main/java/teammates/storage/sqlapi/FeedbackResponseCommentsDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Handles CRUD operations for feedbackResponseComments."},{"lineNumber":27,"author":{"gitId":"-"},"content":" *"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * @see FeedbackResponseComment"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public final class FeedbackResponseCommentsDb extends EntitiesDb {"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final FeedbackResponseCommentsDb instance \u003d new FeedbackResponseCommentsDb();"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private FeedbackResponseCommentsDb() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static FeedbackResponseCommentsDb inst() {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Gets a feedbackResponseComment or null if it does not exist."},{"lineNumber":44,"author":{"gitId":"-"},"content":" */"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseComment(Long frId) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assert frId !\u003d null;"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" return HibernateUtil.get(FeedbackResponseComment.class, frId);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * Creates a feedbackResponseComment."},{"lineNumber":53,"author":{"gitId":"-"},"content":" */"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public FeedbackResponseComment createFeedbackResponseComment(FeedbackResponseComment feedbackResponseComment)"},{"lineNumber":55,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assert feedbackResponseComment !\u003d null;"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" if (!feedbackResponseComment.isValid()) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(feedbackResponseComment.getInvalidityInfo());"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" if (feedbackResponseComment.getId() !\u003d null"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u0026\u0026 getFeedbackResponseComment(feedbackResponseComment.getId()) !\u003d null) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException("},{"lineNumber":65,"author":{"gitId":"-"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, feedbackResponseComment.toString()));"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" persist(feedbackResponseComment);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return feedbackResponseComment;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Deletes a feedbackResponseComment."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponseComment(Long frcId) {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" assert frcId !\u003d null;"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" FeedbackResponseComment frc \u003d getFeedbackResponseComment(frcId);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (frc !\u003d null) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" delete(frc);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" * Gets all feedback response comments for a response."},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForResponse(UUID feedbackResponseId) {"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" assert feedbackResponseId !\u003d null;"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":" cq.select(root)"},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" .where(cb.and("},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" cb.equal(frJoin.get(\"id\"), feedbackResponseId)));"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Gets the comment associated with the feedback response."},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public FeedbackResponseComment getFeedbackResponseCommentForResponseFromParticipant("},{"lineNumber":105,"author":{"gitId":"-"},"content":" UUID feedbackResponseId) {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":107,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":110,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":111,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":112,"author":{"gitId":"-"},"content":" cb.equal(frJoin.get(\"id\"), feedbackResponseId)));"},{"lineNumber":113,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultStream().findFirst().orElse(null);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Updates the giver email for all of the giver\u0027s comments in a course."},{"lineNumber":118,"author":{"gitId":"-"},"content":" */"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public void updateGiverEmailOfFeedbackResponseComments(String courseId, String oldEmail, String updatedEmail) {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assert oldEmail !\u003d null;"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assert updatedEmail !\u003d null;"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" if (oldEmail.equals(updatedEmail)) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseComment\u003e responseComments \u003d"},{"lineNumber":129,"author":{"gitId":"-"},"content":" getFeedbackResponseCommentEntitiesForGiverInCourse(courseId, oldEmail);"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" responseComment.setGiver(updatedEmail);"},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" merge(responseComment);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" * Updates the last editor to a new one for all comments in a course."},{"lineNumber":139,"author":{"gitId":"-"},"content":" */"},{"lineNumber":140,"author":{"gitId":"-"},"content":" public void updateLastEditorEmailOfFeedbackResponseComments(String courseId, String oldEmail, String updatedEmail) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" assert oldEmail !\u003d null;"},{"lineNumber":143,"author":{"gitId":"-"},"content":" assert updatedEmail !\u003d null;"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" if (oldEmail.equals(updatedEmail)) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseComment\u003e responseComments \u003d"},{"lineNumber":150,"author":{"gitId":"-"},"content":" getFeedbackResponseCommentEntitiesForLastEditorInCourse(courseId, oldEmail);"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" for (FeedbackResponseComment responseComment : responseComments) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" responseComment.setLastEditorEmail(updatedEmail);"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentEntitiesForGiverInCourse("},{"lineNumber":158,"author":{"gitId":"-"},"content":" String courseId, String giver) {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":160,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":163,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":164,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":165,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":168,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":169,"author":{"gitId":"-"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":170,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giver\"), giver)));"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentEntitiesForLastEditorInCourse("},{"lineNumber":176,"author":{"gitId":"-"},"content":" String courseId, String lastEditorEmail) {"},{"lineNumber":177,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":178,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":180,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":181,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":182,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":183,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":186,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":187,"author":{"gitId":"-"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":188,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"lastEditorEmail\"), lastEditorEmail)));"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" * Updates the feedback response comment."},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":196,"author":{"gitId":"mingyuanc"},"content":" public FeedbackResponseComment updateFeedbackResponseComment(FeedbackResponseComment feedbackResponseComment)"},{"lineNumber":197,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" assert feedbackResponseComment !\u003d null;"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":200,"author":{"gitId":"mingyuanc"},"content":" if (!feedbackResponseComment.isValid()) {"},{"lineNumber":201,"author":{"gitId":"mingyuanc"},"content":" throw new InvalidParametersException(feedbackResponseComment.getInvalidityInfo());"},{"lineNumber":202,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":203,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":204,"author":{"gitId":"mingyuanc"},"content":" if (getFeedbackResponseComment(feedbackResponseComment.getId()) \u003d\u003d null) {"},{"lineNumber":205,"author":{"gitId":"mingyuanc"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":206,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":207,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" return merge(feedbackResponseComment);"},{"lineNumber":209,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":210,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" * Gets all comments in a feedback session of a course."},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForSession("},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName) {"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" cb.equal(fsJoin.get(\"name\"), feedbackSessionName)"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":235,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":236,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":237,"author":{"gitId":"xenosf"},"content":" * Gets all comments of a feedback question of a course."},{"lineNumber":238,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":239,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForQuestion(UUID questionId) {"},{"lineNumber":240,"author":{"gitId":"xenosf"},"content":" assert questionId !\u003d null;"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":" cb.equal(fqJoin.get(\"id\"), questionId)));"},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" * Gets all comments in the given session where the giver or recipient is in the given section."},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForSessionInSection("},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, String sectionName) {"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" assert sectionName !\u003d null;"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, Section\u003e giverJoin \u003d root.join(\"giverSection\");"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, Section\u003e recipientJoin \u003d root.join(\"recipientSection\");"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" cb.equal(fsJoin.get(\"name\"), feedbackSessionName),"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" cb.or("},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" cb.equal(giverJoin.get(\"name\"), sectionName),"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" cb.equal(recipientJoin.get(\"name\"), sectionName))"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":" * Gets all comments for a question where the giver or recipient is in the given section."},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseCommentsForQuestionInSection("},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" UUID questionId, String sectionName) {"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" assert questionId !\u003d null;"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" assert sectionName !\u003d null;"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponseComment\u003e cq \u003d cb.createQuery(FeedbackResponseComment.class);"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponseComment\u003e root \u003d cq.from(FeedbackResponseComment.class);"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, FeedbackResponse\u003e frJoin \u003d root.join(\"feedbackResponse\");"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frJoin.join(\"feedbackQuestion\");"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, Section\u003e giverJoin \u003d root.join(\"giverSection\");"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponseComment, Section\u003e recipientJoin \u003d root.join(\"recipientSection\");"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" cb.equal(fqJoin.get(\"id\"), questionId),"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" cb.or("},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" cb.equal(giverJoin.get(\"name\"), sectionName),"},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" cb.equal(recipientJoin.get(\"name\"), sectionName))"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":26,"xenosf":105,"mingyuanc":12,"-":172}},{"path":"src/main/java/teammates/storage/sqlapi/FeedbackResponsesDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaDelete;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"import jakarta.persistence.criteria.Predicate;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Subquery;"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Handles CRUD operations for feedbackResponses."},{"lineNumber":30,"author":{"gitId":"-"},"content":" *"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * @see FeedbackResponse"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */"},{"lineNumber":33,"author":{"gitId":"-"},"content":"public final class FeedbackResponsesDb extends EntitiesDb {"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final FeedbackResponsesDb instance \u003d new FeedbackResponsesDb();"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" private FeedbackResponsesDb() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static FeedbackResponsesDb inst() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * Gets a feedbackResponse or null if it does not exist."},{"lineNumber":47,"author":{"gitId":"-"},"content":" */"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public FeedbackResponse getFeedbackResponse(UUID frId) {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" assert frId !\u003d null;"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" return HibernateUtil.get(FeedbackResponse.class, frId);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Gets all responses given by a user in a course."},{"lineNumber":56,"author":{"gitId":"-"},"content":" */"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForCourse("},{"lineNumber":58,"author":{"gitId":"-"},"content":" String courseId, String giver) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":60,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cr \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e frRoot \u003d cr.from(FeedbackResponse.class);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frRoot.join(\"feedbackQuestion\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" cr.select(frRoot)"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":68,"author":{"gitId":"-"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":69,"author":{"gitId":"-"},"content":" cb.equal(frRoot.get(\"giver\"), giver)));"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * Gets all responses given to a user in a course."},{"lineNumber":76,"author":{"gitId":"-"},"content":" */"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForCourse(String courseId, String recipient) {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":79,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cr \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e frRoot \u003d cr.from(FeedbackResponse.class);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d frRoot.join(\"feedbackQuestion\");"},{"lineNumber":82,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":83,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" cr.select(frRoot)"},{"lineNumber":86,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":87,"author":{"gitId":"-"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":88,"author":{"gitId":"-"},"content":" cb.equal(frRoot.get(\"recipient\"), recipient)));"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Creates a feedbackResponse."},{"lineNumber":95,"author":{"gitId":"-"},"content":" */"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public FeedbackResponse createFeedbackResponse(FeedbackResponse feedbackResponse)"},{"lineNumber":97,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" if (!feedbackResponse.isValid()) {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(feedbackResponse.getInvalidityInfo());"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (getFeedbackResponse(feedbackResponse.getId()) !\u003d null) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException("},{"lineNumber":106,"author":{"gitId":"-"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, feedbackResponse.toString()));"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" persist(feedbackResponse);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return feedbackResponse;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Deletes a feedbackResponse."},{"lineNumber":115,"author":{"gitId":"-"},"content":" */"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponse(FeedbackResponse feedbackResponse) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" if (feedbackResponse !\u003d null) {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" delete(feedbackResponse);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":123,"author":{"gitId":"-"},"content":" * Gets the feedback responses for a feedback question."},{"lineNumber":124,"author":{"gitId":"-"},"content":" * @param feedbackQuestionId the Id of the feedback question."},{"lineNumber":125,"author":{"gitId":"-"},"content":" * @param giverEmail the email of the response giver."},{"lineNumber":126,"author":{"gitId":"-"},"content":" */"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesFromGiverForQuestion("},{"lineNumber":128,"author":{"gitId":"-"},"content":" UUID feedbackQuestionId, String giverEmail) {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":130,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e frJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":133,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":134,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":135,"author":{"gitId":"-"},"content":" cb.equal(frJoin.get(\"id\"), feedbackQuestionId),"},{"lineNumber":136,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giver\"), giverEmail)));"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Deletes all feedback responses of a question cascade its associated comments."},{"lineNumber":142,"author":{"gitId":"-"},"content":" */"},{"lineNumber":143,"author":{"gitId":"-"},"content":" public void deleteFeedbackResponsesForQuestionCascade(UUID feedbackQuestionId) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":145,"author":{"gitId":"-"},"content":" CriteriaDelete\u003cFeedbackResponse\u003e cd \u003d cb.createCriteriaDelete(FeedbackResponse.class);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e frRoot \u003d cd.from(FeedbackResponse.class);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Subquery\u003cUUID\u003e subquery \u003d cd.subquery(UUID.class);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e subqueryRoot \u003d subquery.from(FeedbackResponse.class);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e sqJoin \u003d subqueryRoot.join(\"feedbackQuestion\");"},{"lineNumber":150,"author":{"gitId":"-"},"content":" subquery.select(subqueryRoot.get(\"id\"));"},{"lineNumber":151,"author":{"gitId":"-"},"content":" subquery.where(cb.equal(sqJoin.get(\"id\"), feedbackQuestionId));"},{"lineNumber":152,"author":{"gitId":"-"},"content":" cd.where(cb.in(frRoot.get(\"id\")).value(subquery));"},{"lineNumber":153,"author":{"gitId":"-"},"content":" HibernateUtil.createMutationQuery(cd).executeUpdate();"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":157,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a question."},{"lineNumber":158,"author":{"gitId":"-"},"content":" */"},{"lineNumber":159,"author":{"gitId":"-"},"content":" public boolean areThereResponsesForQuestion(UUID questionId) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":161,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":166,"author":{"gitId":"-"},"content":" .where(cb.equal(fqJoin.get(\"id\"), questionId));"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return !HibernateUtil.createQuery(cq).getResultList().isEmpty();"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" * Get responses for a question."},{"lineNumber":172,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":173,"author":{"gitId":"domoberzin"},"content":" public List\u003cFeedbackResponse\u003e getResponsesForQuestion(UUID questionId) {"},{"lineNumber":174,"author":{"gitId":"domoberzin"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":175,"author":{"gitId":"domoberzin"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":176,"author":{"gitId":"domoberzin"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":177,"author":{"gitId":"domoberzin"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":178,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":179,"author":{"gitId":"domoberzin"},"content":" cq.select(root)"},{"lineNumber":180,"author":{"gitId":"domoberzin"},"content":" .where(cb.equal(fqJoin.get(\"id\"), questionId));"},{"lineNumber":181,"author":{"gitId":"domoberzin"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":182,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":183,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":185,"author":{"gitId":"-"},"content":" * Checks whether a user has responses in a session."},{"lineNumber":186,"author":{"gitId":"-"},"content":" */"},{"lineNumber":187,"author":{"gitId":"-"},"content":" public boolean hasResponsesFromGiverInSession("},{"lineNumber":188,"author":{"gitId":"-"},"content":" String giver, String feedbackSessionName, String courseId) {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":190,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":192,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":193,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":194,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":197,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":198,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"giver\"), giver),"},{"lineNumber":199,"author":{"gitId":"-"},"content":" cb.equal(fsJoin.get(\"name\"), feedbackSessionName),"},{"lineNumber":200,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId)));"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" return !HibernateUtil.createQuery(cq).getResultList().isEmpty();"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * Checks whether there are responses for a course."},{"lineNumber":207,"author":{"gitId":"-"},"content":" */"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public boolean hasResponsesForCourse(String courseId) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":210,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":213,"author":{"gitId":"-"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":214,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":" cq.select(root)"},{"lineNumber":217,"author":{"gitId":"-"},"content":" .where(cb.equal(courseJoin.get(\"id\"), courseId));"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" return !HibernateUtil.createQuery(cq).getResultList().isEmpty();"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":223,"author":{"gitId":"domoberzin"},"content":" * Updates a feedbackResponse."},{"lineNumber":224,"author":{"gitId":"domoberzin"},"content":" *"},{"lineNumber":225,"author":{"gitId":"domoberzin"},"content":" * @throws EntityDoesNotExistException if the feedbackResponse does not exist"},{"lineNumber":226,"author":{"gitId":"domoberzin"},"content":" * @throws InvalidParametersException if the feedbackResponse is not valid"},{"lineNumber":227,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":228,"author":{"gitId":"domoberzin"},"content":" public FeedbackResponse updateFeedbackResponse(FeedbackResponse feedbackResponse)"},{"lineNumber":229,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":" assert feedbackResponse !\u003d null;"},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":" if (!feedbackResponse.isValid()) {"},{"lineNumber":233,"author":{"gitId":"domoberzin"},"content":" throw new InvalidParametersException(feedbackResponse.getInvalidityInfo());"},{"lineNumber":234,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":235,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":236,"author":{"gitId":"domoberzin"},"content":" if (getFeedbackResponse(feedbackResponse.getId()) \u003d\u003d null) {"},{"lineNumber":237,"author":{"gitId":"domoberzin"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":238,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":239,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":240,"author":{"gitId":"domoberzin"},"content":" return merge(feedbackResponse);"},{"lineNumber":241,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" * Gets all responses received by a user for a question."},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":246,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForRecipientForQuestion("},{"lineNumber":247,"author":{"gitId":"xenosf"},"content":" UUID questionId, String recipient) {"},{"lineNumber":248,"author":{"gitId":"xenosf"},"content":" assert questionId !\u003d null;"},{"lineNumber":249,"author":{"gitId":"xenosf"},"content":" assert recipient !\u003d null;"},{"lineNumber":250,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":251,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":252,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":253,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":254,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":255,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":256,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":257,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":258,"author":{"gitId":"xenosf"},"content":" cb.equal(fqJoin.get(\"id\"), questionId),"},{"lineNumber":259,"author":{"gitId":"xenosf"},"content":" cb.equal(root.get(\"recipient\"), recipient)"},{"lineNumber":260,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":261,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":262,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":263,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":264,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":265,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":266,"author":{"gitId":"xenosf"},"content":" * Gets all responses given to/from a section in a feedback session in a course."},{"lineNumber":267,"author":{"gitId":"xenosf"},"content":" * Optionally, retrieves by either giver, receiver sections, or both."},{"lineNumber":268,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":269,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForSessionInSection("},{"lineNumber":270,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId, String sectionName, FeedbackResultFetchType fetchType) {"},{"lineNumber":271,"author":{"gitId":"xenosf"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":272,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":273,"author":{"gitId":"xenosf"},"content":" assert sectionName !\u003d null;"},{"lineNumber":274,"author":{"gitId":"xenosf"},"content":" assert fetchType !\u003d null;"},{"lineNumber":275,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":276,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":277,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":278,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":279,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":280,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":281,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":282,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":283,"author":{"gitId":"xenosf"},"content":" // unless specified by fetchType, do not filter by giver/recipient section"},{"lineNumber":284,"author":{"gitId":"xenosf"},"content":" Predicate giverSectionFilter \u003d cb.isTrue(cb.literal(true));"},{"lineNumber":285,"author":{"gitId":"xenosf"},"content":" Predicate recipientSectionFilter \u003d cb.isTrue(cb.literal(true));"},{"lineNumber":286,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, Section\u003e giverJoin \u003d root.join(\"giverSection\");"},{"lineNumber":287,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, Section\u003e recipientJoin \u003d root.join(\"recipientSection\");"},{"lineNumber":288,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":289,"author":{"gitId":"xenosf"},"content":" if (fetchType.shouldFetchByGiver()) {"},{"lineNumber":290,"author":{"gitId":"xenosf"},"content":" giverSectionFilter \u003d cb.equal(giverJoin.get(\"name\"), sectionName);"},{"lineNumber":291,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":292,"author":{"gitId":"xenosf"},"content":" if (fetchType.shouldFetchByReceiver()) {"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" recipientSectionFilter \u003d cb.equal(recipientJoin.get(\"name\"), sectionName);"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" cb.equal(fsJoin.get(\"id\"), feedbackSession.getId()),"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" cb.equal(cJoin.get(\"id\"), courseId),"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" giverSectionFilter,"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" recipientSectionFilter"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":" * Gets all feedback responses of a question in a specific section."},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForQuestionInSection("},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":" UUID questionId, String sectionName, FeedbackResultFetchType fetchType) {"},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" assert questionId !\u003d null;"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" assert sectionName !\u003d null;"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" assert fetchType !\u003d null;"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" // unless specified by fetchType, do not filter by giver/recipient section"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":" Predicate giverSectionFilter \u003d cb.isTrue(cb.literal(true));"},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" Predicate recipientSectionFilter \u003d cb.isTrue(cb.literal(true));"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, Section\u003e giverJoin \u003d root.join(\"giverSection\");"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, Section\u003e recipientJoin \u003d root.join(\"recipientSection\");"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":" if (fetchType.shouldFetchByGiver()) {"},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" giverSectionFilter \u003d cb.equal(giverJoin.get(\"name\"), sectionName);"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" if (fetchType.shouldFetchByReceiver()) {"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" recipientSectionFilter \u003d cb.equal(recipientJoin.get(\"name\"), sectionName);"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" cb.equal(fqJoin.get(\"id\"), questionId),"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" giverSectionFilter,"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" recipientSectionFilter"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":340,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" * Gets all responses of a feedback session in a course."},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponsesForSession("},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession, String courseId) {"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":" assert courseId !\u003d null;"},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" CriteriaQuery\u003cFeedbackResponse\u003e cq \u003d cb.createQuery(FeedbackResponse.class);"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" Root\u003cFeedbackResponse\u003e root \u003d cq.from(FeedbackResponse.class);"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackResponse, FeedbackQuestion\u003e fqJoin \u003d root.join(\"feedbackQuestion\");"},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackQuestion, FeedbackSession\u003e fsJoin \u003d fqJoin.join(\"feedbackSession\");"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" Join\u003cFeedbackSession, Course\u003e cJoin \u003d fsJoin.join(\"course\");"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" cq.select(root)"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":" .where(cb.and("},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":" cb.equal(fsJoin.get(\"id\"), feedbackSession.getId()),"},{"lineNumber":362,"author":{"gitId":"xenosf"},"content":" cb.equal(cJoin.get(\"id\"), courseId)"},{"lineNumber":363,"author":{"gitId":"xenosf"},"content":" ));"},{"lineNumber":364,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":365,"author":{"gitId":"xenosf"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":366,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":367,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":368,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":37,"xenosf":128,"-":203}},{"path":"src/main/java/teammates/storage/sqlapi/FeedbackSessionsDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * Handles CRUD operations for feedback sessions."},{"lineNumber":26,"author":{"gitId":"-"},"content":" *"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * @see FeedbackSession"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public final class FeedbackSessionsDb extends EntitiesDb {"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final FeedbackSessionsDb instance \u003d new FeedbackSessionsDb();"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private FeedbackSessionsDb() {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static FeedbackSessionsDb inst() {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Gets a feedback session."},{"lineNumber":43,"author":{"gitId":"-"},"content":" *"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * @return null if not found"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(UUID fsId) {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assert fsId !\u003d null;"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" return HibernateUtil.get(FeedbackSession.class, fsId);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * Gets a feedback session for {@code feedbackSessionName} and {@code courseId}."},{"lineNumber":54,"author":{"gitId":"-"},"content":" *"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * @return null if not found"},{"lineNumber":56,"author":{"gitId":"-"},"content":" */"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":59,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cq \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e fsRoot \u003d cq.from(FeedbackSession.class);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e fsJoin \u003d fsRoot.join(\"course\");"},{"lineNumber":62,"author":{"gitId":"-"},"content":" cq.select(fsRoot).where(cb.and("},{"lineNumber":63,"author":{"gitId":"-"},"content":" cb.equal(fsRoot.get(\"name\"), feedbackSessionName),"},{"lineNumber":64,"author":{"gitId":"-"},"content":" cb.equal(fsJoin.get(\"id\"), courseId)));"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultStream().findFirst().orElse(null);"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * Gets a soft-deleted feedback session."},{"lineNumber":70,"author":{"gitId":"-"},"content":" *"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * @return null if not found or not soft-deleted."},{"lineNumber":72,"author":{"gitId":"-"},"content":" */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public FeedbackSession getSoftDeletedFeedbackSession(String feedbackSessionName, String courseId) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (feedbackSession !\u003d null \u0026\u0026 feedbackSession.getDeletedAt() \u003d\u003d null) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" log.info(feedbackSessionName + \"/\" + courseId + \" is not soft-deleted!\");"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" return feedbackSession;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Gets soft-deleted feedback sessions for course."},{"lineNumber":89,"author":{"gitId":"-"},"content":" */"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getSoftDeletedFeedbackSessionsForCourse(String courseId) {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":92,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cq \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e fsRoot \u003d cq.from(FeedbackSession.class);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e fsJoin \u003d fsRoot.join(\"course\");"},{"lineNumber":95,"author":{"gitId":"-"},"content":" cq.select(fsRoot).where(cb.and("},{"lineNumber":96,"author":{"gitId":"-"},"content":" cb.isNotNull(fsRoot.get(\"deletedAt\")),"},{"lineNumber":97,"author":{"gitId":"-"},"content":" cb.equal(fsJoin.get(\"id\"), courseId)));"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Gets all and only the feedback sessions ongoing within a range of time."},{"lineNumber":103,"author":{"gitId":"-"},"content":" */"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getOngoingSessions(Instant rangeStart, Instant rangeEnd) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" assert rangeStart !\u003d null;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assert rangeEnd !\u003d null;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":111,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":112,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"endTime\"), rangeStart),"},{"lineNumber":113,"author":{"gitId":"-"},"content":" cb.lessThan(root.get(\"startTime\"), rangeEnd)));"},{"lineNumber":114,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * Restores a specific soft deleted feedback session."},{"lineNumber":119,"author":{"gitId":"-"},"content":" */"},{"lineNumber":120,"author":{"gitId":"-"},"content":" public void restoreDeletedFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":121,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" FeedbackSession sessionEntity \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":" if (sessionEntity \u003d\u003d null) {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" sessionEntity.setDeletedAt(null);"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" merge(sessionEntity);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * Creates a feedback session."},{"lineNumber":137,"author":{"gitId":"-"},"content":" */"},{"lineNumber":138,"author":{"gitId":"-"},"content":" public FeedbackSession createFeedbackSession(FeedbackSession session)"},{"lineNumber":139,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" assert session !\u003d null;"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" if (!session.isValid()) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(session.getInvalidityInfo());"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" if (getFeedbackSession(session.getId()) !\u003d null) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" throw new EntityAlreadyExistsException(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, session.toString()));"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" persist(session);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" return session;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":155,"author":{"gitId":"-"},"content":" * Saves an updated {@code FeedbackSession} to the db."},{"lineNumber":156,"author":{"gitId":"-"},"content":" *"},{"lineNumber":157,"author":{"gitId":"-"},"content":" * @return updated feedback session"},{"lineNumber":158,"author":{"gitId":"-"},"content":" * @throws InvalidParametersException if attributes to update are not valid"},{"lineNumber":159,"author":{"gitId":"-"},"content":" * @throws EntityDoesNotExistException if the feedback session cannot be found"},{"lineNumber":160,"author":{"gitId":"-"},"content":" */"},{"lineNumber":161,"author":{"gitId":"-"},"content":" public FeedbackSession updateFeedbackSession(FeedbackSession feedbackSession)"},{"lineNumber":162,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" assert feedbackSession !\u003d null;"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" if (!feedbackSession.isValid()) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(feedbackSession.getInvalidityInfo());"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (getFeedbackSession(feedbackSession.getId()) \u003d\u003d null) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" return merge(feedbackSession);"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":177,"author":{"gitId":"-"},"content":" * Deletes a feedback session."},{"lineNumber":178,"author":{"gitId":"-"},"content":" */"},{"lineNumber":179,"author":{"gitId":"-"},"content":" public void deleteFeedbackSession(FeedbackSession feedbackSession) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" if (feedbackSession !\u003d null) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" delete(feedbackSession);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":186,"author":{"gitId":"-"},"content":" * Soft-deletes a specific feedback session by its name and course id."},{"lineNumber":187,"author":{"gitId":"-"},"content":" *"},{"lineNumber":188,"author":{"gitId":"-"},"content":" * @return Soft-deletion time of the feedback session."},{"lineNumber":189,"author":{"gitId":"-"},"content":" */"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public Instant softDeleteFeedbackSession(String feedbackSessionName, String courseId)"},{"lineNumber":191,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assert feedbackSessionName !\u003d null;"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSessionEntity \u003d getFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" if (feedbackSessionEntity \u003d\u003d null) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" feedbackSessionEntity.setDeletedAt(Instant.now());"},{"lineNumber":202,"author":{"gitId":"-"},"content":" merge(feedbackSessionEntity);"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" return feedbackSessionEntity.getDeletedAt();"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * Gets feedback sessions for a given {@code courseId}."},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesForCourse(String courseId) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":214,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cq \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":215,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cq.from(FeedbackSession.class);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d root.join(\"course\");"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" cq.select(root).where(cb.equal(courseJoin.get(\"id\"), courseId));"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cq).getResultList();"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":224,"author":{"gitId":"-"},"content":" * Gets feedback sessions for a given {@code courseId} that start after {@code after}."},{"lineNumber":225,"author":{"gitId":"-"},"content":" */"},{"lineNumber":226,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesForCourseStartingAfter(String courseId, Instant after) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" assert after !\u003d null;"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":231,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":233,"author":{"gitId":"-"},"content":" Join\u003cFeedbackSession, Course\u003e courseJoin \u003d root.join(\"course\");"},{"lineNumber":234,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":235,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":236,"author":{"gitId":"-"},"content":" cb.greaterThanOrEqualTo(root.get(\"startTime\"), after),"},{"lineNumber":237,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId)));"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":243,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which open in the future"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * and possibly need a opening soon email to be sent."},{"lineNumber":245,"author":{"gitId":"-"},"content":" */"},{"lineNumber":246,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingOpeningSoonEmail() {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" return getFeedbackSessionEntitiesPossiblyNeedingOpeningSoonEmail().stream()"},{"lineNumber":248,"author":{"gitId":"-"},"content":" .filter(session -\u003e session.getDeletedAt() \u003d\u003d null)"},{"lineNumber":249,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":250,"author":{"gitId":"-"},"content":" }"},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":" private List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesPossiblyNeedingOpeningSoonEmail() {"},{"lineNumber":253,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":254,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":255,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":258,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":259,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"startTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":260,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isOpeningSoonEmailSent\"), false)));"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":263,"author":{"gitId":"-"},"content":" }"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":266,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which end in the future (2 hour ago onward)"},{"lineNumber":267,"author":{"gitId":"-"},"content":" * and possibly need a closing soon email to be sent."},{"lineNumber":268,"author":{"gitId":"-"},"content":" */"},{"lineNumber":269,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingClosingSoonEmail() {"},{"lineNumber":270,"author":{"gitId":"-"},"content":" return getFeedbackSessionEntitiesPossiblyNeedingClosingSoonEmail().stream()"},{"lineNumber":271,"author":{"gitId":"-"},"content":" .filter(session -\u003e session.getDeletedAt() \u003d\u003d null)"},{"lineNumber":272,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" private List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesPossiblyNeedingClosingSoonEmail() {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":277,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":278,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":281,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":282,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"endTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":283,"author":{"gitId":"-"},"content":" cb.and("},{"lineNumber":284,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isClosingSoonEmailSent\"), false),"},{"lineNumber":285,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isClosingEmailEnabled\"), true))"},{"lineNumber":286,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":289,"author":{"gitId":"-"},"content":" }"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":292,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which end in the future (2 hour ago onward)"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * and possibly need a closed email to be sent."},{"lineNumber":294,"author":{"gitId":"-"},"content":" */"},{"lineNumber":295,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingClosedEmail() {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":297,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":298,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":301,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":302,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"endTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":303,"author":{"gitId":"-"},"content":" cb.isFalse(root.get(\"isClosedEmailSent\")),"},{"lineNumber":304,"author":{"gitId":"-"},"content":" cb.isTrue(root.get(\"isClosingEmailEnabled\")),"},{"lineNumber":305,"author":{"gitId":"-"},"content":" cb.isNull(root.get(\"deletedAt\"))"},{"lineNumber":306,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":312,"author":{"gitId":"-"},"content":" * Gets a list of undeleted published feedback sessions which possibly need a published email"},{"lineNumber":313,"author":{"gitId":"-"},"content":" * to be sent."},{"lineNumber":314,"author":{"gitId":"-"},"content":" */"},{"lineNumber":315,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingPublishedEmail() {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" return getFeedbackSessionEntitiesPossiblyNeedingPublishedEmail().stream()"},{"lineNumber":317,"author":{"gitId":"-"},"content":" .filter(session -\u003e session.getDeletedAt() \u003d\u003d null)"},{"lineNumber":318,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" private List\u003cFeedbackSession\u003e getFeedbackSessionEntitiesPossiblyNeedingPublishedEmail() {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":323,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":324,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":327,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":328,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"resultsVisibleFromTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":329,"author":{"gitId":"-"},"content":" cb.and("},{"lineNumber":330,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isPublishedEmailSent\"), false),"},{"lineNumber":331,"author":{"gitId":"-"},"content":" cb.equal(root.get(\"isPublishedEmailEnabled\"), true))"},{"lineNumber":332,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":333,"author":{"gitId":"-"},"content":""},{"lineNumber":334,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":338,"author":{"gitId":"-"},"content":" * Gets a list of undeleted feedback sessions which start within the last 2 days"},{"lineNumber":339,"author":{"gitId":"-"},"content":" * and possibly need an open email to be sent."},{"lineNumber":340,"author":{"gitId":"-"},"content":" */"},{"lineNumber":341,"author":{"gitId":"-"},"content":" public List\u003cFeedbackSession\u003e getFeedbackSessionsPossiblyNeedingOpenEmail() {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":343,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cFeedbackSession\u003e cr \u003d cb.createQuery(FeedbackSession.class);"},{"lineNumber":344,"author":{"gitId":"-"},"content":" Root\u003cFeedbackSession\u003e root \u003d cr.from(FeedbackSession.class);"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" cr.select(root)"},{"lineNumber":347,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":348,"author":{"gitId":"-"},"content":" cb.greaterThan(root.get(\"startTime\"), TimeHelper.getInstantDaysOffsetFromNow(-2)),"},{"lineNumber":349,"author":{"gitId":"-"},"content":" cb.isFalse(root.get(\"isOpenEmailSent\")),"},{"lineNumber":350,"author":{"gitId":"-"},"content":" cb.isNull(root.get(\"deletedAt\"))"},{"lineNumber":351,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":354,"author":{"gitId":"-"},"content":" }"},{"lineNumber":355,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":1,"-":354}},{"path":"src/main/java/teammates/storage/sqlapi/UsersDb.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.InstructorSearchManager;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.SearchManagerFactory;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlsearch.StudentSearchManager;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaBuilder;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.CriteriaQuery;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Join;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Predicate;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import jakarta.persistence.criteria.Root;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Handles CRUD operations for users."},{"lineNumber":34,"author":{"gitId":"-"},"content":" *"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * @see User"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */"},{"lineNumber":37,"author":{"gitId":"-"},"content":"public final class UsersDb extends EntitiesDb {"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final UsersDb instance \u003d new UsersDb();"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" private UsersDb() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // prevent initialization"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" public static UsersDb inst() {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" return instance;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" public InstructorSearchManager getInstructorSearchManager() {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return SearchManagerFactory.getInstructorSearchManager();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" public StudentSearchManager getStudentSearchManager() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return SearchManagerFactory.getStudentSearchManager();"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Creates an instructor."},{"lineNumber":59,"author":{"gitId":"-"},"content":" */"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public Instructor createInstructor(Instructor instructor)"},{"lineNumber":61,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" assert instructor !\u003d null;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" if (!instructor.isValid()) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(instructor.getInvalidityInfo());"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" persist(instructor);"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return instructor;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Creates a student."},{"lineNumber":74,"author":{"gitId":"-"},"content":" */"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public Student createStudent(Student student)"},{"lineNumber":76,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assert student !\u003d null;"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (!student.isValid()) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" throw new InvalidParametersException(student.getInvalidityInfo());"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" persist(student);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return student;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Gets an instructor by its {@code id}."},{"lineNumber":89,"author":{"gitId":"-"},"content":" */"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public Instructor getInstructor(UUID id) {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" return HibernateUtil.get(Instructor.class, id);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * Gets an instructor by {@code regKey}."},{"lineNumber":98,"author":{"gitId":"-"},"content":" */"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public Instructor getInstructorByRegKey(String regKey) {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" cr.select(instructorRoot).where(cb.equal(instructorRoot.get(\"regKey\"), regKey));"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Gets an instructor by {@code googleId}."},{"lineNumber":111,"author":{"gitId":"-"},"content":" */"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public Instructor getInstructorByGoogleId(String courseId, String googleId) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" Join\u003cInstructor, Account\u003e accountsJoin \u003d instructorRoot.join(\"account\");"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" cr.select(instructorRoot).where(cb.and("},{"lineNumber":119,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"courseId\"), courseId),"},{"lineNumber":120,"author":{"gitId":"-"},"content":" cb.equal(accountsJoin.get(\"googleId\"), googleId)));"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":126,"author":{"gitId":"-"},"content":" * Gets all instructors that will be displayed to students of a course."},{"lineNumber":127,"author":{"gitId":"-"},"content":" */"},{"lineNumber":128,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsDisplayedToStudents(String courseId) {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":130,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" cr.select(instructorRoot).where(cb.and("},{"lineNumber":134,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"courseId\"), courseId),"},{"lineNumber":135,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"isDisplayedToStudents\"), true)));"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Gets a student by its {@code id}."},{"lineNumber":142,"author":{"gitId":"-"},"content":" */"},{"lineNumber":143,"author":{"gitId":"-"},"content":" public Student getStudent(UUID id) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" assert id !\u003d null;"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" return HibernateUtil.get(Student.class, id);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":150,"author":{"gitId":"-"},"content":" * Gets a student by {@code regKey}."},{"lineNumber":151,"author":{"gitId":"-"},"content":" */"},{"lineNumber":152,"author":{"gitId":"-"},"content":" public Student getStudentByRegKey(String regKey) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":154,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" cr.select(studentRoot).where(cb.equal(studentRoot.get(\"regKey\"), regKey));"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":163,"author":{"gitId":"-"},"content":" * Gets a student by {@code googleId}."},{"lineNumber":164,"author":{"gitId":"-"},"content":" */"},{"lineNumber":165,"author":{"gitId":"-"},"content":" public Student getStudentByGoogleId(String courseId, String googleId) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":167,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" Join\u003cStudent, Account\u003e accountsJoin \u003d studentRoot.join(\"account\");"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" cr.select(studentRoot).where(cb.and("},{"lineNumber":172,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"courseId\"), courseId),"},{"lineNumber":173,"author":{"gitId":"-"},"content":" cb.equal(accountsJoin.get(\"googleId\"), googleId)));"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":179,"author":{"gitId":"-"},"content":" * Gets all students by {@code googleId}."},{"lineNumber":180,"author":{"gitId":"-"},"content":" */"},{"lineNumber":181,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByGoogleId(String googleId) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":183,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":184,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":185,"author":{"gitId":"-"},"content":" Join\u003cStudent, Account\u003e accountsJoin \u003d studentRoot.join(\"account\");"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" cr.select(studentRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":193,"author":{"gitId":"-"},"content":" * Gets a list of students by {@code teamName} and {@code courseId}."},{"lineNumber":194,"author":{"gitId":"-"},"content":" */"},{"lineNumber":195,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsByTeamName(String teamName, String courseId) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":197,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" studentRoot.alias(\"student\");"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" Join\u003cStudent, Team\u003e teamsJoin \u003d studentRoot.join(\"team\");"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" cr.select(studentRoot).where(cb.and("},{"lineNumber":205,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"courseId\"), courseId),"},{"lineNumber":206,"author":{"gitId":"-"},"content":" cb.equal(teamsJoin.get(\"name\"), teamName)));"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":212,"author":{"gitId":"-"},"content":" * Gets all instructors and students by {@code googleId}."},{"lineNumber":213,"author":{"gitId":"-"},"content":" */"},{"lineNumber":214,"author":{"gitId":"-"},"content":" public List\u003cUser\u003e getAllUsersByGoogleId(String googleId) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":216,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cUser\u003e usersCr \u003d cb.createQuery(User.class);"},{"lineNumber":217,"author":{"gitId":"-"},"content":" Root\u003cUser\u003e usersRoot \u003d usersCr.from(User.class);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" Join\u003cUser, Account\u003e accountsJoin \u003d usersRoot.join(\"account\");"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" usersCr.select(usersRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(usersCr).getResultList();"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":226,"author":{"gitId":"-"},"content":" * Gets all instructors by {@code googleId}."},{"lineNumber":227,"author":{"gitId":"-"},"content":" */"},{"lineNumber":228,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getAllInstructorsByGoogleId(String googleId) {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":230,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e instructorsCr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":231,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorsRoot \u003d instructorsCr.from(Instructor.class);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" Join\u003cInstructor, Account\u003e accountsJoin \u003d instructorsRoot.join(\"account\");"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" instructorsCr.select(instructorsRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(instructorsCr).getResultList();"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * Gets all students by {@code googleId}."},{"lineNumber":241,"author":{"gitId":"-"},"content":" */"},{"lineNumber":242,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getAllStudentsByGoogleId(String googleId) {"},{"lineNumber":243,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":244,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e studentsCr \u003d cb.createQuery(Student.class);"},{"lineNumber":245,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentsRoot \u003d studentsCr.from(Student.class);"},{"lineNumber":246,"author":{"gitId":"-"},"content":" Join\u003cStudent, Account\u003e accountsJoin \u003d studentsRoot.join(\"account\");"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" studentsCr.select(studentsRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(studentsCr).getResultList();"},{"lineNumber":251,"author":{"gitId":"-"},"content":" }"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":254,"author":{"gitId":"-"},"content":" * Gets all instructors."},{"lineNumber":255,"author":{"gitId":"-"},"content":" */"},{"lineNumber":256,"author":{"gitId":"-"},"content":" public \u003cT extends User\u003e T updateUser(T user) {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" assert user !\u003d null;"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" return merge(user);"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":263,"author":{"gitId":"-"},"content":" * Searches all instructors in the system."},{"lineNumber":264,"author":{"gitId":"-"},"content":" *"},{"lineNumber":265,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis method should be used by admin only since the searching does not"},{"lineNumber":266,"author":{"gitId":"-"},"content":" * restrict the visibility according to the logged-in user\u0027s google ID. This"},{"lineNumber":267,"author":{"gitId":"-"},"content":" * is used by admin to search instructors in the whole system."},{"lineNumber":268,"author":{"gitId":"-"},"content":" */"},{"lineNumber":269,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e searchInstructorsInWholeSystem(String queryString)"},{"lineNumber":270,"author":{"gitId":"-"},"content":" throws SearchServiceException {"},{"lineNumber":271,"author":{"gitId":"-"},"content":" if (queryString.trim().isEmpty()) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" return getInstructorSearchManager().searchInstructors(queryString);"},{"lineNumber":276,"author":{"gitId":"-"},"content":" }"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":279,"author":{"gitId":"yuanxi1"},"content":" * Searches for students."},{"lineNumber":280,"author":{"gitId":"yuanxi1"},"content":" *"},{"lineNumber":281,"author":{"gitId":"yuanxi1"},"content":" * @param instructors the constraint that restricts the search result"},{"lineNumber":282,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":283,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudents(String queryString, List\u003cInstructor\u003e instructors)"},{"lineNumber":284,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":285,"author":{"gitId":"yuanxi1"},"content":" if (queryString.trim().isEmpty()) {"},{"lineNumber":286,"author":{"gitId":"yuanxi1"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":287,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":288,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":289,"author":{"gitId":"yuanxi1"},"content":" return getStudentSearchManager().searchStudents(queryString, instructors);"},{"lineNumber":290,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":291,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":292,"author":{"gitId":"yuanxi1"},"content":" /**"},{"lineNumber":293,"author":{"gitId":"yuanxi1"},"content":" * Searches all students in the system."},{"lineNumber":294,"author":{"gitId":"yuanxi1"},"content":" *"},{"lineNumber":295,"author":{"gitId":"yuanxi1"},"content":" * \u003cp\u003eThis method should be used by admin only since the searching does not restrict the"},{"lineNumber":296,"author":{"gitId":"yuanxi1"},"content":" * visibility according to the logged-in user\u0027s google ID. This is used by admin to"},{"lineNumber":297,"author":{"gitId":"yuanxi1"},"content":" * search instructors in the whole system."},{"lineNumber":298,"author":{"gitId":"yuanxi1"},"content":" */"},{"lineNumber":299,"author":{"gitId":"yuanxi1"},"content":" public List\u003cStudent\u003e searchStudentsInWholeSystem(String queryString)"},{"lineNumber":300,"author":{"gitId":"yuanxi1"},"content":" throws SearchServiceException {"},{"lineNumber":301,"author":{"gitId":"yuanxi1"},"content":" if (queryString.trim().isEmpty()) {"},{"lineNumber":302,"author":{"gitId":"yuanxi1"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":303,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":304,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":305,"author":{"gitId":"yuanxi1"},"content":" return getStudentSearchManager().searchStudents(queryString, null);"},{"lineNumber":306,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":307,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":309,"author":{"gitId":"-"},"content":" * Deletes a user."},{"lineNumber":310,"author":{"gitId":"-"},"content":" */"},{"lineNumber":311,"author":{"gitId":"-"},"content":" public \u003cT extends User\u003e void deleteUser(T user) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" if (user !\u003d null) {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" delete(user);"},{"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":" * Gets the number of instructors created within a specified time range."},{"lineNumber":319,"author":{"gitId":"-"},"content":" */"},{"lineNumber":320,"author":{"gitId":"-"},"content":" public long getNumInstructorsByTimeRange(Instant startTime, Instant endTime) {"},{"lineNumber":321,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":322,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cLong\u003e cr \u003d cb.createQuery(Long.class);"},{"lineNumber":323,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e root \u003d cr.from(Instructor.class);"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":" cr.select(cb.count(root.get(\"id\"))).where(cb.and("},{"lineNumber":326,"author":{"gitId":"-"},"content":" cb.greaterThanOrEqualTo(root.get(\"createdAt\"), startTime),"},{"lineNumber":327,"author":{"gitId":"-"},"content":" cb.lessThan(root.get(\"createdAt\"), endTime)));"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getSingleResult();"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }"},{"lineNumber":331,"author":{"gitId":"-"},"content":""},{"lineNumber":332,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":333,"author":{"gitId":"-"},"content":" * Gets the number of students created within a specified time range."},{"lineNumber":334,"author":{"gitId":"-"},"content":" */"},{"lineNumber":335,"author":{"gitId":"-"},"content":" public long getNumStudentsByTimeRange(Instant startTime, Instant endTime) {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":337,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cLong\u003e cr \u003d cb.createQuery(Long.class);"},{"lineNumber":338,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e root \u003d cr.from(Student.class);"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":" cr.select(cb.count(root.get(\"id\"))).where(cb.and("},{"lineNumber":341,"author":{"gitId":"-"},"content":" cb.greaterThanOrEqualTo(root.get(\"createdAt\"), startTime),"},{"lineNumber":342,"author":{"gitId":"-"},"content":" cb.lessThan(root.get(\"createdAt\"), endTime)));"},{"lineNumber":343,"author":{"gitId":"-"},"content":""},{"lineNumber":344,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getSingleResult();"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":348,"author":{"gitId":"-"},"content":" * Gets the list of instructors for the specified {@code courseId}."},{"lineNumber":349,"author":{"gitId":"-"},"content":" */"},{"lineNumber":350,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForCourse(String courseId) {"},{"lineNumber":351,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":354,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":355,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e root \u003d cr.from(Instructor.class);"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.equal(root.get(\"courseId\"), courseId));"},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":360,"author":{"gitId":"-"},"content":" }"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":363,"author":{"gitId":"-"},"content":" * Gets the list of students for the specified {@code courseId}."},{"lineNumber":364,"author":{"gitId":"-"},"content":" */"},{"lineNumber":365,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForCourse(String courseId) {"},{"lineNumber":366,"author":{"gitId":"-"},"content":" assert courseId !\u003d null \u0026\u0026 !courseId.isEmpty();"},{"lineNumber":367,"author":{"gitId":"-"},"content":""},{"lineNumber":368,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":369,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":370,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e root \u003d cr.from(Student.class);"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.equal(root.get(\"courseId\"), courseId));"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":375,"author":{"gitId":"-"},"content":" }"},{"lineNumber":376,"author":{"gitId":"-"},"content":""},{"lineNumber":377,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":378,"author":{"gitId":"-"},"content":" * Gets the list of students for the specified {@code courseId} in batches with {@code batchSize}."},{"lineNumber":379,"author":{"gitId":"-"},"content":" */"},{"lineNumber":380,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForCourse(String courseId, int batchSize) {"},{"lineNumber":381,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":384,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":385,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e root \u003d cr.from(Student.class);"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" cr.select(root).where(cb.equal(root.get(\"courseId\"), courseId));"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).setMaxResults(batchSize).getResultList();"},{"lineNumber":390,"author":{"gitId":"-"},"content":" }"},{"lineNumber":391,"author":{"gitId":"-"},"content":""},{"lineNumber":392,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":393,"author":{"gitId":"-"},"content":" * Gets the instructor with the specified {@code userEmail}."},{"lineNumber":394,"author":{"gitId":"-"},"content":" */"},{"lineNumber":395,"author":{"gitId":"-"},"content":" public Instructor getInstructorForEmail(String courseId, String userEmail) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":397,"author":{"gitId":"-"},"content":" assert userEmail !\u003d null;"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":400,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":401,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":402,"author":{"gitId":"-"},"content":""},{"lineNumber":403,"author":{"gitId":"-"},"content":" cr.select(instructorRoot)"},{"lineNumber":404,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":405,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"courseId\"), courseId),"},{"lineNumber":406,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"email\"), userEmail)));"},{"lineNumber":407,"author":{"gitId":"-"},"content":""},{"lineNumber":408,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":409,"author":{"gitId":"-"},"content":" }"},{"lineNumber":410,"author":{"gitId":"-"},"content":""},{"lineNumber":411,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":412,"author":{"gitId":"-"},"content":" * Gets instructors with the specified {@code userEmail}."},{"lineNumber":413,"author":{"gitId":"-"},"content":" */"},{"lineNumber":414,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForEmails(String courseId, List\u003cString\u003e userEmails) {"},{"lineNumber":415,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":416,"author":{"gitId":"-"},"content":" assert userEmails !\u003d null;"},{"lineNumber":417,"author":{"gitId":"-"},"content":""},{"lineNumber":418,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":419,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":420,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":421,"author":{"gitId":"-"},"content":""},{"lineNumber":422,"author":{"gitId":"-"},"content":" List\u003cPredicate\u003e predicates \u003d new ArrayList\u003c\u003e();"},{"lineNumber":423,"author":{"gitId":"-"},"content":" for (String userEmail : userEmails) {"},{"lineNumber":424,"author":{"gitId":"-"},"content":" predicates.add(cb.equal(instructorRoot.get(\"email\"), userEmail));"},{"lineNumber":425,"author":{"gitId":"-"},"content":" }"},{"lineNumber":426,"author":{"gitId":"-"},"content":""},{"lineNumber":427,"author":{"gitId":"-"},"content":" cr.select(instructorRoot)"},{"lineNumber":428,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":429,"author":{"gitId":"-"},"content":" cb.equal(instructorRoot.get(\"courseId\"), courseId),"},{"lineNumber":430,"author":{"gitId":"-"},"content":" cb.or(predicates.toArray(new Predicate[0]))));"},{"lineNumber":431,"author":{"gitId":"-"},"content":""},{"lineNumber":432,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":433,"author":{"gitId":"-"},"content":" }"},{"lineNumber":434,"author":{"gitId":"-"},"content":""},{"lineNumber":435,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":436,"author":{"gitId":"-"},"content":" * Gets the student with the specified {@code userEmail}."},{"lineNumber":437,"author":{"gitId":"-"},"content":" */"},{"lineNumber":438,"author":{"gitId":"-"},"content":" public Student getStudentForEmail(String courseId, String userEmail) {"},{"lineNumber":439,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":440,"author":{"gitId":"-"},"content":" assert userEmail !\u003d null;"},{"lineNumber":441,"author":{"gitId":"-"},"content":""},{"lineNumber":442,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":443,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":444,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":445,"author":{"gitId":"-"},"content":""},{"lineNumber":446,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":447,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":448,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"courseId\"), courseId),"},{"lineNumber":449,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"email\"), userEmail)));"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":452,"author":{"gitId":"-"},"content":" }"},{"lineNumber":453,"author":{"gitId":"-"},"content":""},{"lineNumber":454,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":455,"author":{"gitId":"-"},"content":" * Gets students with the specified {@code userEmail}."},{"lineNumber":456,"author":{"gitId":"-"},"content":" */"},{"lineNumber":457,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForEmails(String courseId, List\u003cString\u003e userEmails) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":459,"author":{"gitId":"-"},"content":" assert userEmails !\u003d null;"},{"lineNumber":460,"author":{"gitId":"-"},"content":""},{"lineNumber":461,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":462,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":463,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":464,"author":{"gitId":"-"},"content":""},{"lineNumber":465,"author":{"gitId":"-"},"content":" List\u003cPredicate\u003e predicates \u003d new ArrayList\u003c\u003e();"},{"lineNumber":466,"author":{"gitId":"-"},"content":" for (String userEmail : userEmails) {"},{"lineNumber":467,"author":{"gitId":"-"},"content":" predicates.add(cb.equal(studentRoot.get(\"email\"), userEmail));"},{"lineNumber":468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":469,"author":{"gitId":"-"},"content":""},{"lineNumber":470,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":471,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":472,"author":{"gitId":"-"},"content":" cb.equal(studentRoot.get(\"courseId\"), courseId),"},{"lineNumber":473,"author":{"gitId":"-"},"content":" cb.or(predicates.toArray(new Predicate[0]))));"},{"lineNumber":474,"author":{"gitId":"-"},"content":""},{"lineNumber":475,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":476,"author":{"gitId":"-"},"content":" }"},{"lineNumber":477,"author":{"gitId":"-"},"content":""},{"lineNumber":478,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":479,"author":{"gitId":"-"},"content":" * Gets list of students by email."},{"lineNumber":480,"author":{"gitId":"-"},"content":" */"},{"lineNumber":481,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getAllStudentsForEmail(String email) {"},{"lineNumber":482,"author":{"gitId":"-"},"content":" assert email !\u003d null;"},{"lineNumber":483,"author":{"gitId":"-"},"content":""},{"lineNumber":484,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":485,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":486,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":487,"author":{"gitId":"-"},"content":""},{"lineNumber":488,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":489,"author":{"gitId":"-"},"content":" .where(cb.equal(studentRoot.get(\"email\"), email));"},{"lineNumber":490,"author":{"gitId":"-"},"content":""},{"lineNumber":491,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":492,"author":{"gitId":"-"},"content":" }"},{"lineNumber":493,"author":{"gitId":"-"},"content":""},{"lineNumber":494,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":495,"author":{"gitId":"-"},"content":" * Gets all instructors associated with a googleId."},{"lineNumber":496,"author":{"gitId":"-"},"content":" */"},{"lineNumber":497,"author":{"gitId":"-"},"content":" public List\u003cInstructor\u003e getInstructorsForGoogleId(String googleId) {"},{"lineNumber":498,"author":{"gitId":"-"},"content":" assert googleId !\u003d null;"},{"lineNumber":499,"author":{"gitId":"-"},"content":""},{"lineNumber":500,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":501,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cInstructor\u003e cr \u003d cb.createQuery(Instructor.class);"},{"lineNumber":502,"author":{"gitId":"-"},"content":" Root\u003cInstructor\u003e instructorRoot \u003d cr.from(Instructor.class);"},{"lineNumber":503,"author":{"gitId":"-"},"content":" Join\u003cInstructor, Account\u003e accountsJoin \u003d instructorRoot.join(\"account\");"},{"lineNumber":504,"author":{"gitId":"-"},"content":""},{"lineNumber":505,"author":{"gitId":"-"},"content":" cr.select(instructorRoot).where(cb.equal(accountsJoin.get(\"googleId\"), googleId));"},{"lineNumber":506,"author":{"gitId":"-"},"content":""},{"lineNumber":507,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":508,"author":{"gitId":"-"},"content":" }"},{"lineNumber":509,"author":{"gitId":"-"},"content":""},{"lineNumber":510,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":511,"author":{"gitId":"-"},"content":" * Gets all students of a section of a course."},{"lineNumber":512,"author":{"gitId":"-"},"content":" */"},{"lineNumber":513,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForSection(String sectionName, String courseId) {"},{"lineNumber":514,"author":{"gitId":"-"},"content":" assert sectionName !\u003d null;"},{"lineNumber":515,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":516,"author":{"gitId":"-"},"content":""},{"lineNumber":517,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":518,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":519,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":520,"author":{"gitId":"-"},"content":" Join\u003cStudent, Course\u003e courseJoin \u003d studentRoot.join(\"course\");"},{"lineNumber":521,"author":{"gitId":"-"},"content":" Join\u003cStudent, Team\u003e teamsJoin \u003d studentRoot.join(\"team\");"},{"lineNumber":522,"author":{"gitId":"-"},"content":" Join\u003cTeam, Section\u003e sectionJoin \u003d teamsJoin.join(\"section\");"},{"lineNumber":523,"author":{"gitId":"-"},"content":""},{"lineNumber":524,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":525,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":526,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":527,"author":{"gitId":"-"},"content":" cb.equal(sectionJoin.get(\"name\"), sectionName)));"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":530,"author":{"gitId":"-"},"content":" }"},{"lineNumber":531,"author":{"gitId":"-"},"content":""},{"lineNumber":532,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":533,"author":{"gitId":"-"},"content":" * Gets all students of a team of a course."},{"lineNumber":534,"author":{"gitId":"-"},"content":" */"},{"lineNumber":535,"author":{"gitId":"-"},"content":" public List\u003cStudent\u003e getStudentsForTeam(String teamName, String courseId) {"},{"lineNumber":536,"author":{"gitId":"-"},"content":" assert teamName !\u003d null;"},{"lineNumber":537,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":538,"author":{"gitId":"-"},"content":""},{"lineNumber":539,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":540,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cStudent\u003e cr \u003d cb.createQuery(Student.class);"},{"lineNumber":541,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":542,"author":{"gitId":"-"},"content":" Join\u003cStudent, Course\u003e courseJoin \u003d studentRoot.join(\"course\");"},{"lineNumber":543,"author":{"gitId":"-"},"content":" Join\u003cStudent, Team\u003e teamsJoin \u003d studentRoot.join(\"team\");"},{"lineNumber":544,"author":{"gitId":"-"},"content":""},{"lineNumber":545,"author":{"gitId":"-"},"content":" cr.select(studentRoot)"},{"lineNumber":546,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":547,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":548,"author":{"gitId":"-"},"content":" cb.equal(teamsJoin.get(\"name\"), teamName)));"},{"lineNumber":549,"author":{"gitId":"-"},"content":""},{"lineNumber":550,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getResultList();"},{"lineNumber":551,"author":{"gitId":"-"},"content":" }"},{"lineNumber":552,"author":{"gitId":"-"},"content":""},{"lineNumber":553,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":554,"author":{"gitId":"-"},"content":" * Gets count of students of a team of a course."},{"lineNumber":555,"author":{"gitId":"-"},"content":" */"},{"lineNumber":556,"author":{"gitId":"-"},"content":" public long getStudentCountForTeam(String teamName, String courseId) {"},{"lineNumber":557,"author":{"gitId":"-"},"content":" assert teamName !\u003d null;"},{"lineNumber":558,"author":{"gitId":"-"},"content":" assert courseId !\u003d null;"},{"lineNumber":559,"author":{"gitId":"-"},"content":""},{"lineNumber":560,"author":{"gitId":"-"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":561,"author":{"gitId":"-"},"content":" CriteriaQuery\u003cLong\u003e cr \u003d cb.createQuery(Long.class);"},{"lineNumber":562,"author":{"gitId":"-"},"content":" Root\u003cStudent\u003e studentRoot \u003d cr.from(Student.class);"},{"lineNumber":563,"author":{"gitId":"-"},"content":" Join\u003cStudent, Course\u003e courseJoin \u003d studentRoot.join(\"course\");"},{"lineNumber":564,"author":{"gitId":"-"},"content":" Join\u003cStudent, Team\u003e teamsJoin \u003d studentRoot.join(\"team\");"},{"lineNumber":565,"author":{"gitId":"-"},"content":""},{"lineNumber":566,"author":{"gitId":"-"},"content":" cr.select(cb.count(studentRoot.get(\"id\")))"},{"lineNumber":567,"author":{"gitId":"-"},"content":" .where(cb.and("},{"lineNumber":568,"author":{"gitId":"-"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":569,"author":{"gitId":"-"},"content":" cb.equal(teamsJoin.get(\"name\"), teamName)));"},{"lineNumber":570,"author":{"gitId":"-"},"content":""},{"lineNumber":571,"author":{"gitId":"-"},"content":" return HibernateUtil.createQuery(cr).getSingleResult();"},{"lineNumber":572,"author":{"gitId":"-"},"content":" }"},{"lineNumber":573,"author":{"gitId":"-"},"content":""},{"lineNumber":574,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":575,"author":{"gitId":"domoberzin"},"content":" * Gets the section with the specified {@code sectionName} and {@code courseId}."},{"lineNumber":576,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":577,"author":{"gitId":"domoberzin"},"content":" public Section getSection(String courseId, String sectionName) {"},{"lineNumber":578,"author":{"gitId":"domoberzin"},"content":" assert sectionName !\u003d null;"},{"lineNumber":579,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":580,"author":{"gitId":"domoberzin"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":581,"author":{"gitId":"domoberzin"},"content":" CriteriaQuery\u003cSection\u003e cr \u003d cb.createQuery(Section.class);"},{"lineNumber":582,"author":{"gitId":"domoberzin"},"content":" Root\u003cSection\u003e sectionRoot \u003d cr.from(Section.class);"},{"lineNumber":583,"author":{"gitId":"domoberzin"},"content":" Join\u003cSection, Course\u003e courseJoin \u003d sectionRoot.join(\"course\");"},{"lineNumber":584,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":585,"author":{"gitId":"domoberzin"},"content":" cr.select(sectionRoot)"},{"lineNumber":586,"author":{"gitId":"domoberzin"},"content":" .where(cb.and("},{"lineNumber":587,"author":{"gitId":"domoberzin"},"content":" cb.equal(courseJoin.get(\"id\"), courseId),"},{"lineNumber":588,"author":{"gitId":"domoberzin"},"content":" cb.equal(sectionRoot.get(\"name\"), sectionName)));"},{"lineNumber":589,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":590,"author":{"gitId":"domoberzin"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":591,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":592,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":593,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":594,"author":{"gitId":"domoberzin"},"content":" * Gets a section by its {@code courseId} and {@code sectionName}."},{"lineNumber":595,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":596,"author":{"gitId":"domoberzin"},"content":" public Section getSectionOrCreate(String courseId, String sectionName) {"},{"lineNumber":597,"author":{"gitId":"domoberzin"},"content":" assert courseId !\u003d null;"},{"lineNumber":598,"author":{"gitId":"domoberzin"},"content":" assert sectionName !\u003d null;"},{"lineNumber":599,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":600,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getSection(courseId, sectionName);"},{"lineNumber":601,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":602,"author":{"gitId":"domoberzin"},"content":" if (section \u003d\u003d null) {"},{"lineNumber":603,"author":{"gitId":"domoberzin"},"content":" Course course \u003d CoursesDb.inst().getCourse(courseId);"},{"lineNumber":604,"author":{"gitId":"domoberzin"},"content":" section \u003d new Section(course, sectionName);"},{"lineNumber":605,"author":{"gitId":"domoberzin"},"content":" persist(section);"},{"lineNumber":606,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":607,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":608,"author":{"gitId":"domoberzin"},"content":" return section;"},{"lineNumber":609,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":610,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":611,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":612,"author":{"gitId":"domoberzin"},"content":" * Gets a team by its {@code section} and {@code teamName}."},{"lineNumber":613,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":614,"author":{"gitId":"domoberzin"},"content":" public Team getTeam(Section section, String teamName) {"},{"lineNumber":615,"author":{"gitId":"domoberzin"},"content":" assert teamName !\u003d null;"},{"lineNumber":616,"author":{"gitId":"domoberzin"},"content":" assert section !\u003d null;"},{"lineNumber":617,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":618,"author":{"gitId":"domoberzin"},"content":" CriteriaBuilder cb \u003d HibernateUtil.getCriteriaBuilder();"},{"lineNumber":619,"author":{"gitId":"domoberzin"},"content":" CriteriaQuery\u003cTeam\u003e cr \u003d cb.createQuery(Team.class);"},{"lineNumber":620,"author":{"gitId":"domoberzin"},"content":" Root\u003cTeam\u003e teamRoot \u003d cr.from(Team.class);"},{"lineNumber":621,"author":{"gitId":"domoberzin"},"content":" Join\u003cTeam, Section\u003e sectionJoin \u003d teamRoot.join(\"section\");"},{"lineNumber":622,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":623,"author":{"gitId":"domoberzin"},"content":" cr.select(teamRoot)"},{"lineNumber":624,"author":{"gitId":"domoberzin"},"content":" .where(cb.and("},{"lineNumber":625,"author":{"gitId":"domoberzin"},"content":" cb.equal(sectionJoin.get(\"id\"), section.getId()),"},{"lineNumber":626,"author":{"gitId":"domoberzin"},"content":" cb.equal(teamRoot.get(\"name\"), teamName)));"},{"lineNumber":627,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":628,"author":{"gitId":"domoberzin"},"content":" return HibernateUtil.createQuery(cr).getResultStream().findFirst().orElse(null);"},{"lineNumber":629,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":630,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":631,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":632,"author":{"gitId":"domoberzin"},"content":" * Gets a team by its {@code section} and {@code teamName}."},{"lineNumber":633,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":634,"author":{"gitId":"domoberzin"},"content":" public Team getTeamOrCreate(Section section, String teamName) {"},{"lineNumber":635,"author":{"gitId":"domoberzin"},"content":" assert teamName !\u003d null;"},{"lineNumber":636,"author":{"gitId":"domoberzin"},"content":" assert section !\u003d null;"},{"lineNumber":637,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":638,"author":{"gitId":"domoberzin"},"content":" Team team \u003d getTeam(section, teamName);"},{"lineNumber":639,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":640,"author":{"gitId":"domoberzin"},"content":" if (team \u003d\u003d null) {"},{"lineNumber":641,"author":{"gitId":"domoberzin"},"content":" team \u003d new Team(section, teamName);"},{"lineNumber":642,"author":{"gitId":"domoberzin"},"content":" persist(team);"},{"lineNumber":643,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":644,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":645,"author":{"gitId":"domoberzin"},"content":" return team;"},{"lineNumber":646,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":647,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":648,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":649,"author":{"gitId":"domoberzin"},"content":" * Updates a student."},{"lineNumber":650,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":651,"author":{"gitId":"domoberzin"},"content":" public Student updateStudent(Student student)"},{"lineNumber":652,"author":{"gitId":"domoberzin"},"content":" throws EntityDoesNotExistException, InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":653,"author":{"gitId":"marquestye"},"content":" checkBeforeUpdateStudent(student);"},{"lineNumber":654,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":655,"author":{"gitId":"marquestye"},"content":" return merge(student);"},{"lineNumber":656,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":657,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":658,"author":{"gitId":"marquestye"},"content":" /**"},{"lineNumber":659,"author":{"gitId":"marquestye"},"content":" * Performs checks on student without updating."},{"lineNumber":660,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":661,"author":{"gitId":"marquestye"},"content":" public void checkBeforeUpdateStudent(Student student)"},{"lineNumber":662,"author":{"gitId":"marquestye"},"content":" throws EntityDoesNotExistException, InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":663,"author":{"gitId":"domoberzin"},"content":" assert student !\u003d null;"},{"lineNumber":664,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":665,"author":{"gitId":"domoberzin"},"content":" if (!student.isValid()) {"},{"lineNumber":666,"author":{"gitId":"domoberzin"},"content":" throw new InvalidParametersException(student.getInvalidityInfo());"},{"lineNumber":667,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":668,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":669,"author":{"gitId":"domoberzin"},"content":" if (getStudent(student.getId()) \u003d\u003d null) {"},{"lineNumber":670,"author":{"gitId":"domoberzin"},"content":" throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT);"},{"lineNumber":671,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":672,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":673,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":674,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":93,"yuanxi1":30,"marquestye":10,"-":541}},{"path":"src/main/java/teammates/storage/sqlentity/FeedbackQuestion.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Objects;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.UpdateTimestamp;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackConstantSumQuestion;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackContributionQuestion;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackMcqQuestion;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackMsqQuestion;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackNumericalScaleQuestion;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackRankOptionsQuestion;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackRankRecipientsQuestion;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackRubricQuestion;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.questions.FeedbackTextQuestion;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"import jakarta.persistence.CascadeType;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import jakarta.persistence.Convert;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import jakarta.persistence.EnumType;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import jakarta.persistence.Enumerated;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import jakarta.persistence.Id;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import jakarta.persistence.Inheritance;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import jakarta.persistence.InheritanceType;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import jakarta.persistence.JoinColumn;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import jakarta.persistence.ManyToOne;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import jakarta.persistence.OneToMany;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import jakarta.persistence.Table;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Represents a feedback question."},{"lineNumber":40,"author":{"gitId":"-"},"content":" */"},{"lineNumber":41,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":42,"author":{"gitId":"-"},"content":"@Table(name \u003d \"FeedbackQuestions\")"},{"lineNumber":43,"author":{"gitId":"-"},"content":"@Inheritance(strategy \u003d InheritanceType.SINGLE_TABLE)"},{"lineNumber":44,"author":{"gitId":"-"},"content":"public abstract class FeedbackQuestion extends BaseEntity implements Comparable\u003cFeedbackQuestion\u003e {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @Id"},{"lineNumber":46,"author":{"gitId":"-"},"content":" private UUID id;"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":49,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"sessionId\")"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private FeedbackSession feedbackSession;"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" @OneToMany(mappedBy \u003d \"feedbackQuestion\", cascade \u003d CascadeType.REMOVE)"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponse\u003e feedbackResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" private Integer questionNumber;"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Column(nullable \u003d true)"},{"lineNumber":59,"author":{"gitId":"-"},"content":" private String description;"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Enumerated(EnumType.STRING)"},{"lineNumber":63,"author":{"gitId":"-"},"content":" private FeedbackParticipantType giverType;"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":66,"author":{"gitId":"-"},"content":" @Enumerated(EnumType.STRING)"},{"lineNumber":67,"author":{"gitId":"-"},"content":" private FeedbackParticipantType recipientType;"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":70,"author":{"gitId":"-"},"content":" private Integer numOfEntitiesToGiveFeedbackTo;"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":73,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":74,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showResponsesTo;"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":77,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":78,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showGiverNameTo;"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":81,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showRecipientNameTo;"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" @UpdateTimestamp"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Column"},{"lineNumber":86,"author":{"gitId":"-"},"content":" private Instant updatedAt;"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":" protected FeedbackQuestion() {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" public FeedbackQuestion("},{"lineNumber":93,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, Integer questionNumber,"},{"lineNumber":94,"author":{"gitId":"-"},"content":" String description, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Integer numOfEntitiesToGiveFeedbackTo, List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":96,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo, List\u003cFeedbackParticipantType\u003e showRecipientNameTo"},{"lineNumber":97,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" this.setId(UUID.randomUUID());"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.setFeedbackSession(feedbackSession);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" this.setQuestionNumber(questionNumber);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" this.setDescription(description);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" this.setGiverType(giverType);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" this.setRecipientType(recipientType);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" this.setNumOfEntitiesToGiveFeedbackTo(numOfEntitiesToGiveFeedbackTo);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" this.setShowResponsesTo(showResponsesTo);"},{"lineNumber":106,"author":{"gitId":"-"},"content":" this.setShowGiverNameTo(showGiverNameTo);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" this.setShowRecipientNameTo(showRecipientNameTo);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Gets a copy of the question details of the feedback question."},{"lineNumber":112,"author":{"gitId":"-"},"content":" */"},{"lineNumber":113,"author":{"gitId":"-"},"content":" public abstract FeedbackQuestionDetails getQuestionDetailsCopy();"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Make a copy of the FeedbackQuestion."},{"lineNumber":117,"author":{"gitId":"-"},"content":" */"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public abstract FeedbackQuestion makeDeepCopy(FeedbackSession newFeedbackSession);"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * Creates a feedback question according to its {@code FeedbackQuestionType}."},{"lineNumber":122,"author":{"gitId":"-"},"content":" */"},{"lineNumber":123,"author":{"gitId":"-"},"content":" public static FeedbackQuestion makeQuestion("},{"lineNumber":124,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, Integer questionNumber,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" String description, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" Integer numOfEntitiesToGiveFeedbackTo, List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo, List\u003cFeedbackParticipantType\u003e showRecipientNameTo,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails feedbackQuestionDetails"},{"lineNumber":129,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion \u003d null;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" switch (feedbackQuestionDetails.getQuestionType()) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" case TEXT:"},{"lineNumber":133,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackTextQuestion("},{"lineNumber":134,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":135,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":136,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":137,"author":{"gitId":"-"},"content":" );"},{"lineNumber":138,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":139,"author":{"gitId":"-"},"content":" case MCQ:"},{"lineNumber":140,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackMcqQuestion("},{"lineNumber":141,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":142,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":143,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":144,"author":{"gitId":"-"},"content":" );"},{"lineNumber":145,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" case MSQ:"},{"lineNumber":147,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackMsqQuestion("},{"lineNumber":148,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":149,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":150,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":151,"author":{"gitId":"-"},"content":" );"},{"lineNumber":152,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" case NUMSCALE:"},{"lineNumber":154,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackNumericalScaleQuestion("},{"lineNumber":155,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":156,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":157,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":158,"author":{"gitId":"-"},"content":" );"},{"lineNumber":159,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" case CONSTSUM:"},{"lineNumber":161,"author":{"gitId":"-"},"content":" case CONSTSUM_OPTIONS:"},{"lineNumber":162,"author":{"gitId":"-"},"content":" case CONSTSUM_RECIPIENTS:"},{"lineNumber":163,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackConstantSumQuestion("},{"lineNumber":164,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":165,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":166,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":167,"author":{"gitId":"-"},"content":" );"},{"lineNumber":168,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":169,"author":{"gitId":"-"},"content":" case CONTRIB:"},{"lineNumber":170,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackContributionQuestion("},{"lineNumber":171,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":172,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":173,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":174,"author":{"gitId":"-"},"content":" );"},{"lineNumber":175,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" case RUBRIC:"},{"lineNumber":177,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackRubricQuestion("},{"lineNumber":178,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":179,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":180,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":181,"author":{"gitId":"-"},"content":" );"},{"lineNumber":182,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":183,"author":{"gitId":"-"},"content":" case RANK_OPTIONS:"},{"lineNumber":184,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackRankOptionsQuestion("},{"lineNumber":185,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":186,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":187,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":188,"author":{"gitId":"-"},"content":" );"},{"lineNumber":189,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" case RANK_RECIPIENTS:"},{"lineNumber":191,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d new FeedbackRankRecipientsQuestion("},{"lineNumber":192,"author":{"gitId":"-"},"content":" feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":193,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo,"},{"lineNumber":194,"author":{"gitId":"-"},"content":" feedbackQuestionDetails"},{"lineNumber":195,"author":{"gitId":"-"},"content":" );"},{"lineNumber":196,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":" return feedbackQuestion;"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":202,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" List\u003cString\u003e errors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" errors.addAll(FieldValidator.getValidityInfoForFeedbackParticipantType(giverType, recipientType));"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" errors.addAll(FieldValidator.getValidityInfoForFeedbackResponseVisibility(showResponsesTo,"},{"lineNumber":208,"author":{"gitId":"-"},"content":" showGiverNameTo,"},{"lineNumber":209,"author":{"gitId":"-"},"content":" showRecipientNameTo));"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" return errors;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * Checks if updating this question to the question will"},{"lineNumber":216,"author":{"gitId":"-"},"content":" * require the responses to be deleted for consistency."},{"lineNumber":217,"author":{"gitId":"-"},"content":" * Does not check if any responses exist."},{"lineNumber":218,"author":{"gitId":"-"},"content":" */"},{"lineNumber":219,"author":{"gitId":"-"},"content":" public boolean areResponseDeletionsRequiredForChanges(FeedbackParticipantType giverType,"},{"lineNumber":220,"author":{"gitId":"-"},"content":" FeedbackParticipantType recipientType,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" if (!giverType.equals(this.giverType)"},{"lineNumber":223,"author":{"gitId":"-"},"content":" || !recipientType.equals(this.recipientType)) {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" return this.getQuestionDetailsCopy().shouldChangesRequireResponseDeletion(questionDetails);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" }"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" public UUID getId() {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" return id;"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" public void setId(UUID id) {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" this.id \u003d id;"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" public FeedbackSession getFeedbackSession() {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" return feedbackSession;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"xenosf"},"content":" public String getFeedbackSessionName() {"},{"lineNumber":243,"author":{"gitId":"xenosf"},"content":" return feedbackSession.getName();"},{"lineNumber":244,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":245,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" public void setFeedbackSession(FeedbackSession feedbackSession) {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" this.feedbackSession \u003d feedbackSession;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponse\u003e getFeedbackResponses() {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" return feedbackResponses;"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" public void setFeedbackResponses(List\u003cFeedbackResponse\u003e feedbackResponses) {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" this.feedbackResponses \u003d feedbackResponses;"},{"lineNumber":256,"author":{"gitId":"-"},"content":" }"},{"lineNumber":257,"author":{"gitId":"-"},"content":""},{"lineNumber":258,"author":{"gitId":"-"},"content":" public Integer getQuestionNumber() {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" return questionNumber;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" public void setQuestionNumber(Integer questionNumber) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" this.questionNumber \u003d questionNumber;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":" public String getDescription() {"},{"lineNumber":267,"author":{"gitId":"-"},"content":" return description;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":" public void setDescription(String description) {"},{"lineNumber":271,"author":{"gitId":"-"},"content":" this.description \u003d description;"},{"lineNumber":272,"author":{"gitId":"-"},"content":" }"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":275,"author":{"gitId":"-"},"content":" * Set the question details of the question."},{"lineNumber":276,"author":{"gitId":"-"},"content":" */"},{"lineNumber":277,"author":{"gitId":"-"},"content":" public abstract void setQuestionDetails(FeedbackQuestionDetails questionDetails);"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" public FeedbackParticipantType getGiverType() {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" return giverType;"},{"lineNumber":281,"author":{"gitId":"-"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":" public void setGiverType(FeedbackParticipantType giverType) {"},{"lineNumber":284,"author":{"gitId":"-"},"content":" this.giverType \u003d giverType;"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":" public FeedbackParticipantType getRecipientType() {"},{"lineNumber":288,"author":{"gitId":"-"},"content":" return recipientType;"},{"lineNumber":289,"author":{"gitId":"-"},"content":" }"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":" public void setRecipientType(FeedbackParticipantType recipientType) {"},{"lineNumber":292,"author":{"gitId":"-"},"content":" this.recipientType \u003d recipientType;"},{"lineNumber":293,"author":{"gitId":"-"},"content":" }"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":" public Integer getNumOfEntitiesToGiveFeedbackTo() {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" return numOfEntitiesToGiveFeedbackTo;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" public void setNumOfEntitiesToGiveFeedbackTo(Integer numOfEntitiesToGiveFeedbackTo) {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" this.numOfEntitiesToGiveFeedbackTo \u003d numOfEntitiesToGiveFeedbackTo;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowResponsesTo() {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" return showResponsesTo;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" }"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" public void setShowResponsesTo(List\u003cFeedbackParticipantType\u003e showResponsesTo) {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" this.showResponsesTo \u003d showResponsesTo;"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowGiverNameTo() {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" return showGiverNameTo;"},{"lineNumber":313,"author":{"gitId":"-"},"content":" }"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":" public void setShowGiverNameTo(List\u003cFeedbackParticipantType\u003e showGiverNameTo) {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" this.showGiverNameTo \u003d showGiverNameTo;"},{"lineNumber":317,"author":{"gitId":"-"},"content":" }"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowRecipientNameTo() {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" return showRecipientNameTo;"},{"lineNumber":321,"author":{"gitId":"-"},"content":" }"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":" public void setShowRecipientNameTo(List\u003cFeedbackParticipantType\u003e showRecipientNameTo) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" this.showRecipientNameTo \u003d showRecipientNameTo;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":" public Instant getUpdatedAt() {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" return updatedAt;"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":""},{"lineNumber":331,"author":{"gitId":"-"},"content":" public void setUpdatedAt(Instant updatedAt) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" this.updatedAt \u003d updatedAt;"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" public Course getCourse() {"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" return this.feedbackSession.getCourse();"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":" public String getCourseId() {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" return this.feedbackSession.getCourse().getId();"},{"lineNumber":341,"author":{"gitId":"-"},"content":" }"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":344,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":345,"author":{"gitId":"-"},"content":" return \"Question [id\u003d\" + id + \", questionNumber\u003d\" + questionNumber + \", description\u003d\" + description"},{"lineNumber":346,"author":{"gitId":"-"},"content":" + \", giverType\u003d\" + giverType + \", recipientType\u003d\" + recipientType"},{"lineNumber":347,"author":{"gitId":"-"},"content":" + \", numOfEntitiesToGiveFeedbackTo\u003d\" + numOfEntitiesToGiveFeedbackTo + \", showResponsesTo\u003d\""},{"lineNumber":348,"author":{"gitId":"-"},"content":" + showResponsesTo + \", showGiverNameTo\u003d\" + showGiverNameTo + \", showRecipientNameTo\u003d\""},{"lineNumber":349,"author":{"gitId":"-"},"content":" + showRecipientNameTo + \", isClosingEmailEnabled\u003d\" + \", createdAt\u003d\" + getCreatedAt() + \", updatedAt\u003d\""},{"lineNumber":350,"author":{"gitId":"-"},"content":" + updatedAt + \"]\";"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":354,"author":{"gitId":"-"},"content":" public int compareTo(FeedbackQuestion o) {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" if (o \u003d\u003d null) {"},{"lineNumber":356,"author":{"gitId":"-"},"content":" return 1;"},{"lineNumber":357,"author":{"gitId":"-"},"content":" }"},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":" if (!this.questionNumber.equals(o.questionNumber)) {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" return Integer.compare(this.questionNumber, o.questionNumber);"},{"lineNumber":361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":362,"author":{"gitId":"-"},"content":" // Although question numbers ought to be unique in a feedback session,"},{"lineNumber":363,"author":{"gitId":"-"},"content":" // eventual consistency can result in duplicate questions numbers."},{"lineNumber":364,"author":{"gitId":"-"},"content":" // Therefore, to ensure that the question order is always consistent to the user,"},{"lineNumber":365,"author":{"gitId":"-"},"content":" // compare feedbackQuestionId, which is guaranteed to be unique,"},{"lineNumber":366,"author":{"gitId":"-"},"content":" // when the questionNumbers are the same."},{"lineNumber":367,"author":{"gitId":"-"},"content":" return this.id.compareTo(o.id);"},{"lineNumber":368,"author":{"gitId":"-"},"content":" }"},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":371,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" // FeedbackQuestion ID uniquely identifies a FeedbackQuestion."},{"lineNumber":373,"author":{"gitId":"-"},"content":" return this.getId().hashCode();"},{"lineNumber":374,"author":{"gitId":"-"},"content":" }"},{"lineNumber":375,"author":{"gitId":"-"},"content":""},{"lineNumber":376,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":377,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" if (other \u003d\u003d null) {"},{"lineNumber":379,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":380,"author":{"gitId":"-"},"content":" } else if (this \u003d\u003d other) {"},{"lineNumber":381,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":382,"author":{"gitId":"-"},"content":" } else if (this.getClass() \u003d\u003d other.getClass()) {"},{"lineNumber":383,"author":{"gitId":"-"},"content":" FeedbackQuestion otherQuestion \u003d (FeedbackQuestion) other;"},{"lineNumber":384,"author":{"gitId":"-"},"content":" return Objects.equals(this.getId(), otherQuestion.getId());"},{"lineNumber":385,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":386,"author":{"gitId":"-"},"content":" return false;"},{"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":" * Returns true if the response is visible to the given participant type."},{"lineNumber":392,"author":{"gitId":"-"},"content":" */"},{"lineNumber":393,"author":{"gitId":"-"},"content":" public boolean isResponseVisibleTo(FeedbackParticipantType userType) {"},{"lineNumber":394,"author":{"gitId":"-"},"content":" return showResponsesTo.contains(userType);"},{"lineNumber":395,"author":{"gitId":"-"},"content":" }"},{"lineNumber":396,"author":{"gitId":"-"},"content":"}"},{"lineNumber":397,"author":{"gitId":"-"},"content":""}],"authorContributionMap":{"xenosf":8,"-":389}},{"path":"src/main/java/teammates/storage/sqlentity/FeedbackResponse.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Objects;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.UpdateTimestamp;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackConstantSumResponse;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackContributionResponse;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackMcqResponse;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackMsqResponse;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackNumericalScaleResponse;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackRankOptionsResponse;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackRankRecipientsResponse;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackRubricResponse;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.responses.FeedbackTextResponse;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.CascadeType;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import jakarta.persistence.Id;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import jakarta.persistence.Inheritance;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import jakarta.persistence.InheritanceType;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import jakarta.persistence.JoinColumn;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import jakarta.persistence.ManyToOne;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import jakarta.persistence.OneToMany;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import jakarta.persistence.Table;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Represents a Feedback Response."},{"lineNumber":35,"author":{"gitId":"-"},"content":" */"},{"lineNumber":36,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":37,"author":{"gitId":"-"},"content":"@Table(name \u003d \"FeedbackResponses\")"},{"lineNumber":38,"author":{"gitId":"-"},"content":"@Inheritance(strategy \u003d InheritanceType.SINGLE_TABLE)"},{"lineNumber":39,"author":{"gitId":"-"},"content":"public abstract class FeedbackResponse extends BaseEntity {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Id"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private UUID id;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":44,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"questionId\")"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private FeedbackQuestion feedbackQuestion;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" @OneToMany(mappedBy \u003d \"feedbackResponse\", cascade \u003d CascadeType.REMOVE)"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private List\u003cFeedbackResponseComment\u003e feedbackResponseComments \u003d new ArrayList\u003c\u003e();"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private String giver;"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":54,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"giverSectionId\")"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private Section giverSection;"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":58,"author":{"gitId":"-"},"content":" private String recipient;"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"recipientSectionId\")"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private Section recipientSection;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @UpdateTimestamp"},{"lineNumber":65,"author":{"gitId":"-"},"content":" private Instant updatedAt;"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" protected FeedbackResponse() {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" public FeedbackResponse("},{"lineNumber":72,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion, String giver,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" Section giverSection, String recipient, Section recipientSection"},{"lineNumber":74,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" this.setId(UUID.randomUUID());"},{"lineNumber":76,"author":{"gitId":"-"},"content":" this.setFeedbackQuestion(feedbackQuestion);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" this.setGiver(giver);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" this.setGiverSection(giverSection);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.setRecipient(recipient);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" this.setRecipientSection(recipientSection);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Creates a feedback response according to its {@code FeedbackQuestionType}."},{"lineNumber":85,"author":{"gitId":"-"},"content":" */"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public static FeedbackResponse makeResponse("},{"lineNumber":87,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion, String giver,"},{"lineNumber":88,"author":{"gitId":"-"},"content":" Section giverSection, String receiver, Section receiverSection,"},{"lineNumber":89,"author":{"gitId":"-"},"content":" FeedbackResponseDetails responseDetails"},{"lineNumber":90,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackResponse feedbackResponse \u003d null;"},{"lineNumber":92,"author":{"gitId":"-"},"content":" switch (responseDetails.getQuestionType()) {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" case TEXT:"},{"lineNumber":94,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackTextResponse("},{"lineNumber":95,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":96,"author":{"gitId":"-"},"content":" );"},{"lineNumber":97,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" case MCQ:"},{"lineNumber":99,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackMcqResponse("},{"lineNumber":100,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":101,"author":{"gitId":"-"},"content":" );"},{"lineNumber":102,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":103,"author":{"gitId":"-"},"content":" case MSQ:"},{"lineNumber":104,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackMsqResponse("},{"lineNumber":105,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":106,"author":{"gitId":"-"},"content":" );"},{"lineNumber":107,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" case NUMSCALE:"},{"lineNumber":109,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackNumericalScaleResponse("},{"lineNumber":110,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":111,"author":{"gitId":"-"},"content":" );"},{"lineNumber":112,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" case CONSTSUM:"},{"lineNumber":114,"author":{"gitId":"-"},"content":" case CONSTSUM_OPTIONS:"},{"lineNumber":115,"author":{"gitId":"-"},"content":" case CONSTSUM_RECIPIENTS:"},{"lineNumber":116,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackConstantSumResponse("},{"lineNumber":117,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":118,"author":{"gitId":"-"},"content":" );"},{"lineNumber":119,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" case CONTRIB:"},{"lineNumber":121,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackContributionResponse("},{"lineNumber":122,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":123,"author":{"gitId":"-"},"content":" );"},{"lineNumber":124,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":125,"author":{"gitId":"-"},"content":" case RUBRIC:"},{"lineNumber":126,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackRubricResponse("},{"lineNumber":127,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":128,"author":{"gitId":"-"},"content":" );"},{"lineNumber":129,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" case RANK_OPTIONS:"},{"lineNumber":131,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackRankOptionsResponse("},{"lineNumber":132,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":133,"author":{"gitId":"-"},"content":" );"},{"lineNumber":134,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":135,"author":{"gitId":"-"},"content":" case RANK_RECIPIENTS:"},{"lineNumber":136,"author":{"gitId":"-"},"content":" feedbackResponse \u003d new FeedbackRankRecipientsResponse("},{"lineNumber":137,"author":{"gitId":"-"},"content":" feedbackQuestion, giver, giverSection, receiver, receiverSection, responseDetails"},{"lineNumber":138,"author":{"gitId":"-"},"content":" );"},{"lineNumber":139,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":" return feedbackResponse;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * Update a feedback response according to its {@code FeedbackQuestionType}."},{"lineNumber":146,"author":{"gitId":"-"},"content":" */"},{"lineNumber":147,"author":{"gitId":"-"},"content":" public static FeedbackResponse updateResponse("},{"lineNumber":148,"author":{"gitId":"-"},"content":" FeedbackResponse originalFeedbackResponse,"},{"lineNumber":149,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion, String giver,"},{"lineNumber":150,"author":{"gitId":"-"},"content":" Section giverSection, String receiver, Section receiverSection,"},{"lineNumber":151,"author":{"gitId":"-"},"content":" FeedbackResponseDetails responseDetails"},{"lineNumber":152,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" FeedbackResponse updatedFeedbackResponse \u003d FeedbackResponse.makeResponse("},{"lineNumber":154,"author":{"gitId":"-"},"content":" feedbackQuestion,"},{"lineNumber":155,"author":{"gitId":"-"},"content":" giver,"},{"lineNumber":156,"author":{"gitId":"-"},"content":" giverSection,"},{"lineNumber":157,"author":{"gitId":"-"},"content":" receiver,"},{"lineNumber":158,"author":{"gitId":"-"},"content":" receiverSection,"},{"lineNumber":159,"author":{"gitId":"-"},"content":" responseDetails"},{"lineNumber":160,"author":{"gitId":"-"},"content":" );"},{"lineNumber":161,"author":{"gitId":"-"},"content":" updatedFeedbackResponse.setCreatedAt(originalFeedbackResponse.getCreatedAt());"},{"lineNumber":162,"author":{"gitId":"-"},"content":" updatedFeedbackResponse.setId(originalFeedbackResponse.getId());"},{"lineNumber":163,"author":{"gitId":"-"},"content":" return updatedFeedbackResponse;"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":167,"author":{"gitId":"-"},"content":" * Gets a copy of the question details of the feedback question."},{"lineNumber":168,"author":{"gitId":"-"},"content":" */"},{"lineNumber":169,"author":{"gitId":"-"},"content":" public abstract FeedbackResponseDetails getFeedbackResponseDetailsCopy();"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" public UUID getId() {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" return id;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" public void setId(UUID id) {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" this.id \u003d id;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":" public FeedbackQuestion getFeedbackQuestion() {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" return feedbackQuestion;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" public void setFeedbackQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" this.feedbackQuestion \u003d feedbackQuestion;"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" public List\u003cFeedbackResponseComment\u003e getFeedbackResponseComments() {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" return feedbackResponseComments;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" public void setFeedbackResponseComments(List\u003cFeedbackResponseComment\u003e feedbackResponseComments) {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" this.feedbackResponseComments \u003d feedbackResponseComments;"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" public String getGiver() {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" return giver;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" public void setGiver(String giver) {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" this.giver \u003d giver;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" public Section getGiverSection() {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" return giverSection;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" public String getGiverSectionName() {"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" return giverSection.getName();"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" public void setGiverSection(Section giverSection) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" this.giverSection \u003d giverSection;"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":" public String getRecipient() {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" return recipient;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" public void setRecipient(String recipient) {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" this.recipient \u003d recipient;"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" public Section getRecipientSection() {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return recipientSection;"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" public String getRecipientSectionName() {"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" return recipientSection.getName();"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" public void setRecipientSection(Section recipientSection) {"},{"lineNumber":232,"author":{"gitId":"-"},"content":" this.recipientSection \u003d recipientSection;"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }"},{"lineNumber":234,"author":{"gitId":"-"},"content":""},{"lineNumber":235,"author":{"gitId":"-"},"content":" public Instant getUpdatedAt() {"},{"lineNumber":236,"author":{"gitId":"-"},"content":" return updatedAt;"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" public void setUpdatedAt(Instant updatedAt) {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" this.updatedAt \u003d updatedAt;"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":244,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":246,"author":{"gitId":"-"},"content":" }"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":249,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return \"FeedbackResponse [id\u003d\" + id + \", giver\u003d\" + giver + \", recipient\u003d\" + recipient"},{"lineNumber":251,"author":{"gitId":"-"},"content":" + \", createdAt\u003d\" + getCreatedAt() + \", updatedAt\u003d\" + updatedAt + \"]\";"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":255,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":256,"author":{"gitId":"-"},"content":" return this.getId().hashCode();"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":260,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {"},{"lineNumber":261,"author":{"gitId":"-"},"content":" if (other \u003d\u003d null) {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":263,"author":{"gitId":"-"},"content":" } else if (this \u003d\u003d other) {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" } else if (this.getClass() \u003d\u003d other.getClass()) {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" FeedbackResponse otherResponse \u003d (FeedbackResponse) other;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" return Objects.equals(this.getId(), otherResponse.getId());"},{"lineNumber":268,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }"},{"lineNumber":272,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":8,"-":264}},{"path":"src/main/java/teammates/storage/sqlentity/FeedbackResponseComment.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Objects;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.OnDelete;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.OnDeleteAction;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.hibernate.annotations.UpdateTimestamp;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import jakarta.persistence.Convert;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import jakarta.persistence.GeneratedValue;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import jakarta.persistence.Id;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import jakarta.persistence.JoinColumn;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import jakarta.persistence.ManyToOne;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import jakarta.persistence.Table;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Represents a feedback response comment."},{"lineNumber":27,"author":{"gitId":"-"},"content":" */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":29,"author":{"gitId":"-"},"content":"@Table(name \u003d \"FeedbackResponseComments\")"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public class FeedbackResponseComment extends BaseEntity {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Id"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @GeneratedValue"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private Long id;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @OnDelete(action \u003d OnDeleteAction.CASCADE)"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"responseId\")"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private FeedbackResponse feedbackResponse;"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private String giver;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":44,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeConverter.class)"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private FeedbackParticipantType giverType;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":48,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"giverSectionId\")"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private Section giverSection;"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" @ManyToOne"},{"lineNumber":52,"author":{"gitId":"-"},"content":" @JoinColumn(name \u003d \"recipientSectionId\")"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private Section recipientSection;"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" private String commentText;"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":59,"author":{"gitId":"-"},"content":" private boolean isVisibilityFollowingFeedbackQuestion;"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private boolean isCommentFromFeedbackParticipant;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":65,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":66,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showCommentTo;"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackParticipantTypeListConverter.class)"},{"lineNumber":70,"author":{"gitId":"-"},"content":" private List\u003cFeedbackParticipantType\u003e showGiverNameTo;"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" @UpdateTimestamp"},{"lineNumber":73,"author":{"gitId":"-"},"content":" private Instant updatedAt;"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":76,"author":{"gitId":"-"},"content":" private String lastEditorEmail;"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" protected FeedbackResponseComment() {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" public FeedbackResponseComment("},{"lineNumber":83,"author":{"gitId":"-"},"content":" FeedbackResponse feedbackResponse, String giver, FeedbackParticipantType giverType,"},{"lineNumber":84,"author":{"gitId":"-"},"content":" Section giverSection, Section recipientSection, String commentText,"},{"lineNumber":85,"author":{"gitId":"-"},"content":" boolean isVisibilityFollowingFeedbackQuestion, boolean isCommentFromFeedbackParticipant,"},{"lineNumber":86,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showCommentTo, List\u003cFeedbackParticipantType\u003e showGiverNameTo,"},{"lineNumber":87,"author":{"gitId":"-"},"content":" String lastEditorEmail"},{"lineNumber":88,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" this.setFeedbackResponse(feedbackResponse);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" this.setGiver(giver);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" this.setGiverType(giverType);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" this.setGiverSection(giverSection);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.setRecipientSection(recipientSection);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" this.setCommentText(commentText);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" this.setIsVisibilityFollowingFeedbackQuestion(isVisibilityFollowingFeedbackQuestion);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.setIsCommentFromFeedbackParticipant(isCommentFromFeedbackParticipant);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" this.setShowCommentTo(showCommentTo);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" this.setShowGiverNameTo(showGiverNameTo);"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.setLastEditorEmail(lastEditorEmail);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" public Long getId() {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return id;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void setId(Long id) {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" this.id \u003d id;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" public FeedbackResponse getFeedbackResponse() {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" return feedbackResponse;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" public void setFeedbackResponse(FeedbackResponse feedbackResponse) {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" this.feedbackResponse \u003d feedbackResponse;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" public String getGiver() {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" return giver;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" public void setGiver(String giver) {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" this.giver \u003d giver;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" public FeedbackParticipantType getGiverType() {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" return giverType;"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" public void setGiverType(FeedbackParticipantType giverType) {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" this.giverType \u003d giverType;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" public Section getGiverSection() {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return giverSection;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" public void setGiverSection(Section giverSection) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" this.giverSection \u003d giverSection;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" public Section getRecipientSection() {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return recipientSection;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" public void setRecipientSection(Section recipientSection) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" this.recipientSection \u003d recipientSection;"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" public String getCommentText() {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" return commentText;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"-"},"content":" public void setCommentText(String commentText) {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" this.commentText \u003d commentText;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" public boolean getIsVisibilityFollowingFeedbackQuestion() {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" return this.isVisibilityFollowingFeedbackQuestion;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" public void setIsVisibilityFollowingFeedbackQuestion(boolean isVisibilityFollowingFeedbackQuestion) {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" this.isVisibilityFollowingFeedbackQuestion \u003d isVisibilityFollowingFeedbackQuestion;"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" public boolean getIsCommentFromFeedbackParticipant() {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return this.isCommentFromFeedbackParticipant;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" public void setIsCommentFromFeedbackParticipant(boolean isCommentFromFeedbackParticipant) {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" this.isCommentFromFeedbackParticipant \u003d isCommentFromFeedbackParticipant;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowCommentTo() {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return showCommentTo;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" public void setShowCommentTo(List\u003cFeedbackParticipantType\u003e showCommentTo) {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" this.showCommentTo \u003d showCommentTo;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" public List\u003cFeedbackParticipantType\u003e getShowGiverNameTo() {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" return showGiverNameTo;"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" public void setShowGiverNameTo(List\u003cFeedbackParticipantType\u003e showGiverNameTo) {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" this.showGiverNameTo \u003d showGiverNameTo;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":" public Instant getUpdatedAt() {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" return updatedAt;"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" public void setUpdatedAt(Instant updatedAt) {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" this.updatedAt \u003d updatedAt;"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":" public String getLastEditorEmail() {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return lastEditorEmail;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" public void setLastEditorEmail(String lastEditorEmail) {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" this.lastEditorEmail \u003d lastEditorEmail;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * Formats the entity before persisting in database."},{"lineNumber":208,"author":{"gitId":"-"},"content":" * TODO: Override when BaseEntity adds abstract sanitizeForSaving"},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public void sanitizeForSaving() {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" this.commentText \u003d SanitizationHelper.sanitizeForRichText(this.commentText);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" * Returns true if the response comment is visible to the given participant type."},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" public boolean checkIsVisibleTo(FeedbackParticipantType viewerType) {"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" return showCommentTo.contains(viewerType);"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":222,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" List\u003cString\u003e errors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForCommentGiverType(giverType), errors);"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForVisibilityOfFeedbackParticipantComments("},{"lineNumber":228,"author":{"gitId":"-"},"content":" isCommentFromFeedbackParticipant, isVisibilityFollowingFeedbackQuestion), errors);"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" return errors;"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":234,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" return \"FeedbackResponse [id\u003d\" + id + \", giver\u003d\" + giver + \", commentText\u003d\" + commentText"},{"lineNumber":236,"author":{"gitId":"-"},"content":" + \", isVisibilityFollowingFeedbackQuestion\u003d\" + isVisibilityFollowingFeedbackQuestion"},{"lineNumber":237,"author":{"gitId":"-"},"content":" + \", isCommentFromFeedbackParticipant\u003d\" + isCommentFromFeedbackParticipant"},{"lineNumber":238,"author":{"gitId":"-"},"content":" + \", lastEditorEmail\u003d\" + lastEditorEmail + \", createdAt\u003d\" + getCreatedAt()"},{"lineNumber":239,"author":{"gitId":"-"},"content":" + \", updatedAt\u003d\" + updatedAt + \"]\";"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":243,"author":{"gitId":"-"},"content":" public int hashCode() {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" return this.getId().hashCode();"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":248,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {"},{"lineNumber":249,"author":{"gitId":"-"},"content":" if (other \u003d\u003d null) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":251,"author":{"gitId":"-"},"content":" } else if (this \u003d\u003d other) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" } else if (this.getClass() \u003d\u003d other.getClass()) {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" FeedbackResponseComment otherResponse \u003d (FeedbackResponseComment) other;"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return Objects.equals(this.getId(), otherResponse.getId());"},{"lineNumber":256,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":258,"author":{"gitId":"-"},"content":" }"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":7,"-":253}},{"path":"src/main/java/teammates/storage/sqlentity/Student.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.util.Config;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import jakarta.persistence.Table;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * Represents a Student."},{"lineNumber":17,"author":{"gitId":"-"},"content":" */"},{"lineNumber":18,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":19,"author":{"gitId":"-"},"content":"@Table(name \u003d \"Students\")"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class Student extends User {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false)"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private String comments;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" protected Student() {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" public Student(Course course, String name, String email, String comments) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" super(course, name, email);"},{"lineNumber":30,"author":{"gitId":"-"},"content":" this.setComments(comments);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"domoberzin"},"content":" public Student(Course course, String name, String email, String comments, Team team) {"},{"lineNumber":34,"author":{"gitId":"domoberzin"},"content":" super(course, name, email);"},{"lineNumber":35,"author":{"gitId":"domoberzin"},"content":" this.setComments(comments);"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" this.setTeam(team);"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":40,"author":{"gitId":"domoberzin"},"content":" * Gets the comments of the student."},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public String getComments() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return comments;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" /**"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" * Sets the comments of the student."},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" */"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public void setComments(String comments) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" this.comments \u003d SanitizationHelper.sanitizeTextField(comments);"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public String getTeamName() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return getTeam().getName();"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public String getSectionName() {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return this.getTeam().getSection().getName();"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public Section getSection() {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return this.getTeam().getSection();"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return \"Student [id\u003d\" + super.getId() + \", comments\u003d\" + comments"},{"lineNumber":71,"author":{"gitId":"-"},"content":" + \", createdAt\u003d\" + super.getCreatedAt() + \", updatedAt\u003d\" + super.getUpdatedAt() + \"]\";"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public List\u003cString\u003e getInvalidityInfo() {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" assert comments !\u003d null;"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" List\u003cString\u003e errors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForEmail(super.getEmail()), errors);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForStudentRoleComments(comments), errors);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" addNonEmptyError(FieldValidator.getInvalidityInfoForPersonName(super.getName()), errors);"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" return errors;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" public String getRegistrationUrl() {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" return Config.getFrontEndAppUrl(Const.WebPageURIs.JOIN_PAGE)"},{"lineNumber":89,"author":{"gitId":"-"},"content":" .withRegistrationKey(getRegKey())"},{"lineNumber":90,"author":{"gitId":"-"},"content":" .withEntityType(Const.EntityType.STUDENT)"},{"lineNumber":91,"author":{"gitId":"-"},"content":" .toString();"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":12,"-":81}},{"path":"src/main/java/teammates/storage/sqlentity/questions/FeedbackMsqQuestion.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity.questions;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackMsqQuestionDetails;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import jakarta.persistence.Convert;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import jakarta.persistence.Converter;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Represents an msq question."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class FeedbackMsqQuestion extends FeedbackQuestion {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false, columnDefinition \u003d \"TEXT\")"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackMsqQuestionDetailsConverter.class)"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private FeedbackMsqQuestionDetails questionDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" protected FeedbackMsqQuestion() {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" public FeedbackMsqQuestion("},{"lineNumber":32,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, Integer questionNumber,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" String description, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Integer numOfEntitiesToGiveFeedbackTo, List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo, List\u003cFeedbackParticipantType\u003e showRecipientNameTo,"},{"lineNumber":36,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails feedbackQuestionDetails"},{"lineNumber":37,"author":{"gitId":"-"},"content":" ) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" super(feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" setFeedBackQuestionDetails((FeedbackMsqQuestionDetails) feedbackQuestionDetails);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public FeedbackQuestionDetails getQuestionDetailsCopy() {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return questionDetails.getDeepCopy();"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public FeedbackMsqQuestion makeDeepCopy(FeedbackSession newFeedbackSession) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return new FeedbackMsqQuestion("},{"lineNumber":51,"author":{"gitId":"-"},"content":" newFeedbackSession, this.getQuestionNumber(), this.getDescription(), this.getGiverType(),"},{"lineNumber":52,"author":{"gitId":"-"},"content":" this.getRecipientType(), this.getNumOfEntitiesToGiveFeedbackTo(), new ArrayList\u003c\u003e(this.getShowResponsesTo()),"},{"lineNumber":53,"author":{"gitId":"-"},"content":" new ArrayList\u003c\u003e(this.getShowGiverNameTo()), new ArrayList\u003c\u003e(this.getShowRecipientNameTo()),"},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" this.questionDetails.getDeepCopy()"},{"lineNumber":55,"author":{"gitId":"-"},"content":" );"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public void setQuestionDetails(FeedbackQuestionDetails questionDetails) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" this.questionDetails \u003d (FeedbackMsqQuestionDetails) questionDetails;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return \"FeedbackMsqQuestion [id\u003d\" + super.getId()"},{"lineNumber":66,"author":{"gitId":"-"},"content":" + \", createdAt\u003d\" + super.getCreatedAt() + \", updatedAt\u003d\" + super.getUpdatedAt() + \"]\";"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void setFeedBackQuestionDetails(FeedbackMsqQuestionDetails questionDetails) {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" this.questionDetails \u003d questionDetails;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" public FeedbackMsqQuestionDetails getFeedbackQuestionDetails() {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" return questionDetails;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Converter for FeedbackMsqQuestion specific attributes."},{"lineNumber":79,"author":{"gitId":"-"},"content":" */"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Converter"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public static class FeedbackMsqQuestionDetailsConverter"},{"lineNumber":82,"author":{"gitId":"-"},"content":" extends FeedbackQuestionDetailsConverter {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":1,"-":83}},{"path":"src/main/java/teammates/storage/sqlentity/questions/FeedbackRankOptionsQuestion.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlentity.questions;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackRankOptionsQuestionDetails;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import jakarta.persistence.Column;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import jakarta.persistence.Convert;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import jakarta.persistence.Converter;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import jakarta.persistence.Entity;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Represents a rank options question."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"@Entity"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class FeedbackRankOptionsQuestion extends FeedbackQuestion {"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Column(nullable \u003d false, columnDefinition \u003d \"TEXT\")"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @Convert(converter \u003d FeedbackRankOptionsQuestionDetailsConverter.class)"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private FeedbackRankOptionsQuestionDetails questionDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" protected FeedbackRankOptionsQuestion() {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" // required by Hibernate"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" public FeedbackRankOptionsQuestion("},{"lineNumber":32,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession, Integer questionNumber,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" String description, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Integer numOfEntitiesToGiveFeedbackTo, List\u003cFeedbackParticipantType\u003e showResponsesTo,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e showGiverNameTo, List\u003cFeedbackParticipantType\u003e showRecipientNameTo,"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" FeedbackQuestionDetails feedbackQuestionDetails) {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" super(feedbackSession, questionNumber, description, giverType, recipientType,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" numOfEntitiesToGiveFeedbackTo, showResponsesTo, showGiverNameTo, showRecipientNameTo);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" setFeedBackQuestionDetails((FeedbackRankOptionsQuestionDetails) feedbackQuestionDetails);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public FeedbackQuestionDetails getQuestionDetailsCopy() {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return questionDetails.getDeepCopy();"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public FeedbackRankOptionsQuestion makeDeepCopy(FeedbackSession newFeedbackSession) {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" return new FeedbackRankOptionsQuestion("},{"lineNumber":50,"author":{"gitId":"-"},"content":" newFeedbackSession, this.getQuestionNumber(), this.getDescription(), this.getGiverType(),"},{"lineNumber":51,"author":{"gitId":"-"},"content":" this.getRecipientType(), this.getNumOfEntitiesToGiveFeedbackTo(),"},{"lineNumber":52,"author":{"gitId":"-"},"content":" new ArrayList\u003c\u003e(this.getShowResponsesTo()), new ArrayList\u003c\u003e(this.getShowGiverNameTo()),"},{"lineNumber":53,"author":{"gitId":"-"},"content":" new ArrayList\u003c\u003e(this.getShowRecipientNameTo()),"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" this.questionDetails.getDeepCopy());"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void setQuestionDetails(FeedbackQuestionDetails questionDetails) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" this.questionDetails \u003d (FeedbackRankOptionsQuestionDetails) questionDetails;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public String toString() {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return \"FeedbackRankOptionsQuestion [id\u003d\" + super.getId()"},{"lineNumber":65,"author":{"gitId":"-"},"content":" + \", createdAt\u003d\" + super.getCreatedAt() + \", updatedAt\u003d\" + super.getUpdatedAt() + \"]\";"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" public void setFeedBackQuestionDetails(FeedbackRankOptionsQuestionDetails questionDetails) {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" this.questionDetails \u003d questionDetails;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" public FeedbackRankOptionsQuestionDetails getFeedbackQuestionDetails() {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" return questionDetails;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * Converter for FeedbackRankOptionsQuestion specific attributes."},{"lineNumber":78,"author":{"gitId":"-"},"content":" */"},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Converter"},{"lineNumber":80,"author":{"gitId":"-"},"content":" public static class FeedbackRankOptionsQuestionDetailsConverter"},{"lineNumber":81,"author":{"gitId":"-"},"content":" extends FeedbackQuestionDetailsConverter {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"mingyuanc":2,"-":81}},{"path":"src/main/java/teammates/storage/sqlentity/responses/FeedbackMissingResponse.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.storage.sqlentity.responses;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.questions.FeedbackTextResponseDetails;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":" * Represents a missing response."},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"public class FeedbackMissingResponse extends FeedbackTextResponse {"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":" private String giverSectionName;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":" private String recipientSectionName;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":" protected FeedbackMissingResponse() {"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":" // required by Hibernate"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" public FeedbackMissingResponse("},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion feedbackQuestion, String giver,"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" String giverSectionName, String recipient, String recipientSectionName"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" ) {"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" super(feedbackQuestion, giver, null, recipient, null, new FeedbackTextResponseDetails(Const.MISSING_RESPONSE_TEXT));"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" this.giverSectionName \u003d giverSectionName;"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" this.recipientSectionName \u003d recipientSectionName;"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" public String getGiverSectionName() {"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" return giverSectionName;"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" public String getRecipientSectionName() {"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" return recipientSectionName;"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":37}},{"path":"src/main/java/teammates/storage/sqlsearch/SearchManager.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.storage.sqlsearch;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.net.SocketTimeoutException;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.apache.commons.lang.StringUtils;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.apache.solr.client.solrj.SolrQuery;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.apache.solr.client.solrj.SolrServerException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.apache.solr.client.solrj.impl.HttpSolrClient;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.apache.solr.client.solrj.response.QueryResponse;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import org.apache.solr.common.SolrDocument;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import org.apache.solr.common.SolrInputDocument;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.util.Config;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.BaseEntity;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Acts as a proxy to search service."},{"lineNumber":28,"author":{"gitId":"-"},"content":" *"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * @param \u003cT\u003e Type of entity to be returned"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */"},{"lineNumber":31,"author":{"gitId":"-"},"content":"abstract class SearchManager\u003cT extends BaseEntity\u003e {"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final String ERROR_DELETE_DOCUMENT \u003d \"Failed to delete document(s) %s in Solr. Root cause: %s \";"},{"lineNumber":36,"author":{"gitId":"-"},"content":" private static final String ERROR_SEARCH_DOCUMENT \u003d \"Failed to search for document(s) %s from Solr. Root cause: %s \";"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final String ERROR_SEARCH_NOT_IMPLEMENTED \u003d \"Search service is not implemented\";"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private static final String ERROR_PUT_DOCUMENT \u003d \"Failed to put document %s into Solr. Root cause: %s \";"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final String ERROR_RESET_COLLECTION \u003d \"Failed to reset collections. Root cause: %s \";"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" private static final int START_INDEX \u003d 0;"},{"lineNumber":42,"author":{"gitId":"-"},"content":" private static final int NUM_OF_RESULTS \u003d Const.SEARCH_QUERY_SIZE_LIMIT;"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" private final HttpSolrClient client;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private final boolean isResetAllowed;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" SearchManager(String searchServiceHost, boolean isResetAllowed) {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.isResetAllowed \u003d Config.IS_DEV_SERVER \u0026\u0026 isResetAllowed;"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(searchServiceHost)) {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" this.client \u003d null;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" this.client \u003d new HttpSolrClient.Builder(searchServiceHost)"},{"lineNumber":54,"author":{"gitId":"-"},"content":" .withConnectionTimeout(2000) // timeout for connecting to Solr server"},{"lineNumber":55,"author":{"gitId":"-"},"content":" .withSocketTimeout(5000) // timeout for reading data"},{"lineNumber":56,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" SolrQuery getBasicQuery(String queryString) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" SolrQuery query \u003d new SolrQuery();"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" String cleanQueryString \u003d cleanSpecialChars(queryString);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" query.setQuery(cleanQueryString);"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" query.setStart(START_INDEX);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" query.setRows(NUM_OF_RESULTS);"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" return query;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" QueryResponse performQuery(SolrQuery query) throws SearchServiceException {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" if (client \u003d\u003d null) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" throw new SearchServiceException(\"Full-text search is not available.\", HttpStatus.SC_NOT_IMPLEMENTED);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return client.query(getCollectionName(), query);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" } catch (SolrServerException e) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" Throwable rootCause \u003d e.getRootCause();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_SEARCH_DOCUMENT, query.getQuery(), rootCause), e);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (rootCause instanceof SocketTimeoutException) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new SearchServiceException(\"A timeout was reached while processing your request. \""},{"lineNumber":84,"author":{"gitId":"-"},"content":" + \"Please try again later.\", e, HttpStatus.SC_GATEWAY_TIMEOUT);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" throw new SearchServiceException(\"An error has occurred while performing search. \""},{"lineNumber":87,"author":{"gitId":"-"},"content":" + \"Please try again later.\", e, HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_SEARCH_DOCUMENT, query.getQuery(), e.getCause()), e);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" throw new SearchServiceException(\"An error has occurred while performing search. \""},{"lineNumber":92,"author":{"gitId":"-"},"content":" + \"Please try again later.\", e, HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" abstract String getCollectionName();"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" abstract SearchDocument\u003cT\u003e createDocument(T entity);"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * Creates or updates search document for the given entity."},{"lineNumber":102,"author":{"gitId":"-"},"content":" */"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public void putDocument(T entity) throws SearchServiceException {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (client \u003d\u003d null) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" log.warning(ERROR_SEARCH_NOT_IMPLEMENTED);"},{"lineNumber":106,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" if (entity \u003d\u003d null) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" Map\u003cString, Object\u003e searchableFields \u003d createDocument(entity).getSearchableFields();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" SolrInputDocument document \u003d new SolrInputDocument();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" searchableFields.forEach((key, value) -\u003e document.addField(key, value));"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" client.add(getCollectionName(), Collections.singleton(document));"},{"lineNumber":119,"author":{"gitId":"-"},"content":" client.commit(getCollectionName());"},{"lineNumber":120,"author":{"gitId":"-"},"content":" } catch (SolrServerException e) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_PUT_DOCUMENT, document, e.getRootCause()), e);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" throw new SearchServiceException(e, HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_PUT_DOCUMENT, document, e.getCause()), e);"},{"lineNumber":125,"author":{"gitId":"-"},"content":" throw new SearchServiceException(e, HttpStatus.SC_BAD_GATEWAY);"},{"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":" * Removes search documents based on the given keys."},{"lineNumber":131,"author":{"gitId":"-"},"content":" */"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public void deleteDocuments(List\u003cString\u003e keys) {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" if (client \u003d\u003d null) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" log.warning(ERROR_SEARCH_NOT_IMPLEMENTED);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (keys.isEmpty()) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" client.deleteById(getCollectionName(), keys);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" client.commit(getCollectionName());"},{"lineNumber":145,"author":{"gitId":"-"},"content":" } catch (SolrServerException e) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_DELETE_DOCUMENT, keys, e.getRootCause()), e);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_DELETE_DOCUMENT, keys, e.getCause()), e);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * Resets the data for all collections if, and only if called during component"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * tests."},{"lineNumber":155,"author":{"gitId":"-"},"content":" */"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void resetCollections() {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" if (client \u003d\u003d null || !isResetAllowed) {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" client.deleteByQuery(getCollectionName(), \"*:*\");"},{"lineNumber":163,"author":{"gitId":"-"},"content":" client.commit(getCollectionName());"},{"lineNumber":164,"author":{"gitId":"-"},"content":" } catch (SolrServerException e) {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_RESET_COLLECTION, e.getRootCause()), e);"},{"lineNumber":166,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" log.severe(String.format(ERROR_RESET_COLLECTION, e.getCause()), e);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" private String cleanSpecialChars(String queryString) {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" String htmlTagStripPattern \u003d \"\u003c[^\u003e]*\u003e\";"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":" // Solr special characters: + - \u0026\u0026 || ! ( ) { } [ ] ^ \" ~ * ? : \\ /"},{"lineNumber":175,"author":{"gitId":"-"},"content":" String res \u003d queryString.replaceAll(htmlTagStripPattern, \"\")"},{"lineNumber":176,"author":{"gitId":"-"},"content":" .replace(\"\\\\\", \"\\\\\\\\\")"},{"lineNumber":177,"author":{"gitId":"-"},"content":" .replace(\"+\", \"\\\\+\")"},{"lineNumber":178,"author":{"gitId":"-"},"content":" .replace(\"-\", \"\\\\-\")"},{"lineNumber":179,"author":{"gitId":"-"},"content":" .replace(\"\u0026\u0026\", \"\\\\\u0026\u0026\")"},{"lineNumber":180,"author":{"gitId":"-"},"content":" .replace(\"||\", \"\\\\||\")"},{"lineNumber":181,"author":{"gitId":"-"},"content":" .replace(\"!\", \"\\\\!\")"},{"lineNumber":182,"author":{"gitId":"-"},"content":" .replace(\"(\", \"\\\\(\")"},{"lineNumber":183,"author":{"gitId":"-"},"content":" .replace(\")\", \"\\\\)\")"},{"lineNumber":184,"author":{"gitId":"-"},"content":" .replace(\"{\", \"\\\\{\")"},{"lineNumber":185,"author":{"gitId":"-"},"content":" .replace(\"}\", \"\\\\}\")"},{"lineNumber":186,"author":{"gitId":"-"},"content":" .replace(\"[\", \"\\\\[\")"},{"lineNumber":187,"author":{"gitId":"-"},"content":" .replace(\"]\", \"\\\\]\")"},{"lineNumber":188,"author":{"gitId":"-"},"content":" .replace(\"^\", \"\\\\^\")"},{"lineNumber":189,"author":{"gitId":"-"},"content":" .replace(\"~\", \"\\\\~\")"},{"lineNumber":190,"author":{"gitId":"-"},"content":" .replace(\"?\", \"\\\\?\")"},{"lineNumber":191,"author":{"gitId":"-"},"content":" .replace(\":\", \"\\\\:\")"},{"lineNumber":192,"author":{"gitId":"-"},"content":" .replace(\"/\", \"\\\\/\");"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" // imbalanced double quotes are invalid"},{"lineNumber":195,"author":{"gitId":"-"},"content":" int count \u003d StringUtils.countMatches(res, \"\\\"\");"},{"lineNumber":196,"author":{"gitId":"-"},"content":" if (count % 2 \u003d\u003d 1) {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" res \u003d res.replace(\"\\\"\", \"\");"},{"lineNumber":198,"author":{"gitId":"-"},"content":" }"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" // use exact match only when there\u0027s email-like input"},{"lineNumber":201,"author":{"gitId":"-"},"content":" if (res.contains(\"@\") \u0026\u0026 count \u003d\u003d 0) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" return \"\\\"\" + res + \"\\\"\";"},{"lineNumber":203,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" return res;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" abstract T getEntityFromDocument(SolrDocument document);"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":" abstract void sortResult(List\u003cT\u003e result);"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" List\u003cT\u003e convertDocumentToEntities(List\u003cSolrDocument\u003e documents) {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" if (documents \u003d\u003d null) {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e();"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" List\u003cT\u003e result \u003d new ArrayList\u003c\u003e();"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" for (SolrDocument document : documents) {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" T entity \u003d getEntityFromDocument(document);"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" // Entity will be null if document corresponds to entity in datastore"},{"lineNumber":223,"author":{"gitId":"-"},"content":" if (entity \u003d\u003d null) {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" // search engine out of sync as SearchManager may fail to delete documents"},{"lineNumber":225,"author":{"gitId":"-"},"content":" // the chance is low and it is generally not a big problem"},{"lineNumber":226,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":227,"author":{"gitId":"domoberzin"},"content":" // these lines below are commented out as they interfere with the dual db search,"},{"lineNumber":228,"author":{"gitId":"domoberzin"},"content":" // and cause unwanted deletions, please refer to the following PR for more details"},{"lineNumber":229,"author":{"gitId":"domoberzin"},"content":" // [PR](https://github.com/TEAMMATES/teammates/pull/12838)"},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":" // String id \u003d (String) document.getFirstValue(\"id\");"},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":" // deleteDocuments(Collections.singletonList(id));"},{"lineNumber":233,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":235,"author":{"gitId":"-"},"content":" result.add(entity);"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":" sortResult(result);"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" return result;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":7,"-":235}},{"path":"src/main/java/teammates/ui/output/NotificationData.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.output;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"domoberzin"},"content":"import org.threeten.bp.Instant;"},{"lineNumber":4,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * The API output format of a notification."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class NotificationData extends ApiOutput {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" private String notificationId;"},{"lineNumber":16,"author":{"gitId":"-"},"content":" private long startTimestamp;"},{"lineNumber":17,"author":{"gitId":"-"},"content":" private long endTimestamp;"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private long createdAt;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private NotificationStyle style;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private NotificationTargetUser targetUser;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private String title;"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private String message;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private boolean shown;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" public NotificationData(NotificationAttributes notificationAttributes) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" this.notificationId \u003d notificationAttributes.getNotificationId();"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.startTimestamp \u003d notificationAttributes.getStartTime().toEpochMilli();"},{"lineNumber":28,"author":{"gitId":"-"},"content":" this.endTimestamp \u003d notificationAttributes.getEndTime().toEpochMilli();"},{"lineNumber":29,"author":{"gitId":"-"},"content":" this.createdAt \u003d notificationAttributes.getCreatedAt().toEpochMilli();"},{"lineNumber":30,"author":{"gitId":"-"},"content":" this.style \u003d notificationAttributes.getStyle();"},{"lineNumber":31,"author":{"gitId":"-"},"content":" this.targetUser \u003d notificationAttributes.getTargetUser();"},{"lineNumber":32,"author":{"gitId":"-"},"content":" this.title \u003d notificationAttributes.getTitle();"},{"lineNumber":33,"author":{"gitId":"-"},"content":" this.message \u003d notificationAttributes.getMessage();"},{"lineNumber":34,"author":{"gitId":"-"},"content":" this.shown \u003d notificationAttributes.isShown();"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" public NotificationData(Notification notification) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.notificationId \u003d notification.getId().toString();"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.startTimestamp \u003d notification.getStartTime().toEpochMilli();"},{"lineNumber":40,"author":{"gitId":"-"},"content":" this.endTimestamp \u003d notification.getEndTime().toEpochMilli();"},{"lineNumber":41,"author":{"gitId":"domoberzin"},"content":" this.createdAt \u003d notification.getCreatedAt() \u003d\u003d null"},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" ? Instant.now().toEpochMilli() : notification.getCreatedAt().toEpochMilli();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.style \u003d notification.getStyle();"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.targetUser \u003d notification.getTargetUser();"},{"lineNumber":45,"author":{"gitId":"-"},"content":" this.title \u003d notification.getTitle();"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.message \u003d notification.getMessage();"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.shown \u003d notification.isShown();"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" public String getNotificationId() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return this.notificationId;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" public long getStartTimestamp() {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return this.startTimestamp;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" public long getEndTimestamp() {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return this.endTimestamp;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" public long getCreatedAt() {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return this.createdAt;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" public NotificationStyle getStyle() {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return this.style;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" public NotificationTargetUser getTargetUser() {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" return this.targetUser;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" public String getTitle() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return this.title;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" public String getMessage() {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return this.message;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" public boolean isShown() {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return this.shown;"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":4,"-":81}},{"path":"src/main/java/teammates/ui/output/SessionResultsData.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.output;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.LinkedList;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Queue;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import java.util.Set;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import javax.annotation.Nullable;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.CourseRoster;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SessionResultsBundle;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * API output format for session results, including statistics."},{"lineNumber":37,"author":{"gitId":"-"},"content":" */"},{"lineNumber":38,"author":{"gitId":"-"},"content":"public class SessionResultsData extends ApiOutput {"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" private static final String REGEX_ANONYMOUS_PARTICIPANT_HASH \u003d \"[0-9]{1,10}\";"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" final List\u003cQuestionOutput\u003e questions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" SessionResultsData() {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // use factory method instead"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Factory method to construct API output for instructor."},{"lineNumber":50,"author":{"gitId":"-"},"content":" */"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static SessionResultsData initForInstructor(SessionResultsBundle bundle) {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" SessionResultsData sessionResultsData \u003d new SessionResultsData();"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cFeedbackResponseAttributes\u003e\u003e questionsWithResponses \u003d"},{"lineNumber":55,"author":{"gitId":"-"},"content":" bundle.getQuestionResponseMap();"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" questionsWithResponses.forEach((questionId, responses) -\u003e {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(questionId);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":60,"author":{"gitId":"-"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" questionDetails.getQuestionResultStatisticsJson(question, null, bundle), false, false);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" // put normal responses"},{"lineNumber":63,"author":{"gitId":"-"},"content":" List\u003cResponseOutput\u003e allResponses \u003d buildResponsesForInstructor(responses, bundle, false);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" qnOutput.allResponses.addAll(allResponses);"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" // put missing responses"},{"lineNumber":67,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseAttributes\u003e missingResponses \u003d bundle.getQuestionMissingResponseMap().get(questionId);"},{"lineNumber":68,"author":{"gitId":"-"},"content":" qnOutput.allResponses.addAll(buildResponsesForInstructor(missingResponses, bundle, true));"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" });"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" return sessionResultsData;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" * Factory method to construct API output for instructor."},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" public static SessionResultsData initForInstructor(SqlSessionResultsBundle bundle) {"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" SessionResultsData sessionResultsData \u003d new SessionResultsData();"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionsWithResponses \u003d"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" bundle.getQuestionResponseMap();"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" questionsWithResponses.forEach((question, responses) -\u003e {"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question,"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" questionDetails.getQuestionResultStatisticsJson(question, null, bundle), false, false);"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" // put normal responses"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" List\u003cResponseOutput\u003e allResponses \u003d buildResponsesForInstructor(responses, bundle, false);"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" qnOutput.allResponses.addAll(allResponses);"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" // put missing responses"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses \u003d bundle.getQuestionMissingResponseMap().get(question);"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" qnOutput.allResponses.addAll(buildResponsesForInstructor(missingResponses, bundle, true));"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" return sessionResultsData;"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":104,"author":{"gitId":"-"},"content":" * Factory method to construct API output for student."},{"lineNumber":105,"author":{"gitId":"-"},"content":" */"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public static SessionResultsData initForStudent(SessionResultsBundle bundle, StudentAttributes student) {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" SessionResultsData sessionResultsData \u003d new SessionResultsData();"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cFeedbackResponseAttributes\u003e\u003e questionsWithResponses \u003d"},{"lineNumber":110,"author":{"gitId":"-"},"content":" bundle.getQuestionResponseMap();"},{"lineNumber":111,"author":{"gitId":"-"},"content":" questionsWithResponses.forEach((questionId, responses) -\u003e {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(questionId);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" // check if question has comments (on any responses) not visible for preview"},{"lineNumber":115,"author":{"gitId":"-"},"content":" boolean hasCommentNotVisibleForPreview \u003d bundle.getQuestionsWithCommentNotVisibleForPreview()"},{"lineNumber":116,"author":{"gitId":"-"},"content":" .contains(questionId);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question,"},{"lineNumber":118,"author":{"gitId":"-"},"content":" questionDetails.getQuestionResultStatisticsJson(question, student.getEmail(), bundle),"},{"lineNumber":119,"author":{"gitId":"-"},"content":" false, hasCommentNotVisibleForPreview);"},{"lineNumber":120,"author":{"gitId":"-"},"content":" Map\u003cString, List\u003cResponseOutput\u003e\u003e otherResponsesMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" qnOutput.getFeedbackQuestion().hideInformationForStudent();"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" if (questionDetails.isIndividualResponsesShownToStudents()) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" for (FeedbackResponseAttributes response : responses) {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" boolean isUserInstructor \u003d Const.USER_TEAM_FOR_INSTRUCTOR.equals(student.getTeam());"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" boolean isUserGiver \u003d student.getEmail().equals(response.getGiver())"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":130,"author":{"gitId":"-"},"content":" || !isUserInstructor \u0026\u0026 question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" boolean isUserRecipient \u003d student.getEmail().equals(response.getRecipient())"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":133,"author":{"gitId":"-"},"content":" || !isUserInstructor \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ResponseOutput responseOutput \u003d buildSingleResponseForStudent(response, bundle, student);"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" if (isUserRecipient) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" qnOutput.responsesToSelf.add(responseOutput);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (isUserGiver) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" qnOutput.responsesFromSelf.add(responseOutput);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" if (!isUserRecipient \u0026\u0026 !isUserGiver) {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" // we don\u0027t need care about the keys of the map here"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // as only the values of the map will be used"},{"lineNumber":147,"author":{"gitId":"-"},"content":" otherResponsesMap.computeIfAbsent(response.getRecipient(), k -\u003e new ArrayList\u003c\u003e())"},{"lineNumber":148,"author":{"gitId":"-"},"content":" .add(responseOutput);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" qnOutput.allResponses.add(responseOutput);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":" qnOutput.otherResponses.addAll(otherResponsesMap.values());"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" });"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" Map\u003cString, FeedbackQuestionAttributes\u003e questionsWithResponsesNotVisibleForPreview \u003d"},{"lineNumber":160,"author":{"gitId":"-"},"content":" bundle.getQuestionsNotVisibleForPreviewMap();"},{"lineNumber":161,"author":{"gitId":"-"},"content":" questionsWithResponsesNotVisibleForPreview.forEach((questionId, question) -\u003e {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question, \"\", true, false);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" });"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" return sessionResultsData;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" * Factory method to construct API output for student."},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" public static SessionResultsData initForStudent(SqlSessionResultsBundle bundle, Student student) {"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":" SessionResultsData sessionResultsData \u003d new SessionResultsData();"},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackQuestion, List\u003cFeedbackResponse\u003e\u003e questionsWithResponses \u003d"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" bundle.getQuestionResponseMap();"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" questionsWithResponses.forEach((question, responses) -\u003e {"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" FeedbackQuestionDetails questionDetails \u003d question.getQuestionDetailsCopy();"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":" // check if question has comments (on any responses) not visible for preview"},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" boolean hasCommentNotVisibleForPreview \u003d bundle.getQuestionsWithCommentNotVisibleForPreviewSet()"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" .contains(question);"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question,"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" questionDetails.getQuestionResultStatisticsJson(question, student.getEmail(), bundle),"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" false, hasCommentNotVisibleForPreview);"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" Map\u003cString, List\u003cResponseOutput\u003e\u003e otherResponsesMap \u003d new HashMap\u003c\u003e();"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" qnOutput.getFeedbackQuestion().hideInformationForStudent();"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" if (questionDetails.isIndividualResponsesShownToStudents()) {"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" boolean isUserInstructor \u003d Const.USER_TEAM_FOR_INSTRUCTOR.equals(student.getTeamName());"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" boolean isUserGiver \u003d student.getEmail().equals(response.getGiver())"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" || !isUserInstructor \u0026\u0026 question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" boolean isUserRecipient \u003d student.getEmail().equals(response.getRecipient())"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" || !isUserInstructor \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" ResponseOutput responseOutput \u003d buildSingleResponseForStudent(response, bundle, student);"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" if (isUserRecipient) {"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" qnOutput.responsesToSelf.add(responseOutput);"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":" if (isUserGiver) {"},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" qnOutput.responsesFromSelf.add(responseOutput);"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" if (!isUserRecipient \u0026\u0026 !isUserGiver) {"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" // we don\u0027t need care about the keys of the map here"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" // as only the values of the map will be used"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" otherResponsesMap.computeIfAbsent(response.getRecipient(), k -\u003e new ArrayList\u003c\u003e())"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":" .add(responseOutput);"},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" qnOutput.allResponses.add(responseOutput);"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" qnOutput.otherResponses.addAll(otherResponsesMap.values());"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":224,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":225,"author":{"gitId":"xenosf"},"content":" Set\u003cFeedbackQuestion\u003e questionsWithResponsesNotVisibleForPreview \u003d"},{"lineNumber":226,"author":{"gitId":"xenosf"},"content":" bundle.getQuestionsNotVisibleForPreviewSet();"},{"lineNumber":227,"author":{"gitId":"xenosf"},"content":" questionsWithResponsesNotVisibleForPreview.forEach(question -\u003e {"},{"lineNumber":228,"author":{"gitId":"xenosf"},"content":" QuestionOutput qnOutput \u003d new QuestionOutput(question, \"\", true, false);"},{"lineNumber":229,"author":{"gitId":"xenosf"},"content":" sessionResultsData.questions.add(qnOutput);"},{"lineNumber":230,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":231,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":232,"author":{"gitId":"xenosf"},"content":" return sessionResultsData;"},{"lineNumber":233,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":234,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":235,"author":{"gitId":"-"},"content":" private static ResponseOutput buildSingleResponseForStudent("},{"lineNumber":236,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes response, SessionResultsBundle bundle, StudentAttributes student) {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(response.getFeedbackQuestionId());"},{"lineNumber":238,"author":{"gitId":"-"},"content":" boolean isUserInstructor \u003d Const.USER_TEAM_FOR_INSTRUCTOR.equals(student.getTeam());"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" // process giver"},{"lineNumber":241,"author":{"gitId":"-"},"content":" boolean isUserGiver \u003d student.getEmail().equals(response.getGiver())"},{"lineNumber":242,"author":{"gitId":"-"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":243,"author":{"gitId":"-"},"content":" || !isUserInstructor \u0026\u0026 question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":244,"author":{"gitId":"-"},"content":" boolean isUserTeamGiver \u003d question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":245,"author":{"gitId":"-"},"content":" \u0026\u0026 student.getTeam().equals(response.getGiver());"},{"lineNumber":246,"author":{"gitId":"-"},"content":" String giverName;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" String giverTeam \u003d \"\";"},{"lineNumber":248,"author":{"gitId":"-"},"content":" if (isUserTeamGiver) {"},{"lineNumber":249,"author":{"gitId":"-"},"content":" giverName \u003d String.format(\"Your Team (%s)\", response.getGiver());"},{"lineNumber":250,"author":{"gitId":"-"},"content":" giverTeam \u003d response.getGiver();"},{"lineNumber":251,"author":{"gitId":"-"},"content":" } else if (isUserGiver) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" giverName \u003d \"You\";"},{"lineNumber":253,"author":{"gitId":"-"},"content":" giverTeam \u003d student.getTeam();"},{"lineNumber":254,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":255,"author":{"gitId":"-"},"content":" // we don\u0027t want student to figure out who is who by using the hash"},{"lineNumber":256,"author":{"gitId":"-"},"content":" giverName \u003d removeAnonymousHash(getGiverNameOfResponse(response, bundle));"},{"lineNumber":257,"author":{"gitId":"-"},"content":" }"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" // process recipient"},{"lineNumber":260,"author":{"gitId":"-"},"content":" boolean isUserRecipient \u003d student.getEmail().equals(response.getRecipient())"},{"lineNumber":261,"author":{"gitId":"-"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":262,"author":{"gitId":"-"},"content":" || !isUserInstructor \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":263,"author":{"gitId":"-"},"content":" boolean isUserTeamRecipient \u003d (question.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":264,"author":{"gitId":"-"},"content":" || question.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION)"},{"lineNumber":265,"author":{"gitId":"-"},"content":" \u0026\u0026 student.getTeam().equals(response.getRecipient());"},{"lineNumber":266,"author":{"gitId":"-"},"content":" String recipientName;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" String recipientTeam \u003d \"\";"},{"lineNumber":268,"author":{"gitId":"-"},"content":" if (isUserRecipient) {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" recipientName \u003d \"You\";"},{"lineNumber":270,"author":{"gitId":"-"},"content":" recipientTeam \u003d student.getTeam();"},{"lineNumber":271,"author":{"gitId":"-"},"content":" } else if (isUserTeamRecipient) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" recipientName \u003d String.format(\"Your Team (%s)\", response.getRecipient());"},{"lineNumber":273,"author":{"gitId":"-"},"content":" recipientTeam \u003d response.getRecipient();"},{"lineNumber":274,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":275,"author":{"gitId":"-"},"content":" // we don\u0027t want student to figure out who is who by using the hash"},{"lineNumber":276,"author":{"gitId":"-"},"content":" recipientName \u003d removeAnonymousHash(getRecipientNameOfResponse(response, bundle));"},{"lineNumber":277,"author":{"gitId":"-"},"content":" if (!recipientName.contains(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT)) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" recipientTeam \u003d bundle.getRoster().getInfoForIdentifier(response.getRecipient()).getTeamName();"},{"lineNumber":279,"author":{"gitId":"-"},"content":" }"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" // process comments"},{"lineNumber":283,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseCommentAttributes\u003e feedbackResponseComments \u003d"},{"lineNumber":284,"author":{"gitId":"-"},"content":" bundle.getResponseCommentsMap().getOrDefault(response.getId(), Collections.emptyList());"},{"lineNumber":285,"author":{"gitId":"-"},"content":" Queue\u003cCommentOutput\u003e comments \u003d buildComments(feedbackResponseComments, bundle);"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":" return ResponseOutput.builder()"},{"lineNumber":288,"author":{"gitId":"-"},"content":" .withResponseId(response.getId())"},{"lineNumber":289,"author":{"gitId":"-"},"content":" .withGiver(giverName)"},{"lineNumber":290,"author":{"gitId":"-"},"content":" .withGiverTeam(giverTeam)"},{"lineNumber":291,"author":{"gitId":"-"},"content":" .withGiverEmail(null)"},{"lineNumber":292,"author":{"gitId":"-"},"content":" .withRelatedGiverEmail(null)"},{"lineNumber":293,"author":{"gitId":"xenosf"},"content":" .withGiverSectionName(response.getGiverSection())"},{"lineNumber":294,"author":{"gitId":"xenosf"},"content":" .withRecipient(recipientName)"},{"lineNumber":295,"author":{"gitId":"xenosf"},"content":" .withRecipientTeam(recipientTeam)"},{"lineNumber":296,"author":{"gitId":"xenosf"},"content":" .withRecipientEmail(null)"},{"lineNumber":297,"author":{"gitId":"xenosf"},"content":" .withRecipientSectionName(response.getRecipientSection())"},{"lineNumber":298,"author":{"gitId":"xenosf"},"content":" .withResponseDetails(response.getResponseDetailsCopy())"},{"lineNumber":299,"author":{"gitId":"xenosf"},"content":" .withParticipantComment(comments.poll())"},{"lineNumber":300,"author":{"gitId":"xenosf"},"content":" .withInstructorComments(new ArrayList\u003c\u003e(comments))"},{"lineNumber":301,"author":{"gitId":"xenosf"},"content":" .build();"},{"lineNumber":302,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":303,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":304,"author":{"gitId":"xenosf"},"content":" private static ResponseOutput buildSingleResponseForStudent("},{"lineNumber":305,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response, SqlSessionResultsBundle bundle, Student student) {"},{"lineNumber":306,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":307,"author":{"gitId":"xenosf"},"content":" boolean isUserInstructor \u003d Const.USER_TEAM_FOR_INSTRUCTOR.equals(student.getTeamName());"},{"lineNumber":308,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":309,"author":{"gitId":"xenosf"},"content":" // process giver"},{"lineNumber":310,"author":{"gitId":"xenosf"},"content":" boolean isUserGiver \u003d student.getEmail().equals(response.getGiver())"},{"lineNumber":311,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":312,"author":{"gitId":"xenosf"},"content":" || !isUserInstructor \u0026\u0026 question.getGiverType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":313,"author":{"gitId":"xenosf"},"content":" boolean isUserTeamGiver \u003d question.getGiverType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":314,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 student.getTeamName().equals(response.getGiver());"},{"lineNumber":315,"author":{"gitId":"xenosf"},"content":" String giverName;"},{"lineNumber":316,"author":{"gitId":"xenosf"},"content":" String giverTeam \u003d \"\";"},{"lineNumber":317,"author":{"gitId":"xenosf"},"content":" if (isUserTeamGiver) {"},{"lineNumber":318,"author":{"gitId":"xenosf"},"content":" giverName \u003d String.format(\"Your Team (%s)\", response.getGiver());"},{"lineNumber":319,"author":{"gitId":"xenosf"},"content":" giverTeam \u003d response.getGiver();"},{"lineNumber":320,"author":{"gitId":"xenosf"},"content":" } else if (isUserGiver) {"},{"lineNumber":321,"author":{"gitId":"xenosf"},"content":" giverName \u003d \"You\";"},{"lineNumber":322,"author":{"gitId":"xenosf"},"content":" giverTeam \u003d student.getTeamName();"},{"lineNumber":323,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":324,"author":{"gitId":"xenosf"},"content":" // we don\u0027t want student to figure out who is who by using the hash"},{"lineNumber":325,"author":{"gitId":"xenosf"},"content":" giverName \u003d removeAnonymousHash(getGiverNameOfResponse(response, bundle));"},{"lineNumber":326,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":327,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":328,"author":{"gitId":"xenosf"},"content":" // process recipient"},{"lineNumber":329,"author":{"gitId":"xenosf"},"content":" boolean isUserRecipient \u003d student.getEmail().equals(response.getRecipient())"},{"lineNumber":330,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 (isUserInstructor \u0026\u0026 question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS"},{"lineNumber":331,"author":{"gitId":"xenosf"},"content":" || !isUserInstructor \u0026\u0026 question.getRecipientType() !\u003d FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":332,"author":{"gitId":"xenosf"},"content":" boolean isUserTeamRecipient \u003d (question.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS"},{"lineNumber":333,"author":{"gitId":"xenosf"},"content":" || question.getRecipientType() \u003d\u003d FeedbackParticipantType.TEAMS_IN_SAME_SECTION)"},{"lineNumber":334,"author":{"gitId":"xenosf"},"content":" \u0026\u0026 student.getTeamName().equals(response.getRecipient());"},{"lineNumber":335,"author":{"gitId":"xenosf"},"content":" String recipientName;"},{"lineNumber":336,"author":{"gitId":"xenosf"},"content":" String recipientTeam \u003d \"\";"},{"lineNumber":337,"author":{"gitId":"xenosf"},"content":" if (isUserRecipient) {"},{"lineNumber":338,"author":{"gitId":"xenosf"},"content":" recipientName \u003d \"You\";"},{"lineNumber":339,"author":{"gitId":"xenosf"},"content":" recipientTeam \u003d student.getTeamName();"},{"lineNumber":340,"author":{"gitId":"xenosf"},"content":" } else if (isUserTeamRecipient) {"},{"lineNumber":341,"author":{"gitId":"xenosf"},"content":" recipientName \u003d String.format(\"Your Team (%s)\", response.getRecipient());"},{"lineNumber":342,"author":{"gitId":"xenosf"},"content":" recipientTeam \u003d response.getRecipient();"},{"lineNumber":343,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":344,"author":{"gitId":"xenosf"},"content":" // we don\u0027t want student to figure out who is who by using the hash"},{"lineNumber":345,"author":{"gitId":"xenosf"},"content":" recipientName \u003d removeAnonymousHash(getRecipientNameOfResponse(response, bundle));"},{"lineNumber":346,"author":{"gitId":"xenosf"},"content":" if (!recipientName.contains(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT)) {"},{"lineNumber":347,"author":{"gitId":"xenosf"},"content":" recipientTeam \u003d bundle.getRoster().getInfoForIdentifier(response.getRecipient()).getTeamName();"},{"lineNumber":348,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":349,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":350,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":351,"author":{"gitId":"xenosf"},"content":" // process comments"},{"lineNumber":352,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e feedbackResponseComments \u003d"},{"lineNumber":353,"author":{"gitId":"xenosf"},"content":" bundle.getResponseCommentsMap().getOrDefault(response, Collections.emptyList());"},{"lineNumber":354,"author":{"gitId":"xenosf"},"content":" Queue\u003cCommentOutput\u003e comments \u003d buildComments(feedbackResponseComments, bundle);"},{"lineNumber":355,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":356,"author":{"gitId":"xenosf"},"content":" return ResponseOutput.builder()"},{"lineNumber":357,"author":{"gitId":"xenosf"},"content":" .withResponse(response)"},{"lineNumber":358,"author":{"gitId":"xenosf"},"content":" .withGiver(giverName)"},{"lineNumber":359,"author":{"gitId":"xenosf"},"content":" .withGiverTeam(giverTeam)"},{"lineNumber":360,"author":{"gitId":"xenosf"},"content":" .withGiverEmail(null)"},{"lineNumber":361,"author":{"gitId":"xenosf"},"content":" .withRelatedGiverEmail(null)"},{"lineNumber":362,"author":{"gitId":"-"},"content":" .withGiverSection(response.getGiverSection())"},{"lineNumber":363,"author":{"gitId":"-"},"content":" .withRecipient(recipientName)"},{"lineNumber":364,"author":{"gitId":"-"},"content":" .withRecipientTeam(recipientTeam)"},{"lineNumber":365,"author":{"gitId":"-"},"content":" .withRecipientEmail(null)"},{"lineNumber":366,"author":{"gitId":"-"},"content":" .withRecipientSection(response.getRecipientSection())"},{"lineNumber":367,"author":{"gitId":"xenosf"},"content":" .withResponseDetails(response.getFeedbackResponseDetailsCopy())"},{"lineNumber":368,"author":{"gitId":"-"},"content":" .withParticipantComment(comments.poll())"},{"lineNumber":369,"author":{"gitId":"-"},"content":" .withInstructorComments(new ArrayList\u003c\u003e(comments))"},{"lineNumber":370,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":371,"author":{"gitId":"-"},"content":" }"},{"lineNumber":372,"author":{"gitId":"-"},"content":""},{"lineNumber":373,"author":{"gitId":"-"},"content":" private static String removeAnonymousHash(String identifier) {"},{"lineNumber":374,"author":{"gitId":"-"},"content":" return identifier.replaceAll(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT + \" (student|instructor|team) \""},{"lineNumber":375,"author":{"gitId":"-"},"content":" + REGEX_ANONYMOUS_PARTICIPANT_HASH, Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT + \" $1\");"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"-"},"content":" private static List\u003cResponseOutput\u003e buildResponsesForInstructor("},{"lineNumber":379,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseAttributes\u003e responses, SessionResultsBundle bundle, boolean areMissingResponses) {"},{"lineNumber":380,"author":{"gitId":"-"},"content":" List\u003cResponseOutput\u003e output \u003d new ArrayList\u003c\u003e();"},{"lineNumber":381,"author":{"gitId":"-"},"content":""},{"lineNumber":382,"author":{"gitId":"-"},"content":" for (FeedbackResponseAttributes response : responses) {"},{"lineNumber":383,"author":{"gitId":"-"},"content":" output.add(buildSingleResponseForInstructor(response, bundle, areMissingResponses));"},{"lineNumber":384,"author":{"gitId":"-"},"content":" }"},{"lineNumber":385,"author":{"gitId":"-"},"content":""},{"lineNumber":386,"author":{"gitId":"-"},"content":" return output;"},{"lineNumber":387,"author":{"gitId":"-"},"content":" }"},{"lineNumber":388,"author":{"gitId":"-"},"content":""},{"lineNumber":389,"author":{"gitId":"xenosf"},"content":" private static List\u003cResponseOutput\u003e buildResponsesForInstructor("},{"lineNumber":390,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e responses, SqlSessionResultsBundle bundle, boolean areMissingResponses) {"},{"lineNumber":391,"author":{"gitId":"xenosf"},"content":" List\u003cResponseOutput\u003e output \u003d new ArrayList\u003c\u003e();"},{"lineNumber":392,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":393,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponse response : responses) {"},{"lineNumber":394,"author":{"gitId":"xenosf"},"content":" output.add(buildSingleResponseForInstructor(response, bundle, areMissingResponses));"},{"lineNumber":395,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":396,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":397,"author":{"gitId":"xenosf"},"content":" return output;"},{"lineNumber":398,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":399,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" private static ResponseOutput buildSingleResponseForInstructor("},{"lineNumber":401,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes response, SessionResultsBundle bundle, boolean isMissingResponse) {"},{"lineNumber":402,"author":{"gitId":"-"},"content":" // process giver"},{"lineNumber":403,"author":{"gitId":"-"},"content":" String giverEmail \u003d null;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" String relatedGiverEmail \u003d null;"},{"lineNumber":405,"author":{"gitId":"-"},"content":" if (bundle.isResponseGiverVisible(response)) {"},{"lineNumber":406,"author":{"gitId":"-"},"content":" giverEmail \u003d response.getGiver();"},{"lineNumber":407,"author":{"gitId":"-"},"content":" relatedGiverEmail \u003d response.getGiver();"},{"lineNumber":408,"author":{"gitId":"-"},"content":""},{"lineNumber":409,"author":{"gitId":"-"},"content":" if (bundle.getRoster().isTeamInCourse(giverEmail)) {"},{"lineNumber":410,"author":{"gitId":"-"},"content":" // remove recipient email as it is a team name"},{"lineNumber":411,"author":{"gitId":"-"},"content":" relatedGiverEmail \u003d"},{"lineNumber":412,"author":{"gitId":"-"},"content":" bundle.getRoster().getTeamToMembersTable().get(giverEmail).iterator().next().getEmail();"},{"lineNumber":413,"author":{"gitId":"-"},"content":" giverEmail \u003d null;"},{"lineNumber":414,"author":{"gitId":"-"},"content":" }"},{"lineNumber":415,"author":{"gitId":"-"},"content":" }"},{"lineNumber":416,"author":{"gitId":"-"},"content":" String giverName \u003d getGiverNameOfResponse(response, bundle);"},{"lineNumber":417,"author":{"gitId":"-"},"content":" String giverTeam \u003d bundle.getRoster().getInfoForIdentifier(response.getGiver()).getTeamName();"},{"lineNumber":418,"author":{"gitId":"-"},"content":" String giverSection \u003d response.getGiverSection();"},{"lineNumber":419,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(response.getFeedbackQuestionId());"},{"lineNumber":420,"author":{"gitId":"-"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":421,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d bundle.getRoster().getInstructorForEmail(response.getGiver());"},{"lineNumber":422,"author":{"gitId":"-"},"content":" giverName \u003d instructor.getName();"},{"lineNumber":423,"author":{"gitId":"-"},"content":" giverTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":424,"author":{"gitId":"-"},"content":" giverSection \u003d Const.DEFAULT_SECTION;"},{"lineNumber":425,"author":{"gitId":"-"},"content":" }"},{"lineNumber":426,"author":{"gitId":"-"},"content":""},{"lineNumber":427,"author":{"gitId":"-"},"content":" // process recipient"},{"lineNumber":428,"author":{"gitId":"-"},"content":" String recipientEmail \u003d null;"},{"lineNumber":429,"author":{"gitId":"-"},"content":" String recipientName \u003d getRecipientNameOfResponse(response, bundle);"},{"lineNumber":430,"author":{"gitId":"-"},"content":" String recipientTeam \u003d"},{"lineNumber":431,"author":{"gitId":"-"},"content":" bundle.getRoster().getInfoForIdentifier(response.getRecipient()).getTeamName();"},{"lineNumber":432,"author":{"gitId":"-"},"content":" String recipientSection \u003d response.getRecipientSection();"},{"lineNumber":433,"author":{"gitId":"-"},"content":" if (question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":434,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d bundle.getRoster().getInstructorForEmail(response.getRecipient());"},{"lineNumber":435,"author":{"gitId":"-"},"content":" recipientName \u003d instructor.getName();"},{"lineNumber":436,"author":{"gitId":"-"},"content":" recipientTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":437,"author":{"gitId":"-"},"content":" recipientSection \u003d Const.DEFAULT_SECTION;"},{"lineNumber":438,"author":{"gitId":"-"},"content":" }"},{"lineNumber":439,"author":{"gitId":"-"},"content":" if (bundle.isResponseRecipientVisible(response)) {"},{"lineNumber":440,"author":{"gitId":"-"},"content":" recipientEmail \u003d response.getRecipient();"},{"lineNumber":441,"author":{"gitId":"-"},"content":""},{"lineNumber":442,"author":{"gitId":"-"},"content":" if (bundle.getRoster().isTeamInCourse(recipientEmail)) {"},{"lineNumber":443,"author":{"gitId":"-"},"content":" // remove recipient email as it is a team name"},{"lineNumber":444,"author":{"gitId":"-"},"content":" recipientEmail \u003d null;"},{"lineNumber":445,"author":{"gitId":"-"},"content":" } else if (Const.GENERAL_QUESTION.equals(recipientEmail)) {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" // general recipient does not have email"},{"lineNumber":447,"author":{"gitId":"-"},"content":" recipientEmail \u003d null;"},{"lineNumber":448,"author":{"gitId":"-"},"content":" }"},{"lineNumber":449,"author":{"gitId":"-"},"content":" }"},{"lineNumber":450,"author":{"gitId":"-"},"content":""},{"lineNumber":451,"author":{"gitId":"-"},"content":" // process comments"},{"lineNumber":452,"author":{"gitId":"-"},"content":" List\u003cFeedbackResponseCommentAttributes\u003e feedbackResponseComments \u003d"},{"lineNumber":453,"author":{"gitId":"-"},"content":" bundle.getResponseCommentsMap().getOrDefault(response.getId(), Collections.emptyList());"},{"lineNumber":454,"author":{"gitId":"-"},"content":" Queue\u003cCommentOutput\u003e comments \u003d buildComments(feedbackResponseComments, bundle);"},{"lineNumber":455,"author":{"gitId":"-"},"content":""},{"lineNumber":456,"author":{"gitId":"-"},"content":" return ResponseOutput.builder()"},{"lineNumber":457,"author":{"gitId":"-"},"content":" .withIsMissingResponse(isMissingResponse)"},{"lineNumber":458,"author":{"gitId":"-"},"content":" .withResponseId(response.getId())"},{"lineNumber":459,"author":{"gitId":"-"},"content":" .withGiver(giverName)"},{"lineNumber":460,"author":{"gitId":"-"},"content":" .withGiverTeam(giverTeam)"},{"lineNumber":461,"author":{"gitId":"-"},"content":" .withGiverEmail(giverEmail)"},{"lineNumber":462,"author":{"gitId":"-"},"content":" .withRelatedGiverEmail(relatedGiverEmail)"},{"lineNumber":463,"author":{"gitId":"xenosf"},"content":" .withGiverSectionName(giverSection)"},{"lineNumber":464,"author":{"gitId":"-"},"content":" .withRecipient(recipientName)"},{"lineNumber":465,"author":{"gitId":"-"},"content":" .withRecipientTeam(recipientTeam)"},{"lineNumber":466,"author":{"gitId":"-"},"content":" .withRecipientEmail(recipientEmail)"},{"lineNumber":467,"author":{"gitId":"xenosf"},"content":" .withRecipientSectionName(recipientSection)"},{"lineNumber":468,"author":{"gitId":"-"},"content":" .withResponseDetails(response.getResponseDetailsCopy())"},{"lineNumber":469,"author":{"gitId":"-"},"content":" .withParticipantComment(comments.poll())"},{"lineNumber":470,"author":{"gitId":"-"},"content":" .withInstructorComments(new ArrayList\u003c\u003e(comments))"},{"lineNumber":471,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":472,"author":{"gitId":"-"},"content":" }"},{"lineNumber":473,"author":{"gitId":"-"},"content":""},{"lineNumber":474,"author":{"gitId":"xenosf"},"content":" private static ResponseOutput buildSingleResponseForInstructor("},{"lineNumber":475,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response, SqlSessionResultsBundle bundle, boolean isMissingResponse) {"},{"lineNumber":476,"author":{"gitId":"xenosf"},"content":" // process giver"},{"lineNumber":477,"author":{"gitId":"xenosf"},"content":" String giverEmail \u003d null;"},{"lineNumber":478,"author":{"gitId":"xenosf"},"content":" String relatedGiverEmail \u003d null;"},{"lineNumber":479,"author":{"gitId":"xenosf"},"content":" if (bundle.isResponseGiverVisible(response)) {"},{"lineNumber":480,"author":{"gitId":"xenosf"},"content":" giverEmail \u003d response.getGiver();"},{"lineNumber":481,"author":{"gitId":"xenosf"},"content":" relatedGiverEmail \u003d response.getGiver();"},{"lineNumber":482,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":483,"author":{"gitId":"xenosf"},"content":" if (bundle.getRoster().isTeamInCourse(giverEmail)) {"},{"lineNumber":484,"author":{"gitId":"xenosf"},"content":" // remove recipient email as it is a team name"},{"lineNumber":485,"author":{"gitId":"xenosf"},"content":" relatedGiverEmail \u003d"},{"lineNumber":486,"author":{"gitId":"xenosf"},"content":" bundle.getRoster().getTeamToMembersTable().get(giverEmail).iterator().next().getEmail();"},{"lineNumber":487,"author":{"gitId":"xenosf"},"content":" giverEmail \u003d null;"},{"lineNumber":488,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":489,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":490,"author":{"gitId":"xenosf"},"content":" String giverName \u003d getGiverNameOfResponse(response, bundle);"},{"lineNumber":491,"author":{"gitId":"xenosf"},"content":" String giverTeam \u003d bundle.getRoster().getInfoForIdentifier(response.getGiver()).getTeamName();"},{"lineNumber":492,"author":{"gitId":"xenosf"},"content":" String giverSectionName \u003d response.getGiverSectionName();"},{"lineNumber":493,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":494,"author":{"gitId":"xenosf"},"content":" if (question.getGiverType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":495,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d bundle.getRoster().getInstructorForEmail(response.getGiver());"},{"lineNumber":496,"author":{"gitId":"xenosf"},"content":" giverName \u003d instructor.getName();"},{"lineNumber":497,"author":{"gitId":"xenosf"},"content":" giverTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":498,"author":{"gitId":"xenosf"},"content":" giverSectionName \u003d Const.DEFAULT_SECTION;"},{"lineNumber":499,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":500,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":501,"author":{"gitId":"xenosf"},"content":" // process recipient"},{"lineNumber":502,"author":{"gitId":"xenosf"},"content":" String recipientEmail \u003d null;"},{"lineNumber":503,"author":{"gitId":"xenosf"},"content":" String recipientName \u003d getRecipientNameOfResponse(response, bundle);"},{"lineNumber":504,"author":{"gitId":"xenosf"},"content":" String recipientTeam \u003d"},{"lineNumber":505,"author":{"gitId":"xenosf"},"content":" bundle.getRoster().getInfoForIdentifier(response.getRecipient()).getTeamName();"},{"lineNumber":506,"author":{"gitId":"xenosf"},"content":" String recipientSectionName \u003d response.getRecipientSectionName();"},{"lineNumber":507,"author":{"gitId":"xenosf"},"content":" if (question.getRecipientType() \u003d\u003d FeedbackParticipantType.INSTRUCTORS) {"},{"lineNumber":508,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d bundle.getRoster().getInstructorForEmail(response.getRecipient());"},{"lineNumber":509,"author":{"gitId":"xenosf"},"content":" recipientName \u003d instructor.getName();"},{"lineNumber":510,"author":{"gitId":"xenosf"},"content":" recipientTeam \u003d Const.USER_TEAM_FOR_INSTRUCTOR;"},{"lineNumber":511,"author":{"gitId":"xenosf"},"content":" recipientSectionName \u003d Const.DEFAULT_SECTION;"},{"lineNumber":512,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":513,"author":{"gitId":"xenosf"},"content":" if (bundle.isResponseRecipientVisible(response)) {"},{"lineNumber":514,"author":{"gitId":"xenosf"},"content":" recipientEmail \u003d response.getRecipient();"},{"lineNumber":515,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":516,"author":{"gitId":"xenosf"},"content":" if (bundle.getRoster().isTeamInCourse(recipientEmail)) {"},{"lineNumber":517,"author":{"gitId":"xenosf"},"content":" // remove recipient email as it is a team name"},{"lineNumber":518,"author":{"gitId":"xenosf"},"content":" recipientEmail \u003d null;"},{"lineNumber":519,"author":{"gitId":"xenosf"},"content":" } else if (Const.GENERAL_QUESTION.equals(recipientEmail)) {"},{"lineNumber":520,"author":{"gitId":"xenosf"},"content":" // general recipient does not have email"},{"lineNumber":521,"author":{"gitId":"xenosf"},"content":" recipientEmail \u003d null;"},{"lineNumber":522,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":523,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":524,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":525,"author":{"gitId":"xenosf"},"content":" // process comments"},{"lineNumber":526,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponseComment\u003e feedbackResponseComments \u003d"},{"lineNumber":527,"author":{"gitId":"xenosf"},"content":" bundle.getResponseCommentsMap().getOrDefault(response, Collections.emptyList());"},{"lineNumber":528,"author":{"gitId":"xenosf"},"content":" Queue\u003cCommentOutput\u003e comments \u003d buildComments(feedbackResponseComments, bundle);"},{"lineNumber":529,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":530,"author":{"gitId":"xenosf"},"content":" return ResponseOutput.builder()"},{"lineNumber":531,"author":{"gitId":"xenosf"},"content":" .withIsMissingResponse(isMissingResponse)"},{"lineNumber":532,"author":{"gitId":"xenosf"},"content":" .withResponse(response)"},{"lineNumber":533,"author":{"gitId":"xenosf"},"content":" .withGiver(giverName)"},{"lineNumber":534,"author":{"gitId":"xenosf"},"content":" .withGiverTeam(giverTeam)"},{"lineNumber":535,"author":{"gitId":"xenosf"},"content":" .withGiverEmail(giverEmail)"},{"lineNumber":536,"author":{"gitId":"xenosf"},"content":" .withRelatedGiverEmail(relatedGiverEmail)"},{"lineNumber":537,"author":{"gitId":"xenosf"},"content":" .withGiverSectionName(giverSectionName)"},{"lineNumber":538,"author":{"gitId":"xenosf"},"content":" .withRecipient(recipientName)"},{"lineNumber":539,"author":{"gitId":"xenosf"},"content":" .withRecipientTeam(recipientTeam)"},{"lineNumber":540,"author":{"gitId":"xenosf"},"content":" .withRecipientEmail(recipientEmail)"},{"lineNumber":541,"author":{"gitId":"xenosf"},"content":" .withRecipientSectionName(recipientSectionName)"},{"lineNumber":542,"author":{"gitId":"xenosf"},"content":" .withResponseDetails(response.getFeedbackResponseDetailsCopy())"},{"lineNumber":543,"author":{"gitId":"xenosf"},"content":" .withParticipantComment(comments.poll())"},{"lineNumber":544,"author":{"gitId":"xenosf"},"content":" .withInstructorComments(new ArrayList\u003c\u003e(comments))"},{"lineNumber":545,"author":{"gitId":"xenosf"},"content":" .build();"},{"lineNumber":546,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":547,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":548,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":549,"author":{"gitId":"-"},"content":" * Gets giver name of a response from the bundle."},{"lineNumber":550,"author":{"gitId":"-"},"content":" *"},{"lineNumber":551,"author":{"gitId":"-"},"content":" * \u003cp\u003eAnonymized the name if necessary."},{"lineNumber":552,"author":{"gitId":"-"},"content":" */"},{"lineNumber":553,"author":{"gitId":"-"},"content":" private static String getGiverNameOfResponse(FeedbackResponseAttributes response, SessionResultsBundle bundle) {"},{"lineNumber":554,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(response.getFeedbackQuestionId());"},{"lineNumber":555,"author":{"gitId":"-"},"content":" FeedbackParticipantType participantType \u003d question.getGiverType();"},{"lineNumber":556,"author":{"gitId":"-"},"content":""},{"lineNumber":557,"author":{"gitId":"-"},"content":" CourseRoster.ParticipantInfo userInfo \u003d bundle.getRoster().getInfoForIdentifier(response.getGiver());"},{"lineNumber":558,"author":{"gitId":"-"},"content":" String name \u003d userInfo.getName();"},{"lineNumber":559,"author":{"gitId":"-"},"content":""},{"lineNumber":560,"author":{"gitId":"-"},"content":" if (!bundle.isResponseGiverVisible(response)) {"},{"lineNumber":561,"author":{"gitId":"-"},"content":" name \u003d SessionResultsBundle.getAnonName(participantType, name);"},{"lineNumber":562,"author":{"gitId":"-"},"content":" }"},{"lineNumber":563,"author":{"gitId":"-"},"content":""},{"lineNumber":564,"author":{"gitId":"-"},"content":" return name;"},{"lineNumber":565,"author":{"gitId":"-"},"content":" }"},{"lineNumber":566,"author":{"gitId":"-"},"content":""},{"lineNumber":567,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":568,"author":{"gitId":"xenosf"},"content":" * Gets giver name of a response from the bundle."},{"lineNumber":569,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":570,"author":{"gitId":"xenosf"},"content":" * \u003cp\u003eAnonymized the name if necessary."},{"lineNumber":571,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":572,"author":{"gitId":"xenosf"},"content":" private static String getGiverNameOfResponse(FeedbackResponse response, SqlSessionResultsBundle bundle) {"},{"lineNumber":573,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":574,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType participantType \u003d question.getGiverType();"},{"lineNumber":575,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":576,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster.ParticipantInfo userInfo \u003d bundle.getRoster().getInfoForIdentifier(response.getGiver());"},{"lineNumber":577,"author":{"gitId":"xenosf"},"content":" String name \u003d userInfo.getName();"},{"lineNumber":578,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":579,"author":{"gitId":"xenosf"},"content":" if (!bundle.isResponseGiverVisible(response)) {"},{"lineNumber":580,"author":{"gitId":"xenosf"},"content":" name \u003d SessionResultsBundle.getAnonName(participantType, name);"},{"lineNumber":581,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":582,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":583,"author":{"gitId":"xenosf"},"content":" return name;"},{"lineNumber":584,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":585,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":586,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":587,"author":{"gitId":"-"},"content":" * Gets recipient name of a response from the bundle."},{"lineNumber":588,"author":{"gitId":"-"},"content":" *"},{"lineNumber":589,"author":{"gitId":"-"},"content":" * \u003cp\u003eAnonymized the name if necessary."},{"lineNumber":590,"author":{"gitId":"-"},"content":" */"},{"lineNumber":591,"author":{"gitId":"-"},"content":" private static String getRecipientNameOfResponse(FeedbackResponseAttributes response, SessionResultsBundle bundle) {"},{"lineNumber":592,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes question \u003d bundle.getQuestionsMap().get(response.getFeedbackQuestionId());"},{"lineNumber":593,"author":{"gitId":"-"},"content":" FeedbackParticipantType participantType \u003d question.getRecipientType();"},{"lineNumber":594,"author":{"gitId":"-"},"content":" if (participantType \u003d\u003d FeedbackParticipantType.SELF) {"},{"lineNumber":595,"author":{"gitId":"-"},"content":" // recipient type for self-feedback is the same as the giver type"},{"lineNumber":596,"author":{"gitId":"-"},"content":" participantType \u003d question.getGiverType();"},{"lineNumber":597,"author":{"gitId":"-"},"content":" }"},{"lineNumber":598,"author":{"gitId":"-"},"content":""},{"lineNumber":599,"author":{"gitId":"-"},"content":" CourseRoster.ParticipantInfo userInfo \u003d bundle.getRoster().getInfoForIdentifier(response.getRecipient());"},{"lineNumber":600,"author":{"gitId":"-"},"content":" String name \u003d userInfo.getName();"},{"lineNumber":601,"author":{"gitId":"-"},"content":" if (Const.GENERAL_QUESTION.equals(response.getRecipient())) {"},{"lineNumber":602,"author":{"gitId":"-"},"content":" // for general question"},{"lineNumber":603,"author":{"gitId":"-"},"content":" name \u003d Const.USER_NOBODY_TEXT;"},{"lineNumber":604,"author":{"gitId":"-"},"content":" }"},{"lineNumber":605,"author":{"gitId":"-"},"content":" if (!bundle.isResponseRecipientVisible(response)) {"},{"lineNumber":606,"author":{"gitId":"-"},"content":" name \u003d SessionResultsBundle.getAnonName(participantType, name);"},{"lineNumber":607,"author":{"gitId":"-"},"content":" }"},{"lineNumber":608,"author":{"gitId":"-"},"content":""},{"lineNumber":609,"author":{"gitId":"-"},"content":" return name;"},{"lineNumber":610,"author":{"gitId":"-"},"content":" }"},{"lineNumber":611,"author":{"gitId":"-"},"content":""},{"lineNumber":612,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":613,"author":{"gitId":"xenosf"},"content":" * Gets recipient name of a response from the bundle."},{"lineNumber":614,"author":{"gitId":"xenosf"},"content":" *"},{"lineNumber":615,"author":{"gitId":"xenosf"},"content":" * \u003cp\u003eAnonymized the name if necessary."},{"lineNumber":616,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":617,"author":{"gitId":"xenosf"},"content":" private static String getRecipientNameOfResponse(FeedbackResponse response, SqlSessionResultsBundle bundle) {"},{"lineNumber":618,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question \u003d response.getFeedbackQuestion();"},{"lineNumber":619,"author":{"gitId":"xenosf"},"content":" FeedbackParticipantType participantType \u003d question.getRecipientType();"},{"lineNumber":620,"author":{"gitId":"xenosf"},"content":" if (participantType \u003d\u003d FeedbackParticipantType.SELF) {"},{"lineNumber":621,"author":{"gitId":"xenosf"},"content":" // recipient type for self-feedback is the same as the giver type"},{"lineNumber":622,"author":{"gitId":"xenosf"},"content":" participantType \u003d question.getGiverType();"},{"lineNumber":623,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":624,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":625,"author":{"gitId":"xenosf"},"content":" SqlCourseRoster.ParticipantInfo userInfo \u003d bundle.getRoster().getInfoForIdentifier(response.getRecipient());"},{"lineNumber":626,"author":{"gitId":"xenosf"},"content":" String name \u003d userInfo.getName();"},{"lineNumber":627,"author":{"gitId":"xenosf"},"content":" if (Const.GENERAL_QUESTION.equals(response.getRecipient())) {"},{"lineNumber":628,"author":{"gitId":"xenosf"},"content":" // for general question"},{"lineNumber":629,"author":{"gitId":"xenosf"},"content":" name \u003d Const.USER_NOBODY_TEXT;"},{"lineNumber":630,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":631,"author":{"gitId":"xenosf"},"content":" if (!bundle.isResponseRecipientVisible(response)) {"},{"lineNumber":632,"author":{"gitId":"xenosf"},"content":" name \u003d SessionResultsBundle.getAnonName(participantType, name);"},{"lineNumber":633,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":634,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":635,"author":{"gitId":"xenosf"},"content":" return name;"},{"lineNumber":636,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":637,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":638,"author":{"gitId":"-"},"content":" private static Queue\u003cCommentOutput\u003e buildComments(List\u003cFeedbackResponseCommentAttributes\u003e feedbackResponseComments,"},{"lineNumber":639,"author":{"gitId":"-"},"content":" SessionResultsBundle bundle) {"},{"lineNumber":640,"author":{"gitId":"-"},"content":" LinkedList\u003cCommentOutput\u003e outputs \u003d new LinkedList\u003c\u003e();"},{"lineNumber":641,"author":{"gitId":"-"},"content":""},{"lineNumber":642,"author":{"gitId":"-"},"content":" CommentOutput participantComment \u003d null;"},{"lineNumber":643,"author":{"gitId":"-"},"content":" for (FeedbackResponseCommentAttributes comment : feedbackResponseComments) {"},{"lineNumber":644,"author":{"gitId":"-"},"content":" if (comment.isCommentFromFeedbackParticipant()) {"},{"lineNumber":645,"author":{"gitId":"-"},"content":" // participant comment will not need these fields"},{"lineNumber":646,"author":{"gitId":"-"},"content":" participantComment \u003d CommentOutput.builder(comment)"},{"lineNumber":647,"author":{"gitId":"-"},"content":" .withCommentGiver(null)"},{"lineNumber":648,"author":{"gitId":"-"},"content":" .withCommentGiverName(null)"},{"lineNumber":649,"author":{"gitId":"-"},"content":" .withLastEditorEmail(null)"},{"lineNumber":650,"author":{"gitId":"-"},"content":" .withLastEditorName(null)"},{"lineNumber":651,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":652,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":653,"author":{"gitId":"-"},"content":" String giverEmail \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":654,"author":{"gitId":"-"},"content":" String giverName \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":655,"author":{"gitId":"-"},"content":" String lastEditorEmail \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":656,"author":{"gitId":"-"},"content":" String lastEditorName \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":657,"author":{"gitId":"-"},"content":" if (bundle.isCommentGiverVisible(comment)) {"},{"lineNumber":658,"author":{"gitId":"-"},"content":" giverEmail \u003d comment.getCommentGiver();"},{"lineNumber":659,"author":{"gitId":"-"},"content":" giverName \u003d bundle.getRoster().getInfoForIdentifier(comment.getCommentGiver()).getName();"},{"lineNumber":660,"author":{"gitId":"-"},"content":" lastEditorEmail \u003d comment.getLastEditorEmail();"},{"lineNumber":661,"author":{"gitId":"-"},"content":" lastEditorName \u003d bundle.getRoster().getInfoForIdentifier(comment.getLastEditorEmail()).getName();"},{"lineNumber":662,"author":{"gitId":"-"},"content":" }"},{"lineNumber":663,"author":{"gitId":"-"},"content":" outputs.add(CommentOutput.builder(comment)"},{"lineNumber":664,"author":{"gitId":"-"},"content":" .withCommentGiver(giverEmail)"},{"lineNumber":665,"author":{"gitId":"-"},"content":" .withCommentGiverName(giverName)"},{"lineNumber":666,"author":{"gitId":"-"},"content":" .withLastEditorEmail(lastEditorEmail)"},{"lineNumber":667,"author":{"gitId":"-"},"content":" .withLastEditorName(lastEditorName)"},{"lineNumber":668,"author":{"gitId":"-"},"content":" .build());"},{"lineNumber":669,"author":{"gitId":"-"},"content":" }"},{"lineNumber":670,"author":{"gitId":"-"},"content":" }"},{"lineNumber":671,"author":{"gitId":"-"},"content":" outputs.addFirst(participantComment);"},{"lineNumber":672,"author":{"gitId":"-"},"content":""},{"lineNumber":673,"author":{"gitId":"-"},"content":" return outputs;"},{"lineNumber":674,"author":{"gitId":"-"},"content":" }"},{"lineNumber":675,"author":{"gitId":"-"},"content":""},{"lineNumber":676,"author":{"gitId":"xenosf"},"content":" private static Queue\u003cCommentOutput\u003e buildComments(List\u003cFeedbackResponseComment\u003e feedbackResponseComments,"},{"lineNumber":677,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle) {"},{"lineNumber":678,"author":{"gitId":"xenosf"},"content":" LinkedList\u003cCommentOutput\u003e outputs \u003d new LinkedList\u003c\u003e();"},{"lineNumber":679,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":680,"author":{"gitId":"xenosf"},"content":" CommentOutput participantComment \u003d null;"},{"lineNumber":681,"author":{"gitId":"xenosf"},"content":" for (FeedbackResponseComment comment : feedbackResponseComments) {"},{"lineNumber":682,"author":{"gitId":"xenosf"},"content":" if (comment.getIsCommentFromFeedbackParticipant()) {"},{"lineNumber":683,"author":{"gitId":"xenosf"},"content":" // participant comment will not need these fields"},{"lineNumber":684,"author":{"gitId":"xenosf"},"content":" participantComment \u003d CommentOutput.builder(comment)"},{"lineNumber":685,"author":{"gitId":"xenosf"},"content":" .withCommentGiver(null)"},{"lineNumber":686,"author":{"gitId":"xenosf"},"content":" .withCommentGiverName(null)"},{"lineNumber":687,"author":{"gitId":"xenosf"},"content":" .withLastEditorEmail(null)"},{"lineNumber":688,"author":{"gitId":"xenosf"},"content":" .withLastEditorName(null)"},{"lineNumber":689,"author":{"gitId":"xenosf"},"content":" .build();"},{"lineNumber":690,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":691,"author":{"gitId":"xenosf"},"content":" String giverEmail \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":692,"author":{"gitId":"xenosf"},"content":" String giverName \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":693,"author":{"gitId":"xenosf"},"content":" String lastEditorEmail \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":694,"author":{"gitId":"xenosf"},"content":" String lastEditorName \u003d Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT;"},{"lineNumber":695,"author":{"gitId":"xenosf"},"content":" if (bundle.isCommentGiverVisible(comment)) {"},{"lineNumber":696,"author":{"gitId":"xenosf"},"content":" giverEmail \u003d comment.getGiver();"},{"lineNumber":697,"author":{"gitId":"xenosf"},"content":" giverName \u003d bundle.getRoster().getInfoForIdentifier(comment.getGiver()).getName();"},{"lineNumber":698,"author":{"gitId":"xenosf"},"content":" lastEditorEmail \u003d comment.getLastEditorEmail();"},{"lineNumber":699,"author":{"gitId":"xenosf"},"content":" lastEditorName \u003d bundle.getRoster().getInfoForIdentifier(comment.getLastEditorEmail()).getName();"},{"lineNumber":700,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":701,"author":{"gitId":"xenosf"},"content":" outputs.add(CommentOutput.builder(comment)"},{"lineNumber":702,"author":{"gitId":"xenosf"},"content":" .withCommentGiver(giverEmail)"},{"lineNumber":703,"author":{"gitId":"xenosf"},"content":" .withCommentGiverName(giverName)"},{"lineNumber":704,"author":{"gitId":"xenosf"},"content":" .withLastEditorEmail(lastEditorEmail)"},{"lineNumber":705,"author":{"gitId":"xenosf"},"content":" .withLastEditorName(lastEditorName)"},{"lineNumber":706,"author":{"gitId":"xenosf"},"content":" .build());"},{"lineNumber":707,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":708,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":709,"author":{"gitId":"xenosf"},"content":" outputs.addFirst(participantComment);"},{"lineNumber":710,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":711,"author":{"gitId":"xenosf"},"content":" return outputs;"},{"lineNumber":712,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":713,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":714,"author":{"gitId":"-"},"content":" public List\u003cQuestionOutput\u003e getQuestions() {"},{"lineNumber":715,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":716,"author":{"gitId":"-"},"content":" }"},{"lineNumber":717,"author":{"gitId":"-"},"content":""},{"lineNumber":718,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":719,"author":{"gitId":"-"},"content":" * API output format for questions in session results."},{"lineNumber":720,"author":{"gitId":"-"},"content":" */"},{"lineNumber":721,"author":{"gitId":"-"},"content":" public static class QuestionOutput {"},{"lineNumber":722,"author":{"gitId":"-"},"content":""},{"lineNumber":723,"author":{"gitId":"-"},"content":" private final FeedbackQuestionData feedbackQuestion;"},{"lineNumber":724,"author":{"gitId":"-"},"content":" private final String questionStatistics;"},{"lineNumber":725,"author":{"gitId":"-"},"content":""},{"lineNumber":726,"author":{"gitId":"-"},"content":" private final List\u003cResponseOutput\u003e allResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":727,"author":{"gitId":"-"},"content":" private final boolean hasResponseButNotVisibleForPreview;"},{"lineNumber":728,"author":{"gitId":"-"},"content":" private final boolean hasCommentNotVisibleForPreview;"},{"lineNumber":729,"author":{"gitId":"-"},"content":""},{"lineNumber":730,"author":{"gitId":"-"},"content":" // For student view only"},{"lineNumber":731,"author":{"gitId":"-"},"content":" private final List\u003cResponseOutput\u003e responsesToSelf \u003d new ArrayList\u003c\u003e();"},{"lineNumber":732,"author":{"gitId":"-"},"content":" private final List\u003cResponseOutput\u003e responsesFromSelf \u003d new ArrayList\u003c\u003e();"},{"lineNumber":733,"author":{"gitId":"-"},"content":" private final List\u003cList\u003cResponseOutput\u003e\u003e otherResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":734,"author":{"gitId":"-"},"content":""},{"lineNumber":735,"author":{"gitId":"-"},"content":" private QuestionOutput(FeedbackQuestionAttributes feedbackQuestionAttributes, String questionStatistics,"},{"lineNumber":736,"author":{"gitId":"-"},"content":" boolean hasResponseButNotVisibleForPreview, boolean hasCommentNotVisibleForPreview) {"},{"lineNumber":737,"author":{"gitId":"-"},"content":" this.feedbackQuestion \u003d new FeedbackQuestionData(feedbackQuestionAttributes);"},{"lineNumber":738,"author":{"gitId":"-"},"content":" this.questionStatistics \u003d questionStatistics;"},{"lineNumber":739,"author":{"gitId":"-"},"content":" this.hasResponseButNotVisibleForPreview \u003d hasResponseButNotVisibleForPreview;"},{"lineNumber":740,"author":{"gitId":"-"},"content":" this.hasCommentNotVisibleForPreview \u003d hasCommentNotVisibleForPreview;"},{"lineNumber":741,"author":{"gitId":"-"},"content":" }"},{"lineNumber":742,"author":{"gitId":"-"},"content":""},{"lineNumber":743,"author":{"gitId":"xenosf"},"content":" private QuestionOutput(FeedbackQuestion feedbackQuestion, String questionStatistics,"},{"lineNumber":744,"author":{"gitId":"xenosf"},"content":" boolean hasResponseButNotVisibleForPreview, boolean hasCommentNotVisibleForPreview) {"},{"lineNumber":745,"author":{"gitId":"xenosf"},"content":" this.feedbackQuestion \u003d new FeedbackQuestionData(feedbackQuestion);"},{"lineNumber":746,"author":{"gitId":"xenosf"},"content":" this.questionStatistics \u003d questionStatistics;"},{"lineNumber":747,"author":{"gitId":"xenosf"},"content":" this.hasResponseButNotVisibleForPreview \u003d hasResponseButNotVisibleForPreview;"},{"lineNumber":748,"author":{"gitId":"xenosf"},"content":" this.hasCommentNotVisibleForPreview \u003d hasCommentNotVisibleForPreview;"},{"lineNumber":749,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":750,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":751,"author":{"gitId":"-"},"content":" public FeedbackQuestionData getFeedbackQuestion() {"},{"lineNumber":752,"author":{"gitId":"-"},"content":" return feedbackQuestion;"},{"lineNumber":753,"author":{"gitId":"-"},"content":" }"},{"lineNumber":754,"author":{"gitId":"-"},"content":""},{"lineNumber":755,"author":{"gitId":"-"},"content":" public String getQuestionStatistics() {"},{"lineNumber":756,"author":{"gitId":"-"},"content":" return questionStatistics;"},{"lineNumber":757,"author":{"gitId":"-"},"content":" }"},{"lineNumber":758,"author":{"gitId":"-"},"content":""},{"lineNumber":759,"author":{"gitId":"-"},"content":" public List\u003cResponseOutput\u003e getAllResponses() {"},{"lineNumber":760,"author":{"gitId":"-"},"content":" return allResponses;"},{"lineNumber":761,"author":{"gitId":"-"},"content":" }"},{"lineNumber":762,"author":{"gitId":"-"},"content":""},{"lineNumber":763,"author":{"gitId":"-"},"content":" public boolean getHasResponseButNotVisibleForPreview() {"},{"lineNumber":764,"author":{"gitId":"-"},"content":" return hasResponseButNotVisibleForPreview;"},{"lineNumber":765,"author":{"gitId":"-"},"content":" }"},{"lineNumber":766,"author":{"gitId":"-"},"content":""},{"lineNumber":767,"author":{"gitId":"-"},"content":" public boolean getHasCommentNotVisibleForPreview() {"},{"lineNumber":768,"author":{"gitId":"-"},"content":" return hasCommentNotVisibleForPreview;"},{"lineNumber":769,"author":{"gitId":"-"},"content":" }"},{"lineNumber":770,"author":{"gitId":"-"},"content":""},{"lineNumber":771,"author":{"gitId":"-"},"content":" public List\u003cResponseOutput\u003e getResponsesFromSelf() {"},{"lineNumber":772,"author":{"gitId":"-"},"content":" return responsesFromSelf;"},{"lineNumber":773,"author":{"gitId":"-"},"content":" }"},{"lineNumber":774,"author":{"gitId":"-"},"content":""},{"lineNumber":775,"author":{"gitId":"-"},"content":" public List\u003cResponseOutput\u003e getResponsesToSelf() {"},{"lineNumber":776,"author":{"gitId":"-"},"content":" return responsesToSelf;"},{"lineNumber":777,"author":{"gitId":"-"},"content":" }"},{"lineNumber":778,"author":{"gitId":"-"},"content":""},{"lineNumber":779,"author":{"gitId":"-"},"content":" public List\u003cList\u003cResponseOutput\u003e\u003e getOtherResponses() {"},{"lineNumber":780,"author":{"gitId":"-"},"content":" return otherResponses;"},{"lineNumber":781,"author":{"gitId":"-"},"content":" }"},{"lineNumber":782,"author":{"gitId":"-"},"content":""},{"lineNumber":783,"author":{"gitId":"-"},"content":" }"},{"lineNumber":784,"author":{"gitId":"-"},"content":""},{"lineNumber":785,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":786,"author":{"gitId":"-"},"content":" * API output format for question responses."},{"lineNumber":787,"author":{"gitId":"-"},"content":" */"},{"lineNumber":788,"author":{"gitId":"-"},"content":" public static class ResponseOutput {"},{"lineNumber":789,"author":{"gitId":"-"},"content":""},{"lineNumber":790,"author":{"gitId":"-"},"content":" private boolean isMissingResponse;"},{"lineNumber":791,"author":{"gitId":"-"},"content":""},{"lineNumber":792,"author":{"gitId":"-"},"content":" private String responseId;"},{"lineNumber":793,"author":{"gitId":"-"},"content":""},{"lineNumber":794,"author":{"gitId":"-"},"content":" private String giver;"},{"lineNumber":795,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":796,"author":{"gitId":"-"},"content":" * Depending on the question giver type, {@code giverIdentifier} may contain the giver\u0027s email, any team member\u0027s"},{"lineNumber":797,"author":{"gitId":"-"},"content":" * email or null."},{"lineNumber":798,"author":{"gitId":"-"},"content":" */"},{"lineNumber":799,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":800,"author":{"gitId":"-"},"content":" private String relatedGiverEmail;"},{"lineNumber":801,"author":{"gitId":"-"},"content":" private String giverTeam;"},{"lineNumber":802,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":803,"author":{"gitId":"-"},"content":" private String giverEmail;"},{"lineNumber":804,"author":{"gitId":"-"},"content":" private String giverSection;"},{"lineNumber":805,"author":{"gitId":"-"},"content":" private String recipient;"},{"lineNumber":806,"author":{"gitId":"-"},"content":" private String recipientTeam;"},{"lineNumber":807,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":808,"author":{"gitId":"-"},"content":" private String recipientEmail;"},{"lineNumber":809,"author":{"gitId":"-"},"content":" private String recipientSection;"},{"lineNumber":810,"author":{"gitId":"-"},"content":" private FeedbackResponseDetails responseDetails;"},{"lineNumber":811,"author":{"gitId":"-"},"content":""},{"lineNumber":812,"author":{"gitId":"-"},"content":" // comments"},{"lineNumber":813,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":814,"author":{"gitId":"-"},"content":" private CommentOutput participantComment;"},{"lineNumber":815,"author":{"gitId":"-"},"content":" private List\u003cCommentOutput\u003e instructorComments;"},{"lineNumber":816,"author":{"gitId":"-"},"content":""},{"lineNumber":817,"author":{"gitId":"-"},"content":" private ResponseOutput() {"},{"lineNumber":818,"author":{"gitId":"-"},"content":" // use builder instead"},{"lineNumber":819,"author":{"gitId":"-"},"content":" }"},{"lineNumber":820,"author":{"gitId":"-"},"content":""},{"lineNumber":821,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":822,"author":{"gitId":"-"},"content":" * Returns a builder for {@link ResponseOutput}."},{"lineNumber":823,"author":{"gitId":"-"},"content":" */"},{"lineNumber":824,"author":{"gitId":"-"},"content":" static Builder builder() {"},{"lineNumber":825,"author":{"gitId":"-"},"content":" return new Builder();"},{"lineNumber":826,"author":{"gitId":"-"},"content":" }"},{"lineNumber":827,"author":{"gitId":"-"},"content":""},{"lineNumber":828,"author":{"gitId":"-"},"content":" public boolean isMissingResponse() {"},{"lineNumber":829,"author":{"gitId":"-"},"content":" return isMissingResponse;"},{"lineNumber":830,"author":{"gitId":"-"},"content":" }"},{"lineNumber":831,"author":{"gitId":"-"},"content":""},{"lineNumber":832,"author":{"gitId":"-"},"content":" public String getResponseId() {"},{"lineNumber":833,"author":{"gitId":"-"},"content":" return responseId;"},{"lineNumber":834,"author":{"gitId":"-"},"content":" }"},{"lineNumber":835,"author":{"gitId":"-"},"content":""},{"lineNumber":836,"author":{"gitId":"-"},"content":" public String getGiver() {"},{"lineNumber":837,"author":{"gitId":"-"},"content":" return giver;"},{"lineNumber":838,"author":{"gitId":"-"},"content":" }"},{"lineNumber":839,"author":{"gitId":"-"},"content":""},{"lineNumber":840,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":841,"author":{"gitId":"-"},"content":" public String getGiverEmail() {"},{"lineNumber":842,"author":{"gitId":"-"},"content":" return giverEmail;"},{"lineNumber":843,"author":{"gitId":"-"},"content":" }"},{"lineNumber":844,"author":{"gitId":"-"},"content":""},{"lineNumber":845,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":846,"author":{"gitId":"-"},"content":" public String getRelatedGiverEmail() {"},{"lineNumber":847,"author":{"gitId":"-"},"content":" return relatedGiverEmail;"},{"lineNumber":848,"author":{"gitId":"-"},"content":" }"},{"lineNumber":849,"author":{"gitId":"-"},"content":""},{"lineNumber":850,"author":{"gitId":"-"},"content":" public String getGiverTeam() {"},{"lineNumber":851,"author":{"gitId":"-"},"content":" return giverTeam;"},{"lineNumber":852,"author":{"gitId":"-"},"content":" }"},{"lineNumber":853,"author":{"gitId":"-"},"content":""},{"lineNumber":854,"author":{"gitId":"-"},"content":" public String getGiverSection() {"},{"lineNumber":855,"author":{"gitId":"-"},"content":" return giverSection;"},{"lineNumber":856,"author":{"gitId":"-"},"content":" }"},{"lineNumber":857,"author":{"gitId":"-"},"content":""},{"lineNumber":858,"author":{"gitId":"-"},"content":" public String getRecipient() {"},{"lineNumber":859,"author":{"gitId":"-"},"content":" return recipient;"},{"lineNumber":860,"author":{"gitId":"-"},"content":" }"},{"lineNumber":861,"author":{"gitId":"-"},"content":""},{"lineNumber":862,"author":{"gitId":"-"},"content":" public String getRecipientTeam() {"},{"lineNumber":863,"author":{"gitId":"-"},"content":" return recipientTeam;"},{"lineNumber":864,"author":{"gitId":"-"},"content":" }"},{"lineNumber":865,"author":{"gitId":"-"},"content":""},{"lineNumber":866,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":867,"author":{"gitId":"-"},"content":" public String getRecipientEmail() {"},{"lineNumber":868,"author":{"gitId":"-"},"content":" return recipientEmail;"},{"lineNumber":869,"author":{"gitId":"-"},"content":" }"},{"lineNumber":870,"author":{"gitId":"-"},"content":""},{"lineNumber":871,"author":{"gitId":"-"},"content":" public String getRecipientSection() {"},{"lineNumber":872,"author":{"gitId":"-"},"content":" return recipientSection;"},{"lineNumber":873,"author":{"gitId":"-"},"content":" }"},{"lineNumber":874,"author":{"gitId":"-"},"content":""},{"lineNumber":875,"author":{"gitId":"-"},"content":" public FeedbackResponseDetails getResponseDetails() {"},{"lineNumber":876,"author":{"gitId":"-"},"content":" return responseDetails;"},{"lineNumber":877,"author":{"gitId":"-"},"content":" }"},{"lineNumber":878,"author":{"gitId":"-"},"content":""},{"lineNumber":879,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":880,"author":{"gitId":"-"},"content":" public CommentOutput getParticipantComment() {"},{"lineNumber":881,"author":{"gitId":"-"},"content":" return participantComment;"},{"lineNumber":882,"author":{"gitId":"-"},"content":" }"},{"lineNumber":883,"author":{"gitId":"-"},"content":""},{"lineNumber":884,"author":{"gitId":"-"},"content":" public List\u003cCommentOutput\u003e getInstructorComments() {"},{"lineNumber":885,"author":{"gitId":"-"},"content":" return instructorComments;"},{"lineNumber":886,"author":{"gitId":"-"},"content":" }"},{"lineNumber":887,"author":{"gitId":"-"},"content":""},{"lineNumber":888,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":889,"author":{"gitId":"-"},"content":" * Builder class for {@link ResponseOutput}."},{"lineNumber":890,"author":{"gitId":"-"},"content":" */"},{"lineNumber":891,"author":{"gitId":"-"},"content":" public static final class Builder {"},{"lineNumber":892,"author":{"gitId":"-"},"content":" private final ResponseOutput responseOutput;"},{"lineNumber":893,"author":{"gitId":"-"},"content":""},{"lineNumber":894,"author":{"gitId":"-"},"content":" private Builder() {"},{"lineNumber":895,"author":{"gitId":"-"},"content":" responseOutput \u003d new ResponseOutput();"},{"lineNumber":896,"author":{"gitId":"-"},"content":" }"},{"lineNumber":897,"author":{"gitId":"-"},"content":""},{"lineNumber":898,"author":{"gitId":"-"},"content":" Builder withIsMissingResponse(boolean isMissingResponse) {"},{"lineNumber":899,"author":{"gitId":"-"},"content":" responseOutput.isMissingResponse \u003d isMissingResponse;"},{"lineNumber":900,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":901,"author":{"gitId":"-"},"content":" }"},{"lineNumber":902,"author":{"gitId":"-"},"content":""},{"lineNumber":903,"author":{"gitId":"-"},"content":" Builder withResponseId(String responseId) {"},{"lineNumber":904,"author":{"gitId":"-"},"content":" responseOutput.responseId \u003d StringHelper.encrypt(responseId);"},{"lineNumber":905,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":906,"author":{"gitId":"-"},"content":" }"},{"lineNumber":907,"author":{"gitId":"-"},"content":""},{"lineNumber":908,"author":{"gitId":"xenosf"},"content":" Builder withResponse(FeedbackResponse response) {"},{"lineNumber":909,"author":{"gitId":"xenosf"},"content":" responseOutput.responseId \u003d StringHelper.encrypt(response.getId().toString());"},{"lineNumber":910,"author":{"gitId":"xenosf"},"content":" return this;"},{"lineNumber":911,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":912,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":913,"author":{"gitId":"-"},"content":" Builder withGiver(String giverName) {"},{"lineNumber":914,"author":{"gitId":"-"},"content":" responseOutput.giver \u003d giverName;"},{"lineNumber":915,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":916,"author":{"gitId":"-"},"content":" }"},{"lineNumber":917,"author":{"gitId":"-"},"content":""},{"lineNumber":918,"author":{"gitId":"-"},"content":" Builder withRelatedGiverEmail(@Nullable String relatedGiverEmail) {"},{"lineNumber":919,"author":{"gitId":"-"},"content":" responseOutput.relatedGiverEmail \u003d relatedGiverEmail;"},{"lineNumber":920,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":921,"author":{"gitId":"-"},"content":" }"},{"lineNumber":922,"author":{"gitId":"-"},"content":""},{"lineNumber":923,"author":{"gitId":"-"},"content":" Builder withGiverTeam(String giverTeam) {"},{"lineNumber":924,"author":{"gitId":"-"},"content":" responseOutput.giverTeam \u003d giverTeam;"},{"lineNumber":925,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":926,"author":{"gitId":"-"},"content":" }"},{"lineNumber":927,"author":{"gitId":"-"},"content":""},{"lineNumber":928,"author":{"gitId":"-"},"content":" Builder withGiverEmail(@Nullable String giverEmail) {"},{"lineNumber":929,"author":{"gitId":"-"},"content":" responseOutput.giverEmail \u003d giverEmail;"},{"lineNumber":930,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":931,"author":{"gitId":"-"},"content":" }"},{"lineNumber":932,"author":{"gitId":"-"},"content":""},{"lineNumber":933,"author":{"gitId":"xenosf"},"content":" Builder withGiverSectionName(String giverSection) {"},{"lineNumber":934,"author":{"gitId":"-"},"content":" responseOutput.giverSection \u003d giverSection;"},{"lineNumber":935,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":936,"author":{"gitId":"-"},"content":" }"},{"lineNumber":937,"author":{"gitId":"-"},"content":""},{"lineNumber":938,"author":{"gitId":"xenosf"},"content":" Builder withGiverSection(Section giverSection) {"},{"lineNumber":939,"author":{"gitId":"xenosf"},"content":" responseOutput.giverSection \u003d giverSection.getName();"},{"lineNumber":940,"author":{"gitId":"xenosf"},"content":" return this;"},{"lineNumber":941,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":942,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":943,"author":{"gitId":"-"},"content":" Builder withRecipient(String recipientName) {"},{"lineNumber":944,"author":{"gitId":"-"},"content":" responseOutput.recipient \u003d recipientName;"},{"lineNumber":945,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":946,"author":{"gitId":"-"},"content":" }"},{"lineNumber":947,"author":{"gitId":"-"},"content":""},{"lineNumber":948,"author":{"gitId":"-"},"content":" Builder withRecipientTeam(String recipientTeam) {"},{"lineNumber":949,"author":{"gitId":"-"},"content":" responseOutput.recipientTeam \u003d recipientTeam;"},{"lineNumber":950,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":951,"author":{"gitId":"-"},"content":" }"},{"lineNumber":952,"author":{"gitId":"-"},"content":""},{"lineNumber":953,"author":{"gitId":"-"},"content":" Builder withRecipientEmail(@Nullable String recipientEmail) {"},{"lineNumber":954,"author":{"gitId":"-"},"content":" responseOutput.recipientEmail \u003d recipientEmail;"},{"lineNumber":955,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":956,"author":{"gitId":"-"},"content":" }"},{"lineNumber":957,"author":{"gitId":"-"},"content":""},{"lineNumber":958,"author":{"gitId":"xenosf"},"content":" Builder withRecipientSectionName(String recipientSection) {"},{"lineNumber":959,"author":{"gitId":"-"},"content":" responseOutput.recipientSection \u003d recipientSection;"},{"lineNumber":960,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":961,"author":{"gitId":"-"},"content":" }"},{"lineNumber":962,"author":{"gitId":"-"},"content":""},{"lineNumber":963,"author":{"gitId":"xenosf"},"content":" Builder withRecipientSection(Section recipientSection) {"},{"lineNumber":964,"author":{"gitId":"xenosf"},"content":" responseOutput.recipientSection \u003d recipientSection.getName();"},{"lineNumber":965,"author":{"gitId":"xenosf"},"content":" return this;"},{"lineNumber":966,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":967,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":968,"author":{"gitId":"-"},"content":" Builder withResponseDetails(FeedbackResponseDetails responseDetails) {"},{"lineNumber":969,"author":{"gitId":"-"},"content":" responseOutput.responseDetails \u003d responseDetails;"},{"lineNumber":970,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":971,"author":{"gitId":"-"},"content":" }"},{"lineNumber":972,"author":{"gitId":"-"},"content":""},{"lineNumber":973,"author":{"gitId":"-"},"content":" Builder withParticipantComment(@Nullable CommentOutput participantComment) {"},{"lineNumber":974,"author":{"gitId":"-"},"content":" responseOutput.participantComment \u003d participantComment;"},{"lineNumber":975,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":976,"author":{"gitId":"-"},"content":" }"},{"lineNumber":977,"author":{"gitId":"-"},"content":""},{"lineNumber":978,"author":{"gitId":"-"},"content":" Builder withInstructorComments(List\u003cCommentOutput\u003e instructorComments) {"},{"lineNumber":979,"author":{"gitId":"-"},"content":" responseOutput.instructorComments \u003d instructorComments;"},{"lineNumber":980,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":981,"author":{"gitId":"-"},"content":" }"},{"lineNumber":982,"author":{"gitId":"-"},"content":""},{"lineNumber":983,"author":{"gitId":"-"},"content":" ResponseOutput build() {"},{"lineNumber":984,"author":{"gitId":"-"},"content":" return responseOutput;"},{"lineNumber":985,"author":{"gitId":"-"},"content":" }"},{"lineNumber":986,"author":{"gitId":"-"},"content":" }"},{"lineNumber":987,"author":{"gitId":"-"},"content":" }"},{"lineNumber":988,"author":{"gitId":"-"},"content":""},{"lineNumber":989,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":990,"author":{"gitId":"-"},"content":" * API output format for response comments."},{"lineNumber":991,"author":{"gitId":"-"},"content":" */"},{"lineNumber":992,"author":{"gitId":"-"},"content":" public static class CommentOutput extends FeedbackResponseCommentData {"},{"lineNumber":993,"author":{"gitId":"-"},"content":""},{"lineNumber":994,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":995,"author":{"gitId":"-"},"content":" private String commentGiverName;"},{"lineNumber":996,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":997,"author":{"gitId":"-"},"content":" private String lastEditorName;"},{"lineNumber":998,"author":{"gitId":"-"},"content":""},{"lineNumber":999,"author":{"gitId":"xenosf"},"content":" private CommentOutput(FeedbackResponseCommentAttributes frca) {"},{"lineNumber":1000,"author":{"gitId":"xenosf"},"content":" // use builder instead"},{"lineNumber":1001,"author":{"gitId":"xenosf"},"content":" super(frca);"},{"lineNumber":1002,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1003,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1004,"author":{"gitId":"xenosf"},"content":" private CommentOutput(FeedbackResponseComment frc) {"},{"lineNumber":1005,"author":{"gitId":"-"},"content":" // use builder instead"},{"lineNumber":1006,"author":{"gitId":"-"},"content":" super(frc);"},{"lineNumber":1007,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1008,"author":{"gitId":"-"},"content":""},{"lineNumber":1009,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1010,"author":{"gitId":"-"},"content":" * Returns a builder for {@link CommentOutput}."},{"lineNumber":1011,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1012,"author":{"gitId":"xenosf"},"content":" static Builder builder(FeedbackResponseCommentAttributes frca) {"},{"lineNumber":1013,"author":{"gitId":"xenosf"},"content":" return new Builder(frca);"},{"lineNumber":1014,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1015,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1016,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":1017,"author":{"gitId":"xenosf"},"content":" * Returns a builder for {@link CommentOutput}."},{"lineNumber":1018,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":1019,"author":{"gitId":"xenosf"},"content":" static Builder builder(FeedbackResponseComment frc) {"},{"lineNumber":1020,"author":{"gitId":"-"},"content":" return new Builder(frc);"},{"lineNumber":1021,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1022,"author":{"gitId":"-"},"content":""},{"lineNumber":1023,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":1024,"author":{"gitId":"-"},"content":" public String getCommentGiverName() {"},{"lineNumber":1025,"author":{"gitId":"-"},"content":" return commentGiverName;"},{"lineNumber":1026,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1027,"author":{"gitId":"-"},"content":""},{"lineNumber":1028,"author":{"gitId":"-"},"content":" @Nullable"},{"lineNumber":1029,"author":{"gitId":"-"},"content":" public String getLastEditorName() {"},{"lineNumber":1030,"author":{"gitId":"-"},"content":" return lastEditorName;"},{"lineNumber":1031,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1032,"author":{"gitId":"-"},"content":""},{"lineNumber":1033,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":1034,"author":{"gitId":"-"},"content":" * Builder class for {@link CommentOutput}."},{"lineNumber":1035,"author":{"gitId":"-"},"content":" */"},{"lineNumber":1036,"author":{"gitId":"-"},"content":" public static final class Builder {"},{"lineNumber":1037,"author":{"gitId":"-"},"content":" private final CommentOutput commentOutput;"},{"lineNumber":1038,"author":{"gitId":"-"},"content":""},{"lineNumber":1039,"author":{"gitId":"xenosf"},"content":" private Builder(FeedbackResponseCommentAttributes frca) {"},{"lineNumber":1040,"author":{"gitId":"xenosf"},"content":" commentOutput \u003d new CommentOutput(frca);"},{"lineNumber":1041,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":1042,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":1043,"author":{"gitId":"xenosf"},"content":" private Builder(FeedbackResponseComment frc) {"},{"lineNumber":1044,"author":{"gitId":"-"},"content":" commentOutput \u003d new CommentOutput(frc);"},{"lineNumber":1045,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1046,"author":{"gitId":"-"},"content":""},{"lineNumber":1047,"author":{"gitId":"-"},"content":" Builder withCommentGiver(@Nullable String commentGiver) {"},{"lineNumber":1048,"author":{"gitId":"-"},"content":" commentOutput.commentGiver \u003d commentGiver;"},{"lineNumber":1049,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":1050,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1051,"author":{"gitId":"-"},"content":""},{"lineNumber":1052,"author":{"gitId":"-"},"content":" Builder withCommentGiverName(@Nullable String commentGiverName) {"},{"lineNumber":1053,"author":{"gitId":"-"},"content":" commentOutput.commentGiverName \u003d commentGiverName;"},{"lineNumber":1054,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":1055,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1056,"author":{"gitId":"-"},"content":""},{"lineNumber":1057,"author":{"gitId":"-"},"content":" Builder withLastEditorEmail(@Nullable String lastEditorEmail) {"},{"lineNumber":1058,"author":{"gitId":"-"},"content":" commentOutput.lastEditorEmail \u003d lastEditorEmail;"},{"lineNumber":1059,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":1060,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1061,"author":{"gitId":"-"},"content":""},{"lineNumber":1062,"author":{"gitId":"-"},"content":" Builder withLastEditorName(@Nullable String lastEditorName) {"},{"lineNumber":1063,"author":{"gitId":"-"},"content":" commentOutput.lastEditorName \u003d lastEditorName;"},{"lineNumber":1064,"author":{"gitId":"-"},"content":" return this;"},{"lineNumber":1065,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1066,"author":{"gitId":"-"},"content":""},{"lineNumber":1067,"author":{"gitId":"-"},"content":" CommentOutput build() {"},{"lineNumber":1068,"author":{"gitId":"-"},"content":" return commentOutput;"},{"lineNumber":1069,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1070,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1071,"author":{"gitId":"-"},"content":" }"},{"lineNumber":1072,"author":{"gitId":"-"},"content":""},{"lineNumber":1073,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":386,"-":687}},{"path":"src/main/java/teammates/ui/webapi/AccountRequestSearchIndexingWorkerAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * Task queue worker action: performs account request search indexing."},{"lineNumber":11,"author":{"gitId":"-"},"content":" */"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class AccountRequestSearchIndexingWorkerAction extends AdminOnlyAction {"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public ActionResult execute() {"},{"lineNumber":16,"author":{"gitId":"-"},"content":" String email \u003d getNonNullRequestParamValue(ParamsNames.INSTRUCTOR_EMAIL);"},{"lineNumber":17,"author":{"gitId":"-"},"content":" String institute \u003d getNonNullRequestParamValue(ParamsNames.INSTRUCTOR_INSTITUTION);"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":" AccountRequest accRequest \u003d sqlLogic.getAccountRequest(email, institute);"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":" sqlLogic.putAccountRequestDocument(accRequest);"},{"lineNumber":23,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" // Set an arbitrary retry code outside of the range 200-299 to trigger automatic retry"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":3,"-":27}},{"path":"src/main/java/teammates/ui/webapi/BasicFeedbackSubmissionAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * The basic action for feedback submission."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"-"},"content":"abstract class BasicFeedbackSubmissionAction extends Action {"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Checks whether instructors can see the question."},{"lineNumber":23,"author":{"gitId":"-"},"content":" */"},{"lineNumber":24,"author":{"gitId":"-"},"content":" boolean canInstructorSeeQuestion(FeedbackQuestionAttributes feedbackQuestion) {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" boolean isGiverVisibleToInstructor \u003d"},{"lineNumber":26,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowGiverNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" boolean isRecipientVisibleToInstructor \u003d"},{"lineNumber":28,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowRecipientNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":29,"author":{"gitId":"-"},"content":" boolean isResponseVisibleToInstructor \u003d"},{"lineNumber":30,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowResponsesTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return isResponseVisibleToInstructor \u0026\u0026 isGiverVisibleToInstructor \u0026\u0026 isRecipientVisibleToInstructor;"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Checks whether instructors can see the question."},{"lineNumber":36,"author":{"gitId":"-"},"content":" */"},{"lineNumber":37,"author":{"gitId":"-"},"content":" boolean canInstructorSeeQuestion(FeedbackQuestion feedbackQuestion) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" boolean isGiverVisibleToInstructor \u003d"},{"lineNumber":39,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowGiverNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" boolean isRecipientVisibleToInstructor \u003d"},{"lineNumber":41,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowRecipientNameTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" boolean isResponseVisibleToInstructor \u003d"},{"lineNumber":43,"author":{"gitId":"-"},"content":" feedbackQuestion.getShowResponsesTo().contains(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return isResponseVisibleToInstructor \u0026\u0026 isGiverVisibleToInstructor \u0026\u0026 isRecipientVisibleToInstructor;"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Verifies that instructor can see the moderated question in moderation request."},{"lineNumber":49,"author":{"gitId":"-"},"content":" */"},{"lineNumber":50,"author":{"gitId":"-"},"content":" void verifyInstructorCanSeeQuestionIfInModeration(FeedbackQuestionAttributes feedbackQuestion)"},{"lineNumber":51,"author":{"gitId":"-"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson) \u0026\u0026 !canInstructorSeeQuestion(feedbackQuestion)) {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // should not moderate question which instructors cannot see"},{"lineNumber":56,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"The question is not applicable for moderation\", true);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":61,"author":{"gitId":"-"},"content":" * Verifies that instructor can see the moderated question in moderation request."},{"lineNumber":62,"author":{"gitId":"-"},"content":" */"},{"lineNumber":63,"author":{"gitId":"-"},"content":" void verifyInstructorCanSeeQuestionIfInModeration(FeedbackQuestion feedbackQuestion)"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson) \u0026\u0026 !canInstructorSeeQuestion(feedbackQuestion)) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // should not moderate question which instructors cannot see"},{"lineNumber":69,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"The question is not applicable for moderation\", true);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Gets the student involved in the submission process."},{"lineNumber":75,"author":{"gitId":"-"},"content":" */"},{"lineNumber":76,"author":{"gitId":"-"},"content":" StudentAttributes getStudentOfCourseFromRequest(String courseId) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return logic.getStudentForEmail(courseId, moderatedPerson);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return logic.getStudentForEmail(courseId, previewAsPerson);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return getPossiblyUnregisteredStudent(courseId);"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Gets the student involved in the submission process."},{"lineNumber":91,"author":{"gitId":"-"},"content":" */"},{"lineNumber":92,"author":{"gitId":"-"},"content":" Student getSqlStudentOfCourseFromRequest(String courseId) {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // TODO: Rename method to remove Sql after migration."},{"lineNumber":94,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return sqlLogic.getStudentForEmail(courseId, moderatedPerson);"},{"lineNumber":99,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" return sqlLogic.getStudentForEmail(courseId, previewAsPerson);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" return getPossiblyUnregisteredSqlStudent(courseId);"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Checks the access control for student feedback submission."},{"lineNumber":108,"author":{"gitId":"-"},"content":" */"},{"lineNumber":109,"author":{"gitId":"-"},"content":" void checkAccessControlForStudentFeedbackSubmission("},{"lineNumber":110,"author":{"gitId":"-"},"content":" StudentAttributes student, FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent student entity\");"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":120,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":121,"author":{"gitId":"-"},"content":" logic.getInstructorForGoogleId(feedbackSession.getCourseId(), userInfo.getId()), feedbackSession,"},{"lineNumber":122,"author":{"gitId":"-"},"content":" student.getSection(),"},{"lineNumber":123,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS);"},{"lineNumber":124,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, false);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(student, feedbackSession);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(student.getGoogleId());"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Checks the access control for student feedback submission."},{"lineNumber":134,"author":{"gitId":"-"},"content":" */"},{"lineNumber":135,"author":{"gitId":"-"},"content":" void checkAccessControlForStudentFeedbackSubmission(Student student, FeedbackSession feedbackSession)"},{"lineNumber":136,"author":{"gitId":"-"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent student entity\");"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":147,"author":{"gitId":"-"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()), feedbackSession,"},{"lineNumber":148,"author":{"gitId":"-"},"content":" student.getSectionName(),"},{"lineNumber":149,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":153,"author":{"gitId":"-"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()), feedbackSession,"},{"lineNumber":154,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(student, feedbackSession);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" if (student.getAccount() !\u003d null) {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" if (userInfo \u003d\u003d null) {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" // Student is associated with an account; even if registration key is passed, do not allow access"},{"lineNumber":160,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Login is required to access this feedback session\");"},{"lineNumber":161,"author":{"gitId":"-"},"content":" } else if (!userInfo.id.equals(student.getAccount().getGoogleId())) {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" // Logged in student is not the same as the student registered for the given key, do not allow access"},{"lineNumber":163,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"You are not authorized to access this feedback session\");"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":" }"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":170,"author":{"gitId":"-"},"content":" * Checks the access control for student feedback result."},{"lineNumber":171,"author":{"gitId":"-"},"content":" */"},{"lineNumber":172,"author":{"gitId":"-"},"content":" void checkAccessControlForStudentFeedbackResult("},{"lineNumber":173,"author":{"gitId":"-"},"content":" StudentAttributes student, FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent student entity\");"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(student, feedbackSession);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(student.getGoogleId());"},{"lineNumber":183,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, false);"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" /**"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":" * Checks the access control for student feedback result."},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" void checkAccessControlForStudentFeedbackResult("},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" Student student, FeedbackSession feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent student entity\");"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" if (StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible(student, feedbackSession);"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" verifyMatchingGoogleId(student.getGoogleId());"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" checkAccessControlForPreview(feedbackSession, false);"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * Gets the instructor involved in the submission process."},{"lineNumber":209,"author":{"gitId":"-"},"content":" */"},{"lineNumber":210,"author":{"gitId":"-"},"content":" InstructorAttributes getInstructorOfCourseFromRequest(String courseId) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" return logic.getInstructorForEmail(courseId, moderatedPerson);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" return logic.getInstructorForEmail(courseId, previewAsPerson);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" return getPossiblyUnregisteredInstructor(courseId);"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":224,"author":{"gitId":"-"},"content":" * Gets the instructor involved in the submission process."},{"lineNumber":225,"author":{"gitId":"-"},"content":" */"},{"lineNumber":226,"author":{"gitId":"-"},"content":" Instructor getSqlInstructorOfCourseFromRequest(String courseId) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" return sqlLogic.getInstructorForEmail(courseId, moderatedPerson);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" return sqlLogic.getInstructorForEmail(courseId, previewAsPerson);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" return getPossiblyUnregisteredSqlInstructor(courseId);"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * Checks the access control for instructor feedback submission."},{"lineNumber":241,"author":{"gitId":"-"},"content":" */"},{"lineNumber":242,"author":{"gitId":"-"},"content":" void checkAccessControlForInstructorFeedbackSubmission("},{"lineNumber":243,"author":{"gitId":"-"},"content":" InstructorAttributes instructor, FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent instructor entity\");"},{"lineNumber":246,"author":{"gitId":"-"},"content":" }"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":249,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":253,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(logic.getInstructorForGoogleId(feedbackSession.getCourseId(), userInfo.getId()),"},{"lineNumber":254,"author":{"gitId":"-"},"content":" feedbackSession, Const.InstructorPermissions.CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS);"},{"lineNumber":255,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":256,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, true);"},{"lineNumber":257,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" gateKeeper.verifySessionSubmissionPrivilegeForInstructor(feedbackSession, instructor);"},{"lineNumber":259,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(instructor.getGoogleId());"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":" }"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":264,"author":{"gitId":"-"},"content":" * Checks the access control for instructor feedback submission."},{"lineNumber":265,"author":{"gitId":"-"},"content":" */"},{"lineNumber":266,"author":{"gitId":"-"},"content":" void checkAccessControlForInstructorFeedbackSubmission("},{"lineNumber":267,"author":{"gitId":"-"},"content":" Instructor instructor, FeedbackSession feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":268,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent instructor entity\");"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(moderatedPerson)) {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":277,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":278,"author":{"gitId":"-"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()),"},{"lineNumber":279,"author":{"gitId":"-"},"content":" feedbackSession, Const.InstructorPermissions.CAN_MODIFY_SESSION_COMMENT_IN_SECTIONS);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" } else if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":283,"author":{"gitId":"-"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()),"},{"lineNumber":284,"author":{"gitId":"-"},"content":" feedbackSession, Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":285,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" gateKeeper.verifySessionSubmissionPrivilegeForInstructor(feedbackSession, instructor);"},{"lineNumber":287,"author":{"gitId":"-"},"content":" if (instructor.getAccount() !\u003d null) {"},{"lineNumber":288,"author":{"gitId":"-"},"content":" if (userInfo \u003d\u003d null) {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" // Instructor is associated to an account; even if registration key is passed, do not allow access"},{"lineNumber":290,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Login is required to access this feedback session\");"},{"lineNumber":291,"author":{"gitId":"-"},"content":" } else if (!userInfo.id.equals(instructor.getAccount().getGoogleId())) {"},{"lineNumber":292,"author":{"gitId":"-"},"content":" // Logged in instructor is not the same as the instructor registered for the given key,"},{"lineNumber":293,"author":{"gitId":"-"},"content":" // do not allow access"},{"lineNumber":294,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"You are not authorized to access this feedback session\");"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":" }"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":301,"author":{"gitId":"-"},"content":" * Checks the access control for instructor feedback result."},{"lineNumber":302,"author":{"gitId":"-"},"content":" */"},{"lineNumber":303,"author":{"gitId":"-"},"content":" void checkAccessControlForInstructorFeedbackResult("},{"lineNumber":304,"author":{"gitId":"-"},"content":" InstructorAttributes instructor, FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":306,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent instructor entity\");"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, feedbackSession,"},{"lineNumber":313,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_VIEW_SESSION_IN_SECTIONS);"},{"lineNumber":314,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(instructor.getGoogleId());"},{"lineNumber":315,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, true);"},{"lineNumber":317,"author":{"gitId":"-"},"content":" }"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":321,"author":{"gitId":"-"},"content":" * Checks the access control for instructor feedback result."},{"lineNumber":322,"author":{"gitId":"-"},"content":" */"},{"lineNumber":323,"author":{"gitId":"-"},"content":" void checkAccessControlForInstructorFeedbackResult("},{"lineNumber":324,"author":{"gitId":"-"},"content":" Instructor instructor, FeedbackSession feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":325,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":326,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Trying to access system using a non-existent instructor entity\");"},{"lineNumber":327,"author":{"gitId":"-"},"content":" }"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":330,"author":{"gitId":"-"},"content":""},{"lineNumber":331,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, feedbackSession,"},{"lineNumber":333,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_VIEW_SESSION_IN_SECTIONS);"},{"lineNumber":334,"author":{"gitId":"-"},"content":" verifyMatchingGoogleId(instructor.getGoogleId());"},{"lineNumber":335,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" checkAccessControlForPreview(feedbackSession, true);"},{"lineNumber":337,"author":{"gitId":"-"},"content":" }"},{"lineNumber":338,"author":{"gitId":"-"},"content":" }"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":" private void verifyMatchingGoogleId(String googleId) throws UnauthorizedAccessException {"},{"lineNumber":341,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(googleId)) {"},{"lineNumber":342,"author":{"gitId":"-"},"content":" if (userInfo \u003d\u003d null) {"},{"lineNumber":343,"author":{"gitId":"-"},"content":" // Student/Instructor is associated to a google ID; even if registration key is passed, do not allow access"},{"lineNumber":344,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Login is required to access this feedback session\");"},{"lineNumber":345,"author":{"gitId":"-"},"content":" } else if (!userInfo.id.equals(googleId)) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" // Logged in student/instructor is not the same as the student/instructor registered for the given key,"},{"lineNumber":347,"author":{"gitId":"-"},"content":" // do not allow access"},{"lineNumber":348,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"You are not authorized to access this feedback session\");"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" private void checkAccessControlForPreview(FeedbackSessionAttributes feedbackSession, boolean isInstructor)"},{"lineNumber":354,"author":{"gitId":"-"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":356,"author":{"gitId":"-"},"content":" if (isInstructor) {"},{"lineNumber":357,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":358,"author":{"gitId":"-"},"content":" logic.getInstructorForGoogleId(feedbackSession.getCourseId(), userInfo.getId()), feedbackSession,"},{"lineNumber":359,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":360,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":361,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":362,"author":{"gitId":"-"},"content":" logic.getInstructorForGoogleId(feedbackSession.getCourseId(), userInfo.getId()), feedbackSession,"},{"lineNumber":363,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":" }"},{"lineNumber":366,"author":{"gitId":"-"},"content":""},{"lineNumber":367,"author":{"gitId":"xenosf"},"content":" private void checkAccessControlForPreview(FeedbackSession feedbackSession, boolean isInstructor)"},{"lineNumber":368,"author":{"gitId":"xenosf"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":369,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":370,"author":{"gitId":"xenosf"},"content":" if (isInstructor) {"},{"lineNumber":371,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":372,"author":{"gitId":"xenosf"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()), feedbackSession,"},{"lineNumber":373,"author":{"gitId":"xenosf"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":374,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":375,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":376,"author":{"gitId":"xenosf"},"content":" sqlLogic.getInstructorByGoogleId(feedbackSession.getCourse().getId(), userInfo.getId()), feedbackSession,"},{"lineNumber":377,"author":{"gitId":"xenosf"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":378,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":379,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":380,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":382,"author":{"gitId":"-"},"content":" * Verifies that it is not a preview request."},{"lineNumber":383,"author":{"gitId":"-"},"content":" */"},{"lineNumber":384,"author":{"gitId":"-"},"content":" void verifyNotPreview() throws UnauthorizedAccessException {"},{"lineNumber":385,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":386,"author":{"gitId":"-"},"content":" if (!StringHelper.isEmpty(previewAsPerson)) {"},{"lineNumber":387,"author":{"gitId":"-"},"content":" // should not view response under preview mode"},{"lineNumber":388,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"You are not allowed to see responses when previewing\", true);"},{"lineNumber":389,"author":{"gitId":"-"},"content":" }"},{"lineNumber":390,"author":{"gitId":"-"},"content":" }"},{"lineNumber":391,"author":{"gitId":"-"},"content":""},{"lineNumber":392,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":393,"author":{"gitId":"-"},"content":" * Verifies that the session is open for submission."},{"lineNumber":394,"author":{"gitId":"-"},"content":" *"},{"lineNumber":395,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf it is moderation request, omit the check."},{"lineNumber":396,"author":{"gitId":"-"},"content":" */"},{"lineNumber":397,"author":{"gitId":"-"},"content":" void verifySessionOpenExceptForModeration(FeedbackSessionAttributes feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":398,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":399,"author":{"gitId":"-"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(moderatedPerson) \u0026\u0026 !(feedbackSession.isOpened() || feedbackSession.isInGracePeriod())) {"},{"lineNumber":401,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"The feedback session is not available for submission\", true);"},{"lineNumber":402,"author":{"gitId":"-"},"content":" }"},{"lineNumber":403,"author":{"gitId":"-"},"content":" }"},{"lineNumber":404,"author":{"gitId":"-"},"content":""},{"lineNumber":405,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":406,"author":{"gitId":"-"},"content":" * Verifies that the session is open for submission."},{"lineNumber":407,"author":{"gitId":"-"},"content":" *"},{"lineNumber":408,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf it is moderation request, omit the check."},{"lineNumber":409,"author":{"gitId":"-"},"content":" */"},{"lineNumber":410,"author":{"gitId":"-"},"content":" void verifySessionOpenExceptForModeration(FeedbackSession feedbackSession) throws UnauthorizedAccessException {"},{"lineNumber":411,"author":{"gitId":"-"},"content":" String moderatedPerson \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON);"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":" if (StringHelper.isEmpty(moderatedPerson) \u0026\u0026 !(feedbackSession.isOpened() || feedbackSession.isInGracePeriod())) {"},{"lineNumber":414,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"The feedback session is not available for submission\", true);"},{"lineNumber":415,"author":{"gitId":"-"},"content":" }"},{"lineNumber":416,"author":{"gitId":"-"},"content":" }"},{"lineNumber":417,"author":{"gitId":"-"},"content":""},{"lineNumber":418,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":419,"author":{"gitId":"-"},"content":" * Gets the section of a recipient."},{"lineNumber":420,"author":{"gitId":"-"},"content":" */"},{"lineNumber":421,"author":{"gitId":"-"},"content":" Section getRecipientSection("},{"lineNumber":422,"author":{"gitId":"-"},"content":" String courseId, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":423,"author":{"gitId":"-"},"content":" String recipientIdentifier) {"},{"lineNumber":424,"author":{"gitId":"-"},"content":""},{"lineNumber":425,"author":{"gitId":"-"},"content":" switch (recipientType) {"},{"lineNumber":426,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":427,"author":{"gitId":"-"},"content":" switch (giverType) {"},{"lineNumber":428,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":429,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":430,"author":{"gitId":"-"},"content":" return Const.DEFAULT_SQL_SECTION;"},{"lineNumber":431,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":432,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":433,"author":{"gitId":"-"},"content":" Section section \u003d sqlLogic.getSectionByCourseIdAndTeam(courseId, recipientIdentifier);"},{"lineNumber":434,"author":{"gitId":"-"},"content":" return section \u003d\u003d null ? Const.DEFAULT_SQL_SECTION : section;"},{"lineNumber":435,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":436,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":437,"author":{"gitId":"-"},"content":" Student student \u003d sqlLogic.getStudentForEmail(courseId, recipientIdentifier);"},{"lineNumber":438,"author":{"gitId":"-"},"content":" return student \u003d\u003d null ? Const.DEFAULT_SQL_SECTION : student.getSection();"},{"lineNumber":439,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":440,"author":{"gitId":"-"},"content":" assert false : \"Invalid giver type \" + giverType + \" for recipient type \" + recipientType;"},{"lineNumber":441,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":442,"author":{"gitId":"-"},"content":" }"},{"lineNumber":443,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":444,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":445,"author":{"gitId":"-"},"content":" return Const.DEFAULT_SQL_SECTION;"},{"lineNumber":446,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":447,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":448,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":449,"author":{"gitId":"-"},"content":" case OWN_TEAM:"},{"lineNumber":450,"author":{"gitId":"-"},"content":" Section section \u003d sqlLogic.getSectionByCourseIdAndTeam(courseId, recipientIdentifier);"},{"lineNumber":451,"author":{"gitId":"-"},"content":" return section \u003d\u003d null ? Const.DEFAULT_SQL_SECTION : section;"},{"lineNumber":452,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":453,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":454,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":455,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":456,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":457,"author":{"gitId":"-"},"content":" Student student \u003d sqlLogic.getStudentForEmail(courseId, recipientIdentifier);"},{"lineNumber":458,"author":{"gitId":"-"},"content":" return student \u003d\u003d null ? Const.DEFAULT_SQL_SECTION : student.getSection();"},{"lineNumber":459,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":460,"author":{"gitId":"-"},"content":" assert false : \"Unknown recipient type \" + recipientType;"},{"lineNumber":461,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":462,"author":{"gitId":"-"},"content":" }"},{"lineNumber":463,"author":{"gitId":"-"},"content":" }"},{"lineNumber":464,"author":{"gitId":"-"},"content":""},{"lineNumber":465,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":466,"author":{"gitId":"-"},"content":" * Gets the section of a recipient."},{"lineNumber":467,"author":{"gitId":"-"},"content":" */"},{"lineNumber":468,"author":{"gitId":"-"},"content":" String getDatastoreRecipientSection("},{"lineNumber":469,"author":{"gitId":"-"},"content":" String courseId, FeedbackParticipantType giverType, FeedbackParticipantType recipientType,"},{"lineNumber":470,"author":{"gitId":"-"},"content":" String recipientIdentifier) {"},{"lineNumber":471,"author":{"gitId":"-"},"content":" switch (recipientType) {"},{"lineNumber":472,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":473,"author":{"gitId":"-"},"content":" switch (giverType) {"},{"lineNumber":474,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":475,"author":{"gitId":"-"},"content":" case SELF:"},{"lineNumber":476,"author":{"gitId":"-"},"content":" return Const.DEFAULT_SECTION;"},{"lineNumber":477,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":478,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":479,"author":{"gitId":"-"},"content":" return logic.getSectionForTeam(courseId, recipientIdentifier);"},{"lineNumber":480,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":481,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":482,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d logic.getStudentForEmail(courseId, recipientIdentifier);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" return student \u003d\u003d null ? Const.DEFAULT_SECTION : student.getSection();"},{"lineNumber":484,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":485,"author":{"gitId":"-"},"content":" assert false : \"Invalid giver type \" + giverType + \" for recipient type \" + recipientType;"},{"lineNumber":486,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":488,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":489,"author":{"gitId":"-"},"content":" case NONE:"},{"lineNumber":490,"author":{"gitId":"-"},"content":" return Const.DEFAULT_SECTION;"},{"lineNumber":491,"author":{"gitId":"-"},"content":" case TEAMS:"},{"lineNumber":492,"author":{"gitId":"-"},"content":" case TEAMS_EXCLUDING_SELF:"},{"lineNumber":493,"author":{"gitId":"-"},"content":" case TEAMS_IN_SAME_SECTION:"},{"lineNumber":494,"author":{"gitId":"-"},"content":" case OWN_TEAM:"},{"lineNumber":495,"author":{"gitId":"-"},"content":" return logic.getSectionForTeam(courseId, recipientIdentifier);"},{"lineNumber":496,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":497,"author":{"gitId":"-"},"content":" case STUDENTS_EXCLUDING_SELF:"},{"lineNumber":498,"author":{"gitId":"-"},"content":" case STUDENTS_IN_SAME_SECTION:"},{"lineNumber":499,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS:"},{"lineNumber":500,"author":{"gitId":"-"},"content":" case OWN_TEAM_MEMBERS_INCLUDING_SELF:"},{"lineNumber":501,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d logic.getStudentForEmail(courseId, recipientIdentifier);"},{"lineNumber":502,"author":{"gitId":"-"},"content":" return student \u003d\u003d null ? Const.DEFAULT_SECTION : student.getSection();"},{"lineNumber":503,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":504,"author":{"gitId":"-"},"content":" assert false : \"Unknown recipient type \" + recipientType;"},{"lineNumber":505,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":506,"author":{"gitId":"-"},"content":" }"},{"lineNumber":507,"author":{"gitId":"-"},"content":" }"},{"lineNumber":508,"author":{"gitId":"-"},"content":""},{"lineNumber":509,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":33,"-":476}},{"path":"src/main/java/teammates/ui/webapi/CreateFeedbackQuestionAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":8,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackQuestionData;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackQuestionCreateRequest;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Creates a feedback question."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class CreateFeedbackQuestionAction extends Action {"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":30,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" InstructorAttributes instructorDetailForCourse \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!isCourseMigrated(courseId)) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructorDetailForCourse,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" getNonNullFeedbackSession(feedbackSessionName, courseId),"},{"lineNumber":35,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" // TODO: Remove sql from variable name after migration"},{"lineNumber":40,"author":{"gitId":"-"},"content":" Instructor sqlInstructorDetailForCourse \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":41,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(sqlInstructorDetailForCourse,"},{"lineNumber":42,"author":{"gitId":"-"},"content":" getNonNullSqlFeedbackSession(feedbackSessionName, courseId),"},{"lineNumber":43,"author":{"gitId":"-"},"content":" Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" FeedbackQuestionCreateRequest request \u003d getAndValidateRequestBody(FeedbackQuestionCreateRequest.class);"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (!isCourseMigrated(courseId)) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return executeWithDataStore(courseId, feedbackSessionName, request);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion \u003d FeedbackQuestion.makeQuestion("},{"lineNumber":57,"author":{"gitId":"-"},"content":" getNonNullSqlFeedbackSession(feedbackSessionName, courseId),"},{"lineNumber":58,"author":{"gitId":"-"},"content":" request.getQuestionNumber(),"},{"lineNumber":59,"author":{"gitId":"-"},"content":" request.getQuestionDescription(),"},{"lineNumber":60,"author":{"gitId":"-"},"content":" request.getGiverType(),"},{"lineNumber":61,"author":{"gitId":"-"},"content":" request.getRecipientType(),"},{"lineNumber":62,"author":{"gitId":"-"},"content":" request.getNumberOfEntitiesToGiveFeedbackTo(),"},{"lineNumber":63,"author":{"gitId":"-"},"content":" request.getShowResponsesTo(),"},{"lineNumber":64,"author":{"gitId":"-"},"content":" request.getShowGiverNameTo(),"},{"lineNumber":65,"author":{"gitId":"-"},"content":" request.getShowRecipientNameTo(),"},{"lineNumber":66,"author":{"gitId":"-"},"content":" request.getQuestionDetails()"},{"lineNumber":67,"author":{"gitId":"-"},"content":" );"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" // validate questions (giver \u0026 recipient)"},{"lineNumber":71,"author":{"gitId":"-"},"content":" String err \u003d feedbackQuestion.getQuestionDetailsCopy().validateGiverRecipientVisibility(feedbackQuestion);"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" if (!err.isEmpty()) {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(err);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":" // validate questions (question details)"},{"lineNumber":77,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d feedbackQuestion.getQuestionDetailsCopy();"},{"lineNumber":78,"author":{"gitId":"-"},"content":" List\u003cString\u003e questionDetailsErrors \u003d questionDetails.validateQuestionDetails();"},{"lineNumber":79,"author":{"gitId":"-"},"content":" if (!questionDetailsErrors.isEmpty()) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(questionDetailsErrors.toString());"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":" feedbackQuestion \u003d sqlLogic.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return new JsonResult(new FeedbackQuestionData(feedbackQuestion));"},{"lineNumber":84,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException ex) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(ex);"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":87,"author":{"gitId":"marquestye"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" private JsonResult executeWithDataStore(String courseId, String feedbackSessionName,"},{"lineNumber":92,"author":{"gitId":"-"},"content":" FeedbackQuestionCreateRequest request) throws InvalidHttpRequestBodyException {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes attributes \u003d FeedbackQuestionAttributes.builder()"},{"lineNumber":94,"author":{"gitId":"-"},"content":" .withCourseId(courseId)"},{"lineNumber":95,"author":{"gitId":"-"},"content":" .withFeedbackSessionName(feedbackSessionName)"},{"lineNumber":96,"author":{"gitId":"-"},"content":" .withGiverType(request.getGiverType())"},{"lineNumber":97,"author":{"gitId":"-"},"content":" .withRecipientType(request.getRecipientType())"},{"lineNumber":98,"author":{"gitId":"-"},"content":" .withQuestionNumber(request.getQuestionNumber())"},{"lineNumber":99,"author":{"gitId":"-"},"content":" .withNumberOfEntitiesToGiveFeedbackTo(request.getNumberOfEntitiesToGiveFeedbackTo())"},{"lineNumber":100,"author":{"gitId":"-"},"content":" .withShowResponsesTo(request.getShowResponsesTo())"},{"lineNumber":101,"author":{"gitId":"-"},"content":" .withShowGiverNameTo(request.getShowGiverNameTo())"},{"lineNumber":102,"author":{"gitId":"-"},"content":" .withShowRecipientNameTo(request.getShowRecipientNameTo())"},{"lineNumber":103,"author":{"gitId":"-"},"content":" .withQuestionDetails(request.getQuestionDetails())"},{"lineNumber":104,"author":{"gitId":"-"},"content":" .withQuestionDescription(request.getQuestionDescription())"},{"lineNumber":105,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" // validate questions (giver \u0026 recipient)"},{"lineNumber":108,"author":{"gitId":"-"},"content":" String err \u003d attributes.getQuestionDetailsCopy().validateGiverRecipientVisibility(attributes);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" if (!err.isEmpty()) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(err);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":" // validate questions (question details)"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails questionDetails \u003d attributes.getQuestionDetailsCopy();"},{"lineNumber":114,"author":{"gitId":"-"},"content":" List\u003cString\u003e questionDetailsErrors \u003d questionDetails.validateQuestionDetails();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" if (!questionDetailsErrors.isEmpty()) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(String.join(\"\\n\", questionDetailsErrors));"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" attributes \u003d logic.createFeedbackQuestion(attributes);"},{"lineNumber":121,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" return new JsonResult(new FeedbackQuestionData(attributes));"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":4,"-":124}},{"path":"src/main/java/teammates/ui/webapi/CreateFeedbackSessionAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPermissionSet;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionData;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.ui.request.FeedbackSessionCreateRequest;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Create a feedback session."},{"lineNumber":27,"author":{"gitId":"-"},"content":" */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"public class CreateFeedbackSessionAction extends Action {"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":33,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":43,"author":{"gitId":"-"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, course, Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":48,"author":{"gitId":"-"},"content":" CourseAttributes course \u003d logic.getCourse(courseId);"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, course, Const.InstructorPermissions.CAN_MODIFY_SESSION);"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" FeedbackSessionCreateRequest createRequest \u003d"},{"lineNumber":58,"author":{"gitId":"-"},"content":" getAndValidateRequestBody(FeedbackSessionCreateRequest.class);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d SanitizationHelper.sanitizeTitle(createRequest.getFeedbackSessionName());"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" if (course \u003d\u003d null) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Failed to find course with the given course id.\");"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Failed to find instructor with the given courseId and googleId.\");"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" String timeZone \u003d course.getTimeZone();"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" Instant startTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":74,"author":{"gitId":"-"},"content":" createRequest.getSubmissionStartTime(), timeZone, true);"},{"lineNumber":75,"author":{"gitId":"-"},"content":" String startTimeError \u003d FieldValidator.getInvalidityInfoForNewStartTime(startTime, timeZone);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" if (!startTimeError.isEmpty()) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid submission opening time: \" + startTimeError);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Instant endTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":80,"author":{"gitId":"-"},"content":" createRequest.getSubmissionEndTime(), timeZone, true);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" String endTimeError \u003d FieldValidator.getInvalidityInfoForNewEndTime(endTime, timeZone);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (!endTimeError.isEmpty()) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid submission closing time: \" + endTimeError);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Instant sessionVisibleTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":86,"author":{"gitId":"-"},"content":" createRequest.getSessionVisibleFromTime(), timeZone, true);"},{"lineNumber":87,"author":{"gitId":"-"},"content":" String visibilityStartAndSessionStartTimeError \u003d"},{"lineNumber":88,"author":{"gitId":"-"},"content":" FieldValidator.getInvalidityInfoForTimeForNewVisibilityStart(sessionVisibleTime, startTime);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (!visibilityStartAndSessionStartTimeError.isEmpty()) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid session visible time: \""},{"lineNumber":91,"author":{"gitId":"-"},"content":" + visibilityStartAndSessionStartTimeError);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":" Instant resultsVisibleTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":94,"author":{"gitId":"-"},"content":" createRequest.getResultsVisibleFromTime(), timeZone, true);"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" FeedbackSession feedbackSession \u003d new FeedbackSession("},{"lineNumber":97,"author":{"gitId":"-"},"content":" feedbackSessionName,"},{"lineNumber":98,"author":{"gitId":"-"},"content":" course,"},{"lineNumber":99,"author":{"gitId":"-"},"content":" instructor.getEmail(),"},{"lineNumber":100,"author":{"gitId":"-"},"content":" createRequest.getInstructions(),"},{"lineNumber":101,"author":{"gitId":"-"},"content":" startTime,"},{"lineNumber":102,"author":{"gitId":"-"},"content":" endTime,"},{"lineNumber":103,"author":{"gitId":"-"},"content":" sessionVisibleTime,"},{"lineNumber":104,"author":{"gitId":"-"},"content":" resultsVisibleTime,"},{"lineNumber":105,"author":{"gitId":"-"},"content":" createRequest.getGracePeriod(),"},{"lineNumber":106,"author":{"gitId":"-"},"content":" true,"},{"lineNumber":107,"author":{"gitId":"-"},"content":" createRequest.isClosingEmailEnabled(),"},{"lineNumber":108,"author":{"gitId":"-"},"content":" createRequest.isPublishedEmailEnabled()"},{"lineNumber":109,"author":{"gitId":"-"},"content":" );"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" feedbackSession \u003d sqlLogic.createFeedbackSession(feedbackSession);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(\"A session named \" + feedbackSessionName"},{"lineNumber":115,"author":{"gitId":"-"},"content":" + \" exists already in the course \" + course.getName()"},{"lineNumber":116,"author":{"gitId":"-"},"content":" + \" (Course ID: \" + courseId + \")\", e);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" if (createRequest.getToCopyCourseId() !\u003d null) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" createCopiedFeedbackQuestions(createRequest.getToCopyCourseId(), courseId,"},{"lineNumber":123,"author":{"gitId":"-"},"content":" feedbackSessionName, createRequest.getToCopySessionName());"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":" FeedbackSessionData output \u003d new FeedbackSessionData(feedbackSession);"},{"lineNumber":126,"author":{"gitId":"-"},"content":" InstructorPermissionSet privilege \u003d constructInstructorPrivileges(instructor, feedbackSessionName);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" output.setPrivileges(privilege);"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" return new JsonResult(output);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" CourseAttributes course \u003d logic.getCourse(courseId);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" String timeZone \u003d course.getTimeZone();"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":" Instant startTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":135,"author":{"gitId":"-"},"content":" createRequest.getSubmissionStartTime(), timeZone, true);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" String startTimeError \u003d FieldValidator.getInvalidityInfoForNewStartTime(startTime, timeZone);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" if (!startTimeError.isEmpty()) {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid submission opening time: \" + startTimeError);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }"},{"lineNumber":140,"author":{"gitId":"-"},"content":" Instant endTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":141,"author":{"gitId":"-"},"content":" createRequest.getSubmissionEndTime(), timeZone, true);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" String endTimeError \u003d FieldValidator.getInvalidityInfoForNewEndTime(endTime, timeZone);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" if (!endTimeError.isEmpty()) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid submission closing time: \" + endTimeError);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":" Instant sessionVisibleTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":147,"author":{"gitId":"-"},"content":" createRequest.getSessionVisibleFromTime(), timeZone, true);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" String visibilityStartAndSessionStartTimeError \u003d"},{"lineNumber":149,"author":{"gitId":"-"},"content":" FieldValidator.getInvalidityInfoForTimeForNewVisibilityStart(sessionVisibleTime, startTime);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" if (!visibilityStartAndSessionStartTimeError.isEmpty()) {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(\"Invalid session visible time: \""},{"lineNumber":152,"author":{"gitId":"-"},"content":" + visibilityStartAndSessionStartTimeError);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":" Instant resultsVisibleTime \u003d TimeHelper.getMidnightAdjustedInstantBasedOnZone("},{"lineNumber":155,"author":{"gitId":"-"},"content":" createRequest.getResultsVisibleFromTime(), timeZone, true);"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes fs \u003d"},{"lineNumber":160,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes"},{"lineNumber":161,"author":{"gitId":"-"},"content":" .builder(feedbackSessionName, course.getId())"},{"lineNumber":162,"author":{"gitId":"-"},"content":" .withCreatorEmail(instructor.getEmail())"},{"lineNumber":163,"author":{"gitId":"-"},"content":" .withTimeZone(course.getTimeZone())"},{"lineNumber":164,"author":{"gitId":"-"},"content":" .withInstructions(createRequest.getInstructions())"},{"lineNumber":165,"author":{"gitId":"-"},"content":" .withStartTime(startTime)"},{"lineNumber":166,"author":{"gitId":"-"},"content":" .withEndTime(endTime)"},{"lineNumber":167,"author":{"gitId":"-"},"content":" .withGracePeriod(createRequest.getGracePeriod())"},{"lineNumber":168,"author":{"gitId":"-"},"content":" .withSessionVisibleFromTime(sessionVisibleTime)"},{"lineNumber":169,"author":{"gitId":"-"},"content":" .withResultsVisibleFromTime(resultsVisibleTime)"},{"lineNumber":170,"author":{"gitId":"-"},"content":" .withIsClosingEmailEnabled(createRequest.isClosingEmailEnabled())"},{"lineNumber":171,"author":{"gitId":"-"},"content":" .withIsPublishedEmailEnabled(createRequest.isPublishedEmailEnabled())"},{"lineNumber":172,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":173,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" logic.createFeedbackSession(fs);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(\"A session named \" + feedbackSessionName"},{"lineNumber":177,"author":{"gitId":"-"},"content":" + \" exists already in the course \" + course.getName()"},{"lineNumber":178,"author":{"gitId":"-"},"content":" + \" (Course ID: \" + courseId + \")\", e);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" if (createRequest.getToCopyCourseId() !\u003d null) {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" createFeedbackQuestions(createRequest.getToCopyCourseId(), courseId, feedbackSessionName,"},{"lineNumber":185,"author":{"gitId":"-"},"content":" createRequest.getToCopySessionName());"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":" fs \u003d getNonNullFeedbackSession(fs.getFeedbackSessionName(), fs.getCourseId());"},{"lineNumber":188,"author":{"gitId":"-"},"content":" FeedbackSessionData output \u003d new FeedbackSessionData(fs);"},{"lineNumber":189,"author":{"gitId":"-"},"content":" InstructorPermissionSet privilege \u003d constructInstructorPrivileges(instructor, feedbackSessionName);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" output.setPrivileges(privilege);"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" return new JsonResult(output);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":" private void createCopiedFeedbackQuestions(String oldCourseId, String newCourseId,"},{"lineNumber":197,"author":{"gitId":"-"},"content":" String newFeedbackSessionName, String oldFeedbackSessionName) {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" FeedbackSession oldFeedbackSession \u003d sqlLogic.getFeedbackSession(oldFeedbackSessionName, oldCourseId);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" FeedbackSession newFeedbackSession \u003d sqlLogic.getFeedbackSession(newFeedbackSessionName, newCourseId);"},{"lineNumber":200,"author":{"gitId":"-"},"content":" sqlLogic.getFeedbackQuestionsForSession(oldFeedbackSession).forEach(question -\u003e {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" FeedbackQuestion feedbackQuestion \u003d question.makeDeepCopy(newFeedbackSession);"},{"lineNumber":202,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" sqlLogic.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":204,"author":{"gitId":"marquestye"},"content":" } catch (InvalidParametersException | EntityAlreadyExistsException e) {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" log.severe(\"Error when copying feedback question: \" + e.getMessage());"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":" });"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":" private void createFeedbackQuestions(String copyCourseId, String newCourseId, String feedbackSessionName,"},{"lineNumber":211,"author":{"gitId":"-"},"content":" String oldSessionName) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" logic.getFeedbackQuestionsForSession(oldSessionName, copyCourseId).forEach(question -\u003e {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes attributes \u003d FeedbackQuestionAttributes.builder()"},{"lineNumber":214,"author":{"gitId":"-"},"content":" .withCourseId(newCourseId)"},{"lineNumber":215,"author":{"gitId":"-"},"content":" .withFeedbackSessionName(feedbackSessionName)"},{"lineNumber":216,"author":{"gitId":"-"},"content":" .withGiverType(question.getGiverType())"},{"lineNumber":217,"author":{"gitId":"-"},"content":" .withRecipientType(question.getRecipientType())"},{"lineNumber":218,"author":{"gitId":"-"},"content":" .withQuestionNumber(question.getQuestionNumber())"},{"lineNumber":219,"author":{"gitId":"-"},"content":" .withNumberOfEntitiesToGiveFeedbackTo(question.getNumberOfEntitiesToGiveFeedbackTo())"},{"lineNumber":220,"author":{"gitId":"-"},"content":" .withShowResponsesTo(question.getShowResponsesTo())"},{"lineNumber":221,"author":{"gitId":"-"},"content":" .withShowGiverNameTo(question.getShowGiverNameTo())"},{"lineNumber":222,"author":{"gitId":"-"},"content":" .withShowRecipientNameTo(question.getShowRecipientNameTo())"},{"lineNumber":223,"author":{"gitId":"-"},"content":" .withQuestionDetails(question.getQuestionDetails())"},{"lineNumber":224,"author":{"gitId":"-"},"content":" .withQuestionDescription(question.getQuestionDescription())"},{"lineNumber":225,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" logic.createFeedbackQuestion(attributes);"},{"lineNumber":229,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" log.severe(\"Error when copying feedback question: \" + e.getMessage());"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":" });"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }"},{"lineNumber":234,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":1,"-":233}},{"path":"src/main/java/teammates/ui/webapi/CreateInstructorAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.InstructorPermissionRole;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPrivileges;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.SanitizationHelper;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.request.InstructorCreateRequest;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Action: adds another instructor to a course that already exists."},{"lineNumber":18,"author":{"gitId":"-"},"content":" */"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"public class CreateInstructorAction extends Action {"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":22,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":27,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" if (userInfo.isAdmin) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!userInfo.isInstructor) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Instructor privilege is required to access this resource.\");"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.id);"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" instructor, sqlLogic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR);"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" } else {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.id);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":45,"author":{"gitId":"-"},"content":" instructor, logic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_INSTRUCTOR);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" InstructorCreateRequest instructorRequest \u003d getAndValidateRequestBody(InstructorCreateRequest.class);"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" return executeWithSql(courseId, instructorRequest);"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" } else {"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" return executeWithDataStore(courseId, instructorRequest);"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" throw new InvalidOperationException("},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"An instructor with the same email address already exists in the course.\", e);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" /**"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" * Executes the action using SQL storage."},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" *"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" * @param courseId Id of the course the instructor is being added"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" * to."},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":" * @param instructorRequest Request body containing the instructor\u0027s info."},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" * @return The Json result of the created Instructor"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" * @throws InvalidParametersException If a parameter is invalid"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" * @throws EntityAlreadyExistsException If there is a conflict at the email"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" * field"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" private JsonResult executeWithSql(String courseId, InstructorCreateRequest instructorRequest)"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" Instructor instructorToAdd \u003d createInstructorWithBasicAttributesSql(courseId,"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" SanitizationHelper.sanitizeName(instructorRequest.getName()),"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" SanitizationHelper.sanitizeEmail(instructorRequest.getEmail()), instructorRequest.getRoleName(),"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" instructorRequest.getIsDisplayedToStudent(),"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" SanitizationHelper.sanitizeName(instructorRequest.getDisplayName()));"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" Instructor createdInstructor \u003d sqlLogic.createInstructor(instructorToAdd);"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" taskQueuer.scheduleCourseRegistrationInviteToInstructor("},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":" this.userInfo.id, instructorToAdd.getEmail(), courseId, false);"},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" taskQueuer.scheduleInstructorForSearchIndexing(createdInstructor.getCourseId(), createdInstructor.getEmail());"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" return new JsonResult(new InstructorData(createdInstructor));"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" * Executes the action using Datastore storage."},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" *"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" * @param courseId Id of the course the instructor is being added"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":" * to."},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" * @param instructorRequest Request body containing the instructor\u0027s info."},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" * @return The Json result of the created Instructor"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" * @throws InvalidParametersException If a parameter is invalid"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" * @throws EntityAlreadyExistsException If there is a conflict at the email"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":" * field"},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" private JsonResult executeWithDataStore(String courseId, InstructorCreateRequest instructorRequest)"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" InstructorAttributes instructorToAdd \u003d createInstructorWithBasicAttributes(courseId,"},{"lineNumber":111,"author":{"gitId":"-"},"content":" instructorRequest.getName(), instructorRequest.getEmail(), instructorRequest.getRoleName(),"},{"lineNumber":112,"author":{"gitId":"-"},"content":" instructorRequest.getIsDisplayedToStudent(), instructorRequest.getDisplayName());"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" InstructorAttributes createdInstructor \u003d logic.createInstructor(instructorToAdd);"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" taskQueuer.scheduleCourseRegistrationInviteToInstructor("},{"lineNumber":117,"author":{"gitId":"-"},"content":" userInfo.id, instructorToAdd.getEmail(), instructorToAdd.getCourseId(), false);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" taskQueuer.scheduleInstructorForSearchIndexing(createdInstructor.getCourseId(), createdInstructor.getEmail());"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" return new JsonResult(new InstructorData(createdInstructor));"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" /**"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" * Creates a new instructor with basic information."},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" * This consists of everything apart from custom privileges."},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" *"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" * @param courseId Id of the course the instructor is being added"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" * to."},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" * @param instructorName Name of the instructor."},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" * @param instructorEmail Email of the instructor."},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" * @param instructorRole Role of the instructor."},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" * @param isDisplayedToStudents Whether the instructor should be visible to"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":" * students."},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" * @param displayedName Name to be visible to students."},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":" * Should not be {@code null} even if"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":" * {@code isDisplayedToStudents} is false."},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":" * @return An instructor with basic info, excluding custom privileges"},{"lineNumber":138,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":139,"author":{"gitId":"mingyuanc"},"content":" private Instructor createInstructorWithBasicAttributesSql(String courseId, String instructorName,"},{"lineNumber":140,"author":{"gitId":"mingyuanc"},"content":" String instructorEmail, String instructorRole,"},{"lineNumber":141,"author":{"gitId":"mingyuanc"},"content":" boolean isDisplayedToStudents, String displayedName) {"},{"lineNumber":142,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":143,"author":{"gitId":"mingyuanc"},"content":" String instrName \u003d SanitizationHelper.sanitizeName(instructorName);"},{"lineNumber":144,"author":{"gitId":"mingyuanc"},"content":" String instrEmail \u003d SanitizationHelper.sanitizeEmail(instructorEmail);"},{"lineNumber":145,"author":{"gitId":"mingyuanc"},"content":" String instrRole \u003d SanitizationHelper.sanitizeName(instructorRole);"},{"lineNumber":146,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":147,"author":{"gitId":"mingyuanc"},"content":" String instrDisplayedName \u003d displayedName;"},{"lineNumber":148,"author":{"gitId":"mingyuanc"},"content":" if (displayedName \u003d\u003d null || displayedName.isEmpty()) {"},{"lineNumber":149,"author":{"gitId":"mingyuanc"},"content":" instrDisplayedName \u003d Const.DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR;"},{"lineNumber":150,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":151,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":152,"author":{"gitId":"mingyuanc"},"content":" InstructorPrivileges privileges \u003d new InstructorPrivileges(instrRole);"},{"lineNumber":153,"author":{"gitId":"mingyuanc"},"content":" InstructorPermissionRole role \u003d InstructorPermissionRole.getEnum(instrRole);"},{"lineNumber":154,"author":{"gitId":"mingyuanc"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"mingyuanc"},"content":" return new Instructor(course, instrName, instrEmail, isDisplayedToStudents, instrDisplayedName, role,"},{"lineNumber":157,"author":{"gitId":"mingyuanc"},"content":" privileges);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * Creates a new instructor with basic information."},{"lineNumber":162,"author":{"gitId":"-"},"content":" * This consists of everything apart from custom privileges."},{"lineNumber":163,"author":{"gitId":"-"},"content":" *"},{"lineNumber":164,"author":{"gitId":"mingyuanc"},"content":" * @param courseId Id of the course the instructor is being added"},{"lineNumber":165,"author":{"gitId":"mingyuanc"},"content":" * to."},{"lineNumber":166,"author":{"gitId":"-"},"content":" * @param instructorName Name of the instructor."},{"lineNumber":167,"author":{"gitId":"-"},"content":" * @param instructorEmail Email of the instructor."},{"lineNumber":168,"author":{"gitId":"-"},"content":" * @param instructorRole Role of the instructor."},{"lineNumber":169,"author":{"gitId":"mingyuanc"},"content":" * @param isDisplayedToStudents Whether the instructor should be visible to"},{"lineNumber":170,"author":{"gitId":"mingyuanc"},"content":" * students."},{"lineNumber":171,"author":{"gitId":"-"},"content":" * @param displayedName Name to be visible to students."},{"lineNumber":172,"author":{"gitId":"mingyuanc"},"content":" * Should not be {@code null} even if"},{"lineNumber":173,"author":{"gitId":"mingyuanc"},"content":" * {@code isDisplayedToStudents} is false."},{"lineNumber":174,"author":{"gitId":"-"},"content":" * @return An instructor with basic info, excluding custom privileges"},{"lineNumber":175,"author":{"gitId":"-"},"content":" */"},{"lineNumber":176,"author":{"gitId":"-"},"content":" private InstructorAttributes createInstructorWithBasicAttributes(String courseId, String instructorName,"},{"lineNumber":177,"author":{"gitId":"-"},"content":" String instructorEmail, String instructorRole,"},{"lineNumber":178,"author":{"gitId":"-"},"content":" boolean isDisplayedToStudents, String displayedName) {"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" String instrName \u003d SanitizationHelper.sanitizeName(instructorName);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" String instrEmail \u003d SanitizationHelper.sanitizeEmail(instructorEmail);"},{"lineNumber":182,"author":{"gitId":"-"},"content":" String instrRole \u003d SanitizationHelper.sanitizeName(instructorRole);"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" String instrDisplayedName \u003d displayedName;"},{"lineNumber":185,"author":{"gitId":"-"},"content":" if (displayedName \u003d\u003d null || displayedName.isEmpty()) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" instrDisplayedName \u003d Const.DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR;"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" instrDisplayedName \u003d SanitizationHelper.sanitizeName(instrDisplayedName);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" InstructorPrivileges privileges \u003d new InstructorPrivileges(instructorRole);"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" return InstructorAttributes.builder(courseId, instrEmail)"},{"lineNumber":193,"author":{"gitId":"-"},"content":" .withName(instrName)"},{"lineNumber":194,"author":{"gitId":"-"},"content":" .withRole(instrRole)"},{"lineNumber":195,"author":{"gitId":"-"},"content":" .withIsDisplayedToStudents(isDisplayedToStudents)"},{"lineNumber":196,"author":{"gitId":"-"},"content":" .withDisplayedName(instrDisplayedName)"},{"lineNumber":197,"author":{"gitId":"-"},"content":" .withPrivileges(privileges)"},{"lineNumber":198,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"mingyuanc":99,"-":102}},{"path":"src/main/java/teammates/ui/webapi/EnrollStudentsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Set;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EnrollException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.RequestTracer;"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":19,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.ui.output.EnrollStudentsData;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentsData;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.ui.request.StudentsEnrollRequest;"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Enroll a list of students."},{"lineNumber":29,"author":{"gitId":"-"},"content":" *"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * \u003cp\u003eCreate the students who are not in the course."},{"lineNumber":31,"author":{"gitId":"-"},"content":" *"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * \u003cp\u003eUpdate the students who are already existed."},{"lineNumber":33,"author":{"gitId":"-"},"content":" *"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * \u003cp\u003eReturn all students who are successfully enrolled."},{"lineNumber":35,"author":{"gitId":"-"},"content":" */"},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":"public class EnrollStudentsAction extends Action {"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":39,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":44,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" if (!userInfo.isInstructor) {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Instructor privilege is required to access this resource.\");"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" if (!isCourseMigrated(courseId)) {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.id);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":53,"author":{"gitId":"-"},"content":" instructor, logic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_STUDENT);"},{"lineNumber":54,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":55,"author":{"gitId":"domoberzin"},"content":" return;"},{"lineNumber":56,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"domoberzin"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.id);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":60,"author":{"gitId":"domoberzin"},"content":" instructor, sqlLogic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_STUDENT);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" StudentsEnrollRequest enrollRequests \u003d getAndValidateRequestBody(StudentsEnrollRequest.class);"},{"lineNumber":68,"author":{"gitId":"domoberzin"},"content":" List\u003cStudentsEnrollRequest.StudentEnrollRequest\u003e studentEnrollRequests \u003d enrollRequests.getStudentEnrollRequests();"},{"lineNumber":69,"author":{"gitId":"domoberzin"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":70,"author":{"gitId":"domoberzin"},"content":" boolean isCourseMigrated \u003d isCourseMigrated(courseId);"},{"lineNumber":71,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":72,"author":{"gitId":"domoberzin"},"content":" if (isCourseMigrated) {"},{"lineNumber":73,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e studentsToEnroll \u003d new ArrayList\u003c\u003e();"},{"lineNumber":74,"author":{"gitId":"domoberzin"},"content":" studentEnrollRequests.forEach(studentEnrollRequest -\u003e {"},{"lineNumber":75,"author":{"gitId":"domoberzin"},"content":" Section section \u003d new Section(course, studentEnrollRequest.getSection());"},{"lineNumber":76,"author":{"gitId":"domoberzin"},"content":" Team team \u003d new Team(section, studentEnrollRequest.getTeam());"},{"lineNumber":77,"author":{"gitId":"domoberzin"},"content":" studentsToEnroll.add(new Student("},{"lineNumber":78,"author":{"gitId":"domoberzin"},"content":" course, studentEnrollRequest.getName(),"},{"lineNumber":79,"author":{"gitId":"domoberzin"},"content":" studentEnrollRequest.getEmail(), studentEnrollRequest.getComments(), team));"},{"lineNumber":80,"author":{"gitId":"domoberzin"},"content":" });"},{"lineNumber":81,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":82,"author":{"gitId":"domoberzin"},"content":" sqlLogic.validateSectionsAndTeams(studentsToEnroll, courseId);"},{"lineNumber":83,"author":{"gitId":"domoberzin"},"content":" } catch (EnrollException e) {"},{"lineNumber":84,"author":{"gitId":"domoberzin"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e enrolledStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" List\u003cEnrollStudentsData.EnrollErrorResults\u003e failToEnrollStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" Set\u003cString\u003e existingStudentsEmail;"},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":" List\u003cStudent\u003e existingStudents \u003d sqlLogic.getStudentsForCourse(courseId);"},{"lineNumber":92,"author":{"gitId":"domoberzin"},"content":" existingStudentsEmail \u003d"},{"lineNumber":93,"author":{"gitId":"domoberzin"},"content":" existingStudents.stream().map(Student::getEmail).collect(Collectors.toSet());"},{"lineNumber":94,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":95,"author":{"gitId":"domoberzin"},"content":" for (StudentsEnrollRequest.StudentEnrollRequest enrollRequest : studentEnrollRequests) {"},{"lineNumber":96,"author":{"gitId":"domoberzin"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":97,"author":{"gitId":"domoberzin"},"content":" if (existingStudentsEmail.contains(enrollRequest.getEmail())) {"},{"lineNumber":98,"author":{"gitId":"domoberzin"},"content":" // The student has been enrolled in the course."},{"lineNumber":99,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":100,"author":{"gitId":"domoberzin"},"content":" Section section \u003d sqlLogic.getSectionOrCreate(courseId, enrollRequest.getSection());"},{"lineNumber":101,"author":{"gitId":"domoberzin"},"content":" Team team \u003d sqlLogic.getTeamOrCreate(section, enrollRequest.getTeam());"},{"lineNumber":102,"author":{"gitId":"domoberzin"},"content":" Student newStudent \u003d new Student("},{"lineNumber":103,"author":{"gitId":"domoberzin"},"content":" course, enrollRequest.getName(),"},{"lineNumber":104,"author":{"gitId":"domoberzin"},"content":" enrollRequest.getEmail(), enrollRequest.getComments(), team);"},{"lineNumber":105,"author":{"gitId":"marquestye"},"content":" newStudent.setId(sqlLogic.getStudentForEmail(courseId, enrollRequest.getEmail()).getId());"},{"lineNumber":106,"author":{"gitId":"domoberzin"},"content":" Student updatedStudent \u003d sqlLogic.updateStudentCascade(newStudent);"},{"lineNumber":107,"author":{"gitId":"domoberzin"},"content":" taskQueuer.scheduleStudentForSearchIndexing("},{"lineNumber":108,"author":{"gitId":"domoberzin"},"content":" updatedStudent.getCourseId(), updatedStudent.getEmail());"},{"lineNumber":109,"author":{"gitId":"domoberzin"},"content":" enrolledStudents.add(updatedStudent);"},{"lineNumber":110,"author":{"gitId":"domoberzin"},"content":" } catch (InvalidParametersException | EntityDoesNotExistException"},{"lineNumber":111,"author":{"gitId":"domoberzin"},"content":" | EntityAlreadyExistsException exception) {"},{"lineNumber":112,"author":{"gitId":"domoberzin"},"content":" // Unsuccessfully enrolled students will not be returned."},{"lineNumber":113,"author":{"gitId":"domoberzin"},"content":" failToEnrollStudents.add(new EnrollStudentsData.EnrollErrorResults(enrollRequest.getEmail(),"},{"lineNumber":114,"author":{"gitId":"domoberzin"},"content":" exception.getMessage()));"},{"lineNumber":115,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":116,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":117,"author":{"gitId":"domoberzin"},"content":" // The student is new."},{"lineNumber":118,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":119,"author":{"gitId":"domoberzin"},"content":" Section section \u003d sqlLogic.getSectionOrCreate(courseId, enrollRequest.getSection());"},{"lineNumber":120,"author":{"gitId":"domoberzin"},"content":" Team team \u003d sqlLogic.getTeamOrCreate(section, enrollRequest.getTeam());"},{"lineNumber":121,"author":{"gitId":"domoberzin"},"content":" Student newStudent \u003d new Student("},{"lineNumber":122,"author":{"gitId":"domoberzin"},"content":" course, enrollRequest.getName(),"},{"lineNumber":123,"author":{"gitId":"domoberzin"},"content":" enrollRequest.getEmail(), enrollRequest.getComments(), team);"},{"lineNumber":124,"author":{"gitId":"domoberzin"},"content":" newStudent \u003d sqlLogic.createStudent(newStudent);"},{"lineNumber":125,"author":{"gitId":"domoberzin"},"content":" taskQueuer.scheduleStudentForSearchIndexing("},{"lineNumber":126,"author":{"gitId":"domoberzin"},"content":" newStudent.getCourseId(), newStudent.getEmail());"},{"lineNumber":127,"author":{"gitId":"domoberzin"},"content":" enrolledStudents.add(newStudent);"},{"lineNumber":128,"author":{"gitId":"domoberzin"},"content":" } catch (InvalidParametersException | EntityAlreadyExistsException exception) {"},{"lineNumber":129,"author":{"gitId":"domoberzin"},"content":" // Unsuccessfully enrolled students will not be returned."},{"lineNumber":130,"author":{"gitId":"domoberzin"},"content":" failToEnrollStudents.add(new EnrollStudentsData.EnrollErrorResults(enrollRequest.getEmail(),"},{"lineNumber":131,"author":{"gitId":"domoberzin"},"content":" exception.getMessage()));"},{"lineNumber":132,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":133,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":134,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":135,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":136,"author":{"gitId":"domoberzin"},"content":" List\u003cStudentData\u003e studentDataList \u003d enrolledStudents"},{"lineNumber":137,"author":{"gitId":"domoberzin"},"content":" .stream()"},{"lineNumber":138,"author":{"gitId":"domoberzin"},"content":" .map(StudentData::new)"},{"lineNumber":139,"author":{"gitId":"domoberzin"},"content":" .collect(Collectors.toList());"},{"lineNumber":140,"author":{"gitId":"domoberzin"},"content":" StudentsData data \u003d new StudentsData();"},{"lineNumber":141,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":142,"author":{"gitId":"domoberzin"},"content":" data.setStudents(studentDataList);"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":" return new JsonResult(new EnrollStudentsData(data, failToEnrollStudents));"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" List\u003cStudentAttributes\u003e studentsToEnroll \u003d new ArrayList\u003c\u003e();"},{"lineNumber":148,"author":{"gitId":"-"},"content":" enrollRequests.getStudentEnrollRequests().forEach(studentEnrollRequest -\u003e {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" studentsToEnroll.add(StudentAttributes.builder(courseId, studentEnrollRequest.getEmail())"},{"lineNumber":150,"author":{"gitId":"-"},"content":" .withName(studentEnrollRequest.getName())"},{"lineNumber":151,"author":{"gitId":"-"},"content":" .withSectionName(studentEnrollRequest.getSection())"},{"lineNumber":152,"author":{"gitId":"-"},"content":" .withTeamName(studentEnrollRequest.getTeam())"},{"lineNumber":153,"author":{"gitId":"-"},"content":" .withComment(studentEnrollRequest.getComments())"},{"lineNumber":154,"author":{"gitId":"-"},"content":" .build());"},{"lineNumber":155,"author":{"gitId":"-"},"content":" });"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" logic.validateSectionsAndTeams(studentsToEnroll, courseId);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" } catch (EnrollException e) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" List\u003cStudentAttributes\u003e enrolledStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":164,"author":{"gitId":"-"},"content":" List\u003cEnrollStudentsData.EnrollErrorResults\u003e failToEnrollStudents \u003d new ArrayList\u003c\u003e();"},{"lineNumber":165,"author":{"gitId":"domoberzin"},"content":" Set\u003cString\u003e existingStudentsEmail;"},{"lineNumber":166,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":167,"author":{"gitId":"domoberzin"},"content":" List\u003cStudentAttributes\u003e existingStudents \u003d logic.getStudentsForCourse(courseId);"},{"lineNumber":168,"author":{"gitId":"domoberzin"},"content":" existingStudentsEmail \u003d"},{"lineNumber":169,"author":{"gitId":"domoberzin"},"content":" existingStudents.stream().map(StudentAttributes::getEmail).collect(Collectors.toSet());"},{"lineNumber":170,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":" for (StudentAttributes student : studentsToEnroll) {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" RequestTracer.checkRemainingTime();"},{"lineNumber":173,"author":{"gitId":"-"},"content":" if (existingStudentsEmail.contains(student.getEmail())) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" // The student has been enrolled in the course."},{"lineNumber":175,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" StudentAttributes.UpdateOptions updateOptions \u003d"},{"lineNumber":177,"author":{"gitId":"domoberzin"},"content":" StudentAttributes.updateOptionsBuilder(courseId, student.getEmail())"},{"lineNumber":178,"author":{"gitId":"-"},"content":" .withName(student.getName())"},{"lineNumber":179,"author":{"gitId":"-"},"content":" .withSectionName(student.getSection())"},{"lineNumber":180,"author":{"gitId":"-"},"content":" .withTeamName(student.getTeam())"},{"lineNumber":181,"author":{"gitId":"-"},"content":" .withComment(student.getComments())"},{"lineNumber":182,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":183,"author":{"gitId":"-"},"content":" StudentAttributes updatedStudent \u003d logic.updateStudentCascade(updateOptions);"},{"lineNumber":184,"author":{"gitId":"domoberzin"},"content":" taskQueuer.scheduleStudentForSearchIndexing("},{"lineNumber":185,"author":{"gitId":"domoberzin"},"content":" updatedStudent.getCourse(), updatedStudent.getEmail());"},{"lineNumber":186,"author":{"gitId":"-"},"content":" enrolledStudents.add(updatedStudent);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException | EntityDoesNotExistException"},{"lineNumber":188,"author":{"gitId":"-"},"content":" | EntityAlreadyExistsException exception) {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" // Unsuccessfully enrolled students will not be returned."},{"lineNumber":190,"author":{"gitId":"-"},"content":" failToEnrollStudents.add(new EnrollStudentsData.EnrollErrorResults(student.getEmail(),"},{"lineNumber":191,"author":{"gitId":"-"},"content":" exception.getMessage()));"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" // The student is new."},{"lineNumber":195,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":" StudentAttributes studentAttributes \u003d StudentAttributes.builder(courseId, student.getEmail())"},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":" .withName(student.getName())"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" .withSectionName(student.getSection())"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":" .withTeamName(student.getTeam())"},{"lineNumber":200,"author":{"gitId":"domoberzin"},"content":" .withComment(student.getComments())"},{"lineNumber":201,"author":{"gitId":"domoberzin"},"content":" .build();"},{"lineNumber":202,"author":{"gitId":"domoberzin"},"content":" StudentAttributes newStudent \u003d logic.createStudent(studentAttributes);"},{"lineNumber":203,"author":{"gitId":"-"},"content":" taskQueuer.scheduleStudentForSearchIndexing(newStudent.getCourse(), newStudent.getEmail());"},{"lineNumber":204,"author":{"gitId":"-"},"content":" enrolledStudents.add(newStudent);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException | EntityAlreadyExistsException exception) {"},{"lineNumber":206,"author":{"gitId":"-"},"content":" // Unsuccessfully enrolled students will not be returned."},{"lineNumber":207,"author":{"gitId":"-"},"content":" failToEnrollStudents.add(new EnrollStudentsData.EnrollErrorResults(student.getEmail(),"},{"lineNumber":208,"author":{"gitId":"-"},"content":" exception.getMessage()));"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" List\u003cStudentData\u003e studentDataList \u003d enrolledStudents"},{"lineNumber":214,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":215,"author":{"gitId":"-"},"content":" .map(StudentData::new)"},{"lineNumber":216,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());"},{"lineNumber":217,"author":{"gitId":"-"},"content":" StudentsData data \u003d new StudentsData();"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" data.setStudents(studentDataList);"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" return new JsonResult(new EnrollStudentsData(data, failToEnrollStudents));"},{"lineNumber":222,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":108,"marquestye":1,"-":116}},{"path":"src/main/java/teammates/ui/webapi/GetCourseJoinStatusAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.ui.output.JoinStatus;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * Get the join status of a course."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"public class GetCourseJoinStatusAction extends Action {"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":18,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" }"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" // Any user can use a join link as long as its parameters are valid"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" String regkey \u003d getNonNullRequestParamValue(Const.ParamsNames.REGKEY);"},{"lineNumber":30,"author":{"gitId":"-"},"content":" String entityType \u003d getNonNullRequestParamValue(Const.ParamsNames.ENTITY_TYPE);"},{"lineNumber":31,"author":{"gitId":"-"},"content":" String isCreatingAccount \u003d getRequestParamValue(Const.ParamsNames.IS_CREATING_ACCOUNT);"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" switch (entityType) {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" case Const.EntityType.STUDENT:"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return getStudentJoinStatus(regkey);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" case Const.EntityType.INSTRUCTOR:"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return getInstructorJoinStatus(regkey, \"true\".equals(isCreatingAccount));"},{"lineNumber":38,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":39,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Error: invalid entity type\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" private JsonResult getStudentJoinStatus(String regkey) {"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" StudentAttributes studentAttributes \u003d logic.getStudentForRegistrationKey(regkey);"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" if (studentAttributes !\u003d null \u0026\u0026 !isCourseMigrated(studentAttributes.getCourse())) {"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" return getJoinStatusResult(studentAttributes.isRegistered());"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" Student student \u003d sqlLogic.getStudentByRegistrationKey(regkey);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(\"No student with given registration key: \" + regkey);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return getJoinStatusResult(student.isRegistered());"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" private JsonResult getInstructorJoinStatus(String regkey, boolean isCreatingAccount) {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" if (isCreatingAccount) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" AccountRequestAttributes accountRequest \u003d logic.getAccountRequestForRegistrationKey(regkey);"},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":" AccountRequest sqlAccountRequest \u003d sqlLogic.getAccountRequestByRegistrationKey(regkey);"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" if (accountRequest \u003d\u003d null \u0026\u0026 sqlAccountRequest \u003d\u003d null) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(\"No account request with given registration key: \" + regkey);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" if (sqlAccountRequest !\u003d null) {"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" return getJoinStatusResult(sqlAccountRequest.getRegisteredAt() !\u003d null);"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":" if (accountRequest !\u003d null) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" return getJoinStatusResult(accountRequest.getRegisteredAt() !\u003d null);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" InstructorAttributes instructorAttributes \u003d logic.getInstructorForRegistrationKey(regkey);"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" if (instructorAttributes !\u003d null \u0026\u0026 !isCourseMigrated(instructorAttributes.getCourseId())) {"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" return getJoinStatusResult(instructorAttributes.isRegistered());"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByRegistrationKey(regkey);"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (instructor \u003d\u003d null) {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(\"No instructor with given registration key: \" + regkey);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return getJoinStatusResult(instructor.isRegistered());"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" private JsonResult getJoinStatusResult(boolean hasJoined) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" JoinStatus result \u003d new JoinStatus(hasJoined);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return new JsonResult(result);"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":24,"-":69}},{"path":"src/main/java/teammates/ui/webapi/GetSessionResponseStatsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":6,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionStatsData;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Action: gets the response stats (submitted / total) of a feedback session."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"domoberzin"},"content":"public class GetSessionResponseStatsAction extends Action {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":16,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":18,"author":{"gitId":"-"},"content":" }"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" if (userInfo.isAdmin) {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fs \u003d getNonNullSqlFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":30,"author":{"gitId":"domoberzin"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" gateKeeper.verifyAccessible(instructor, fs);"},{"lineNumber":32,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes fsa \u003d getNonNullFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":34,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":35,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible(instructor, fsa);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fsa \u003d getNonNullSqlFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" int expectedTotal \u003d sqlLogic.getExpectedTotalSubmission(fsa);"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" int actualTotal \u003d sqlLogic.getActualTotalSubmission(fsa);"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":" FeedbackSessionStatsData output \u003d new FeedbackSessionStatsData(actualTotal, expectedTotal);"},{"lineNumber":49,"author":{"gitId":"domoberzin"},"content":" return new JsonResult(output);"},{"lineNumber":50,"author":{"gitId":"domoberzin"},"content":" } else {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes fsa \u003d getNonNullFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" int expectedTotal \u003d logic.getExpectedTotalSubmission(fsa);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" int actualTotal \u003d logic.getActualTotalSubmission(fsa);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" FeedbackSessionStatsData output \u003d new FeedbackSessionStatsData(actualTotal, expectedTotal);"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return new JsonResult(output);"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":15,"-":44}},{"path":"src/main/java/teammates/ui/webapi/GetSessionResultsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.UUID;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackResultFetchType;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SessionResultsBundle;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.SqlSessionResultsBundle;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.StringHelper;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.ui.output.SessionResultsData;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.ui.request.Intent;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * Gets feedback session results including statistics where necessary."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":"public class GetSessionResultsAction extends BasicFeedbackSubmissionAction {"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":25,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return AuthType.PUBLIC;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" Intent intent \u003d Intent.valueOf(getNonNullRequestParamValue(Const.ParamsNames.INTENT));"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" boolean isPreviewResults \u003d !StringHelper.isEmpty(previewAsPerson);"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" checkSpecificAccessControlSql(courseId, feedbackSessionName, intent, isPreviewResults);"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" checkSpecificAccessControlDatastore(courseId, feedbackSessionName, intent, isPreviewResults);"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" private void checkSpecificAccessControlDatastore("},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, Intent intent, boolean isPreviewResults)"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" FeedbackSessionAttributes feedbackSession \u003d getNonNullFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" switch (intent) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" case FULL_DETAIL:"},{"lineNumber":51,"author":{"gitId":"-"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.getId());"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible(instructor, feedbackSession);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" case INSTRUCTOR_RESULT:"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" if (!isPreviewResults \u0026\u0026 !feedbackSession.isPublished()) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"This feedback session is not yet published.\", true);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":" instructor \u003d getInstructorOfCourseFromRequest(courseId);"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" checkAccessControlForInstructorFeedbackResult(instructor, feedbackSession);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" case STUDENT_RESULT:"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" if (!isPreviewResults \u0026\u0026 !feedbackSession.isPublished()) {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"This feedback session is not yet published.\", true);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d getStudentOfCourseFromRequest(courseId);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" checkAccessControlForStudentFeedbackResult(student, feedbackSession);"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" case INSTRUCTOR_SUBMISSION:"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" case STUDENT_SUBMISSION:"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" throw new InvalidHttpParameterException(\"Invalid intent for this action\");"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" throw new InvalidHttpParameterException(\"Unknown intent \" + intent);"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" private void checkSpecificAccessControlSql("},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, Intent intent, boolean isPreviewResults)"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" throws UnauthorizedAccessException {"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d getNonNullSqlFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" switch (intent) {"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" case FULL_DETAIL:"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyLoggedInUserPrivileges(userInfo);"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" gateKeeper.verifyAccessible(instructor, feedbackSession);"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" case INSTRUCTOR_RESULT:"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" if (!isPreviewResults \u0026\u0026 !feedbackSession.isPublished()) {"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" throw new UnauthorizedAccessException(\"This feedback session is not yet published.\", true);"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":" instructor \u003d getSqlInstructorOfCourseFromRequest(courseId);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" checkAccessControlForInstructorFeedbackResult(instructor, feedbackSession);"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" break;"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" case STUDENT_RESULT:"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" if (!isPreviewResults \u0026\u0026 !feedbackSession.isPublished()) {"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" throw new UnauthorizedAccessException(\"This feedback session is not yet published.\", true);"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Student student \u003d getSqlStudentOfCourseFromRequest(courseId);"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" checkAccessControlForStudentFeedbackResult(student, feedbackSession);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":102,"author":{"gitId":"-"},"content":" case INSTRUCTOR_SUBMISSION:"},{"lineNumber":103,"author":{"gitId":"-"},"content":" case STUDENT_SUBMISSION:"},{"lineNumber":104,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Invalid intent for this action\");"},{"lineNumber":105,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":106,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Unknown intent \" + intent);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" String feedbackSessionName \u003d getNonNullRequestParamValue(Const.ParamsNames.FEEDBACK_SESSION_NAME);"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" // Allow additional filter by question ID and section name"},{"lineNumber":116,"author":{"gitId":"-"},"content":" String questionId \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_QUESTION_ID);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" String selectedSection \u003d getRequestParamValue(Const.ParamsNames.FEEDBACK_RESULTS_GROUPBYSECTION);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" FeedbackResultFetchType fetchType \u003d FeedbackResultFetchType.parseFetchType("},{"lineNumber":119,"author":{"gitId":"-"},"content":" getRequestParamValue(Const.ParamsNames.FEEDBACK_RESULTS_SECTION_BY_GIVER_RECEIVER));"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" String previewAsPerson \u003d getRequestParamValue(Const.ParamsNames.PREVIEWAS);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" boolean isPreviewResults \u003d !StringHelper.isEmpty(previewAsPerson);"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" Intent intent \u003d Intent.valueOf(getNonNullRequestParamValue(Const.ParamsNames.INTENT));"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" if (questionId !\u003d null) {"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" UUID questionUuid \u003d getUuidRequestParamValue(Const.ParamsNames.FEEDBACK_QUESTION_ID);"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" executeWithSql(courseId, feedbackSessionName, questionUuid,"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" selectedSection, fetchType, intent, isPreviewResults);"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" return executeWithSql(courseId, feedbackSessionName, null, selectedSection,"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" fetchType, intent, isPreviewResults);"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" return executeWithDatastore(courseId, feedbackSessionName, questionId, selectedSection,"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" fetchType, intent, isPreviewResults);"},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":" private JsonResult executeWithDatastore("},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, String questionId, String selectedSection,"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType, Intent intent, boolean isPreviewResults) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" InstructorAttributes instructor;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" StudentAttributes student;"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":" SessionResultsBundle bundle;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" switch (intent) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" case FULL_DETAIL:"},{"lineNumber":148,"author":{"gitId":"-"},"content":" instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.id);"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" bundle \u003d logic.getSessionResultsForCourse(feedbackSessionName, courseId, instructor.getEmail(),"},{"lineNumber":151,"author":{"gitId":"-"},"content":" questionId, selectedSection, fetchType);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return new JsonResult(SessionResultsData.initForInstructor(bundle));"},{"lineNumber":153,"author":{"gitId":"-"},"content":" case INSTRUCTOR_RESULT:"},{"lineNumber":154,"author":{"gitId":"-"},"content":" // Section name filter is not applicable here"},{"lineNumber":155,"author":{"gitId":"-"},"content":" instructor \u003d getInstructorOfCourseFromRequest(courseId);"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":" bundle \u003d logic.getSessionResultsForUser(feedbackSessionName, courseId, instructor.getEmail(),"},{"lineNumber":158,"author":{"gitId":"-"},"content":" true, questionId, isPreviewResults);"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" // Build a fake student object, as the results will be displayed as if they are displayed to a student"},{"lineNumber":161,"author":{"gitId":"-"},"content":" student \u003d StudentAttributes.builder(instructor.getCourseId(), instructor.getEmail())"},{"lineNumber":162,"author":{"gitId":"-"},"content":" .withTeamName(Const.USER_TEAM_FOR_INSTRUCTOR)"},{"lineNumber":163,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" return new JsonResult(SessionResultsData.initForStudent(bundle, student));"},{"lineNumber":166,"author":{"gitId":"-"},"content":" case STUDENT_RESULT:"},{"lineNumber":167,"author":{"gitId":"-"},"content":" // Section name filter is not applicable here"},{"lineNumber":168,"author":{"gitId":"-"},"content":" student \u003d getStudentOfCourseFromRequest(courseId);"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" bundle \u003d logic.getSessionResultsForUser(feedbackSessionName, courseId, student.getEmail(),"},{"lineNumber":171,"author":{"gitId":"-"},"content":" false, questionId, isPreviewResults);"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" return new JsonResult(SessionResultsData.initForStudent(bundle, student));"},{"lineNumber":174,"author":{"gitId":"-"},"content":" case INSTRUCTOR_SUBMISSION:"},{"lineNumber":175,"author":{"gitId":"-"},"content":" case STUDENT_SUBMISSION:"},{"lineNumber":176,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Invalid intent for this action\");"},{"lineNumber":177,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":178,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Unknown intent \" + intent);"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" private JsonResult executeWithSql("},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" String courseId, String feedbackSessionName, UUID questionUuid, String selectedSection,"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":" FeedbackResultFetchType fetchType, Intent intent, boolean isPreviewResults) {"},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" Instructor instructor;"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" Student student;"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" FeedbackSession feedbackSession \u003d getNonNullSqlFeedbackSession(feedbackSessionName, courseId);"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle;"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":" switch (intent) {"},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" case FULL_DETAIL:"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" instructor \u003d getSqlInstructorOfCourseFromRequest(courseId);"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" bundle \u003d sqlLogic.getSessionResultsForCourse(feedbackSession, courseId, instructor.getEmail(),"},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" questionUuid, selectedSection, fetchType);"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" return new JsonResult(SessionResultsData.initForInstructor(bundle));"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":" case INSTRUCTOR_RESULT:"},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" // Section name filter is not applicable here"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" instructor \u003d getPossiblyUnregisteredSqlInstructor(courseId);"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":" bundle \u003d sqlLogic.getSessionResultsForUser(feedbackSession, courseId, instructor.getEmail(),"},{"lineNumber":201,"author":{"gitId":"xenosf"},"content":" true, questionUuid, isPreviewResults);"},{"lineNumber":202,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":203,"author":{"gitId":"xenosf"},"content":" // Build a fake student object, as the results will be displayed as if they are displayed to a student"},{"lineNumber":204,"author":{"gitId":"xenosf"},"content":" student \u003d new Student(instructor.getCourse(), instructor.getName(), instructor.getEmail(), \"\");"},{"lineNumber":205,"author":{"gitId":"xenosf"},"content":" student.setTeam(instructor.getTeam());"},{"lineNumber":206,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":207,"author":{"gitId":"xenosf"},"content":" return new JsonResult(SessionResultsData.initForStudent(bundle, student));"},{"lineNumber":208,"author":{"gitId":"xenosf"},"content":" case STUDENT_RESULT:"},{"lineNumber":209,"author":{"gitId":"xenosf"},"content":" // Section name filter is not applicable here"},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" student \u003d getSqlStudentOfCourseFromRequest(courseId);"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" bundle \u003d sqlLogic.getSessionResultsForUser(feedbackSession, courseId, student.getEmail(),"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":" false, questionUuid, isPreviewResults);"},{"lineNumber":214,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":215,"author":{"gitId":"xenosf"},"content":" return new JsonResult(SessionResultsData.initForStudent(bundle, student));"},{"lineNumber":216,"author":{"gitId":"xenosf"},"content":" case INSTRUCTOR_SUBMISSION:"},{"lineNumber":217,"author":{"gitId":"xenosf"},"content":" case STUDENT_SUBMISSION:"},{"lineNumber":218,"author":{"gitId":"xenosf"},"content":" throw new InvalidHttpParameterException(\"Invalid intent for this action\");"},{"lineNumber":219,"author":{"gitId":"xenosf"},"content":" default:"},{"lineNumber":220,"author":{"gitId":"xenosf"},"content":" throw new InvalidHttpParameterException(\"Unknown intent \" + intent);"},{"lineNumber":221,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":222,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":223,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":117,"-":107}},{"path":"src/main/java/teammates/ui/webapi/InstructorSearchIndexingWorkerAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Task queue worker action: performs instructor search indexing."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class InstructorSearchIndexingWorkerAction extends AdminOnlyAction {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public ActionResult execute() {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(ParamsNames.COURSE_ID);"},{"lineNumber":18,"author":{"gitId":"-"},"content":" String email \u003d getNonNullRequestParamValue(ParamsNames.INSTRUCTOR_EMAIL);"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":" return executeWithSql(courseId, email);"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":" } else {"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":" return executeWithDataStore(courseId, email);"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" private JsonResult executeWithSql(String courseId, String email) {"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":" Instructor instructor \u003d sqlLogic.getInstructorForEmail(courseId, email);"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" try {"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" sqlLogic.putInstructorDocument(instructor);"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" // Set an arbitrary retry code outside the range 200-299 to trigger automatic retry"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" private JsonResult executeWithDataStore(String courseId, String email) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForEmail(courseId, email);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" logic.putInstructorDocument(instructor);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" // Set an arbitrary retry code outside of the range 200-299 to trigger automatic retry"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"mingyuanc":21,"-":29}},{"path":"src/main/java/teammates/ui/webapi/JoinCourseAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"yuanxi1"},"content":"import java.util.Optional;"},{"lineNumber":4,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailWrapper;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.util.Logger;"},{"lineNumber":16,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":17,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Action: joins a course for a student/instructor."},{"lineNumber":22,"author":{"gitId":"-"},"content":" */"},{"lineNumber":23,"author":{"gitId":"yuanxi1"},"content":"public class JoinCourseAction extends Action {"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final Logger log \u003d Logger.getLogger();"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":28,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":33,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" // Any user can use a join link as long as its parameters are valid"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidOperationException {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" String regKey \u003d getNonNullRequestParamValue(Const.ParamsNames.REGKEY);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" String entityType \u003d getNonNullRequestParamValue(Const.ParamsNames.ENTITY_TYPE);"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" String courseId \u003d getCourseId(regKey, entityType);"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" // courseId is null when the registration key does not exist, this case is handled in the AccountsLogic."},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" // Hence default to not migrated. Getting the courseId in the action layer is not needed once migration is done."},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" if (courseId \u003d\u003d null || !isCourseMigrated(courseId)) {"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" switch (entityType) {"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" case Const.EntityType.STUDENT:"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" return joinCourseForStudentDatastore(regKey);"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" case Const.EntityType.INSTRUCTOR:"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" return joinCourseForInstructorDatastore(regKey);"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":" default:"},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidHttpParameterException(\"Error: invalid entity type\");"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":55,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":56,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" switch (entityType) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" case Const.EntityType.STUDENT:"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return joinCourseForStudent(regKey);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" case Const.EntityType.INSTRUCTOR:"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return joinCourseForInstructor(regKey);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":63,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Error: invalid entity type\");"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" private JsonResult joinCourseForStudent(String regkey) throws InvalidOperationException {"},{"lineNumber":68,"author":{"gitId":"yuanxi1"},"content":" Student student;"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":" try {"},{"lineNumber":71,"author":{"gitId":"yuanxi1"},"content":" student \u003d sqlLogic.joinCourseForStudent(regkey, userInfo.id);"},{"lineNumber":72,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidOperationException(eaee);"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":" // There should not be any invalid parameter here"},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" log.severe(\"Unexpected error\", ipe);"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(ipe.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR);"},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":" sendJoinEmail(student.getCourseId(), student.getName(), student.getEmail(), false);"},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":84,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(\"Student successfully joined course\");"},{"lineNumber":85,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":86,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":87,"author":{"gitId":"yuanxi1"},"content":" private JsonResult joinCourseForInstructor(String regkey) throws InvalidOperationException {"},{"lineNumber":88,"author":{"gitId":"yuanxi1"},"content":" Instructor instructor;"},{"lineNumber":89,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":90,"author":{"gitId":"yuanxi1"},"content":" try {"},{"lineNumber":91,"author":{"gitId":"yuanxi1"},"content":" instructor \u003d sqlLogic.joinCourseForInstructor(regkey, userInfo.id);"},{"lineNumber":92,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":93,"author":{"gitId":"yuanxi1"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":94,"author":{"gitId":"yuanxi1"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":95,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidOperationException(eaee);"},{"lineNumber":96,"author":{"gitId":"yuanxi1"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":97,"author":{"gitId":"yuanxi1"},"content":" // There should not be any invalid parameter here"},{"lineNumber":98,"author":{"gitId":"yuanxi1"},"content":" log.severe(\"Unexpected error\", ipe);"},{"lineNumber":99,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(ipe.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR);"},{"lineNumber":100,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":101,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":102,"author":{"gitId":"yuanxi1"},"content":" sendJoinEmail(instructor.getCourseId(), instructor.getName(), instructor.getEmail(), true);"},{"lineNumber":103,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":104,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(\"Instructor successfully joined course\");"},{"lineNumber":105,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":106,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":107,"author":{"gitId":"yuanxi1"},"content":" private JsonResult joinCourseForStudentDatastore(String regkey) throws InvalidOperationException {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" StudentAttributes student;"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" student \u003d logic.joinCourseForStudent(regkey, userInfo.id);"},{"lineNumber":112,"author":{"gitId":"-"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(eaee);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" // There should not be any invalid parameter here"},{"lineNumber":118,"author":{"gitId":"-"},"content":" log.severe(\"Unexpected error\", ipe);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" return new JsonResult(ipe.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR);"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"yuanxi1"},"content":" sendJoinEmailDatastore(student.getCourse(), student.getName(), student.getEmail(), false);"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" return new JsonResult(\"Student successfully joined course\");"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"yuanxi1"},"content":" private JsonResult joinCourseForInstructorDatastore(String regkey) throws InvalidOperationException {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" InstructorAttributes instructor;"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" instructor \u003d logic.joinCourseForInstructor(regkey, userInfo.id);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException eaee) {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(eaee);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException ipe) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" // There should not be any invalid parameter here"},{"lineNumber":138,"author":{"gitId":"-"},"content":" log.severe(\"Unexpected error\", ipe);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return new JsonResult(ipe.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR);"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"yuanxi1"},"content":" sendJoinEmailDatastore(instructor.getCourseId(), instructor.getName(), instructor.getEmail(), true);"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" return new JsonResult(\"Instructor successfully joined course\");"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"yuanxi1"},"content":" private void sendJoinEmailDatastore(String courseId, String userName, String userEmail, boolean isInstructor) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" CourseAttributes course \u003d logic.getCourse(courseId);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d emailGenerator.generateUserCourseRegisteredEmail("},{"lineNumber":150,"author":{"gitId":"-"},"content":" userName, userEmail, userInfo.id, isInstructor, course);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" emailSender.sendEmail(email);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":""},{"lineNumber":154,"author":{"gitId":"yuanxi1"},"content":" private void sendJoinEmail(String courseId, String userName, String userEmail, boolean isInstructor) {"},{"lineNumber":155,"author":{"gitId":"yuanxi1"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":156,"author":{"gitId":"yuanxi1"},"content":" EmailWrapper email \u003d sqlEmailGenerator.generateUserCourseRegisteredEmail("},{"lineNumber":157,"author":{"gitId":"yuanxi1"},"content":" userName, userEmail, userInfo.id, isInstructor, course);"},{"lineNumber":158,"author":{"gitId":"yuanxi1"},"content":" emailSender.sendEmail(email);"},{"lineNumber":159,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":160,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":161,"author":{"gitId":"yuanxi1"},"content":" private String getCourseId(String regKey, String entityType) {"},{"lineNumber":162,"author":{"gitId":"yuanxi1"},"content":" String courseIdSql;"},{"lineNumber":163,"author":{"gitId":"yuanxi1"},"content":" String courseIdDatastore;"},{"lineNumber":164,"author":{"gitId":"yuanxi1"},"content":" switch (entityType) {"},{"lineNumber":165,"author":{"gitId":"yuanxi1"},"content":" case Const.EntityType.STUDENT:"},{"lineNumber":166,"author":{"gitId":"yuanxi1"},"content":" courseIdSql \u003d Optional.ofNullable(sqlLogic.getStudentByRegistrationKey(regKey))"},{"lineNumber":167,"author":{"gitId":"yuanxi1"},"content":" .map(Student::getCourseId)"},{"lineNumber":168,"author":{"gitId":"yuanxi1"},"content":" .orElse(null);"},{"lineNumber":169,"author":{"gitId":"yuanxi1"},"content":" courseIdDatastore \u003d Optional.ofNullable(logic.getStudentForRegistrationKey(regKey))"},{"lineNumber":170,"author":{"gitId":"yuanxi1"},"content":" .map(StudentAttributes::getCourse)"},{"lineNumber":171,"author":{"gitId":"yuanxi1"},"content":" .orElse(null);"},{"lineNumber":172,"author":{"gitId":"yuanxi1"},"content":" break;"},{"lineNumber":173,"author":{"gitId":"yuanxi1"},"content":" case Const.EntityType.INSTRUCTOR:"},{"lineNumber":174,"author":{"gitId":"yuanxi1"},"content":" courseIdSql \u003d Optional.ofNullable(sqlLogic.getInstructorByRegistrationKey(regKey))"},{"lineNumber":175,"author":{"gitId":"yuanxi1"},"content":" .map(Instructor::getCourseId)"},{"lineNumber":176,"author":{"gitId":"yuanxi1"},"content":" .orElse(null);"},{"lineNumber":177,"author":{"gitId":"yuanxi1"},"content":" courseIdDatastore \u003d Optional.ofNullable(logic.getInstructorForRegistrationKey(regKey))"},{"lineNumber":178,"author":{"gitId":"yuanxi1"},"content":" .map(InstructorAttributes::getCourseId)"},{"lineNumber":179,"author":{"gitId":"yuanxi1"},"content":" .orElse(null);"},{"lineNumber":180,"author":{"gitId":"yuanxi1"},"content":" break;"},{"lineNumber":181,"author":{"gitId":"yuanxi1"},"content":" default:"},{"lineNumber":182,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidHttpParameterException(\"Error: invalid entity type\");"},{"lineNumber":183,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":184,"author":{"gitId":"yuanxi1"},"content":" return courseIdDatastore !\u003d null ? courseIdDatastore : courseIdSql;"},{"lineNumber":185,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":98,"-":88}},{"path":"src/main/java/teammates/ui/webapi/PutDataBundleDocumentsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Config;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * Puts searchable documents from the data bundle into the DB."},{"lineNumber":14,"author":{"gitId":"-"},"content":" */"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"public class PutDataBundleDocumentsAction extends Action {"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":18,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" return AuthType.ALL_ACCESS;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" }"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":23,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" if (!Config.IS_DEV_SERVER) {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Admin privilege is required to access this resource.\");"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException {"},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" String type \u003d getNonNullRequestParamValue(\"databundletype\");"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" switch (type) {"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" case \"sql\":"},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":" return putSqlDataBundleDocuments();"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" case \"datastore\":"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" return putDataBundleDocuments();"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":" default:"},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":" throw new InvalidHttpParameterException(\"Error: invalid data bundle type\");"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":" private JsonResult putSqlDataBundleDocuments() throws InvalidHttpRequestBodyException {"},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" SqlDataBundle sqlDataBundle \u003d JsonUtils.fromJson(getRequestBody(), SqlDataBundle.class);"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" try {"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" sqlLogic.putDocuments(sqlDataBundle);"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" return new JsonResult(\"Failed to add data bundle documents.\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" return new JsonResult(\"Data bundle documents successfully added.\");"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" private JsonResult putDataBundleDocuments() throws InvalidHttpRequestBodyException {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" DataBundle dataBundle \u003d JsonUtils.fromJson(getRequestBody(), DataBundle.class);"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" logic.putDocuments(dataBundle);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return new JsonResult(\"Failed to add data bundle documents.\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":" return new JsonResult(\"Data bundle documents successfully added.\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":29,"-":35}},{"path":"src/main/java/teammates/ui/webapi/SearchAccountRequestsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountRequestData;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountRequestsData;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Searches for account requests."},{"lineNumber":15,"author":{"gitId":"-"},"content":" */"},{"lineNumber":16,"author":{"gitId":"domoberzin"},"content":"public class SearchAccountRequestsAction extends AdminOnlyAction {"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" String searchKey \u003d getNonNullRequestParamValue(Const.ParamsNames.SEARCH_KEY);"},{"lineNumber":21,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":22,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequest\u003e accountRequests;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":" accountRequests \u003d sqlLogic.searchAccountRequestsInWholeSystem(searchKey);"},{"lineNumber":25,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":27,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":28,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":29,"author":{"gitId":"domoberzin"},"content":" List\u003cAccountRequestAttributes\u003e requestsDatastore;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":31,"author":{"gitId":"domoberzin"},"content":" requestsDatastore \u003d logic.searchAccountRequestsInWholeSystem(searchKey);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" List\u003cAccountRequestData\u003e accountRequestDataList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":" for (AccountRequest accountRequest : accountRequests) {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" AccountRequestData accountRequestData \u003d new AccountRequestData(accountRequest);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" accountRequestDataList.add(accountRequestData);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"domoberzin"},"content":" for (AccountRequestAttributes request : requestsDatastore) {"},{"lineNumber":43,"author":{"gitId":"domoberzin"},"content":" if (accountRequestDataList.stream().noneMatch(data -\u003e data.getEmail().equals(request.getEmail()))) {"},{"lineNumber":44,"author":{"gitId":"domoberzin"},"content":" AccountRequestData accountRequestData \u003d new AccountRequestData(request);"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" accountRequestDataList.add(accountRequestData);"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":47,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":48,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" AccountRequestsData accountRequestsData \u003d new AccountRequestsData();"},{"lineNumber":50,"author":{"gitId":"-"},"content":" accountRequestsData.setAccountRequests(accountRequestDataList);"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" return new JsonResult(accountRequestsData);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":17,"-":37}},{"path":"src/main/java/teammates/ui/webapi/SearchInstructorsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorsData;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Searches for instructors."},{"lineNumber":15,"author":{"gitId":"-"},"content":" */"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class SearchInstructorsAction extends AdminOnlyAction {"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" // Search for sql db"},{"lineNumber":21,"author":{"gitId":"-"},"content":" String searchKey \u003d getNonNullRequestParamValue(Const.ParamsNames.SEARCH_KEY);"},{"lineNumber":22,"author":{"gitId":"-"},"content":" List\u003cInstructor\u003e instructors;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" instructors \u003d sqlLogic.searchInstructorsInWholeSystem(searchKey);"},{"lineNumber":25,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" // Search for datastore"},{"lineNumber":30,"author":{"gitId":"-"},"content":" List\u003cInstructorAttributes\u003e instructorsDatastore;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" instructorsDatastore \u003d logic.searchInstructorsInWholeSystem(searchKey);"},{"lineNumber":33,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" List\u003cInstructorData\u003e instructorDataList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" // Add instructors from sql db"},{"lineNumber":40,"author":{"gitId":"-"},"content":" for (Instructor instructor : instructors) {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" InstructorData instructorData \u003d new InstructorData(instructor);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" instructorData.addAdditionalInformationForAdminSearch("},{"lineNumber":43,"author":{"gitId":"-"},"content":" instructor.getRegKey(),"},{"lineNumber":44,"author":{"gitId":"-"},"content":" sqlLogic.getCourse(instructor.getCourseId()).getInstitute(),"},{"lineNumber":45,"author":{"gitId":"-"},"content":" instructor.getGoogleId());"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" instructorDataList.add(instructorData);"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" // Add instructors from datastore"},{"lineNumber":51,"author":{"gitId":"-"},"content":" for (InstructorAttributes instructor : instructorsDatastore) {"},{"lineNumber":52,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" InstructorData instructorData \u003d new InstructorData(instructor);"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" if (isCourseMigrated(instructorData.getCourseId())) {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" instructorData.addAdditionalInformationForAdminSearch("},{"lineNumber":60,"author":{"gitId":"-"},"content":" instructor.getKey(),"},{"lineNumber":61,"author":{"gitId":"-"},"content":" logic.getCourseInstitute(instructor.getCourseId()),"},{"lineNumber":62,"author":{"gitId":"-"},"content":" instructor.getGoogleId());"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" instructorDataList.add(instructorData);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":" InstructorsData instructorsData \u003d new InstructorsData();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" instructorsData.setInstructors(instructorDataList);"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" return new JsonResult(instructorsData);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":1,"-":71}},{"path":"src/main/java/teammates/ui/webapi/SearchStudentsAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":10,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":11,"author":{"gitId":"yuanxi1"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentsData;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * Action for searching for students."},{"lineNumber":17,"author":{"gitId":"-"},"content":" */"},{"lineNumber":18,"author":{"gitId":"yuanxi1"},"content":"public class SearchStudentsAction extends Action {"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":21,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" }"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":26,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // Only instructors and admins can search for student"},{"lineNumber":28,"author":{"gitId":"-"},"content":" if (!userInfo.isInstructor \u0026\u0026 !userInfo.isAdmin) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Instructor or Admin privilege is required to access this resource.\");"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public JsonResult execute() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" String searchKey \u003d getNonNullRequestParamValue(Const.ParamsNames.SEARCH_KEY);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" String entity \u003d getNonNullRequestParamValue(Const.ParamsNames.ENTITY_TYPE);"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudent\u003e students;"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":40,"author":{"gitId":"yuanxi1"},"content":" try {"},{"lineNumber":41,"author":{"gitId":"yuanxi1"},"content":" if (userInfo.isInstructor \u0026\u0026 entity.equals(Const.EntityType.INSTRUCTOR)) {"},{"lineNumber":42,"author":{"gitId":"yuanxi1"},"content":" List\u003cInstructor\u003e instructors \u003d sqlLogic.getInstructorsForGoogleId(userInfo.id);"},{"lineNumber":43,"author":{"gitId":"yuanxi1"},"content":" students \u003d sqlLogic.searchStudents(searchKey, instructors);"},{"lineNumber":44,"author":{"gitId":"yuanxi1"},"content":" } else if (userInfo.isAdmin \u0026\u0026 entity.equals(Const.EntityType.ADMIN)) {"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" students \u003d sqlLogic.searchStudentsInWholeSystem(searchKey);"},{"lineNumber":46,"author":{"gitId":"yuanxi1"},"content":" } else {"},{"lineNumber":47,"author":{"gitId":"yuanxi1"},"content":" throw new InvalidHttpParameterException(\"Invalid entity type for search\");"},{"lineNumber":48,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":49,"author":{"gitId":"yuanxi1"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":50,"author":{"gitId":"yuanxi1"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":51,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":52,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":53,"author":{"gitId":"yuanxi1"},"content":" // Search in datastore. For more information on dual db support, see this [PR](https://github.com/TEAMMATES/teammates/pull/12728/files)"},{"lineNumber":54,"author":{"gitId":"yuanxi1"},"content":" List\u003cStudentAttributes\u003e studentsDatastore;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" if (userInfo.isInstructor \u0026\u0026 entity.equals(Const.EntityType.INSTRUCTOR)) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" List\u003cInstructorAttributes\u003e instructors \u003d logic.getInstructorsForGoogleId(userInfo.id);"},{"lineNumber":58,"author":{"gitId":"yuanxi1"},"content":" studentsDatastore \u003d logic.searchStudents(searchKey, instructors);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" } else if (userInfo.isAdmin \u0026\u0026 entity.equals(Const.EntityType.ADMIN)) {"},{"lineNumber":60,"author":{"gitId":"yuanxi1"},"content":" studentsDatastore \u003d logic.searchStudentsInWholeSystem(searchKey);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" throw new InvalidHttpParameterException(\"Invalid entity type for search\");"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return new JsonResult(e.getMessage(), e.getStatusCode());"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" List\u003cStudentData\u003e studentDataList \u003d new ArrayList\u003c\u003e();"},{"lineNumber":69,"author":{"gitId":"yuanxi1"},"content":" // Add students from sql database"},{"lineNumber":70,"author":{"gitId":"yuanxi1"},"content":" for (Student s : students) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" StudentData studentData \u003d new StudentData(s);"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"yuanxi1"},"content":" if (userInfo.isAdmin \u0026\u0026 entity.equals(Const.EntityType.ADMIN)) {"},{"lineNumber":74,"author":{"gitId":"yuanxi1"},"content":" studentData.addAdditionalInformationForAdminSearch("},{"lineNumber":75,"author":{"gitId":"yuanxi1"},"content":" s.getRegKey(),"},{"lineNumber":76,"author":{"gitId":"yuanxi1"},"content":" sqlLogic.getCourseInstitute(s.getCourseId()),"},{"lineNumber":77,"author":{"gitId":"yuanxi1"},"content":" s.getGoogleId()"},{"lineNumber":78,"author":{"gitId":"yuanxi1"},"content":" );"},{"lineNumber":79,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":80,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":81,"author":{"gitId":"yuanxi1"},"content":" studentDataList.add(studentData);"},{"lineNumber":82,"author":{"gitId":"yuanxi1"},"content":" }"},{"lineNumber":83,"author":{"gitId":"yuanxi1"},"content":" // Add students from datastore"},{"lineNumber":84,"author":{"gitId":"yuanxi1"},"content":" for (StudentAttributes s : studentsDatastore) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" StudentData studentData \u003d new StudentData(s);"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" if (isCourseMigrated(studentData.getCourseId())) {"},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" continue;"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" if (userInfo.isAdmin \u0026\u0026 entity.equals(Const.EntityType.ADMIN)) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" studentData.addAdditionalInformationForAdminSearch("},{"lineNumber":93,"author":{"gitId":"-"},"content":" s.getKey(),"},{"lineNumber":94,"author":{"gitId":"-"},"content":" logic.getCourseInstitute(s.getCourse()),"},{"lineNumber":95,"author":{"gitId":"-"},"content":" s.getGoogleId()"},{"lineNumber":96,"author":{"gitId":"-"},"content":" );"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" studentDataList.add(studentData);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":" StudentsData studentsData \u003d new StudentsData();"},{"lineNumber":102,"author":{"gitId":"-"},"content":" studentsData.setStudents(studentDataList);"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" return new JsonResult(studentsData);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":4,"yuanxi1":36,"-":66}},{"path":"src/main/java/teammates/ui/webapi/StudentSearchIndexingWorkerAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.exception.SearchServiceException;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.util.Const.ParamsNames;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Task queue worker action: performs student search indexing."},{"lineNumber":12,"author":{"gitId":"-"},"content":" */"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class StudentSearchIndexingWorkerAction extends AdminOnlyAction {"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public ActionResult execute() {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(ParamsNames.COURSE_ID);"},{"lineNumber":18,"author":{"gitId":"-"},"content":" String email \u003d getNonNullRequestParamValue(ParamsNames.STUDENT_EMAIL);"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":" return executeWithSql(courseId, email);"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" } else {"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" return executeWithDataStore(courseId, email);"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" private ActionResult executeWithDataStore(String courseId, String email) {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d logic.getStudentForEmail(courseId, email);"},{"lineNumber":30,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" logic.putStudentDocument(student);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // Set an arbitrary retry code outside of the range 200-299 to trigger automatic retry"},{"lineNumber":34,"author":{"gitId":"-"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" private ActionResult executeWithSql(String courseId, String email) {"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" Student student \u003d sqlLogic.getStudentForEmail(courseId, email);"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" try {"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" sqlLogic.putStudentDocument(student);"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" } catch (SearchServiceException e) {"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" // Set an arbitrary retry code outside of the range 200-299 to trigger automatic retry"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" return new JsonResult(\"Failure\", HttpStatus.SC_BAD_GATEWAY);"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" return new JsonResult(\"Successful\");"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":22,"-":29}},{"path":"src/main/java/teammates/ui/webapi/UpdateStudentAction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.ui.webapi;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Arrays;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.exception.EnrollException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailSendingStatus;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailType;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.util.EmailWrapper;"},{"lineNumber":15,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":16,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":17,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":18,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":19,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.ui.request.InvalidHttpRequestBodyException;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.ui.request.StudentUpdateRequest;"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Action: Edits details of a student in a course."},{"lineNumber":25,"author":{"gitId":"-"},"content":" */"},{"lineNumber":26,"author":{"gitId":"marquestye"},"content":"public class UpdateStudentAction extends Action {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" static final String STUDENT_NOT_FOUND_FOR_EDIT \u003d \"The student you tried to edit does not exist. \""},{"lineNumber":28,"author":{"gitId":"-"},"content":" + \"If the student was created during the last few minutes, \""},{"lineNumber":29,"author":{"gitId":"-"},"content":" + \"try again in a few more minutes as the student may still be being saved.\";"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String SUCCESSFUL_UPDATE \u003d \"Student has been updated\";"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String SUCCESSFUL_UPDATE_WITH_EMAIL \u003d SUCCESSFUL_UPDATE + \" and email sent\";"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String SUCCESSFUL_UPDATE_BUT_EMAIL_FAILED \u003d SUCCESSFUL_UPDATE + \" but email failed to send\";"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":35,"author":{"gitId":"-"},"content":" AuthType getMinAuthLevel() {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" return AuthType.LOGGED_IN;"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":40,"author":{"gitId":"-"},"content":" void checkSpecificAccessControl() throws UnauthorizedAccessException {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" if (!userInfo.isInstructor) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" throw new UnauthorizedAccessException(\"Instructor privilege is required to access this resource.\");"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" Instructor instructor \u003d sqlLogic.getInstructorByGoogleId(courseId, userInfo.getId());"},{"lineNumber":48,"author":{"gitId":"marquestye"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":49,"author":{"gitId":"marquestye"},"content":" instructor, sqlLogic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_STUDENT);"},{"lineNumber":50,"author":{"gitId":"marquestye"},"content":" } else {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" InstructorAttributes instructor \u003d logic.getInstructorForGoogleId(courseId, userInfo.id);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" gateKeeper.verifyAccessible("},{"lineNumber":53,"author":{"gitId":"-"},"content":" instructor, logic.getCourse(courseId), Const.InstructorPermissions.CAN_MODIFY_STUDENT);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public JsonResult execute() throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" String courseId \u003d getNonNullRequestParamValue(Const.ParamsNames.COURSE_ID);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" String studentEmail \u003d getNonNullRequestParamValue(Const.ParamsNames.STUDENT_EMAIL);"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"marquestye"},"content":" if (!isCourseMigrated(courseId)) {"},{"lineNumber":63,"author":{"gitId":"marquestye"},"content":" return executeWithDatastore(courseId, studentEmail);"},{"lineNumber":64,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":65,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":66,"author":{"gitId":"marquestye"},"content":" Student existingStudent \u003d sqlLogic.getStudentForEmail(courseId, studentEmail);"},{"lineNumber":67,"author":{"gitId":"marquestye"},"content":" if (existingStudent \u003d\u003d null) {"},{"lineNumber":68,"author":{"gitId":"marquestye"},"content":" throw new EntityNotFoundException(STUDENT_NOT_FOUND_FOR_EDIT);"},{"lineNumber":69,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":70,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":71,"author":{"gitId":"marquestye"},"content":" StudentUpdateRequest updateRequest \u003d getAndValidateRequestBody(StudentUpdateRequest.class);"},{"lineNumber":72,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":73,"author":{"gitId":"marquestye"},"content":" Course course \u003d sqlLogic.getCourse(courseId);"},{"lineNumber":74,"author":{"gitId":"marquestye"},"content":" Section section \u003d sqlLogic.getSectionOrCreate(courseId, updateRequest.getSection());"},{"lineNumber":75,"author":{"gitId":"marquestye"},"content":" Team team \u003d sqlLogic.getTeamOrCreate(section, updateRequest.getTeam());"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":" Student studentToUpdate \u003d new Student(course, updateRequest.getName(), updateRequest.getEmail(),"},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":" updateRequest.getComments(), team);"},{"lineNumber":78,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" try {"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":" //we swap out email before we validate"},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" //TODO: this is duct tape at the moment, need to refactor how we do the validation"},{"lineNumber":82,"author":{"gitId":"marquestye"},"content":" String newEmail \u003d studentToUpdate.getEmail();"},{"lineNumber":83,"author":{"gitId":"marquestye"},"content":" studentToUpdate.setEmail(existingStudent.getEmail());"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":" sqlLogic.validateSectionsAndTeams(Arrays.asList(studentToUpdate), courseId);"},{"lineNumber":85,"author":{"gitId":"marquestye"},"content":" studentToUpdate.setEmail(newEmail);"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":87,"author":{"gitId":"marquestye"},"content":" studentToUpdate.setId(existingStudent.getId());"},{"lineNumber":88,"author":{"gitId":"marquestye"},"content":" Student updatedStudent \u003d sqlLogic.updateStudentCascade(studentToUpdate);"},{"lineNumber":89,"author":{"gitId":"marquestye"},"content":" taskQueuer.scheduleStudentForSearchIndexing(courseId, updatedStudent.getEmail());"},{"lineNumber":90,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":91,"author":{"gitId":"marquestye"},"content":" if (!studentEmail.equals(updateRequest.getEmail()) \u0026\u0026 updateRequest.getIsSessionSummarySendEmail()) {"},{"lineNumber":92,"author":{"gitId":"marquestye"},"content":" boolean emailSent \u003d sendEmail(courseId, updateRequest.getEmail());"},{"lineNumber":93,"author":{"gitId":"marquestye"},"content":" String statusMessage \u003d emailSent ? SUCCESSFUL_UPDATE_WITH_EMAIL"},{"lineNumber":94,"author":{"gitId":"marquestye"},"content":" : SUCCESSFUL_UPDATE_BUT_EMAIL_FAILED;"},{"lineNumber":95,"author":{"gitId":"marquestye"},"content":" return new JsonResult(statusMessage);"},{"lineNumber":96,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":97,"author":{"gitId":"marquestye"},"content":" } catch (EnrollException e) {"},{"lineNumber":98,"author":{"gitId":"marquestye"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":99,"author":{"gitId":"marquestye"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":100,"author":{"gitId":"marquestye"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":101,"author":{"gitId":"marquestye"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":102,"author":{"gitId":"marquestye"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":103,"author":{"gitId":"marquestye"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":104,"author":{"gitId":"marquestye"},"content":" throw new InvalidOperationException(\"Trying to update to an email that is already in use\", e);"},{"lineNumber":105,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":106,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":107,"author":{"gitId":"marquestye"},"content":" return new JsonResult(SUCCESSFUL_UPDATE);"},{"lineNumber":108,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":109,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":110,"author":{"gitId":"marquestye"},"content":" private JsonResult executeWithDatastore(String courseId, String studentEmail)"},{"lineNumber":111,"author":{"gitId":"marquestye"},"content":" throws InvalidHttpRequestBodyException, InvalidOperationException {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d logic.getStudentForEmail(courseId, studentEmail);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (student \u003d\u003d null) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(STUDENT_NOT_FOUND_FOR_EDIT);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" StudentUpdateRequest updateRequest \u003d getAndValidateRequestBody(StudentUpdateRequest.class);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" StudentAttributes studentToUpdate \u003d StudentAttributes.builder(courseId, updateRequest.getEmail())"},{"lineNumber":119,"author":{"gitId":"-"},"content":" .withName(updateRequest.getName())"},{"lineNumber":120,"author":{"gitId":"-"},"content":" .withSectionName(updateRequest.getSection())"},{"lineNumber":121,"author":{"gitId":"-"},"content":" .withTeamName(updateRequest.getTeam())"},{"lineNumber":122,"author":{"gitId":"-"},"content":" .withComment(updateRequest.getComments())"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" //we swap out email before we validate"},{"lineNumber":127,"author":{"gitId":"-"},"content":" //TODO: this is duct tape at the moment, need to refactor how we do the validation"},{"lineNumber":128,"author":{"gitId":"-"},"content":" String newEmail \u003d studentToUpdate.getEmail();"},{"lineNumber":129,"author":{"gitId":"-"},"content":" studentToUpdate.setEmail(student.getEmail());"},{"lineNumber":130,"author":{"gitId":"-"},"content":" logic.validateSectionsAndTeams(Arrays.asList(studentToUpdate), student.getCourse());"},{"lineNumber":131,"author":{"gitId":"-"},"content":" studentToUpdate.setEmail(newEmail);"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" StudentAttributes updatedStudent \u003d logic.updateStudentCascade("},{"lineNumber":134,"author":{"gitId":"-"},"content":" StudentAttributes.updateOptionsBuilder(courseId, studentEmail)"},{"lineNumber":135,"author":{"gitId":"-"},"content":" .withName(updateRequest.getName())"},{"lineNumber":136,"author":{"gitId":"-"},"content":" .withNewEmail(updateRequest.getEmail())"},{"lineNumber":137,"author":{"gitId":"-"},"content":" .withTeamName(updateRequest.getTeam())"},{"lineNumber":138,"author":{"gitId":"-"},"content":" .withSectionName(updateRequest.getSection())"},{"lineNumber":139,"author":{"gitId":"-"},"content":" .withComment(updateRequest.getComments())"},{"lineNumber":140,"author":{"gitId":"-"},"content":" .build());"},{"lineNumber":141,"author":{"gitId":"-"},"content":" taskQueuer.scheduleStudentForSearchIndexing(updatedStudent.getCourse(), updatedStudent.getEmail());"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" if (!student.getEmail().equals(updateRequest.getEmail())) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" logic.resetStudentGoogleId(updateRequest.getEmail(), courseId);"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":" if (updateRequest.getIsSessionSummarySendEmail()) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" boolean emailSent \u003d sendEmail(courseId, updateRequest.getEmail());"},{"lineNumber":148,"author":{"gitId":"-"},"content":" String statusMessage \u003d emailSent ? SUCCESSFUL_UPDATE_WITH_EMAIL"},{"lineNumber":149,"author":{"gitId":"-"},"content":" : SUCCESSFUL_UPDATE_BUT_EMAIL_FAILED;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return new JsonResult(statusMessage);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":" } catch (EnrollException e) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(e);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" } catch (InvalidParametersException e) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" throw new InvalidHttpRequestBodyException(e);"},{"lineNumber":157,"author":{"gitId":"-"},"content":" } catch (EntityDoesNotExistException ednee) {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" throw new EntityNotFoundException(ednee);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" } catch (EntityAlreadyExistsException e) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" throw new InvalidOperationException(\"Trying to update to an email that is already in use\", e);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" return new JsonResult(SUCCESSFUL_UPDATE);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":167,"author":{"gitId":"-"},"content":" * Sends the feedback session summary as an email."},{"lineNumber":168,"author":{"gitId":"-"},"content":" *"},{"lineNumber":169,"author":{"gitId":"-"},"content":" * @return The true if email was sent successfully or false otherwise."},{"lineNumber":170,"author":{"gitId":"-"},"content":" */"},{"lineNumber":171,"author":{"gitId":"-"},"content":" private boolean sendEmail(String courseId, String studentEmail) {"},{"lineNumber":172,"author":{"gitId":"marquestye"},"content":" if (isCourseMigrated(courseId)) {"},{"lineNumber":173,"author":{"gitId":"marquestye"},"content":" EmailWrapper email \u003d sqlEmailGenerator.generateFeedbackSessionSummaryOfCourse("},{"lineNumber":174,"author":{"gitId":"marquestye"},"content":" courseId, studentEmail, EmailType.STUDENT_EMAIL_CHANGED);"},{"lineNumber":175,"author":{"gitId":"marquestye"},"content":" EmailSendingStatus status \u003d emailSender.sendEmail(email);"},{"lineNumber":176,"author":{"gitId":"marquestye"},"content":" return status.isSuccess();"},{"lineNumber":177,"author":{"gitId":"marquestye"},"content":" } else {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" EmailWrapper email \u003d emailGenerator.generateFeedbackSessionSummaryOfCourse("},{"lineNumber":179,"author":{"gitId":"-"},"content":" courseId, studentEmail, EmailType.STUDENT_EMAIL_CHANGED);"},{"lineNumber":180,"author":{"gitId":"-"},"content":" EmailSendingStatus status \u003d emailSender.sendEmail(email);"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return status.isSuccess();"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":68,"-":117}},{"path":"src/test/java/teammates/common/datatransfer/SqlSessionResultsBundleTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.common.datatransfer;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import java.util.ArrayList;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import java.util.HashMap;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import java.util.HashSet;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import java.util.List;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import java.util.Map;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.Test;"},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":" * SUT: {@link SqlSessionResultsBundle}."},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"public class SqlSessionResultsBundleTest extends BaseTestCase {"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":" public void testGetQuestionResponseMap() {"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":" SqlDataBundle responseBundle \u003d loadSqlDataBundle(\"/SqlFeedbackSessionResultsBundleTest.json\");"},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e allExpectedResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":" allExpectedResponses.add(responseBundle.feedbackResponses.get(\"response1ForQ1\").toString());"},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" allExpectedResponses.add(responseBundle.feedbackResponses.get(\"response2ForQ1\").toString());"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle \u003d"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" new SqlSessionResultsBundle("},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackQuestions.values()),"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackResponses.values()),"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(),"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" new SqlCourseRoster(new ArrayList\u003c\u003e(responseBundle.students.values()),"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.instructors.values()))"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" ______TS(\"Test question having responses\");"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d responseBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e allResponses \u003d bundle.getQuestionResponseMap().get(fq);"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" assertEquals(2, allResponses.size());"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e allResponsesString \u003d new ArrayList\u003c\u003e();"},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" allResponsesString.add(allResponses.get(0).toString());"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" allResponsesString.add(allResponses.get(1).toString());"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" assertEquals(allExpectedResponses, allResponsesString);"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" ______TS(\"Test question having no responses\");"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":" fq \u003d responseBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" allResponses \u003d bundle.getQuestionResponseMap().get(fq);"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" assertEquals(0, allResponses.size());"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" public void testGetQuestionMissingResponseMap() {"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":" SqlDataBundle responseBundle \u003d loadSqlDataBundle(\"/SqlFeedbackSessionResultsBundleTest.json\");"},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e expectedMissingResponses \u003d new ArrayList\u003c\u003e();"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" expectedMissingResponses.add(responseBundle.feedbackResponses.get(\"response1ForQ1\").toString());"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" expectedMissingResponses.add(responseBundle.feedbackResponses.get(\"response2ForQ1\").toString());"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle \u003d"},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" new SqlSessionResultsBundle("},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackQuestions.values()),"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(),"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackResponses.values()),"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":" new SqlCourseRoster(new ArrayList\u003c\u003e(responseBundle.students.values()),"},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.instructors.values()))"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" ______TS(\"Test question having missing responses\");"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion fq \u003d responseBundle.feedbackQuestions.get(\"qn1InSession1InCourse1\");"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":" List\u003cFeedbackResponse\u003e missingResponses \u003d bundle.getQuestionMissingResponseMap().get(fq);"},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" assertEquals(2, missingResponses.size());"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" List\u003cString\u003e missingResponsesString \u003d new ArrayList\u003c\u003e();"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" missingResponsesString.add(missingResponses.get(0).toString());"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" missingResponsesString.add(missingResponses.get(1).toString());"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":" assertEquals(expectedMissingResponses, missingResponsesString);"},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" ______TS(\"Test question having no missing responses\");"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" fq \u003d responseBundle.feedbackQuestions.get(\"qn4InSession1InCourse1\");"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" missingResponses \u003d bundle.getQuestionMissingResponseMap().get(fq);"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" assertEquals(0, missingResponses.size());"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":" public void testIsResponseGiverRecipientVisible_typicalCase_shouldReturnCorrectValues() {"},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" SqlDataBundle responseBundle \u003d loadSqlDataBundle(\"/SqlFeedbackSessionResultsBundleTest.json\");"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":" FeedbackSession session1Course1 \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question1ForS1C1 \u003d getTypicalFeedbackQuestionForSession(session1Course1);"},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":" FeedbackQuestion question2ForS1C1 \u003d getTypicalFeedbackQuestionForSession(session1Course1);"},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response1ForQ1S1C1 \u003d getTypicalFeedbackResponseForQuestion(question1ForS1C1);"},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response2ForQ1S1C1 \u003d getTypicalFeedbackResponseForQuestion(question1ForS1C1);"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response1ForQ2S1C1 \u003d getTypicalFeedbackResponseForQuestion(question2ForS1C1);"},{"lineNumber":112,"author":{"gitId":"xenosf"},"content":" FeedbackResponse response2ForQ2S1C1 \u003d getTypicalFeedbackResponseForQuestion(question2ForS1C1);"},{"lineNumber":113,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":114,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseGiverVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response1ForQ1S1C1, true);"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response2ForQ1S1C1, false);"},{"lineNumber":117,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response1ForQ2S1C1, true);"},{"lineNumber":118,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable.put(response2ForQ2S1C1, false);"},{"lineNumber":119,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":120,"author":{"gitId":"xenosf"},"content":" Map\u003cFeedbackResponse, Boolean\u003e responseRecipientVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response1ForQ1S1C1, false);"},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response2ForQ1S1C1, true);"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response1ForQ2S1C1, true);"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable.put(response2ForQ2S1C1, false);"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle \u003d"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" new SqlSessionResultsBundle("},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackQuestions.values()),"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackResponses.values()),"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(),"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" responseGiverVisibilityTable,"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" responseRecipientVisibilityTable,"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" new SqlCourseRoster(new ArrayList\u003c\u003e(responseBundle.students.values()),"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.instructors.values()))"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" for (Map.Entry\u003cFeedbackResponse, Boolean\u003e visibilityEntry : responseGiverVisibilityTable.entrySet()) {"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" assertEquals(visibilityEntry.getValue(),"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":" bundle.isResponseGiverVisible(visibilityEntry.getKey()));"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":" for (Map.Entry\u003cFeedbackResponse, Boolean\u003e visibilityEntry : responseRecipientVisibilityTable.entrySet()) {"},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" assertEquals(visibilityEntry.getValue(),"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":" bundle.isResponseRecipientVisible(visibilityEntry.getKey()));"},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" public void testIsCommentGiverVisible_typicalCase_shouldReturnCorrectValues() {"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" SqlDataBundle responseBundle \u003d loadSqlDataBundle(\"/SqlFeedbackSessionResultsBundleTest.json\");"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" Map\u003cLong, Boolean\u003e commentGiverVisibilityTable \u003d new HashMap\u003c\u003e();"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" commentGiverVisibilityTable.put(1L, true);"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" commentGiverVisibilityTable.put(2L, false);"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":" SqlSessionResultsBundle bundle \u003d"},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" new SqlSessionResultsBundle("},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackQuestions.values()),"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":" new HashSet\u003c\u003e(),"},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.feedbackResponses.values()),"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(),"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" new HashMap\u003c\u003e(),"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" commentGiverVisibilityTable,"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" new SqlCourseRoster(new ArrayList\u003c\u003e(responseBundle.students.values()),"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" new ArrayList\u003c\u003e(responseBundle.instructors.values()))"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":" );"},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" // Manually add comment IDs as loadSqlDataBundle does not add comment IDs"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment comment1 \u003d responseBundle.feedbackResponseComments.get(\"comment1ToResponse1ForQ1\");"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":" FeedbackResponseComment comment2 \u003d responseBundle.feedbackResponseComments.get(\"comment2ToResponse1ForQ1\");"},{"lineNumber":178,"author":{"gitId":"xenosf"},"content":" comment1.setId(1L);"},{"lineNumber":179,"author":{"gitId":"xenosf"},"content":" comment2.setId(2L);"},{"lineNumber":180,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":181,"author":{"gitId":"xenosf"},"content":" assertTrue(bundle.isCommentGiverVisible(comment1));"},{"lineNumber":182,"author":{"gitId":"xenosf"},"content":" assertFalse(bundle.isCommentGiverVisible(comment2));"},{"lineNumber":183,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":184,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":185,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":186,"author":{"gitId":"xenosf"},"content":" public void testGetAnonName_typicalCase_shouldGenerateCorrectly() {"},{"lineNumber":187,"author":{"gitId":"xenosf"},"content":" String anonName \u003d SqlSessionResultsBundle.getAnonName(FeedbackParticipantType.STUDENTS, \"\");"},{"lineNumber":188,"author":{"gitId":"xenosf"},"content":" assertTrue(anonName.startsWith(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT));"},{"lineNumber":189,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":190,"author":{"gitId":"xenosf"},"content":" anonName \u003d SqlSessionResultsBundle.getAnonName(FeedbackParticipantType.STUDENTS, \"test@gmail.com\");"},{"lineNumber":191,"author":{"gitId":"xenosf"},"content":" assertTrue(anonName.startsWith(Const.DISPLAYED_NAME_FOR_ANONYMOUS_PARTICIPANT));"},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":193}},{"path":"src/test/java/teammates/sqllogic/core/AccountRequestsLogicTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"xenosf"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":3,"author":{"gitId":"xenosf"},"content":"import static org.mockito.ArgumentMatchers.any;"},{"lineNumber":4,"author":{"gitId":"xenosf"},"content":"import static org.mockito.ArgumentMatchers.nullable;"},{"lineNumber":5,"author":{"gitId":"xenosf"},"content":"import static org.mockito.Mockito.mock;"},{"lineNumber":6,"author":{"gitId":"xenosf"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":7,"author":{"gitId":"xenosf"},"content":"import static org.mockito.Mockito.verify;"},{"lineNumber":8,"author":{"gitId":"xenosf"},"content":"import static org.mockito.Mockito.when;"},{"lineNumber":9,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":10,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":11,"author":{"gitId":"xenosf"},"content":"import org.testng.annotations.Test;"},{"lineNumber":12,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":13,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":14,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":15,"author":{"gitId":"xenosf"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":16,"author":{"gitId":"xenosf"},"content":"import teammates.common.util.Const;"},{"lineNumber":17,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlapi.AccountRequestsDb;"},{"lineNumber":18,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":19,"author":{"gitId":"xenosf"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":20,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":21,"author":{"gitId":"xenosf"},"content":"/**"},{"lineNumber":22,"author":{"gitId":"xenosf"},"content":" * SUT: {@link AccountRequestsLogic}."},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":" */"},{"lineNumber":24,"author":{"gitId":"xenosf"},"content":"public class AccountRequestsLogicTest extends BaseTestCase {"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":26,"author":{"gitId":"xenosf"},"content":" private final AccountRequestsLogic arLogic \u003d AccountRequestsLogic.inst();"},{"lineNumber":27,"author":{"gitId":"xenosf"},"content":" private AccountRequestsDb arDb;"},{"lineNumber":28,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":29,"author":{"gitId":"xenosf"},"content":" @BeforeMethod"},{"lineNumber":30,"author":{"gitId":"xenosf"},"content":" public void setUpMethod() {"},{"lineNumber":31,"author":{"gitId":"xenosf"},"content":" arDb \u003d mock(AccountRequestsDb.class);"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":" arLogic.initLogicDependencies(arDb);"},{"lineNumber":33,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":34,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":36,"author":{"gitId":"xenosf"},"content":" public void testCreateAccountRequest_typicalRequest_success() throws Exception {"},{"lineNumber":37,"author":{"gitId":"xenosf"},"content":" AccountRequest accountRequest \u003d getTypicalAccountRequest();"},{"lineNumber":38,"author":{"gitId":"xenosf"},"content":" when(arDb.createAccountRequest(accountRequest)).thenReturn(accountRequest);"},{"lineNumber":39,"author":{"gitId":"xenosf"},"content":" AccountRequest createdAccountRequest \u003d arLogic.createAccountRequest(accountRequest);"},{"lineNumber":40,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":41,"author":{"gitId":"xenosf"},"content":" assertEquals(accountRequest, createdAccountRequest);"},{"lineNumber":42,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).createAccountRequest(accountRequest);"},{"lineNumber":43,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":44,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":45,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":46,"author":{"gitId":"xenosf"},"content":" public void testCreateAccountRequest_requestAlreadyExists_failure() throws Exception {"},{"lineNumber":47,"author":{"gitId":"xenosf"},"content":" AccountRequest duplicateAccountRequest \u003d getTypicalAccountRequest();"},{"lineNumber":48,"author":{"gitId":"xenosf"},"content":" when(arDb.createAccountRequest(duplicateAccountRequest))"},{"lineNumber":49,"author":{"gitId":"xenosf"},"content":" .thenThrow(new EntityAlreadyExistsException(\"test exception\"));"},{"lineNumber":50,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":51,"author":{"gitId":"xenosf"},"content":" assertThrows(EntityAlreadyExistsException.class, () -\u003e {"},{"lineNumber":52,"author":{"gitId":"xenosf"},"content":" arLogic.createAccountRequest(duplicateAccountRequest);"},{"lineNumber":53,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":54,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).createAccountRequest(duplicateAccountRequest);"},{"lineNumber":55,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":56,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":57,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":58,"author":{"gitId":"xenosf"},"content":" public void testCreateAccountRequest_invalidParams_failure() throws Exception {"},{"lineNumber":59,"author":{"gitId":"xenosf"},"content":" AccountRequest invalidEmailAccountRequest \u003d getTypicalAccountRequest();"},{"lineNumber":60,"author":{"gitId":"xenosf"},"content":" invalidEmailAccountRequest.setEmail(\"invalid email\");"},{"lineNumber":61,"author":{"gitId":"xenosf"},"content":" when(arDb.createAccountRequest(invalidEmailAccountRequest))"},{"lineNumber":62,"author":{"gitId":"xenosf"},"content":" .thenThrow(new InvalidParametersException(\"test exception\"));"},{"lineNumber":63,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":64,"author":{"gitId":"xenosf"},"content":" assertThrows(InvalidParametersException.class, () -\u003e {"},{"lineNumber":65,"author":{"gitId":"xenosf"},"content":" arLogic.createAccountRequest(invalidEmailAccountRequest);"},{"lineNumber":66,"author":{"gitId":"xenosf"},"content":" });"},{"lineNumber":67,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).createAccountRequest(invalidEmailAccountRequest);"},{"lineNumber":68,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":69,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":70,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":71,"author":{"gitId":"xenosf"},"content":" public void testUpdateAccountRequest_typicalRequest_success()"},{"lineNumber":72,"author":{"gitId":"xenosf"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":73,"author":{"gitId":"xenosf"},"content":" AccountRequest ar \u003d getTypicalAccountRequest();"},{"lineNumber":74,"author":{"gitId":"xenosf"},"content":" when(arDb.updateAccountRequest(ar)).thenReturn(ar);"},{"lineNumber":75,"author":{"gitId":"xenosf"},"content":" AccountRequest updatedAr \u003d arLogic.updateAccountRequest(ar);"},{"lineNumber":76,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":77,"author":{"gitId":"xenosf"},"content":" assertEquals(ar, updatedAr);"},{"lineNumber":78,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).updateAccountRequest(ar);"},{"lineNumber":79,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":80,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":81,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":82,"author":{"gitId":"xenosf"},"content":" public void testUpdateAccountRequest_requestNotFound_failure()"},{"lineNumber":83,"author":{"gitId":"xenosf"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":84,"author":{"gitId":"xenosf"},"content":" AccountRequest arNotFound \u003d getTypicalAccountRequest();"},{"lineNumber":85,"author":{"gitId":"xenosf"},"content":" when(arDb.updateAccountRequest(arNotFound)).thenThrow(new EntityDoesNotExistException(\"test message\"));"},{"lineNumber":86,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":87,"author":{"gitId":"xenosf"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":88,"author":{"gitId":"xenosf"},"content":" () -\u003e arLogic.updateAccountRequest(arNotFound));"},{"lineNumber":89,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).updateAccountRequest(any(AccountRequest.class));"},{"lineNumber":90,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":91,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":92,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":93,"author":{"gitId":"xenosf"},"content":" public void testDeleteAccountRequest_typicalRequest_success() {"},{"lineNumber":94,"author":{"gitId":"xenosf"},"content":" AccountRequest ar \u003d getTypicalAccountRequest();"},{"lineNumber":95,"author":{"gitId":"xenosf"},"content":" when(arDb.getAccountRequest(ar.getEmail(), ar.getInstitute())).thenReturn(ar);"},{"lineNumber":96,"author":{"gitId":"xenosf"},"content":" arLogic.deleteAccountRequest(ar.getEmail(), ar.getInstitute());"},{"lineNumber":97,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":98,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).deleteAccountRequest(any(AccountRequest.class));"},{"lineNumber":99,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":100,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":101,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":102,"author":{"gitId":"xenosf"},"content":" public void testDeleteAccountRequest_nonexistentRequest_shouldSilentlyDelete() {"},{"lineNumber":103,"author":{"gitId":"xenosf"},"content":" arLogic.deleteAccountRequest(\"not_exist\", \"not_exist\");"},{"lineNumber":104,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":105,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).deleteAccountRequest(nullable(AccountRequest.class));"},{"lineNumber":106,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":107,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":108,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":109,"author":{"gitId":"xenosf"},"content":" public void testGetAccountRequestByRegistrationKey_typicalRequest_success() {"},{"lineNumber":110,"author":{"gitId":"xenosf"},"content":" AccountRequest ar \u003d getTypicalAccountRequest();"},{"lineNumber":111,"author":{"gitId":"xenosf"},"content":" String regkey \u003d \"regkey\";"},{"lineNumber":112,"author":{"gitId":"xenosf"},"content":" ar.setRegistrationKey(regkey);"},{"lineNumber":113,"author":{"gitId":"xenosf"},"content":" when(arDb.getAccountRequestByRegistrationKey(regkey)).thenReturn(ar);"},{"lineNumber":114,"author":{"gitId":"xenosf"},"content":" AccountRequest actualAr \u003d"},{"lineNumber":115,"author":{"gitId":"xenosf"},"content":" arLogic.getAccountRequestByRegistrationKey(ar.getRegistrationKey());"},{"lineNumber":116,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":117,"author":{"gitId":"xenosf"},"content":" assertEquals(ar, actualAr);"},{"lineNumber":118,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).getAccountRequestByRegistrationKey(regkey);"},{"lineNumber":119,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":120,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":121,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":122,"author":{"gitId":"xenosf"},"content":" public void testGetAccountRequestByRegistrationKey_nonexistentRequest_shouldReturnNull() throws Exception {"},{"lineNumber":123,"author":{"gitId":"xenosf"},"content":" String nonexistentRegkey \u003d \"not_exist\";"},{"lineNumber":124,"author":{"gitId":"xenosf"},"content":" when(arDb.getAccountRequestByRegistrationKey(nonexistentRegkey)).thenReturn(null);"},{"lineNumber":125,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":126,"author":{"gitId":"xenosf"},"content":" assertNull(arLogic.getAccountRequestByRegistrationKey(nonexistentRegkey));"},{"lineNumber":127,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).getAccountRequestByRegistrationKey(nonexistentRegkey);"},{"lineNumber":128,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":129,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":130,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":131,"author":{"gitId":"xenosf"},"content":" public void testGetAccountRequest_typicalRequest_success() {"},{"lineNumber":132,"author":{"gitId":"xenosf"},"content":" AccountRequest expectedAr \u003d getTypicalAccountRequest();"},{"lineNumber":133,"author":{"gitId":"xenosf"},"content":" when(arDb.getAccountRequest(expectedAr.getEmail(), expectedAr.getInstitute())).thenReturn(expectedAr);"},{"lineNumber":134,"author":{"gitId":"xenosf"},"content":" AccountRequest actualAr \u003d"},{"lineNumber":135,"author":{"gitId":"xenosf"},"content":" arLogic.getAccountRequest(expectedAr.getEmail(), expectedAr.getInstitute());"},{"lineNumber":136,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":137,"author":{"gitId":"xenosf"},"content":" assertEquals(expectedAr, actualAr);"},{"lineNumber":138,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).getAccountRequest(expectedAr.getEmail(), expectedAr.getInstitute());"},{"lineNumber":139,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":140,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":141,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":142,"author":{"gitId":"xenosf"},"content":" public void testGetAccountRequest_nonexistentRequest_shouldReturnNull() {"},{"lineNumber":143,"author":{"gitId":"xenosf"},"content":" String nonexistentEmail \u003d \"not-found@test.com\";"},{"lineNumber":144,"author":{"gitId":"xenosf"},"content":" String nonexistentInstitute \u003d \"not-found\";"},{"lineNumber":145,"author":{"gitId":"xenosf"},"content":" when(arDb.getAccountRequest(nonexistentEmail, nonexistentInstitute)).thenReturn(null);"},{"lineNumber":146,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":147,"author":{"gitId":"xenosf"},"content":" assertNull(arLogic.getAccountRequest(nonexistentEmail, nonexistentInstitute));"},{"lineNumber":148,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).getAccountRequest(nonexistentEmail, nonexistentInstitute);"},{"lineNumber":149,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":150,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":151,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":152,"author":{"gitId":"xenosf"},"content":" public void testResetAccountRequest_typicalRequest_success()"},{"lineNumber":153,"author":{"gitId":"xenosf"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":154,"author":{"gitId":"xenosf"},"content":" AccountRequest accountRequest \u003d getTypicalAccountRequest();"},{"lineNumber":155,"author":{"gitId":"xenosf"},"content":" accountRequest.setRegisteredAt(Const.TIME_REPRESENTS_NOW);"},{"lineNumber":156,"author":{"gitId":"xenosf"},"content":" when(arDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()))"},{"lineNumber":157,"author":{"gitId":"xenosf"},"content":" .thenReturn(accountRequest);"},{"lineNumber":158,"author":{"gitId":"xenosf"},"content":" when(arDb.updateAccountRequest(accountRequest)).thenReturn(accountRequest);"},{"lineNumber":159,"author":{"gitId":"xenosf"},"content":" accountRequest \u003d arLogic.resetAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":160,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":161,"author":{"gitId":"xenosf"},"content":" assertNull(accountRequest.getRegisteredAt());"},{"lineNumber":162,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":163,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":164,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":165,"author":{"gitId":"xenosf"},"content":" @Test"},{"lineNumber":166,"author":{"gitId":"xenosf"},"content":" public void testResetAccountRequest_nonexistentRequest_failure()"},{"lineNumber":167,"author":{"gitId":"xenosf"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":168,"author":{"gitId":"xenosf"},"content":" AccountRequest accountRequest \u003d getTypicalAccountRequest();"},{"lineNumber":169,"author":{"gitId":"xenosf"},"content":" accountRequest.setRegisteredAt(Const.TIME_REPRESENTS_NOW);"},{"lineNumber":170,"author":{"gitId":"xenosf"},"content":" when(arDb.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()))"},{"lineNumber":171,"author":{"gitId":"xenosf"},"content":" .thenReturn(null);"},{"lineNumber":172,"author":{"gitId":"xenosf"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":173,"author":{"gitId":"xenosf"},"content":" () -\u003e arLogic.resetAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute()));"},{"lineNumber":174,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(1)).getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":175,"author":{"gitId":"xenosf"},"content":" verify(arDb, times(0)).updateAccountRequest(nullable(AccountRequest.class));"},{"lineNumber":176,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":177,"author":{"gitId":"xenosf"},"content":"}"}],"authorContributionMap":{"xenosf":177}},{"path":"src/test/java/teammates/sqllogic/core/AccountsLogicTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.mock;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.verify;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.when;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.AccountsDb;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.ReadNotification;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.User;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * SUT: {@link AccountsLogic}."},{"lineNumber":27,"author":{"gitId":"-"},"content":" */"},{"lineNumber":28,"author":{"gitId":"-"},"content":"public class AccountsLogicTest extends BaseTestCase {"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" private AccountsLogic accountsLogic \u003d AccountsLogic.inst();"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" private AccountsDb accountsDb;"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private NotificationsLogic notificationsLogic;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"yuanxi1"},"content":" private CoursesLogic coursesLogic;"},{"lineNumber":39,"author":{"gitId":"yuanxi1"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public void setUpMethod() {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" accountsDb \u003d mock(AccountsDb.class);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" notificationsLogic \u003d mock(NotificationsLogic.class);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" usersLogic \u003d mock(UsersLogic.class);"},{"lineNumber":45,"author":{"gitId":"yuanxi1"},"content":" accountsLogic.initLogicDependencies(accountsDb, notificationsLogic, usersLogic, coursesLogic);"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public void testDeleteAccount_accountExists_success() {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":" when(accountsLogic.getAccountForGoogleId(googleId)).thenReturn(account);"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccount(googleId);"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" verify(accountsDb, times(1)).deleteAccount(account);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void testDeleteAccountCascade_googleIdExists_success() {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" List\u003cUser\u003e users \u003d new ArrayList\u003c\u003e();"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c 2; ++i) {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" users.add(getTypicalInstructor());"},{"lineNumber":68,"author":{"gitId":"-"},"content":" users.add(getTypicalStudent());"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" when(usersLogic.getAllUsersByGoogleId(googleId)).thenReturn(users);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" when(accountsLogic.getAccountForGoogleId(googleId)).thenReturn(account);"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" accountsLogic.deleteAccountCascade(googleId);"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" for (User user : users) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" verify(usersLogic, times(1)).deleteUser(user);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":" verify(accountsDb, times(1)).deleteAccount(account);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_shouldReturnCorrectReadNotificationId_success()"},{"lineNumber":84,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":87,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":88,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(notification);"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" List\u003cUUID\u003e readNotificationIds \u003d accountsLogic.updateReadNotifications(googleId, notificationId,"},{"lineNumber":94,"author":{"gitId":"-"},"content":" notification.getEndTime());"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" verify(accountsDb, times(1)).getAccountByGoogleId(googleId);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" verify(notificationsLogic, times(1)).getNotification(notificationId);"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" assertEquals(1, readNotificationIds.size());"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertEquals(notificationId, readNotificationIds.get(0));"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_shouldAddReadNotificationToAccount_success()"},{"lineNumber":105,"author":{"gitId":"-"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":112,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(notification);"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime());"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":" verify(accountsDb, times(1)).getAccountByGoogleId(googleId);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" verify(notificationsLogic, times(1)).getNotification(notificationId);"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" List\u003cReadNotification\u003e accountReadNotifications \u003d account.getReadNotifications();"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertEquals(1, accountReadNotifications.size());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" ReadNotification readNotification \u003d accountReadNotifications.get(0);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assertSame(account, readNotification.getAccount());"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertSame(notification, readNotification.getNotification());"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_accountDoesNotExist_throwEntityDoesNotExistException() {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":129,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":130,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":131,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(null);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(notification);"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":137,"author":{"gitId":"-"},"content":" () -\u003e accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime()));"},{"lineNumber":138,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to update the read notifications of a non-existent account.\", ex.getMessage());"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":142,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_notificationDoesNotExist_throwEntityDoesNotExistException() {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":144,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":145,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":146,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(null);"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":152,"author":{"gitId":"-"},"content":" () -\u003e accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime()));"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to mark as read a notification that does not exist.\", ex.getMessage());"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":157,"author":{"gitId":"-"},"content":" public void testUpdateReadNotifications_markExpiredNotificationAsRead_throwInvalidParametersException() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":159,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":160,"author":{"gitId":"-"},"content":" notification.setEndTime(Instant.parse(\"2012-01-01T00:00:00Z\"));"},{"lineNumber":161,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" UUID notificationId \u003d notification.getId();"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" when(notificationsLogic.getNotification(notificationId)).thenReturn(notification);"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" InvalidParametersException ex \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":168,"author":{"gitId":"-"},"content":" () -\u003e accountsLogic.updateReadNotifications(googleId, notificationId, notification.getEndTime()));"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to mark an expired notification as read.\", ex.getMessage());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" }"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":173,"author":{"gitId":"-"},"content":" public void testGetReadNotificationsId_doesNotHaveReadNotifications_success() {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":175,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":176,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" List\u003cUUID\u003e readNotifications \u003d accountsLogic.getReadNotificationsId(googleId);"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertEquals(0, readNotifications.size());"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":184,"author":{"gitId":"-"},"content":" public void testGetReadNotificationsId_hasReadNotifications_success() {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" Account account \u003d getTypicalAccount();"},{"lineNumber":186,"author":{"gitId":"-"},"content":" List\u003cReadNotification\u003e readNotifications \u003d new ArrayList\u003c\u003e();"},{"lineNumber":187,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c 10; i++) {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" Notification notification \u003d getTypicalNotificationWithId();"},{"lineNumber":189,"author":{"gitId":"-"},"content":" ReadNotification readNotification \u003d new ReadNotification(account, notification);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" readNotifications.add(readNotification);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":" account.setReadNotifications(readNotifications);"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" String googleId \u003d account.getGoogleId();"},{"lineNumber":195,"author":{"gitId":"-"},"content":" when(accountsDb.getAccountByGoogleId(googleId)).thenReturn(account);"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" List\u003cUUID\u003e actualReadNotifications \u003d accountsLogic.getReadNotificationsId(googleId);"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" assertEquals(10, actualReadNotifications.size());"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" for (int i \u003d 0; i \u003c 10; i++) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" assertEquals(readNotifications.get(i).getNotification().getId(),"},{"lineNumber":203,"author":{"gitId":"-"},"content":" actualReadNotifications.get(i));"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"yuanxi1":3,"-":203}},{"path":"src/test/java/teammates/sqllogic/core/CoursesLogicTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.mock;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.verify;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.when;"},{"lineNumber":7,"author":{"gitId":"domoberzin"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":8,"author":{"gitId":"domoberzin"},"content":"import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"domoberzin"},"content":"import java.time.Duration;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":20,"author":{"gitId":"domoberzin"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.CoursesDb;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":23,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":24,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":26,"author":{"gitId":"domoberzin"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * SUT: {@code CoursesLogic}."},{"lineNumber":31,"author":{"gitId":"-"},"content":" */"},{"lineNumber":32,"author":{"gitId":"-"},"content":"public class CoursesLogicTest extends BaseTestCase {"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" private CoursesLogic coursesLogic \u003d CoursesLogic.inst();"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"domoberzin"},"content":" private UsersLogic usersLogic;"},{"lineNumber":37,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":38,"author":{"gitId":"domoberzin"},"content":" private FeedbackSessionsLogic fsLogic;"},{"lineNumber":39,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" private CoursesDb coursesDb;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public void setUp() {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" coursesDb \u003d mock(CoursesDb.class);"},{"lineNumber":45,"author":{"gitId":"domoberzin"},"content":" fsLogic \u003d mock(FeedbackSessionsLogic.class);"},{"lineNumber":46,"author":{"gitId":"domoberzin"},"content":" usersLogic \u003d mock(UsersLogic.class);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" coursesLogic.initLogicDependencies(coursesDb, fsLogic, usersLogic);"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public void testMoveCourseToRecycleBin_shouldReturnBinnedCourse_success()"},{"lineNumber":52,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":54,"author":{"gitId":"-"},"content":" String courseId \u003d course.getId();"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" Course binnedCourse \u003d coursesLogic.moveCourseToRecycleBin(courseId);"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertNotNull(binnedCourse);"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void testMoveCourseToRecycleBin_courseDoesNotExist_throwEntityDoesNotExistException() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" String courseId \u003d getTypicalCourse().getId();"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" () -\u003e coursesLogic.moveCourseToRecycleBin(courseId));"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to move a non-existent course to recycling bin.\", ex.getMessage());"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public void testRestoreCourseFromRecycleBin_shouldSetDeletedAtToNull_success()"},{"lineNumber":78,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":80,"author":{"gitId":"-"},"content":" String courseId \u003d course.getId();"},{"lineNumber":81,"author":{"gitId":"-"},"content":" course.setDeletedAt(Instant.parse(\"2021-01-01T00:00:00Z\"));"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":" coursesLogic.restoreCourseFromRecycleBin(courseId);"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertNull(course.getDeletedAt());"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public void testRestoreCourseFromRecycleBin_courseDoesNotExist_throwEntityDoesNotExistException() {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" String courseId \u003d getTypicalCourse().getId();"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":98,"author":{"gitId":"-"},"content":" () -\u003e coursesLogic.restoreCourseFromRecycleBin(courseId));"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to restore a non-existent course from recycling bin.\", ex.getMessage());"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public void testGetSectionNamesForCourse_shouldReturnListOfSectionNames_success() throws EntityDoesNotExistException {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":106,"author":{"gitId":"-"},"content":" String courseId \u003d course.getId();"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" Section s1 \u003d getTypicalSection();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" s1.setName(\"test-sectionName1\");"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" Section s2 \u003d getTypicalSection();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" s2.setName(\"test-sectionName2\");"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" List\u003cSection\u003e sections \u003d new ArrayList\u003c\u003e();"},{"lineNumber":115,"author":{"gitId":"-"},"content":" sections.add(s1);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" sections.add(s2);"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" course.setSections(sections);"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" List\u003cString\u003e sectionNames \u003d coursesLogic.getSectionNamesForCourse(courseId);"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" List\u003cString\u003e expectedSectionNames \u003d List.of(\"test-sectionName1\", \"test-sectionName2\");"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertEquals(expectedSectionNames, sectionNames);"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public void testGetSectionNamesForCourse_courseDoesNotExist_throwEntityDoesNotExistException()"},{"lineNumber":133,"author":{"gitId":"-"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" String courseId \u003d getTypicalCourse().getId();"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":139,"author":{"gitId":"-"},"content":" () -\u003e coursesLogic.getSectionNamesForCourse(courseId));"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(\"Trying to get section names for a non-existent course.\", ex.getMessage());"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":144,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":145,"author":{"gitId":"domoberzin"},"content":" public void testCreateCourse_shouldReturnCreatedCourse_success()"},{"lineNumber":146,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":147,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":148,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":149,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createCourse(course)).thenReturn(course);"},{"lineNumber":150,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":151,"author":{"gitId":"domoberzin"},"content":" Course createdCourse \u003d coursesLogic.createCourse(course);"},{"lineNumber":152,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":153,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).createCourse(course);"},{"lineNumber":154,"author":{"gitId":"domoberzin"},"content":" assertNotNull(createdCourse);"},{"lineNumber":155,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":156,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":157,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":158,"author":{"gitId":"domoberzin"},"content":" public void testCreateDuplicateCourse_throwEntityAlreadyExistsException()"},{"lineNumber":159,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":160,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":161,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":162,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createCourse(course))"},{"lineNumber":163,"author":{"gitId":"domoberzin"},"content":" .thenThrow(new EntityAlreadyExistsException("},{"lineNumber":164,"author":{"gitId":"domoberzin"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, course.toString())));"},{"lineNumber":165,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":166,"author":{"gitId":"domoberzin"},"content":" EntityAlreadyExistsException ex \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":167,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createCourse(course));"},{"lineNumber":168,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":169,"author":{"gitId":"domoberzin"},"content":" assertEquals(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, course.toString()), ex.getMessage());"},{"lineNumber":170,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":171,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":172,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":173,"author":{"gitId":"domoberzin"},"content":" public void testGetCourse_shouldReturnCourse_success() {"},{"lineNumber":174,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":175,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":176,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":177,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":178,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":179,"author":{"gitId":"domoberzin"},"content":" Course returnedCourse \u003d coursesLogic.getCourse(courseId);"},{"lineNumber":180,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":181,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":182,"author":{"gitId":"domoberzin"},"content":" assertNotNull(returnedCourse);"},{"lineNumber":183,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":184,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":185,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":186,"author":{"gitId":"domoberzin"},"content":" public void testDeleteCourseCascade_shouldDeleteCourse_success() {"},{"lineNumber":187,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":188,"author":{"gitId":"domoberzin"},"content":" List\u003cInstructor\u003e instructors \u003d new ArrayList\u003c\u003e();"},{"lineNumber":189,"author":{"gitId":"domoberzin"},"content":" List\u003cFeedbackSession\u003e feedbackSessions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":190,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":191,"author":{"gitId":"domoberzin"},"content":" FeedbackSession fs \u003d new FeedbackSession(\"test-fs\", course, \"test@email.com\","},{"lineNumber":192,"author":{"gitId":"domoberzin"},"content":" \"test\", Instant.now(), Instant.now(), Instant.now(), Instant.now(), Duration.ofSeconds(60),"},{"lineNumber":193,"author":{"gitId":"domoberzin"},"content":" false, false, false);"},{"lineNumber":194,"author":{"gitId":"domoberzin"},"content":" feedbackSessions.add(fs);"},{"lineNumber":195,"author":{"gitId":"domoberzin"},"content":" instructors.add(getTypicalInstructor());"},{"lineNumber":196,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":197,"author":{"gitId":"domoberzin"},"content":" when(fsLogic.getFeedbackSessionsForCourse(course.getId())).thenReturn(feedbackSessions);"},{"lineNumber":198,"author":{"gitId":"domoberzin"},"content":" when(usersLogic.getInstructorsForCourse(course.getId())).thenReturn(instructors);"},{"lineNumber":199,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(course.getId())).thenReturn(course);"},{"lineNumber":200,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":201,"author":{"gitId":"domoberzin"},"content":" coursesLogic.deleteCourseCascade(course.getId());"},{"lineNumber":202,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":203,"author":{"gitId":"domoberzin"},"content":" verify(usersLogic, times(1)).deleteStudentsInCourseCascade(course.getId());"},{"lineNumber":204,"author":{"gitId":"domoberzin"},"content":" verify(usersLogic, times(1)).getInstructorsForCourse(course.getId());"},{"lineNumber":205,"author":{"gitId":"domoberzin"},"content":" verify(usersLogic, times(1)).deleteInstructorCascade(course.getId(), instructors.get(0).getEmail());"},{"lineNumber":206,"author":{"gitId":"domoberzin"},"content":" verify(fsLogic, times(1)).deleteFeedbackSessionCascade(fs.getName(), course.getId());"},{"lineNumber":207,"author":{"gitId":"domoberzin"},"content":" verify(fsLogic, times(1)).getFeedbackSessionsForCourse(course.getId());"},{"lineNumber":208,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).deleteCourse(course);"},{"lineNumber":209,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).deleteSectionsByCourseId(course.getId());"},{"lineNumber":210,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":211,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":212,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":213,"author":{"gitId":"domoberzin"},"content":" public void testUpdateCourse_shouldReturnUpdatedCourse_success()"},{"lineNumber":214,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":215,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":216,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":217,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":218,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":219,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":220,"author":{"gitId":"domoberzin"},"content":" Course updatedCourse \u003d coursesLogic.updateCourse(courseId, \"Test Course 1\", \"Asia/India\");"},{"lineNumber":221,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":222,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":223,"author":{"gitId":"domoberzin"},"content":" assertNotNull(updatedCourse);"},{"lineNumber":224,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Test Course 1\", updatedCourse.getName());"},{"lineNumber":225,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Asia/India\", updatedCourse.getTimeZone());"},{"lineNumber":226,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":227,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":228,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":229,"author":{"gitId":"domoberzin"},"content":" public void testUpdateCourse_throwEntityDoesNotExistException()"},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":233,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":234,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":235,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":236,"author":{"gitId":"domoberzin"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":237,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.updateCourse(courseId, course.getName(), \"Asia/Singapore\"));"},{"lineNumber":238,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":239,"author":{"gitId":"domoberzin"},"content":" assertEquals(ERROR_UPDATE_NON_EXISTENT + Course.class, ex.getMessage());"},{"lineNumber":240,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":241,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":242,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":243,"author":{"gitId":"domoberzin"},"content":" public void testUpdateCourse_throwInvalidParametersException()"},{"lineNumber":244,"author":{"gitId":"domoberzin"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":245,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":246,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":247,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":248,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":249,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":250,"author":{"gitId":"domoberzin"},"content":" InvalidParametersException ex \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":251,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.updateCourse(courseId, \"\", \"Asia/Singapore\"));"},{"lineNumber":252,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":253,"author":{"gitId":"domoberzin"},"content":" String expectedMessage \u003d \"The field \u0027course name\u0027 is empty.\""},{"lineNumber":254,"author":{"gitId":"domoberzin"},"content":" + \" The value of a/an course name should be no longer than 80 characters.\""},{"lineNumber":255,"author":{"gitId":"domoberzin"},"content":" + \" It should not be empty.\";"},{"lineNumber":256,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":257,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedMessage, ex.getMessage());"},{"lineNumber":258,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":259,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":260,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":261,"author":{"gitId":"domoberzin"},"content":" public void testCreateSection_shouldReturnCreatedSection_success()"},{"lineNumber":262,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":263,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":264,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":265,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createSection(section)).thenReturn(section);"},{"lineNumber":266,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":267,"author":{"gitId":"domoberzin"},"content":" Section createdSection \u003d coursesLogic.createSection(section);"},{"lineNumber":268,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":269,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).createSection(section);"},{"lineNumber":270,"author":{"gitId":"domoberzin"},"content":" assertNotNull(createdSection);"},{"lineNumber":271,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":272,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":273,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":274,"author":{"gitId":"domoberzin"},"content":" public void testCreateDuplicateSection_throwEntityAlreadyExistsException()"},{"lineNumber":275,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":276,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":277,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":278,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createSection(section))"},{"lineNumber":279,"author":{"gitId":"domoberzin"},"content":" .thenThrow(new EntityAlreadyExistsException("},{"lineNumber":280,"author":{"gitId":"domoberzin"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, section.toString())));"},{"lineNumber":281,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":282,"author":{"gitId":"domoberzin"},"content":" EntityAlreadyExistsException ex \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":283,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createSection(section));"},{"lineNumber":284,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":285,"author":{"gitId":"domoberzin"},"content":" assertEquals(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, section.toString()), ex.getMessage());"},{"lineNumber":286,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":287,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":288,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":289,"author":{"gitId":"domoberzin"},"content":" public void testCreateSectionInvalidName_throwInvalidParametersException()"},{"lineNumber":290,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":291,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":292,"author":{"gitId":"domoberzin"},"content":" section.setName(null);"},{"lineNumber":293,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":294,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createSection(section)).thenThrow(new InvalidParametersException(section.getInvalidityInfo()));"},{"lineNumber":295,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":296,"author":{"gitId":"domoberzin"},"content":" InvalidParametersException ex \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":297,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createSection(section));"},{"lineNumber":298,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":299,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"The provided section name is not acceptable to TEAMMATES as it cannot be empty.\", ex.getMessage());"},{"lineNumber":300,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":301,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":302,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":303,"author":{"gitId":"domoberzin"},"content":" public void testGetSectionByCourseIdAndTeam_shouldReturnSection_success() {"},{"lineNumber":304,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":305,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d section.getCourse().getId();"},{"lineNumber":306,"author":{"gitId":"domoberzin"},"content":" String teamName \u003d section.getName();"},{"lineNumber":307,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":308,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getSectionByCourseIdAndTeam(courseId, teamName)).thenReturn(section);"},{"lineNumber":309,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":310,"author":{"gitId":"domoberzin"},"content":" Section returnedSection \u003d coursesLogic.getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":311,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":312,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":313,"author":{"gitId":"domoberzin"},"content":" assertNotNull(returnedSection);"},{"lineNumber":314,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":315,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":316,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":317,"author":{"gitId":"domoberzin"},"content":" public void testGetSectionByCourseIdAndTeam_sectionDoesNotExist_returnNull() {"},{"lineNumber":318,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d getTypicalCourse().getId();"},{"lineNumber":319,"author":{"gitId":"domoberzin"},"content":" String teamName \u003d getTypicalSection().getName();"},{"lineNumber":320,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":321,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getSectionByCourseIdAndTeam(courseId, teamName)).thenReturn(null);"},{"lineNumber":322,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":323,"author":{"gitId":"domoberzin"},"content":" Section returnedSection \u003d coursesLogic.getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":324,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":325,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getSectionByCourseIdAndTeam(courseId, teamName);"},{"lineNumber":326,"author":{"gitId":"domoberzin"},"content":" assertNull(returnedSection);"},{"lineNumber":327,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":328,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":329,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":330,"author":{"gitId":"domoberzin"},"content":" public void testGetCourseInstitute_shouldReturnInstitute_success() {"},{"lineNumber":331,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":332,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":333,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":334,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(course);"},{"lineNumber":335,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":336,"author":{"gitId":"domoberzin"},"content":" String institute \u003d coursesLogic.getCourseInstitute(courseId);"},{"lineNumber":337,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":338,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getCourse(courseId);"},{"lineNumber":339,"author":{"gitId":"domoberzin"},"content":" assertNotNull(institute);"},{"lineNumber":340,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":341,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":342,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":343,"author":{"gitId":"domoberzin"},"content":" public void testGetCourseInstituteNonExistentCourse_throwAssertionError() {"},{"lineNumber":344,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":345,"author":{"gitId":"domoberzin"},"content":" String courseId \u003d course.getId();"},{"lineNumber":346,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":347,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getCourse(courseId)).thenReturn(null);"},{"lineNumber":348,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":349,"author":{"gitId":"domoberzin"},"content":" AssertionError ex \u003d assertThrows(AssertionError.class,"},{"lineNumber":350,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.getCourseInstitute(courseId));"},{"lineNumber":351,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":352,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"Trying to getCourseInstitute for inexistent course with id \" + courseId, ex.getMessage());"},{"lineNumber":353,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":354,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":355,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":356,"author":{"gitId":"domoberzin"},"content":" public void testCreateTeam_shouldReturnCreatedTeam_success()"},{"lineNumber":357,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":358,"author":{"gitId":"domoberzin"},"content":" Team team \u003d getTypicalTeam();"},{"lineNumber":359,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":360,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createTeam(team)).thenReturn(team);"},{"lineNumber":361,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":362,"author":{"gitId":"domoberzin"},"content":" Team createdTeam \u003d coursesLogic.createTeam(team);"},{"lineNumber":363,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":364,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).createTeam(team);"},{"lineNumber":365,"author":{"gitId":"domoberzin"},"content":" assertNotNull(createdTeam);"},{"lineNumber":366,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":367,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":368,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":369,"author":{"gitId":"domoberzin"},"content":" public void testCreateDuplicateTeam_throwEntityAlreadyExistsException()"},{"lineNumber":370,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":371,"author":{"gitId":"domoberzin"},"content":" Team team \u003d getTypicalTeam();"},{"lineNumber":372,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":373,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createTeam(team)).thenThrow("},{"lineNumber":374,"author":{"gitId":"domoberzin"},"content":" new EntityAlreadyExistsException("},{"lineNumber":375,"author":{"gitId":"domoberzin"},"content":" String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, team.toString())));"},{"lineNumber":376,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":377,"author":{"gitId":"domoberzin"},"content":" EntityAlreadyExistsException ex \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":378,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createTeam(team));"},{"lineNumber":379,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":380,"author":{"gitId":"domoberzin"},"content":" assertEquals(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, team.toString()), ex.getMessage());"},{"lineNumber":381,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":382,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":383,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":384,"author":{"gitId":"domoberzin"},"content":" public void testCreateTeamInvalidName_throwInvalidParametersException()"},{"lineNumber":385,"author":{"gitId":"domoberzin"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":386,"author":{"gitId":"domoberzin"},"content":" Team team \u003d getTypicalTeam();"},{"lineNumber":387,"author":{"gitId":"domoberzin"},"content":" team.setName(null);"},{"lineNumber":388,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":389,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.createTeam(team)).thenThrow(new InvalidParametersException(team.getInvalidityInfo()));"},{"lineNumber":390,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":391,"author":{"gitId":"domoberzin"},"content":" InvalidParametersException ex \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":392,"author":{"gitId":"domoberzin"},"content":" () -\u003e coursesLogic.createTeam(team));"},{"lineNumber":393,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":394,"author":{"gitId":"domoberzin"},"content":" assertEquals(\"The provided team name is not acceptable to TEAMMATES as it cannot be empty.\", ex.getMessage());"},{"lineNumber":395,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":396,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":397,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":398,"author":{"gitId":"domoberzin"},"content":" public void testGetTeamsForSection_shouldReturnListOfTeams_success() {"},{"lineNumber":399,"author":{"gitId":"domoberzin"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":400,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":401,"author":{"gitId":"domoberzin"},"content":" Team t1 \u003d getTypicalTeam();"},{"lineNumber":402,"author":{"gitId":"domoberzin"},"content":" t1.setName(\"test-teamName1\");"},{"lineNumber":403,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":404,"author":{"gitId":"domoberzin"},"content":" Team t2 \u003d getTypicalTeam();"},{"lineNumber":405,"author":{"gitId":"domoberzin"},"content":" t2.setName(\"test-teamName2\");"},{"lineNumber":406,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":407,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e teams \u003d new ArrayList\u003c\u003e();"},{"lineNumber":408,"author":{"gitId":"domoberzin"},"content":" teams.add(t1);"},{"lineNumber":409,"author":{"gitId":"domoberzin"},"content":" teams.add(t2);"},{"lineNumber":410,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":411,"author":{"gitId":"domoberzin"},"content":" section.setTeams(teams);"},{"lineNumber":412,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":413,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getTeamsForSection(section)).thenReturn(teams);"},{"lineNumber":414,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":415,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e returnedTeams \u003d coursesLogic.getTeamsForSection(section);"},{"lineNumber":416,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":417,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getTeamsForSection(section);"},{"lineNumber":418,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":419,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e expectedTeams \u003d List.of(t1, t2);"},{"lineNumber":420,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":421,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedTeams, returnedTeams);"},{"lineNumber":422,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":423,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":424,"author":{"gitId":"domoberzin"},"content":" @Test"},{"lineNumber":425,"author":{"gitId":"domoberzin"},"content":" public void testGetTeamsForCourse_shouldReturnListOfTeams_success() {"},{"lineNumber":426,"author":{"gitId":"domoberzin"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":427,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":428,"author":{"gitId":"domoberzin"},"content":" Team t1 \u003d getTypicalTeam();"},{"lineNumber":429,"author":{"gitId":"domoberzin"},"content":" t1.setName(\"test-teamName1\");"},{"lineNumber":430,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":431,"author":{"gitId":"domoberzin"},"content":" Team t2 \u003d getTypicalTeam();"},{"lineNumber":432,"author":{"gitId":"domoberzin"},"content":" t2.setName(\"test-teamName2\");"},{"lineNumber":433,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":434,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e teams \u003d new ArrayList\u003c\u003e();"},{"lineNumber":435,"author":{"gitId":"domoberzin"},"content":" teams.add(t1);"},{"lineNumber":436,"author":{"gitId":"domoberzin"},"content":" teams.add(t2);"},{"lineNumber":437,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":438,"author":{"gitId":"domoberzin"},"content":" when(coursesDb.getTeamsForCourse(course.getId())).thenReturn(teams);"},{"lineNumber":439,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":440,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e returnedTeams \u003d coursesLogic.getTeamsForCourse(course.getId());"},{"lineNumber":441,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":442,"author":{"gitId":"domoberzin"},"content":" verify(coursesDb, times(1)).getTeamsForCourse(course.getId());"},{"lineNumber":443,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":444,"author":{"gitId":"domoberzin"},"content":" List\u003cTeam\u003e expectedTeams \u003d List.of(t1, t2);"},{"lineNumber":445,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":446,"author":{"gitId":"domoberzin"},"content":" assertEquals(expectedTeams, returnedTeams);"},{"lineNumber":447,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":448,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":319,"-":129}},{"path":"src/test/java/teammates/sqllogic/core/FeedbackQuestionsLogicTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.mock;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.mockito.Mockito.when;"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlCourseRoster;"},{"lineNumber":15,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlapi.FeedbackQuestionsDb;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * SUT: {@link FeedbackQuestionsLogic}."},{"lineNumber":26,"author":{"gitId":"-"},"content":" */"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public class FeedbackQuestionsLogicTest extends BaseTestCase {"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" private FeedbackQuestionsLogic fqLogic \u003d FeedbackQuestionsLogic.inst();"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" private FeedbackQuestionsDb fqDb;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" private UsersLogic usersLogic;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public void setUpMethod() {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" fqDb \u003d mock(FeedbackQuestionsDb.class);"},{"lineNumber":38,"author":{"gitId":"-"},"content":" CoursesLogic coursesLogic \u003d mock(CoursesLogic.class);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" usersLogic \u003d mock(UsersLogic.class);"},{"lineNumber":40,"author":{"gitId":"-"},"content":" FeedbackResponsesLogic frLogic \u003d mock(FeedbackResponsesLogic.class);"},{"lineNumber":41,"author":{"gitId":"-"},"content":" FeedbackSessionsLogic feedbackSessionsLogic \u003d mock(FeedbackSessionsLogic.class);"},{"lineNumber":42,"author":{"gitId":"-"},"content":" fqLogic.initLogicDependencies(fqDb, coursesLogic, frLogic, usersLogic, feedbackSessionsLogic);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForSession_questionNumbersInOrder_success() {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":48,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questions \u003d createQuestionList(fs, 5);"},{"lineNumber":51,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":52,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questions);"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForSession(fs);"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertEquals(questions.size(), actualQuestions.size());"},{"lineNumber":57,"author":{"gitId":"-"},"content":" assertTrue(questions.containsAll(actualQuestions));"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForSession_questionNumbersOutOfOrder_success() {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":64,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":65,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":66,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":67,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":68,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" fq1.setQuestionNumber(1);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" fq2.setQuestionNumber(2);"},{"lineNumber":72,"author":{"gitId":"-"},"content":" fq3.setQuestionNumber(3);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" fq4.setQuestionNumber(4);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" fq5.setQuestionNumber(5);"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questions \u003d new ArrayList\u003c\u003e(List.of(fq2, fq4, fq3, fq1, fq5));"},{"lineNumber":77,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":78,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questions);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForSession(fs);"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertEquals(questions.size(), actualQuestions.size());"},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertTrue(questions.containsAll(actualQuestions));"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void testCreateFeedbackQuestion_questionNumbersAreConsistent_canCreateFeedbackQuestion()"},{"lineNumber":88,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":90,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":91,"author":{"gitId":"-"},"content":" FeedbackQuestion newQuestion \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" newQuestion.setQuestionNumber(5);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsBefore \u003d createQuestionList(fs, 4);"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":97,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questionsBefore);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" when(fqDb.createFeedbackQuestion(newQuestion)).thenReturn(newQuestion);"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" FeedbackQuestion createdQuestion \u003d fqLogic.createFeedbackQuestion(newQuestion);"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(newQuestion, createdQuestion);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public void testCreateFeedbackQuestion_questionNumbersAreInconsistent_canCreateFeedbackQuestion()"},{"lineNumber":106,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":112,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":114,"author":{"gitId":"-"},"content":" fq1.setQuestionNumber(2);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" fq2.setQuestionNumber(3);"},{"lineNumber":116,"author":{"gitId":"-"},"content":" fq3.setQuestionNumber(4);"},{"lineNumber":117,"author":{"gitId":"-"},"content":" fq4.setQuestionNumber(5);"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questionsBefore \u003d new ArrayList\u003c\u003e(List.of(fq1, fq2, fq3, fq4));"},{"lineNumber":120,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questionsBefore);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" when(fqDb.createFeedbackQuestion(fq5)).thenReturn(fq5);"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" FeedbackQuestion createdQuestion \u003d fqLogic.createFeedbackQuestion(fq5);"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":" assertEquals(fq5, createdQuestion);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" @Test(enabled \u003d false)"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public void testCreateFeedbackQuestion_oldQuestionNumberLargerThanNewQuestionNumber_adjustQuestionNumberCorrectly()"},{"lineNumber":131,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":133,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":134,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":136,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":137,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" fq1.setQuestionNumber(2);"},{"lineNumber":140,"author":{"gitId":"-"},"content":" fq2.setQuestionNumber(3);"},{"lineNumber":141,"author":{"gitId":"-"},"content":" fq3.setQuestionNumber(4);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" fq4.setQuestionNumber(5);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" fq5.setQuestionNumber(1);"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questionsBefore \u003d new ArrayList\u003c\u003e(List.of(fq1, fq2, fq3, fq4));"},{"lineNumber":146,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":147,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questionsBefore);"},{"lineNumber":148,"author":{"gitId":"-"},"content":" when(fqDb.createFeedbackQuestion(fq5)).thenReturn(fq5);"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" fqLogic.createFeedbackQuestion(fq5);"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":" assertEquals(1, fq1.getQuestionNumber().intValue());"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertEquals(2, fq2.getQuestionNumber().intValue());"},{"lineNumber":154,"author":{"gitId":"-"},"content":" assertEquals(3, fq3.getQuestionNumber().intValue());"},{"lineNumber":155,"author":{"gitId":"-"},"content":" assertEquals(4, fq4.getQuestionNumber().intValue());"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" @Test(enabled \u003d false)"},{"lineNumber":159,"author":{"gitId":"-"},"content":" public void testCreateFeedbackQuestion_oldQuestionNumberSmallerThanNewQuestionNumber_adjustQuestionNumberCorrectly()"},{"lineNumber":160,"author":{"gitId":"marquestye"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":162,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":163,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":164,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":166,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":167,"author":{"gitId":"-"},"content":" FeedbackQuestion fq5 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" fq1.setQuestionNumber(0);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" fq2.setQuestionNumber(1);"},{"lineNumber":170,"author":{"gitId":"-"},"content":" fq3.setQuestionNumber(2);"},{"lineNumber":171,"author":{"gitId":"-"},"content":" fq4.setQuestionNumber(3);"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questionsBefore \u003d new ArrayList\u003c\u003e(List.of(fq1, fq2, fq3, fq4));"},{"lineNumber":174,"author":{"gitId":"-"},"content":" fs.setId(UUID.randomUUID());"},{"lineNumber":175,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForSession(fs.getId())).thenReturn(questionsBefore);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" when(fqDb.createFeedbackQuestion(fq5)).thenReturn(fq5);"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" fqLogic.createFeedbackQuestion(fq5);"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertEquals(1, fq1.getQuestionNumber().intValue());"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertEquals(2, fq2.getQuestionNumber().intValue());"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertEquals(3, fq3.getQuestionNumber().intValue());"},{"lineNumber":183,"author":{"gitId":"-"},"content":" assertEquals(4, fq4.getQuestionNumber().intValue());"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":187,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForStudents_success() {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":189,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":190,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":192,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":193,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsSelf \u003d List.of(fq1, fq2);"},{"lineNumber":196,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsStudent \u003d List.of(fq3, fq4);"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2, fq3, fq4);"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.SELF)).thenReturn(questionsSelf);"},{"lineNumber":201,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.STUDENTS)).thenReturn(questionsStudent);"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForStudents(fs);"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":206,"author":{"gitId":"-"},"content":" assertTrue(actualQuestions.containsAll(actualQuestions));"},{"lineNumber":207,"author":{"gitId":"-"},"content":" }"},{"lineNumber":208,"author":{"gitId":"-"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForInstructors_instructorIsCreator_success() {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":212,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":213,"author":{"gitId":"-"},"content":" fs.setCreatorEmail(\"instr1@teammates.tmt\");"},{"lineNumber":214,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":215,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":217,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsInstructors \u003d List.of(fq1, fq2);"},{"lineNumber":220,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsSelf \u003d List.of(fq3, fq4);"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.INSTRUCTORS))"},{"lineNumber":223,"author":{"gitId":"-"},"content":" .thenReturn(questionsInstructors);"},{"lineNumber":224,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.SELF)).thenReturn(questionsSelf);"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2, fq3, fq4);"},{"lineNumber":227,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForInstructors(fs, \"instr1@teammates.tmt\");"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":230,"author":{"gitId":"-"},"content":" assertTrue(actualQuestions.containsAll(actualQuestions));"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" @Test"},{"lineNumber":234,"author":{"gitId":"-"},"content":" public void testGetFeedbackQuestionsForInstructors_instructorIsNotCreator_success() {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":236,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":237,"author":{"gitId":"-"},"content":" fs.setCreatorEmail(\"instr1@teammates.tmt\");"},{"lineNumber":238,"author":{"gitId":"-"},"content":" FeedbackQuestion fq1 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":239,"author":{"gitId":"-"},"content":" FeedbackQuestion fq2 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":240,"author":{"gitId":"-"},"content":" FeedbackQuestion fq3 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":241,"author":{"gitId":"-"},"content":" FeedbackQuestion fq4 \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsInstructors \u003d List.of(fq1, fq2);"},{"lineNumber":244,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e questionsSelf \u003d List.of(fq3, fq4);"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.INSTRUCTORS))"},{"lineNumber":247,"author":{"gitId":"-"},"content":" .thenReturn(questionsInstructors);"},{"lineNumber":248,"author":{"gitId":"-"},"content":" when(fqDb.getFeedbackQuestionsForGiverType(fs, FeedbackParticipantType.SELF)).thenReturn(questionsSelf);"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e expectedQuestions \u003d List.of(fq1, fq2);"},{"lineNumber":251,"author":{"gitId":"-"},"content":" List\u003cFeedbackQuestion\u003e actualQuestions \u003d fqLogic.getFeedbackQuestionsForInstructors(fs, \"instr2@teammates.tmt\");"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestions.size(), actualQuestions.size());"},{"lineNumber":254,"author":{"gitId":"-"},"content":" assertTrue(actualQuestions.containsAll(actualQuestions));"},{"lineNumber":255,"author":{"gitId":"-"},"content":" }"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":" @Test(enabled \u003d false)"},{"lineNumber":258,"author":{"gitId":"-"},"content":" public void testGetRecipientsOfQuestion_giverTypeStudents() {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" Course c \u003d getTypicalCourse();"},{"lineNumber":260,"author":{"gitId":"-"},"content":" FeedbackSession fs \u003d getTypicalFeedbackSessionForCourse(c);"},{"lineNumber":261,"author":{"gitId":"-"},"content":" FeedbackQuestion fq \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" Student s1 \u003d getTypicalStudent();"},{"lineNumber":264,"author":{"gitId":"-"},"content":" Student s2 \u003d getTypicalStudent();"},{"lineNumber":265,"author":{"gitId":"-"},"content":" List\u003cStudent\u003e studentsInCourse \u003d List.of(s1, s2);"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":" SqlCourseRoster courseRoster \u003d new SqlCourseRoster(studentsInCourse, null);"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":" when(usersLogic.getStudentsForCourse(\"course-1\")).thenReturn(studentsInCourse);"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" ______TS(\"response to students except self\");"},{"lineNumber":272,"author":{"gitId":"-"},"content":" assertEquals(fqLogic.getRecipientsOfQuestion(fq, null, s2, null).size(), studentsInCourse.size() - 1);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" assertEquals(fqLogic.getRecipientsOfQuestion(fq, null, s2, courseRoster).size(), studentsInCourse.size() - 1);"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" }"},{"lineNumber":276,"author":{"gitId":"-"},"content":""},{"lineNumber":277,"author":{"gitId":"-"},"content":" private List\u003cFeedbackQuestion\u003e createQuestionList(FeedbackSession fs, int numOfQuestions) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" ArrayList\u003cFeedbackQuestion\u003e questions \u003d new ArrayList\u003c\u003e();"},{"lineNumber":279,"author":{"gitId":"-"},"content":" for (int i \u003d 1; i \u003c\u003d numOfQuestions; i++) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" FeedbackQuestion fq \u003d getTypicalFeedbackQuestionForSession(fs);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" fq.setQuestionNumber(i);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" questions.add(fq);"},{"lineNumber":283,"author":{"gitId":"-"},"content":" }"},{"lineNumber":284,"author":{"gitId":"-"},"content":" return questions;"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"marquestye":5,"-":281}},{"path":"src/test/java/teammates/sqllogic/core/FeedbackResponseCommentsLogicTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.sqllogic.core;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.mock;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.verify;"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.when;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import java.util.ArrayList;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":"import java.util.List;"},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlapi.FeedbackResponseCommentsDb;"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.output.CommentVisibilityType;"},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"import teammates.ui.request.FeedbackResponseCommentUpdateRequest;"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@link FeedbackResponseCommentsLogic}."},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":"public class FeedbackResponseCommentsLogicTest extends BaseTestCase {"},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":" private static final Long TYPICAL_ID \u003d 100L;"},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" private static final Long NOT_TYPICAL_ID \u003d 101L;"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" private static final UUID TYPICAL_UUID \u003d UUID.randomUUID();"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" private FeedbackResponseCommentsLogic frcLogic \u003d FeedbackResponseCommentsLogic.inst();"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":" private FeedbackResponseCommentsDb frcDb;"},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" @BeforeMethod"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" public void setUpMethod() {"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" frcDb \u003d mock(FeedbackResponseCommentsDb.class);"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" frcLogic.initLogicDependencies(frcDb);"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" public void testGetComment_commentAlreadyExists_success() {"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseComment(comment.getId())).thenReturn(comment);"},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d frcLogic.getFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" assertEquals(comment, commentFetched);"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" public void testGetCommentForResponse_commentAlreadyExists_success() {"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" List\u003cFeedbackResponseComment\u003e expectedReturn \u003d new ArrayList\u003c\u003e();"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":" expectedReturn.add(getTypicalResponseComment(TYPICAL_ID));"},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseCommentsForResponse(TYPICAL_UUID)).thenReturn(expectedReturn);"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":" List\u003cFeedbackResponseComment\u003e fetchedReturn \u003d frcLogic.getFeedbackResponseCommentsForResponse(TYPICAL_UUID);"},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expectedReturn, fetchedReturn);"},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" public void testGetCommentForResponseFromParticipant_commentAlreadyExists_success() {"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseCommentForResponseFromParticipant(TYPICAL_UUID)).thenReturn(comment);"},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d frcLogic"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" .getFeedbackResponseCommentForResponseFromParticipant(TYPICAL_UUID);"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" assertEquals(comment, commentFetched);"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" public void testGetComment_commentDoesNotExist_returnsNull() {"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseComment(NOT_TYPICAL_ID)).thenReturn(null);"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d frcLogic.getFeedbackResponseComment(NOT_TYPICAL_ID);"},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).getFeedbackResponseComment(NOT_TYPICAL_ID);"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" assertNull(commentFetched);"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" public void testCreateComment_commentDoesNotExist_success()"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" frcLogic.createFeedbackResponseComment(comment);"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).createFeedbackResponseComment(comment);"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":" public void testCreateComment_commentAlreadyExists_throwsEntityAlreadyExistsException()"},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" throws EntityAlreadyExistsException, InvalidParametersException {"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.createFeedbackResponseComment(comment)).thenThrow(EntityAlreadyExistsException.class);"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" () -\u003e frcLogic.createFeedbackResponseComment(comment));"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" public void testDeleteComment_commentExists_success() {"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" frcLogic.deleteFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).deleteFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateCommentEmails_success() {"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" String courseId \u003d \"Course_id\";"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":" String oldEmail \u003d \"oldEmail@gmail.com\";"},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" String newEmail \u003d \"newEmail@gmail.com\";"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" frcLogic.updateFeedbackResponseCommentsEmails(courseId, oldEmail, newEmail);"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).updateGiverEmailOfFeedbackResponseComments(courseId, oldEmail, newEmail);"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).updateLastEditorEmailOfFeedbackResponseComments(courseId, oldEmail, newEmail);"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateComment_entityAlreadyExists_success()"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseComment(comment.getId())).thenReturn(comment);"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":" String updatedCommentText \u003d \"Update\";"},{"lineNumber":135,"author":{"gitId":"mingyuanc"},"content":" String lastEditorEmail \u003d \"me@gmail.com\";"},{"lineNumber":136,"author":{"gitId":"mingyuanc"},"content":" List\u003cCommentVisibilityType\u003e showCommentTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":137,"author":{"gitId":"mingyuanc"},"content":" showCommentTo.add(CommentVisibilityType.STUDENTS);"},{"lineNumber":138,"author":{"gitId":"mingyuanc"},"content":" showCommentTo.add(CommentVisibilityType.INSTRUCTORS);"},{"lineNumber":139,"author":{"gitId":"mingyuanc"},"content":" List\u003cCommentVisibilityType\u003e showGiverNameTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":140,"author":{"gitId":"mingyuanc"},"content":" showGiverNameTo.add(CommentVisibilityType.INSTRUCTORS);"},{"lineNumber":141,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":142,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseCommentUpdateRequest updateRequest \u003d new FeedbackResponseCommentUpdateRequest("},{"lineNumber":143,"author":{"gitId":"mingyuanc"},"content":" updatedCommentText, showCommentTo, showGiverNameTo);"},{"lineNumber":144,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment updatedComment \u003d frcLogic.updateFeedbackResponseComment(TYPICAL_ID, updateRequest,"},{"lineNumber":145,"author":{"gitId":"mingyuanc"},"content":" lastEditorEmail);"},{"lineNumber":146,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":147,"author":{"gitId":"mingyuanc"},"content":" verify(frcDb, times(1)).getFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":148,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":149,"author":{"gitId":"mingyuanc"},"content":" List\u003cFeedbackParticipantType\u003e expectedShowCommentTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":150,"author":{"gitId":"mingyuanc"},"content":" expectedShowCommentTo.add(FeedbackParticipantType.STUDENTS);"},{"lineNumber":151,"author":{"gitId":"mingyuanc"},"content":" expectedShowCommentTo.add(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":152,"author":{"gitId":"mingyuanc"},"content":" List\u003cFeedbackParticipantType\u003e expectedShowGiverNameTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":153,"author":{"gitId":"mingyuanc"},"content":" expectedShowGiverNameTo.add(FeedbackParticipantType.INSTRUCTORS);"},{"lineNumber":154,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":155,"author":{"gitId":"mingyuanc"},"content":" assertEquals(TYPICAL_ID, updatedComment.getId());"},{"lineNumber":156,"author":{"gitId":"mingyuanc"},"content":" assertEquals(updatedCommentText, updatedComment.getCommentText());"},{"lineNumber":157,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expectedShowCommentTo, updatedComment.getShowCommentTo());"},{"lineNumber":158,"author":{"gitId":"mingyuanc"},"content":" assertEquals(expectedShowGiverNameTo, updatedComment.getShowGiverNameTo());"},{"lineNumber":159,"author":{"gitId":"mingyuanc"},"content":" assertEquals(lastEditorEmail, updatedComment.getLastEditorEmail());"},{"lineNumber":160,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":161,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":162,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":163,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateComment_entityDoesNotExist() {"},{"lineNumber":164,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":165,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":166,"author":{"gitId":"mingyuanc"},"content":" when(frcDb.getFeedbackResponseComment(comment.getId())).thenReturn(comment);"},{"lineNumber":167,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":168,"author":{"gitId":"mingyuanc"},"content":" long nonExistentId \u003d 101L;"},{"lineNumber":169,"author":{"gitId":"mingyuanc"},"content":" String updatedCommentText \u003d \"Update\";"},{"lineNumber":170,"author":{"gitId":"mingyuanc"},"content":" String lastEditorEmail \u003d \"me@gmail.com\";"},{"lineNumber":171,"author":{"gitId":"mingyuanc"},"content":" List\u003cCommentVisibilityType\u003e showCommentTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":172,"author":{"gitId":"mingyuanc"},"content":" showCommentTo.add(CommentVisibilityType.STUDENTS);"},{"lineNumber":173,"author":{"gitId":"mingyuanc"},"content":" showCommentTo.add(CommentVisibilityType.INSTRUCTORS);"},{"lineNumber":174,"author":{"gitId":"mingyuanc"},"content":" List\u003cCommentVisibilityType\u003e showGiverNameTo \u003d new ArrayList\u003c\u003e();"},{"lineNumber":175,"author":{"gitId":"mingyuanc"},"content":" showGiverNameTo.add(CommentVisibilityType.INSTRUCTORS);"},{"lineNumber":176,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":177,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseCommentUpdateRequest updateRequest \u003d new FeedbackResponseCommentUpdateRequest("},{"lineNumber":178,"author":{"gitId":"mingyuanc"},"content":" updatedCommentText, showCommentTo, showGiverNameTo);"},{"lineNumber":179,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":180,"author":{"gitId":"mingyuanc"},"content":" EntityDoesNotExistException ex \u003d assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":181,"author":{"gitId":"mingyuanc"},"content":" () -\u003e frcLogic.updateFeedbackResponseComment(nonExistentId, updateRequest, lastEditorEmail));"},{"lineNumber":182,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":183,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Trying to update a feedback response comment that does not exist.\", ex.getMessage());"},{"lineNumber":184,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":185,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":185}},{"path":"src/test/java/teammates/storage/sqlapi/FeedbackQuestionsDbTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"marquestye"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":3,"author":{"gitId":"marquestye"},"content":"import static org.mockito.ArgumentMatchers.any;"},{"lineNumber":4,"author":{"gitId":"marquestye"},"content":"import static org.mockito.Mockito.mockStatic;"},{"lineNumber":5,"author":{"gitId":"marquestye"},"content":"import static org.mockito.Mockito.never;"},{"lineNumber":6,"author":{"gitId":"marquestye"},"content":"import static org.mockito.Mockito.spy;"},{"lineNumber":7,"author":{"gitId":"marquestye"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":8,"author":{"gitId":"marquestye"},"content":"import static teammates.common.util.Const.ERROR_CREATE_ENTITY_ALREADY_EXISTS;"},{"lineNumber":9,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":10,"author":{"gitId":"marquestye"},"content":"import java.util.List;"},{"lineNumber":11,"author":{"gitId":"marquestye"},"content":"import java.util.UUID;"},{"lineNumber":12,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":13,"author":{"gitId":"marquestye"},"content":"import org.mockito.MockedStatic;"},{"lineNumber":14,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":15,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":16,"author":{"gitId":"marquestye"},"content":"import org.testng.annotations.Test;"},{"lineNumber":17,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":18,"author":{"gitId":"marquestye"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":19,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":20,"author":{"gitId":"marquestye"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":21,"author":{"gitId":"marquestye"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":22,"author":{"gitId":"marquestye"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":23,"author":{"gitId":"marquestye"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":24,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":25,"author":{"gitId":"marquestye"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"marquestye"},"content":" * SUT: {@link FeedbackQuestionsDb}."},{"lineNumber":27,"author":{"gitId":"marquestye"},"content":" */"},{"lineNumber":28,"author":{"gitId":"marquestye"},"content":"public class FeedbackQuestionsDbTest extends BaseTestCase {"},{"lineNumber":29,"author":{"gitId":"marquestye"},"content":" private FeedbackQuestionsDb feedbackQuestionsDb;"},{"lineNumber":30,"author":{"gitId":"marquestye"},"content":" private MockedStatic\u003cHibernateUtil\u003e mockHibernateUtil;"},{"lineNumber":31,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":32,"author":{"gitId":"marquestye"},"content":" @BeforeMethod"},{"lineNumber":33,"author":{"gitId":"marquestye"},"content":" public void setUpMethod() {"},{"lineNumber":34,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil \u003d mockStatic(HibernateUtil.class);"},{"lineNumber":35,"author":{"gitId":"marquestye"},"content":" feedbackQuestionsDb \u003d spy(FeedbackQuestionsDb.class);"},{"lineNumber":36,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":37,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":38,"author":{"gitId":"marquestye"},"content":" @AfterMethod"},{"lineNumber":39,"author":{"gitId":"marquestye"},"content":" public void teardownMethod() {"},{"lineNumber":40,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.close();"},{"lineNumber":41,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":42,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":43,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":44,"author":{"gitId":"marquestye"},"content":" public void testCreateFeedbackQuestion_success() throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":45,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":46,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":47,"author":{"gitId":"marquestye"},"content":" feedbackQuestionsDb.createFeedbackQuestion(feedbackQuestion);"},{"lineNumber":48,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":49,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackQuestion), times(1));"},{"lineNumber":50,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":51,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":52,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":53,"author":{"gitId":"marquestye"},"content":" public void testCreateFeedbackQuestion_questionAlreadyExists_throwsEntityAlreadyExistsException() {"},{"lineNumber":54,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":55,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d feedbackQuestion.getId();"},{"lineNumber":56,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":57,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(feedbackQuestion);"},{"lineNumber":58,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":59,"author":{"gitId":"marquestye"},"content":" EntityAlreadyExistsException eaee \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":60,"author":{"gitId":"marquestye"},"content":" () -\u003e feedbackQuestionsDb.createFeedbackQuestion(feedbackQuestion));"},{"lineNumber":61,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":62,"author":{"gitId":"marquestye"},"content":" assertEquals(String.format(ERROR_CREATE_ENTITY_ALREADY_EXISTS, feedbackQuestion.toString()), eaee.getMessage());"},{"lineNumber":63,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackQuestion), never());"},{"lineNumber":64,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":65,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":66,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":67,"author":{"gitId":"marquestye"},"content":" public void testCreateFeedbackQuestion_invalidQuestion_throwsInvalidParametersException() {"},{"lineNumber":68,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":69,"author":{"gitId":"marquestye"},"content":" feedbackQuestion.setGiverType(FeedbackParticipantType.NONE);"},{"lineNumber":70,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":71,"author":{"gitId":"marquestye"},"content":" InvalidParametersException ipe \u003d assertThrows(InvalidParametersException.class,"},{"lineNumber":72,"author":{"gitId":"marquestye"},"content":" () -\u003e feedbackQuestionsDb.createFeedbackQuestion(feedbackQuestion));"},{"lineNumber":73,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":74,"author":{"gitId":"marquestye"},"content":" assertEquals(feedbackQuestion.getInvalidityInfo(), List.of(ipe.getMessage()));"},{"lineNumber":75,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackQuestion), never());"},{"lineNumber":76,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":77,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":78,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":79,"author":{"gitId":"marquestye"},"content":" public void testGetFeedbackQuestion_success() {"},{"lineNumber":80,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":81,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d feedbackQuestion.getId();"},{"lineNumber":82,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":83,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(feedbackQuestion);"},{"lineNumber":84,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":85,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion retrievedSession \u003d feedbackQuestionsDb.getFeedbackQuestion(fqid);"},{"lineNumber":86,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":87,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid), times(1));"},{"lineNumber":88,"author":{"gitId":"marquestye"},"content":" assertEquals(feedbackQuestion, retrievedSession);"},{"lineNumber":89,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":90,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":91,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":92,"author":{"gitId":"marquestye"},"content":" public void testGetFeedbackQuestion_questionDoesNotExist_returnNull() {"},{"lineNumber":93,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d UUID.randomUUID();"},{"lineNumber":94,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":95,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(null);"},{"lineNumber":96,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":97,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion retrievedSession \u003d feedbackQuestionsDb.getFeedbackQuestion(fqid);"},{"lineNumber":98,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":99,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid), times(1));"},{"lineNumber":100,"author":{"gitId":"marquestye"},"content":" assertNull(retrievedSession);"},{"lineNumber":101,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":102,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":103,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":104,"author":{"gitId":"marquestye"},"content":" public void testDeleteFeedbackQuestion_success() {"},{"lineNumber":105,"author":{"gitId":"marquestye"},"content":" FeedbackQuestion feedbackQuestion \u003d getFeedbackQuestion();"},{"lineNumber":106,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d feedbackQuestion.getId();"},{"lineNumber":107,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":108,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(feedbackQuestion);"},{"lineNumber":109,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":110,"author":{"gitId":"marquestye"},"content":" feedbackQuestionsDb.deleteFeedbackQuestion(fqid);"},{"lineNumber":111,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":112,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.remove(feedbackQuestion), times(1));"},{"lineNumber":113,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":114,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":115,"author":{"gitId":"marquestye"},"content":" @Test"},{"lineNumber":116,"author":{"gitId":"marquestye"},"content":" public void testDeleteFeedbackQuestion_questionDoesNotExist_nothingHappens() {"},{"lineNumber":117,"author":{"gitId":"marquestye"},"content":" UUID fqid \u003d UUID.randomUUID();"},{"lineNumber":118,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":119,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackQuestion.class, fqid)).thenReturn(null);"},{"lineNumber":120,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":121,"author":{"gitId":"marquestye"},"content":" feedbackQuestionsDb.deleteFeedbackQuestion(fqid);"},{"lineNumber":122,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":123,"author":{"gitId":"marquestye"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.remove(any()), never());"},{"lineNumber":124,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":125,"author":{"gitId":"marquestye"},"content":""},{"lineNumber":126,"author":{"gitId":"marquestye"},"content":" private FeedbackQuestion getFeedbackQuestion() {"},{"lineNumber":127,"author":{"gitId":"marquestye"},"content":" return getTypicalFeedbackQuestionForSession(getTypicalFeedbackSessionForCourse(getTypicalCourse()));"},{"lineNumber":128,"author":{"gitId":"marquestye"},"content":" }"},{"lineNumber":129,"author":{"gitId":"marquestye"},"content":"}"}],"authorContributionMap":{"marquestye":129}},{"path":"src/test/java/teammates/storage/sqlapi/FeedbackResponseCommentsDbTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"mingyuanc"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":3,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.ArgumentMatchers.anyLong;"},{"lineNumber":4,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.doReturn;"},{"lineNumber":5,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.mockStatic;"},{"lineNumber":6,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.never;"},{"lineNumber":7,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.spy;"},{"lineNumber":8,"author":{"gitId":"mingyuanc"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":9,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":10,"author":{"gitId":"mingyuanc"},"content":"import org.mockito.MockedStatic;"},{"lineNumber":11,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":12,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":13,"author":{"gitId":"mingyuanc"},"content":"import org.testng.annotations.Test;"},{"lineNumber":14,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":15,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":16,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":17,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":18,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":19,"author":{"gitId":"mingyuanc"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":20,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":21,"author":{"gitId":"mingyuanc"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":22,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":23,"author":{"gitId":"mingyuanc"},"content":"/**"},{"lineNumber":24,"author":{"gitId":"mingyuanc"},"content":" * SUT: {@code FeedbackResponseCommentsDb}."},{"lineNumber":25,"author":{"gitId":"mingyuanc"},"content":" */"},{"lineNumber":26,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":27,"author":{"gitId":"mingyuanc"},"content":"public class FeedbackResponseCommentsDbTest extends BaseTestCase {"},{"lineNumber":28,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":29,"author":{"gitId":"mingyuanc"},"content":" private static final Long TYPICAL_ID \u003d 100L;"},{"lineNumber":30,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":31,"author":{"gitId":"mingyuanc"},"content":" private static final Long NOT_TYPICAL_ID \u003d 101L;"},{"lineNumber":32,"author":{"gitId":"mingyuanc"},"content":" private FeedbackResponseCommentsDb feedbackResponseCommentsDb;"},{"lineNumber":33,"author":{"gitId":"mingyuanc"},"content":" private MockedStatic\u003cHibernateUtil\u003e mockHibernateUtil;"},{"lineNumber":34,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":35,"author":{"gitId":"mingyuanc"},"content":" @BeforeMethod"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":" public void setUpMethod() {"},{"lineNumber":37,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil \u003d mockStatic(HibernateUtil.class);"},{"lineNumber":38,"author":{"gitId":"mingyuanc"},"content":" feedbackResponseCommentsDb \u003d spy(FeedbackResponseCommentsDb.class);"},{"lineNumber":39,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":40,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":41,"author":{"gitId":"mingyuanc"},"content":" @AfterMethod"},{"lineNumber":42,"author":{"gitId":"mingyuanc"},"content":" public void teardownMethod() {"},{"lineNumber":43,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.close();"},{"lineNumber":44,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":45,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":46,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":47,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":48,"author":{"gitId":"mingyuanc"},"content":" public void testCreateComment_commentDoesNotExist_success()"},{"lineNumber":49,"author":{"gitId":"mingyuanc"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":50,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":51,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":52,"author":{"gitId":"mingyuanc"},"content":" feedbackResponseCommentsDb.createFeedbackResponseComment(comment);"},{"lineNumber":53,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":54,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(comment));"},{"lineNumber":55,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":56,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":57,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":58,"author":{"gitId":"mingyuanc"},"content":" public void testCreateComment_commentAlreadyExists_throwsEntityAlreadyExistsException() {"},{"lineNumber":59,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":60,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":61,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, TYPICAL_ID)).thenReturn(comment);"},{"lineNumber":62,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":63,"author":{"gitId":"mingyuanc"},"content":" EntityAlreadyExistsException ex \u003d assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":64,"author":{"gitId":"mingyuanc"},"content":" () -\u003e feedbackResponseCommentsDb.createFeedbackResponseComment(comment));"},{"lineNumber":65,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":66,"author":{"gitId":"mingyuanc"},"content":" assertEquals(\"Trying to create an entity that exists: \" + comment.toString(), ex.getMessage());"},{"lineNumber":67,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(comment), never());"},{"lineNumber":68,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":69,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":70,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":71,"author":{"gitId":"mingyuanc"},"content":" public void testGetComment_commentAlreadyExists_success() {"},{"lineNumber":72,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":73,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":74,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, TYPICAL_ID)).thenReturn(comment);"},{"lineNumber":75,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":76,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d feedbackResponseCommentsDb.getFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":77,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":78,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, TYPICAL_ID)).thenReturn(comment);"},{"lineNumber":79,"author":{"gitId":"mingyuanc"},"content":" assertEquals(comment, commentFetched);"},{"lineNumber":80,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":81,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":82,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":83,"author":{"gitId":"mingyuanc"},"content":" public void testGetComment_commentDoesNotExist_returnsNull() {"},{"lineNumber":84,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, NOT_TYPICAL_ID)).thenReturn(null);"},{"lineNumber":85,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":86,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment commentFetched \u003d feedbackResponseCommentsDb.getFeedbackResponseComment(NOT_TYPICAL_ID);"},{"lineNumber":87,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":88,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, NOT_TYPICAL_ID), times(1));"},{"lineNumber":89,"author":{"gitId":"mingyuanc"},"content":" assertNull(commentFetched);"},{"lineNumber":90,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":91,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":92,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":93,"author":{"gitId":"mingyuanc"},"content":" public void testDeleteComment_commentExists_success() {"},{"lineNumber":94,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":95,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":96,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackResponseComment.class, TYPICAL_ID)).thenReturn(comment);"},{"lineNumber":97,"author":{"gitId":"mingyuanc"},"content":" feedbackResponseCommentsDb.deleteFeedbackResponseComment(TYPICAL_ID);"},{"lineNumber":98,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":99,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.remove(comment));"},{"lineNumber":100,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":101,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":102,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":103,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateComment_commentInvalid_throwsInvalidParametersException() {"},{"lineNumber":104,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":105,"author":{"gitId":"mingyuanc"},"content":" comment.setGiverType(FeedbackParticipantType.SELF);"},{"lineNumber":106,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":107,"author":{"gitId":"mingyuanc"},"content":" assertThrows(InvalidParametersException.class,"},{"lineNumber":108,"author":{"gitId":"mingyuanc"},"content":" () -\u003e feedbackResponseCommentsDb.updateFeedbackResponseComment(comment));"},{"lineNumber":109,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":110,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(comment), never());"},{"lineNumber":111,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":112,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":113,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":114,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateComment_commentDoesNotExist_throwsEntityDoesNotExistException() {"},{"lineNumber":115,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(NOT_TYPICAL_ID);"},{"lineNumber":116,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":117,"author":{"gitId":"mingyuanc"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":118,"author":{"gitId":"mingyuanc"},"content":" () -\u003e feedbackResponseCommentsDb.updateFeedbackResponseComment(comment));"},{"lineNumber":119,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":120,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(comment), never());"},{"lineNumber":121,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":122,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":123,"author":{"gitId":"mingyuanc"},"content":" @Test"},{"lineNumber":124,"author":{"gitId":"mingyuanc"},"content":" public void testUpdateCourse_success() throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":125,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d getTypicalResponseComment(TYPICAL_ID);"},{"lineNumber":126,"author":{"gitId":"mingyuanc"},"content":" comment.setCommentText(\"Placeholder Text\");"},{"lineNumber":127,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":128,"author":{"gitId":"mingyuanc"},"content":" doReturn(comment).when(feedbackResponseCommentsDb).getFeedbackResponseComment(anyLong());"},{"lineNumber":129,"author":{"gitId":"mingyuanc"},"content":" feedbackResponseCommentsDb.updateFeedbackResponseComment(comment);"},{"lineNumber":130,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":131,"author":{"gitId":"mingyuanc"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(comment));"},{"lineNumber":132,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":133,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":134,"author":{"gitId":"mingyuanc"},"content":"}"}],"authorContributionMap":{"mingyuanc":134}},{"path":"src/test/java/teammates/storage/sqlapi/FeedbackSessionsDbTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"dishenggg"},"content":"package teammates.storage.sqlapi;"},{"lineNumber":2,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":3,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.ArgumentMatchers.any;"},{"lineNumber":4,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.doReturn;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.mockStatic;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.never;"},{"lineNumber":7,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.spy;"},{"lineNumber":8,"author":{"gitId":"dishenggg"},"content":"import static org.mockito.Mockito.times;"},{"lineNumber":9,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":10,"author":{"gitId":"dishenggg"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":12,"author":{"gitId":"dishenggg"},"content":"import org.mockito.MockedStatic;"},{"lineNumber":13,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":14,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":15,"author":{"gitId":"dishenggg"},"content":"import org.testng.annotations.Test;"},{"lineNumber":16,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":17,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.EntityAlreadyExistsException;"},{"lineNumber":18,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.EntityDoesNotExistException;"},{"lineNumber":19,"author":{"gitId":"dishenggg"},"content":"import teammates.common.exception.InvalidParametersException;"},{"lineNumber":20,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":21,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.TimeHelperExtension;"},{"lineNumber":22,"author":{"gitId":"dishenggg"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":23,"author":{"gitId":"dishenggg"},"content":"import teammates.test.BaseTestCase;"},{"lineNumber":24,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":25,"author":{"gitId":"dishenggg"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"dishenggg"},"content":" * SUT: {@code FeedbackSessionsDb}."},{"lineNumber":27,"author":{"gitId":"dishenggg"},"content":" */"},{"lineNumber":28,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":"public class FeedbackSessionsDbTest extends BaseTestCase {"},{"lineNumber":30,"author":{"gitId":"dishenggg"},"content":" private FeedbackSessionsDb feedbackSessionsDb;"},{"lineNumber":31,"author":{"gitId":"dishenggg"},"content":" private MockedStatic\u003cHibernateUtil\u003e mockHibernateUtil;"},{"lineNumber":32,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":33,"author":{"gitId":"dishenggg"},"content":" @BeforeMethod"},{"lineNumber":34,"author":{"gitId":"dishenggg"},"content":" public void setUpMethod() {"},{"lineNumber":35,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil \u003d mockStatic(HibernateUtil.class);"},{"lineNumber":36,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb \u003d spy(FeedbackSessionsDb.class);"},{"lineNumber":37,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":39,"author":{"gitId":"dishenggg"},"content":" @AfterMethod"},{"lineNumber":40,"author":{"gitId":"dishenggg"},"content":" public void teardownMethod() {"},{"lineNumber":41,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.close();"},{"lineNumber":42,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":43,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":44,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":45,"author":{"gitId":"dishenggg"},"content":" public void testCreateSession_sessionDoesNotExist_success()"},{"lineNumber":46,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":47,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":48,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":49,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.createFeedbackSession(feedbackSession);"},{"lineNumber":50,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":51,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackSession), times(1));"},{"lineNumber":52,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":53,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":54,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":55,"author":{"gitId":"dishenggg"},"content":" public void testCreateSession_duplicateSession_throwsEntityAlreadyExistsException()"},{"lineNumber":56,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":57,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":58,"author":{"gitId":"dishenggg"},"content":" UUID uuid \u003d feedbackSession.getId();"},{"lineNumber":59,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(uuid);"},{"lineNumber":60,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":61,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityAlreadyExistsException.class,"},{"lineNumber":62,"author":{"gitId":"dishenggg"},"content":" () -\u003e feedbackSessionsDb.createFeedbackSession(feedbackSession));"},{"lineNumber":63,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackSession), never());"},{"lineNumber":64,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":65,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":66,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":67,"author":{"gitId":"dishenggg"},"content":" public void testCreateSession_invalidParams_throwsInvalidParametersException()"},{"lineNumber":68,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":69,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":70,"author":{"gitId":"dishenggg"},"content":" feedbackSession.setName(\"\");"},{"lineNumber":71,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":72,"author":{"gitId":"dishenggg"},"content":" assertThrows(InvalidParametersException.class, () -\u003e feedbackSessionsDb.createFeedbackSession(feedbackSession));"},{"lineNumber":73,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.persist(feedbackSession), never());"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" public void testCreateSession_nullParams_throwsAssertionError()"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityAlreadyExistsException {"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" assertThrows(AssertionError.class, () -\u003e feedbackSessionsDb.createFeedbackSession(null));"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":81,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":82,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" public void testGetFeedbackSession_sessionExists_success() {"},{"lineNumber":84,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":85,"author":{"gitId":"dishenggg"},"content":" UUID uuid \u003d feedbackSession.getId();"},{"lineNumber":86,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackSession.class, uuid)).thenReturn(feedbackSession);"},{"lineNumber":87,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":88,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getFeedbackSession(uuid);"},{"lineNumber":89,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":90,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackSession.class, uuid), times(1));"},{"lineNumber":91,"author":{"gitId":"dishenggg"},"content":" assertEquals(feedbackSession, sessionFetched);"},{"lineNumber":92,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":93,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":94,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":95,"author":{"gitId":"dishenggg"},"content":" public void testGetFeedbackSession_sessionDoesNotExists_returnNull() {"},{"lineNumber":96,"author":{"gitId":"dishenggg"},"content":" UUID randomUuid \u003d UUID.randomUUID();"},{"lineNumber":97,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.when(() -\u003e HibernateUtil.get(FeedbackSession.class, randomUuid)).thenReturn(null);"},{"lineNumber":98,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":99,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getFeedbackSession(randomUuid);"},{"lineNumber":100,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":101,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.get(FeedbackSession.class, randomUuid), times(1));"},{"lineNumber":102,"author":{"gitId":"dishenggg"},"content":" assertNull(sessionFetched);"},{"lineNumber":103,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":104,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":105,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":106,"author":{"gitId":"dishenggg"},"content":" public void testUpdateFeedbackSession_success() throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":107,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":108,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(any(UUID.class));"},{"lineNumber":109,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":110,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.updateFeedbackSession(feedbackSession);"},{"lineNumber":111,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":112,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), times(1));"},{"lineNumber":113,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":114,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":115,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":116,"author":{"gitId":"dishenggg"},"content":" public void testUpdateFeedbackSession_sessionDoesNotExist_throwsEntityDoesNotExistException()"},{"lineNumber":117,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":118,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":119,"author":{"gitId":"dishenggg"},"content":" UUID uuid \u003d feedbackSession.getId();"},{"lineNumber":120,"author":{"gitId":"dishenggg"},"content":" doReturn(null).when(feedbackSessionsDb).getFeedbackSession(uuid);"},{"lineNumber":121,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":122,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":123,"author":{"gitId":"dishenggg"},"content":" () -\u003e feedbackSessionsDb.updateFeedbackSession(feedbackSession));"},{"lineNumber":124,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), never());"},{"lineNumber":125,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":126,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":127,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":128,"author":{"gitId":"dishenggg"},"content":" public void testUpdateFeedbackSession_sessionInvalid_throwsInvalidParametersException()"},{"lineNumber":129,"author":{"gitId":"dishenggg"},"content":" throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":130,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":131,"author":{"gitId":"dishenggg"},"content":" UUID uuid \u003d feedbackSession.getId();"},{"lineNumber":132,"author":{"gitId":"dishenggg"},"content":" feedbackSession.setName(\"\");"},{"lineNumber":133,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(uuid);"},{"lineNumber":134,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":135,"author":{"gitId":"dishenggg"},"content":" assertThrows(InvalidParametersException.class, () -\u003e feedbackSessionsDb.updateFeedbackSession(feedbackSession));"},{"lineNumber":136,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), never());"},{"lineNumber":137,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":138,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":139,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":140,"author":{"gitId":"dishenggg"},"content":" public void testDeleteFeedbackSession_success() throws InvalidParametersException, EntityDoesNotExistException {"},{"lineNumber":141,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":142,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":143,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.deleteFeedbackSession(feedbackSession);"},{"lineNumber":144,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":145,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.remove(feedbackSession), times(1));"},{"lineNumber":146,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":147,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":148,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":149,"author":{"gitId":"dishenggg"},"content":" public void testGetSoftDeletedFeedbackSession_isSoftDeleted_success() {"},{"lineNumber":150,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":151,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":152,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":153,"author":{"gitId":"dishenggg"},"content":" feedbackSession.setDeletedAt(TimeHelperExtension.getInstantDaysOffsetFromNow(2));"},{"lineNumber":154,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":155,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":156,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getSoftDeletedFeedbackSession(sessionName, courseId);"},{"lineNumber":157,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":158,"author":{"gitId":"dishenggg"},"content":" assertEquals(feedbackSession, sessionFetched);"},{"lineNumber":159,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":160,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":161,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":162,"author":{"gitId":"dishenggg"},"content":" public void testGetSoftDeletedFeedbackSession_notSoftDeleted_returnNull() {"},{"lineNumber":163,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":164,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":165,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":166,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":167,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":168,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getSoftDeletedFeedbackSession(sessionName, courseId);"},{"lineNumber":169,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":170,"author":{"gitId":"dishenggg"},"content":" assertNull(sessionFetched);"},{"lineNumber":171,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":172,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":173,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":174,"author":{"gitId":"dishenggg"},"content":" public void testGetSoftDeletedFeedbackSession_sessionDoesNotExist_returnNull() {"},{"lineNumber":175,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":176,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":177,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":178,"author":{"gitId":"dishenggg"},"content":" doReturn(null).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":179,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":180,"author":{"gitId":"dishenggg"},"content":" FeedbackSession sessionFetched \u003d feedbackSessionsDb.getSoftDeletedFeedbackSession(sessionName, courseId);"},{"lineNumber":181,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":182,"author":{"gitId":"dishenggg"},"content":" assertNull(sessionFetched);"},{"lineNumber":183,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":184,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":185,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":186,"author":{"gitId":"dishenggg"},"content":" public void testRestoreDeletedFeedbackSession_success() throws EntityDoesNotExistException {"},{"lineNumber":187,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":188,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":189,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":190,"author":{"gitId":"dishenggg"},"content":" feedbackSession.setDeletedAt(TimeHelperExtension.getInstantDaysOffsetFromNow(2));"},{"lineNumber":191,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":192,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":193,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.restoreDeletedFeedbackSession(sessionName, courseId);"},{"lineNumber":194,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":195,"author":{"gitId":"dishenggg"},"content":" assertNull(feedbackSession.getDeletedAt());"},{"lineNumber":196,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), times(1));"},{"lineNumber":197,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":198,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":199,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":200,"author":{"gitId":"dishenggg"},"content":" public void testRestoreDeletedFeedbackSession_sessionDoesNotExist_throwsEntityDoesNotExistException()"},{"lineNumber":201,"author":{"gitId":"dishenggg"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":202,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":203,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":204,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":205,"author":{"gitId":"dishenggg"},"content":" doReturn(null).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":206,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":207,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":208,"author":{"gitId":"dishenggg"},"content":" () -\u003e feedbackSessionsDb.restoreDeletedFeedbackSession(sessionName, courseId));"},{"lineNumber":209,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), never());"},{"lineNumber":210,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":211,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":212,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":213,"author":{"gitId":"dishenggg"},"content":" public void testSoftDeleteFeedbackSession_success() throws EntityDoesNotExistException {"},{"lineNumber":214,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":215,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":216,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":217,"author":{"gitId":"dishenggg"},"content":" doReturn(feedbackSession).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":218,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":219,"author":{"gitId":"dishenggg"},"content":" feedbackSessionsDb.softDeleteFeedbackSession(sessionName, courseId);"},{"lineNumber":220,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":221,"author":{"gitId":"dishenggg"},"content":" assertNotNull(feedbackSession.getDeletedAt());"},{"lineNumber":222,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), times(1));"},{"lineNumber":223,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":224,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":225,"author":{"gitId":"dishenggg"},"content":" @Test"},{"lineNumber":226,"author":{"gitId":"dishenggg"},"content":" public void testSoftDeleteFeedbackSession_sessionDoesNotExist_throwsEntityDoesNotExistException()"},{"lineNumber":227,"author":{"gitId":"dishenggg"},"content":" throws EntityDoesNotExistException {"},{"lineNumber":228,"author":{"gitId":"dishenggg"},"content":" FeedbackSession feedbackSession \u003d getTypicalFeedbackSessionForCourse(getTypicalCourse());"},{"lineNumber":229,"author":{"gitId":"dishenggg"},"content":" String sessionName \u003d feedbackSession.getName();"},{"lineNumber":230,"author":{"gitId":"dishenggg"},"content":" String courseId \u003d feedbackSession.getCourse().getId();"},{"lineNumber":231,"author":{"gitId":"dishenggg"},"content":" doReturn(null).when(feedbackSessionsDb).getFeedbackSession(sessionName, courseId);"},{"lineNumber":232,"author":{"gitId":"dishenggg"},"content":""},{"lineNumber":233,"author":{"gitId":"dishenggg"},"content":" assertThrows(EntityDoesNotExistException.class,"},{"lineNumber":234,"author":{"gitId":"dishenggg"},"content":" () -\u003e feedbackSessionsDb.restoreDeletedFeedbackSession(sessionName, courseId));"},{"lineNumber":235,"author":{"gitId":"dishenggg"},"content":" mockHibernateUtil.verify(() -\u003e HibernateUtil.merge(feedbackSession), never());"},{"lineNumber":236,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":237,"author":{"gitId":"dishenggg"},"content":"}"}],"authorContributionMap":{"dishenggg":237}},{"path":"src/test/java/teammates/test/AbstractBackDoor.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.io.BufferedReader;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.io.InputStreamReader;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.net.URI;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.net.URISyntaxException;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.time.Duration;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Collections;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"import org.apache.http.HttpEntity;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import org.apache.http.HttpStatus;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import org.apache.http.NameValuePair;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.CloseableHttpResponse;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpDelete;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpGet;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpPost;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpPut;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import org.apache.http.client.methods.HttpRequestBase;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import org.apache.http.client.utils.URIBuilder;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import org.apache.http.entity.StringEntity;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import org.apache.http.impl.client.CloseableHttpClient;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import org.apache.http.impl.client.HttpClients;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import org.apache.http.message.BasicNameValuePair;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"import com.google.gson.JsonObject;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import com.google.gson.JsonParser;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":38,"author":{"gitId":"dishenggg"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountAttributes;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.DeadlineExtensionAttributes;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":47,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":49,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":50,"author":{"gitId":"-"},"content":"import teammates.common.exception.HttpRequestFailedException;"},{"lineNumber":51,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":53,"author":{"gitId":"-"},"content":"import teammates.common.util.TimeHelper;"},{"lineNumber":54,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":55,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountRequestData;"},{"lineNumber":56,"author":{"gitId":"-"},"content":"import teammates.ui.output.CourseData;"},{"lineNumber":57,"author":{"gitId":"-"},"content":"import teammates.ui.output.CoursesData;"},{"lineNumber":58,"author":{"gitId":"-"},"content":"import teammates.ui.output.DeadlineExtensionData;"},{"lineNumber":59,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackQuestionData;"},{"lineNumber":60,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackQuestionsData;"},{"lineNumber":61,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponseCommentData;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponseData;"},{"lineNumber":63,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponsesData;"},{"lineNumber":64,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionData;"},{"lineNumber":65,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionsData;"},{"lineNumber":66,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackVisibilityType;"},{"lineNumber":67,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":68,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorsData;"},{"lineNumber":69,"author":{"gitId":"-"},"content":"import teammates.ui.output.MessageOutput;"},{"lineNumber":70,"author":{"gitId":"-"},"content":"import teammates.ui.output.NotificationData;"},{"lineNumber":71,"author":{"gitId":"-"},"content":"import teammates.ui.output.NumberOfEntitiesToGiveFeedbackToSetting;"},{"lineNumber":72,"author":{"gitId":"-"},"content":"import teammates.ui.output.ResponseVisibleSetting;"},{"lineNumber":73,"author":{"gitId":"-"},"content":"import teammates.ui.output.SessionVisibleSetting;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":75,"author":{"gitId":"-"},"content":"import teammates.ui.request.Intent;"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Used to create API calls to the back-end without going through the UI."},{"lineNumber":79,"author":{"gitId":"-"},"content":" */"},{"lineNumber":80,"author":{"gitId":"-"},"content":"public abstract class AbstractBackDoor {"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * Gets the URL of the back-end."},{"lineNumber":84,"author":{"gitId":"-"},"content":" */"},{"lineNumber":85,"author":{"gitId":"-"},"content":" protected abstract String getAppUrl();"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Gets the backdoor key used to authenticate with the back-end."},{"lineNumber":89,"author":{"gitId":"-"},"content":" */"},{"lineNumber":90,"author":{"gitId":"-"},"content":" protected abstract String getBackdoorKey();"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Gets the CSRF key used to authenticate with the back-end."},{"lineNumber":94,"author":{"gitId":"-"},"content":" */"},{"lineNumber":95,"author":{"gitId":"-"},"content":" protected abstract String getCsrfKey();"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Executes GET request with the given {@code relativeUrl}."},{"lineNumber":99,"author":{"gitId":"-"},"content":" *"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * @return The body content and status of the HTTP response"},{"lineNumber":101,"author":{"gitId":"-"},"content":" */"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public ResponseBodyAndCode executeGetRequest(String relativeUrl, Map\u003cString, String\u003e params) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return executeRequest(HttpGet.METHOD_NAME, relativeUrl, params, null);"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * Executes POST request with the given {@code relativeUrl}."},{"lineNumber":108,"author":{"gitId":"-"},"content":" *"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * @return The body content and status of the HTTP response"},{"lineNumber":110,"author":{"gitId":"-"},"content":" */"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public ResponseBodyAndCode executePostRequest(String relativeUrl, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" return executeRequest(HttpPost.METHOD_NAME, relativeUrl, params, body);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":116,"author":{"gitId":"-"},"content":" * Executes PUT request with the given {@code relativeUrl}."},{"lineNumber":117,"author":{"gitId":"-"},"content":" *"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * @return The body content and status of the HTTP response"},{"lineNumber":119,"author":{"gitId":"-"},"content":" */"},{"lineNumber":120,"author":{"gitId":"-"},"content":" public ResponseBodyAndCode executePutRequest(String relativeUrl, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" return executeRequest(HttpPut.METHOD_NAME, relativeUrl, params, body);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":125,"author":{"gitId":"-"},"content":" * Executes DELETE request with the given {@code relativeUrl}."},{"lineNumber":126,"author":{"gitId":"-"},"content":" *"},{"lineNumber":127,"author":{"gitId":"-"},"content":" * @return The body content and status of the HTTP response"},{"lineNumber":128,"author":{"gitId":"-"},"content":" */"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public ResponseBodyAndCode executeDeleteRequest(String relativeUrl, Map\u003cString, String\u003e params) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" return executeRequest(HttpDelete.METHOD_NAME, relativeUrl, params, null);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":134,"author":{"gitId":"-"},"content":" * Executes HTTP request with the given {@code method} and {@code relativeUrl}."},{"lineNumber":135,"author":{"gitId":"-"},"content":" *"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * @return The content of the HTTP response"},{"lineNumber":137,"author":{"gitId":"-"},"content":" */"},{"lineNumber":138,"author":{"gitId":"-"},"content":" private ResponseBodyAndCode executeRequest("},{"lineNumber":139,"author":{"gitId":"-"},"content":" String method, String relativeUrl, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" String url \u003d getAppUrl() + relativeUrl;"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":" HttpRequestBase request;"},{"lineNumber":143,"author":{"gitId":"-"},"content":" switch (method) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" case HttpGet.METHOD_NAME:"},{"lineNumber":145,"author":{"gitId":"-"},"content":" request \u003d createGetRequest(url, params);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" case HttpPost.METHOD_NAME:"},{"lineNumber":148,"author":{"gitId":"-"},"content":" request \u003d createPostRequest(url, params, body);"},{"lineNumber":149,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" case HttpPut.METHOD_NAME:"},{"lineNumber":151,"author":{"gitId":"-"},"content":" request \u003d createPutRequest(url, params, body);"},{"lineNumber":152,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" case HttpDelete.METHOD_NAME:"},{"lineNumber":154,"author":{"gitId":"-"},"content":" request \u003d createDeleteRequest(url, params);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":157,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unaccepted HTTP method: \" + method);"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" addAuthKeys(request);"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":" try (CloseableHttpClient httpClient \u003d HttpClients.createDefault();"},{"lineNumber":163,"author":{"gitId":"-"},"content":" CloseableHttpResponse response \u003d httpClient.execute(request)) {"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":" String responseBody \u003d null;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" HttpEntity entity \u003d response.getEntity();"},{"lineNumber":167,"author":{"gitId":"-"},"content":" if (entity !\u003d null) {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" try (BufferedReader br \u003d new BufferedReader("},{"lineNumber":169,"author":{"gitId":"-"},"content":" new InputStreamReader(entity.getContent(), Const.ENCODING))) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" responseBody \u003d br.lines().collect(Collectors.joining(System.lineSeparator()));"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }"},{"lineNumber":173,"author":{"gitId":"-"},"content":" return new ResponseBodyAndCode(responseBody, response.getStatusLine().getStatusCode());"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"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":" * Executes GET request with the given {@code relativeUrl}."},{"lineNumber":182,"author":{"gitId":"-"},"content":" *"},{"lineNumber":183,"author":{"gitId":"-"},"content":" * @return The content of the HTTP response"},{"lineNumber":184,"author":{"gitId":"-"},"content":" */"},{"lineNumber":185,"author":{"gitId":"-"},"content":" private static HttpGet createGetRequest(String url, Map\u003cString, String\u003e params) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return new HttpGet(createBasicUri(url, params));"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" private static HttpPost createPostRequest(String url, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" HttpPost post \u003d new HttpPost(createBasicUri(url, params));"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" if (body !\u003d null) {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" StringEntity entity \u003d new StringEntity(body, Const.ENCODING);"},{"lineNumber":194,"author":{"gitId":"-"},"content":" post.setEntity(entity);"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" return post;"},{"lineNumber":198,"author":{"gitId":"-"},"content":" }"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":" private static HttpPut createPutRequest(String url, Map\u003cString, String\u003e params, String body) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" HttpPut put \u003d new HttpPut(createBasicUri(url, params));"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":" if (body !\u003d null) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" StringEntity entity \u003d new StringEntity(body, Const.ENCODING);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" put.setEntity(entity);"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" return put;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":" private static HttpDelete createDeleteRequest(String url, Map\u003cString, String\u003e params) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" return new HttpDelete(createBasicUri(url, params));"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":" private static URI createBasicUri(String url, Map\u003cString, String\u003e params) {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" List\u003cNameValuePair\u003e postParameters \u003d new ArrayList\u003c\u003e();"},{"lineNumber":217,"author":{"gitId":"-"},"content":" if (params !\u003d null) {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" params.forEach((key, value) -\u003e postParameters.add(new BasicNameValuePair(key, value)));"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" URIBuilder uriBuilder \u003d new URIBuilder(url);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" uriBuilder.addParameters(postParameters);"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" return uriBuilder.build();"},{"lineNumber":226,"author":{"gitId":"-"},"content":" } catch (URISyntaxException e) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" }"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":" private void addAuthKeys(HttpRequestBase request) {"},{"lineNumber":232,"author":{"gitId":"-"},"content":" request.addHeader(Const.HeaderNames.BACKDOOR_KEY, getBackdoorKey());"},{"lineNumber":233,"author":{"gitId":"-"},"content":" request.addHeader(Const.HeaderNames.CSRF_KEY, getCsrfKey());"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":237,"author":{"gitId":"-"},"content":" * Removes and restores given data in the database. This method is to be called on test startup."},{"lineNumber":238,"author":{"gitId":"-"},"content":" *"},{"lineNumber":239,"author":{"gitId":"-"},"content":" * \u003cp\u003eNote: The data associated with the test accounts have to be \u003cstrong\u003emanually\u003c/strong\u003e removed by removing the data"},{"lineNumber":240,"author":{"gitId":"-"},"content":" * bundle when a test ends because the test accounts are shared across tests."},{"lineNumber":241,"author":{"gitId":"-"},"content":" *"},{"lineNumber":242,"author":{"gitId":"-"},"content":" * \u003cp\u003eTest data should never be cleared after test in order to prevent incurring additional database costs because the"},{"lineNumber":243,"author":{"gitId":"-"},"content":" * test\u0027s data may not be accessed in another test. Also although unlikely in normal conditions, when a test fail to"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * remove data bundle on teardown, another test should have no reason to fail."},{"lineNumber":245,"author":{"gitId":"-"},"content":" *"},{"lineNumber":246,"author":{"gitId":"-"},"content":" * \u003cp\u003eAnother reason not to remove associated data after a test is that in case of test failures, it helps to have the"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * associated data in the database to debug the failure."},{"lineNumber":248,"author":{"gitId":"-"},"content":" *"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * \u003cp\u003eThis means that removing the data bundle on startup is not always sufficient because a test only knows how"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * to remove its associated data."},{"lineNumber":251,"author":{"gitId":"-"},"content":" * This is why some tests would fail when they use the same account and use different data."},{"lineNumber":252,"author":{"gitId":"-"},"content":" * Extending this method to remove data outside its associated data would introduce"},{"lineNumber":253,"author":{"gitId":"-"},"content":" * unnecessary complications such as extra costs and knowing exactly how much data to remove. Removing too much data"},{"lineNumber":254,"author":{"gitId":"-"},"content":" * would not just incur higher database costs but we can make tests unexpectedly pass(fail) when the data is expected to"},{"lineNumber":255,"author":{"gitId":"-"},"content":" * be not present(present) in another test."},{"lineNumber":256,"author":{"gitId":"-"},"content":" *"},{"lineNumber":257,"author":{"gitId":"-"},"content":" * \u003cp\u003eTODO: Hence, we need to explicitly remove the data bundle in tests on teardown to avoid instability of tests."},{"lineNumber":258,"author":{"gitId":"-"},"content":" * However, removing the data bundle on teardown manually is not a perfect solution because two tests can concurrently"},{"lineNumber":259,"author":{"gitId":"-"},"content":" * access the same account and their data may get mixed up in the process. This is a major problem we need to address."},{"lineNumber":260,"author":{"gitId":"-"},"content":" */"},{"lineNumber":261,"author":{"gitId":"-"},"content":" public String removeAndRestoreDataBundle(DataBundle dataBundle) throws HttpRequestFailedException {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" removeDataBundle(dataBundle);"},{"lineNumber":263,"author":{"gitId":"-"},"content":" ResponseBodyAndCode putRequestOutput \u003d"},{"lineNumber":264,"author":{"gitId":"-"},"content":" executePostRequest(Const.ResourceURIs.DATABUNDLE, null, JsonUtils.toJson(dataBundle));"},{"lineNumber":265,"author":{"gitId":"-"},"content":" if (putRequestOutput.responseCode !\u003d HttpStatus.SC_OK) {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" throw new HttpRequestFailedException(\"Request failed: [\" + putRequestOutput.responseCode + \"] \""},{"lineNumber":267,"author":{"gitId":"-"},"content":" + putRequestOutput.responseBody);"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":" return putRequestOutput.responseBody;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":273,"author":{"gitId":"-"},"content":" * Removes and restores given data in the database. This method is to be called on test startup."},{"lineNumber":274,"author":{"gitId":"-"},"content":" */"},{"lineNumber":275,"author":{"gitId":"-"},"content":" public SqlDataBundle removeAndRestoreSqlDataBundle(SqlDataBundle dataBundle) throws HttpRequestFailedException {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" removeSqlDataBundle(dataBundle);"},{"lineNumber":277,"author":{"gitId":"-"},"content":" ResponseBodyAndCode putRequestOutput \u003d"},{"lineNumber":278,"author":{"gitId":"-"},"content":" executePostRequest(Const.ResourceURIs.SQL_DATABUNDLE, null, JsonUtils.toJson(dataBundle));"},{"lineNumber":279,"author":{"gitId":"-"},"content":" if (putRequestOutput.responseCode !\u003d HttpStatus.SC_OK) {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" throw new HttpRequestFailedException(\"Request failed: [\" + putRequestOutput.responseCode + \"] \""},{"lineNumber":281,"author":{"gitId":"-"},"content":" + putRequestOutput.responseBody);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" JsonObject jsonObject \u003d JsonParser.parseString(putRequestOutput.responseBody).getAsJsonObject();"},{"lineNumber":285,"author":{"gitId":"-"},"content":" // data bundle is nested under message key"},{"lineNumber":286,"author":{"gitId":"-"},"content":" String message \u003d jsonObject.get(\"message\").getAsString();"},{"lineNumber":287,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(message, SqlDataBundle.class);"},{"lineNumber":288,"author":{"gitId":"-"},"content":" }"},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":291,"author":{"gitId":"-"},"content":" * Removes given data from the database."},{"lineNumber":292,"author":{"gitId":"-"},"content":" *"},{"lineNumber":293,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf given entities have already been deleted, it fails silently."},{"lineNumber":294,"author":{"gitId":"-"},"content":" */"},{"lineNumber":295,"author":{"gitId":"-"},"content":" public void removeDataBundle(DataBundle dataBundle) {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" executePutRequest(Const.ResourceURIs.DATABUNDLE, null, JsonUtils.toJson(dataBundle));"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":300,"author":{"gitId":"-"},"content":" * Removes given data from the database."},{"lineNumber":301,"author":{"gitId":"-"},"content":" *"},{"lineNumber":302,"author":{"gitId":"-"},"content":" * \u003cp\u003eIf given entities have already been deleted, it fails silently."},{"lineNumber":303,"author":{"gitId":"-"},"content":" */"},{"lineNumber":304,"author":{"gitId":"-"},"content":" public void removeSqlDataBundle(SqlDataBundle dataBundle) {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" executePutRequest(Const.ResourceURIs.SQL_DATABUNDLE, null, JsonUtils.toJson(dataBundle));"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":309,"author":{"gitId":"-"},"content":" * Gets the cookie format for the given user ID."},{"lineNumber":310,"author":{"gitId":"-"},"content":" */"},{"lineNumber":311,"author":{"gitId":"-"},"content":" public String getUserCookie(String userId) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":313,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.USER_ID, userId);"},{"lineNumber":314,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executePostRequest(Const.ResourceURIs.USER_COOKIE, params, null);"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" MessageOutput output \u003d JsonUtils.fromJson(response.responseBody, MessageOutput.class);"},{"lineNumber":317,"author":{"gitId":"-"},"content":" return output.getMessage();"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"dishenggg"},"content":" // TODO: remove params after migration"},{"lineNumber":321,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":322,"author":{"gitId":"-"},"content":" * Puts searchable documents in data bundle into the database."},{"lineNumber":323,"author":{"gitId":"-"},"content":" */"},{"lineNumber":324,"author":{"gitId":"-"},"content":" public String putDocuments(DataBundle dataBundle) throws HttpRequestFailedException {"},{"lineNumber":325,"author":{"gitId":"dishenggg"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":326,"author":{"gitId":"dishenggg"},"content":" params.put(\"databundletype\", \"datastore\");"},{"lineNumber":327,"author":{"gitId":"-"},"content":" ResponseBodyAndCode putRequestOutput \u003d"},{"lineNumber":328,"author":{"gitId":"dishenggg"},"content":" executePutRequest(Const.ResourceURIs.DATABUNDLE_DOCUMENTS, params, JsonUtils.toJson(dataBundle));"},{"lineNumber":329,"author":{"gitId":"-"},"content":" if (putRequestOutput.responseCode !\u003d HttpStatus.SC_OK) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" throw new HttpRequestFailedException(\"Request failed: [\" + putRequestOutput.responseCode + \"] \""},{"lineNumber":331,"author":{"gitId":"-"},"content":" + putRequestOutput.responseBody);"},{"lineNumber":332,"author":{"gitId":"-"},"content":" }"},{"lineNumber":333,"author":{"gitId":"-"},"content":" return putRequestOutput.responseBody;"},{"lineNumber":334,"author":{"gitId":"-"},"content":" }"},{"lineNumber":335,"author":{"gitId":"-"},"content":""},{"lineNumber":336,"author":{"gitId":"dishenggg"},"content":" // TODO: remove method after migration"},{"lineNumber":337,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":338,"author":{"gitId":"dishenggg"},"content":" * Puts searchable documents in data bundle into the SQL database."},{"lineNumber":339,"author":{"gitId":"-"},"content":" */"},{"lineNumber":340,"author":{"gitId":"dishenggg"},"content":" public String putSqlDocuments(SqlDataBundle dataBundle) throws HttpRequestFailedException {"},{"lineNumber":341,"author":{"gitId":"dishenggg"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":342,"author":{"gitId":"dishenggg"},"content":" params.put(\"databundletype\", \"sql\");"},{"lineNumber":343,"author":{"gitId":"-"},"content":" ResponseBodyAndCode putRequestOutput \u003d"},{"lineNumber":344,"author":{"gitId":"dishenggg"},"content":" executePutRequest(Const.ResourceURIs.DATABUNDLE_DOCUMENTS, params, JsonUtils.toJson(dataBundle));"},{"lineNumber":345,"author":{"gitId":"-"},"content":" if (putRequestOutput.responseCode !\u003d HttpStatus.SC_OK) {"},{"lineNumber":346,"author":{"gitId":"-"},"content":" throw new HttpRequestFailedException(\"Request failed: [\" + putRequestOutput.responseCode + \"] \""},{"lineNumber":347,"author":{"gitId":"-"},"content":" + putRequestOutput.responseBody);"},{"lineNumber":348,"author":{"gitId":"-"},"content":" }"},{"lineNumber":349,"author":{"gitId":"-"},"content":" return putRequestOutput.responseBody;"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":""},{"lineNumber":352,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":353,"author":{"gitId":"-"},"content":" * Gets account data from the database."},{"lineNumber":354,"author":{"gitId":"-"},"content":" */"},{"lineNumber":355,"author":{"gitId":"-"},"content":" public AccountData getAccountData(String googleId) {"},{"lineNumber":356,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":357,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_ID, googleId);"},{"lineNumber":358,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.ACCOUNT, params);"},{"lineNumber":359,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":361,"author":{"gitId":"-"},"content":" }"},{"lineNumber":362,"author":{"gitId":"-"},"content":""},{"lineNumber":363,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, AccountData.class);"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":367,"author":{"gitId":"-"},"content":" * Gets an account from the database."},{"lineNumber":368,"author":{"gitId":"-"},"content":" */"},{"lineNumber":369,"author":{"gitId":"-"},"content":" public AccountAttributes getAccount(String googleId) {"},{"lineNumber":370,"author":{"gitId":"-"},"content":" AccountData accountData \u003d getAccountData(googleId);"},{"lineNumber":371,"author":{"gitId":"-"},"content":" return AccountAttributes.builder(accountData.getGoogleId())"},{"lineNumber":372,"author":{"gitId":"-"},"content":" .withName(accountData.getName())"},{"lineNumber":373,"author":{"gitId":"-"},"content":" .withEmail(accountData.getEmail())"},{"lineNumber":374,"author":{"gitId":"-"},"content":" .withReadNotifications("},{"lineNumber":375,"author":{"gitId":"-"},"content":" accountData.getReadNotifications()"},{"lineNumber":376,"author":{"gitId":"-"},"content":" .entrySet()"},{"lineNumber":377,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":378,"author":{"gitId":"-"},"content":" .collect(Collectors.toMap("},{"lineNumber":379,"author":{"gitId":"-"},"content":" e -\u003e e.getKey(),"},{"lineNumber":380,"author":{"gitId":"-"},"content":" e -\u003e Instant.ofEpochMilli(e.getValue())"},{"lineNumber":381,"author":{"gitId":"-"},"content":" ))"},{"lineNumber":382,"author":{"gitId":"-"},"content":" )"},{"lineNumber":383,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":384,"author":{"gitId":"-"},"content":" }"},{"lineNumber":385,"author":{"gitId":"-"},"content":""},{"lineNumber":386,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":387,"author":{"gitId":"-"},"content":" * Gets course data from the database."},{"lineNumber":388,"author":{"gitId":"-"},"content":" */"},{"lineNumber":389,"author":{"gitId":"-"},"content":" public CourseData getCourseData(String courseId) {"},{"lineNumber":390,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":391,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":392,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.COURSE, params);"},{"lineNumber":393,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":394,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":395,"author":{"gitId":"-"},"content":" }"},{"lineNumber":396,"author":{"gitId":"-"},"content":""},{"lineNumber":397,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, CourseData.class);"},{"lineNumber":398,"author":{"gitId":"-"},"content":" }"},{"lineNumber":399,"author":{"gitId":"-"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":401,"author":{"gitId":"-"},"content":" * Gets a course from the database."},{"lineNumber":402,"author":{"gitId":"-"},"content":" */"},{"lineNumber":403,"author":{"gitId":"-"},"content":" public CourseAttributes getCourse(String courseId) {"},{"lineNumber":404,"author":{"gitId":"-"},"content":" CourseData courseData \u003d getCourseData(courseId);"},{"lineNumber":405,"author":{"gitId":"-"},"content":" if (courseData \u003d\u003d null) {"},{"lineNumber":406,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":407,"author":{"gitId":"-"},"content":" }"},{"lineNumber":408,"author":{"gitId":"-"},"content":" return CourseAttributes.builder(courseData.getCourseId())"},{"lineNumber":409,"author":{"gitId":"-"},"content":" .withName(courseData.getCourseName())"},{"lineNumber":410,"author":{"gitId":"-"},"content":" .withTimezone(courseData.getTimeZone())"},{"lineNumber":411,"author":{"gitId":"-"},"content":" .withInstitute(courseData.getInstitute())"},{"lineNumber":412,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":413,"author":{"gitId":"-"},"content":" }"},{"lineNumber":414,"author":{"gitId":"-"},"content":""},{"lineNumber":415,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":416,"author":{"gitId":"-"},"content":" * Gets archived course data from the database."},{"lineNumber":417,"author":{"gitId":"-"},"content":" */"},{"lineNumber":418,"author":{"gitId":"-"},"content":" public CourseData getArchivedCourseData(String instructorId, String courseId) {"},{"lineNumber":419,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":420,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.USER_ID, instructorId);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":422,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR);"},{"lineNumber":423,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_STATUS, Const.CourseStatus.ARCHIVED);"},{"lineNumber":424,"author":{"gitId":"-"},"content":""},{"lineNumber":425,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.COURSES, params);"},{"lineNumber":426,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":427,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":428,"author":{"gitId":"-"},"content":" }"},{"lineNumber":429,"author":{"gitId":"-"},"content":""},{"lineNumber":430,"author":{"gitId":"-"},"content":" CoursesData coursesData \u003d JsonUtils.fromJson(response.responseBody, CoursesData.class);"},{"lineNumber":431,"author":{"gitId":"-"},"content":" CourseData courseData \u003d coursesData.getCourses()"},{"lineNumber":432,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":433,"author":{"gitId":"-"},"content":" .filter(cd -\u003e cd.getCourseId().equals(courseId))"},{"lineNumber":434,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":435,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":436,"author":{"gitId":"-"},"content":""},{"lineNumber":437,"author":{"gitId":"-"},"content":" if (courseData \u003d\u003d null) {"},{"lineNumber":438,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":439,"author":{"gitId":"-"},"content":" }"},{"lineNumber":440,"author":{"gitId":"-"},"content":""},{"lineNumber":441,"author":{"gitId":"-"},"content":" return courseData;"},{"lineNumber":442,"author":{"gitId":"-"},"content":" }"},{"lineNumber":443,"author":{"gitId":"-"},"content":""},{"lineNumber":444,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":445,"author":{"gitId":"-"},"content":" * Gets a archived course from the database."},{"lineNumber":446,"author":{"gitId":"-"},"content":" */"},{"lineNumber":447,"author":{"gitId":"-"},"content":" public CourseAttributes getArchivedCourse(String instructorId, String courseId) {"},{"lineNumber":448,"author":{"gitId":"-"},"content":" CourseData courseData \u003d getArchivedCourseData(instructorId, courseId);"},{"lineNumber":449,"author":{"gitId":"-"},"content":" if (courseData \u003d\u003d null) {"},{"lineNumber":450,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":451,"author":{"gitId":"-"},"content":" }"},{"lineNumber":452,"author":{"gitId":"-"},"content":" return CourseAttributes.builder(courseData.getCourseId())"},{"lineNumber":453,"author":{"gitId":"-"},"content":" .withName(courseData.getCourseName())"},{"lineNumber":454,"author":{"gitId":"-"},"content":" .withTimezone(courseData.getTimeZone())"},{"lineNumber":455,"author":{"gitId":"-"},"content":" .withInstitute(courseData.getInstitute())"},{"lineNumber":456,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":457,"author":{"gitId":"-"},"content":" }"},{"lineNumber":458,"author":{"gitId":"-"},"content":""},{"lineNumber":459,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":460,"author":{"gitId":"-"},"content":" * Returns true if the course exists and is in recycle bin."},{"lineNumber":461,"author":{"gitId":"-"},"content":" */"},{"lineNumber":462,"author":{"gitId":"-"},"content":" public boolean isCourseInRecycleBin(String courseId) {"},{"lineNumber":463,"author":{"gitId":"-"},"content":" CourseData courseData \u003d getCourseData(courseId);"},{"lineNumber":464,"author":{"gitId":"-"},"content":" if (courseData \u003d\u003d null) {"},{"lineNumber":465,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":466,"author":{"gitId":"-"},"content":" }"},{"lineNumber":467,"author":{"gitId":"-"},"content":" return courseData.getDeletionTimestamp() !\u003d 0;"},{"lineNumber":468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":469,"author":{"gitId":"-"},"content":""},{"lineNumber":470,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":471,"author":{"gitId":"-"},"content":" * Gets instructor data from the database."},{"lineNumber":472,"author":{"gitId":"-"},"content":" */"},{"lineNumber":473,"author":{"gitId":"-"},"content":" public InstructorData getInstructorData(String courseId, String email) {"},{"lineNumber":474,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":475,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":476,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString());"},{"lineNumber":477,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.INSTRUCTORS, params);"},{"lineNumber":478,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":479,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":480,"author":{"gitId":"-"},"content":" }"},{"lineNumber":481,"author":{"gitId":"-"},"content":""},{"lineNumber":482,"author":{"gitId":"-"},"content":" InstructorsData instructorsData \u003d JsonUtils.fromJson(response.responseBody, InstructorsData.class);"},{"lineNumber":483,"author":{"gitId":"-"},"content":" InstructorData instructorData \u003d instructorsData.getInstructors()"},{"lineNumber":484,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":485,"author":{"gitId":"-"},"content":" .filter(instructor -\u003e instructor.getEmail().equals(email))"},{"lineNumber":486,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":487,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":488,"author":{"gitId":"-"},"content":""},{"lineNumber":489,"author":{"gitId":"-"},"content":" if (instructorData \u003d\u003d null) {"},{"lineNumber":490,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":491,"author":{"gitId":"-"},"content":" }"},{"lineNumber":492,"author":{"gitId":"-"},"content":""},{"lineNumber":493,"author":{"gitId":"-"},"content":" return instructorData;"},{"lineNumber":494,"author":{"gitId":"-"},"content":" }"},{"lineNumber":495,"author":{"gitId":"-"},"content":""},{"lineNumber":496,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":497,"author":{"gitId":"-"},"content":" * Get instructor from database. Does not include certain fields like InstructorPrivileges."},{"lineNumber":498,"author":{"gitId":"-"},"content":" */"},{"lineNumber":499,"author":{"gitId":"-"},"content":" public InstructorAttributes getInstructor(String courseId, String instructorEmail) {"},{"lineNumber":500,"author":{"gitId":"-"},"content":" InstructorData instructorData \u003d getInstructorData(courseId, instructorEmail);"},{"lineNumber":501,"author":{"gitId":"-"},"content":" if (instructorData \u003d\u003d null) {"},{"lineNumber":502,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":503,"author":{"gitId":"-"},"content":" }"},{"lineNumber":504,"author":{"gitId":"-"},"content":" InstructorAttributes.Builder instructor \u003d InstructorAttributes.builder(instructorData.getCourseId(),"},{"lineNumber":505,"author":{"gitId":"-"},"content":" instructorData.getEmail());"},{"lineNumber":506,"author":{"gitId":"-"},"content":" if (instructorData.getGoogleId() !\u003d null) {"},{"lineNumber":507,"author":{"gitId":"-"},"content":" instructor.withGoogleId(instructorData.getGoogleId());"},{"lineNumber":508,"author":{"gitId":"-"},"content":" }"},{"lineNumber":509,"author":{"gitId":"-"},"content":" if (instructorData.getName() !\u003d null) {"},{"lineNumber":510,"author":{"gitId":"-"},"content":" instructor.withName(instructorData.getName());"},{"lineNumber":511,"author":{"gitId":"-"},"content":" }"},{"lineNumber":512,"author":{"gitId":"-"},"content":" if (instructorData.getRole() !\u003d null) {"},{"lineNumber":513,"author":{"gitId":"-"},"content":" instructor.withRole(instructorData.getRole().getRoleName());"},{"lineNumber":514,"author":{"gitId":"-"},"content":" }"},{"lineNumber":515,"author":{"gitId":"-"},"content":" if (instructorData.getIsDisplayedToStudents() !\u003d null) {"},{"lineNumber":516,"author":{"gitId":"-"},"content":" instructor.withIsDisplayedToStudents(instructorData.getIsDisplayedToStudents());"},{"lineNumber":517,"author":{"gitId":"-"},"content":" }"},{"lineNumber":518,"author":{"gitId":"-"},"content":" if (instructorData.getDisplayedToStudentsAs() !\u003d null) {"},{"lineNumber":519,"author":{"gitId":"-"},"content":" instructor.withDisplayedName(instructorData.getDisplayedToStudentsAs());"},{"lineNumber":520,"author":{"gitId":"-"},"content":" }"},{"lineNumber":521,"author":{"gitId":"-"},"content":" InstructorAttributes instructorAttributes \u003d instructor.build();"},{"lineNumber":522,"author":{"gitId":"-"},"content":" if (instructorData.getKey() !\u003d null) {"},{"lineNumber":523,"author":{"gitId":"-"},"content":" instructorAttributes.setKey(instructorData.getKey());"},{"lineNumber":524,"author":{"gitId":"-"},"content":" }"},{"lineNumber":525,"author":{"gitId":"-"},"content":" return instructorAttributes;"},{"lineNumber":526,"author":{"gitId":"-"},"content":" }"},{"lineNumber":527,"author":{"gitId":"-"},"content":""},{"lineNumber":528,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":529,"author":{"gitId":"-"},"content":" * Gets student data from the database."},{"lineNumber":530,"author":{"gitId":"-"},"content":" */"},{"lineNumber":531,"author":{"gitId":"-"},"content":" public StudentData getStudentData(String courseId, String studentEmail) {"},{"lineNumber":532,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":533,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":534,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.STUDENT_EMAIL, studentEmail);"},{"lineNumber":535,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.STUDENT, params);"},{"lineNumber":536,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":537,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":538,"author":{"gitId":"-"},"content":" }"},{"lineNumber":539,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, StudentData.class);"},{"lineNumber":540,"author":{"gitId":"-"},"content":" }"},{"lineNumber":541,"author":{"gitId":"-"},"content":""},{"lineNumber":542,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":543,"author":{"gitId":"-"},"content":" * Get student from database."},{"lineNumber":544,"author":{"gitId":"-"},"content":" */"},{"lineNumber":545,"author":{"gitId":"-"},"content":" public StudentAttributes getStudent(String courseId, String studentEmail) {"},{"lineNumber":546,"author":{"gitId":"-"},"content":" StudentData studentData \u003d getStudentData(courseId, studentEmail);"},{"lineNumber":547,"author":{"gitId":"-"},"content":" if (studentData \u003d\u003d null) {"},{"lineNumber":548,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":549,"author":{"gitId":"-"},"content":" }"},{"lineNumber":550,"author":{"gitId":"-"},"content":" StudentAttributes.Builder builder \u003d StudentAttributes.builder(studentData.getCourseId(),"},{"lineNumber":551,"author":{"gitId":"-"},"content":" studentData.getEmail());"},{"lineNumber":552,"author":{"gitId":"-"},"content":" if (studentData.getGoogleId() !\u003d null) {"},{"lineNumber":553,"author":{"gitId":"-"},"content":" builder.withGoogleId(studentData.getGoogleId());"},{"lineNumber":554,"author":{"gitId":"-"},"content":" }"},{"lineNumber":555,"author":{"gitId":"-"},"content":" if (studentData.getName() !\u003d null) {"},{"lineNumber":556,"author":{"gitId":"-"},"content":" builder.withName(studentData.getName());"},{"lineNumber":557,"author":{"gitId":"-"},"content":" }"},{"lineNumber":558,"author":{"gitId":"-"},"content":" if (studentData.getSectionName() !\u003d null) {"},{"lineNumber":559,"author":{"gitId":"-"},"content":" builder.withSectionName(studentData.getSectionName());"},{"lineNumber":560,"author":{"gitId":"-"},"content":" }"},{"lineNumber":561,"author":{"gitId":"-"},"content":" if (studentData.getTeamName() !\u003d null) {"},{"lineNumber":562,"author":{"gitId":"-"},"content":" builder.withTeamName(studentData.getTeamName());"},{"lineNumber":563,"author":{"gitId":"-"},"content":" }"},{"lineNumber":564,"author":{"gitId":"-"},"content":" if (studentData.getComments() !\u003d null) {"},{"lineNumber":565,"author":{"gitId":"-"},"content":" builder.withComment(studentData.getComments());"},{"lineNumber":566,"author":{"gitId":"-"},"content":" }"},{"lineNumber":567,"author":{"gitId":"-"},"content":" StudentAttributes student \u003d builder.build();"},{"lineNumber":568,"author":{"gitId":"-"},"content":" if (studentData.getKey() !\u003d null) {"},{"lineNumber":569,"author":{"gitId":"-"},"content":" student.setKey(studentData.getKey());"},{"lineNumber":570,"author":{"gitId":"-"},"content":" }"},{"lineNumber":571,"author":{"gitId":"-"},"content":" return student;"},{"lineNumber":572,"author":{"gitId":"-"},"content":" }"},{"lineNumber":573,"author":{"gitId":"-"},"content":""},{"lineNumber":574,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":575,"author":{"gitId":"-"},"content":" * Get feedback session data from database."},{"lineNumber":576,"author":{"gitId":"-"},"content":" */"},{"lineNumber":577,"author":{"gitId":"-"},"content":" public FeedbackSessionData getFeedbackSessionData(String courseId, String feedbackSessionName) {"},{"lineNumber":578,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":579,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":580,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSessionName);"},{"lineNumber":581,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString());"},{"lineNumber":582,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.SESSION, params);"},{"lineNumber":583,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":584,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":585,"author":{"gitId":"-"},"content":" }"},{"lineNumber":586,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, FeedbackSessionData.class);"},{"lineNumber":587,"author":{"gitId":"-"},"content":" }"},{"lineNumber":588,"author":{"gitId":"-"},"content":""},{"lineNumber":589,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":590,"author":{"gitId":"-"},"content":" * Get feedback session from database."},{"lineNumber":591,"author":{"gitId":"-"},"content":" */"},{"lineNumber":592,"author":{"gitId":"-"},"content":" public FeedbackSessionAttributes getFeedbackSession(String courseId, String feedbackSessionName) {"},{"lineNumber":593,"author":{"gitId":"-"},"content":" FeedbackSessionData sessionData \u003d getFeedbackSessionData(courseId, feedbackSessionName);"},{"lineNumber":594,"author":{"gitId":"-"},"content":" if (sessionData \u003d\u003d null) {"},{"lineNumber":595,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":596,"author":{"gitId":"-"},"content":" }"},{"lineNumber":597,"author":{"gitId":"-"},"content":""},{"lineNumber":598,"author":{"gitId":"-"},"content":" Map\u003cString, Instant\u003e studentDeadlines \u003d"},{"lineNumber":599,"author":{"gitId":"-"},"content":" convertDeadlinesToInstant(sessionData.getStudentDeadlines(), sessionData.getTimeZone());"},{"lineNumber":600,"author":{"gitId":"-"},"content":" Map\u003cString, Instant\u003e instructorDeadlines \u003d"},{"lineNumber":601,"author":{"gitId":"-"},"content":" convertDeadlinesToInstant(sessionData.getInstructorDeadlines(), sessionData.getTimeZone());"},{"lineNumber":602,"author":{"gitId":"-"},"content":""},{"lineNumber":603,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes sessionAttributes \u003d FeedbackSessionAttributes"},{"lineNumber":604,"author":{"gitId":"-"},"content":" .builder(sessionData.getFeedbackSessionName(), sessionData.getCourseId())"},{"lineNumber":605,"author":{"gitId":"-"},"content":" .withInstructions(sessionData.getInstructions())"},{"lineNumber":606,"author":{"gitId":"-"},"content":" .withStartTime(Instant.ofEpochMilli(sessionData.getSubmissionStartTimestamp()))"},{"lineNumber":607,"author":{"gitId":"-"},"content":" .withEndTime(Instant.ofEpochMilli(sessionData.getSubmissionEndTimestamp()))"},{"lineNumber":608,"author":{"gitId":"-"},"content":" .withTimeZone(sessionData.getTimeZone())"},{"lineNumber":609,"author":{"gitId":"-"},"content":" .withGracePeriod(Duration.ofMinutes(sessionData.getGracePeriod()))"},{"lineNumber":610,"author":{"gitId":"-"},"content":" .withIsClosingEmailEnabled(sessionData.getIsClosingEmailEnabled())"},{"lineNumber":611,"author":{"gitId":"-"},"content":" .withIsPublishedEmailEnabled(sessionData.getIsPublishedEmailEnabled())"},{"lineNumber":612,"author":{"gitId":"-"},"content":" .withStudentDeadlines(studentDeadlines)"},{"lineNumber":613,"author":{"gitId":"-"},"content":" .withInstructorDeadlines(instructorDeadlines)"},{"lineNumber":614,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":615,"author":{"gitId":"-"},"content":""},{"lineNumber":616,"author":{"gitId":"-"},"content":" sessionAttributes.setCreatedTime(Instant.ofEpochMilli(sessionData.getCreatedAtTimestamp()));"},{"lineNumber":617,"author":{"gitId":"-"},"content":""},{"lineNumber":618,"author":{"gitId":"-"},"content":" if (sessionData.getSessionVisibleSetting().equals(SessionVisibleSetting.AT_OPEN)) {"},{"lineNumber":619,"author":{"gitId":"-"},"content":" sessionAttributes.setSessionVisibleFromTime(Const.TIME_REPRESENTS_FOLLOW_OPENING);"},{"lineNumber":620,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":621,"author":{"gitId":"-"},"content":" sessionAttributes.setSessionVisibleFromTime(Instant.ofEpochMilli("},{"lineNumber":622,"author":{"gitId":"-"},"content":" sessionData.getCustomSessionVisibleTimestamp()));"},{"lineNumber":623,"author":{"gitId":"-"},"content":" }"},{"lineNumber":624,"author":{"gitId":"-"},"content":""},{"lineNumber":625,"author":{"gitId":"-"},"content":" if (sessionData.getResponseVisibleSetting().equals(ResponseVisibleSetting.AT_VISIBLE)) {"},{"lineNumber":626,"author":{"gitId":"-"},"content":" sessionAttributes.setResultsVisibleFromTime(Const.TIME_REPRESENTS_FOLLOW_VISIBLE);"},{"lineNumber":627,"author":{"gitId":"-"},"content":" } else if (sessionData.getResponseVisibleSetting().equals(ResponseVisibleSetting.LATER)) {"},{"lineNumber":628,"author":{"gitId":"-"},"content":" sessionAttributes.setResultsVisibleFromTime(Const.TIME_REPRESENTS_LATER);"},{"lineNumber":629,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":630,"author":{"gitId":"-"},"content":" sessionAttributes.setResultsVisibleFromTime(Instant.ofEpochMilli("},{"lineNumber":631,"author":{"gitId":"-"},"content":" sessionData.getCustomResponseVisibleTimestamp()));"},{"lineNumber":632,"author":{"gitId":"-"},"content":" }"},{"lineNumber":633,"author":{"gitId":"-"},"content":""},{"lineNumber":634,"author":{"gitId":"-"},"content":" return sessionAttributes;"},{"lineNumber":635,"author":{"gitId":"-"},"content":" }"},{"lineNumber":636,"author":{"gitId":"-"},"content":""},{"lineNumber":637,"author":{"gitId":"-"},"content":" private Map\u003cString, Instant\u003e convertDeadlinesToInstant(Map\u003cString, Long\u003e deadlines, String timezone) {"},{"lineNumber":638,"author":{"gitId":"-"},"content":" return deadlines.entrySet()"},{"lineNumber":639,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":640,"author":{"gitId":"-"},"content":" .collect(Collectors.toMap(Map.Entry::getKey, entry -\u003e {"},{"lineNumber":641,"author":{"gitId":"-"},"content":" Instant deadline \u003d Instant.ofEpochMilli(entry.getValue());"},{"lineNumber":642,"author":{"gitId":"-"},"content":" return TimeHelper.getMidnightAdjustedInstantBasedOnZone(deadline, timezone, true);"},{"lineNumber":643,"author":{"gitId":"-"},"content":" }));"},{"lineNumber":644,"author":{"gitId":"-"},"content":" }"},{"lineNumber":645,"author":{"gitId":"-"},"content":""},{"lineNumber":646,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":647,"author":{"gitId":"-"},"content":" * Get soft deleted feedback session from database."},{"lineNumber":648,"author":{"gitId":"-"},"content":" */"},{"lineNumber":649,"author":{"gitId":"-"},"content":" public FeedbackSessionAttributes getSoftDeletedSession(String feedbackSessionName, String instructorId) {"},{"lineNumber":650,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":651,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.ENTITY_TYPE, Const.EntityType.INSTRUCTOR);"},{"lineNumber":652,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.IS_IN_RECYCLE_BIN, \"true\");"},{"lineNumber":653,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.USER_ID, instructorId);"},{"lineNumber":654,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.SESSIONS, params);"},{"lineNumber":655,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":656,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":657,"author":{"gitId":"-"},"content":" }"},{"lineNumber":658,"author":{"gitId":"-"},"content":""},{"lineNumber":659,"author":{"gitId":"-"},"content":" FeedbackSessionsData sessionsData \u003d JsonUtils.fromJson(response.responseBody, FeedbackSessionsData.class);"},{"lineNumber":660,"author":{"gitId":"-"},"content":" FeedbackSessionData feedbackSession \u003d sessionsData.getFeedbackSessions()"},{"lineNumber":661,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":662,"author":{"gitId":"-"},"content":" .filter(fs -\u003e fs.getFeedbackSessionName().equals(feedbackSessionName))"},{"lineNumber":663,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":664,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":665,"author":{"gitId":"-"},"content":""},{"lineNumber":666,"author":{"gitId":"-"},"content":" if (feedbackSession \u003d\u003d null) {"},{"lineNumber":667,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":668,"author":{"gitId":"-"},"content":" }"},{"lineNumber":669,"author":{"gitId":"-"},"content":""},{"lineNumber":670,"author":{"gitId":"-"},"content":" return FeedbackSessionAttributes"},{"lineNumber":671,"author":{"gitId":"-"},"content":" .builder(feedbackSession.getCourseId(), feedbackSession.getFeedbackSessionName())"},{"lineNumber":672,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":673,"author":{"gitId":"-"},"content":" }"},{"lineNumber":674,"author":{"gitId":"-"},"content":""},{"lineNumber":675,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":676,"author":{"gitId":"-"},"content":" * Get feedback question data from database."},{"lineNumber":677,"author":{"gitId":"-"},"content":" */"},{"lineNumber":678,"author":{"gitId":"-"},"content":" public FeedbackQuestionData getFeedbackQuestionData(String courseId, String feedbackSessionName,"},{"lineNumber":679,"author":{"gitId":"-"},"content":" int qnNumber) {"},{"lineNumber":680,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":681,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":682,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSessionName);"},{"lineNumber":683,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.FULL_DETAIL.toString());"},{"lineNumber":684,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.QUESTIONS, params);"},{"lineNumber":685,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":686,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":687,"author":{"gitId":"-"},"content":" }"},{"lineNumber":688,"author":{"gitId":"-"},"content":""},{"lineNumber":689,"author":{"gitId":"-"},"content":" FeedbackQuestionsData questionsData \u003d JsonUtils.fromJson(response.responseBody, FeedbackQuestionsData.class);"},{"lineNumber":690,"author":{"gitId":"-"},"content":" return questionsData.getQuestions()"},{"lineNumber":691,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":692,"author":{"gitId":"-"},"content":" .filter(fq -\u003e fq.getQuestionNumber() \u003d\u003d qnNumber)"},{"lineNumber":693,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":694,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":695,"author":{"gitId":"-"},"content":" }"},{"lineNumber":696,"author":{"gitId":"-"},"content":""},{"lineNumber":697,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":698,"author":{"gitId":"-"},"content":" * Get feedback question from database."},{"lineNumber":699,"author":{"gitId":"-"},"content":" */"},{"lineNumber":700,"author":{"gitId":"-"},"content":" public FeedbackQuestionAttributes getFeedbackQuestion(String courseId, String feedbackSessionName,"},{"lineNumber":701,"author":{"gitId":"-"},"content":" int qnNumber) {"},{"lineNumber":702,"author":{"gitId":"-"},"content":" FeedbackQuestionData question \u003d getFeedbackQuestionData(courseId, feedbackSessionName, qnNumber);"},{"lineNumber":703,"author":{"gitId":"-"},"content":""},{"lineNumber":704,"author":{"gitId":"-"},"content":" if (question \u003d\u003d null) {"},{"lineNumber":705,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":706,"author":{"gitId":"-"},"content":" }"},{"lineNumber":707,"author":{"gitId":"-"},"content":""},{"lineNumber":708,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes questionAttr \u003d FeedbackQuestionAttributes.builder()"},{"lineNumber":709,"author":{"gitId":"-"},"content":" .withCourseId(courseId)"},{"lineNumber":710,"author":{"gitId":"-"},"content":" .withFeedbackSessionName(feedbackSessionName)"},{"lineNumber":711,"author":{"gitId":"-"},"content":" .withQuestionDetails(question.getQuestionDetails())"},{"lineNumber":712,"author":{"gitId":"-"},"content":" .withQuestionDescription(question.getQuestionDescription())"},{"lineNumber":713,"author":{"gitId":"-"},"content":" .withQuestionNumber(question.getQuestionNumber())"},{"lineNumber":714,"author":{"gitId":"-"},"content":" .withGiverType(question.getGiverType())"},{"lineNumber":715,"author":{"gitId":"-"},"content":" .withRecipientType(question.getRecipientType())"},{"lineNumber":716,"author":{"gitId":"-"},"content":" .withNumberOfEntitiesToGiveFeedbackTo(question.getNumberOfEntitiesToGiveFeedbackToSetting()"},{"lineNumber":717,"author":{"gitId":"-"},"content":" .equals(NumberOfEntitiesToGiveFeedbackToSetting.UNLIMITED)"},{"lineNumber":718,"author":{"gitId":"-"},"content":" ? Const.MAX_POSSIBLE_RECIPIENTS"},{"lineNumber":719,"author":{"gitId":"-"},"content":" : question.getCustomNumberOfEntitiesToGiveFeedbackTo())"},{"lineNumber":720,"author":{"gitId":"-"},"content":" .withShowResponsesTo(convertToFeedbackParticipantType(question.getShowResponsesTo()))"},{"lineNumber":721,"author":{"gitId":"-"},"content":" .withShowGiverNameTo(convertToFeedbackParticipantType(question.getShowGiverNameTo()))"},{"lineNumber":722,"author":{"gitId":"-"},"content":" .withShowRecipientNameTo(convertToFeedbackParticipantType(question.getShowRecipientNameTo()))"},{"lineNumber":723,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":724,"author":{"gitId":"-"},"content":" if (question.getFeedbackQuestionId() !\u003d null) {"},{"lineNumber":725,"author":{"gitId":"-"},"content":" questionAttr.setId(question.getFeedbackQuestionId());"},{"lineNumber":726,"author":{"gitId":"-"},"content":" }"},{"lineNumber":727,"author":{"gitId":"-"},"content":" return questionAttr;"},{"lineNumber":728,"author":{"gitId":"-"},"content":" }"},{"lineNumber":729,"author":{"gitId":"-"},"content":""},{"lineNumber":730,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":731,"author":{"gitId":"-"},"content":" * Converts List of FeedbackParticipantType to sorted List of FeedbackVisibilityType."},{"lineNumber":732,"author":{"gitId":"-"},"content":" */"},{"lineNumber":733,"author":{"gitId":"-"},"content":" private static List\u003cFeedbackParticipantType\u003e convertToFeedbackParticipantType("},{"lineNumber":734,"author":{"gitId":"-"},"content":" List\u003cFeedbackVisibilityType\u003e feedbackVisibilityTypeList) {"},{"lineNumber":735,"author":{"gitId":"-"},"content":" List\u003cFeedbackParticipantType\u003e feedbackParticipantTypeList \u003d feedbackVisibilityTypeList.stream()"},{"lineNumber":736,"author":{"gitId":"-"},"content":" .map(feedbackParticipantType -\u003e {"},{"lineNumber":737,"author":{"gitId":"-"},"content":" switch (feedbackParticipantType) {"},{"lineNumber":738,"author":{"gitId":"-"},"content":" case STUDENTS:"},{"lineNumber":739,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.STUDENTS;"},{"lineNumber":740,"author":{"gitId":"-"},"content":" case INSTRUCTORS:"},{"lineNumber":741,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.INSTRUCTORS;"},{"lineNumber":742,"author":{"gitId":"-"},"content":" case RECIPIENT:"},{"lineNumber":743,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.RECEIVER;"},{"lineNumber":744,"author":{"gitId":"-"},"content":" case GIVER_TEAM_MEMBERS:"},{"lineNumber":745,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.OWN_TEAM_MEMBERS;"},{"lineNumber":746,"author":{"gitId":"-"},"content":" case RECIPIENT_TEAM_MEMBERS:"},{"lineNumber":747,"author":{"gitId":"-"},"content":" return FeedbackParticipantType.RECEIVER_TEAM_MEMBERS;"},{"lineNumber":748,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":749,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown FeedbackVisibilityType \" + feedbackParticipantType);"},{"lineNumber":750,"author":{"gitId":"-"},"content":" }"},{"lineNumber":751,"author":{"gitId":"-"},"content":" }).collect(Collectors.toList());"},{"lineNumber":752,"author":{"gitId":"-"},"content":" Collections.sort(feedbackParticipantTypeList);"},{"lineNumber":753,"author":{"gitId":"-"},"content":" return feedbackParticipantTypeList;"},{"lineNumber":754,"author":{"gitId":"-"},"content":" }"},{"lineNumber":755,"author":{"gitId":"-"},"content":""},{"lineNumber":756,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":757,"author":{"gitId":"-"},"content":" * Get feedback response data from database."},{"lineNumber":758,"author":{"gitId":"-"},"content":" */"},{"lineNumber":759,"author":{"gitId":"-"},"content":" public FeedbackResponseData getFeedbackResponseData(String feedbackQuestionId, String giver,"},{"lineNumber":760,"author":{"gitId":"-"},"content":" String recipient) {"},{"lineNumber":761,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":762,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_QUESTION_ID, feedbackQuestionId);"},{"lineNumber":763,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.STUDENT_SUBMISSION.toString());"},{"lineNumber":764,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_SESSION_MODERATED_PERSON, giver);"},{"lineNumber":765,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.RESPONSES, params);"},{"lineNumber":766,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":767,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":768,"author":{"gitId":"-"},"content":" }"},{"lineNumber":769,"author":{"gitId":"-"},"content":""},{"lineNumber":770,"author":{"gitId":"-"},"content":" FeedbackResponsesData responsesData \u003d JsonUtils.fromJson(response.responseBody, FeedbackResponsesData.class);"},{"lineNumber":771,"author":{"gitId":"-"},"content":" return responsesData.getResponses()"},{"lineNumber":772,"author":{"gitId":"-"},"content":" .stream()"},{"lineNumber":773,"author":{"gitId":"-"},"content":" .filter(r -\u003e r.getGiverIdentifier().equals(giver) \u0026\u0026 r.getRecipientIdentifier().equals(recipient))"},{"lineNumber":774,"author":{"gitId":"-"},"content":" .findFirst()"},{"lineNumber":775,"author":{"gitId":"-"},"content":" .orElse(null);"},{"lineNumber":776,"author":{"gitId":"-"},"content":" }"},{"lineNumber":777,"author":{"gitId":"-"},"content":""},{"lineNumber":778,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":779,"author":{"gitId":"-"},"content":" * Get feedback response from database."},{"lineNumber":780,"author":{"gitId":"-"},"content":" */"},{"lineNumber":781,"author":{"gitId":"-"},"content":" public FeedbackResponseAttributes getFeedbackResponse(String feedbackQuestionId, String giver,"},{"lineNumber":782,"author":{"gitId":"-"},"content":" String recipient) {"},{"lineNumber":783,"author":{"gitId":"-"},"content":" FeedbackResponseData fr \u003d getFeedbackResponseData(feedbackQuestionId, giver, recipient);"},{"lineNumber":784,"author":{"gitId":"-"},"content":""},{"lineNumber":785,"author":{"gitId":"-"},"content":" if (fr \u003d\u003d null) {"},{"lineNumber":786,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":787,"author":{"gitId":"-"},"content":" }"},{"lineNumber":788,"author":{"gitId":"-"},"content":""},{"lineNumber":789,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes responseAttr \u003d FeedbackResponseAttributes"},{"lineNumber":790,"author":{"gitId":"-"},"content":" .builder(feedbackQuestionId, fr.getGiverIdentifier(), fr.getRecipientIdentifier())"},{"lineNumber":791,"author":{"gitId":"-"},"content":" .withResponseDetails(fr.getResponseDetails())"},{"lineNumber":792,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":793,"author":{"gitId":"-"},"content":" if (fr.getFeedbackResponseId() !\u003d null) {"},{"lineNumber":794,"author":{"gitId":"-"},"content":" responseAttr.setId(fr.getFeedbackResponseId());"},{"lineNumber":795,"author":{"gitId":"-"},"content":" }"},{"lineNumber":796,"author":{"gitId":"-"},"content":" return responseAttr;"},{"lineNumber":797,"author":{"gitId":"-"},"content":" }"},{"lineNumber":798,"author":{"gitId":"-"},"content":""},{"lineNumber":799,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":800,"author":{"gitId":"-"},"content":" * Get feedback response comment from database."},{"lineNumber":801,"author":{"gitId":"-"},"content":" */"},{"lineNumber":802,"author":{"gitId":"-"},"content":" public FeedbackResponseCommentAttributes getFeedbackResponseComment(String feedbackResponseId) {"},{"lineNumber":803,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":804,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_RESPONSE_ID, feedbackResponseId);"},{"lineNumber":805,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INTENT, Intent.STUDENT_SUBMISSION.toString());"},{"lineNumber":806,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.RESPONSE_COMMENT, params);"},{"lineNumber":807,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":808,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":809,"author":{"gitId":"-"},"content":" }"},{"lineNumber":810,"author":{"gitId":"-"},"content":""},{"lineNumber":811,"author":{"gitId":"-"},"content":" FeedbackResponseCommentData frc \u003d JsonUtils.fromJson(response.responseBody, FeedbackResponseCommentData.class);"},{"lineNumber":812,"author":{"gitId":"-"},"content":""},{"lineNumber":813,"author":{"gitId":"-"},"content":" if (frc \u003d\u003d null) {"},{"lineNumber":814,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":815,"author":{"gitId":"-"},"content":" }"},{"lineNumber":816,"author":{"gitId":"-"},"content":""},{"lineNumber":817,"author":{"gitId":"-"},"content":" return FeedbackResponseCommentAttributes.builder()"},{"lineNumber":818,"author":{"gitId":"-"},"content":" .withCommentGiver(frc.getCommentGiver())"},{"lineNumber":819,"author":{"gitId":"-"},"content":" .withCommentText(frc.getCommentText())"},{"lineNumber":820,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":821,"author":{"gitId":"-"},"content":" }"},{"lineNumber":822,"author":{"gitId":"-"},"content":""},{"lineNumber":823,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":824,"author":{"gitId":"-"},"content":" * Deletes a course from the database."},{"lineNumber":825,"author":{"gitId":"-"},"content":" */"},{"lineNumber":826,"author":{"gitId":"-"},"content":" public void deleteCourse(String courseId) {"},{"lineNumber":827,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":828,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":829,"author":{"gitId":"-"},"content":" executeDeleteRequest(Const.ResourceURIs.COURSE, params);"},{"lineNumber":830,"author":{"gitId":"-"},"content":" }"},{"lineNumber":831,"author":{"gitId":"-"},"content":""},{"lineNumber":832,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":833,"author":{"gitId":"-"},"content":" * Gets an account request from the database."},{"lineNumber":834,"author":{"gitId":"-"},"content":" */"},{"lineNumber":835,"author":{"gitId":"-"},"content":" public AccountRequestAttributes getAccountRequest(String email, String institute) {"},{"lineNumber":836,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":837,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_EMAIL, email);"},{"lineNumber":838,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_INSTITUTION, institute);"},{"lineNumber":839,"author":{"gitId":"-"},"content":""},{"lineNumber":840,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.ACCOUNT_REQUEST, params);"},{"lineNumber":841,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":842,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":843,"author":{"gitId":"-"},"content":" }"},{"lineNumber":844,"author":{"gitId":"-"},"content":""},{"lineNumber":845,"author":{"gitId":"-"},"content":" AccountRequestData accountRequestData \u003d JsonUtils.fromJson(response.responseBody, AccountRequestData.class);"},{"lineNumber":846,"author":{"gitId":"-"},"content":""},{"lineNumber":847,"author":{"gitId":"-"},"content":" return AccountRequestAttributes"},{"lineNumber":848,"author":{"gitId":"-"},"content":" .builder(accountRequestData.getEmail(), accountRequestData.getInstitute(), accountRequestData.getName())"},{"lineNumber":849,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":850,"author":{"gitId":"-"},"content":" }"},{"lineNumber":851,"author":{"gitId":"-"},"content":""},{"lineNumber":852,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":853,"author":{"gitId":"-"},"content":" * Gets registration key of an account request from the database."},{"lineNumber":854,"author":{"gitId":"-"},"content":" */"},{"lineNumber":855,"author":{"gitId":"-"},"content":" public String getRegKeyForAccountRequest(String email, String institute) {"},{"lineNumber":856,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":857,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_EMAIL, email);"},{"lineNumber":858,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_INSTITUTION, institute);"},{"lineNumber":859,"author":{"gitId":"-"},"content":""},{"lineNumber":860,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.ACCOUNT_REQUEST, params);"},{"lineNumber":861,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":862,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":863,"author":{"gitId":"-"},"content":" }"},{"lineNumber":864,"author":{"gitId":"-"},"content":""},{"lineNumber":865,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, AccountRequestData.class).getRegistrationKey();"},{"lineNumber":866,"author":{"gitId":"-"},"content":" }"},{"lineNumber":867,"author":{"gitId":"-"},"content":""},{"lineNumber":868,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":869,"author":{"gitId":"-"},"content":" * Deletes an account request from the database."},{"lineNumber":870,"author":{"gitId":"-"},"content":" */"},{"lineNumber":871,"author":{"gitId":"-"},"content":" public void deleteAccountRequest(String email, String institute) {"},{"lineNumber":872,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":873,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_EMAIL, email);"},{"lineNumber":874,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.INSTRUCTOR_INSTITUTION, institute);"},{"lineNumber":875,"author":{"gitId":"-"},"content":" executeDeleteRequest(Const.ResourceURIs.ACCOUNT_REQUEST, params);"},{"lineNumber":876,"author":{"gitId":"-"},"content":" }"},{"lineNumber":877,"author":{"gitId":"-"},"content":""},{"lineNumber":878,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":879,"author":{"gitId":"-"},"content":" * Gets notification data from the database."},{"lineNumber":880,"author":{"gitId":"-"},"content":" */"},{"lineNumber":881,"author":{"gitId":"-"},"content":" public NotificationData getNotificationData(String notificationId) {"},{"lineNumber":882,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":883,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.NOTIFICATION_ID, notificationId);"},{"lineNumber":884,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.NOTIFICATION, params);"},{"lineNumber":885,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":886,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":887,"author":{"gitId":"-"},"content":" }"},{"lineNumber":888,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(response.responseBody, NotificationData.class);"},{"lineNumber":889,"author":{"gitId":"-"},"content":" }"},{"lineNumber":890,"author":{"gitId":"-"},"content":""},{"lineNumber":891,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":892,"author":{"gitId":"-"},"content":" * Gets a notification from the database."},{"lineNumber":893,"author":{"gitId":"-"},"content":" */"},{"lineNumber":894,"author":{"gitId":"-"},"content":" public NotificationAttributes getNotification(String notificationId) {"},{"lineNumber":895,"author":{"gitId":"-"},"content":" NotificationData notificationData \u003d getNotificationData(notificationId);"},{"lineNumber":896,"author":{"gitId":"-"},"content":" if (notificationData \u003d\u003d null) {"},{"lineNumber":897,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":898,"author":{"gitId":"-"},"content":" }"},{"lineNumber":899,"author":{"gitId":"-"},"content":" NotificationAttributes notification \u003d NotificationAttributes.builder(notificationData.getNotificationId())"},{"lineNumber":900,"author":{"gitId":"-"},"content":" .withStartTime(Instant.ofEpochMilli(notificationData.getStartTimestamp()))"},{"lineNumber":901,"author":{"gitId":"-"},"content":" .withEndTime(Instant.ofEpochMilli(notificationData.getEndTimestamp()))"},{"lineNumber":902,"author":{"gitId":"-"},"content":" .withStyle(notificationData.getStyle())"},{"lineNumber":903,"author":{"gitId":"-"},"content":" .withTargetUser(notificationData.getTargetUser())"},{"lineNumber":904,"author":{"gitId":"-"},"content":" .withTitle(notificationData.getTitle())"},{"lineNumber":905,"author":{"gitId":"-"},"content":" .withMessage(notificationData.getMessage())"},{"lineNumber":906,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":907,"author":{"gitId":"-"},"content":" notification.setCreatedAt(Instant.ofEpochMilli(notificationData.getCreatedAt()));"},{"lineNumber":908,"author":{"gitId":"-"},"content":" return notification;"},{"lineNumber":909,"author":{"gitId":"-"},"content":" }"},{"lineNumber":910,"author":{"gitId":"-"},"content":""},{"lineNumber":911,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":912,"author":{"gitId":"-"},"content":" * Deletes a notification from the database."},{"lineNumber":913,"author":{"gitId":"-"},"content":" */"},{"lineNumber":914,"author":{"gitId":"-"},"content":" public void deleteNotification(String notificationId) {"},{"lineNumber":915,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":916,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.NOTIFICATION_ID, notificationId);"},{"lineNumber":917,"author":{"gitId":"-"},"content":" executeDeleteRequest(Const.ResourceURIs.NOTIFICATION, params);"},{"lineNumber":918,"author":{"gitId":"-"},"content":" }"},{"lineNumber":919,"author":{"gitId":"-"},"content":""},{"lineNumber":920,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":921,"author":{"gitId":"-"},"content":" * Deletes a notification from the database."},{"lineNumber":922,"author":{"gitId":"-"},"content":" */"},{"lineNumber":923,"author":{"gitId":"-"},"content":" public void deleteNotification(UUID notificationId) {"},{"lineNumber":924,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":925,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.NOTIFICATION_ID, notificationId.toString());"},{"lineNumber":926,"author":{"gitId":"-"},"content":" executeDeleteRequest(Const.ResourceURIs.NOTIFICATION, params);"},{"lineNumber":927,"author":{"gitId":"-"},"content":" }"},{"lineNumber":928,"author":{"gitId":"-"},"content":""},{"lineNumber":929,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":930,"author":{"gitId":"-"},"content":" * Gets a deadline extension from the database."},{"lineNumber":931,"author":{"gitId":"-"},"content":" */"},{"lineNumber":932,"author":{"gitId":"-"},"content":" public DeadlineExtensionAttributes getDeadlineExtension("},{"lineNumber":933,"author":{"gitId":"-"},"content":" String courseId, String feedbackSessionName, String userEmail, boolean isInstructor) {"},{"lineNumber":934,"author":{"gitId":"-"},"content":" Map\u003cString, String\u003e params \u003d new HashMap\u003c\u003e();"},{"lineNumber":935,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.COURSE_ID, courseId);"},{"lineNumber":936,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.FEEDBACK_SESSION_NAME, feedbackSessionName);"},{"lineNumber":937,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.USER_EMAIL, userEmail);"},{"lineNumber":938,"author":{"gitId":"-"},"content":" params.put(Const.ParamsNames.IS_INSTRUCTOR, Boolean.toString(isInstructor));"},{"lineNumber":939,"author":{"gitId":"-"},"content":""},{"lineNumber":940,"author":{"gitId":"-"},"content":" ResponseBodyAndCode response \u003d executeGetRequest(Const.ResourceURIs.DEADLINE_EXTENSION, params);"},{"lineNumber":941,"author":{"gitId":"-"},"content":" if (response.responseCode \u003d\u003d HttpStatus.SC_NOT_FOUND) {"},{"lineNumber":942,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":943,"author":{"gitId":"-"},"content":" }"},{"lineNumber":944,"author":{"gitId":"-"},"content":""},{"lineNumber":945,"author":{"gitId":"-"},"content":" DeadlineExtensionData deadlineExtensionData \u003d JsonUtils.fromJson(response.responseBody, DeadlineExtensionData.class);"},{"lineNumber":946,"author":{"gitId":"-"},"content":""},{"lineNumber":947,"author":{"gitId":"-"},"content":" return DeadlineExtensionAttributes.builder("},{"lineNumber":948,"author":{"gitId":"-"},"content":" deadlineExtensionData.getCourseId(), deadlineExtensionData.getFeedbackSessionName(),"},{"lineNumber":949,"author":{"gitId":"-"},"content":" deadlineExtensionData.getUserEmail(), deadlineExtensionData.getIsInstructor())"},{"lineNumber":950,"author":{"gitId":"-"},"content":" .withEndTime(Instant.ofEpochMilli(deadlineExtensionData.getEndTime()))"},{"lineNumber":951,"author":{"gitId":"-"},"content":" .withSentClosingEmail(deadlineExtensionData.getSentClosingEmail())"},{"lineNumber":952,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":953,"author":{"gitId":"-"},"content":" }"},{"lineNumber":954,"author":{"gitId":"-"},"content":""},{"lineNumber":955,"author":{"gitId":"-"},"content":" private static final class ResponseBodyAndCode {"},{"lineNumber":956,"author":{"gitId":"-"},"content":""},{"lineNumber":957,"author":{"gitId":"-"},"content":" String responseBody;"},{"lineNumber":958,"author":{"gitId":"-"},"content":" int responseCode;"},{"lineNumber":959,"author":{"gitId":"-"},"content":""},{"lineNumber":960,"author":{"gitId":"-"},"content":" ResponseBodyAndCode(String responseBody, int responseCode) {"},{"lineNumber":961,"author":{"gitId":"-"},"content":" this.responseBody \u003d responseBody;"},{"lineNumber":962,"author":{"gitId":"-"},"content":" this.responseCode \u003d responseCode;"},{"lineNumber":963,"author":{"gitId":"-"},"content":" }"},{"lineNumber":964,"author":{"gitId":"-"},"content":""},{"lineNumber":965,"author":{"gitId":"-"},"content":" }"},{"lineNumber":966,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":11,"-":955}},{"path":"src/test/java/teammates/test/BaseTestCase.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.io.IOException;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.lang.reflect.Method;"},{"lineNumber":5,"author":{"gitId":"dishenggg"},"content":"import java.time.Duration;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.time.Instant;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.ArrayList;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.HashMap;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Map;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.UUID;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.junit.Assert;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.FeedbackParticipantType;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPermissionRole;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.InstructorPrivileges;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationStyle;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.NotificationTargetUser;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":23,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackTextQuestionDetails;"},{"lineNumber":25,"author":{"gitId":"xenosf"},"content":"import teammates.common.datatransfer.questions.FeedbackTextResponseDetails;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.util.Const;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.util.FieldValidator;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.TimeHelperExtension;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.sqllogic.core.DataBundleLogic;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":32,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.AccountRequest;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":35,"author":{"gitId":"xenosf"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":36,"author":{"gitId":"mingyuanc"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Section;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Team;"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * Base class for all test cases."},{"lineNumber":46,"author":{"gitId":"-"},"content":" */"},{"lineNumber":47,"author":{"gitId":"-"},"content":"public class BaseTestCase {"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * Test Segment divider. Used to divide a test case into logical sections."},{"lineNumber":51,"author":{"gitId":"-"},"content":" * The weird name is for easy spotting."},{"lineNumber":52,"author":{"gitId":"-"},"content":" *"},{"lineNumber":53,"author":{"gitId":"-"},"content":" * @param description"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * of the logical section. This will be printed."},{"lineNumber":55,"author":{"gitId":"-"},"content":" */"},{"lineNumber":56,"author":{"gitId":"-"},"content":" // CHECKSTYLE.OFF:AbbreviationAsWordInName|MethodName the weird name is for easy spotting."},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static void ______TS(String description) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" print(\" * \" + description);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" // CHECKSTYLE.ON:AbbreviationAsWordInName|MethodName"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public void printTestClassHeader() {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" print(\"[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\""},{"lineNumber":65,"author":{"gitId":"-"},"content":" + getClass().getCanonicalName()"},{"lineNumber":66,"author":{"gitId":"-"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d]\");"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public void printTestClassFooter() {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" print(getClass().getCanonicalName() + \" completed\");"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" protected static void print(String message) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" System.out.println(message);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" protected String getTestDataFolder() {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return TestProperties.TEST_DATA_FOLDER;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":83,"author":{"gitId":"-"},"content":" * Creates a DataBundle as specified in typicalDataBundle.json."},{"lineNumber":84,"author":{"gitId":"-"},"content":" */"},{"lineNumber":85,"author":{"gitId":"-"},"content":" protected DataBundle getTypicalDataBundle() {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" return loadDataBundle(\"/typicalDataBundle.json\");"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" protected DataBundle loadDataBundle(String jsonFileName) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" String pathToJsonFile \u003d getTestDataFolder() + jsonFileName;"},{"lineNumber":92,"author":{"gitId":"-"},"content":" String jsonString \u003d FileHelper.readFile(pathToJsonFile);"},{"lineNumber":93,"author":{"gitId":"-"},"content":" return JsonUtils.fromJson(jsonString, DataBundle.class);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" protected SqlDataBundle getTypicalSqlDataBundle() {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" return loadSqlDataBundle(\"/typicalDataBundle.json\");"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" protected SqlDataBundle loadSqlDataBundle(String jsonFileName) {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" // TODO: rename to loadDataBundle after migration"},{"lineNumber":106,"author":{"gitId":"-"},"content":" String pathToJsonFile \u003d getTestDataFolder() + jsonFileName;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" String jsonString \u003d FileHelper.readFile(pathToJsonFile);"},{"lineNumber":108,"author":{"gitId":"-"},"content":" return DataBundleLogic.deserializeDataBundle(jsonString);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" } catch (IOException e) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" throw new RuntimeException(e);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":115,"author":{"gitId":"-"},"content":" * These getTypicalX functions are used to generate typical entities for tests."},{"lineNumber":116,"author":{"gitId":"-"},"content":" * The entity fields can be changed using setter methods if needed."},{"lineNumber":117,"author":{"gitId":"-"},"content":" * New entity generator functions for tests should be added here, and follow the"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * same naming convention."},{"lineNumber":119,"author":{"gitId":"-"},"content":" *"},{"lineNumber":120,"author":{"gitId":"-"},"content":" * \u003cp\u003eExample usage:"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * Account account \u003d getTypicalAccount();"},{"lineNumber":122,"author":{"gitId":"-"},"content":" * Student student \u003d getTypicalStudent();"},{"lineNumber":123,"author":{"gitId":"-"},"content":" * account.setEmail(\"newemail@teammates.com\");"},{"lineNumber":124,"author":{"gitId":"-"},"content":" * student.setName(\"New Student Name\");"},{"lineNumber":125,"author":{"gitId":"-"},"content":" */"},{"lineNumber":126,"author":{"gitId":"-"},"content":" protected Account getTypicalAccount() {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" return new Account(\"google-id\", \"name\", \"email@teammates.com\");"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" protected Notification getTypicalNotificationWithId() {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" Notification notification \u003d new Notification(Instant.parse(\"2011-01-01T00:00:00Z\"),"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Instant.parse(\"2099-01-01T00:00:00Z\"), NotificationStyle.DANGER, NotificationTargetUser.GENERAL,"},{"lineNumber":133,"author":{"gitId":"-"},"content":" \"A deprecation note\", \"\u003cp\u003eDeprecation happens in three minutes\u003c/p\u003e\");"},{"lineNumber":134,"author":{"gitId":"-"},"content":" notification.setId(UUID.randomUUID());"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return notification;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":" protected Instructor getTypicalInstructor() {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":140,"author":{"gitId":"-"},"content":" InstructorPrivileges instructorPrivileges \u003d"},{"lineNumber":141,"author":{"gitId":"-"},"content":" new InstructorPrivileges(Const.InstructorPermissionRoleNames.INSTRUCTOR_PERMISSION_ROLE_COOWNER);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" InstructorPermissionRole role \u003d InstructorPermissionRole"},{"lineNumber":143,"author":{"gitId":"-"},"content":" .getEnum(Const.InstructorPermissionRoleNames.INSTRUCTOR_PERMISSION_ROLE_COOWNER);"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" return new Instructor(course, \"instructor-name\", \"valid@teammates.tmt\","},{"lineNumber":146,"author":{"gitId":"-"},"content":" false, Const.DEFAULT_DISPLAY_NAME_FOR_INSTRUCTOR, role, instructorPrivileges);"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" protected Course getTypicalCourse() {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return new Course(\"course-id\", \"course-name\", Const.DEFAULT_TIME_ZONE, \"teammates\");"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" protected Student getTypicalStudent() {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":155,"author":{"gitId":"-"},"content":" return new Student(course, \"student-name\", \"validstudent@teammates.tmt\", \"comments\");"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" protected Section getTypicalSection() {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" Course course \u003d getTypicalCourse();"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return new Section(course, \"test-section\");"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":" protected Team getTypicalTeam() {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" Section section \u003d getTypicalSection();"},{"lineNumber":165,"author":{"gitId":"-"},"content":" return new Team(section, \"test-team\");"},{"lineNumber":166,"author":{"gitId":"-"},"content":" }"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":" protected FeedbackSession getTypicalFeedbackSessionForCourse(Course course) {"},{"lineNumber":169,"author":{"gitId":"dishenggg"},"content":" Instant startTime \u003d TimeHelperExtension.getInstantDaysOffsetFromNow(1);"},{"lineNumber":170,"author":{"gitId":"dishenggg"},"content":" Instant endTime \u003d TimeHelperExtension.getInstantDaysOffsetFromNow(7);"},{"lineNumber":171,"author":{"gitId":"dishenggg"},"content":" return new FeedbackSession(\"test-feedbacksession\","},{"lineNumber":172,"author":{"gitId":"dishenggg"},"content":" course,"},{"lineNumber":173,"author":{"gitId":"dishenggg"},"content":" \"test@teammates.tmt\","},{"lineNumber":174,"author":{"gitId":"dishenggg"},"content":" \"test-instructions\","},{"lineNumber":175,"author":{"gitId":"dishenggg"},"content":" startTime,"},{"lineNumber":176,"author":{"gitId":"dishenggg"},"content":" endTime,"},{"lineNumber":177,"author":{"gitId":"dishenggg"},"content":" startTime,"},{"lineNumber":178,"author":{"gitId":"dishenggg"},"content":" endTime,"},{"lineNumber":179,"author":{"gitId":"dishenggg"},"content":" Duration.ofMinutes(5),"},{"lineNumber":180,"author":{"gitId":"dishenggg"},"content":" false,"},{"lineNumber":181,"author":{"gitId":"dishenggg"},"content":" false,"},{"lineNumber":182,"author":{"gitId":"dishenggg"},"content":" false);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" protected FeedbackQuestion getTypicalFeedbackQuestionForSession(FeedbackSession session) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return FeedbackQuestion.makeQuestion(session, 1, \"test-description\","},{"lineNumber":187,"author":{"gitId":"-"},"content":" FeedbackParticipantType.SELF, FeedbackParticipantType.SELF, 1, new ArrayList\u003cFeedbackParticipantType\u003e(),"},{"lineNumber":188,"author":{"gitId":"-"},"content":" new ArrayList\u003cFeedbackParticipantType\u003e(), new ArrayList\u003cFeedbackParticipantType\u003e(),"},{"lineNumber":189,"author":{"gitId":"-"},"content":" new FeedbackTextQuestionDetails(\"test question text\"));"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"xenosf"},"content":" protected FeedbackResponse getTypicalFeedbackResponseForQuestion(FeedbackQuestion question) {"},{"lineNumber":193,"author":{"gitId":"xenosf"},"content":" return FeedbackResponse.makeResponse(question, \"test-giver\", getTypicalSection(), \"test-recipient\","},{"lineNumber":194,"author":{"gitId":"xenosf"},"content":" getTypicalSection(), getTypicalFeedbackResponseDetails());"},{"lineNumber":195,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":196,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":197,"author":{"gitId":"xenosf"},"content":" protected FeedbackResponseDetails getTypicalFeedbackResponseDetails() {"},{"lineNumber":198,"author":{"gitId":"xenosf"},"content":" return new FeedbackTextResponseDetails();"},{"lineNumber":199,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":200,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":201,"author":{"gitId":"mingyuanc"},"content":" protected FeedbackResponseComment getTypicalResponseComment(Long id) {"},{"lineNumber":202,"author":{"gitId":"mingyuanc"},"content":" FeedbackResponseComment comment \u003d new FeedbackResponseComment(null, \"\","},{"lineNumber":203,"author":{"gitId":"mingyuanc"},"content":" FeedbackParticipantType.STUDENTS, null, null, \"\","},{"lineNumber":204,"author":{"gitId":"mingyuanc"},"content":" false, false,"},{"lineNumber":205,"author":{"gitId":"mingyuanc"},"content":" null, null, null);"},{"lineNumber":206,"author":{"gitId":"mingyuanc"},"content":" comment.setId(id);"},{"lineNumber":207,"author":{"gitId":"mingyuanc"},"content":" return comment;"},{"lineNumber":208,"author":{"gitId":"mingyuanc"},"content":" }"},{"lineNumber":209,"author":{"gitId":"mingyuanc"},"content":""},{"lineNumber":210,"author":{"gitId":"xenosf"},"content":" protected AccountRequest getTypicalAccountRequest() {"},{"lineNumber":211,"author":{"gitId":"xenosf"},"content":" return new AccountRequest(\"valid@test.com\", \"Test account Name\", \"TEAMMATES Test Institute 1\");"},{"lineNumber":212,"author":{"gitId":"xenosf"},"content":" }"},{"lineNumber":213,"author":{"gitId":"xenosf"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":215,"author":{"gitId":"-"},"content":" * Populates the feedback question and response IDs within the data bundle."},{"lineNumber":216,"author":{"gitId":"-"},"content":" *"},{"lineNumber":217,"author":{"gitId":"-"},"content":" * \u003cp\u003eFor tests where simulated database is used, the backend will assign the question and response IDs"},{"lineNumber":218,"author":{"gitId":"-"},"content":" * when the entities are persisted into the database, and modify the relation IDs accordingly."},{"lineNumber":219,"author":{"gitId":"-"},"content":" * However, for tests that do not use simulated database (e.g. pure data structure tests),"},{"lineNumber":220,"author":{"gitId":"-"},"content":" * the assignment of IDs have to be simulated."},{"lineNumber":221,"author":{"gitId":"-"},"content":" */"},{"lineNumber":222,"author":{"gitId":"-"},"content":" protected void populateQuestionAndResponseIds(DataBundle dataBundle) {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" Map\u003cString, Map\u003cInteger, String\u003e\u003e sessionToQuestionNumberToId \u003d new HashMap\u003c\u003e();"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" dataBundle.feedbackQuestions.forEach((key, question) -\u003e {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" // Assign the same ID as the key as a later function requires a match between the key and the question ID"},{"lineNumber":227,"author":{"gitId":"-"},"content":" question.setId(key);"},{"lineNumber":228,"author":{"gitId":"-"},"content":" Map\u003cInteger, String\u003e questionNumberToId \u003d sessionToQuestionNumberToId.computeIfAbsent("},{"lineNumber":229,"author":{"gitId":"-"},"content":" question.getCourseId() + \"%\" + question.getFeedbackSessionName(), k -\u003e new HashMap\u003c\u003e());"},{"lineNumber":230,"author":{"gitId":"-"},"content":" questionNumberToId.put(question.getQuestionNumber(), key);"},{"lineNumber":231,"author":{"gitId":"-"},"content":" });"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" dataBundle.feedbackResponses.forEach((key, response) -\u003e {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" response.setId(key);"},{"lineNumber":235,"author":{"gitId":"-"},"content":" String feedbackQuestionId \u003d sessionToQuestionNumberToId"},{"lineNumber":236,"author":{"gitId":"-"},"content":" .get(response.getCourseId() + \"%\" + response.getFeedbackSessionName())"},{"lineNumber":237,"author":{"gitId":"-"},"content":" .get(Integer.valueOf(response.getFeedbackQuestionId()));"},{"lineNumber":238,"author":{"gitId":"-"},"content":" response.setFeedbackQuestionId(feedbackQuestionId);"},{"lineNumber":239,"author":{"gitId":"-"},"content":" });"},{"lineNumber":240,"author":{"gitId":"-"},"content":" }"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":243,"author":{"gitId":"-"},"content":" * Invokes the method named {@code methodName} as defined in the {@code definingClass}."},{"lineNumber":244,"author":{"gitId":"-"},"content":" * @param definingClass the class which defines the method"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * @param parameterTypes the parameter types of the method,"},{"lineNumber":246,"author":{"gitId":"-"},"content":" * which must be passed in the same order defined in the method"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * @param invokingObject the object which invokes the method, can be {@code null} if the method is static"},{"lineNumber":248,"author":{"gitId":"-"},"content":" * @param args the arguments to be passed to the method invocation"},{"lineNumber":249,"author":{"gitId":"-"},"content":" */"},{"lineNumber":250,"author":{"gitId":"-"},"content":" protected static Object invokeMethod(Class\u003c?\u003e definingClass, String methodName, Class\u003c?\u003e[] parameterTypes,"},{"lineNumber":251,"author":{"gitId":"-"},"content":" Object invokingObject, Object[] args)"},{"lineNumber":252,"author":{"gitId":"-"},"content":" throws ReflectiveOperationException {"},{"lineNumber":253,"author":{"gitId":"-"},"content":" Method method \u003d definingClass.getDeclaredMethod(methodName, parameterTypes);"},{"lineNumber":254,"author":{"gitId":"-"},"content":" method.setAccessible(true);"},{"lineNumber":255,"author":{"gitId":"-"},"content":" return method.invoke(invokingObject, args);"},{"lineNumber":256,"author":{"gitId":"-"},"content":" }"},{"lineNumber":257,"author":{"gitId":"-"},"content":""},{"lineNumber":258,"author":{"gitId":"-"},"content":" protected static String getPopulatedErrorMessage(String messageTemplate, String userInput,"},{"lineNumber":259,"author":{"gitId":"-"},"content":" String fieldName, String errorReason)"},{"lineNumber":260,"author":{"gitId":"-"},"content":" throws ReflectiveOperationException {"},{"lineNumber":261,"author":{"gitId":"-"},"content":" return getPopulatedErrorMessage(messageTemplate, userInput, fieldName, errorReason, 0);"},{"lineNumber":262,"author":{"gitId":"-"},"content":" }"},{"lineNumber":263,"author":{"gitId":"-"},"content":""},{"lineNumber":264,"author":{"gitId":"-"},"content":" protected static String getPopulatedErrorMessage(String messageTemplate, String userInput,"},{"lineNumber":265,"author":{"gitId":"-"},"content":" String fieldName, String errorReason, int maxLength)"},{"lineNumber":266,"author":{"gitId":"-"},"content":" throws ReflectiveOperationException {"},{"lineNumber":267,"author":{"gitId":"-"},"content":" return (String) invokeMethod(FieldValidator.class, \"getPopulatedErrorMessage\","},{"lineNumber":268,"author":{"gitId":"-"},"content":" new Class\u003c?\u003e[] { String.class, String.class, String.class, String.class, int.class },"},{"lineNumber":269,"author":{"gitId":"-"},"content":" null, new Object[] { messageTemplate, userInput, fieldName, errorReason, maxLength });"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" protected static String getPopulatedEmptyStringErrorMessage(String messageTemplate, String fieldName, int maxLength)"},{"lineNumber":273,"author":{"gitId":"-"},"content":" throws ReflectiveOperationException {"},{"lineNumber":274,"author":{"gitId":"-"},"content":" return (String) invokeMethod(FieldValidator.class, \"getPopulatedEmptyStringErrorMessage\","},{"lineNumber":275,"author":{"gitId":"-"},"content":" new Class\u003c?\u003e[] { String.class, String.class, int.class },"},{"lineNumber":276,"author":{"gitId":"-"},"content":" null, new Object[] { messageTemplate, fieldName, maxLength });"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":280,"author":{"gitId":"-"},"content":" * Here are some of the most common assertion methods provided by JUnit."},{"lineNumber":281,"author":{"gitId":"-"},"content":" * They are copied here to prevent repetitive importing in test classes."},{"lineNumber":282,"author":{"gitId":"-"},"content":" */"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" protected static void assertTrue(boolean condition) {"},{"lineNumber":285,"author":{"gitId":"-"},"content":" Assert.assertTrue(condition);"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" protected static void assertTrue(String message, boolean condition) {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" Assert.assertTrue(message, condition);"},{"lineNumber":290,"author":{"gitId":"-"},"content":" }"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" protected static void assertFalse(boolean condition) {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" Assert.assertFalse(condition);"},{"lineNumber":294,"author":{"gitId":"-"},"content":" }"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":" protected static void assertFalse(String message, boolean condition) {"},{"lineNumber":297,"author":{"gitId":"-"},"content":" Assert.assertFalse(message, condition);"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" protected static void assertEquals(int expected, int actual) {"},{"lineNumber":301,"author":{"gitId":"-"},"content":" Assert.assertEquals(expected, actual);"},{"lineNumber":302,"author":{"gitId":"-"},"content":" }"},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":" protected static void assertEquals(String message, int expected, int actual) {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" Assert.assertEquals(message, expected, actual);"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":" protected static void assertEquals(long expected, long actual) {"},{"lineNumber":309,"author":{"gitId":"-"},"content":" Assert.assertEquals(expected, actual);"},{"lineNumber":310,"author":{"gitId":"-"},"content":" }"},{"lineNumber":311,"author":{"gitId":"-"},"content":""},{"lineNumber":312,"author":{"gitId":"-"},"content":" protected static void assertEquals(double expected, double actual, double delta) {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" Assert.assertEquals(expected, actual, delta);"},{"lineNumber":314,"author":{"gitId":"-"},"content":" }"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" protected static void assertEquals(Object expected, Object actual) {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" Assert.assertEquals(expected, actual);"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":" protected static void assertEquals(String message, Object expected, Object actual) {"},{"lineNumber":321,"author":{"gitId":"-"},"content":" Assert.assertEquals(message, expected, actual);"},{"lineNumber":322,"author":{"gitId":"-"},"content":" }"},{"lineNumber":323,"author":{"gitId":"-"},"content":""},{"lineNumber":324,"author":{"gitId":"-"},"content":" protected static void assertArrayEquals(byte[] expected, byte[] actual) {"},{"lineNumber":325,"author":{"gitId":"-"},"content":" Assert.assertArrayEquals(expected, actual);"},{"lineNumber":326,"author":{"gitId":"-"},"content":" }"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" protected static void assertNotEquals(Object first, Object second) {"},{"lineNumber":329,"author":{"gitId":"-"},"content":" Assert.assertNotEquals(first, second);"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }"},{"lineNumber":331,"author":{"gitId":"-"},"content":""},{"lineNumber":332,"author":{"gitId":"-"},"content":" protected static void assertSame(Object expected, Object actual) {"},{"lineNumber":333,"author":{"gitId":"-"},"content":" Assert.assertSame(expected, actual);"},{"lineNumber":334,"author":{"gitId":"-"},"content":" }"},{"lineNumber":335,"author":{"gitId":"-"},"content":""},{"lineNumber":336,"author":{"gitId":"-"},"content":" protected static void assertNotSame(Object unexpected, Object actual) {"},{"lineNumber":337,"author":{"gitId":"-"},"content":" Assert.assertNotSame(unexpected, actual);"},{"lineNumber":338,"author":{"gitId":"-"},"content":" }"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":" protected static void assertNull(Object object) {"},{"lineNumber":341,"author":{"gitId":"-"},"content":" Assert.assertNull(object);"},{"lineNumber":342,"author":{"gitId":"-"},"content":" }"},{"lineNumber":343,"author":{"gitId":"-"},"content":""},{"lineNumber":344,"author":{"gitId":"-"},"content":" protected static void assertNull(String message, Object object) {"},{"lineNumber":345,"author":{"gitId":"-"},"content":" Assert.assertNull(message, object);"},{"lineNumber":346,"author":{"gitId":"-"},"content":" }"},{"lineNumber":347,"author":{"gitId":"-"},"content":""},{"lineNumber":348,"author":{"gitId":"-"},"content":" protected static void assertNotNull(Object object) {"},{"lineNumber":349,"author":{"gitId":"-"},"content":" Assert.assertNotNull(object);"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":""},{"lineNumber":352,"author":{"gitId":"-"},"content":" protected static void assertNotNull(String message, Object object) {"},{"lineNumber":353,"author":{"gitId":"-"},"content":" Assert.assertNotNull(message, object);"},{"lineNumber":354,"author":{"gitId":"-"},"content":" }"},{"lineNumber":355,"author":{"gitId":"-"},"content":""},{"lineNumber":356,"author":{"gitId":"-"},"content":" protected static void fail(String message) {"},{"lineNumber":357,"author":{"gitId":"-"},"content":" Assert.fail(message);"},{"lineNumber":358,"author":{"gitId":"-"},"content":" }"},{"lineNumber":359,"author":{"gitId":"-"},"content":""},{"lineNumber":360,"author":{"gitId":"-"},"content":" // This method is adapted from JUnit 5\u0027s assertThrows."},{"lineNumber":361,"author":{"gitId":"-"},"content":" // Once we upgrade to JUnit 5, their built-in method shall be used instead."},{"lineNumber":362,"author":{"gitId":"-"},"content":" @SuppressWarnings({"},{"lineNumber":363,"author":{"gitId":"-"},"content":" \"unchecked\","},{"lineNumber":364,"author":{"gitId":"-"},"content":" \"PMD.AvoidCatchingThrowable\", // As per reference method\u0027s specification"},{"lineNumber":365,"author":{"gitId":"-"},"content":" })"},{"lineNumber":366,"author":{"gitId":"-"},"content":" protected static \u003cT extends Throwable\u003e T assertThrows(Class\u003cT\u003e expectedType, Executable executable) {"},{"lineNumber":367,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":368,"author":{"gitId":"-"},"content":" executable.execute();"},{"lineNumber":369,"author":{"gitId":"-"},"content":" } catch (Throwable actualException) {"},{"lineNumber":370,"author":{"gitId":"-"},"content":" if (expectedType.isInstance(actualException)) {"},{"lineNumber":371,"author":{"gitId":"-"},"content":" return (T) actualException;"},{"lineNumber":372,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" String message \u003d String.format(\"Expected %s to be thrown, but %s was instead thrown.\","},{"lineNumber":374,"author":{"gitId":"-"},"content":" getCanonicalName(expectedType), getCanonicalName(actualException.getClass()));"},{"lineNumber":375,"author":{"gitId":"-"},"content":" throw new AssertionError(message, actualException);"},{"lineNumber":376,"author":{"gitId":"-"},"content":" }"},{"lineNumber":377,"author":{"gitId":"-"},"content":" }"},{"lineNumber":378,"author":{"gitId":"-"},"content":""},{"lineNumber":379,"author":{"gitId":"-"},"content":" String message \u003d String.format(\"Expected %s to be thrown, but nothing was thrown.\", getCanonicalName(expectedType));"},{"lineNumber":380,"author":{"gitId":"-"},"content":" throw new AssertionError(message);"},{"lineNumber":381,"author":{"gitId":"-"},"content":" }"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":" private static String getCanonicalName(Class\u003c?\u003e clazz) {"},{"lineNumber":384,"author":{"gitId":"-"},"content":" String canonicalName \u003d clazz.getCanonicalName();"},{"lineNumber":385,"author":{"gitId":"-"},"content":" return canonicalName \u003d\u003d null ? clazz.getName() : canonicalName;"},{"lineNumber":386,"author":{"gitId":"-"},"content":" }"},{"lineNumber":387,"author":{"gitId":"-"},"content":""},{"lineNumber":388,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":389,"author":{"gitId":"-"},"content":" * {@code Executable} is a functional interface that can be used to"},{"lineNumber":390,"author":{"gitId":"-"},"content":" * implement any generic block of code that potentially throws a"},{"lineNumber":391,"author":{"gitId":"-"},"content":" * {@link Throwable}."},{"lineNumber":392,"author":{"gitId":"-"},"content":" *"},{"lineNumber":393,"author":{"gitId":"-"},"content":" * \u003cp\u003eThe {@code Executable} interface is similar to {@link Runnable},"},{"lineNumber":394,"author":{"gitId":"-"},"content":" * except that an {@code Executable} can throw any kind of exception."},{"lineNumber":395,"author":{"gitId":"-"},"content":" */"},{"lineNumber":396,"author":{"gitId":"-"},"content":" // This interface is adapted from JUnit 5\u0027s Executable interface."},{"lineNumber":397,"author":{"gitId":"-"},"content":" // Once we upgrade to JUnit 5, this interface shall no longer be necessary."},{"lineNumber":398,"author":{"gitId":"-"},"content":" public interface Executable {"},{"lineNumber":399,"author":{"gitId":"-"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":401,"author":{"gitId":"-"},"content":" * Executes a block of code, potentially throwing a {@link Throwable}."},{"lineNumber":402,"author":{"gitId":"-"},"content":" */"},{"lineNumber":403,"author":{"gitId":"-"},"content":" // CHECKSTYLE.OFF:IllegalThrows"},{"lineNumber":404,"author":{"gitId":"-"},"content":" void execute() throws Throwable;"},{"lineNumber":405,"author":{"gitId":"-"},"content":" // CHECKSTYLE.ON:IllegalThrows"},{"lineNumber":406,"author":{"gitId":"-"},"content":""},{"lineNumber":407,"author":{"gitId":"-"},"content":" }"},{"lineNumber":408,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"xenosf":17,"dishenggg":16,"mingyuanc":10,"-":365}},{"path":"src/test/java/teammates/test/BaseTestCaseWithDatabaseAccess.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountAttributes;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.DeadlineExtensionAttributes;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.EntityAttributes;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.common.util.JsonUtils;"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * Base class for all test cases which are allowed to access the database."},{"lineNumber":21,"author":{"gitId":"-"},"content":" */"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public abstract class BaseTestCaseWithDatabaseAccess extends BaseTestCase {"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final int VERIFICATION_RETRY_COUNT \u003d 5;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final int VERIFICATION_RETRY_DELAY_IN_MS \u003d 1000;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final int OPERATION_RETRY_COUNT \u003d 5;"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final int OPERATION_RETRY_DELAY_IN_MS \u003d 1000;"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" protected void verifyPresentInDatabase(DataBundle data) {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" data.accounts.values().forEach(this::verifyPresentInDatabase);"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":" data.instructors.values().forEach(this::verifyPresentInDatabase);"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" data.courses.values().stream()"},{"lineNumber":35,"author":{"gitId":"-"},"content":" .filter(course -\u003e !course.isCourseDeleted())"},{"lineNumber":36,"author":{"gitId":"-"},"content":" .forEach(this::verifyPresentInDatabase);"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" data.students.values().forEach(this::verifyPresentInDatabase);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" protected void verifyPresentInDatabase(EntityAttributes\u003c?\u003e expected) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" int retryLimit \u003d VERIFICATION_RETRY_COUNT;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" EntityAttributes\u003c?\u003e actual \u003d getEntity(expected);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" while (actual \u003d\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(VERIFICATION_RETRY_DELAY_IN_MS);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" actual \u003d getEntity(expected);"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":" verifyEquals(expected, actual);"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" private EntityAttributes\u003c?\u003e getEntity(EntityAttributes\u003c?\u003e expected) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (expected instanceof AccountAttributes) {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return getAccount((AccountAttributes) expected);"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" } else if (expected instanceof CourseAttributes) {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return getCourse((CourseAttributes) expected);"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackQuestionAttributes) {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return getFeedbackQuestion((FeedbackQuestionAttributes) expected);"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseCommentAttributes) {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return getFeedbackResponseComment((FeedbackResponseCommentAttributes) expected);"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseAttributes) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" return getFeedbackResponse((FeedbackResponseAttributes) expected);"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackSessionAttributes) {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return getFeedbackSession((FeedbackSessionAttributes) expected);"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" } else if (expected instanceof InstructorAttributes) {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return getInstructor((InstructorAttributes) expected);"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" } else if (expected instanceof StudentAttributes) {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return getStudent((StudentAttributes) expected);"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" } else if (expected instanceof AccountRequestAttributes) {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return getAccountRequest((AccountRequestAttributes) expected);"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":" } else if (expected instanceof DeadlineExtensionAttributes) {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return getDeadlineExtension((DeadlineExtensionAttributes) expected);"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" } else if (expected instanceof NotificationAttributes) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return getNotification((NotificationAttributes) expected);"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown entity type!\");"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" protected void verifyAbsentInDatabase(EntityAttributes\u003c?\u003e entity) {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" int retryLimit \u003d VERIFICATION_RETRY_COUNT;"},{"lineNumber":93,"author":{"gitId":"-"},"content":" EntityAttributes\u003c?\u003e actual \u003d getEntity(entity);"},{"lineNumber":94,"author":{"gitId":"-"},"content":" while (actual !\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(VERIFICATION_RETRY_DELAY_IN_MS);"},{"lineNumber":97,"author":{"gitId":"-"},"content":" actual \u003d getEntity(entity);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" assertNull(actual);"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" private void verifyEquals(EntityAttributes\u003c?\u003e expected, EntityAttributes\u003c?\u003e actual) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (expected instanceof AccountAttributes) {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" AccountAttributes expectedAccount \u003d ((AccountAttributes) expected).getCopy();"},{"lineNumber":105,"author":{"gitId":"-"},"content":" AccountAttributes actualAccount \u003d (AccountAttributes) actual;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedAccount, actualAccount);"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedAccount), JsonUtils.toJson(actualAccount));"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":" } else if (expected instanceof CourseAttributes) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" CourseAttributes expectedCourse \u003d (CourseAttributes) expected;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" CourseAttributes actualCourse \u003d (CourseAttributes) actual;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedCourse, actualCourse);"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedCourse), JsonUtils.toJson(actualCourse));"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackQuestionAttributes) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes expectedFq \u003d (FeedbackQuestionAttributes) expected;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" FeedbackQuestionAttributes actualFq \u003d (FeedbackQuestionAttributes) actual;"},{"lineNumber":118,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedFq, actualFq);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedFq), JsonUtils.toJson(actualFq));"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseCommentAttributes) {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" FeedbackResponseCommentAttributes expectedFrc \u003d (FeedbackResponseCommentAttributes) expected;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" FeedbackResponseCommentAttributes actualFrc \u003d (FeedbackResponseCommentAttributes) actual;"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertEquals(expectedFrc.getCourseId(), actualFrc.getCourseId());"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assertEquals(expectedFrc.getCommentGiver(), actualFrc.getCommentGiver());"},{"lineNumber":126,"author":{"gitId":"-"},"content":" assertEquals(expectedFrc.getFeedbackSessionName(), actualFrc.getFeedbackSessionName());"},{"lineNumber":127,"author":{"gitId":"-"},"content":" assertEquals(expectedFrc.getCommentText(), actualFrc.getCommentText());"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseAttributes) {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes expectedFr \u003d (FeedbackResponseAttributes) expected;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" FeedbackResponseAttributes actualFr \u003d (FeedbackResponseAttributes) actual;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedFr, actualFr);"},{"lineNumber":133,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedFr), JsonUtils.toJson(actualFr));"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackSessionAttributes) {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes expectedFs \u003d ((FeedbackSessionAttributes) expected).getCopy();"},{"lineNumber":137,"author":{"gitId":"-"},"content":" FeedbackSessionAttributes actualFs \u003d (FeedbackSessionAttributes) actual;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedFs, actualFs);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedFs), JsonUtils.toJson(actualFs));"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":" } else if (expected instanceof InstructorAttributes) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" InstructorAttributes expectedInstructor \u003d ((InstructorAttributes) expected).getCopy();"},{"lineNumber":143,"author":{"gitId":"-"},"content":" InstructorAttributes actualInstructor \u003d (InstructorAttributes) actual;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedInstructor, actualInstructor);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedInstructor), JsonUtils.toJson(actualInstructor));"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":" } else if (expected instanceof StudentAttributes) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" StudentAttributes expectedStudent \u003d ((StudentAttributes) expected).getCopy();"},{"lineNumber":149,"author":{"gitId":"-"},"content":" StudentAttributes actualStudent \u003d (StudentAttributes) actual;"},{"lineNumber":150,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedStudent, actualStudent);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedStudent), JsonUtils.toJson(actualStudent));"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":" } else if (expected instanceof AccountRequestAttributes) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" AccountRequestAttributes expectedAccountRequest \u003d (AccountRequestAttributes) expected;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" AccountRequestAttributes actualAccountRequest \u003d (AccountRequestAttributes) actual;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedAccountRequest), JsonUtils.toJson(actualAccountRequest));"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":" } else if (expected instanceof DeadlineExtensionAttributes) {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" DeadlineExtensionAttributes expectedDeadlineExtension \u003d (DeadlineExtensionAttributes) expected;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" DeadlineExtensionAttributes actualDeadlineExtension \u003d (DeadlineExtensionAttributes) actual;"},{"lineNumber":161,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedDeadlineExtension, actualDeadlineExtension);"},{"lineNumber":162,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedDeadlineExtension), JsonUtils.toJson(actualDeadlineExtension));"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":" } else if (expected instanceof NotificationAttributes) {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" NotificationAttributes expectedNotification \u003d (NotificationAttributes) expected;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" NotificationAttributes actualNotification \u003d (NotificationAttributes) actual;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" equalizeIrrelevantData(expectedNotification, actualNotification);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(JsonUtils.toJson(expectedNotification), JsonUtils.toJson(actualNotification));"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown entity type!\");"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" protected abstract AccountAttributes getAccount(AccountAttributes account);"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(AccountAttributes expected, AccountAttributes actual) {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":179,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(CourseAttributes expected, CourseAttributes actual) {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":184,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackQuestionAttributes expected, FeedbackQuestionAttributes actual) {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" expected.setId(actual.getId());"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackResponseAttributes expected, FeedbackResponseAttributes actual) {"},{"lineNumber":192,"author":{"gitId":"-"},"content":" expected.setId(actual.getId());"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(FeedbackSessionAttributes expected, FeedbackSessionAttributes actual) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" expected.setCreatedTime(actual.getCreatedTime());"},{"lineNumber":197,"author":{"gitId":"-"},"content":" // Not available in FeedbackSessionData and thus ignored"},{"lineNumber":198,"author":{"gitId":"-"},"content":" expected.setCreatorEmail(actual.getCreatorEmail());"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(InstructorAttributes expected, InstructorAttributes actual) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" // pretend keys match because the key is generated only before storing into database"},{"lineNumber":203,"author":{"gitId":"-"},"content":" if (actual.getKey() !\u003d null) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" expected.setKey(actual.getKey());"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(StudentAttributes expected, StudentAttributes actual) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" // For these fields, we consider null and \"\" equivalent."},{"lineNumber":210,"author":{"gitId":"-"},"content":" if (expected.getGoogleId() \u003d\u003d null \u0026\u0026 actual.getGoogleId().isEmpty()) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" expected.setGoogleId(\"\");"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":" if (expected.getTeam() \u003d\u003d null \u0026\u0026 actual.getTeam().isEmpty()) {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" expected.setTeam(\"\");"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":" if (expected.getComments() \u003d\u003d null \u0026\u0026 actual.getComments().isEmpty()) {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" expected.setComments(\"\");"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" // pretend keys match because the key is generated only before storing into database"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (actual.getKey() !\u003d null) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" expected.setKey(actual.getKey());"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(DeadlineExtensionAttributes expected, DeadlineExtensionAttributes actual) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":228,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":229,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" private void equalizeIrrelevantData(NotificationAttributes expected, NotificationAttributes actual) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" // Ignore time field as it is stamped at the time of creation in testing"},{"lineNumber":234,"author":{"gitId":"-"},"content":" expected.setCreatedAt(actual.getCreatedAt());"},{"lineNumber":235,"author":{"gitId":"-"},"content":" expected.setUpdatedAt(actual.getUpdatedAt());"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" protected abstract CourseAttributes getCourse(CourseAttributes course);"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":" protected abstract FeedbackQuestionAttributes getFeedbackQuestion(FeedbackQuestionAttributes fq);"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":" protected abstract FeedbackResponseCommentAttributes getFeedbackResponseComment(FeedbackResponseCommentAttributes frc);"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":" protected abstract FeedbackResponseAttributes getFeedbackResponse(FeedbackResponseAttributes fr);"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" protected abstract FeedbackSessionAttributes getFeedbackSession(FeedbackSessionAttributes fs);"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" protected abstract InstructorAttributes getInstructor(InstructorAttributes instructor);"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" protected abstract StudentAttributes getStudent(StudentAttributes student);"},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":" protected abstract AccountRequestAttributes getAccountRequest(AccountRequestAttributes accountRequest);"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" protected abstract DeadlineExtensionAttributes getDeadlineExtension(DeadlineExtensionAttributes accountRequest);"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" protected abstract NotificationAttributes getNotification(NotificationAttributes notification);"},{"lineNumber":257,"author":{"gitId":"-"},"content":""},{"lineNumber":258,"author":{"gitId":"-"},"content":" protected void removeAndRestoreDataBundle(DataBundle testData) {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" boolean isOperationSuccess \u003d doRemoveAndRestoreDataBundle(testData);"},{"lineNumber":261,"author":{"gitId":"-"},"content":" while (!isOperationSuccess \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":263,"author":{"gitId":"-"},"content":" print(\"Re-trying removeAndRestoreDataBundle\");"},{"lineNumber":264,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":265,"author":{"gitId":"-"},"content":" isOperationSuccess \u003d doRemoveAndRestoreDataBundle(testData);"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":" assertTrue(isOperationSuccess);"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":" protected abstract boolean doRemoveAndRestoreDataBundle(DataBundle testData);"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" protected SqlDataBundle removeAndRestoreSqlDataBundle(SqlDataBundle testData) {"},{"lineNumber":273,"author":{"gitId":"-"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":274,"author":{"gitId":"-"},"content":" SqlDataBundle dataBundle \u003d doRemoveAndRestoreSqlDataBundle(testData);"},{"lineNumber":275,"author":{"gitId":"-"},"content":" while (dataBundle \u003d\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":277,"author":{"gitId":"-"},"content":" print(\"Re-trying removeAndRestoreDataBundle\");"},{"lineNumber":278,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":279,"author":{"gitId":"-"},"content":" dataBundle \u003d doRemoveAndRestoreSqlDataBundle(testData);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":" assertNotNull(dataBundle);"},{"lineNumber":282,"author":{"gitId":"-"},"content":" return dataBundle;"},{"lineNumber":283,"author":{"gitId":"-"},"content":" }"},{"lineNumber":284,"author":{"gitId":"-"},"content":""},{"lineNumber":285,"author":{"gitId":"-"},"content":" protected abstract SqlDataBundle doRemoveAndRestoreSqlDataBundle(SqlDataBundle testData);"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":" protected void putDocuments(DataBundle testData) {"},{"lineNumber":288,"author":{"gitId":"-"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":289,"author":{"gitId":"-"},"content":" boolean isOperationSuccess \u003d doPutDocuments(testData);"},{"lineNumber":290,"author":{"gitId":"-"},"content":" while (!isOperationSuccess \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":292,"author":{"gitId":"-"},"content":" print(\"Re-trying putDocuments\");"},{"lineNumber":293,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":294,"author":{"gitId":"-"},"content":" isOperationSuccess \u003d doPutDocuments(testData);"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":" assertTrue(isOperationSuccess);"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" protected abstract boolean doPutDocuments(DataBundle testData);"},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"domoberzin"},"content":" protected void putSqlDocuments(SqlDataBundle testData) {"},{"lineNumber":302,"author":{"gitId":"domoberzin"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":303,"author":{"gitId":"domoberzin"},"content":" boolean isOperationSuccess \u003d doPutDocumentsSql(testData);"},{"lineNumber":304,"author":{"gitId":"domoberzin"},"content":" while (!isOperationSuccess \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":305,"author":{"gitId":"domoberzin"},"content":" retryLimit--;"},{"lineNumber":306,"author":{"gitId":"domoberzin"},"content":" print(\"Re-trying putSqlDocuments\");"},{"lineNumber":307,"author":{"gitId":"domoberzin"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":308,"author":{"gitId":"domoberzin"},"content":" isOperationSuccess \u003d doPutDocumentsSql(testData);"},{"lineNumber":309,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":310,"author":{"gitId":"domoberzin"},"content":" assertTrue(isOperationSuccess);"},{"lineNumber":311,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":312,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":313,"author":{"gitId":"domoberzin"},"content":" protected abstract boolean doPutDocumentsSql(SqlDataBundle testData);"},{"lineNumber":314,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":13,"-":301}},{"path":"src/test/java/teammates/test/BaseTestCaseWithLocalDatabaseAccess.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import org.testcontainers.containers.PostgreSQLContainer;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterClass;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterMethod;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.testng.annotations.AfterSuite;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeClass;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeMethod;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.testng.annotations.BeforeSuite;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import org.testng.annotations.Test;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"import com.google.cloud.datastore.DatastoreOptions;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import com.google.cloud.datastore.testing.LocalDatastoreHelper;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.ObjectifyFactory;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.ObjectifyService;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import com.googlecode.objectify.util.Closeable;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.DataBundle;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountAttributes;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.AccountRequestAttributes;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.CourseAttributes;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.DeadlineExtensionAttributes;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackQuestionAttributes;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseAttributes;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackResponseCommentAttributes;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.FeedbackSessionAttributes;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.InstructorAttributes;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.NotificationAttributes;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.attributes.StudentAttributes;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.common.util.HibernateUtil;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import teammates.logic.api.LogicExtension;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import teammates.logic.core.LogicStarter;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import teammates.sqllogic.api.Logic;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import teammates.storage.api.OfyHelper;"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import teammates.storage.search.AccountRequestSearchManager;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import teammates.storage.search.InstructorSearchManager;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import teammates.storage.search.SearchManagerFactory;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import teammates.storage.search.StudentSearchManager;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Base class for all tests which require access to a locally run database."},{"lineNumber":44,"author":{"gitId":"-"},"content":" *"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * \u003cp\u003eAs all tests are run against a single DB instance and we use shared test data for most tests,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * the tests need to be run in a single thread to prevent test data contamination across different tests."},{"lineNumber":47,"author":{"gitId":"-"},"content":" */"},{"lineNumber":48,"author":{"gitId":"-"},"content":"@Test(singleThreaded \u003d true)"},{"lineNumber":49,"author":{"gitId":"-"},"content":"public abstract class BaseTestCaseWithLocalDatabaseAccess extends BaseTestCaseWithDatabaseAccess {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private static final PostgreSQLContainer\u003c?\u003e PGSQL \u003d new PostgreSQLContainer\u003c\u003e(\"postgres:15.1-alpine\");"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" private static final LocalDatastoreHelper LOCAL_DATASTORE_HELPER \u003d LocalDatastoreHelper.newBuilder()"},{"lineNumber":53,"author":{"gitId":"-"},"content":" .setConsistency(1.0)"},{"lineNumber":54,"author":{"gitId":"-"},"content":" .setPort(TestProperties.TEST_LOCALDATASTORE_PORT)"},{"lineNumber":55,"author":{"gitId":"-"},"content":" .setStoreOnDisk(false)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" .build();"},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * sqlLogic for use in test cases."},{"lineNumber":59,"author":{"gitId":"-"},"content":" */"},{"lineNumber":60,"author":{"gitId":"-"},"content":" protected Logic sqlLogic;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" private final LogicExtension logic \u003d new LogicExtension();"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private Closeable closeable;"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":" @BeforeSuite"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void setupDbLayer() throws Exception {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" PGSQL.start();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" HibernateUtil.buildSessionFactory(PGSQL.getJdbcUrl(), PGSQL.getUsername(), PGSQL.getPassword());"},{"lineNumber":68,"author":{"gitId":"-"},"content":" teammates.sqllogic.core.LogicStarter.initializeDependencies();"},{"lineNumber":69,"author":{"gitId":"-"},"content":" sqlLogic \u003d Logic.inst();"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.start();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" DatastoreOptions options \u003d LOCAL_DATASTORE_HELPER.getOptions();"},{"lineNumber":73,"author":{"gitId":"-"},"content":" ObjectifyService.init(new ObjectifyFactory("},{"lineNumber":74,"author":{"gitId":"-"},"content":" options.getService()"},{"lineNumber":75,"author":{"gitId":"-"},"content":" ));"},{"lineNumber":76,"author":{"gitId":"-"},"content":" OfyHelper.registerEntityClasses();"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerAccountRequestSearchManager("},{"lineNumber":79,"author":{"gitId":"-"},"content":" new AccountRequestSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":80,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerInstructorSearchManager("},{"lineNumber":81,"author":{"gitId":"-"},"content":" new InstructorSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":82,"author":{"gitId":"-"},"content":" SearchManagerFactory.registerStudentSearchManager("},{"lineNumber":83,"author":{"gitId":"-"},"content":" new StudentSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"domoberzin"},"content":" teammates.storage.sqlsearch.SearchManagerFactory.registerAccountRequestSearchManager("},{"lineNumber":86,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.sqlsearch.AccountRequestSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":87,"author":{"gitId":"domoberzin"},"content":" teammates.storage.sqlsearch.SearchManagerFactory.registerInstructorSearchManager("},{"lineNumber":88,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.sqlsearch.InstructorSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":89,"author":{"gitId":"domoberzin"},"content":" teammates.storage.sqlsearch.SearchManagerFactory.registerStudentSearchManager("},{"lineNumber":90,"author":{"gitId":"domoberzin"},"content":" new teammates.storage.sqlsearch.StudentSearchManager(TestProperties.SEARCH_SERVICE_HOST, true));"},{"lineNumber":91,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" LogicStarter.initializeDependencies();"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" @BeforeClass"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public void setupObjectify() {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" closeable \u003d ObjectifyService.begin();"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public void tearDownObjectify() {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" closeable.close();"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" @AfterClass"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void resetDbLayer() throws Exception {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" SearchManagerFactory.getAccountRequestSearchManager().resetCollections();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" SearchManagerFactory.getInstructorSearchManager().resetCollections();"},{"lineNumber":109,"author":{"gitId":"-"},"content":" SearchManagerFactory.getStudentSearchManager().resetCollections();"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.reset();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" @AfterSuite"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public void tearDownLocalDatastoreHelper() throws Exception {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" PGSQL.close();"},{"lineNumber":117,"author":{"gitId":"-"},"content":" LOCAL_DATASTORE_HELPER.stop();"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" @BeforeMethod"},{"lineNumber":121,"author":{"gitId":"-"},"content":" protected void setUp() throws Exception {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" HibernateUtil.beginTransaction();"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" @AfterMethod"},{"lineNumber":126,"author":{"gitId":"-"},"content":" protected void tearDown() {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" HibernateUtil.rollbackTransaction();"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":131,"author":{"gitId":"-"},"content":" protected AccountAttributes getAccount(AccountAttributes account) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return logic.getAccount(account.getGoogleId());"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":136,"author":{"gitId":"-"},"content":" protected CourseAttributes getCourse(CourseAttributes course) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return logic.getCourse(course.getId());"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":141,"author":{"gitId":"-"},"content":" protected FeedbackQuestionAttributes getFeedbackQuestion(FeedbackQuestionAttributes fq) {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" return logic.getFeedbackQuestion(fq.getFeedbackSessionName(), fq.getCourseId(), fq.getQuestionNumber());"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":146,"author":{"gitId":"-"},"content":" protected FeedbackResponseCommentAttributes getFeedbackResponseComment(FeedbackResponseCommentAttributes frc) {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" return logic.getFeedbackResponseComment(frc.getFeedbackResponseId(), frc.getCommentGiver(), frc.getCreatedAt());"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":151,"author":{"gitId":"-"},"content":" protected FeedbackResponseAttributes getFeedbackResponse(FeedbackResponseAttributes fr) {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" return logic.getFeedbackResponse(fr.getFeedbackQuestionId(), fr.getGiver(), fr.getRecipient());"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":156,"author":{"gitId":"-"},"content":" protected FeedbackSessionAttributes getFeedbackSession(FeedbackSessionAttributes fs) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" return logic.getFeedbackSession(fs.getFeedbackSessionName(), fs.getCourseId());"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":161,"author":{"gitId":"-"},"content":" protected InstructorAttributes getInstructor(InstructorAttributes instructor) {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" return instructor.getGoogleId() \u003d\u003d null"},{"lineNumber":163,"author":{"gitId":"-"},"content":" ? logic.getInstructorForEmail(instructor.getCourseId(), instructor.getEmail())"},{"lineNumber":164,"author":{"gitId":"-"},"content":" : logic.getInstructorForGoogleId(instructor.getCourseId(), instructor.getGoogleId());"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":168,"author":{"gitId":"-"},"content":" protected StudentAttributes getStudent(StudentAttributes student) {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" return logic.getStudentForEmail(student.getCourse(), student.getEmail());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" }"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":173,"author":{"gitId":"-"},"content":" protected AccountRequestAttributes getAccountRequest(AccountRequestAttributes accountRequest) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" return logic.getAccountRequest(accountRequest.getEmail(), accountRequest.getInstitute());"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":178,"author":{"gitId":"-"},"content":" protected DeadlineExtensionAttributes getDeadlineExtension(DeadlineExtensionAttributes deadlineExtension) {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" return logic.getDeadlineExtension("},{"lineNumber":180,"author":{"gitId":"-"},"content":" deadlineExtension.getCourseId(), deadlineExtension.getFeedbackSessionName(),"},{"lineNumber":181,"author":{"gitId":"-"},"content":" deadlineExtension.getUserEmail(), deadlineExtension.getIsInstructor());"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":185,"author":{"gitId":"-"},"content":" protected NotificationAttributes getNotification(NotificationAttributes notification) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return logic.getNotification(notification.getNotificationId());"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" protected void removeAndRestoreTypicalDataBundle() {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" DataBundle dataBundle \u003d getTypicalDataBundle();"},{"lineNumber":191,"author":{"gitId":"-"},"content":" removeAndRestoreDataBundle(dataBundle);"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":195,"author":{"gitId":"-"},"content":" protected boolean doRemoveAndRestoreDataBundle(DataBundle dataBundle) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" logic.removeDataBundle(dataBundle);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" logic.persistDataBundle(dataBundle);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":201,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":202,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":207,"author":{"gitId":"-"},"content":" protected SqlDataBundle doRemoveAndRestoreSqlDataBundle(SqlDataBundle dataBundle) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" sqlLogic.removeDataBundle(dataBundle);"},{"lineNumber":210,"author":{"gitId":"-"},"content":" return sqlLogic.persistDataBundle(dataBundle);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":213,"author":{"gitId":"-"},"content":" return null;"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" @Override"},{"lineNumber":218,"author":{"gitId":"-"},"content":" protected boolean doPutDocuments(DataBundle dataBundle) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":220,"author":{"gitId":"-"},"content":" logic.putDocuments(dataBundle);"},{"lineNumber":221,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":222,"author":{"gitId":"-"},"content":" } catch (Exception e) {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" e.printStackTrace();"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }"},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"domoberzin"},"content":" @Override"},{"lineNumber":229,"author":{"gitId":"domoberzin"},"content":" protected boolean doPutDocumentsSql(SqlDataBundle dataBundle) {"},{"lineNumber":230,"author":{"gitId":"domoberzin"},"content":" try {"},{"lineNumber":231,"author":{"gitId":"domoberzin"},"content":" sqlLogic.putDocuments(dataBundle);"},{"lineNumber":232,"author":{"gitId":"domoberzin"},"content":" return true;"},{"lineNumber":233,"author":{"gitId":"domoberzin"},"content":" } catch (Exception e) {"},{"lineNumber":234,"author":{"gitId":"domoberzin"},"content":" e.printStackTrace();"},{"lineNumber":235,"author":{"gitId":"domoberzin"},"content":" return false;"},{"lineNumber":236,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":237,"author":{"gitId":"domoberzin"},"content":" }"},{"lineNumber":238,"author":{"gitId":"domoberzin"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" protected Account getAccountFromDatabase(String googleId) {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" return sqlLogic.getAccountForGoogleId(googleId);"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" protected void clearObjectifyCache() {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" ObjectifyService.ofy().clear();"},{"lineNumber":245,"author":{"gitId":"-"},"content":" }"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"domoberzin":18,"-":229}},{"path":"src/test/java/teammates/test/BaseTestCaseWithSqlDatabaseAccess.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package teammates.test;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.SqlDataBundle;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackQuestionDetails;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import teammates.common.datatransfer.questions.FeedbackResponseDetails;"},{"lineNumber":6,"author":{"gitId":"dishenggg"},"content":"import teammates.common.util.Const;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Account;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.BaseEntity;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Course;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.DeadlineExtension;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackQuestion;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponse;"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackResponseComment;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.FeedbackSession;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Instructor;"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Notification;"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.Student;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import teammates.storage.sqlentity.UsageStatistics;"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import teammates.ui.output.AccountData;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import teammates.ui.output.ApiOutput;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import teammates.ui.output.CourseData;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import teammates.ui.output.DeadlineExtensionData;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackQuestionData;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponseCommentData;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackResponseData;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import teammates.ui.output.FeedbackSessionData;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import teammates.ui.output.InstructorData;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import teammates.ui.output.NotificationData;"},{"lineNumber":29,"author":{"gitId":"dishenggg"},"content":"import teammates.ui.output.NumberOfEntitiesToGiveFeedbackToSetting;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import teammates.ui.output.StudentData;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import teammates.ui.output.UsageStatisticsData;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Base class for all test cases which are allowed to access the database."},{"lineNumber":35,"author":{"gitId":"-"},"content":" */"},{"lineNumber":36,"author":{"gitId":"-"},"content":"public abstract class BaseTestCaseWithSqlDatabaseAccess extends BaseTestCase {"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" private static final int VERIFICATION_RETRY_COUNT \u003d 5;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final int VERIFICATION_RETRY_DELAY_IN_MS \u003d 1000;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private static final int OPERATION_RETRY_COUNT \u003d 5;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private static final int OPERATION_RETRY_DELAY_IN_MS \u003d 1000;"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Removes and restores the databundle, with retries."},{"lineNumber":45,"author":{"gitId":"-"},"content":" */"},{"lineNumber":46,"author":{"gitId":"-"},"content":" protected SqlDataBundle removeAndRestoreDataBundle(SqlDataBundle testData) {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" int retryLimit \u003d OPERATION_RETRY_COUNT;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" SqlDataBundle dataBundle \u003d doRemoveAndRestoreDataBundle(testData);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" while (dataBundle \u003d\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" print(\"Re-trying removeAndRestoreDataBundle\");"},{"lineNumber":52,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(OPERATION_RETRY_DELAY_IN_MS);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dataBundle \u003d doRemoveAndRestoreDataBundle(testData);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" assertNotNull(dataBundle);"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return dataBundle;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":" protected abstract SqlDataBundle doRemoveAndRestoreDataBundle(SqlDataBundle testData);"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":62,"author":{"gitId":"-"},"content":" * Verifies that two entities are equal."},{"lineNumber":63,"author":{"gitId":"-"},"content":" */"},{"lineNumber":64,"author":{"gitId":"-"},"content":" protected void verifyEquals(BaseEntity expected, ApiOutput actual) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" if (expected instanceof FeedbackQuestion) {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" FeedbackQuestion expectedQuestion \u003d (FeedbackQuestion) expected;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails expectedQuestionDetails \u003d expectedQuestion.getQuestionDetailsCopy();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" FeedbackQuestionData actualQuestion \u003d (FeedbackQuestionData) actual;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" FeedbackQuestionDetails actualQuestionDetails \u003d actualQuestion.getQuestionDetails();"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getQuestionNumber(), (Integer) actualQuestion.getQuestionNumber());"},{"lineNumber":71,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getDescription(), actualQuestion.getQuestionDescription());"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getGiverType(), actualQuestion.getGiverType());"},{"lineNumber":73,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getRecipientType(), actualQuestion.getRecipientType());"},{"lineNumber":74,"author":{"gitId":"dishenggg"},"content":" if (expectedQuestion.getNumOfEntitiesToGiveFeedbackTo() \u003d\u003d Const.MAX_POSSIBLE_RECIPIENTS) {"},{"lineNumber":75,"author":{"gitId":"dishenggg"},"content":" assertEquals(actualQuestion.getNumberOfEntitiesToGiveFeedbackToSetting(),"},{"lineNumber":76,"author":{"gitId":"dishenggg"},"content":" NumberOfEntitiesToGiveFeedbackToSetting.UNLIMITED);"},{"lineNumber":77,"author":{"gitId":"dishenggg"},"content":" assertNull(actualQuestion.getCustomNumberOfEntitiesToGiveFeedbackTo());"},{"lineNumber":78,"author":{"gitId":"dishenggg"},"content":" } else {"},{"lineNumber":79,"author":{"gitId":"dishenggg"},"content":" assertEquals(actualQuestion.getNumberOfEntitiesToGiveFeedbackToSetting(),"},{"lineNumber":80,"author":{"gitId":"dishenggg"},"content":" NumberOfEntitiesToGiveFeedbackToSetting.CUSTOM);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestion.getNumOfEntitiesToGiveFeedbackTo(),"},{"lineNumber":82,"author":{"gitId":"-"},"content":" actualQuestion.getCustomNumberOfEntitiesToGiveFeedbackTo());"},{"lineNumber":83,"author":{"gitId":"dishenggg"},"content":" }"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertEquals(expectedQuestionDetails.getJsonString(), actualQuestionDetails.getJsonString());"},{"lineNumber":85,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponse) {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" FeedbackResponse expectedFeedbackResponse \u003d (FeedbackResponse) expected;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" FeedbackResponseDetails expectedResponseDetails \u003d"},{"lineNumber":88,"author":{"gitId":"-"},"content":" expectedFeedbackResponse.getFeedbackResponseDetailsCopy();"},{"lineNumber":89,"author":{"gitId":"-"},"content":" FeedbackResponseData actualResponse \u003d (FeedbackResponseData) actual;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" FeedbackResponseDetails actualResponseDetails \u003d actualResponse.getResponseDetails();"},{"lineNumber":91,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponse.getGiver(), actualResponse.getGiverIdentifier());"},{"lineNumber":92,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponse.getRecipient(), actualResponse.getRecipientIdentifier());"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertEquals(expectedResponseDetails.getAnswerString(),"},{"lineNumber":94,"author":{"gitId":"-"},"content":" actualResponse.getResponseDetails().getAnswerString());"},{"lineNumber":95,"author":{"gitId":"-"},"content":" assertEquals(expectedResponseDetails.getQuestionType(),"},{"lineNumber":96,"author":{"gitId":"-"},"content":" actualResponse.getResponseDetails().getQuestionType());"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertEquals(expectedResponseDetails.getJsonString(), actualResponseDetails.getJsonString());"},{"lineNumber":98,"author":{"gitId":"-"},"content":" } else if (expected instanceof Account) {"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Account expectedAccount \u003d (Account) expected;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" AccountData actualAccount \u003d (AccountData) actual;"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(expectedAccount.getGoogleId(), actualAccount.getGoogleId());"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedAccount.getName(), actualAccount.getName());"},{"lineNumber":103,"author":{"gitId":"-"},"content":" assertEquals(expectedAccount.getEmail(), actualAccount.getEmail());"},{"lineNumber":104,"author":{"gitId":"-"},"content":" } else if (expected instanceof Course) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Course expectedCourse \u003d (Course) expected;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" CourseData actualCourse \u003d (CourseData) actual;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertEquals(expectedCourse.getName(), actualCourse.getCourseName());"},{"lineNumber":108,"author":{"gitId":"-"},"content":" assertEquals(expectedCourse.getTimeZone(), actualCourse.getTimeZone());"},{"lineNumber":109,"author":{"gitId":"-"},"content":" assertEquals(expectedCourse.getInstitute(), actualCourse.getInstitute());"},{"lineNumber":110,"author":{"gitId":"-"},"content":" } else if (expected instanceof DeadlineExtension) {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" DeadlineExtension expectedDeadlineExtension \u003d (DeadlineExtension) expected;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" DeadlineExtensionData actualDeadlineExtension \u003d (DeadlineExtensionData) actual;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assertEquals(expectedDeadlineExtension.getEndTime().toEpochMilli(), actualDeadlineExtension.getEndTime());"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertEquals(expectedDeadlineExtension.isClosingSoonEmailSent(),"},{"lineNumber":115,"author":{"gitId":"-"},"content":" actualDeadlineExtension.getSentClosingEmail());"},{"lineNumber":116,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackResponseComment) {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" FeedbackResponseComment expectedFeedbackResponseComment \u003d (FeedbackResponseComment) expected;"},{"lineNumber":118,"author":{"gitId":"-"},"content":" FeedbackResponseCommentData actualComment \u003d (FeedbackResponseCommentData) actual;"},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponseComment.getGiver(), actualComment.getCommentGiver());"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponseComment.getCommentText(), actualComment.getCommentText());"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponseComment.getIsVisibilityFollowingFeedbackQuestion(),"},{"lineNumber":122,"author":{"gitId":"-"},"content":" actualComment.isVisibilityFollowingFeedbackQuestion());"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackResponseComment.getLastEditorEmail(), actualComment.getLastEditorEmail());"},{"lineNumber":124,"author":{"gitId":"-"},"content":" } else if (expected instanceof FeedbackSession) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" FeedbackSession expectedFeedbackSession \u003d (FeedbackSession) expected;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" FeedbackSessionData actualFeedbackSession \u003d (FeedbackSessionData) actual;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getName(), actualFeedbackSession.getFeedbackSessionName());"},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getInstructions(), actualFeedbackSession.getInstructions());"},{"lineNumber":129,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getStartTime().toEpochMilli(),"},{"lineNumber":130,"author":{"gitId":"-"},"content":" actualFeedbackSession.getSubmissionStartTimestamp());"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getEndTime().toEpochMilli(),"},{"lineNumber":132,"author":{"gitId":"-"},"content":" actualFeedbackSession.getSubmissionEndTimestamp());"},{"lineNumber":133,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getSessionVisibleFromTime().toEpochMilli(),"},{"lineNumber":134,"author":{"gitId":"-"},"content":" actualFeedbackSession.getSessionVisibleFromTimestamp().longValue());"},{"lineNumber":135,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getResultsVisibleFromTime().toEpochMilli(),"},{"lineNumber":136,"author":{"gitId":"-"},"content":" actualFeedbackSession.getResultVisibleFromTimestamp().longValue());"},{"lineNumber":137,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.getGracePeriod().toMinutes(),"},{"lineNumber":138,"author":{"gitId":"-"},"content":" actualFeedbackSession.getGracePeriod().longValue());"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.isClosingEmailEnabled(),"},{"lineNumber":140,"author":{"gitId":"-"},"content":" actualFeedbackSession.getIsClosingEmailEnabled());"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(expectedFeedbackSession.isPublishedEmailEnabled(),"},{"lineNumber":142,"author":{"gitId":"-"},"content":" actualFeedbackSession.getIsPublishedEmailEnabled());"},{"lineNumber":143,"author":{"gitId":"-"},"content":" } else if (expected instanceof Instructor) {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" Instructor expectedInstructor \u003d (Instructor) expected;"},{"lineNumber":145,"author":{"gitId":"-"},"content":" InstructorData actualInstructor \u003d (InstructorData) actual;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getCourseId(), actualInstructor.getCourseId());"},{"lineNumber":147,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getName(), actualInstructor.getName());"},{"lineNumber":148,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getEmail(), actualInstructor.getEmail());"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getRegKey(), actualInstructor.getKey());"},{"lineNumber":150,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.isDisplayedToStudents(), actualInstructor.getIsDisplayedToStudents());"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getDisplayName(), actualInstructor.getDisplayedToStudentsAs());"},{"lineNumber":152,"author":{"gitId":"-"},"content":" assertEquals(expectedInstructor.getRole(), actualInstructor.getRole());"},{"lineNumber":153,"author":{"gitId":"-"},"content":" } else if (expected instanceof Notification) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" Notification expectedNotification \u003d (Notification) expected;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" NotificationData actualNotification \u003d (NotificationData) actual;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getStartTime().toEpochMilli(), actualNotification.getStartTimestamp());"},{"lineNumber":157,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getEndTime().toEpochMilli(), actualNotification.getEndTimestamp());"},{"lineNumber":158,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getStyle(), actualNotification.getStyle());"},{"lineNumber":159,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getTargetUser(), actualNotification.getTargetUser());"},{"lineNumber":160,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getTitle(), actualNotification.getTitle());"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.getMessage(), actualNotification.getMessage());"},{"lineNumber":162,"author":{"gitId":"-"},"content":" assertEquals(expectedNotification.isShown(), actualNotification.isShown());"},{"lineNumber":163,"author":{"gitId":"-"},"content":" } else if (expected instanceof Student) {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" Student expectedStudent \u003d (Student) expected;"},{"lineNumber":165,"author":{"gitId":"-"},"content":" StudentData actualStudent \u003d (StudentData) actual;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getCourseId(), actualStudent.getCourseId());"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getName(), actualStudent.getName());"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getEmail(), actualStudent.getEmail());"},{"lineNumber":169,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getRegKey(), actualStudent.getKey());"},{"lineNumber":170,"author":{"gitId":"-"},"content":" assertEquals(expectedStudent.getComments(), actualStudent.getComments());"},{"lineNumber":171,"author":{"gitId":"-"},"content":" // TODO: A student might not have a team or section."},{"lineNumber":172,"author":{"gitId":"-"},"content":" // assertEquals(expectedStudent.getTeamName(), actualStudent.getTeamName());"},{"lineNumber":173,"author":{"gitId":"-"},"content":" // assertEquals(expectedStudent.getSectionName(), actualStudent.getSectionName());"},{"lineNumber":174,"author":{"gitId":"-"},"content":" } else if (expected instanceof UsageStatistics) {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" UsageStatistics expectedUsageStatistics \u003d (UsageStatistics) expected;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" UsageStatisticsData actualUsageStatistics \u003d (UsageStatisticsData) actual;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getStartTime().toEpochMilli(), actualUsageStatistics.getStartTime());"},{"lineNumber":178,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getTimePeriod(), actualUsageStatistics.getTimePeriod());"},{"lineNumber":179,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumResponses(), actualUsageStatistics.getNumResponses());"},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumCourses(), actualUsageStatistics.getNumCourses());"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumStudents(), actualUsageStatistics.getNumStudents());"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumInstructors(), actualUsageStatistics.getNumInstructors());"},{"lineNumber":183,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumAccountRequests(),"},{"lineNumber":184,"author":{"gitId":"-"},"content":" actualUsageStatistics.getNumAccountRequests());"},{"lineNumber":185,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumEmails(), actualUsageStatistics.getNumEmails());"},{"lineNumber":186,"author":{"gitId":"-"},"content":" assertEquals(expectedUsageStatistics.getNumSubmissions(), actualUsageStatistics.getNumSubmissions());"},{"lineNumber":187,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" fail(\"Unknown entity\");"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":193,"author":{"gitId":"-"},"content":" * Verifies that the given entity is present in the database."},{"lineNumber":194,"author":{"gitId":"-"},"content":" */"},{"lineNumber":195,"author":{"gitId":"-"},"content":" protected void verifyPresentInDatabase(BaseEntity expected) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" int retryLimit \u003d VERIFICATION_RETRY_COUNT;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" ApiOutput actual \u003d getEntity(expected);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" while (actual \u003d\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(VERIFICATION_RETRY_DELAY_IN_MS);"},{"lineNumber":201,"author":{"gitId":"-"},"content":" actual \u003d getEntity(expected);"},{"lineNumber":202,"author":{"gitId":"-"},"content":" }"},{"lineNumber":203,"author":{"gitId":"-"},"content":" verifyEquals(expected, actual);"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * Verifies that the given entity is absent in the database."},{"lineNumber":208,"author":{"gitId":"-"},"content":" */"},{"lineNumber":209,"author":{"gitId":"-"},"content":" protected void verifyAbsentInDatabase(BaseEntity expected) {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" int retryLimit \u003d VERIFICATION_RETRY_COUNT;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" ApiOutput actual \u003d getEntity(expected);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" while (actual !\u003d null \u0026\u0026 retryLimit \u003e 0) {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" retryLimit--;"},{"lineNumber":214,"author":{"gitId":"-"},"content":" ThreadHelper.waitFor(VERIFICATION_RETRY_DELAY_IN_MS);"},{"lineNumber":215,"author":{"gitId":"-"},"content":" actual \u003d getEntity(expected);"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":" assertNull(actual);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" private ApiOutput getEntity(BaseEntity entity) {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (entity instanceof Student) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" return getStudent((Student) entity);"},{"lineNumber":223,"author":{"gitId":"-"},"content":" } else if (entity instanceof FeedbackQuestion) {"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return getFeedbackQuestion((FeedbackQuestion) entity);"},{"lineNumber":225,"author":{"gitId":"-"},"content":" } else if (entity instanceof FeedbackResponse) {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" return getFeedbackResponse((FeedbackResponse) entity);"},{"lineNumber":227,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" throw new RuntimeException(\"Unknown entity type\");"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" protected abstract FeedbackQuestionData getFeedbackQuestion(FeedbackQuestion fq);"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":" protected abstract FeedbackResponseData getFeedbackResponse(FeedbackResponse fq);"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" protected abstract StudentData getStudent(Student student);"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"dishenggg":10,"-":228}},{"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/notification-banner/notification-banner.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"yuanxi1"},"content":"\u003cdiv id\u003d\"notification-banner\" class\u003d\"banner\" [ngClass]\u003d\"notifications[0].style | notificationStyleClass\" *ngIf\u003d\"isShown \u0026\u0026 notifications.length \u003e 0\" [attr.data-testid]\u003d\"notifications[0].notificationId\" @collapseAnim\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-close-notif\" type\u003d\"button\" class\u003d\"btn-close\" aria-label\u003d\"Close\" (click)\u003d\"closeNotification()\"\u003e\u003c/button\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003ch5\u003e{{ notifications[0].title }}\u003c/h5\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"banner-text\" [innerHTML]\u003d\"notifications[0].message\"\u003e\u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"d-flex flex-row-reverse mt-3 me-2\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-mark-as-read\" type\u003d\"button\" [ngClass]\u003d\"getButtonClass(notifications[0])\" (click)\u003d\"markNotificationAsRead(notifications[0])\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" Mark as Read"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"yuanxi1":1,"-":9}},{"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 index f7d649a..e9f7557 100644 --- a/TEAMMATES_teammates_master/commits.json +++ b/TEAMMATES_teammates_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"xenosf":[{"date":"2024-02-15","commitResults":[{"hash":"3c0126ef4feeda7cedcd8f098ee953f916856d70","isMergeCommit":false,"messageTitle":"[#12048] Migrate StudentSearchIndexingWorkerAction (#12733)","messageBody":"* Migrate StudentSearchIndexingWorkerAction\r\n\r\n* Add IT for StudentSearchIndexingWorkerAction\r\n\r\n* Fix javadoc for putStudentDocument\r\n\r\n* Refactor SQL logic and Datastore execute logic to separate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Reset student search collections before test\r\n\r\n* Rename test methods to use \"should\"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":0}}}]},{"date":"2024-02-27","commitResults":[{"hash":"2dad48b8d3bf32fb337f3021bcf7a9021f15a656","isMergeCommit":false,"messageTitle":"[#12048] Migrate GetSessionResultsAction (#12719)","messageBody":"* Migrate SessionResultsData\r\n\r\n* Add default entities\r\n\r\n* Add helper methods to assist migrated logic\r\n\r\n* Migrate buildCompleteGiverRecipientMap\r\n\r\n* Migrate checkSpecificAccessControl\r\n\r\n* Add default team instance for instructor\r\n\r\n* Migrate session results data logic\r\n\r\n* Use default team entity for instructor instead of const\r\n\r\n* Migrate non-db logic\r\n\r\n* Refactor Datastore and SQL action logic out to separate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Migrate DB logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Move default instructor team entity to const\r\n\r\n* Add test for SqlSessionResultsBundle\r\n\r\n* Fix SQL results bundle test\r\n\r\n* Add IT for GetSessionResultsAction\r\n\r\n* Fix action logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Remove unused method parameters\r\n\r\n* Fix persistence issues in test cases\r\n\r\n* Remove question getter for comment\r\n\r\n* Rename boolean methods to start with verb\r\n\r\n* Reword comment to clarify question ID\r\n\r\n* Refactor getting question UUID from param value\r\n\r\n* Remove unneeded getters\r\n\r\n* Remove entities from Const\r\n\r\n* Revert changes to SqlCourseRoster\r\n\r\n* Create and use missing response class\r\n\r\n* Refactor no response text to const\r\n\r\n* Migrate preview-related functionality\r\n\r\n* Migrate preview functionality for question output\r\n\r\n* Fix recipient section filter\r\n\r\n* Update test cases to handle question preview\r\n\r\n* Merge duplicate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add missing questions with non-visible preview responses\r\n\r\n* Remove outdated test\r\n\r\n* Edit for style and readability\r\n\r\n* Fix missing join\r\n\r\n* Fix section filtering logic\r\n\r\n* Fix checkstyle errors","fileTypesAndContributionMap":{"java":{"insertions":2563,"deletions":23}}}]},{"date":"2024-03-13","commitResults":[{"hash":"b8023350e370623921776a3cdc18776f65d1c3f6","isMergeCommit":false,"messageTitle":"[#12048] Add integration tests for FeedbackResponseCommentsDb (#12849)","messageBody":"* Migrate SessionResultsData\r\n\r\n* Add default entities\r\n\r\n* Add helper methods to assist migrated logic\r\n\r\n* Migrate buildCompleteGiverRecipientMap\r\n\r\n* Migrate checkSpecificAccessControl\r\n\r\n* Add default team instance for instructor\r\n\r\n* Migrate session results data logic\r\n\r\n* Use default team entity for instructor instead of const\r\n\r\n* Migrate non-db logic\r\n\r\n* Refactor Datastore and SQL action logic out to separate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Migrate DB logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Move default instructor team entity to const\r\n\r\n* Add test for SqlSessionResultsBundle\r\n\r\n* Fix SQL results bundle test\r\n\r\n* Add IT for GetSessionResultsAction\r\n\r\n* Fix action logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Remove unused method parameters\r\n\r\n* Fix persistence issues in test cases\r\n\r\n* Remove question getter for comment\r\n\r\n* Rename boolean methods to start with verb\r\n\r\n* Reword comment to clarify question ID\r\n\r\n* Refactor getting question UUID from param value\r\n\r\n* Remove unneeded getters\r\n\r\n* Remove entities from Const\r\n\r\n* Revert changes to SqlCourseRoster\r\n\r\n* Create and use missing response class\r\n\r\n* Refactor no response text to const\r\n\r\n* Migrate preview-related functionality\r\n\r\n* Migrate preview functionality for question output\r\n\r\n* Fix recipient section filter\r\n\r\n* Update test cases to handle question preview\r\n\r\n* Merge duplicate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add missing questions with non-visible preview responses\r\n\r\n* Remove outdated test\r\n\r\n* Edit for style and readability\r\n\r\n* Fix missing join\r\n\r\n* Fix section filtering logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add integration tests\r\n\r\n* Refactor tests for readability\r\n\r\n* Fix broken test cases\r\n\r\n* Rename test section key\r\n\r\n* Use separate json bundle for test data\r\n\r\n* Clear session when set up\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":8}}}]},{"date":"2024-03-14","commitResults":[{"hash":"931dea4d8747bfec25bd10309e2b722a743a6b7e","isMergeCommit":false,"messageTitle":"[#12048] Add integration tests for FeedbackResponsesDb (#12856)","messageBody":"* Migrate SessionResultsData\r\n\r\n* Add default entities\r\n\r\n* Add helper methods to assist migrated logic\r\n\r\n* Migrate buildCompleteGiverRecipientMap\r\n\r\n* Migrate checkSpecificAccessControl\r\n\r\n* Add default team instance for instructor\r\n\r\n* Migrate session results data logic\r\n\r\n* Use default team entity for instructor instead of const\r\n\r\n* Migrate non-db logic\r\n\r\n* Refactor Datastore and SQL action logic out to separate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Migrate DB logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Move default instructor team entity to const\r\n\r\n* Add test for SqlSessionResultsBundle\r\n\r\n* Fix SQL results bundle test\r\n\r\n* Add IT for GetSessionResultsAction\r\n\r\n* Fix action logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Remove unused method parameters\r\n\r\n* Fix persistence issues in test cases\r\n\r\n* Remove question getter for comment\r\n\r\n* Rename boolean methods to start with verb\r\n\r\n* Reword comment to clarify question ID\r\n\r\n* Refactor getting question UUID from param value\r\n\r\n* Remove unneeded getters\r\n\r\n* Remove entities from Const\r\n\r\n* Revert changes to SqlCourseRoster\r\n\r\n* Create and use missing response class\r\n\r\n* Refactor no response text to const\r\n\r\n* Migrate preview-related functionality\r\n\r\n* Migrate preview functionality for question output\r\n\r\n* Fix recipient section filter\r\n\r\n* Update test cases to handle question preview\r\n\r\n* Merge duplicate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add missing questions with non-visible preview responses\r\n\r\n* Remove outdated test\r\n\r\n* Edit for style and readability\r\n\r\n* Fix missing join\r\n\r\n* Fix section filtering logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add integration tests\r\n\r\n* Update and use typical bundle\r\n\r\n* Update test cases for updated bundle\r\n\r\n* Revert typical data bundle\r\n\r\n* Use separate data bundle for feedback responses test\r\n\r\n* Revert unrelated tests\r\n\r\n* Fix json formatting\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":215,"deletions":19}}}]}],"sopa301":[],"mingyuanc":[{"date":"2024-02-07","commitResults":[{"hash":"cc0bf4f77bc293c689f5e721d16aae14f150e152","isMergeCommit":false,"messageTitle":"[#12048] Migrate CreateInstructorAction (#12706)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":257,"deletions":37}}}]},{"date":"2024-02-18","commitResults":[{"hash":"8e757e2125448b07dbc7e46d94e8967c9925da4c","isMergeCommit":false,"messageTitle":"[#12048] Migrate instructor search indexing worker action (#12731)","messageBody":"* Fix lint\r\n\r\n* Migrate instructor search indexing worker action\r\n\r\n* Fix Checkstyle\r\n\r\n* Fix Checkstyle\r\n\r\n* Fix Checkstyle\r\n\r\n* Add testcases\r\n\r\n* Update comparator to Id\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e\r\nCo-authored-by: Nicolas \u003c25302138+NicolasCwy@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":0}}}]},{"date":"2024-02-19","commitResults":[{"hash":"d6c67fc9dd31c36f196be454a22cce955e1c8229","isMergeCommit":false,"messageTitle":"Add testcases for FeedbackResponseCommentsDbTest (#12755)","messageBody":"* Add CRUD testcases\r\n\r\n* Fix linting\r\n\r\n* Refactor getTypicalComment\r\n\r\n* Amend testDeleteComment testcase\r\n\r\n* Amend testDeleteComment testcase\r\n\r\n* Fix compile error\r\n\r\n* Revert linting changes\r\n\r\n---------\r\n\r\nCo-authored-by: Nicolas \u003c25302138+NicolasCwy@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":156,"deletions":1}}}]},{"date":"2024-03-09","commitResults":[{"hash":"ef31826b7ec1e1308c0e6016ba513e9c6afa3c58","isMergeCommit":false,"messageTitle":"Add testcases for FeedbackResponseCommentsLogicTest (#12769)","messageBody":"* Added testcase\r\n\r\n* Add new testcases\r\n\r\n* Remove dead store\r\n\r\n---------\r\n\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":0}}}]},{"date":"2024-03-27","commitResults":[{"hash":"0cfadeffbb74c112f2705ade1be7c6b0cf61d51f","isMergeCommit":false,"messageTitle":"[#12048] Migrate Feedback Rank Option E2E test (#12902)","messageBody":"* Initial commit\r\n\r\n* Fix lint\r\n\r\n* Follow convention and add test\r\n\r\n* Change file path\r\n\r\n* Fix requested changes\r\n\r\n* Fixed testcases\r\n\r\n* Fix lint\r\n\r\n* Add deepcopy\r\n\r\n* Fixed e2e test\r\n\r\n---------\r\n\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":4}}}]}],"jingting1412":[{"date":"2024-03-16","commitResults":[{"hash":"2d1080682a62f32981cb4b0edd497f0928bcd83b","isMergeCommit":false,"messageTitle":"[#12271] Docs: Upgrade to latest MarkBind version (#12893)","messageBody":"* Upgrade layouts\r\n\r\n* Add breadcrumb for pages\r\n\r\n* Fix puml diagrams\r\n\r\n* Make navbar sticky\r\n\r\n* Upgrade markbind version\r\n\r\n* Upgrade markbind\r\n\r\n* Upgrade markbind version\r\n\r\n* Update pages\r\n\r\n* Revert \"Upgrade markbind version\"\r\n\r\nThis reverts commit 76b2d44f3bc57d5bfdf03fdb2c01cb92a186105f.\r\n\r\n---------\r\n\r\nCo-authored-by: Zhang Ziqing \u003c69516975+ziqing26@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":43,"deletions":44}}}]}],"KevinEyo1":[],"LamJiuFong":[],"yiwen101":[],"jonasongg":[],"domoberzin":[{"date":"2024-02-04","commitResults":[{"hash":"333f582460d9b1ba7174321de3ea3113cc71c9db","isMergeCommit":false,"messageTitle":"[#12048] Migrate enroll students action (#12715)","messageBody":"* Modify student entity\r\n\r\n* Add update comment logic\r\n\r\n* Modify logic files for cascading update and creation for student\r\n\r\n* Add database queries for updating student\r\n\r\n* Update EnrollStudentsAction\r\n\r\n* Fix checkstyle\r\n\r\n* Remove extra query for editor update\r\n\r\n* Remove email update logic\r\n\r\n* Update javadocs\r\n\r\n* Copy over logic for Team and Section validation\r\n\r\n* Edit javadocs\r\n\r\n* Change StudentAttributes to Student instead\r\n\r\n* Fix lint issues\r\n\r\n* Fix lint issues\r\n\r\n* Fix component tests and lint\r\n\r\n* Remove ununsed method\r\n\r\n* Fix lint\r\n\r\n* Update validation logic to use Student\r\n\r\n* Update test case\r\n\r\n* Add tests for duplicate team across sections\r\n\r\n* Remove unused methods and add getSection to UsersLogic\r\n\r\n* Fix sorting logic\r\n\r\n* Change getName method calls for section and team\r\n\r\n* Remove unused methods\r\n\r\n* Add more detail to JavaDocs\r\n\r\n* Remove unusued methods\r\n\r\n* Use getCourseId instead of toString\r\n\r\n* Modify test case\r\n\r\n* Revert changes\r\n\r\n* Change toString to getCourseId\r\n\r\n* Update tests to include unregistered student\r\n\r\n* Fix trailing whitespaces","fileTypesAndContributionMap":{"java":{"insertions":875,"deletions":66}}}]},{"date":"2024-02-10","commitResults":[{"hash":"21ae95eab736f4c37933d3fa0fd9bd592c6b92d6","isMergeCommit":false,"messageTitle":"[#12048] Migrate search account requests action (#12726)","messageBody":"* feat: add search account request methods to SQL storage and logic layers\r\n\r\n* feat: migrate SearchAccountRequestsAction to use SQL logic\r\n\r\n* fix: failing tests\r\n\r\n* fix: remove commented line\r\n\r\n* fix: migrate AccountRequestSearch tests\r\n\r\n---------\r\n\r\nCo-authored-by: Dominic Lim \u003c46486515+domlimm@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":347,"deletions":5}}}]},{"date":"2024-02-18","commitResults":[{"hash":"c314aa9f3462f76ac3a3e8d15e58289181b31573","isMergeCommit":false,"messageTitle":"[#12048] Add tests for CoursesLogic (#12746)","messageBody":"* feat: add tests for CoursesLogic\r\n\r\n* fix: verify parameters of mocked logic classes\r\n\r\n* fix: lint issues\r\n\r\n* fix: add additional verification of parameters\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":319,"deletions":2}}}]},{"date":"2024-02-20","commitResults":[{"hash":"daba8ebd1ead324ae4e4b2daba64d2586538a9f5","isMergeCommit":false,"messageTitle":"[#12048] Migrate AccountRequestSearchIndexingWorkerAction (#12757)","messageBody":"* feat: migrate account request search indexing worker action\r\n\r\n* fix: remove datastore logic and old test\r\n\r\n* fix: remove NPE suppress","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":13}}}]},{"date":"2024-02-24","commitResults":[{"hash":"7a22ab856fb641e0d7897a00e45ed3c5024ab766","isMergeCommit":false,"messageTitle":"[#12048] Fix GetSessionResponseStatsActionIT (#12777)","messageBody":"* Migrate GetSessionResponseStatsAction\r\n\r\n* fix: fix NPE issues\r\n\r\n* fix: remove extra comments\r\n\r\n* fix: remove extra line\r\n\r\n---------\r\n\r\nCo-authored-by: Zhang Ziqing \u003czhangziqing9926@gmail.com\u003e\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Zhang Ziqing \u003c69516975+ziqing26@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":218,"deletions":15}}},{"hash":"7da77bb9ba38925e675b94d64dc6bff2d7d5bcc1","isMergeCommit":false,"messageTitle":"[#12048] Create IT for GetFeedbackSessionSubmittedGiverSetAction (#12778)","messageBody":"* Migrate GetSessionResponseStatsAction\r\n\r\n* fix: fix NPE issues\r\n\r\n* feat: add IT for GetFeedbackSessionSubmittedGiverSetAction\r\n\r\n* fix: remove extra comment\r\n\r\n* fix: remove duplicate method\r\n\r\n---------\r\n\r\nCo-authored-by: Zhang Ziqing \u003czhangziqing9926@gmail.com\u003e\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Zhang Ziqing \u003c69516975+ziqing26@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":3}}}]},{"date":"2024-02-26","commitResults":[{"hash":"500e7421dc31bd884ba6d2ff7a01b6abcabf646b","isMergeCommit":false,"messageTitle":"[#12048] Migrate Admin Notifications E2E Test (#12793)","messageBody":"* feat: add resources for admin notifications e2e test\r\n\r\n* fix: set created at on notification creation\r\n\r\n* feat: migrate admin notifications e2e test\r\n\r\n* fix: remove created at check for notifications\r\n\r\n* fix: remove extra comments\r\n\r\n* fix: remove explicit created at\r\n\r\n* fix: null check for created at\r\n\r\n* fix lint\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003ccedricongjh@gmail.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":34}}},{"hash":"203ec245f53c97be136208df3f583bfd6db97f8c","isMergeCommit":false,"messageTitle":"[#12048] Migrate AdminSearchPageE2ETest (#12838)","messageBody":"* migate admin search e2e\r\n\r\n* fix e2e test\r\n\r\n* fix failing tests\r\n\r\n* fix: add put sql document methods\r\n\r\n* fix: add migrated check back in\r\n\r\n* fix: add cleanup method\r\n\r\n* fix: add search document removal for account request\r\n\r\n* fix lint and tests\r\n\r\n* fix: json file formatting\r\n\r\n* fix: init both searchManagers\r\n\r\n* fix: add comments\r\n\r\n* fix: remove notifications field in data file\r\n\r\n---------\r\n\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":201,"deletions":45}}}]},{"date":"2024-03-03","commitResults":[{"hash":"0f9d99069cca05ac16878b0f5e0fa78bf629d96d","isMergeCommit":false,"messageTitle":"[#12048] Add tests for CourseDbIT (#12786)","messageBody":"* feat: add more coverage for methods in CoursesDb\r\n\r\n* fix: add further test cases\r\n\r\n---------\r\n\r\nCo-authored-by: Dominic Lim \u003c46486515+domlimm@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":165,"deletions":4}}}]},{"date":"2024-03-13","commitResults":[{"hash":"ccdb6ccf64330e83bff24d7b93e15f2081c30398","isMergeCommit":false,"messageTitle":"[#12048] Migrate InstructorSearchPageE2ETest (#12891)","messageBody":"* feat: migrate instructor search page e2e test\r\n\r\n* fix: add new line\r\n\r\n* fix axe test\r\n\r\n* remove extra whitespace","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}}]}],"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}}}]},{"date":"2024-02-06","commitResults":[{"hash":"f0279fa802b98f5dbf9d92c200168f21aa41ef62","isMergeCommit":false,"messageTitle":"[#12048] Migrate join course action (#12722)","messageBody":"* Add join course for student and instructor to AccountsLogic\r\n\r\n* Update AccountsLogic tests\r\n\r\n* Migrate JoinCourseAction\r\n\r\n* Add JoinCourseActionIT\r\n\r\n* Update to use usersLogic for student update\r\n\r\n* Fix failing IT caused by updates to typicalDataBundle\r\n\r\n* Fix failing IT\r\n\r\n* Remove print statements\r\n\r\n---------\r\n\r\nCo-authored-by: YX Z \u003cyxz@YXs-MacBook-Air-2.local\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":605,"deletions":12}}}]},{"date":"2024-02-14","commitResults":[{"hash":"33953dc064e3230bf0c27f2b591f5b06e212d8cf","isMergeCommit":false,"messageTitle":"[#12048] Migrate search students action (#12735)","messageBody":"* Migrate search students action and associated logic\r\n\r\n* Add tests for student search\r\n\r\n* Remove old test\r\n\r\n* Restore datastore test\r\n\r\n* Add support for dual db search\r\n\r\n* Suppress NPE warning\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","fileTypesAndContributionMap":{"java":{"insertions":528,"deletions":5}}}]},{"date":"2024-02-25","commitResults":[{"hash":"a913315da176e03961d0a0a4fae955571a5bf8aa","isMergeCommit":false,"messageTitle":"Add locale for java datetime formatter (#12826)","messageBody":"Co-authored-by: YX Z \u003cyxz@r-154-105-25-172.comp.nus.edu.sg\u003e","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2024-02-26","commitResults":[{"hash":"7b2a69c88dad53002650c37e12a16ba6e5564281","isMergeCommit":false,"messageTitle":"[#12048] Migrate Notification Banner E2E (#12840)","messageBody":"* Add locale for java datetime formatter\r\n\r\n* Migrate non-course content for NotificationBannerE2ETest\r\n\r\n* Fix linting\r\n\r\n* Fix snapshot test\r\n\r\n---------\r\n\r\nCo-authored-by: YX Z \u003cyxz@r-154-105-25-172.comp.nus.edu.sg\u003e\r\nCo-authored-by: YX Z \u003cyxz@YXs-MacBook-Air-2.local\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":14},"html":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-19","commitResults":[{"hash":"a34c3c57b22456de526d5af9a0317d502f44907a","isMergeCommit":false,"messageTitle":"[#12048] Migrate InstructorNotificationsPageE2E (#12906)","messageBody":"* Migrate InstructorNotificationsPageE2E\r\n\r\n* Fix unsaved transient entity error\r\n\r\n* Fix lint\r\n\r\n* Fix lint\r\n\r\n* Update testng xml\r\n\r\n---------\r\n\r\nCo-authored-by: YX Z \u003cyxz@YXs-MacBook-Air-2.local\u003e\r\nCo-authored-by: YX Z \u003cyxz@r-121-109-25-172.comp.nus.edu.sg\u003e\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":0}}}]}],"supermii2":[],"marquestye":[{"date":"2024-02-25","commitResults":[{"hash":"3191fd1c0a471a34b3dbbfae8e305946280b0d42","isMergeCommit":false,"messageTitle":"[#12048] Migrate UpdateStudentAction (#12727)","messageBody":"* Modify student entity\r\n\r\n* Add update comment logic\r\n\r\n* Modify logic files for cascading update and creation for student\r\n\r\n* Add database queries for updating student\r\n\r\n* Update EnrollStudentsAction\r\n\r\n* Fix checkstyle\r\n\r\n* Remove extra query for editor update\r\n\r\n* Remove email update logic\r\n\r\n* Update javadocs\r\n\r\n* Copy over logic for Team and Section validation\r\n\r\n* Edit javadocs\r\n\r\n* Change StudentAttributes to Student instead\r\n\r\n* Fix lint issues\r\n\r\n* Fix lint issues\r\n\r\n* Fix component tests and lint\r\n\r\n* Remove ununsed method\r\n\r\n* Fix lint\r\n\r\n* Update validation logic to use Student\r\n\r\n* Update test case\r\n\r\n* Add tests for duplicate team across sections\r\n\r\n* Migrate UpdateStudentAction and add tests\r\n\r\n* Remove resetStudentGoogleId\r\n\r\n* Refactor updateStudentCascade\r\n\r\n* Fix integration tests\r\n\r\n* Fix checkstyle\r\n\r\n* Fix integration tests\r\n\r\n* Fix lint\r\n\r\n* Add persist verification in test\r\n\r\n* Fix test\r\n\r\n* Fix tests\r\n\r\n* Remove unused method\r\n\r\n* Fix test\r\n\r\n* Fix test\r\n\r\n* Fix test\r\n\r\n* Split UpdateStudentActionIT into multiple testcases\r\n\r\n* Add test separators\r\n\r\n---------\r\n\r\nCo-authored-by: Dominic Berzin \u003cberzindominic@gmail.com\u003e\r\nCo-authored-by: domoberzin \u003c74132255+domoberzin@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":522,"deletions":36}}}]},{"date":"2024-03-10","commitResults":[{"hash":"bf5a2ac8506bc49ecd1c479b634991a6380452e3","isMergeCommit":false,"messageTitle":"[#12048] Add tests for FeedbackQuestionsDb (#12759)","messageBody":"* Add verification during feedback question creation\r\n\r\n* Add tests for FeedbackQuestionsDb\r\n\r\n* Fix missing javadocs\r\n\r\n* Fix feedback question creation logic\r\n\r\n* Add test\r\n\r\n* Reuse error message\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e\r\nCo-authored-by: Zhang Ziqing \u003c69516975+ziqing26@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":17}}}]}],"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":[{"date":"2024-02-04","commitResults":[{"hash":"c8723d594557a0afdc117d679b9b4dfa41b32b61","isMergeCommit":false,"messageTitle":"[#12048] Migrate GetCourseJoinStatusAction (#12713)","messageBody":"* Migrate get course join status\r\n\r\n* Add IT for getCourseJoinStatusAction\r\n\r\n* Fix checkstyle\r\n\r\n* Update testcases\r\n\r\n* Update testcases\r\n\r\n* Refactor code\r\n\r\n---------\r\n\r\nCo-authored-by: dishenggg \u003cdisheng05@gmail.com\u003e\r\nCo-authored-by: FergusMok \u003cFergusMok1@gmail.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":262,"deletions":25}}}]},{"date":"2024-02-11","commitResults":[{"hash":"13c58fd88627b5fd90ca5aa5d605a6d2420cf128","isMergeCommit":false,"messageTitle":"[#12048] Migrate PutDataBundleDocumentsAction (#12734)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":4}}}]},{"date":"2024-02-18","commitResults":[{"hash":"5bfb84739674612f2d8d4f7c9d0202f5f2dbab83","isMergeCommit":false,"messageTitle":"Merge restore deleted to db (#12751)","messageBody":"Co-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2024-02-22","commitResults":[{"hash":"5b3a96fdde95d6ab3fef6b861c2867efe92d15f4","isMergeCommit":false,"messageTitle":"[#12048] Add test cases for FeedbackSessionsDb (#12752)","messageBody":"* Add test for FeedbackSessionsDb\r\n\r\n* update test cases\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":253,"deletions":2}}}]},{"date":"2024-02-24","commitResults":[{"hash":"8125d5353307b0d225e90fc671c3f7420e8602a4","isMergeCommit":false,"messageTitle":"migrate instructor notif e2e (#12792)","messageBody":"Co-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":21}}}]},{"date":"2024-03-13","commitResults":[{"hash":"2ad2242e44748557db65217b87dda052cbf55f7c","isMergeCommit":false,"messageTitle":"[#12048] Add tests for FeedbackQuestionsDbIT (#12781)","messageBody":"* Add verification during feedback question creation\r\n\r\n* Add tests for FeedbackQuestionsDb\r\n\r\n* Fix missing javadocs\r\n\r\n* Fix feedback question creation logic\r\n\r\n* Add test\r\n\r\n* Reuse error message\r\n\r\n* Add tests for FeedbackQuestionsDbIT\r\n\r\n---------\r\n\r\nCo-authored-by: marquestye \u003ce0360581@u.nus.edu\u003e\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}}]},{"date":"2024-03-19","commitResults":[{"hash":"4dc0c6deff8108eba7be7d85ccdd2f770d2b1a8e","isMergeCommit":false,"messageTitle":"[#12048] Migrate FeedbackMsqQuestionE2ETest (#12904)","messageBody":"* Migrate test\r\n\r\n* Update test\r\n\r\n* Update sql json\r\n\r\n* fix lint\r\n\r\n* Fix lint\r\n\r\n* Update json and add test to xml\r\n\r\n* Revert \"Fix lint\"\r\n\r\nThis reverts commit f767b5233dc280290b31bc6e669b173d0befd26d.\r\n\r\n* Revert \"Update sql json\"\r\n\r\nThis reverts commit 45744750bb262c3537d5628e9beef1289e163fb6.\r\n\r\n* Fix xml\r\n\r\n* Change to use makeDeepCopy\r\n\r\n* sort questions\r\n\r\n* fix verifyEquals method\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003ccedricong99@gmail.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":217,"deletions":4}}}]},{"date":"2024-03-27","commitResults":[{"hash":"e51132e3c4f2c694c60ac53e3f4a2dd973f9c1c9","isMergeCommit":false,"messageTitle":"[#12048] Migrate FeedbackMcqQuestionE2ETest (#12820)","messageBody":"* Migrate MCQ E2E\r\n\r\n* Fix lint\r\n\r\n* Fix lint\r\n\r\n* Update xml\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":1}}}]}],"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":3088,"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":818,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"jingting1412":{"java":0,"js":0,"scss":0,"md":42,"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":2193,"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":1310,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":3,"ts":0},"supermii2":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"marquestye":{"java":682,"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":1002,"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":56913.87,"sopa301":0.0,"mingyuanc":1481.723,"jingting1412":63.600456,"KevinEyo1":0.0,"LamJiuFong":0.0,"yiwen101":0.0,"jonasongg":0.0,"domoberzin":11005.901,"asdfghjkxd":0.0,"yuanxi1":5848.7876,"supermii2":0.0,"marquestye":2892.109,"nknguyenhc":0.13444419,"Arif-Khalid":0.0,"NereusWB922":0.0,"dishenggg":1900.5032,"MadLamprey":0.0,"Tim-Siu":0.033611048},"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"}} +{"authorDailyContributionsMap":{"xenosf":[{"date":"2024-02-15","commitResults":[{"hash":"3c0126ef4feeda7cedcd8f098ee953f916856d70","isMergeCommit":false,"messageTitle":"[#12048] Migrate StudentSearchIndexingWorkerAction (#12733)","messageBody":"* Migrate StudentSearchIndexingWorkerAction\r\n\r\n* Add IT for StudentSearchIndexingWorkerAction\r\n\r\n* Fix javadoc for putStudentDocument\r\n\r\n* Refactor SQL logic and Datastore execute logic to separate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Reset student search collections before test\r\n\r\n* Rename test methods to use \"should\"","fileTypesAndContributionMap":{"java":{"insertions":116,"deletions":0}}}]},{"date":"2024-02-27","commitResults":[{"hash":"2dad48b8d3bf32fb337f3021bcf7a9021f15a656","isMergeCommit":false,"messageTitle":"[#12048] Migrate GetSessionResultsAction (#12719)","messageBody":"* Migrate SessionResultsData\r\n\r\n* Add default entities\r\n\r\n* Add helper methods to assist migrated logic\r\n\r\n* Migrate buildCompleteGiverRecipientMap\r\n\r\n* Migrate checkSpecificAccessControl\r\n\r\n* Add default team instance for instructor\r\n\r\n* Migrate session results data logic\r\n\r\n* Use default team entity for instructor instead of const\r\n\r\n* Migrate non-db logic\r\n\r\n* Refactor Datastore and SQL action logic out to separate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Migrate DB logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Move default instructor team entity to const\r\n\r\n* Add test for SqlSessionResultsBundle\r\n\r\n* Fix SQL results bundle test\r\n\r\n* Add IT for GetSessionResultsAction\r\n\r\n* Fix action logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Remove unused method parameters\r\n\r\n* Fix persistence issues in test cases\r\n\r\n* Remove question getter for comment\r\n\r\n* Rename boolean methods to start with verb\r\n\r\n* Reword comment to clarify question ID\r\n\r\n* Refactor getting question UUID from param value\r\n\r\n* Remove unneeded getters\r\n\r\n* Remove entities from Const\r\n\r\n* Revert changes to SqlCourseRoster\r\n\r\n* Create and use missing response class\r\n\r\n* Refactor no response text to const\r\n\r\n* Migrate preview-related functionality\r\n\r\n* Migrate preview functionality for question output\r\n\r\n* Fix recipient section filter\r\n\r\n* Update test cases to handle question preview\r\n\r\n* Merge duplicate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add missing questions with non-visible preview responses\r\n\r\n* Remove outdated test\r\n\r\n* Edit for style and readability\r\n\r\n* Fix missing join\r\n\r\n* Fix section filtering logic\r\n\r\n* Fix checkstyle errors","fileTypesAndContributionMap":{"java":{"insertions":2563,"deletions":23}}}]},{"date":"2024-03-13","commitResults":[{"hash":"b8023350e370623921776a3cdc18776f65d1c3f6","isMergeCommit":false,"messageTitle":"[#12048] Add integration tests for FeedbackResponseCommentsDb (#12849)","messageBody":"* Migrate SessionResultsData\r\n\r\n* Add default entities\r\n\r\n* Add helper methods to assist migrated logic\r\n\r\n* Migrate buildCompleteGiverRecipientMap\r\n\r\n* Migrate checkSpecificAccessControl\r\n\r\n* Add default team instance for instructor\r\n\r\n* Migrate session results data logic\r\n\r\n* Use default team entity for instructor instead of const\r\n\r\n* Migrate non-db logic\r\n\r\n* Refactor Datastore and SQL action logic out to separate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Migrate DB logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Move default instructor team entity to const\r\n\r\n* Add test for SqlSessionResultsBundle\r\n\r\n* Fix SQL results bundle test\r\n\r\n* Add IT for GetSessionResultsAction\r\n\r\n* Fix action logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Remove unused method parameters\r\n\r\n* Fix persistence issues in test cases\r\n\r\n* Remove question getter for comment\r\n\r\n* Rename boolean methods to start with verb\r\n\r\n* Reword comment to clarify question ID\r\n\r\n* Refactor getting question UUID from param value\r\n\r\n* Remove unneeded getters\r\n\r\n* Remove entities from Const\r\n\r\n* Revert changes to SqlCourseRoster\r\n\r\n* Create and use missing response class\r\n\r\n* Refactor no response text to const\r\n\r\n* Migrate preview-related functionality\r\n\r\n* Migrate preview functionality for question output\r\n\r\n* Fix recipient section filter\r\n\r\n* Update test cases to handle question preview\r\n\r\n* Merge duplicate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add missing questions with non-visible preview responses\r\n\r\n* Remove outdated test\r\n\r\n* Edit for style and readability\r\n\r\n* Fix missing join\r\n\r\n* Fix section filtering logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add integration tests\r\n\r\n* Refactor tests for readability\r\n\r\n* Fix broken test cases\r\n\r\n* Rename test section key\r\n\r\n* Use separate json bundle for test data\r\n\r\n* Clear session when set up\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":8}}}]},{"date":"2024-03-14","commitResults":[{"hash":"931dea4d8747bfec25bd10309e2b722a743a6b7e","isMergeCommit":false,"messageTitle":"[#12048] Add integration tests for FeedbackResponsesDb (#12856)","messageBody":"* Migrate SessionResultsData\r\n\r\n* Add default entities\r\n\r\n* Add helper methods to assist migrated logic\r\n\r\n* Migrate buildCompleteGiverRecipientMap\r\n\r\n* Migrate checkSpecificAccessControl\r\n\r\n* Add default team instance for instructor\r\n\r\n* Migrate session results data logic\r\n\r\n* Use default team entity for instructor instead of const\r\n\r\n* Migrate non-db logic\r\n\r\n* Refactor Datastore and SQL action logic out to separate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Migrate DB logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Move default instructor team entity to const\r\n\r\n* Add test for SqlSessionResultsBundle\r\n\r\n* Fix SQL results bundle test\r\n\r\n* Add IT for GetSessionResultsAction\r\n\r\n* Fix action logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Remove unused method parameters\r\n\r\n* Fix persistence issues in test cases\r\n\r\n* Remove question getter for comment\r\n\r\n* Rename boolean methods to start with verb\r\n\r\n* Reword comment to clarify question ID\r\n\r\n* Refactor getting question UUID from param value\r\n\r\n* Remove unneeded getters\r\n\r\n* Remove entities from Const\r\n\r\n* Revert changes to SqlCourseRoster\r\n\r\n* Create and use missing response class\r\n\r\n* Refactor no response text to const\r\n\r\n* Migrate preview-related functionality\r\n\r\n* Migrate preview functionality for question output\r\n\r\n* Fix recipient section filter\r\n\r\n* Update test cases to handle question preview\r\n\r\n* Merge duplicate methods\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add missing questions with non-visible preview responses\r\n\r\n* Remove outdated test\r\n\r\n* Edit for style and readability\r\n\r\n* Fix missing join\r\n\r\n* Fix section filtering logic\r\n\r\n* Fix checkstyle errors\r\n\r\n* Add integration tests\r\n\r\n* Update and use typical bundle\r\n\r\n* Update test cases for updated bundle\r\n\r\n* Revert typical data bundle\r\n\r\n* Use separate data bundle for feedback responses test\r\n\r\n* Revert unrelated tests\r\n\r\n* Fix json formatting\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":215,"deletions":19}}}]},{"date":"2024-04-09","commitResults":[{"hash":"1e9ccb091fac81793a93c460e017c076b797c66b","isMergeCommit":false,"messageTitle":"[#12048] Migrate AccountRequestsLogicTest (#12780)","messageBody":"* Migrate test cases for AccountRequestsLogic\r\n\r\n* Remove test case\r\n\r\n* Split test cases","fileTypesAndContributionMap":{"java":{"insertions":182,"deletions":0}}}]}],"sopa301":[],"mingyuanc":[{"date":"2024-02-07","commitResults":[{"hash":"cc0bf4f77bc293c689f5e721d16aae14f150e152","isMergeCommit":false,"messageTitle":"[#12048] Migrate CreateInstructorAction (#12706)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":257,"deletions":37}}}]},{"date":"2024-02-18","commitResults":[{"hash":"8e757e2125448b07dbc7e46d94e8967c9925da4c","isMergeCommit":false,"messageTitle":"[#12048] Migrate instructor search indexing worker action (#12731)","messageBody":"* Fix lint\r\n\r\n* Migrate instructor search indexing worker action\r\n\r\n* Fix Checkstyle\r\n\r\n* Fix Checkstyle\r\n\r\n* Fix Checkstyle\r\n\r\n* Add testcases\r\n\r\n* Update comparator to Id\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e\r\nCo-authored-by: Nicolas \u003c25302138+NicolasCwy@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":0}}}]},{"date":"2024-02-19","commitResults":[{"hash":"d6c67fc9dd31c36f196be454a22cce955e1c8229","isMergeCommit":false,"messageTitle":"Add testcases for FeedbackResponseCommentsDbTest (#12755)","messageBody":"* Add CRUD testcases\r\n\r\n* Fix linting\r\n\r\n* Refactor getTypicalComment\r\n\r\n* Amend testDeleteComment testcase\r\n\r\n* Amend testDeleteComment testcase\r\n\r\n* Fix compile error\r\n\r\n* Revert linting changes\r\n\r\n---------\r\n\r\nCo-authored-by: Nicolas \u003c25302138+NicolasCwy@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":156,"deletions":1}}}]},{"date":"2024-03-09","commitResults":[{"hash":"ef31826b7ec1e1308c0e6016ba513e9c6afa3c58","isMergeCommit":false,"messageTitle":"Add testcases for FeedbackResponseCommentsLogicTest (#12769)","messageBody":"* Added testcase\r\n\r\n* Add new testcases\r\n\r\n* Remove dead store\r\n\r\n---------\r\n\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":0}}}]},{"date":"2024-03-27","commitResults":[{"hash":"0cfadeffbb74c112f2705ade1be7c6b0cf61d51f","isMergeCommit":false,"messageTitle":"[#12048] Migrate Feedback Rank Option E2E test (#12902)","messageBody":"* Initial commit\r\n\r\n* Fix lint\r\n\r\n* Follow convention and add test\r\n\r\n* Change file path\r\n\r\n* Fix requested changes\r\n\r\n* Fixed testcases\r\n\r\n* Fix lint\r\n\r\n* Add deepcopy\r\n\r\n* Fixed e2e test\r\n\r\n---------\r\n\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":154,"deletions":4}}}]}],"jingting1412":[{"date":"2024-03-16","commitResults":[{"hash":"2d1080682a62f32981cb4b0edd497f0928bcd83b","isMergeCommit":false,"messageTitle":"[#12271] Docs: Upgrade to latest MarkBind version (#12893)","messageBody":"* Upgrade layouts\r\n\r\n* Add breadcrumb for pages\r\n\r\n* Fix puml diagrams\r\n\r\n* Make navbar sticky\r\n\r\n* Upgrade markbind version\r\n\r\n* Upgrade markbind\r\n\r\n* Upgrade markbind version\r\n\r\n* Update pages\r\n\r\n* Revert \"Upgrade markbind version\"\r\n\r\nThis reverts commit 76b2d44f3bc57d5bfdf03fdb2c01cb92a186105f.\r\n\r\n---------\r\n\r\nCo-authored-by: Zhang Ziqing \u003c69516975+ziqing26@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":43,"deletions":44}}}]}],"KevinEyo1":[],"LamJiuFong":[],"yiwen101":[],"jonasongg":[],"domoberzin":[{"date":"2024-02-04","commitResults":[{"hash":"333f582460d9b1ba7174321de3ea3113cc71c9db","isMergeCommit":false,"messageTitle":"[#12048] Migrate enroll students action (#12715)","messageBody":"* Modify student entity\r\n\r\n* Add update comment logic\r\n\r\n* Modify logic files for cascading update and creation for student\r\n\r\n* Add database queries for updating student\r\n\r\n* Update EnrollStudentsAction\r\n\r\n* Fix checkstyle\r\n\r\n* Remove extra query for editor update\r\n\r\n* Remove email update logic\r\n\r\n* Update javadocs\r\n\r\n* Copy over logic for Team and Section validation\r\n\r\n* Edit javadocs\r\n\r\n* Change StudentAttributes to Student instead\r\n\r\n* Fix lint issues\r\n\r\n* Fix lint issues\r\n\r\n* Fix component tests and lint\r\n\r\n* Remove ununsed method\r\n\r\n* Fix lint\r\n\r\n* Update validation logic to use Student\r\n\r\n* Update test case\r\n\r\n* Add tests for duplicate team across sections\r\n\r\n* Remove unused methods and add getSection to UsersLogic\r\n\r\n* Fix sorting logic\r\n\r\n* Change getName method calls for section and team\r\n\r\n* Remove unused methods\r\n\r\n* Add more detail to JavaDocs\r\n\r\n* Remove unusued methods\r\n\r\n* Use getCourseId instead of toString\r\n\r\n* Modify test case\r\n\r\n* Revert changes\r\n\r\n* Change toString to getCourseId\r\n\r\n* Update tests to include unregistered student\r\n\r\n* Fix trailing whitespaces","fileTypesAndContributionMap":{"java":{"insertions":875,"deletions":66}}}]},{"date":"2024-02-10","commitResults":[{"hash":"21ae95eab736f4c37933d3fa0fd9bd592c6b92d6","isMergeCommit":false,"messageTitle":"[#12048] Migrate search account requests action (#12726)","messageBody":"* feat: add search account request methods to SQL storage and logic layers\r\n\r\n* feat: migrate SearchAccountRequestsAction to use SQL logic\r\n\r\n* fix: failing tests\r\n\r\n* fix: remove commented line\r\n\r\n* fix: migrate AccountRequestSearch tests\r\n\r\n---------\r\n\r\nCo-authored-by: Dominic Lim \u003c46486515+domlimm@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":347,"deletions":5}}}]},{"date":"2024-02-18","commitResults":[{"hash":"c314aa9f3462f76ac3a3e8d15e58289181b31573","isMergeCommit":false,"messageTitle":"[#12048] Add tests for CoursesLogic (#12746)","messageBody":"* feat: add tests for CoursesLogic\r\n\r\n* fix: verify parameters of mocked logic classes\r\n\r\n* fix: lint issues\r\n\r\n* fix: add additional verification of parameters\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":319,"deletions":2}}}]},{"date":"2024-02-20","commitResults":[{"hash":"daba8ebd1ead324ae4e4b2daba64d2586538a9f5","isMergeCommit":false,"messageTitle":"[#12048] Migrate AccountRequestSearchIndexingWorkerAction (#12757)","messageBody":"* feat: migrate account request search indexing worker action\r\n\r\n* fix: remove datastore logic and old test\r\n\r\n* fix: remove NPE suppress","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":13}}}]},{"date":"2024-02-24","commitResults":[{"hash":"7a22ab856fb641e0d7897a00e45ed3c5024ab766","isMergeCommit":false,"messageTitle":"[#12048] Fix GetSessionResponseStatsActionIT (#12777)","messageBody":"* Migrate GetSessionResponseStatsAction\r\n\r\n* fix: fix NPE issues\r\n\r\n* fix: remove extra comments\r\n\r\n* fix: remove extra line\r\n\r\n---------\r\n\r\nCo-authored-by: Zhang Ziqing \u003czhangziqing9926@gmail.com\u003e\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Zhang Ziqing \u003c69516975+ziqing26@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":218,"deletions":15}}},{"hash":"7da77bb9ba38925e675b94d64dc6bff2d7d5bcc1","isMergeCommit":false,"messageTitle":"[#12048] Create IT for GetFeedbackSessionSubmittedGiverSetAction (#12778)","messageBody":"* Migrate GetSessionResponseStatsAction\r\n\r\n* fix: fix NPE issues\r\n\r\n* feat: add IT for GetFeedbackSessionSubmittedGiverSetAction\r\n\r\n* fix: remove extra comment\r\n\r\n* fix: remove duplicate method\r\n\r\n---------\r\n\r\nCo-authored-by: Zhang Ziqing \u003czhangziqing9926@gmail.com\u003e\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Zhang Ziqing \u003c69516975+ziqing26@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":3}}}]},{"date":"2024-02-26","commitResults":[{"hash":"500e7421dc31bd884ba6d2ff7a01b6abcabf646b","isMergeCommit":false,"messageTitle":"[#12048] Migrate Admin Notifications E2E Test (#12793)","messageBody":"* feat: add resources for admin notifications e2e test\r\n\r\n* fix: set created at on notification creation\r\n\r\n* feat: migrate admin notifications e2e test\r\n\r\n* fix: remove created at check for notifications\r\n\r\n* fix: remove extra comments\r\n\r\n* fix: remove explicit created at\r\n\r\n* fix: null check for created at\r\n\r\n* fix lint\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003ccedricongjh@gmail.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":34}}},{"hash":"203ec245f53c97be136208df3f583bfd6db97f8c","isMergeCommit":false,"messageTitle":"[#12048] Migrate AdminSearchPageE2ETest (#12838)","messageBody":"* migate admin search e2e\r\n\r\n* fix e2e test\r\n\r\n* fix failing tests\r\n\r\n* fix: add put sql document methods\r\n\r\n* fix: add migrated check back in\r\n\r\n* fix: add cleanup method\r\n\r\n* fix: add search document removal for account request\r\n\r\n* fix lint and tests\r\n\r\n* fix: json file formatting\r\n\r\n* fix: init both searchManagers\r\n\r\n* fix: add comments\r\n\r\n* fix: remove notifications field in data file\r\n\r\n---------\r\n\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":201,"deletions":45}}}]},{"date":"2024-03-03","commitResults":[{"hash":"0f9d99069cca05ac16878b0f5e0fa78bf629d96d","isMergeCommit":false,"messageTitle":"[#12048] Add tests for CourseDbIT (#12786)","messageBody":"* feat: add more coverage for methods in CoursesDb\r\n\r\n* fix: add further test cases\r\n\r\n---------\r\n\r\nCo-authored-by: Dominic Lim \u003c46486515+domlimm@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":165,"deletions":4}}}]},{"date":"2024-03-13","commitResults":[{"hash":"ccdb6ccf64330e83bff24d7b93e15f2081c30398","isMergeCommit":false,"messageTitle":"[#12048] Migrate InstructorSearchPageE2ETest (#12891)","messageBody":"* feat: migrate instructor search page e2e test\r\n\r\n* fix: add new line\r\n\r\n* fix axe test\r\n\r\n* remove extra whitespace","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}}]},{"date":"2024-04-09","commitResults":[{"hash":"84ed244ade96870b71346808916568ae41b64b92","isMergeCommit":false,"messageTitle":"[#12048] Migrate AdminSearchPageE2ETest SQL (#12811)","messageBody":"* test e2e changes\r\n\r\n* fix: reduce e2e test json file size\r\n\r\n* fix student key\r\n\r\n* fix course key\r\n\r\n* fix instructor keys\r\n\r\n* fix filepath\r\n\r\n* fix e2e test\r\n\r\n* remove extra data from bundle\r\n\r\n* Add correct removal logic to avoid constraint violation\r\n\r\n* Fix e2e tests and lint\r\n\r\nfix reset google id test\r\n\r\nfix e2e tests\r\n\r\nfix e2e tests\r\n\r\nfix tests\r\n\r\nremove double click\r\n\r\nfix unknown symbol\r\n\r\nadd toast check\r\n\r\nchange toast verification message\r\n\r\nremove toast check\r\n\r\n* fix: add null check\r\n\r\n* move admin search page e2e test to sql cases\r\n\r\n* Rename AdminSearchPageE2ETest_SQLEntities.json to AdminSearchPageE2ETest_SqlEntities.json\r\n\r\n* fix failing test\r\n\r\n* fix: remove extra null check\r\n\r\n* fix: add test to e2e sql xml file\r\n\r\n* fix function call\r\n\r\n* remove unnecessary changes\r\n\r\n* create new file for sql entities\r\n\r\n* revert unnecessary changes\r\n\r\n* remove trailing whitespace\r\n\r\n* add teardown for account requests\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":446,"deletions":11}}}]}],"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}}}]},{"date":"2024-02-06","commitResults":[{"hash":"f0279fa802b98f5dbf9d92c200168f21aa41ef62","isMergeCommit":false,"messageTitle":"[#12048] Migrate join course action (#12722)","messageBody":"* Add join course for student and instructor to AccountsLogic\r\n\r\n* Update AccountsLogic tests\r\n\r\n* Migrate JoinCourseAction\r\n\r\n* Add JoinCourseActionIT\r\n\r\n* Update to use usersLogic for student update\r\n\r\n* Fix failing IT caused by updates to typicalDataBundle\r\n\r\n* Fix failing IT\r\n\r\n* Remove print statements\r\n\r\n---------\r\n\r\nCo-authored-by: YX Z \u003cyxz@YXs-MacBook-Air-2.local\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":605,"deletions":12}}}]},{"date":"2024-02-14","commitResults":[{"hash":"33953dc064e3230bf0c27f2b591f5b06e212d8cf","isMergeCommit":false,"messageTitle":"[#12048] Migrate search students action (#12735)","messageBody":"* Migrate search students action and associated logic\r\n\r\n* Add tests for student search\r\n\r\n* Remove old test\r\n\r\n* Restore datastore test\r\n\r\n* Add support for dual db search\r\n\r\n* Suppress NPE warning\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","fileTypesAndContributionMap":{"java":{"insertions":528,"deletions":5}}}]},{"date":"2024-02-25","commitResults":[{"hash":"a913315da176e03961d0a0a4fae955571a5bf8aa","isMergeCommit":false,"messageTitle":"Add locale for java datetime formatter (#12826)","messageBody":"Co-authored-by: YX Z \u003cyxz@r-154-105-25-172.comp.nus.edu.sg\u003e","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2024-02-26","commitResults":[{"hash":"7b2a69c88dad53002650c37e12a16ba6e5564281","isMergeCommit":false,"messageTitle":"[#12048] Migrate Notification Banner E2E (#12840)","messageBody":"* Add locale for java datetime formatter\r\n\r\n* Migrate non-course content for NotificationBannerE2ETest\r\n\r\n* Fix linting\r\n\r\n* Fix snapshot test\r\n\r\n---------\r\n\r\nCo-authored-by: YX Z \u003cyxz@r-154-105-25-172.comp.nus.edu.sg\u003e\r\nCo-authored-by: YX Z \u003cyxz@YXs-MacBook-Air-2.local\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":14},"html":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-19","commitResults":[{"hash":"a34c3c57b22456de526d5af9a0317d502f44907a","isMergeCommit":false,"messageTitle":"[#12048] Migrate InstructorNotificationsPageE2E (#12906)","messageBody":"* Migrate InstructorNotificationsPageE2E\r\n\r\n* Fix unsaved transient entity error\r\n\r\n* Fix lint\r\n\r\n* Fix lint\r\n\r\n* Update testng xml\r\n\r\n---------\r\n\r\nCo-authored-by: YX Z \u003cyxz@YXs-MacBook-Air-2.local\u003e\r\nCo-authored-by: YX Z \u003cyxz@r-121-109-25-172.comp.nus.edu.sg\u003e\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":0}}}]}],"supermii2":[],"marquestye":[{"date":"2024-02-25","commitResults":[{"hash":"3191fd1c0a471a34b3dbbfae8e305946280b0d42","isMergeCommit":false,"messageTitle":"[#12048] Migrate UpdateStudentAction (#12727)","messageBody":"* Modify student entity\r\n\r\n* Add update comment logic\r\n\r\n* Modify logic files for cascading update and creation for student\r\n\r\n* Add database queries for updating student\r\n\r\n* Update EnrollStudentsAction\r\n\r\n* Fix checkstyle\r\n\r\n* Remove extra query for editor update\r\n\r\n* Remove email update logic\r\n\r\n* Update javadocs\r\n\r\n* Copy over logic for Team and Section validation\r\n\r\n* Edit javadocs\r\n\r\n* Change StudentAttributes to Student instead\r\n\r\n* Fix lint issues\r\n\r\n* Fix lint issues\r\n\r\n* Fix component tests and lint\r\n\r\n* Remove ununsed method\r\n\r\n* Fix lint\r\n\r\n* Update validation logic to use Student\r\n\r\n* Update test case\r\n\r\n* Add tests for duplicate team across sections\r\n\r\n* Migrate UpdateStudentAction and add tests\r\n\r\n* Remove resetStudentGoogleId\r\n\r\n* Refactor updateStudentCascade\r\n\r\n* Fix integration tests\r\n\r\n* Fix checkstyle\r\n\r\n* Fix integration tests\r\n\r\n* Fix lint\r\n\r\n* Add persist verification in test\r\n\r\n* Fix test\r\n\r\n* Fix tests\r\n\r\n* Remove unused method\r\n\r\n* Fix test\r\n\r\n* Fix test\r\n\r\n* Fix test\r\n\r\n* Split UpdateStudentActionIT into multiple testcases\r\n\r\n* Add test separators\r\n\r\n---------\r\n\r\nCo-authored-by: Dominic Berzin \u003cberzindominic@gmail.com\u003e\r\nCo-authored-by: domoberzin \u003c74132255+domoberzin@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":522,"deletions":36}}}]},{"date":"2024-03-10","commitResults":[{"hash":"bf5a2ac8506bc49ecd1c479b634991a6380452e3","isMergeCommit":false,"messageTitle":"[#12048] Add tests for FeedbackQuestionsDb (#12759)","messageBody":"* Add verification during feedback question creation\r\n\r\n* Add tests for FeedbackQuestionsDb\r\n\r\n* Fix missing javadocs\r\n\r\n* Fix feedback question creation logic\r\n\r\n* Add test\r\n\r\n* Reuse error message\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e\r\nCo-authored-by: Zhang Ziqing \u003c69516975+ziqing26@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":169,"deletions":17}}}]}],"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":[{"date":"2024-02-04","commitResults":[{"hash":"c8723d594557a0afdc117d679b9b4dfa41b32b61","isMergeCommit":false,"messageTitle":"[#12048] Migrate GetCourseJoinStatusAction (#12713)","messageBody":"* Migrate get course join status\r\n\r\n* Add IT for getCourseJoinStatusAction\r\n\r\n* Fix checkstyle\r\n\r\n* Update testcases\r\n\r\n* Update testcases\r\n\r\n* Refactor code\r\n\r\n---------\r\n\r\nCo-authored-by: dishenggg \u003cdisheng05@gmail.com\u003e\r\nCo-authored-by: FergusMok \u003cFergusMok1@gmail.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":262,"deletions":25}}}]},{"date":"2024-02-11","commitResults":[{"hash":"13c58fd88627b5fd90ca5aa5d605a6d2420cf128","isMergeCommit":false,"messageTitle":"[#12048] Migrate PutDataBundleDocumentsAction (#12734)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":4}}}]},{"date":"2024-02-18","commitResults":[{"hash":"5bfb84739674612f2d8d4f7c9d0202f5f2dbab83","isMergeCommit":false,"messageTitle":"Merge restore deleted to db (#12751)","messageBody":"Co-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2024-02-22","commitResults":[{"hash":"5b3a96fdde95d6ab3fef6b861c2867efe92d15f4","isMergeCommit":false,"messageTitle":"[#12048] Add test cases for FeedbackSessionsDb (#12752)","messageBody":"* Add test for FeedbackSessionsDb\r\n\r\n* update test cases\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":253,"deletions":2}}}]},{"date":"2024-02-24","commitResults":[{"hash":"8125d5353307b0d225e90fc671c3f7420e8602a4","isMergeCommit":false,"messageTitle":"migrate instructor notif e2e (#12792)","messageBody":"Co-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":21}}}]},{"date":"2024-03-13","commitResults":[{"hash":"2ad2242e44748557db65217b87dda052cbf55f7c","isMergeCommit":false,"messageTitle":"[#12048] Add tests for FeedbackQuestionsDbIT (#12781)","messageBody":"* Add verification during feedback question creation\r\n\r\n* Add tests for FeedbackQuestionsDb\r\n\r\n* Fix missing javadocs\r\n\r\n* Fix feedback question creation logic\r\n\r\n* Add test\r\n\r\n* Reuse error message\r\n\r\n* Add tests for FeedbackQuestionsDbIT\r\n\r\n---------\r\n\r\nCo-authored-by: marquestye \u003ce0360581@u.nus.edu\u003e\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}}]},{"date":"2024-03-19","commitResults":[{"hash":"4dc0c6deff8108eba7be7d85ccdd2f770d2b1a8e","isMergeCommit":false,"messageTitle":"[#12048] Migrate FeedbackMsqQuestionE2ETest (#12904)","messageBody":"* Migrate test\r\n\r\n* Update test\r\n\r\n* Update sql json\r\n\r\n* fix lint\r\n\r\n* Fix lint\r\n\r\n* Update json and add test to xml\r\n\r\n* Revert \"Fix lint\"\r\n\r\nThis reverts commit f767b5233dc280290b31bc6e669b173d0befd26d.\r\n\r\n* Revert \"Update sql json\"\r\n\r\nThis reverts commit 45744750bb262c3537d5628e9beef1289e163fb6.\r\n\r\n* Fix xml\r\n\r\n* Change to use makeDeepCopy\r\n\r\n* sort questions\r\n\r\n* fix verifyEquals method\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e\r\nCo-authored-by: Cedric Ong \u003ccedricong99@gmail.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":217,"deletions":4}}}]},{"date":"2024-03-27","commitResults":[{"hash":"e51132e3c4f2c694c60ac53e3f4a2dd973f9c1c9","isMergeCommit":false,"messageTitle":"[#12048] Migrate FeedbackMcqQuestionE2ETest (#12820)","messageBody":"* Migrate MCQ E2E\r\n\r\n* Fix lint\r\n\r\n* Fix lint\r\n\r\n* Update xml\r\n\r\n---------\r\n\r\nCo-authored-by: Cedric Ong \u003c67156011+cedricongjh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":1}}}]}],"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":3270,"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":818,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"jingting1412":{"java":0,"js":0,"scss":0,"md":42,"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":2612,"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":1310,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":3,"ts":0},"supermii2":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"marquestye":{"java":682,"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":1002,"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":51513.664,"sopa301":0.0,"mingyuanc":1339.8951,"jingting1412":57.33754,"KevinEyo1":0.0,"LamJiuFong":0.0,"yiwen101":0.0,"jonasongg":0.0,"domoberzin":11403.088,"asdfghjkxd":0.0,"yuanxi1":5280.765,"supermii2":0.0,"marquestye":2608.659,"nknguyenhc":0.121205345,"Arif-Khalid":0.0,"NereusWB922":0.0,"dishenggg":1719.7587,"MadLamprey":0.0,"Tim-Siu":0.030301338},"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 index 4c7b04d80b85862bd3bc79af2a4477dc8cd7ddc6..25e6ed3909c7ae2ae6c8a2d26fedd6d925c8c232 100644 GIT binary patch delta 1004452 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

t`KvPoXGG+D9r@Uk>> zl=d4hT(tv?+k3e?ius5fAquYo&TJhrMwZQ>4KI(CFT-AZGJz+Mrut|P|1>b^RTpy< z>db(!>g(DFOq&564g~M~a_>)F`z6E!?W8o73B~{|e75Aw;e95CuvYoKh(;7JCHHnP z6JkHPJFu*fYf#UxMp=_*&c-yoWA`U;K&hg=kWd=VQg)CqM3|k^R{pd+3+XkrP{*0a zGRx`#cZ=AF!(L91{>#7Kxb?B!Nip%1hkOXDZEEYmf9&3Tc_3%e5BP1{Em$Jf?Nc&n zD$leYUVh>H;=IcmXCFzX+z5&i=WObP2U42+8q8u3Nj1-y)?M2t9e_UlO@ z=q{cEnAaUg_0qFuE-s*)$I+s58lTU?l(&eeu4wwZ+SvTe7W)obPnO)zQm4F-QvO?l znAn3zez*f(ZrUFhk(FQ^9gM1p(`KJt8b}zpm;f$$U)&4OkQ;-$dn1oSXZz^A&H z>&3@SQJ&S##|F(?jGwvAwOsump2} zqnkeqNAk|4@KyK#0Cf<7cIbo_7*&-9LZ87>RWq9DnhyAX+=#gG~%^mh7OpS z_d8TMeIR}dDF%?{o`t^QH^RB(V^{0L+8BU3yu!dDt5`5$POk(x(AD^qFH)KNmRNIf ze7B3dm1n1K^p^;2uu^=@+01zs?ACb#&)LV)9;T5jRe2^79wqY~wG+8#T|%p(`;I58 z9$5#2=V}-!fQpR(qWu2OxR*T~Gw~3~tw4;2Q#sNlhzQ&ZOqZ)%5Dl4amQ@*S*@XNF z7=5ia;Hy-G!CCxKG?MbLL)!2W84y!Bx<}?Br)ULoC=dWlN+02^TpS}Pqc

^Qz3B6RHK0|Sx3lWA7}^$JYVMDQPN@X8hO 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

T}}M7`qEA)ieqhMy)_@)UQRUrXYA=Ff6n! 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

>zC^F(O>iW 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�S5$^p?ywZ-jwV^lkz16ik28yKC>)lGb_}1~E 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
v@0_5miI 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
}@iH)Ov;)belarr}P?@ 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 z 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%0Dn_Hl!(+1EMEb3UYGju~9p!{q+e_W^s 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�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%0A`sQG!HdDj)#m7K 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

RHh<$CXLWGj;g>#am9WDk=k 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

+wL?{=@*ns7LQgn~;3MjF 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 delta 755159 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�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%0D&L;&8JV4P8G--+x9G#08dpk}Vqz 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

1PS)kY;flc{hPa6EQ^(XClHw# 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�##dPUC3Vluj;?U3_1v^Q_A7x@%7pH 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⋙_s2C&<+t-0YOrx^{LsVqh4jg50)y{ql5uLU5 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

?aayEX6uDfO9-LA~i%N6Cj_q!yiQY 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 OLWNHPhpvtNCjB3;UKsTN diff --git a/markbind_markbind_master/authorship.json b/markbind_markbind_master/authorship.json index af10d7c..dd8e779 100644 --- a/markbind_markbind_master/authorship.json +++ b/markbind_markbind_master/authorship.json @@ -1 +1 @@ -[{"path":".github/workflows/pr-merge.yml","fileType":"yml","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"name: Pull Request Review Action"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"on:"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" pull_request_target:"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" types:"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" - closed"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"concurrency:"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" cancel-in-progress: true"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"jobs:"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" check-pr-label:"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" if: ${{ github.event.pull_request.merged }}"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" runs-on: ubuntu-latest"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" steps:"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" - uses: actions/checkout@v3"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" - name: Check for PR description label"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" id: check_pr_description_label"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" run: |"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" python scripts/process_message.py \"${TEXT_BODY}\" \u003e processed_body.txt"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" processed_body\u003d$(cat processed_body.txt)"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" proposed_version_impact\u003d$(echo \"$processed_body\" | awk \u0027/Major \\\\\\(when you make incompatible API changes\\\\\\)/,/Patch \\\\\\(when you make backward compatible bug fixes\\\\\\)/\u0027)"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" is_major\u003d$(echo \"$proposed_version_impact\" | grep -qi \u0027\\[X\\] Major\u0027; echo $((1-$?)))"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" is_minor\u003d$(echo \"$proposed_version_impact\" | grep -qi \u0027\\[X\\] Minor\u0027; echo $((1-$?)))"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" is_patch\u003d$(echo \"$proposed_version_impact\" | grep -qi \u0027\\[X\\] Patch\u0027; echo $((1-$?)))"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" num_labels_chosen\u003d$(($is_major + $is_minor + $is_patch))"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" echo \"num_labels_chosen\u003d$num_labels_chosen\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" if [[ \"$num_labels_chosen\" -eq 0 ]]; then"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" echo \"message\u003d$(echo \"@${MERGE_AUTHOR} Each PR must have a SEMVER impact label, please remember to label the PR properly.\")\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" elif [[ \"$num_labels_chosen\" -ge 2 ]]; then"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" echo \"message\u003d$(echo \"@${MERGE_AUTHOR} Each PR can only have one SEMVER impact label, please remember to label the PR properly.\")\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":" else"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" echo \"message\u003d$(echo \"SEMVER impact selected.\")\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" echo \"chosen_label\u003d$("},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" if [ \"$is_major\" -eq 1 ]; then"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" echo \"r.Major\""},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" elif [ \"$is_minor\" -eq 1 ]; then"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" echo \"r.Minor\""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" elif [ \"$is_patch\" -eq 1 ]; then"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" echo \"r.Patch\""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" fi"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" )\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" fi"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" env:"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" TEXT_BODY: ${{ github.event.pull_request.body }}"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" MERGE_AUTHOR: ${{ github.event.sender.login }}"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" - name: Assign label based on version impact"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" uses: actions/github-script@v7"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" with:"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" script: |"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" if (process.env.NUM_LABELS_CHOSEN !\u003d 1) {"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" github.rest.issues.createComment({"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" issue_number: context.payload.pull_request.number,"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" owner: context.repo.owner,"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" repo: context.repo.repo,"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" body: process.env.MESSAGE,"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" });"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" } else {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" github.rest.issues.addLabels({"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" issue_number: context.payload.pull_request.number,"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" owner: context.repo.owner,"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" repo: context.repo.repo,"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":" labels: [process.env.CHOSEN_LABEL]"},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":" });"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" env:"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" NUM_LABELS_CHOSEN: ${{ steps.check_pr_description_label.outputs.num_labels_chosen }}"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" MESSAGE: ${{ steps.check_pr_description_label.outputs.message }}"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" CHOSEN_LABEL: ${{ steps.check_pr_description_label.outputs.chosen_label }}"}],"authorContributionMap":{"KevinEyo1":69}},{"path":".github/workflows/pr-message-reminder.yml","fileType":"yml","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"name: PR Message Reminder"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"on:"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" push:"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" branches:"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" - master"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" tags:"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" - \u0027v[0-9]+.[0-9]+.[0-9]+\u0027"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" pull_request:"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" types:"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" - opened"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" - synchronize"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" - reopened"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" - edited"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"concurrency:"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" cancel-in-progress: true"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"jobs:"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" remind-pr-author:"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" if: github.event_name \u003d\u003d \u0027pull_request\u0027"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" runs-on: ubuntu-latest"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" "},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" steps:"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" - uses: actions/checkout@v3"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" - name: Extract Proposed Commit Message"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" run: |"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" python scripts/process_message.py \"${TEXT_BODY}\" \u003e processed_body.txt"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" processed_body\u003d$(cat processed_body.txt)"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" proposed_commit_message\u003d$(echo \"$processed_body\" | awk \u0027/\\\\*\\\\*Proposed commit message: \\\\\\(wrap lines at 72 characters\\\\\\)\\\\*\\\\*/,/\\\\*\\\\*Checklist:\\\\*\\\\*/\u0027 | tail -n +2 | head -n -3)"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" echo \"Proposed commit message:\""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":" echo \"$proposed_commit_message\""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" if ! grep -q \u0027[^[:space:]]\u0027 \u003c\u003c\u003c \"$proposed_commit_message\"; then"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" echo \"Please fill in the proposed commit message section in the pull request description.\""},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" exit 1"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" fi"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" env:"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" TEXT_BODY: ${{ github.event.pull_request.body }}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":39}},{"path":".stylelintrc.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"module.exports \u003d {"},{"lineNumber":2,"author":{"gitId":"LamJiuFong"},"content":" \"extends\": [\"stylelint-config-standard\", \"stylelint-config-recommended-vue\"],"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":" \"plugins\": [\"@stylistic/stylelint-plugin\"],"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"rules\": {"},{"lineNumber":5,"author":{"gitId":"LamJiuFong"},"content":" \"@stylistic/indentation\": [4, { baseIndentLevel: 1 } ],"},{"lineNumber":6,"author":{"gitId":"-"},"content":" // MarkBind generates some blank CSS files when initialising a site,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" // which violates the no-empty-source rule"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"no-empty-source\": null"},{"lineNumber":9,"author":{"gitId":"-"},"content":" }"},{"lineNumber":10,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"LamJiuFong":3,"-":7}},{"path":"docs/_markbind/layouts/userGuide.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% include \"_markbind/layouts/headers/header.md\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" User Guide"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"* [Getting Started]({{baseUrl}}/userGuide/gettingStarted.html)"},{"lineNumber":13,"author":{"gitId":"-"},"content":"* Authoring Contents :expanded:"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * [Overview]({{baseUrl}}/userGuide/authoringContents.html)"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * [Adding Pages]({{baseUrl}}/userGuide/addingPages.html)"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * [MarkBind Syntax Overview]({{baseUrl}}/userGuide/markBindSyntaxOverview.html)"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * [Formatting Contents]({{baseUrl}}/userGuide/formattingContents.html)"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * [Using Components]({{baseUrl}}/userGuide/usingComponents.html) :expanded:"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * [Presentation]({{baseUrl}}/userGuide/components/presentation.html)"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * [Images \u0026 Diagrams]({{baseUrl}}/userGuide/components/imagesAndDiagrams.html)"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * [Pop-Ups]({{baseUrl}}/userGuide/components/popups.html)"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * [Navigation]({{baseUrl}}/userGuide/components/navigation.html)"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * [Others]({{baseUrl}}/userGuide/components/others.html)"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * [Advanced]({{baseUrl}}/userGuide/components/advanced.html)"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * [Using HTML, JavaScript, CSS]({{baseUrl}}/userGuide/usingHtmlJavaScriptCss.html)"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * [Tweaking the Page Structure]({{baseUrl}}/userGuide/tweakingThePageStructure.html)"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * [Reusing Contents]({{baseUrl}}/userGuide/reusingContents.html)"},{"lineNumber":28,"author":{"gitId":"-"},"content":"* Working with Sites :expanded:"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * [Overview]({{baseUrl}}/userGuide/workingWithSites.html)"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * [Setting Site Properties]({{baseUrl}}/userGuide/settingSiteProperties.html)"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Using Plugins]({{baseUrl}}/userGuide/usingPlugins.html)"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Making the Site Searchable]({{baseUrl}}/userGuide/makingTheSiteSearchable.html)"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [Applying Themes]({{baseUrl}}/userGuide/themes.html)"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Deploying the Site]({{baseUrl}}/userGuide/deployingTheSite.html)"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * [MarkBind in the Project Workflow]({{baseUrl}}/userGuide/markBindInTheProjectWorkflow.html)"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Redirecting to a Custom 404 Page]({{baseUrl}}/userGuide/redirectingToACustom404Page.html)"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Adding Navigation Buttons]({{baseUrl}}/userGuide/addingNavigationButtons.html)"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Templates]({{baseUrl}}/userGuide/templates.html)"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* References :expanded:"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [CLI Commands]({{baseUrl}}/userGuide/cliCommands.html)"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Reader-Facing Features]({{baseUrl}}/userGuide/readerFacingFeatures.html)"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" * [Syntax Reference]({{baseUrl}}/userGuide/syntaxReference.html)"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * [`site.json` File]({{baseUrl}}/userGuide/siteJsonFile.html)"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [`.gitignore` File]({{baseUrl}}/userGuide/gitignoreFile.html)"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Tips \u0026 Tricks]({{baseUrl}}/userGuide/tipsAndTricks.html)"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Troubleshooting]({{baseUrl}}/userGuide/troubleshooting.html)"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * [Glossary]({{baseUrl}}/userGuide/glossary.html)"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cbreadcrumb /\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" {{ content }}"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"footers/footer.md\" /\u003e"}],"authorContributionMap":{"jingting1412":1,"-":62}},{"path":"docs/css/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"docs/devGuide/bootcamp/exploreMarkBind.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Explore MarkBind as a User\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" title: \"{{ title }}\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" layout: devGuide.md"},{"lineNumber":7,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"Getting to know MarkBind as a user will help you understand what MarkBind offers and how it can be used to create static websites. This will also help you understand the different components and syntax available in MarkBind, which will be useful when you want to debug issues or create similar features in the future."},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"## TLDR"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"- [ ] Setup the master branch MarkBind"},{"lineNumber":21,"author":{"gitId":"-"},"content":"- [ ] Create a MarkBind site"},{"lineNumber":22,"author":{"gitId":"-"},"content":"- [ ] Create content with MarkBind"},{"lineNumber":23,"author":{"gitId":"-"},"content":"- [ ] Modify site structure and configuration"},{"lineNumber":24,"author":{"gitId":"-"},"content":"- [ ] Deploy your MarkBind site"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"## Setup the master branch of MarkBind"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"As mentioned in our \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/gettingStarted.html\"\u003euser guide\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/gettingStarted.html\"\u003euser guide\u003c/a\u003e, we can either install MarkBind via npm or create a new MarkBind site with npx."},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"In this bootcamp, we want to set up the master branch MarkBind so that we can test out any changes we make to the codebase on our local machine."},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" light\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"You can also switch between the master branch MarkBind and check out other branches if you are working on multiple issues. This is also useful when you want to test out a PR submitted by another developer."},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/devGuide/development/settingUp.md\" header\u003d\"**Setting up MarkBind**\" type\u003d\"info\" minimized\u003e\u003c/panel\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"After setting up MarkBind, try running from the root directory of your MarkBind repository:"},{"lineNumber":45,"author":{"gitId":"-"},"content":"- [ ] `markbind -v` to check that you have the correct version of MarkBind installed"},{"lineNumber":46,"author":{"gitId":"-"},"content":"- [ ] `cd docs \u0026\u0026 markbind serve -d` to check that you can serve the MarkBind documentation site in development mode"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"If you can browse the MarkBind documentation site that should have automatically been up in your browser at http://localhost:8080, you have successfully set up MarkBind!"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"port-info\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":"If port 8080 is in use, another port will be chosen. Refer to the console output for the exact URL address."},{"lineNumber":53,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Sample Console Output\" type\u003d\"info\" minimized\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"```"},{"lineNumber":59,"author":{"gitId":"-"},"content":"$ markbind -v"},{"lineNumber":60,"author":{"gitId":"-"},"content":" __ __ _ ____ _ _ "},{"lineNumber":61,"author":{"gitId":"-"},"content":" | \\/ | __ _ _ __ | | __ | __ ) (_) _ __ __| |"},{"lineNumber":62,"author":{"gitId":"-"},"content":" | |\\/| | / _` | | \u0027__| | |/ / | _ \\ | | | \u0027_ \\ / _` |"},{"lineNumber":63,"author":{"gitId":"-"},"content":" | | | | | (_| | | | | \u003c | |_) | | | | | | | | (_| |"},{"lineNumber":64,"author":{"gitId":"-"},"content":" |_| |_| \\__,_| |_| |_|\\_\\ |____/ |_| |_| |_| \\__,_|"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" v4.0.2"},{"lineNumber":67,"author":{"gitId":"-"},"content":"Usage: markbind \u003ccommand\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"Options:"},{"lineNumber":70,"author":{"gitId":"-"},"content":" -V, --version output the version number "},{"lineNumber":71,"author":{"gitId":"-"},"content":" -h, --help display help for command "},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"Commands:"},{"lineNumber":74,"author":{"gitId":"-"},"content":" init|i [options] [root] init a markbind website project"},{"lineNumber":75,"author":{"gitId":"-"},"content":" serve|s [options] [root] build then serve a website from a directory"},{"lineNumber":76,"author":{"gitId":"-"},"content":" build|b [options] [root] [output] build a website"},{"lineNumber":77,"author":{"gitId":"-"},"content":" deploy|d [options] [root] deploy the latest build of the site to the repo\u0027s Github pages"},{"lineNumber":78,"author":{"gitId":"-"},"content":" help [command] display help for command"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":"$ cd docs \u0026\u0026 markbind serve -d"},{"lineNumber":81,"author":{"gitId":"-"},"content":" __ __ _ ____ _ _"},{"lineNumber":82,"author":{"gitId":"-"},"content":" | \\/ | __ _ _ __ | | __ | __ ) (_) _ __ __| |"},{"lineNumber":83,"author":{"gitId":"-"},"content":" | |\\/| | / _` | | \u0027__| | |/ / | _ \\ | | | \u0027_ \\ / _` |"},{"lineNumber":84,"author":{"gitId":"-"},"content":" | | | | | (_| | | | | \u003c | |_) | | | | | | | | (_| |"},{"lineNumber":85,"author":{"gitId":"-"},"content":" |_| |_| \\__,_| |_| |_|\\_\\ |____/ |_| |_| |_| \\__,_|"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" v4.0.2"},{"lineNumber":88,"author":{"gitId":"-"},"content":"info: Changes detected in MarkBind Vue Source Files:"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Bundle is regenerated by webpack and built pages are re-rendered with the latest bundle."},{"lineNumber":90,"author":{"gitId":"-"},"content":"info: Website generation started at 4:16:47 pm"},{"lineNumber":91,"author":{"gitId":"-"},"content":"info: Building assets..."},{"lineNumber":92,"author":{"gitId":"-"},"content":"info: Assets built"},{"lineNumber":93,"author":{"gitId":"-"},"content":"info: Generating pages..."},{"lineNumber":94,"author":{"gitId":"-"},"content":"[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d------------------------------------] 23 / 59 pages [\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d-------[\u003d\u003d\u003d\u003d\u003d\u003d[\u003d\u003d\u003d[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 59 / 59 pages built"},{"lineNumber":95,"author":{"gitId":"-"},"content":"info: Pages built"},{"lineNumber":96,"author":{"gitId":"-"},"content":"webpack built 6d52f45b1910f9f545a2 in 11017ms"},{"lineNumber":97,"author":{"gitId":"-"},"content":"i 「wdm」: Hash: 6d52f45b1910f9f545a2"},{"lineNumber":98,"author":{"gitId":"-"},"content":"Version: webpack 4.46.0"},{"lineNumber":99,"author":{"gitId":"-"},"content":"Time: 11017ms"},{"lineNumber":100,"author":{"gitId":"-"},"content":"Built at: 01/01/2023 4:16:58 pm"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Asset Size Chunks Chunk Names"},{"lineNumber":102,"author":{"gitId":"-"},"content":" fonts/KaTeX_AMS-Regular.ttf 62.1 KiB [emitted]"},{"lineNumber":103,"author":{"gitId":"-"},"content":" fonts/KaTeX_AMS-Regular.woff 32.7 KiB [emitted]"},{"lineNumber":104,"author":{"gitId":"-"},"content":" fonts/KaTeX_AMS-Regular.woff2 27.4 KiB [emitted]"},{"lineNumber":105,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Bold.ttf 12.1 KiB [emitted]"},{"lineNumber":106,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Bold.woff 7.54 KiB [emitted]"},{"lineNumber":107,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Bold.woff2 6.75 KiB [emitted]"},{"lineNumber":108,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Regular.ttf 12.1 KiB [emitted]"},{"lineNumber":109,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Regular.woff 7.48 KiB [emitted]"},{"lineNumber":110,"author":{"gitId":"-"},"content":"fonts/KaTeX_Caligraphic-Regular.woff2 6.75 KiB [emitted]"},{"lineNumber":111,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Bold.ttf 19.1 KiB [emitted]"},{"lineNumber":112,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Bold.woff 13 KiB [emitted]"},{"lineNumber":113,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Bold.woff2 11.1 KiB [emitted]"},{"lineNumber":114,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Regular.ttf 19.1 KiB [emitted]"},{"lineNumber":115,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Regular.woff 12.9 KiB [emitted]"},{"lineNumber":116,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Regular.woff2 11.1 KiB [emitted]"},{"lineNumber":117,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Bold.ttf 50.1 KiB [emitted]"},{"lineNumber":118,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Bold.woff 29.2 KiB [emitted]"},{"lineNumber":119,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Bold.woff2 24.7 KiB [emitted]"},{"lineNumber":120,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-BoldItalic.ttf 32.2 KiB [emitted]"},{"lineNumber":121,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-BoldItalic.woff 19 KiB [emitted]"},{"lineNumber":122,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-BoldItalic.woff2 16.4 KiB [emitted]"},{"lineNumber":123,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Italic.ttf 32.8 KiB [emitted]"},{"lineNumber":124,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Italic.woff 19.2 KiB [emitted]"},{"lineNumber":125,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Italic.woff2 16.6 KiB [emitted]"},{"lineNumber":126,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Regular.ttf 52.3 KiB [emitted]"},{"lineNumber":127,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Regular.woff 30.1 KiB [emitted]"},{"lineNumber":128,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Regular.woff2 25.7 KiB [emitted]"},{"lineNumber":129,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-BoldItalic.ttf 30.5 KiB [emitted]"},{"lineNumber":130,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-BoldItalic.woff 18.2 KiB [emitted]"},{"lineNumber":131,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-BoldItalic.woff2 16 KiB [emitted]"},{"lineNumber":132,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-Italic.ttf 30.6 KiB [emitted]"},{"lineNumber":133,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-Italic.woff 18.3 KiB [emitted]"},{"lineNumber":134,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-Italic.woff2 16.1 KiB [emitted]"},{"lineNumber":135,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Bold.ttf 23.9 KiB [emitted]"},{"lineNumber":136,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Bold.woff 14.1 KiB [emitted]"},{"lineNumber":137,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Bold.woff2 11.9 KiB [emitted]"},{"lineNumber":138,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Italic.ttf 21.8 KiB [emitted]"},{"lineNumber":139,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Italic.woff 13.8 KiB [emitted]"},{"lineNumber":140,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Italic.woff2 11.7 KiB [emitted]"},{"lineNumber":141,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Regular.ttf 19 KiB [emitted]"},{"lineNumber":142,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Regular.woff 12 KiB [emitted]"},{"lineNumber":143,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Regular.woff2 10.1 KiB [emitted]"},{"lineNumber":144,"author":{"gitId":"-"},"content":" fonts/KaTeX_Script-Regular.ttf 16.3 KiB [emitted]"},{"lineNumber":145,"author":{"gitId":"-"},"content":" fonts/KaTeX_Script-Regular.woff 10.3 KiB [emitted]"},{"lineNumber":146,"author":{"gitId":"-"},"content":" fonts/KaTeX_Script-Regular.woff2 9.42 KiB [emitted]"},{"lineNumber":147,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size1-Regular.ttf 11.9 KiB [emitted]"},{"lineNumber":148,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size1-Regular.woff 6.34 KiB [emitted]"},{"lineNumber":149,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size1-Regular.woff2 5.34 KiB [emitted]"},{"lineNumber":150,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size2-Regular.ttf 11.2 KiB [emitted]"},{"lineNumber":151,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size2-Regular.woff 6.04 KiB [emitted]"},{"lineNumber":152,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size2-Regular.woff2 5.09 KiB [emitted]"},{"lineNumber":153,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size3-Regular.ttf 7.41 KiB [emitted]"},{"lineNumber":154,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size3-Regular.woff 4.32 KiB [emitted]"},{"lineNumber":155,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size3-Regular.woff2 3.54 KiB [emitted]"},{"lineNumber":156,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size4-Regular.ttf 10.1 KiB [emitted]"},{"lineNumber":157,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size4-Regular.woff 5.84 KiB [emitted]"},{"lineNumber":158,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size4-Regular.woff2 4.81 KiB [emitted]"},{"lineNumber":159,"author":{"gitId":"-"},"content":" fonts/KaTeX_Typewriter-Regular.ttf 26.9 KiB [emitted]"},{"lineNumber":160,"author":{"gitId":"-"},"content":" fonts/KaTeX_Typewriter-Regular.woff 15.7 KiB [emitted]"},{"lineNumber":161,"author":{"gitId":"-"},"content":" fonts/KaTeX_Typewriter-Regular.woff2 13.3 KiB [emitted]"},{"lineNumber":162,"author":{"gitId":"-"},"content":" js/markbind.min.js 1.3 MiB markbind [emitted] markbind"},{"lineNumber":163,"author":{"gitId":"-"},"content":"Entrypoint markbind \u003d js/markbind.min.js"},{"lineNumber":164,"author":{"gitId":"-"},"content":"[0] multi webpack-hot-middleware/client ../packages/core-web/src/index.js 40 bytes {markbind} [built]"},{"lineNumber":165,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/arrayWithHoles.js] ../node_modules/@babel/runtime/helpers/arrayWithHoles.js "},{"lineNumber":166,"author":{"gitId":"-"},"content":"184 bytes {markbind} [built]"},{"lineNumber":167,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/defineProperty.js] ../node_modules/@babel/runtime/helpers/defineProperty.js "},{"lineNumber":168,"author":{"gitId":"-"},"content":"367 bytes {markbind} [built]"},{"lineNumber":169,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js] ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js 711 bytes {markbind} [built]"},{"lineNumber":170,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/nonIterableRest.js] ../node_modules/@babel/runtime/helpers/nonIterableRest.js 309 bytes {markbind} [built]"},{"lineNumber":171,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/slicedToArray.js] ../node_modules/@babel/runtime/helpers/slicedToArray.js 522 bytes {markbind} [built]"},{"lineNumber":172,"author":{"gitId":"-"},"content":"[../../node_modules/strip-ansi/index.js] ../node_modules/strip-ansi/index.js 154 bytes {markbind} [built]"},{"lineNumber":173,"author":{"gitId":"-"},"content":"[../../node_modules/webpack-hot-middleware/client-overlay.js] ../node_modules/webpack-hot-middleware/client-overlay.js 2.14 KiB {markbind} [built] "},{"lineNumber":174,"author":{"gitId":"-"},"content":"[../../node_modules/webpack-hot-middleware/client.js] ../node_modules/webpack-hot-middleware/client.js 7.69 KiB {markbind} [built]"},{"lineNumber":175,"author":{"gitId":"-"},"content":"[../../node_modules/webpack-hot-middleware/process-update.js] ../node_modules/webpack-hot-middleware/process-update.js 4.36 KiB {markbind} [built] "},{"lineNumber":176,"author":{"gitId":"-"},"content":"[../../node_modules/webpack/buildin/module.js] ../node_modules/webpack/buildin/module.js 497 bytes {markbind} [built]"},{"lineNumber":177,"author":{"gitId":"-"},"content":"[./src/VueCommonAppFactory.js] ../packages/core-web/src/VueCommonAppFactory.js 1.09 KiB {markbind} [built]"},{"lineNumber":178,"author":{"gitId":"-"},"content":"[./src/index.js] ../packages/core-web/src/index.js 8.17 KiB {markbind} [built]"},{"lineNumber":179,"author":{"gitId":"-"},"content":"[./src/scrollTopButton.js] ../packages/core-web/src/scrollTopButton.js 1.49 KiB {markbind} [built]"},{"lineNumber":180,"author":{"gitId":"-"},"content":"[./src/styles/index.css] ../packages/core-web/src/styles/index.css 1.09 KiB {markbind} [built]"},{"lineNumber":181,"author":{"gitId":"-"},"content":" + 346 hidden modules"},{"lineNumber":182,"author":{"gitId":"-"},"content":"i 「wdm」: Compiled successfully."},{"lineNumber":183,"author":{"gitId":"-"},"content":"info: Site data built"},{"lineNumber":184,"author":{"gitId":"-"},"content":"info: Website generation complete! Total build time: 11.242s"},{"lineNumber":185,"author":{"gitId":"-"},"content":"info: Serving \"C:\\Users\\User\\Documents\\GitHub\\markbind\\docs\\_site\" at http://127.0.0.1:8080"},{"lineNumber":186,"author":{"gitId":"-"},"content":"info: Press CTRL+C to stop ..."},{"lineNumber":187,"author":{"gitId":"-"},"content":"```"},{"lineNumber":188,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"## Create a MarkBind site"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":"With MarkBind installed, we can now create a new MarkBind site."},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"We recommend that you set up a new repository for this MarkBind site so that you can push your site to GitHub pages later. This MarkBind site can be used to test out any changes you make to the codebase."},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":"As an example, let\u0027s create a test site together!"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"You can refer to the example repository [here](https://github.com/tlylt/mb-dev-tlylt) for the code and [here](https://tlylt.github.io/mb-dev-tlylt/) for the deployed site if you get stuck."},{"lineNumber":202,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":"1. Create a new folder called \u003ctooltip content\u003d\"replace \u0027xxx\u0027 with your GitHub username\"\u003e\"mb-dev-xxx\"\u003c/tooltip\u003e at a location outside of the MarkBind source code directory."},{"lineNumber":205,"author":{"gitId":"-"},"content":"1. Go to the folder and run `markbind init` to create a new MarkBind site with the default template."},{"lineNumber":206,"author":{"gitId":"-"},"content":"1. Initialize a new git repository in the folder by running `git init`. You can also create a new public repository on GitHub first and clone it to your local machine."},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":"You should see the following output:"},{"lineNumber":209,"author":{"gitId":"-"},"content":"```"},{"lineNumber":210,"author":{"gitId":"-"},"content":"$ markbind init"},{"lineNumber":211,"author":{"gitId":"-"},"content":" __ __ _ ____ _ _"},{"lineNumber":212,"author":{"gitId":"-"},"content":" | \\/ | __ _ _ __ | | __ | __ ) (_) _ __ __| |"},{"lineNumber":213,"author":{"gitId":"-"},"content":" | |\\/| | / _` | | \u0027__| | |/ / | _ \\ | | | \u0027_ \\ / _` |"},{"lineNumber":214,"author":{"gitId":"-"},"content":" | | | | | (_| | | | | \u003c | |_) | | | | | | | | (_| |"},{"lineNumber":215,"author":{"gitId":"-"},"content":" |_| |_| \\__,_| |_| |_|\\_\\ |____/ |_| |_| |_| \\__,_|"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" v4.0.2"},{"lineNumber":218,"author":{"gitId":"-"},"content":"info: Initialization success."},{"lineNumber":219,"author":{"gitId":"-"},"content":"```"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"After setting up the MarkBind test site, try running the following common operations from the root directory of your test site:"},{"lineNumber":226,"author":{"gitId":"-"},"content":"- [ ] Build the site by running `markbind build`"},{"lineNumber":227,"author":{"gitId":"-"},"content":"- [ ] Serve the site by running `markbind serve`"},{"lineNumber":228,"author":{"gitId":"-"},"content":"- [ ] Serve the site in development mode by running `markbind serve -d`"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":"You now have the test site up and running!"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":"## Create Content with MarkBind"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":"MarkBind contains a range of additional syntax on top of Markdown. It also comes with a set of components that can be used to create content."},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":"Two essential sections of the user guide to get started with are:"},{"lineNumber":239,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/formattingContents.html\"\u003eFormatting Contents\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/formattingContents.html\"\u003eFormatting Contents\u003c/a\u003e - Covering Markdown \u0026 Markdown-like syntax."},{"lineNumber":240,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/usingComponents.html\"\u003eUsing Components\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/usingComponents.html\"\u003eUsing Components\u003c/a\u003e - Covering MarkBind components (Built with Vue.js or Native HTML)."},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/userGuide/authoringContents.md\" header\u003d\"**Creating Content**\" type\u003d\"info\" minimized\u003e\u003c/panel\u003e"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":"The generated MarkBind site from the above step also includes a few sample usage in the `index.md` file."},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":"Now, let\u0027s try editing the `index.md` file to add some content of our own!"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":"1. Open the `index.md` file in your `mb-dev-xxx` folder."},{"lineNumber":249,"author":{"gitId":"-"},"content":"1. Replace the wording `Landing Page Title` with `MarkBind Developer Test Site`."},{"lineNumber":250,"author":{"gitId":"-"},"content":"1. Modify or add some content utilizing one or more of the following syntaxes:"},{"lineNumber":251,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/formattingContents.html#text-styles\"\u003eText Styles\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/formattingContents.html#text-styles\"\u003eText Styles\u003c/a\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/formattingContents.html#code\"\u003eCode Block\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/formattingContents.html#code\"\u003eCode Block\u003c/a\u003e"},{"lineNumber":253,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/formattingContents.html#emoji\"\u003eEmoji\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/formattingContents.html#emoji\"\u003eEmoji\u003c/a\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":" - etc."},{"lineNumber":255,"author":{"gitId":"-"},"content":"1. Modify or add some content utilizing one or more of the following components:"},{"lineNumber":256,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/components/presentation.html#boxes\"\u003eBox\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/components/presentation.html#boxes\"\u003eBox\u003c/a\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/components/presentation.html#panels\"\u003ePanel\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/components/presentation.html#panels\"\u003ePanel\u003c/a\u003e"},{"lineNumber":258,"author":{"gitId":"yiwen101"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/components/popups.html#tooltips\"\u003eTooltip\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/components/popups.html#tooltips\"\u003eTooltip\u003c/a\u003e"},{"lineNumber":259,"author":{"gitId":"-"},"content":" - etc."},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"With live preview, you should be able to see the changes you have made to the site after saving. Check that the following are true:"},{"lineNumber":266,"author":{"gitId":"-"},"content":"- [ ] Serve the site by running `markbind serve -d`"},{"lineNumber":267,"author":{"gitId":"-"},"content":"- [ ] Make changes to the `index.md` file and save"},{"lineNumber":268,"author":{"gitId":"-"},"content":"- [ ] See the changes reflected in the live preview, with the correct rendering of the syntax and components"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":"You now have created content with MarkBind!"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":"## Modify Site Structure and Configuration"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":"There are a few ways to modify the site\u0027s (as well as the page\u0027s) structure and configuration. We will cover the following:"},{"lineNumber":277,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/tweakingThePageStructure.html#frontmatter\"\u003eFrontmatter\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/tweakingThePageStructure.html#frontmatter\"\u003eFrontmatter\u003c/a\u003e"},{"lineNumber":278,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/tweakingThePageStructure.html#layouts\"\u003eLayouts\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/tweakingThePageStructure.html#layouts\"\u003eLayouts\u003c/a\u003e"},{"lineNumber":279,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/siteJsonFile.html\"\u003esite.json\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/siteJsonFile.html\"\u003esite.json\u003c/a\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":""},{"lineNumber":281,"author":{"gitId":"-"},"content":"Let\u0027s continue with the test site we created earlier and modify the `index.md` file via frontmatter."},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":"1. Open the `index.md` file in your `mb-dev-xxx` folder."},{"lineNumber":284,"author":{"gitId":"-"},"content":"1. Change the `pageNavTitle` in the frontmatter from `Topics` to `Index Page`."},{"lineNumber":285,"author":{"gitId":"-"},"content":"1. Change the `pageNav` in the frontmatter from `4` to `5`."},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":"Ensure that you are still serving the site with `markbind serve -d`. Check that the following are true:"},{"lineNumber":292,"author":{"gitId":"-"},"content":"- [ ] The rendered page navigation title is changed to `Index Page`"},{"lineNumber":293,"author":{"gitId":"-"},"content":"- [ ] The rendered page navigation content now shows `H5` headings as well"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":"Screenshot before the changes:"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"{{baseUrl}}/images/bootcamp/page_nav_before.png\" alt\u003d\"Page navigation title and content before changes\"\u003e\u003c/pic\u003e"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":"Screenshot after the changes:"},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"{{baseUrl}}/images/bootcamp/page_nav_after.png\" alt\u003d\"Page navigation title and content after changes\"\u003e\u003c/pic\u003e"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":304,"author":{"gitId":"-"},"content":""},{"lineNumber":305,"author":{"gitId":"-"},"content":"Another commonly adjusted structure is the layout of the site (especially, the site\u0027s top header and the left-hand-side navigation)."},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":"1. Open the `_markbind/layouts/default.md` file in your `mb-dev-xxx` folder."},{"lineNumber":308,"author":{"gitId":"-"},"content":"1. Change `Your Logo` to `MarkBind Developer Test Site`."},{"lineNumber":309,"author":{"gitId":"-"},"content":"1. Change `Home :house:` to `My Test Playground :computer:`."},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"Ensure that you are still serving the site with `markbind serve -d`. Check that the following are true:"},{"lineNumber":316,"author":{"gitId":"-"},"content":"- [ ] The rendered page logo in the header is changed to `MarkBind Developer Test Site`"},{"lineNumber":317,"author":{"gitId":"-"},"content":"- [ ] The rendered site navigation title is changed to `My Test Playground` :computer:"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":"Screenshot after the changes:"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"{{baseUrl}}/images/bootcamp/logo_and_nav.png\" alt\u003d\"Logo and Nav changes\"\u003e\u003c/pic\u003e"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":"Lastly, let\u0027s modify the site configuration to change the site title and more."},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":"The `site.json` file is autogenerated and located in the root directory of the site. Refer to the User Guide - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/siteJsonFile.html\"\u003e`site.json`\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/siteJsonFile.html\"\u003e`site.json`\u003c/a\u003e section for more details."},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":"1. Open the `site.json` file in your `mb-dev-xxx` folder."},{"lineNumber":330,"author":{"gitId":"-"},"content":"1. Change `\"titlePrefix\": \"\",` to `\"titlePrefix\": \"mb-dev-xxx\",`."},{"lineNumber":331,"author":{"gitId":"-"},"content":"1. Under `pages`, add `\"title\": \"Home\"`."},{"lineNumber":332,"author":{"gitId":"-"},"content":""},{"lineNumber":333,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":"Ensure that you are still serving the site with `markbind serve -d`. Check that the following are true:"},{"lineNumber":338,"author":{"gitId":"-"},"content":"- [ ] The page title in the browser tab is changed to `mb-dev-xxx - Home`"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":"Screenshot after the changes:"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"{{baseUrl}}/images/bootcamp/page_title.png\" alt\u003d\"Page title changes\"\u003e\u003c/pic\u003e"},{"lineNumber":343,"author":{"gitId":"-"},"content":""},{"lineNumber":344,"author":{"gitId":"-"},"content":"You now have modified some of the commonly adjusted site structure and configuration!"},{"lineNumber":345,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":"## Deploy your MarkBind site"},{"lineNumber":348,"author":{"gitId":"-"},"content":""},{"lineNumber":349,"author":{"gitId":"-"},"content":"MarkBind sites can be easily deployed with CLI commands or via CI. Let\u0027s try deploying our site via GitHub Actions."},{"lineNumber":350,"author":{"gitId":"-"},"content":""},{"lineNumber":351,"author":{"gitId":"-"},"content":"1. Open the `site.json` file in your `mb-dev-xxx` folder."},{"lineNumber":352,"author":{"gitId":"-"},"content":"1. Change `\"baseUrl\": \"\",` to `\"baseUrl\": \"/mb-dev-xxx\",` (Note the leading `/` and that the value is the same as your GitHub repository name)."},{"lineNumber":353,"author":{"gitId":"-"},"content":"1. Create a `.github/workflows/deploy.yml` file with the following content mentioned in the \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/deployingTheSite.html#deploying-via-github-actions\"\u003eGitHub Actions guide\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/deployingTheSite.html#deploying-via-github-actions\"\u003eGitHub Actions guide\u003c/a\u003e."},{"lineNumber":354,"author":{"gitId":"-"},"content":" 1. Note that you should change `branches: master` to `branches: main` if you are using the `main` branch."},{"lineNumber":355,"author":{"gitId":"-"},"content":""},{"lineNumber":356,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/userGuide/deployingTheSite.md#markbind-action-tip\" header\u003d\"**MarkBind Action**\" type\u003d\"info\" expanded/\u003e"},{"lineNumber":357,"author":{"gitId":"-"},"content":""},{"lineNumber":358,"author":{"gitId":"-"},"content":"4. Ensure that you have added your remote GitHub repository to your local repository with the following command (replace `xxx` with your GitHub username):"},{"lineNumber":359,"author":{"gitId":"-"},"content":" ```bash"},{"lineNumber":360,"author":{"gitId":"-"},"content":" git remote add origin https://github.com/xxx/mb-dev-xxx.git"},{"lineNumber":361,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":362,"author":{"gitId":"-"},"content":"5. Commit and push the changes to the `main` branch with the following commands:"},{"lineNumber":363,"author":{"gitId":"-"},"content":" ```bash"},{"lineNumber":364,"author":{"gitId":"-"},"content":" git add ."},{"lineNumber":365,"author":{"gitId":"-"},"content":" git commit -m \"Update content\""},{"lineNumber":366,"author":{"gitId":"-"},"content":" git push origin main"},{"lineNumber":367,"author":{"gitId":"-"},"content":"6. Update your GitHub repository setting for deploying to GitHub Pages."},{"lineNumber":368,"author":{"gitId":"-"},"content":" 1. Navigate to the Settings \u003e Pages section on GitHub for that repository and set the source to `Deploy from a branch` and the branch to `gh-pages` and `/(root)`."},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":"Check that the following are true:"},{"lineNumber":375,"author":{"gitId":"-"},"content":"- [ ] The triggered GitHub action runs are successful"},{"lineNumber":376,"author":{"gitId":"-"},"content":"- [ ] The site is deployed and available at `https://\u003cusername\u003e.github.io/mb-dev-xxx/` (after a few seconds to a few minutes)"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"-"},"content":"Congratulations! :tada::tada::tada: You have deployed your MarkBind site!"},{"lineNumber":379,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":"## Summary"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":"In the first part of this bootcamp, we experimented with MarkBind as a user. We have set up the master branch of MarkBind and created a new MarkBind site. We have also created content with MarkBind components/syntax and deployed our site."},{"lineNumber":384,"author":{"gitId":"-"},"content":""},{"lineNumber":385,"author":{"gitId":"-"},"content":"Here are some additional tasks for you to try out:"},{"lineNumber":386,"author":{"gitId":"-"},"content":"- [ ] Create a new MarkBind site with a different \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/themes.html\"\u003etheme\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/themes.html\"\u003etheme\u003c/a\u003e"},{"lineNumber":387,"author":{"gitId":"-"},"content":"- [ ] Try out MarkBind\u0027s \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/reusingContents.html#includes\"\u003einclude mechanism\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/reusingContents.html#includes\"\u003einclude mechanism\u003c/a\u003e"},{"lineNumber":388,"author":{"gitId":"-"},"content":"- [ ] Create a dedicated MarkBind site for your personal usage and [share it with us](https://github.com/MarkBind/markbind/discussions/new?category\u003dshow-and-tell)"},{"lineNumber":389,"author":{"gitId":"-"},"content":" - You can see some examples in the [MarkBind showcase]({{ baseUrl }}/showcase.html)"},{"lineNumber":390,"author":{"gitId":"-"},"content":""},{"lineNumber":391,"author":{"gitId":"-"},"content":"Take a break now :coffee: and we will continue with the second part of the bootcamp!"},{"lineNumber":392,"author":{"gitId":"-"},"content":""},{"lineNumber":393,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":394,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027intro\u0027, \u0027contributeToDocs\u0027) }}"}],"authorContributionMap":{"-":393,"yiwen101":1}},{"path":"docs/site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"baseUrl\": \"\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"timeZone\": \"Asia/Singapore\","},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"titlePrefix\": \"MarkBind\","},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"codeTheme\": \"light\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" },"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":9,"author":{"gitId":"-"},"content":" {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \"glob\": [\"*.md\", \"userGuide/*.md\", \"userGuide/components/*.md\", \"devGuide/*.md\", \"devGuide/*/*.md\"]"},{"lineNumber":11,"author":{"gitId":"-"},"content":" },"},{"lineNumber":12,"author":{"gitId":"-"},"content":" {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"src\": ["},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"index.md\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"userGuide/index.md\","},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \"userGuide/syntaxReference.md\","},{"lineNumber":17,"author":{"gitId":"-"},"content":" \"userGuide/readerFacingFeatures.md\","},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"devGuide/index.md\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"searchable\": \"no\""},{"lineNumber":21,"author":{"gitId":"-"},"content":" }"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"plugins\" : ["},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"filterTags\","},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"mathDelimiters\","},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"codeBlockWrapButtons\","},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"web3Form\","},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"codeBlockCopyButtons\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"pluginsContext\" : {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"filterTags\" : {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"tags\": [\"environment--combined\"]"},{"lineNumber":33,"author":{"gitId":"-"},"content":" },"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"mathDelimiters\": {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"delimiters\": [\"beg_end\"]"},{"lineNumber":36,"author":{"gitId":"-"},"content":" },"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"web3Form\": {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"accessKey\": [\"\"]"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":" },"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \"headingIndexingLevel\": 6,"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \"ignore\": ["},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"_markbind\","},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"_site/*\","},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"lib/*\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"*.json\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"*.md\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"*.njk\","},{"lineNumber":49,"author":{"gitId":"-"},"content":" \".git/*\","},{"lineNumber":50,"author":{"gitId":"-"},"content":" \"*.pptx\","},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"CNAME\""},{"lineNumber":52,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"deploy\": {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \"message\": \"Site Update.\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"jingting1412":1,"-":55}},{"path":"docs/ug-site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"baseUrl\": \"\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"titlePrefix\": \"MarkBind\","},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"codeTheme\": \"light\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" },"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":8,"author":{"gitId":"-"},"content":" {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \"glob\": [\"*.md\", \"userGuide/*.md\", \"userGuide/components/*.md\"]"},{"lineNumber":10,"author":{"gitId":"-"},"content":" },"},{"lineNumber":11,"author":{"gitId":"-"},"content":" {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"src\": ["},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"index.md\","},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"userGuide/index.md\","},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \"userGuide/syntaxReference.md\","},{"lineNumber":16,"author":{"gitId":"-"},"content":" \"userGuide/readerFacingFeatures.md\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"searchable\": \"no\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" }"},{"lineNumber":20,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"plugins\" : ["},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"filterTags\","},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"mathDelimiters\","},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"codeBlockCopyButtons\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"pluginsContext\" : {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"filterTags\" : {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"tags\": [\"environment--ug\"]"},{"lineNumber":29,"author":{"gitId":"-"},"content":" },"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"mathDelimiters\": {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"delimiters\": [\"beg_end\"]"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":" },"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"headingIndexingLevel\": 6,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"ignore\": ["},{"lineNumber":36,"author":{"gitId":"-"},"content":" \"_markbind\","},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"_site/*\","},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"lib/*\","},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"*.json\","},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"*.md\","},{"lineNumber":41,"author":{"gitId":"-"},"content":" \"*.njk\","},{"lineNumber":42,"author":{"gitId":"-"},"content":" \".git/*\","},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"*.pptx\""},{"lineNumber":44,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"deploy\": {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"message\": \"Site Update.\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"repo\": \"https://github.com/MarkBind/markbind.github.io.git\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"branch\": \"master\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"jingting1412":1,"-":49}},{"path":"docs/userGuide/cliCommands.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" title: \"User Guide: Command Line Interface (CLI)\""},{"lineNumber":3,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: default"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"# CLI Commands"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"### Overview"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"If you do not have MarkBind installed globally, you can still use MarkBind commands by prefixing the commands with `npx`. For example, `markbind init` becomes `npx markbind-cli init`."},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"If you have MarkBind installed locally, you may also refer to the scripts section of your `package.json` file for the commands you can use. For example, `npm run init` for `markbind init`."},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"An overview of MarkBind\u0027s Command Line Interface (CLI) can be referenced with `markbind --help`:"},{"lineNumber":21,"author":{"gitId":"-"},"content":"```"},{"lineNumber":22,"author":{"gitId":"-"},"content":"$ markbind --help"},{"lineNumber":23,"author":{"gitId":"-"},"content":"Usage: markbind \u003ccommand\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" "},{"lineNumber":25,"author":{"gitId":"-"},"content":" Options:"},{"lineNumber":26,"author":{"gitId":"-"},"content":" -V, --version output the version number"},{"lineNumber":27,"author":{"gitId":"-"},"content":" -h, --help output usage information"},{"lineNumber":28,"author":{"gitId":"-"},"content":" "},{"lineNumber":29,"author":{"gitId":"-"},"content":" Commands:"},{"lineNumber":30,"author":{"gitId":"-"},"content":" init|i [options] [root] init a markbind website project"},{"lineNumber":31,"author":{"gitId":"-"},"content":" serve|s [options] [root] build then serve a website from a directory"},{"lineNumber":32,"author":{"gitId":"-"},"content":" build|b [options] [root] [output] build a website"},{"lineNumber":33,"author":{"gitId":"-"},"content":" deploy|d [options] [root] deploy the latest build of the site to the repo\u0027s Github pages"},{"lineNumber":34,"author":{"gitId":"-"},"content":"```"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"markbind-init\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"### `init` Command"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"**Format:** `markbind init [options] [root]`"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"**Alias:** `markbind i`"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"**Description:** Initializes a directory into a MarkBind site by creating a skeleton structure for the website which includes a `index.md` and a `site.json`."},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"**Arguments:**"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* `[root]`\u003cbr\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" Root directory. Default is the current directory.\u003cbr\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite`"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Options** :fas-cogs:\" type\u003d\"minimal\" expanded\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"**Options** :fas-cogs:"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"* `-c`, `--convert`\u003cbr\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Convert an existing GitHub wiki or `docs` folder into a MarkBind website. See [Converting an existing GitHub project]({{ baseUrl }}/userGuide/markBindInTheProjectWorkflow.html#converting-existing-project-documentation-wiki) for more information."},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"* `-t`, `--template` \u003cbr\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" When initialising MarkBind, change the template that you start with. See [templates](templates.html)."},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"{{ icon_examples }}"},{"lineNumber":63,"author":{"gitId":"-"},"content":"* `markbind init` : Initializes the site in the current working directory."},{"lineNumber":64,"author":{"gitId":"-"},"content":"* `markbind init ./myWebsite` : Initializes the site in `./myWebsite` directory."},{"lineNumber":65,"author":{"gitId":"-"},"content":"* `markbind init --convert --template minimal`: Converts the GitHub wiki or `docs` folder in the current working directory into a minimal MarkBind website."},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"### `serve` Command"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":"**Format:** `markbind serve [options] [root]`"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"**Alias:** `markbind s`"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"**Description:** Does the following steps:"},{"lineNumber":79,"author":{"gitId":"-"},"content":"1. Builds the site and puts the generated files in a directory named `_site`."},{"lineNumber":80,"author":{"gitId":"LamJiuFong"},"content":"1. Starts a web server instance locally and makes the site available at `http://127.0.0.1:8080` by default."},{"lineNumber":81,"author":{"gitId":"-"},"content":"1. Opens a \u003ctrigger trigger\u003d\"click\" for\u003d\"modal:cliCommands-livePreview\"\u003elive preview\u003c/trigger\u003e of the website."},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"\u003cmodal large header\u003d\"Live Preview\" id\u003d\"modal:cliCommands-livePreview\"\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"glossary.md#live-preview\"/\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003c/modal\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"**Arguments:**"},{"lineNumber":88,"author":{"gitId":"-"},"content":"* `[root]`\u003cbr\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Root directory. The default is the directory where this command was executed.\u003cbr\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite`"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Options** :fas-cogs:\" type\u003d\"minimal\" expanded\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"**Options** :fas-cogs:"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":"* `-o \u003cfile\u003e`, `--one-page \u003cfile\u003e`\u003cbr\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":" Serves only a single page from your website **initially**. If `\u003cfile\u003e` is not specified, it defaults to `index.md`.\u003cbr\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Thereafter, when changes to source files have been made, the opened pages will be rebuilt if it was affected.\u003cbr\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * Navigating to a new page will build the new page, if it has not been built before, or there were some changes to source files that affected it before navigating to it.\u003cbr\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * {{ icon_example }} `--one-page guide/index.md`"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" light header\u003d\"Caveats\" style\u003d\"width: calc(100% - 50px); position: relative; left: 40px;\"\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"Essentially, this optional feature is very useful when writing content, more so if your build times are starting to slow down!"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"The caveat is that not building all pages during the initial process, or not rebuilding all affected pages when a file changes, will cause your search results for these pages to be empty or outdated, until you navigate to them to trigger a rebuild."},{"lineNumber":107,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":"* `-b`, `--background-build` **[BETA]**\u003cbr\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":" If `--one-page` is specified, this mode enhances the single-page serve by building the pages that are not yet built"},{"lineNumber":111,"author":{"gitId":"-"},"content":" or marked to be rebuilt in the background."},{"lineNumber":112,"author":{"gitId":"-"},"content":" "},{"lineNumber":113,"author":{"gitId":"-"},"content":" You can still edit the pages during the background build. When MarkBind detects changes to the source"},{"lineNumber":114,"author":{"gitId":"-"},"content":" files, the background build will stop, rebuild the files affected, then resumes the background build with the"},{"lineNumber":115,"author":{"gitId":"-"},"content":" remaining pages."},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":"* `-s \u003cfile\u003e`, `--site-config \u003cfile\u003e`\u003cbr\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" Specify the site config file (default: `site.json`)\u003cbr\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":" {{ icon_example }} `-s otherSite.json`"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":"* `-n`, `--no-open`\u003cbr\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":" Don\u0027t open a live preview in the browser automatically."},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":"* `-f`, `--force-reload`\u003cbr\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":" Force live reload to process all files in the site, instead of just the relevant files. This option is useful when you are modifying a file that is not a file type monitored by the \u003ctrigger trigger\u003d\"click\" for\u003d\"modal:cliCommands-livePreview\"\u003elive preview\u003c/trigger\u003e feature."},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"LamJiuFong"},"content":"* `-a \u003caddress\u003e`, `--address \u003caddress\u003e`\u003cbr\u003e"},{"lineNumber":128,"author":{"gitId":"LamJiuFong"},"content":" Specify the server address/host (Default is 127.0.0.1)."},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"LamJiuFong"},"content":"* `-p \u003cport\u003e`, `--port \u003cport\u003e`\u003cbr\u003e"},{"lineNumber":131,"author":{"gitId":"LamJiuFong"},"content":" Serve the website in the specified port (Default is 8080)."},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":"{{ icon_examples }}"},{"lineNumber":134,"author":{"gitId":"-"},"content":"* `markbind serve` : Serves the site from the current working directory."},{"lineNumber":135,"author":{"gitId":"-"},"content":"* `markbind serve ./myWebsite` : Serves the site from the `./myWebsite` directory."},{"lineNumber":136,"author":{"gitId":"-"},"content":"* `markbind serve -p 8888 -s otherSite.json` : Serves the site in Port 8888 from the current working directory, using `otherSite.json` as the site configuration file."},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"### `build` Command"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"**Format:** `markbind build [options] [root] [output]`"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"**Alias:** `markbind b`"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":"**Description:** Generates the site to the directory named `_site` in the current directory."},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"**Arguments:**"},{"lineNumber":152,"author":{"gitId":"-"},"content":"* `[root]`\u003cbr\u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":" Root directory. Default is the current directory.\u003cbr\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite`"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":"* `[root] [output]`\u003cbr\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":" Read source files from the `[root]` directory and put the generated files in the specified `[output]` directory. Default output directory is `_site`.\u003cbr\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite ./myWebsite/myOutDir`"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Options** :fas-cogs:\" type\u003d\"minimal\" expanded\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"**Options** :fas-cogs:"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"* `--baseUrl \u003cbase\u003e`\u003cbr\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":" Override the `baseUrl` property (read from the `site.json`) with the given `\u003cbase\u003e` value.\u003cbr\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":" {{ icon_example }} `--baseUrl staging`"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `-s \u003cfile\u003e`, `--site-config \u003cfile\u003e`\u003cbr\u003e"},{"lineNumber":169,"author":{"gitId":"-"},"content":" Specify the site config file (default: `site.json`)\u003cbr\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":" {{ icon_example }} `-s otherSite.json`"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":"**{{ icon_examples }}**"},{"lineNumber":173,"author":{"gitId":"-"},"content":"* `markbind build` : Generates the site from the current working directory."},{"lineNumber":174,"author":{"gitId":"-"},"content":"* `markbind build ./myWebsite` : Generates the site from the `./myWebsite` directory."},{"lineNumber":175,"author":{"gitId":"-"},"content":"* `markbind build ./myWebsite ./myOutDir` : Generates the site from the `./myWebsite` directory to the `./myOutDir` directory."},{"lineNumber":176,"author":{"gitId":"-"},"content":"* `markbind build ./stagingDir --baseUrl staging` : Generates the site from the `./stagingDir` directory, with the `baseUrl` property in `site.json` set to `staging`."},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":"### `deploy` Command"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":"**Format:** `markbind deploy [options] [root]`"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":"**Alias:** `markbind d`"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Description:** Deploys the site to the repo\u0027s GitHub pages by generating the site (default dir: `_site`) and pushing the generated site to the `gh-pages` branch of the current git working directory\u0027s remote repo."},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"**Arguments:**"},{"lineNumber":192,"author":{"gitId":"-"},"content":"* `[root]`\u003cbr\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":" Root directory. Default is the current directory.\u003cbr\u003e"},{"lineNumber":194,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite`"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Options** :fas-cogs:\" type\u003d\"minimal\" expanded\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":"**Options** :fas-cogs:"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"* `-c \u003cgithubTokenName\u003e`, `--ci \u003cgithubTokenName\u003e`\u003cbr\u003e"},{"lineNumber":201,"author":{"gitId":"-"},"content":" Deploy the site in CI Environments using the GitHub personal access token stored in `\u003cgithubTokenName\u003e` (default: `GITHUB_TOKEN`).\u003cbr\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":" {{ icon_example }} `-c PA_TOKEN`"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":"* `-n`, `--no-build`\u003cbr\u003e"},{"lineNumber":205,"author":{"gitId":"-"},"content":" Skips the generation of the site before deploying it. By default, the `deploy` command generates the site before deploying the built site. This command should be used if the site needs to be generated with non-default arguments for the `build` command (e.g. baseUrl is specified using the `--baseUrl` flag for the `markbind build` command)."},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":"* `-s \u003cfile\u003e`, `--site-config \u003cfile\u003e`\u003cbr\u003e"},{"lineNumber":208,"author":{"gitId":"-"},"content":" Specify the site config file (default: `site.json`).\u003cbr\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":" {{ icon_example }} `-s otherSite.json`"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":"%%{{ icon_info }} Related: [User Guide: Deploying the Website](deployingTheSite.html).%%"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":"**{{ icon_examples }}**"},{"lineNumber":214,"author":{"gitId":"-"},"content":"* `markbind deploy` : Deploys after generating the site from the current working directory."},{"lineNumber":215,"author":{"gitId":"-"},"content":"* `markbind deploy ./myWebsite` : Deploys after generating the site from the `./myWebsite` directory."},{"lineNumber":216,"author":{"gitId":"-"},"content":"* `markbind deploy --no-build` : Deploys the site from the current working directory without generating it."},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":"### `--help` Option"},{"lineNumber":223,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"**Format:** `markbind [command] --help`"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"**Alias:** `markbind [command] -h`"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"**Description:** Prints a summary of MarkBind commands or a detailed usage guide for the given `command`."},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"{{ icon_examples }}"},{"lineNumber":232,"author":{"gitId":"-"},"content":"* `markbind --help` : Prints a summary of MarkBind commands."},{"lineNumber":233,"author":{"gitId":"-"},"content":"* `markbind serve --help` : Prints a detailed usage guide for the `serve` command."}],"authorContributionMap":{"LamJiuFong":5,"-":228}},{"path":"docs/userGuide/components/imagesAndDiagrams.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Image \u0026 Diagram Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"imagesAndDiagrams\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Images \u0026 Diagrams"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The image components here provide **convenient syntax \u0026 styling abstractions** on top of raw HTML and Markdown images."},{"lineNumber":22,"author":{"gitId":"-"},"content":"Diagrams, in the form of **inline PlantUML components** are also supported."},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":"{% if \u0027images-diagrams\u0027 in v[2] %}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":41,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027presentation\u0027, \u0027popups\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":39}},{"path":"docs/userGuide/components/navigation.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Navigation Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"navigation\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Navigation"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The components in this page are used for scaffolding **site and page navigation**."},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"{% if \u0027navigation\u0027 in v[2] %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":40,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027popups\u0027, \u0027others\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":38}},{"path":"docs/userGuide/components/others.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Other Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"others\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Others"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"This page lists some other components that may be useful in creating education websites. For now, there are only question and quiz components."},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"{% if \u0027others\u0027 in v[2] %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":40,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027navigation\u0027, \u0027advanced\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":38}},{"path":"docs/userGuide/components/popups.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Pop-Up Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"popups\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Pop-Ups"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The components in this page can be used to easily create **various forms of pop-ups** that are activated on some user action (e.g., hovering over some text). This may be useful for showing additional information related to some specific area or span of content."},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"{% if \u0027popups\u0027 in v[2] %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":40,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027imagesAndDiagrams\u0027, \u0027navigation\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":38}},{"path":"docs/userGuide/components/presentation.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Presentational Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"presentation\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Presentation"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The components in this page are the core **presentational** components you may want to use. Panels and tabs can be used to **organise content sections**, while badges and boxes can **highlight small, specific pieces of information**."},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"yiwen101"},"content":"\u003cbox type \u003d \"warning\" header \u003d \"#### Use of markdown in content\" \u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"yiwen101"},"content":"As presentational components are HTML-based, you need to follow the HTML syntax when using markdown in the content of the components."},{"lineNumber":26,"author":{"gitId":"yiwen101"},"content":"More specifically, you should use either:"},{"lineNumber":27,"author":{"gitId":"yiwen101"},"content":"- add a line break with no indentation before the markdown content"},{"lineNumber":28,"author":{"gitId":"yiwen101"},"content":"- use the `\u003cmarkdown\u003e` (block level elements) or `\u003cmd\u003e` (inline level elements) tags to wrap the markdown content."},{"lineNumber":29,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":30,"author":{"gitId":"yiwen101"},"content":"For more information, please refer to this [section]({{baseUrl}}/userGuide/usingHtmlJavaScriptCss.html#markdown-in-html)."},{"lineNumber":31,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":"{% if \u0027presentation\u0027 in v[2] %}"},{"lineNumber":42,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":43,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":44,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"# Relevant Tips \u0026 Tricks"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Indent components\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../tipsAndTricks.md#indentComponents\" /\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":57,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027../usingComponents\u0027, \u0027imagesAndDiagrams\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":47,"yiwen101":8}},{"path":"docs/userGuide/formattingContents.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Formatting Contents\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"formattingContents\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 2"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\" id\u003d\"overview\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"**MarkBind supports a wide collection of Markdown-like basic content formatting syntax** such as text styling, tables, lists, images, links, etc."},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"./syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" {% if \u0027basic\u0027 in v[2] %}"},{"lineNumber":32,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":33,"author":{"gitId":"-"},"content":" {% endif %}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"# Relevant Tips \u0026 Tricks"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Escaping Characters\"\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tipsAndTricks.md#escapingCharacters\" /\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":45,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027markBindSyntaxOverview\u0027, \u0027usingComponents\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":43}},{"path":"docs/userGuide/markBindInTheProjectWorkflow.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"MarkBind in the Project Workflow\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"markBindInTheProjectWorkflow\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\" id\u003d\"overview\"\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"As **MarkBind is especially optimized as a project documentation tool**, it integrates well with the workflow of software projects."},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"#### Authoring Workflow"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"While most IDEs provide previews for Markdown files, unless your MarkBind files are using basic Markdown syntax only, you are recommended to launch a {{ link_live_preview }} and check the rendering of the page as you modify the source file."},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"#### GitHub Project Workflow"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"If you use GitHub for your project, you can [deploy your site to GitHub pages](deployingTheSite.html#deploying-to-github-pages) easily. You can even set up Travis to automatically deploy your site to GitHub pages whenever a branch in your repo is updated."},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"If you are using GitHub Pull Requests as part of your workflow, you can [set up Netlify to show a preview of the site generated from the MarkBind code in the PR](deployingTheSite.html#deploying-to-netlify)."},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"#### Using MarkBind for Project Documentation"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"Here is an example workflow for using MarkBind for both developer documentation and user documentation in a GitHub project:"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"Suppose the main development of the project is done in the `master` branch while product releases are done using the `release` branch."},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"You can keep the user docs in a separate directory (say `user-docs`) and set up a MarkBind project in that folder. When there is a new release, you can deploy the user-docs site to GitHub Pages for users to read."},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"Similarly, you can keep the dev docs in a separate directory (say `dev-docs`) and set up Netlify to deploy the site when there is an update to the `master` branch; that way, developers can see the latest version of dev-docs via the Netlify site."},{"lineNumber":42,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"#### Converting existing project documentation/wiki"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"MarkBind supports the automatic conversion of an existing GitHub wiki or `docs` folder containing Markdown files."},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"A MarkBind conversion involves the following:"},{"lineNumber":49,"author":{"gitId":"-"},"content":"- Adding a Home page: If your project already has a `README.md` or `Home.md`, the content will be copied over to `index.md`. Otherwise, a default home page will be added."},{"lineNumber":50,"author":{"gitId":"-"},"content":"- Adding an About Us page: If your project already has `about.md`, this will be used as the About page. Otherwise, a default About page will be added."},{"lineNumber":51,"author":{"gitId":"-"},"content":"- Adding a top navigation bar."},{"lineNumber":52,"author":{"gitId":"yiwen101"},"content":"- Adding a site navigation menu: If your project has a valid `_Sidebar.md` file, it will be used as the [site navigation menu]({{baseUrl}}/userGuide/tweakingThePageStructure.html#constructing-a-page-navigation-menu). Otherwise, the menu will be built from your project\u0027s directory structure and contain links to all addressable pages. "},{"lineNumber":53,"author":{"gitId":"-"},"content":"- Adding a custom footer: If your project has a valid `_Footer.md` file, it will be used as the website footer. Otherwise, a default footer will be added."},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" Conversion might not work if your project files have existing Nunjucks syntax. "},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"To convert your existing project, follow these steps:"},{"lineNumber":60,"author":{"gitId":"-"},"content":"1. Navigate into the project directory."},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Run `markbind init --convert` to convert the project."},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. You can now preview the website using `markbind serve` to view your newly converted MarkBind website."},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" You only need to run the conversion once. Once you have converted your project, you can proceed to edit it as a normal MarkBind project."},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003c/box\u003e "},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":69,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027deployingTheSite\u0027, \u0027redirectingToACustom404Page\u0027) }}"}],"authorContributionMap":{"-":68,"yiwen101":1}},{"path":"docs/userGuide/readerFacingFeatures.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" title: \"User Guide: Reader-Facing Features\""},{"lineNumber":3,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" pageNav: 5"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"components/advanced.md#slots-info\" /\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"# Reader-Facing Features"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"\u003cbox type\u003d\"info\"\u003eExpand the \u003cmd\u003e**details...**\u003c/md\u003e panel for more info!\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"{% macro show_topic(filename, heading) %}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"##### {{ heading }}"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"syntax/{{ filename }}.md#examples\" /\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"%%details...%%\" \u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" {% if \u0027reader-facing\u0027 in v[2] %}"},{"lineNumber":31,"author":{"gitId":"-"},"content":"{{ show_topic( k, v[0]) }}"},{"lineNumber":32,"author":{"gitId":"-"},"content":" {% endif %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{% endfor %}"}],"authorContributionMap":{"jingting1412":4,"-":29}},{"path":"docs/userGuide/reusingContents.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Reusing Contents\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"reusingContents\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 4"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\" id\u003d\"overview\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"**MarkBind is highly-optimized for content reuse**. It offers several mechanisms to provide readers with many variations of the content while minimizing duplication at source file level. As a result, instead of creating a one-size-fits-all site, MarkBind can create a site in which readers can chart their own path of reading."},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"syntax/variables.md\" /\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"syntax/includes.md\" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"## Reusing Contents Across Sites"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"**MarkBind supports reusing across sites.** It allows you to include the pages you want from a _sub-site_ in another _main-site_ without having to change anything in the source files of the _sub-site_ as long as the _sub-site_ source files are inside the directory of the _main-site_."},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose you have a site `textbook` and you want to include some pages from it in another site `course`. Given below is how you can locate the sub-site `textbook` inside the root directory of the main-site `course` so that files from `textbook` can be reused in the `course` site."},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"C:/course/"},{"lineNumber":40,"author":{"gitId":"-"},"content":" textbook/"},{"lineNumber":41,"author":{"gitId":"-"},"content":" index.md"},{"lineNumber":42,"author":{"gitId":"-"},"content":" overview.md"},{"lineNumber":43,"author":{"gitId":"-"},"content":" site.json"},{"lineNumber":44,"author":{"gitId":"-"},"content":" index.md"},{"lineNumber":45,"author":{"gitId":"-"},"content":" reading.md"},{"lineNumber":46,"author":{"gitId":"-"},"content":" site.json"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":"In `reading.md` (note how it reuses content from the sub-site `textbook`):"},{"lineNumber":50,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":51,"author":{"gitId":"-"},"content":"# Week 1 Reading:"},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"textbook/overview.md\" /\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":"```"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tip.md\" boilerplate \u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"tip_body\"\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":"If you are using Git for version control, you can set up the sub-site repository as a [Git sub-module](https://git-scm.com/book/en/v2/Git-Tools-Submodules) of the main site repository."},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"## Creating Content Variations"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"**MarkBind can create sites that give more control to the reader.** Given below are some mechanisms authors can use to create variations of content that gives more control to the reader in charting their own path through the content."},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"#### Allowing users to remove some contents"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"When the readers can remove an item from a page, they can create their own version of the page by removing items they don\u0027t want to see. This is especially useful when printing a page."},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"To make an element closeable, use `v-closeable`."},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003cdiv v-closeable\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":"Optional video:"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":"@[youtube](v40b3ExbM0c)"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"```"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"This is how the content will appear. Note how you can hover over the content to access the :x: button that can collapse the content."},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003cdiv v-closeable\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":"Optional video:"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":"@[youtube](v40b3ExbM0c)"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"#### Giving alternative contents"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":"You can use a [_Tabs_ component](components/presentation.html#tabs) to give alternative versions of content, for example, giving a code snippet in different programming languages."},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"#### Giving access to additional contents"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"You can use following components to give readers an option to access additional content at their discretion."},{"lineNumber":105,"author":{"gitId":"yiwen101"},"content":"* [Tooltips](components/popups.html#tooltips), [Popovers](components/popups.html#popovers), [Modals](components/popups.html#modals)"},{"lineNumber":106,"author":{"gitId":"-"},"content":"* [Expandable Panels](components/presentation.html#panels)"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"#### Organizing contents in alternative ways"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"You can take advantage of [MarkBind\u0027s feature for content reuse](reusingContents.html) to organize content in alternative ways to cater for different readers, without having to duplicate content. For example, you can have different pages that organizes the same information alphabetically, chronologically, by difficulty, group information by topic, etc."},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"#### Optimizing the Print View"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":"To \u003cspan class\u003d\"keyword\"\u003ehide minimized panels in the _print view_\u003c/span\u003e, add the following code to a CSS file used in your site."},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"```css"},{"lineNumber":117,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" .card-container \u003e .morph {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":"```"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"Tim-Siu"},"content":"MarkBind also comes with some built-in optimizations for printing by default:"},{"lineNumber":125,"author":{"gitId":"Tim-Siu"},"content":"- \u003cinclude src\u003d\"syntax/code.md#code-print-optimization\" /\u003e"},{"lineNumber":126,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":"#### Hiding some info in the generated content"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":"To permanently hide a fragment from the reader:"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"d-none\"\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":" content to hide ..."},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"...\" add-class\u003d\"d-none\"\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":" content to hide ..."},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003cpanel\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"```"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"To hide a fragment in one specific page, \u0027mark\u0027 the elements using a `class`:"},{"lineNumber":142,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"extra\"\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":" content to hide ..."},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":"```"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":"Then, in a page-specific CSS file,"},{"lineNumber":149,"author":{"gitId":"-"},"content":"```css"},{"lineNumber":150,"author":{"gitId":"-"},"content":".extra {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" display: none; /* \u0027block\u0027 or \u0027inline-block\u0027 if you want it to show */"},{"lineNumber":152,"author":{"gitId":"-"},"content":"}"},{"lineNumber":153,"author":{"gitId":"-"},"content":"```"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"#### Deploying a page multiple times with different titles"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"yiwen101"},"content":"By [overriding the `title` declared in the frontmatter of the page using `site.json`](tweakingThePageStructure.html#frontmatter), it is possible to allow MarkBind to serve the same page with different titles. "},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"This may especially be useful for users who are serving a page from a submodule."},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"#### Creating slight variations of content"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"yiwen101"},"content":"Tags are a good way to create multiple variations of a page within the same source file, such as to filter content for creating multiple different versions of the same page. See [_User Guide: Tweaking the Page Structure → Tags_](tweakingThePageStructure.html#plugin-tags) section for more information."},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":166,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027tweakingThePageStructure\u0027, \u0027workingWithSites\u0027) }}"}],"authorContributionMap":{"-":160,"yiwen101":3,"Tim-Siu":3}},{"path":"docs/userGuide/siteJsonFile.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" title: \"site.json File\""},{"lineNumber":3,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":4,"author":{"gitId":"-"},"content":" keywords: site.json"},{"lineNumber":5,"author":{"gitId":"-"},"content":" pageNav: 4"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"# `site.json` File"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"The `site.json` file {{ tooltip_root_directory }} is used to configure various aspects of a MarkBind website."},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"Here is a typical `site.json` file:"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"```json"},{"lineNumber":18,"author":{"gitId":"-"},"content":"{"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"baseUrl\": \"/myproduct\","},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"faviconPath\": \"myfavicon.png\","},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"titlePrefix\": \"FooBar Dev Docs\","},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"titleSuffix\": \"FooBar\","},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"bootstrapTheme\": \"bootswatch-cerulean\","},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"codeTheme\": \"light\","},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"codeLineNumbers\": true"},{"lineNumber":27,"author":{"gitId":"-"},"content":" },"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":29,"author":{"gitId":"-"},"content":" {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"layout\": \"normal\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"searchable\": \"no\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"externalScripts\": ["},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"https://cdn.plot.ly/plotly-latest.min.js\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"frontmatter\": {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"header\": \"header.md\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":" },"},{"lineNumber":41,"author":{"gitId":"-"},"content":" {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \"glob\": \"topics/**/*.md\","},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"globExclude\": [\"topics/*/appendix/*.md\"],"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"layout\": \"subtopic\""},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"pagesExclude\": [\"subsite/**/*.md\", \"node_modules/*\"],"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"externalScripts\": ["},{"lineNumber":49,"author":{"gitId":"-"},"content":" \"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config\u003dTeX-MML-AM_CHTML\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"deploy\": {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \"message\": \"Site Update.\","},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"repo\": \"https://github.com/myorg/myrepo.git\","},{"lineNumber":54,"author":{"gitId":"-"},"content":" \"branch\": \"gh-pages\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \"globalOverride\": {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \"footer\": \"my-footer.md\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" },"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \"ignore\": ["},{"lineNumber":60,"author":{"gitId":"-"},"content":" \"_site/*\","},{"lineNumber":61,"author":{"gitId":"-"},"content":" \"*.json\","},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"*.md\","},{"lineNumber":63,"author":{"gitId":"-"},"content":" \".git/*\","},{"lineNumber":64,"author":{"gitId":"-"},"content":" \".gitignore\","},{"lineNumber":65,"author":{"gitId":"-"},"content":" \"node_modules/*\""},{"lineNumber":66,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \"plugins\" : ["},{"lineNumber":68,"author":{"gitId":"-"},"content":" \"filterTags\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":70,"author":{"gitId":"-"},"content":" \"pluginsContext\" : {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"filterTags\" : {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \"tags\": [\"tag1\", \"tag2\"]"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \"headingIndexingLevel\": 4,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \"intrasiteLinkValidation\": {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \"enabled\": false"},{"lineNumber":78,"author":{"gitId":"-"},"content":" },"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \"plantumlCheck\": true"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":"```"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"#### **`baseUrl`**"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":"**The base URL relative to your domain.** Default: `\"\"`(empty)."},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"deployingTheSite.md#warning-about-baseUrl\" /\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"Note: `baseUrl` does not support [live preview](glossary.md#live-preview) as there is no use case for changing it in during `markbind serve`."},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"#### **`faviconPath`**"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":"**The location of the favicon.** Default: `favicon.ico`."},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":"%%{{ icon_info }} If the favicon was recently changed, you may need to force-refresh the Browser to see the new image.%%"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"#### **`titlePrefix`**"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"**The prefix for all page titles.** The separator `-` will be inserted by MarkBind."},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"#### **`titleSuffix`**"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"**The suffix for all page titles.** The separator `-` will be inserted by MarkBind."},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"#### **`style`**"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":"_(Optional)_ **The styling options to be applied to the site.** This includes:"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"* **`bootstrapTheme`**"},{"lineNumber":117,"author":{"gitId":"-"},"content":" _(Optional)_ The theme for the generated site.\u003cbr\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" Uses the default Bootstrap theme if not specified. See [User Guide: Themes](themes.html) for more details."},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":"* **`codeTheme`** [Optional. Default: `\"dark\"`]\u003cbr\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":" The theme used for fenced code blocks. Accepts either `\"light\"` or `\"dark\"`."},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"* **`codeLineNumbers`** [Optional. Default: `false`]\u003cbr\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":" The global setting to display or hide line numbers for code blocks. Accepts either `true` or `false`."},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"#### **`pages`**"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"**An array of pages to be rendered.**"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"* **`src/glob`**"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * `src` can be used to specify a single file, or an array of files.\u003cbr\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":" {{ icon_examples }} `docs/index.md` or `[ \u0027docs/index.md\u0027, \u0027docs/userGuide.md\u0027 ]` { .my-1 }"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * `glob` can be used alternatively to define a file pattern in the [_glob syntax_](https://en.wikipedia.org/wiki/Glob_(programming)), or an array of such file patterns.\u003cbr\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":" {{ icon_examples }} `**/*.md` or `[ \u0027**/*.md\u0027, \u0027**/index.md\u0027 ]` { .my-2 }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"* **`globExclude`**: An array of file patterns to be excluded from rendering when using `glob`, also defined in the glob syntax."},{"lineNumber":136,"author":{"gitId":"yiwen101"},"content":"* **`title`**: The page `\u003ctitle\u003e` for the generated web page. Titles specified here take priority over titles specified in the [frontmatter](tweakingThePageStructure.html#frontmatter) of individual pages."},{"lineNumber":137,"author":{"gitId":"yiwen101"},"content":"* **`layout`**: The [layout](tweakingThePageStructure.html#layouts) to be used by the page. Default: `default`."},{"lineNumber":138,"author":{"gitId":"-"},"content":"* **`searchable`**: Specifies that the page(s) should be excluded from searching. Default: `yes`."},{"lineNumber":139,"author":{"gitId":"-"},"content":"* **`externalScripts`**: An array of external scripts to be referenced on the page. Scripts referenced will be run before the layout script."},{"lineNumber":140,"author":{"gitId":"-"},"content":"* **`frontmatter`**: Specifies properties to add to the frontmatter of a page or glob of pages. Overrides any existing properties if they have the same name, and overrides any frontmatter properties specified in `globalOverride`."},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"page-property-overriding\"\u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"[Page properties that are defined in `site.json`](#pages) for a particular page will override those defined in the frontmatter of the page. For example, if we declare a `title` within the frontmatter of the page (say `index.md`) like such:"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" title: Hello World"},{"lineNumber":150,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":"```"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"But the `title` property in the corresponding `site.json` is set as such:"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"```js"},{"lineNumber":156,"author":{"gitId":"-"},"content":"{"},{"lineNumber":157,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":158,"author":{"gitId":"-"},"content":" {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":160,"author":{"gitId":"-"},"content":" \"title\": \"Landing Page\","},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":163,"author":{"gitId":"-"},"content":"}"},{"lineNumber":164,"author":{"gitId":"-"},"content":"```"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":"Then, the title of `index.md` will be set as \"Landing Page\" instead of \"Hello World\"."},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"In this manner, setting the property `title` in `site.json` will always override the `title` declared within the frontmatter of the page."},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"page-glob-overriding\"\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":"Note: If multiple **`src`** (pages) or **`glob`** (globs) attributes match a file, MarkBind will merge properties from all entries. If there are conflicting properties, pages are given priority over globs. If there are multiple matching glob entries, the last entry is given priority."},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":"{{ icon_example }} Multiple entries matching `index.md`:"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":"```js"},{"lineNumber":183,"author":{"gitId":"-"},"content":"{"},{"lineNumber":184,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":185,"author":{"gitId":"-"},"content":" {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":187,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":188,"author":{"gitId":"-"},"content":" \"searchable\": \"no\""},{"lineNumber":189,"author":{"gitId":"-"},"content":" },"},{"lineNumber":190,"author":{"gitId":"-"},"content":" {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" \"glob\": \"*.md\","},{"lineNumber":192,"author":{"gitId":"-"},"content":" \"layout\": \"normal\","},{"lineNumber":193,"author":{"gitId":"-"},"content":" \"searchable\": \"yes\""},{"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":""},{"lineNumber":199,"author":{"gitId":"-"},"content":"The following properties will apply to `index.md`:"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"```js"},{"lineNumber":202,"author":{"gitId":"-"},"content":"{"},{"lineNumber":203,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":204,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\", // Inherited from page"},{"lineNumber":205,"author":{"gitId":"-"},"content":" \"layout\": \"normal\", // Inherited from glob"},{"lineNumber":206,"author":{"gitId":"-"},"content":" \"searchable\": \"no\", // Page takes priority over glob"},{"lineNumber":207,"author":{"gitId":"-"},"content":"}"},{"lineNumber":208,"author":{"gitId":"-"},"content":"```"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":"#### **`pagesExclude`**"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":"**An array of file patterns to be excluded from rendering.** The exclusion pattern follows the glob syntax."},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"This property is the global variant to the `globExclude` property and is functionally identical to it. If the two are used at once, the file patterns from both properties will be combined when excluding pages."},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"#### **`externalScripts`**"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":"**An array of external scripts to be referenced on all pages.** To reference an external script only on specific pages, `externalScripts` should be specified in `pages` instead. Scripts referenced will be run before the layout script."},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"#### **`globalOverride`**"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":"**Globally overrides properties in the frontmatter of all pages.** Any property included in the global override will automatically be merged with the frontmatter of every single page, and override them if the property exists."},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":"#### **`ignore`**"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":"**An array of file patterns to be ignored when copying files to the generated site.** By default, MarkBind will copy all the files as assets of the generated site."},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":"The ignore pattern follows the [glob pattern used in .gitignore](https://git-scm.com/docs/gitignore#_pattern_format). For example, `*.md` ignores all markdown source files."},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"site-json-deploy\"\u003e"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":"#### **`deploy`**"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":"**The settings for [auto-deployment to GitHub pages](deployingTheSite.html).**"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":"* **`message`** [Optional. Default: `\"Site Update.\"`]\u003cbr\u003e"},{"lineNumber":241,"author":{"gitId":"-"},"content":" The commit message used for the deployment commit."},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **`repo`** [Optional. Default: the current working project\u0027s repo]\u003cbr\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":" The repo you want to deploy to.\u003cbr\u003e"},{"lineNumber":245,"author":{"gitId":"-"},"content":" Format: `\"https://github.com/\u003corg|username\u003e/\u003crepo\u003e.git\"` (`\"git@github.com:\u003corg|username\u003e/\u003crepo\u003e.git\"` if you use SSH)\u003cbr\u003e"},{"lineNumber":246,"author":{"gitId":"-"},"content":" {{ icon_example }} `\"https://github.com/myorg/myrepo.git\"`"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":"* **`branch`** [Optional. Default: `\"gh-pages\"`]\u003cbr\u003e"},{"lineNumber":249,"author":{"gitId":"-"},"content":" The branch that will be deployed to in the remote repo."},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":"#### **`plugins`**, **`pluginsContext`**"},{"lineNumber":254,"author":{"gitId":"-"},"content":""},{"lineNumber":255,"author":{"gitId":"-"},"content":"**A list of plugins to load.** Plugins are user-defined extensions that can add custom features to MarkBind. `pluginsContext` contains settings to be applied to the loaded plugins. See [User Guide: Using Plugins](usingPlugins.html) for more details."},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"yiwen101"},"content":"The example above uses tags as an example of configuring plugin settings, refer to the [`filterTags` plugin](tweakingThePageStructure.html#toggling-alternative-contents) for more details."},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"#### **`headingIndexingLevel`**"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":"**The level of headings to be indexed for searching.** Default: `3` %%i.e., only headings of levels 1,2,3 will be indexed for searching%%."},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":"#### **`enableSearch`**"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"**Specifies that the website should use MarkBind\u0027s search functionality.** Default: `true`. See [User Guide: Making the Site Searchable](makingTheSiteSearchable.html) for more details."},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":"#### **`timeZone`**"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":"**Time zone of the [time stamp](reusingContents.html#built-in-global-variables).** Default: `\"UTC\"`."},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"Time Zone Options\"\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"pages/timeZones.md\" /\u003e"},{"lineNumber":273,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":""},{"lineNumber":277,"author":{"gitId":"-"},"content":"#### **`locale`**"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":"**Language by locale used for the [time stamp](reusingContents.html#built-in-global-variables).** Default: `\"en-GB\"` (`English (United Kingdom)`). \u003cbr\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":"The date format is thus: `\u003cDay\u003e, \u003cDate\u003e \u003cMonth\u003e \u003cYear\u003e, \u003c24-hour Time\u003e \u003cTime Zone Code\u003e`."},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"Locale Options\"\u003e"},{"lineNumber":283,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"pages/locales.md\" /\u003e"},{"lineNumber":284,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":285,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":"#### **`intrasiteLinkValidation`**"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":"**Toggle whether to validate intra-site links.** By default, MarkBind will validate all intra-site links and alert you of any potentially invalid ones."},{"lineNumber":290,"author":{"gitId":"-"},"content":"To disable this validation **entirely**, you may add the following to `site.json`:"},{"lineNumber":291,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"disable-global-intrasite-link-validation\"\u003e"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" ```js"},{"lineNumber":294,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":295,"author":{"gitId":"-"},"content":" \"intrasiteLinkValidation\": {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" \"enabled\": false"},{"lineNumber":297,"author":{"gitId":"-"},"content":" },"},{"lineNumber":298,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":299,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":"#### **`plantumlCheck`**"},{"lineNumber":304,"author":{"gitId":"-"},"content":""},{"lineNumber":305,"author":{"gitId":"-"},"content":"**Toggle whether to display a warning about PlantUML\u0027s prerequisite. Only applicable for non-Windows users.** By default, MarkBind will check if you have Graphviz installed when you are using PlantUML diagrams."},{"lineNumber":306,"author":{"gitId":"-"},"content":"To disable this validation and the display of the warning, you may add the following to `site.json`:"},{"lineNumber":307,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"plantuml-check\"\u003e"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" ```js"},{"lineNumber":310,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":311,"author":{"gitId":"-"},"content":" \"plantumlCheck\": false,"},{"lineNumber":312,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":313,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":312,"yiwen101":3}},{"path":"docs/userGuide/syntax/annotations.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Annotations"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"**An `annotate` component allows you to easily annotate over any images.**"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"Annotate wrappers (`\u003cannotate\u003e`) are used in conjunction with Annotate"},{"lineNumber":6,"author":{"gitId":"-"},"content":"Points (`\u003ca-point\u003e`)."},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"- `\u003cannotate\u003e`: Annotate wrappers are used to hold the image and set its width and height."},{"lineNumber":9,"author":{"gitId":"-"},"content":"- `\u003ca-point\u003e`: Annotate points define the position, text and style of each point within the image. Insert them between the Annotate wrappers."},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"The x and y coordinates of each Annotate Point are relative to the image and are written in percentage of total width or height."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"LamJiuFong"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\" lazy\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c!-- Minimal Point --\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"25%\" content\u003d\"This point is 25% from the left and 25% from the top\" /\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Size (default size is 40px) --\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" content\u003d\"This point is 50% from the left and 25% from the top\" size\u003d\"60\"/\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Header (default is empty) --\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"25%\" content\u003d\"This point is 75% from the left and 25% from the top\" header\u003d\"This has a header\"/\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Color (default color is green) --\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"50%\" content\u003d\"This point is 25% from the left and 50% from the top\" color\u003d\"red\"/\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Opacity (default opacity is 0.3) --\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"50%\" content\u003d\"This point is 50% from the left and 50% from the top\" opacity\u003d\"0.7\"/\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Label (default is empty) --\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"75%\" content\u003d\"This point is 25% from the left and 75% from the top\" label\u003d\"1\"/\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c!-- Customize Text Color (default color is black) --\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"75%\" content\u003d\"This point is 50% from the left and 75% from the top\" textColor\u003d\"white\" color\u003d\"black\" label\u003d\"2\" opacity\u003d\"1\"/\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c!-- Customize Font Size (default font size is 14) --\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"75%\" content\u003d\"This point is 75% from the left and 75% from the top\" fontSize\u003d\"30\" label\u003d\"3\"/\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c!-- Customize Label (default is a rounded button) --\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"50%\" content\u003d\"This point is 75% from the left and 50% from the top\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"badge bg-primary\"\u003eBadge label\u003c/span\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003c/a-point\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"**Use markdown in the header, label and content**"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"Annotate Points supports markdown in the header, label and content. "},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"25%\" content\u003d\"# Content\" /\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" header\u003d\":blush:\" /\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"25%\" label\u003d\":heart:\"/\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"**Customising shapes for Annotate Point** \u003cbr\u003e "},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"Annotate Points supports different shapes and customisation. "},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":"The default shape used is a rounded button."},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":"When using a customised shape, the options shape, color and opacity will not work. "},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"Style the shape to achieve the same effect."},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"50%\" content\u003d\"This point is 75% from the left and 50% from the top\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"badge bg-primary\"\u003eBadge label\u003c/span\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c/a-point\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"50%\" content\u003d\"This point is 25% from the left and 50% from the top\"\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003cpic src\u003d\"../../images/deer.jpg\" width\u003d\"50\" height\u003d\"50\"\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" \u003c/a-point\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003c!-- Customised Annotate Point with styling--\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"50%\" content\u003d\"This point is 25% from the left and 50% from the top\"\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003cdiv style\u003d\"opacity: 90%; color: red\"\u003eCustom\u003c/div\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003c/a-point\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":"**Using triggers and positions for Annotate Point** \u003cbr\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"Similar to **[popovers](../components/popups.md#popovers)**, Annotate Points also support different types of triggers and positions"},{"lineNumber":92,"author":{"gitId":"-"},"content":"for users with different needs."},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":" \u003c!-- Default Trigger (click)--\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"33%\" y\u003d\"33%\" content\u003d\"Lorem ipsum dolor sit amet\" /\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c!-- Set Trigger to hover focus --\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"66%\" y\u003d\"33%\" content\u003d\"Lorem ipsum dolor sit amet\" trigger\u003d\"hover focus\"/\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003c!-- Set Popover Placement (click)--\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"66%\" content\u003d\"Popover on the left\" placement\u003d\"left\"/\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"66%\" content\u003d\"Popover on the bottom\" placement\u003d\"bottom\"/\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"66%\" content\u003d\"Popover on the right\" placement\u003d\"right\"/\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \u003c!-- Both trigger and popover placement hover focus --\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"66%\" content\u003d\"Popover on the bottom\" placement\u003d\"bottom\" trigger\u003d\"hover focus\"/\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":"**Displaying content as legends in Annotate Point**"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":"`\u003ca-point\u003e` allows users to display its content !!inside a popover!! or !!as a legend below the diagram!! or !!both!!. However, the label attribute must be specified in `\u003ca-point\u003e` in order to display the content below the image."},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":" \u003c!-- Default Legend (popover only)--\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"50%\" content\u003d\"There is only text when you click me\" label\u003d\"1\"/\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \u003c!-- Set Legend to bottom only (no popover) --\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"50%\" content\u003d\"Clicking on this does nothing\" label\u003d\"2\" legend\u003d\"bottom\" header\u003d\"Headers are displayed as well\"/\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":" \u003c!-- Set Legend to both --\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"50%\" content\u003d\"There is text at both locations\" label\u003d\"3\" legend\u003d\"both\" header\u003d\"Headers are displayed at both positions\"/\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":"**Sample use cases for Annotate** \u003cbr\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":"Here we showcase some use cases of the Annotate feature."},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":"**Example 1: Describing elements in an image** \u003cbr\u003e"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleObject.png\" height\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":147,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"6%\" y\u003d\"50%\" content\u003d\"You can use a triangle and a solid line (not to be confused with an arrow) to indicate class inheritance.\" label\u003d\"1\" header\u003d\"Class inheritance\" legend\u003d\"both\"/\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25.5%\" y\u003d\"50%\" content\u003d\"UML uses a solid diamond symbol to denote composition.\" label\u003d\"2\" header\u003d\"Composition\" color\u003d\"red\" legend\u003d\"both\"/\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"45%\" y\u003d\"50%\" content\u003d\"UML uses a hollow diamond to indicate an aggregation.\" label\u003d\"3\" header\u003d\"Aggregation\" color\u003d\"blue\" legend\u003d\"both\"/\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"64.5%\" y\u003d\"50%\" content\u003d\"Association labels describe the meaning of the association.\" label\u003d\"4\" header\u003d\"Association labels\" color\u003d\"yellow\" legend\u003d\"both\"/\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"**Example 2: Drawing over elements** \u003cbr\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleSequence.png\" height\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":162,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"35%\" y\u003d\"18.5%\" content\u003d\"Operation is invoked\" header\u003d\"Operation\" opacity\u003d\"0.2\" size\u003d\"30\"/\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"65%\" y\u003d\"50%\" content\u003d\"This is the period during which the method is being executed\" header\u003d\"Activation Bar\" opacity\u003d\"0.3\" size\u003d\"50\" color\u003d\"yellow\"/\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"14%\" y\u003d\"85%\" content\u003d\"Return control and possibly some return value\" header\u003d\"Return Value\" opacity\u003d\"0.2\" size\u003d\"30\" color\u003d\"blue\"/\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":167,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":"****`\u003ca-point\u003e` Options****"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"| Name | Type | Default | Description |"},{"lineNumber":174,"author":{"gitId":"-"},"content":"| --------- | -------- | ----------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|"},{"lineNumber":175,"author":{"gitId":"-"},"content":"| x | `String` | | **This must be specified.**\u003cbr\u003eThe x-coordinate of the point.\u003cbr\u003eSupports range of values from `0%` to `100%`. |"},{"lineNumber":176,"author":{"gitId":"-"},"content":"| y | `String` | | **This must be specified.**\u003cbr\u003eThe y-coordinate of the point.\u003cbr\u003eSupports range of values from `0%` to `100%`. |"},{"lineNumber":177,"author":{"gitId":"-"},"content":"| content | `String` | `\u0027\u0027` | Annotate Point content.\u003cbr\u003eThe annotation content will be omitted if this is not provided. |"},{"lineNumber":178,"author":{"gitId":"-"},"content":"| header | `String` | `\u0027\u0027` | Annotate Point header.\u003cbr\u003eThe header will be omitted if this is not provided. |"},{"lineNumber":179,"author":{"gitId":"-"},"content":"| trigger | `String` | `click` | Popover trigger type.\u003cbr\u003eSupports: `click`, `focus`, `hover`, or any space-separated combination of these. |"},{"lineNumber":180,"author":{"gitId":"-"},"content":"| placement | `String` | `top` | Position of the Popover.\u003cbr\u003eSupports: `top`, `left`, `right`, `bottom`. |"},{"lineNumber":181,"author":{"gitId":"-"},"content":"| label | `String` | `\u0027\u0027` | The label shown on the point itself.\u003cbr\u003eThe label will be omitted if this is not provided.\u003cbr\u003eNote that labels should not be too long as they might overflow out of the point. |"},{"lineNumber":182,"author":{"gitId":"-"},"content":"| size | `String` | `\u002740\u0027` | The size of the point in pixels. \u003cbr\u003e Does not work with customised shapes |"},{"lineNumber":183,"author":{"gitId":"-"},"content":"| color | `String` | `\u0027green\u0027` | The color of the point.\u003cbr\u003eSupports any color in the CSS color format. E.g. `red`, `#ffffff`, `rgb(66, 135, 245)`, etc. \u003cbr\u003e Does not work with customised shapes |"},{"lineNumber":184,"author":{"gitId":"-"},"content":"| opacity | `String` | `\u00270.3\u0027` | The opacity of the point.\u003cbr\u003eSupports range of values from `0` to `1`. \u003cbr\u003e Does not work with customised shapes |"},{"lineNumber":185,"author":{"gitId":"-"},"content":"| fontSize | `String` | `\u002714\u0027` | The font size of the label.\u003cbr\u003eSupports any pixel size smaller than size of the point. |"},{"lineNumber":186,"author":{"gitId":"-"},"content":"| textColor | `String` | `\u0027black\u0027` | The color of the label.\u003cbr\u003eSupports any color in the CSS color format. E.g. `red`, `#ffffff`, `rgb(66, 135, 245)`, etc. |"},{"lineNumber":187,"author":{"gitId":"-"},"content":"| legend | `String` | `\u0027popover\u0027` | The position of the Annotate Point content and header.\u003cbr\u003eSupports: `popover`, `bottom`, `both`. |"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":"****`\u003cannotate\u003e` Options****"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"This is effectively the same as the options used for the [picture](#pictures) component."},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":"| Name | Type | Default | Description |"},{"lineNumber":194,"author":{"gitId":"LamJiuFong"},"content":"|--------| --------- | ------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|"},{"lineNumber":195,"author":{"gitId":"-"},"content":"| alt | `string` | | **This must be specified.**\u003cbr\u003eThe alternative text of the image. |"},{"lineNumber":196,"author":{"gitId":"-"},"content":"| src | `string` | | **This must be specified.**\u003cbr\u003eThe URL of the image.\u003cbr\u003eThe URL can be specified as absolute or relative references. More info in: _[Intra-Site Links]({{baseUrl}}/userGuide/formattingContents.html#intraSiteLinks)_ |"},{"lineNumber":197,"author":{"gitId":"-"},"content":"| height | `string` |`\u0027\u0027`| The height of the image in pixels. |"},{"lineNumber":198,"author":{"gitId":"-"},"content":"| width | `string` |`\u0027\u0027`| The width of the image in pixels.\u003cbr\u003eIf both width and height are specified, width takes priority over height. It is to maintain the image\u0027s aspect ratio. |"},{"lineNumber":199,"author":{"gitId":"LamJiuFong"},"content":"| lazy | `boolean` | false | The `\u003cannotate\u003e` component lazy loads if this attribute is specified.\u003cbr\u003e**Either the height or width should be specified to avoid layout shifts while lazy loading images.** |"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":"```"},{"lineNumber":206,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":207,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"25%\" content\u003d\"Lorem ipsum dolor sit amet\" /\u003e"},{"lineNumber":208,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" content\u003d\"Lorem ipsum dolor sit amet\" label\u003d\"1a\"/\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" content\u003d\"Lorem ipsum dolor sit amet\" label\u003d\"1b\" legend\u003d\"both\"/\u003e"},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"```"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"https://markbind.org/userGuide/diagrams/object.png\" height\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":218,"author":{"gitId":"-"},"content":" \u003c!-- Default Legend (popover only)--\u003e"},{"lineNumber":219,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"6%\" y\u003d\"50%\" content\u003d\"You can use a triangle and a solid line (not to be confused with an arrow) to indicate class inheritance.\" label\u003d\"1\" header\u003d\""},{"lineNumber":220,"author":{"gitId":"-"},"content":"Class inheritance\"/\u003e"},{"lineNumber":221,"author":{"gitId":"-"},"content":" \u003c!-- Set Legend to bottom only (popover is not clickable) --\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25.5%\" y\u003d\"50%\" content\u003d\"UML uses a solid diamond symbol to denote composition.\" label\u003d\"2\" header\u003d\"Composition\" color\u003d\"red\"/\u003e"},{"lineNumber":223,"author":{"gitId":"-"},"content":" \u003c!-- Set Legend to both --\u003e"},{"lineNumber":224,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"45%\" y\u003d\"50%\" content\u003d\"UML uses a hollow diamond to indicate an aggregation.\" label\u003d\"3\" header\u003d\""},{"lineNumber":225,"author":{"gitId":"-"},"content":"Aggregation\" color\u003d\"blue\"/\u003e"},{"lineNumber":226,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"64.5%\" y\u003d\"50%\" content\u003d\"Association labels describe the meaning of the association.\" label\u003d\"4\" header\u003d\"Association labels\" color\u003d\"yellow\"/\u003e"},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":"\u003c/popover\u003e"},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":228}},{"path":"docs/userGuide/syntax/badges.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Badges"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"yiwen101"},"content":"**Example:**"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":5,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":6,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":7,"author":{"gitId":"yiwen101"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003e"},{"lineNumber":8,"author":{"gitId":"yiwen101"},"content":"Some Plain Text"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":"\u003c/span\u003e"},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003e"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":"\u003cmd\u003e_Some Markdown_\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"yiwen101"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"yiwen101"},"content":"\u003c/variable\u003e"},{"lineNumber":15,"author":{"gitId":"yiwen101"},"content":"\u003c/include\u003e"},{"lineNumber":16,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":17,"author":{"gitId":"yiwen101"},"content":"**You can choose from a variety of colors for your badges. You can also use the `rounded-pill` class to make the badges pill-shaped.**"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":"Normal:"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003ePrimary\u003c/span\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-secondary\"\u003eSecondary\u003c/span\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-success\"\u003eSuccess\u003c/span\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-danger\"\u003eDanger\u003c/span\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-warning text-dark\"\u003eWarning\u003c/span\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-info text-dark\"\u003eInfo\u003c/span\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-light text-dark\"\u003eLight\u003c/span\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-dark\"\u003eDark\u003c/span\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cbr\u003ePills:"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-primary\"\u003ePrimary\u003c/span\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-secondary\"\u003eSecondary\u003c/span\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-success\"\u003eSuccess\u003c/span\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-danger\"\u003eDanger\u003c/span\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-warning text-dark\"\u003eWarning\u003c/span\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-info text-dark\"\u003eInfo\u003c/span\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-light text-dark\"\u003eLight\u003c/span\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-dark\"\u003eDark\u003c/span\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"yiwen101"},"content":"**You can use Badges in combination with headings, buttons, links, etc.**"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":"Links:"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003ca href\u003d\"#\" class\u003d\"badge bg-primary\"\u003ePrimary\u003c/a\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":"\u003ca href\u003d\"#\" class\u003d\"badge rounded-pill bg-warning text-dark\"\u003eWarning\u003c/a\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"Buttons:"},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cbutton type\u003d\"button\" class\u003d\"btn btn-primary\"\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Difficulty Level \u003cspan class\u003d\"badge bg-light text-dark\"\u003e4\u003c/span\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/button\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"Headings:"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"### Feature X \u003cspan class\u003d\"badge bg-danger\"\u003ebeta\u003c/span\u003e {.no-index}"},{"lineNumber":59,"author":{"gitId":"-"},"content":"##### Feature Y \u003cspan class\u003d\"badge rounded-pill bg-success\"\u003estable\u003c/span\u003e {.no-index}"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"%%{{ icon_info }} You can refer to [Bootstrap documentation](https://getbootstrap.com/docs/5.1/components/badge/) to find more information about Badges.%%"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003ePrimary\u003c/span\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-success\"\u003eSuccess\u003c/span\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003cbutton type\u003d\"button\" class\u003d\"btn btn-primary\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" Difficulty Level \u003cspan class\u003d\"badge bg-light text-dark\"\u003e4\u003c/span\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"\u003c/button\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":"```"},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003ePrimary\u003c/span\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-success\"\u003eSuccess\u003c/span\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003cbutton type\u003d\"button\" class\u003d\"btn btn-primary\"\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Difficulty Level \u003cspan class\u003d\"badge bg-light text-dark\"\u003e4\u003c/span\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":"##### Feature Y \u003cspan class\u003d\"badge rounded-pill bg-warning text-dark\"\u003estable\u003c/span\u003e {.no-index}"},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003c/button\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":73,"yiwen101":16}},{"path":"docs/userGuide/syntax/boxes.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% from \"userGuide/components/advanced.md\" import slot_info_trigger %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Boxes"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"yiwen101"},"content":"**Simple Example**"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":"plain text"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":13,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e"},{"lineNumber":14,"author":{"gitId":"yiwen101"},"content":"\u003cmd\u003e_markdown_\u003c/md\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":16,"author":{"gitId":"yiwen101"},"content":"\u003c/variable\u003e"},{"lineNumber":17,"author":{"gitId":"yiwen101"},"content":"\u003c/include\u003e"},{"lineNumber":18,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":19,"author":{"gitId":"yiwen101"},"content":"**Boxes come with different built-in types.**"},{"lineNumber":20,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":21,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":22,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":23,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" info"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" warning"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" success"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\"\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" important"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"wrong\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" wrong"},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" tip"},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\"\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" definition"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" dismissible\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" dismissible info"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\" header\u003d\"#### Header :rocket:\" icon-size\u003d\"2x\"\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cbox type\u003d\"warning\" header\u003d\"You can use **markdown** here! :pizza:\" dismissible\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/box\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"**The built in types can be colored.**"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"primary\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" primary"},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"secondary\"\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" secondary"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"success\"\u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":" success"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"danger\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" danger"},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"warning\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" warning"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"info\"\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" info"},{"lineNumber":81,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"light\"\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" light"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"dark\"\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":" dark"},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"**MarkBind also supports a light color scheme for boxes**"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003cbox light\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":" default light"},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" light\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" info light"},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" light\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" warning light"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\" light\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" success light"},{"lineNumber":107,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":" important light"},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"wrong\" light\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":" wrong light"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" light\u003e"},{"lineNumber":115,"author":{"gitId":"-"},"content":" tip light"},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" light\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" definition light"},{"lineNumber":119,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" header\u003d\"##### Header markdown :rocket:\" light\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":" definition light with header markdown"},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"**MarkBind also supports a seamless style of boxes**"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"As `light` and `seamless` are mutually exclusive styles, `light` takes priority over `seamless`."},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":"\u003cbox seamless\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":" default seamless"},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":140,"author":{"gitId":"-"},"content":" info seamless"},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":" warning seamless"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\" seamless\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":" success seamless"},{"lineNumber":147,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" seamless\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" important seamless"},{"lineNumber":150,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"wrong\" seamless\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":" wrong seamless"},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" tip seamless"},{"lineNumber":156,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" seamless dismissible\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":" dismissible definition seamless"},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" header\u003d\"##### Header markdown :rocket:\" seamless\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":" success seamless with header markdown"},{"lineNumber":162,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":"**You can further customize the Box\u0027s appearance.**"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":169,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003cbox background-color\u003d\"#ffca6a\" border-color\u003d\"grey\" border-left-color\u003d\"#8b5a01\"\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":"default type, styled as an orange box with a brown left border"},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" color\u003d\"red\" icon\u003d\":rocket:\"\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":"info, with a custom markdown rocket icon and `red` colored text."},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"You can use any inline markdown in the `icon` property."},{"lineNumber":179,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":180,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":"**You can remove the background, icon and borders of preset styles.**"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":186,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":188,"author":{"gitId":"-"},"content":"\u003cbox no-icon no-background type\u003d\"success\"\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":" success box without a tick icon and backgound"},{"lineNumber":190,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":"\u003cbox no-border type\u003d\"definition\" light\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":" definition type box, light style without border"},{"lineNumber":194,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox header\u003d\"Note\" type\u003d\"info\" seamless\u003e"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"Custom styles **(** `background-color`, `border-color`, `border-left-color`, `icon` **)** as introduced in the previous section, takes precedence over the `no-background`, `no-border`, `no-icon` attributes."},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":"**You can also use icons, resize them and change their color accordingly.**"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":206,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":208,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\" icon\u003d\":fas-camera:\"\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit"},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" icon\u003d\":fas-camera:\" icon-size\u003d\"2x\"\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":214,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" icon\u003d\":fas-camera:\" icon-size\u003d\"3x\"\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."},{"lineNumber":216,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" icon\u003d\":fas-camera:\" icon-color\u003d\"red\" icon-size\u003d\"3x\"\u003e"},{"lineNumber":218,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."},{"lineNumber":219,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":220,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":224,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":225,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":226,"author":{"gitId":"-"},"content":"background-color | `String` | `null` |"},{"lineNumber":227,"author":{"gitId":"-"},"content":"border-color | `String` | `null` |"},{"lineNumber":228,"author":{"gitId":"-"},"content":"border-left-color | `String` | `null` | Overrides border-color for the left border."},{"lineNumber":229,"author":{"gitId":"-"},"content":"color | `String` | `null` | Color of the text."},{"lineNumber":230,"author":{"gitId":"-"},"content":"dismissible | `Boolean` | `false` | Adds a button to close the box to the top right corner."},{"lineNumber":231,"author":{"gitId":"-"},"content":"icon{{slot_info_trigger}} | `String` | `null` | Inline MarkDown text of the icon displayed on the left."},{"lineNumber":232,"author":{"gitId":"-"},"content":"icon-size | `String` | `null` | Resizes the icon. Supports integer-scaling of the icon dimensions e.g. `2x`, `3x`, `4x`, etc."},{"lineNumber":233,"author":{"gitId":"-"},"content":"icon-color | `String` | `null` | Color of the icon."},{"lineNumber":234,"author":{"gitId":"-"},"content":"header{{slot_info_trigger}} | `String` | `null` | Markdown text of the box header."},{"lineNumber":235,"author":{"gitId":"-"},"content":"type | `String` | `\u0027\u0027` | Supports: `info`, `warning`, `success`, `important`, `wrong`, `tip`, `definition`, or empty for default."},{"lineNumber":236,"author":{"gitId":"-"},"content":"theme | `String` | `\u0027\u0027` | Supports: `primary`, `secondary`, `success`, `danger`, `warning`, `tip`, `light`, `dark` or empty for default."},{"lineNumber":237,"author":{"gitId":"-"},"content":"light | `Boolean` | `false` | Uses a light color scheme for the box."},{"lineNumber":238,"author":{"gitId":"-"},"content":"seamless | `Boolean` | `false` | Uses a seamless style for the box. If `light` is specified, this style will not be activated."},{"lineNumber":239,"author":{"gitId":"-"},"content":"no-border | `Boolean` | `false` | Removes border, except if styled by `border-color` or `border-left-color`. "},{"lineNumber":240,"author":{"gitId":"-"},"content":"no-background | `Boolean` | `false` | Removes background, except if styled by `background-color` option."},{"lineNumber":241,"author":{"gitId":"-"},"content":"no-icon | `Boolean` | `false` | Removes icon, except if icon is displayed via `icon` option."},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":247,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":248,"author":{"gitId":"-"},"content":" warning"},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"```"},{"lineNumber":251,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":" default"},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":258,"author":{"gitId":"-"},"content":" info"},{"lineNumber":259,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":260,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":" warning"},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\"\u003e"},{"lineNumber":264,"author":{"gitId":"-"},"content":" success"},{"lineNumber":265,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\"\u003e"},{"lineNumber":267,"author":{"gitId":"-"},"content":" important"},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"wrong\"\u003e"},{"lineNumber":270,"author":{"gitId":"-"},"content":" wrong"},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":273,"author":{"gitId":"-"},"content":" tip"},{"lineNumber":274,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\"\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":" definition"},{"lineNumber":277,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":278,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":264,"yiwen101":14}},{"path":"docs/userGuide/syntax/code.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Code"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"#### Themes"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"MarkBind can present formatted code blocks, be it fenced or inline, with either **light** or **dark** themes. The default is dark \u003ctrigger for\u003d\"modal:code-dark-example\" trigger\u003d\"click\"\u003e_(click for an example)_\u003c/trigger\u003e."},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cmodal header\u003d\"Dark Code Theme\" id\u003d\"modal:code-dark-example\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"/images/codeDarkTheme.png\" alt\u003d\"Theme example\"\u003e\u003c/pic\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/modal\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"Refer [here](../siteJsonFile.html#style) for configuring MarkBind to use a specific theme for the code blocks."},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"#### Fenced Code"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"MarkBind provides several features, some of which are added on top of the existing functionality of Markdown\u0027s _fenced code blocks_."},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003csmall\u003eMore info: \u003chttps://www.markdownguide.org/extended-syntax#fenced-code-blocks\u003e\u003c/small\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"Features:"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"* Syntax coloring"},{"lineNumber":23,"author":{"gitId":"-"},"content":"* Line numbering"},{"lineNumber":24,"author":{"gitId":"-"},"content":"* Line highlighting"},{"lineNumber":25,"author":{"gitId":"-"},"content":"* Code block headers"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"##### Syntax coloring"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"To enable syntax coloring, specify a language next to the backticks before the fenced code block."},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"```xml"},{"lineNumber":34,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"```"},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"##### Line numbering"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"Line numbers are \u003ctooltip content\u003d\"Line numbers were provided by default in version v3.1.1 and below. To preserve the exact line numbers behavior of sites generated in previous versions, simply set the codeLineNumbers option in site.json to true\"\u003ehidden by default\u003c/tooltip\u003e. To enable line numbers for the entire site by default,"},{"lineNumber":45,"author":{"gitId":"-"},"content":"add `\"codeLineNumbers\": true` to the [`site.json`]({{baseUrl}}/userGuide/siteJsonFile.html#style) file:"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"```json {highlight-lines\u003d\"8[:]\"}"},{"lineNumber":48,"author":{"gitId":"-"},"content":"{"},{"lineNumber":49,"author":{"gitId":"-"},"content":" // ..."},{"lineNumber":50,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"bootstrapTheme\": \"bootswatch-cerulean\","},{"lineNumber":52,"author":{"gitId":"-"},"content":" \"codeTheme\": \"light\","},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"codeLineNumbers\": true // optional, false if omitted"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // code below omitted for brevity"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}"},{"lineNumber":57,"author":{"gitId":"-"},"content":"```"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"For each code block, you may also use the `line-numbers` or `no-line-numbers` classes to override the site-wide setting as such:"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":"```xml {.line-numbers}"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":"```"},{"lineNumber":68,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":"```xml {.no-line-numbers}"},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"```"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"You can have your line numbers start with a value other than `1` with the `start-from` attribute."},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"```js {start-from\u003d6}"},{"lineNumber":86,"author":{"gitId":"-"},"content":"function add(a, b) {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return a + b;"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}"},{"lineNumber":89,"author":{"gitId":"-"},"content":"```"},{"lineNumber":90,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":"##### Line highlighting"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":"You can add the `highlight-lines` attribute to add highlighting to your code block. Refer to the examples"},{"lineNumber":96,"author":{"gitId":"-"},"content":"below for a visual demonstration of all the possible ways of highlighting a code block."},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"**Full text highlight**"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":"```js {start-from\u003d6 .line-numbers highlight-lines\u003d\"7, 9\"}"},{"lineNumber":102,"author":{"gitId":"-"},"content":"function add(a, b) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" const sum \u003d a + b;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" console.log(`${a} + ${b} \u003d ${sum}`);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return sum;"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":"```"},{"lineNumber":108,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":"**Substring highlight**"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":"```js {.line-numbers highlight-lines\u003d\"1[\u0027function\u0027], 2[\u0027a\u0027], 2[\u0027b\u0027], 4[\u0027diff\u0027]\"}"},{"lineNumber":115,"author":{"gitId":"-"},"content":"function subtract(a, b) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" const diff \u003d a - b;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" console.log(`${a} + ${b} \u003d ${diff}`);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" return diff;"},{"lineNumber":119,"author":{"gitId":"-"},"content":"}"},{"lineNumber":120,"author":{"gitId":"-"},"content":"```"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":"**Character-bounded highlight**"},{"lineNumber":125,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":"```js {.line-numbers highlight-lines\u003d\"1[0:3], 1[6:10], 2[5:], 3[:6]\"}"},{"lineNumber":128,"author":{"gitId":"-"},"content":"function multiply(a, b) {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const product \u003d a * b;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" console.log(\u0027Product \u003d ${product}\u0027);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" return product;"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":"```"},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":"**Word-bounded highlight**"},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":140,"author":{"gitId":"-"},"content":"```js {.line-numbers highlight-lines\u003d\"1[1::3], 1[5::7], 2[2::], 3[::3]\"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":"// Function returns the distance travelled assuming constant speed"},{"lineNumber":142,"author":{"gitId":"-"},"content":"function calculateDistance(speed, time) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" const distance \u003d speed * time;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" console.log(`Distance travelled \u003d ${distance}`);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" return distance;"},{"lineNumber":146,"author":{"gitId":"-"},"content":"}"},{"lineNumber":147,"author":{"gitId":"-"},"content":"```"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"**Full-line highlight**"},{"lineNumber":152,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":"```js {start-from\u003d10 .line-numbers highlight-lines\u003d\"11[:]\"}"},{"lineNumber":155,"author":{"gitId":"-"},"content":"function add(a, b) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" return a + b;"},{"lineNumber":157,"author":{"gitId":"-"},"content":"}"},{"lineNumber":158,"author":{"gitId":"-"},"content":"```"},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"**Sample Combined Usage**"},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":"```java {.line-numbers highlight-lines\u003d\"1[:],3[\u0027Inventory\u0027],3[4::6],4[\u0027It\\\u0027s designed\u0027],5,6[8:15],6[18:],8[0::2],12[:]-14,16-18,20[12:]-22,24[1::]-26\"}"},{"lineNumber":166,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"// Inventory is a class that stores inventory items in a list."},{"lineNumber":169,"author":{"gitId":"-"},"content":"// It\u0027s designed as a thin wrapper on the List interface."},{"lineNumber":170,"author":{"gitId":"-"},"content":"public class Inventory {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" private List\u003cItem\u003e items;"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" public int getItemCount(){"},{"lineNumber":174,"author":{"gitId":"-"},"content":" return items.size();"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" public bool isEmpty() {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" return items.isEmpty();"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":" public Item getItem(idx: int) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" return items.get(idx);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" public void addItem(item: Item) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return items.add(item);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" public void removeItem(item: Item) {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" return items.remove(item);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":"}"},{"lineNumber":193,"author":{"gitId":"-"},"content":"```"},{"lineNumber":194,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":"The value of `highlight-lines` is composed of *highlight rules*, separated by commas."},{"lineNumber":198,"author":{"gitId":"-"},"content":"These rules dictate where and how MarkBind should highlight your code block."},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"You can specify the highlight rules in many different ways, each is detailed as follows:"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":"Type | Format | Example"},{"lineNumber":203,"author":{"gitId":"-"},"content":"-----|--------|--------"},{"lineNumber":204,"author":{"gitId":"-"},"content":"**Full text highlight**\u003cbr\u003eHighlights the entirety of the text portion of the line | The line numbers as-is (subject to the starting line number set in `start-from`). | `3`, `5`"},{"lineNumber":205,"author":{"gitId":"-"},"content":"**Substring highlight**\u003cbr\u003eHighlights _all_ occurrences of a substring in the line | `lineNumber[part]`\u003cbr\u003e\u003cbr\u003e_Limitations_: `part` must be wrapped in quotes. If `part` contains a quote, escape it with a backslash (`\\`). | `3[\u0027Inventory\u0027]`,`4[\u0027It\\\u0027s designed\u0027]`"},{"lineNumber":206,"author":{"gitId":"-"},"content":"**Character-bounded highlight**\u003cbr\u003eHighlights a specific range of characters in the line | `lineNumber[start:end]`, highlights from character position `start` up to (but not including) `end`.\u003cbr\u003e\u003cbr\u003eCharacter positions start from `0` as the first non-whitespace character, upwards.\u003cbr\u003e\u003cbr\u003eOmit either `start`/`end` to highlight from the start / up to the end, respectively. | `19[1:5]`,`30[10:]`,`35[:20]`"},{"lineNumber":207,"author":{"gitId":"-"},"content":"**Word-bounded highlight**\u003cbr\u003eHighlights a specific range of words in the line | `lineNumber[start::end]`, highlights from word position `start` up to (but not including) `end`.\u003cbr\u003e\u003cbr\u003eWord positions start from `0` as the first word (sequence of non-whitespace characters), upwards.\u003cbr\u003e\u003cbr\u003eOmit either `start`/`end` to highlight from the start / up to the end, respectively. | `5[2::4]`,`9[1::]`,`11[::5]`"},{"lineNumber":208,"author":{"gitId":"-"},"content":"**Full line highlight**\u003cbr\u003eHighlights the entirety of the line | `lineNumber[:]` | `7[:]`"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":"Not only a single line, MarkBind is also capable of highlighting ranges of lines in various ways. In general, the syntax"},{"lineNumber":211,"author":{"gitId":"-"},"content":"for range highlighting consists of two single line highlight rules as listed above joined by a dash (`-`)."},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":"Type | Format | Example"},{"lineNumber":214,"author":{"gitId":"-"},"content":"-----|--------|--------"},{"lineNumber":215,"author":{"gitId":"-"},"content":"**Ranged full text highlight**\u003cbr\u003eHighlights from the first non-whitespace character to the last non-whitespace character | `lineStart-lineEnd` | `2-4`"},{"lineNumber":216,"author":{"gitId":"-"},"content":"**Ranged full line highlight**\u003cbr\u003eLike ranged full text highlight, but highlights the entirety of the lines | `lineStart[:]-lineEnd` or `lineStart-lineEnd[:]` | `1[:]-5`,`10-12[:]`"},{"lineNumber":217,"author":{"gitId":"-"},"content":"**Ranged character-bounded highlight**\u003cbr\u003eHighlights the text portion of the lines within the range, but starts/ends at an arbitrary character | `lineStart[start:]-lineEnd` or `lineStart-lineEnd[:end]` | `3[2:]-7`, `4-9[:17]`"},{"lineNumber":218,"author":{"gitId":"-"},"content":"**Ranged word-bounded highlight**\u003cbr\u003eLike ranged character-bounded highlight, but starts/ends at an arbitrary word | `lineStart[start::]-lineEnd` or `lineStart-lineEnd[::end]` | `16[1::]-20`,`22-24[::3]`"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"##### Heading"},{"lineNumber":221,"author":{"gitId":"-"},"content":"To add a heading, add the attribute `heading` with the heading text as the value, as shown below."},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":224,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":225,"author":{"gitId":"-"},"content":"```xml {heading\u003d\"Heading title\"}"},{"lineNumber":226,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":227,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":229,"author":{"gitId":"-"},"content":"```"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":232,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":"Headings support inline Markdown, except for `Inline Code` and %%Dim%% text styles."},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":"```{heading\u003d\"**Bold**, _Italic_, ___Bold and Italic___, ~~Strike through~~, ****Super Bold****, !!Underline!!, \u003d\u003dHighlight\u003d\u003d, :+1: :exclamation: :x: :construction:\u003cbr\u003eWe support page breaks\"}"},{"lineNumber":239,"author":{"gitId":"-"},"content":"\u003cfoo\u003e\u003c/foo\u003e"},{"lineNumber":240,"author":{"gitId":"-"},"content":"```"},{"lineNumber":241,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":242,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":"##### Using multiple features"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":"You can also use multiple features together, as shown below."},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"```xml {highlight-lines\u003d\"2\" heading\u003d\"Heading title\"}"},{"lineNumber":251,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":"```"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"##### Copy button"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":"A _copy_ button can be added to code blocks using the `codeBlockCopyButtons` plugin:"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"**User Guide: Using Plugins → Plugin: `codeBlockCopyButtons`**\" popup-url\u003d\"usingPlugins.html#plugin-codeblockcopybuttons\"\u003e"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"../plugins/codeBlockCopyButtons.md\" /\u003e"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":"##### Wrap text button"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":"A _wrap text_ button can be added to code blocks using the `codeBlockWrapButtons` plugin:"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"**User Guide: Using Plugins → Plugin: `codeBlockWrapButtons`**\" popup-url\u003d\"usingPlugins.html#plugin-codeblockwrapbuttons\"\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"../plugins/codeBlockWrapButtons.md\" /\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":279,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":""},{"lineNumber":281,"author":{"gitId":"Tim-Siu"},"content":"##### Printing optimization"},{"lineNumber":282,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":283,"author":{"gitId":"Tim-Siu"},"content":"\u003cdiv id\u003d\"code-print-optimization\"\u003e"},{"lineNumber":284,"author":{"gitId":"-"},"content":"Markbind enhances the readability of your code blocks for printing by "},{"lineNumber":285,"author":{"gitId":"-"},"content":""},{"lineNumber":286,"author":{"gitId":"-"},"content":"- Applying soft wrapping, ensuring code doesn\u0027t get cut off"},{"lineNumber":287,"author":{"gitId":"-"},"content":"- Adding line numbers to maintain context when wrapping occurs"},{"lineNumber":288,"author":{"gitId":"-"},"content":"- Automatically changing dark code theme to light"},{"lineNumber":289,"author":{"gitId":"-"},"content":"- Removing [codeBlockCopyButtons]({{baseUrl}}/userGuide/formattingContents.html#copy-button) and [codeBlockWrapButtons]({{baseUrl}}/userGuide/formattingContents.html#wrap-text-button)"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e "},{"lineNumber":292,"author":{"gitId":"-"},"content":" There are some issues with printing in Firefox. Please use other browsers such as Chrome if these issues persist."},{"lineNumber":293,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"Tim-Siu"},"content":"\u003c/div\u003e"},{"lineNumber":296,"author":{"gitId":"Tim-Siu"},"content":"\u003cbr\u003e"},{"lineNumber":297,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":"#### Inline Code"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":"##### Syntax coloring"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":"MarkBind can apply syntax-coloring on inline code too."},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":305,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":306,"author":{"gitId":"-"},"content":"Consider the XML code `\u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e`{.xml},\u003cbr\u003e"},{"lineNumber":307,"author":{"gitId":"-"},"content":"or the java code `public static void main(String[] args)`{.java}."},{"lineNumber":308,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":309,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":"##### Displaying content within curly braces: `{{ content }}`"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"If your code contains special Nunjucks tags like `{{` or `}}`, use a [raw-endraw block](../tipsAndTricks.html#using-raw-endraw-to-display-content):"},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":318,"author":{"gitId":"-"},"content":"{% raw %} {{ content }} {% endraw %}"},{"lineNumber":319,"author":{"gitId":"-"},"content":"```"},{"lineNumber":320,"author":{"gitId":"-"},"content":"{% endraw %}"},{"lineNumber":321,"author":{"gitId":"-"},"content":""},{"lineNumber":322,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":323,"author":{"gitId":"-"},"content":""},{"lineNumber":324,"author":{"gitId":"-"},"content":"````"},{"lineNumber":325,"author":{"gitId":"-"},"content":"```xml"},{"lineNumber":326,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":327,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":328,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":329,"author":{"gitId":"-"},"content":"```"},{"lineNumber":330,"author":{"gitId":"-"},"content":"````"},{"lineNumber":331,"author":{"gitId":"-"},"content":""},{"lineNumber":332,"author":{"gitId":"-"},"content":"```"},{"lineNumber":333,"author":{"gitId":"-"},"content":"`\u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e`{.xml}"},{"lineNumber":334,"author":{"gitId":"-"},"content":"```"},{"lineNumber":335,"author":{"gitId":"-"},"content":""},{"lineNumber":336,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":"```xml"},{"lineNumber":341,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":342,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":343,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":344,"author":{"gitId":"-"},"content":"```"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":"Syntax coloring for inline code: `\u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e`{.xml} too!"},{"lineNumber":347,"author":{"gitId":"-"},"content":""},{"lineNumber":348,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":342,"Tim-Siu":6}},{"path":"docs/userGuide/syntax/dates.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Dates"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"{% macro njcode(raw) %}\u003ccode\u003e{\u003ca/\u003e{ {{ raw }} }}\u003c/code\u003e{% endmacro %}"},{"lineNumber":4,"author":{"gitId":"-"},"content":"{% macro njblock(raw) %}\u003ccode\u003e{\u003ca/\u003e% {{ raw }} %}\u003c/code\u003e{% endmacro %}"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"**MarkBind supports date formatting and simple calculations** as a Nunjucks [filter](https://mozilla.github.io/nunjucks/templating.html#filters)."},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"**Syntax:** {{ njcode(\u0027baseDate | date(format, daysToAdd)\u0027) }}"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"20 days after 1st Jan 2020:"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"{{ njcode(\u0027\"2020-01-01\" | date(\"ddd, Do MMM, YYYY\", 20) \u0027) }} :glyphicon-arrow-right: {{ \"2020-01-01\" | date(\"ddd, Do MMM, YYYY\", 20) }}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"The baseDate follows the format: `YYYY-MM-DD`"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The default output format is `\"ddd D MMM\"` e.g. Fri 6 Mar"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"### Using variables"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set base1 \u003d \"2020-01-01\"\u0027) }} {% set base1 \u003d \"2020-01-01\" %} \u003cbr/\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set format1 \u003d \"DD MM YYYY\"\u0027) }} {% set format1 \u003d \"DD MM YYYY\" %} \u003cbr/\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set format2 \u003d \"ddd Do MMM (DD/MM/YYYY)\"\u0027) }} {% set format2 \u003d \"ddd Do MMM (DD/MM/YYYY)\" %}"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date\u0027) }} :glyphicon-arrow-right: {{ base1 | date }}\u003cbr/\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"#### Custom formatting"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format1)\u0027) }} :glyphicon-arrow-right: {{ base1 | date(format1) }}\u003cbr/\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"#### Adding days"},{"lineNumber":36,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format2, 0)\u0027) }} :glyphicon-arrow-right: {{ base1 | date(format2, 0) }}\u003cbr/\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format2, 10)\u0027) }} :glyphicon-arrow-right: {{ base1 | date(format2, 10) }}\u003cbr/\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"#### Nunjucks variables"},{"lineNumber":40,"author":{"gitId":"-"},"content":"Dates can be supplied using [Nunjucks variables](../reusingContents.html#variables) for convenience."},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"Inside the `.md` file of a page:"},{"lineNumber":43,"author":{"gitId":"-"},"content":"```"},{"lineNumber":44,"author":{"gitId":"-"},"content":"{% raw %}{% set date_pagevar \u003d \"2020-03-06\" %}{% endraw %}"},{"lineNumber":45,"author":{"gitId":"-"},"content":"```"},{"lineNumber":46,"author":{"gitId":"-"},"content":"{% set date_pagevar \u003d \"2020-03-06\" %}"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"{{ njcode(\u0027date_pagevar | date(format2)\u0027) }} :glyphicon-arrow-right: {{ date_pagevar | date(format2) }} \u003cbr/\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"### Advanced Formatting"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"The output date can be formatted to suit your needs by specifying a format string as an argument to the date filter."},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"Default format: `\"ddd D MMM\"` e.g. Fri 6 Mar"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Brief reference**\"\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"Token | Output"},{"lineNumber":61,"author":{"gitId":"-"},"content":"--- | ---"},{"lineNumber":62,"author":{"gitId":"-"},"content":"D | 1"},{"lineNumber":63,"author":{"gitId":"-"},"content":"Do | 1st"},{"lineNumber":64,"author":{"gitId":"-"},"content":"DD | 01"},{"lineNumber":65,"author":{"gitId":"-"},"content":"M | 1"},{"lineNumber":66,"author":{"gitId":"-"},"content":"MM | 01"},{"lineNumber":67,"author":{"gitId":"-"},"content":"MMM | Jan"},{"lineNumber":68,"author":{"gitId":"-"},"content":"MMMM | January"},{"lineNumber":69,"author":{"gitId":"-"},"content":"YY | 19"},{"lineNumber":70,"author":{"gitId":"-"},"content":"YYYY | 2019"},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"Full formatting reference available [here](https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens) and [here](https://day.js.org/docs/en/plugin/advanced-format)."},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003cinclude boilerplate src\u003d\"outputBox.md\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003cbox\u003e\u003cspan\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set base1 \u003d \"2019-08-12\"\u0027) }}\u003cbr/\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set format1 \u003d \"DD MM YYYY\"\u0027) }}\u003cbr/\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set format2 \u003d \"ddd Do MM\"\u0027) }}\u003cbr/\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date\u0027) }} \u003c!-- Mon 12 Aug --\u003e\u003cbr/\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format1)\u0027) }} \u003c!-- 12 08 2019 --\u003e\u003cbr/\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format1, 10)\u0027) }} \u003c!-- 22 08 2019 --\u003e\u003cbr/\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format2, 10)\u0027) }} \u003c!-- Thu 22/08 --\u003e\u003cbr/\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003c/span\u003e\u003c/box\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":"Mon 12 Aug\u003cbr/\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":"12 08 2019\u003cbr/\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":"22 08 2019\u003cbr/\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":"Thu 22/08"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003cbox\u003e\u003cspan\u003e"},{"lineNumber":102,"author":{"gitId":"jingting1412"},"content":"{{ njcode(\u0027baseDate | date(format, daysToAdd)\u0027) }} \u003c!-- 22.08.2019 --\u003e\u003cbr/\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":"\u003c/span\u003e\u003c/box\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":1,"-":103}},{"path":"docs/userGuide/syntax/emoji.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Emoji"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":":+1: :exclamation: :x: :construction: :) :/ :D"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"Tim-Siu"},"content":"%%{{ icon_info }} The list of supported [emoji](https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md) and [emoticon shortcuts](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/shortcuts.mjs).%%"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":20,"author":{"gitId":"-"},"content":":+1: :exclamation: :x: :construction: :) :/ :D"},{"lineNumber":21,"author":{"gitId":"-"},"content":"```"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":":+1: :exclamation: :x: :construction: :) :/ :D"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":26,"Tim-Siu":1}},{"path":"docs/userGuide/syntax/footnotes.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Footnotes"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example-markbind\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"**Normal footnotes:**"},{"lineNumber":9,"author":{"gitId":"-"},"content":"Here is a footnote reference,[^1] and another.[^longnote]"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"[^1]: Here is the footnote. Footnotes will appear at the bottom of the page."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"[^longnote]: Here\u0027s one with multiple blocks."},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" Subsequent paragraphs are indented to show that they"},{"lineNumber":16,"author":{"gitId":"-"},"content":"belong to the previous footnote."},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"**Inline footnotes:**"},{"lineNumber":20,"author":{"gitId":"-"},"content":"Here is an inline note.^[Inline notes are easier to write, since"},{"lineNumber":21,"author":{"gitId":"-"},"content":"you don\u0027t have to pick an identifier and move down to type the"},{"lineNumber":22,"author":{"gitId":"-"},"content":"note.]"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"Normal footnotes won\u0027t work when used inside the attributes of MarkBind components!"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"For example, it won\u0027t work in the `header` attribute of [panels](../components/presentation.html#panels)."},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**Normal footnotes:**"},{"lineNumber":39,"author":{"gitId":"-"},"content":"Here is a footnote reference,[^1] and another.[^longnote]"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"[^1]: Here is the footnote. Footnotes will appear at the bottom of the page."},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"[^longnote]: Here\u0027s one with multiple blocks."},{"lineNumber":44,"author":{"gitId":"-"},"content":" Subsequent paragraphs are indented to show that they"},{"lineNumber":45,"author":{"gitId":"-"},"content":"belong to the previous footnote."},{"lineNumber":46,"author":{"gitId":"-"},"content":"```"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":49,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"1 + 1 \u003d 2 ^[Math]"},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":50,"yiwen101":1}},{"path":"docs/userGuide/syntax/fullSyntaxSet.njk","fileType":"njk","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"{% set syntax_topics \u003d {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" headings : [\u0027Headings\u0027, \u0027headings\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" paragraphs : [\u0027Paragraphs\u0027, \u0027paragraphs\u0027, [\u0027basic\u0027]],"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" lineBreaks : [\u0027Line Breaks\u0027, \u0027line-breaks\u0027, [\u0027basic\u0027]],"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" textStyles : [\u0027Text Styles\u0027, \u0027text-styles\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" blockquotes: [\u0027Blockquotes\u0027, \u0027blockquotes\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" lists : [\u0027Lists\u0027, \u0027lists\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" code : [\u0027Code\u0027, \u0027code\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" horizontalrules : [\u0027Horizontal Rules\u0027, \u0027horizontal-rules\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" links : [\u0027Links\u0027, \u0027links\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" footnotes: [\u0027Footnotes\u0027, \u0027footnotes\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" images : [\u0027Images\u0027, \u0027images\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" attributes: [\u0027Classes, Attributes \u0026 Identifiers\u0027, \u0027classes-attributes-and-amp-identifiers\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" tables : [\u0027Tables\u0027, \u0027tables\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" emoji : [\u0027Emoji\u0027, \u0027emoji\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" icons : [\u0027Icons\u0027, \u0027icons\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" embeds : [\u0027Embeds\u0027, \u0027embeds\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" dates : [\u0027Dates\u0027, \u0027dates\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" mathformulae : [\u0027Math Formulae\u0027, \u0027math-formulae\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" frontmatter : [\u0027Frontmatter\u0027, \u0027frontmatter\u0027, [\u0027tweakingThePageStructure\u0027]],"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" tags : [\u0027Tags\u0027, \u0027plugin-tags\u0027, [\u0027tweakingThePageStructure\u0027]],"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" includes : [\u0027Includes\u0027, \u0027includes\u0027, [\u0027reusingContents\u0027]],"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" variables : [\u0027Variables\u0027, \u0027variables\u0027, [\u0027reusingContents\u0027]],"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" keywords : [\u0027Keywords\u0027, \u0027keywords\u0027, [\u0027makingTheSiteSearchable\u0027]],"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" badges : [\u0027Badges\u0027, \u0027badges\u0027, [\u0027presentation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" boxes : [\u0027Boxes\u0027, \u0027boxes\u0027, [\u0027presentation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" panels : [\u0027Panels\u0027, \u0027panels\u0027, [\u0027presentation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" tabs : [\u0027Tabs\u0027, \u0027tabs\u0027, [\u0027presentation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" pictures : [\u0027Pictures\u0027, \u0027pictures\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":" annotations : [\u0027Annotations\u0027, \u0027annotations\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" thumbnails : [\u0027Thumbnails\u0027, \u0027thumbnails\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" diagrams : [\u0027Diagrams\u0027, \u0027diagrams\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":" tree : [\u0027Tree\u0027, \u0027tree\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":" tooltips : [\u0027Tooltips\u0027, \u0027tooltips\u0027, [\u0027popups\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":" popovers : [\u0027Popovers\u0027, \u0027popovers\u0027, [\u0027popups\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" modals : [\u0027Modals\u0027, \u0027modals\u0027, [\u0027popups\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":" dropdowns : [\u0027Dropdowns\u0027, \u0027dropdowns\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":" searchBars : [\u0027Search Bars\u0027, \u0027search-bars\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":" navBars : [\u0027Nav Bars\u0027, \u0027navbars\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" breadcrumbs : [\u0027Breadcrumbs\u0027, \u0027breadcrumbs\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" siteNavigationMenus : [\u0027Site Navigation Menus\u0027, \u0027site-navigation-menus\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":" pageNavigationMenus : [\u0027Page Navigation Menus\u0027, \u0027page-navigation-menus\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" scrollTopButton : [\u0027Scroll To Top Button\u0027, \u0027scroll-to-top-button\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" questions : [\u0027Questions and Quizzes\u0027, \u0027questions-and-quizzes\u0027, [\u0027others\u0027, \u0027reader-facing\u0027]]"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":"} %}"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":"{% macro generate_url(k, v) %}"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":" {% set url\u003d\"/userGuide/\" %}"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":" {% if v[2] is iterable %}"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":" {% if \u0027basic\u0027 in v[2] %}"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"formattingContents.html#\" + v[1] %}"},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027presentation\u0027 in v[2] %}"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/presentation.html#\" + v[1] %}"},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027images-diagrams\u0027 in v[2] %}"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/imagesAndDiagrams.html#\" + v[1] %}"},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027popups\u0027 in v[2] %}"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/popups.html#\" + v[1] %}"},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027navigation\u0027 in v[2] %}"},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/navigation.html#\" + v[1] %}"},{"lineNumber":62,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027others\u0027 in v[2] %}"},{"lineNumber":63,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/others.html#\" + v[1] %}"},{"lineNumber":64,"author":{"gitId":"jingting1412"},"content":" {% else %}"},{"lineNumber":65,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + v[2][0] + v[1] %}"},{"lineNumber":66,"author":{"gitId":"jingting1412"},"content":" {% endif %}"},{"lineNumber":67,"author":{"gitId":"jingting1412"},"content":" {% else %}"},{"lineNumber":68,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url %}"},{"lineNumber":69,"author":{"gitId":"jingting1412"},"content":" {% endif%}"},{"lineNumber":70,"author":{"gitId":"jingting1412"},"content":" {{ url }}"},{"lineNumber":71,"author":{"gitId":"jingting1412"},"content":"{% endmacro %} "}],"authorContributionMap":{"jingting1412":71}},{"path":"docs/userGuide/syntax/headings.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Headings"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"You can prepend the heading text with 1-6 `#` characters to indicate headings of levels 1-6."},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"### Heading level 3"},{"lineNumber":10,"author":{"gitId":"-"},"content":"..."},{"lineNumber":11,"author":{"gitId":"-"},"content":"###### Heading level 6"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"{{ icon_info }} **MarkBind auto-generates anchors for all headings.**\u003cbr\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"If the heading text is `Foo Bar (Goo)`, the ID of the generated anchor will be `foo-bar-goo` (all lower case, special characters omitted, joined by `-`)."},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003csmall\u003eAlternative syntax, more info: https://www.markdownguide.org/basic-syntax#headings"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":24,"author":{"gitId":"-"},"content":"### Heading level 3"},{"lineNumber":25,"author":{"gitId":"-"},"content":"..."},{"lineNumber":26,"author":{"gitId":"-"},"content":"###### Heading level 6"},{"lineNumber":27,"author":{"gitId":"-"},"content":"```"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":"```markdown"},{"lineNumber":32,"author":{"gitId":"-"},"content":"### Heading level 3"},{"lineNumber":33,"author":{"gitId":"-"},"content":"..."},{"lineNumber":34,"author":{"gitId":"-"},"content":"###### Heading level 6"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":"```"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":2,"-":34}},{"path":"docs/userGuide/syntax/includes.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → Reusing Contents → Includes_]({{ baseUrl }}/userGuide/reusingContents.html#includes)\u003c/md\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Includes"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"**MarkBind has a powerful `\u003cinclude\u003e` mechanism** which allows you to create documents by combining other content fragments."},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"**You can use `\u003cinclude\u003e` tag to include another markdown or HTML document into the current document.**"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"{{ icon_example }} Including text from a `tip2.md` in another file."},{"lineNumber":17,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":18,"author":{"gitId":"-"},"content":"Tip 1. ..."},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tips/tip2.md\" /\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"Tip 3. ..."},{"lineNumber":21,"author":{"gitId":"-"},"content":"```"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"**You can `\u003cinclude\u003e` a fragment of a file** by specifying the `#fragment-id` at the end of the `src` attribute value, provided the fragment is wrapped in a `\u003cdiv\u003e`/`\u003cspan\u003e` tag with the matching `id`."},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" seamless\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"Choose `\u003cdiv\u003e` over `\u003cspan\u003e` when wrapping block-level elements, to prevent invalid HTML markup which causes [hydration issues](https://vuejs.org/guide/scaling-up/ssr.html#hydration-mismatch)."},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"{{ icon_example }} Including a fragment from a file:"},{"lineNumber":35,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":36,"author":{"gitId":"-"},"content":"Some text"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"docs/tips.md#tip-1\" /\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":"Some other text"},{"lineNumber":39,"author":{"gitId":"-"},"content":"```"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"`docs/tips.md`:"},{"lineNumber":42,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":43,"author":{"gitId":"-"},"content":"..."},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"tip-1\" /\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Tip 1. ..."},{"lineNumber":46,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"Tip 2. ..."},{"lineNumber":49,"author":{"gitId":"-"},"content":"```"},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"When setting the `id` of a fragment, be careful not to clash with heading anchor IDs auto-generated by MarkBind. For example, if you have a heading `## Some Useful Tips`, MarkBind will auto-generate an ID `some-useful-tips` for that heading."},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"panels.md#script_and_styles_warning\"\u003e\u003c/include\u003e"},{"lineNumber":59,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tip.md\" boilerplate \u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"tip_body\"\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"The `\u003cinclude\u003e` mechanism can be used inside any MarkBind source file (even inside the _frontmatter_ section) but it will not work inside some _special_ files such as the `_markbind/variables.md`."},{"lineNumber":63,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"**Attributes:**"},{"lineNumber":67,"author":{"gitId":"-"},"content":"* **`src`**: specify the source file path."},{"lineNumber":68,"author":{"gitId":"-"},"content":"* **`inline`** (optional): make the included result an inline element. (wrapped in `\u003cspan\u003e` tag). e.g.,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" ```html"},{"lineNumber":70,"author":{"gitId":"-"},"content":" The title is \u003cinclude src\u003d\"../docs/summary.md#title\" inline /\u003e while ..."},{"lineNumber":71,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":72,"author":{"gitId":"-"},"content":"* **`optional`** (optional): include the file/fragment only if it exists i.e., there will be no error message if the file/fragment does not exist. e.g.,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" ```html"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"UserStories.md\" optional /\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":76,"author":{"gitId":"-"},"content":"* **`trim`** (optional): remove leading and trailing whitespace and newlines from the document before including."},{"lineNumber":77,"author":{"gitId":"-"},"content":" ```html"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"UserStories.md#epic\" trim /\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* **`omitFrontmatter`** (optional): omit the frontmatter of the file/fragment from being included (if any)."},{"lineNumber":81,"author":{"gitId":"-"},"content":" ```html"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"UserStories.md#epic\" omitFrontmatter /\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":"##### `\u003cinclude\u003e` Inside an Included File"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"**Although the `src` attribute of an `\u003cinclude\u003e` is given _relative_ to the current directory, it is converted to an _absolute_ value _before_ the \u003ctooltip content\u003d\"i.e., the file containing the `\u003cinclude\u003e`\"\u003ehost file\u003c/tooltip\u003e is included from another file.**"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose you have a MarkBind project with the following file structure."},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":"C:/mySite/"},{"lineNumber":94,"author":{"gitId":"-"},"content":" bookFiles/"},{"lineNumber":95,"author":{"gitId":"-"},"content":" book.md"},{"lineNumber":96,"author":{"gitId":"-"},"content":" chapter1.md"},{"lineNumber":97,"author":{"gitId":"-"},"content":" chapter2.md"},{"lineNumber":98,"author":{"gitId":"-"},"content":" reviewFiles/"},{"lineNumber":99,"author":{"gitId":"-"},"content":" review.md"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":"The `book.md`:"},{"lineNumber":102,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":103,"author":{"gitId":"-"},"content":"# My Book"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter1.md\" /\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter2.md\" /\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":"```"},{"lineNumber":107,"author":{"gitId":"-"},"content":"The `review.md`:"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":110,"author":{"gitId":"-"},"content":"# My Review"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../bookFiles/book.md\" /\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":"..."},{"lineNumber":113,"author":{"gitId":"-"},"content":"```"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":"The content of the `chapter1.md` and `chapter2.md` will be included in the `review.md` (via `\u003cinclude src\u003d\"../bookFiles/book.md\" /\u003e`) although `chapter1.md` and `chapter2.md` are not in `reviewFiles` directory. i.e., `\u003cinclude src\u003d\"chapter1.md\" /\u003e` will be interpreted as `\u003cinclude src\u003d\"c:/mySite/bookFiles/chapter1.md\" /\u003e`"},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":"In other words, **`\u003cinclude\u003e` interprets the reused code relative to the original location of the file, not the location in which it is reused.**"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":"##### Specifying Variables in an `\u003cinclude\u003e`"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":"**It is possible to include variables in an `\u003cinclude\u003e`.**"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"{{ icon_example }} Specifying `title` and `author` variables in an `\u003cinclude\u003e` tag:"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"article.md\"\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"title\"\u003eMy Title\u003c/variable\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"author\"\u003eJohn Doe\u003c/variable\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":"```"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":"In `article.md`:"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":140,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":141,"author":{"gitId":"-"},"content":"# {{ title }}\u003cbr\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":"Author: {{ author }}"},{"lineNumber":143,"author":{"gitId":"-"},"content":"```"},{"lineNumber":144,"author":{"gitId":"-"},"content":"{% endraw %}"},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"These variables work the same way as variables in `_markbind/variables.md`, except that they only apply to the included file. They allow the included file to be reused as a template, for different source files using different variable values."},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":"You can also specify include variables within the `\u003cinclude\u003e` tag itself by adding a `var-` prefix."},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"{{ icon_example }} Specifying `title` and `author` variables inline:"},{"lineNumber":154,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":155,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"article.md\" var-title\u003d\"My Title\" var-author\u003d\"John Doe\" /\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":"```"},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"If the same variable is defined in a chain of `\u003cinclude\u003e`s (e.g. `a.md` includes `b.md` includes `c.md`...), variables defined in the top-most `\u003cinclude\u003e` will take precedence. Global variables (`_markbind/variables.md`) will take precedence over any `\u003cinclude\u003e` variables."},{"lineNumber":160,"author":{"gitId":"-"},"content":"This is to allow the outer context to adapt the reused content without changing its actual content."},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Preventing cyclical errors when using multiple includes with same variables\"\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"Since outer variables override inner variables, this may result in errors if attempting to use an `include` within another `include` with the same variables."},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":"This is because the inner variable of the same name will be replaced with the outer variable, which contains the inner variable. "},{"lineNumber":167,"author":{"gitId":"-"},"content":"This inner variable is once again overridden to result in another inner variable and so on, causing a cyclical error."},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":"To fix this issue, do not use an inner `include` if they use the same variables."},{"lineNumber":170,"author":{"gitId":"-"},"content":"Instead, copy the content of the `src` file and replace the variables with the defined values."},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":"Example:"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":"```html {.line-numbers}"},{"lineNumber":175,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"boilerplate.md\" boilerplate\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":177,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"boilerplate.md\"\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":" VALUE_OF_VARIABLE"},{"lineNumber":180,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":181,"author":{"gitId":"-"},"content":" \u003c/include\u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":"```"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":"The inner `variable` would be replaced by the outer `variable` resulting in a cyclical error:"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"-"},"content":"```html {.line-numbers highlight-lines\u003d\"5-9\"}"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"boilerplate.md\" boilerplate\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":191,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"boilerplate.md\"\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"boilerplate.md\"\u003e"},{"lineNumber":194,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":195,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":196,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":" \u003c/include\u003e"},{"lineNumber":198,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":199,"author":{"gitId":"-"},"content":" \u003c/include\u003e"},{"lineNumber":200,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":"```"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":"To fix this problem, copy the content of the `src` file and replace the variables with the defined values as such:"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":"```html {.line-numbers highlight-lines\u003d\"3\"}"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"boilerplate.md\" boilerplate\u003e"},{"lineNumber":208,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":" Boilerplate content: VALUE_OF_VARIABLE \u003c!-- Replace {{ \u0027{{\u0027 }} variable {{ \u0027}}\u0027 }} in boilerplate with VALUE_OF_VARIABLE --\u003e"},{"lineNumber":210,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":"```"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"##### Excluding Files from Rendering as Pages"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"**MarkBind supports the exclusion of files from page generation**. For example, you can exclude files containing \u003ctooltip content\u003d\"A fragment is a piece of content that can be reused across multiple pages.\"\u003ecustom fragments\u003c/tooltip\u003e that are only meant to be used in `\u003cinclude\u003e`."},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"Note: This example below is assuming that you have included the following glob pattern in the `site.json` file:"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"```js"},{"lineNumber":226,"author":{"gitId":"-"},"content":"{"},{"lineNumber":227,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":228,"author":{"gitId":"-"},"content":" {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" \"glob\": \"*.md\","},{"lineNumber":230,"author":{"gitId":"-"},"content":" \"layout\": \"normal\","},{"lineNumber":231,"author":{"gitId":"-"},"content":" \"searchable\": \"yes\""},{"lineNumber":232,"author":{"gitId":"-"},"content":" }"},{"lineNumber":233,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":234,"author":{"gitId":"-"},"content":"}"},{"lineNumber":235,"author":{"gitId":"-"},"content":"```"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":"Else, if each page is included individually, there is no need to exclude the fragments as they will not be included in the page generation."},{"lineNumber":238,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose you have a fragment file `content-fragment.md` and you want to include it in some pages of the site `course` without rendering `content-fragment.md` as a page."},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":"C:/course/"},{"lineNumber":245,"author":{"gitId":"-"},"content":" content-fragment.md"},{"lineNumber":246,"author":{"gitId":"-"},"content":" index.md"},{"lineNumber":247,"author":{"gitId":"-"},"content":" reading.md"},{"lineNumber":248,"author":{"gitId":"-"},"content":" site.json"},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":"In `reading.md` (note how it reuses content from the `content-fragment.md`):"},{"lineNumber":252,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":253,"author":{"gitId":"-"},"content":"# Week 1 Reading:"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"content-fragment.md\" /\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":"```"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":"In `site.json` we then exclude the fragment from the page generation with [pagesExclude](../siteJsonFile.html#pagesexclude):"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"```json"},{"lineNumber":260,"author":{"gitId":"-"},"content":"..."},{"lineNumber":261,"author":{"gitId":"-"},"content":"\"pagesExclude\": ["},{"lineNumber":262,"author":{"gitId":"-"},"content":" \"**/*-fragment.md\""},{"lineNumber":263,"author":{"gitId":"-"},"content":"],"},{"lineNumber":264,"author":{"gitId":"-"},"content":"..."},{"lineNumber":265,"author":{"gitId":"-"},"content":"```"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tip.md\" boilerplate \u003e"},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"tip_body\"\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":"You may use any custom name you wish for your fragments but be sure to update the `pagesExclude` list with the appropriate glob pattern."},{"lineNumber":273,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":274,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":"### Using Boilerplate Files"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":"**If you find yourself duplicating a \u003ctooltip content\u003d\"code that needs to stay relative to the directory in which it used\"\u003e_boilerplate code_\u003c/tooltip\u003e fragment in multiple places of your code base, you can use a `boilerplate` file to avoid such duplication.** Note that you cannot use a normal `\u003cinclude\u003e` in this case because the code included using a normal `\u003cinclude\u003e` stays relative to the original location while boilerplate code needs to be interpreted relative to the location it is being used."},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose you have a MarkBind project with the following file structure."},{"lineNumber":285,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":286,"author":{"gitId":"-"},"content":"C:/mySite/"},{"lineNumber":287,"author":{"gitId":"-"},"content":" chapter1/"},{"lineNumber":288,"author":{"gitId":"-"},"content":" chapter.md"},{"lineNumber":289,"author":{"gitId":"-"},"content":" text.md"},{"lineNumber":290,"author":{"gitId":"-"},"content":" exercises.md"},{"lineNumber":291,"author":{"gitId":"-"},"content":" chapter2/"},{"lineNumber":292,"author":{"gitId":"-"},"content":" chapter.md"},{"lineNumber":293,"author":{"gitId":"-"},"content":" text.md"},{"lineNumber":294,"author":{"gitId":"-"},"content":" exercises.md"},{"lineNumber":295,"author":{"gitId":"-"},"content":" book.md"},{"lineNumber":296,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":297,"author":{"gitId":"-"},"content":"The `book.md`:"},{"lineNumber":298,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":299,"author":{"gitId":"-"},"content":"# My Book"},{"lineNumber":300,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter1/chapter.md\" /\u003e"},{"lineNumber":301,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter2/chapter.md\" /\u003e"},{"lineNumber":302,"author":{"gitId":"-"},"content":"```"},{"lineNumber":303,"author":{"gitId":"-"},"content":"The `chapter1/chapter.md`:"},{"lineNumber":304,"author":{"gitId":"-"},"content":""},{"lineNumber":305,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":306,"author":{"gitId":"-"},"content":"## Text"},{"lineNumber":307,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"text.md\" /\u003e"},{"lineNumber":308,"author":{"gitId":"-"},"content":"## Exercises"},{"lineNumber":309,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"exercises.md\" /\u003e"},{"lineNumber":310,"author":{"gitId":"-"},"content":"```"},{"lineNumber":311,"author":{"gitId":"-"},"content":"The `chapter2/chapter.md`:"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":314,"author":{"gitId":"-"},"content":"## Text"},{"lineNumber":315,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"text.md\" /\u003e"},{"lineNumber":316,"author":{"gitId":"-"},"content":"## Exercises"},{"lineNumber":317,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"exercises.md\" /\u003e"},{"lineNumber":318,"author":{"gitId":"-"},"content":"```"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":"As you can see, both `chapter.md` files are exactly the same. If we were to use only one of the `chapter.md` files and `\u003cinclude\u003e` it twice in the `book.md`, we\u0027ll end up with the same chapter content duplicated twice, which is not what we want. In other words, `chapter.md` contains boilerplate code that needs to be interpreted relative to where it is applied, once relative to `chapter1` directory and once relative to `chapter2` directory."},{"lineNumber":321,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":"To use a code fragment as a boilerplate file,"},{"lineNumber":324,"author":{"gitId":"-"},"content":"1. Put the code in a file inside the `_markbind/boilerplates` directory."},{"lineNumber":325,"author":{"gitId":"-"},"content":"2. `\u003cinclude\u003e` the file _as if_ a copy of it exists in any directory you want it to applied, but add the `boilerplate` attribute to the `\u003cinclude\u003e` tag."},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":"{{ icon_example }} Here\u0027s how you can use a boilerplate file to avoid duplicating the `chapter.md`:"},{"lineNumber":330,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":331,"author":{"gitId":"-"},"content":"C:/mySite/"},{"lineNumber":332,"author":{"gitId":"-"},"content":" _markbind/boilerplates/"},{"lineNumber":333,"author":{"gitId":"-"},"content":" chapter.md"},{"lineNumber":334,"author":{"gitId":"-"},"content":" chapter1/"},{"lineNumber":335,"author":{"gitId":"-"},"content":" text.md"},{"lineNumber":336,"author":{"gitId":"-"},"content":" exercises.md"},{"lineNumber":337,"author":{"gitId":"-"},"content":" chapter2/"},{"lineNumber":338,"author":{"gitId":"-"},"content":" text.md"},{"lineNumber":339,"author":{"gitId":"-"},"content":" exercises.md"},{"lineNumber":340,"author":{"gitId":"-"},"content":" book.md"},{"lineNumber":341,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":342,"author":{"gitId":"-"},"content":"The `book.md`:"},{"lineNumber":343,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":344,"author":{"gitId":"-"},"content":"# My Book"},{"lineNumber":345,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter1/chapter.md\" boilerplate /\u003e"},{"lineNumber":346,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter2/chapter.md\" boilerplate /\u003e"},{"lineNumber":347,"author":{"gitId":"-"},"content":"```"},{"lineNumber":348,"author":{"gitId":"-"},"content":"The `_markbind/boilerplates/chapter.md`:"},{"lineNumber":349,"author":{"gitId":"-"},"content":""},{"lineNumber":350,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":351,"author":{"gitId":"-"},"content":"## Text"},{"lineNumber":352,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"text.md\" /\u003e"},{"lineNumber":353,"author":{"gitId":"-"},"content":"## Exercises"},{"lineNumber":354,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"exercises.md\" /\u003e"},{"lineNumber":355,"author":{"gitId":"-"},"content":"```"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":"Consider the line `\u003cinclude src\u003d\"chapter1/chapter.md\" boilerplate /\u003e`. Note how you can use `src\u003d\"chapter1/chapter.md\"` even though there is no such file. MarkBind will use the `chapter.md` file from `/_markbind/boilerplates/` but interpret it as if the file exists in the `chapter1` directory (i.e., interpret the `chapter.md` code relative to the `chapter1` directory)."},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":"Similarly, `\u003cinclude src\u003d\"chapter2/chapter.md\" boilerplate /\u003e` interprets the `chapter.md` relative to the `chapter2` directory."},{"lineNumber":360,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":"If you have many boilerplate files, you can organize them into directories inside the `_markbind` directory. When using such boilerplate files, you need to replace `boilerplate` attribute with `boilerplate\u003d\"\u003cpath to file relative to _markbind/boilerplates\u003e\"`."},{"lineNumber":363,"author":{"gitId":"-"},"content":""},{"lineNumber":364,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose the `chapter.md` is places in a `book` directory:"},{"lineNumber":367,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":368,"author":{"gitId":"-"},"content":"C:/mySite/"},{"lineNumber":369,"author":{"gitId":"-"},"content":" _markbind/boilerplates/"},{"lineNumber":370,"author":{"gitId":"-"},"content":" book/"},{"lineNumber":371,"author":{"gitId":"-"},"content":" chapter.md"},{"lineNumber":372,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":"It needs to be used as follows:"},{"lineNumber":375,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":376,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter1/chapter.md\" boilerplate\u003d\"book/chapter.md\" /\u003e"},{"lineNumber":377,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter2/chapter.md\" boilerplate\u003d\"book/chapter.md\" /\u003e"},{"lineNumber":378,"author":{"gitId":"-"},"content":"```"},{"lineNumber":379,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":""},{"lineNumber":382,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":383,"author":{"gitId":"-"},"content":""},{"lineNumber":384,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":385,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"foo.md#bar\" boilerplate inline trim\u003e"},{"lineNumber":386,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"x\"\u003e5\u003c/variable\u003e"},{"lineNumber":387,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":388,"author":{"gitId":"-"},"content":"```"},{"lineNumber":389,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":387,"yiwen101":2}},{"path":"docs/userGuide/syntax/lists.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Lists"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"****Unordered lists:****"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"* Item 1"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * Sub item 1.1"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Sub item 1.2\u003cbr\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" Second line"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * Sub item 1.2.1"},{"lineNumber":14,"author":{"gitId":"-"},"content":"* Item 2"},{"lineNumber":15,"author":{"gitId":"-"},"content":"* Item 3"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"****Customizing the Unordered list appearance:****"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"**To customize unordered lists\u0027 icons, add the configuration `{icon\u003d\"icon-name\"}` and/or `{text\u003d\"text\"}` after a specific list item.**"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"* Item 1 { text\u003d\"Step 1 :+1:\" icon\u003d\"glyphicon-education\" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":"* Item 2 { text\u003d\"Step 2\" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Item 2.1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Item 2.2"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Item 3 { text\u003d\"Step 3\" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Item 3.1 "},{"lineNumber":32,"author":{"gitId":"-"},"content":"* Item 4 { text\u003d\"\\`PR`\" icon\u003d\"octicon-git-pull-request\" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Item 4.1 { icon\u003d\"mif-perm-media\" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":"* Item 5 { text\u003d\"Step 5\" icon\u003d\"glyphicon-education\" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Item 5.1 { icon\u003d\"notebook_with_decorative_cover\" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/variable\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003cbox type\u003dinfo seamless\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"Customization will be carried over to the other items within the **same level of the list**."},{"lineNumber":42,"author":{"gitId":"-"},"content":"Example: "},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"glyphicon-education\" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * Item 1.1"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* Item 2 "},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/variable\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"The customised icon appears for Item 2 but not for Item 1.1."},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"Hence, if you customize any item on a certain level, you must also **customize the first item on that level**. If not, the list will revert to its uncustomized form."},{"lineNumber":55,"author":{"gitId":"-"},"content":"If you wish to remove the customization from the following levels, you can set `text` and/or `icon` to be an empty string `\"\"`. "},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":"Example:"},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"glyphicon-education\" text\u003d\"Only for this bullet\" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":"* Item 2 { icon\u003d\"\" }"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c/variable\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003c/include\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":"You can use any of the [icons](../formattingContents.html#icons) supported by MarkBind. If an item has a specified icon, that icon will be used for it and for subsequent items at that level."},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"Markdown can also be used in texts."},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cbox type\u003dwarning seamless\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":"You may need to add escape characters when using special characters for Markdown in text. "},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":"**You can add an icon or text that only applies to a specific item by using the `once` attribute.**"},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":"* Item 1 { icon\u003d\"glyphicon-education\" }"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":"* Item 2 { icon\u003d\"fas-code-branch\" once\u003dtrue }"},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":" * Item 2.1"},{"lineNumber":83,"author":{"gitId":"KevinEyo1"},"content":" * Item 2.2"},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":"* Item 3"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":" \u003c/variable\u003e"},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":"\u003c/include\u003e"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":"Subsequent items at the same level will not inherit icons or texts with the `once` attribute and will instead inherit the icons or texts before it."},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":"The `once` attribute also applies to all other attributes such as `i-size` and `t-size` as seen below."},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":"* Item 1 { icon\u003d\"glyphicon-education\" i-size\u003d\"40px\" i-class\u003d\"text-primary\" }"},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":"* Item 2 { i-size\u003d\"25px\" once\u003dtrue }"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item 2.1"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":"* Item 3"},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":" \u003c/variable\u003e"},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":"\u003c/include\u003e"},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"**You can adjust the icon and text\u0027s size by using the `i-size` and `t-size` attribute respectively.**"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"fas-file-code\" i-size\u003d\"35px\" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":"* Item 2 { icon\u003d\"fas-file-code\" i-size\u003d\"4rem\" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"* Item 3 { icon\u003d\"fas-file-code\" i-size\u003d\"5em\" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"* Item 1 { text\u003d\"Step 1\" t-size\u003d\"35px\" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":"* Item 2 { text\u003d\"Step 2\" t-size\u003d\"4rem\" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"* Item 3 { text\u003d\"Step 3\" t-size\u003d\"5em\" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"You can utilize any [CSS size unit](https://www.w3schools.com/cssref/css_units.php)."},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"**You can also use images as icons.**"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"/images/deer.jpg\" i-width\u003d\"30px\" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"* Item 2 { i-width\u003d\"60px\" i-height\u003d\"44px\" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":"* Item 3 { i-width\u003d\"90px\" i-height\u003d\"61px\" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"If either the `i-width` or the `i-height` of an image is not specified, the unspecified dimension will adjust to maintain the image\u0027s original aspect ratio. For example, for an image of size 800x600 (4:3), if `i-width` is set to 400px, its height will be 300px."},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":"**The icon and text\u0027s appearance can be further customized by adding a `i-class` and `t-class` attribute respectively.**"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example-markbind\"\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"/images/deer.jpg\" text\u003d\"Deer\" i-width\u003d\"60px\" height\u003d\"17px\" i-class\u003d\"rounded\" t-class\u003d\"text-warning my-2\" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":"* Item 2 { t-class\u003d\"text-info my-2\" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":" * Item 2.1 { icon\u003d\"fas-question-circle\" i-class\u003d\"badge rounded-pill my-1 bg-success text-white\" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * Item 2.2"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * Item 2.3 { i-class\u003d\"badge rounded-pill my-1 bg-primary text-white\"}"},{"lineNumber":155,"author":{"gitId":"-"},"content":"* Item 3 { t-class\u003d\"text-primary my-2\" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Item 3.1 "},{"lineNumber":157,"author":{"gitId":"-"},"content":" * Item 3.2 { icon\u003d\"fas-question-circle\" i-class\u003d\"badge rounded my-1 bg-danger text-white\" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":" * Item 3.3 "},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":" "},{"lineNumber":162,"author":{"gitId":"-"},"content":"**The spacing between the icon and the content can be customized by using a `i-spacing` attribute.**"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"+1\" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* Item 2 { i-spacing\u003d\"1rem\" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* Item 3 { i-spacing\u003d\"2rem\" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003cbox type\u003dtip seamless\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":"Similar to the `icon` and `text` attribute, other icon attributes such as `i-class`, `i-width`, `i-height`, `i-spacing`, `t-size` and `t-class` apply for subsequent list items at the same level, until they are overridden by the same attribute. For example, Item 2.3\u0027s `i-class` overrides Item 2.1\u0027s and applies up to Item 3.1."},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":"**The spacing between the icon and the content can be customized by using a `i-spacing` attribute.**"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"+1\" text\u003d\"Yay\" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":"* Item 2 { i-spacing\u003d\"1rem\" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":"* Item 3 { i-spacing\u003d\"2rem\" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":188,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":"**You can apply Markdown\u0027s heading and paragraph syntax within the list.**"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":"* #### Heading 1: Overview {icon\u003d\"/images/overview-d.png\" i-width\u003d\"65px\" i-class\u003d\"rounded\" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":" Content 1: This section provides a summary of the document or topic. "},{"lineNumber":201,"author":{"gitId":"-"},"content":" It sets the context and purpose of the content to follow."},{"lineNumber":202,"author":{"gitId":"-"},"content":"* #### Heading 2: Detailed Description { icon\u003d\"/images/detailed-d.png\" i-width\u003d\"65px\" i-class\u003d\"rounded\" }"},{"lineNumber":203,"author":{"gitId":"-"},"content":" Content 2: This section delves deeper into the topic, offering comprehensive information and detailed explanations."},{"lineNumber":204,"author":{"gitId":"-"},"content":" It might also include evidence, examples, or justifications."},{"lineNumber":205,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":206,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":"Icon specifications should be attached only to the first element of a list item (for the example above, the icon specification should be attached to the heading, not the content below the heading)."},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":"****Ordered lists:****"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":214,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":"1. Item 1"},{"lineNumber":216,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":217,"author":{"gitId":"-"},"content":" 2. Sub item 1.2"},{"lineNumber":218,"author":{"gitId":"-"},"content":"2. Item 2"},{"lineNumber":219,"author":{"gitId":"-"},"content":"3. Item 3"},{"lineNumber":220,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":224,"author":{"gitId":"-"},"content":"You can also start an ordered list at a particular number by changing the"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003cpopover\u003e"},{"lineNumber":226,"author":{"gitId":"-"},"content":"first number"},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003ctemplate slot\u003d\"content\"\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":"\u003cdiv style\u003d\"text-align: center; margin-bottom: 5px;\"\u003e{{ icon_example }}\u003c/div\u003e"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputSeparate.md\" boilerplate\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":232,"author":{"gitId":"-"},"content":"10. Item 1"},{"lineNumber":233,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":234,"author":{"gitId":"-"},"content":" 1. Sub item 1.2"},{"lineNumber":235,"author":{"gitId":"-"},"content":"1. Item 2"},{"lineNumber":236,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":"10. Item 1"},{"lineNumber":239,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":240,"author":{"gitId":"-"},"content":" 1. Sub item 1.2"},{"lineNumber":241,"author":{"gitId":"-"},"content":"1. Item 2"},{"lineNumber":242,"author":{"gitId":"-"},"content":"{.ps-0 .ms-0}"},{"lineNumber":243,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":245,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":246,"author":{"gitId":"-"},"content":"\u003c/popover\u003e!"},{"lineNumber":247,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003csmall\u003eMore info on above list types: https://www.markdownguide.org/basic-syntax#lists\u003c/small\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":"****Task lists**** (from GFMD):"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example-gfmd\"\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":"- [ ] Item 1"},{"lineNumber":258,"author":{"gitId":"-"},"content":" - [ ] Sub item 1.1"},{"lineNumber":259,"author":{"gitId":"-"},"content":" - [x] Sub item 1.2"},{"lineNumber":260,"author":{"gitId":"-"},"content":"- [x] Item 2"},{"lineNumber":261,"author":{"gitId":"-"},"content":"- [ ] Item 3"},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":264,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":"****Radio-button lists:****"},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example-markbind\"\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":270,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":"- ( ) Item 1"},{"lineNumber":273,"author":{"gitId":"-"},"content":"- ( ) Item 2"},{"lineNumber":274,"author":{"gitId":"-"},"content":"- (x) Item 3"},{"lineNumber":275,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":""},{"lineNumber":281,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":282,"author":{"gitId":"-"},"content":"1. Item 1"},{"lineNumber":283,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":284,"author":{"gitId":"-"},"content":" 1. Sub item 1.2"},{"lineNumber":285,"author":{"gitId":"-"},"content":"* Item 2"},{"lineNumber":286,"author":{"gitId":"-"},"content":" * item 2.1"},{"lineNumber":287,"author":{"gitId":"-"},"content":"- [ ] Item 3"},{"lineNumber":288,"author":{"gitId":"-"},"content":"- [x] Item 4"},{"lineNumber":289,"author":{"gitId":"-"},"content":"- ( ) Item 5"},{"lineNumber":290,"author":{"gitId":"-"},"content":"```"},{"lineNumber":291,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":292,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":293,"author":{"gitId":"-"},"content":""},{"lineNumber":294,"author":{"gitId":"-"},"content":"1. Item 1"},{"lineNumber":295,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":296,"author":{"gitId":"-"},"content":" 1. Sub item 1.2"},{"lineNumber":297,"author":{"gitId":"-"},"content":"* Item 2"},{"lineNumber":298,"author":{"gitId":"-"},"content":" * item 2.1"},{"lineNumber":299,"author":{"gitId":"-"},"content":"- [ ] Item 3"},{"lineNumber":300,"author":{"gitId":"-"},"content":"- [x] Item 4"},{"lineNumber":301,"author":{"gitId":"-"},"content":"- ( ) Item 5"},{"lineNumber":302,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"KevinEyo1":27,"-":275}},{"path":"docs/userGuide/syntax/navBars.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Navbars"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"**Navbar allows visitors of your website to navigate through pages easily.**"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"**Navbars support link highlighting; link highlighting can be customised by specifying rules.**"},{"lineNumber":6,"author":{"gitId":"-"},"content":"- Define `default-highlight-on` in `\u003cnavbar\u003e` to specify fallback highlight rules."},{"lineNumber":7,"author":{"gitId":"-"},"content":"- Define `data-highlight` in `\u003ca\u003e` tags with the class `nav-link` or `dropdown-item` to specify individual highlight rules."},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cmarkdown\u003e"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"Note: **Navbars** should be placed within a [header file]({{ baseUrl }}/userGuide/tweakingThePageStructure.html#sticking-the-header-to-the-top) to ensure that they are correctly positioned at the top of the page, above the [site navigation]({{ baseUrl }}/userGuide/tweakingThePageStructure.html#constructing-a-page-navigation-menu) and [page navigation]({{ baseUrl }}/userGuide/tweakingThePageStructure.html#constructing-a-page-navigation-menu) menus."},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003c/markdown\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"primary\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"dark\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"light\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":65,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":66,"author":{"gitId":"-"},"content":"type | `String` | `primary` | Supports: `primary`, `dark`, `light`, `none`."},{"lineNumber":67,"author":{"gitId":"-"},"content":"default-highlight-on | `String` | `sibling-or-child` | Supports: `sibling-or-child`, `sibling`, `child`, `exact`, `none`. Specifies link highlight rules for navbars."},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"If you wish to further customize your navbar beyond the primary, dark, and light theme colors, specify the `type\u003d\"none\"` attribute and insert your own custom styles via the `add-class` attribute. You can \u003ctrigger trigger\u003d\"click\" for\u003d\"modal:built-in-bg\"\u003euse built-in background styles\u003c/trigger\u003e or [insert your own defined CSS classes](/userGuide/components/advanced.md#inserting-custom-classes-into-components)."},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003cmodal header\u003d\"Built-in background styles\" id\u003d\"modal:built-in-bg\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003cmd\u003eFor instance, Bootstrap supports `.bg-danger`, `bg-info`, `bg-primary`, `bg-success`, `bg-warning` as background colors.\u003c/md\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"\u003cmd\u003eIn `{your-site}/_markbind/headers/header.md`, you can change `\u003cnavbar type\u003d\"dark/primary/light\"\u003e` to `\u003cnavbar type\u003d\"none\" add-class\u003d\"bg-warning/danger/info/primary/success\"\u003e` to apply Bootstrap background styles.\u003c/md\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003c/modal\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":"****Navbar Link Highlighting****"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":83,"author":{"gitId":"-"},"content":"{% include \"_markbind/layouts/headers/header.md\" %}"},{"lineNumber":84,"author":{"gitId":"-"},"content":"```"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":"****Highlight Options****"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":"Name | Description"},{"lineNumber":89,"author":{"gitId":"-"},"content":"--- | ---"},{"lineNumber":90,"author":{"gitId":"-"},"content":"`child` | Highlights link if URL in address bar is a child of the link. E.g `foo/bar` is a child of `foo`."},{"lineNumber":91,"author":{"gitId":"-"},"content":"`sibling` | Highlights link if URL in address bar is a sibling of the link. E.g `foo/bar` and `foo/bear` are siblings."},{"lineNumber":92,"author":{"gitId":"-"},"content":"`sibling-or-child` | Highlights link if URL in address bar is a sibling or child of the link."},{"lineNumber":93,"author":{"gitId":"-"},"content":"`exact` | Highlights link if URL in address bar exactly matches link."},{"lineNumber":94,"author":{"gitId":"-"},"content":"`none` | No highlighting."},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"primary\"\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":"```"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"primary\"\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"dark\"\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":140,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":141,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"light\"\u003e"},{"lineNumber":147,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"****Mobile page and site navigation menus****"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"The navbar component also provides access to MarkBind\u0027s [site navigation]({{ baseUrl }}/userGuide/components/navigation.html#site-navigation-menus) and [page navigation]({{ baseUrl }}/userGuide/components/navigation.html#page-navigation-menus) menu **components** if used in the page\u0027s [layout](../tweakingThePageStructure.md#layouts). No additional setup is required!"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":"If you are viewing the documentation on a larger device, resize the window to see what it looks like."},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"Alternatively, if you want to display \u003ctooltip content\u003d\"e.g. adding an image to the site nav\"\u003eadditional content\u003c/tooltip\u003e in these navigation menus, the navbar is also able to \"pull in\" any **container element** with a HTML `id` of `\"site-nav\"` or `\"page-nav\"`. You may refer to the [layouts](../tweakingThePageStructure.md#layouts) section for an example."},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":"The navbar component auto-detects if the MarkBind\u0027s navigation components or your element containers has any \u003ctooltip content\u003d\"`\u003ca\u003e` tags in particular\"\u003elinks\u003c/tooltip\u003e.\u003cbr\u003e"},{"lineNumber":173,"author":{"gitId":"-"},"content":"If absent, the navigation buttons to open the menus are _automatically hidden_."},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":"****Mobile navigation menu button placement****"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"If you wish to alter the button placement on the navbar, you may use the `\u003csite-nav-button /\u003e` and `\u003cpage-nav-button /\u003e` components in the `lower-navbar` slot."},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":"By default, if the `lower-navbar` slot is not specified, the site and page navigation buttons are simply placed as such."},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cnavbar\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":" \u003c!-- Any normal navbar items --\u003e"},{"lineNumber":185,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":187,"author":{"gitId":"-"},"content":" \u003c!-- Use slot to wrap the buttons in the lower navbar --\u003e"},{"lineNumber":188,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"lower-navbar\" class\u003d\"nav-menu-container\"\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \u003csite-nav-button /\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":" \u003cpage-nav-button /\u003e"},{"lineNumber":191,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":"```"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"Component | Description"},{"lineNumber":196,"author":{"gitId":"-"},"content":"--- | ---"},{"lineNumber":197,"author":{"gitId":"-"},"content":"`page-nav-button` | Pulls any element with an identifier, `id\u003dpage-nav` into the menu. If no such element exists, it pulls any [page navigation menu]({{ baseUrl }}/userGuide/components/navigation.html#page-navigation-menus) used in the layout."},{"lineNumber":198,"author":{"gitId":"-"},"content":"`site-nav-button` | Pulls any element with an identifier, `id\u003dsite-nav` into the menu. If no such element exists, it pulls all [site navigation menu components]({{ baseUrl }}/userGuide/components/navigation.html#site-navigation-menus) used in the layout."},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"****Styling the mobile page and site navigation menus****"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":"You may also wish to style your navigation content differently on mobile view."},{"lineNumber":203,"author":{"gitId":"-"},"content":"By default, MarkBind already provides some reasonable overrides for smaller screens, applied over any styles you might have for the mobile navigation content identified above."},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":"```css {heading\u003d\"CSS class attached to the root navigation element\"}"},{"lineNumber":206,"author":{"gitId":"-"},"content":".mb-mobile-nav {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" display: block !important;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" margin: 0 !important;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" border: none !important;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" padding: 10px !important;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" width: 100% !important;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" max-width: 100% !important;"},{"lineNumber":213,"author":{"gitId":"-"},"content":"}"},{"lineNumber":214,"author":{"gitId":"-"},"content":"```"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":"If you require greater customisation, you may simply compose the respective selectors with the `.mb-mobile-nav` element."},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"{{ icon_example }}"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"```css {heading\u003d\"\"}"},{"lineNumber":221,"author":{"gitId":"-"},"content":"#site-nav.mb-mobile-nav {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" /* Be sure to add the !important css rule when overriding .mb-mobile-nav\u0027s properties! */"},{"lineNumber":223,"author":{"gitId":"-"},"content":" border: 1px solid black !important;"},{"lineNumber":224,"author":{"gitId":"-"},"content":" /* For other properties, there is no need. */"},{"lineNumber":225,"author":{"gitId":"-"},"content":" color: red;"},{"lineNumber":226,"author":{"gitId":"-"},"content":"}"},{"lineNumber":227,"author":{"gitId":"-"},"content":"```"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"Refer to the [layouts](../tweakingThePageStructure.md) section to find out how to add custom CSS files to a page!"},{"lineNumber":232,"author":{"gitId":"-"},"content":"\u003c/box\u003e"}],"authorContributionMap":{"-":231,"yiwen101":1}},{"path":"docs/userGuide/syntax/pageNavigationMenus.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Page Navigation Menus"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword d-none\"\u003eprint page nav as table of content\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"content\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"**A _Page Navigation Menu_ (\u003d\u003d_pageNav_ for short\u003d\u003d) displays a list of the current page\u0027s headings.** Page navigation menus are typically configured in [layouts]({{baseUrl}}/userGuide/tweakingThePageStructure.html#layouts), but can also be utilized in individual pages."},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"****Adding a pageNav****"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Specify the smallest heading level you want to be included** within the `\u003cfrontmatter\u003e` of a page with \u003ctooltip content\u003d\"The value `default` will use `headingIndexingLevel` within `site.json`.\"\u003e`\"default\"`\u003c/tooltip\u003e or a \u003ctooltip content\u003d\"HTML defines six levels of headings, numbered from \u003cbr\u003e`1 to 6`.\"\u003e`heading level`\u003c/tooltip\u003e."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" The `default` level uses the [`headingIndexingLevel` property]({{baseUrl}}/userGuide/siteJsonFile.html#headingindexinglevel) of your site configuration file."},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/box\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"2. **(Optional) You may also specify a page navigation title** within `\u003cfrontmatter\u003e` that will be placed at the top of the page navigation menu."},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"3. **Position the page navigation menu** within your layout using the `\u003cpage-nav /\u003e` component."},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"4. **(Optional) To make pageNav accessible on smaller screens, you can use the `\u003cpage-nav-button /\u003e` component in the [navbar]({{baseUrl}}/userGuide/components/navigation.html#navbars).**"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"5. **(Optional) To make pageNav available on print, you can position the page navigation menu on individual pages with the `\u003cpage-nav-print /\u003e` component.**"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Additional details on printing pageNav**\" type\u003d\"seamless\" class\u003d\"ms-4\" expanded\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"You can specify the location of the page navigation menu on print by using either of the following syntaxes:"},{"lineNumber":29,"author":{"gitId":"-"},"content":"- `\u003cpage-nav-print /\u003e`"},{"lineNumber":30,"author":{"gitId":"-"},"content":"- `\u003cpage-nav-print\u003e\u003c/page-nav-print\u003e`"},{"lineNumber":31,"author":{"gitId":"-"},"content":" - This is useful if you want to include a custom title (or any other content) before the page navigation menu. For example, `\u003cpage-nav-print\u003eTable of Contents\u003c/page-nav-print\u003e`"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"You can specify multiple `\u003cpage-nav-print /\u003e` components in a page and they do not have to be at the top of the page. They also do not appear when viewed on a browser."},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"{{ icon_example }}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"In the page that you want to have page navigation printed (i.e. to serve as a table of content when viewed on PDFs), use the `\u003cpage-nav-print /\u003e` component to position the pageNav like so:"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"indented\"\u003e"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" pageNav: 2"},{"lineNumber":43,"author":{"gitId":"-"},"content":" pageNavTitle: \"Chapters of This Page\""},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"# Overview"},{"lineNumber":49,"author":{"gitId":"-"},"content":"Content of the page..."},{"lineNumber":50,"author":{"gitId":"-"},"content":"```"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"To view the pageNav on print, open the print preview of the page using the browser\u0027s print function."},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"If you are using Chrome, you can right-click on the page and select \"Print\" to open the print preview."},{"lineNumber":59,"author":{"gitId":"-"},"content":"You can try it out by going to our [CLI Commands page]({{baseUrl}}/userGuide/cliCommands.html) and printing it."},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"You can see an example of a Page Navigation Bar \u003d\u003don the right side\u003d\u003d of \u003ca target\u003d\"_blank\" href\u003d\"{{ baseUrl }}/userGuide/formattingContents.html\"\u003ethis page\u003c/a\u003e."},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":4,"KevinEyo1":1,"-":64}},{"path":"docs/userGuide/syntax/panels.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% from \"userGuide/components/advanced.md\" import slot_info_trigger %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Panels"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"**Panel is a flexible container that supports collapsing and expanding its content. It is expandable by default.**"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This is your header for a Panel, click me to expand!\"\u003e"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"\u003cmarkdown\u003e_markdown_\u003c/markdown\u003e"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":"plain text ..."},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"**With `minimized` attribute, panel is minimized into an inline block element. The `alt` attribute is for you to specify the minimized block header.**"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"How to cultivate a tomato plant at home\" alt\u003d\"Tomatoes\" minimized\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" Lorem ipsum ..."},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"**With `expanded` attribute, you can set the panels to be expanded when loaded in.**"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Have your readers click less to see the Panel\u0027s contents\" expanded\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Lorem ipsum ..."},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"**With the `expand-headerless` attribute, you can hide the panel header when it is expanded.**"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This header will only show when the Panel is collapsed\" expand-headerless\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Lorem ipsum ..."},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"**With the `peek` attribute, you may showcase part of your content without expanding the panel.**"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Give your readers a peek of the content without expanding Panel\" peek\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore"},{"lineNumber":57,"author":{"gitId":"-"},"content":" magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"},{"lineNumber":58,"author":{"gitId":"-"},"content":" consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."},{"lineNumber":59,"author":{"gitId":"-"},"content":" Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."},{"lineNumber":60,"author":{"gitId":"-"},"content":" Curabitur ornare ipsum eu ex congue egestas. Maecenas pretium nibh sed enim ornare finibus. Mauris quis metus "},{"lineNumber":61,"author":{"gitId":"-"},"content":" facilisis, mattis tellus nec, pulvinar mi. Quisque at vehicula lectus. Ut ac lacus mi. Donec mattis nec velit "},{"lineNumber":62,"author":{"gitId":"-"},"content":" eget tincidunt. Maecenas vel mauris mattis nisl tempor sollicitudin. Orci varius natoque penatibus et magnis "},{"lineNumber":63,"author":{"gitId":"-"},"content":" dis parturient montes, nascetur ridiculus mus. Duis tincidunt diam eu dolor pellentesque, eget dignissim tortor "},{"lineNumber":64,"author":{"gitId":"-"},"content":" pellentesque. "},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"**Panel provides many types that change its appearance.**"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**light type panel (DEFAULT)**\" type\u003d\"light\" minimized\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**dark type panel**\" type\u003d\"dark\" minimized\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**primary type panel**\" type\u003d\"primary\" minimized\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**secondary type panel**\" type\u003d\"secondary\" minimized\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**info type panel**\" type\u003d\"info\" minimized\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**danger type panel**\" type\u003d\"danger\" minimized\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**warning type panel**\" type\u003d\"warning\" minimized\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":94,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**success type panel**\" type\u003d\"success\" minimized\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**seamless type panel**\" type\u003d\"seamless\" minimized\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**minimal type panel**\" type\u003d\"minimal\" minimized\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":103,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"**Show/Hide buttons using `no-switch`, `no-close`, or `no-minimized-switch`.**"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**This minimized panel does not have a switch button**\" minimized no-minimized-switch\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":115,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This panel does not have a switch button\" no-switch\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":118,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This panel does not have a close button\" no-close\u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This panel does not have either buttons\" no-close no-switch\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"**Use markdown in the header (only inline level markdown are supported).**"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Bold text** :rocket: ![](https://markbind.org/images/logo-lightbackground.png \u003dx20)\" type\u003d\"seamless\"\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"**If `src` attribute is provided, the panel will take content from the `src` specified and add it to the Panel body.**"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Content loaded in from \u0027src\u0027\" src\u003d\"extra/loadContent.html#fragment\" minimized\u003e\u003c/panel\u003e"},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"yiwen101"},"content":"\u003cdiv id \u003d \"script_and_styles_warning\"\u003e"},{"lineNumber":149,"author":{"gitId":"yiwen101"},"content":"\u003cbox type \u003d \"warning\" header \u003d \"#### Global Effects of the Script and Styles from the Imported Externals\"\u003e"},{"lineNumber":150,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":151,"author":{"gitId":"yiwen101"},"content":"Importing external resources that contains `script` or `styles` can inadvertently take global effects on your MarkBind website. Due to hoisting during processing, imported scripts and stylesheets affect the entire page. This could potentially alter its appearance and behavior beyond the intended scope."},{"lineNumber":152,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":153,"author":{"gitId":"yiwen101"},"content":"For example, if a CSS file imported via such means styles headings to be red, this change will be reflected page-wide."},{"lineNumber":154,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":155,"author":{"gitId":"yiwen101"},"content":"To safeguard against unintended consequences, consider directly incorporating the code or customizing styles to target specific elements or classes not used universally. This approach grants more precise control over your website\u0027s presentation and reduces the risk of unexpected changes."},{"lineNumber":156,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":157,"author":{"gitId":"yiwen101"},"content":"\u003c/div\u003e"},{"lineNumber":158,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"**If `popup-url` attribute is provided, a popup button will be shown. If clicked, it opens the specified url in a new window.**"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":162,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Try clicking on my pop-up button\" popup-url\u003d\"{{ baseUrl }}/userGuide/syntax/extra/loadContent.html\"\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":" This panel has a popup."},{"lineNumber":166,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":167,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":168,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":"**If `preload` attribute is provided, the panel body will load the HTML when the page renders instead of after being expanded.**"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Right click and inspect my HTML before expanding me!\" src\u003d\"extra/loadContent.html#fragment\" preload\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":" \u003cp\u003eYou should be able to find this text before expanding the Panel.\u003c/p\u003e"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"**You can nest Panels or other components within a Panel.**"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":186,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Parent Panel\"\u003e"},{"lineNumber":187,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"Level 1 Nested Panel\"\u003e"},{"lineNumber":188,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"Level 2 Nested Panel\"\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \u003cbox type\u003d\"success\"\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":" I\u0027m a nested box"},{"lineNumber":191,"author":{"gitId":"-"},"content":" \u003c/box\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"Level 3 Nested Panel\" type\u003d\"minimal\"\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":" minimal-type panel"},{"lineNumber":194,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":195,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"Level 1 Nested Panel\" type\u003d\"info\"\u003e"},{"lineNumber":198,"author":{"gitId":"-"},"content":" Some Text"},{"lineNumber":199,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":200,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":205,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":206,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":207,"author":{"gitId":"-"},"content":"header{{slot_info_trigger}} | `String` | `\u0027\u0027` | The clickable text on the Panel\u0027s header. Supports MarkDown text."},{"lineNumber":208,"author":{"gitId":"-"},"content":"alt | `String` | Panel header | The clickable text on the minimised Panel. Supports MarkDown text."},{"lineNumber":209,"author":{"gitId":"-"},"content":"expandable | `Boolean`| `true` | Whether Panel is expandable."},{"lineNumber":210,"author":{"gitId":"-"},"content":"expanded | `Boolean` | `false` | Whether Panel is expanded or collapsed when loaded in."},{"lineNumber":211,"author":{"gitId":"-"},"content":"minimized | `Boolean` | `false` | Whether Panel is minimized."},{"lineNumber":212,"author":{"gitId":"-"},"content":"expand-headerless | `Boolean` | `false` | Whether to hide the header text when the Panel is expanded."},{"lineNumber":213,"author":{"gitId":"-"},"content":"peek | `Boolean` | `false` | Whether to show part of the content when the Panel is collapsed."},{"lineNumber":214,"author":{"gitId":"-"},"content":"no-close | `Boolean` | `false` | Whether to show the close button."},{"lineNumber":215,"author":{"gitId":"-"},"content":"no-switch | `Boolean` | `false` | Whether to show the expand switch."},{"lineNumber":216,"author":{"gitId":"-"},"content":"bottom-switch | `Boolean` | `true` | Whether to show an expand switch at the bottom of the panel. Independent of no-switch."},{"lineNumber":217,"author":{"gitId":"-"},"content":"popup-url | `String` | | The URL that the popup window will navigate to. The URL can be absolute or relative."},{"lineNumber":218,"author":{"gitId":"-"},"content":"preload | `Boolean` | `false` | Whether the content is loaded immediately from `src`."},{"lineNumber":219,"author":{"gitId":"-"},"content":"src | `String` | | The URL to the remote page to be loaded as the content of the panel."},{"lineNumber":220,"author":{"gitId":"-"},"content":"type | `String` | `light` | The type or color scheme of the panel (single).\u003cbr\u003eSupports: `light`, `dark`, `primary`, `secondary`, `info`, `success`, `warning`, `danger`, `seamless`, `minimal`."},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"primary type panel\" type\u003d\"primary\" \u003e"},{"lineNumber":226,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":"```"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":232,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"minimal type panel\" type\u003d\"minimal\" \u003e"},{"lineNumber":233,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":234,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":235,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"seamless type panel\" type\u003d\"seamless\" \u003e"},{"lineNumber":236,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"info type panel\" type\u003d\"info\" expanded\u003e"},{"lineNumber":239,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":240,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":241,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"danger type panel\" type\u003d\"danger\" \u003e"},{"lineNumber":242,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":243,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"warning type panel\" type\u003d\"warning\" \u003e"},{"lineNumber":245,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":246,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":247,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"success type panel\" type\u003d\"success\" \u003e"},{"lineNumber":248,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"\u003cp/\u003e"},{"lineNumber":251,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"light type panel (DEFAULT)\" type\u003d\"light\" minimized\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"dark type panel\" type\u003d\"dark\" minimized\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"primary type panel\" type\u003d\"primary\" minimized\u003e"},{"lineNumber":258,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":259,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":260,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"secondary type panel\" type\u003d\"secondary\" minimized\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":""},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":252,"yiwen101":13}},{"path":"docs/userGuide/syntax/pictures.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Pictures"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"**A `pic` component allows you to add captions below the image.**"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":8,"author":{"gitId":"LamJiuFong"},"content":"\u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" width\u003d\"300\" alt\u003d\"Logo\" lazy\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" MarkBind Logo"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/pic\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":15,"author":{"gitId":"-"},"content":"Name | Type | Default | Description "},{"lineNumber":16,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":17,"author":{"gitId":"-"},"content":"alt | `string` | | **This must be specified.**\u003cbr\u003eThe alternative text of the image."},{"lineNumber":18,"author":{"gitId":"-"},"content":"height | `string` | | The height of the image in pixels."},{"lineNumber":19,"author":{"gitId":"-"},"content":"src | `string` | | **This must be specified.**\u003cbr\u003eThe URL of the image.\u003cbr\u003eThe URL can be specified as absolute or relative references. More info in: _[Intra-Site Links]({{baseUrl}}/userGuide/formattingContents.html#intraSiteLinks)_"},{"lineNumber":20,"author":{"gitId":"-"},"content":"width | `string` | | The width of the image in pixels.\u003cbr\u003eIf both width and height are specified, width takes priority over height. It is to maintain the image\u0027s aspect ratio."},{"lineNumber":21,"author":{"gitId":"LamJiuFong"},"content":"lazy | `boolean` | false | The `\u003cpic\u003e` component lazy loads if this attribute is specified.\u003cbr\u003e**Either the height or width should be specified to avoid layout shifts while lazy loading images.**"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":26,"author":{"gitId":"LamJiuFong"},"content":"\u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" width\u003d\"300\" alt\u003d\"Logo\" lazy\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" MarkBind Logo"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003c/pic\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"```"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" width\u003d\"300\" alt\u003d\"Logo\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" MarkBind Logo"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/pic\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":34}},{"path":"docs/userGuide/syntax/questions.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% from \"userGuide/components/advanced.md\" import slot_info_trigger, slot_type_info_trigger %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Questions and Quizzes"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"Question and quiz components provide an easy way to test readers on the relevant content topic in the page. {.mt-3}"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"#### Introduction"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"Question components (`\u003cquestion\u003e`) can be one of the following types: **MCQ**, **Checkbox**, **Fill-in-the-Blanks**, or **Text**."},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"In all cases, content directly inserted in between `\u003cquestion\u003e...\u003c/question\u003e` will be inserted into the **question body**."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"You can also insert markdown into the **header** or **hint box**, by using the `header` and `hint` attributes respectively. Click the hint button below to see how the hint box turns out!"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputSeparate.md\" boilerplate \u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"heading\"\u003eHeader and Hint syntax\u003c/variable\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003c!-- Insert markdown into the header and hint using the respective attributes --\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" header\u003d\"Which of the following is correct?\" hint\u003d\"Think out of the box! :fas-box:\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c!-- Anything you place directly under a question not in a slot is inserted into the question body! --\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003csmall\u003eAdapted from [Daily Mail](https://www.dailymail.co.uk/femail/article-4702868/Can-pass-intelligence-test.html)"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/small\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/pic\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c!-- Several hidden checkbox q-option components explained later --\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" header\u003d\"Which of the following is correct?\" hint\u003d\"Think out of the box! :fas-box:\"\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cpic src\u003d\"{{baseUrl}}/images/math-question.jpg\" alt\u003d\"math question image\" height\u003d\"200\" class\u003d\"d-block mx-auto\"\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003csmall\u003eAdapted from [Daily Mail](https://www.dailymail.co.uk/femail/article-4702868/Can-pass-intelligence-test.html)"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/small\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003c/pic\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cq-option correct reason\u003d\"Multiply the numbers on the left together and add the leftmost number!\"\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" 96"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"Under normal circumstances, this would be correct.\"\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" 19"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003cq-option correct reason\u003d\"Simply add the running sum of the results as well!\"\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" 40"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cq-option\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" 811"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":"If you require more expressive formatting for your header or hint markup, you can use the `\u003cdiv slot\u003d\"header\"\u003e` and `\u003cdiv slot\u003d\"hint\"\u003e` slots. Expand the panel below to see an example!"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"minimal\" header\u003d\"Header and Hint example **with slots**\"\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputSeparate.md\" boilerplate \u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"heading\"\u003eHeaders and Hints using slots\u003c/variable\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" header\u003d\"Which of the following is true?\" hint\u003d\"Think out of the box! :fas-box:\"\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Header slot --\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"header\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" Which of the following is correct?"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" Challenge: Try to get all the answers on your first try! :star: :star:"},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" \u003cpic src\u003d\"{{baseUrl}}/images/math-question.jpg\" alt\u003d\"math question image\" height\u003d\"200\" class\u003d\"d-block mx-auto\"\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003csmall\u003eAdapted from [Daily Mail](https://www.dailymail.co.uk/femail/article-4702868/Can-pass-intelligence-test.html)"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003c/small\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003c/pic\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c!-- Several hidden checkbox q-option components explained later --\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003c!-- Hint slot --\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"hint\"\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" Think out of the box! :fas-box:"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" Need another hint? \u003ctooltip content\u003d\"Two of the answers are correct!\"\u003eHover over me!\u003c/tooltip\u003e :fas-mouse-pointer:"},{"lineNumber":85,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" header\u003d\"Which of the following is true?\" hint\u003d\"Think out of the box! :fas-box:\"\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003c!-- Header slot --\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"header\"\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" Which of the following is correct?"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" Challenge: Try to get all the answers on your first try! :star: :star:"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" \u003cpic src\u003d\"{{baseUrl}}/images/math-question.jpg\" alt\u003d\"math question image\" height\u003d\"200\" class\u003d\"d-block mx-auto\"\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003csmall\u003eAdapted from [Daily Mail](https://www.dailymail.co.uk/femail/article-4702868/Can-pass-intelligence-test.html)"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c/small\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003c/pic\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003cq-option correct reason\u003d\"Multiply the numbers on the left together and add the leftmost number!\"\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" 96"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"Under normal circumstances, this would be correct.\"\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":" 19"},{"lineNumber":109,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":" \u003cq-option correct reason\u003d\"Simply add the running sum of the results as well!\"\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":" 40"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u003cq-option\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":" 811"},{"lineNumber":115,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" \u003c!-- Hint slot --\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"hint\"\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" Think out of the box! :fas-box:"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" Need another hint? \u003ctooltip content\u003d\"Two of the answers are correct!\"\u003eHover over me!\u003c/tooltip\u003e :fas-mouse-pointer:"},{"lineNumber":123,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless class\u003d\"mt-3\"\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":"Placing the question into the header is entirely optional. You may also wish to include the question directly in the question body, omitting the header entirely."},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":"****Options and Slots common to all question types****"},{"lineNumber":136,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":137,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":138,"author":{"gitId":"-"},"content":"type | `String` | `\u0027\u0027` | The type of question. Supports `mcq`, `checkbox`, `blanks`, or `text`."},{"lineNumber":139,"author":{"gitId":"-"},"content":"header{{slot_info_trigger}} | `String` | `\u0027\u0027` | The markup to insert into the question header. The header is omitted if this is not provided."},{"lineNumber":140,"author":{"gitId":"-"},"content":"hint{{slot_info_trigger}} | `String` | `\u0027\u0027` | The content to display in the hint box."},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":"#### MCQ and Checkbox Questions {.mt-4 .mb-3}"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"MCQ and checkbox questions are indicated with the `type\u003d\"mcq\"` or `type\u003d\"checkbox\"` attribute."},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"In both instances, you can include the possible answers using the `\u003cq-option\u003e` component, placed anywhere inside the \u003ctooltip content\u003d\"if you wish, you could place it in the `header` mentioned above as well!\"\u003equestion\u003c/tooltip\u003e. To indicate the correct option(s), add the `\u003cq-option correct\u003e` attribute."},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":"Optionally, you can provide the reason for the particular option using the `\u003cq-option reason\u003d\"...\"\u003e` attribute, or the `\u003cdiv slot\u003d\"reason\"\u003e` slot for more expressive formatting, similar to the `hint` and `header` options and slots."},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"**MCQ Questions**"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"{% set mcqQuestion %}"},{"lineNumber":154,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"mcq\" header\u003d\"Which of these **contradicts** the heuristics recommended when creating test cases with multiple inputs?\"\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" \u003c!-- Insert the reason for the option using the reason attribute --\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"This is **correct**. We need to figure out if a positive test case works!\"\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":" Each valid test input should appear at least once in a test case that doesn’t have any invalid inputs."},{"lineNumber":158,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":159,"author":{"gitId":"-"},"content":" \u003cq-option\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":" It is ok to combine valid values for different inputs."},{"lineNumber":161,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":162,"author":{"gitId":"-"},"content":" \u003cq-option\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":" No more than one invalid test input should be in a given test case."},{"lineNumber":164,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":" \u003c!-- Use the \u0027correct\u0027 attribute to indicate an option as correct. --\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":" \u003cq-option correct\u003e"},{"lineNumber":167,"author":{"gitId":"-"},"content":" All invalid test inputs must be tested together."},{"lineNumber":168,"author":{"gitId":"-"},"content":" \u003c!-- Optionally, you may use a reason slot instead of a reason attribute. --\u003e"},{"lineNumber":169,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"reason\"\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":" If you test all invalid test inputs together, you will not know if each one of the invalid inputs are handled"},{"lineNumber":171,"author":{"gitId":"-"},"content":" correctly by the SUT."},{"lineNumber":172,"author":{"gitId":"-"},"content":" This is because most SUTs return an error message upon encountering the first invalid input."},{"lineNumber":173,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"hint\"\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":" How do you figure out which inputs are wrong? (or correct)"},{"lineNumber":177,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ mcqQuestion }}\u003c/variable\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003eMCQ questions can have multiple correct options!\u003c/box\u003e"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"-"},"content":"**Checkbox Questions**"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":"{% set checkboxQuestion %}"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" hint\u003d\"Use your calculator! :fas-calculator:\"\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"jingting1412"},"content":" ###### Which of the following is true?"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" \u003cbr\u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum\"\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":" 1 + 1 \u003d 11"},{"lineNumber":198,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":199,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"Division by zero is **undefined**!\"\u003e"},{"lineNumber":200,"author":{"gitId":"-"},"content":" 1 / 0 \u003d infinity"},{"lineNumber":201,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":" \u003cq-option correct\u003e"},{"lineNumber":203,"author":{"gitId":"-"},"content":" 11 / 11 \u003d 1"},{"lineNumber":204,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":205,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":206,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ checkboxQuestion }}\u003c/variable\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":"****`q-option` Options and Slots****"},{"lineNumber":214,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":215,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":216,"author":{"gitId":"-"},"content":"correct | `Boolean` | `false` | Whether this option (placed under either a MCQ or checkbox question) is correct. You may have multiple correct answers in either case."},{"lineNumber":217,"author":{"gitId":"-"},"content":"reason{{slot_info_trigger}} | `String` | `\u0027\u0027` | The explanation markup to display for the option once the answer is checked."},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"#### Fill-in-the-Blanks Questions {.mt-4 .mb-3}"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":"Fill-in-the-blanks questions are specified with the `type\u003d\"blanks\"` attribute."},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"Unlike MCQ and checkbox questions, answer checking is performed for each blank by providing keywords to check for in the user\u0027s answer through the `keywords` attribute in each `q-option`."},{"lineNumber":225,"author":{"gitId":"-"},"content":"If no keywords are provided, the answer for that blank will always be marked as correct."},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"Keywords are validated by checking if the keyword matches the user\u0027s answer exactly (ignoring letter casing)."},{"lineNumber":230,"author":{"gitId":"-"},"content":"This works well for some"},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003cpopover header\u003d\"When does validation work?\"\u003ecases"},{"lineNumber":232,"author":{"gitId":"-"},"content":" \u003cspan slot\u003d\"content\"\u003e"},{"lineNumber":233,"author":{"gitId":"-"},"content":" When the keywords given are short and specific to the blank (eg. `abstraction`), it increases the chances that the blank will be validated correctly."},{"lineNumber":234,"author":{"gitId":"-"},"content":" \u003cbr\u003e\u003cbr\u003e"},{"lineNumber":235,"author":{"gitId":"-"},"content":" In contrast, something long and vague like `after discussing for a period of time` which can easily be expressed in a different way (eg. `after deliberating for a while`) would likely cause the blank to be validated incorrectly."},{"lineNumber":236,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003c/popover\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":"and not others."},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":"{% set blanksQuestion %}"},{"lineNumber":243,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"blanks\" hint\u003d\"Google it!\"\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"jingting1412"},"content":" ###### German sociologist __________ called the process of simultaneously analyzing the behavior of individuals and the society that shapes that behavior __________."},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Norbert Elias, Elias\" reason\u003d\"That\u0027s his name!\"\u003e\u003c/q-option\u003e"},{"lineNumber":248,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"figuration\"\u003e\u003c/q-option\u003e"},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ blanksQuestion }}\u003c/variable\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":"By default, if the question has yet to be answered correctly, intermediate results will be shown beside each blank. You can specify a `no-intermediate-result` attribute to avoid this behvaiour (i.e. hide the result of each blank upon incorrect attempts)."},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":"Since the validation is imperfect, the minimum proportion of correct blanks needed for the entire question to be marked as correct can also be changed using the `threshold` attribute."},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":"If you don\u0027t want to validate the answer at all, you may set the `threshold` attribute to `0`. Doing so always marks the entire question correct, and users will be able to see all intended answers."},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":"{% set blanksQuestion2 %}"},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"blanks\" hint\u003d\"What properties would you want these database transactions to have?\" threshold\u003d0.75 no-intermediate-result\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"jingting1412"},"content":" ###### In computer science, ACID is a set of properties of database transactions intended to guarantee data validity despite errors, power failures, and other mishaps. These properties are: A for __________, C for __________, I for __________, and D for __________."},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Atomicity, Atomic\" reason\u003d\"Meaning: either all occurs or nothing occurs\"\u003e\u003c/q-option\u003e"},{"lineNumber":273,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Consistency, Consistent\"\u003e\u003c/q-option\u003e"},{"lineNumber":274,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Isolation, Isolated\"\u003e\u003c/q-option\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Durability, Durable\"\u003e\u003c/q-option\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":281,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ blanksQuestion2 }}\u003c/variable\u003e"},{"lineNumber":282,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":"****Fill-in-the-Blanks Question specific Options and Slots****"},{"lineNumber":285,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":286,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":287,"author":{"gitId":"-"},"content":"threshold | `Number` | `0.5` | Minimum proportion of keywords that have to be matched in the user\u0027s answer for the answer to be marked as correct."},{"lineNumber":288,"author":{"gitId":"-"},"content":"no-intermediate-result | `Boolean` | `False` | Hides the result of each blank after an incorrect attempt."},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":"****`q-option` Options and Slots****"},{"lineNumber":291,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":292,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":293,"author":{"gitId":"-"},"content":"keywords | `String` | `\u0027\u0027` | Comma delimited string of keywords or phrases to match the user\u0027s answer against."},{"lineNumber":294,"author":{"gitId":"-"},"content":"reason{{slot_info_trigger}} | `String` | `\u0027\u0027` | The explanation markup to display for the option once the answer is checked."},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":"#### Text Questions {.mt-4 .mb-3}"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":"Text questions are specified with the `type\u003d\"text\"` attribute."},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"-"},"content":"Unlike MCQ and checkbox questions, answer checking is performed by providing keywords to check for in the user\u0027s answer through the `keywords` attribute."},{"lineNumber":302,"author":{"gitId":"-"},"content":"If no keywords are provided, the answer will always be marked as correct when placed in quizzes."},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":"Keywords are validated by simply looking for the keyword as a pattern in the user\u0027s answer!"},{"lineNumber":307,"author":{"gitId":"-"},"content":"This works well for some"},{"lineNumber":308,"author":{"gitId":"-"},"content":"\u003cpopover header\u003d\"When does validation work?\"\u003ecases"},{"lineNumber":309,"author":{"gitId":"-"},"content":" \u003cspan slot\u003d\"content\"\u003e"},{"lineNumber":310,"author":{"gitId":"-"},"content":" When the keywords specified are rather long (eg. `requirements`), it reduces the chance that this keyword can be mistakenly validated."},{"lineNumber":311,"author":{"gitId":"-"},"content":" \u003cbr\u003e\u003cbr\u003e"},{"lineNumber":312,"author":{"gitId":"-"},"content":" In contrast, something short and common like `take` which can easily be part of another word (eg. `mis-take-nly`) would be mistakenly validated."},{"lineNumber":313,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":314,"author":{"gitId":"-"},"content":"\u003c/popover\u003e"},{"lineNumber":315,"author":{"gitId":"-"},"content":"and not others."},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":"You can provide your answer in the `answer` attribute, or similarly, the `\u003cdiv slot\u003d\"answer\"\u003e` slot for more expressive formatting."},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":"{% set textQuestion %}"},{"lineNumber":322,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"text\" header\u003d\"Which country did the Hawaiian pizza originate from?\""},{"lineNumber":323,"author":{"gitId":"-"},"content":" keywords\u003d\"hawaii\" threshold\u003d\"0.5\" answer\u003d\"It originated from Hawaii!\"\u003e"},{"lineNumber":324,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"hint\"\u003e"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" Watch some pizza commercials! :tv:"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza:"},{"lineNumber":329,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":330,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":331,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":332,"author":{"gitId":"-"},"content":""},{"lineNumber":333,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":334,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":335,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ textQuestion }}\u003c/variable\u003e"},{"lineNumber":336,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":"Since the validation is imperfect, the minimum proportion of keywords that need to be matched can also be changed using the `threshold` attribute."},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":"If you don\u0027t want to validate the answer at all, you may also omit the `keywords` attribute entirely. Doing so also always marks the question as correct inside [quizzes](#quizzes)."},{"lineNumber":343,"author":{"gitId":"-"},"content":""},{"lineNumber":344,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":"****Text Question specific Options and Slots****"},{"lineNumber":347,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":348,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":349,"author":{"gitId":"-"},"content":"keywords | `String` | `\u0027\u0027` | Comma delimited string of keywords or phrases to match the user\u0027s answer against."},{"lineNumber":350,"author":{"gitId":"-"},"content":"threshold | `Number` | `0.5` | Minimum proportion of keywords that have to be matched in the user\u0027s answer for the answer to be marked as correct."},{"lineNumber":351,"author":{"gitId":"-"},"content":"answer{{slot_info_trigger}} | `String` | `\u0027\u0027` | The answer or explanation to display when the user clicks the check button."},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":"#### Quizzes"},{"lineNumber":354,"author":{"gitId":"-"},"content":""},{"lineNumber":355,"author":{"gitId":"-"},"content":"You can also build a series of questions out of multiple `\u003cquestion\u003e` components."},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":"Simply place the `\u003cquestion\u003e` components you want to include into the `\u003cquiz\u003e` component! No extra configuration is needed."},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputSeparate.md\" boilerplate \u003e"},{"lineNumber":360,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":361,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":362,"author":{"gitId":"-"},"content":"\u003cquiz\u003e"},{"lineNumber":363,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"mcq\"\u003e...\u003c/question\u003e"},{"lineNumber":364,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"checkbox\"\u003e...\u003c/question\u003e"},{"lineNumber":365,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"blanks\"\u003e...\u003c/question\u003e"},{"lineNumber":366,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"text\"\u003e...\u003c/question\u003e"},{"lineNumber":367,"author":{"gitId":"-"},"content":"\u003c/quiz\u003e"},{"lineNumber":368,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":369,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":370,"author":{"gitId":"-"},"content":"\u003cquiz\u003e"},{"lineNumber":371,"author":{"gitId":"-"},"content":"{{ mcqQuestion }}"},{"lineNumber":372,"author":{"gitId":"-"},"content":"{{ checkboxQuestion }}"},{"lineNumber":373,"author":{"gitId":"-"},"content":"{{ blanksQuestion }}"},{"lineNumber":374,"author":{"gitId":"-"},"content":"{{ textQuestion }}"},{"lineNumber":375,"author":{"gitId":"-"},"content":"\u003c/quiz\u003e"},{"lineNumber":376,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":377,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":378,"author":{"gitId":"-"},"content":""},{"lineNumber":379,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":"****Quiz Options and Slots****"},{"lineNumber":382,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":383,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":384,"author":{"gitId":"-"},"content":"intro | `String` | `\u0027\u0027` | Quiz intro markup above the question count."},{"lineNumber":385,"author":{"gitId":"-"},"content":"intro | Slot | `Click start to begin` | Quiz intro markup. Overrides the `intro` attribute if both are present."},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":"\u003c!-- Included in syntax cheat sheet --\u003e"},{"lineNumber":388,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":"```html { heading\u003d\"MCQ and Checkbox questions\" }"},{"lineNumber":391,"author":{"gitId":"-"},"content":"\u003c!-- use type\u003d\"checkbox\" for checkbox questions --\u003e"},{"lineNumber":392,"author":{"gitId":"-"},"content":"{{ mcqQuestion }}"},{"lineNumber":393,"author":{"gitId":"-"},"content":"```"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":"```html { heading\u003d\"Fill-in-the-Blanks questions\" }"},{"lineNumber":396,"author":{"gitId":"-"},"content":"{{ blanksQuestion }}"},{"lineNumber":397,"author":{"gitId":"-"},"content":"```"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":"```html { heading\u003d\"Text questions\" }"},{"lineNumber":400,"author":{"gitId":"-"},"content":"{{ textQuestion }}"},{"lineNumber":401,"author":{"gitId":"-"},"content":"```"},{"lineNumber":402,"author":{"gitId":"-"},"content":""},{"lineNumber":403,"author":{"gitId":"-"},"content":"```html { heading\u003d\"Quiz\" }"},{"lineNumber":404,"author":{"gitId":"-"},"content":"\u003cquiz\u003e"},{"lineNumber":405,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"mcq\"\u003e...\u003c/question\u003e"},{"lineNumber":406,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"checkbox\"\u003e...\u003c/question\u003e"},{"lineNumber":407,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"blanks\"\u003e...\u003c/question\u003e"},{"lineNumber":408,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"text\"\u003e...\u003c/question\u003e"},{"lineNumber":409,"author":{"gitId":"-"},"content":"\u003c/quiz\u003e"},{"lineNumber":410,"author":{"gitId":"-"},"content":"```"},{"lineNumber":411,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":"\u003c!-- Included in readerFacingFeatures.md --\u003e"},{"lineNumber":414,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":415,"author":{"gitId":"-"},"content":"\u003cquiz\u003e"},{"lineNumber":416,"author":{"gitId":"-"},"content":"{{ mcqQuestion }}"},{"lineNumber":417,"author":{"gitId":"-"},"content":"{{ checkboxQuestion }}"},{"lineNumber":418,"author":{"gitId":"-"},"content":"{{ blanksQuestion }}"},{"lineNumber":419,"author":{"gitId":"-"},"content":"{{ textQuestion }}"},{"lineNumber":420,"author":{"gitId":"-"},"content":"\u003c/quiz\u003e"},{"lineNumber":421,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":3,"-":418}},{"path":"docs/userGuide/syntax/searchBars.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Search Bars"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"The `searchbar` component allows users to search all headings within any page on the site."},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"body\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"outputBox.md\" boilerplate \u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search (Right-aligned dropdown)\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"```"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"To use the searchbar within a navbar, add the following markup to your file. The searchbar can be positioned using the slot attribute for the list. The following markup adds a searchbar to the right side of the navbar with appropriate styling."},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cli slot\u003d\"right\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/form\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/li\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":"```"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cvariable id\u003d\"output\"\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"Enter a search term (eg. \u0027search bar\u0027) to see the search result dropdown."},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search (Right-aligned dropdown)\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":37,"author":{"gitId":"-"},"content":"---- | ---- | ------- | ------"},{"lineNumber":38,"author":{"gitId":"yiwen101"},"content":"algolia | `Boolean` | `false` | Whether the searchbar should be connected to [Algolia DocSearch]({{ baseUrl }}/userGuide/usingPlugins.html#plugin-algolia)."},{"lineNumber":39,"author":{"gitId":"-"},"content":"data | `Array` || The local data source for suggestions. Expected to be a primitive array. To use MarkBind\u0027s search functionality, set this value to `\"searchData\"`."},{"lineNumber":40,"author":{"gitId":"-"},"content":"menu-align-right | `Boolean` | `false` | Whether the search bar\u0027s dropdown list will be right-aligned."},{"lineNumber":41,"author":{"gitId":"-"},"content":"on-hit | `Function` || A callback function when you click or hit return on an item. To use MarkBind\u0027s search functionality, set this value to `\"searchCallback\"`."},{"lineNumber":42,"author":{"gitId":"-"},"content":"placeholder | `String` | `\u0027\u0027` | The placeholder text shown when no keywords are entered in the search bar."},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"Note: If you are using MarkBind\u0027s search functionality, then `enableSearch` **must be set to `true` in `site.json`**."},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"yiwen101"},"content":"See: [User Guide: Site Configuration → enableSearch]({{ baseUrl }}/userGuide/siteJsonFile.html#enablesearch)."},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"%%{{ icon_info }} Related topic: [User Guide: Making the Site Searchable]({{ baseUrl }}/userGuide/makingTheSiteSearchable.html).%%"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"yiwen101"},"content":"%%{{ icon_info }} Related topic: [User Guide: Using Plugins → Algolia: Enabling Algolia DocSearch]({{ baseUrl }}/userGuide/usingPlugins.html#plugin-algolia).%%"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003c/div\u003e \u003c!-- end of body --\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"```"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003cli slot\u003d\"right\"\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u003c/form\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/li\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":"```"},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":73,"yiwen101":3}},{"path":"docs/userGuide/syntax/siteNavigationMenus.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Site Navigation Menus"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"content\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"**A _Site Navigation Menu_ (\u003d\u003d_siteNav_ for short\u003d\u003d) can be used to show a road map of the main pages of your site.**"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"Steps to add a siteNav:"},{"lineNumber":8,"author":{"gitId":"-"},"content":"1. Format your siteNav as an unordered Markdown list"},{"lineNumber":9,"author":{"gitId":"-"},"content":"2. Include it under a `\u003csite-nav\u003e` element."},{"lineNumber":10,"author":{"gitId":"-"},"content":"3. (Optional) To make siteNav accessible on smaller screens, you can use the `\u003csite-nav-button /\u003e` component in the [navbar]({{baseUrl}}/userGuide/components/navigation.html#navbars)."},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003csite-nav\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":"* [**Getting Started**]({{baseUrl}}/userGuide/gettingStarted.html)"},{"lineNumber":17,"author":{"gitId":"-"},"content":"* **Authoring Contents** :expanded:"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * [Overview]({{baseUrl}}/userGuide/authoringContents.html)"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * [Adding Pages]({{baseUrl}}/userGuide/addingPages.html)"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * [MarkBind Syntax Overview]({{baseUrl}}/userGuide/markBindSyntaxOverview.html)"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * [Formatting Contents]({{baseUrl}}/userGuide/formattingContents.html)"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * [Using Components]({{baseUrl}}/userGuide/usingComponents.html)"},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003c/site-nav\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"MarkBind has styles nested lists with additional padding and smaller text sizes up to **4** nesting levels."},{"lineNumber":29,"author":{"gitId":"-"},"content":"Beyond that, you\u0027d have to include your own styles."},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"****Expanding menu items by default****"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"You can **append the `:expanded:` to a \u003ctooltip content\u003d\"a menu item with sub menu-items\"\u003eparent menu item\u003c/tooltip\u003e to make it expand by default.** In the example above, `* Authoring Contents :expanded:` makes the menu item `Authoring Contents` expand by default."},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\"\u003e\u003c/div\u003e"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":"```html"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":"\u003csite-nav\u003e"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":"* [**Getting Started**]({{baseUrl}}/userGuide/gettingStarted.html)"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":"* **Authoring Contents** :expanded:"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" * [Overview]({{baseUrl}}/userGuide/authoringContents.html)"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" * [Adding Pages]({{baseUrl}}/userGuide/addingPages.html)"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" * [MarkBind Syntax Overview]({{baseUrl}}/userGuide/markBindSyntaxOverview.html)"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" * [Formatting Contents]({{baseUrl}}/userGuide/formattingContents.html)"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" * [Using Components]({{baseUrl}}/userGuide/usingComponents.html)"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":"\u003c/site-nav\u003e"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":"```"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":16,"-":37}},{"path":"docs/userGuide/syntax/tabs.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Tabs"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003ctabs\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"First tab\"\u003e"},{"lineNumber":8,"author":{"gitId":"yiwen101"},"content":" Text in the first tab"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":" \u003cmarkdown\u003e_some markdown_\u003c/markdown\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Disabled second tab :x:\" disabled\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Tab not printed\" class\u003d\"d-print-none\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" This tab will not be printed."},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003ctab-group header\u003d\"Third tab group :milky_way:\"\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Stars :star:\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Some stuff about stars ..."},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Disabled Moon :new_moon:\" disabled\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/tab-group\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003ctab-group header\u003d\"Disabled fourth tab group\" disabled\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Hidden tab\"\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ullamcorper ultrices lobortis."},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/tab-group\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003c/tabs\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"`tabs`:"},{"lineNumber":35,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":36,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":37,"author":{"gitId":"-"},"content":"active | `Number` | `0` | Active Tab index (0-based)"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"`tab`:"},{"lineNumber":40,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":41,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":42,"author":{"gitId":"-"},"content":"header | `String` | `null` | Tab title."},{"lineNumber":43,"author":{"gitId":"-"},"content":"disabled | `Boolean` | `false` | Whether Tab is clickable and can be activated."},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"`tab-group`:"},{"lineNumber":46,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":47,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":48,"author":{"gitId":"-"},"content":"header | `String` | `null` | Tab Group title."},{"lineNumber":49,"author":{"gitId":"-"},"content":"disabled | `Boolean` | `false` | Whether Tab Group is clickable and can be activated."},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":"Tabs, tab group and individual tab can be omitted during printing by adding Bootstrap\u0027s display property `class\u003d\"d-print-none\"` to the respective components."},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003ctabs\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"First tab\"\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":" Content of the first tab"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Second tab\"\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" Contents of the second tab"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003ctab-group header\u003d\"Third tab group :tv:\"\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Stars :star:\"\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" Some stuff about stars ..."},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Moon\"\u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":" Some stuff about the moon ..."},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003c/tab-group\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003c/tabs\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":"```"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":"\u003ctabs\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"First tab\"\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" Content of the first tab"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Second tab\"\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Contents of the second tab"},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003ctab-group header\u003d\"Third tab group :tv:\"\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Stars :star:\"\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Some stuff about stars ..."},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Moon\"\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":" Some stuff about the moon ..."},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003c/tab-group\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003c/tabs\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":94,"yiwen101":2}},{"path":"docs/userGuide/syntax/variables.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → Reusing Contents → Variables_]({{ baseUrl }}/userGuide/reusingContents.html#variables)\u003c/md\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Variables"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"**Nunjucks [variables](https://mozilla.github.io/nunjucks/templating.html#set) are ideal for reusing small bits of code** in multiple places; you can define a variable to represent the code bit in question and reuse it anywhere in the site by referring to the variable instead of duplicating the code bit."},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"MarkBind does not aim to alter the already robust variable features of Nunjucks, but provides several extensions to it."},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"### Global Variables"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"**Global variables are to be defined in the `_markbind/variables.md` file.** Each variable must have an `name` and the value can be any MarkBind-compliant code fragment. The `name` should not contain `-` and `.`. For example, `search-option` and `search.options` are not allowed."},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"The variables declared here are available from anywhere in the code base."},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"{{ icon_example }} Here\u0027s how you can define two variables `year` and `options`:"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"year\"\u003e2018\u003c/variable\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"options\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"* yes"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* no"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* maybe"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"```"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"To include a variable value in your code, give the variable id enclosed in Nunjucks\u0027 double curly braces syntax."},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"{{ icon_example }} `The year was {% raw %}{{ year }}{% endraw %}.` {{ icon_arrow_right }} The year was 2018."},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"Global variables (`_markbind/variables.md`) will take precedence over any variables set via Nunjucks\u0027 tags (e.g. `{% raw %}{% set %}{% endraw %}`)."},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#### Built-in Global Variables"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"MarkBind also provides a number of built-in variables."},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"Variable | Notes | {{ icon_example }} | Output"},{"lineNumber":53,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":54,"author":{"gitId":"-"},"content":"`baseUrl` | Represents the root directory of the site on the server, as configured in your [site configuration]({{baseUrl}}/userGuide/siteJsonFile.html#baseurl) file. \u003cbr\u003e Used for specifying [intra-site links](../formattingContents.html#intra-site-links). | If `baseUrl` is specified as `userGuide/`:\u003cbr\u003e\u003cbr\u003e `\u003cimg src\u003d\"{% raw %}{{baseUrl}}{% endraw %}/images/logo.png\" /\u003e` | `\u003cimg src\u003d\"userGuide/images/logo.png\" /\u003e`"},{"lineNumber":55,"author":{"gitId":"-"},"content":"`timestamp` | The time stamp that indicates when the page was generated. \u003cbr\u003e\u003cbr\u003e The [default]({{baseUrl}}/userGuide/siteJsonFile.html#timezone) values of `\"timeZone\"` and `\"locale\"` are `\"UTC\"` and `\"en-GB\"` respectively. | The following example showcases the use of the `\"Asia/Singapore\"` time zone.\u003cbr\u003e\u003cbr\u003e `Page generated at: {% raw %}{{timestamp}}{% endraw %}` | `Page generated at: {{ timestamp }}`"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`MarkBind` | The MarkBind version in use, linked to the MarkBind website. | `Page generated by: {% raw %}{{MarkBind}}{% endraw %}` | `Page generated by:` {{ MarkBind | safe }}"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"### Importing variables from other external file formats"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"You can also source variables from external files using MarkBind\u0027s {%raw%}`{% ext varName \u003d \"filepathToFile\" %}`{%endraw%} Nunjucks extension."},{"lineNumber":62,"author":{"gitId":"-"},"content":"This is useful if you have external datasets you want to display in your site!"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"To do so, assign a root variable name (`varName`) to the file path from the \u003ctooltip content\u003d\"similar to how you assign filepaths for other Nunjucks tags\"\u003eroot directory of the site\u003c/tooltip\u003e. You may then access the file\u0027s variables using dot `varName.xx` or array `varName[i]` syntax, depending on the file\u0027s contents."},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"\u003ctabs\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":"\u003ctab header\u003d\"Importing from JSON files\"\u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":"{{icon_example}}"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":"%%CODE:%%"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":79,"author":{"gitId":"-"},"content":"```html {heading\u003d\"Displaying a student scoreboard stored as JSON\"}"},{"lineNumber":80,"author":{"gitId":"-"},"content":"{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.json\" %}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":"Student Number | Score | Rank"},{"lineNumber":83,"author":{"gitId":"-"},"content":":----- | :-------: | ----"},{"lineNumber":84,"author":{"gitId":"-"},"content":"{% for student in studentScoreboard.students -%}"},{"lineNumber":85,"author":{"gitId":"-"},"content":"{{ student.number }} | {{ student.score }} | {{ student.rank }}"},{"lineNumber":86,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003csmall\u003eLast updated at {{ studentScoreboard.lastUpdated }}\u003c/small\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"```"},{"lineNumber":90,"author":{"gitId":"-"},"content":"{% endraw %}"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"minimal\" header\u003d\"JSON file used in example\"\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"```json {heading\u003d\"JSON File\"}"},{"lineNumber":95,"author":{"gitId":"-"},"content":"{% include \"userGuide/syntax/extra/scoreboard.json\" %}"},{"lineNumber":96,"author":{"gitId":"-"},"content":"```"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":"%%OUTPUT:%%"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"\u003cbox border-left-color\u003d\"grey\" background-color\u003d\"white\"\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.json\" %}"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"Student Number | Score | Rank"},{"lineNumber":111,"author":{"gitId":"-"},"content":":----- | :-------: | ----"},{"lineNumber":112,"author":{"gitId":"-"},"content":"{% for student in studentScoreboard.students -%}"},{"lineNumber":113,"author":{"gitId":"-"},"content":"{{ student.number }} | {{ student.score }} / 100 | {{ student.rank }}"},{"lineNumber":114,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003csmall\u003eLast updated at {{ studentScoreboard.lastUpdated }}\u003c/small\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003c/tab\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003ctab header\u003d\"Importing from CSV files\"\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"{{icon_example}}"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":"%%CODE:%%"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":130,"author":{"gitId":"-"},"content":"```html {heading\u003d\"Displaying a student scoreboard stored as CSV\"}"},{"lineNumber":131,"author":{"gitId":"-"},"content":"{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.csv\" %}"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":"Student Number | Score | Rank"},{"lineNumber":134,"author":{"gitId":"-"},"content":":----- | :-------: | ----"},{"lineNumber":135,"author":{"gitId":"-"},"content":"{% for student in studentScoreboard -%}"},{"lineNumber":136,"author":{"gitId":"-"},"content":"{{ student.number }} | {{ student.score }} | {{ student.rank }}"},{"lineNumber":137,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":138,"author":{"gitId":"-"},"content":"```"},{"lineNumber":139,"author":{"gitId":"-"},"content":"{% endraw %}"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"minimal\" header\u003d\"CSV file used in example\"\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":"```csv {heading\u003d\"CSV File\"}"},{"lineNumber":144,"author":{"gitId":"-"},"content":"{% include \"userGuide/syntax/extra/scoreboard.csv\" %}"},{"lineNumber":145,"author":{"gitId":"-"},"content":"```"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":"\u003cbox border-left-color\u003d\"{{ markbind_blue}}\"\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":"{{ icon_bulb_blue }} If you do not want to have a header row, you can specify it by appending a `noHeader` option at the end of the variable declaration. In this example, it should be {% raw %} `{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.csv\", noHeader %}` {% endraw %}. Elements have to be accessed using the `[]` operator (i.e. using `student[0]` to access student number instead of `student.number`)."},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":"%%OUTPUT:%%"},{"lineNumber":158,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003cbox border-left-color\u003d\"grey\" background-color\u003d\"white\"\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.csv\" %}"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"Student Number | Score | Rank"},{"lineNumber":165,"author":{"gitId":"-"},"content":":----- | :-------: | ----"},{"lineNumber":166,"author":{"gitId":"-"},"content":"{% for student in studentScoreboard -%}"},{"lineNumber":167,"author":{"gitId":"-"},"content":"{{ student.number }} | {{ student.score }} / 100 | {{ student.rank }}"},{"lineNumber":168,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003c/tab\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003c/tabs\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"Only `.json` and `.csv` files are supported for now."},{"lineNumber":179,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"jingting1412"},"content":"```markdown"},{"lineNumber":186,"author":{"gitId":"jingting1412"},"content":"Place global variables in `_markbind/variables.md`"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"year\"\u003e2018\u003c/variable\u003e"},{"lineNumber":188,"author":{"gitId":"jingting1412"},"content":"The year was {% raw %}{{ year }}{% endraw %}"},{"lineNumber":189,"author":{"gitId":"-"},"content":"```"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":3,"-":188}},{"path":"docs/userGuide/syntaxReference.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" title: \"User Guide: Syntax Reference\""},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" layout: userGuide.md"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" pageNav: 5"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"# Syntax Reference"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":"Expand the panels for detailed explanations of the feature or click on the link in the header to go to the corresponding page!"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":"{% macro show_topic(filename, heading, url) %}"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":"\u003cpanel type\u003d\"seamless\" no-close popup-url\u003d\"{{ url }}\"\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003cdiv slot\u003d\"header\"\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003cmarkdown\u003e##### **{{ heading }}**\u003c/markdown\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003cinclude src\u003d\"syntax/{{ filename }}.md#short\" /\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" \u003cinclude src\u003d\"syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"\u003c/panel\u003e"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":"{% endmacro %}"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":"{% for k,v in topics | dictsort %}"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" {% set url\u003d\"/userGuide/\" %}"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" {% if v[2] is iterable %}"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" {% if \u0027basic\u0027 in v[2] %}"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"formattingContents.html#\" + v[1] %}"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027presentation\u0027 in v[2] %}"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/presentation.html#\" + v[1] %}"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027images-diagrams\u0027 in v[2] %}"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/imagesAndDiagrams.html#\" + v[1] %}"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027popups\u0027 in v[2] %}"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/popups.html#\" + v[1] %}"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027navigation\u0027 in v[2] %}"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/navigation.html#\" + v[1] %}"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027others\u0027 in v[2] %}"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/others.html#\" + v[1] %}"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" {% else %}"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + v[2][0] + \".html#\" + v[1] %}"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" {% endif %}"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" {% else %}"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url %}"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" {% endif %}"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" {{ show_topic( k, v[0], url) }}"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":"{% endfor %}"}],"authorContributionMap":{"jingting1412":50}},{"path":"docs/userGuide/templates.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Templates\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"templates\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\" id\u003d\"overview\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"MarkBind allows you to start off your new project with different templates."},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"During initialization you can add a flag `--template \u003ctemplate-key\u003e` to select a different template to initialize with. For example:"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"```"},{"lineNumber":25,"author":{"gitId":"-"},"content":"markbind init --template minimal"},{"lineNumber":26,"author":{"gitId":"-"},"content":"```"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"## Supported Templates"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"Name | Template key | Description | Quick Deploy"},{"lineNumber":31,"author":{"gitId":"-"},"content":"---- | ------- | ----------- | ------------"},{"lineNumber":32,"author":{"gitId":"-"},"content":"Default | `default` | Default template if `--template` is unspecified. Includes core features such as site and page navigation for a more convenient quick start. | \u003ca href\u003d\"https://app.netlify.com/start/deploy?repository\u003dhttps://github.com/MarkBind/init-typical-netlify\"\u003e\u003cimg src\u003d\"https://www.netlify.com/img/deploy/button.svg\" /\u003e\u003c/a\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"Minimal | `minimal` | Minimalistic template that gets you started quickly. | \u003ca href\u003d\"https://app.netlify.com/start/deploy?repository\u003dhttps://github.com/MarkBind/init-minimal-netlify\"\u003e\u003cimg src\u003d\"https://www.netlify.com/img/deploy/button.svg\" /\u003e\u003c/a\u003e"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"Project | `project` | Project documentation template serves as a good starting point for project developers. This template includes both a user guide and a developer guide, with some formatted dummy content. | \u003ca href\u003d\"https://markbind-template-project.netlify.app/\"\u003e\u003cimg src\u003d\"https://www.netlify.com/img/deploy/button.svg\" /\u003e\u003c/a\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":37,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027addingNavigationButtons\u0027, \u0027\u0027) }}"}],"authorContributionMap":{"KevinEyo1":1,"-":36}},{"path":"docs/userGuide/troubleshooting.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Troubleshooting\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title | safe }}\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":7,"author":{"gitId":"-"},"content":" pageNav: 5"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"# {{ title | safe }}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"##### HTML Rendering Issues"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"Unexpected behavior can occur in rendered pages due to a number of different reasons. One of these reasons is when the rendered pages are not valid HTML."},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"Incorrect HTML markup can be due to:"},{"lineNumber":17,"author":{"gitId":"-"},"content":"- nesting block-level elements inside `\u003cp\u003e` or `\u003cspan\u003e` elements"},{"lineNumber":18,"author":{"gitId":"-"},"content":"- missing `\u003ctbody\u003e` tags"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"###### Example: block-level elements inside `\u003cspan\u003e` elements"},{"lineNumber":21,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"example\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"Animal | Trainable? | Price | Remarks"},{"lineNumber":26,"author":{"gitId":"-"},"content":":------|:----------:|------:|--------"},{"lineNumber":27,"author":{"gitId":"-"},"content":"Ants | no | 5 |"},{"lineNumber":28,"author":{"gitId":"-"},"content":"Bees | no | 20 |"},{"lineNumber":29,"author":{"gitId":"-"},"content":"Cats | yes | 100 |"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"```"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"yiwen101"},"content":"The table specified by the Markdown syntax above will be rendered as a block-level element, which will be included in a inline span element. This makes the HTML output invalid."},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Underlying Error (Example)\" type\u003d\"seamless\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"```"},{"lineNumber":38,"author":{"gitId":"-"},"content":"vue.js:634 [Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content."},{"lineNumber":39,"author":{"gitId":"-"},"content":"This is likely caused by incorrect HTML markup, for example nesting block-level elements inside `\u003cp\u003e`,"},{"lineNumber":40,"author":{"gitId":"-"},"content":"or missing `\u003ctbody\u003e`."},{"lineNumber":41,"author":{"gitId":"-"},"content":"Bailing hydration and performing full client-side render."},{"lineNumber":42,"author":{"gitId":"-"},"content":"```"},{"lineNumber":43,"author":{"gitId":"-"},"content":"See [SSR guide for Vue](https://vuejs.org/guide/scaling-up/ssr.html#hydration-mismatch) for more details on hydration mismatch."},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"A possible fix for the above situation is to wrap the table in a `\u003cdiv\u003e` element instead:"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"example\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"Animal | Trainable? | Price | Remarks"},{"lineNumber":53,"author":{"gitId":"-"},"content":":------|:----------:|------:|--------"},{"lineNumber":54,"author":{"gitId":"-"},"content":"Ants | no | 5 |"},{"lineNumber":55,"author":{"gitId":"-"},"content":"Bees | no | 20 |"},{"lineNumber":56,"author":{"gitId":"-"},"content":"Cats | yes | 100 |"},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":"```"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"yiwen101"},"content":"##### Markdown Rendering Issues"},{"lineNumber":61,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":62,"author":{"gitId":"yiwen101"},"content":"If you encounter issues in rendering Markdown in a component, it is likely that the Markdown is not being properly recognized due to syntax errors. Signposting is required to inform Markdown to parse the content of a presentation component as Markdown rather than plain text."},{"lineNumber":63,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":64,"author":{"gitId":"yiwen101"},"content":"You could signpost Markdown either by:"},{"lineNumber":65,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":66,"author":{"gitId":"yiwen101"},"content":"- using the `\u003cmarkdown\u003e`(block level elements) or `\u003cmd\u003e`(inline level elements) tags to wrap the Markdown content."},{"lineNumber":67,"author":{"gitId":"yiwen101"},"content":"- using an empty line without any indentation before the Markdown content"},{"lineNumber":68,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":69,"author":{"gitId":"yiwen101"},"content":"###### Example: correct Markdown rendering using tags or newline:"},{"lineNumber":70,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":71,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":72,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":73,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e"},{"lineNumber":74,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":75,"author":{"gitId":"yiwen101"},"content":"**Example1**"},{"lineNumber":76,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":77,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":78,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e "},{"lineNumber":79,"author":{"gitId":"yiwen101"},"content":"\u003cmd\u003e **Example2** \u003c/md\u003e "},{"lineNumber":80,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":81,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":82,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e "},{"lineNumber":83,"author":{"gitId":"yiwen101"},"content":"\u003cmarkdown\u003e **Example3** \u003c/markdown\u003e "},{"lineNumber":84,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":85,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":86,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":87,"author":{"gitId":"yiwen101"},"content":"\u003c/variable\u003e"},{"lineNumber":88,"author":{"gitId":"yiwen101"},"content":"\u003c/include\u003e"},{"lineNumber":89,"author":{"gitId":"yiwen101"},"content":"\u003cpanel header\u003d\"###### Example: Markdown not rendered without singposting\" type\u003d\"seamless\"\u003e"},{"lineNumber":90,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":91,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":92,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":93,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e **This will be rendered as plain text**\u003c/box\u003e"},{"lineNumber":94,"author":{"gitId":"yiwen101"},"content":"\u003c/variable\u003e"},{"lineNumber":95,"author":{"gitId":"yiwen101"},"content":"\u003c/include\u003e"},{"lineNumber":96,"author":{"gitId":"yiwen101"},"content":"\u003c/panel\u003e"}],"authorContributionMap":{"-":58,"yiwen101":38}},{"path":"docs/userGuide/usingComponents.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Using Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"usingComponents\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"# Using Components"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"**MarkBind provides a number of components** (e.g., expandable panels, tabbed displays, navigation bars, etc.) that you can use to enhance the appearance/behavior of your pages."},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"To use a component, just use the corresponding markup in your file. For example, to create a Panel, you just need to use the markup:"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Click to expand\" type\u003d\"seamless\"\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" Panel Content."},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"```"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"./syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" {% if \u0027component\u0027 in v[2] %}"},{"lineNumber":39,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":40,"author":{"gitId":"-"},"content":" {% endif %}"},{"lineNumber":41,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":46,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027formattingContents\u0027, \u0027components/presentation\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":44}},{"path":"package.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"name\": \"root\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"private\": true,"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"workspaces\": [\"packages/*\"],"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"scripts\": {"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"prebuild:backend\": \"npm run clean\","},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"build:backend\": \"tsc --noEmitOnError\","},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"build:web\": \"cd packages/core-web \u0026\u0026 npm run build\","},{"lineNumber":9,"author":{"gitId":"-"},"content":" \"build:dg\": \"cd docs \u0026\u0026 ../packages/cli/index.js build -s dg-site.json\","},{"lineNumber":10,"author":{"gitId":"-"},"content":" \"build:ug\": \"cd docs \u0026\u0026 ../packages/cli/index.js build -s ug-site.json\","},{"lineNumber":11,"author":{"gitId":"-"},"content":" \"build:docs\": \"cd docs \u0026\u0026 node ../packages/cli/index.js build --baseUrl\","},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"deploy:dg\": \"cd docs \u0026\u0026 ../packages/cli/index.js deploy -s dg-site.json --ci\","},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"deploy:ug\": \"cd docs \u0026\u0026 ../packages/cli/index.js deploy -s ug-site.json --ci\","},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"deploy:netlify\": \"npm run setup \u0026\u0026 npm run build:web \u0026\u0026 cd docs \u0026\u0026 node ../packages/cli/index.js build --baseUrl\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"clean\": \"node ./scripts/clean.js\","},{"lineNumber":16,"author":{"gitId":"-"},"content":" \"csslint\": \"stylelint **/*.css **/*.vue\","},{"lineNumber":17,"author":{"gitId":"-"},"content":" \"csslintfix\": \"stylelint **/*.css **/*.vue --fix\","},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"dev\": \"tsc --watch\","},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"lint\": \"eslint . --ext .js,.ts,.vue \u0026\u0026 npm run csslint\","},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"lintfix\": \"eslint . --ext .js,.ts,.vue --fix \u0026\u0026 npm run csslintfix\","},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"setup\": \"npm ci \u0026\u0026 npm run clean \u0026\u0026 lerna run prepare\","},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"test\": \"npm run lint \u0026\u0026 lerna run test --stream --parallel\","},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"updatetest\": \"lerna run updatetest --stream --parallel\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" },"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"devDependencies\": {"},{"lineNumber":26,"author":{"gitId":"LamJiuFong"},"content":" \"@stylistic/stylelint-plugin\": \"^2.1.0\","},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"@types/node\": \"^18.15.0\","},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"@typescript-eslint/eslint-plugin\": \"^5.16.0\","},{"lineNumber":29,"author":{"gitId":"-"},"content":" \"@typescript-eslint/parser\": \"^5.16.0\","},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"eslint\": \"^7.32.0\","},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"eslint-config-airbnb-base\": \"^15.0.0\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"eslint-config-airbnb-typescript\": \"^16.1.4\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"eslint-plugin-import\": \"^2.25.2\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"eslint-plugin-lodash\": \"^7.2.0\","},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"lerna\": \"^6.5.1\","},{"lineNumber":36,"author":{"gitId":"LamJiuFong"},"content":" \"stylelint\": \"^16.2.1\","},{"lineNumber":37,"author":{"gitId":"LamJiuFong"},"content":" \"stylelint-config-recommended-vue\": \"^1.5.0\","},{"lineNumber":38,"author":{"gitId":"LamJiuFong"},"content":" \"stylelint-config-standard\": \"^36.0.0\","},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"typescript\": \"^4.6.2\","},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"walk-sync\": \"^2.0.2\""},{"lineNumber":41,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":42,"author":{"gitId":"LamJiuFong"},"content":" \"dependencies\": {"},{"lineNumber":43,"author":{"gitId":"LamJiuFong"},"content":" \"postcss\": \"^8.4.35\""},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":7,"-":38}},{"path":"packages/cli/index.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env node"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"// Entry file for MarkBind project"},{"lineNumber":4,"author":{"gitId":"-"},"content":"const program \u003d require(\u0027commander\u0027);"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"const logger \u003d require(\u0027./src/util/logger\u0027);"},{"lineNumber":7,"author":{"gitId":"-"},"content":"const { build } \u003d require(\u0027./src/cmd/build\u0027);"},{"lineNumber":8,"author":{"gitId":"-"},"content":"const { deploy } \u003d require(\u0027./src/cmd/deploy\u0027);"},{"lineNumber":9,"author":{"gitId":"-"},"content":"const { init } \u003d require(\u0027./src/cmd/init\u0027);"},{"lineNumber":10,"author":{"gitId":"-"},"content":"const { serve } \u003d require(\u0027./src/cmd/serve\u0027);"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"const CLI_VERSION \u003d require(\u0027./package.json\u0027).version;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"process.title \u003d \u0027MarkBind\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"process.stdout.write("},{"lineNumber":16,"author":{"gitId":"-"},"content":" `${String.fromCharCode(27)}]0; MarkBind${String.fromCharCode(7)}`,"},{"lineNumber":17,"author":{"gitId":"-"},"content":");"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"function printHeader() {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" logger.logo();"},{"lineNumber":21,"author":{"gitId":"-"},"content":" logger.log(` v${CLI_VERSION}`);"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"program"},{"lineNumber":25,"author":{"gitId":"-"},"content":" .addHelpText(\u0027beforeAll\u0027, printHeader())"},{"lineNumber":26,"author":{"gitId":"-"},"content":" .showHelpAfterError(\u0027(run \"markbind --help\" to list commands)\u0027);"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"program"},{"lineNumber":29,"author":{"gitId":"-"},"content":" .allowUnknownOption()"},{"lineNumber":30,"author":{"gitId":"-"},"content":" .usage(\u0027\u003ccommand\u003e\u0027);"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"program"},{"lineNumber":33,"author":{"gitId":"-"},"content":" .name(\u0027markbind\u0027)"},{"lineNumber":34,"author":{"gitId":"-"},"content":" .version(CLI_VERSION);"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"program"},{"lineNumber":37,"author":{"gitId":"-"},"content":" .command(\u0027init [root]\u0027)"},{"lineNumber":38,"author":{"gitId":"-"},"content":" .option(\u0027-c, --convert\u0027, \u0027convert a GitHub wiki or docs folder to a MarkBind website\u0027)"},{"lineNumber":39,"author":{"gitId":"-"},"content":" .option(\u0027-t, --template \u003ctype\u003e\u0027, \u0027initialise markbind with a specified template\u0027, \u0027default\u0027)"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .alias(\u0027i\u0027)"},{"lineNumber":41,"author":{"gitId":"-"},"content":" .description(\u0027init a markbind website project\u0027)"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .action((root, options) \u003d\u003e {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" init(root, options);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" });"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"program"},{"lineNumber":47,"author":{"gitId":"-"},"content":" .command(\u0027serve [root]\u0027)"},{"lineNumber":48,"author":{"gitId":"-"},"content":" .alias(\u0027s\u0027)"},{"lineNumber":49,"author":{"gitId":"-"},"content":" .option(\u0027-f, --force-reload\u0027, \u0027force a full reload of all site files when a file is changed\u0027)"},{"lineNumber":50,"author":{"gitId":"-"},"content":" .option(\u0027-n, --no-open\u0027, \u0027do not automatically open the site in browser\u0027)"},{"lineNumber":51,"author":{"gitId":"-"},"content":" .option(\u0027-o, --one-page [file]\u0027, \u0027build and serve only a single page in the site initially,\u0027"},{"lineNumber":52,"author":{"gitId":"-"},"content":" + \u0027building more pages when they are navigated to. Also lazily rebuilds only the page being viewed when\u0027"},{"lineNumber":53,"author":{"gitId":"-"},"content":" + \u0027there are changes to the source files (if needed), building others when navigated to\u0027)"},{"lineNumber":54,"author":{"gitId":"-"},"content":" .option(\u0027-b, --background-build\u0027, \u0027when --one-page is specified, enhances one-page serve by building\u0027"},{"lineNumber":55,"author":{"gitId":"-"},"content":" + \u0027remaining pages in the background\u0027)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" .option(\u0027-p, --port \u003cport\u003e\u0027, \u0027port for server to listen on (Default is 8080)\u0027)"},{"lineNumber":57,"author":{"gitId":"-"},"content":" .option(\u0027-s, --site-config \u003cfile\u003e\u0027, \u0027specify the site config file (default: site.json)\u0027)"},{"lineNumber":58,"author":{"gitId":"-"},"content":" .option(\u0027-d, --dev\u0027, \u0027development mode, enabling live \u0026 hot reload for frontend source files.\u0027)"},{"lineNumber":59,"author":{"gitId":"LamJiuFong"},"content":" .option(\u0027-a, --address \u003caddress\u003e\u0027, \u0027specify the server address/host (Default is 127.0.0.1)\u0027)"},{"lineNumber":60,"author":{"gitId":"-"},"content":" .description(\u0027build then serve a website from a directory\u0027)"},{"lineNumber":61,"author":{"gitId":"-"},"content":" .action((userSpecifiedRoot, options) \u003d\u003e {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" serve(userSpecifiedRoot, options);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" });"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":"program"},{"lineNumber":66,"author":{"gitId":"-"},"content":" .command(\u0027build [root] [output]\u0027)"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .alias(\u0027b\u0027)"},{"lineNumber":68,"author":{"gitId":"-"},"content":" .option(\u0027--baseUrl [baseUrl]\u0027,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u0027optional flag which overrides baseUrl in site.json, leave argument empty for empty baseUrl\u0027)"},{"lineNumber":70,"author":{"gitId":"-"},"content":" .option(\u0027-s, --site-config \u003cfile\u003e\u0027, \u0027specify the site config file (default: site.json)\u0027)"},{"lineNumber":71,"author":{"gitId":"-"},"content":" .description(\u0027build a website\u0027)"},{"lineNumber":72,"author":{"gitId":"-"},"content":" .action((userSpecifiedRoot, output, options) \u003d\u003e {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" build(userSpecifiedRoot, output, options);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" });"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"program"},{"lineNumber":77,"author":{"gitId":"-"},"content":" .command(\u0027deploy [root]\u0027)"},{"lineNumber":78,"author":{"gitId":"-"},"content":" .alias(\u0027d\u0027)"},{"lineNumber":79,"author":{"gitId":"-"},"content":" .option(\u0027-c, --ci [githubTokenName]\u0027, \u0027deploy the site in CI Environment [GITHUB_TOKEN]\u0027)"},{"lineNumber":80,"author":{"gitId":"-"},"content":" .option(\u0027-n, --no-build\u0027, \u0027do not automatically build the site before deployment\u0027)"},{"lineNumber":81,"author":{"gitId":"-"},"content":" .option(\u0027-s, --site-config \u003cfile\u003e\u0027, \u0027specify the site config file (default: site.json)\u0027)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" .description(\u0027deploy the latest build of the site to the repo\\\u0027s Github pages\u0027)"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .action((userSpecifiedRoot, options) \u003d\u003e {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" deploy(userSpecifiedRoot, options);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" });"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"program.parse(process.argv);"}],"authorContributionMap":{"LamJiuFong":1,"-":86}},{"path":"packages/cli/src/cmd/serve.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"const chokidar \u003d require(\u0027chokidar\u0027);"},{"lineNumber":2,"author":{"gitId":"-"},"content":"const path \u003d require(\u0027path\u0027);"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":"const readline \u003d require(\u0027readline\u0027);"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"const { Site } \u003d require(\u0027@markbind/core\u0027);"},{"lineNumber":6,"author":{"gitId":"-"},"content":"const { pageVueServerRenderer } \u003d require(\u0027@markbind/core/src/Page/PageVueServerRenderer\u0027);"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"const fsUtil \u003d require(\u0027@markbind/core/src/utils/fsUtil\u0027);"},{"lineNumber":9,"author":{"gitId":"-"},"content":"const { INDEX_MARKDOWN_FILE } \u003d require(\u0027@markbind/core/src/Site/constants\u0027);"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"const cliUtil \u003d require(\u0027../util/cliUtil\u0027);"},{"lineNumber":12,"author":{"gitId":"-"},"content":"const liveServer \u003d require(\u0027../lib/live-server\u0027);"},{"lineNumber":13,"author":{"gitId":"-"},"content":"const logger \u003d require(\u0027../util/logger\u0027);"},{"lineNumber":14,"author":{"gitId":"-"},"content":"const {"},{"lineNumber":15,"author":{"gitId":"-"},"content":" addHandler,"},{"lineNumber":16,"author":{"gitId":"-"},"content":" changeHandler,"},{"lineNumber":17,"author":{"gitId":"-"},"content":" lazyReloadMiddleware,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" removeHandler,"},{"lineNumber":19,"author":{"gitId":"-"},"content":"} \u003d require(\u0027../util/serveUtil\u0027);"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"LamJiuFong"},"content":"function isIPAddressZero(address) {"},{"lineNumber":22,"author":{"gitId":"LamJiuFong"},"content":" const patternForZero \u003d /^0(\\.0)*$/;"},{"lineNumber":23,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":24,"author":{"gitId":"LamJiuFong"},"content":" return patternForZero.test(address);"},{"lineNumber":25,"author":{"gitId":"LamJiuFong"},"content":"}"},{"lineNumber":26,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":27,"author":{"gitId":"LamJiuFong"},"content":"function questionAsync(question) {"},{"lineNumber":28,"author":{"gitId":"LamJiuFong"},"content":" const readlineInterface \u003d readline.createInterface({ input: process.stdin, output: process.stdout });"},{"lineNumber":29,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":30,"author":{"gitId":"LamJiuFong"},"content":" return new Promise((resolve) \u003d\u003e {"},{"lineNumber":31,"author":{"gitId":"LamJiuFong"},"content":" readlineInterface.question(question, (response) \u003d\u003e {"},{"lineNumber":32,"author":{"gitId":"LamJiuFong"},"content":" readlineInterface.close();"},{"lineNumber":33,"author":{"gitId":"LamJiuFong"},"content":" resolve(response);"},{"lineNumber":34,"author":{"gitId":"LamJiuFong"},"content":" });"},{"lineNumber":35,"author":{"gitId":"LamJiuFong"},"content":" });"},{"lineNumber":36,"author":{"gitId":"LamJiuFong"},"content":"}"},{"lineNumber":37,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"function serve(userSpecifiedRoot, options) {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" if (options.dev) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" logger.useDebugConsole();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" let rootFolder;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" rootFolder \u003d cliUtil.findRootFolder(userSpecifiedRoot, options.siteConfig);"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" if (options.forceReload \u0026\u0026 options.onePage) {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" logger.error(\u0027Oops! You shouldn\\\u0027t need to use the --force-reload option with --one-page.\u0027);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" process.exitCode \u003d 1;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" process.exit();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":" } catch (error) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" logger.error(error.message);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" process.exitCode \u003d 1;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" const logsFolder \u003d path.join(rootFolder, \u0027_markbind/logs\u0027);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" const outputFolder \u003d path.join(rootFolder, \u0027_site\u0027);"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" const presentDefaultFile \u003d fsUtil.fileExists(INDEX_MARKDOWN_FILE) ? INDEX_MARKDOWN_FILE : false;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" if (options.onePage \u003d\u003d\u003d true \u0026\u0026 !presentDefaultFile) {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" logger.error(\u0027Oops! It seems that you didn\\\u0027t have the default file index.md.\u0027);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" process.exitCode \u003d 1;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" process.exit();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":" let onePagePath \u003d options.onePage \u003d\u003d\u003d true ? presentDefaultFile : options.onePage;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" onePagePath \u003d onePagePath ? fsUtil.ensurePosix(onePagePath) : onePagePath;"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" const reloadAfterBackgroundBuild \u003d () \u003d\u003e {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" logger.info(\u0027All opened pages will be reloaded.\u0027);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" liveServer.reloadActiveTabs();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" };"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" const site \u003d new Site(rootFolder, outputFolder, onePagePath,"},{"lineNumber":75,"author":{"gitId":"-"},"content":" options.forceReload, options.siteConfig, options.dev,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" options.backgroundBuild, reloadAfterBackgroundBuild);"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" // server config"},{"lineNumber":79,"author":{"gitId":"-"},"content":" const serverConfig \u003d {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" open: options.open,"},{"lineNumber":81,"author":{"gitId":"-"},"content":" logLevel: 0,"},{"lineNumber":82,"author":{"gitId":"-"},"content":" root: outputFolder,"},{"lineNumber":83,"author":{"gitId":"-"},"content":" port: options.port || 8080,"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" host: options.address || \u0027127.0.0.1\u0027,"},{"lineNumber":85,"author":{"gitId":"-"},"content":" middleware: [],"},{"lineNumber":86,"author":{"gitId":"-"},"content":" mount: [],"},{"lineNumber":87,"author":{"gitId":"-"},"content":" };"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" site"},{"lineNumber":90,"author":{"gitId":"-"},"content":" .readSiteConfig()"},{"lineNumber":91,"author":{"gitId":"-"},"content":" .then(async (config) \u003d\u003e {"},{"lineNumber":92,"author":{"gitId":"LamJiuFong"},"content":" if (isIPAddressZero(serverConfig.host)) {"},{"lineNumber":93,"author":{"gitId":"LamJiuFong"},"content":" const response \u003d await questionAsync("},{"lineNumber":94,"author":{"gitId":"LamJiuFong"},"content":" \u0027WARNING: Using the address \\\u00270.0.0.0\\\u0027 could potentially expose your server to the internet, \u0027"},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":" + \u0027which may pose security risks. \\n\u0027"},{"lineNumber":96,"author":{"gitId":"LamJiuFong"},"content":" + \u0027Proceed with caution? [y/N] \u0027);"},{"lineNumber":97,"author":{"gitId":"LamJiuFong"},"content":" if (response.toLowerCase() \u003d\u003d\u003d \u0027y\u0027) {"},{"lineNumber":98,"author":{"gitId":"LamJiuFong"},"content":" logger.info(\u0027Proceeding to generate website\u0027);"},{"lineNumber":99,"author":{"gitId":"LamJiuFong"},"content":" } else {"},{"lineNumber":100,"author":{"gitId":"LamJiuFong"},"content":" logger.info(\u0027Website generation is cancelled.\u0027);"},{"lineNumber":101,"author":{"gitId":"LamJiuFong"},"content":" process.exit();"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":" }"},{"lineNumber":103,"author":{"gitId":"LamJiuFong"},"content":" }"},{"lineNumber":104,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" serverConfig.mount.push([config.baseUrl || \u0027/\u0027, outputFolder]);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" if (options.dev) {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" // eslint-disable-next-line global-require"},{"lineNumber":109,"author":{"gitId":"-"},"content":" const webpackDevConfig \u003d require(\u0027@markbind/core-web/webpack.dev\u0027);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" await webpackDevConfig.serverEntry(pageVueServerRenderer.updateMarkBindVueBundle, rootFolder);"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" const getMiddlewares \u003d webpackDevConfig.clientEntry;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" getMiddlewares(`${config.baseUrl}/markbind`)"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .forEach(middleware \u003d\u003e serverConfig.middleware.push(middleware));"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" if (onePagePath) {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" const onePageHtmlUrl \u003d `${config.baseUrl}/${onePagePath.replace(/\\.md$/, \u0027.html\u0027)}`;"},{"lineNumber":119,"author":{"gitId":"-"},"content":" serverConfig.open \u003d serverConfig.open \u0026\u0026 onePageHtmlUrl;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" serverConfig.middleware.push(lazyReloadMiddleware(site, rootFolder, config));"},{"lineNumber":121,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" serverConfig.open \u003d serverConfig.open \u0026\u0026 `${config.baseUrl}/`;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" return site.generate();"},{"lineNumber":126,"author":{"gitId":"-"},"content":" })"},{"lineNumber":127,"author":{"gitId":"-"},"content":" .then(() \u003d\u003e {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" const watcher \u003d chokidar.watch(rootFolder, {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" ignored: ["},{"lineNumber":130,"author":{"gitId":"-"},"content":" logsFolder,"},{"lineNumber":131,"author":{"gitId":"-"},"content":" outputFolder,"},{"lineNumber":132,"author":{"gitId":"-"},"content":" /(^|[/\\\\])\\../,"},{"lineNumber":133,"author":{"gitId":"-"},"content":" x \u003d\u003e x.endsWith(\u0027___jb_tmp___\u0027), x \u003d\u003e x.endsWith(\u0027___jb_old___\u0027), // IDE temp files"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":135,"author":{"gitId":"-"},"content":" ignoreInitial: true,"},{"lineNumber":136,"author":{"gitId":"-"},"content":" });"},{"lineNumber":137,"author":{"gitId":"-"},"content":" watcher"},{"lineNumber":138,"author":{"gitId":"-"},"content":" .on(\u0027add\u0027, addHandler(site, onePagePath))"},{"lineNumber":139,"author":{"gitId":"-"},"content":" .on(\u0027change\u0027, changeHandler(site, onePagePath))"},{"lineNumber":140,"author":{"gitId":"-"},"content":" .on(\u0027unlink\u0027, removeHandler(site, onePagePath));"},{"lineNumber":141,"author":{"gitId":"-"},"content":" })"},{"lineNumber":142,"author":{"gitId":"-"},"content":" .then(() \u003d\u003e {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" const server \u003d liveServer.start(serverConfig);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" server.addListener(\u0027listening\u0027, () \u003d\u003e {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" const address \u003d server.address();"},{"lineNumber":146,"author":{"gitId":"LamJiuFong"},"content":" const serveHost \u003d address.address;"},{"lineNumber":147,"author":{"gitId":"LamJiuFong"},"content":" const servePort \u003d address.port;"},{"lineNumber":148,"author":{"gitId":"LamJiuFong"},"content":" const serveURL \u003d `http://${serveHost}:${servePort}`;"},{"lineNumber":149,"author":{"gitId":"-"},"content":" logger.info(`Serving \"${outputFolder}\" at ${serveURL}`);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" logger.info(\u0027Press CTRL+C to stop ...\u0027);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" });"},{"lineNumber":152,"author":{"gitId":"-"},"content":" })"},{"lineNumber":153,"author":{"gitId":"-"},"content":" .catch((error) \u003d\u003e {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" logger.error(error.message);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" process.exitCode \u003d 1;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" });"},{"lineNumber":157,"author":{"gitId":"-"},"content":"}"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"module.exports \u003d {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" serve,"},{"lineNumber":161,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"LamJiuFong":35,"-":126}},{"path":"packages/cli/src/lib/live-server/index.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env node"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"/*"},{"lineNumber":4,"author":{"gitId":"-"},"content":" * Patch for live-server to expose websocket clients for external use in order to keep track"},{"lineNumber":5,"author":{"gitId":"-"},"content":" * of opened tabs."},{"lineNumber":6,"author":{"gitId":"-"},"content":" *"},{"lineNumber":7,"author":{"gitId":"-"},"content":" * live-server locally keeps track of opened client websockets in order for it to be able"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * to perform live reload whenever there are changes in the watched directory. However, the"},{"lineNumber":9,"author":{"gitId":"-"},"content":" * clients list is stored internally."},{"lineNumber":10,"author":{"gitId":"-"},"content":" *"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * This patch allows us to gain access to the information that can be gathered with the client"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * websockets, which in turn enables the support for multiple-tab development."},{"lineNumber":13,"author":{"gitId":"-"},"content":" *"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Patch is written against live-server v1.2.1"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * The **only** changes are prefaced with a CHANGED comment"},{"lineNumber":16,"author":{"gitId":"-"},"content":" */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"var fs \u003d require(\u0027fs\u0027),"},{"lineNumber":19,"author":{"gitId":"-"},"content":" connect \u003d require(\u0027connect\u0027),"},{"lineNumber":20,"author":{"gitId":"-"},"content":" serveIndex \u003d require(\u0027serve-index\u0027),"},{"lineNumber":21,"author":{"gitId":"-"},"content":" logger \u003d require(\u0027morgan\u0027),"},{"lineNumber":22,"author":{"gitId":"-"},"content":" WebSocket \u003d require(\u0027faye-websocket\u0027),"},{"lineNumber":23,"author":{"gitId":"-"},"content":" path \u003d require(\u0027path\u0027),"},{"lineNumber":24,"author":{"gitId":"-"},"content":" parse \u003d require(\u0027url-parse\u0027),"},{"lineNumber":25,"author":{"gitId":"-"},"content":" http \u003d require(\u0027http\u0027),"},{"lineNumber":26,"author":{"gitId":"-"},"content":" send \u003d require(\u0027send\u0027),"},{"lineNumber":27,"author":{"gitId":"-"},"content":" open \u003d require(\u0027opn\u0027),"},{"lineNumber":28,"author":{"gitId":"-"},"content":" es \u003d require(\"event-stream\"),"},{"lineNumber":29,"author":{"gitId":"-"},"content":" os \u003d require(\u0027os\u0027),"},{"lineNumber":30,"author":{"gitId":"-"},"content":" chokidar \u003d require(\u0027chokidar\u0027),"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // CHANGED: added MarkBind\u0027s core fsUtil package"},{"lineNumber":32,"author":{"gitId":"-"},"content":" fsUtil \u003d require(\u0027@markbind/core/src/utils/fsUtil\u0027);"},{"lineNumber":33,"author":{"gitId":"-"},"content":"require(\u0027colors\u0027);"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"// CHANGED: added absolute path that directs to the live-server directory"},{"lineNumber":36,"author":{"gitId":"-"},"content":"const pathToLiveServerDir \u003d path.dirname(require.resolve(\u0027live-server\u0027));"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"// CHANGED: correctly resolve to the live-server directory"},{"lineNumber":39,"author":{"gitId":"-"},"content":"var INJECTED_CODE \u003d fs.readFileSync(path.join(pathToLiveServerDir, \"injected.html\"), \"utf8\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"var LiveServer \u003d {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" server: null,"},{"lineNumber":43,"author":{"gitId":"-"},"content":" watcher: null,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" logLevel: 2,"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" // CHANGED: added properties relevant to MarkBind live-preview"},{"lineNumber":47,"author":{"gitId":"-"},"content":" activeTabs: [],"},{"lineNumber":48,"author":{"gitId":"-"},"content":" baseUrl: \u0027\u0027,"},{"lineNumber":49,"author":{"gitId":"-"},"content":"};"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"function escape(html){"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return String(html)"},{"lineNumber":53,"author":{"gitId":"-"},"content":" .replace(/\u0026(?!\\w+;)/g, \u0027\u0026amp;\u0027)"},{"lineNumber":54,"author":{"gitId":"-"},"content":" .replace(/\u003c/g, \u0027\u0026lt;\u0027)"},{"lineNumber":55,"author":{"gitId":"-"},"content":" .replace(/\u003e/g, \u0027\u0026gt;\u0027)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" .replace(/\"/g, \u0027\u0026quot;\u0027);"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"// Based on connect.static(), but streamlined and with added code injecter"},{"lineNumber":60,"author":{"gitId":"-"},"content":"function staticServer(root) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" var isFile \u003d false;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" try { // For supporting mounting files instead of just directories"},{"lineNumber":63,"author":{"gitId":"-"},"content":" isFile \u003d fs.statSync(root).isFile();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" } catch (e) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" if (e.code !\u003d\u003d \"ENOENT\") throw e;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return function(req, res, next) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" if (req.method !\u003d\u003d \u0027GET\u0027 \u0026\u0026 req.method !\u003d\u003d \u0027HEAD\u0027) return next();"},{"lineNumber":69,"author":{"gitId":"-"},"content":" const reqpath \u003d isFile ? \"\" : parse(req.url).pathname;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" var hasNoOrigin \u003d !req.headers.origin;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" var injectCandidates \u003d [ new RegExp(\"\u003c/body\u003e\", \"i\"), new RegExp(\"\u003c/svg\u003e\"), new RegExp(\"\u003c/head\u003e\", \"i\")];"},{"lineNumber":72,"author":{"gitId":"-"},"content":" var injectTag \u003d null;"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" function directory() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" var pathname \u003d parse(req.url).pathname;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" res.statusCode \u003d 301;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" res.setHeader(\u0027Location\u0027, pathname + \u0027/\u0027);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" res.end(\u0027Redirecting to \u0027 + escape(pathname) + \u0027/\u0027);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" function file(filepath /*, stat*/) {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" var x \u003d path.extname(filepath).toLocaleLowerCase(), match,"},{"lineNumber":83,"author":{"gitId":"-"},"content":" possibleExtensions \u003d [ \"\", \".html\", \".htm\", \".xhtml\", \".php\", \".svg\" ];"},{"lineNumber":84,"author":{"gitId":"-"},"content":" if (hasNoOrigin \u0026\u0026 (possibleExtensions.indexOf(x) \u003e -1)) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" // TODO: Sync file read here is not nice, but we need to determine if the html should be injected or not"},{"lineNumber":86,"author":{"gitId":"-"},"content":" var contents \u003d fs.readFileSync(filepath, \"utf8\");"},{"lineNumber":87,"author":{"gitId":"-"},"content":" for (var i \u003d 0; i \u003c injectCandidates.length; ++i) {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" match \u003d injectCandidates[i].exec(contents);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (match) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" injectTag \u003d match[0];"},{"lineNumber":91,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" if (injectTag \u003d\u003d\u003d null \u0026\u0026 LiveServer.logLevel \u003e\u003d 3) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" console.warn(\"Failed to inject refresh script!\".yellow,"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \"Couldn\u0027t find any of the tags \", injectCandidates, \"from\", filepath);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" function error(err) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (err.status \u003d\u003d\u003d 404) return next();"},{"lineNumber":104,"author":{"gitId":"-"},"content":" next(err);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" function inject(stream) {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" if (injectTag) {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" // We need to modify the length given to browser"},{"lineNumber":110,"author":{"gitId":"-"},"content":" var len \u003d INJECTED_CODE.length + res.getHeader(\u0027Content-Length\u0027);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" res.setHeader(\u0027Content-Length\u0027, len);"},{"lineNumber":112,"author":{"gitId":"-"},"content":" var originalPipe \u003d stream.pipe;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" stream.pipe \u003d function(resp) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" originalPipe.call(stream, es.replace(new RegExp(injectTag, \"i\"), INJECTED_CODE + injectTag)).pipe(resp);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" };"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" send(req, reqpath, { root: root })"},{"lineNumber":120,"author":{"gitId":"-"},"content":" .on(\u0027error\u0027, error)"},{"lineNumber":121,"author":{"gitId":"-"},"content":" .on(\u0027directory\u0027, directory)"},{"lineNumber":122,"author":{"gitId":"-"},"content":" .on(\u0027file\u0027, file)"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .on(\u0027stream\u0027, inject)"},{"lineNumber":124,"author":{"gitId":"-"},"content":" .pipe(res);"},{"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":" * Rewrite request URL and pass it back to the static handler."},{"lineNumber":130,"author":{"gitId":"-"},"content":" * @param staticHandler {function} Next handler"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * @param file {string} Path to the entry point file"},{"lineNumber":132,"author":{"gitId":"-"},"content":" */"},{"lineNumber":133,"author":{"gitId":"-"},"content":"function entryPoint(staticHandler, file) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" if (!file) return function(req, res, next) { next(); };"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" return function(req, res, next) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" req.url \u003d \"/\" + file;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" staticHandler(req, res, next);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" };"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * Start a live server with parameters given as an object"},{"lineNumber":144,"author":{"gitId":"LamJiuFong"},"content":" * @param host {string} Address to bind to (default: 127.0.0.1)"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * @param port {number} Port number (default: 8080)"},{"lineNumber":146,"author":{"gitId":"-"},"content":" * @param root {string} Path to root directory (default: cwd)"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * @param watch {array} Paths to exclusively watch for changes"},{"lineNumber":148,"author":{"gitId":"-"},"content":" * @param ignore {array} Paths to ignore when watching files for changes"},{"lineNumber":149,"author":{"gitId":"-"},"content":" * @param ignorePattern {regexp} Ignore files by RegExp"},{"lineNumber":150,"author":{"gitId":"-"},"content":" * @param noCssInject Don\u0027t inject CSS changes, just reload as with any other file change"},{"lineNumber":151,"author":{"gitId":"-"},"content":" * @param open {(string|string[])} Subpath(s) to open in browser, use false to suppress launch (default: server root)"},{"lineNumber":152,"author":{"gitId":"-"},"content":" * @param mount {array} Mount directories onto a route, e.g. [[\u0027/components\u0027, \u0027./node_modules\u0027]]."},{"lineNumber":153,"author":{"gitId":"-"},"content":" * @param logLevel {number} 0 \u003d errors only, 1 \u003d some, 2 \u003d lots"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * @param file {string} Path to the entry point file"},{"lineNumber":155,"author":{"gitId":"-"},"content":" * @param wait {number} Server will wait for all changes, before reloading"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * @param htpasswd {string} Path to htpasswd file to enable HTTP Basic authentication"},{"lineNumber":157,"author":{"gitId":"-"},"content":" * @param middleware {array} Append middleware to stack, e.g. [function(req, res, next) { next(); }]."},{"lineNumber":158,"author":{"gitId":"-"},"content":" */"},{"lineNumber":159,"author":{"gitId":"-"},"content":"LiveServer.start \u003d function(options) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" options \u003d options || {};"},{"lineNumber":161,"author":{"gitId":"LamJiuFong"},"content":" var host \u003d options.host ?? \u0027127.0.0.1\u0027;"},{"lineNumber":162,"author":{"gitId":"LamJiuFong"},"content":" var port \u003d options.port ?? 8080; // 0 means random"},{"lineNumber":163,"author":{"gitId":"-"},"content":" var root \u003d options.root || process.cwd();"},{"lineNumber":164,"author":{"gitId":"-"},"content":" var mount \u003d options.mount || [];"},{"lineNumber":165,"author":{"gitId":"-"},"content":" var watchPaths \u003d options.watch || [root];"},{"lineNumber":166,"author":{"gitId":"-"},"content":" LiveServer.logLevel \u003d options.logLevel \u003d\u003d\u003d undefined ? 2 : options.logLevel;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" var openPath \u003d (options.open \u003d\u003d\u003d undefined || options.open \u003d\u003d\u003d true) ?"},{"lineNumber":168,"author":{"gitId":"-"},"content":" \"\" : ((options.open \u003d\u003d\u003d null || options.open \u003d\u003d\u003d false) ? null : options.open);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (options.noBrowser) openPath \u003d null; // Backwards compatibility with 0.7.0"},{"lineNumber":170,"author":{"gitId":"-"},"content":" var file \u003d options.file;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" var staticServerHandler \u003d staticServer(root);"},{"lineNumber":172,"author":{"gitId":"-"},"content":" var wait \u003d options.wait \u003d\u003d\u003d undefined ? 100 : options.wait;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" var browser \u003d options.browser || null;"},{"lineNumber":174,"author":{"gitId":"-"},"content":" var htpasswd \u003d options.htpasswd || null;"},{"lineNumber":175,"author":{"gitId":"-"},"content":" var cors \u003d options.cors || false;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" var https \u003d options.https || null;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" var proxy \u003d options.proxy || [];"},{"lineNumber":178,"author":{"gitId":"-"},"content":" var middleware \u003d options.middleware || [];"},{"lineNumber":179,"author":{"gitId":"-"},"content":" var noCssInject \u003d options.noCssInject;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" var httpsModule \u003d options.httpsModule;"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" if (httpsModule) {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" require.resolve(httpsModule);"},{"lineNumber":185,"author":{"gitId":"-"},"content":" } catch (e) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" console.error((\"HTTPS module \\\"\" + httpsModule + \"\\\" you\u0027ve provided was not found.\").red);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" console.error(\"Did you do\", \"\\\"npm install \" + httpsModule + \"\\\"?\");"},{"lineNumber":188,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" httpsModule \u003d \"https\";"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" // Setup a web server"},{"lineNumber":195,"author":{"gitId":"-"},"content":" var app \u003d connect();"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" // Add logger. Level 2 logs only errors"},{"lineNumber":198,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003d\u003d\u003d 2) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" app.use(logger(\u0027dev\u0027, {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" skip: function (req, res) { return res.statusCode \u003c 400; }"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }));"},{"lineNumber":202,"author":{"gitId":"-"},"content":" // Level 2 or above logs all requests"},{"lineNumber":203,"author":{"gitId":"-"},"content":" } else if (LiveServer.logLevel \u003e 2) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" app.use(logger(\u0027dev\u0027));"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" if (options.spa) {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" middleware.push(\"spa\");"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }"},{"lineNumber":209,"author":{"gitId":"-"},"content":" // Add middleware"},{"lineNumber":210,"author":{"gitId":"-"},"content":" middleware.map(function(mw) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" if (typeof mw \u003d\u003d\u003d \"string\") {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" var ext \u003d path.extname(mw).toLocaleLowerCase();"},{"lineNumber":213,"author":{"gitId":"-"},"content":" if (ext !\u003d\u003d \".js\") {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" // CHANGED: correctly resolve to the live-server directory"},{"lineNumber":215,"author":{"gitId":"-"},"content":" mw \u003d require(path.join(pathToLiveServerDir, \"middleware\", mw + \".js\"));"},{"lineNumber":216,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" mw \u003d require(mw);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":" app.use(mw);"},{"lineNumber":221,"author":{"gitId":"-"},"content":" });"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" // Use http-auth if configured"},{"lineNumber":224,"author":{"gitId":"-"},"content":" if (htpasswd !\u003d\u003d null) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" var auth \u003d require(\u0027http-auth\u0027);"},{"lineNumber":226,"author":{"gitId":"-"},"content":" var basic \u003d auth.basic({"},{"lineNumber":227,"author":{"gitId":"-"},"content":" realm: \"Please authorize\","},{"lineNumber":228,"author":{"gitId":"-"},"content":" file: htpasswd"},{"lineNumber":229,"author":{"gitId":"-"},"content":" });"},{"lineNumber":230,"author":{"gitId":"-"},"content":" app.use(auth.connect(basic));"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":" if (cors) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" app.use(require(\"cors\")({"},{"lineNumber":234,"author":{"gitId":"-"},"content":" origin: true, // reflecting request origin"},{"lineNumber":235,"author":{"gitId":"-"},"content":" credentials: true // allowing requests with credentials"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }));"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":" mount.forEach(function(mountRule) {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" var mountPath \u003d path.resolve(process.cwd(), mountRule[1]);"},{"lineNumber":240,"author":{"gitId":"-"},"content":" if (!options.watch) // Auto add mount paths to wathing but only if exclusive path option is not given"},{"lineNumber":241,"author":{"gitId":"-"},"content":" watchPaths.push(mountPath);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" app.use(mountRule[0], staticServer(mountPath));"},{"lineNumber":243,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1)"},{"lineNumber":244,"author":{"gitId":"-"},"content":" console.log(\u0027Mapping %s to \"%s\"\u0027, mountRule[0], mountPath);"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" // CHANGED: added baseUrl initialization based on the first mount rule"},{"lineNumber":247,"author":{"gitId":"-"},"content":" if (LiveServer.baseUrl \u003d\u003d\u003d \u0027\u0027) {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" LiveServer.baseUrl \u003d mountRule[0] || \u0027/\u0027;"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":" });"},{"lineNumber":251,"author":{"gitId":"-"},"content":" proxy.forEach(function(proxyRule) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" var proxyOpts \u003d parse(proxyRule[1]);"},{"lineNumber":253,"author":{"gitId":"-"},"content":" proxyOpts.via \u003d true;"},{"lineNumber":254,"author":{"gitId":"-"},"content":" proxyOpts.preserveHost \u003d true;"},{"lineNumber":255,"author":{"gitId":"-"},"content":" app.use(proxyRule[0], require(\u0027proxy-middleware\u0027)(proxyOpts));"},{"lineNumber":256,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1)"},{"lineNumber":257,"author":{"gitId":"-"},"content":" console.log(\u0027Mapping %s to \"%s\"\u0027, proxyRule[0], proxyRule[1]);"},{"lineNumber":258,"author":{"gitId":"-"},"content":" });"},{"lineNumber":259,"author":{"gitId":"-"},"content":" app.use(staticServerHandler) // Custom static server"},{"lineNumber":260,"author":{"gitId":"-"},"content":" .use(entryPoint(staticServerHandler, file))"},{"lineNumber":261,"author":{"gitId":"-"},"content":" .use(serveIndex(root, { icons: true }));"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" var server, protocol;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" if (https !\u003d\u003d null) {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" var httpsConfig \u003d https;"},{"lineNumber":266,"author":{"gitId":"-"},"content":" if (typeof https \u003d\u003d\u003d \"string\") {"},{"lineNumber":267,"author":{"gitId":"-"},"content":" httpsConfig \u003d require(path.resolve(process.cwd(), https));"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":" server \u003d require(httpsModule).createServer(httpsConfig, app);"},{"lineNumber":270,"author":{"gitId":"-"},"content":" protocol \u003d \"https\";"},{"lineNumber":271,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" server \u003d http.createServer(app);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" protocol \u003d \"http\";"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" // Handle server startup errors"},{"lineNumber":277,"author":{"gitId":"-"},"content":" server.addListener(\u0027error\u0027, function(e) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" if (e.code \u003d\u003d\u003d \u0027EADDRINUSE\u0027) {"},{"lineNumber":279,"author":{"gitId":"-"},"content":" var serveURL \u003d protocol + \u0027://\u0027 + host + \u0027:\u0027 + port;"},{"lineNumber":280,"author":{"gitId":"-"},"content":" console.log(\u0027%s is already in use. Trying another port.\u0027.yellow, serveURL);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" setTimeout(function() {"},{"lineNumber":282,"author":{"gitId":"-"},"content":" server.listen(0, host);"},{"lineNumber":283,"author":{"gitId":"-"},"content":" }, 1000);"},{"lineNumber":284,"author":{"gitId":"LamJiuFong"},"content":" } else if (e.code \u003d\u003d\u003d \u0027EADDRNOTAVAIL\u0027) {"},{"lineNumber":285,"author":{"gitId":"LamJiuFong"},"content":" console.log(\u0027%s is not available. Trying another address\u0027.yellow, host);"},{"lineNumber":286,"author":{"gitId":"LamJiuFong"},"content":" setTimeout(function() {"},{"lineNumber":287,"author":{"gitId":"LamJiuFong"},"content":" server.listen(port, \u0027127.0.0.1\u0027);"},{"lineNumber":288,"author":{"gitId":"LamJiuFong"},"content":" }, 1000);"},{"lineNumber":289,"author":{"gitId":"LamJiuFong"},"content":" }"},{"lineNumber":290,"author":{"gitId":"LamJiuFong"},"content":" else {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" console.error(e.toString().red);"},{"lineNumber":292,"author":{"gitId":"-"},"content":" LiveServer.shutdown();"},{"lineNumber":293,"author":{"gitId":"-"},"content":" }"},{"lineNumber":294,"author":{"gitId":"-"},"content":" });"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":" // Handle successful server"},{"lineNumber":297,"author":{"gitId":"-"},"content":" server.addListener(\u0027listening\u0027, function(/*e*/) {"},{"lineNumber":298,"author":{"gitId":"-"},"content":" LiveServer.server \u003d server;"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" var address \u003d server.address();"},{"lineNumber":301,"author":{"gitId":"LamJiuFong"},"content":" var serveHost \u003d address.address;"},{"lineNumber":302,"author":{"gitId":"LamJiuFong"},"content":" var openHost \u003d host;"},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":" var serveURL \u003d protocol + \u0027://\u0027 + serveHost + \u0027:\u0027 + address.port;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" var openURL \u003d protocol + \u0027://\u0027 + openHost + \u0027:\u0027 + address.port;"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" var serveURLs \u003d [ serveURL ];"},{"lineNumber":308,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e 2 \u0026\u0026 address.address \u003d\u003d\u003d \"0.0.0.0\") {"},{"lineNumber":309,"author":{"gitId":"-"},"content":" var ifaces \u003d os.networkInterfaces();"},{"lineNumber":310,"author":{"gitId":"-"},"content":" serveURLs \u003d Object.keys(ifaces)"},{"lineNumber":311,"author":{"gitId":"-"},"content":" .map(function(iface) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" return ifaces[iface];"},{"lineNumber":313,"author":{"gitId":"-"},"content":" })"},{"lineNumber":314,"author":{"gitId":"-"},"content":" // flatten address data, use only IPv4"},{"lineNumber":315,"author":{"gitId":"-"},"content":" .reduce(function(data, addresses) {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" addresses.filter(function(addr) {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" return addr.family \u003d\u003d\u003d \"IPv4\";"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }).forEach(function(addr) {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" data.push(addr);"},{"lineNumber":320,"author":{"gitId":"-"},"content":" });"},{"lineNumber":321,"author":{"gitId":"-"},"content":" return data;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" }, [])"},{"lineNumber":323,"author":{"gitId":"-"},"content":" .map(function(addr) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" return protocol + \"://\" + addr.address + \":\" + address.port;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" });"},{"lineNumber":326,"author":{"gitId":"-"},"content":" }"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" // Output"},{"lineNumber":329,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" if (serveURL \u003d\u003d\u003d openURL)"},{"lineNumber":331,"author":{"gitId":"-"},"content":" if (serveURLs.length \u003d\u003d\u003d 1) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" console.log((\"Serving \\\"%s\\\" at %s\").green, root, serveURLs[0]);"},{"lineNumber":333,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":334,"author":{"gitId":"-"},"content":" console.log((\"Serving \\\"%s\\\" at\\n\\t%s\").green, root, serveURLs.join(\"\\n\\t\"));"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":" else"},{"lineNumber":337,"author":{"gitId":"-"},"content":" console.log((\"Serving \\\"%s\\\" at %s (%s)\").green, root, openURL, serveURL);"},{"lineNumber":338,"author":{"gitId":"-"},"content":" }"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":" // Launch browser"},{"lineNumber":341,"author":{"gitId":"-"},"content":" if (openPath !\u003d\u003d null)"},{"lineNumber":342,"author":{"gitId":"-"},"content":" if (typeof openPath \u003d\u003d\u003d \"object\") {"},{"lineNumber":343,"author":{"gitId":"-"},"content":" openPath.forEach(function(p) {"},{"lineNumber":344,"author":{"gitId":"-"},"content":" open(openURL + p, {app: browser});"},{"lineNumber":345,"author":{"gitId":"-"},"content":" });"},{"lineNumber":346,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" open(openURL + openPath, {app: browser});"},{"lineNumber":348,"author":{"gitId":"-"},"content":" }"},{"lineNumber":349,"author":{"gitId":"-"},"content":" });"},{"lineNumber":350,"author":{"gitId":"-"},"content":""},{"lineNumber":351,"author":{"gitId":"-"},"content":" // Setup server to listen at port"},{"lineNumber":352,"author":{"gitId":"-"},"content":" server.listen(port, host);"},{"lineNumber":353,"author":{"gitId":"-"},"content":" "},{"lineNumber":354,"author":{"gitId":"-"},"content":" // WebSocket"},{"lineNumber":355,"author":{"gitId":"-"},"content":" // CHANGED: Removed local clients variable in favour of the clients in active tabs entries"},{"lineNumber":356,"author":{"gitId":"-"},"content":" server.addListener(\u0027upgrade\u0027, function(request, socket, head) {"},{"lineNumber":357,"author":{"gitId":"-"},"content":" var ws \u003d new WebSocket(request, socket, head);"},{"lineNumber":358,"author":{"gitId":"-"},"content":" ws.onopen \u003d function() { ws.send(\u0027connected\u0027); };"},{"lineNumber":359,"author":{"gitId":"-"},"content":""},{"lineNumber":360,"author":{"gitId":"-"},"content":" if (wait \u003e 0) {"},{"lineNumber":361,"author":{"gitId":"-"},"content":" (function() {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" var wssend \u003d ws.send;"},{"lineNumber":363,"author":{"gitId":"-"},"content":" var waitTimeout;"},{"lineNumber":364,"author":{"gitId":"-"},"content":" ws.send \u003d function() {"},{"lineNumber":365,"author":{"gitId":"-"},"content":" var args \u003d arguments;"},{"lineNumber":366,"author":{"gitId":"-"},"content":" if (waitTimeout) clearTimeout(waitTimeout);"},{"lineNumber":367,"author":{"gitId":"-"},"content":" waitTimeout \u003d setTimeout(function(){"},{"lineNumber":368,"author":{"gitId":"-"},"content":" wssend.apply(ws, args);"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }, wait);"},{"lineNumber":370,"author":{"gitId":"-"},"content":" };"},{"lineNumber":371,"author":{"gitId":"-"},"content":" })();"},{"lineNumber":372,"author":{"gitId":"-"},"content":" }"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" ws.onclose \u003d function() {"},{"lineNumber":375,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":376,"author":{"gitId":"-"},"content":" * CHANGED: Modified to remove the active tab that has the closed socket as"},{"lineNumber":377,"author":{"gitId":"-"},"content":" * its current client on socket close. In other words, only socket close event that"},{"lineNumber":378,"author":{"gitId":"-"},"content":" * does not come from live reload will remove the active tab."},{"lineNumber":379,"author":{"gitId":"-"},"content":" */"},{"lineNumber":380,"author":{"gitId":"-"},"content":" LiveServer.activeTabs \u003d LiveServer.activeTabs.filter(tab \u003d\u003e tab.client !\u003d\u003d ws);"},{"lineNumber":381,"author":{"gitId":"-"},"content":" };"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":" // CHANGED: Enhanced client websocket addition process to record the client as an active tab entry"},{"lineNumber":384,"author":{"gitId":"-"},"content":" const reqUrl \u003d path.dirname(request.url);"},{"lineNumber":385,"author":{"gitId":"-"},"content":" const normalizedUrl \u003d fsUtil.ensurePosix(path.relative(LiveServer.baseUrl, reqUrl));"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" // If an entry with empty client is present, reuse existing entry to maintain order from pre-reload "},{"lineNumber":388,"author":{"gitId":"-"},"content":" const existingTab \u003d LiveServer.activeTabs.find(tab \u003d\u003e tab.url \u003d\u003d\u003d normalizedUrl \u0026\u0026 !tab.client);"},{"lineNumber":389,"author":{"gitId":"-"},"content":" if (existingTab) {"},{"lineNumber":390,"author":{"gitId":"-"},"content":" existingTab.client \u003d ws;"},{"lineNumber":391,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":392,"author":{"gitId":"-"},"content":" }"},{"lineNumber":393,"author":{"gitId":"-"},"content":""},{"lineNumber":394,"author":{"gitId":"-"},"content":" // Insert new entry to the active tabs list"},{"lineNumber":395,"author":{"gitId":"-"},"content":" LiveServer.activeTabs.unshift({ url: normalizedUrl, client: ws });"},{"lineNumber":396,"author":{"gitId":"-"},"content":" });"},{"lineNumber":397,"author":{"gitId":"-"},"content":""},{"lineNumber":398,"author":{"gitId":"-"},"content":" var ignored \u003d ["},{"lineNumber":399,"author":{"gitId":"-"},"content":" function(testPath) { // Always ignore dotfiles (important e.g. because editor hidden temp files)"},{"lineNumber":400,"author":{"gitId":"-"},"content":" return testPath !\u003d\u003d \".\" \u0026\u0026 /(^[.#]|(?:__|~)$)/.test(path.basename(testPath));"},{"lineNumber":401,"author":{"gitId":"-"},"content":" }"},{"lineNumber":402,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":403,"author":{"gitId":"-"},"content":" if (options.ignore) {"},{"lineNumber":404,"author":{"gitId":"-"},"content":" ignored \u003d ignored.concat(options.ignore);"},{"lineNumber":405,"author":{"gitId":"-"},"content":" }"},{"lineNumber":406,"author":{"gitId":"-"},"content":" if (options.ignorePattern) {"},{"lineNumber":407,"author":{"gitId":"-"},"content":" ignored.push(options.ignorePattern);"},{"lineNumber":408,"author":{"gitId":"-"},"content":" }"},{"lineNumber":409,"author":{"gitId":"-"},"content":" // Setup file watcher"},{"lineNumber":410,"author":{"gitId":"-"},"content":" LiveServer.watcher \u003d chokidar.watch(watchPaths, {"},{"lineNumber":411,"author":{"gitId":"-"},"content":" ignored: ignored,"},{"lineNumber":412,"author":{"gitId":"-"},"content":" ignoreInitial: true"},{"lineNumber":413,"author":{"gitId":"-"},"content":" });"},{"lineNumber":414,"author":{"gitId":"-"},"content":" function handleChange(changePath) {"},{"lineNumber":415,"author":{"gitId":"-"},"content":" var cssChange \u003d path.extname(changePath) \u003d\u003d\u003d \".css\" \u0026\u0026 !noCssInject;"},{"lineNumber":416,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1) {"},{"lineNumber":417,"author":{"gitId":"-"},"content":" if (cssChange)"},{"lineNumber":418,"author":{"gitId":"-"},"content":" console.log(\"CSS change detected\".magenta, changePath);"},{"lineNumber":419,"author":{"gitId":"-"},"content":" else console.log(\"Change detected\".cyan, changePath);"},{"lineNumber":420,"author":{"gitId":"-"},"content":" }"},{"lineNumber":421,"author":{"gitId":"-"},"content":""},{"lineNumber":422,"author":{"gitId":"-"},"content":" // CHANGED: Modified the send message to clients routine"},{"lineNumber":423,"author":{"gitId":"-"},"content":""},{"lineNumber":424,"author":{"gitId":"-"},"content":" if (cssChange) {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" LiveServer.sendMessageToActiveTabs(\u0027refreshcss\u0027);"},{"lineNumber":426,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":427,"author":{"gitId":"-"},"content":" }"},{"lineNumber":428,"author":{"gitId":"-"},"content":""},{"lineNumber":429,"author":{"gitId":"-"},"content":" // Only reload active tabs if the changed file is opened in one of them"},{"lineNumber":430,"author":{"gitId":"-"},"content":" const normalizeUrl \u003d (url) \u003d\u003e {"},{"lineNumber":431,"author":{"gitId":"-"},"content":" if (!url || url.length \u003d\u003d\u003d 0) {"},{"lineNumber":432,"author":{"gitId":"-"},"content":" return \"index.html\";"},{"lineNumber":433,"author":{"gitId":"-"},"content":" }"},{"lineNumber":434,"author":{"gitId":"-"},"content":""},{"lineNumber":435,"author":{"gitId":"-"},"content":" if (path.extname(url) \u003d\u003d\u003d \u0027.html\u0027) {"},{"lineNumber":436,"author":{"gitId":"-"},"content":" return url;"},{"lineNumber":437,"author":{"gitId":"-"},"content":" }"},{"lineNumber":438,"author":{"gitId":"-"},"content":""},{"lineNumber":439,"author":{"gitId":"-"},"content":" return path.posix.join(url, \u0027index.html\u0027);"},{"lineNumber":440,"author":{"gitId":"-"},"content":" };"},{"lineNumber":441,"author":{"gitId":"-"},"content":""},{"lineNumber":442,"author":{"gitId":"-"},"content":" let normalizedPath \u003d fsUtil.ensurePosix(path.relative(root, changePath));"},{"lineNumber":443,"author":{"gitId":"-"},"content":" if (LiveServer.activeTabs.some(tab \u003d\u003e tab.client \u0026\u0026 normalizeUrl(tab.url) \u003d\u003d\u003d normalizedPath)) {"},{"lineNumber":444,"author":{"gitId":"-"},"content":" LiveServer.sendMessageToActiveTabs(\u0027reload\u0027);"},{"lineNumber":445,"author":{"gitId":"-"},"content":" }"},{"lineNumber":446,"author":{"gitId":"-"},"content":" }"},{"lineNumber":447,"author":{"gitId":"-"},"content":" LiveServer.watcher"},{"lineNumber":448,"author":{"gitId":"-"},"content":" .on(\"change\", handleChange)"},{"lineNumber":449,"author":{"gitId":"-"},"content":" .on(\"add\", handleChange)"},{"lineNumber":450,"author":{"gitId":"-"},"content":" .on(\"unlink\", handleChange)"},{"lineNumber":451,"author":{"gitId":"-"},"content":" .on(\"addDir\", handleChange)"},{"lineNumber":452,"author":{"gitId":"-"},"content":" .on(\"unlinkDir\", handleChange)"},{"lineNumber":453,"author":{"gitId":"-"},"content":" .on(\"ready\", function () {"},{"lineNumber":454,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1)"},{"lineNumber":455,"author":{"gitId":"-"},"content":" console.log(\"Ready for changes\".cyan);"},{"lineNumber":456,"author":{"gitId":"-"},"content":" })"},{"lineNumber":457,"author":{"gitId":"-"},"content":" .on(\"error\", function (err) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" console.log(\"ERROR:\".red, err);"},{"lineNumber":459,"author":{"gitId":"-"},"content":" });"},{"lineNumber":460,"author":{"gitId":"-"},"content":""},{"lineNumber":461,"author":{"gitId":"-"},"content":" return server;"},{"lineNumber":462,"author":{"gitId":"-"},"content":"};"},{"lineNumber":463,"author":{"gitId":"-"},"content":""},{"lineNumber":464,"author":{"gitId":"-"},"content":"LiveServer.shutdown \u003d function() {"},{"lineNumber":465,"author":{"gitId":"-"},"content":" var watcher \u003d LiveServer.watcher;"},{"lineNumber":466,"author":{"gitId":"-"},"content":" if (watcher) {"},{"lineNumber":467,"author":{"gitId":"-"},"content":" watcher.close();"},{"lineNumber":468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":469,"author":{"gitId":"-"},"content":" var server \u003d LiveServer.server;"},{"lineNumber":470,"author":{"gitId":"-"},"content":" if (server)"},{"lineNumber":471,"author":{"gitId":"-"},"content":" server.close();"},{"lineNumber":472,"author":{"gitId":"-"},"content":"};"},{"lineNumber":473,"author":{"gitId":"-"},"content":""},{"lineNumber":474,"author":{"gitId":"-"},"content":"// CHANGED: Added method to retrieve current active urls"},{"lineNumber":475,"author":{"gitId":"-"},"content":"LiveServer.getActiveUrls \u003d () \u003d\u003e LiveServer.activeTabs.filter(tab \u003d\u003e tab.client).map(tab \u003d\u003e tab.url);"},{"lineNumber":476,"author":{"gitId":"-"},"content":""},{"lineNumber":477,"author":{"gitId":"-"},"content":"// CHANGED: Added method to send message to active tabs"},{"lineNumber":478,"author":{"gitId":"-"},"content":"LiveServer.sendMessageToActiveTabs \u003d (msg) \u003d\u003e {"},{"lineNumber":479,"author":{"gitId":"-"},"content":" LiveServer.activeTabs.forEach((tab) \u003d\u003e {"},{"lineNumber":480,"author":{"gitId":"-"},"content":" if (tab.client) {"},{"lineNumber":481,"author":{"gitId":"-"},"content":" const client \u003d tab.client;"},{"lineNumber":482,"author":{"gitId":"-"},"content":" if (msg \u003d\u003d\u003d \u0027reload\u0027) {"},{"lineNumber":483,"author":{"gitId":"-"},"content":" // Clear the client from the entry to be refilled in the socket establishment phase after reload"},{"lineNumber":484,"author":{"gitId":"-"},"content":" tab.client \u003d undefined;"},{"lineNumber":485,"author":{"gitId":"-"},"content":" }"},{"lineNumber":486,"author":{"gitId":"-"},"content":" client.send(msg);"},{"lineNumber":487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":488,"author":{"gitId":"-"},"content":" });"},{"lineNumber":489,"author":{"gitId":"-"},"content":"}"},{"lineNumber":490,"author":{"gitId":"-"},"content":""},{"lineNumber":491,"author":{"gitId":"-"},"content":"// CHANGED: Added convenience method to reload all active tabs"},{"lineNumber":492,"author":{"gitId":"-"},"content":"LiveServer.reloadActiveTabs \u003d () \u003d\u003e LiveServer.sendMessageToActiveTabs(\u0027reload\u0027);"},{"lineNumber":493,"author":{"gitId":"-"},"content":""},{"lineNumber":494,"author":{"gitId":"-"},"content":"module.exports \u003d LiveServer;"}],"authorContributionMap":{"LamJiuFong":12,"-":482}},{"path":"packages/cli/test/functional/testSites.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"const testSites \u003d ["},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u0027test_site\u0027,"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u0027test_site_algolia_plugin\u0027,"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u0027test_site_special_tags\u0027,"},{"lineNumber":5,"author":{"gitId":"-"},"content":"];"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"const testConvertSites \u003d ["},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u0027test_site_convert/test_basic_convert\u0027,"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u0027test_site_convert/test_navigation_convert\u0027,"},{"lineNumber":10,"author":{"gitId":"-"},"content":"];"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"const testTemplateSites \u003d ["},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u0027minimal,test_site_templates/test_minimal\u0027,"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u0027default,test_site_templates/test_default\u0027,"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" \u0027project,test_site_templates/test_project\u0027,"},{"lineNumber":16,"author":{"gitId":"-"},"content":"];"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"// These files will be generated within test_site/expected/"},{"lineNumber":19,"author":{"gitId":"-"},"content":"// after running `npm run updatetest`. Due to the fact that"},{"lineNumber":20,"author":{"gitId":"-"},"content":"// these files create git diffs every time they are generated,"},{"lineNumber":21,"author":{"gitId":"-"},"content":"// we decided to not commit them to the repository."},{"lineNumber":22,"author":{"gitId":"-"},"content":"// However, we still want to verify that they are present."},{"lineNumber":23,"author":{"gitId":"-"},"content":"const plantumlGeneratedFilesForTestSites \u003d {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" test_site: ["},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u00279c9e77fc0a983cb6b592e65733787bec.png\u0027,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u0027inline-output.png\u0027,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u0027diagrams/activity.png\u0027,"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u0027diagrams/class.png\u0027,"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u0027diagrams/component.png\u0027,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u0027diagrams/object.png\u0027,"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u0027diagrams/sequence.png\u0027,"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u0027diagrams/state.png\u0027,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u0027diagrams/usecase.png\u0027,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u0027sub_site/inline-output/inline-puml-image.png\u0027,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":36,"author":{"gitId":"-"},"content":"};"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"const plantumlGeneratedFilesForConvertSites \u003d {};"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"const plantumlGeneratedFilesForTemplateSites \u003d {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" test_project: [\u0027diagrams/example.png\u0027],"},{"lineNumber":42,"author":{"gitId":"-"},"content":"};"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"module.exports \u003d {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testSites,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" testConvertSites,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" testTemplateSites,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" plantumlGeneratedFilesForTestSites,"},{"lineNumber":49,"author":{"gitId":"-"},"content":" plantumlGeneratedFilesForConvertSites,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" plantumlGeneratedFilesForTemplateSites,"},{"lineNumber":51,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"KevinEyo1":1,"-":50}},{"path":"packages/cli/test/functional/test_site/expected/index.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027div\u0027,[_c(\u0027header\u0027,[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\",\"default-highlight-on\":\"sibling-or-child\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\",\"title\":\"Home\"}},[_v(\"MarkBind Test Site\")])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs\")])])]),_v(\" \"),_m(0)],1),_v(\" \"),_m(1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_c(\u0027div\u0027,[_c(\u0027h2\u0027,{attrs:{\"id\":\"default-layout\"}},[_v(\"Default Layout\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#default-layout\",\"onclick\":\"event.stopPropagation()\"}})])])])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027div\u0027,[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs 🐛\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_c(\u0027h3\u0027,{attrs:{\"id\":\"testing-site-nav\"}},[_v(\"Testing Site-Nav\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-site-nav\",\"onclick\":\"event.stopPropagation()\"}})])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027strong\u0027,[_v(\"Dropdown \")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-search\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" title ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Html within site-nav \"),_c(\u0027span\u0027,{staticStyle:{\"color\":\"red\"}},[_v(\"should\")]),_v(\" be displayed properly\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown title 📐\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027mark\u0027,[_v(\"Third Link\")]),_v(\" 📋\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Filler text \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-facetime-video\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" Youtube 📺\")]),_v(\" filler text\"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/watch?v\u003ddQw4w9WgXcQ\"}},[_v(\"The answer to everything in the universe\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027mark\u0027,[_v(\"Dropdown title\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-comment\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown Title\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Hello Doge Hello Doge 🐶\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_c(\u0027strong\u0027,[_v(\"NESTED LINK\")]),_v(\" Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Test line break in navigation layout\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Nested line break text ✂️\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Nested line break href\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Nested Nested line break text ✂️\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested line break dropdown menu\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Line break item 2 📘\")])])])])])])],1)],1)])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"website-content\"},[_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Normal footnotes:\")]),_v(\"\\nHere is a footnote reference,\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-1-1\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-1-1\"}},[_v(\"[1]\")])])]),_v(\" and another.\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-1-2\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-1-2\"}},[_v(\"[2]\")])])])],1),_v(\" \"),_c(\u0027p\u0027,[_v(\"Here is a repeated footnote to \"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-1-1\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-1-1\"}},[_v(\"[1:1]\")])])])],1),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Inline footnotes:\")]),_v(\"\\nHere is an inline note.\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-1-3\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-1-3\"}},[_v(\"[3]\")])])])],1)]),_v(\" \"),_m(8),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"text\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-2-1\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-2-1\"}},[_v(\"[1]\")])])]),_v(\", text2\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-2-2\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-2-2\"}},[_v(\"[2]\")])])])],1)]),_v(\" \"),_m(9),_v(\" \"),_c(\u0027div\u0027,[_v(\" front back \")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"arrayVarItem1\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"arrayVarItem2\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"nestedVarValue\")]),_v(\" \"),_m(10),_v(\" \"),_c(\u0027p\u0027,[_v(\"This variable can be referenced.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"References can be several levels deep.\")]),_v(\" \"),_m(11),_v(\" \"),_c(\u0027p\u0027,[_v(\"Page Variable with Global Variable\")]),_v(\" \"),_m(12),_v(\" \"),_c(\u0027p\u0027,[_v(\"Global Variable Overriding Page Variable\")]),_v(\" \"),_m(13),_v(\" \"),_m(14),_v(\" \"),_m(15),_v(\" \"),_m(16),_v(\" \"),_m(17),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Panel with keyword\")])]},proxy:true}])},[_v(\" \"),_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"panel keyword\")])]),_v(\" \"),_m(18),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-with-heading\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h1\u0027,{attrs:{\"id\":\"panel-with-heading\"}},[_v(\"Panel with heading\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-heading\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"panel keyword\")])]),_v(\" \"),_m(19),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-without-heading-with-keyword\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h1\u0027,{attrs:{\"id\":\"panel-without-heading-with-keyword\"}},[_v(\"Panel without heading with keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-without-heading-with-keyword\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027h1\u0027,{attrs:{\"id\":\"keyword-should-be-tagged-to-this-heading-not-the-panel-heading\"}},[_v(\"Keyword should be tagged to this heading, not the panel heading\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#keyword-should-be-tagged-to-this-heading-not-the-panel-heading\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"panel keyword\")])])]),_v(\" \"),_m(20),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"panelId\":\"panel-with-heading-with-keyword\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h1\u0027,{attrs:{\"id\":\"panel-with-heading-with-keyword\"}},[_v(\"Panel with heading with keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-heading-with-keyword\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027h1\u0027,{attrs:{\"id\":\"keyword-should-be-tagged-to-the-panel-heading-not-this-heading\"}},[_v(\"Keyword should be tagged to the panel heading, not this heading\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#keyword-should-be-tagged-to-the-panel-heading-not-this-heading\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"panel keyword\")])])]),_v(\" \"),_m(21),_v(\" \"),_m(22),_v(\" \"),_m(23),_v(\" \"),_m(24),_v(\" \"),_m(25),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"Keyword with included heading\")]),_v(\" \"),_m(26),_v(\" \"),_m(27),_v(\" \"),_m(28),_v(\" \"),_m(29),_v(\" \"),_m(30),_v(\" \"),_m(31),_v(\" \"),_c(\u0027div\u0027,[_m(32),_v(\" \"),_m(33),_v(\" \"),_c(\u0027p\u0027,[_v(\"There are many techniques used during a requirements gathering. The following are some of the techniques.\")]),_v(\" \"),_m(34),_v(\" \"),_c(\u0027p\u0027,[_v(\"Brainstorming is a group activity designed to generate a large number of diverse and creative ideas for the solution\\nof a problem. In a brainstorming session there are no \\\"bad\\\" ideas.\\nThe aim is to generate ideas; not to validate them. Brainstorming encourages you to \\\"think outside the box\\\" and\\nput \\\"crazy\\\" ideas on the table without fear of rejection.\")]),_v(\" \"),_m(35),_v(\" \"),_c(\u0027p\u0027,[_v(\"Carefully designed questionnaires can be used to solicit responses and opinions from a large number of users regarding\\nany current system or a new innovation.\")]),_v(\" \"),_m(36),_v(\" \"),_c(\u0027p\u0027,[_v(\"Focus groups are a kind of informal interview within an interactive group setting.\\nA \"),_c(\u0027tooltip\u0027,{scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"e.g. potential users, beta testers\")]},proxy:true}])},[_v(\"group of people\")]),_v(\"\\nare asked about their understanding of a specific issue or a process.\\nFocus groups can bring out undiscovered conflicts and misunderstandings among stakeholder interests which can then be\\nresolved or clarified as necessary.\")],1)]),_v(\" \"),_m(37),_v(\" \"),_m(38),_v(\" \"),_m(39),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"name\":\"Boilerplate Referencing\"}},[_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/UserStories._include_.html\",\"no-close\":\"\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Boilerplate Includes\")])]},proxy:true}])})],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"name\":\"Referencing specified path in boilerplate\"}},[_m(40),_v(\" \"),_c(\u0027p\u0027,[_v(\"Like static include, pages within the site should be able to use files located in folders within boilerplate.\")]),_v(\" \"),_m(41),_v(\" \"),_m(42),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/NonFunctionalRequirements._include_.html\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Tested with the folllowing include\")])]},proxy:true}])})],1),_v(\" \"),_m(43),_v(\" \"),_m(44),_v(\" \"),_m(45),_v(\" \"),_m(46),_v(\" \"),_m(47),_v(\" \"),_m(48),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"This is a page from another MarkBind site.\\nThe purpose of this page is to ensure that reuse works as expected.\\nAll the following images should display correctly.\")]),_v(\" \"),_m(49),_v(\" \"),_c(\u0027p\u0027,[_v(\"PIC tags:\\n\"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"https://dummyimage.com/600x400/000/fff\"}})],1),_v(\" \"),_m(50),_v(\" \"),_m(51),_v(\" \"),_c(\u0027p\u0027,[_v(\"Within DIV tag:\")]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"imageTest\"}},[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})],1)]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})],1),_v(\" \"),_m(52),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a nested sub-site should correctly evaluate to the nested sub-site\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in the nested_sub_site is /test_site/sub_site/nested_sub_site.\")]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a nested sub-site page\u0027s include should correctly evaluate to the nested sub-site\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in the nested_sub_site page\u0027s include is /test_site/sub_site/nested_sub_site.\")])])])]),_v(\" \"),_m(53),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a sub site should correctly evaluate\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in sub_site is /test_site/sub_site.\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Subsite including nested subsite:\")])]),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a nested sub-site should correctly evaluate to the nested sub-site\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in the nested_sub_site is /test_site/sub_site/nested_sub_site.\")]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a nested sub-site page\u0027s include should correctly evaluate to the nested sub-site\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in the nested_sub_site page\u0027s include is /test_site/sub_site/nested_sub_site.\")])])])])],1)]),_v(\" \"),_m(54),_v(\" \"),_c(\u0027div\u0027,[_v(\"As we establish requirements, they should be recorded in some way for future reference,\\nusually called a requirement specification. Furthermore, it is advisable to show these requirements to stakeholders,\\nand refine requirements based on their feedback. The next phase is to convert requirements into a product\\nspecification that specifies how the product will address the requirements. \")]),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/SpecifyingRequirements._include_.html#preview\",\"type\":\"minimal\",\"fragment\":\"preview\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(55),_v(\" \"),_m(56),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/testBaseUrlInIncludeSrc._include_.html\",\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(57),_v(\" \"),_m(58),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/testBaseUrlInIncludeSrc._include_.html\",\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(59),_v(\" \"),_m(60),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/sub_site/testBaseUrlInIncludeSrcSubSite._include_.html\",\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(61),_v(\" \"),_m(62),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/sub_site/testBaseUrlInIncludeSrcSubSite._include_.html\",\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(63),_v(\" \"),_m(64),_v(\" \"),_m(65),_v(\" \"),_m(66),_v(\" \"),_m(67),_v(\" \"),_m(68),_v(\" \"),_m(69),_v(\" \"),_m(70),_v(\" \"),_m(71),_v(\" \"),_m(72),_v(\" \"),_m(73),_v(\" \"),_c(\u0027panel\u0027,[_c(\u0027span\u0027,{staticClass:\"card-title\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_v(\"\\n Heading\\n \")])]),_v(\" \"),_m(74),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-without-src-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-without-src-header\"}},[_v(\"Panel without src header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-without-src-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel without src content heading\")])])])]),_v(\" \"),_m(75),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/PanelNormalSource._include_.html\",\"expanded\":\"\",\"panelId\":\"panel-with-normal-src-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-normal-src-header\"}},[_v(\"Panel with normal src header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-normal-src-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_m(76),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/PanelSourceContainsSegment._include_.html#segment\",\"expanded\":\"\",\"fragment\":\"segment\",\"panelId\":\"panel-with-src-from-a-page-segment-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-src-from-a-page-segment-header\"}},[_v(\"Panel with src from a page segment header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-src-from-a-page-segment-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_m(77),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/boilerTestPanel._include_.html\",\"expanded\":\"\",\"panelId\":\"boilerplate-referencing\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"boilerplate-referencing\"}},[_v(\"Boilerplate referencing\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#boilerplate-referencing\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanelsDuplicate/boilerTestPanel._include_.html\",\"expanded\":\"\",\"panelId\":\"boilerplate-referencing-2\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"boilerplate-referencing-2\"}},[_v(\"Boilerplate referencing 2\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#boilerplate-referencing-2\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/notInside._include_.html\",\"expanded\":\"\",\"panelId\":\"referencing-specified-path-in-boilerplate\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"referencing-specified-path-in-boilerplate\"}},[_v(\"Referencing specified path in boilerplate\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#referencing-specified-path-in-boilerplate\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_m(78),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/NestedPanel._include_.html\",\"expanded\":\"\",\"panelId\":\"outer-nested-panel\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"outer-nested-panel\"}},[_v(\"Outer nested panel\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#outer-nested-panel\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_m(79),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"outer-nested-panel-without-src\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"outer-nested-panel-without-src\"}},[_v(\"Outer nested panel without src\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#outer-nested-panel-without-src\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content of outer nested panel\")])]),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"inner-panel-header-without-src\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"inner-panel-header-without-src\"}},[_v(\"Inner panel header without src\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#inner-panel-header-without-src\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content of inner nested panel\")])])])],1),_v(\" \"),_m(80),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/sub_site/index._include_.html\",\"expanded\":\"\",\"panelId\":\"panel-with-src-from-another-markbind-site-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-src-from-another-markbind-site-header\"}},[_v(\"Panel with src from another MarkBind site header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-src-from-another-markbind-site-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/sub_site/testReuseSubsite._include_.html\",\"expanded\":\"\",\"panelId\":\"panel-with-src-from-another-markbind-site-header-2\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-src-from-another-markbind-site-header-2\"}},[_v(\"Panel with src from another MarkBind site header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-src-from-another-markbind-site-header-2\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])})],1),_v(\" \"),_m(81),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027trigger\u0027,{attrs:{\"for\":\"modal-with-panel\"}},[_v(\"trigger\")])],1),_v(\" \"),_c(\u0027modal\u0027,{attrs:{\"id\":\"modal-with-panel\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_v(\"modal title with panel inside\")]},proxy:true}])},[_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-inside-modal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-inside-modal\"}},[_v(\"Panel inside modal\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-inside-modal\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content inside modal\")])])])],1),_v(\" \"),_m(82),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"panelId\":\"unexpanded-panel-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"unexpanded-panel-header\"}},[_v(\"Unexpanded panel header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#unexpanded-panel-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content of unexpanded panel should not appear in search data\")])]),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-header-inside-unexpanded-panel-should-not-appear-in-search-data\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-header-inside-unexpanded-panel-should-not-appear-in-search-data\"}},[_v(\"Panel header inside unexpanded panel should not appear in search data\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-header-inside-unexpanded-panel-should-not-appear-in-search-data\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content inside unexpanded panel should not appear in search data\")])])])],1),_v(\" \"),_m(83),_v(\" \"),_c(\u0027div\u0027,[_m(84),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"info\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Expandable panel without closing transition\")])]},proxy:true}])},[_v(\"\\n Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text some text some text some text some text some text some text some text. Some text some text some text some text some text some text. Some text some text some text some text some text some text some text.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n\")]),_v(\" \"),_m(85),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"info\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Expanded panel without transition\")])]},proxy:true}])},[_v(\"\\n Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text some text some text some text some text some text some text some text. Some text some text some text some text some text some text. Some text some text some text some text some text some text some text.\\n\")]),_v(\" \"),_m(86),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027em\u0027,[_c(\u0027strong\u0027,[_v(\"Minimal panel without closing transition \"),_c(\u0027strong\u0027,[_v(\"-\u003e\")])])])])]},proxy:true},{key:\"_alt\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Minimal panel 1\")])]},proxy:true}])},[_v(\"\\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\\n Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text some text some text some text some text some text some text some text. Some text some text some text some text some text some text. Some text some text some text some text some text some text some text.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n\")]),_v(\" \"),_m(87),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027em\u0027,[_c(\u0027strong\u0027,[_v(\"Minimal panel without closing transition \"),_c(\u0027strong\u0027,[_v(\"-\u003e\")])])])])]},proxy:true},{key:\"_alt\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Minimal panel 2\")])]},proxy:true}])},[_v(\"\\n Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text some text some text some text some text some text some text some text. Some text some text some text some text some text some text. Some text some text some text some text some text some text some text.\\n\")])],1),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test popover has no stray space\")]),_v(\"\\n(\"),_c(\u0027popover\u0027,{scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"content\")]},proxy:true}])},[_v(\"There should be no stray space before this\")]),_v(\")\")],1),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test tooltip has no stray space\")]),_v(\"\\n(\"),_c(\u0027tooltip\u0027,{scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"content\")]},proxy:true}])},[_v(\"There should be no stray space before this\")]),_v(\")\")],1),_v(\" \"),_m(88),_v(\" \"),_m(89),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/activity.png\",\"alt\":\"activity diagram\"}}),_v(\" \"),_m(90),_v(\" \"),_c(\u0027div\u0027,[_m(91),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/inline-output.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/9c9e77fc0a983cb6b592e65733787bec.png\"}}),_v(\" \"),_m(92),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/sequence.png\"}}),_v(\" \"),_m(93),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/usecase.png\"}}),_v(\" \"),_m(94),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/class.png\"}})],1),_v(\" \"),_m(95),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/inline-output/inline-puml-image.png\"}}),_v(\" \"),_m(96),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/activity.png\"}}),_v(\" \"),_m(97),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/component.png\"}}),_v(\" \"),_m(98),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/state.png\"}}),_v(\" \"),_m(99),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/object.png\"}})],1),_v(\" \"),_m(100),_v(\" \"),_m(101),_v(\" \"),_m(102),_v(\" \"),_c(\u0027div\u0027,{pre:true},[_v(\"{{ variable interpolation syntax can be used with v-pre }}\")]),_v(\" \"),_c(\u0027div\u0027,{pre:true},[_v(\"{{ nonExistentVariable }}\")]),_v(\" \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers\"}},[_v(\"{{ code elements should automatically be assigned v-pre }}\")]),_c(\u0027hr\u0027,{staticClass:\"footnotes-sep\"}),_v(\" \"),_c(\u0027section\u0027,{staticClass:\"footnotes\"},[_c(\u0027ol\u0027,{staticClass:\"footnotes-list\"},[_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-1-1\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Here is the footnote. Footnotes will appear at the bottom of the page.\")])])]},proxy:true}])}),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-1-2\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Here\u0027s one with multiple blocks.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Subsequent paragraphs are indented to show that they\\nbelong to the previous footnote.\")])])]},proxy:true}])}),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-1-3\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Inlines notes are easier to write, since\\nyou don\u0027t have to pick an identifier and move down to type the\\nnote.\")])])]},proxy:true}])}),_v(\" \"),_m(103),_v(\" \"),_m(104),_v(\" \"),_m(105),_v(\" \"),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-2-1\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"footnote1\")])])]},proxy:true}])}),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-2-2\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"footnote2\")])])]},proxy:true}])}),_v(\" \"),_m(106),_m(107)],1)])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"navbar-brand page-nav-title\",\"href\":\"#\"}},[_v(\"Testing Page Navigation\")]),_v(\" \"),_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-multiple-keywords\"}},[_v(\"Heading with multiple keywords‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-keyword-in-panel\"}},[_v(\"Heading with keyword in panel‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-heading\"}},[_v(\"Panel with heading‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-without-heading-with-keyword\"}},[_v(\"Panel without heading with keyword‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#keyword-should-be-tagged-to-this-heading-not-the-panel-heading\"}},[_v(\"Keyword should be tagged to this heading, not the panel heading‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-heading-with-keyword\"}},[_v(\"Panel with heading with keyword‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-fragment-with-leading-spaces-and-newline\"}},[_v(\"Heading \\nFragment with leading spaces and newline\\n‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-included-keyword\"}},[_v(\"Heading with included keyword‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#included-heading\"}},[_v(\"Included Heading‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-nested-keyword\"}},[_v(\"Heading with nested keyword‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-hidden-keyword\"}},[_v(\"Heading with hidden keyword‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#establishing-requirements\"}},[_v(\"Establishing Requirements‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#brainstorming\"}},[_v(\"Brainstorming‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#user-surveys\"}},[_v(\"User surveys‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#focus-groups\"}},[_v(\"Focus groups‎\")])])]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#path-within-the-boilerplate-folder-is-separately-specified\"}},[_v(\"Path within the boilerplate folder is separately specified‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#feature-list\"}},[_v(\"Feature list‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-without-src-header\"}},[_v(\"Panel without src header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-normal-src-header\"}},[_v(\"Panel with normal src header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-src-from-a-page-segment-header\"}},[_v(\"Panel with src from a page segment header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#boilerplate-referencing\"}},[_v(\"Boilerplate referencing‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#boilerplate-referencing-2\"}},[_v(\"Boilerplate referencing 2‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#referencing-specified-path-in-boilerplate\"}},[_v(\"Referencing specified path in boilerplate‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#outer-nested-panel\"}},[_v(\"Outer nested panel‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#outer-nested-panel-without-src\"}},[_v(\"Outer nested panel without src‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#inner-panel-header-without-src\"}},[_v(\"Inner panel header without src‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-src-from-another-markbind-site-header\"}},[_v(\"Panel with src from another MarkBind site header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-src-from-another-markbind-site-header-2\"}},[_v(\"Panel with src from another MarkBind site header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#unexpanded-panel-header\"}},[_v(\"Unexpanded panel header‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#level-6-header-outside-headingsearchindex-with-always-index-attribute-should-be-indexed\"}},[_v(\"Level 6 header (outside headingSearchIndex) with always-index attribute should be indexed‎\")])])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(108)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"bg-info display-4 text-center text-white\"},[_c(\u0027br\u0027),_v(\"\\n Test Jumbotron\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027br\u0027)])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Relative Link Test\")]),_v(\" This is a relative Intra-Site link in a layout (see \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html#heading-with-hidden-keyword\"}},[_v(\"link\")]),_v(\")\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cmarkdown\u003e\")]),_v(\" and \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cmd\u003e\")]),_v(\" elements\")])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"-"},"content":") {"},{"lineNumber":17,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"This should be wrapped in a \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cp\u003e\")]),_v(\" tag as it uses the block-level markdown renderer\")])])}"},{"lineNumber":18,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"-"},"content":") {"},{"lineNumber":20,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027span\u0027,[_v(\"\\nThis should not be wrapped in a \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cp\u003e\")]),_v(\" tag as it uses the inline markdown renderer\\n\")])}"},{"lineNumber":21,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"-"},"content":") {"},{"lineNumber":23,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"mt-2\"},[_c(\u0027pre\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs\"}},[_c(\u0027span\u0027,[_v(\"\u003cmarkdown\u003e elements allow block-level markdown without needing a leading newline.\\n\")]),_c(\u0027span\u0027,[_v(\"Hence, the contained markdown should be parsed and output as is, without any parsing errors.\\n\")]),_c(\u0027span\u0027,[_v(\"\u003c/invalidhtml\u003e\\n\")])])])])}"},{"lineNumber":24,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"-"},"content":") {"},{"lineNumber":26,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027span\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cmd\u003e\")]),_v(\" elements allow inline-level markdown even in a non-markdown token.\\nHence, the contained markdown should be parsed and output as is, without any parsing errors.\\n\"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003c/invalid\u003e\")]),_v(\".\\n\")])}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"-"},"content":") {"},{"lineNumber":29,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test footnotes\")])])}"},{"lineNumber":30,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"-"},"content":") {"},{"lineNumber":32,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test include footnotes from hash\")])])}"},{"lineNumber":33,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":35,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nunjucks SetExt\")])])}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"-"},"content":") {"},{"lineNumber":38,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Variables that reference another variable\")])])}"},{"lineNumber":39,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"-"},"content":") {"},{"lineNumber":41,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Global Variables can be referenced in {% set %}\")])])}"},{"lineNumber":42,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"-"},"content":") {"},{"lineNumber":44,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Global Variables should override {% set %}\")])])}"},{"lineNumber":45,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":46,"author":{"gitId":"-"},"content":") {"},{"lineNumber":47,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test Page Variable and Included Variable Integrations\")])])}"},{"lineNumber":48,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":49,"author":{"gitId":"-"},"content":") {"},{"lineNumber":50,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Outer Page Variable Should Not Leak Into Inner Pages\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Outer Page Variable Should Not Leak Into Inner Pages\")])])}"},{"lineNumber":51,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":52,"author":{"gitId":"-"},"content":") {"},{"lineNumber":53,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-multiple-keywords\"}},[_v(\"Heading with multiple keywords\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-multiple-keywords\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":54,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":55,"author":{"gitId":"-"},"content":") {"},{"lineNumber":56,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"keyword 1\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"keyword 2\")])])}"},{"lineNumber":57,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":58,"author":{"gitId":"-"},"content":") {"},{"lineNumber":59,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-keyword-in-panel\"}},[_v(\"Heading with keyword in panel\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-keyword-in-panel\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":60,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":61,"author":{"gitId":"-"},"content":") {"},{"lineNumber":62,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with heading with keyword\")])])}"},{"lineNumber":63,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":64,"author":{"gitId":"-"},"content":") {"},{"lineNumber":65,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Expanded panel without heading with keyword\")])])}"},{"lineNumber":66,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":67,"author":{"gitId":"-"},"content":") {"},{"lineNumber":68,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Unexpanded panel with heading with keyword\")])])}"},{"lineNumber":69,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":70,"author":{"gitId":"-"},"content":") {"},{"lineNumber":71,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-fragment-with-leading-spaces-and-newline\"}},[_v(\"Heading \"),_c(\u0027div\u0027,[_c(\u0027pre\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers\"}},[_v(\"Fragment with leading spaces and newline\\n\")])])]),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-fragment-with-leading-spaces-and-newline\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":72,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":73,"author":{"gitId":"-"},"content":") {"},{"lineNumber":74,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"The \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"id\")]),_v(\" for the above heading should be \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"heading-fragment-with-leading-spaces-and-newline\")]),_v(\" in total.\\nThis test ensures heading ids are assigned last (e.g. after \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cinclude /\u003e\")]),_v(\"s are processed).\")])}"},{"lineNumber":75,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":76,"author":{"gitId":"-"},"content":") {"},{"lineNumber":77,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-included-keyword\"}},[_v(\"Heading with included keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-included-keyword\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":78,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":79,"author":{"gitId":"-"},"content":") {"},{"lineNumber":80,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"included keyword\")])])])}"},{"lineNumber":81,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":82,"author":{"gitId":"-"},"content":") {"},{"lineNumber":83,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"included-heading\"}},[_v(\"Included Heading\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#included-heading\",\"onclick\":\"event.stopPropagation()\"}})])])}"},{"lineNumber":84,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":85,"author":{"gitId":"-"},"content":") {"},{"lineNumber":86,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-nested-keyword\"}},[_v(\"Heading with nested keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-nested-keyword\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":87,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":88,"author":{"gitId":"-"},"content":") {"},{"lineNumber":89,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_c(\u0027div\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"nested keyword\")])])])])}"},{"lineNumber":90,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":91,"author":{"gitId":"-"},"content":") {"},{"lineNumber":92,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-hidden-keyword\"}},[_v(\"Heading with hidden keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-hidden-keyword\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":93,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":94,"author":{"gitId":"-"},"content":") {"},{"lineNumber":95,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword d-none\"},[_v(\"invisible keyword\")])])}"},{"lineNumber":96,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":97,"author":{"gitId":"-"},"content":") {"},{"lineNumber":98,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with frontmatter shown tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-frontmatter-shown\"}},[_v(\"\\nDiv with shown tag\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with site shown tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-site-shown\"}},[_v(\"\\nDiv with site shown tag\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with multiple tags\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-site-shown tag-other\"}},[_v(\"\\nDiv with multiple tags\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with hidden tag (Hidden)\")])]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag in included file\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-included-file\"}},[_v(\"\\nDiv with tag in included file\\n\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching general tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-exp-shown\"}},[_v(\"\\nDiv with tag matching general tag\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching general tag and specific tag (Hidden)\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching frontmatter tag overridden by matching site tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-site-override-shown\"}},[_v(\"\\nDiv with tag matching frontmatter tag overridden by matching site tag\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching general frontmatter tag not overridden by matching specific site tag (Hidden)\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching general frontmatter tag overridden by matching specific site tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-site-override-shown\"}},[_v(\"\\nDiv with tag matching general frontmatter tag overridden by matching specific site tag\\n\")])])}"},{"lineNumber":99,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":100,"author":{"gitId":"-"},"content":") {"},{"lineNumber":101,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Normal include\")])])}"},{"lineNumber":102,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":103,"author":{"gitId":"-"},"content":") {"},{"lineNumber":104,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"establishing-requirements\"}},[_v(\"Establishing Requirements\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#establishing-requirements\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":105,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":106,"author":{"gitId":"-"},"content":") {"},{"lineNumber":107,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027span\u0027,{attrs:{\"id\":\"preview\"}},[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])])}"},{"lineNumber":108,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":109,"author":{"gitId":"-"},"content":") {"},{"lineNumber":110,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h4\u0027,{attrs:{\"id\":\"brainstorming\"}},[_v(\"Brainstorming\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#brainstorming\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":111,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":112,"author":{"gitId":"-"},"content":") {"},{"lineNumber":113,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h4\u0027,{attrs:{\"id\":\"user-surveys\"}},[_v(\"User surveys\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#user-surveys\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":114,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":115,"author":{"gitId":"-"},"content":") {"},{"lineNumber":116,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h4\u0027,{attrs:{\"id\":\"focus-groups\"}},[_v(\"Focus groups\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#focus-groups\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":117,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":118,"author":{"gitId":"-"},"content":") {"},{"lineNumber":119,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include segment\")])])}"},{"lineNumber":120,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":121,"author":{"gitId":"-"},"content":") {"},{"lineNumber":122,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])}"},{"lineNumber":123,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":124,"author":{"gitId":"-"},"content":") {"},{"lineNumber":125,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Boilerplate include\")])])}"},{"lineNumber":126,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":127,"author":{"gitId":"-"},"content":") {"},{"lineNumber":128,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"path-within-the-boilerplate-folder-is-separately-specified\"}},[_v(\"Path within the boilerplate folder is separately specified\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#path-within-the-boilerplate-folder-is-separately-specified\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":129,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":130,"author":{"gitId":"-"},"content":") {"},{"lineNumber":131,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Also, the boilerplate file name (e.g. \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"inside.md\")]),_v(\") and the file that it is supposed to act as (\"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"notInside.md\")]),_v(\") can be different.\")])}"},{"lineNumber":132,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":133,"author":{"gitId":"-"},"content":") {"},{"lineNumber":134,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"This file should behaves as if it is in the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"requirements\")]),_v(\" folder:\")])}"},{"lineNumber":135,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":136,"author":{"gitId":"-"},"content":") {"},{"lineNumber":137,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested include\")])])}"},{"lineNumber":138,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":139,"author":{"gitId":"-"},"content":") {"},{"lineNumber":140,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Establishing requirements\")]),_v(\": \"),_c(\u0027span\u0027,[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Specifying requirements\")]),_v(\": \"),_c(\u0027span\u0027,[_v(\"As we establish requirements, they should be recorded in some way for future reference,\\nusually called a requirement specification. Furthermore, it is advisable to show these requirements to stakeholders,\\nand refine requirements based on their feedback. The next phase is to convert requirements into a product\\nspecification that specifies how the product will address the requirements. \")])])])])}"},{"lineNumber":141,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":142,"author":{"gitId":"-"},"content":") {"},{"lineNumber":143,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"HTML include\")])])}"},{"lineNumber":144,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":145,"author":{"gitId":"-"},"content":") {"},{"lineNumber":146,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"This is a HTML document\")]),_v(\" \"),_c(\u0027span\u0027,[_v(\"It is \"),_c(\u0027strong\u0027,[_v(\"possible\")]),_v(\" to use Markdown in HTML\")])])}"},{"lineNumber":147,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":148,"author":{"gitId":"-"},"content":") {"},{"lineNumber":149,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include from another MarkBind site\")])])}"},{"lineNumber":150,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":151,"author":{"gitId":"-"},"content":") {"},{"lineNumber":152,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"This is a page from another MarkBind site.\")]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"feature-list\"}},[_v(\"Feature list\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#feature-list\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"It is a list of features (or functionalities) grouped according to some criteria such as priority\\n(e.g. must-have, nice-to-have, etc. ), order of delivery, object or process related\\n(e.g. order-related, invoice-related, etc.).\\nHere is a sample feature list from Minesweeper (only a brief description has been provided to save space).\")]),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Basic play – Single player play.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Difficulty levels – Additional Medium and Advanced levels.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Versus play – Two players can play against each other.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Timer – Additional fixed time restriction on the player.\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"image\"}},[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})])])}"},{"lineNumber":153,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":154,"author":{"gitId":"-"},"content":") {"},{"lineNumber":155,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"IMG tags:\\n\"),_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://dummyimage.com/600x400/000/fff\"}})])}"},{"lineNumber":156,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":157,"author":{"gitId":"-"},"content":") {"},{"lineNumber":158,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Anchor:\\n\"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://dummyimage.com/600x400/000/fff\"}},[_v(\"External Image\")])])}"},{"lineNumber":159,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":160,"author":{"gitId":"-"},"content":") {"},{"lineNumber":161,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/sub_site/images/I\u0027m%20not%20allowed%20to%20use%20my%20favorite%20tool.png\"}},[_v(\"Link to picture\")]),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"id\":\"namedAnchor\"}},[_v(\"Named Anchor\")]),_v(\" \"),_c(\u0027a\u0027,[_v(\"Anchor with no attributes\")])])}"},{"lineNumber":162,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":163,"author":{"gitId":"-"},"content":") {"},{"lineNumber":164,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include nested sub-site directly\")])])}"},{"lineNumber":165,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":166,"author":{"gitId":"-"},"content":") {"},{"lineNumber":167,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include nested sub-site from sub-site\")])])}"},{"lineNumber":168,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":169,"author":{"gitId":"-"},"content":") {"},{"lineNumber":170,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file using baseUrl\")])])}"},{"lineNumber":171,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":172,"author":{"gitId":"-"},"content":") {"},{"lineNumber":173,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file in a sub-folder that uses baseUrl\")])])}"},{"lineNumber":174,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":175,"author":{"gitId":"-"},"content":") {"},{"lineNumber":176,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])])}"},{"lineNumber":177,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":178,"author":{"gitId":"-"},"content":") {"},{"lineNumber":179,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file in a sub-folder that uses baseUrl using baseUrl\")])])}"},{"lineNumber":180,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":181,"author":{"gitId":"-"},"content":") {"},{"lineNumber":182,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])])}"},{"lineNumber":183,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":184,"author":{"gitId":"-"},"content":") {"},{"lineNumber":185,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file in a sub-site that uses baseUrl\")])])}"},{"lineNumber":186,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":187,"author":{"gitId":"-"},"content":") {"},{"lineNumber":188,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})])])}"},{"lineNumber":189,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":190,"author":{"gitId":"-"},"content":") {"},{"lineNumber":191,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file in a sub-site that uses baseUrl using baseUrl\")])])}"},{"lineNumber":192,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":193,"author":{"gitId":"-"},"content":") {"},{"lineNumber":194,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})])])}"},{"lineNumber":195,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":196,"author":{"gitId":"-"},"content":") {"},{"lineNumber":197,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Trimmed include\")])])}"},{"lineNumber":198,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":199,"author":{"gitId":"-"},"content":") {"},{"lineNumber":200,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027span\u0027,[_c(\u0027br\u0027),_v(\"\\nFragment with leading spaces and newline\")])])])}"},{"lineNumber":201,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":202,"author":{"gitId":"-"},"content":") {"},{"lineNumber":203,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Trimmed include fragment\")])])}"},{"lineNumber":204,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":205,"author":{"gitId":"-"},"content":") {"},{"lineNumber":206,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Before | \"),_c(\u0027span\u0027,[_v(\"Fragment with leading spaces and newline\")]),_v(\" | After\")])])}"},{"lineNumber":207,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":208,"author":{"gitId":"-"},"content":") {"},{"lineNumber":209,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include with custom variables\")])])}"},{"lineNumber":210,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":211,"author":{"gitId":"-"},"content":") {"},{"lineNumber":212,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable as include attribute\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable as include attribute\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable with markdown\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027strong\u0027,[_v(\"Included variable with markdown\")])])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable as attribute\")])]),_v(\" \"),_c(\u0027p\u0027,{staticStyle:{\"color\":\"blue\"}},[_v(\"Test\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable as HTML element\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027span\u0027,[_v(\"Included variable within HTML element\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable overridden by variables.md\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Global Variable Overriding Included Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variables in included file\")])]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Included variable in outer included file\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable overriding inner variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Inner included variables should not leak into other files\")])]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Should be blank:\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable with global variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable with Global Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks set overridden by include variable and global variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\\nGlobal Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks import overridden by include variable and global variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\\nGlobal Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks set overridden by include variable and global variable in nested include\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\\nGlobal Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks import overridden by include variable and global variable in nested include\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\\nGlobal Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test missing variable with default\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Missing Variable\")])])}"},{"lineNumber":213,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":214,"author":{"gitId":"-"},"content":") {"},{"lineNumber":215,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Variables for includes should not be recognised as page variables, hence, there should be no text between \"),_c(\u0027strong\u0027,[_v(\"this\")])])}"},{"lineNumber":216,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":217,"author":{"gitId":"-"},"content":") {"},{"lineNumber":218,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"and \"),_c(\u0027strong\u0027,[_v(\"this\")]),_v(\".\")])}"},{"lineNumber":219,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":220,"author":{"gitId":"-"},"content":") {"},{"lineNumber":221,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Included variables should not leak into other files\")])])}"},{"lineNumber":222,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":223,"author":{"gitId":"-"},"content":") {"},{"lineNumber":224,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Should be blank:\")])])}"},{"lineNumber":225,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":226,"author":{"gitId":"-"},"content":") {"},{"lineNumber":227,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with shorthand heading syntax\")])])}"},{"lineNumber":228,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":229,"author":{"gitId":"-"},"content":") {"},{"lineNumber":230,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel without src\")])])}"},{"lineNumber":231,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":232,"author":{"gitId":"-"},"content":") {"},{"lineNumber":233,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with normal src\")])])}"},{"lineNumber":234,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":235,"author":{"gitId":"-"},"content":") {"},{"lineNumber":236,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with src from a page segment\")])])}"},{"lineNumber":237,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":238,"author":{"gitId":"-"},"content":") {"},{"lineNumber":239,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with boilerplate\")])])}"},{"lineNumber":240,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":241,"author":{"gitId":"-"},"content":") {"},{"lineNumber":242,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested panel\")])])}"},{"lineNumber":243,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":244,"author":{"gitId":"-"},"content":") {"},{"lineNumber":245,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested panel without src\")])])}"},{"lineNumber":246,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":247,"author":{"gitId":"-"},"content":") {"},{"lineNumber":248,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with src from another MarkBind site\")])])}"},{"lineNumber":249,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":250,"author":{"gitId":"-"},"content":") {"},{"lineNumber":251,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Modal with panel inside\")])])}"},{"lineNumber":252,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":253,"author":{"gitId":"-"},"content":") {"},{"lineNumber":254,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Unexpanded panel\")])])}"},{"lineNumber":255,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":256,"author":{"gitId":"-"},"content":") {"},{"lineNumber":257,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test panel closing transitions\")])])}"},{"lineNumber":258,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":259,"author":{"gitId":"-"},"content":") {"},{"lineNumber":260,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested Panel with height greater than viewport\")])])}"},{"lineNumber":261,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":262,"author":{"gitId":"-"},"content":") {"},{"lineNumber":263,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested Panel with height smaller than viewport\")])])}"},{"lineNumber":264,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":265,"author":{"gitId":"-"},"content":") {"},{"lineNumber":266,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Minimal Panel with height greater than viewport\")])])}"},{"lineNumber":267,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":268,"author":{"gitId":"-"},"content":") {"},{"lineNumber":269,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Minimal Panel with height smaller than viewport\")])])}"},{"lineNumber":270,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":271,"author":{"gitId":"-"},"content":") {"},{"lineNumber":272,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test search indexing\")])])}"},{"lineNumber":273,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":274,"author":{"gitId":"-"},"content":") {"},{"lineNumber":275,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test PlantUML live reload without include\")])])}"},{"lineNumber":276,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":277,"author":{"gitId":"-"},"content":") {"},{"lineNumber":278,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test PlantUML live reload with include\")])])}"},{"lineNumber":279,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":280,"author":{"gitId":"-"},"content":") {"},{"lineNumber":281,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"PlantUML Test\")])])}"},{"lineNumber":282,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":283,"author":{"gitId":"-"},"content":") {"},{"lineNumber":284,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Sequence Diagram\")])])}"},{"lineNumber":285,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":286,"author":{"gitId":"-"},"content":") {"},{"lineNumber":287,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Use Case Diagram\")])])}"},{"lineNumber":288,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":289,"author":{"gitId":"-"},"content":") {"},{"lineNumber":290,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Class Diagram\")])])}"},{"lineNumber":291,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":292,"author":{"gitId":"-"},"content":") {"},{"lineNumber":293,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test PlantUML in sub folder\")])])}"},{"lineNumber":294,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":295,"author":{"gitId":"-"},"content":") {"},{"lineNumber":296,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Activity Diagram\")])])}"},{"lineNumber":297,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":298,"author":{"gitId":"-"},"content":") {"},{"lineNumber":299,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Component Diagram\")])])}"},{"lineNumber":300,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":301,"author":{"gitId":"-"},"content":") {"},{"lineNumber":302,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"State Diagram\")])])}"},{"lineNumber":303,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":304,"author":{"gitId":"-"},"content":") {"},{"lineNumber":305,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Object Diagram\")])])}"},{"lineNumber":306,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":307,"author":{"gitId":"-"},"content":") {"},{"lineNumber":308,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h2\u0027,{staticClass:\"no-index\",attrs:{\"id\":\"level-2-header-inside-headingsearchindex-with-no-index-attribute-should-not-be-indexed\"}},[_v(\"Level 2 header (inside headingSearchIndex) with no-index attribute should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#level-2-header-inside-headingsearchindex-with-no-index-attribute-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":309,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":310,"author":{"gitId":"-"},"content":") {"},{"lineNumber":311,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h6\u0027,{staticClass:\"always-index\",attrs:{\"id\":\"level-6-header-outside-headingsearchindex-with-always-index-attribute-should-be-indexed\"}},[_v(\"Level 6 header (outside headingSearchIndex) with always-index attribute should be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#level-6-header-outside-headingsearchindex-with-always-index-attribute-should-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":312,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":313,"author":{"gitId":"-"},"content":") {"},{"lineNumber":314,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks raw tags\")])])}"},{"lineNumber":315,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":316,"author":{"gitId":"-"},"content":") {"},{"lineNumber":317,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-1-1\"}},[_c(\u0027p\u0027,[_v(\"Here is the footnote. Footnotes will appear at the bottom of the page.\")])])}"},{"lineNumber":318,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":319,"author":{"gitId":"-"},"content":") {"},{"lineNumber":320,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-1-2\"}},[_c(\u0027p\u0027,[_v(\"Here\u0027s one with multiple blocks.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Subsequent paragraphs are indented to show that they\\nbelong to the previous footnote.\")])])}"},{"lineNumber":321,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":322,"author":{"gitId":"-"},"content":") {"},{"lineNumber":323,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-1-3\"}},[_c(\u0027p\u0027,[_v(\"Inlines notes are easier to write, since\\nyou don\u0027t have to pick an identifier and move down to type the\\nnote.\")])])}"},{"lineNumber":324,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":325,"author":{"gitId":"-"},"content":") {"},{"lineNumber":326,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-2-1\"}},[_c(\u0027p\u0027,[_v(\"footnote1\")])])}"},{"lineNumber":327,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":328,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":329,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-2-2\"}},[_c(\u0027p\u0027,[_v(\"footnote2\")])])}"},{"lineNumber":330,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":331,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":332,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027footer\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"heading-in-footer-should-not-be-indexed\"}},[_v(\"Heading in footer should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-in-footer-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"text-center\"},[_v(\"\\n This is a dynamic height footer that supports markdown \"),_c(\u0027span\u0027,[_v(\"😄\")]),_v(\"!\\n \")])])])}"},{"lineNumber":333,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":334,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"-":324,"yiwen101":10}},{"path":"packages/cli/test/functional/test_site/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site/expected/plugins/web3Form/web-3-form.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"LamJiuFong"},"content":".web-3-form input,"},{"lineNumber":2,"author":{"gitId":"LamJiuFong"},"content":".web-3-form select,"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":".web-3-form textarea {"},{"lineNumber":4,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding: 12px;"},{"lineNumber":6,"author":{"gitId":"-"},"content":" border: 1px solid #ccc;"},{"lineNumber":7,"author":{"gitId":"-"},"content":" border-radius: 4px;"},{"lineNumber":8,"author":{"gitId":"-"},"content":" box-sizing: border-box;"},{"lineNumber":9,"author":{"gitId":"-"},"content":" margin-top: 6px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" margin-bottom: 16px;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" resize: vertical;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":3,"-":9}},{"path":"packages/cli/test/functional/test_site/expected/siteData.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"enableSearch\": true,"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":4,"author":{"gitId":"-"},"content":" {"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"src\": \"bugs/index.md\","},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"title\": \"Open Bugs\","},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":9,"author":{"gitId":"-"},"content":" },"},{"lineNumber":10,"author":{"gitId":"-"},"content":" {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"panel-with-heading\": \"Panel with heading\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"panel-without-heading-with-keyword\": \"Panel without heading with keyword\","},{"lineNumber":16,"author":{"gitId":"-"},"content":" \"panel-with-heading-with-keyword\": \"Panel with heading with keyword\","},{"lineNumber":17,"author":{"gitId":"-"},"content":" \"panel-without-src-header\": \"Panel without src header\","},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"panel-with-normal-src-header\": \"Panel with normal src header\","},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"panel-with-src-from-a-page-segment-header\": \"Panel with src from a page segment header\","},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"boilerplate-referencing\": \"Boilerplate referencing\","},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"boilerplate-referencing-2\": \"Boilerplate referencing 2\","},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"referencing-specified-path-in-boilerplate\": \"Referencing specified path in boilerplate\","},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"outer-nested-panel\": \"Outer nested panel\","},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"outer-nested-panel-without-src\": \"Outer nested panel without src\","},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"panel-with-src-from-another-markbind-site-header\": \"Panel with src from another MarkBind site header\","},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"panel-with-src-from-another-markbind-site-header-2\": \"Panel with src from another MarkBind site header\","},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"unexpanded-panel-header\": \"Unexpanded panel header\","},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"keyword-should-be-tagged-to-this-heading-not-the-panel-heading\": \"Keyword should be tagged to this heading, not the panel heading\","},{"lineNumber":29,"author":{"gitId":"-"},"content":" \"panel-normal-source-content-headings\": \"Panel normal source content headings\","},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"panel-source-segment-content-headings\": \"Panel source segment content headings\","},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"boilerplate-test-for-panel-heading\": \"boilerplate test for panel heading\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"heading-in-panel-boilerplate\": \"heading in panel boilerplate\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"nested-panel\": \"Nested Panel\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"normal-panel-content-heading\": \"Normal panel content heading\","},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"inner-panel-header-without-src\": \"Inner panel header without src\","},{"lineNumber":36,"author":{"gitId":"-"},"content":" \"feature-list\": \"Feature list\","},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"heading-with-multiple-keywords\": \"Heading with multiple keywords\","},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"heading-with-keyword-in-panel\": \"Heading with keyword in panel\","},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"heading-fragment-with-leading-spaces-and-newline\": \"Heading \\nFragment with leading spaces and newline\\n\","},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"heading-with-included-keyword\": \"Heading with included keyword\","},{"lineNumber":41,"author":{"gitId":"-"},"content":" \"included-heading\": \"Included Heading\","},{"lineNumber":42,"author":{"gitId":"-"},"content":" \"heading-with-nested-keyword\": \"Heading with nested keyword\","},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"heading-with-hidden-keyword\": \"Heading with hidden keyword\","},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"establishing-requirements\": \"Establishing Requirements\","},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"brainstorming\": \"Brainstorming\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"user-surveys\": \"User surveys\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"focus-groups\": \"Focus groups\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"path-within-the-boilerplate-folder-is-separately-specified\": \"Path within the boilerplate folder is separately specified\","},{"lineNumber":49,"author":{"gitId":"-"},"content":" \"level-6-header-outside-headingsearchindex-with-always-index-attribute-should-be-indexed\": \"Level 6 header (outside headingSearchIndex) with always-index attribute should be indexed\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" },"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"headingKeywords\": {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \"heading-with-keyword-in-panel\": ["},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"panel keyword\""},{"lineNumber":54,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \"panel-with-heading\": ["},{"lineNumber":56,"author":{"gitId":"-"},"content":" \"panel keyword\""},{"lineNumber":57,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \"keyword-should-be-tagged-to-this-heading-not-the-panel-heading\": ["},{"lineNumber":59,"author":{"gitId":"-"},"content":" \"panel keyword\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \"panel-with-heading-with-keyword\": ["},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"panel keyword\""},{"lineNumber":63,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \"heading-with-multiple-keywords\": ["},{"lineNumber":65,"author":{"gitId":"-"},"content":" \"keyword 1\","},{"lineNumber":66,"author":{"gitId":"-"},"content":" \"keyword 2\""},{"lineNumber":67,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \"heading-with-included-keyword\": ["},{"lineNumber":69,"author":{"gitId":"-"},"content":" \"included keyword\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"included-heading\": ["},{"lineNumber":72,"author":{"gitId":"-"},"content":" \"Keyword with included heading\""},{"lineNumber":73,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \"heading-with-nested-keyword\": ["},{"lineNumber":75,"author":{"gitId":"-"},"content":" \"nested keyword\""},{"lineNumber":76,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \"heading-with-hidden-keyword\": ["},{"lineNumber":78,"author":{"gitId":"-"},"content":" \"invisible keyword\""},{"lineNumber":79,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":" },"},{"lineNumber":82,"author":{"gitId":"-"},"content":" {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \"src\": \"sub_site/index.md\","},{"lineNumber":84,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" \"feature-list\": \"Feature list\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" },"},{"lineNumber":87,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":88,"author":{"gitId":"-"},"content":" },"},{"lineNumber":89,"author":{"gitId":"-"},"content":" {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \"src\": \"sub_site/nested_sub_site/index.md\","},{"lineNumber":91,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":92,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":93,"author":{"gitId":"-"},"content":" },"},{"lineNumber":94,"author":{"gitId":"-"},"content":" {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" \"src\": \"test_md_fragment.md\","},{"lineNumber":96,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \"some-heading\": \"Some heading\""},{"lineNumber":98,"author":{"gitId":"-"},"content":" },"},{"lineNumber":99,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":100,"author":{"gitId":"-"},"content":" },"},{"lineNumber":101,"author":{"gitId":"-"},"content":" {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \"src\": \"testEmptyFrontmatter.md\","},{"lineNumber":103,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":104,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":106,"author":{"gitId":"-"},"content":" },"},{"lineNumber":107,"author":{"gitId":"-"},"content":" {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" \"src\": \"testLayoutsOverride.md\","},{"lineNumber":109,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":110,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":111,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":112,"author":{"gitId":"-"},"content":" },"},{"lineNumber":113,"author":{"gitId":"-"},"content":" {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \"src\": \"testEmptyAltFrontMatter.md\","},{"lineNumber":115,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":116,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":117,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":118,"author":{"gitId":"-"},"content":" },"},{"lineNumber":119,"author":{"gitId":"-"},"content":" {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" \"src\": \"testLayoutsOverrideWithAltFrontmatter.md\","},{"lineNumber":121,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":122,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":123,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":124,"author":{"gitId":"-"},"content":" },"},{"lineNumber":125,"author":{"gitId":"-"},"content":" {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \"src\": \"testAltFrontMatterInvalidKeyValue.md\","},{"lineNumber":127,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":128,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":130,"author":{"gitId":"-"},"content":" },"},{"lineNumber":131,"author":{"gitId":"-"},"content":" {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \"src\": \"testSingleAltFrontMatter.md\","},{"lineNumber":133,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":134,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":135,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":136,"author":{"gitId":"-"},"content":" },"},{"lineNumber":137,"author":{"gitId":"-"},"content":" {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" \"src\": \"testAltFrontMatterParsing.md\","},{"lineNumber":139,"author":{"gitId":"-"},"content":" \"title\": \"new title\","},{"lineNumber":140,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":141,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":142,"author":{"gitId":"-"},"content":" },"},{"lineNumber":143,"author":{"gitId":"-"},"content":" {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" \"src\": \"testExternalScripts.md\","},{"lineNumber":145,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":146,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":147,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":148,"author":{"gitId":"-"},"content":" },"},{"lineNumber":149,"author":{"gitId":"-"},"content":" {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" \"src\": \"testLayouts.md\","},{"lineNumber":151,"author":{"gitId":"-"},"content":" \"title\": \"Test nunjucks path resolving\","},{"lineNumber":152,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":153,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":154,"author":{"gitId":"-"},"content":" },"},{"lineNumber":155,"author":{"gitId":"-"},"content":" {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" \"src\": \"testLayoutsWithAltFrontMatter.md\","},{"lineNumber":157,"author":{"gitId":"-"},"content":" \"title\": \"Test nunjucks path resolving\","},{"lineNumber":158,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":159,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":160,"author":{"gitId":"-"},"content":" },"},{"lineNumber":161,"author":{"gitId":"-"},"content":" {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" \"src\": \"testNunjucksPathResolving.md\","},{"lineNumber":163,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":164,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":165,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":166,"author":{"gitId":"-"},"content":" },"},{"lineNumber":167,"author":{"gitId":"-"},"content":" {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" \"src\": \"sub_site/testNunjucksPathResolving.md\","},{"lineNumber":169,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":170,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":171,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":172,"author":{"gitId":"-"},"content":" },"},{"lineNumber":173,"author":{"gitId":"-"},"content":" {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" \"src\": \"sub_site/nested_sub_site/testNunjucksPathResolving.md\","},{"lineNumber":175,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":176,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":177,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":178,"author":{"gitId":"-"},"content":" },"},{"lineNumber":179,"author":{"gitId":"-"},"content":" {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" \"src\": \"testAntiFOUCStyles.md\","},{"lineNumber":181,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":182,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":183,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":184,"author":{"gitId":"-"},"content":" },"},{"lineNumber":185,"author":{"gitId":"-"},"content":" {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \"src\": \"testAnchorGeneration.md\","},{"lineNumber":187,"author":{"gitId":"-"},"content":" \"title\": \"Anchor Generation Test\","},{"lineNumber":188,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \"should-have-anchor-7\": \"should have anchor\","},{"lineNumber":190,"author":{"gitId":"-"},"content":" \"should-have-anchor-20\": \"should have anchor\","},{"lineNumber":191,"author":{"gitId":"-"},"content":" \"should-have-anchor-8\": \"should have anchor\","},{"lineNumber":192,"author":{"gitId":"-"},"content":" \"should-have-anchor-9\": \"should have anchor\","},{"lineNumber":193,"author":{"gitId":"-"},"content":" \"should-have-anchor-10\": \"should have anchor\","},{"lineNumber":194,"author":{"gitId":"-"},"content":" \"should-have-anchor-11\": \"should have anchor\","},{"lineNumber":195,"author":{"gitId":"-"},"content":" \"should-have-anchor-21\": \"should have anchor\","},{"lineNumber":196,"author":{"gitId":"-"},"content":" \"should-have-anchor-22\": \"should have anchor\","},{"lineNumber":197,"author":{"gitId":"-"},"content":" \"should-have-anchor-23\": \"should have anchor\","},{"lineNumber":198,"author":{"gitId":"-"},"content":" \"should-have-anchor-24\": \"should have anchor\","},{"lineNumber":199,"author":{"gitId":"-"},"content":" \"root-file\": \"Root file\","},{"lineNumber":200,"author":{"gitId":"-"},"content":" \"should-have-anchor\": \"should have anchor\","},{"lineNumber":201,"author":{"gitId":"-"},"content":" \"should-have-anchor-2\": \"should have anchor\","},{"lineNumber":202,"author":{"gitId":"-"},"content":" \"should-have-anchor-3\": \"should have anchor\","},{"lineNumber":203,"author":{"gitId":"-"},"content":" \"should-have-anchor-4\": \"should have anchor\","},{"lineNumber":204,"author":{"gitId":"-"},"content":" \"included-file\": \"Included File\","},{"lineNumber":205,"author":{"gitId":"-"},"content":" \"should-have-anchor-14\": \"should have anchor\","},{"lineNumber":206,"author":{"gitId":"-"},"content":" \"should-have-anchor-15\": \"should have anchor\","},{"lineNumber":207,"author":{"gitId":"-"},"content":" \"should-have-anchor-16\": \"should have anchor\","},{"lineNumber":208,"author":{"gitId":"-"},"content":" \"should-have-anchor-17\": \"should have anchor\""},{"lineNumber":209,"author":{"gitId":"-"},"content":" },"},{"lineNumber":210,"author":{"gitId":"-"},"content":" \"headingKeywords\": {},"},{"lineNumber":211,"author":{"gitId":"-"},"content":" \"frontmatterKeywords\": \"testFrontmatterKeywords\""},{"lineNumber":212,"author":{"gitId":"-"},"content":" },"},{"lineNumber":213,"author":{"gitId":"-"},"content":" {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" \"src\": \"testAnnotate.md\","},{"lineNumber":215,"author":{"gitId":"-"},"content":" \"title\": \"Annotate Feature Test\","},{"lineNumber":216,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" \"content\": \"Content\""},{"lineNumber":218,"author":{"gitId":"-"},"content":" },"},{"lineNumber":219,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":220,"author":{"gitId":"-"},"content":" },"},{"lineNumber":221,"author":{"gitId":"-"},"content":" {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" \"src\": \"testTooltipSpacing.md\","},{"lineNumber":223,"author":{"gitId":"-"},"content":" \"title\": \"Tooltip Spacing Test\","},{"lineNumber":224,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" \"569-stray-space-after-tooltip\": \"569: Stray space after tooltip\""},{"lineNumber":226,"author":{"gitId":"-"},"content":" },"},{"lineNumber":227,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":228,"author":{"gitId":"-"},"content":" },"},{"lineNumber":229,"author":{"gitId":"-"},"content":" {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" \"src\": \"testThumbnails.md\","},{"lineNumber":231,"author":{"gitId":"-"},"content":" \"title\": \"Thumbnails Test\","},{"lineNumber":232,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":233,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":234,"author":{"gitId":"-"},"content":" },"},{"lineNumber":235,"author":{"gitId":"-"},"content":" {"},{"lineNumber":236,"author":{"gitId":"-"},"content":" \"src\": \"testPlantUML.md\","},{"lineNumber":237,"author":{"gitId":"-"},"content":" \"title\": \"PlantUML Test\","},{"lineNumber":238,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":239,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":240,"author":{"gitId":"-"},"content":" },"},{"lineNumber":241,"author":{"gitId":"-"},"content":" {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" \"src\": \"testCodeBlocks.md\","},{"lineNumber":243,"author":{"gitId":"-"},"content":" \"title\": \"Test: Code Blocks\","},{"lineNumber":244,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":245,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":246,"author":{"gitId":"-"},"content":" },"},{"lineNumber":247,"author":{"gitId":"-"},"content":" {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" \"src\": \"testIncludePluginsRendered.md\","},{"lineNumber":249,"author":{"gitId":"-"},"content":" \"title\": \"Included files should have plugins rendered on them\","},{"lineNumber":250,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":251,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":252,"author":{"gitId":"-"},"content":" },"},{"lineNumber":253,"author":{"gitId":"-"},"content":" {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" \"src\": \"testIncludeMultipleModals.md\","},{"lineNumber":255,"author":{"gitId":"-"},"content":" \"title\": \"Multiple inclusions of a modal should be supported\","},{"lineNumber":256,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":257,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":258,"author":{"gitId":"-"},"content":" },"},{"lineNumber":259,"author":{"gitId":"-"},"content":" {"},{"lineNumber":260,"author":{"gitId":"-"},"content":" \"src\": \"testPopovers.md\","},{"lineNumber":261,"author":{"gitId":"-"},"content":" \"title\": \"Test: Popovers\","},{"lineNumber":262,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" \"nested-panel\": \"Nested Panel\","},{"lineNumber":264,"author":{"gitId":"-"},"content":" \"normal-panel-content-heading\": \"Normal panel content heading\","},{"lineNumber":265,"author":{"gitId":"-"},"content":" \"some-heading\": \"Some heading\","},{"lineNumber":266,"author":{"gitId":"-"},"content":" \"some-heading-2\": \"Some heading\""},{"lineNumber":267,"author":{"gitId":"-"},"content":" },"},{"lineNumber":268,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":269,"author":{"gitId":"-"},"content":" },"},{"lineNumber":270,"author":{"gitId":"-"},"content":" {"},{"lineNumber":271,"author":{"gitId":"-"},"content":" \"src\": \"testPopoverTrigger.md\","},{"lineNumber":272,"author":{"gitId":"-"},"content":" \"title\": \"Popover initiated by trigger should honor trigger attribute\","},{"lineNumber":273,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":274,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":275,"author":{"gitId":"-"},"content":" },"},{"lineNumber":276,"author":{"gitId":"-"},"content":" {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" \"src\": \"testModals.md\","},{"lineNumber":278,"author":{"gitId":"-"},"content":" \"title\": \"Test: Modals\","},{"lineNumber":279,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":280,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":281,"author":{"gitId":"-"},"content":" },"},{"lineNumber":282,"author":{"gitId":"-"},"content":" {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" \"src\": \"testDates.md\","},{"lineNumber":284,"author":{"gitId":"-"},"content":" \"title\": \"Nunjucks date filter tests\","},{"lineNumber":285,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" \"dates\": \"Dates\""},{"lineNumber":287,"author":{"gitId":"-"},"content":" },"},{"lineNumber":288,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":289,"author":{"gitId":"-"},"content":" },"},{"lineNumber":290,"author":{"gitId":"-"},"content":" {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" \"src\": \"testVariableContainsInclude.md\","},{"lineNumber":292,"author":{"gitId":"-"},"content":" \"title\": \"Variable should be able to store included content fragments\","},{"lineNumber":293,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" \"content-fragment\": \"content fragment\""},{"lineNumber":295,"author":{"gitId":"-"},"content":" },"},{"lineNumber":296,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":297,"author":{"gitId":"-"},"content":" },"},{"lineNumber":298,"author":{"gitId":"-"},"content":" {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" \"src\": \"testIncludeBoilerplate.md\","},{"lineNumber":300,"author":{"gitId":"-"},"content":" \"title\": \"Content inside \u003cinclude\u003e should not be processed by markdown\","},{"lineNumber":301,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":302,"author":{"gitId":"-"},"content":" \"hello\": \"hello\""},{"lineNumber":303,"author":{"gitId":"-"},"content":" },"},{"lineNumber":304,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":305,"author":{"gitId":"-"},"content":" },"},{"lineNumber":306,"author":{"gitId":"-"},"content":" {"},{"lineNumber":307,"author":{"gitId":"-"},"content":" \"src\": \"testPanels.md\","},{"lineNumber":308,"author":{"gitId":"-"},"content":" \"title\": \"Test: Panels\","},{"lineNumber":309,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":310,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":311,"author":{"gitId":"-"},"content":" },"},{"lineNumber":312,"author":{"gitId":"-"},"content":" {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" \"src\": \"testPanelMarkdownParsing.md\","},{"lineNumber":314,"author":{"gitId":"-"},"content":" \"title\": \"markdown-it should parse minimized panel as inline element and normal panel as block element\","},{"lineNumber":315,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":316,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":317,"author":{"gitId":"-"},"content":" },"},{"lineNumber":318,"author":{"gitId":"-"},"content":" {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" \"src\": \"testCenterText.md\","},{"lineNumber":320,"author":{"gitId":"-"},"content":" \"title\": \"Center-aligned text test\","},{"lineNumber":321,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" \"center-text\": \"Center Text\""},{"lineNumber":323,"author":{"gitId":"-"},"content":" },"},{"lineNumber":324,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":325,"author":{"gitId":"-"},"content":" },"},{"lineNumber":326,"author":{"gitId":"-"},"content":" {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" \"src\": \"testHr.md\","},{"lineNumber":328,"author":{"gitId":"-"},"content":" \"title\": \"create different types of horizontal rules\","},{"lineNumber":329,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" \"different-types-of-horizontal-rules\": \"Different types of horizontal rules\""},{"lineNumber":331,"author":{"gitId":"-"},"content":" },"},{"lineNumber":332,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":333,"author":{"gitId":"-"},"content":" },"},{"lineNumber":334,"author":{"gitId":"-"},"content":" {"},{"lineNumber":335,"author":{"gitId":"-"},"content":" \"src\": \"testPageNav.md\","},{"lineNumber":336,"author":{"gitId":"-"},"content":" \"title\": \"text interpolation should be skipped appropriately\","},{"lineNumber":337,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":338,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":339,"author":{"gitId":"-"},"content":" },"},{"lineNumber":340,"author":{"gitId":"-"},"content":" {"},{"lineNumber":341,"author":{"gitId":"-"},"content":" \"src\": \"testPanelsClosingTransition.md\","},{"lineNumber":342,"author":{"gitId":"-"},"content":" \"title\": \"Test: Panels closing transition\","},{"lineNumber":343,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":344,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":345,"author":{"gitId":"-"},"content":" },"},{"lineNumber":346,"author":{"gitId":"-"},"content":" {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" \"src\": \"testLinks.md\","},{"lineNumber":348,"author":{"gitId":"-"},"content":" \"title\": \"Autolink tests\","},{"lineNumber":349,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":350,"author":{"gitId":"-"},"content":" \"autolinks\": \"Autolinks\""},{"lineNumber":351,"author":{"gitId":"-"},"content":" },"},{"lineNumber":352,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":353,"author":{"gitId":"-"},"content":" },"},{"lineNumber":354,"author":{"gitId":"-"},"content":" {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" \"src\": \"testTree.md\","},{"lineNumber":356,"author":{"gitId":"-"},"content":" \"title\": \"Tree tests\","},{"lineNumber":357,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" \"tree\": \"Tree\","},{"lineNumber":359,"author":{"gitId":"-"},"content":" \"single-tree\": \"Single Tree\","},{"lineNumber":360,"author":{"gitId":"-"},"content":" \"multiple-tree\": \"Multiple Tree\","},{"lineNumber":361,"author":{"gitId":"-"},"content":" \"inline-markdown\": \"Inline Markdown\""},{"lineNumber":362,"author":{"gitId":"-"},"content":" },"},{"lineNumber":363,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":364,"author":{"gitId":"-"},"content":" },"},{"lineNumber":365,"author":{"gitId":"-"},"content":" {"},{"lineNumber":366,"author":{"gitId":"-"},"content":" \"src\": \"testMath.md\","},{"lineNumber":367,"author":{"gitId":"-"},"content":" \"title\": \"Math formulae should be displayed correctly, with additional plugin\","},{"lineNumber":368,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" \"math-formulae\": \"Math Formulae\","},{"lineNumber":370,"author":{"gitId":"-"},"content":" \"markbind-supports-typesetting-tex-math-equations\": \"Markbind supports typesetting TeX math equations\","},{"lineNumber":371,"author":{"gitId":"-"},"content":" \"additional-delimiters-can-be-used-if-mathdelimiters-plugin-is-enabled\": \"Additional delimiters can be used if mathDelimiters plugin is enabled\""},{"lineNumber":372,"author":{"gitId":"-"},"content":" },"},{"lineNumber":373,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":374,"author":{"gitId":"-"},"content":" },"},{"lineNumber":375,"author":{"gitId":"-"},"content":" {"},{"lineNumber":376,"author":{"gitId":"-"},"content":" \"src\": \"testImages.md\","},{"lineNumber":377,"author":{"gitId":"-"},"content":" \"title\": \"Rendering of images according to specified dimension and auto-linkify ability\","},{"lineNumber":378,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":379,"author":{"gitId":"-"},"content":" \"images\": \"Images\","},{"lineNumber":380,"author":{"gitId":"-"},"content":" \"alt\": \"Alt\","},{"lineNumber":381,"author":{"gitId":"-"},"content":" \"dimension\": \"Dimension\","},{"lineNumber":382,"author":{"gitId":"-"},"content":" \"linkify\": \"Linkify\""},{"lineNumber":383,"author":{"gitId":"-"},"content":" },"},{"lineNumber":384,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":385,"author":{"gitId":"-"},"content":" },"},{"lineNumber":386,"author":{"gitId":"-"},"content":" {"},{"lineNumber":387,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavTarget.md\","},{"lineNumber":388,"author":{"gitId":"-"},"content":" \"title\": \"Bootstrap scrollspy related classes should be applied only if there are navigable headings\","},{"lineNumber":389,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":390,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":391,"author":{"gitId":"-"},"content":" },"},{"lineNumber":392,"author":{"gitId":"-"},"content":" {"},{"lineNumber":393,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavWithoutTitleAndNavHeadings.md\","},{"lineNumber":394,"author":{"gitId":"-"},"content":" \"title\": \"page nav separator should be omitted when there is no title and navigation headings added\","},{"lineNumber":395,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":396,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":397,"author":{"gitId":"-"},"content":" },"},{"lineNumber":398,"author":{"gitId":"-"},"content":" {"},{"lineNumber":399,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavWithOnlyTitle.md\","},{"lineNumber":400,"author":{"gitId":"-"},"content":" \"title\": \"page nav with title added\","},{"lineNumber":401,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":402,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":403,"author":{"gitId":"-"},"content":" },"},{"lineNumber":404,"author":{"gitId":"-"},"content":" {"},{"lineNumber":405,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavPrint.md\","},{"lineNumber":406,"author":{"gitId":"-"},"content":" \"title\": \"printing page nav\","},{"lineNumber":407,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" \"h1\": \"H1\","},{"lineNumber":409,"author":{"gitId":"-"},"content":" \"h2\": \"H2\""},{"lineNumber":410,"author":{"gitId":"-"},"content":" },"},{"lineNumber":411,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":412,"author":{"gitId":"-"},"content":" },"},{"lineNumber":413,"author":{"gitId":"-"},"content":" {"},{"lineNumber":414,"author":{"gitId":"-"},"content":" \"src\": \"testWeb3FormPlugin.md\","},{"lineNumber":415,"author":{"gitId":"-"},"content":" \"title\": \"web 3 forms\","},{"lineNumber":416,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":417,"author":{"gitId":"-"},"content":" \"i-am-a-header\": \"🚀 I am a header\""},{"lineNumber":418,"author":{"gitId":"-"},"content":" },"},{"lineNumber":419,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":420,"author":{"gitId":"-"},"content":" },"},{"lineNumber":421,"author":{"gitId":"-"},"content":" {"},{"lineNumber":422,"author":{"gitId":"-"},"content":" \"src\": \"testList.md\","},{"lineNumber":423,"author":{"gitId":"-"},"content":" \"title\": \"web 3 forms\","},{"lineNumber":424,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":425,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":426,"author":{"gitId":"-"},"content":" },"},{"lineNumber":427,"author":{"gitId":"-"},"content":" {"},{"lineNumber":428,"author":{"gitId":"-"},"content":" \"src\": \"testFontAwesomeInPage.md\","},{"lineNumber":429,"author":{"gitId":"-"},"content":" \"title\": \"font-awesome icon in page, only font-awesome stylesheet should be loaded\","},{"lineNumber":430,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":431,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":432,"author":{"gitId":"-"},"content":" },"},{"lineNumber":433,"author":{"gitId":"-"},"content":" {"},{"lineNumber":434,"author":{"gitId":"-"},"content":" \"src\": \"testGlyphiconInPage.md\","},{"lineNumber":435,"author":{"gitId":"-"},"content":" \"title\": \"glyphicon icon in page, only glyphicon stylesheet should be loaded\","},{"lineNumber":436,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":437,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":438,"author":{"gitId":"-"},"content":" },"},{"lineNumber":439,"author":{"gitId":"-"},"content":" {"},{"lineNumber":440,"author":{"gitId":"-"},"content":" \"src\": \"testMaterialIconsInPage.md\","},{"lineNumber":441,"author":{"gitId":"-"},"content":" \"title\": \"material-icons icon in page, only material-icons stylesheet should be loaded\","},{"lineNumber":442,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":443,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":444,"author":{"gitId":"-"},"content":" },"},{"lineNumber":445,"author":{"gitId":"-"},"content":" {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" \"src\": \"testOcticonInPage.md\","},{"lineNumber":447,"author":{"gitId":"-"},"content":" \"title\": \"octicon icon in page, only octicon stylesheet should be loaded\","},{"lineNumber":448,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":449,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":450,"author":{"gitId":"-"},"content":" },"},{"lineNumber":451,"author":{"gitId":"-"},"content":" {"},{"lineNumber":452,"author":{"gitId":"-"},"content":" \"src\": \"testIconsInSiteLayout.md\","},{"lineNumber":453,"author":{"gitId":"-"},"content":" \"title\": \"glyphicon \u0026 octicon icon in page, only glyphicon \u0026 octicon stylesheets should be loaded\","},{"lineNumber":454,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":455,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":456,"author":{"gitId":"yiwen101"},"content":" },"},{"lineNumber":457,"author":{"gitId":"yiwen101"},"content":" {"},{"lineNumber":458,"author":{"gitId":"yiwen101"},"content":" \"src\": \"testSourceContainScript.md\","},{"lineNumber":459,"author":{"gitId":"yiwen101"},"content":" \"title\": \"Test: If source contains script or css, when included, the script or css should be included\","},{"lineNumber":460,"author":{"gitId":"yiwen101"},"content":" \"headings\": {"},{"lineNumber":461,"author":{"gitId":"yiwen101"},"content":" \"panel-with-src-that-contains-css-and-script-header\": \"Panel with src that contains css and script header\","},{"lineNumber":462,"author":{"gitId":"yiwen101"},"content":" \"h1-text\": \"\\n\\n\\n h1 text\\n \\n\""},{"lineNumber":463,"author":{"gitId":"yiwen101"},"content":" },"},{"lineNumber":464,"author":{"gitId":"yiwen101"},"content":" \"headingKeywords\": {}"},{"lineNumber":465,"author":{"gitId":"-"},"content":" }"},{"lineNumber":466,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":467,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"-":458,"yiwen101":9}},{"path":"packages/cli/test/functional/test_site/expected/stylesheets/styles.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: auto;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" margin-left: 60px;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":113,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":124,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":135,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":137}},{"path":"packages/cli/test/functional/test_site/expected/testList.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027div\u0027,[_c(\u0027header\u0027,[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\",\"default-highlight-on\":\"sibling-or-child\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\",\"title\":\"Home\"}},[_v(\"MarkBind Test Site\")])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs\")])])]),_v(\" \"),_m(0)],1),_v(\" \"),_m(1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_c(\u0027div\u0027,[_c(\u0027h2\u0027,{attrs:{\"id\":\"default-layout\"}},[_v(\"Default Layout\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#default-layout\",\"onclick\":\"event.stopPropagation()\"}})])])])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027div\u0027,[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs 🐛\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_c(\u0027h3\u0027,{attrs:{\"id\":\"testing-site-nav\"}},[_v(\"Testing Site-Nav\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-site-nav\",\"onclick\":\"event.stopPropagation()\"}})])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027strong\u0027,[_v(\"Dropdown \")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-search\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" title ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Html within site-nav \"),_c(\u0027span\u0027,{staticStyle:{\"color\":\"red\"}},[_v(\"should\")]),_v(\" be displayed properly\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown title 📐\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027mark\u0027,[_v(\"Third Link\")]),_v(\" 📋\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Filler text \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-facetime-video\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" Youtube 📺\")]),_v(\" filler text\"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/watch?v\u003ddQw4w9WgXcQ\"}},[_v(\"The answer to everything in the universe\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027mark\u0027,[_v(\"Dropdown title\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-comment\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown Title\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Hello Doge Hello Doge 🐶\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_c(\u0027strong\u0027,[_v(\"NESTED LINK\")]),_v(\" Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Test line break in navigation layout\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Nested line break text ✂️\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Nested line break href\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Nested Nested line break text ✂️\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested line break dropdown menu\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Line break item 2 📘\")])])])])])])],1)],1)])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7),_v(\" \"),_m(8),_v(\" \"),_m(9),_v(\" \"),_m(10),_v(\" \"),_m(11),_v(\" \"),_m(12),_v(\" \"),_m(13),_v(\" \"),_m(14),_v(\" \"),_m(15),_v(\" \"),_m(16),_v(\" \"),_m(17),_v(\" \"),_m(18),_v(\" \"),_m(19),_v(\" \"),_m(20),_v(\" \"),_m(21),_v(\" \"),_m(22),_v(\" \"),_m(23),_v(\" \"),_m(24),_v(\" \"),_m(25),_v(\" \"),_m(26),_v(\" \"),_m(27),_v(\" \"),_m(28),_v(\" \"),_m(29),_v(\" \"),_m(30),_v(\" \"),_m(31),_v(\" \"),_m(32),_v(\" \"),_m(33),_v(\" \"),_m(34),_v(\" \"),_m(35),_v(\" \"),_m(36),_v(\" \"),_m(37),_v(\" \"),_m(38),_v(\" \"),_m(39),_v(\" \"),_m(40),_v(\" \"),_m(41),_v(\" \"),_m(42),_v(\" \"),_m(43),_v(\" \"),_m(44),_v(\" \"),_m(45),_v(\" \"),_m(46),_v(\" \"),_m(47),_v(\" \"),_m(48),_v(\" \"),_m(49),_v(\" \"),_m(50),_v(\" \"),_m(51),_v(\" \"),_m(52),_v(\" \"),_m(53),_v(\" \"),_m(54),_v(\" \"),_m(55),_v(\" \"),_m(56),_v(\" \"),_m(57),_v(\" \"),_m(58),_v(\" \"),_m(59),_v(\" \"),_m(60),_v(\" \"),_m(61),_v(\" \"),_m(62),_v(\" \"),_m(63),_v(\" \"),_m(64),_v(\" \"),_m(65)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(66)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"bg-info display-4 text-center text-white\"},[_c(\u0027br\u0027),_v(\"\\n Test Jumbotron\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027br\u0027)])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Relative Link Test\")]),_v(\" This is a relative Intra-Site link in a layout (see \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html#heading-with-hidden-keyword\"}},[_v(\"link\")]),_v(\")\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item\")])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"-"},"content":") {"},{"lineNumber":17,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Only 1 item\")])])}"},{"lineNumber":18,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"-"},"content":") {"},{"lineNumber":20,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item with customization icon\")])])}"},{"lineNumber":21,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"-"},"content":") {"},{"lineNumber":23,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])}"},{"lineNumber":24,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"-"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item with once customization\")])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item with customization text\")])])}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"-"},"content":") {"},{"lineNumber":35,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"-"},"content":") {"},{"lineNumber":38,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item + nested list\")])])}"},{"lineNumber":39,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"-"},"content":") {"},{"lineNumber":41,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Only 1 item\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Only 1 item\")])])])])}"},{"lineNumber":42,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"-"},"content":") {"},{"lineNumber":44,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item + nested list with icon customization\")])])}"},{"lineNumber":45,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":46,"author":{"gitId":"-"},"content":") {"},{"lineNumber":47,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])])])])}"},{"lineNumber":48,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":49,"author":{"gitId":"-"},"content":") {"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item + nested list with once customization\")])])}"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])])])])}"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":56,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item + nested list with text customization\")])])}"},{"lineNumber":57,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":58,"author":{"gitId":"-"},"content":") {"},{"lineNumber":59,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1.1\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])])])])}"},{"lineNumber":60,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":61,"author":{"gitId":"-"},"content":") {"},{"lineNumber":62,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Basic structure\")])])}"},{"lineNumber":63,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":64,"author":{"gitId":"-"},"content":") {"},{"lineNumber":65,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])])}"},{"lineNumber":66,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":67,"author":{"gitId":"-"},"content":") {"},{"lineNumber":68,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Icon inheritance test\")])])}"},{"lineNumber":69,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":70,"author":{"gitId":"-"},"content":") {"},{"lineNumber":71,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":72,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":73,"author":{"gitId":"-"},"content":") {"},{"lineNumber":74,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Text inheritance test\")])])}"},{"lineNumber":75,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":76,"author":{"gitId":"-"},"content":") {"},{"lineNumber":77,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"First layer\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"First layer\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Second layer\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Second layer\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Second layer\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Third layer\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Third layer\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Second layer\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":78,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":79,"author":{"gitId":"-"},"content":") {"},{"lineNumber":80,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"First item no customization test\")])])}"},{"lineNumber":81,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":82,"author":{"gitId":"-"},"content":") {"},{"lineNumber":83,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"./images/deer.jpg\",\"text\":\"First\"}},[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"fas-file-code\",\"text\":\"Should not be appearing\"}},[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.1\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"./images/deer.jpg\",\"i-width\":\"50px\",\"text\":\"Should not be appearing\"}},[_v(\"Sub-sub-item B3.2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])])}"},{"lineNumber":84,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":85,"author":{"gitId":"-"},"content":") {"},{"lineNumber":86,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Correct first item customization test\")])])}"},{"lineNumber":87,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":88,"author":{"gitId":"-"},"content":") {"},{"lineNumber":89,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":90,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":91,"author":{"gitId":"-"},"content":") {"},{"lineNumber":92,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Testing with various icon attributes\")])])}"},{"lineNumber":93,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":94,"author":{"gitId":"-"},"content":") {"},{"lineNumber":95,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticClass:\"text-warning\",staticStyle:{\"width\":\"200px\",\"height\":\"100px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Hi\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"2rem\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Hi\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"2rem\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Hi\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"height\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"height\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,{attrs:{\"i-class\":\"text-danger\"}},[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"1rem\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Hi\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":96,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":97,"author":{"gitId":"-"},"content":") {"},{"lineNumber":98,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Testing with various text attributes\")])])}"},{"lineNumber":99,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":100,"author":{"gitId":"-"},"content":") {"},{"lineNumber":101,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-primary\",staticStyle:{\"font-size\":\"20px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-warning\",staticStyle:{\"font-size\":\"20px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 2\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,{attrs:{\"t-class\":\"text-danger\"}},[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":102,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":103,"author":{"gitId":"-"},"content":") {"},{"lineNumber":104,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Mixing text and icon\")])])}"},{"lineNumber":105,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":106,"author":{"gitId":"-"},"content":") {"},{"lineNumber":107,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticClass:\"text-primary\",staticStyle:{\"font-size\":\"20px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticClass:\"text-warning\",staticStyle:{\"font-size\":\"20px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 2\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"20px\",\"height\":\"20px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027span\u0027,{staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"30px\",\"height\":\"30px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"30px\",\"height\":\"30px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,{attrs:{\"t-class\":\"text-danger\"}},[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"30px\",\"height\":\"30px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":108,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":109,"author":{"gitId":"-"},"content":") {"},{"lineNumber":110,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Mixing basic and customized lists\")])])}"},{"lineNumber":111,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":112,"author":{"gitId":"-"},"content":") {"},{"lineNumber":113,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-danger\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-danger\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticClass:\"text-warning\",staticStyle:{\"width\":\"200px\",\"height\":\"100px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])}"},{"lineNumber":114,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":115,"author":{"gitId":"-"},"content":") {"},{"lineNumber":116,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Reverse mixing basic and customized lists\")])])}"},{"lineNumber":117,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":118,"author":{"gitId":"-"},"content":") {"},{"lineNumber":119,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])])])}"},{"lineNumber":120,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":121,"author":{"gitId":"-"},"content":") {"},{"lineNumber":122,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Every second list item customized\")])])}"},{"lineNumber":123,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":124,"author":{"gitId":"-"},"content":") {"},{"lineNumber":125,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticClass:\"text-warning\",staticStyle:{\"width\":\"200px\",\"height\":\"100px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticClass:\"text-warning\",staticStyle:{\"width\":\"200px\",\"height\":\"100px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":126,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":127,"author":{"gitId":"-"},"content":") {"},{"lineNumber":128,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Once + none + customization\")])])}"},{"lineNumber":129,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":130,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":131,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":132,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":133,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":134,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Customization + none + once\")])])}"},{"lineNumber":135,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":136,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":137,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":138,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":139,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":140,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Customization + once + none\")])])}"},{"lineNumber":141,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":142,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":143,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":144,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":145,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":146,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Once + customization + none\")])])}"},{"lineNumber":147,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":148,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":149,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":150,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":151,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":152,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"None + customization + once\")])])}"},{"lineNumber":153,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":154,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":155,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"fas-file-code\"}},[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"glyphicon-education\",\"once\":\"true\"}},[_v(\"Item C\")])])}"},{"lineNumber":156,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":157,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":158,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"None + once + customization\")])])}"},{"lineNumber":159,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":160,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":161,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"glyphicon-education\",\"once\":\"true\"}},[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"fas-file-code\"}},[_v(\"Item C\")])])}"},{"lineNumber":162,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":163,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":164,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Customization + once + customization\")])])}"},{"lineNumber":165,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":166,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":167,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":168,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":169,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":170,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"String once\")])])}"},{"lineNumber":171,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":172,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":173,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item C\")])])}"},{"lineNumber":174,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":175,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":176,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"False once for item A, rest of items will inherit\")])])}"},{"lineNumber":177,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":178,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":179,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":180,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":181,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":182,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"False once for item B, will overwrite item A\")])])}"},{"lineNumber":183,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":184,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":185,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":186,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":187,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":188,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Once for specific attributes besides icon, does not overwrite\")])])}"},{"lineNumber":189,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":190,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":191,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"70px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"40px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"70px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":192,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":193,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":194,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"False once for specific attributes besides icon, does overwrite\")])])}"},{"lineNumber":195,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":196,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":197,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"70px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"40px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"40px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":198,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":199,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":200,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Sub-level\")])])}"},{"lineNumber":201,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":202,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":203,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"./images/deer.jpg\",\"i-width\":\"50px\"}},[_v(\"Item C\")])])}"},{"lineNumber":204,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":205,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":206,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027footer\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"heading-in-footer-should-not-be-indexed\"}},[_v(\"Heading in footer should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-in-footer-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"text-center\"},[_v(\"\\n This is a dynamic height footer that supports markdown \"),_c(\u0027span\u0027,[_v(\"😄\")]),_v(\"!\\n \")])])])}"},{"lineNumber":207,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":208,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"KevinEyo1":91,"-":117}},{"path":"packages/cli/test/functional/test_site/expected/testSourceContainScript.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":2,"author":{"gitId":"yiwen101"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027div\u0027,[_c(\u0027header\u0027,[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\",\"default-highlight-on\":\"sibling-or-child\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\",\"title\":\"Home\"}},[_v(\"MarkBind Test Site\")])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs\")])])]),_v(\" \"),_m(0)],1),_v(\" \"),_m(1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_c(\u0027div\u0027,[_c(\u0027h2\u0027,{attrs:{\"id\":\"default-layout\"}},[_v(\"Default Layout\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#default-layout\",\"onclick\":\"event.stopPropagation()\"}})])])])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027div\u0027,[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs 🐛\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_c(\u0027h3\u0027,{attrs:{\"id\":\"testing-site-nav\"}},[_v(\"Testing Site-Nav\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-site-nav\",\"onclick\":\"event.stopPropagation()\"}})])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027strong\u0027,[_v(\"Dropdown \")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-search\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" title ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Html within site-nav \"),_c(\u0027span\u0027,{staticStyle:{\"color\":\"red\"}},[_v(\"should\")]),_v(\" be displayed properly\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown title 📐\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027mark\u0027,[_v(\"Third Link\")]),_v(\" 📋\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Filler text \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-facetime-video\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" Youtube 📺\")]),_v(\" filler text\"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/watch?v\u003ddQw4w9WgXcQ\"}},[_v(\"The answer to everything in the universe\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027mark\u0027,[_v(\"Dropdown title\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-comment\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown Title\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Hello Doge Hello Doge 🐶\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_c(\u0027strong\u0027,[_v(\"NESTED LINK\")]),_v(\" Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Test line break in navigation layout\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Nested line break text ✂️\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Nested line break href\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Nested Nested line break text ✂️\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested line break dropdown menu\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Line break item 2 📘\")])])])])])])],1)],1)])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/PanelSourceContainsScript._include_.html\",\"expanded\":\"\",\"panelId\":\"panel-with-src-that-contains-css-and-script-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-src-that-contains-css-and-script-header\"}},[_v(\"Panel with src that contains css and script header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-src-that-contains-css-and-script-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])})],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"yiwen101"},"content":"};"},{"lineNumber":6,"author":{"gitId":"yiwen101"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":8,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"bg-info display-4 text-center text-white\"},[_c(\u0027br\u0027),_v(\"\\n Test Jumbotron\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027br\u0027)])}"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Relative Link Test\")]),_v(\" This is a relative Intra-Site link in a layout (see \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html#heading-with-hidden-keyword\"}},[_v(\"link\")]),_v(\")\")])}"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":14,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027footer\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"heading-in-footer-should-not-be-indexed\"}},[_v(\"Heading in footer should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-in-footer-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"text-center\"},[_v(\"\\n This is a dynamic height footer that supports markdown \"),_c(\u0027span\u0027,[_v(\"😄\")]),_v(\"!\\n \")])])])}"},{"lineNumber":15,"author":{"gitId":"yiwen101"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"yiwen101"},"content":" "}],"authorContributionMap":{"yiwen101":16}},{"path":"packages/cli/test/functional/test_site/expected/testWeb3FormPlugin.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"LamJiuFong"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027div\u0027,[_c(\u0027header\u0027,[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\",\"default-highlight-on\":\"sibling-or-child\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\",\"title\":\"Home\"}},[_v(\"MarkBind Test Site\")])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs\")])])]),_v(\" \"),_m(0)],1),_v(\" \"),_m(1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_c(\u0027div\u0027,[_c(\u0027h2\u0027,{attrs:{\"id\":\"default-layout\"}},[_v(\"Default Layout\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#default-layout\",\"onclick\":\"event.stopPropagation()\"}})])])])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027div\u0027,[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs 🐛\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_c(\u0027h3\u0027,{attrs:{\"id\":\"testing-site-nav\"}},[_v(\"Testing Site-Nav\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-site-nav\",\"onclick\":\"event.stopPropagation()\"}})])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027strong\u0027,[_v(\"Dropdown \")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-search\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" title ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Html within site-nav \"),_c(\u0027span\u0027,{staticStyle:{\"color\":\"red\"}},[_v(\"should\")]),_v(\" be displayed properly\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown title 📐\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027mark\u0027,[_v(\"Third Link\")]),_v(\" 📋\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Filler text \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-facetime-video\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" Youtube 📺\")]),_v(\" filler text\"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/watch?v\u003ddQw4w9WgXcQ\"}},[_v(\"The answer to everything in the universe\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027mark\u0027,[_v(\"Dropdown title\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-comment\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown Title\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Hello Doge Hello Doge 🐶\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_c(\u0027strong\u0027,[_v(\"NESTED LINK\")]),_v(\" Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Test line break in navigation layout\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Nested line break text ✂️\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Nested line break href\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Nested Nested line break text ✂️\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested line break dropdown menu\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Line break item 2 📘\")])])])])])])],1)],1)])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(2),_v(\" \"),_c(\u0027box\u0027,{staticClass:\"web-3-form\",attrs:{\"type\":\"info\",\"no-icon\":\"\"}},[_c(\u0027p\u0027,{staticClass:\"h2\"},[_v(\"Contact Us\")]),_c(\u0027form\u0027,{attrs:{\"onsubmit\":\"submitForm(this)\"}},[_c(\u0027input\u0027,{attrs:{\"type\":\"hidden\",\"name\":\"access_key\",\"value\":\"\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"name\"}},[_v(\"Name\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"text\",\"name\":\"name\",\"required\":\"\",\"placeholder\":\"John Doe\"}}),_v(\" \"),_c(\u0027label\u0027,{attrs:{\"for\":\"email\"}},[_v(\"Email\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"email\",\"name\":\"email\",\"required\":\"\",\"placeholder\":\"johndoe@gmail.com\"}}),_v(\" \"),_c(\u0027label\u0027,{attrs:{\"for\":\"message\"}},[_v(\"Message\")]),_v(\" \"),_c(\u0027textarea\u0027,{attrs:{\"name\":\"message\",\"required\":\"\"}}),_v(\" \"),_c(\u0027button\u0027,{staticClass:\"badge bg-info\",attrs:{\"type\":\"submit\"}},[_v(\"Submit\")])])]),_v(\" \"),_m(3),_v(\" \"),_c(\u0027box\u0027,{staticClass:\"web-3-form\",attrs:{\"type\":\"info\",\"no-icon\":\"\"}},[_c(\u0027form\u0027,{attrs:{\"onsubmit\":\"submitForm(this)\"}},[_c(\u0027input\u0027,{attrs:{\"type\":\"hidden\",\"name\":\"access_key\",\"value\":\"\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"name\"}},[_v(\"Name\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"text\",\"name\":\"name\",\"required\":\"\",\"placeholder\":\"John Doe\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"message\"}},[_v(\"Message\")]),_v(\" \"),_c(\u0027textarea\u0027,{attrs:{\"name\":\"message\",\"required\":\"\"}}),_c(\u0027button\u0027,{staticClass:\"badge bg-info\",attrs:{\"type\":\"submit\"}},[_v(\"Submit\")])])]),_v(\" \"),_m(4),_v(\" \"),_c(\u0027box\u0027,{staticClass:\"web-3-form\",attrs:{\"type\":\"info\",\"no-icon\":\"\"}},[_c(\u0027form\u0027,{attrs:{\"onsubmit\":\"submitForm(this)\"}},[_c(\u0027input\u0027,{attrs:{\"type\":\"hidden\",\"name\":\"access_key\",\"value\":\"\"}}),_c(\u0027input\u0027,{attrs:{\"type\":\"radio\",\"id\":\"html\",\"name\":\"fav_language\",\"value\":\"HTML\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"html\"}},[_v(\"HTML\")]),_c(\u0027br\u0027),_c(\u0027input\u0027,{attrs:{\"type\":\"radio\",\"id\":\"css\",\"name\":\"fav_language\",\"value\":\"CSS\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"css\"}},[_v(\"CSS\")]),_c(\u0027br\u0027),_c(\u0027input\u0027,{attrs:{\"type\":\"radio\",\"id\":\"javascript\",\"name\":\"fav_language\",\"value\":\"JavaScript\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"javascript\"}},[_v(\"JavaScript\")]),_c(\u0027br\u0027),_c(\u0027input\u0027,{attrs:{\"list\":\"browsers\"}}),_c(\u0027datalist\u0027,{attrs:{\"id\":\"browsers\"}},[_c(\u0027option\u0027,{attrs:{\"value\":\"Internet Explorer\"}}),_c(\u0027option\u0027,{attrs:{\"value\":\"Firefox\"}}),_c(\u0027option\u0027,{attrs:{\"value\":\"Chrome\"}}),_c(\u0027option\u0027,{attrs:{\"value\":\"Opera\"}}),_c(\u0027option\u0027,{attrs:{\"value\":\"Safari\"}})]),_c(\u0027br\u0027),_c(\u0027button\u0027,{staticClass:\"badge bg-info\",attrs:{\"type\":\"submit\"}},[_v(\"Submit\")])])]),_v(\" \"),_m(5),_v(\" \"),_c(\u0027box\u0027,{staticClass:\"web-3-form\",attrs:{\"type\":\"warning\",\"no-icon\":\"\"}},[_c(\u0027h3\u0027,{attrs:{\"id\":\"i-am-a-header\"}},[_v(\"🚀 I am a header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#i-am-a-header\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027form\u0027,{attrs:{\"onsubmit\":\"submitForm(this)\"}},[_c(\u0027input\u0027,{attrs:{\"type\":\"hidden\",\"name\":\"access_key\",\"value\":\"\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"name\"}},[_v(\"Name\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"text\",\"name\":\"name\",\"required\":\"\",\"placeholder\":\"John Doe\"}}),_v(\" \"),_c(\u0027label\u0027,{attrs:{\"for\":\"email\"}},[_v(\"Email\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"email\",\"name\":\"email\",\"required\":\"\",\"placeholder\":\"johndoe@gmail.com\"}}),_v(\" \"),_c(\u0027label\u0027,{attrs:{\"for\":\"message\"}},[_v(\"Message\")]),_v(\" \"),_c(\u0027textarea\u0027,{attrs:{\"name\":\"message\",\"required\":\"\"}}),_v(\" \"),_c(\u0027button\u0027,{staticClass:\"badge bg-info\",attrs:{\"type\":\"submit\"}},[_v(\"Submit\")])])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(6)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"bg-info display-4 text-center text-white\"},[_c(\u0027br\u0027),_v(\"\\n Test Jumbotron\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027br\u0027)])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Relative Link Test\")]),_v(\" This is a relative Intra-Site link in a layout (see \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html#heading-with-hidden-keyword\"}},[_v(\"link\")]),_v(\")\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Default contact us form\")])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"-"},"content":") {"},{"lineNumber":17,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Form with default inputs\")])])}"},{"lineNumber":18,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"-"},"content":") {"},{"lineNumber":20,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Form with customised inputs\")])])}"},{"lineNumber":21,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"-"},"content":") {"},{"lineNumber":23,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Form with customised options\")])])}"},{"lineNumber":24,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"-"},"content":") {"},{"lineNumber":26,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027footer\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"heading-in-footer-should-not-be-indexed\"}},[_v(\"Heading in footer should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-in-footer-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"text-center\"},[_v(\"\\n This is a dynamic height footer that supports markdown \"),_c(\u0027span\u0027,[_v(\"😄\")]),_v(\"!\\n \")])])])}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":28,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"LamJiuFong":1,"-":27}},{"path":"packages/cli/test/functional/test_site/index.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"title: Hello World"},{"lineNumber":3,"author":{"gitId":"-"},"content":"pageNav: \"default\""},{"lineNumber":4,"author":{"gitId":"-"},"content":"pageNavTitle: \"Testing Page Navigation\""},{"lineNumber":5,"author":{"gitId":"-"},"content":"globalOverrideProperty: \"To be overridden by global override\""},{"lineNumber":6,"author":{"gitId":"-"},"content":"frontmatterOverrideProperty: \"To be overridden by frontmatter override\""},{"lineNumber":7,"author":{"gitId":"-"},"content":"globalAndFrontmatterOverrideProperty: \"To be overridden by frontmatter and global override\""},{"lineNumber":8,"author":{"gitId":"-"},"content":"tags: [\"tag-frontmatter-shown\", \"tag-included-file\", \"+tag-exp*\", \"-tag-exp-hidden\", \"-tag-site-override-shown\", \"-tag-site-override-specific*\"]"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"website-content\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"**Test `\u003cmarkdown\u003e` and `\u003cmd\u003e` elements**"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cmarkdown\u003eThis should be wrapped in a `\u003cp\u003e` tag as it uses the block-level markdown renderer\u003c/markdown\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cmd\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"This should not be wrapped in a `\u003cp\u003e` tag as it uses the inline markdown renderer"},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003c/md\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003cmarkdown class\u003d\"mt-2\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"```"},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cmarkdown\u003e elements allow block-level markdown without needing a leading newline."},{"lineNumber":24,"author":{"gitId":"-"},"content":"Hence, the contained markdown should be parsed and output as is, without any parsing errors."},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/invalidhtml\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"```"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003c/markdown\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003cmd\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"`\u003cmd\u003e` elements allow inline-level markdown even in a non-markdown token."},{"lineNumber":31,"author":{"gitId":"-"},"content":"Hence, the contained markdown should be parsed and output as is, without any parsing errors."},{"lineNumber":32,"author":{"gitId":"-"},"content":"`\u003c/invalid\u003e`."},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/md\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Test footnotes**"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testFootnotes.md\" /\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"yiwen101"},"content":"**Test include footnotes from hash**"},{"lineNumber":41,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":42,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"testHashFootnotes.md#import\" /\u003e"},{"lineNumber":43,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"**Nunjucks SetExt**"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"{% ext externalVar \u003d \"_markbind/variable.json\" %}"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"{{ externalVar.front }} {{ externalVar.back }}"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"{% for val in externalVar.arrayVar %}"},{"lineNumber":51,"author":{"gitId":"-"},"content":"{{ val }}"},{"lineNumber":52,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"{{ externalVar.nestedVar.nestedVarKey }}"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"**Variables that reference another variable**"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"{{finalized_value}}"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"{{reference_level_4}}"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"**Global Variables can be referenced in {% raw %}{% set %}{% endraw %}**"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"{% set page_variable_with_global_variable %}"},{"lineNumber":65,"author":{"gitId":"-"},"content":"Page Variable with {{ global_variable }}"},{"lineNumber":66,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":67,"author":{"gitId":"-"},"content":"{{ page_variable_with_global_variable }}"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"**Global Variables should override {% raw %}{% set %}{% endraw %}**"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"{% set page_global_variable_overriding_page_variable %}"},{"lineNumber":72,"author":{"gitId":"-"},"content":"**Should not appear**: Page Variable overridden by Global Variable"},{"lineNumber":73,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":74,"author":{"gitId":"-"},"content":"{{ page_global_variable_overriding_page_variable }}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"**Test Page Variable and Included Variable Integrations**"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"{% set outerNunjucksVariable %}"},{"lineNumber":79,"author":{"gitId":"-"},"content":"Outer Nunjucks Variable"},{"lineNumber":80,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testPageVariablesInInclude.md\" /\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":"# Heading with multiple keywords"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword\"\u003ekeyword 1\u003c/span\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword\"\u003ekeyword 2\u003c/span\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":"# Heading with keyword in panel"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Panel with keyword\" expanded\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003epanel keyword\u003c/span\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":"**Panel with heading with keyword**"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"# Panel with heading\" expanded\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003epanel keyword\u003c/span\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Expanded panel without heading with keyword**"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"# Panel without heading with keyword\" expanded\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" # Keyword should be tagged to this heading, not the panel heading"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003epanel keyword\u003c/span\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":"**Unexpanded panel with heading with keyword**"},{"lineNumber":108,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"# Panel with heading with keyword\"\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" # Keyword should be tagged to the panel heading, not this heading"},{"lineNumber":111,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003epanel keyword\u003c/span\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":"# Heading \u003cinclude src\u003d\"testTrimIncludeFragment.md#fragment\" /\u003e"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"The `id` for the above heading should be `heading-fragment-with-leading-spaces-and-newline` in total."},{"lineNumber":117,"author":{"gitId":"-"},"content":"This test ensures heading ids are assigned last (e.g. after `\u003cinclude /\u003e`s are processed)."},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"# Heading with included keyword"},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testKeyword.md\" /\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testKeywordHeading.md\" /\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword\"\u003eKeyword with included heading\u003c/span\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":"# Heading with nested keyword"},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003cdiv\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003enested keyword\u003c/span\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"# Heading with hidden keyword"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword d-none\"\u003einvisible keyword\u003c/span\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testTags.md\" /\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"**Normal include**"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/EstablishingRequirements.md\" /\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":"**Include segment**"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/EstablishingRequirements.md#preview\" /\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"**Boilerplate include**"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/boilerTest.md\" name\u003d\"Boilerplate Referencing\" boilerplate /\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/notInside.md\" name\u003d\"Referencing specified path in boilerplate\" boilerplate\u003d\"folder/inside.md\"/\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"**Nested include**"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/nestedInclude.md\" /\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":"**HTML include**"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testInclude.html\" /\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"**Include from another MarkBind site**"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/index.md\" /\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testReuseSubsite.md\" /\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testReuseSubsite.md#imageTest\" /\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":"**Include nested sub-site directly**"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/nested_sub_site/index.md\" /\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"**Include nested sub-site from sub-site**"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testSubsiteAndNestedSubsiteBaseUrl.md\" /\u003e"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":"**Include a file using baseUrl**"},{"lineNumber":180,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"{{baseUrl}}/requirements/SpecifyingRequirements.md#preview\" /\u003e"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/requirements/SpecifyingRequirements.md#preview\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":"**Include a file in a sub-folder that uses baseUrl**"},{"lineNumber":184,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/testBaseUrlInIncludeSrc.md\" /\u003e"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"requirements/testBaseUrlInIncludeSrc.md\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":"**Include a file in a sub-folder that uses baseUrl using baseUrl**"},{"lineNumber":188,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"{{baseUrl}}/requirements/testBaseUrlInIncludeSrc.md\" /\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/requirements/testBaseUrlInIncludeSrc.md\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"**Include a file in a sub-site that uses baseUrl**"},{"lineNumber":192,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testBaseUrlInIncludeSrcSubSite.md\" /\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"sub_site/testBaseUrlInIncludeSrcSubSite.md\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"**Include a file in a sub-site that uses baseUrl using baseUrl**"},{"lineNumber":196,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"{{baseUrl}}/sub_site/testBaseUrlInIncludeSrcSubSite.md\" /\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/sub_site/testBaseUrlInIncludeSrcSubSite.md\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":"**Trimmed include** "},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"**\u003cinclude src\u003d\"testTrimInclude.md\" trim inline /\u003e**"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":"**Trimmed include fragment**"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":"**Before | \u003cinclude src\u003d\"testTrimIncludeFragment.md#fragment\" trim inline /\u003e | After**"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":"**Include with custom variables**"},{"lineNumber":208,"author":{"gitId":"-"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testIncludeVariables.md\" var-included_variable_as_include_attribute\u003d\"Included variable as include attribute\"\u003e"},{"lineNumber":210,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable\"\u003eIncluded variable\u003c/variable\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_with_markdown\"\u003e__**Included variable with markdown**__\u003c/variable\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_as_attribute\"\u003ecolor: blue\u003c/variable\u003e"},{"lineNumber":213,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_as_html_element\"\u003e\u003cspan\u003eIncluded variable within HTML element\u003c/span\u003e\u003c/variable\u003e"},{"lineNumber":214,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"global_variable_overriding_included_variable\"\u003e**Should not appear**: Included variable overridden by global variable\u003c/variable\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_inner_overridden\"\u003eIncluded variable overriding inner variable\u003c/variable\u003e"},{"lineNumber":216,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_in_outer_included_file\"\u003eIncluded variable in outer included file\u003c/variable\u003e"},{"lineNumber":217,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_should_not_leak\"\u003e**Should not appear**: Included variable should not leak into other files\u003c/variable\u003e"},{"lineNumber":218,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_with_global_variable\"\u003eIncluded variable with {{ global_variable }}\u003c/variable\u003e"},{"lineNumber":219,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":"Variables for includes should not be recognised as page variables, hence, there should be no text between **this**"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"{{ included_variable }}"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"and **this**."},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"**Included variables should not leak into other files**"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testIncludeVariableLeak.md\" /\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"**Panel with shorthand heading syntax**"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpanel\u003e"},{"lineNumber":234,"author":{"gitId":"-"},"content":" \u003cspan heading\u003e"},{"lineNumber":235,"author":{"gitId":"-"},"content":" Heading"},{"lineNumber":236,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":"**Panel without src**"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel without src header\" expanded\u003e"},{"lineNumber":242,"author":{"gitId":"-"},"content":"\u003cmarkdown\u003e"},{"lineNumber":243,"author":{"gitId":"-"},"content":"**Panel without src content heading**"},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003c/markdown\u003e "},{"lineNumber":245,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":"**Panel with normal src**"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel with normal src header\" src\u003d\"testPanels/PanelNormalSource.md\" expanded\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"\u003c/panel\u003e "},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":"**Panel with src from a page segment**"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel with src from a page segment header\" src\u003d\"testPanels/PanelSourceContainsSegment.md#segment\" expanded\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":"**Panel with boilerplate**"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Boilerplate referencing\" src\u003d\"testPanels/boilerTestPanel.md\" boilerplate expanded\u003e"},{"lineNumber":260,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Boilerplate referencing 2\" src\u003d\"testPanelsDuplicate/boilerTestPanel.md\" boilerplate expanded\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Referencing specified path in boilerplate\" src\u003d\"testPanels/notInside.md\" boilerplate\u003d\"folder/panelBoilerplate.md\" expanded\u003e"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":"**Nested panel**"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Outer nested panel\" src\u003d\"testPanels/NestedPanel.md\" expanded\u003e"},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":""},{"lineNumber":273,"author":{"gitId":"-"},"content":"**Nested panel without src**"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Outer nested panel without src\" expanded\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":""},{"lineNumber":277,"author":{"gitId":"-"},"content":" **Panel content of outer nested panel**"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"## Inner panel header without src\" expanded\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":" "},{"lineNumber":281,"author":{"gitId":"-"},"content":" **Panel content of inner nested panel**"},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":284,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":285,"author":{"gitId":"-"},"content":""},{"lineNumber":286,"author":{"gitId":"-"},"content":"**Panel with src from another MarkBind site**"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel with src from another MarkBind site header\" src\u003d\"sub_site/index.md\" expanded\u003e"},{"lineNumber":289,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":290,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel with src from another MarkBind site header\" src\u003d\"sub_site/testReuseSubsite.md\" expanded\u003e"},{"lineNumber":291,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":292,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":293,"author":{"gitId":"-"},"content":""},{"lineNumber":294,"author":{"gitId":"-"},"content":"**Modal with panel inside**"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":"\u003ctrigger for\u003d\"modal-with-panel\"\u003etrigger\u003c/trigger\u003e"},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":"\u003cmodal header\u003d\"modal title with panel inside\" id\u003d\"modal-with-panel\"\u003e"},{"lineNumber":299,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"## Panel inside modal\" expanded\u003e"},{"lineNumber":300,"author":{"gitId":"-"},"content":" "},{"lineNumber":301,"author":{"gitId":"-"},"content":" **Panel content inside modal**"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":304,"author":{"gitId":"-"},"content":"\u003c/modal\u003e"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":"**Unexpanded panel**"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Unexpanded panel header\"\u003e"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" **Panel content of unexpanded panel should not appear in search data**"},{"lineNumber":311,"author":{"gitId":"-"},"content":""},{"lineNumber":312,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"## Panel header inside unexpanded panel should not appear in search data\" expanded\u003e"},{"lineNumber":313,"author":{"gitId":"-"},"content":" "},{"lineNumber":314,"author":{"gitId":"-"},"content":" **Panel content inside unexpanded panel should not appear in search data**"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":317,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":"**Test panel closing transitions**"},{"lineNumber":320,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testPanelsClosingTransition.md\" /\u003e"},{"lineNumber":321,"author":{"gitId":"-"},"content":""},{"lineNumber":322,"author":{"gitId":"yiwen101"},"content":"**Test popover has no stray space**"},{"lineNumber":323,"author":{"gitId":"yiwen101"},"content":"(\u003cpopover content\u003d\"content\"\u003eThere should be no stray space before this\u003c/popover\u003e)"},{"lineNumber":324,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":325,"author":{"gitId":"yiwen101"},"content":"**Test tooltip has no stray space**"},{"lineNumber":326,"author":{"gitId":"yiwen101"},"content":"(\u003ctooltip content\u003d\"content\"\u003eThere should be no stray space before this\u003c/tooltip\u003e)"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":"**Test search indexing**"},{"lineNumber":329,"author":{"gitId":"-"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":"**Test PlantUML live reload without include**"},{"lineNumber":331,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/activity.puml\" alt\u003d\"activity diagram\" /\u003e"},{"lineNumber":332,"author":{"gitId":"-"},"content":""},{"lineNumber":333,"author":{"gitId":"-"},"content":"**Test PlantUML live reload with include**"},{"lineNumber":334,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testPlantUML.md\" /\u003e"},{"lineNumber":335,"author":{"gitId":"-"},"content":""},{"lineNumber":336,"author":{"gitId":"-"},"content":"**Test PlantUML in sub folder**"},{"lineNumber":337,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testPlantUMLSubFolderInclude.md\" /\u003e"},{"lineNumber":338,"author":{"gitId":"-"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":"## Level 2 header (inside headingSearchIndex) with no-index attribute should not be indexed {.no-index}"},{"lineNumber":340,"author":{"gitId":"-"},"content":""},{"lineNumber":341,"author":{"gitId":"-"},"content":"###### Level 6 header (outside headingSearchIndex) with always-index attribute should be indexed {.always-index}"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"-"},"content":"**Test nunjucks raw tags**"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":"\u003cdiv v-pre\u003e{{ variable interpolation syntax can be used with v-pre }}\u003c/div\u003e"},{"lineNumber":348,"author":{"gitId":"-"},"content":"\u003cdiv v-pre\u003e{{ nonExistentVariable }}\u003c/div\u003e"},{"lineNumber":349,"author":{"gitId":"-"},"content":"\u003ccode\u003e{{ code elements should automatically be assigned v-pre }}\u003c/code\u003e"},{"lineNumber":350,"author":{"gitId":"-"},"content":""},{"lineNumber":351,"author":{"gitId":"-"},"content":"{% endraw %}"}],"authorContributionMap":{"-":342,"yiwen101":9}},{"path":"packages/cli/test/functional/test_site/site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"baseUrl\": \"/test_site\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"faviconPath\": \"favicon.png\","},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"titlePrefix\": \"\","},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"titleSuffix\": \"\","},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"codeLineNumbers\": true"},{"lineNumber":8,"author":{"gitId":"-"},"content":" },"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":10,"author":{"gitId":"-"},"content":" {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"frontmatter\": {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"frontmatterOverrideProperty\": \"Overridden by frontmatter override\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"globalAndFrontmatterOverrideProperty\": \"Overridden by frontmatter override\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" }"},{"lineNumber":17,"author":{"gitId":"-"},"content":" },"},{"lineNumber":18,"author":{"gitId":"-"},"content":" {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"src\": [\"testEmptyFrontmatter.md\", \"testLayoutsOverride.md\", \"testEmptyAltFrontMatter.md\", \"testLayoutsOverrideWithAltFrontmatter.md\"],"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"layout\": \"testLayout.md\""},{"lineNumber":22,"author":{"gitId":"-"},"content":" },"},{"lineNumber":23,"author":{"gitId":"-"},"content":" {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"src\": [\"testAltFrontMatterInvalidKeyValue.md\", \"testSingleAltFrontMatter.md\"],"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" },"},{"lineNumber":27,"author":{"gitId":"-"},"content":" {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"src\": [\"testAltFrontMatterParsing.md\"]"},{"lineNumber":29,"author":{"gitId":"-"},"content":" },"},{"lineNumber":30,"author":{"gitId":"-"},"content":" {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"src\": \"testExternalScripts.md\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"layout\": \"testLayout.md\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"externalScripts\": ["},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config\u003dTeX-MML-AM_CHTML\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":37,"author":{"gitId":"-"},"content":" },"},{"lineNumber":38,"author":{"gitId":"-"},"content":" {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"src\": [\"testLayouts.md\", \"testLayoutsWithAltFrontMatter.md\"],"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"title\": \"Test nunjucks path resolving\""},{"lineNumber":41,"author":{"gitId":"-"},"content":" },"},{"lineNumber":42,"author":{"gitId":"-"},"content":" {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"src\": ["},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"testNunjucksPathResolving.md\","},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"sub_site/testNunjucksPathResolving.md\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"sub_site/nested_sub_site/testNunjucksPathResolving.md\""},{"lineNumber":47,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" },"},{"lineNumber":50,"author":{"gitId":"-"},"content":" {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"glob\": [\"**/index.md\", \"**/test_md_fragment.md\"]"},{"lineNumber":52,"author":{"gitId":"-"},"content":" },"},{"lineNumber":53,"author":{"gitId":"-"},"content":" {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \"src\": \"testAntiFOUCStyles.md\","},{"lineNumber":55,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\""},{"lineNumber":56,"author":{"gitId":"-"},"content":" },"},{"lineNumber":57,"author":{"gitId":"-"},"content":" {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \"src\": \"testAnchorGeneration.md\","},{"lineNumber":59,"author":{"gitId":"-"},"content":" \"title\": \"Anchor Generation Test\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" },"},{"lineNumber":61,"author":{"gitId":"-"},"content":" {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"src\": \"testAnnotate.md\","},{"lineNumber":63,"author":{"gitId":"-"},"content":" \"title\": \"Annotate Feature Test\""},{"lineNumber":64,"author":{"gitId":"-"},"content":" },"},{"lineNumber":65,"author":{"gitId":"-"},"content":" {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \"src\": \"testTooltipSpacing.md\","},{"lineNumber":67,"author":{"gitId":"-"},"content":" \"title\": \"Tooltip Spacing Test\""},{"lineNumber":68,"author":{"gitId":"-"},"content":" },"},{"lineNumber":69,"author":{"gitId":"-"},"content":" {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" \"src\": \"testThumbnails.md\","},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"title\": \"Thumbnails Test\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" },"},{"lineNumber":73,"author":{"gitId":"-"},"content":" {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \"src\": \"testPlantUML.md\","},{"lineNumber":75,"author":{"gitId":"-"},"content":" \"title\": \"PlantUML Test\""},{"lineNumber":76,"author":{"gitId":"-"},"content":" },"},{"lineNumber":77,"author":{"gitId":"-"},"content":" {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \"src\": \"testCodeBlocks.md\","},{"lineNumber":79,"author":{"gitId":"-"},"content":" \"title\": \"Test: Code Blocks\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" },"},{"lineNumber":81,"author":{"gitId":"-"},"content":" {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \"src\": \"testIncludePluginsRendered.md\","},{"lineNumber":83,"author":{"gitId":"-"},"content":" \"title\": \"Included files should have plugins rendered on them\""},{"lineNumber":84,"author":{"gitId":"-"},"content":" },"},{"lineNumber":85,"author":{"gitId":"-"},"content":" {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" \"src\": \"testIncludeMultipleModals.md\","},{"lineNumber":87,"author":{"gitId":"-"},"content":" \"title\": \"Multiple inclusions of a modal should be supported\""},{"lineNumber":88,"author":{"gitId":"-"},"content":" },"},{"lineNumber":89,"author":{"gitId":"-"},"content":" {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \"src\": \"testPopovers.md\","},{"lineNumber":91,"author":{"gitId":"-"},"content":" \"title\": \"Test: Popovers\""},{"lineNumber":92,"author":{"gitId":"-"},"content":" },"},{"lineNumber":93,"author":{"gitId":"-"},"content":" {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \"src\": \"testPopoverTrigger.md\","},{"lineNumber":95,"author":{"gitId":"-"},"content":" \"title\": \"Popover initiated by trigger should honor trigger attribute\""},{"lineNumber":96,"author":{"gitId":"-"},"content":" },"},{"lineNumber":97,"author":{"gitId":"-"},"content":" {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" \"src\": \"testModals.md\","},{"lineNumber":99,"author":{"gitId":"-"},"content":" \"title\": \"Test: Modals\""},{"lineNumber":100,"author":{"gitId":"-"},"content":" },"},{"lineNumber":101,"author":{"gitId":"-"},"content":" {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \"src\": \"testDates.md\","},{"lineNumber":103,"author":{"gitId":"-"},"content":" \"title\": \"Nunjucks date filter tests\""},{"lineNumber":104,"author":{"gitId":"-"},"content":" },"},{"lineNumber":105,"author":{"gitId":"-"},"content":" {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \"src\": \"testVariableContainsInclude.md\","},{"lineNumber":107,"author":{"gitId":"-"},"content":" \"title\": \"Variable should be able to store included content fragments\""},{"lineNumber":108,"author":{"gitId":"-"},"content":" },"},{"lineNumber":109,"author":{"gitId":"-"},"content":" {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" \"src\": \"testIncludeBoilerplate.md\","},{"lineNumber":111,"author":{"gitId":"-"},"content":" \"title\": \"Content inside \u003cinclude\u003e should not be processed by markdown\""},{"lineNumber":112,"author":{"gitId":"-"},"content":" },"},{"lineNumber":113,"author":{"gitId":"-"},"content":" {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \"src\": \"testPanels.md\","},{"lineNumber":115,"author":{"gitId":"-"},"content":" \"title\": \"Test: Panels\""},{"lineNumber":116,"author":{"gitId":"-"},"content":" },"},{"lineNumber":117,"author":{"gitId":"-"},"content":" {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" \"src\": \"testPanelMarkdownParsing.md\","},{"lineNumber":119,"author":{"gitId":"-"},"content":" \"title\": \"markdown-it should parse minimized panel as inline element and normal panel as block element\""},{"lineNumber":120,"author":{"gitId":"-"},"content":" },"},{"lineNumber":121,"author":{"gitId":"-"},"content":" {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" \"src\": \"testCenterText.md\","},{"lineNumber":123,"author":{"gitId":"-"},"content":" \"title\": \"Center-aligned text test\""},{"lineNumber":124,"author":{"gitId":"-"},"content":" },"},{"lineNumber":125,"author":{"gitId":"-"},"content":" {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \"src\": \"testHr.md\","},{"lineNumber":127,"author":{"gitId":"-"},"content":" \"title\": \"create different types of horizontal rules\""},{"lineNumber":128,"author":{"gitId":"-"},"content":" },"},{"lineNumber":129,"author":{"gitId":"-"},"content":" {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \"src\": \"testPageNav.md\","},{"lineNumber":131,"author":{"gitId":"-"},"content":" \"title\": \"text interpolation should be skipped appropriately\""},{"lineNumber":132,"author":{"gitId":"-"},"content":" },"},{"lineNumber":133,"author":{"gitId":"-"},"content":" {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" \"src\": \"testPanelsClosingTransition.md\","},{"lineNumber":135,"author":{"gitId":"-"},"content":" \"title\": \"Test: Panels closing transition\""},{"lineNumber":136,"author":{"gitId":"-"},"content":" },"},{"lineNumber":137,"author":{"gitId":"-"},"content":" {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" \"src\": \"testLinks.md\","},{"lineNumber":139,"author":{"gitId":"-"},"content":" \"title\": \"Autolink tests\""},{"lineNumber":140,"author":{"gitId":"-"},"content":" },"},{"lineNumber":141,"author":{"gitId":"-"},"content":" {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" \"src\": \"testTree.md\","},{"lineNumber":143,"author":{"gitId":"-"},"content":" \"title\": \"Tree tests\""},{"lineNumber":144,"author":{"gitId":"-"},"content":" },"},{"lineNumber":145,"author":{"gitId":"-"},"content":" {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" \"src\": \"testMath.md\","},{"lineNumber":147,"author":{"gitId":"-"},"content":" \"title\": \"Math formulae should be displayed correctly, with additional plugin\""},{"lineNumber":148,"author":{"gitId":"-"},"content":" },"},{"lineNumber":149,"author":{"gitId":"-"},"content":" {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" \"src\": \"testImages.md\","},{"lineNumber":151,"author":{"gitId":"-"},"content":" \"title\": \"Rendering of images according to specified dimension and auto-linkify ability\""},{"lineNumber":152,"author":{"gitId":"-"},"content":" },"},{"lineNumber":153,"author":{"gitId":"-"},"content":" {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavTarget.md\","},{"lineNumber":155,"author":{"gitId":"-"},"content":" \"title\": \"Bootstrap scrollspy related classes should be applied only if there are navigable headings\""},{"lineNumber":156,"author":{"gitId":"-"},"content":" },"},{"lineNumber":157,"author":{"gitId":"-"},"content":" {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavWithoutTitleAndNavHeadings.md\","},{"lineNumber":159,"author":{"gitId":"-"},"content":" \"title\": \"page nav separator should be omitted when there is no title and navigation headings added\""},{"lineNumber":160,"author":{"gitId":"-"},"content":" },"},{"lineNumber":161,"author":{"gitId":"-"},"content":" {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavWithOnlyTitle.md\","},{"lineNumber":163,"author":{"gitId":"-"},"content":" \"title\": \"page nav with title added\""},{"lineNumber":164,"author":{"gitId":"-"},"content":" },"},{"lineNumber":165,"author":{"gitId":"-"},"content":" {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavPrint.md\","},{"lineNumber":167,"author":{"gitId":"-"},"content":" \"title\": \"printing page nav\""},{"lineNumber":168,"author":{"gitId":"-"},"content":" },"},{"lineNumber":169,"author":{"gitId":"-"},"content":" {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" \"src\": \"testWeb3FormPlugin.md\","},{"lineNumber":171,"author":{"gitId":"-"},"content":" \"title\": \"web 3 forms\""},{"lineNumber":172,"author":{"gitId":"-"},"content":" },"},{"lineNumber":173,"author":{"gitId":"-"},"content":" {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" \"src\": \"testList.md\","},{"lineNumber":175,"author":{"gitId":"-"},"content":" \"title\": \"web 3 forms\""},{"lineNumber":176,"author":{"gitId":"-"},"content":" },"},{"lineNumber":177,"author":{"gitId":"-"},"content":" {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" \"src\": \"testFontAwesomeInPage.md\","},{"lineNumber":179,"author":{"gitId":"-"},"content":" \"title\": \"font-awesome icon in page, only font-awesome stylesheet should be loaded\""},{"lineNumber":180,"author":{"gitId":"-"},"content":" },"},{"lineNumber":181,"author":{"gitId":"-"},"content":" {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" \"src\": \"testGlyphiconInPage.md\","},{"lineNumber":183,"author":{"gitId":"-"},"content":" \"title\": \"glyphicon icon in page, only glyphicon stylesheet should be loaded\""},{"lineNumber":184,"author":{"gitId":"-"},"content":" },"},{"lineNumber":185,"author":{"gitId":"-"},"content":" {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \"src\": \"testMaterialIconsInPage.md\","},{"lineNumber":187,"author":{"gitId":"-"},"content":" \"title\": \"material-icons icon in page, only material-icons stylesheet should be loaded\""},{"lineNumber":188,"author":{"gitId":"-"},"content":" },"},{"lineNumber":189,"author":{"gitId":"-"},"content":" {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" \"src\": \"testOcticonInPage.md\","},{"lineNumber":191,"author":{"gitId":"-"},"content":" \"title\": \"octicon icon in page, only octicon stylesheet should be loaded\""},{"lineNumber":192,"author":{"gitId":"-"},"content":" },"},{"lineNumber":193,"author":{"gitId":"-"},"content":" {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" \"src\": \"testIconsInSiteLayout.md\","},{"lineNumber":195,"author":{"gitId":"-"},"content":" \"title\": \"glyphicon \u0026 octicon icon in page, only glyphicon \u0026 octicon stylesheets should be loaded\""},{"lineNumber":196,"author":{"gitId":"yiwen101"},"content":" },"},{"lineNumber":197,"author":{"gitId":"yiwen101"},"content":" {"},{"lineNumber":198,"author":{"gitId":"yiwen101"},"content":" \"src\": \"testSourceContainScript.md\","},{"lineNumber":199,"author":{"gitId":"yiwen101"},"content":" \"title\": \"Test: If source contains script or css, when included, the script or css should be included\""},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":202,"author":{"gitId":"-"},"content":" \"pagesExclude\": [\"**/*-fragment.md\"],"},{"lineNumber":203,"author":{"gitId":"-"},"content":" \"ignore\": ["},{"lineNumber":204,"author":{"gitId":"-"},"content":" \"_markbind/layouts/*\","},{"lineNumber":205,"author":{"gitId":"-"},"content":" \"_markbind/logs/*\","},{"lineNumber":206,"author":{"gitId":"-"},"content":" \"_site/*\","},{"lineNumber":207,"author":{"gitId":"-"},"content":" \"site.json\","},{"lineNumber":208,"author":{"gitId":"-"},"content":" \"*.md\","},{"lineNumber":209,"author":{"gitId":"-"},"content":" \"testFileIgnore.sh\","},{"lineNumber":210,"author":{"gitId":"-"},"content":" \"testFileIgnore/*\","},{"lineNumber":211,"author":{"gitId":"-"},"content":" \"expected/*\""},{"lineNumber":212,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":213,"author":{"gitId":"-"},"content":" \"deploy\": {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" \"message\": \"Site Update.\""},{"lineNumber":215,"author":{"gitId":"-"},"content":" },"},{"lineNumber":216,"author":{"gitId":"-"},"content":" \"globalOverride\": {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" \"globalOverrideProperty\": \"Overridden by global override\","},{"lineNumber":218,"author":{"gitId":"-"},"content":" \"globalAndFrontmatterOverrideProperty\": \"Overridden by global override\""},{"lineNumber":219,"author":{"gitId":"-"},"content":" },"},{"lineNumber":220,"author":{"gitId":"-"},"content":" \"headingIndexingLevel\": 4,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" \"plugins\": ["},{"lineNumber":222,"author":{"gitId":"-"},"content":" \"testMarkbindPlugin\","},{"lineNumber":223,"author":{"gitId":"-"},"content":" \"filterTags\","},{"lineNumber":224,"author":{"gitId":"-"},"content":" \"googleAnalytics\","},{"lineNumber":225,"author":{"gitId":"-"},"content":" \"mathDelimiters\","},{"lineNumber":226,"author":{"gitId":"-"},"content":" \"web3Form\""},{"lineNumber":227,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":228,"author":{"gitId":"-"},"content":" \"pluginsContext\": {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" \"testMarkbindPlugin\": {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" \"pre\": \"\\n\\n# Markbind Plugin Pre-render\","},{"lineNumber":231,"author":{"gitId":"-"},"content":" \"post\": \"\u003cp\u003eNode Modules Plugin Post-render\u003c/p\u003e\""},{"lineNumber":232,"author":{"gitId":"-"},"content":" },"},{"lineNumber":233,"author":{"gitId":"-"},"content":" \"filterTags\": {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" \"tags\": ["},{"lineNumber":235,"author":{"gitId":"-"},"content":" \"tag-site-shown\","},{"lineNumber":236,"author":{"gitId":"-"},"content":" \"+tag-site-override-shown\","},{"lineNumber":237,"author":{"gitId":"-"},"content":" \"+tag-site-override-specific-shown\""},{"lineNumber":238,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":239,"author":{"gitId":"-"},"content":" },"},{"lineNumber":240,"author":{"gitId":"-"},"content":" \"googleAnalytics\": {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" \"trackingID\": \"TRACKING-ID\""},{"lineNumber":242,"author":{"gitId":"-"},"content":" },"},{"lineNumber":243,"author":{"gitId":"-"},"content":" \"mathDelimiters\": {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" \"delimiters\": [\"beg_end\"]"},{"lineNumber":245,"author":{"gitId":"-"},"content":" },"},{"lineNumber":246,"author":{"gitId":"-"},"content":" \"web3Form\": {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" \"accessKey\": \"\""},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"-":246,"yiwen101":4}},{"path":"packages/cli/test/functional/test_site/stylesheets/styles.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: auto;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" margin-left: 60px;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":113,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":124,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":135,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":137}},{"path":"packages/cli/test/functional/test_site/testHashFootnotes.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yiwen101"},"content":"\u003cdiv id\u003d\"import\"\u003e"},{"lineNumber":2,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":3,"author":{"gitId":"yiwen101"},"content":"text^[footnote1], text2^[footnote2]"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"yiwen101":4}},{"path":"packages/cli/test/functional/test_site/testList.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"1. One item"},{"lineNumber":2,"author":{"gitId":"-"},"content":"- Only 1 item "},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"1. One item with customization icon"},{"lineNumber":5,"author":{"gitId":"-"},"content":"- Only 1 item { icon\u003d\"glyphicon-education\" }"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"1. One item with once customization"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"- Only 1 item { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. One item with customization text"},{"lineNumber":11,"author":{"gitId":"-"},"content":"- Only 1 item { text\u003d\"Step 1\" }"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"1. One item + nested list"},{"lineNumber":14,"author":{"gitId":"-"},"content":"- Only 1 item"},{"lineNumber":15,"author":{"gitId":"-"},"content":" - Only 1 item"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"1. One item + nested list with icon customization"},{"lineNumber":18,"author":{"gitId":"-"},"content":"- Only 1 item { icon\u003d\"glyphicon-education\" }"},{"lineNumber":19,"author":{"gitId":"-"},"content":" - Only 1 item { icon\u003d\"glyphicon-education\" }"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"1. One item + nested list with once customization"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"- Only 1 item { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" - Only 1 item { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"1. One item + nested list with text customization"},{"lineNumber":26,"author":{"gitId":"-"},"content":"- Only 1 item { text\u003d\"Step 1\" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":" - Only 1 item { text\u003d\"Step 1.1\" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"1. Basic structure"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Item A"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":32,"author":{"gitId":"-"},"content":" * Sub-item B1 "},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Sub-item B2 "},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Sub-item B3 "},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 "},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * Sub-item B4 "},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"1. Icon inheritance test"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* Item A { icon\u003d\"glyphicon-education\" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Sub-item B2"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * Sub-item B3 "},{"lineNumber":46,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Sub-item B4 "},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"1. Text inheritance test"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Item A { text\u003d\"First layer\" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Item B"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * Sub-item B1 { text\u003d\"Second layer\" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Sub-item B2"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { text\u003d\"Third layer\" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. First item no customization test"},{"lineNumber":63,"author":{"gitId":"-"},"content":"* Item A "},{"lineNumber":64,"author":{"gitId":"-"},"content":"* Item B { icon\u003d\"./images/deer.jpg\" text\u003d\"First\"}"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Sub-item B1"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * Sub-item B2 { icon\u003d\"fas-file-code\" text\u003d\"Should not be appearing\"}"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" text\u003d\"Should not be appearing\"}"},{"lineNumber":70,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"1. Correct first item customization test"},{"lineNumber":74,"author":{"gitId":"-"},"content":"* Item A { icon\u003d\"glyphicon-education\" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":"* Item B { icon\u003d\"./images/deer.jpg\" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * Sub-item B2 "},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 "},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":"1. Testing with various icon attributes"},{"lineNumber":85,"author":{"gitId":"-"},"content":"* Item A { icon\u003d\"glyphicon-education\" i-size\u003d\"20px\" i-class\u003d\"text-primary\" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":"* Item B { icon\u003d\"./images/deer.jpg\" i-width\u003d\"200px\" i-height\u003d\"100px\" i-class\u003d\"text-warning\" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" text\u003d\"Hi\" i-size\u003d\"30px\" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Sub-item B2 { i-class\u003d\"text-success\" i-spacing\u003d\"2rem\" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" i-height\u003d\"50px\" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 "},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 { i-class\u003d\"text-danger\" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Sub-item B4 { i-spacing\u003d\"1rem\" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":"1. Testing with various text attributes"},{"lineNumber":96,"author":{"gitId":"-"},"content":"* Item A { text\u003d\"Step 1\" t-size\u003d\"20px\" t-class\u003d\"text-primary\" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":"* Item B { text\u003d\"Step 2\" t-class\u003d\"text-warning\" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Sub-item B1 { text\u003d\"\\_MD_\" t-size\u003d\"10px\" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * Sub-item B2 { t-class\u003d\"text-success\" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { text\u003d\":+1:\"}"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 { t-class\u003d\"text-danger\" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. Mixing text and icon "},{"lineNumber":107,"author":{"gitId":"-"},"content":"* Item A { text\u003d\"Step 1\" icon\u003d\"glyphicon-education\" t-size\u003d\"20px\" t-class\u003d\"text-primary\" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":"* Item B { text\u003d\"Step 2\" t-class\u003d\"text-warning\" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Sub-item B1 { text\u003d\"\\_MD_\" icon\u003d\"./images/deer.jpg\" t-size\u003d\"10px\" i-width\u003d\"20px\" i-height\u003d\"20px\"}"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Sub-item B2 { t-class\u003d\"text-success\" i-height\u003d\"30px\" i-width\u003d\"30px\"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":112,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { text\u003d\":+1:\" icon\u003d\"+1\"}"},{"lineNumber":113,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 { t-class\u003d\"text-danger\" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":"1. Mixing basic and customized lists"},{"lineNumber":118,"author":{"gitId":"-"},"content":"* Item A"},{"lineNumber":119,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":120,"author":{"gitId":"-"},"content":" * Sub-item B1 {icon\u003d\"fas-file-code\" i-size\u003d\"20px\" i-class\u003d\"text-success\"}"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * Sub-item B2 "},{"lineNumber":122,"author":{"gitId":"-"},"content":" * Sub-item B3 "},{"lineNumber":123,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 {icon\u003d\"glyphicon-education\" i-size\u003d\"30px\" i-class\u003d\"text-danger\"}"},{"lineNumber":124,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 "},{"lineNumber":125,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 {icon\u003d\"./images/deer.jpg\" i-width\u003d\"200px\" i-height\u003d\"100px\" i-class\u003d\"text-warning\"}"},{"lineNumber":126,"author":{"gitId":"-"},"content":" * Sub-item B4 "},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"1. Reverse mixing basic and customized lists"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* Item A {icon\u003d\"glyphicon-education\" i-size\u003d\"20px\" i-class\u003d\"text-primary\"}"},{"lineNumber":130,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":131,"author":{"gitId":"-"},"content":" * Sub-item B1 "},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Sub-item B2"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":134,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 "},{"lineNumber":135,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 "},{"lineNumber":137,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"1. Every second list item customized"},{"lineNumber":140,"author":{"gitId":"-"},"content":"* Item A {icon\u003d\"glyphicon-education\" i-size\u003d\"20px\" i-class\u003d\"text-primary\"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":142,"author":{"gitId":"-"},"content":" * Sub-item B1 {icon\u003d\"fas-file-code\" i-size\u003d\"30px\" i-class\u003d\"text-success\"}"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * Sub-item B2 "},{"lineNumber":144,"author":{"gitId":"-"},"content":" * Sub-item B3 {icon\u003d\"./images/deer.jpg\" i-width\u003d\"200px\" i-height\u003d\"100px\" i-class\u003d\"text-warning\"}"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":146,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":147,"author":{"gitId":"KevinEyo1"},"content":"1. Once + none + customization"},{"lineNumber":148,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":149,"author":{"gitId":"KevinEyo1"},"content":"* Item B "},{"lineNumber":150,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":151,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":152,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":153,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":154,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":155,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":156,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"fas-file-code\" }"},{"lineNumber":157,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":158,"author":{"gitId":"KevinEyo1"},"content":"1. Customization + none + once"},{"lineNumber":159,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"fas-file-code\" }"},{"lineNumber":160,"author":{"gitId":"KevinEyo1"},"content":"* Item B"},{"lineNumber":161,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":162,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":163,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":164,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":165,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":166,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":167,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":168,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":169,"author":{"gitId":"KevinEyo1"},"content":"1. Customization + once + none"},{"lineNumber":170,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"fas-file-code\" }"},{"lineNumber":171,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":172,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":173,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":174,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":175,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":176,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":177,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":178,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":179,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":180,"author":{"gitId":"KevinEyo1"},"content":"1. Once + customization + none"},{"lineNumber":181,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":182,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"fas-file-code\" }"},{"lineNumber":183,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":184,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":185,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":186,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":187,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":188,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":189,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":190,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":191,"author":{"gitId":"KevinEyo1"},"content":"1. None + customization + once"},{"lineNumber":192,"author":{"gitId":"KevinEyo1"},"content":"* Item A "},{"lineNumber":193,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"fas-file-code\" }"},{"lineNumber":194,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":195,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":196,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":197,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":198,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":199,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":200,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":201,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":202,"author":{"gitId":"KevinEyo1"},"content":"1. None + once + customization"},{"lineNumber":203,"author":{"gitId":"KevinEyo1"},"content":"* Item A "},{"lineNumber":204,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":205,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":206,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":207,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":208,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":209,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":210,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":211,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"fas-file-code\" }"},{"lineNumber":212,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":213,"author":{"gitId":"KevinEyo1"},"content":"1. Customization + once + customization"},{"lineNumber":214,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"fas-file-code\" }"},{"lineNumber":215,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":216,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":217,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":218,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":219,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":220,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":221,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":222,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":223,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":224,"author":{"gitId":"KevinEyo1"},"content":"1. String once"},{"lineNumber":225,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" once\u003d\"true\" }"},{"lineNumber":226,"author":{"gitId":"KevinEyo1"},"content":"* Item B "},{"lineNumber":227,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":228,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":229,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":230,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":231,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":232,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":233,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":234,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":235,"author":{"gitId":"KevinEyo1"},"content":"1. False once for item A, rest of items will inherit"},{"lineNumber":236,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" once\u003dfalse }"},{"lineNumber":237,"author":{"gitId":"KevinEyo1"},"content":"* Item B "},{"lineNumber":238,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":239,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":240,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":241,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":242,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":243,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":244,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":245,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":246,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":247,"author":{"gitId":"KevinEyo1"},"content":"1. False once for item B, will overwrite item A"},{"lineNumber":248,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"fas-file-code\" }"},{"lineNumber":249,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"glyphicon-education\" once\u003dfalse }"},{"lineNumber":250,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":251,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":252,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":253,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":254,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":255,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":256,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":257,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":258,"author":{"gitId":"KevinEyo1"},"content":"1. Once for specific attributes besides icon, does not overwrite"},{"lineNumber":259,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" i-size\u003d\"70px\" i-class\u003d\"text-primary\" }"},{"lineNumber":260,"author":{"gitId":"KevinEyo1"},"content":"* Item B { i-size\u003d\"40px\" once\u003dtrue }"},{"lineNumber":261,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":262,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":263,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":264,"author":{"gitId":"KevinEyo1"},"content":"1. False once for specific attributes besides icon, does overwrite"},{"lineNumber":265,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" i-size\u003d\"70px\" i-class\u003d\"text-primary\" }"},{"lineNumber":266,"author":{"gitId":"KevinEyo1"},"content":"* Item B { i-size\u003d\"40px\" once\u003dfalse }"},{"lineNumber":267,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":268,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":269,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":270,"author":{"gitId":"KevinEyo1"},"content":"1. Sub-level"},{"lineNumber":271,"author":{"gitId":"KevinEyo1"},"content":"* Item A "},{"lineNumber":272,"author":{"gitId":"KevinEyo1"},"content":"* Item B "},{"lineNumber":273,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1 { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":274,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":275,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 { icon\u003d\"fas-file-code\" }"},{"lineNumber":276,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":277,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":278,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":279,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"}],"authorContributionMap":{"KevinEyo1":141,"-":138}},{"path":"packages/cli/test/functional/test_site/testPanels/PanelSourceContainsScript.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yiwen101"},"content":"\u003ch1\u003e"},{"lineNumber":2,"author":{"gitId":"yiwen101"},"content":"\u003cscript\u003e"},{"lineNumber":3,"author":{"gitId":"yiwen101"},"content":" // JavaScript code specific to this component"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":" console.log(\"Inline script executed! 35\");"},{"lineNumber":5,"author":{"gitId":"yiwen101"},"content":"\u003c/script\u003e"},{"lineNumber":6,"author":{"gitId":"yiwen101"},"content":"\u003cstyle\u003e"},{"lineNumber":7,"author":{"gitId":"yiwen101"},"content":" /* CSS styles specific to this component */"},{"lineNumber":8,"author":{"gitId":"yiwen101"},"content":" h1 {"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":" color: red;"},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":" }"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"\u003c/style\u003e"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":"h1 text"},{"lineNumber":13,"author":{"gitId":"yiwen101"},"content":"\u003c/h1\u003e"}],"authorContributionMap":{"yiwen101":13}},{"path":"packages/cli/test/functional/test_site/testSourceContainScript.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yiwen101"},"content":"\u003cpanel header\u003d\"## Panel with src that contains css and script header\" src\u003d\"testPanels/PanelSourceContainsScript.md\" expanded\u003e\u003c/panel\u003e"}],"authorContributionMap":{"yiwen101":1}},{"path":"packages/cli/test/functional/test_site_algolia_plugin/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/404.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027),_m(0),_v(\" \"),_m(1),_c(\u0027p\u0027)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027p\u0027,{staticStyle:{\"font-size\":\"10rem\"}},[_v(\"404\")])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027p\u0027,{staticStyle:{\"font-size\":\"1.5rem\"}},[_v(\"File not found\"),_c(\u0027br\u0027),_v(\"Click \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/\"}},[_v(\"here\")]),_v(\" to go back to the home page.\")])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/Home.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the test-deploy wiki!\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/Page-1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"page-1\"}},[_v(\"Page 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#page-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/_Footer.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Custom footer.\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/_Sidebar.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"[[Page-1]]\")])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/about.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"about\"}},[_v(\"About\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#about\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Welcome to your \"),_c(\u0027strong\u0027,[_v(\"About Us\")]),_v(\" page.\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/contents/topic1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(0),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"topic-1\"}},[_v(\"Topic 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#topic-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027blockquote\u0027,[_c(\u0027p\u0027,[_v(\"More content to be added\")])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/contents/topic2.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/contents/topic3a.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/contents/topic3b.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/index.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the test-deploy wiki!\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" margin-left: 60px;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":113,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":124,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":135,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":137}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/non_markbind_site/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" margin-left: 60px;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":113,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":124,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":135,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":137}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/404.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027),_m(0),_v(\" \"),_m(1),_c(\u0027p\u0027)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027p\u0027,{staticStyle:{\"font-size\":\"10rem\"}},[_v(\"404\")])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027p\u0027,{staticStyle:{\"font-size\":\"1.5rem\"}},[_v(\"File not found\"),_c(\u0027br\u0027),_v(\"Click \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/\"}},[_v(\"here\")]),_v(\" to go back to the home page.\")])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":15}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/Home.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the test-deploy wiki!\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(0)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/Page-1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"page-1\"}},[_v(\"Page 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#page-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/README.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0),_v(\" \"),_c(\u0027p\u0027,[_v(\"Test readme file\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"readme\"}},[_v(\"Readme\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#readme\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/about.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"about\"}},[_v(\"About\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#about\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Welcome to your \"),_c(\u0027strong\u0027,[_v(\"About Us\")]),_v(\" page.\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":15}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/contents/topic1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(0),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"topic-1\"}},[_v(\"Topic 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#topic-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027blockquote\u0027,[_c(\u0027p\u0027,[_v(\"More content to be added\")])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":15}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/contents/topic2.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(0)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/contents/topic3a.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(0)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/contents/topic3b.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(0)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/index.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0),_v(\" \"),_c(\u0027p\u0027,[_v(\"Test readme file\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"readme\"}},[_v(\"Readme\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#readme\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/test_folder/extra_1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"sample-content-in-another-folder-which-is-not-named-content\"}},[_v(\"Sample content in another folder which is not named content\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#sample-content-in-another-folder-which-is-not-named-content\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/test_folder/extra_2.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"sample-content-in-another-folder-which-is-not-named-content\"}},[_v(\"Sample content in another folder which is not named content\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#sample-content-in-another-folder-which-is-not-named-content\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/test_folder/extra_3.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"sample-content-in-another-folder-which-is-not-named-content\"}},[_v(\"Sample content in another folder which is not named content\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#sample-content-in-another-folder-which-is-not-named-content\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/non_markbind_site/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"packages/cli/test/functional/test_site_special_tags/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_templates/test_default/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_templates/test_default/expected/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"packages/cli/test/functional/test_site_templates/test_minimal/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Configuration.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to understand how to configure the application such as descriptions of the config file and how to change the configuration.\\n\")]),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"configuration-guide\"}},[_v(\"Configuration guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#configuration-guide\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"config.json\")]),_v(\").\")])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":16}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Design.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section describes the architecture of your app, explaining how the main components work and interact with each other. Using architecture diagrams is recommended.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/diagrams/example.png\",\"width\":\"300\"}}),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_c(\u0027p\u0027,[_v(\"Replace the above example diagram with an Architecture Diagram of your project created using \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams\"}},[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"puml\")]),_v(\" feature\")]),_v(\".\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Given below is a quick overview of main components and how they interact with each other.\")]),_v(\" \"),_m(3),_v(\" \"),_c(\u0027p\u0027,[_v(\"The bulk of the app\u0027s work is done by the following components:\")]),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_c(\u0027annotate\u0027,{attrs:{\"src\":\"../images/johndoe.png\",\"width\":\"300\",\"alt\":\"Sample Image\"}},[_c(\u0027a-point\u0027,{attrs:{\"x\":\"25%\",\"y\":\"25%\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 25% from the left and 25% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"50%\",\"y\":\"25%\",\"size\":\"60\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 50% from the left and 25% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"75%\",\"y\":\"25%\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This has a header\")])]},proxy:true},{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 75% from the left and 25% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"33%\",\"y\":\"50%\",\"color\":\"red\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 33% from the left and 50% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"66%\",\"y\":\"50%\",\"opacity\":\"0.7\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 66% from the left and 50% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"25%\",\"y\":\"75%\"},scopedSlots:_u([{key:\"label\",fn:function(){return [_c(\u0027p\u0027,[_v(\"1\")])]},proxy:true},{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 25% from the left and 75% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"50%\",\"y\":\"75%\",\"textColor\":\"white\",\"color\":\"black\",\"opacity\":\"1\"},scopedSlots:_u([{key:\"label\",fn:function(){return [_c(\u0027p\u0027,[_v(\"2\")])]},proxy:true},{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 50% from the left and 75% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"75%\",\"y\":\"75%\",\"fontSize\":\"30\"},scopedSlots:_u([{key:\"label\",fn:function(){return [_c(\u0027p\u0027,[_v(\"3\")])]},proxy:true},{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 75% from the left and 75% from the top\")])]},proxy:true}])})],1),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_c(\u0027p\u0027,[_v(\"For diagrams like your Sequence Diagram, it can also be created using \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#annotations\"}},[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"annotate\")]),_v(\" feature\")]),_v(\", that will allow you to annotate specific parts of your diagram.\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The sections below give more details of each component.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\" Describe in each section how each component works in detail, including its classes, methods, and how it interacts with other components.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"You can use a combination of Markbind\u0027s \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams\"}},[_c(\u0027strong\u0027,[_v(\"Diagrams\")]),_v(\" feature\")]),_v(\" to provide a visual representation of each component, such as architecture and sequence diagrams.\")])]),_v(\" \"),_m(7),_v(\" \"),_m(8),_v(\" \"),_c(\u0027pic\u0027,{staticStyle:{\"margin-bottom\":\"20px\"},attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}},[_v(\"\\nDiagram: Component 1\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Component 1,\")]),_v(\" \"),_m(9),_v(\" \"),_m(10),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Note:\")]),_v(\" You can use boxes to include details that you want to draw the reader\u0027s attention to. See \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/presentation.html#boxes\"}},[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"Boxes\")]),_v(\" feature\")]),_v(\".\")])]),_v(\" \"),_c(\u0027pic\u0027,{staticStyle:{\"margin-bottom\":\"20px\"},attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}},[_v(\"\\nDiagram: Component 2\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Component 2,\")]),_v(\" \"),_m(11)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#design\"}},[_v(\"Design‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#architecture\"}},[_v(\"Architecture‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#component-1\"}},[_v(\"Component 1‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#component-2\"}},[_v(\"Component 2‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(12)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"design\"}},[_v(\"Design\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#design\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"architecture\"}},[_v(\"Architecture\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#architecture\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"The \"),_c(\u0027em\u0027,[_c(\u0027strong\u0027,[_v(\"Architecture Diagram\")])]),_v(\" given below explains the high-level design of the ProjectEx App.\")])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Main components of the architecture\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"#component-1\"}},[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"Component 1\")])])]),_v(\": Does something.\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"#component-2\"}},[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"Component 2\")])])]),_v(\": Does something.\")])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Interactions between architecture components\")])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"The \"),_c(\u0027em\u0027,[_v(\"Sequence Diagram\")]),_v(\" below shows how the components interact with each other for a certain scenario.\")])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"component-1\"}},[_v(\"Component 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#component-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Component 1 is made up of parts e.g.\"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"A\")]),_v(\", \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"B\")]),_v(\", \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"C\")]),_v(\" etc.\")])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"works with Component 2 in this way.\")])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"component-2\"}},[_v(\"Component 2\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#component-2\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"works with Component 1 in this way.\")])])}"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":46}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/DevOps.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to understand the DevOps practices adopted by the project.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Example Commands for Typical Projects\")])])]},proxy:true}])},[_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_v(\"\\nThe following commands are examples. You can customize them according to your project\u0027s needs.\\n\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"clean\")])]),_v(\": Deletes the files created during the previous build tasks.\"),_c(\u0027br\u0027),_v(\"\\ne.g. \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run clean\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"run\")])]),_v(\": Builds and runs the application.\"),_c(\u0027br\u0027)])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"test\")])]),_v(\": Runs all tests.\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run test\")]),_v(\" — Runs all tests\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run cleantest\")]),_v(\" — Cleans the project and runs tests\")])])])])],1),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_c(\u0027p\u0027,[_v(\"As part of CI, this project tracks code coverage as well.\")]),_v(\" \"),_m(6),_v(\" \"),_c(\u0027p\u0027,[_v(\"Your CI can include some repository-wide checks. These repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements.\")]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_m(7),_v(\" \"),_c(\u0027p\u0027,[_v(\"Here are the steps to create a new release.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"warning\"}},[_v(\"\\nMake sure you have the necessary permissions to create a release.\\n\")]),_v(\" \"),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:trigger_id\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"e.g. \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"v0.1\")])]},proxy:true}])}),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Update the version number.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Tag the repo with the \"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:trigger_id\"}},[_v(\"version number\")]),_v(\".\")],1),_v(\" \"),_m(8)])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#devops-guide\"}},[_v(\"DevOps guide‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#build-automation\"}},[_v(\"Build automation‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#continuous-integration-ci\"}},[_v(\"Continuous integration (CI)‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#code-coverage\"}},[_v(\"Code coverage‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#repository-wide-checks\"}},[_v(\"Repository-wide checks‎\")])]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#making-a-release\"}},[_v(\"Making a release‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(9)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"devops-guide\"}},[_v(\"DevOps guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#devops-guide\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"build-automation\"}},[_v(\"Build automation\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#build-automation\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"This example project includes features for \"),_c(\u0027strong\u0027,[_v(\"build automation and dependency management\")]),_v(\". You can walkthrough command scripts you have in your project, such as how to clean, test, and run the project.\")])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"continuous-integration-ci\"}},[_v(\"Continuous integration (CI)\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#continuous-integration-ci\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"This project uses \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/features/actions\"}},[_v(\"GitHub Actions\")]),_v(\" for CI. The project comes with the necessary GitHub Actions configurations files (in the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\".github/workflows\")]),_v(\" folder). No further setting up required.\")])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"code-coverage\"}},[_v(\"Code coverage\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#code-coverage\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"repository-wide-checks\"}},[_v(\"Repository-wide checks\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#repository-wide-checks\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"making-a-release\"}},[_v(\"Making a release\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#making-a-release\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"https://help.github.com/articles/creating-releases/\"}},[_v(\"Create a new release using GitHub\")]),_v(\".\")])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":37}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/DeveloperGuide.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_m(0),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#projectex-developer-guide\"}},[_v(\"ProjectEx Developer Guide‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#introduction\"}},[_v(\"Introduction‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#purpose-of-this-guide\"}},[_v(\"Purpose of this Guide‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#acknowledgements\"}},[_v(\"Acknowledgements‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027h1\u0027,{attrs:{\"id\":\"projectex-developer-guide\"}},[_v(\"ProjectEx Developer Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#projectex-developer-guide\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"introduction\"}},[_v(\"Introduction\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#introduction\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the Developer Guide. This guide helps developers understand the architecture, setup, and development workflows of our software, serving as your starting point and companion.\")]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"purpose-of-this-guide\"}},[_v(\"Purpose of this Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#purpose-of-this-guide\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The main objectives of this guide are to:\")]),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Orient new developers to the software\u0027s architecture and codebase structure.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Provide a comprehensive reference for the development practices, coding standards, and tools used.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Detail the setup process for a development environment.\")])]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"acknowledgements\"}},[_c(\u0027strong\u0027,[_v(\"Acknowledgements\")]),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#acknowledgements\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{ List and link sources of all reused/adapted ideas, code, documentation, and third-party libraries }\")])])])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":13}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Documentation.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to understand the documentation practices and link to relevant sources to help developers contribute to documentation.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"success\",\"seamless\":\"\"}},[_v(\"\\nUpdating documentation as changes are made to the project is ideal for any project.\\n\")]),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#documentation-guide\"}},[_v(\"Documentation Guide‎\")])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(6)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"documentation-guide\"}},[_v(\"Documentation Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#documentation-guide\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"We use \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_c(\u0027strong\u0027,[_v(\"MarkBind\")])]),_v(\" to manage documentation.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"The \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"docs/\")]),_v(\" folder contains the source files for the documentation website.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"To learn how set it up and maintain the project website, follow the guide \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://se-education.org/guides/tutorials/markbind-forked-sites.html\"}},[_v(\"[se-edu/guides] Working with Forked MarkBind sites\")]),_v(\" for project documentation.\")])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Style guidance:\")])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Follow the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://developers.google.com/style\"}},[_c(\u0027strong\u0027,[_c(\u0027em\u0027,[_v(\"Google developer documentation style guide\")])])]),_v(\".\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Also relevant is the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://se-education.org/guides/conventions/markdown.html\"}},[_c(\u0027em\u0027,[_v(\"se-edu/guides \"),_c(\u0027strong\u0027,[_v(\"Markdown coding standard\")])])]),_v(\".\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Converting to PDF\")])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"See the guide \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://se-education.org/guides/tutorials/savingPdf.html\"}},[_c(\u0027em\u0027,[_v(\"se-edu/guides \"),_c(\u0027strong\u0027,[_v(\"Saving web documents as PDF files\")])])]),_v(\".\")])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":28}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Implementation.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section can be used to describe some noteworthy details on how certain features are implemented.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_c(\u0027p\u0027,[_v(\"Given below is an example usage scenario and how FeatureX behaves at each step.\")]),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Alternative 1 (current choice):\")]),_v(\" Implementation 1\")])]},proxy:true}])},[_v(\"\\nPros: Easy to implement.\"),_c(\u0027br\u0027),_v(\"\\nCons: May have performance issues in terms of memory usage.\\n\")]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Alternative 2:\")]),_v(\" Implementation 2\")])]},proxy:true}])},[_v(\"\\nPros: Will use less memory.\"),_c(\u0027br\u0027),_v(\"\\nCons: We must add addtional test cases.\\n\")]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#implementation\"}},[_v(\"Implementation‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#proposed-featurex-implementation\"}},[_v(\"[Proposed] FeatureX Implementation‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#proposed-data-archiving\"}},[_v(\"[Proposed] Data archiving‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(8)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"implementation\"}},[_v(\"Implementation\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#implementation\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"proposed-featurex-implementation\"}},[_v(\"[Proposed] FeatureX Implementation\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#proposed-featurex-implementation\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Step 1\")]),_v(\": User does something\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Expected\")]),_v(\": FeatureX does something in response\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Step 2\")]),_v(\": User does something else\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Expected\")]),_v(\": FeatureX does something else in response\")])])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h4\u0027,{attrs:{\"id\":\"design-considerations\"}},[_v(\"Design considerations:\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#design-considerations\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Aspect: How FeatureX executes:\")])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{ More aspects and alternatives to be added }\")])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"proposed-data-archiving\"}},[_v(\"[Proposed] Data archiving\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#proposed-data-archiving\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{ Explain here how the data archiving feature will be implemented }\")])])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":34}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Requirements.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section can be used to describe the requirements of the app, through the use of user stories, use cases.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7),_v(\" \"),_m(8),_v(\" \"),_m(9),_m(10),_v(\" \"),_m(11),_v(\" \"),_m(12),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Use case 1: Do something\")])])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"MSS\")])]),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"User requests ProjectEx\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"ProjectEx provides response\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Use case ends.\")])])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Extensions\")])]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"2a. Requests fails.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Use case ends.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"2b. User request is invalid.\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"2b1. ProjectEx shows an error message.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Use case resumes at step 2.\")])])])])])]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(13),_v(\" \"),_m(14),_v(\" \"),_m(15),_v(\" \"),_m(16)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#requirements\"}},[_v(\"Requirements‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#product-scope\"}},[_v(\"Product scope‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#user-stories\"}},[_v(\"User stories‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#use-cases\"}},[_v(\"Use cases‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#non-functional-requirements\"}},[_v(\"Non-Functional Requirements‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(17)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"requirements\"}},[_v(\"Requirements\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#requirements\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"product-scope\"}},[_v(\"Product scope\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#product-scope\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Target user profile\")]),_v(\":\")])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"user needs\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"user preferences\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"user information\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Value proposition\")]),_v(\": Benefit compared to other similar products\")])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Non-Functional Requirements\")]),_v(\":\")])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"OS requirements\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Peformance\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Security\")])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"user-stories\"}},[_v(\"User stories\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#user-stories\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Priorities: High (must have) - \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"* * *\")]),_v(\", Medium (nice to have) - \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"* *\")]),_v(\", Low (unlikely to have) - \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"*\")])])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"table-responsive\"},[_c(\u0027table\u0027,{staticClass:\"markbind-table table table-bordered table-striped\"},[_c(\u0027thead\u0027,[_c(\u0027tr\u0027,[_c(\u0027th\u0027,[_v(\"Priority\")]),_v(\" \"),_c(\u0027th\u0027,[_v(\"As a …​\")]),_v(\" \"),_c(\u0027th\u0027,[_v(\"I want to …​\")]),_v(\" \"),_c(\u0027th\u0027,[_v(\"So that I can…​\")])])]),_v(\" \"),_c(\u0027tbody\u0027,[_c(\u0027tr\u0027,[_c(\u0027td\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"* * *\")])]),_v(\" \"),_c(\u0027td\u0027,[_v(\"new user\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"see something\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"visualise something\")])]),_v(\" \"),_c(\u0027tr\u0027,[_c(\u0027td\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"* *\")])]),_v(\" \"),_c(\u0027td\u0027,[_v(\"user\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"do something\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"complete something\")])]),_v(\" \"),_c(\u0027tr\u0027,[_c(\u0027td\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"*\")])]),_v(\" \"),_c(\u0027td\u0027,[_v(\"user with specific information\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"sort something\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"find something\")])])])])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{More to be added}\")])])}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"use-cases\"}},[_v(\"Use cases\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#use-cases\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"(For all use cases below, the \"),_c(\u0027strong\u0027,[_v(\"System\")]),_v(\" is the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"ProjectEx\")]),_v(\" and the \"),_c(\u0027strong\u0027,[_v(\"Actor\")]),_v(\" is the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"User\")]),_v(\", unless specified otherwise)\")])}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{More to be added}\")])])}"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"non-functional-requirements\"}},[_v(\"Non-Functional Requirements\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#non-functional-requirements\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Should work on any \"),_c(\u0027em\u0027,[_v(\"mainstream OS\")]),_v(\" as long as it has Java \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"11\")]),_v(\" or above installed.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.\")])])}"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{More to be added}\")])])}"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":61}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/SettingUp.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to help developers with setting up the project in their local environment.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"warning\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Caution:\")]),_v(\"\\nFollow the steps in the following guide precisely. Things will not work out if you deviate in some steps.\")])]),_v(\" \"),_m(2),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:trigger_id\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"eg. \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"init\")]),_v(\" or \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"build\")]),_v(\" commands\")]},proxy:true}])}),_v(\"\\n(Example) Steps to setup the project environment:\")],1),_v(\" \"),_c(\u0027ol\u0027,[_m(3),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Run setup commands\")]),_v(\": Run \"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:trigger_id\"}},[_v(\"commands\")]),_v(\" needed to setup the project.\"),_c(\u0027box\u0027,{attrs:{\"type\":\"warning\",\"seamless\":\"\"}},[_v(\"\\nNote: Remember to run commands from the appropriate directory.\\n\")])],1),_v(\" \"),_m(4),_v(\" \"),_m(5)]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_m(6),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_m(7),_v(\" \"),_c(\u0027p\u0027,[_v(\"Configure your VSCode or IDEA checkstyle to allign with the project\u0027s coding style.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\"\\nYou can easily customize your IDE\u0027s coding style through settings.\")])])],1),_v(\" \"),_m(8),_v(\" \"),_m(9),_v(\" \"),_m(10)])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#setting-up-and-getting-started\"}},[_v(\"Setting up and getting started‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#setting-up-the-project-in-your-computer\"}},[_v(\"Setting up the project in your computer‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#before-writing-code\"}},[_v(\"Before writing code‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(11)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"setting-up-and-getting-started\"}},[_v(\"Setting up and getting started\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#setting-up-and-getting-started\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"setting-up-the-project-in-your-computer\"}},[_v(\"Setting up the project in your computer\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#setting-up-the-project-in-your-computer\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"First, \"),_c(\u0027strong\u0027,[_v(\"fork\")]),_v(\" the project repo, and \"),_c(\u0027strong\u0027,[_v(\"clone\")]),_v(\" the fork into your computer.\")])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Download packages\")]),_v(\": Run \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm install\")]),_v(\" to download the required packages.\")])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Configure files\")]),_v(\": Edit config files according to your needs. For example, changing the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"appTitle\")]),_v(\" in \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"config.js\")]),_v(\" to match your project name.\")])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Verify the setup (optional)\")]),_v(\":\\n\"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Run the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"build\")]),_v(\" and \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"serve\")]),_v(\" commands, ensuring that the site properly deploys on your local host.\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Run the tests\")]),_v(\" to ensure they all pass.\")])])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"before-writing-code\"}},[_v(\"Before writing code\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#before-writing-code\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Configure the coding style\")])])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Set up CI\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"This project comes with a GitHub Actions config files (in \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\".github/workflows\")]),_v(\" folder). When GitHub detects those files, it will run the CI for your project automatically at each push to the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"master\")]),_v(\" branch or to any PR. No set up required.\")])])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Learn the design\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"When you are ready to start coding, we recommend that you get some sense of the overall design by reading about \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html#Architecture\"}},[_v(\"ProjectEx’s architecture\")]),_v(\".\")])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Do the tutorial\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tracing Code tutorial\")]),_v(\" can help you get acquainted with the codebase.\")])])}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":43}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Testing.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to understand the testing processes.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_m(3),_v(\" \"),_c(\u0027p\u0027,[_v(\"This project has two types of tests:\")]),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"1. Unit tests\")])])]},proxy:true}])},[_v(\"\\nThese tests target the lowest level methods/classes.\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Example command (replace with your own): \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run test\")])])]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"2. Integration tests\")])])]},proxy:true}])},[_v(\"\\nThese tests are checking the integration of multiple code units (those code units are assumed to be working).\\n\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#testing-guide\"}},[_v(\"Testing guide‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#running-tests\"}},[_v(\"Running tests‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#types-of-tests\"}},[_v(\"Types of tests‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(4)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"testing-guide\"}},[_v(\"Testing guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-guide\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"running-tests\"}},[_v(\"Running tests\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#running-tests\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Method 1: Using script\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Create script for running tests in package.json\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Open a console and run the command for the script, like \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run test\")])])])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"types-of-tests\"}},[_v(\"Types of tests\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#types-of-tests\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":22}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/TracingCode.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_m(1),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be taken as a reference on a tutorial on how to trace the execution path of a user command through the codebase of the App.\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"To understand an unfamiliar codebase, one strategy is to trace some representative execution path through the codebase using a debugger.\")]),_v(\" \"),_m(2),_v(\" \"),_c(\u0027p\u0027,[_v(\"Before we jump into the code, it is useful to get an idea of the overall structure and the high-level behavior of the application.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_v(\"Architecture diagrams can be easily utilised with the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams\"}},[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"puml\")])]),_v(\" tag. The \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"src\")]),_v(\" attribute specifies the path to the PlantUML file.\")])]),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/diagrams/example.png\",\"width\":\"300\"}}),_v(\" \"),_c(\u0027p\u0027,[_v(\"Before we proceed, ensure that you have done the following:\")]),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_c(\u0027p\u0027,[_v(\"As you know, the first step of debugging is to put in a breakpoint where you want the debugger to pause the execution.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\" You can use a combination of Markbind\u0027s \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html\"}},[_c(\u0027strong\u0027,[_v(\"Images and Diagrams\")]),_v(\" features\")]),_v(\" such as \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"puml\")]),_v(\" and \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"pic\")]),_v(\" tags to provide a visual representation of the steps to be taken. \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/formattingContents.html#code\"}},[_c(\u0027strong\u0027,[_v(\"Code blocks\")])]),_v(\" can also be used as shown below.\")])]),_v(\" \"),_m(5),_m(6),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\" You can use a list of steps to guide the reader through the process of tracing the execution path. This can be done using Markbind\u0027s \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/formattingContents.html#lists\"}},[_c(\u0027strong\u0027,[_v(\"Lists\")]),_v(\" feature\")]),_v(\".\")])]),_v(\" \"),_m(7)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#tutorial-tracing-code\"}},[_v(\"Tutorial: Tracing code‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#before-we-start\"}},[_v(\"Before we start‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#setting-a-breakpoint\"}},[_v(\"Setting a breakpoint‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#tracing-the-execution-path\"}},[_v(\"Tracing the execution path‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(8)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"tutorial-tracing-code\"}},[_v(\"Tutorial: Tracing code\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#tutorial-tracing-code\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027blockquote\u0027,[_c(\u0027p\u0027,[_v(\"Indeed, the ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. …​[Therefore,] making it easy to read makes it easier to write.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"— Robert C. Martin Clean Code: A Handbook of Agile Software Craftsmanship\")])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"before-we-start\"}},[_v(\"Before we start\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#before-we-start\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Read the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html#architecture\"}},[_c(\u0027em\u0027,[_v(\"Architecture\")]),_v(\" section of the DG\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Set up the project in your preferred IDE\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"setting-a-breakpoint\"}},[_v(\"Setting a breakpoint\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#setting-a-breakpoint\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027pre\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs java\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-keyword\"}},[_v(\"public\")]),_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-class\"}},[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-keyword\"}},[_v(\"interface\")]),_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-title\"}},[_v(\"Example\")]),_v(\" \")]),_v(\"{\\n\")]),_c(\u0027span\u0027,[_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\"/**\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" * Executes returns the output.\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" * \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-doctag\"}},[_v(\"@param\")]),_v(\" exampleInput The input as entered by the user.\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" * \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-doctag\"}},[_v(\"@return\")]),_v(\" The example output.\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" * \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-doctag\"}},[_v(\"@throws\")]),_v(\" ExampleException If an error occurs.\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" */\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-function\"}},[_v(\"ExampleOutput \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-title\"}},[_v(\"execute\")]),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-params\"}},[_v(\"(String exampleInput)\")]),_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-keyword\"}},[_v(\"throws\")]),_v(\" ExampleException\")]),_v(\";\\n\")]),_c(\u0027span\u0027,[_v(\"...\\n\")]),_c(\u0027span\u0027,[_v(\"}\\n\")])])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"tracing-the-execution-path\"}},[_v(\"Tracing the execution path\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#tracing-the-execution-path\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Firstly, do this.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Next, do that.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Finally, do this.\")])])])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":34}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/index.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_m(1),_v(\" \"),_c(\u0027pic\u0027,{staticStyle:{\"margin-bottom\":\"20px\"},attrs:{\"src\":\"/images/SeEduLogo.png\",\"width\":\"200px\"}},[_v(\"\\nProject Onboarding Screen\\n\")]),_v(\" \"),_m(2),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_c(\u0027p\u0027,[_v(\"Take this template as a \"),_c(\u0027em\u0027,[_v(\"starting point\")]),_v(\" for your project documentation, taking reference of what would be in a typical project documentation site, replacing the content with your own.\")])]),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nRemember to replace the following with your own acknowledgements.\\n\")]),_v(\" \"),_m(5)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(6)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"projectex\"}},[_v(\"ProjectEx\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#projectex\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/MarkBind/markbind/actions\"}},[_c(\u0027img\u0027,{staticClass:\"img-fluid\",attrs:{\"src\":\"https://github.com/MarkBind/markbind/workflows/CI/badge.svg\",\"alt\":\"CI Status\"}})]),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://codecov.io/gh/MarkBind/markbind\"}},[_c(\u0027img\u0027,{staticClass:\"img-fluid\",attrs:{\"src\":\"https://codecov.io/gh/MarkBind/markbind/branch/master/graph/badge.svg\",\"alt\":\"codecov\"}})])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation.\")])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"If you are interested in using ProjectEx, head over to the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_c(\u0027em\u0027,[_v(\"Quick Start\")]),_v(\" section of the \"),_c(\u0027strong\u0027,[_v(\"User Guide\")])]),_v(\".\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"If you are interested about contributing to developing ProjectEx, the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_c(\u0027strong\u0027,[_v(\"Developer Guide\")])]),_v(\" is a good place to start.\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Acknowledgements\")])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Libraries used: \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://openjfx.io/\"}},[_v(\"JavaFX\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/FasterXML/jackson\"}},[_v(\"Jackson\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/junit-team/junit5\"}},[_v(\"JUnit5\")])])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":28}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/bootstrap.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@charset \"UTF-8\";/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Bootstrap v5.1.3 (https://getbootstrap.com/)"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2021 The Bootstrap Authors"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2021 Twitter, Inc."},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a\u003ecode{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role\u003dbutton]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type\u003dbutton],[type\u003dreset],[type\u003dsubmit],button{-webkit-appearance:button}[type\u003dbutton]:not(:disabled),[type\u003dreset]:not(:disabled),[type\u003dsubmit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type\u003dsearch]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote\u003e:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row\u003e*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-1\u003e*{flex:0 0 auto;width:100%}.row-cols-2\u003e*{flex:0 0 auto;width:50%}.row-cols-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-4\u003e*{flex:0 0 auto;width:25%}.row-cols-5\u003e*{flex:0 0 auto;width:20%}.row-cols-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-sm-1\u003e*{flex:0 0 auto;width:100%}.row-cols-sm-2\u003e*{flex:0 0 auto;width:50%}.row-cols-sm-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4\u003e*{flex:0 0 auto;width:25%}.row-cols-sm-5\u003e*{flex:0 0 auto;width:20%}.row-cols-sm-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-md-1\u003e*{flex:0 0 auto;width:100%}.row-cols-md-2\u003e*{flex:0 0 auto;width:50%}.row-cols-md-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4\u003e*{flex:0 0 auto;width:25%}.row-cols-md-5\u003e*{flex:0 0 auto;width:20%}.row-cols-md-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-lg-1\u003e*{flex:0 0 auto;width:100%}.row-cols-lg-2\u003e*{flex:0 0 auto;width:50%}.row-cols-lg-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4\u003e*{flex:0 0 auto;width:25%}.row-cols-lg-5\u003e*{flex:0 0 auto;width:20%}.row-cols-lg-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-xl-1\u003e*{flex:0 0 auto;width:100%}.row-cols-xl-2\u003e*{flex:0 0 auto;width:50%}.row-cols-xl-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4\u003e*{flex:0 0 auto;width:25%}.row-cols-xl-5\u003e*{flex:0 0 auto;width:20%}.row-cols-xl-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-xxl-1\u003e*{flex:0 0 auto;width:100%}.row-cols-xxl-2\u003e*{flex:0 0 auto;width:50%}.row-cols-xxl-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4\u003e*{flex:0 0 auto;width:25%}.row-cols-xxl-5\u003e*{flex:0 0 auto;width:20%}.row-cols-xxl-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table\u003e:not(caption)\u003e*\u003e*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table\u003etbody{vertical-align:inherit}.table\u003ethead{vertical-align:bottom}.table\u003e:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm\u003e:not(caption)\u003e*\u003e*{padding:.25rem .25rem}.table-bordered\u003e:not(caption)\u003e*{border-width:1px 0}.table-bordered\u003e:not(caption)\u003e*\u003e*{border-width:0 1px}.table-borderless\u003e:not(caption)\u003e*\u003e*{border-bottom-width:0}.table-borderless\u003e:not(:first-child){border-top-width:0}.table-striped\u003etbody\u003etr:nth-of-type(odd)\u003e*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover\u003etbody\u003etr:hover\u003e*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type\u003dfile]{overflow:hidden}.form-control[type\u003dfile]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23343a40\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M2 5l6 6 6-6\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size\u003d\"1\"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type\u003dcheckbox]{border-radius:.25em}.form-check-input[type\u003dradio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type\u003dcheckbox]{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 20 20\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23fff\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00273\u0027 d\u003d\u0027M6 10l3 3l6-6\u0027/%3e%3c/svg%3e\")}.form-check-input:checked[type\u003dradio]{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00272\u0027 fill\u003d\u0027%23fff\u0027/%3e%3c/svg%3e\")}.form-check-input[type\u003dcheckbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 20 20\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23fff\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00273\u0027 d\u003d\u0027M6 10h8\u0027/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00273\u0027 fill\u003d\u0027rgba%280, 0, 0, 0.25%29\u0027/%3e%3c/svg%3e\");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00273\u0027 fill\u003d\u0027%2386b7fe\u0027/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00273\u0027 fill\u003d\u0027%23fff\u0027/%3e%3c/svg%3e\")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating\u003e.form-control,.form-floating\u003e.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating\u003elabel{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating\u003elabel{transition:none}}.form-floating\u003e.form-control{padding:1rem .75rem}.form-floating\u003e.form-control::-moz-placeholder{color:transparent}.form-floating\u003e.form-control::placeholder{color:transparent}.form-floating\u003e.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:focus,.form-floating\u003e.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating\u003e.form-control:focus~label,.form-floating\u003e.form-control:not(:placeholder-shown)~label,.form-floating\u003e.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating\u003e.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group\u003e.form-control,.input-group\u003e.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group\u003e.form-control:focus,.input-group\u003e.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg\u003e.btn,.input-group-lg\u003e.form-control,.input-group-lg\u003e.form-select,.input-group-lg\u003e.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm\u003e.btn,.input-group-sm\u003e.form-control,.input-group-sm\u003e.form-select,.input-group-sm\u003e.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg\u003e.form-select,.input-group-sm\u003e.form-select{padding-right:3rem}.input-group:not(.has-validation)\u003e.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)\u003e:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation\u003e.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation\u003e:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group\u003e:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 8 8\u0027%3e%3cpath fill\u003d\u0027%23198754\u0027 d\u003d\u0027M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size\u003d\"1\"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size\u003d\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23343a40\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M2 5l6 6 6-6\u0027/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 8 8\u0027%3e%3cpath fill\u003d\u0027%23198754\u0027 d\u003d\u0027M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z\u0027/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 12 12\u0027 width\u003d\u002712\u0027 height\u003d\u002712\u0027 fill\u003d\u0027none\u0027 stroke\u003d\u0027%23dc3545\u0027%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00276\u0027 r\u003d\u00274.5\u0027/%3e%3cpath stroke-linejoin\u003d\u0027round\u0027 d\u003d\u0027M5.8 3.6h.4L6 6.5z\u0027/%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00278.2\u0027 r\u003d\u0027.6\u0027 fill\u003d\u0027%23dc3545\u0027 stroke\u003d\u0027none\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size\u003d\"1\"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size\u003d\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23343a40\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M2 5l6 6 6-6\u0027/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 12 12\u0027 width\u003d\u002712\u0027 height\u003d\u002712\u0027 fill\u003d\u0027none\u0027 stroke\u003d\u0027%23dc3545\u0027%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00276\u0027 r\u003d\u00274.5\u0027/%3e%3cpath stroke-linejoin\u003d\u0027round\u0027 d\u003d\u0027M5.8 3.6h.4L6 6.5z\u0027/%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00278.2\u0027 r\u003d\u0027.6\u0027 fill\u003d\u0027%23dc3545\u0027 stroke\u003d\u0027none\u0027/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show\u003e.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show\u003e.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show\u003e.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show\u003e.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show\u003e.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show\u003e.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show\u003e.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show\u003e.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show\u003e.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show\u003e.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show\u003e.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show\u003e.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show\u003e.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show\u003e.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show\u003e.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show\u003e.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg\u003e.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm\u003e.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical\u003e.btn,.btn-group\u003e.btn{position:relative;flex:1 1 auto}.btn-group-vertical\u003e.btn-check:checked+.btn,.btn-group-vertical\u003e.btn-check:focus+.btn,.btn-group-vertical\u003e.btn.active,.btn-group-vertical\u003e.btn:active,.btn-group-vertical\u003e.btn:focus,.btn-group-vertical\u003e.btn:hover,.btn-group\u003e.btn-check:checked+.btn,.btn-group\u003e.btn-check:focus+.btn,.btn-group\u003e.btn.active,.btn-group\u003e.btn:active,.btn-group\u003e.btn:focus,.btn-group\u003e.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group\u003e.btn-group:not(:first-child),.btn-group\u003e.btn:not(:first-child){margin-left:-1px}.btn-group\u003e.btn-group:not(:last-child)\u003e.btn,.btn-group\u003e.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group\u003e.btn-group:not(:first-child)\u003e.btn,.btn-group\u003e.btn:nth-child(n+3),.btn-group\u003e:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm\u003e.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg\u003e.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical\u003e.btn,.btn-group-vertical\u003e.btn-group{width:100%}.btn-group-vertical\u003e.btn-group:not(:first-child),.btn-group-vertical\u003e.btn:not(:first-child){margin-top:-1px}.btn-group-vertical\u003e.btn-group:not(:last-child)\u003e.btn,.btn-group-vertical\u003e.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical\u003e.btn-group:not(:first-child)\u003e.btn,.btn-group-vertical\u003e.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show\u003e.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill\u003e.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified\u003e.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content\u003e.tab-pane{display:none}.tab-content\u003e.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar\u003e.container,.navbar\u003e.container-fluid,.navbar\u003e.container-lg,.navbar\u003e.container-md,.navbar\u003e.container-sm,.navbar\u003e.container-xl,.navbar\u003e.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show\u003e.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 30 30\u0027%3e%3cpath stroke\u003d\u0027rgba%280, 0, 0, 0.55%29\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-miterlimit\u003d\u002710\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M4 7h22M4 15h22M4 23h22\u0027/%3e%3c/svg%3e\")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show\u003e.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 30 30\u0027%3e%3cpath stroke\u003d\u0027rgba%28255, 255, 255, 0.55%29\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-miterlimit\u003d\u002710\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M4 7h22M4 15h22M4 23h22\u0027/%3e%3c/svg%3e\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card\u003ehr{margin-right:0;margin-left:0}.card\u003e.list-group{border-top:inherit;border-bottom:inherit}.card\u003e.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card\u003e.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card\u003e.card-header+.list-group,.card\u003e.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group\u003e.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group\u003e.card{flex:1 0 0%;margin-bottom:0}.card-group\u003e.card+.card{margin-left:0;border-left:0}.card-group\u003e.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group\u003e.card:not(:last-child) .card-header,.card-group\u003e.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group\u003e.card:not(:last-child) .card-footer,.card-group\u003e.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group\u003e.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group\u003e.card:not(:first-child) .card-header,.card-group\u003e.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group\u003e.card:not(:first-child) .card-footer,.card-group\u003e.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%230c63e4\u0027%3e%3cpath fill-rule\u003d\u0027evenodd\u0027 d\u003d\u0027M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\u0027/%3e%3c/svg%3e\");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:\"\";background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23212529\u0027%3e%3cpath fill-rule\u003d\u0027evenodd\u0027 d\u003d\u0027M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, \"/\")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered\u003eli::before{content:counters(section, \".\") \". \";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal\u003e.list-group-item.active{margin-top:0}.list-group-horizontal\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-sm\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-md\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-lg\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-xl\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-xxl\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush\u003e.list-group-item{border-width:0 0 1px}.list-group-flush\u003e.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23000\u0027%3e%3cpath d\u003d\u0027M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z\u0027/%3e%3c/svg%3e\") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container\u003e:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer\u003e*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^\u003dtop],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^\u003dtop] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^\u003dtop] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^\u003dright],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^\u003dright] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^\u003dright] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^\u003dbottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^\u003dbottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^\u003dbottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^\u003dleft],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^\u003dleft] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^\u003dleft] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^\u003dtop]\u003e.popover-arrow,.bs-popover-top\u003e.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^\u003dtop]\u003e.popover-arrow::before,.bs-popover-top\u003e.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dtop]\u003e.popover-arrow::after,.bs-popover-top\u003e.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^\u003dright]\u003e.popover-arrow,.bs-popover-end\u003e.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^\u003dright]\u003e.popover-arrow::before,.bs-popover-end\u003e.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dright]\u003e.popover-arrow::after,.bs-popover-end\u003e.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^\u003dbottom]\u003e.popover-arrow,.bs-popover-bottom\u003e.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^\u003dbottom]\u003e.popover-arrow::before,.bs-popover-bottom\u003e.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dbottom]\u003e.popover-arrow::after,.bs-popover-bottom\u003e.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^\u003dbottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^\u003dleft]\u003e.popover-arrow,.bs-popover-start\u003e.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^\u003dleft]\u003e.popover-arrow::before,.bs-popover-start\u003e.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dleft]\u003e.popover-arrow::after,.bs-popover-start\u003e.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23fff\u0027%3e%3cpath d\u003d\u0027M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\u0027/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23fff\u0027%3e%3cpath d\u003d\u0027M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\u0027/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:\"\"}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:\"\"}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio\u003e*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"/*# sourceMappingURL\u003dbootstrap.min.css.map */"}],"authorContributionMap":{"KevinEyo1":7}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"KevinEyo1":2}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/codeblock-light.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8ff}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#e6e6fa}.hljs.inline{background:#f8f8f8}.hljs.inline.no-lang{color:#e83e8c}.hljs:not(.inline){border:1px solid #c8c8c8;border:1px solid rgba(200,200,200,.3)}.code-block-heading{background:#f2f2ff;color:#8787a5}button.function-btn{background-color: #f8f8ff}"}],"authorContributionMap":{"KevinEyo1":2}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/markbind.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".resize-observer[data-v-8859cc6c]{background-color:transparent;border:none;opacity:0}.resize-observer[data-v-8859cc6c],.resize-observer[data-v-8859cc6c] object{display:block;height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.v-popper__popper{left:0;top:0;z-index:10000}.v-popper__popper.v-popper__popper--hidden{opacity:0;pointer-events:none;transition:opacity .15s,visibility .15s;visibility:hidden}.v-popper__popper.v-popper__popper--shown{opacity:1;transition:opacity .15s;visibility:visible}.v-popper__popper.v-popper__popper--skip-transition,.v-popper__popper.v-popper__popper--skip-transition\u003e.v-popper__wrapper{transition:none!important}.v-popper__backdrop{display:none;height:100%;left:0;position:absolute;top:0;width:100%}.v-popper__inner{box-sizing:border-box;overflow-y:auto;position:relative}.v-popper__inner\u003ediv{max-height:inherit;max-width:inherit;position:relative;z-index:1}.v-popper__arrow-container{height:10px;position:absolute;width:10px}.v-popper__popper--arrow-overflow .v-popper__arrow-container,.v-popper__popper--no-positioning .v-popper__arrow-container{display:none}.v-popper__arrow-inner,.v-popper__arrow-outer{border-style:solid;height:0;left:0;position:absolute;top:0;width:0}.v-popper__arrow-inner{border-width:7px;visibility:hidden}.v-popper__arrow-outer{border-width:6px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-inner{left:-2px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-outer{left:-1px}.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-bottom-width:0;border-left-color:transparent!important;border-right-color:transparent!important}.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-container{top:0}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-outer{border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;border-top-width:0}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-inner{top:-4px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-outer{top:-6px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-outer{top:-1px}.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-left-color:transparent!important;border-left-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-inner{left:-4px}.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-outer{left:-6px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-container{right:-10px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-right-color:transparent!important;border-right-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-inner{left:-2px}.v-popper--theme-dropdown .v-popper__inner{background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 6px 30px #0000001a;color:#000}.v-popper--theme-dropdown .v-popper__arrow-inner{border-color:#fff;visibility:visible}.v-popper--theme-dropdown .v-popper__arrow-outer{border-color:#ddd}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.8);border-radius:6px;color:#fff;padding:7px 12px 6px}.v-popper--theme-tooltip .v-popper__arrow-outer{border-color:#000c}.box-container[data-v-0eabf1c4]{border-radius:6px;padding:0}.box-header-wrapper[data-v-0eabf1c4]{align-items:center;border-radius:6px 6px 0 0;display:flex;flex-direction:row;padding:.4rem 1.25rem .28rem;width:100%}.box-body-wrapper[data-v-0eabf1c4]{display:flex;flex-direction:row;padding:.75rem 1.25rem;width:100%}.box-container.seamless\u003e.header-and-body\u003e.box-body-wrapper[data-v-0eabf1c4]{padding:.75rem .5rem}.contents[data-v-0eabf1c4]{min-width:0;padding:0 6px;width:100%}.box-container.seamless\u003e.header-and-body\u003ediv.box-body-wrapper\u003e.contents[data-v-0eabf1c4]{padding-left:12px}.heading[data-v-0eabf1c4]{background-color:hsla(0,0%,94%,.6);border-radius:0 6px;border-width:0;color:inherit;display:inline;float:right;font-weight:400;margin:-13px -27px 0 15px;padding:3px 5px 4px;width:auto}.box-body-wrapper-with-heading[data-v-0eabf1c4]{padding-top:.5rem}.alert-dismissible[data-v-0eabf1c4]{padding-right:4rem}.box-header[data-v-0eabf1c4]{font-weight:500}.icon-wrapper[data-v-0eabf1c4]{display:inline;margin-right:.5em;min-width:1em;text-align:center}.close-with-heading[data-v-0eabf1c4]{padding:1rem;position:absolute;right:0;top:0}.close-with-heading\u003espan[data-v-0eabf1c4]{vertical-align:text-top}.alert-dismissible .btn-close[data-v-0eabf1c4]{padding:1rem}.contents[data-v-0eabf1c4]\u003e:last-child{margin-bottom:0}.alert-default[data-v-0eabf1c4]{background-color:#f6f8fa;border-color:#e8ebef;color:#24292e}.alert-border-left[data-v-0eabf1c4]{background-color:#f9f8f8;border-left:solid;border-width:0 0 0 5px}.vertical-divider[data-v-0eabf1c4]{width:4px}.horizontal-divider[data-v-0eabf1c4]{height:3px;margin:0 auto;width:calc(100% - 2.5rem)}.no-background[data-v-0eabf1c4]{background:none}.no-border[data-v-0eabf1c4]{border:none}@media screen and (width \u003c\u003d 768px){.box-header-wrapper[data-v-0eabf1c4]{padding:.75rem .75rem .1rem}.box-body-wrapper[data-v-0eabf1c4]{padding:.75rem}.contents[data-v-0eabf1c4]{padding:0}}div.box-header\u003e*{margin-bottom:0}.notlink[data-v-ef898034]{color:#6d757d}.breadcrumb-divider[data-v-ef898034]{--bs-breadcrumb-divider:\"›\"}.breadcrumb-item[data-v-ef898034]:before,.breadcrumb-marker[data-v-ef898034]{font-size:15px}.dropdown-submenu[data-v-3c82541c]{color:#212529!important;padding:0!important;position:relative}.dropdown-submenu ul.dropdown-menu[data-v-3c82541c]{margin-left:0}.btn-group\u003eul\u003e.dropdown-submenu:last-child\u003eul[data-v-3c82541c],.dropdown\u003eul\u003e.dropdown-submenu:last-child\u003eul[data-v-3c82541c]{margin-bottom:-.5rem}@media (width \u003e\u003d 768px){.submenu-toggle[data-v-3c82541c]:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:\"\";display:inline-block;float:right;height:0;margin-top:.5em;vertical-align:.255em;width:0}}@media (width \u003c\u003d 767px){.dropdown-submenu\u003eul[data-v-3c82541c]{border-radius:0;float:none;margin:-.05rem;padding-bottom:0;position:static}.submenu-toggle[data-v-3c82541c]:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:\"\";display:inline-block;float:right;height:0;margin-left:.255em;margin-top:.5em;vertical-align:.255em;width:0}.navbar-default .dropdown[data-v-ccda25c0]{position:static}.navbar-default .dropdown-menu[data-v-ccda25c0]{max-height:75vh;max-width:100%;overflow-y:auto;overscroll-behavior:contain;position:absolute}.navbar-default .dropdown-menu-end[data-v-ccda25c0]{right:auto}}.secret[data-v-ccda25c0]{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.btn-with-before[data-v-ccda25c0]{padding-left:.2rem;padding-right:.4rem}.dropdown-toggle[data-v-ccda25c0]{cursor:pointer;display:block;width:max-content}.navbar .dropdown-toggle[data-v-ccda25c0]{text-decoration:none}.nav-link\u003e.nav-link[data-v-ccda25c0]{padding:0}.toggle-site-nav-button[data-v-d6ffaa8e]{cursor:pointer;height:53px;left:0;padding:15px;position:absolute;transform:rotate(0deg);transition:all .25s ease-in-out;width:52px}.toggle-site-nav-button span[data-v-d6ffaa8e]{background-color:#000;display:block;height:3px;left:15px;position:absolute;top:50%;transition:all .25s ease-in-out;width:21px}.toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:first-child{transform:translateY(-8px)}.toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(2){transform-origin:100% 50%}.toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:first-child{transform:rotate(135deg)}.nav-menu-close-icon .toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(2){left:-60px;opacity:0}.nav-menu-close-icon .toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(3){transform:rotate(-135deg)}.toggle-page-nav-button[data-v-4b08b1df]{cursor:pointer;padding:15px;position:absolute;right:0;top:6px}.toggle-page-nav-button span[data-v-4b08b1df]{background-color:#000;border-radius:50%;display:block;height:5px;margin-top:2px;position:absolute;right:15px;transform:rotate(0deg);transition:all .25s ease-in-out;width:5px}.toggle-page-nav-button\u003espan[data-v-4b08b1df]:first-child{transform:translateY(-8px)}.toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(2){transform-origin:100% 50%}.toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-page-nav-button\u003espan[data-v-4b08b1df]:first-child{border-radius:0;height:3px;transform:rotate(135deg);width:21px}.nav-menu-close-icon .toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(2){transform:scale(0)}.nav-menu-close-icon .toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(3){border-radius:0;height:3px;transform:rotate(-135deg);width:21px}@media (width \u003c\u003d 767px){.navbar[data-v-7c0fd418]{padding-bottom:0;padding-left:0;padding-right:0}.navbar-left[data-v-7c0fd418]{max-width:50%;order:1;padding-left:1rem}.navbar-left [data-v-7c0fd418]{white-space:normal}.navbar-right[data-v-7c0fd418]{max-width:50%;order:1;padding:0 16px}.navbar-default[data-v-7c0fd418]{-ms-overflow-style:none;display:block;margin-top:.3125rem;order:2;overflow-x:scroll;scrollbar-width:none;width:100%}.navbar-default[data-v-7c0fd418]::-webkit-scrollbar{display:none}.navbar-default ul[data-v-7c0fd418]{flex-direction:row;margin-top:0!important;width:100%}.navbar-default\u003eul\u003e[data-v-7c0fd418]{background:rgba(0,0,0,.2);flex-grow:1;padding:.3125rem .625rem}.navbar-light .navbar-default\u003eul\u003e[data-v-7c0fd418]{background:rgb(0 0 0/5%)}.navbar-default\u003eul\u003e.current[data-v-7c0fd418]{background:transparent}.navbar-default a[data-v-7c0fd418],[data-v-7c0fd418] .dropdown-toggle{margin:0 auto;width:max-content}[data-v-7c0fd418] .dropdown{align-items:center;display:flex}.container-fluid[data-v-7c0fd418]{padding:0}}.navbar-brand[data-v-7c0fd418]{display:inline-block}.navbar-brand\u003eimg[data-v-7c0fd418],.navbar-brand\u003esvg[data-v-7c0fd418]{display:block}.navbar-right[data-v-7c0fd418]{padding-right:1rem}.navbar-left[data-v-7c0fd418]{align-items:center;display:flex;font-size:1.25rem;line-height:inherit;padding:.3125rem 1rem;white-space:nowrap}.navbar-fixed[data-v-7c0fd418]{position:fixed;width:100%;z-index:1000}.navbar-default[data-v-7c0fd418]{align-items:center;display:flex;flex-basis:auto;flex-grow:1}[data-v-7c0fd418] .dropdown-current{background:#007bff;color:#fff!important}.lower-navbar-container[data-v-7c0fd418]{background-color:#fff;border-bottom:1px solid #c1c1c1;height:50px;position:relative;width:100%}.navbar.navbar-dark .navbar-nav[data-v-7c0fd418] .current:not(.dropdown) a,.navbar.navbar-dark .navbar-nav[data-v-7c0fd418] .dropdown.current\u003ea{color:#fff}.navbar.navbar-light .navbar-nav[data-v-7c0fd418] .current:not(.dropdown) a,.navbar.navbar-light .navbar-nav[data-v-7c0fd418] .dropdown.current\u003ea{color:#000}.collapse-button{float:right;font-size:10px!important;margin-left:3px;margin-top:2px;padding:3px 8px!important}.collapse-icon{transition:transform .4s ease-in-out}.collapse-icon.opened{transform:rotate(-180deg)}.card-container[data-v-3602e6fc]{scroll-margin-top:var(--sticky-header-height)}.card-collapse[data-v-3602e6fc]{overflow:hidden;transition:max-height .5s ease-in-out}.seamless-button[data-v-3602e6fc]{opacity:0;transition:opacity .3s}.card-header:hover .seamless-button[data-v-3602e6fc]{opacity:1}.card-peek-collapsed[data-v-3602e6fc]{position:relative}.card-peek-collapsed[data-v-3602e6fc]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:\"\";height:125px;position:absolute;width:100%}.peek-read-more[data-v-3602e6fc]{opacity:.2;transition:opacity .5s;z-index:1}.peek-read-more[data-v-3602e6fc]:before{bottom:10px;position:absolute;text-align:center;width:100%}.peek-read-more[data-v-3602e6fc]:hover{cursor:pointer;opacity:.4}.peek-read-more-fade-enter[data-v-3602e6fc],.peek-read-more-fade-leave-to[data-v-3602e6fc]{opacity:0}.card-heading{width:100%}.card-title{display:inline-block;font-size:1em;line-height:1.2em;margin:0;text-align:left;white-space:normal}.card-title *{margin-bottom:0!important}.caret-wrapper{float:left;width:32px}.minimal-caret-wrapper{display:inline-block;font-size:13px;margin-right:5px}.header-wrapper{display:inline-block;transition:opacity .5s;width:calc(100% - 128px)}.header-transparent{opacity:0}.button-wrapper{float:right;width:96px}.header-toggle{cursor:pointer}.expandable-card{margin-bottom:0!important;margin-top:5px}.card-collapse\u003ehr{margin-top:0}.card-group\u003e.card-container\u003e.expandable-card{margin-top:0!important}.bottom-button-wrapper{margin-bottom:13px;padding-bottom:13px}.bottom-button-wrapper\u003e.collapse-button{margin-top:5px;opacity:.2}.bottom-button-wrapper\u003e.collapse-button:hover{opacity:1}.close-button{margin-left:3px}.close-button,.popup-button{float:right;font-size:10px!important;margin-top:2px;padding:3px 8px!important}.morph{display:inline-block}.morph-display-wrapper{align-items:center;display:flex;margin-top:5px}@media (width \u003c\u003d 575.98px){.header-wrapper{display:inline-block;width:calc(100% - 64px)}.button-wrapper{float:right;width:32px}.card-body{padding:.5rem}.card-collapse\u003ehr{margin-top:.5rem}.card-header{padding:.5rem}}.card-peek-collapsed[data-v-6cec1f15]{position:relative}.card-peek-collapsed[data-v-6cec1f15]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:\"\";height:125px;position:absolute;width:100%}.morph-title[data-v-6cec1f15]{background-color:transparent;border-color:#000;padding:0 .3em;vertical-align:top}.morph-title[data-v-6cec1f15]:active,.morph-title[data-v-6cec1f15]:focus,.morph-title[data-v-6cec1f15]:hover{background-color:#343a40;border-color:#343a40;color:#fff}.card-collapse[data-v-6cec1f15]{overflow:hidden;transition:max-height .5s ease-in-out}.card-flex[data-v-6cec1f15]{border:0;display:flex;flex-direction:column;margin:0}.header-fade-enter[data-v-6cec1f15]{opacity:0}.header-fade-leave-active[data-v-6cec1f15]{position:absolute}.header-fade-leave-to[data-v-6cec1f15]{opacity:0!important}.card-title-inline[data-v-6cec1f15]{display:inline-block}.card-body[data-v-6cec1f15]{padding:0}.header-wrapper[data-v-6cec1f15]{background-color:#fff;display:inline-block;width:100%}.header-wrapper-bottom[data-v-6cec1f15]{order:1}.ellipses[data-v-6cec1f15]:before{bottom:3px;content:\"...\";font-weight:900;margin-right:4px;position:relative}.button-wrapper[data-v-6cec1f15]{border:solid hsla(0,0%,59%,.2);border-width:0 0 0 1px;display:inline-block;float:none;margin-left:2px;opacity:0;padding-left:2px;transition:opacity .5s;vertical-align:text-top;width:auto}.button-wrapper-expanded[data-v-6cec1f15]{border:0;margin-left:0;padding-left:0}.card:hover .button-wrapper[data-v-6cec1f15]{opacity:1}.header-toggle[data-v-6cec1f15]{cursor:pointer}.glyphicon[data-v-6cec1f15]{font-size:12px}.minimal-button[data-v-6cec1f15]{background-color:transparent;border:0;color:#969696;cursor:pointer;padding:0 3px}.minimal-button[data-v-6cec1f15]:active,.minimal-button[data-v-6cec1f15]:focus,.minimal-button[data-v-6cec1f15]:hover{color:#1e1e1e}.minimal-popup-button[data-v-6cec1f15]{font-size:9px;top:1px}.minimal-menu-up[data-v-6cec1f15]{font-size:13px;top:2px}.minimal-menu-down[data-v-6cec1f15]{font-size:13px;top:1px}.minimal-close-button[data-v-6cec1f15]{font-size:11px;top:0}@media (width \u003c\u003d 575.98px){.button-wrapper-expanded[data-v-6cec1f15]{border:0;margin-left:0;opacity:.15;padding-left:0}.button-wrapper-visible[data-v-6cec1f15]{opacity:1}}.annotate-image-wrapper{display:inline-block;position:relative;text-align:left}.annotate-image{height:auto;max-width:100%}.annotate-point{bottom:0;left:0;pointer-events:none;top:0}.annotate-point,.popover-annotation{height:100%;position:absolute;width:100%}.hover-point{border-radius:50%;border-style:solid;border-width:1px;z-index:1}.hover-label{pointer-events:none;position:absolute;text-align:center;z-index:2}.hover-wrapper{align-items:center;background:transparent;display:inline-flex;justify-content:center;z-index:0}.legend-wrapper{height:100%;position:relative}.text-header{font-size:1.1em;font-weight:500;margin-top:1em}.image-wrapper{display:inline-block;padding:4px;text-align:center}.image-caption{display:block}.quiz-container[data-v-2b2275c0]{isolation:isolate;overflow:hidden}.intro-outro-card[data-v-2b2275c0]{transition:transform .35s ease-out,opacity .35s linear}.intro-outro-card-enter-active[data-v-2b2275c0],.intro-outro-card-leave-to[data-v-2b2275c0]{opacity:0}.intro-outro-card\u003e.card-body[data-v-2b2275c0]{align-items:center;display:flex;flex-direction:column;justify-content:center}.score[data-v-2b2275c0]{font-size:1.4rem;font-weight:700}.score-circle[data-v-2b2275c0]{stroke-dasharray:264;fill:none;stroke:rgba(132,215,255,.8);stroke-width:8;transition:stroke-dashoffset 1.5s ease-out,stroke 1.5s linear}.score-background-circle[data-v-2b2275c0]{fill:none;stroke:hsla(0,2%,89%,.5);stroke-width:8}.btn[data-v-2b2275c0]{border-radius:2em}.progress-bar-z[data-v-2b2275c0]{z-index:1}.result-icon[data-v-ae369d74]{align-items:center;border-radius:2em;border-style:solid;border-width:2px;display:inline-flex;height:2em;justify-content:center;width:2em}.question[data-v-ae369d74]{margin-bottom:1rem;transition:transform .35s ease-out,opacity .35s linear}.question-enter-active[data-v-ae369d74]{opacity:0;transform:translateY(-2%)}.question-leave-to[data-v-ae369d74]{opacity:0;transform:translateY(2%)}.q-btn[data-v-ae369d74]{border-radius:2.5em;transition:opacity .5s,transform .7s}.q-btn-enter[data-v-ae369d74]{opacity:0;transform:translateY(30px)}.q-btn-leave-to[data-v-ae369d74]{opacity:0;transform:translateX(calc(-100% - .25rem))}.q-btn-leave-active[data-v-ae369d74]{position:absolute}.card-header[data-v-ae369d74]{font-size:1.05em;font-weight:400}.answer[data-v-ae369d74]\u003e:last-child,.card-header[data-v-ae369d74]\u003e:last-child{margin-bottom:0}@keyframes shake-data-v-ae369d74{50%{transform:translate(-2px)}to{transform:translate(2px)}}.shake[data-v-ae369d74]{animation:shake-data-v-ae369d74 .15s;animation-iteration-count:1}textarea.form-control[data-v-ae369d74]{height:auto;margin-bottom:10px;min-height:75px}.fa-check[data-v-1074287c],.fa-times[data-v-1074287c]{font-size:1.2em}.content[data-v-1074287c] :last-child,.reason[data-v-1074287c] :last-child{margin-bottom:0}.reason[data-v-1074287c]{padding:0 .5rem}.checkbox-label[data-v-1074287c]{cursor:pointer}.form-control[data-v-1074287c]{cursor:pointer;height:auto;margin-bottom:10px}.form-control.danger\u003e.checkbox-label[data-v-1074287c],.form-control.danger[data-v-1074287c],.form-control.success\u003e.checkbox-label[data-v-1074287c],.form-control.success[data-v-1074287c]{cursor:default}.disabled[data-v-1074287c]{opacity:.9}.radio-svg[data-v-1074287c]{height:1em;vertical-align:text-top;width:1em}.checkbox[data-v-1074287c]{height:1em;margin-right:5px;vertical-align:middle;width:1em}.row[data-v-1074287c]{align-items:center;margin:.2rem 0 0}input.form-control[data-v-1074287c]{cursor:text;height:auto;margin-bottom:0;min-height:20px;width:50%}.blanks-keywords[data-v-1074287c],input.form-control[data-v-1074287c]:disabled{margin-bottom:.5rem}.blanks-form-control[data-v-1074287c]{border:none;cursor:default}.blanks-cross[data-v-1074287c]{margin-left:3px;margin-right:3px}.fa-hashtag[data-v-98afe086],.fa-key[data-v-98afe086]{padding-right:.2em}.mark[data-v-98afe086]{padding:0!important}.heading[data-v-98afe086]{padding:0 0 .1rem .2rem}.heading-text[data-v-98afe086]{display:inline-block;vertical-align:top;white-space:normal;width:92%;word-break:break-word}.keyword-text[data-v-98afe086]{font-size:smaller}.page-title[data-v-98afe086]{font-size:1.05rem;font-weight:700}.page-headings-separator[data-v-98afe086]{margin:.2rem 0}.dropdown[data-v-cea1a814]{display:block}.form-control[data-v-cea1a814]{max-width:25.4em;min-width:12.7em}@media screen and (width \u003c\u003d 878px) and (orientation:portrait){.form-control[data-v-cea1a814]{max-width:16em;min-width:8em}}@media screen and (width \u003e\u003d 768px) and (width \u003c\u003d 878px) and (orientation:landscape){.form-control[data-v-cea1a814]{max-width:18em;min-width:9em}}.table-active[data-v-cea1a814]{background-color:rgba(0,0,0,.075)}.dropdown-menu-end[data-v-cea1a814]{left:auto;right:0}.placeholder-div-hidden[data-v-cea1a814]{border-bottom:0;border-top:0;height:0;overflow:hidden;padding-bottom:0;padding-top:0;visibility:hidden}.search-dropdown-menu{max-height:30em;min-width:30em;overflow-y:scroll}.dropdown-menu\u003eli\u003ea{cursor:pointer}@media screen and (width \u003c\u003d 768px){.search-dropdown-menu{max-height:30em;min-width:90vw;overflow-y:scroll}.dropdown-menu.search-dropdown-menu{position:absolute}}.tab-pane\u003ehr[data-v-661c1b61]{margin:0}.printable-tab-header[data-v-661c1b61],.tab-pane-hide[data-v-661c1b61]{display:none}@media print{.printable-tab-header[data-v-661c1b61]{border-bottom:1px solid #dee2e6;display:flex;margin-bottom:15px}.printable-tab-header\u003ediv[data-v-661c1b61]{margin-bottom:-2px}.printable-tab-pane[data-v-661c1b61]{display:block;padding:10px}}.nav-tabs[data-v-a785351c]{margin-bottom:15px}.printable-tab-group-header[data-v-a785351c]{display:none}@media print{.printable-tab-group[data-v-a785351c]{border:1px solid #dee2e6;border-radius:5px;margin:10px 0;padding:10px}.printable-tab-group-header[data-v-a785351c]{display:block;margin-bottom:10px;text-decoration:underline}}.nav-tabs[data-v-70a68808]{margin-bottom:15px}.tab-content[data-v-70a68808]{margin-bottom:1.5rem}@media print{.printable-tabs[data-v-70a68808]{border:1px solid #dee2e6;border-radius:5px;padding:20px}}.thumb-wrapper{display:inline-block;overflow:hidden;position:relative;text-align:center;vertical-align:middle}.thumb-circle{border-radius:50%}.thumb-image{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.site-nav-root a.current{color:#0072ec}.site-nav-list{list-style-type:none;padding-left:0}.site-nav-default-list-item{cursor:pointer;display:flex;transition:background-color .08s}.site-nav-custom-list-item,.site-nav-default-list-item{color:#454545;padding:.5rem 0 0 2.8rem}.site-nav-list-item-0{font-size:1.2em;font-weight:500;padding:.5rem 0 .5rem .8rem}.site-nav-list-item-1{font-size:1.03em;padding:.4rem 0 .4rem 1.3rem}.site-nav-list-item-2{font-size:.89em;padding:.3rem 0 .3rem 1.8rem}.site-nav-list-item-3{font-size:.76em;padding:.2rem 0 .2rem 2.4rem}.site-nav-default-list-item:hover{background-color:rgba(214,233,255,.35)}.site-nav-default-list-item a{color:#454545;display:inline-block;height:100%}.site-nav-default-list-item:hover a{color:#000;text-decoration:none}.site-nav-dropdown-btn-container{display:flex;height:1.5em;margin:0 .75rem 0 auto;place-content:center center;width:2rem}.site-nav-dropdown-btn-icon{align-self:center;border-radius:1rem;display:inline-block;height:1.5em;padding:0;text-align:center;transform:rotate(0deg);transition:.4s;vertical-align:baseline;width:1.5em}.site-nav-dropdown-btn-icon:hover{background-color:#d8e3fb}.site-nav-rotate-icon{color:#4c7ff1;transform:rotate(-180deg)}.site-nav-dropdown-container{background:transparent;max-height:0;overflow:hidden;transition:max-height .15s ease-out}.site-nav-dropdown-container-open{max-height:1000px;transition:max-height .25s ease-in}.nav-menu[data-v-1a3e7aee]{display:none;overflow-y:auto;padding:0 10px 20px;position:absolute;top:100%}.nav-menu-open[data-v-1a3e7aee]{background:#fff;clear:both;display:block!important;width:100%!important}.mb-mobile-nav[data-v-e6005420]{border:none!important;display:block!important;margin:0!important;max-width:100%!important;padding:10px!important;width:100%!important}.popover-container{max-height:50vh;max-width:276px;overflow:auto}.popover-body{font-size:.875rem}.v-popper{display:inline}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.9);font-size:.875rem;max-width:200px;padding:4px 8px;text-align:center}.modal{display:block}.modal-zoom{opacity:0;transform:scale(.1);transition:all .3s}.modal-zoom-show{opacity:1;transform:scale(1);transition:all .3s}.scroll-top-button{bottom:20px;cursor:pointer;display:none;opacity:.4;position:fixed;right:30px;transition-duration:.25s;transition-property:opacity;z-index:99}.scroll-top-button.lighten{opacity:.15}@media (hover:hover){.scroll-top-button:hover{opacity:.7}}.scroll-top-button:active{opacity:1}@media print{.hljs{background:#f8f8ff;color:#333;display:block;overflow-x:auto;padding:.5em}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs span.highlighted{background:#e6e6fa}.hljs.inline{background:#f8f8f8}.hljs.inline.no-lang{color:#e83e8c}.hljs:not(.inline){border:1px solid #c8c8c8;border:1px solid hsla(0,0%,78%,.3)}.code-block-heading{background:#f2f2ff;color:#8787a5}button.function-btn{background-color:#f8f8ff}}:root{--sticky-header-height:0}a{text-decoration:none}blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;padding:0 1rem}code{background:#f8f8f8;border-radius:3px;padding:.2em .4em;word-break:normal}mark code{background:#ffffffd4}pre.hljs\u003ecode{background:none}pre\u003ecode.hljs{background-clip:padding-box;border-radius:5px;counter-reset:line;width:100%}pre\u003ecode.hljs[heading]{border-top-right-radius:0}.code-block{position:relative}.code-block-heading{border-radius:6px 6px 0 0;float:right;font-size:85%;line-height:1;margin-top:5px;max-width:85%;overflow-wrap:break-word;padding:.25em .4em;text-align:right}.inline-markdown-heading{line-height:1.5}.code-block-content{clear:both;display:block}@media print{pre\u003ecode.hljs{word-wrap:break-word;white-space:pre-wrap;word-break:break-all}.hljs:not(.inline).line-numbers-print\u003espan{padding:0 .5em 0 3.5em;position:relative}.hljs:not(.inline).line-numbers-print\u003espan:before{border-right:1px solid #ddd;color:#888;content:counter(line);counter-increment:line;display:inline-block;height:100%;left:0;margin-right:.5em;padding-right:.5em;position:absolute;text-align:right;top:0;width:3em}.hljs span.highlighted{background:#e6e6fa!important;-webkit-print-color-adjust:exact}}kbd{background-color:#fafbfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5;color:#444d56}.btn:active,.btn:focus{box-shadow:none!important;outline:none!important}code.hljs.inline{display:initial;padding:.2em .4em}.markbind-table{width:auto}.radio-list-item,.task-list-item{list-style-type:none;margin:0 0 0 -1.2em}.radio-list-item label{font-weight:inherit}.table-striped\u003etbody\u003etr:nth-of-type(2n),.table-striped\u003ethead{background-color:#fff}header[sticky]{position:sticky;top:0;transition:transform .3s ease-in-out;width:100%;z-index:1001}header[sticky].hide-header{transform:translateY(calc(var(--sticky-header-height)*-1))}span.anchor{position:relative;top:calc(var(--sticky-header-height)*-1 - 1rem)}#app{display:flex;flex-direction:column;min-height:100vh}footer{background-color:#f5f5f5;color:dimgrey;padding:10px 0}.dimmed{color:#777}.large{font-size:125%}.small{font-size:80%}.underline{text-decoration:underline}.mkb-text-red{color:red!important}.mkb-text-green{color:green!important}.mkb-text-blue{color:blue!important}.mkb-text-cyan{color:cyan!important}.mkb-text-magenta{color:#f0f!important}.mkb-text-yellow{color:#ff0!important}.mkb-text-black{color:#000!important}.mkb-text-white{color:#fff!important}@media (width \u003c\u003d 767.98px){.dropdown-menu\u003eli\u003ea{white-space:normal}.navbar-nav .open .dropdown-menu{background-color:#fff}}li.footnote-item:target{background-color:#eee}.hljs:not(.inline)\u003espan{display:block}.hljs:not(.inline).line-numbers\u003espan{padding:0 .5em 0 3.5em;position:relative}.hljs:not(.inline).line-numbers\u003espan:before{border-right:1px solid #ddd;color:#888;content:counter(line);counter-increment:line;display:inline-block;height:100%;left:0;margin-right:.5em;padding-right:.5em;position:absolute;text-align:right;top:0;width:3em}.trigger{border-bottom:1px dotted}.trigger-click{border-bottom:1px dashed;cursor:pointer}.trigger-click:focus{outline:none}pre{display:flex;position:relative}button.function-btn{border:1px solid #d7dadc;border-radius:5px;color:#a9a9a9;cursor:pointer;display:none;margin:.17rem;padding:.35rem;position:absolute;right:0;text-align:center;white-space:nowrap}button.function-btn+button.function-btn{right:36px}pre:hover\u003e.function-btn-container\u003ebutton.function-btn{display:block}.function-btn:hover{color:gray;transition:all .5s ease}.function-btn-body{align-items:center;display:flex}.function-btn svg{fill:currentcolor}code.wrap{word-wrap:break-word;white-space:pre-wrap;word-break:break-all}.octicon{height:1em;width:1em}hr{background-color:transparent;border-top:1px solid rgba(0,0,0,.1);opacity:1}hr.dotted{border-top-style:dotted;border-top-width:.1rem}hr.double{border-top-style:double;border-top-width:.2rem}hr.dashed{border-top-style:dashed;border-top-width:.1rem}hr.thick{border-top-width:.15rem}hr.thick-1{border-top-width:.25rem}hr.thick-2{border-top-width:.5rem}hr.thick-3{border-top-width:.75rem}ol,ul{padding-left:1.5rem}h1,h2,h3,h4,h5,h6{margin-bottom:1rem;scroll-margin-top:var(--sticky-header-height)}.block-embed{overflow-x:auto;position:relative;width:100%}.block-embed iframe{height:100%;left:0;position:absolute;top:0;width:100%}#mb-page-nav{padding:.8rem 12px 0}#mb-page-nav a:link,#mb-page-nav a:visited{color:#9b9b9b;text-decoration:none}#mb-page-nav a:hover{color:#000}#mb-page-nav a.active{background-color:transparent;color:#000}.page-nav-title{color:#000;display:block;padding-left:.5rem;white-space:inherit}.nested{margin-left:5%}.no-flex-wrap{flex-wrap:nowrap}@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_AMS-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_AMS-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_AMS-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Caligraphic-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_Caligraphic-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_Caligraphic-Bold.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Caligraphic-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Caligraphic-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Caligraphic-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Fraktur-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_Fraktur-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_Fraktur-Bold.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Fraktur-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Fraktur-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Fraktur-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Main-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_Main-Bold.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Main-BoldItalic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-BoldItalic.woff) format(\"woff\"),url(../fonts/KaTeX_Main-BoldItalic.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Main-Italic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-Italic.woff) format(\"woff\"),url(../fonts/KaTeX_Main-Italic.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Main-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Main-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Math-BoldItalic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Math-BoldItalic.woff) format(\"woff\"),url(../fonts/KaTeX_Math-BoldItalic.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Math-Italic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Math-Italic.woff) format(\"woff\"),url(../fonts/KaTeX_Math-Italic.ttf) format(\"truetype\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:normal;font-weight:700;src:url(../fonts/KaTeX_SansSerif-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_SansSerif-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_SansSerif-Bold.ttf) format(\"truetype\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:italic;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Italic.woff2) format(\"woff2\"),url(../fonts/KaTeX_SansSerif-Italic.woff) format(\"woff\"),url(../fonts/KaTeX_SansSerif-Italic.ttf) format(\"truetype\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:normal;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_SansSerif-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_SansSerif-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Script-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Script-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Script-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size1-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size1-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size1-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size2-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size2-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size2-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size3-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size3-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size3-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size4-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size4-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size4-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Typewriter-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Typewriter-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Typewriter-Regular.ttf) format(\"truetype\")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:\"0.15.6\"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html\u003e.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist\u003espan{display:block;height:0;position:relative}.katex .vlist\u003espan\u003espan{display:inline-block}.katex .vlist\u003espan\u003e.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac\u003espan\u003espan{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap\u003e.inner,.katex .llap\u003e.inner,.katex .rlap\u003e.inner{position:absolute}.katex .clap\u003e.fix,.katex .llap\u003e.fix,.katex .rlap\u003e.fix{display:inline-block}.katex .llap\u003e.inner{right:0}.katex .clap\u003e.inner,.katex .rlap\u003e.inner{left:0}.katex .clap\u003e.inner\u003espan{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt\u003e.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1\u003espan{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4\u003espan{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent\u003e.vlist-t,.katex .op-limits\u003e.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c\u003e.vlist-t{text-align:center}.katex .mtable .col-align-l\u003e.vlist-t{text-align:left}.katex .mtable .col-align-r\u003e.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:\"\"}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:\"(\" counter(katexEqnNo) \")\";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:\"(\" counter(mmlEqnNo) \")\";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display\u003e.katex{display:block;text-align:center;white-space:nowrap}.katex-display\u003e.katex\u003e.katex-html{display:block;position:relative}.katex-display\u003e.katex\u003e.katex-html\u003e.tag{position:absolute;right:0}.katex-display.leqno\u003e.katex\u003e.katex-html\u003e.tag{left:0;right:auto}.katex-display.fleqn\u003e.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.katex{font-size:1em!important}eq{display:inline-block}eqn{display:block}section.eqno{align-content:space-between;align-items:center;display:flex;flex-direction:row}section.eqno\u003eeqn{margin-left:3em;width:100%}section.eqno\u003espan{text-align:right;width:3em}"}],"authorContributionMap":{"KevinEyo1":1}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/octicons.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".octicon {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" vertical-align: text-top;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" fill: currentColor;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" overflow: visible;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":6}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/fontawesome/css/all.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2023 Fonticons, Inc."},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":".fa{font-family:var(--fa-style-family,\"Font Awesome 6 Free\");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:\"Font Awesome 6 Free\"}.fa-brands,.fab{font-family:\"Font Awesome 6 Brands\"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul\u003eli{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".fa-0:before{content:\"\\30\"}.fa-1:before{content:\"\\31\"}.fa-2:before{content:\"\\32\"}.fa-3:before{content:\"\\33\"}.fa-4:before{content:\"\\34\"}.fa-5:before{content:\"\\35\"}.fa-6:before{content:\"\\36\"}.fa-7:before{content:\"\\37\"}.fa-8:before{content:\"\\38\"}.fa-9:before{content:\"\\39\"}.fa-fill-drip:before{content:\"\\f576\"}.fa-arrows-to-circle:before{content:\"\\e4bd\"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:\"\\f138\"}.fa-at:before{content:\"\\40\"}.fa-trash-alt:before,.fa-trash-can:before{content:\"\\f2ed\"}.fa-text-height:before{content:\"\\f034\"}.fa-user-times:before,.fa-user-xmark:before{content:\"\\f235\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-comment-alt:before,.fa-message:before{content:\"\\f27a\"}.fa-info:before{content:\"\\f129\"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:\"\\f422\"}.fa-explosion:before{content:\"\\e4e9\"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:\"\\f15c\"}.fa-wave-square:before{content:\"\\f83e\"}.fa-ring:before{content:\"\\f70b\"}.fa-building-un:before{content:\"\\e4d9\"}.fa-dice-three:before{content:\"\\f527\"}.fa-calendar-alt:before,.fa-calendar-days:before{content:\"\\f073\"}.fa-anchor-circle-check:before{content:\"\\e4aa\"}.fa-building-circle-arrow-right:before{content:\"\\e4d1\"}.fa-volleyball-ball:before,.fa-volleyball:before{content:\"\\f45f\"}.fa-arrows-up-to-line:before{content:\"\\e4c2\"}.fa-sort-desc:before,.fa-sort-down:before{content:\"\\f0dd\"}.fa-circle-minus:before,.fa-minus-circle:before{content:\"\\f056\"}.fa-door-open:before{content:\"\\f52b\"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:\"\\f2f5\"}.fa-atom:before{content:\"\\f5d2\"}.fa-soap:before{content:\"\\e06e\"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:\"\\f86d\"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:\"\\f539\"}.fa-bridge-circle-check:before{content:\"\\e4c9\"}.fa-pump-medical:before{content:\"\\e06a\"}.fa-fingerprint:before{content:\"\\f577\"}.fa-hand-point-right:before{content:\"\\f0a4\"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:\"\\f689\"}.fa-forward-step:before,.fa-step-forward:before{content:\"\\f051\"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:\"\\f5b8\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-football-ball:before,.fa-football:before{content:\"\\f44e\"}.fa-school-circle-exclamation:before{content:\"\\e56c\"}.fa-crop:before{content:\"\\f125\"}.fa-angle-double-down:before,.fa-angles-down:before{content:\"\\f103\"}.fa-users-rectangle:before{content:\"\\e594\"}.fa-people-roof:before{content:\"\\e537\"}.fa-people-line:before{content:\"\\e534\"}.fa-beer-mug-empty:before,.fa-beer:before{content:\"\\f0fc\"}.fa-diagram-predecessor:before{content:\"\\e477\"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:\"\\f176\"}.fa-burn:before,.fa-fire-flame-simple:before{content:\"\\f46a\"}.fa-male:before,.fa-person:before{content:\"\\f183\"}.fa-laptop:before{content:\"\\f109\"}.fa-file-csv:before{content:\"\\f6dd\"}.fa-menorah:before{content:\"\\f676\"}.fa-truck-plane:before{content:\"\\e58f\"}.fa-record-vinyl:before{content:\"\\f8d9\"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:\"\\f587\"}.fa-bong:before{content:\"\\f55c\"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:\"\\f67b\"}.fa-arrow-down-up-across-line:before{content:\"\\e4af\"}.fa-spoon:before,.fa-utensil-spoon:before{content:\"\\f2e5\"}.fa-jar-wheat:before{content:\"\\e517\"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:\"\\f674\"}.fa-file-circle-exclamation:before{content:\"\\e4eb\"}.fa-circle-h:before,.fa-hospital-symbol:before{content:\"\\f47e\"}.fa-pager:before{content:\"\\f815\"}.fa-address-book:before,.fa-contact-book:before{content:\"\\f2b9\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-k:before{content:\"\\4b\"}.fa-landmark-flag:before{content:\"\\e51c\"}.fa-pencil-alt:before,.fa-pencil:before{content:\"\\f303\"}.fa-backward:before{content:\"\\f04a\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-comments:before{content:\"\\f086\"}.fa-file-clipboard:before,.fa-paste:before{content:\"\\f0ea\"}.fa-code-pull-request:before{content:\"\\e13c\"}.fa-clipboard-list:before{content:\"\\f46d\"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:\"\\f4de\"}.fa-user-check:before{content:\"\\f4fc\"}.fa-vial-virus:before{content:\"\\e597\"}.fa-sheet-plastic:before{content:\"\\e571\"}.fa-blog:before{content:\"\\f781\"}.fa-user-ninja:before{content:\"\\f504\"}.fa-person-arrow-up-from-line:before{content:\"\\e539\"}.fa-scroll-torah:before,.fa-torah:before{content:\"\\f6a0\"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:\"\\f458\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-archive:before,.fa-box-archive:before{content:\"\\f187\"}.fa-person-drowning:before{content:\"\\e545\"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:\"\\f886\"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:\"\\f58a\"}.fa-spray-can:before{content:\"\\f5bd\"}.fa-truck-monster:before{content:\"\\f63b\"}.fa-w:before{content:\"\\57\"}.fa-earth-africa:before,.fa-globe-africa:before{content:\"\\f57c\"}.fa-rainbow:before{content:\"\\f75b\"}.fa-circle-notch:before{content:\"\\f1ce\"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:\"\\f3fa\"}.fa-paw:before{content:\"\\f1b0\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-trowel-bricks:before{content:\"\\e58a\"}.fa-face-flushed:before,.fa-flushed:before{content:\"\\f579\"}.fa-hospital-user:before{content:\"\\f80d\"}.fa-tent-arrow-left-right:before{content:\"\\e57f\"}.fa-gavel:before,.fa-legal:before{content:\"\\f0e3\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-box-tissue:before{content:\"\\e05b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:\"\\f562\"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:\"\\f5ae\"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:\"\\e068\"}.fa-mars-and-venus-burst:before{content:\"\\e523\"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:\"\\f152\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-sun-plant-wilt:before{content:\"\\e57a\"}.fa-toilets-portable:before{content:\"\\e584\"}.fa-hockey-puck:before{content:\"\\f453\"}.fa-table:before{content:\"\\f0ce\"}.fa-magnifying-glass-arrow-right:before{content:\"\\e521\"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:\"\\f566\"}.fa-users-slash:before{content:\"\\e073\"}.fa-clover:before{content:\"\\e139\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f3e5\"}.fa-star-and-crescent:before{content:\"\\f699\"}.fa-house-fire:before{content:\"\\e50c\"}.fa-minus-square:before,.fa-square-minus:before{content:\"\\f146\"}.fa-helicopter:before{content:\"\\f533\"}.fa-compass:before{content:\"\\f14e\"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:\"\\f150\"}.fa-file-circle-question:before{content:\"\\e4ef\"}.fa-laptop-code:before{content:\"\\f5fc\"}.fa-swatchbook:before{content:\"\\f5c3\"}.fa-prescription-bottle:before{content:\"\\f485\"}.fa-bars:before,.fa-navicon:before{content:\"\\f0c9\"}.fa-people-group:before{content:\"\\e533\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-heart-broken:before,.fa-heart-crack:before{content:\"\\f7a9\"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:\"\\f360\"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:\"\\f597\"}.fa-film:before{content:\"\\f008\"}.fa-ruler-horizontal:before{content:\"\\f547\"}.fa-people-robbery:before{content:\"\\e536\"}.fa-lightbulb:before{content:\"\\f0eb\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-school-circle-xmark:before{content:\"\\e56d\"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:\"\\f08b\"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:\"\\f13a\"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:\"\\f13e\"}.fa-cloud-showers-heavy:before{content:\"\\f740\"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:\"\\f58f\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:\"\\f4b9\"}.fa-memory:before{content:\"\\f538\"}.fa-road-spikes:before{content:\"\\e568\"}.fa-fire-burner:before{content:\"\\e4f1\"}.fa-flag:before{content:\"\\f024\"}.fa-hanukiah:before{content:\"\\f6e6\"}.fa-feather:before{content:\"\\f52d\"}.fa-volume-down:before,.fa-volume-low:before{content:\"\\f027\"}.fa-comment-slash:before{content:\"\\f4b3\"}.fa-cloud-sun-rain:before{content:\"\\f743\"}.fa-compress:before{content:\"\\f066\"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:\"\\e2cd\"}.fa-ankh:before{content:\"\\f644\"}.fa-hands-holding-child:before{content:\"\\e4fa\"}.fa-asterisk:before{content:\"\\2a\"}.fa-check-square:before,.fa-square-check:before{content:\"\\f14a\"}.fa-peseta-sign:before{content:\"\\e221\"}.fa-header:before,.fa-heading:before{content:\"\\f1dc\"}.fa-ghost:before{content:\"\\f6e2\"}.fa-list-squares:before,.fa-list:before{content:\"\\f03a\"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:\"\\f87b\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-circle-dot:before,.fa-dot-circle:before{content:\"\\f192\"}.fa-dizzy:before,.fa-face-dizzy:before{content:\"\\f567\"}.fa-egg:before{content:\"\\f7fb\"}.fa-house-medical-circle-xmark:before{content:\"\\e513\"}.fa-campground:before{content:\"\\f6bb\"}.fa-folder-plus:before{content:\"\\f65e\"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:\"\\f1e3\"}.fa-paint-brush:before,.fa-paintbrush:before{content:\"\\f1fc\"}.fa-lock:before{content:\"\\f023\"}.fa-gas-pump:before{content:\"\\f52f\"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:\"\\f593\"}.fa-map-location:before,.fa-map-marked:before{content:\"\\f59f\"}.fa-house-flood-water:before{content:\"\\e50e\"}.fa-tree:before{content:\"\\f1bb\"}.fa-bridge-lock:before{content:\"\\e4cc\"}.fa-sack-dollar:before{content:\"\\f81d\"}.fa-edit:before,.fa-pen-to-square:before{content:\"\\f044\"}.fa-car-side:before{content:\"\\f5e4\"}.fa-share-alt:before,.fa-share-nodes:before{content:\"\\f1e0\"}.fa-heart-circle-minus:before{content:\"\\e4ff\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-microscope:before{content:\"\\f610\"}.fa-sink:before{content:\"\\e06d\"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:\"\\f290\"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:\"\\f881\"}.fa-mitten:before{content:\"\\f7b5\"}.fa-person-rays:before{content:\"\\e54d\"}.fa-users:before{content:\"\\f0c0\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-flask-vial:before{content:\"\\e4f3\"}.fa-hand-paper:before,.fa-hand:before{content:\"\\f256\"}.fa-om:before{content:\"\\f679\"}.fa-worm:before{content:\"\\e599\"}.fa-house-circle-xmark:before{content:\"\\e50b\"}.fa-plug:before{content:\"\\f1e6\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-hand-spock:before{content:\"\\f259\"}.fa-stopwatch:before{content:\"\\f2f2\"}.fa-face-kiss:before,.fa-kiss:before{content:\"\\f596\"}.fa-bridge-circle-xmark:before{content:\"\\e4cb\"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:\"\\f589\"}.fa-chess-bishop:before{content:\"\\f43a\"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:\"\\f58c\"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:\"\\f2a4\"}.fa-road-circle-check:before{content:\"\\e564\"}.fa-dice-five:before{content:\"\\f523\"}.fa-rss-square:before,.fa-square-rss:before{content:\"\\f143\"}.fa-land-mine-on:before{content:\"\\e51b\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-stamp:before{content:\"\\f5bf\"}.fa-stairs:before{content:\"\\e289\"}.fa-i:before{content:\"\\49\"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:\"\\f6f2\"}.fa-pills:before{content:\"\\f484\"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:\"\\f581\"}.fa-tooth:before{content:\"\\f5c9\"}.fa-v:before{content:\"\\56\"}.fa-bangladeshi-taka-sign:before{content:\"\\e2e6\"}.fa-bicycle:before{content:\"\\f206\"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:\"\\e579\"}.fa-head-side-cough-slash:before{content:\"\\e062\"}.fa-ambulance:before,.fa-truck-medical:before{content:\"\\f0f9\"}.fa-wheat-awn-circle-exclamation:before{content:\"\\e598\"}.fa-snowman:before{content:\"\\f7d0\"}.fa-mortar-pestle:before{content:\"\\f5a7\"}.fa-road-barrier:before{content:\"\\e562\"}.fa-school:before{content:\"\\f549\"}.fa-igloo:before{content:\"\\f7ae\"}.fa-joint:before{content:\"\\f595\"}.fa-angle-right:before{content:\"\\f105\"}.fa-horse:before{content:\"\\f6f0\"}.fa-q:before{content:\"\\51\"}.fa-g:before{content:\"\\47\"}.fa-notes-medical:before{content:\"\\f481\"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-dong-sign:before{content:\"\\e169\"}.fa-capsules:before{content:\"\\f46b\"}.fa-poo-bolt:before,.fa-poo-storm:before{content:\"\\f75a\"}.fa-face-frown-open:before,.fa-frown-open:before{content:\"\\f57a\"}.fa-hand-point-up:before{content:\"\\f0a6\"}.fa-money-bill:before{content:\"\\f0d6\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-align-justify:before{content:\"\\f039\"}.fa-umbrella-beach:before{content:\"\\f5ca\"}.fa-helmet-un:before{content:\"\\e503\"}.fa-bullseye:before{content:\"\\f140\"}.fa-bacon:before{content:\"\\f7e5\"}.fa-hand-point-down:before{content:\"\\f0a7\"}.fa-arrow-up-from-bracket:before{content:\"\\e09a\"}.fa-folder-blank:before,.fa-folder:before{content:\"\\f07b\"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:\"\\f478\"}.fa-radiation:before{content:\"\\f7b9\"}.fa-chart-simple:before{content:\"\\e473\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-vial:before{content:\"\\f492\"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:\"\\f624\"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:\"\\e2ca\"}.fa-e:before{content:\"\\45\"}.fa-pen-alt:before,.fa-pen-clip:before{content:\"\\f305\"}.fa-bridge-circle-exclamation:before{content:\"\\e4ca\"}.fa-user:before{content:\"\\f007\"}.fa-school-circle-check:before{content:\"\\e56b\"}.fa-dumpster:before{content:\"\\f793\"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:\"\\f5b6\"}.fa-building-user:before{content:\"\\e4da\"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:\"\\f191\"}.fa-highlighter:before{content:\"\\f591\"}.fa-key:before{content:\"\\f084\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-globe:before{content:\"\\f0ac\"}.fa-synagogue:before{content:\"\\f69b\"}.fa-person-half-dress:before{content:\"\\e548\"}.fa-road-bridge:before{content:\"\\e563\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-c:before{content:\"\\43\"}.fa-tablet-button:before{content:\"\\f10a\"}.fa-building-lock:before{content:\"\\e4d6\"}.fa-pizza-slice:before{content:\"\\f818\"}.fa-money-bill-wave:before{content:\"\\f53a\"}.fa-area-chart:before,.fa-chart-area:before{content:\"\\f1fe\"}.fa-house-flag:before{content:\"\\e50d\"}.fa-person-circle-minus:before{content:\"\\e540\"}.fa-ban:before,.fa-cancel:before{content:\"\\f05e\"}.fa-camera-rotate:before{content:\"\\e0d8\"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:\"\\f5d0\"}.fa-star:before{content:\"\\f005\"}.fa-repeat:before{content:\"\\f363\"}.fa-cross:before{content:\"\\f654\"}.fa-box:before{content:\"\\f466\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:\"\\f245\"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:\"\\f31e\"}.fa-charging-station:before{content:\"\\f5e7\"}.fa-shapes:before,.fa-triangle-circle-square:before{content:\"\\f61f\"}.fa-random:before,.fa-shuffle:before{content:\"\\f074\"}.fa-person-running:before,.fa-running:before{content:\"\\f70c\"}.fa-mobile-retro:before{content:\"\\e527\"}.fa-grip-lines-vertical:before{content:\"\\f7a5\"}.fa-spider:before{content:\"\\f717\"}.fa-hands-bound:before{content:\"\\e4f9\"}.fa-file-invoice-dollar:before{content:\"\\f571\"}.fa-plane-circle-exclamation:before{content:\"\\e556\"}.fa-x-ray:before{content:\"\\f497\"}.fa-spell-check:before{content:\"\\f891\"}.fa-slash:before{content:\"\\f715\"}.fa-computer-mouse:before,.fa-mouse:before{content:\"\\f8cc\"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:\"\\f090\"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:\"\\e070\"}.fa-server:before{content:\"\\f233\"}.fa-virus-covid-slash:before{content:\"\\e4a9\"}.fa-shop-lock:before{content:\"\\e4a5\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-blender-phone:before{content:\"\\f6b6\"}.fa-building-wheat:before{content:\"\\e4db\"}.fa-person-breastfeeding:before{content:\"\\e53a\"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:\"\\f2f6\"}.fa-venus:before{content:\"\\f221\"}.fa-passport:before{content:\"\\f5ab\"}.fa-heart-pulse:before,.fa-heartbeat:before{content:\"\\f21e\"}.fa-people-carry-box:before,.fa-people-carry:before{content:\"\\f4ce\"}.fa-temperature-high:before{content:\"\\f769\"}.fa-microchip:before{content:\"\\f2db\"}.fa-crown:before{content:\"\\f521\"}.fa-weight-hanging:before{content:\"\\f5cd\"}.fa-xmarks-lines:before{content:\"\\e59a\"}.fa-file-prescription:before{content:\"\\f572\"}.fa-weight-scale:before,.fa-weight:before{content:\"\\f496\"}.fa-user-friends:before,.fa-user-group:before{content:\"\\f500\"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:\"\\f15e\"}.fa-chess-knight:before{content:\"\\f441\"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:\"\\f59b\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:\"\\f0aa\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-person-walking:before,.fa-walking:before{content:\"\\f554\"}.fa-l:before{content:\"\\4c\"}.fa-fire:before{content:\"\\f06d\"}.fa-bed-pulse:before,.fa-procedures:before{content:\"\\f487\"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:\"\\f197\"}.fa-face-laugh:before,.fa-laugh:before{content:\"\\f599\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-heart-circle-plus:before{content:\"\\e500\"}.fa-code-fork:before{content:\"\\e13b\"}.fa-city:before{content:\"\\f64f\"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:\"\\f3c9\"}.fa-pepper-hot:before{content:\"\\f816\"}.fa-unlock:before{content:\"\\f09c\"}.fa-colon-sign:before{content:\"\\e140\"}.fa-headset:before{content:\"\\f590\"}.fa-store-slash:before{content:\"\\e071\"}.fa-road-circle-xmark:before{content:\"\\e566\"}.fa-user-minus:before{content:\"\\f503\"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:\"\\f79f\"}.fa-clipboard:before{content:\"\\f328\"}.fa-house-circle-exclamation:before{content:\"\\e50a\"}.fa-file-arrow-up:before,.fa-file-upload:before{content:\"\\f574\"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:\"\\f1eb\"}.fa-bath:before,.fa-bathtub:before{content:\"\\f2cd\"}.fa-underline:before{content:\"\\f0cd\"}.fa-user-edit:before,.fa-user-pen:before{content:\"\\f4ff\"}.fa-signature:before{content:\"\\f5b7\"}.fa-stroopwafel:before{content:\"\\f551\"}.fa-bold:before{content:\"\\f032\"}.fa-anchor-lock:before{content:\"\\e4ad\"}.fa-building-ngo:before{content:\"\\e4d7\"}.fa-manat-sign:before{content:\"\\e1d5\"}.fa-not-equal:before{content:\"\\f53e\"}.fa-border-style:before,.fa-border-top-left:before{content:\"\\f853\"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:\"\\f5a0\"}.fa-jedi:before{content:\"\\f669\"}.fa-poll:before,.fa-square-poll-vertical:before{content:\"\\f681\"}.fa-mug-hot:before{content:\"\\f7b6\"}.fa-battery-car:before,.fa-car-battery:before{content:\"\\f5df\"}.fa-gift:before{content:\"\\f06b\"}.fa-dice-two:before{content:\"\\f528\"}.fa-chess-queen:before{content:\"\\f445\"}.fa-glasses:before{content:\"\\f530\"}.fa-chess-board:before{content:\"\\f43c\"}.fa-building-circle-check:before{content:\"\\e4d2\"}.fa-person-chalkboard:before{content:\"\\e53d\"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:\"\\f22b\"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:\"\\f255\"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:\"\\f151\"}.fa-cloud-showers-water:before{content:\"\\e4e4\"}.fa-bar-chart:before,.fa-chart-bar:before{content:\"\\f080\"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:\"\\e05e\"}.fa-less-than-equal:before{content:\"\\f537\"}.fa-train:before{content:\"\\f238\"}.fa-eye-low-vision:before,.fa-low-vision:before{content:\"\\f2a8\"}.fa-crow:before{content:\"\\f520\"}.fa-sailboat:before{content:\"\\e445\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-plus-square:before,.fa-square-plus:before{content:\"\\f0fe\"}.fa-torii-gate:before{content:\"\\f6a1\"}.fa-frog:before{content:\"\\f52e\"}.fa-bucket:before{content:\"\\e4cf\"}.fa-image:before{content:\"\\f03e\"}.fa-microphone:before{content:\"\\f130\"}.fa-cow:before{content:\"\\f6c8\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-screwdriver:before{content:\"\\f54a\"}.fa-folder-closed:before{content:\"\\e185\"}.fa-house-tsunami:before{content:\"\\e515\"}.fa-square-nfi:before{content:\"\\e576\"}.fa-arrow-up-from-ground-water:before{content:\"\\e4b5\"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:\"\\f57b\"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:\"\\f2ea\"}.fa-columns:before,.fa-table-columns:before{content:\"\\f0db\"}.fa-lemon:before{content:\"\\f094\"}.fa-head-side-mask:before{content:\"\\e063\"}.fa-handshake:before{content:\"\\f2b5\"}.fa-gem:before{content:\"\\f3a5\"}.fa-dolly-box:before,.fa-dolly:before{content:\"\\f472\"}.fa-smoking:before{content:\"\\f48d\"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:\"\\f78c\"}.fa-monument:before{content:\"\\f5a6\"}.fa-snowplow:before{content:\"\\f7d2\"}.fa-angle-double-right:before,.fa-angles-right:before{content:\"\\f101\"}.fa-cannabis:before{content:\"\\f55f\"}.fa-circle-play:before,.fa-play-circle:before{content:\"\\f144\"}.fa-tablets:before{content:\"\\f490\"}.fa-ethernet:before{content:\"\\f796\"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:\"\\f153\"}.fa-chair:before{content:\"\\f6c0\"}.fa-check-circle:before,.fa-circle-check:before{content:\"\\f058\"}.fa-circle-stop:before,.fa-stop-circle:before{content:\"\\f28d\"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:\"\\f568\"}.fa-plate-wheat:before{content:\"\\e55a\"}.fa-icicles:before{content:\"\\f7ad\"}.fa-person-shelter:before{content:\"\\e54f\"}.fa-neuter:before{content:\"\\f22c\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-marker:before{content:\"\\f5a1\"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:\"\\f59a\"}.fa-helicopter-symbol:before{content:\"\\e502\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:\"\\f139\"}.fa-lari-sign:before{content:\"\\e1c8\"}.fa-volcano:before{content:\"\\f770\"}.fa-person-walking-dashed-line-arrow-right:before{content:\"\\e553\"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:\"\\f154\"}.fa-viruses:before{content:\"\\e076\"}.fa-square-person-confined:before{content:\"\\e577\"}.fa-user-tie:before{content:\"\\f508\"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:\"\\f175\"}.fa-tent-arrow-down-to-line:before{content:\"\\e57e\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-person-skating:before,.fa-skating:before{content:\"\\f7c5\"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:\"\\f662\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:\"\\f0ab\"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:\"\\f56f\"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:\"\\f14c\"}.fa-box-open:before{content:\"\\f49e\"}.fa-scroll:before{content:\"\\f70e\"}.fa-spa:before{content:\"\\f5bb\"}.fa-location-pin-lock:before{content:\"\\e51f\"}.fa-pause:before{content:\"\\f04c\"}.fa-hill-avalanche:before{content:\"\\e507\"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-registered:before{content:\"\\f25d\"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:\"\\f2bb\"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:\"\\f516\"}.fa-subscript:before{content:\"\\f12c\"}.fa-diamond-turn-right:before,.fa-directions:before{content:\"\\f5eb\"}.fa-burst:before{content:\"\\e4dc\"}.fa-house-laptop:before,.fa-laptop-house:before{content:\"\\e066\"}.fa-face-tired:before,.fa-tired:before{content:\"\\f5c8\"}.fa-money-bills:before{content:\"\\e1f3\"}.fa-smog:before{content:\"\\f75f\"}.fa-crutch:before{content:\"\\f7f7\"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-palette:before{content:\"\\f53f\"}.fa-arrows-turn-right:before{content:\"\\e4c0\"}.fa-vest:before{content:\"\\e085\"}.fa-ferry:before{content:\"\\e4ea\"}.fa-arrows-down-to-people:before{content:\"\\e4b9\"}.fa-seedling:before,.fa-sprout:before{content:\"\\f4d8\"}.fa-arrows-alt-h:before,.fa-left-right:before{content:\"\\f337\"}.fa-boxes-packing:before{content:\"\\e4c7\"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:\"\\f0a8\"}.fa-group-arrows-rotate:before{content:\"\\e4f6\"}.fa-bowl-food:before{content:\"\\e4c6\"}.fa-candy-cane:before{content:\"\\f786\"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:\"\\f160\"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:\"\\f76c\"}.fa-remove-format:before,.fa-text-slash:before{content:\"\\f87d\"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:\"\\f4da\"}.fa-file-word:before{content:\"\\f1c2\"}.fa-file-powerpoint:before{content:\"\\f1c4\"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:\"\\f07e\"}.fa-house-lock:before{content:\"\\e510\"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:\"\\f0ed\"}.fa-children:before{content:\"\\e4e1\"}.fa-blackboard:before,.fa-chalkboard:before{content:\"\\f51b\"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:\"\\f4fa\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:\"\\e05f\"}.fa-mattress-pillow:before{content:\"\\e525\"}.fa-guarani-sign:before{content:\"\\e19a\"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:\"\\f021\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-cruzeiro-sign:before{content:\"\\e152\"}.fa-greater-than-equal:before{content:\"\\f532\"}.fa-shield-alt:before,.fa-shield-halved:before{content:\"\\f3ed\"}.fa-atlas:before,.fa-book-atlas:before{content:\"\\f558\"}.fa-virus:before{content:\"\\e074\"}.fa-envelope-circle-check:before{content:\"\\e4e8\"}.fa-layer-group:before{content:\"\\f5fd\"}.fa-arrows-to-dot:before{content:\"\\e4be\"}.fa-archway:before{content:\"\\f557\"}.fa-heart-circle-check:before{content:\"\\e4fd\"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:\"\\f6f1\"}.fa-file-archive:before,.fa-file-zipper:before{content:\"\\f1c6\"}.fa-square:before{content:\"\\f0c8\"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:\"\\f000\"}.fa-couch:before{content:\"\\f4b8\"}.fa-cedi-sign:before{content:\"\\e0df\"}.fa-italic:before{content:\"\\f033\"}.fa-church:before{content:\"\\f51d\"}.fa-comments-dollar:before{content:\"\\f653\"}.fa-democrat:before{content:\"\\f747\"}.fa-z:before{content:\"\\5a\"}.fa-person-skiing:before,.fa-skiing:before{content:\"\\f7c9\"}.fa-road-lock:before{content:\"\\e567\"}.fa-a:before{content:\"\\41\"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:\"\\e03f\"}.fa-feather-alt:before,.fa-feather-pointed:before{content:\"\\f56b\"}.fa-p:before{content:\"\\50\"}.fa-snowflake:before{content:\"\\f2dc\"}.fa-newspaper:before{content:\"\\f1ea\"}.fa-ad:before,.fa-rectangle-ad:before{content:\"\\f641\"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:\"\\f0a9\"}.fa-filter-circle-xmark:before{content:\"\\e17b\"}.fa-locust:before{content:\"\\e520\"}.fa-sort:before,.fa-unsorted:before{content:\"\\f0dc\"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:\"\\f0cb\"}.fa-person-dress-burst:before{content:\"\\e544\"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:\"\\f53d\"}.fa-vector-square:before{content:\"\\f5cb\"}.fa-bread-slice:before{content:\"\\f7ec\"}.fa-language:before{content:\"\\f1ab\"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:\"\\f598\"}.fa-filter:before{content:\"\\f0b0\"}.fa-question:before{content:\"\\3f\"}.fa-file-signature:before{content:\"\\f573\"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:\"\\f0b2\"}.fa-house-chimney-user:before{content:\"\\e065\"}.fa-hand-holding-heart:before{content:\"\\f4be\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-money-check:before{content:\"\\f53c\"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:\"\\f5c0\"}.fa-code:before{content:\"\\f121\"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:\"\\f7a0\"}.fa-building-circle-exclamation:before{content:\"\\e4d3\"}.fa-magnifying-glass-chart:before{content:\"\\e522\"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:\"\\f08e\"}.fa-cubes-stacked:before{content:\"\\e4e6\"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:\"\\f159\"}.fa-virus-covid:before{content:\"\\e4a8\"}.fa-austral-sign:before{content:\"\\e0a9\"}.fa-f:before{content:\"\\46\"}.fa-leaf:before{content:\"\\f06c\"}.fa-road:before{content:\"\\f018\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-person-circle-plus:before{content:\"\\e541\"}.fa-chart-pie:before,.fa-pie-chart:before{content:\"\\f200\"}.fa-bolt-lightning:before{content:\"\\e0b7\"}.fa-sack-xmark:before{content:\"\\e56a\"}.fa-file-excel:before{content:\"\\f1c3\"}.fa-file-contract:before{content:\"\\f56c\"}.fa-fish-fins:before{content:\"\\e4f2\"}.fa-building-flag:before{content:\"\\e4d5\"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:\"\\f582\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-poop:before{content:\"\\f619\"}.fa-location-pin:before,.fa-map-marker:before{content:\"\\f041\"}.fa-kaaba:before{content:\"\\f66b\"}.fa-toilet-paper:before{content:\"\\f71e\"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:\"\\f807\"}.fa-eject:before{content:\"\\f052\"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:\"\\f35a\"}.fa-plane-circle-check:before{content:\"\\e555\"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:\"\\f5a5\"}.fa-object-group:before{content:\"\\f247\"}.fa-chart-line:before,.fa-line-chart:before{content:\"\\f201\"}.fa-mask-ventilator:before{content:\"\\e524\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-map-signs:before,.fa-signs-post:before{content:\"\\f277\"}.fa-cash-register:before{content:\"\\f788\"}.fa-person-circle-question:before{content:\"\\e542\"}.fa-h:before{content:\"\\48\"}.fa-tarp:before{content:\"\\e57b\"}.fa-screwdriver-wrench:before,.fa-tools:before{content:\"\\f7d9\"}.fa-arrows-to-eye:before{content:\"\\e4bf\"}.fa-plug-circle-bolt:before{content:\"\\e55b\"}.fa-heart:before{content:\"\\f004\"}.fa-mars-and-venus:before{content:\"\\f224\"}.fa-home-user:before,.fa-house-user:before{content:\"\\e1b0\"}.fa-dumpster-fire:before{content:\"\\f794\"}.fa-house-crack:before{content:\"\\e3b1\"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:\"\\f561\"}.fa-face-surprise:before,.fa-surprise:before{content:\"\\f5c2\"}.fa-bottle-water:before{content:\"\\e4c5\"}.fa-circle-pause:before,.fa-pause-circle:before{content:\"\\f28b\"}.fa-toilet-paper-slash:before{content:\"\\e072\"}.fa-apple-alt:before,.fa-apple-whole:before{content:\"\\f5d1\"}.fa-kitchen-set:before{content:\"\\e51a\"}.fa-r:before{content:\"\\52\"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-cube:before{content:\"\\f1b2\"}.fa-bitcoin-sign:before{content:\"\\e0b4\"}.fa-shield-dog:before{content:\"\\e573\"}.fa-solar-panel:before{content:\"\\f5ba\"}.fa-lock-open:before{content:\"\\f3c1\"}.fa-elevator:before{content:\"\\e16d\"}.fa-money-bill-transfer:before{content:\"\\e528\"}.fa-money-bill-trend-up:before{content:\"\\e529\"}.fa-house-flood-water-circle-arrow-right:before{content:\"\\e50f\"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:\"\\f682\"}.fa-circle:before{content:\"\\f111\"}.fa-backward-fast:before,.fa-fast-backward:before{content:\"\\f049\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-user-astronaut:before{content:\"\\f4fb\"}.fa-plane-slash:before{content:\"\\e069\"}.fa-trademark:before{content:\"\\f25c\"}.fa-basketball-ball:before,.fa-basketball:before{content:\"\\f434\"}.fa-satellite-dish:before{content:\"\\f7c0\"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:\"\\f35b\"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:\"\\f3cd\"}.fa-volume-high:before,.fa-volume-up:before{content:\"\\f028\"}.fa-users-rays:before{content:\"\\e593\"}.fa-wallet:before{content:\"\\f555\"}.fa-clipboard-check:before{content:\"\\f46c\"}.fa-file-audio:before{content:\"\\f1c7\"}.fa-burger:before,.fa-hamburger:before{content:\"\\f805\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-bugs:before{content:\"\\e4d0\"}.fa-rupee-sign:before,.fa-rupee:before{content:\"\\f156\"}.fa-file-image:before{content:\"\\f1c5\"}.fa-circle-question:before,.fa-question-circle:before{content:\"\\f059\"}.fa-plane-departure:before{content:\"\\f5b0\"}.fa-handshake-slash:before{content:\"\\e060\"}.fa-book-bookmark:before{content:\"\\e0bb\"}.fa-code-branch:before{content:\"\\f126\"}.fa-hat-cowboy:before{content:\"\\f8c0\"}.fa-bridge:before{content:\"\\e4c8\"}.fa-phone-alt:before,.fa-phone-flip:before{content:\"\\f879\"}.fa-truck-front:before{content:\"\\e2b7\"}.fa-cat:before{content:\"\\f6be\"}.fa-anchor-circle-exclamation:before{content:\"\\e4ab\"}.fa-truck-field:before{content:\"\\e58d\"}.fa-route:before{content:\"\\f4d7\"}.fa-clipboard-question:before{content:\"\\e4e3\"}.fa-panorama:before{content:\"\\e209\"}.fa-comment-medical:before{content:\"\\f7f5\"}.fa-teeth-open:before{content:\"\\f62f\"}.fa-file-circle-minus:before{content:\"\\e4ed\"}.fa-tags:before{content:\"\\f02c\"}.fa-wine-glass:before{content:\"\\f4e3\"}.fa-fast-forward:before,.fa-forward-fast:before{content:\"\\f050\"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:\"\\f5a4\"}.fa-parking:before,.fa-square-parking:before{content:\"\\f540\"}.fa-house-signal:before{content:\"\\e012\"}.fa-bars-progress:before,.fa-tasks-alt:before{content:\"\\f828\"}.fa-faucet-drip:before{content:\"\\e006\"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:\"\\f474\"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:\"\\f54d\"}.fa-terminal:before{content:\"\\f120\"}.fa-mobile-button:before{content:\"\\f10b\"}.fa-house-medical-flag:before{content:\"\\e514\"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:\"\\f291\"}.fa-tape:before{content:\"\\f4db\"}.fa-bus-alt:before,.fa-bus-simple:before{content:\"\\f55e\"}.fa-eye:before{content:\"\\f06e\"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:\"\\f5b3\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-person-military-to-person:before{content:\"\\e54c\"}.fa-file-shield:before{content:\"\\e4f0\"}.fa-user-slash:before{content:\"\\f506\"}.fa-pen:before{content:\"\\f304\"}.fa-tower-observation:before{content:\"\\e586\"}.fa-file-code:before{content:\"\\f1c9\"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:\"\\f012\"}.fa-bus:before{content:\"\\f207\"}.fa-heart-circle-xmark:before{content:\"\\e501\"}.fa-home-lg:before,.fa-house-chimney:before{content:\"\\e3af\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-face-frown:before,.fa-frown:before{content:\"\\f119\"}.fa-prescription:before{content:\"\\f5b1\"}.fa-shop:before,.fa-store-alt:before{content:\"\\f54f\"}.fa-floppy-disk:before,.fa-save:before{content:\"\\f0c7\"}.fa-vihara:before{content:\"\\f6a7\"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:\"\\f515\"}.fa-sort-asc:before,.fa-sort-up:before{content:\"\\f0de\"}.fa-comment-dots:before,.fa-commenting:before{content:\"\\f4ad\"}.fa-plant-wilt:before{content:\"\\e5aa\"}.fa-diamond:before{content:\"\\f219\"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:\"\\f585\"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:\"\\f4c0\"}.fa-bacterium:before{content:\"\\e05a\"}.fa-hand-pointer:before{content:\"\\f25a\"}.fa-drum-steelpan:before{content:\"\\f56a\"}.fa-hand-scissors:before{content:\"\\f257\"}.fa-hands-praying:before,.fa-praying-hands:before{content:\"\\f684\"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:\"\\f01e\"}.fa-biohazard:before{content:\"\\f780\"}.fa-location-crosshairs:before,.fa-location:before{content:\"\\f601\"}.fa-mars-double:before{content:\"\\f227\"}.fa-child-dress:before{content:\"\\e59c\"}.fa-users-between-lines:before{content:\"\\e591\"}.fa-lungs-virus:before{content:\"\\e067\"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:\"\\f588\"}.fa-phone:before{content:\"\\f095\"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:\"\\f273\"}.fa-child-reaching:before{content:\"\\e59d\"}.fa-head-side-virus:before{content:\"\\e064\"}.fa-user-cog:before,.fa-user-gear:before{content:\"\\f4fe\"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:\"\\f163\"}.fa-door-closed:before{content:\"\\f52a\"}.fa-shield-virus:before{content:\"\\e06c\"}.fa-dice-six:before{content:\"\\f526\"}.fa-mosquito-net:before{content:\"\\e52c\"}.fa-bridge-water:before{content:\"\\e4ce\"}.fa-person-booth:before{content:\"\\f756\"}.fa-text-width:before{content:\"\\f035\"}.fa-hat-wizard:before{content:\"\\f6e8\"}.fa-pen-fancy:before{content:\"\\f5ac\"}.fa-digging:before,.fa-person-digging:before{content:\"\\f85e\"}.fa-trash:before{content:\"\\f1f8\"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:\"\\f629\"}.fa-book-medical:before{content:\"\\f7e6\"}.fa-poo:before{content:\"\\f2fe\"}.fa-quote-right-alt:before,.fa-quote-right:before{content:\"\\f10e\"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:\"\\f553\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-divide:before{content:\"\\f529\"}.fa-tenge-sign:before,.fa-tenge:before{content:\"\\f7d7\"}.fa-headphones:before{content:\"\\f025\"}.fa-hands-holding:before{content:\"\\f4c2\"}.fa-hands-clapping:before{content:\"\\e1a8\"}.fa-republican:before{content:\"\\f75e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-person-circle-xmark:before{content:\"\\e543\"}.fa-ruler:before{content:\"\\f545\"}.fa-align-left:before{content:\"\\f036\"}.fa-dice-d6:before{content:\"\\f6d1\"}.fa-restroom:before{content:\"\\f7bd\"}.fa-j:before{content:\"\\4a\"}.fa-users-viewfinder:before{content:\"\\e595\"}.fa-file-video:before{content:\"\\f1c8\"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:\"\\f35d\"}.fa-table-cells:before,.fa-th:before{content:\"\\f00a\"}.fa-file-pdf:before{content:\"\\f1c1\"}.fa-bible:before,.fa-book-bible:before{content:\"\\f647\"}.fa-o:before{content:\"\\4f\"}.fa-medkit:before,.fa-suitcase-medical:before{content:\"\\f0fa\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-otter:before{content:\"\\f700\"}.fa-female:before,.fa-person-dress:before{content:\"\\f182\"}.fa-comment-dollar:before{content:\"\\f651\"}.fa-briefcase-clock:before,.fa-business-time:before{content:\"\\f64a\"}.fa-table-cells-large:before,.fa-th-large:before{content:\"\\f009\"}.fa-book-tanakh:before,.fa-tanakh:before{content:\"\\f827\"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:\"\\f2a0\"}.fa-hat-cowboy-side:before{content:\"\\f8c1\"}.fa-clipboard-user:before{content:\"\\f7f3\"}.fa-child:before{content:\"\\f1ae\"}.fa-lira-sign:before{content:\"\\f195\"}.fa-satellite:before{content:\"\\f7bf\"}.fa-plane-lock:before{content:\"\\e558\"}.fa-tag:before{content:\"\\f02b\"}.fa-comment:before{content:\"\\f075\"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:\"\\f1fd\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-angle-double-up:before,.fa-angles-up:before{content:\"\\f102\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-arrow-right-to-city:before{content:\"\\e4b3\"}.fa-ribbon:before{content:\"\\f4d6\"}.fa-lungs:before{content:\"\\f604\"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:\"\\f887\"}.fa-litecoin-sign:before{content:\"\\e1d3\"}.fa-border-none:before{content:\"\\f850\"}.fa-circle-nodes:before{content:\"\\e4e2\"}.fa-parachute-box:before{content:\"\\f4cd\"}.fa-indent:before{content:\"\\f03c\"}.fa-truck-field-un:before{content:\"\\e58e\"}.fa-hourglass-empty:before,.fa-hourglass:before{content:\"\\f254\"}.fa-mountain:before{content:\"\\f6fc\"}.fa-user-doctor:before,.fa-user-md:before{content:\"\\f0f0\"}.fa-circle-info:before,.fa-info-circle:before{content:\"\\f05a\"}.fa-cloud-meatball:before{content:\"\\f73b\"}.fa-camera-alt:before,.fa-camera:before{content:\"\\f030\"}.fa-square-virus:before{content:\"\\e578\"}.fa-meteor:before{content:\"\\f753\"}.fa-car-on:before{content:\"\\e4dd\"}.fa-sleigh:before{content:\"\\f7cc\"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:\"\\f162\"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:\"\\f4c1\"}.fa-water:before{content:\"\\f773\"}.fa-calendar-check:before{content:\"\\f274\"}.fa-braille:before{content:\"\\f2a1\"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:\"\\f486\"}.fa-landmark:before{content:\"\\f66f\"}.fa-truck:before{content:\"\\f0d1\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-person-cane:before{content:\"\\e53c\"}.fa-tent:before{content:\"\\e57d\"}.fa-vest-patches:before{content:\"\\e086\"}.fa-check-double:before{content:\"\\f560\"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:\"\\f15d\"}.fa-money-bill-wheat:before{content:\"\\e52a\"}.fa-cookie:before{content:\"\\f563\"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-hard-drive:before,.fa-hdd:before{content:\"\\f0a0\"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:\"\\f586\"}.fa-dumbbell:before{content:\"\\f44b\"}.fa-list-alt:before,.fa-rectangle-list:before{content:\"\\f022\"}.fa-tarp-droplet:before{content:\"\\e57c\"}.fa-house-medical-circle-check:before{content:\"\\e511\"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:\"\\f7ca\"}.fa-calendar-plus:before{content:\"\\f271\"}.fa-plane-arrival:before{content:\"\\f5af\"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:\"\\f359\"}.fa-subway:before,.fa-train-subway:before{content:\"\\f239\"}.fa-chart-gantt:before{content:\"\\e0e4\"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:\"\\e1bc\"}.fa-crop-alt:before,.fa-crop-simple:before{content:\"\\f565\"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:\"\\f3d1\"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:\"\\f30a\"}.fa-dna:before{content:\"\\f471\"}.fa-virus-slash:before{content:\"\\e075\"}.fa-minus:before,.fa-subtract:before{content:\"\\f068\"}.fa-chess:before{content:\"\\f439\"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:\"\\f177\"}.fa-plug-circle-check:before{content:\"\\e55c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-franc-sign:before{content:\"\\e18f\"}.fa-volume-off:before{content:\"\\f026\"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:\"\\f2a3\"}.fa-cog:before,.fa-gear:before{content:\"\\f013\"}.fa-droplet-slash:before,.fa-tint-slash:before{content:\"\\f5c7\"}.fa-mosque:before{content:\"\\f678\"}.fa-mosquito:before{content:\"\\e52b\"}.fa-star-of-david:before{content:\"\\f69a\"}.fa-person-military-rifle:before{content:\"\\e54b\"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:\"\\f07a\"}.fa-vials:before{content:\"\\f493\"}.fa-plug-circle-plus:before{content:\"\\e55f\"}.fa-place-of-worship:before{content:\"\\f67f\"}.fa-grip-vertical:before{content:\"\\f58e\"}.fa-arrow-turn-up:before,.fa-level-up:before{content:\"\\f148\"}.fa-u:before{content:\"\\55\"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:\"\\f698\"}.fa-clock-four:before,.fa-clock:before{content:\"\\f017\"}.fa-backward-step:before,.fa-step-backward:before{content:\"\\f048\"}.fa-pallet:before{content:\"\\f482\"}.fa-faucet:before{content:\"\\e005\"}.fa-baseball-bat-ball:before{content:\"\\f432\"}.fa-s:before{content:\"\\53\"}.fa-timeline:before{content:\"\\e29c\"}.fa-keyboard:before{content:\"\\f11c\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:\"\\f7f2\"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:\"\\f3cf\"}.fa-plane-up:before{content:\"\\e22d\"}.fa-piggy-bank:before{content:\"\\f4d3\"}.fa-battery-3:before,.fa-battery-half:before{content:\"\\f242\"}.fa-mountain-city:before{content:\"\\e52e\"}.fa-coins:before{content:\"\\f51e\"}.fa-khanda:before{content:\"\\f66d\"}.fa-sliders-h:before,.fa-sliders:before{content:\"\\f1de\"}.fa-folder-tree:before{content:\"\\f802\"}.fa-network-wired:before{content:\"\\f6ff\"}.fa-map-pin:before{content:\"\\f276\"}.fa-hamsa:before{content:\"\\f665\"}.fa-cent-sign:before{content:\"\\e3f5\"}.fa-flask:before{content:\"\\f0c3\"}.fa-person-pregnant:before{content:\"\\e31e\"}.fa-wand-sparkles:before{content:\"\\f72b\"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:\"\\f142\"}.fa-ticket:before{content:\"\\f145\"}.fa-power-off:before{content:\"\\f011\"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:\"\\f30b\"}.fa-flag-usa:before{content:\"\\f74d\"}.fa-laptop-file:before{content:\"\\e51d\"}.fa-teletype:before,.fa-tty:before{content:\"\\f1e4\"}.fa-diagram-next:before{content:\"\\e476\"}.fa-person-rifle:before{content:\"\\e54e\"}.fa-house-medical-circle-exclamation:before{content:\"\\e512\"}.fa-closed-captioning:before{content:\"\\f20a\"}.fa-hiking:before,.fa-person-hiking:before{content:\"\\f6ec\"}.fa-venus-double:before{content:\"\\f226\"}.fa-images:before{content:\"\\f302\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-people-pulling:before{content:\"\\e535\"}.fa-n:before{content:\"\\4e\"}.fa-cable-car:before,.fa-tram:before{content:\"\\f7da\"}.fa-cloud-rain:before{content:\"\\f73d\"}.fa-building-circle-xmark:before{content:\"\\e4d4\"}.fa-ship:before{content:\"\\f21a\"}.fa-arrows-down-to-line:before{content:\"\\e4b8\"}.fa-download:before{content:\"\\f019\"}.fa-face-grin:before,.fa-grin:before{content:\"\\f580\"}.fa-backspace:before,.fa-delete-left:before{content:\"\\f55a\"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:\"\\f1fb\"}.fa-file-circle-check:before{content:\"\\e5a0\"}.fa-forward:before{content:\"\\f04e\"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f3ce\"}.fa-face-meh:before,.fa-meh:before{content:\"\\f11a\"}.fa-align-center:before{content:\"\\f037\"}.fa-book-dead:before,.fa-book-skull:before{content:\"\\f6b7\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\f2c2\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-heart-circle-exclamation:before{content:\"\\e4fe\"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:\"\\f015\"}.fa-calendar-week:before{content:\"\\f784\"}.fa-laptop-medical:before{content:\"\\f812\"}.fa-b:before{content:\"\\42\"}.fa-file-medical:before{content:\"\\f477\"}.fa-dice-one:before{content:\"\\f525\"}.fa-kiwi-bird:before{content:\"\\f535\"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:\"\\f0ec\"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:\"\\f2f9\"}.fa-cutlery:before,.fa-utensils:before{content:\"\\f2e7\"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:\"\\f161\"}.fa-mill-sign:before{content:\"\\e1ed\"}.fa-bowl-rice:before{content:\"\\e2eb\"}.fa-skull:before{content:\"\\f54c\"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:\"\\f519\"}.fa-truck-pickup:before{content:\"\\f63c\"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:\"\\f30c\"}.fa-stop:before{content:\"\\f04d\"}.fa-code-merge:before{content:\"\\f387\"}.fa-upload:before{content:\"\\f093\"}.fa-hurricane:before{content:\"\\f751\"}.fa-mound:before{content:\"\\e52d\"}.fa-toilet-portable:before{content:\"\\e583\"}.fa-compact-disc:before{content:\"\\f51f\"}.fa-file-arrow-down:before,.fa-file-download:before{content:\"\\f56d\"}.fa-caravan:before{content:\"\\f8ff\"}.fa-shield-cat:before{content:\"\\e572\"}.fa-bolt:before,.fa-zap:before{content:\"\\f0e7\"}.fa-glass-water:before{content:\"\\e4f4\"}.fa-oil-well:before{content:\"\\e532\"}.fa-vault:before{content:\"\\e2c5\"}.fa-mars:before{content:\"\\f222\"}.fa-toilet:before{content:\"\\f7d8\"}.fa-plane-circle-xmark:before{content:\"\\e557\"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:\"\\f157\"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:\"\\f158\"}.fa-sun:before{content:\"\\f185\"}.fa-guitar:before{content:\"\\f7a6\"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:\"\\f59c\"}.fa-horse-head:before{content:\"\\f7ab\"}.fa-bore-hole:before{content:\"\\e4c3\"}.fa-industry:before{content:\"\\f275\"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:\"\\f358\"}.fa-arrows-turn-to-dots:before{content:\"\\e4c1\"}.fa-florin-sign:before{content:\"\\e184\"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:\"\\f884\"}.fa-less-than:before{content:\"\\3c\"}.fa-angle-down:before{content:\"\\f107\"}.fa-car-tunnel:before{content:\"\\e4de\"}.fa-head-side-cough:before{content:\"\\e061\"}.fa-grip-lines:before{content:\"\\f7a4\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-user-lock:before{content:\"\\f502\"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:\"\\f178\"}.fa-anchor-circle-xmark:before{content:\"\\e4ac\"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:\"\\f141\"}.fa-chess-pawn:before{content:\"\\f443\"}.fa-first-aid:before,.fa-kit-medical:before{content:\"\\f479\"}.fa-person-through-window:before{content:\"\\e5a9\"}.fa-toolbox:before{content:\"\\f552\"}.fa-hands-holding-circle:before{content:\"\\e4fb\"}.fa-bug:before{content:\"\\f188\"}.fa-credit-card-alt:before,.fa-credit-card:before{content:\"\\f09d\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-hand-holding-hand:before{content:\"\\e4f7\"}.fa-book-open-reader:before,.fa-book-reader:before{content:\"\\f5da\"}.fa-mountain-sun:before{content:\"\\e52f\"}.fa-arrows-left-right-to-line:before{content:\"\\e4ba\"}.fa-dice-d20:before{content:\"\\f6cf\"}.fa-truck-droplet:before{content:\"\\e58c\"}.fa-file-circle-xmark:before{content:\"\\e5a1\"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:\"\\e040\"}.fa-medal:before{content:\"\\f5a2\"}.fa-bed:before{content:\"\\f236\"}.fa-h-square:before,.fa-square-h:before{content:\"\\f0fd\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:\"\\f2c7\"}.fa-bell:before{content:\"\\f0f3\"}.fa-superscript:before{content:\"\\f12b\"}.fa-plug-circle-xmark:before{content:\"\\e560\"}.fa-star-of-life:before{content:\"\\f621\"}.fa-phone-slash:before{content:\"\\f3dd\"}.fa-paint-roller:before{content:\"\\f5aa\"}.fa-hands-helping:before,.fa-handshake-angle:before{content:\"\\f4c4\"}.fa-location-dot:before,.fa-map-marker-alt:before{content:\"\\f3c5\"}.fa-file:before{content:\"\\f15b\"}.fa-greater-than:before{content:\"\\3e\"}.fa-person-swimming:before,.fa-swimmer:before{content:\"\\f5c4\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-droplet:before,.fa-tint:before{content:\"\\f043\"}.fa-eraser:before{content:\"\\f12d\"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:\"\\f57d\"}.fa-person-burst:before{content:\"\\e53b\"}.fa-dove:before{content:\"\\f4ba\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-socks:before{content:\"\\f696\"}.fa-inbox:before{content:\"\\f01c\"}.fa-section:before{content:\"\\e447\"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:\"\\f625\"}.fa-envelope-open-text:before{content:\"\\f658\"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:\"\\f0f8\"}.fa-wine-bottle:before{content:\"\\f72f\"}.fa-chess-rook:before{content:\"\\f447\"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:\"\\f550\"}.fa-dharmachakra:before{content:\"\\f655\"}.fa-hotdog:before{content:\"\\f80f\"}.fa-blind:before,.fa-person-walking-with-cane:before{content:\"\\f29d\"}.fa-drum:before{content:\"\\f569\"}.fa-ice-cream:before{content:\"\\f810\"}.fa-heart-circle-bolt:before{content:\"\\e4fc\"}.fa-fax:before{content:\"\\f1ac\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-check-to-slot:before,.fa-vote-yea:before{content:\"\\f772\"}.fa-star-half:before{content:\"\\f089\"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:\"\\f468\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:\"\\f2a2\"}.fa-tree-city:before{content:\"\\e587\"}.fa-play:before{content:\"\\f04b\"}.fa-font:before{content:\"\\f031\"}.fa-rupiah-sign:before{content:\"\\e23d\"}.fa-magnifying-glass:before,.fa-search:before{content:\"\\f002\"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:\"\\f45d\"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:\"\\f470\"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:\"\\f82a\"}.fa-naira-sign:before{content:\"\\e1f6\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-walkie-talkie:before{content:\"\\f8ef\"}.fa-file-edit:before,.fa-file-pen:before{content:\"\\f31c\"}.fa-receipt:before{content:\"\\f543\"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:\"\\f14b\"}.fa-suitcase-rolling:before{content:\"\\f5c1\"}.fa-person-circle-exclamation:before{content:\"\\e53f\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:\"\\f240\"}.fa-skull-crossbones:before{content:\"\\f714\"}.fa-code-compare:before{content:\"\\e13a\"}.fa-list-dots:before,.fa-list-ul:before{content:\"\\f0ca\"}.fa-school-lock:before{content:\"\\e56f\"}.fa-tower-cell:before{content:\"\\e585\"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:\"\\f309\"}.fa-ranking-star:before{content:\"\\e561\"}.fa-chess-king:before{content:\"\\f43f\"}.fa-person-harassing:before{content:\"\\e549\"}.fa-brazilian-real-sign:before{content:\"\\e46c\"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:\"\\f752\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:\"\\f26c\"}.fa-shrimp:before{content:\"\\e448\"}.fa-list-check:before,.fa-tasks:before{content:\"\\f0ae\"}.fa-jug-detergent:before{content:\"\\e519\"}.fa-circle-user:before,.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-shield:before{content:\"\\f505\"}.fa-wind:before{content:\"\\f72e\"}.fa-car-burst:before,.fa-car-crash:before{content:\"\\f5e1\"}.fa-y:before{content:\"\\59\"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:\"\\f7ce\"}.fa-shipping-fast:before,.fa-truck-fast:before{content:\"\\f48b\"}.fa-fish:before{content:\"\\f578\"}.fa-user-graduate:before{content:\"\\f501\"}.fa-adjust:before,.fa-circle-half-stroke:before{content:\"\\f042\"}.fa-clapperboard:before{content:\"\\e131\"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:\"\\f7ba\"}.fa-baseball-ball:before,.fa-baseball:before{content:\"\\f433\"}.fa-jet-fighter-up:before{content:\"\\e518\"}.fa-diagram-project:before,.fa-project-diagram:before{content:\"\\f542\"}.fa-copy:before{content:\"\\f0c5\"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:\"\\f6a9\"}.fa-hand-sparkles:before{content:\"\\e05d\"}.fa-grip-horizontal:before,.fa-grip:before{content:\"\\f58d\"}.fa-share-from-square:before,.fa-share-square:before{content:\"\\f14d\"}.fa-child-combatant:before,.fa-child-rifle:before{content:\"\\e4e0\"}.fa-gun:before{content:\"\\e19b\"}.fa-phone-square:before,.fa-square-phone:before{content:\"\\f098\"}.fa-add:before,.fa-plus:before{content:\"\\2b\"}.fa-expand:before{content:\"\\f065\"}.fa-computer:before{content:\"\\e4e5\"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:\"\\f00d\"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:\"\\f047\"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:\"\\f51c\"}.fa-peso-sign:before{content:\"\\e222\"}.fa-building-shield:before{content:\"\\e4d8\"}.fa-baby:before{content:\"\\f77c\"}.fa-users-line:before{content:\"\\e592\"}.fa-quote-left-alt:before,.fa-quote-left:before{content:\"\\f10d\"}.fa-tractor:before{content:\"\\f722\"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:\"\\f829\"}.fa-arrow-down-up-lock:before{content:\"\\e4b0\"}.fa-lines-leaning:before{content:\"\\e51e\"}.fa-ruler-combined:before{content:\"\\f546\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-equals:before{content:\"\\3d\"}.fa-blender:before{content:\"\\f517\"}.fa-teeth:before{content:\"\\f62e\"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:\"\\f20b\"}.fa-map:before{content:\"\\f279\"}.fa-rocket:before{content:\"\\f135\"}.fa-photo-film:before,.fa-photo-video:before{content:\"\\f87c\"}.fa-folder-minus:before{content:\"\\f65d\"}.fa-store:before{content:\"\\f54e\"}.fa-arrow-trend-up:before{content:\"\\e098\"}.fa-plug-circle-minus:before{content:\"\\e55e\"}.fa-sign-hanging:before,.fa-sign:before{content:\"\\f4d9\"}.fa-bezier-curve:before{content:\"\\f55b\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-tablet-android:before,.fa-tablet:before{content:\"\\f3fb\"}.fa-school-flag:before{content:\"\\e56e\"}.fa-fill:before{content:\"\\f575\"}.fa-angle-up:before{content:\"\\f106\"}.fa-drumstick-bite:before{content:\"\\f6d7\"}.fa-holly-berry:before{content:\"\\f7aa\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-bacteria:before{content:\"\\e059\"}.fa-hand-lizard:before{content:\"\\f258\"}.fa-notdef:before{content:\"\\e1fe\"}.fa-disease:before{content:\"\\f7fa\"}.fa-briefcase-medical:before{content:\"\\f469\"}.fa-genderless:before{content:\"\\f22d\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-retweet:before{content:\"\\f079\"}.fa-car-alt:before,.fa-car-rear:before{content:\"\\f5de\"}.fa-pump-soap:before{content:\"\\e06b\"}.fa-video-slash:before{content:\"\\f4e2\"}.fa-battery-2:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-radio:before{content:\"\\f8d7\"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:\"\\f77d\"}.fa-traffic-light:before{content:\"\\f637\"}.fa-thermometer:before{content:\"\\f491\"}.fa-vr-cardboard:before{content:\"\\f729\"}.fa-hand-middle-finger:before{content:\"\\f806\"}.fa-percent:before,.fa-percentage:before{content:\"\\25\"}.fa-truck-moving:before{content:\"\\f4df\"}.fa-glass-water-droplet:before{content:\"\\e4f5\"}.fa-display:before{content:\"\\e163\"}.fa-face-smile:before,.fa-smile:before{content:\"\\f118\"}.fa-thumb-tack:before,.fa-thumbtack:before{content:\"\\f08d\"}.fa-trophy:before{content:\"\\f091\"}.fa-person-praying:before,.fa-pray:before{content:\"\\f683\"}.fa-hammer:before{content:\"\\f6e3\"}.fa-hand-peace:before{content:\"\\f25b\"}.fa-rotate:before,.fa-sync-alt:before{content:\"\\f2f1\"}.fa-spinner:before{content:\"\\f110\"}.fa-robot:before{content:\"\\f544\"}.fa-peace:before{content:\"\\f67c\"}.fa-cogs:before,.fa-gears:before{content:\"\\f085\"}.fa-warehouse:before{content:\"\\f494\"}.fa-arrow-up-right-dots:before{content:\"\\e4b7\"}.fa-splotch:before{content:\"\\f5bc\"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:\"\\f584\"}.fa-dice-four:before{content:\"\\f524\"}.fa-sim-card:before{content:\"\\f7c4\"}.fa-transgender-alt:before,.fa-transgender:before{content:\"\\f225\"}.fa-mercury:before{content:\"\\f223\"}.fa-arrow-turn-down:before,.fa-level-down:before{content:\"\\f149\"}.fa-person-falling-burst:before{content:\"\\e547\"}.fa-award:before{content:\"\\f559\"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:\"\\f3ff\"}.fa-building:before{content:\"\\f1ad\"}.fa-angle-double-left:before,.fa-angles-left:before{content:\"\\f100\"}.fa-qrcode:before{content:\"\\f029\"}.fa-clock-rotate-left:before,.fa-history:before{content:\"\\f1da\"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:\"\\f583\"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:\"\\f56e\"}.fa-shield-blank:before,.fa-shield:before{content:\"\\f132\"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:\"\\f885\"}.fa-house-medical:before{content:\"\\e3b2\"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:\"\\f450\"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:\"\\f137\"}.fa-house-chimney-window:before{content:\"\\e00d\"}.fa-pen-nib:before{content:\"\\f5ad\"}.fa-tent-arrow-turn-left:before{content:\"\\e580\"}.fa-tents:before{content:\"\\e582\"}.fa-magic:before,.fa-wand-magic:before{content:\"\\f0d0\"}.fa-dog:before{content:\"\\f6d3\"}.fa-carrot:before{content:\"\\f787\"}.fa-moon:before{content:\"\\f186\"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:\"\\f5ce\"}.fa-cheese:before{content:\"\\f7ef\"}.fa-yin-yang:before{content:\"\\f6ad\"}.fa-music:before{content:\"\\f001\"}.fa-code-commit:before{content:\"\\f386\"}.fa-temperature-low:before{content:\"\\f76b\"}.fa-biking:before,.fa-person-biking:before{content:\"\\f84a\"}.fa-broom:before{content:\"\\f51a\"}.fa-shield-heart:before{content:\"\\e574\"}.fa-gopuram:before{content:\"\\f664\"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:\"\\e47b\"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:\"\\f2d3\"}.fa-hashtag:before{content:\"\\23\"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:\"\\f424\"}.fa-oil-can:before{content:\"\\f613\"}.fa-t:before{content:\"\\54\"}.fa-hippo:before{content:\"\\f6ed\"}.fa-chart-column:before{content:\"\\e0e3\"}.fa-infinity:before{content:\"\\f534\"}.fa-vial-circle-check:before{content:\"\\e596\"}.fa-person-arrow-down-to-line:before{content:\"\\e538\"}.fa-voicemail:before{content:\"\\f897\"}.fa-fan:before{content:\"\\f863\"}.fa-person-walking-luggage:before{content:\"\\e554\"}.fa-arrows-alt-v:before,.fa-up-down:before{content:\"\\f338\"}.fa-cloud-moon-rain:before{content:\"\\f73c\"}.fa-calendar:before{content:\"\\f133\"}.fa-trailer:before{content:\"\\e041\"}.fa-bahai:before,.fa-haykal:before{content:\"\\f666\"}.fa-sd-card:before{content:\"\\f7c2\"}.fa-dragon:before{content:\"\\f6d5\"}.fa-shoe-prints:before{content:\"\\f54b\"}.fa-circle-plus:before,.fa-plus-circle:before{content:\"\\f055\"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:\"\\f58b\"}.fa-hand-holding:before{content:\"\\f4bd\"}.fa-plug-circle-exclamation:before{content:\"\\e55d\"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:\"\\f127\"}.fa-clone:before{content:\"\\f24d\"}.fa-person-walking-arrow-loop-left:before{content:\"\\e551\"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:\"\\f882\"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:\"\\f7e4\"}.fa-tornado:before{content:\"\\f76f\"}.fa-file-circle-plus:before{content:\"\\e494\"}.fa-book-quran:before,.fa-quran:before{content:\"\\f687\"}.fa-anchor:before{content:\"\\f13d\"}.fa-border-all:before{content:\"\\f84c\"}.fa-angry:before,.fa-face-angry:before{content:\"\\f556\"}.fa-cookie-bite:before{content:\"\\f564\"}.fa-arrow-trend-down:before{content:\"\\e097\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-draw-polygon:before{content:\"\\f5ee\"}.fa-balance-scale:before,.fa-scale-balanced:before{content:\"\\f24e\"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:\"\\f62a\"}.fa-shower:before{content:\"\\f2cc\"}.fa-desktop-alt:before,.fa-desktop:before{content:\"\\f390\"}.fa-m:before{content:\"\\4d\"}.fa-table-list:before,.fa-th-list:before{content:\"\\f00b\"}.fa-comment-sms:before,.fa-sms:before{content:\"\\f7cd\"}.fa-book:before{content:\"\\f02d\"}.fa-user-plus:before{content:\"\\f234\"}.fa-check:before{content:\"\\f00c\"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-house-circle-check:before{content:\"\\e509\"}.fa-angle-left:before{content:\"\\f104\"}.fa-diagram-successor:before{content:\"\\e47a\"}.fa-truck-arrow-right:before{content:\"\\e58b\"}.fa-arrows-split-up-and-left:before{content:\"\\e4bc\"}.fa-fist-raised:before,.fa-hand-fist:before{content:\"\\f6de\"}.fa-cloud-moon:before{content:\"\\f6c3\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-person-falling:before{content:\"\\e546\"}.fa-image-portrait:before,.fa-portrait:before{content:\"\\f3e0\"}.fa-user-tag:before{content:\"\\f507\"}.fa-rug:before{content:\"\\e569\"}.fa-earth-europe:before,.fa-globe-europe:before{content:\"\\f7a2\"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:\"\\f59d\"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:\"\\f410\"}.fa-baht-sign:before{content:\"\\e0ac\"}.fa-book-open:before{content:\"\\f518\"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:\"\\f66a\"}.fa-handcuffs:before{content:\"\\e4f8\"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:\"\\f071\"}.fa-database:before{content:\"\\f1c0\"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-bottle-droplet:before{content:\"\\e4c4\"}.fa-mask-face:before{content:\"\\e1d7\"}.fa-hill-rockslide:before{content:\"\\e508\"}.fa-exchange-alt:before,.fa-right-left:before{content:\"\\f362\"}.fa-paper-plane:before{content:\"\\f1d8\"}.fa-road-circle-exclamation:before{content:\"\\e565\"}.fa-dungeon:before{content:\"\\f6d9\"}.fa-align-right:before{content:\"\\f038\"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:\"\\f53b\"}.fa-life-ring:before{content:\"\\f1cd\"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:\"\\f2a7\"}.fa-calendar-day:before{content:\"\\f783\"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:\"\\f5c5\"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:\"\\f07d\"}.fa-face-grimace:before,.fa-grimace:before{content:\"\\f57f\"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:\"\\e2ce\"}.fa-level-down-alt:before,.fa-turn-down:before{content:\"\\f3be\"}.fa-person-walking-arrow-right:before{content:\"\\e552\"}.fa-envelope-square:before,.fa-square-envelope:before{content:\"\\f199\"}.fa-dice:before{content:\"\\f522\"}.fa-bowling-ball:before{content:\"\\f436\"}.fa-brain:before{content:\"\\f5dc\"}.fa-band-aid:before,.fa-bandage:before{content:\"\\f462\"}.fa-calendar-minus:before{content:\"\\f272\"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:\"\\f057\"}.fa-gifts:before{content:\"\\f79c\"}.fa-hotel:before{content:\"\\f594\"}.fa-earth-asia:before,.fa-globe-asia:before{content:\"\\f57e\"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:\"\\f47f\"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:\"\\f00e\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-user-clock:before{content:\"\\f4fd\"}.fa-allergies:before,.fa-hand-dots:before{content:\"\\f461\"}.fa-file-invoice:before{content:\"\\f570\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-coffee:before,.fa-mug-saucer:before{content:\"\\f0f4\"}.fa-brush:before{content:\"\\f55d\"}.fa-mask:before{content:\"\\f6fa\"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:\"\\f010\"}.fa-ruler-vertical:before{content:\"\\f548\"}.fa-user-alt:before,.fa-user-large:before{content:\"\\f406\"}.fa-train-tram:before{content:\"\\e5b4\"}.fa-user-nurse:before{content:\"\\f82f\"}.fa-syringe:before{content:\"\\f48e\"}.fa-cloud-sun:before{content:\"\\f6c4\"}.fa-stopwatch-20:before{content:\"\\e06f\"}.fa-square-full:before{content:\"\\f45c\"}.fa-magnet:before{content:\"\\f076\"}.fa-jar:before{content:\"\\e516\"}.fa-note-sticky:before,.fa-sticky-note:before{content:\"\\f249\"}.fa-bug-slash:before{content:\"\\e490\"}.fa-arrow-up-from-water-pump:before{content:\"\\e4b6\"}.fa-bone:before{content:\"\\f5d7\"}.fa-user-injured:before{content:\"\\f728\"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:\"\\f5b4\"}.fa-plane:before{content:\"\\f072\"}.fa-tent-arrows-down:before{content:\"\\e581\"}.fa-exclamation:before{content:\"\\21\"}.fa-arrows-spin:before{content:\"\\e4bb\"}.fa-print:before{content:\"\\f02f\"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:\"\\e2bb\"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:\"\\24\"}.fa-x:before{content:\"\\58\"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:\"\\f688\"}.fa-users-cog:before,.fa-users-gear:before{content:\"\\f509\"}.fa-person-military-pointing:before{content:\"\\e54a\"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:\"\\f19c\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-trowel:before{content:\"\\e589\"}.fa-d:before{content:\"\\44\"}.fa-stapler:before{content:\"\\e5af\"}.fa-masks-theater:before,.fa-theater-masks:before{content:\"\\f630\"}.fa-kip-sign:before{content:\"\\e1c4\"}.fa-hand-point-left:before{content:\"\\f0a5\"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:\"\\f4c6\"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:\"\\f0fb\"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:\"\\f1e1\"}.fa-barcode:before{content:\"\\f02a\"}.fa-plus-minus:before{content:\"\\e43c\"}.fa-video-camera:before,.fa-video:before{content:\"\\f03d\"}.fa-graduation-cap:before,.fa-mortar-board:before{content:\"\\f19d\"}.fa-hand-holding-medical:before{content:\"\\e05c\"}.fa-person-circle-check:before{content:\"\\e53e\"}.fa-level-up-alt:before,.fa-turn-up:before{content:\"\\f3bf\"}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":".fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:\"Font Awesome 6 Brands\";--fa-font-brands:normal 400 1em/1 \"Font Awesome 6 Brands\"}@font-face{font-family:\"Font Awesome 6 Brands\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:\"\\f3d0\"}.fa-hooli:before{content:\"\\f427\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-lastfm:before{content:\"\\f202\"}.fa-shopware:before{content:\"\\f5b5\"}.fa-creative-commons-nc:before{content:\"\\f4e8\"}.fa-aws:before{content:\"\\f375\"}.fa-redhat:before{content:\"\\f7bc\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-cloudflare:before{content:\"\\e07d\"}.fa-ups:before{content:\"\\f7e0\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-dyalog:before{content:\"\\f399\"}.fa-bity:before{content:\"\\f37a\"}.fa-stackpath:before{content:\"\\f842\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-modx:before{content:\"\\f285\"}.fa-guilded:before{content:\"\\e07e\"}.fa-vnv:before{content:\"\\f40b\"}.fa-js-square:before,.fa-square-js:before{content:\"\\f3b9\"}.fa-microsoft:before{content:\"\\f3ca\"}.fa-qq:before{content:\"\\f1d6\"}.fa-orcid:before{content:\"\\f8d2\"}.fa-java:before{content:\"\\f4e4\"}.fa-invision:before{content:\"\\f7b0\"}.fa-creative-commons-pd-alt:before{content:\"\\f4ed\"}.fa-centercode:before{content:\"\\f380\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-hire-a-helper:before{content:\"\\f3b0\"}.fa-creative-commons-by:before{content:\"\\f4e7\"}.fa-unity:before{content:\"\\e049\"}.fa-whmcs:before{content:\"\\f40d\"}.fa-rocketchat:before{content:\"\\f3e8\"}.fa-vk:before{content:\"\\f189\"}.fa-untappd:before{content:\"\\f405\"}.fa-mailchimp:before{content:\"\\f59e\"}.fa-css3-alt:before{content:\"\\f38b\"}.fa-reddit-square:before,.fa-square-reddit:before{content:\"\\f1a2\"}.fa-vimeo-v:before{content:\"\\f27d\"}.fa-contao:before{content:\"\\f26d\"}.fa-square-font-awesome:before{content:\"\\e5ad\"}.fa-deskpro:before{content:\"\\f38f\"}.fa-sistrix:before{content:\"\\f3ee\"}.fa-instagram-square:before,.fa-square-instagram:before{content:\"\\e055\"}.fa-battle-net:before{content:\"\\f835\"}.fa-the-red-yeti:before{content:\"\\f69d\"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:\"\\f3af\"}.fa-edge:before{content:\"\\f282\"}.fa-napster:before{content:\"\\f3d2\"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:\"\\f2ad\"}.fa-google-plus-g:before{content:\"\\f0d5\"}.fa-artstation:before{content:\"\\f77a\"}.fa-markdown:before{content:\"\\f60f\"}.fa-sourcetree:before{content:\"\\f7d3\"}.fa-google-plus:before{content:\"\\f2b3\"}.fa-diaspora:before{content:\"\\f791\"}.fa-foursquare:before{content:\"\\f180\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-github-alt:before{content:\"\\f113\"}.fa-phoenix-squadron:before{content:\"\\f511\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-algolia:before{content:\"\\f36c\"}.fa-red-river:before{content:\"\\f3e3\"}.fa-creative-commons-sa:before{content:\"\\f4ef\"}.fa-safari:before{content:\"\\f267\"}.fa-google:before{content:\"\\f1a0\"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:\"\\f35c\"}.fa-atlassian:before{content:\"\\f77b\"}.fa-linkedin-in:before{content:\"\\f0e1\"}.fa-digital-ocean:before{content:\"\\f391\"}.fa-nimblr:before{content:\"\\f5a8\"}.fa-chromecast:before{content:\"\\f838\"}.fa-evernote:before{content:\"\\f839\"}.fa-hacker-news:before{content:\"\\f1d4\"}.fa-creative-commons-sampling:before{content:\"\\f4f0\"}.fa-adversal:before{content:\"\\f36a\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-watchman-monitoring:before{content:\"\\e087\"}.fa-fonticons:before{content:\"\\f280\"}.fa-weixin:before{content:\"\\f1d7\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-git-alt:before{content:\"\\f841\"}.fa-lyft:before{content:\"\\f3c3\"}.fa-rev:before{content:\"\\f5b2\"}.fa-windows:before{content:\"\\f17a\"}.fa-wizards-of-the-coast:before{content:\"\\f730\"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-meetup:before{content:\"\\f2e0\"}.fa-centos:before{content:\"\\f789\"}.fa-adn:before{content:\"\\f170\"}.fa-cloudsmith:before{content:\"\\f384\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:\"\\f397\"}.fa-codiepie:before{content:\"\\f284\"}.fa-node:before{content:\"\\f419\"}.fa-mix:before{content:\"\\f3cb\"}.fa-steam:before{content:\"\\f1b6\"}.fa-cc-apple-pay:before{content:\"\\f416\"}.fa-scribd:before{content:\"\\f28a\"}.fa-openid:before{content:\"\\f19b\"}.fa-instalod:before{content:\"\\e081\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-sellcast:before{content:\"\\f2da\"}.fa-square-twitter:before,.fa-twitter-square:before{content:\"\\f081\"}.fa-r-project:before{content:\"\\f4f7\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-freebsd:before{content:\"\\f3a4\"}.fa-vuejs:before{content:\"\\f41f\"}.fa-accusoft:before{content:\"\\f369\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-fonticons-fi:before{content:\"\\f3a2\"}.fa-app-store:before{content:\"\\f36f\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-itunes-note:before{content:\"\\f3b5\"}.fa-golang:before{content:\"\\e40f\"}.fa-kickstarter:before{content:\"\\f3bb\"}.fa-grav:before{content:\"\\f2d6\"}.fa-weibo:before{content:\"\\f18a\"}.fa-uncharted:before{content:\"\\e084\"}.fa-firstdraft:before{content:\"\\f3a1\"}.fa-square-youtube:before,.fa-youtube-square:before{content:\"\\f431\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-rendact:before,.fa-wpressr:before{content:\"\\f3e4\"}.fa-angellist:before{content:\"\\f209\"}.fa-galactic-republic:before{content:\"\\f50c\"}.fa-nfc-directional:before{content:\"\\e530\"}.fa-skype:before{content:\"\\f17e\"}.fa-joget:before{content:\"\\f3b7\"}.fa-fedora:before{content:\"\\f798\"}.fa-stripe-s:before{content:\"\\f42a\"}.fa-meta:before{content:\"\\e49b\"}.fa-laravel:before{content:\"\\f3bd\"}.fa-hotjar:before{content:\"\\f3b1\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-sticker-mule:before{content:\"\\f3f7\"}.fa-creative-commons-zero:before{content:\"\\f4f3\"}.fa-hips:before{content:\"\\f452\"}.fa-behance:before{content:\"\\f1b4\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-discord:before{content:\"\\f392\"}.fa-chrome:before{content:\"\\f268\"}.fa-app-store-ios:before{content:\"\\f370\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-confluence:before{content:\"\\f78d\"}.fa-mdb:before{content:\"\\f8ca\"}.fa-dochub:before{content:\"\\f394\"}.fa-accessible-icon:before{content:\"\\f368\"}.fa-ebay:before{content:\"\\f4f4\"}.fa-amazon:before{content:\"\\f270\"}.fa-unsplash:before{content:\"\\e07c\"}.fa-yarn:before{content:\"\\f7e3\"}.fa-square-steam:before,.fa-steam-square:before{content:\"\\f1b7\"}.fa-500px:before{content:\"\\f26e\"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:\"\\f194\"}.fa-asymmetrik:before{content:\"\\f372\"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:\"\\f2b4\"}.fa-gratipay:before{content:\"\\f184\"}.fa-apple:before{content:\"\\f179\"}.fa-hive:before{content:\"\\e07f\"}.fa-gitkraken:before{content:\"\\f3a6\"}.fa-keybase:before{content:\"\\f4f5\"}.fa-apple-pay:before{content:\"\\f415\"}.fa-padlet:before{content:\"\\e4a0\"}.fa-amazon-pay:before{content:\"\\f42c\"}.fa-github-square:before,.fa-square-github:before{content:\"\\f092\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-fedex:before{content:\"\\f797\"}.fa-phoenix-framework:before{content:\"\\f3dc\"}.fa-shopify:before{content:\"\\e057\"}.fa-neos:before{content:\"\\f612\"}.fa-hackerrank:before{content:\"\\f5f7\"}.fa-researchgate:before{content:\"\\f4f8\"}.fa-swift:before{content:\"\\f8e1\"}.fa-angular:before{content:\"\\f420\"}.fa-speakap:before{content:\"\\f3f3\"}.fa-angrycreative:before{content:\"\\f36e\"}.fa-y-combinator:before{content:\"\\f23b\"}.fa-empire:before{content:\"\\f1d1\"}.fa-envira:before{content:\"\\f299\"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:\"\\e5ae\"}.fa-studiovinari:before{content:\"\\f3f8\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-firefox:before{content:\"\\f269\"}.fa-linode:before{content:\"\\f2b8\"}.fa-goodreads:before{content:\"\\f3a8\"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:\"\\f264\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-sith:before{content:\"\\f512\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-page4:before{content:\"\\f3d7\"}.fa-hashnode:before{content:\"\\e499\"}.fa-react:before{content:\"\\f41b\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-squarespace:before{content:\"\\f5be\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-creative-commons-share:before{content:\"\\f4f2\"}.fa-bitcoin:before{content:\"\\f379\"}.fa-keycdn:before{content:\"\\f3ba\"}.fa-opera:before{content:\"\\f26a\"}.fa-itch-io:before{content:\"\\f83a\"}.fa-umbraco:before{content:\"\\f8e8\"}.fa-galactic-senate:before{content:\"\\f50d\"}.fa-ubuntu:before{content:\"\\f7df\"}.fa-draft2digital:before{content:\"\\f396\"}.fa-stripe:before{content:\"\\f429\"}.fa-houzz:before{content:\"\\f27c\"}.fa-gg:before{content:\"\\f260\"}.fa-dhl:before{content:\"\\f790\"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:\"\\f0d3\"}.fa-xing:before{content:\"\\f168\"}.fa-blackberry:before{content:\"\\f37b\"}.fa-creative-commons-pd:before{content:\"\\f4ec\"}.fa-playstation:before{content:\"\\f3df\"}.fa-quinscape:before{content:\"\\f459\"}.fa-less:before{content:\"\\f41d\"}.fa-blogger-b:before{content:\"\\f37d\"}.fa-opencart:before{content:\"\\f23d\"}.fa-vine:before{content:\"\\f1ca\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-gitlab:before{content:\"\\f296\"}.fa-typo3:before{content:\"\\f42b\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-dailymotion:before{content:\"\\e052\"}.fa-affiliatetheme:before{content:\"\\f36b\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-bootstrap:before{content:\"\\f836\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-nfc-symbol:before{content:\"\\e531\"}.fa-ethereum:before{content:\"\\f42e\"}.fa-speaker-deck:before{content:\"\\f83c\"}.fa-creative-commons-nc-eu:before{content:\"\\f4e9\"}.fa-patreon:before{content:\"\\f3d9\"}.fa-avianex:before{content:\"\\f374\"}.fa-ello:before{content:\"\\f5f1\"}.fa-gofore:before{content:\"\\f3a7\"}.fa-bimobject:before{content:\"\\f378\"}.fa-facebook-f:before{content:\"\\f39e\"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:\"\\f0d4\"}.fa-mandalorian:before{content:\"\\f50f\"}.fa-first-order-alt:before{content:\"\\f50a\"}.fa-osi:before{content:\"\\f41a\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-d-and-d-beyond:before{content:\"\\f6ca\"}.fa-periscope:before{content:\"\\f3da\"}.fa-fulcrum:before{content:\"\\f50b\"}.fa-cloudscale:before{content:\"\\f383\"}.fa-forumbee:before{content:\"\\f211\"}.fa-mizuni:before{content:\"\\f3cc\"}.fa-schlix:before{content:\"\\f3ea\"}.fa-square-xing:before,.fa-xing-square:before{content:\"\\f169\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-wpforms:before{content:\"\\f298\"}.fa-cloudversify:before{content:\"\\f385\"}.fa-usps:before{content:\"\\f7e1\"}.fa-megaport:before{content:\"\\f5a3\"}.fa-magento:before{content:\"\\f3c4\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-fly:before{content:\"\\f417\"}.fa-aviato:before{content:\"\\f421\"}.fa-itunes:before{content:\"\\f3b4\"}.fa-cuttlefish:before{content:\"\\f38c\"}.fa-blogger:before{content:\"\\f37c\"}.fa-flickr:before{content:\"\\f16e\"}.fa-viber:before{content:\"\\f409\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-digg:before{content:\"\\f1a6\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-symfony:before{content:\"\\f83d\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-facebook-messenger:before{content:\"\\f39f\"}.fa-audible:before{content:\"\\f373\"}.fa-think-peaks:before{content:\"\\f731\"}.fa-bilibili:before{content:\"\\e3d9\"}.fa-erlang:before{content:\"\\f39d\"}.fa-cotton-bureau:before{content:\"\\f89e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-42-group:before,.fa-innosoft:before{content:\"\\e080\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-elementor:before{content:\"\\f430\"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:\"\\e01e\"}.fa-creative-commons-nd:before{content:\"\\f4eb\"}.fa-palfed:before{content:\"\\f3d8\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-resolving:before{content:\"\\f3e7\"}.fa-xbox:before{content:\"\\f412\"}.fa-searchengin:before{content:\"\\f3eb\"}.fa-tiktok:before{content:\"\\e07b\"}.fa-facebook-square:before,.fa-square-facebook:before{content:\"\\f082\"}.fa-renren:before{content:\"\\f18b\"}.fa-linux:before{content:\"\\f17c\"}.fa-glide:before{content:\"\\f2a5\"}.fa-linkedin:before{content:\"\\f08c\"}.fa-hubspot:before{content:\"\\f3b2\"}.fa-deploydog:before{content:\"\\f38e\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-mixer:before{content:\"\\e056\"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:\"\\f203\"}.fa-vimeo:before{content:\"\\f40a\"}.fa-mendeley:before{content:\"\\f7b3\"}.fa-uniregistry:before{content:\"\\f404\"}.fa-figma:before{content:\"\\f799\"}.fa-creative-commons-remix:before{content:\"\\f4ee\"}.fa-cc-amazon-pay:before{content:\"\\f42d\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-instagram:before{content:\"\\f16d\"}.fa-cmplid:before{content:\"\\e360\"}.fa-facebook:before{content:\"\\f09a\"}.fa-gripfire:before{content:\"\\f3ac\"}.fa-jedi-order:before{content:\"\\f50e\"}.fa-uikit:before{content:\"\\f403\"}.fa-fort-awesome-alt:before{content:\"\\f3a3\"}.fa-phabricator:before{content:\"\\f3db\"}.fa-ussunnah:before{content:\"\\f407\"}.fa-earlybirds:before{content:\"\\f39a\"}.fa-trade-federation:before{content:\"\\f513\"}.fa-autoprefixer:before{content:\"\\f41c\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-google-play:before{content:\"\\f3ab\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-line:before{content:\"\\f3c0\"}.fa-google-drive:before{content:\"\\f3aa\"}.fa-servicestack:before{content:\"\\f3ec\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-deezer:before{content:\"\\e077\"}.fa-raspberry-pi:before{content:\"\\f7bb\"}.fa-jira:before{content:\"\\f7b1\"}.fa-docker:before{content:\"\\f395\"}.fa-screenpal:before{content:\"\\e570\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-gitter:before{content:\"\\f426\"}.fa-d-and-d:before{content:\"\\f38d\"}.fa-microblog:before{content:\"\\e01a\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-pied-piper-hat:before{content:\"\\f4e5\"}.fa-kickstarter-k:before{content:\"\\f3bc\"}.fa-yandex:before{content:\"\\f413\"}.fa-readme:before{content:\"\\f4d5\"}.fa-html5:before{content:\"\\f13b\"}.fa-sellsy:before{content:\"\\f213\"}.fa-sass:before{content:\"\\f41e\"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:\"\\e2d0\"}.fa-buromobelexperte:before{content:\"\\f37f\"}.fa-salesforce:before{content:\"\\f83b\"}.fa-octopus-deploy:before{content:\"\\e082\"}.fa-medapps:before{content:\"\\f3c6\"}.fa-ns8:before{content:\"\\f3d5\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-apper:before{content:\"\\f371\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-waze:before{content:\"\\f83f\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:\"\\f2ab\"}.fa-fantasy-flight-games:before{content:\"\\f6dc\"}.fa-rust:before{content:\"\\e07a\"}.fa-wix:before{content:\"\\f5cf\"}.fa-behance-square:before,.fa-square-behance:before{content:\"\\f1b5\"}.fa-supple:before{content:\"\\f3f9\"}.fa-rebel:before{content:\"\\f1d0\"}.fa-css3:before{content:\"\\f13c\"}.fa-staylinked:before{content:\"\\f3f5\"}.fa-kaggle:before{content:\"\\f5fa\"}.fa-space-awesome:before{content:\"\\e5ac\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-cpanel:before{content:\"\\f388\"}.fa-goodreads-g:before{content:\"\\f3a9\"}.fa-git-square:before,.fa-square-git:before{content:\"\\f1d2\"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:\"\\f174\"}.fa-trello:before{content:\"\\f181\"}.fa-creative-commons-nc-jp:before{content:\"\\f4ea\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-perbyte:before{content:\"\\e083\"}.fa-grunt:before{content:\"\\f3ad\"}.fa-weebly:before{content:\"\\f5cc\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-leanpub:before{content:\"\\f212\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-themeco:before{content:\"\\f5c6\"}.fa-python:before{content:\"\\f3e2\"}.fa-android:before{content:\"\\f17b\"}.fa-bots:before{content:\"\\e340\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-hornbill:before{content:\"\\f592\"}.fa-js:before{content:\"\\f3b8\"}.fa-ideal:before{content:\"\\e013\"}.fa-git:before{content:\"\\f1d3\"}.fa-dev:before{content:\"\\f6cc\"}.fa-sketch:before{content:\"\\f7c6\"}.fa-yandex-international:before{content:\"\\f414\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-uber:before{content:\"\\f402\"}.fa-github:before{content:\"\\f09b\"}.fa-php:before{content:\"\\f457\"}.fa-alipay:before{content:\"\\f642\"}.fa-youtube:before{content:\"\\f167\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-firefox-browser:before{content:\"\\e007\"}.fa-replyd:before{content:\"\\f3e6\"}.fa-suse:before{content:\"\\f7d6\"}.fa-jenkins:before{content:\"\\f3b6\"}.fa-twitter:before{content:\"\\f099\"}.fa-rockrms:before{content:\"\\f3e9\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-buffer:before{content:\"\\f837\"}.fa-npm:before{content:\"\\f3d4\"}.fa-yammer:before{content:\"\\f840\"}.fa-btc:before{content:\"\\f15a\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-stubber:before{content:\"\\e5c7\"}.fa-telegram-plane:before,.fa-telegram:before{content:\"\\f2c6\"}.fa-old-republic:before{content:\"\\f510\"}.fa-odysee:before{content:\"\\e5c6\"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:\"\\f40c\"}.fa-node-js:before{content:\"\\f3d3\"}.fa-edge-legacy:before{content:\"\\e078\"}.fa-slack-hash:before,.fa-slack:before{content:\"\\f198\"}.fa-medrt:before{content:\"\\f3c8\"}.fa-usb:before{content:\"\\f287\"}.fa-tumblr:before{content:\"\\f173\"}.fa-vaadin:before{content:\"\\f408\"}.fa-quora:before{content:\"\\f2c4\"}.fa-reacteurope:before{content:\"\\f75d\"}.fa-medium-m:before,.fa-medium:before{content:\"\\f23a\"}.fa-amilia:before{content:\"\\f36d\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-flipboard:before{content:\"\\f44d\"}.fa-viacoin:before{content:\"\\f237\"}.fa-critical-role:before{content:\"\\f6c9\"}.fa-sitrox:before{content:\"\\e44a\"}.fa-discourse:before{content:\"\\f393\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-mastodon:before{content:\"\\f4f6\"}.fa-airbnb:before{content:\"\\f834\"}.fa-wolf-pack-battalion:before{content:\"\\f514\"}.fa-buy-n-large:before{content:\"\\f8a6\"}.fa-gulp:before{content:\"\\f3ae\"}.fa-creative-commons-sampling-plus:before{content:\"\\f4f1\"}.fa-strava:before{content:\"\\f428\"}.fa-ember:before{content:\"\\f423\"}.fa-canadian-maple-leaf:before{content:\"\\f785\"}.fa-teamspeak:before{content:\"\\f4f9\"}.fa-pushed:before{content:\"\\f3e1\"}.fa-wordpress-simple:before{content:\"\\f411\"}.fa-nutritionix:before{content:\"\\f3d6\"}.fa-wodu:before{content:\"\\e088\"}.fa-google-pay:before{content:\"\\e079\"}.fa-intercom:before{content:\"\\f7af\"}.fa-zhihu:before{content:\"\\f63f\"}.fa-korvue:before{content:\"\\f42f\"}.fa-pix:before{content:\"\\e43a\"}.fa-steam-symbol:before{content:\"\\f3f6\"}:host,:root{--fa-font-regular:normal 400 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:\"Font Awesome 6 Free\";--fa-font-solid:normal 900 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}.fa-solid,.fas{font-weight:900}@font-face{font-family:\"Font Awesome 5 Brands\";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format(\"woff2\"),url(../webfonts/fa-v4compatibility.ttf) format(\"truetype\");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}"}],"authorContributionMap":{"KevinEyo1":9}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/glyphicons/css/bootstrap-glyphicons.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Bootstrap v3.3.7 (http://getbootstrap.com)"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2016 Twitter, Inc."},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id\u003d76290a4e23bf2c3f61a4e17625be4627)"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" * Config saved to config.json and https://gist.github.com/76290a4e23bf2c3f61a4e17625be4627"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" * Bootstrap v3.3.7 (http://getbootstrap.com)"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2016 Twitter, Inc."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"@font-face{font-family:\u0027Glyphicons Halflings\u0027;src:url(../fonts/glyphicons-halflings-regular.eot);src:url(\u0027../fonts/glyphicons-halflings-regular.eot?#iefix\u0027) format(\u0027embedded-opentype\u0027),url(../fonts/glyphicons-halflings-regular.woff2) format(\u0027woff2\u0027),url(../fonts/glyphicons-halflings-regular.woff) format(\u0027woff\u0027),url(../fonts/glyphicons-halflings-regular.ttf) format(\u0027truetype\u0027),url(\u0027../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\u0027) format(\u0027svg\u0027)}.glyphicon{position:relative;top:1px;display:inline-block;font-family:\u0027Glyphicons Halflings\u0027;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:\"\\002a\"}.glyphicon-plus:before{content:\"\\002b\"}.glyphicon-euro:before,.glyphicon-eur:before{content:\"\\20ac\"}.glyphicon-minus:before{content:\"\\2212\"}.glyphicon-cloud:before{content:\"\\2601\"}.glyphicon-envelope:before{content:\"\\2709\"}.glyphicon-pencil:before{content:\"\\270f\"}.glyphicon-glass:before{content:\"\\e001\"}.glyphicon-music:before{content:\"\\e002\"}.glyphicon-search:before{content:\"\\e003\"}.glyphicon-heart:before{content:\"\\e005\"}.glyphicon-star:before{content:\"\\e006\"}.glyphicon-star-empty:before{content:\"\\e007\"}.glyphicon-user:before{content:\"\\e008\"}.glyphicon-film:before{content:\"\\e009\"}.glyphicon-th-large:before{content:\"\\e010\"}.glyphicon-th:before{content:\"\\e011\"}.glyphicon-th-list:before{content:\"\\e012\"}.glyphicon-ok:before{content:\"\\e013\"}.glyphicon-remove:before{content:\"\\e014\"}.glyphicon-zoom-in:before{content:\"\\e015\"}.glyphicon-zoom-out:before{content:\"\\e016\"}.glyphicon-off:before{content:\"\\e017\"}.glyphicon-signal:before{content:\"\\e018\"}.glyphicon-cog:before{content:\"\\e019\"}.glyphicon-trash:before{content:\"\\e020\"}.glyphicon-home:before{content:\"\\e021\"}.glyphicon-file:before{content:\"\\e022\"}.glyphicon-time:before{content:\"\\e023\"}.glyphicon-road:before{content:\"\\e024\"}.glyphicon-download-alt:before{content:\"\\e025\"}.glyphicon-download:before{content:\"\\e026\"}.glyphicon-upload:before{content:\"\\e027\"}.glyphicon-inbox:before{content:\"\\e028\"}.glyphicon-play-circle:before{content:\"\\e029\"}.glyphicon-repeat:before{content:\"\\e030\"}.glyphicon-refresh:before{content:\"\\e031\"}.glyphicon-list-alt:before{content:\"\\e032\"}.glyphicon-lock:before{content:\"\\e033\"}.glyphicon-flag:before{content:\"\\e034\"}.glyphicon-headphones:before{content:\"\\e035\"}.glyphicon-volume-off:before{content:\"\\e036\"}.glyphicon-volume-down:before{content:\"\\e037\"}.glyphicon-volume-up:before{content:\"\\e038\"}.glyphicon-qrcode:before{content:\"\\e039\"}.glyphicon-barcode:before{content:\"\\e040\"}.glyphicon-tag:before{content:\"\\e041\"}.glyphicon-tags:before{content:\"\\e042\"}.glyphicon-book:before{content:\"\\e043\"}.glyphicon-bookmark:before{content:\"\\e044\"}.glyphicon-print:before{content:\"\\e045\"}.glyphicon-camera:before{content:\"\\e046\"}.glyphicon-font:before{content:\"\\e047\"}.glyphicon-bold:before{content:\"\\e048\"}.glyphicon-italic:before{content:\"\\e049\"}.glyphicon-text-height:before{content:\"\\e050\"}.glyphicon-text-width:before{content:\"\\e051\"}.glyphicon-align-left:before{content:\"\\e052\"}.glyphicon-align-center:before{content:\"\\e053\"}.glyphicon-align-right:before{content:\"\\e054\"}.glyphicon-align-justify:before{content:\"\\e055\"}.glyphicon-list:before{content:\"\\e056\"}.glyphicon-indent-left:before{content:\"\\e057\"}.glyphicon-indent-right:before{content:\"\\e058\"}.glyphicon-facetime-video:before{content:\"\\e059\"}.glyphicon-picture:before{content:\"\\e060\"}.glyphicon-map-marker:before{content:\"\\e062\"}.glyphicon-adjust:before{content:\"\\e063\"}.glyphicon-tint:before{content:\"\\e064\"}.glyphicon-edit:before{content:\"\\e065\"}.glyphicon-share:before{content:\"\\e066\"}.glyphicon-check:before{content:\"\\e067\"}.glyphicon-move:before{content:\"\\e068\"}.glyphicon-step-backward:before{content:\"\\e069\"}.glyphicon-fast-backward:before{content:\"\\e070\"}.glyphicon-backward:before{content:\"\\e071\"}.glyphicon-play:before{content:\"\\e072\"}.glyphicon-pause:before{content:\"\\e073\"}.glyphicon-stop:before{content:\"\\e074\"}.glyphicon-forward:before{content:\"\\e075\"}.glyphicon-fast-forward:before{content:\"\\e076\"}.glyphicon-step-forward:before{content:\"\\e077\"}.glyphicon-eject:before{content:\"\\e078\"}.glyphicon-chevron-left:before{content:\"\\e079\"}.glyphicon-chevron-right:before{content:\"\\e080\"}.glyphicon-plus-sign:before{content:\"\\e081\"}.glyphicon-minus-sign:before{content:\"\\e082\"}.glyphicon-remove-sign:before{content:\"\\e083\"}.glyphicon-ok-sign:before{content:\"\\e084\"}.glyphicon-question-sign:before{content:\"\\e085\"}.glyphicon-info-sign:before{content:\"\\e086\"}.glyphicon-screenshot:before{content:\"\\e087\"}.glyphicon-remove-circle:before{content:\"\\e088\"}.glyphicon-ok-circle:before{content:\"\\e089\"}.glyphicon-ban-circle:before{content:\"\\e090\"}.glyphicon-arrow-left:before{content:\"\\e091\"}.glyphicon-arrow-right:before{content:\"\\e092\"}.glyphicon-arrow-up:before{content:\"\\e093\"}.glyphicon-arrow-down:before{content:\"\\e094\"}.glyphicon-share-alt:before{content:\"\\e095\"}.glyphicon-resize-full:before{content:\"\\e096\"}.glyphicon-resize-small:before{content:\"\\e097\"}.glyphicon-exclamation-sign:before{content:\"\\e101\"}.glyphicon-gift:before{content:\"\\e102\"}.glyphicon-leaf:before{content:\"\\e103\"}.glyphicon-fire:before{content:\"\\e104\"}.glyphicon-eye-open:before{content:\"\\e105\"}.glyphicon-eye-close:before{content:\"\\e106\"}.glyphicon-warning-sign:before{content:\"\\e107\"}.glyphicon-plane:before{content:\"\\e108\"}.glyphicon-calendar:before{content:\"\\e109\"}.glyphicon-random:before{content:\"\\e110\"}.glyphicon-comment:before{content:\"\\e111\"}.glyphicon-magnet:before{content:\"\\e112\"}.glyphicon-chevron-up:before{content:\"\\e113\"}.glyphicon-chevron-down:before{content:\"\\e114\"}.glyphicon-retweet:before{content:\"\\e115\"}.glyphicon-shopping-cart:before{content:\"\\e116\"}.glyphicon-folder-close:before{content:\"\\e117\"}.glyphicon-folder-open:before{content:\"\\e118\"}.glyphicon-resize-vertical:before{content:\"\\e119\"}.glyphicon-resize-horizontal:before{content:\"\\e120\"}.glyphicon-hdd:before{content:\"\\e121\"}.glyphicon-bullhorn:before{content:\"\\e122\"}.glyphicon-bell:before{content:\"\\e123\"}.glyphicon-certificate:before{content:\"\\e124\"}.glyphicon-thumbs-up:before{content:\"\\e125\"}.glyphicon-thumbs-down:before{content:\"\\e126\"}.glyphicon-hand-right:before{content:\"\\e127\"}.glyphicon-hand-left:before{content:\"\\e128\"}.glyphicon-hand-up:before{content:\"\\e129\"}.glyphicon-hand-down:before{content:\"\\e130\"}.glyphicon-circle-arrow-right:before{content:\"\\e131\"}.glyphicon-circle-arrow-left:before{content:\"\\e132\"}.glyphicon-circle-arrow-up:before{content:\"\\e133\"}.glyphicon-circle-arrow-down:before{content:\"\\e134\"}.glyphicon-globe:before{content:\"\\e135\"}.glyphicon-wrench:before{content:\"\\e136\"}.glyphicon-tasks:before{content:\"\\e137\"}.glyphicon-filter:before{content:\"\\e138\"}.glyphicon-briefcase:before{content:\"\\e139\"}.glyphicon-fullscreen:before{content:\"\\e140\"}.glyphicon-dashboard:before{content:\"\\e141\"}.glyphicon-paperclip:before{content:\"\\e142\"}.glyphicon-heart-empty:before{content:\"\\e143\"}.glyphicon-link:before{content:\"\\e144\"}.glyphicon-phone:before{content:\"\\e145\"}.glyphicon-pushpin:before{content:\"\\e146\"}.glyphicon-usd:before{content:\"\\e148\"}.glyphicon-gbp:before{content:\"\\e149\"}.glyphicon-sort:before{content:\"\\e150\"}.glyphicon-sort-by-alphabet:before{content:\"\\e151\"}.glyphicon-sort-by-alphabet-alt:before{content:\"\\e152\"}.glyphicon-sort-by-order:before{content:\"\\e153\"}.glyphicon-sort-by-order-alt:before{content:\"\\e154\"}.glyphicon-sort-by-attributes:before{content:\"\\e155\"}.glyphicon-sort-by-attributes-alt:before{content:\"\\e156\"}.glyphicon-unchecked:before{content:\"\\e157\"}.glyphicon-expand:before{content:\"\\e158\"}.glyphicon-collapse-down:before{content:\"\\e159\"}.glyphicon-collapse-up:before{content:\"\\e160\"}.glyphicon-log-in:before{content:\"\\e161\"}.glyphicon-flash:before{content:\"\\e162\"}.glyphicon-log-out:before{content:\"\\e163\"}.glyphicon-new-window:before{content:\"\\e164\"}.glyphicon-record:before{content:\"\\e165\"}.glyphicon-save:before{content:\"\\e166\"}.glyphicon-open:before{content:\"\\e167\"}.glyphicon-saved:before{content:\"\\e168\"}.glyphicon-import:before{content:\"\\e169\"}.glyphicon-export:before{content:\"\\e170\"}.glyphicon-send:before{content:\"\\e171\"}.glyphicon-floppy-disk:before{content:\"\\e172\"}.glyphicon-floppy-saved:before{content:\"\\e173\"}.glyphicon-floppy-remove:before{content:\"\\e174\"}.glyphicon-floppy-save:before{content:\"\\e175\"}.glyphicon-floppy-open:before{content:\"\\e176\"}.glyphicon-credit-card:before{content:\"\\e177\"}.glyphicon-transfer:before{content:\"\\e178\"}.glyphicon-cutlery:before{content:\"\\e179\"}.glyphicon-header:before{content:\"\\e180\"}.glyphicon-compressed:before{content:\"\\e181\"}.glyphicon-earphone:before{content:\"\\e182\"}.glyphicon-phone-alt:before{content:\"\\e183\"}.glyphicon-tower:before{content:\"\\e184\"}.glyphicon-stats:before{content:\"\\e185\"}.glyphicon-sd-video:before{content:\"\\e186\"}.glyphicon-hd-video:before{content:\"\\e187\"}.glyphicon-subtitles:before{content:\"\\e188\"}.glyphicon-sound-stereo:before{content:\"\\e189\"}.glyphicon-sound-dolby:before{content:\"\\e190\"}.glyphicon-sound-5-1:before{content:\"\\e191\"}.glyphicon-sound-6-1:before{content:\"\\e192\"}.glyphicon-sound-7-1:before{content:\"\\e193\"}.glyphicon-copyright-mark:before{content:\"\\e194\"}.glyphicon-registration-mark:before{content:\"\\e195\"}.glyphicon-cloud-download:before{content:\"\\e197\"}.glyphicon-cloud-upload:before{content:\"\\e198\"}.glyphicon-tree-conifer:before{content:\"\\e199\"}.glyphicon-tree-deciduous:before{content:\"\\e200\"}.glyphicon-cd:before{content:\"\\e201\"}.glyphicon-save-file:before{content:\"\\e202\"}.glyphicon-open-file:before{content:\"\\e203\"}.glyphicon-level-up:before{content:\"\\e204\"}.glyphicon-copy:before{content:\"\\e205\"}.glyphicon-paste:before{content:\"\\e206\"}.glyphicon-alert:before{content:\"\\e209\"}.glyphicon-equalizer:before{content:\"\\e210\"}.glyphicon-king:before{content:\"\\e211\"}.glyphicon-queen:before{content:\"\\e212\"}.glyphicon-pawn:before{content:\"\\e213\"}.glyphicon-bishop:before{content:\"\\e214\"}.glyphicon-knight:before{content:\"\\e215\"}.glyphicon-baby-formula:before{content:\"\\e216\"}.glyphicon-tent:before{content:\"\\26fa\"}.glyphicon-blackboard:before{content:\"\\e218\"}.glyphicon-bed:before{content:\"\\e219\"}.glyphicon-apple:before{content:\"\\f8ff\"}.glyphicon-erase:before{content:\"\\e221\"}.glyphicon-hourglass:before{content:\"\\231b\"}.glyphicon-lamp:before{content:\"\\e223\"}.glyphicon-duplicate:before{content:\"\\e224\"}.glyphicon-piggy-bank:before{content:\"\\e225\"}.glyphicon-scissors:before{content:\"\\e226\"}.glyphicon-bitcoin:before{content:\"\\e227\"}.glyphicon-btc:before{content:\"\\e227\"}.glyphicon-xbt:before{content:\"\\e227\"}.glyphicon-yen:before{content:\"\\00a5\"}.glyphicon-jpy:before{content:\"\\00a5\"}.glyphicon-ruble:before{content:\"\\20bd\"}.glyphicon-rub:before{content:\"\\20bd\"}.glyphicon-scale:before{content:\"\\e230\"}.glyphicon-ice-lolly:before{content:\"\\e231\"}.glyphicon-ice-lolly-tasted:before{content:\"\\e232\"}.glyphicon-education:before{content:\"\\e233\"}.glyphicon-option-horizontal:before{content:\"\\e234\"}.glyphicon-option-vertical:before{content:\"\\e235\"}.glyphicon-menu-hamburger:before{content:\"\\e236\"}.glyphicon-modal-window:before{content:\"\\e237\"}.glyphicon-oil:before{content:\"\\e238\"}.glyphicon-grain:before{content:\"\\e239\"}.glyphicon-sunglasses:before{content:\"\\e240\"}.glyphicon-text-size:before{content:\"\\e241\"}.glyphicon-text-color:before{content:\"\\e242\"}.glyphicon-text-background:before{content:\"\\e243\"}.glyphicon-object-align-top:before{content:\"\\e244\"}.glyphicon-object-align-bottom:before{content:\"\\e245\"}.glyphicon-object-align-horizontal:before{content:\"\\e246\"}.glyphicon-object-align-left:before{content:\"\\e247\"}.glyphicon-object-align-vertical:before{content:\"\\e248\"}.glyphicon-object-align-right:before{content:\"\\e249\"}.glyphicon-triangle-right:before{content:\"\\e250\"}.glyphicon-triangle-left:before{content:\"\\e251\"}.glyphicon-triangle-bottom:before{content:\"\\e252\"}.glyphicon-triangle-top:before{content:\"\\e253\"}.glyphicon-console:before{content:\"\\e254\"}.glyphicon-superscript:before{content:\"\\e255\"}.glyphicon-subscript:before{content:\"\\e256\"}.glyphicon-menu-left:before{content:\"\\e257\"}.glyphicon-menu-right:before{content:\"\\e258\"}.glyphicon-menu-down:before{content:\"\\e259\"}.glyphicon-menu-up:before{content:\"\\e260\"}"}],"authorContributionMap":{"KevinEyo1":17}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/js/bootstrap-utility.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Bootstrap v5.1.3 (https://getbootstrap.com/)"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"!function(t,e){\"object\"\u003d\u003dtypeof exports\u0026\u0026\"undefined\"!\u003dtypeof module?module.exports\u003de():\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define(e):(t\u003d\"undefined\"!\u003dtypeof globalThis?globalThis:t||self).bootstrap\u003de()}(this,(function(){\"use strict\";const t\u003d\"transitionend\",e\u003dt\u003d\u003e{let e\u003dt.getAttribute(\"data-bs-target\");if(!e||\"#\"\u003d\u003d\u003de){let i\u003dt.getAttribute(\"href\");if(!i||!i.includes(\"#\")\u0026\u0026!i.startsWith(\".\"))return null;i.includes(\"#\")\u0026\u0026!i.startsWith(\"#\")\u0026\u0026(i\u003d`#${i.split(\"#\")[1]}`),e\u003di\u0026\u0026\"#\"!\u003d\u003di?i.trim():null}return e},i\u003dt\u003d\u003e{const i\u003de(t);return i\u0026\u0026document.querySelector(i)?i:null},n\u003dt\u003d\u003e{const i\u003de(t);return i?document.querySelector(i):null},s\u003de\u003d\u003e{e.dispatchEvent(new Event(t))},o\u003dt\u003d\u003e!(!t||\"object\"!\u003dtypeof t)\u0026\u0026(void 0!\u003d\u003dt.jquery\u0026\u0026(t\u003dt[0]),void 0!\u003d\u003dt.nodeType),r\u003dt\u003d\u003eo(t)?t.jquery?t[0]:t:\"string\"\u003d\u003dtypeof t\u0026\u0026t.length\u003e0?document.querySelector(t):null,a\u003d(t,e,i)\u003d\u003e{Object.keys(i).forEach((n\u003d\u003e{const s\u003di[n],r\u003de[n],a\u003dr\u0026\u0026o(r)?\"element\":null\u003d\u003d(l\u003dr)?`${l}`:{}.toString.call(l).match(/\\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option \"${n}\" provided type \"${a}\" but expected type \"${s}\".`)}))},l\u003dt\u003d\u003e!(!o(t)||0\u003d\u003d\u003dt.getClientRects().length)\u0026\u0026\"visible\"\u003d\u003d\u003dgetComputedStyle(t).getPropertyValue(\"visibility\"),c\u003dt\u003d\u003e!t||t.nodeType!\u003d\u003dNode.ELEMENT_NODE||!!t.classList.contains(\"disabled\")||(void 0!\u003d\u003dt.disabled?t.disabled:t.hasAttribute(\"disabled\")\u0026\u0026\"false\"!\u003d\u003dt.getAttribute(\"disabled\")),h\u003dt\u003d\u003e{if(!document.documentElement.attachShadow)return null;if(\"function\"\u003d\u003dtypeof t.getRootNode){const e\u003dt.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d\u003d()\u003d\u003e{},u\u003dt\u003d\u003e{t.offsetHeight},f\u003d()\u003d\u003e{const{jQuery:t}\u003dwindow;return t\u0026\u0026!document.body.hasAttribute(\"data-bs-no-jquery\")?t:null},p\u003d[],m\u003d()\u003d\u003e\"rtl\"\u003d\u003d\u003ddocument.documentElement.dir,g\u003dt\u003d\u003e{var e;e\u003d()\u003d\u003e{const e\u003df();if(e){const i\u003dt.NAME,n\u003de.fn[i];e.fn[i]\u003dt.jQueryInterface,e.fn[i].Constructor\u003dt,e.fn[i].noConflict\u003d()\u003d\u003e(e.fn[i]\u003dn,t.jQueryInterface)}},\"loading\"\u003d\u003d\u003ddocument.readyState?(p.length||document.addEventListener(\"DOMContentLoaded\",(()\u003d\u003e{p.forEach((t\u003d\u003et()))})),p.push(e)):e()},_\u003dt\u003d\u003e{\"function\"\u003d\u003dtypeof t\u0026\u0026t()},b\u003d(e,i,n\u003d!0)\u003d\u003e{if(!n)return void _(e);const o\u003d(t\u003d\u003e{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}\u003dwindow.getComputedStyle(t);const n\u003dNumber.parseFloat(e),s\u003dNumber.parseFloat(i);return n||s?(e\u003de.split(\",\")[0],i\u003di.split(\",\")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r\u003d!1;const a\u003d({target:n})\u003d\u003e{n\u003d\u003d\u003di\u0026\u0026(r\u003d!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()\u003d\u003e{r||s(i)}),o)},v\u003d(t,e,i,n)\u003d\u003e{let s\u003dt.indexOf(e);if(-1\u003d\u003d\u003ds)return t[!i\u0026\u0026n?t.length-1:0];const o\u003dt.length;return s+\u003di?1:-1,n\u0026\u0026(s\u003d(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y\u003d/[^.]*(?\u003d\\..*)\\.|.*/,w\u003d/\\..*/,E\u003d/::\\d+$/,A\u003d{};let T\u003d1;const O\u003d{mouseenter:\"mouseover\",mouseleave:\"mouseout\"},C\u003d/^(mouseenter|mouseleave)/i,k\u003dnew Set([\"click\",\"dblclick\",\"mouseup\",\"mousedown\",\"contextmenu\",\"mousewheel\",\"DOMMouseScroll\",\"mouseover\",\"mouseout\",\"mousemove\",\"selectstart\",\"selectend\",\"keydown\",\"keypress\",\"keyup\",\"orientationchange\",\"touchstart\",\"touchmove\",\"touchend\",\"touchcancel\",\"pointerdown\",\"pointermove\",\"pointerup\",\"pointerleave\",\"pointercancel\",\"gesturestart\",\"gesturechange\",\"gestureend\",\"focus\",\"blur\",\"change\",\"reset\",\"select\",\"submit\",\"focusin\",\"focusout\",\"load\",\"unload\",\"beforeunload\",\"resize\",\"move\",\"DOMContentLoaded\",\"readystatechange\",\"error\",\"abort\",\"scroll\"]);function L(t,e){return e\u0026\u0026`${e}::${T++}`||t.uidEvent||T++}function x(t){const e\u003dL(t);return t.uidEvent\u003de,A[e]\u003dA[e]||{},A[e]}function D(t,e,i\u003dnull){const n\u003dObject.keys(t);for(let s\u003d0,o\u003dn.length;s\u003co;s++){const o\u003dt[n[s]];if(o.originalHandler\u003d\u003d\u003de\u0026\u0026o.delegationSelector\u003d\u003d\u003di)return o}return null}function S(t,e,i){const n\u003d\"string\"\u003d\u003dtypeof e,s\u003dn?i:e;let o\u003dP(t);return k.has(o)||(o\u003dt),[n,s,o]}function N(t,e,i,n,s){if(\"string\"!\u003dtypeof e||!t)return;if(i||(i\u003dn,n\u003dnull),C.test(e)){const t\u003dt\u003d\u003efunction(e){if(!e.relatedTarget||e.relatedTarget!\u003d\u003de.delegateTarget\u0026\u0026!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n\u003dt(n):i\u003dt(i)}const[o,r,a]\u003dS(e,i,n),l\u003dx(t),c\u003dl[a]||(l[a]\u003d{}),h\u003dD(c,r,o?i:null);if(h)return void(h.oneOff\u003dh.oneOff\u0026\u0026s);const d\u003dL(r,e.replace(y,\"\")),u\u003do?function(t,e,i){return function n(s){const o\u003dt.querySelectorAll(e);for(let{target:r}\u003ds;r\u0026\u0026r!\u003d\u003dthis;r\u003dr.parentNode)for(let a\u003do.length;a--;)if(o[a]\u003d\u003d\u003dr)return s.delegateTarget\u003dr,n.oneOff\u0026\u0026j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget\u003dt,i.oneOff\u0026\u0026j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector\u003do?i:null,u.originalHandler\u003dr,u.oneOff\u003ds,u.uidEvent\u003dd,c[d]\u003du,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o\u003dD(e[i],n,s);o\u0026\u0026(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t\u003dt.replace(w,\"\"),O[t]||t}const j\u003d{on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if(\"string\"!\u003dtypeof e||!t)return;const[s,o,r]\u003dS(e,i,n),a\u003dr!\u003d\u003de,l\u003dx(t),c\u003de.startsWith(\".\");if(void 0!\u003d\u003do){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c\u0026\u0026Object.keys(l).forEach((i\u003d\u003e{!function(t,e,i,n){const s\u003de[i]||{};Object.keys(s).forEach((o\u003d\u003e{if(o.includes(n)){const n\u003ds[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h\u003dl[r]||{};Object.keys(h).forEach((i\u003d\u003e{const n\u003di.replace(E,\"\");if(!a||e.includes(n)){const e\u003dh[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if(\"string\"!\u003dtypeof e||!t)return null;const n\u003df(),s\u003dP(e),o\u003de!\u003d\u003ds,r\u003dk.has(s);let a,l\u003d!0,c\u003d!0,h\u003d!1,d\u003dnull;return o\u0026\u0026n\u0026\u0026(a\u003dn.Event(e,i),n(t).trigger(a),l\u003d!a.isPropagationStopped(),c\u003d!a.isImmediatePropagationStopped(),h\u003da.isDefaultPrevented()),r?(d\u003ddocument.createEvent(\"HTMLEvents\"),d.initEvent(s,l,!0)):d\u003dnew CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!\u003d\u003di\u0026\u0026Object.keys(i).forEach((t\u003d\u003e{Object.defineProperty(d,t,{get:()\u003d\u003ei[t]})})),h\u0026\u0026d.preventDefault(),c\u0026\u0026t.dispatchEvent(d),d.defaultPrevented\u0026\u0026void 0!\u003d\u003da\u0026\u0026a.preventDefault(),d}},M\u003dnew Map,H\u003d{set(t,e,i){M.has(t)||M.set(t,new Map);const n\u003dM.get(t);n.has(e)||0\u003d\u003d\u003dn.size?n.set(e,i):console.error(`Bootstrap doesn\u0027t allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)\u003d\u003eM.has(t)\u0026\u0026M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i\u003dM.get(t);i.delete(e),0\u003d\u003d\u003di.size\u0026\u0026M.delete(t)}};class B{constructor(t){(t\u003dr(t))\u0026\u0026(this._element\u003dt,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t\u003d\u003e{this[t]\u003dnull}))}_queueCallback(t,e,i\u003d!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e\u003d{}){return this.getInstance(t)||new this(t,\"object\"\u003d\u003dtypeof e?e:null)}static get VERSION(){return\"5.1.3\"}static get NAME(){throw new Error(\u0027You have to implement the static method \"NAME\", for each component!\u0027)}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R\u003d(t,e\u003d\"hide\")\u003d\u003e{const i\u003d`click.dismiss${t.EVENT_KEY}`,s\u003dt.NAME;j.on(document,i,`[data-bs-dismiss\u003d\"${s}\"]`,(function(i){if([\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026i.preventDefault(),c(this))return;const o\u003dn(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return\"alert\"}close(){if(j.trigger(this._element,\"close.bs.alert\").defaultPrevented)return;this._element.classList.remove(\"show\");const t\u003dthis._element.classList.contains(\"fade\");this._queueCallback((()\u003d\u003ethis._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,\"closed.bs.alert\"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e\u003dW.getOrCreateInstance(this);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t]||t.startsWith(\"_\")||\"constructor\"\u003d\u003d\u003dt)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}R(W,\"close\"),g(W);const $\u003d\u0027[data-bs-toggle\u003d\"button\"]\u0027;class z extends B{static get NAME(){return\"button\"}toggle(){this._element.setAttribute(\"aria-pressed\",this._element.classList.toggle(\"active\"))}static jQueryInterface(t){return this.each((function(){const e\u003dz.getOrCreateInstance(this);\"toggle\"\u003d\u003d\u003dt\u0026\u0026e[t]()}))}}function q(t){return\"true\"\u003d\u003d\u003dt||\"false\"!\u003d\u003dt\u0026\u0026(t\u003d\u003d\u003dNumber(t).toString()?Number(t):\"\"\u003d\u003d\u003dt||\"null\"\u003d\u003d\u003dt?null:t)}function F(t){return t.replace(/[A-Z]/g,(t\u003d\u003e`-${t.toLowerCase()}`))}j.on(document,\"click.bs.button.data-api\",$,(t\u003d\u003e{t.preventDefault();const e\u003dt.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U\u003d{setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e\u003d{};return Object.keys(t.dataset).filter((t\u003d\u003et.startsWith(\"bs\"))).forEach((i\u003d\u003e{let n\u003di.replace(/^bs/,\"\");n\u003dn.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]\u003dq(t.dataset[i])})),e},getDataAttribute:(t,e)\u003d\u003eq(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e\u003dt.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t\u003d\u003e({top:t.offsetTop,left:t.offsetLeft})},V\u003d{find:(t,e\u003ddocument.documentElement)\u003d\u003e[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e\u003ddocument.documentElement)\u003d\u003eElement.prototype.querySelector.call(e,t),children:(t,e)\u003d\u003e[].concat(...t.children).filter((t\u003d\u003et.matches(e))),parents(t,e){const i\u003d[];let n\u003dt.parentNode;for(;n\u0026\u0026n.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE\u0026\u00263!\u003d\u003dn.nodeType;)n.matches(e)\u0026\u0026i.push(n),n\u003dn.parentNode;return i},prev(t,e){let i\u003dt.previousElementSibling;for(;i;){if(i.matches(e))return[i];i\u003di.previousElementSibling}return[]},next(t,e){let i\u003dt.nextElementSibling;for(;i;){if(i.matches(e))return[i];i\u003di.nextElementSibling}return[]},focusableChildren(t){const e\u003d[\"a\",\"button\",\"input\",\"textarea\",\"select\",\"details\",\"[tabindex]\",\u0027[contenteditable\u003d\"true\"]\u0027].map((t\u003d\u003e`${t}:not([tabindex^\u003d\"-\"])`)).join(\", \");return this.find(e,t).filter((t\u003d\u003e!c(t)\u0026\u0026l(t)))}},K\u003d\"carousel\",X\u003d{interval:5e3,keyboard:!0,slide:!1,pause:\"hover\",wrap:!0,touch:!0},Y\u003d{interval:\"(number|boolean)\",keyboard:\"boolean\",slide:\"(boolean|string)\",pause:\"(string|boolean)\",wrap:\"boolean\",touch:\"boolean\"},Q\u003d\"next\",G\u003d\"prev\",Z\u003d\"left\",J\u003d\"right\",tt\u003d{ArrowLeft:J,ArrowRight:Z},et\u003d\"slid.bs.carousel\",it\u003d\"active\",nt\u003d\".active.carousel-item\";class st extends B{constructor(t,e){super(t),this._items\u003dnull,this._interval\u003dnull,this._activeElement\u003dnull,this._isPaused\u003d!1,this._isSliding\u003d!1,this.touchTimeout\u003dnull,this.touchStartX\u003d0,this.touchDeltaX\u003d0,this._config\u003dthis._getConfig(e),this._indicatorsElement\u003dV.findOne(\".carousel-indicators\",this._element),this._touchSupported\u003d\"ontouchstart\"in document.documentElement||navigator.maxTouchPoints\u003e0,this._pointerEvent\u003dBoolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden\u0026\u0026l(this._element)\u0026\u0026this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused\u003d!0),V.findOne(\".carousel-item-next, .carousel-item-prev\",this._element)\u0026\u0026(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval\u003dnull}cycle(t){t||(this._isPaused\u003d!1),this._interval\u0026\u0026(clearInterval(this._interval),this._interval\u003dnull),this._config\u0026\u0026this._config.interval\u0026\u0026!this._isPaused\u0026\u0026(this._updateInterval(),this._interval\u003dsetInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement\u003dV.findOne(nt,this._element);const e\u003dthis._getItemIndex(this._activeElement);if(t\u003ethis._items.length-1||t\u003c0)return;if(this._isSliding)return void j.one(this._element,et,(()\u003d\u003ethis.to(t)));if(e\u003d\u003d\u003dt)return this.pause(),void this.cycle();const i\u003dt\u003ee?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t\u003d{...X,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t\u003dMath.abs(this.touchDeltaX);if(t\u003c\u003d40)return;const e\u003dt/this.touchDeltaX;this.touchDeltaX\u003d0,e\u0026\u0026this._slide(e\u003e0?J:Z)}_addEventListeners(){this._config.keyboard\u0026\u0026j.on(this._element,\"keydown.bs.carousel\",(t\u003d\u003ethis._keydown(t))),\"hover\"\u003d\u003d\u003dthis._config.pause\u0026\u0026(j.on(this._element,\"mouseenter.bs.carousel\",(t\u003d\u003ethis.pause(t))),j.on(this._element,\"mouseleave.bs.carousel\",(t\u003d\u003ethis.cycle(t)))),this._config.touch\u0026\u0026this._touchSupported\u0026\u0026this._addTouchEventListeners()}_addTouchEventListeners(){const t\u003dt\u003d\u003ethis._pointerEvent\u0026\u0026(\"pen\"\u003d\u003d\u003dt.pointerType||\"touch\"\u003d\u003d\u003dt.pointerType),e\u003de\u003d\u003e{t(e)?this.touchStartX\u003de.clientX:this._pointerEvent||(this.touchStartX\u003de.touches[0].clientX)},i\u003dt\u003d\u003e{this.touchDeltaX\u003dt.touches\u0026\u0026t.touches.length\u003e1?0:t.touches[0].clientX-this.touchStartX},n\u003de\u003d\u003e{t(e)\u0026\u0026(this.touchDeltaX\u003de.clientX-this.touchStartX),this._handleSwipe(),\"hover\"\u003d\u003d\u003dthis._config.pause\u0026\u0026(this.pause(),this.touchTimeout\u0026\u0026clearTimeout(this.touchTimeout),this.touchTimeout\u003dsetTimeout((t\u003d\u003ethis.cycle(t)),500+this._config.interval))};V.find(\".carousel-item img\",this._element).forEach((t\u003d\u003e{j.on(t,\"dragstart.bs.carousel\",(t\u003d\u003et.preventDefault()))})),this._pointerEvent?(j.on(this._element,\"pointerdown.bs.carousel\",(t\u003d\u003ee(t))),j.on(this._element,\"pointerup.bs.carousel\",(t\u003d\u003en(t))),this._element.classList.add(\"pointer-event\")):(j.on(this._element,\"touchstart.bs.carousel\",(t\u003d\u003ee(t))),j.on(this._element,\"touchmove.bs.carousel\",(t\u003d\u003ei(t))),j.on(this._element,\"touchend.bs.carousel\",(t\u003d\u003en(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e\u003dtt[t.key];e\u0026\u0026(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items\u003dt\u0026\u0026t.parentNode?V.find(\".carousel-item\",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i\u003dt\u003d\u003d\u003dQ;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i\u003dthis._getItemIndex(t),n\u003dthis._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,\"slide.bs.carousel\",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e\u003dV.findOne(\".active\",this._indicatorsElement);e.classList.remove(it),e.removeAttribute(\"aria-current\");const i\u003dV.find(\"[data-bs-target]\",this._indicatorsElement);for(let e\u003d0;e\u003ci.length;e++)if(Number.parseInt(i[e].getAttribute(\"data-bs-slide-to\"),10)\u003d\u003d\u003dthis._getItemIndex(t)){i[e].classList.add(it),i[e].setAttribute(\"aria-current\",\"true\");break}}}_updateInterval(){const t\u003dthis._activeElement||V.findOne(nt,this._element);if(!t)return;const e\u003dNumber.parseInt(t.getAttribute(\"data-bs-interval\"),10);e?(this._config.defaultInterval\u003dthis._config.defaultInterval||this._config.interval,this._config.interval\u003de):this._config.interval\u003dthis._config.defaultInterval||this._config.interval}_slide(t,e){const i\u003dthis._directionToOrder(t),n\u003dV.findOne(nt,this._element),s\u003dthis._getItemIndex(n),o\u003de||this._getItemByOrder(i,n),r\u003dthis._getItemIndex(o),a\u003dBoolean(this._interval),l\u003di\u003d\u003d\u003dQ,c\u003dl?\"carousel-item-start\":\"carousel-item-end\",h\u003dl?\"carousel-item-next\":\"carousel-item-prev\",d\u003dthis._orderToDirection(i);if(o\u0026\u0026o.classList.contains(it))return void(this._isSliding\u003d!1);if(this._isSliding)return;if(this._triggerSlideEvent(o,d).defaultPrevented)return;if(!n||!o)return;this._isSliding\u003d!0,a\u0026\u0026this.pause(),this._setActiveIndicatorElement(o),this._activeElement\u003do;const f\u003d()\u003d\u003e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains(\"slide\")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t\u003d()\u003d\u003e{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding\u003d!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding\u003d!1,f();a\u0026\u0026this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t\u003d\u003d\u003dZ?G:Q:t\u003d\u003d\u003dZ?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t\u003d\u003d\u003dG?Z:J:t\u003d\u003d\u003dG?J:Z:t}static carouselInterface(t,e){const i\u003dst.getOrCreateInstance(t,e);let{_config:n}\u003di;\"object\"\u003d\u003dtypeof e\u0026\u0026(n\u003d{...n,...e});const s\u003d\"string\"\u003d\u003dtypeof e?e:n.slide;if(\"number\"\u003d\u003dtypeof e)i.to(e);else if(\"string\"\u003d\u003dtypeof s){if(void 0\u003d\u003d\u003di[s])throw new TypeError(`No method named \"${s}\"`);i[s]()}else n.interval\u0026\u0026n.ride\u0026\u0026(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e\u003dn(this);if(!e||!e.classList.contains(\"carousel\"))return;const i\u003d{...U.getDataAttributes(e),...U.getDataAttributes(this)},s\u003dthis.getAttribute(\"data-bs-slide-to\");s\u0026\u0026(i.interval\u003d!1),st.carouselInterface(e,i),s\u0026\u0026st.getInstance(e).to(s),t.preventDefault()}}j.on(document,\"click.bs.carousel.data-api\",\"[data-bs-slide], [data-bs-slide-to]\",st.dataApiClickHandler),j.on(window,\"load.bs.carousel.data-api\",(()\u003d\u003e{const t\u003dV.find(\u0027[data-bs-ride\u003d\"carousel\"]\u0027);for(let e\u003d0,i\u003dt.length;e\u003ci;e++)st.carouselInterface(t[e],st.getInstance(t[e]))})),g(st);const ot\u003d\"collapse\",rt\u003d{toggle:!0,parent:null},at\u003d{toggle:\"boolean\",parent:\"(null|element)\"},lt\u003d\"show\",ct\u003d\"collapse\",ht\u003d\"collapsing\",dt\u003d\"collapsed\",ut\u003d\":scope .collapse .collapse\",ft\u003d\u0027[data-bs-toggle\u003d\"collapse\"]\u0027;class pt extends B{constructor(t,e){super(t),this._isTransitioning\u003d!1,this._config\u003dthis._getConfig(e),this._triggerArray\u003d[];const n\u003dV.find(ft);for(let t\u003d0,e\u003dn.length;t\u003ce;t++){const e\u003dn[t],s\u003di(e),o\u003dV.find(s).filter((t\u003d\u003et\u003d\u003d\u003dthis._element));null!\u003d\u003ds\u0026\u0026o.length\u0026\u0026(this._selector\u003ds,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle\u0026\u0026this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e\u003d[];if(this._config.parent){const t\u003dV.find(ut,this._config.parent);e\u003dV.find(\".collapse.show, .collapse.collapsing\",this._config.parent).filter((e\u003d\u003e!t.includes(e)))}const i\u003dV.findOne(this._selector);if(e.length){const n\u003de.find((t\u003d\u003ei!\u003d\u003dt));if(t\u003dn?pt.getInstance(n):null,t\u0026\u0026t._isTransitioning)return}if(j.trigger(this._element,\"show.bs.collapse\").defaultPrevented)return;e.forEach((e\u003d\u003e{i!\u003d\u003de\u0026\u0026pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,\"bs.collapse\",null)}));const n\u003dthis._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]\u003d0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning\u003d!0;const s\u003d`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()\u003d\u003e{this._isTransitioning\u003d!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]\u003d\"\",j.trigger(this._element,\"shown.bs.collapse\")}),this._element,!0),this._element.style[n]\u003d`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,\"hide.bs.collapse\").defaultPrevented)return;const t\u003dthis._getDimension();this._element.style[t]\u003d`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e\u003dthis._triggerArray.length;for(let t\u003d0;t\u003ce;t++){const e\u003dthis._triggerArray[t],i\u003dn(e);i\u0026\u0026!this._isShown(i)\u0026\u0026this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning\u003d!0,this._element.style[t]\u003d\"\",this._queueCallback((()\u003d\u003e{this._isTransitioning\u003d!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,\"hidden.bs.collapse\")}),this._element,!0)}_isShown(t\u003dthis._element){return t.classList.contains(lt)}_getConfig(t){return(t\u003d{...rt,...U.getDataAttributes(this._element),...t}).toggle\u003dBoolean(t.toggle),t.parent\u003dr(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains(\"collapse-horizontal\")?\"width\":\"height\"}_initializeChildren(){if(!this._config.parent)return;const t\u003dV.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e\u003d\u003e!t.includes(e))).forEach((t\u003d\u003e{const e\u003dn(t);e\u0026\u0026this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length\u0026\u0026t.forEach((t\u003d\u003e{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute(\"aria-expanded\",e)}))}static jQueryInterface(t){return this.each((function(){const e\u003d{};\"string\"\u003d\u003dtypeof t\u0026\u0026/show|hide/.test(t)\u0026\u0026(e.toggle\u003d!1);const i\u003dpt.getOrCreateInstance(this,e);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003di[t])throw new TypeError(`No method named \"${t}\"`);i[t]()}}))}}j.on(document,\"click.bs.collapse.data-api\",ft,(function(t){(\"A\"\u003d\u003d\u003dt.target.tagName||t.delegateTarget\u0026\u0026\"A\"\u003d\u003d\u003dt.delegateTarget.tagName)\u0026\u0026t.preventDefault();const e\u003di(this);V.find(e).forEach((t\u003d\u003e{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt\u003d\"top\",gt\u003d\"bottom\",_t\u003d\"right\",bt\u003d\"left\",vt\u003d\"auto\",yt\u003d[mt,gt,_t,bt],wt\u003d\"start\",Et\u003d\"end\",At\u003d\"clippingParents\",Tt\u003d\"viewport\",Ot\u003d\"popper\",Ct\u003d\"reference\",kt\u003dyt.reduce((function(t,e){return t.concat([e+\"-\"+wt,e+\"-\"+Et])}),[]),Lt\u003d[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+\"-\"+wt,e+\"-\"+Et])}),[]),xt\u003d\"beforeRead\",Dt\u003d\"read\",St\u003d\"afterRead\",Nt\u003d\"beforeMain\",It\u003d\"main\",Pt\u003d\"afterMain\",jt\u003d\"beforeWrite\",Mt\u003d\"write\",Ht\u003d\"afterWrite\",Bt\u003d[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||\"\").toLowerCase():null}function Wt(t){if(null\u003d\u003dt)return window;if(\"[object Window]\"!\u003d\u003dt.toString()){var e\u003dt.ownerDocument;return e\u0026\u0026e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return\"undefined\"!\u003dtypeof ShadowRoot\u0026\u0026(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft\u003d{name:\"applyStyles\",enabled:!0,phase:\"write\",fn:function(t){var e\u003dt.state;Object.keys(e.elements).forEach((function(t){var i\u003de.styles[t]||{},n\u003de.attributes[t]||{},s\u003de.elements[t];zt(s)\u0026\u0026Rt(s)\u0026\u0026(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e\u003dn[t];!1\u003d\u003d\u003de?s.removeAttribute(t):s.setAttribute(t,!0\u003d\u003d\u003de?\"\":e)})))}))},effect:function(t){var e\u003dt.state,i\u003d{popper:{position:e.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles\u003di,e.elements.arrow\u0026\u0026Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n\u003de.elements[t],s\u003de.attributes[t]||{},o\u003dObject.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]\u003d\"\",t}),{});zt(n)\u0026\u0026Rt(n)\u0026\u0026(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:[\"computeStyles\"]};function Ut(t){return t.split(\"-\")[0]}function Vt(t,e){var i\u003dt.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e\u003dVt(t),i\u003dt.offsetWidth,n\u003dt.offsetHeight;return Math.abs(e.width-i)\u003c\u003d1\u0026\u0026(i\u003de.width),Math.abs(e.height-n)\u003c\u003d1\u0026\u0026(n\u003de.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i\u003de.getRootNode\u0026\u0026e.getRootNode();if(t.contains(e))return!0;if(i\u0026\u0026qt(i)){var n\u003de;do{if(n\u0026\u0026t.isSameNode(n))return!0;n\u003dn.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return[\"table\",\"td\",\"th\"].indexOf(Rt(t))\u003e\u003d0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return\"html\"\u003d\u003d\u003dRt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)\u0026\u0026\"fixed\"!\u003d\u003dYt(t).position?t.offsetParent:null}function te(t){for(var e\u003dWt(t),i\u003dJt(t);i\u0026\u0026Qt(i)\u0026\u0026\"static\"\u003d\u003d\u003dYt(i).position;)i\u003dJt(i);return i\u0026\u0026(\"html\"\u003d\u003d\u003dRt(i)||\"body\"\u003d\u003d\u003dRt(i)\u0026\u0026\"static\"\u003d\u003d\u003dYt(i).position)?e:i||function(t){var e\u003d-1!\u003d\u003dnavigator.userAgent.toLowerCase().indexOf(\"firefox\");if(-1!\u003d\u003dnavigator.userAgent.indexOf(\"Trident\")\u0026\u0026zt(t)\u0026\u0026\"fixed\"\u003d\u003d\u003dYt(t).position)return null;for(var i\u003dZt(t);zt(i)\u0026\u0026[\"html\",\"body\"].indexOf(Rt(i))\u003c0;){var n\u003dYt(i);if(\"none\"!\u003d\u003dn.transform||\"none\"!\u003d\u003dn.perspective||\"paint\"\u003d\u003d\u003dn.contain||-1!\u003d\u003d[\"transform\",\"perspective\"].indexOf(n.willChange)||e\u0026\u0026\"filter\"\u003d\u003d\u003dn.willChange||e\u0026\u0026n.filter\u0026\u0026\"none\"!\u003d\u003dn.filter)return i;i\u003di.parentNode}return null}(t)||e}function ee(t){return[\"top\",\"bottom\"].indexOf(t)\u003e\u003d0?\"x\":\"y\"}var ie\u003dMath.max,ne\u003dMath.min,se\u003dMath.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]\u003dt,e}),{})}const le\u003d{name:\"arrow\",enabled:!0,phase:\"main\",fn:function(t){var e,i\u003dt.state,n\u003dt.name,s\u003dt.options,o\u003di.elements.arrow,r\u003di.modifiersData.popperOffsets,a\u003dUt(i.placement),l\u003dee(a),c\u003d[bt,_t].indexOf(a)\u003e\u003d0?\"height\":\"width\";if(o\u0026\u0026r){var h\u003dfunction(t,e){return re(\"number\"!\u003dtypeof(t\u003d\"function\"\u003d\u003dtypeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d\u003dKt(o),u\u003d\"y\"\u003d\u003d\u003dl?mt:bt,f\u003d\"y\"\u003d\u003d\u003dl?gt:_t,p\u003di.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m\u003dr[l]-i.rects.reference[l],g\u003dte(o),_\u003dg?\"y\"\u003d\u003d\u003dl?g.clientHeight||0:g.clientWidth||0:0,b\u003dp/2-m/2,v\u003dh[u],y\u003d_-d[c]-h[f],w\u003d_/2-d[c]/2+b,E\u003doe(v,w,y),A\u003dl;i.modifiersData[n]\u003d((e\u003d{})[A]\u003dE,e.centerOffset\u003dE-w,e)}},effect:function(t){var e\u003dt.state,i\u003dt.options.element,n\u003dvoid 0\u003d\u003d\u003di?\"[data-popper-arrow]\":i;null!\u003dn\u0026\u0026(\"string\"!\u003dtypeof n||(n\u003de.elements.popper.querySelector(n)))\u0026\u0026Xt(e.elements.popper,n)\u0026\u0026(e.elements.arrow\u003dn)},requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function ce(t){return t.split(\"-\")[1]}var he\u003d{top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function de(t){var e,i\u003dt.popper,n\u003dt.popperRect,s\u003dt.placement,o\u003dt.variation,r\u003dt.offsets,a\u003dt.position,l\u003dt.gpuAcceleration,c\u003dt.adaptive,h\u003dt.roundOffsets,d\u003d!0\u003d\u003d\u003dh?function(t){var e\u003dt.x,i\u003dt.y,n\u003dwindow.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):\"function\"\u003d\u003dtypeof h?h(r):r,u\u003dd.x,f\u003dvoid 0\u003d\u003d\u003du?0:u,p\u003dd.y,m\u003dvoid 0\u003d\u003d\u003dp?0:p,g\u003dr.hasOwnProperty(\"x\"),_\u003dr.hasOwnProperty(\"y\"),b\u003dbt,v\u003dmt,y\u003dwindow;if(c){var w\u003dte(i),E\u003d\"clientHeight\",A\u003d\"clientWidth\";w\u003d\u003d\u003dWt(i)\u0026\u0026\"static\"!\u003d\u003dYt(w\u003dGt(i)).position\u0026\u0026\"absolute\"\u003d\u003d\u003da\u0026\u0026(E\u003d\"scrollHeight\",A\u003d\"scrollWidth\"),w\u003dw,s!\u003d\u003dmt\u0026\u0026(s!\u003d\u003dbt\u0026\u0026s!\u003d\u003d_t||o!\u003d\u003dEt)||(v\u003dgt,m-\u003dw[E]-n.height,m*\u003dl?1:-1),s!\u003d\u003dbt\u0026\u0026(s!\u003d\u003dmt\u0026\u0026s!\u003d\u003dgt||o!\u003d\u003dEt)||(b\u003d_t,f-\u003dw[A]-n.width,f*\u003dl?1:-1)}var T,O\u003dObject.assign({position:a},c\u0026\u0026he);return l?Object.assign({},O,((T\u003d{})[v]\u003d_?\"0\":\"\",T[b]\u003dg?\"0\":\"\",T.transform\u003d(y.devicePixelRatio||1)\u003c\u003d1?\"translate(\"+f+\"px, \"+m+\"px)\":\"translate3d(\"+f+\"px, \"+m+\"px, 0)\",T)):Object.assign({},O,((e\u003d{})[v]\u003d_?m+\"px\":\"\",e[b]\u003dg?f+\"px\":\"\",e.transform\u003d\"\",e))}const ue\u003d{name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003di.gpuAcceleration,s\u003dvoid 0\u003d\u003d\u003dn||n,o\u003di.adaptive,r\u003dvoid 0\u003d\u003d\u003do||o,a\u003di.roundOffsets,l\u003dvoid 0\u003d\u003d\u003da||a,c\u003d{placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!\u003de.modifiersData.popperOffsets\u0026\u0026(e.styles.popper\u003dObject.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!\u003de.modifiersData.arrow\u0026\u0026(e.styles.arrow\u003dObject.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:l})))),e.attributes.popper\u003dObject.assign({},e.attributes.popper,{\"data-popper-placement\":e.placement})},data:{}};var fe\u003d{passive:!0};const pe\u003d{name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:function(t){var e\u003dt.state,i\u003dt.instance,n\u003dt.options,s\u003dn.scroll,o\u003dvoid 0\u003d\u003d\u003ds||s,r\u003dn.resize,a\u003dvoid 0\u003d\u003d\u003dr||r,l\u003dWt(e.elements.popper),c\u003d[].concat(e.scrollParents.reference,e.scrollParents.popper);return o\u0026\u0026c.forEach((function(t){t.addEventListener(\"scroll\",i.update,fe)})),a\u0026\u0026l.addEventListener(\"resize\",i.update,fe),function(){o\u0026\u0026c.forEach((function(t){t.removeEventListener(\"scroll\",i.update,fe)})),a\u0026\u0026l.removeEventListener(\"resize\",i.update,fe)}},data:{}};var me\u003d{left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e\u003d{start:\"end\",end:\"start\"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e\u003dWt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e\u003dYt(t),i\u003de.overflow,n\u003de.overflowX,s\u003de.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return[\"html\",\"body\",\"#document\"].indexOf(Rt(t))\u003e\u003d0?t.ownerDocument.body:zt(t)\u0026\u0026we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[]);var n\u003dEe(t),s\u003dn\u003d\u003d\u003d(null\u003d\u003d(i\u003dt.ownerDocument)?void 0:i.body),o\u003dWt(n),r\u003ds?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a\u003de.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e\u003d\u003d\u003dTt?Te(function(t){var e\u003dWt(t),i\u003dGt(t),n\u003de.visualViewport,s\u003di.clientWidth,o\u003di.clientHeight,r\u003d0,a\u003d0;return n\u0026\u0026(s\u003dn.width,o\u003dn.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r\u003dn.offsetLeft,a\u003dn.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e\u003dVt(t);return e.top\u003de.top+t.clientTop,e.left\u003de.left+t.clientLeft,e.bottom\u003de.top+t.clientHeight,e.right\u003de.left+t.clientWidth,e.width\u003dt.clientWidth,e.height\u003dt.clientHeight,e.x\u003de.left,e.y\u003de.top,e}(e):Te(function(t){var e,i\u003dGt(t),n\u003dve(t),s\u003dnull\u003d\u003d(e\u003dt.ownerDocument)?void 0:e.body,o\u003die(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r\u003die(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a\u003d-n.scrollLeft+ye(t),l\u003d-n.scrollTop;return\"rtl\"\u003d\u003d\u003dYt(s||i).direction\u0026\u0026(a+\u003die(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i\u003dt.reference,n\u003dt.element,s\u003dt.placement,o\u003ds?Ut(s):null,r\u003ds?ce(s):null,a\u003di.x+i.width/2-n.width/2,l\u003di.y+i.height/2-n.height/2;switch(o){case mt:e\u003d{x:a,y:i.y-n.height};break;case gt:e\u003d{x:a,y:i.y+i.height};break;case _t:e\u003d{x:i.x+i.width,y:l};break;case bt:e\u003d{x:i.x-n.width,y:l};break;default:e\u003d{x:i.x,y:i.y}}var c\u003do?ee(o):null;if(null!\u003dc){var h\u003d\"y\"\u003d\u003d\u003dc?\"height\":\"width\";switch(r){case wt:e[c]\u003de[c]-(i[h]/2-n[h]/2);break;case Et:e[c]\u003de[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var i\u003de,n\u003di.placement,s\u003dvoid 0\u003d\u003d\u003dn?t.placement:n,o\u003di.boundary,r\u003dvoid 0\u003d\u003d\u003do?At:o,a\u003di.rootBoundary,l\u003dvoid 0\u003d\u003d\u003da?Tt:a,c\u003di.elementContext,h\u003dvoid 0\u003d\u003d\u003dc?Ot:c,d\u003di.altBoundary,u\u003dvoid 0!\u003d\u003dd\u0026\u0026d,f\u003di.padding,p\u003dvoid 0\u003d\u003d\u003df?0:f,m\u003dre(\"number\"!\u003dtypeof p?p:ae(p,yt)),g\u003dh\u003d\u003d\u003dOt?Ct:Ot,_\u003dt.rects.popper,b\u003dt.elements[u?g:h],v\u003dfunction(t,e,i){var n\u003d\"clippingParents\"\u003d\u003d\u003de?function(t){var e\u003dAe(Zt(t)),i\u003d[\"absolute\",\"fixed\"].indexOf(Yt(t).position)\u003e\u003d0\u0026\u0026zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)\u0026\u0026Xt(t,i)\u0026\u0026\"body\"!\u003d\u003dRt(t)})):[]}(t):[].concat(e),s\u003d[].concat(n,[i]),o\u003ds[0],r\u003ds.reduce((function(e,i){var n\u003dOe(t,i);return e.top\u003die(n.top,e.top),e.right\u003dne(n.right,e.right),e.bottom\u003dne(n.bottom,e.bottom),e.left\u003die(n.left,e.left),e}),Oe(t,o));return r.width\u003dr.right-r.left,r.height\u003dr.bottom-r.top,r.x\u003dr.left,r.y\u003dr.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y\u003dVt(t.elements.reference),w\u003dCe({reference:y,element:_,strategy:\"absolute\",placement:s}),E\u003dTe(Object.assign({},_,w)),A\u003dh\u003d\u003d\u003dOt?E:y,T\u003d{top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O\u003dt.modifiersData.offset;if(h\u003d\u003d\u003dOt\u0026\u0026O){var C\u003dO[s];Object.keys(T).forEach((function(t){var e\u003d[_t,gt].indexOf(t)\u003e\u003d0?1:-1,i\u003d[mt,gt].indexOf(t)\u003e\u003d0?\"y\":\"x\";T[t]+\u003dC[i]*e}))}return T}function Le(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var i\u003de,n\u003di.placement,s\u003di.boundary,o\u003di.rootBoundary,r\u003di.padding,a\u003di.flipVariations,l\u003di.allowedAutoPlacements,c\u003dvoid 0\u003d\u003d\u003dl?Lt:l,h\u003dce(n),d\u003dh?a?kt:kt.filter((function(t){return ce(t)\u003d\u003d\u003dh})):yt,u\u003dd.filter((function(t){return c.indexOf(t)\u003e\u003d0}));0\u003d\u003d\u003du.length\u0026\u0026(u\u003dd);var f\u003du.reduce((function(e,i){return e[i]\u003dke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe\u003d{name:\"flip\",enabled:!0,phase:\"main\",fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003dt.name;if(!e.modifiersData[n]._skip){for(var s\u003di.mainAxis,o\u003dvoid 0\u003d\u003d\u003ds||s,r\u003di.altAxis,a\u003dvoid 0\u003d\u003d\u003dr||r,l\u003di.fallbackPlacements,c\u003di.padding,h\u003di.boundary,d\u003di.rootBoundary,u\u003di.altBoundary,f\u003di.flipVariations,p\u003dvoid 0\u003d\u003d\u003df||f,m\u003di.allowedAutoPlacements,g\u003de.options.placement,_\u003dUt(g),b\u003dl||(_!\u003d\u003dg\u0026\u0026p?function(t){if(Ut(t)\u003d\u003d\u003dvt)return[];var e\u003dge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v\u003d[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)\u003d\u003d\u003dvt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y\u003de.rects.reference,w\u003de.rects.popper,E\u003dnew Map,A\u003d!0,T\u003dv[0],O\u003d0;O\u003cv.length;O++){var C\u003dv[O],k\u003dUt(C),L\u003dce(C)\u003d\u003d\u003dwt,x\u003d[mt,gt].indexOf(k)\u003e\u003d0,D\u003dx?\"width\":\"height\",S\u003dke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N\u003dx?L?_t:bt:L?gt:mt;y[D]\u003ew[D]\u0026\u0026(N\u003dge(N));var I\u003dge(N),P\u003d[];if(o\u0026\u0026P.push(S[k]\u003c\u003d0),a\u0026\u0026P.push(S[N]\u003c\u003d0,S[I]\u003c\u003d0),P.every((function(t){return t}))){T\u003dC,A\u003d!1;break}E.set(C,P)}if(A)for(var j\u003dfunction(t){var e\u003dv.find((function(e){var i\u003dE.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T\u003de,\"break\"},M\u003dp?3:1;M\u003e0\u0026\u0026\"break\"!\u003d\u003dj(M);M--);e.placement!\u003d\u003dT\u0026\u0026(e.modifiersData[n]._skip\u003d!0,e.placement\u003dT,e.reset\u003d!0)}},requiresIfExists:[\"offset\"],data:{_skip:!1}};function De(t,e,i){return void 0\u003d\u003d\u003di\u0026\u0026(i\u003d{x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]\u003e\u003d0}))}const Ne\u003d{name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:function(t){var e\u003dt.state,i\u003dt.name,n\u003de.rects.reference,s\u003de.rects.popper,o\u003de.modifiersData.preventOverflow,r\u003dke(e,{elementContext:\"reference\"}),a\u003dke(e,{altBoundary:!0}),l\u003dDe(r,n),c\u003dDe(a,s,o),h\u003dSe(l),d\u003dSe(c);e.modifiersData[i]\u003d{referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper\u003dObject.assign({},e.attributes.popper,{\"data-popper-reference-hidden\":h,\"data-popper-escaped\":d})}},Ie\u003d{name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003dt.name,s\u003di.offset,o\u003dvoid 0\u003d\u003d\u003ds?[0,0]:s,r\u003dLt.reduce((function(t,i){return t[i]\u003dfunction(t,e,i){var n\u003dUt(t),s\u003d[bt,mt].indexOf(n)\u003e\u003d0?-1:1,o\u003d\"function\"\u003d\u003dtypeof i?i(Object.assign({},e,{placement:t})):i,r\u003do[0],a\u003do[1];return r\u003dr||0,a\u003d(a||0)*s,[bt,_t].indexOf(n)\u003e\u003d0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a\u003dr[e.placement],l\u003da.x,c\u003da.y;null!\u003de.modifiersData.popperOffsets\u0026\u0026(e.modifiersData.popperOffsets.x+\u003dl,e.modifiersData.popperOffsets.y+\u003dc),e.modifiersData[n]\u003dr}},Pe\u003d{name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:function(t){var e\u003dt.state,i\u003dt.name;e.modifiersData[i]\u003dCe({reference:e.rects.reference,element:e.rects.popper,strategy:\"absolute\",placement:e.placement})},data:{}},je\u003d{name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003dt.name,s\u003di.mainAxis,o\u003dvoid 0\u003d\u003d\u003ds||s,r\u003di.altAxis,a\u003dvoid 0!\u003d\u003dr\u0026\u0026r,l\u003di.boundary,c\u003di.rootBoundary,h\u003di.altBoundary,d\u003di.padding,u\u003di.tether,f\u003dvoid 0\u003d\u003d\u003du||u,p\u003di.tetherOffset,m\u003dvoid 0\u003d\u003d\u003dp?0:p,g\u003dke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_\u003dUt(e.placement),b\u003dce(e.placement),v\u003d!b,y\u003dee(_),w\u003d\"x\"\u003d\u003d\u003dy?\"y\":\"x\",E\u003de.modifiersData.popperOffsets,A\u003de.rects.reference,T\u003de.rects.popper,O\u003d\"function\"\u003d\u003dtypeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C\u003d{x:0,y:0};if(E){if(o||a){var k\u003d\"y\"\u003d\u003d\u003dy?mt:bt,L\u003d\"y\"\u003d\u003d\u003dy?gt:_t,x\u003d\"y\"\u003d\u003d\u003dy?\"height\":\"width\",D\u003dE[y],S\u003dE[y]+g[k],N\u003dE[y]-g[L],I\u003df?-T[x]/2:0,P\u003db\u003d\u003d\u003dwt?A[x]:T[x],j\u003db\u003d\u003d\u003dwt?-T[x]:-A[x],M\u003de.elements.arrow,H\u003df\u0026\u0026M?Kt(M):{width:0,height:0},B\u003de.modifiersData[\"arrow#persistent\"]?e.modifiersData[\"arrow#persistent\"].padding:{top:0,right:0,bottom:0,left:0},R\u003dB[k],W\u003dB[L],$\u003doe(0,A[x],H[x]),z\u003dv?A[x]/2-I-$-R-O:P-$-R-O,q\u003dv?-A[x]/2+I+$+W+O:j+$+W+O,F\u003de.elements.arrow\u0026\u0026te(e.elements.arrow),U\u003dF?\"y\"\u003d\u003d\u003dy?F.clientTop||0:F.clientLeft||0:0,V\u003de.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K\u003dE[y]+z-V-U,X\u003dE[y]+q-V;if(o){var Y\u003doe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]\u003dY,C[y]\u003dY-D}if(a){var Q\u003d\"x\"\u003d\u003d\u003dy?mt:bt,G\u003d\"x\"\u003d\u003d\u003dy?gt:_t,Z\u003dE[w],J\u003dZ+g[Q],tt\u003dZ-g[G],et\u003doe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]\u003det,C[w]\u003det-Z}}e.modifiersData[n]\u003dC}},requiresIfExists:[\"offset\"]};function Me(t,e,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003d!1);var n\u003dzt(e);zt(e)\u0026\u0026function(t){var e\u003dt.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r\u003dGt(e),a\u003dVt(t),l\u003d{scrollLeft:0,scrollTop:0},c\u003d{x:0,y:0};return(n||!n\u0026\u0026!i)\u0026\u0026((\"body\"!\u003d\u003dRt(e)||we(r))\u0026\u0026(l\u003d(s\u003de)!\u003d\u003dWt(s)\u0026\u0026zt(s)?{scrollLeft:(o\u003ds).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c\u003dVt(e)).x+\u003de.clientLeft,c.y+\u003de.clientTop):r\u0026\u0026(c.x\u003dye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e\u003dnew Map,i\u003dnew Set,n\u003d[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n\u003de.get(t);n\u0026\u0026s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be\u003d{placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function Re(){for(var t\u003darguments.length,e\u003dnew Array(t),i\u003d0;i\u003ct;i++)e[i]\u003darguments[i];return!e.some((function(t){return!(t\u0026\u0026\"function\"\u003d\u003dtypeof t.getBoundingClientRect)}))}function We(t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{});var e\u003dt,i\u003de.defaultModifiers,n\u003dvoid 0\u003d\u003d\u003di?[]:i,s\u003de.defaultOptions,o\u003dvoid 0\u003d\u003d\u003ds?Be:s;return function(t,e,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003do);var s,r,a\u003d{placement:\"bottom\",orderedModifiers:[],options:Object.assign({},Be,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l\u003d[],c\u003d!1,h\u003d{state:a,setOptions:function(i){var s\u003d\"function\"\u003d\u003dtypeof i?i(a.options):i;d(),a.options\u003dObject.assign({},o,a.options,s),a.scrollParents\u003d{reference:$t(t)?Ae(t):t.contextElement?Ae(t.contextElement):[],popper:Ae(e)};var r,c,u\u003dfunction(t){var e\u003dHe(t);return Bt.reduce((function(t,i){return t.concat(e.filter((function(t){return t.phase\u003d\u003d\u003di})))}),[])}((r\u003d[].concat(n,a.options.modifiers),c\u003dr.reduce((function(t,e){var i\u003dt[e.name];return t[e.name]\u003di?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t}),{}),Object.keys(c).map((function(t){return c[t]}))));return a.orderedModifiers\u003du.filter((function(t){return t.enabled})),a.orderedModifiers.forEach((function(t){var e\u003dt.name,i\u003dt.options,n\u003dvoid 0\u003d\u003d\u003di?{}:i,s\u003dt.effect;if(\"function\"\u003d\u003dtypeof s){var o\u003ds({state:a,name:e,instance:h,options:n});l.push(o||function(){})}})),h.update()},forceUpdate:function(){if(!c){var t\u003da.elements,e\u003dt.reference,i\u003dt.popper;if(Re(e,i)){a.rects\u003d{reference:Me(e,te(i),\"fixed\"\u003d\u003d\u003da.options.strategy),popper:Kt(i)},a.reset\u003d!1,a.placement\u003da.options.placement,a.orderedModifiers.forEach((function(t){return a.modifiersData[t.name]\u003dObject.assign({},t.data)}));for(var n\u003d0;n\u003ca.orderedModifiers.length;n++)if(!0!\u003d\u003da.reset){var s\u003da.orderedModifiers[n],o\u003ds.fn,r\u003ds.options,l\u003dvoid 0\u003d\u003d\u003dr?{}:r,d\u003ds.name;\"function\"\u003d\u003dtypeof o\u0026\u0026(a\u003do({state:a,options:l,name:d,instance:h})||a)}else a.reset\u003d!1,n\u003d-1}}},update:(s\u003dfunction(){return new Promise((function(t){h.forceUpdate(),t(a)}))},function(){return r||(r\u003dnew Promise((function(t){Promise.resolve().then((function(){r\u003dvoid 0,t(s())}))}))),r}),destroy:function(){d(),c\u003d!0}};if(!Re(t,e))return h;function d(){l.forEach((function(t){return t()})),l\u003d[]}return h.setOptions(i).then((function(t){!c\u0026\u0026i.onFirstUpdate\u0026\u0026i.onFirstUpdate(t)})),h}}var $e\u003dWe(),ze\u003dWe({defaultModifiers:[pe,Pe,ue,Ft]}),qe\u003dWe({defaultModifiers:[pe,Pe,ue,Ft,Ie,xe,je,le,Ne]});const Fe\u003dObject.freeze({__proto__:null,popperGenerator:We,detectOverflow:ke,createPopperBase:$e,createPopper:qe,createPopperLite:ze,top:mt,bottom:gt,right:_t,left:bt,auto:vt,basePlacements:yt,start:wt,end:Et,clippingParents:At,viewport:Tt,popper:Ot,reference:Ct,variationPlacements:kt,placements:Lt,beforeRead:xt,read:Dt,afterRead:St,beforeMain:Nt,main:It,afterMain:Pt,beforeWrite:jt,write:Mt,afterWrite:Ht,modifierPhases:Bt,applyStyles:Ft,arrow:le,computeStyles:ue,eventListeners:pe,flip:xe,hide:Ne,offset:Ie,popperOffsets:Pe,preventOverflow:je}),Ue\u003d\"dropdown\",Ve\u003d\"Escape\",Ke\u003d\"Space\",Xe\u003d\"ArrowUp\",Ye\u003d\"ArrowDown\",Qe\u003dnew RegExp(\"ArrowUp|ArrowDown|Escape\"),Ge\u003d\"click.bs.dropdown.data-api\",Ze\u003d\"keydown.bs.dropdown.data-api\",Je\u003d\"show\",ti\u003d\u0027[data-bs-toggle\u003d\"dropdown\"]\u0027,ei\u003d\".dropdown-menu\",ii\u003dm()?\"top-end\":\"top-start\",ni\u003dm()?\"top-start\":\"top-end\",si\u003dm()?\"bottom-end\":\"bottom-start\",oi\u003dm()?\"bottom-start\":\"bottom-end\",ri\u003dm()?\"left-start\":\"right-start\",ai\u003dm()?\"right-start\":\"left-start\",li\u003d{offset:[0,2],boundary:\"clippingParents\",reference:\"toggle\",display:\"dynamic\",popperConfig:null,autoClose:!0},ci\u003d{offset:\"(array|string|function)\",boundary:\"(string|element)\",reference:\"(string|element|object)\",display:\"string\",popperConfig:\"(null|object|function)\",autoClose:\"(boolean|string)\"};class hi extends B{constructor(t,e){super(t),this._popper\u003dnull,this._config\u003dthis._getConfig(e),this._menu\u003dthis._getMenuElement(),this._inNavbar\u003dthis._detectNavbar()}static get Default(){return li}static get DefaultType(){return ci}static get NAME(){return Ue}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown(this._menu))return;const t\u003d{relatedTarget:this._element};if(j.trigger(this._element,\"show.bs.dropdown\",t).defaultPrevented)return;const e\u003dhi.getParentFromElement(this._element);this._inNavbar?U.setDataAttribute(this._menu,\"popper\",\"none\"):this._createPopper(e),\"ontouchstart\"in document.documentElement\u0026\u0026!e.closest(\".navbar-nav\")\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003ej.on(t,\"mouseover\",d))),this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,\"shown.bs.dropdown\",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t\u003d{relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper\u0026\u0026this._popper.destroy(),super.dispose()}update(){this._inNavbar\u003dthis._detectNavbar(),this._popper\u0026\u0026this._popper.update()}_completeHide(t){j.trigger(this._element,\"hide.bs.dropdown\",t).defaultPrevented||(\"ontouchstart\"in document.documentElement\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003ej.off(t,\"mouseover\",d))),this._popper\u0026\u0026this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute(\"aria-expanded\",\"false\"),U.removeDataAttribute(this._menu,\"popper\"),j.trigger(this._element,\"hidden.bs.dropdown\",t))}_getConfig(t){if(t\u003d{...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),\"object\"\u003d\u003dtypeof t.reference\u0026\u0026!o(t.reference)\u0026\u0026\"function\"!\u003dtypeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);return t}_createPopper(t){if(void 0\u003d\u003d\u003dFe)throw new TypeError(\"Bootstrap\u0027s dropdowns require Popper (https://popper.js.org)\");let e\u003dthis._element;\"parent\"\u003d\u003d\u003dthis._config.reference?e\u003dt:o(this._config.reference)?e\u003dr(this._config.reference):\"object\"\u003d\u003dtypeof this._config.reference\u0026\u0026(e\u003dthis._config.reference);const i\u003dthis._getPopperConfig(),n\u003di.modifiers.find((t\u003d\u003e\"applyStyles\"\u003d\u003d\u003dt.name\u0026\u0026!1\u003d\u003d\u003dt.enabled));this._popper\u003dqe(e,this._menu,i),n\u0026\u0026U.setDataAttribute(this._menu,\"popper\",\"static\")}_isShown(t\u003dthis._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t\u003dthis._element.parentNode;if(t.classList.contains(\"dropend\"))return ri;if(t.classList.contains(\"dropstart\"))return ai;const e\u003d\"end\"\u003d\u003d\u003dgetComputedStyle(this._menu).getPropertyValue(\"--bs-position\").trim();return t.classList.contains(\"dropup\")?e?ni:ii:e?oi:si}_detectNavbar(){return null!\u003d\u003dthis._element.closest(\".navbar\")}_getOffset(){const{offset:t}\u003dthis._config;return\"string\"\u003d\u003dtypeof t?t.split(\",\").map((t\u003d\u003eNumber.parseInt(t,10))):\"function\"\u003d\u003dtypeof t?e\u003d\u003et(e,this._element):t}_getPopperConfig(){const t\u003d{placement:this._getPlacement(),modifiers:[{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"offset\",options:{offset:this._getOffset()}}]};return\"static\"\u003d\u003d\u003dthis._config.display\u0026\u0026(t.modifiers\u003d[{name:\"applyStyles\",enabled:!1}]),{...t,...\"function\"\u003d\u003dtypeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i\u003dV.find(\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",this._menu).filter(l);i.length\u0026\u0026v(i,e,t\u003d\u003d\u003dYe,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e\u003dhi.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}static clearMenus(t){if(t\u0026\u0026(2\u003d\u003d\u003dt.button||\"keyup\"\u003d\u003d\u003dt.type\u0026\u0026\"Tab\"!\u003d\u003dt.key))return;const e\u003dV.find(ti);for(let i\u003d0,n\u003de.length;i\u003cn;i++){const n\u003dhi.getInstance(e[i]);if(!n||!1\u003d\u003d\u003dn._config.autoClose)continue;if(!n._isShown())continue;const s\u003d{relatedTarget:n._element};if(t){const e\u003dt.composedPath(),i\u003de.includes(n._menu);if(e.includes(n._element)||\"inside\"\u003d\u003d\u003dn._config.autoClose\u0026\u0026!i||\"outside\"\u003d\u003d\u003dn._config.autoClose\u0026\u0026i)continue;if(n._menu.contains(t.target)\u0026\u0026(\"keyup\"\u003d\u003d\u003dt.type\u0026\u0026\"Tab\"\u003d\u003d\u003dt.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;\"click\"\u003d\u003d\u003dt.type\u0026\u0026(s.clickEvent\u003dt)}n._completeHide(s)}}static getParentFromElement(t){return n(t)||t.parentNode}static dataApiKeydownHandler(t){if(/input|textarea/i.test(t.target.tagName)?t.key\u003d\u003d\u003dKe||t.key!\u003d\u003dVe\u0026\u0026(t.key!\u003d\u003dYe\u0026\u0026t.key!\u003d\u003dXe||t.target.closest(ei)):!Qe.test(t.key))return;const e\u003dthis.classList.contains(Je);if(!e\u0026\u0026t.key\u003d\u003d\u003dVe)return;if(t.preventDefault(),t.stopPropagation(),c(this))return;const i\u003dthis.matches(ti)?this:V.prev(this,ti)[0],n\u003dhi.getOrCreateInstance(i);if(t.key!\u003d\u003dVe)return t.key\u003d\u003d\u003dXe||t.key\u003d\u003d\u003dYe?(e||n.show(),void n._selectMenuItem(t)):void(e\u0026\u0026t.key!\u003d\u003dKe||hi.clearMenus());n.hide()}}j.on(document,Ze,ti,hi.dataApiKeydownHandler),j.on(document,Ze,ei,hi.dataApiKeydownHandler),j.on(document,Ge,hi.clearMenus),j.on(document,\"keyup.bs.dropdown.data-api\",hi.clearMenus),j.on(document,Ge,ti,(function(t){t.preventDefault(),hi.getOrCreateInstance(this).toggle()})),g(hi);const di\u003d\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",ui\u003d\".sticky-top\";class fi{constructor(){this._element\u003ddocument.body}getWidth(){const t\u003ddocument.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t\u003dthis.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,\"paddingRight\",(e\u003d\u003ee+t)),this._setElementAttributes(di,\"paddingRight\",(e\u003d\u003ee+t)),this._setElementAttributes(ui,\"marginRight\",(e\u003d\u003ee-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,\"overflow\"),this._element.style.overflow\u003d\"hidden\"}_setElementAttributes(t,e,i){const n\u003dthis.getWidth();this._applyManipulationCallback(t,(t\u003d\u003e{if(t!\u003d\u003dthis._element\u0026\u0026window.innerWidth\u003et.clientWidth+n)return;this._saveInitialAttribute(t,e);const s\u003dwindow.getComputedStyle(t)[e];t.style[e]\u003d`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,\"overflow\"),this._resetElementAttributes(this._element,\"paddingRight\"),this._resetElementAttributes(di,\"paddingRight\"),this._resetElementAttributes(ui,\"marginRight\")}_saveInitialAttribute(t,e){const i\u003dt.style[e];i\u0026\u0026U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t\u003d\u003e{const i\u003dU.getDataAttribute(t,e);void 0\u003d\u003d\u003di?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]\u003di)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()\u003e0}}const pi\u003d{className:\"modal-backdrop\",isVisible:!0,isAnimated:!1,rootElement:\"body\",clickCallback:null},mi\u003d{className:\"string\",isVisible:\"boolean\",isAnimated:\"boolean\",rootElement:\"(element|string)\",clickCallback:\"(function|null)\"},gi\u003d\"show\",_i\u003d\"mousedown.bs.backdrop\";class bi{constructor(t){this._config\u003dthis._getConfig(t),this._isAppended\u003d!1,this._element\u003dnull}show(t){this._config.isVisible?(this._append(),this._config.isAnimated\u0026\u0026u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()\u003d\u003e{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()\u003d\u003e{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t\u003ddocument.createElement(\"div\");t.className\u003dthis._config.className,this._config.isAnimated\u0026\u0026t.classList.add(\"fade\"),this._element\u003dt}return this._element}_getConfig(t){return(t\u003d{...pi,...\"object\"\u003d\u003dtypeof t?t:{}}).rootElement\u003dr(t.rootElement),a(\"backdrop\",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()\u003d\u003e{_(this._config.clickCallback)})),this._isAppended\u003d!0)}dispose(){this._isAppended\u0026\u0026(j.off(this._element,_i),this._element.remove(),this._isAppended\u003d!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi\u003d{trapElement:null,autofocus:!0},yi\u003d{trapElement:\"element\",autofocus:\"boolean\"},wi\u003d\".bs.focustrap\",Ei\u003d\"backward\";class Ai{constructor(t){this._config\u003dthis._getConfig(t),this._isActive\u003d!1,this._lastTabNavDirection\u003dnull}activate(){const{trapElement:t,autofocus:e}\u003dthis._config;this._isActive||(e\u0026\u0026t.focus(),j.off(document,wi),j.on(document,\"focusin.bs.focustrap\",(t\u003d\u003ethis._handleFocusin(t))),j.on(document,\"keydown.tab.bs.focustrap\",(t\u003d\u003ethis._handleKeydown(t))),this._isActive\u003d!0)}deactivate(){this._isActive\u0026\u0026(this._isActive\u003d!1,j.off(document,wi))}_handleFocusin(t){const{target:e}\u003dt,{trapElement:i}\u003dthis._config;if(e\u003d\u003d\u003ddocument||e\u003d\u003d\u003di||i.contains(e))return;const n\u003dV.focusableChildren(i);0\u003d\u003d\u003dn.length?i.focus():this._lastTabNavDirection\u003d\u003d\u003dEi?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){\"Tab\"\u003d\u003d\u003dt.key\u0026\u0026(this._lastTabNavDirection\u003dt.shiftKey?Ei:\"forward\")}_getConfig(t){return t\u003d{...vi,...\"object\"\u003d\u003dtypeof t?t:{}},a(\"focustrap\",t,yi),t}}const Ti\u003d\"modal\",Oi\u003d\"Escape\",Ci\u003d{backdrop:!0,keyboard:!0,focus:!0},ki\u003d{backdrop:\"(boolean|string)\",keyboard:\"boolean\",focus:\"boolean\"},Li\u003d\"hidden.bs.modal\",xi\u003d\"show.bs.modal\",Di\u003d\"resize.bs.modal\",Si\u003d\"click.dismiss.bs.modal\",Ni\u003d\"keydown.dismiss.bs.modal\",Ii\u003d\"mousedown.dismiss.bs.modal\",Pi\u003d\"modal-open\",ji\u003d\"show\",Mi\u003d\"modal-static\";class Hi extends B{constructor(t,e){super(t),this._config\u003dthis._getConfig(e),this._dialog\u003dV.findOne(\".modal-dialog\",this._element),this._backdrop\u003dthis._initializeBackDrop(),this._focustrap\u003dthis._initializeFocusTrap(),this._isShown\u003d!1,this._ignoreBackdropClick\u003d!1,this._isTransitioning\u003d!1,this._scrollBar\u003dnew fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown\u003d!0,this._isAnimated()\u0026\u0026(this._isTransitioning\u003d!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()\u003d\u003e{j.one(this._element,\"mouseup.dismiss.bs.modal\",(t\u003d\u003e{t.target\u003d\u003d\u003dthis._element\u0026\u0026(this._ignoreBackdropClick\u003d!0)}))})),this._showBackdrop((()\u003d\u003ethis._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,\"hide.bs.modal\").defaultPrevented)return;this._isShown\u003d!1;const t\u003dthis._isAnimated();t\u0026\u0026(this._isTransitioning\u003d!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()\u003d\u003ethis._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t\u003d\u003ej.off(t,\".bs.modal\"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t\u003d{...Ci,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e\u003dthis._isAnimated(),i\u003dV.findOne(\".modal-body\",this._dialog);this._element.parentNode\u0026\u0026this._element.parentNode.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE||document.body.append(this._element),this._element.style.display\u003d\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.scrollTop\u003d0,i\u0026\u0026(i.scrollTop\u003d0),e\u0026\u0026u(this._element),this._element.classList.add(ji),this._queueCallback((()\u003d\u003e{this._config.focus\u0026\u0026this._focustrap.activate(),this._isTransitioning\u003d!1,j.trigger(this._element,\"shown.bs.modal\",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t\u003d\u003e{this._config.keyboard\u0026\u0026t.key\u003d\u003d\u003dOi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!\u003d\u003dOi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()\u003d\u003ethis._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display\u003d\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._isTransitioning\u003d!1,this._backdrop.hide((()\u003d\u003e{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t\u003d\u003e{this._ignoreBackdropClick?this._ignoreBackdropClick\u003d!1:t.target\u003d\u003d\u003dt.currentTarget\u0026\u0026(!0\u003d\u003d\u003dthis._config.backdrop?this.hide():\"static\"\u003d\u003d\u003dthis._config.backdrop\u0026\u0026this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains(\"fade\")}_triggerBackdropTransition(){if(j.trigger(this._element,\"hidePrevented.bs.modal\").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}\u003dthis._element,n\u003de\u003edocument.documentElement.clientHeight;!n\u0026\u0026\"hidden\"\u003d\u003d\u003di.overflowY||t.contains(Mi)||(n||(i.overflowY\u003d\"hidden\"),t.add(Mi),this._queueCallback((()\u003d\u003e{t.remove(Mi),n||this._queueCallback((()\u003d\u003e{i.overflowY\u003d\"\"}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t\u003dthis._element.scrollHeight\u003edocument.documentElement.clientHeight,e\u003dthis._scrollBar.getWidth(),i\u003de\u003e0;(!i\u0026\u0026t\u0026\u0026!m()||i\u0026\u0026!t\u0026\u0026m())\u0026\u0026(this._element.style.paddingLeft\u003d`${e}px`),(i\u0026\u0026!t\u0026\u0026!m()||!i\u0026\u0026t\u0026\u0026m())\u0026\u0026(this._element.style.paddingRight\u003d`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft\u003d\"\",this._element.style.paddingRight\u003d\"\"}static jQueryInterface(t,e){return this.each((function(){const i\u003dHi.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003di[t])throw new TypeError(`No method named \"${t}\"`);i[t](e)}}))}}j.on(document,\"click.bs.modal.data-api\",\u0027[data-bs-toggle\u003d\"modal\"]\u0027,(function(t){const e\u003dn(this);[\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026t.preventDefault(),j.one(e,xi,(t\u003d\u003e{t.defaultPrevented||j.one(e,Li,(()\u003d\u003e{l(this)\u0026\u0026this.focus()}))}));const i\u003dV.findOne(\".modal.show\");i\u0026\u0026Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi\u003d\"offcanvas\",Ri\u003d{backdrop:!0,keyboard:!0,scroll:!1},Wi\u003d{backdrop:\"boolean\",keyboard:\"boolean\",scroll:\"boolean\"},$i\u003d\"show\",zi\u003d\".offcanvas.show\",qi\u003d\"hidden.bs.offcanvas\";class Fi extends B{constructor(t,e){super(t),this._config\u003dthis._getConfig(e),this._isShown\u003d!1,this._backdrop\u003dthis._initializeBackDrop(),this._focustrap\u003dthis._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,\"show.bs.offcanvas\",{relatedTarget:t}).defaultPrevented||(this._isShown\u003d!0,this._element.style.visibility\u003d\"visible\",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.classList.add($i),this._queueCallback((()\u003d\u003e{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,\"shown.bs.offcanvas\",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown\u0026\u0026(j.trigger(this._element,\"hide.bs.offcanvas\").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown\u003d!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()\u003d\u003e{this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._element.style.visibility\u003d\"hidden\",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t\u003d{...Ri,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:\"offcanvas-backdrop\",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()\u003d\u003ethis.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,\"keydown.dismiss.bs.offcanvas\",(t\u003d\u003e{this._config.keyboard\u0026\u0026\"Escape\"\u003d\u003d\u003dt.key\u0026\u0026this.hide()}))}static jQueryInterface(t){return this.each((function(){const e\u003dFi.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t]||t.startsWith(\"_\")||\"constructor\"\u003d\u003d\u003dt)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}j.on(document,\"click.bs.offcanvas.data-api\",\u0027[data-bs-toggle\u003d\"offcanvas\"]\u0027,(function(t){const e\u003dn(this);if([\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026t.preventDefault(),c(this))return;j.one(e,qi,(()\u003d\u003e{l(this)\u0026\u0026this.focus()}));const i\u003dV.findOne(zi);i\u0026\u0026i!\u003d\u003de\u0026\u0026Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,\"load.bs.offcanvas.data-api\",(()\u003d\u003eV.find(zi).forEach((t\u003d\u003eFi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui\u003dnew Set([\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"]),Vi\u003d/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#\u0026/:?]*(?:[#/?]|$))/i,Ki\u003d/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+\u003d*$/i,Xi\u003d(t,e)\u003d\u003e{const i\u003dt.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n\u003de.filter((t\u003d\u003et instanceof RegExp));for(let t\u003d0,e\u003dn.length;t\u003ce;t++)if(n[t].test(i))return!0;return!1};function Yi(t,e,i){if(!t.length)return t;if(i\u0026\u0026\"function\"\u003d\u003dtypeof i)return i(t);const n\u003d(new window.DOMParser).parseFromString(t,\"text/html\"),s\u003d[].concat(...n.body.querySelectorAll(\"*\"));for(let t\u003d0,i\u003ds.length;t\u003ci;t++){const i\u003ds[t],n\u003di.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){i.remove();continue}const o\u003d[].concat(...i.attributes),r\u003d[].concat(e[\"*\"]||[],e[n]||[]);o.forEach((t\u003d\u003e{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi\u003d\"tooltip\",Gi\u003dnew Set([\"sanitize\",\"allowList\",\"sanitizeFn\"]),Zi\u003d{animation:\"boolean\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\",delay:\"(number|object)\",html:\"boolean\",selector:\"(string|boolean)\",placement:\"(string|function)\",offset:\"(array|string|function)\",container:\"(string|element|boolean)\",fallbackPlacements:\"array\",boundary:\"(string|element)\",customClass:\"(string|function)\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",allowList:\"object\",popperConfig:\"(null|object|function)\"},Ji\u003d{AUTO:\"auto\",TOP:\"top\",RIGHT:m()?\"left\":\"right\",BOTTOM:\"bottom\",LEFT:m()?\"right\":\"left\"},tn\u003d{animation:!0,template:\u0027\u003cdiv class\u003d\"tooltip\" role\u003d\"tooltip\"\u003e\u003cdiv class\u003d\"tooltip-arrow\"\u003e\u003c/div\u003e\u003cdiv class\u003d\"tooltip-inner\"\u003e\u003c/div\u003e\u003c/div\u003e\u0027,trigger:\"hover focus\",title:\"\",delay:0,html:!1,selector:!1,placement:\"top\",offset:[0,0],container:!1,fallbackPlacements:[\"top\",\"right\",\"bottom\",\"left\"],boundary:\"clippingParents\",customClass:\"\",sanitize:!0,sanitizeFn:null,allowList:{\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en\u003d{HIDE:\"hide.bs.tooltip\",HIDDEN:\"hidden.bs.tooltip\",SHOW:\"show.bs.tooltip\",SHOWN:\"shown.bs.tooltip\",INSERTED:\"inserted.bs.tooltip\",CLICK:\"click.bs.tooltip\",FOCUSIN:\"focusin.bs.tooltip\",FOCUSOUT:\"focusout.bs.tooltip\",MOUSEENTER:\"mouseenter.bs.tooltip\",MOUSELEAVE:\"mouseleave.bs.tooltip\"},nn\u003d\"fade\",sn\u003d\"show\",on\u003d\"show\",rn\u003d\"out\",an\u003d\".tooltip-inner\",ln\u003d\".modal\",cn\u003d\"hide.bs.modal\",hn\u003d\"hover\",dn\u003d\"focus\";class un extends B{constructor(t,e){if(void 0\u003d\u003d\u003dFe)throw new TypeError(\"Bootstrap\u0027s tooltips require Popper (https://popper.js.org)\");super(t),this._isEnabled\u003d!0,this._timeout\u003d0,this._hoverState\u003d\"\",this._activeTrigger\u003d{},this._popper\u003dnull,this._config\u003dthis._getConfig(e),this.tip\u003dnull,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled\u003d!0}disable(){this._isEnabled\u003d!1}toggleEnabled(){this._isEnabled\u003d!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e\u003dthis._initializeOnDelegatedTarget(t);e._activeTrigger.click\u003d!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip\u0026\u0026this.tip.remove(),this._disposePopper(),super.dispose()}show(){if(\"none\"\u003d\u003d\u003dthis._element.style.display)throw new Error(\"Please use show on visible elements\");if(!this.isWithContent()||!this._isEnabled)return;const t\u003dj.trigger(this._element,this.constructor.Event.SHOW),e\u003dh(this._element),i\u003dnull\u003d\u003d\u003de?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;\"tooltip\"\u003d\u003d\u003dthis.constructor.NAME\u0026\u0026this.tip\u0026\u0026this.getTitle()!\u003d\u003dthis.tip.querySelector(an).innerHTML\u0026\u0026(this._disposePopper(),this.tip.remove(),this.tip\u003dnull);const n\u003dthis.getTipElement(),s\u003d(t\u003d\u003e{do{t+\u003dMath.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute(\"id\",s),this._element.setAttribute(\"aria-describedby\",s),this._config.animation\u0026\u0026n.classList.add(nn);const o\u003d\"function\"\u003d\u003dtypeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r\u003dthis._getAttachment(o);this._addAttachmentClass(r);const{container:a}\u003dthis._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper\u003dqe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l\u003dthis._resolvePossibleFunction(this._config.customClass);l\u0026\u0026n.classList.add(...l.split(\" \")),\"ontouchstart\"in document.documentElement\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003e{j.on(t,\"mouseover\",d)}));const c\u003dthis.tip.classList.contains(nn);this._queueCallback((()\u003d\u003e{const t\u003dthis._hoverState;this._hoverState\u003dnull,j.trigger(this._element,this.constructor.Event.SHOWN),t\u003d\u003d\u003drn\u0026\u0026this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t\u003dthis.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),\"ontouchstart\"in document.documentElement\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003ej.off(t,\"mouseover\",d))),this._activeTrigger.click\u003d!1,this._activeTrigger.focus\u003d!1,this._activeTrigger.hover\u003d!1;const e\u003dthis.tip.classList.contains(nn);this._queueCallback((()\u003d\u003e{this._isWithActiveTrigger()||(this._hoverState!\u003d\u003don\u0026\u0026t.remove(),this._cleanTipClass(),this._element.removeAttribute(\"aria-describedby\"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState\u003d\"\"}update(){null!\u003d\u003dthis._popper\u0026\u0026this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t\u003ddocument.createElement(\"div\");t.innerHTML\u003dthis._config.template;const e\u003dt.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip\u003de,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n\u003dV.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!\u003d\u003dt)return o(e)?(e\u003dr(e),void(this._config.html?e.parentNode!\u003d\u003dt\u0026\u0026(t.innerHTML\u003d\"\",t.append(e)):t.textContent\u003de.textContent)):void(this._config.html?(this._config.sanitize\u0026\u0026(e\u003dYi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML\u003de):t.textContent\u003de)}getTitle(){const t\u003dthis._element.getAttribute(\"data-bs-original-title\")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return\"right\"\u003d\u003d\u003dt?\"end\":\"left\"\u003d\u003d\u003dt?\"start\":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}\u003dthis._config;return\"string\"\u003d\u003dtypeof t?t.split(\",\").map((t\u003d\u003eNumber.parseInt(t,10))):\"function\"\u003d\u003dtypeof t?e\u003d\u003et(e,this._element):t}_resolvePossibleFunction(t){return\"function\"\u003d\u003dtypeof t?t.call(this._element):t}_getPopperConfig(t){const e\u003d{placement:t,modifiers:[{name:\"flip\",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:\"offset\",options:{offset:this._getOffset()}},{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"arrow\",options:{element:`.${this.constructor.NAME}-arrow`}},{name:\"onChange\",enabled:!0,phase:\"afterWrite\",fn:t\u003d\u003ethis._handlePopperPlacementChange(t)}],onFirstUpdate:t\u003d\u003e{t.options.placement!\u003d\u003dt.placement\u0026\u0026this._handlePopperPlacementChange(t)}};return{...e,...\"function\"\u003d\u003dtypeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(\" \").forEach((t\u003d\u003e{if(\"click\"\u003d\u003d\u003dt)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t\u003d\u003ethis.toggle(t)));else if(\"manual\"!\u003d\u003dt){const e\u003dt\u003d\u003d\u003dhn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i\u003dt\u003d\u003d\u003dhn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t\u003d\u003ethis._enter(t))),j.on(this._element,i,this._config.selector,(t\u003d\u003ethis._leave(t)))}})),this._hideModalHandler\u003d()\u003d\u003e{this._element\u0026\u0026this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config\u003d{...this._config,trigger:\"manual\",selector:\"\"}:this._fixTitle()}_fixTitle(){const t\u003dthis._element.getAttribute(\"title\"),e\u003dtypeof this._element.getAttribute(\"data-bs-original-title\");(t||\"string\"!\u003d\u003de)\u0026\u0026(this._element.setAttribute(\"data-bs-original-title\",t||\"\"),!t||this._element.getAttribute(\"aria-label\")||this._element.textContent||this._element.setAttribute(\"aria-label\",t),this._element.setAttribute(\"title\",\"\"))}_enter(t,e){e\u003dthis._initializeOnDelegatedTarget(t,e),t\u0026\u0026(e._activeTrigger[\"focusin\"\u003d\u003d\u003dt.type?dn:hn]\u003d!0),e.getTipElement().classList.contains(sn)||e._hoverState\u003d\u003d\u003don?e._hoverState\u003don:(clearTimeout(e._timeout),e._hoverState\u003don,e._config.delay\u0026\u0026e._config.delay.show?e._timeout\u003dsetTimeout((()\u003d\u003e{e._hoverState\u003d\u003d\u003don\u0026\u0026e.show()}),e._config.delay.show):e.show())}_leave(t,e){e\u003dthis._initializeOnDelegatedTarget(t,e),t\u0026\u0026(e._activeTrigger[\"focusout\"\u003d\u003d\u003dt.type?dn:hn]\u003de._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState\u003drn,e._config.delay\u0026\u0026e._config.delay.hide?e._timeout\u003dsetTimeout((()\u003d\u003e{e._hoverState\u003d\u003d\u003drn\u0026\u0026e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e\u003dU.getDataAttributes(this._element);return Object.keys(e).forEach((t\u003d\u003e{Gi.has(t)\u0026\u0026delete e[t]})),(t\u003d{...this.constructor.Default,...e,...\"object\"\u003d\u003dtypeof t\u0026\u0026t?t:{}}).container\u003d!1\u003d\u003d\u003dt.container?document.body:r(t.container),\"number\"\u003d\u003dtypeof t.delay\u0026\u0026(t.delay\u003d{show:t.delay,hide:t.delay}),\"number\"\u003d\u003dtypeof t.title\u0026\u0026(t.title\u003dt.title.toString()),\"number\"\u003d\u003dtypeof t.content\u0026\u0026(t.content\u003dt.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize\u0026\u0026(t.template\u003dYi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t\u003d{};for(const e in this._config)this.constructor.Default[e]!\u003d\u003dthis._config[e]\u0026\u0026(t[e]\u003dthis._config[e]);return t}_cleanTipClass(){const t\u003dthis.getTipElement(),e\u003dnew RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`,\"g\"),i\u003dt.getAttribute(\"class\").match(e);null!\u003d\u003di\u0026\u0026i.length\u003e0\u0026\u0026i.map((t\u003d\u003et.trim())).forEach((e\u003d\u003et.classList.remove(e)))}_getBasicClassPrefix(){return\"bs-tooltip\"}_handlePopperPlacementChange(t){const{state:e}\u003dt;e\u0026\u0026(this.tip\u003de.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper\u0026\u0026(this._popper.destroy(),this._popper\u003dnull)}static jQueryInterface(t){return this.each((function(){const e\u003dun.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}g(un);const fn\u003d{...un.Default,placement:\"right\",offset:[0,8],trigger:\"click\",content:\"\",template:\u0027\u003cdiv class\u003d\"popover\" role\u003d\"tooltip\"\u003e\u003cdiv class\u003d\"popover-arrow\"\u003e\u003c/div\u003e\u003ch3 class\u003d\"popover-header\"\u003e\u003c/h3\u003e\u003cdiv class\u003d\"popover-body\"\u003e\u003c/div\u003e\u003c/div\u003e\u0027},pn\u003d{...un.DefaultType,content:\"(string|element|function)\"},mn\u003d{HIDE:\"hide.bs.popover\",HIDDEN:\"hidden.bs.popover\",SHOW:\"show.bs.popover\",SHOWN:\"shown.bs.popover\",INSERTED:\"inserted.bs.popover\",CLICK:\"click.bs.popover\",FOCUSIN:\"focusin.bs.popover\",FOCUSOUT:\"focusout.bs.popover\",MOUSEENTER:\"mouseenter.bs.popover\",MOUSELEAVE:\"mouseleave.bs.popover\"};class gn extends un{static get Default(){return fn}static get NAME(){return\"popover\"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),\".popover-header\"),this._sanitizeAndSetContent(t,this._getContent(),\".popover-body\")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return\"bs-popover\"}static jQueryInterface(t){return this.each((function(){const e\u003dgn.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}g(gn);const _n\u003d\"scrollspy\",bn\u003d{offset:10,method:\"auto\",target:\"\"},vn\u003d{offset:\"number\",method:\"string\",target:\"(string|element)\"},yn\u003d\"active\",wn\u003d\".nav-link, .list-group-item, .dropdown-item\",En\u003d\"position\";class An extends B{constructor(t,e){super(t),this._scrollElement\u003d\"BODY\"\u003d\u003d\u003dthis._element.tagName?window:this._element,this._config\u003dthis._getConfig(e),this._offsets\u003d[],this._targets\u003d[],this._activeTarget\u003dnull,this._scrollHeight\u003d0,j.on(this._scrollElement,\"scroll.bs.scrollspy\",(()\u003d\u003ethis._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t\u003dthis._scrollElement\u003d\u003d\u003dthis._scrollElement.window?\"offset\":En,e\u003d\"auto\"\u003d\u003d\u003dthis._config.method?t:this._config.method,n\u003de\u003d\u003d\u003dEn?this._getScrollTop():0;this._offsets\u003d[],this._targets\u003d[],this._scrollHeight\u003dthis._getScrollHeight(),V.find(wn,this._config.target).map((t\u003d\u003e{const s\u003di(t),o\u003ds?V.findOne(s):null;if(o){const t\u003do.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t\u003d\u003et)).sort(((t,e)\u003d\u003et[0]-e[0])).forEach((t\u003d\u003e{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,\".bs.scrollspy\"),super.dispose()}_getConfig(t){return(t\u003d{...bn,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t\u0026\u0026t?t:{}}).target\u003dr(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement\u003d\u003d\u003dwindow?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement\u003d\u003d\u003dwindow?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t\u003dthis._getScrollTop()+this._config.offset,e\u003dthis._getScrollHeight(),i\u003dthis._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!\u003d\u003de\u0026\u0026this.refresh(),t\u003e\u003di){const t\u003dthis._targets[this._targets.length-1];this._activeTarget!\u003d\u003dt\u0026\u0026this._activate(t)}else{if(this._activeTarget\u0026\u0026t\u003cthis._offsets[0]\u0026\u0026this._offsets[0]\u003e0)return this._activeTarget\u003dnull,void this._clear();for(let e\u003dthis._offsets.length;e--;)this._activeTarget!\u003d\u003dthis._targets[e]\u0026\u0026t\u003e\u003dthis._offsets[e]\u0026\u0026(void 0\u003d\u003d\u003dthis._offsets[e+1]||t\u003cthis._offsets[e+1])\u0026\u0026this._activate(this._targets[e])}}_activate(t){this._activeTarget\u003dt,this._clear();const e\u003dwn.split(\",\").map((e\u003d\u003e`${e}[data-bs-target\u003d\"${t}\"],${e}[href\u003d\"${t}\"]`)),i\u003dV.findOne(e.join(\",\"),this._config.target);i.classList.add(yn),i.classList.contains(\"dropdown-item\")?V.findOne(\".dropdown-toggle\",i.closest(\".dropdown\")).classList.add(yn):V.parents(i,\".nav, .list-group\").forEach((t\u003d\u003e{V.prev(t,\".nav-link, .list-group-item\").forEach((t\u003d\u003et.classList.add(yn))),V.prev(t,\".nav-item\").forEach((t\u003d\u003e{V.children(t,\".nav-link\").forEach((t\u003d\u003et.classList.add(yn)))}))})),j.trigger(this._scrollElement,\"activate.bs.scrollspy\",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t\u003d\u003et.classList.contains(yn))).forEach((t\u003d\u003et.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e\u003dAn.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}j.on(window,\"load.bs.scrollspy.data-api\",(()\u003d\u003e{V.find(\u0027[data-bs-spy\u003d\"scroll\"]\u0027).forEach((t\u003d\u003enew An(t)))})),g(An);const Tn\u003d\"active\",On\u003d\"fade\",Cn\u003d\"show\",kn\u003d\".active\",Ln\u003d\":scope \u003e li \u003e .active\";class xn extends B{static get NAME(){return\"tab\"}show(){if(this._element.parentNode\u0026\u0026this._element.parentNode.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE\u0026\u0026this._element.classList.contains(Tn))return;let t;const e\u003dn(this._element),i\u003dthis._element.closest(\".nav, .list-group\");if(i){const e\u003d\"UL\"\u003d\u003d\u003di.nodeName||\"OL\"\u003d\u003d\u003di.nodeName?Ln:kn;t\u003dV.find(e,i),t\u003dt[t.length-1]}const s\u003dt?j.trigger(t,\"hide.bs.tab\",{relatedTarget:this._element}):null;if(j.trigger(this._element,\"show.bs.tab\",{relatedTarget:t}).defaultPrevented||null!\u003d\u003ds\u0026\u0026s.defaultPrevented)return;this._activate(this._element,i);const o\u003d()\u003d\u003e{j.trigger(t,\"hidden.bs.tab\",{relatedTarget:this._element}),j.trigger(this._element,\"shown.bs.tab\",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n\u003d(!e||\"UL\"!\u003d\u003de.nodeName\u0026\u0026\"OL\"!\u003d\u003de.nodeName?V.children(e,kn):V.find(Ln,e))[0],s\u003di\u0026\u0026n\u0026\u0026n.classList.contains(On),o\u003d()\u003d\u003ethis._transitionComplete(t,n,i);n\u0026\u0026s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t\u003dV.findOne(\":scope \u003e .dropdown-menu .active\",e.parentNode);t\u0026\u0026t.classList.remove(Tn),\"tab\"\u003d\u003d\u003de.getAttribute(\"role\")\u0026\u0026e.setAttribute(\"aria-selected\",!1)}t.classList.add(Tn),\"tab\"\u003d\u003d\u003dt.getAttribute(\"role\")\u0026\u0026t.setAttribute(\"aria-selected\",!0),u(t),t.classList.contains(On)\u0026\u0026t.classList.add(Cn);let n\u003dt.parentNode;if(n\u0026\u0026\"LI\"\u003d\u003d\u003dn.nodeName\u0026\u0026(n\u003dn.parentNode),n\u0026\u0026n.classList.contains(\"dropdown-menu\")){const e\u003dt.closest(\".dropdown\");e\u0026\u0026V.find(\".dropdown-toggle\",e).forEach((t\u003d\u003et.classList.add(Tn))),t.setAttribute(\"aria-expanded\",!0)}i\u0026\u0026i()}static jQueryInterface(t){return this.each((function(){const e\u003dxn.getOrCreateInstance(this);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}j.on(document,\"click.bs.tab.data-api\",\u0027[data-bs-toggle\u003d\"tab\"], [data-bs-toggle\u003d\"pill\"], [data-bs-toggle\u003d\"list\"]\u0027,(function(t){[\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn\u003d\"toast\",Sn\u003d\"hide\",Nn\u003d\"show\",In\u003d\"showing\",Pn\u003d{animation:\"boolean\",autohide:\"boolean\",delay:\"number\"},jn\u003d{animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config\u003dthis._getConfig(e),this._timeout\u003dnull,this._hasMouseInteraction\u003d!1,this._hasKeyboardInteraction\u003d!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,\"show.bs.toast\").defaultPrevented||(this._clearTimeout(),this._config.animation\u0026\u0026this._element.classList.add(\"fade\"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()\u003d\u003e{this._element.classList.remove(In),j.trigger(this._element,\"shown.bs.toast\"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)\u0026\u0026(j.trigger(this._element,\"hide.bs.toast\").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()\u003d\u003e{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,\"hidden.bs.toast\")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)\u0026\u0026this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t\u003d{...jn,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t\u0026\u0026t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide\u0026\u0026(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout\u003dsetTimeout((()\u003d\u003e{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case\"mouseover\":case\"mouseout\":this._hasMouseInteraction\u003de;break;case\"focusin\":case\"focusout\":this._hasKeyboardInteraction\u003de}if(e)return void this._clearTimeout();const i\u003dt.relatedTarget;this._element\u003d\u003d\u003di||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,\"mouseover.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!0))),j.on(this._element,\"mouseout.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!1))),j.on(this._element,\"focusin.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!0))),j.on(this._element,\"focusout.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout\u003dnull}static jQueryInterface(t){return this.each((function(){const e\u003dMn.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}}));"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"//# sourceMappingURL\u003dbootstrap.bundle.min.js.map"}],"authorContributionMap":{"KevinEyo1":7}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/js/markbind.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"!function(t,e){\"object\"\u003d\u003dtypeof exports\u0026\u0026\"object\"\u003d\u003dtypeof module?module.exports\u003de(require(\"Vue\")):\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define([\"Vue\"],e):\"object\"\u003d\u003dtypeof exports?exports.MarkBind\u003de(require(\"Vue\")):t.MarkBind\u003de(t.Vue)}(self,t\u003d\u003e(()\u003d\u003e{var e\u003d{605:()\u003d\u003e{function t(){document.querySelectorAll(\".\".concat(\"page-nav-clone\")).forEach((function(t){t.remove()}))}window.addEventListener(\"beforeprint\",(function(){var e\u003ddocument.querySelector(\"#\".concat(\"mb-page-nav\")),n\u003ddocument.querySelectorAll(\".\".concat(\"page-nav-print\"));e\u0026\u0026n.length\u003e\u003d1\u0026\u0026(t(),n.forEach((function(t){t.appendChild(function(t){var e\u003dt.cloneNode(!0);return e.removeAttribute(\"id\"),e.querySelectorAll(\"a.active\").forEach((function(t){t.classList.remove(\"active\")})),e.classList.add(\"page-nav-clone\"),e}(e))})))})),window.addEventListener(\"afterprint\",(function(){t()})),window.addEventListener(\"beforeprint\",(function(){document.querySelectorAll(\"pre \u003e code.hljs\").forEach((function(t){Array.from(t.querySelectorAll(\"span\")).some((function(t){return t.scrollWidth\u003et.clientWidth}))\u0026\u0026t.classList.add(\"line-numbers-print\")}))}))},3:t\u003d\u003e{t.exports\u003d{bind:function(t){function e(){t.dataset.isShown\u003d\"false\",r.style.display\u003d\"\",o.style.display\u003d\"none\",i.style.display\u003d\"none\"}function n(){t.dataset.isShown\u003d\"true\",r.style.display\u003d\"none\",i.style.display\u003d\"\"}t.dataset.isShown\u003d\"true\",t.style.position\u003d\"relative\";var i\u003ddocument.createElement(\"div\");i.classList.add(\"content\"),Array.from(t.children).forEach((function(t){return i.append(t)})),t.replaceChildren(),t.append(i),t.classList.add(\"closeable-wrapper\");var o\u003dfunction(){var t\u003ddocument.createElement(\"span\");return t.classList.add(\"closeable-button\",\"label\",\"label-default\",\"hidden-print\"),t.style.cssText+\u003d\"display: none; position: absolute; top: 0; left: 0; cursor: pointer;background: #d9534f\",t.innerHTML\u003d\u0027\u003cspan class\u003d\"glyphicon glyphicon-remove\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e\u0027,t.addEventListener(\"click\",e),t}();t.append(o);var r\u003dfunction(t){var e\u003ddocument.createElement(\"a\");return e.classList.add(\"closeable-show\",\"hidden-print\"),e.style.cssText+\u003d\"display: none; cursor: pointer;text-decoration: underline\",e.innerHTML\u003dt,e.addEventListener(\"click\",n),e}(t.getAttribute(\"alt\")||\"Expand Content\");t.append(r),t.addEventListener(\"mouseover\",(function(){\"false\"!\u003d\u003dt.dataset.isShown\u0026\u0026(o.style.display\u003d\"\")})),t.addEventListener(\"mouseout\",(function(){\"false\"!\u003d\u003dt.dataset.isShown\u0026\u0026(o.style.display\u003d\"none\")}))}}},383:(t,e,n)\u003d\u003e{\"use strict\";var i,o\u003d(i\u003dn(740))\u0026\u0026\"object\"\u003d\u003dtypeof i\u0026\u0026\"default\"in i?i.default:i;function r(t){return(r\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t})(t)}function s(t){return function(t){if(Array.isArray(t)){for(var e\u003d0,n\u003dnew Array(t.length);e\u003ct.length;e++)n[e]\u003dt[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||\"[object Arguments]\"\u003d\u003d\u003dObject.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}var a\u003d\"undefined\"!\u003dtypeof window;function l(t,e){return e.reduce((function(e,n){return t.hasOwnProperty(n)\u0026\u0026(e[n]\u003dt[n]),e}),{})}var c\u003d{},u\u003d{},d\u003d{},h\u003dnew(o.extend({data:function(){return{transports:c,targets:u,sources:d,trackInstances:a}},methods:{open:function(t){if(a){var e\u003dt.to,n\u003dt.from,i\u003dt.passengers,s\u003dt.order,l\u003dvoid 0\u003d\u003d\u003ds?1/0:s;if(e\u0026\u0026n\u0026\u0026i){var c,u\u003d{to:e,from:n,passengers:(c\u003di,Array.isArray(c)||\"object\"\u003d\u003d\u003dr(c)?Object.freeze(c):c),order:l};-1\u003d\u003d\u003dObject.keys(this.transports).indexOf(e)\u0026\u0026o.set(this.transports,e,[]);var d,h\u003dthis.$_getTransportIndex(u),p\u003dthis.transports[e].slice(0);-1\u003d\u003d\u003dh?p.push(u):p[h]\u003du,this.transports[e]\u003d(d\u003dfunction(t,e){return t.order-e.order},p.map((function(t,e){return[e,t]})).sort((function(t,e){return d(t[1],e[1])||t[0]-e[0]})).map((function(t){return t[1]})))}}},close:function(t){var e\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]\u0026\u0026arguments[1],n\u003dt.to,i\u003dt.from;if(n\u0026\u0026(i||!1!\u003d\u003de)\u0026\u0026this.transports[n])if(e)this.transports[n]\u003d[];else{var o\u003dthis.$_getTransportIndex(t);if(o\u003e\u003d0){var r\u003dthis.transports[n].slice(0);r.splice(o,1),this.transports[n]\u003dr}}},registerTarget:function(t,e,n){a\u0026\u0026(this.trackInstances\u0026\u0026!n\u0026\u0026this.targets[t]\u0026\u0026console.warn(\"[portal-vue]: Target \".concat(t,\" already exists\")),this.$set(this.targets,t,Object.freeze([e])))},unregisterTarget:function(t){this.$delete(this.targets,t)},registerSource:function(t,e,n){a\u0026\u0026(this.trackInstances\u0026\u0026!n\u0026\u0026this.sources[t]\u0026\u0026console.warn(\"[portal-vue]: source \".concat(t,\" already exists\")),this.$set(this.sources,t,Object.freeze([e])))},unregisterSource:function(t){this.$delete(this.sources,t)},hasTarget:function(t){return!(!this.targets[t]||!this.targets[t][0])},hasSource:function(t){return!(!this.sources[t]||!this.sources[t][0])},hasContentFor:function(t){return!!this.transports[t]\u0026\u0026!!this.transports[t].length},$_getTransportIndex:function(t){var e\u003dt.to,n\u003dt.from;for(var i in this.transports[e])if(this.transports[e][i].from\u003d\u003d\u003dn)return+i;return-1}}}))(c),p\u003d1,f\u003do.extend({name:\"portal\",props:{disabled:{type:Boolean},name:{type:String,default:function(){return String(p++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:\"DIV\"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}}},created:function(){var t\u003dthis;this.$nextTick((function(){h.registerSource(t.name,t)}))},mounted:function(){this.disabled||this.sendUpdate()},updated:function(){this.disabled?this.clear():this.sendUpdate()},beforeDestroy:function(){h.unregisterSource(this.name),this.clear()},watch:{to:function(t,e){e\u0026\u0026e!\u003d\u003dt\u0026\u0026this.clear(e),this.sendUpdate()}},methods:{clear:function(t){var e\u003d{from:this.name,to:t||this.to};h.close(e)},normalizeSlots:function(){return this.$scopedSlots.default?[this.$scopedSlots.default]:this.$slots.default},normalizeOwnChildren:function(t){return\"function\"\u003d\u003dtypeof t?t(this.slotProps):t},sendUpdate:function(){var t\u003dthis.normalizeSlots();if(t){var e\u003d{from:this.name,to:this.to,passengers:s(t),order:this.order};h.open(e)}else this.clear()}},render:function(t){var e\u003dthis.$slots.default||this.$scopedSlots.default||[],n\u003dthis.tag;return e\u0026\u0026this.disabled?e.length\u003c\u003d1\u0026\u0026this.slim?this.normalizeOwnChildren(e)[0]:t(n,[this.normalizeOwnChildren(e)]):this.slim?t():t(n,{class:{\"v-portal\":!0},style:{display:\"none\"},key:\"v-portal-placeholder\"})}}),m\u003do.extend({name:\"portalTarget\",props:{multiple:{type:Boolean,default:!1},name:{type:String,required:!0},slim:{type:Boolean,default:!1},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:\"div\"},transition:{type:[String,Object,Function]}},data:function(){return{transports:h.transports,firstRender:!0}},created:function(){var t\u003dthis;this.$nextTick((function(){h.registerTarget(t.name,t)}))},watch:{ownTransports:function(){this.$emit(\"change\",this.children().length\u003e0)},name:function(t,e){h.unregisterTarget(e),h.registerTarget(t,this)}},mounted:function(){var t\u003dthis;this.transition\u0026\u0026this.$nextTick((function(){t.firstRender\u003d!1}))},beforeDestroy:function(){h.unregisterTarget(this.name)},computed:{ownTransports:function(){var t\u003dthis.transports[this.name]||[];return this.multiple?t:0\u003d\u003d\u003dt.length?[]:[t[t.length-1]]},passengers:function(){return function(t){var e\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]?arguments[1]:{};return t.reduce((function(t,n){var i\u003dn.passengers[0],o\u003d\"function\"\u003d\u003dtypeof i?i(e):n.passengers;return t.concat(o)}),[])}(this.ownTransports,this.slotProps)}},methods:{children:function(){return 0!\u003d\u003dthis.passengers.length?this.passengers:this.$scopedSlots.default?this.$scopedSlots.default(this.slotProps):this.$slots.default||[]},noWrapper:function(){var t\u003dthis.slim\u0026\u0026!this.transition;return t\u0026\u0026this.children().length\u003e1\u0026\u0026console.warn(\"[portal-vue]: PortalTarget with `slim` option received more than one child element.\"),t}},render:function(t){var e\u003dthis.noWrapper(),n\u003dthis.children(),i\u003dthis.transition||this.tag;return e?n[0]:this.slim\u0026\u0026!i?t():t(i,{props:{tag:this.transition\u0026\u0026this.tag?this.tag:void 0},class:{\"vue-portal-target\":!0}},n)}}),v\u003d0,g\u003d[\"disabled\",\"name\",\"order\",\"slim\",\"slotProps\",\"tag\",\"to\"],y\u003d[\"multiple\",\"transition\"],w\u003do.extend({name:\"MountingPortal\",inheritAttrs:!1,props:{append:{type:[Boolean,String]},bail:{type:Boolean},mountTo:{type:String,required:!0},disabled:{type:Boolean},name:{type:String,default:function(){return\"mounted_\"+String(v++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:\"DIV\"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}},multiple:{type:Boolean,default:!1},targetSlim:{type:Boolean},targetSlotProps:{type:Object,default:function(){return{}}},targetTag:{type:String,default:\"div\"},transition:{type:[String,Object,Function]}},created:function(){if(\"undefined\"!\u003dtypeof document){var t\u003ddocument.querySelector(this.mountTo);if(t){var e\u003dthis.$props;if(h.targets[e.name])e.bail?console.warn(\"[portal-vue]: Target \".concat(e.name,\" is already mounted.\\n Aborting because \u0027bail: true\u0027 is set\")):this.portalTarget\u003dh.targets[e.name];else{var n\u003de.append;if(n){var i\u003d\"string\"\u003d\u003dtypeof n?n:\"DIV\",o\u003ddocument.createElement(i);t.appendChild(o),t\u003do}var r\u003dl(this.$props,y);r.slim\u003dthis.targetSlim,r.tag\u003dthis.targetTag,r.slotProps\u003dthis.targetSlotProps,r.name\u003dthis.to,this.portalTarget\u003dnew m({el:t,parent:this.$parent||this,propsData:r})}}else console.error(\"[portal-vue]: Mount Point \u0027\".concat(this.mountTo,\"\u0027 not found in document\"))}},beforeDestroy:function(){var t\u003dthis.portalTarget;if(this.append){var e\u003dt.$el;e.parentNode.removeChild(e)}t.$destroy()},render:function(t){if(!this.portalTarget)return console.warn(\"[portal-vue] Target wasn\u0027t mounted\"),t();if(!this.$scopedSlots.manual){var e\u003dl(this.$props,g);return t(f,{props:e,attrs:this.$attrs,on:this.$listeners,scopedSlots:this.$scopedSlots},this.$slots.default)}var n\u003dthis.$scopedSlots.manual({to:this.to});return Array.isArray(n)\u0026\u0026(n\u003dn[0]),n||t()}});e.h_\u003df,e.YC\u003dm},740:e\u003d\u003e{\"use strict\";e.exports\u003dt}},n\u003d{};function i(t){var o\u003dn[t];if(void 0!\u003d\u003do)return o.exports;var r\u003dn[t]\u003d{exports:{}};return e[t](r,r.exports,i),r.exports}i.n\u003dt\u003d\u003e{var e\u003dt\u0026\u0026t.__esModule?()\u003d\u003et.default:()\u003d\u003et;return i.d(e,{a:e}),e},i.d\u003d(t,e)\u003d\u003e{for(var n in e)i.o(e,n)\u0026\u0026!i.o(t,n)\u0026\u0026Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g\u003dfunction(){if(\"object\"\u003d\u003dtypeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"\u003d\u003dtypeof window)return window}}(),i.o\u003d(t,e)\u003d\u003eObject.prototype.hasOwnProperty.call(t,e);var o\u003d{};return(()\u003d\u003e{\"use strict\";function t(e){return(t\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t})(e)}function e(e){var n\u003dfunction(e,n){if(\"object\"!\u003d\u003dt(e)||null\u003d\u003d\u003de)return e;var i\u003de[Symbol.toPrimitive];if(void 0!\u003d\u003di){var o\u003di.call(e,n||\"default\");if(\"object\"!\u003d\u003dt(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"\u003d\u003d\u003dn?String:Number)(e)}(e,\"string\");return\"symbol\"\u003d\u003d\u003dt(n)?n:String(n)}function n(t,n,i){return(n\u003de(n))in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]\u003di,t}function r(t){return t.split(\"-\")[0]}function s(t){return t.split(\"-\")[1]}function a(t){return[\"top\",\"bottom\"].includes(r(t))?\"x\":\"y\"}function l(t){return\"y\"\u003d\u003d\u003dt?\"height\":\"width\"}function c(t){let{reference:e,floating:n,placement:i}\u003dt;const o\u003de.x+e.width/2-n.width/2,c\u003de.y+e.height/2-n.height/2;let u;switch(r(i)){case\"top\":u\u003d{x:o,y:e.y-n.height};break;case\"bottom\":u\u003d{x:o,y:e.y+e.height};break;case\"right\":u\u003d{x:e.x+e.width,y:c};break;case\"left\":u\u003d{x:e.x-n.width,y:c};break;default:u\u003d{x:e.x,y:e.y}}const d\u003da(i),h\u003dl(d);switch(s(i)){case\"start\":u[d]\u003du[d]-(e[h]/2-n[h]/2);break;case\"end\":u[d]\u003du[d]+(e[h]/2-n[h]/2)}return u}i.d(o,{default:()\u003d\u003eMo});function u(t){return\"number\"!\u003dtypeof t?function(t){return{top:0,right:0,bottom:0,left:0,...t}}(t):{top:t,right:t,bottom:t,left:t}}function d(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}async function h(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});const{x:n,y:i,platform:o,rects:r,elements:s,strategy:a}\u003dt,{boundary:l\u003d\"clippingParents\",rootBoundary:c\u003d\"viewport\",elementContext:h\u003d\"floating\",altBoundary:p\u003d!1,padding:f\u003d0}\u003de,m\u003du(f),v\u003ds[p?\"floating\"\u003d\u003d\u003dh?\"reference\":\"floating\":h],g\u003dawait o.getClippingClientRect({element:await o.isElement(v)?v:v.contextElement||await o.getDocumentElement({element:s.floating}),boundary:l,rootBoundary:c}),y\u003dd(await o.convertOffsetParentRelativeRectToViewportRelativeRect({rect:\"floating\"\u003d\u003d\u003dh?{...r.floating,x:n,y:i}:r.reference,offsetParent:await o.getOffsetParent({element:s.floating}),strategy:a}));return{top:g.top-y.top+m.top,bottom:y.bottom-g.bottom+m.bottom,left:g.left-y.left+m.left,right:y.right-g.right+m.right}}const p\u003dMath.min,f\u003dMath.max;function m(t,e,n){return f(t,p(e,n))}const v\u003d{left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function g(t){return t.replace(/left|right|bottom|top/g,t\u003d\u003ev[t])}function y(t,e){const n\u003d\"start\"\u003d\u003d\u003ds(t),i\u003da(t),o\u003dl(i);let r\u003d\"x\"\u003d\u003d\u003di?n?\"right\":\"left\":n?\"bottom\":\"top\";return e.reference[o]\u003ee.floating[o]\u0026\u0026(r\u003dg(r)),{main:r,cross:g(r)}}const w\u003d{start:\"end\",end:\"start\"};function b(t){return t.replace(/start|end/g,t\u003d\u003ew[t])}const _\u003d[\"top\",\"right\",\"bottom\",\"left\"],S\u003d_.reduce((t,e)\u003d\u003et.concat(e,e+\"-start\",e+\"-end\"),[]);const x\u003dfunction(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"autoPlacement\",options:t,async fn(e){var n,i,o,a,l,c;const{x:u,y:d,rects:p,middlewareData:f,placement:m}\u003de,{alignment:v\u003dnull,allowedPlacements:g\u003dS,autoAlignment:w\u003d!0,..._}\u003dt;if(null!\u003d(n\u003df.autoPlacement)\u0026\u0026n.skip)return{};const x\u003dfunction(t,e,n){return(t?[...n.filter(e\u003d\u003es(e)\u003d\u003d\u003dt),...n.filter(e\u003d\u003es(e)!\u003d\u003dt)]:n.filter(t\u003d\u003er(t)\u003d\u003d\u003dt)).filter(n\u003d\u003e!t||(s(n)\u003d\u003d\u003dt||!!e\u0026\u0026b(n)!\u003d\u003dn))}(v,w,g),C\u003dawait h(e,_),$\u003dnull!\u003d(i\u003dnull\u003d\u003d(o\u003df.autoPlacement)?void 0:o.index)?i:0,k\u003dx[$],{main:T,cross:E}\u003dy(k,p);if(m!\u003d\u003dk)return{x:u,y:d,reset:{placement:x[0]}};const O\u003d[C[r(k)],C[T],C[E]],B\u003d[...null!\u003d(a\u003dnull\u003d\u003d(l\u003df.autoPlacement)?void 0:l.overflows)?a:[],{placement:k,overflows:O}],P\u003dx[$+1];if(P)return{data:{index:$+1,overflows:B},reset:{placement:P}};const L\u003dB.slice().sort((t,e)\u003d\u003et.overflows[0]-e.overflows[0]),N\u003dnull\u003d\u003d(c\u003dL.find(t\u003d\u003e{let{overflows:e}\u003dt;return e.every(t\u003d\u003et\u003c\u003d0)}))?void 0:c.placement;return{data:{skip:!0},reset:{placement:null!\u003dN?N:L[0].placement}}}}};const C\u003dfunction(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"flip\",options:t,async fn(e){var n,i;const{placement:o,middlewareData:s,rects:a,initialPlacement:l}\u003de;if(null!\u003d(n\u003ds.flip)\u0026\u0026n.skip)return{};const{mainAxis:c\u003d!0,crossAxis:u\u003d!0,fallbackPlacements:d,fallbackStrategy:p\u003d\"bestFit\",flipAlignment:f\u003d!0,...m}\u003dt,v\u003dr(o),w\u003d[l,...d||(v\u003d\u003d\u003dl||!f?[g(l)]:function(t){const e\u003dg(t);return[b(t),e,b(e)]}(l))],_\u003dawait h(e,m),S\u003d[];let x\u003d(null\u003d\u003d(i\u003ds.flip)?void 0:i.overflows)||[];if(c\u0026\u0026S.push(_[v]),u){const{main:t,cross:e}\u003dy(o,a);S.push(_[t],_[e])}if(x\u003d[...x,{placement:o,overflows:S}],!S.every(t\u003d\u003et\u003c\u003d0)){var C,$;const t\u003d(null!\u003d(C\u003dnull\u003d\u003d($\u003ds.flip)?void 0:$.index)?C:0)+1,e\u003dw[t];if(e)return{data:{index:t,overflows:x},reset:{placement:e}};let n\u003d\"bottom\";switch(p){case\"bestFit\":{var k;const t\u003dnull\u003d\u003d(k\u003dx.slice().sort((t,e)\u003d\u003et.overflows.filter(t\u003d\u003et\u003e0).reduce((t,e)\u003d\u003et+e,0)-e.overflows.filter(t\u003d\u003et\u003e0).reduce((t,e)\u003d\u003et+e,0))[0])?void 0:k.placement;t\u0026\u0026(n\u003dt);break}case\"initialPlacement\":n\u003dl}return{data:{skip:!0},reset:{placement:n}}}return{}}}};const $\u003dfunction(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d0),{name:\"offset\",options:t,fn(e){const{x:n,y:i,placement:o,rects:s}\u003de,l\u003dfunction(t){let{placement:e,rects:n,value:i}\u003dt;const o\u003dr(e),s\u003d[\"left\",\"top\"].includes(o)?-1:1,l\u003d\"function\"\u003d\u003dtypeof i?i({...n,placement:e}):i,{mainAxis:c,crossAxis:u}\u003d\"number\"\u003d\u003dtypeof l?{mainAxis:l,crossAxis:0}:{mainAxis:0,crossAxis:0,...l};return\"x\"\u003d\u003d\u003da(o)?{x:u,y:c*s}:{x:c*s,y:u}}({placement:o,rects:s,value:t});return{x:n+l.x,y:i+l.y,data:l}}}};function k(t){return\"x\"\u003d\u003d\u003dt?\"y\":\"x\"}function T(t){return\"[object Window]\"\u003d\u003d\u003d(null\u003d\u003dt?void 0:t.toString())}function E(t){if(null\u003d\u003dt)return window;if(!T(t)){const e\u003dt.ownerDocument;return e\u0026\u0026e.defaultView||window}return t}function O(t){return E(t).getComputedStyle(t)}function B(t){return T(t)?\"\":t?(t.nodeName||\"\").toLowerCase():\"\"}function P(t){return t instanceof E(t).HTMLElement}function L(t){return t instanceof E(t).Element}function N(t){return t instanceof E(t).ShadowRoot||t instanceof ShadowRoot}function A(t){const{overflow:e,overflowX:n,overflowY:i}\u003dO(t);return/auto|scroll|overlay|hidden/.test(e+i+n)}function z(t){return[\"table\",\"td\",\"th\"].includes(B(t))}function M(t){const e\u003dnavigator.userAgent.toLowerCase().includes(\"firefox\"),n\u003dO(t);return\"none\"!\u003d\u003dn.transform||\"none\"!\u003d\u003dn.perspective||\"paint\"\u003d\u003d\u003dn.contain||[\"transform\",\"perspective\"].includes(n.willChange)||e\u0026\u0026\"filter\"\u003d\u003d\u003dn.willChange||e\u0026\u0026!!n.filter\u0026\u0026\"none\"!\u003d\u003dn.filter}const H\u003dMath.min,D\u003dMath.max,R\u003dMath.round;function j(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!1);const n\u003dt.getBoundingClientRect();let i\u003d1,o\u003d1;return e\u0026\u0026P(t)\u0026\u0026(i\u003dt.offsetWidth\u003e0\u0026\u0026R(n.width)/t.offsetWidth||1,o\u003dt.offsetHeight\u003e0\u0026\u0026R(n.height)/t.offsetHeight||1),{width:n.width/i,height:n.height/o,top:n.top/o,right:n.right/i,bottom:n.bottom/o,left:n.left/i,x:n.left/i,y:n.top/o}}function I(t){return(e\u003dt,(e instanceof E(e).Node?t.ownerDocument:t.document)||window.document).documentElement;var e}function q(t){return T(t)?{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}:{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function W(t){return j(I(t)).left+q(t).scrollLeft}function F(t,e,n){const i\u003dP(e),o\u003dI(e),r\u003dj(t,i\u0026\u0026function(t){const e\u003dj(t);return R(e.width)!\u003d\u003dt.offsetWidth||R(e.height)!\u003d\u003dt.offsetHeight}(e));let s\u003d{scrollLeft:0,scrollTop:0};const a\u003d{x:0,y:0};if(i||!i\u0026\u0026\"fixed\"!\u003d\u003dn)if((\"body\"!\u003d\u003dB(e)||A(o))\u0026\u0026(s\u003dq(e)),P(e)){const t\u003dj(e,!0);a.x\u003dt.x+e.clientLeft,a.y\u003dt.y+e.clientTop}else o\u0026\u0026(a.x\u003dW(o));return{x:r.left+s.scrollLeft-a.x,y:r.top+s.scrollTop-a.y,width:r.width,height:r.height}}function V(t){return\"html\"\u003d\u003d\u003dB(t)?t:t.assignedSlot||t.parentNode||(N(t)?t.host:null)||I(t)}function U(t){return P(t)\u0026\u0026\"fixed\"!\u003d\u003dgetComputedStyle(t).position?t.offsetParent:null}function Q(t){const e\u003dE(t);let n\u003dU(t);for(;n\u0026\u0026z(n)\u0026\u0026\"static\"\u003d\u003d\u003dgetComputedStyle(n).position;)n\u003dU(n);return n\u0026\u0026(\"html\"\u003d\u003d\u003dB(n)||\"body\"\u003d\u003d\u003dB(n)\u0026\u0026\"static\"\u003d\u003d\u003dgetComputedStyle(n).position\u0026\u0026!M(n))?e:n||function(t){let e\u003dV(t);for(;P(e)\u0026\u0026![\"html\",\"body\"].includes(B(e));){if(M(e))return e;e\u003de.parentNode}return null}(t)||e}function X(t){return{width:t.offsetWidth,height:t.offsetHeight}}function Y(t,e){var n;void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[]);const i\u003dfunction t(e){return[\"html\",\"body\",\"#document\"].includes(B(e))?e.ownerDocument.body:P(e)\u0026\u0026A(e)?e:t(V(e))}(t),o\u003di\u003d\u003d\u003d(null\u003d\u003d(n\u003dt.ownerDocument)?void 0:n.body),r\u003dE(i),s\u003do?[r].concat(r.visualViewport||[],A(i)?i:[]):i,a\u003de.concat(s);return o?a:a.concat(Y(V(s)))}function K(t,e){return\"viewport\"\u003d\u003d\u003de?d(function(t){const e\u003dE(t),n\u003dI(t),i\u003de.visualViewport;let o\u003dn.clientWidth,r\u003dn.clientHeight,s\u003d0,a\u003d0;return i\u0026\u0026(o\u003di.width,r\u003di.height,Math.abs(e.innerWidth/i.scale-i.width)\u003c.01\u0026\u0026(s\u003di.offsetLeft,a\u003di.offsetTop)),{width:o,height:r,x:s,y:a}}(t)):L(e)?function(t){const e\u003dj(t),n\u003de.top+t.clientTop,i\u003de.left+t.clientLeft;return{top:n,left:i,x:i,y:n,right:i+t.clientWidth,bottom:n+t.clientHeight,width:t.clientWidth,height:t.clientHeight}}(e):d(function(t){var e;const n\u003dI(t),i\u003dq(t),o\u003dnull\u003d\u003d(e\u003dt.ownerDocument)?void 0:e.body,r\u003dD(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s\u003dD(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0);let a\u003d-i.scrollLeft+W(t);const l\u003d-i.scrollTop;return\"rtl\"\u003d\u003d\u003dO(o||n).direction\u0026\u0026(a+\u003dD(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(I(t)))}function G(t){const e\u003dY(V(t)),n\u003d[\"absolute\",\"fixed\"].includes(O(t).position)\u0026\u0026P(t)?Q(t):t;return L(n)?e.filter(t\u003d\u003eL(t)\u0026\u0026function(t,e){const n\u003dnull\u003d\u003de.getRootNode?void 0:e.getRootNode();if(t.contains(e))return!0;if(n\u0026\u0026N(n)){let n\u003de;do{if(n\u0026\u0026t\u003d\u003d\u003dn)return!0;n\u003dn.parentNode||n.host}while(n)}return!1}(t,n)\u0026\u0026\"body\"!\u003d\u003dB(t)):[]}const Z\u003d{getElementRects:t\u003d\u003e{let{reference:e,floating:n,strategy:i}\u003dt;return{reference:F(e,Q(n),i),floating:{...X(n),x:0,y:0}}},convertOffsetParentRelativeRectToViewportRelativeRect:t\u003d\u003efunction(t){let{rect:e,offsetParent:n,strategy:i}\u003dt;const o\u003dP(n),r\u003dI(n);if(n\u003d\u003d\u003dr)return e;let s\u003d{scrollLeft:0,scrollTop:0};const a\u003d{x:0,y:0};if((o||!o\u0026\u0026\"fixed\"!\u003d\u003di)\u0026\u0026((\"body\"!\u003d\u003dB(n)||A(r))\u0026\u0026(s\u003dq(n)),P(n))){const t\u003dj(n,!0);a.x\u003dt.x+n.clientLeft,a.y\u003dt.y+n.clientTop}return{...e,x:e.x-s.scrollLeft+a.x,y:e.y-s.scrollTop+a.y}}(t),getOffsetParent:t\u003d\u003e{let{element:e}\u003dt;return Q(e)},isElement:t\u003d\u003eL(t),getDocumentElement:t\u003d\u003e{let{element:e}\u003dt;return I(e)},getClippingClientRect:t\u003d\u003efunction(t){let{element:e,boundary:n,rootBoundary:i}\u003dt;const o\u003d[...\"clippingParents\"\u003d\u003d\u003dn?G(e):[].concat(n),i],r\u003do[0],s\u003do.reduce((t,n)\u003d\u003e{const i\u003dK(e,n);return t.top\u003dD(i.top,t.top),t.right\u003dH(i.right,t.right),t.bottom\u003dH(i.bottom,t.bottom),t.left\u003dD(i.left,t.left),t},K(e,r));return s.width\u003ds.right-s.left,s.height\u003ds.bottom-s.top,s.x\u003ds.left,s.y\u003ds.top,s}(t),getDimensions:t\u003d\u003e{let{element:e}\u003dt;return X(e)},getClientRects:t\u003d\u003e{let{element:e}\u003dt;return e.getClientRects()}},J\u003d(t,e,n)\u003d\u003e(async(t,e,n)\u003d\u003e{const{placement:i\u003d\"bottom\",strategy:o\u003d\"absolute\",middleware:r\u003d[],platform:s}\u003dn;let a\u003dawait s.getElementRects({reference:t,floating:e,strategy:o}),{x:l,y:u}\u003dc({...a,placement:i}),d\u003di,h\u003d{};for(let n\u003d0;n\u003cr.length;n++){0;const{name:p,fn:f}\u003dr[n],{x:m,y:v,data:g,reset:y}\u003dawait f({x:l,y:u,initialPlacement:i,placement:d,strategy:o,middlewareData:h,rects:a,platform:s,elements:{reference:t,floating:e}});l\u003dnull!\u003dm?m:l,u\u003dnull!\u003dv?v:u,h\u003d{...h,[p]:null!\u003dg?g:{}},y\u0026\u0026(\"object\"\u003d\u003dtypeof y\u0026\u0026(y.placement\u0026\u0026(d\u003dy.placement),y.rects\u0026\u0026(a\u003d!0\u003d\u003d\u003dy.rects?await s.getElementRects({reference:t,floating:e,strategy:o}):y.rects),({x:l,y:u}\u003dc({...a,placement:d}))),n\u003d-1)}return{x:l,y:u,placement:d,strategy:o,middlewareData:h}})(t,e,{platform:Z,...n});var tt\u003di(740),et\u003di.n(tt),nt\u003dObject.defineProperty,it\u003dObject.defineProperties,ot\u003dObject.getOwnPropertyDescriptors,rt\u003dObject.getOwnPropertySymbols,st\u003dObject.prototype.hasOwnProperty,at\u003dObject.prototype.propertyIsEnumerable,lt\u003d(t,e,n)\u003d\u003ee in t?nt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]\u003dn,ct\u003d(t,e)\u003d\u003e{for(var n in e||(e\u003d{}))st.call(e,n)\u0026\u0026lt(t,n,e[n]);if(rt)for(var n of rt(e))at.call(e,n)\u0026\u0026lt(t,n,e[n]);return t},ut\u003d(t,e)\u003d\u003eit(t,ot(e));const dt\u003d{disabled:!1,distance:5,skidding:0,container:\"body\",boundary:void 0,instantMove:!1,disposeTimeout:5e3,popperTriggers:[],strategy:\"absolute\",preventOverflow:!0,flip:!0,shift:!0,overflowPadding:0,arrowPadding:0,arrowOverflow:!0,themes:{tooltip:{placement:\"top\",triggers:[\"hover\",\"focus\",\"touch\"],hideTriggers:t\u003d\u003e[...t,\"click\"],delay:{show:200,hide:0},handleResize:!1,html:!1,loadingContent:\"...\"},dropdown:{placement:\"bottom\",triggers:[\"click\"],delay:0,handleResize:!0,autoHide:!0},menu:{$extend:\"dropdown\",triggers:[\"hover\",\"focus\"],popperTriggers:[\"hover\",\"focus\"],delay:{show:0,hide:400}}}};function ht(t,e){let n,i\u003ddt.themes[t]||{};do{n\u003di[e],void 0\u003d\u003d\u003dn?i.$extend?i\u003ddt.themes[i.$extend]||{}:(i\u003dnull,n\u003ddt[e]):i\u003dnull}while(i);return n}let pt\u003d!1;if(\"undefined\"!\u003dtypeof window){pt\u003d!1;try{const t\u003dObject.defineProperty({},\"passive\",{get(){pt\u003d!0}});window.addEventListener(\"test\",null,t)}catch(t){}}let ft\u003d!1;\"undefined\"!\u003dtypeof window\u0026\u0026\"undefined\"!\u003dtypeof navigator\u0026\u0026(ft\u003d/iPad|iPhone|iPod/.test(navigator.userAgent)\u0026\u0026!window.MSStream);const mt\u003d[\"auto\",\"top\",\"bottom\",\"left\",\"right\"].reduce((t,e)\u003d\u003et.concat([e,e+\"-start\",e+\"-end\"]),[]),vt\u003d{hover:\"mouseenter\",focus:\"focus\",click:\"click\",touch:\"touchstart\"},gt\u003d{hover:\"mouseleave\",focus:\"blur\",click:\"click\",touch:\"touchend\"};function yt(){return new Promise(t\u003d\u003erequestAnimationFrame(()\u003d\u003e{requestAnimationFrame(t)}))}const wt\u003d[];let bt\u003dnull,_t\u003dfunction(){};function St(t){return function(){return ht(this.$props.theme,t)}}\"undefined\"!\u003dtypeof window\u0026\u0026(_t\u003dwindow.Element);const xt\u003d\"__floating-vue__popper\";var Ct\u003d()\u003d\u003e({name:\"VPopper\",props:{theme:{type:String,required:!0},targetNodes:{type:Function,required:!0},referenceNode:{type:Function,required:!0},popperNode:{type:Function,required:!0},shown:{type:Boolean,default:!1},showGroup:{type:String,default:null},ariaId:{default:null},disabled:{type:Boolean,default:St(\"disabled\")},positioningDisabled:{type:Boolean,default:St(\"positioningDisabled\")},placement:{type:String,default:St(\"placement\"),validator:t\u003d\u003emt.includes(t)},delay:{type:[String,Number,Object],default:St(\"delay\")},distance:{type:[Number,String],default:St(\"distance\")},skidding:{type:[Number,String],default:St(\"skidding\")},triggers:{type:Array,default:St(\"triggers\")},showTriggers:{type:[Array,Function],default:St(\"showTriggers\")},hideTriggers:{type:[Array,Function],default:St(\"hideTriggers\")},popperTriggers:{type:Array,default:St(\"popperTriggers\")},popperShowTriggers:{type:[Array,Function],default:St(\"popperShowTriggers\")},popperHideTriggers:{type:[Array,Function],default:St(\"popperHideTriggers\")},container:{type:[String,Object,_t,Boolean],default:St(\"container\")},boundary:{type:[String,_t],default:St(\"boundary\")},strategy:{type:String,validator:t\u003d\u003e[\"absolute\",\"fixed\"].includes(t),default:St(\"strategy\")},autoHide:{type:Boolean,default:St(\"autoHide\")},handleResize:{type:Boolean,default:St(\"handleResize\")},instantMove:{type:Boolean,default:St(\"instantMove\")},eagerMount:{type:Boolean,default:St(\"eagerMount\")},popperClass:{type:[String,Array,Object],default:St(\"popperClass\")},computeTransformOrigin:{type:Boolean,default:St(\"computeTransformOrigin\")},autoMinSize:{type:Boolean,default:St(\"autoMinSize\")},autoSize:{type:[Boolean,String],default:St(\"autoSize\")},autoMaxSize:{type:Boolean,default:St(\"autoMaxSize\")},autoBoundaryMaxSize:{type:Boolean,default:St(\"autoBoundaryMaxSize\")},preventOverflow:{type:Boolean,default:St(\"preventOverflow\")},overflowPadding:{type:[Number,String],default:St(\"overflowPadding\")},arrowPadding:{type:[Number,String],default:St(\"arrowPadding\")},arrowOverflow:{type:Boolean,default:St(\"arrowOverflow\")},flip:{type:Boolean,default:St(\"flip\")},shift:{type:Boolean,default:St(\"shift\")},shiftCrossAxis:{type:Boolean,default:St(\"shiftCrossAxis\")}},provide(){return{[xt]:{parentPopper:this}}},inject:{[xt]:{default:null}},data(){return{isShown:!1,isMounted:!1,skipTransition:!1,classes:{showFrom:!1,showTo:!1,hideFrom:!1,hideTo:!0},result:{x:0,y:0,placement:\"\",strategy:this.strategy,arrow:{x:0,y:0,centerOffset:0},transformOrigin:null},shownChildren:new Set}},computed:{popperId(){return null!\u003dthis.ariaId?this.ariaId:this.randomId},shouldMountContent(){return this.eagerMount||this.isMounted},slotData(){return{popperId:this.popperId,isShown:this.isShown,shouldMountContent:this.shouldMountContent,skipTransition:this.skipTransition,autoHide:this.autoHide,show:this.show,hide:this.hide,handleResize:this.handleResize,onResize:this.onResize,classes:ut(ct({},this.classes),{popperClass:this.popperClass}),result:this.positioningDisabled?null:this.result}},parentPopper(){var t;return null\u003d\u003d(t\u003dthis[xt])?void 0:t.parentPopper}},watch:ct(ct({shown:\"$_autoShowHide\",disabled(t){t?this.dispose():this.init()},async container(){this.isShown\u0026\u0026(this.$_ensureTeleport(),await this.$_computePosition())}},[\"triggers\",\"positioningDisabled\"].reduce((t,e)\u003d\u003e(t[e]\u003d\"$_refreshListeners\",t),{})),[\"placement\",\"distance\",\"skidding\",\"boundary\",\"strategy\",\"overflowPadding\",\"arrowPadding\",\"preventOverflow\",\"shift\",\"shiftCrossAxis\",\"flip\"].reduce((t,e)\u003d\u003e(t[e]\u003d\"$_computePosition\",t),{})),created(){this.$_isDisposed\u003d!0,this.randomId\u003d\"popper_\"+[Math.random(),Date.now()].map(t\u003d\u003et.toString(36).substring(2,10)).join(\"_\"),this.autoMinSize\u0026\u0026console.warn(\u0027[floating-vue] `autoMinSize` option is deprecated. Use `autoSize\u003d\"min\"` instead.\u0027),this.autoMaxSize\u0026\u0026console.warn(\"[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead.\")},mounted(){this.init(),this.$_detachPopperNode()},activated(){this.$_autoShowHide()},deactivated(){this.hide()},beforeDestroy(){this.dispose()},methods:{show({event:t\u003dnull,skipDelay:e\u003d!1,force:n\u003d!1}\u003d{}){var i,o;(null\u003d\u003d(i\u003dthis.parentPopper)?void 0:i.lockedChild)\u0026\u0026this.parentPopper.lockedChild!\u003d\u003dthis||(this.$_pendingHide\u003d!1,!n\u0026\u0026this.disabled||((null\u003d\u003d(o\u003dthis.parentPopper)?void 0:o.lockedChild)\u003d\u003d\u003dthis\u0026\u0026(this.parentPopper.lockedChild\u003dnull),this.$_scheduleShow(t,e),this.$emit(\"show\"),this.$_showFrameLocked\u003d!0,requestAnimationFrame(()\u003d\u003e{this.$_showFrameLocked\u003d!1})),this.$emit(\"update:shown\",!0))},hide({event:t\u003dnull,skipDelay:e\u003d!1}\u003d{}){var n;this.$_hideInProgress||(this.shownChildren.size\u003e0?this.$_pendingHide\u003d!0:this.$_isAimingPopper()?this.parentPopper\u0026\u0026(this.parentPopper.lockedChild\u003dthis,clearTimeout(this.parentPopper.lockedChildTimer),this.parentPopper.lockedChildTimer\u003dsetTimeout(()\u003d\u003e{this.parentPopper.lockedChild\u003d\u003d\u003dthis\u0026\u0026(this.parentPopper.lockedChild.hide({skipDelay:e}),this.parentPopper.lockedChild\u003dnull)},1e3)):((null\u003d\u003d(n\u003dthis.parentPopper)?void 0:n.lockedChild)\u003d\u003d\u003dthis\u0026\u0026(this.parentPopper.lockedChild\u003dnull),this.$_pendingHide\u003d!1,this.$_scheduleHide(t,e),this.$emit(\"hide\"),this.$emit(\"update:shown\",!1)))},init(){this.$_isDisposed\u0026\u0026(this.$_isDisposed\u003d!1,this.isMounted\u003d!1,this.$_events\u003d[],this.$_preventShow\u003d!1,this.$_referenceNode\u003dthis.referenceNode(),this.$_targetNodes\u003dthis.targetNodes().filter(t\u003d\u003et.nodeType\u003d\u003d\u003dt.ELEMENT_NODE),this.$_popperNode\u003dthis.popperNode(),this.$_innerNode\u003dthis.$_popperNode.querySelector(\".v-popper__inner\"),this.$_arrowNode\u003dthis.$_popperNode.querySelector(\".v-popper__arrow-container\"),this.$_swapTargetAttrs(\"title\",\"data-original-title\"),this.$_detachPopperNode(),this.triggers.length\u0026\u0026this.$_addEventListeners(),this.shown\u0026\u0026this.show())},dispose(){this.$_isDisposed||(this.$_isDisposed\u003d!0,this.$_removeEventListeners(),this.hide({skipDelay:!0}),this.$_detachPopperNode(),this.isMounted\u003d!1,this.isShown\u003d!1,this.$_updateParentShownChildren(!1),this.$_swapTargetAttrs(\"data-original-title\",\"title\"),this.$emit(\"dispose\"))},async onResize(){this.isShown\u0026\u0026(await this.$_computePosition(),this.$emit(\"resize\"))},async $_computePosition(){var t;if(this.$_isDisposed||this.positioningDisabled)return;const e\u003d{strategy:this.strategy,middleware:[]};(this.distance||this.skidding)\u0026\u0026e.middleware.push($({mainAxis:this.distance,crossAxis:this.skidding}));const n\u003dthis.placement.startsWith(\"auto\");if(n?e.middleware.push(x({alignment:null!\u003d(t\u003dthis.placement.split(\"-\")[1])?t:\"\"})):e.placement\u003dthis.placement,this.preventOverflow\u0026\u0026(this.shift\u0026\u0026e.middleware.push(function(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"shift\",options:t,async fn(e){const{x:n,y:i,placement:o}\u003de,{mainAxis:s\u003d!0,crossAxis:l\u003d!1,limiter:c\u003d{fn:t\u003d\u003e{let{x:e,y:n}\u003dt;return{x:e,y:n}}},...u}\u003dt,d\u003d{x:n,y:i},p\u003dawait h(e,u),f\u003da(r(o)),v\u003dk(f);let g\u003dd[f],y\u003dd[v];if(s){const t\u003d\"y\"\u003d\u003d\u003df?\"bottom\":\"right\";g\u003dm(g+p[\"y\"\u003d\u003d\u003df?\"top\":\"left\"],g,g-p[t])}if(l){const t\u003d\"y\"\u003d\u003d\u003dv?\"bottom\":\"right\";y\u003dm(y+p[\"y\"\u003d\u003d\u003dv?\"top\":\"left\"],y,y-p[t])}const w\u003dc.fn({...e,[f]:g,[v]:y});return{...w,data:{x:w.x-n,y:w.y-i}}}}}({padding:this.overflowPadding,boundary:this.boundary,crossAxis:this.shiftCrossAxis})),!n\u0026\u0026this.flip\u0026\u0026e.middleware.push(C({padding:this.overflowPadding,boundary:this.boundary}))),e.middleware.push((t\u003d\u003e({name:\"arrow\",options:t,async fn(e){const{element:n,padding:i\u003d0}\u003dnull!\u003dt?t:{},{x:o,y:s,placement:c,rects:d,platform:h}\u003de;if(null\u003d\u003dn)return{};const p\u003du(i),f\u003d{x:o,y:s},v\u003da(r(c)),g\u003dl(v),y\u003dawait h.getDimensions({element:n}),w\u003d\"y\"\u003d\u003d\u003dv?\"top\":\"left\",b\u003d\"y\"\u003d\u003d\u003dv?\"bottom\":\"right\",_\u003dd.reference[g]+d.reference[v]-f[v]-d.floating[g],S\u003df[v]-d.reference[v],x\u003dawait h.getOffsetParent({element:n}),C\u003dx?\"y\"\u003d\u003d\u003dv?x.clientHeight||0:x.clientWidth||0:0,$\u003d_/2-S/2,k\u003dp[w],T\u003dC-y[g]-p[b],E\u003dC/2-y[g]/2+$,O\u003dm(k,E,T);return{data:{[v]:O,centerOffset:E-O}}}}))({element:this.$_arrowNode,padding:this.arrowPadding})),this.arrowOverflow\u0026\u0026e.middleware.push({name:\"arrowOverflow\",fn:({placement:t,rects:e,middlewareData:n})\u003d\u003e{let i;const{centerOffset:o}\u003dn.arrow;return i\u003dt.startsWith(\"top\")||t.startsWith(\"bottom\")?Math.abs(o)\u003ee.reference.width/2:Math.abs(o)\u003ee.reference.height/2,{data:{overflow:i}}}}),this.autoMinSize||this.autoSize){const t\u003dthis.autoSize?this.autoSize:this.autoMinSize?\"min\":null;e.middleware.push({name:\"autoSize\",fn:({rects:e,placement:n,middlewareData:i})\u003d\u003e{var o;if(null\u003d\u003d(o\u003di.autoSize)?void 0:o.skip)return{};let r,s;return n.startsWith(\"top\")||n.startsWith(\"bottom\")?r\u003de.reference.width:s\u003de.reference.height,this.$_innerNode.style[\"min\"\u003d\u003d\u003dt?\"minWidth\":\"max\"\u003d\u003d\u003dt?\"maxWidth\":\"width\"]\u003dnull!\u003dr?r+\"px\":null,this.$_innerNode.style[\"min\"\u003d\u003d\u003dt?\"minHeight\":\"max\"\u003d\u003d\u003dt?\"maxHeight\":\"height\"]\u003dnull!\u003ds?s+\"px\":null,{data:{skip:!0},reset:{rects:!0}}}})}(this.autoMaxSize||this.autoBoundaryMaxSize)\u0026\u0026(this.$_innerNode.style.maxWidth\u003dnull,this.$_innerNode.style.maxHeight\u003dnull,e.middleware.push(function(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"size\",options:t,async fn(e){var n;const{placement:i,rects:o,middlewareData:a}\u003de,{apply:l,...c}\u003dt;if(null!\u003d(n\u003da.size)\u0026\u0026n.skip)return{};const u\u003dawait h(e,c),d\u003dr(i),p\u003d\"end\"\u003d\u003d\u003ds(i);let m,v;\"top\"\u003d\u003d\u003dd||\"bottom\"\u003d\u003d\u003dd?(m\u003dd,v\u003dp?\"left\":\"right\"):(v\u003dd,m\u003dp?\"top\":\"bottom\");const g\u003df(u.left,0),y\u003df(u.right,0),w\u003df(u.top,0),b\u003df(u.bottom,0),_\u003d{height:o.floating.height-([\"left\",\"right\"].includes(i)?2*(0!\u003d\u003dw||0!\u003d\u003db?w+b:f(u.top,u.bottom)):u[m]),width:o.floating.width-([\"top\",\"bottom\"].includes(i)?2*(0!\u003d\u003dg||0!\u003d\u003dy?g+y:f(u.left,u.right)):u[v])};return null\u003d\u003dl||l({..._,...o}),{data:{skip:!0},reset:{rects:!0}}}}}({boundary:this.boundary,padding:this.overflowPadding,apply:({width:t,height:e})\u003d\u003e{this.$_innerNode.style.maxWidth\u003dnull!\u003dt?t+\"px\":null,this.$_innerNode.style.maxHeight\u003dnull!\u003de?e+\"px\":null}})));const i\u003dawait J(this.$_referenceNode,this.$_popperNode,e);Object.assign(this.result,{x:i.x,y:i.y,placement:i.placement,strategy:i.strategy,arrow:ct(ct({},i.middlewareData.arrow),i.middlewareData.arrowOverflow)})},$_scheduleShow(t\u003dnull,e\u003d!1){if(this.$_updateParentShownChildren(!0),this.$_hideInProgress\u003d!1,clearTimeout(this.$_scheduleTimer),bt\u0026\u0026this.instantMove\u0026\u0026bt.instantMove\u0026\u0026bt!\u003d\u003dthis.parentPopper)return bt.$_applyHide(!0),void this.$_applyShow(!0);e?this.$_applyShow():this.$_scheduleTimer\u003dsetTimeout(this.$_applyShow.bind(this),this.$_computeDelay(\"show\"))},$_scheduleHide(t\u003dnull,e\u003d!1){this.shownChildren.size\u003e0?this.$_pendingHide\u003d!0:(this.$_updateParentShownChildren(!1),this.$_hideInProgress\u003d!0,clearTimeout(this.$_scheduleTimer),this.isShown\u0026\u0026(bt\u003dthis),e?this.$_applyHide():this.$_scheduleTimer\u003dsetTimeout(this.$_applyHide.bind(this),this.$_computeDelay(\"hide\")))},$_computeDelay(t){const e\u003dthis.delay;return parseInt(e\u0026\u0026e[t]||e||0)},async $_applyShow(t\u003d!1){clearTimeout(this.$_disposeTimer),clearTimeout(this.$_scheduleTimer),this.skipTransition\u003dt,this.isShown||(this.$_ensureTeleport(),await yt(),await this.$_computePosition(),await this.$_applyShowEffect(),this.positioningDisabled||this.$_registerEventListeners([...Y(this.$_referenceNode),...Y(this.$_popperNode)],\"scroll\",()\u003d\u003e{this.$_computePosition()}))},async $_applyShowEffect(){if(this.$_hideInProgress)return;if(this.computeTransformOrigin){const t\u003dthis.$_referenceNode.getBoundingClientRect(),e\u003dthis.$_popperNode.querySelector(\".v-popper__wrapper\"),n\u003de.parentNode.getBoundingClientRect(),i\u003dt.x+t.width/2-(n.left+e.offsetLeft),o\u003dt.y+t.height/2-(n.top+e.offsetTop);this.result.transformOrigin\u003d`${i}px ${o}px`}this.isShown\u003d!0,this.$_applyAttrsToTarget({\"aria-describedby\":this.popperId,\"data-popper-shown\":\"\"});const t\u003dthis.showGroup;if(t){let e;for(let n\u003d0;n\u003cwt.length;n++)e\u003dwt[n],e.showGroup!\u003d\u003dt\u0026\u0026(e.hide(),e.$emit(\"close-group\"))}wt.push(this),this.$emit(\"apply-show\"),this.classes.showFrom\u003d!0,this.classes.showTo\u003d!1,this.classes.hideFrom\u003d!1,this.classes.hideTo\u003d!1,await yt(),this.classes.showFrom\u003d!1,this.classes.showTo\u003d!0},async $_applyHide(t\u003d!1){if(this.shownChildren.size\u003e0)return this.$_pendingHide\u003d!0,void(this.$_hideInProgress\u003d!1);if(clearTimeout(this.$_scheduleTimer),!this.isShown)return;this.skipTransition\u003dt,function(t,e){const n\u003dt.indexOf(e);-1!\u003d\u003dn\u0026\u0026t.splice(n,1)}(wt,this),bt\u003d\u003d\u003dthis\u0026\u0026(bt\u003dnull),this.isShown\u003d!1,this.$_applyAttrsToTarget({\"aria-describedby\":void 0,\"data-popper-shown\":void 0}),clearTimeout(this.$_disposeTimer);const e\u003dht(this.theme,\"disposeTimeout\");null!\u003d\u003de\u0026\u0026(this.$_disposeTimer\u003dsetTimeout(()\u003d\u003e{this.$_popperNode\u0026\u0026(this.$_detachPopperNode(),this.isMounted\u003d!1)},e)),this.$_removeEventListeners(\"scroll\"),this.$emit(\"apply-hide\"),this.classes.showFrom\u003d!1,this.classes.showTo\u003d!1,this.classes.hideFrom\u003d!0,this.classes.hideTo\u003d!1,await yt(),this.classes.hideFrom\u003d!1,this.classes.hideTo\u003d!0},$_autoShowHide(){this.shown?this.show():this.hide()},$_ensureTeleport(){if(this.$_isDisposed)return;let t\u003dthis.container;if(\"string\"\u003d\u003dtypeof t?t\u003dwindow.document.querySelector(t):!1\u003d\u003d\u003dt\u0026\u0026(t\u003dthis.$_targetNodes[0].parentNode),!t)throw new Error(\"No container for popover: \"+this.container);t.appendChild(this.$_popperNode),this.isMounted\u003d!0},$_addEventListeners(){const t\u003dt\u003d\u003e{this.isShown\u0026\u0026!this.$_hideInProgress||(t.usedByTooltip\u003d!0,!this.$_preventShow\u0026\u0026this.show({event:t}))};this.$_registerTriggerListeners(this.$_targetNodes,vt,this.triggers,this.showTriggers,t),this.$_registerTriggerListeners([this.$_popperNode],vt,this.popperTriggers,this.popperShowTriggers,t);const e\u003dt\u003d\u003e{t.usedByTooltip||this.hide({event:t})};this.$_registerTriggerListeners(this.$_targetNodes,gt,this.triggers,this.hideTriggers,e),this.$_registerTriggerListeners([this.$_popperNode],gt,this.popperTriggers,this.popperHideTriggers,e)},$_registerEventListeners(t,e,n){this.$_events.push({targetNodes:t,eventType:e,handler:n}),t.forEach(t\u003d\u003et.addEventListener(e,n,pt?{passive:!0}:void 0))},$_registerTriggerListeners(t,e,n,i,o){let r\u003dn;null!\u003di\u0026\u0026(r\u003d\"function\"\u003d\u003dtypeof i?i(r):i),r.forEach(n\u003d\u003e{const i\u003de[n];i\u0026\u0026this.$_registerEventListeners(t,i,o)})},$_removeEventListeners(t){const e\u003d[];this.$_events.forEach(n\u003d\u003e{const{targetNodes:i,eventType:o,handler:r}\u003dn;t\u0026\u0026t!\u003d\u003do?e.push(n):i.forEach(t\u003d\u003et.removeEventListener(o,r))}),this.$_events\u003de},$_refreshListeners(){this.$_isDisposed||(this.$_removeEventListeners(),this.$_addEventListeners())},$_handleGlobalClose(t,e\u003d!1){this.$_showFrameLocked||(this.hide({event:t}),t.closePopover?this.$emit(\"close-directive\"):this.$emit(\"auto-hide\"),e\u0026\u0026(this.$_preventShow\u003d!0,setTimeout(()\u003d\u003e{this.$_preventShow\u003d!1},300)))},$_detachPopperNode(){this.$_popperNode.parentNode\u0026\u0026this.$_popperNode.parentNode.removeChild(this.$_popperNode)},$_swapTargetAttrs(t,e){for(const n of this.$_targetNodes){const i\u003dn.getAttribute(t);i\u0026\u0026(n.removeAttribute(t),n.setAttribute(e,i))}},$_applyAttrsToTarget(t){for(const e of this.$_targetNodes)for(const n in t){const i\u003dt[n];null\u003d\u003di?e.removeAttribute(n):e.setAttribute(n,i)}},$_updateParentShownChildren(t){let e\u003dthis.parentPopper;for(;e;)t?e.shownChildren.add(this.randomId):(e.shownChildren.delete(this.randomId),e.$_pendingHide\u0026\u0026e.hide()),e\u003de.parentPopper},$_isAimingPopper(){const t\u003dthis.$el.getBoundingClientRect();if(Pt\u003e\u003dt.left\u0026\u0026Pt\u003c\u003dt.right\u0026\u0026Lt\u003e\u003dt.top\u0026\u0026Lt\u003c\u003dt.bottom){const t\u003dthis.$_popperNode.getBoundingClientRect(),e\u003dPt-Ot,n\u003dLt-Bt,i\u003dt.left+t.width/2-Ot+(t.top+t.height/2)-Bt+t.width+t.height,o\u003dOt+e*i,r\u003dBt+n*i;return Nt(Ot,Bt,o,r,t.left,t.top,t.left,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.top,t.right,t.top)||Nt(Ot,Bt,o,r,t.right,t.top,t.right,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.bottom,t.right,t.bottom)}return!1}},render(){return this.$scopedSlots.default(this.slotData)[0]}});function $t(t){for(let e\u003d0;e\u003cwt.length;e++){const n\u003dwt[e];try{const e\u003dn.popperNode();n.$_mouseDownContains\u003de.contains(t.target)}catch(t){}}}function kt(t,e\u003d!1){const n\u003d{};for(let i\u003dwt.length-1;i\u003e\u003d0;i--){const o\u003dwt[i];try{const i\u003do.$_containsGlobalTarget\u003dTt(o,t);o.$_pendingHide\u003d!1,requestAnimationFrame(()\u003d\u003e{if(o.$_pendingHide\u003d!1,!n[o.randomId]\u0026\u0026Et(o,i,t)){if(o.$_handleGlobalClose(t,e),!t.closeAllPopover\u0026\u0026t.closePopover\u0026\u0026i){let t\u003do.parentPopper;for(;t;)n[t.randomId]\u003d!0,t\u003dt.parentPopper;return}let r\u003do.parentPopper;for(;r\u0026\u0026Et(r,r.$_containsGlobalTarget,t);)r.$_handleGlobalClose(t,e),r\u003dr.parentPopper}})}catch(t){}}}function Tt(t,e){const n\u003dt.popperNode();return t.$_mouseDownContains||n.contains(e.target)}function Et(t,e,n){return n.closeAllPopover||n.closePopover\u0026\u0026e||t.autoHide\u0026\u0026!e}\"undefined\"!\u003dtypeof document\u0026\u0026\"undefined\"!\u003dtypeof window\u0026\u0026(ft?(document.addEventListener(\"touchstart\",$t,!pt||{passive:!0,capture:!0}),document.addEventListener(\"touchend\",(function(t){kt(t,!0)}),!pt||{passive:!0,capture:!0})):(window.addEventListener(\"mousedown\",$t,!0),window.addEventListener(\"click\",(function(t){kt(t)}),!0)),window.addEventListener(\"resize\",(function(t){for(let e\u003d0;e\u003cwt.length;e++){wt[e].$_computePosition(t)}})));let Ot\u003d0,Bt\u003d0,Pt\u003d0,Lt\u003d0;function Nt(t,e,n,i,o,r,s,a){const l\u003d((s-o)*(e-r)-(a-r)*(t-o))/((a-r)*(n-t)-(s-o)*(i-e)),c\u003d((n-t)*(e-r)-(i-e)*(t-o))/((a-r)*(n-t)-(s-o)*(i-e));return l\u003e\u003d0\u0026\u0026l\u003c\u003d1\u0026\u0026c\u003e\u003d0\u0026\u0026c\u003c\u003d1}var At;function zt(){zt.init||(zt.init\u003d!0,At\u003d-1!\u003d\u003dfunction(){var t\u003dwindow.navigator.userAgent,e\u003dt.indexOf(\"MSIE \");if(e\u003e0)return parseInt(t.substring(e+5,t.indexOf(\".\",e)),10);if(t.indexOf(\"Trident/\")\u003e0){var n\u003dt.indexOf(\"rv:\");return parseInt(t.substring(n+3,t.indexOf(\".\",n)),10)}var i\u003dt.indexOf(\"Edge/\");return i\u003e0?parseInt(t.substring(i+5,t.indexOf(\".\",i)),10):-1}())}function Mt(t,e,n,i,o,r,s,a,l,c){\"boolean\"!\u003dtypeof s\u0026\u0026(l\u003da,a\u003ds,s\u003d!1);var u,d\u003d\"function\"\u003d\u003dtypeof n?n.options:n;if(t\u0026\u0026t.render\u0026\u0026(d.render\u003dt.render,d.staticRenderFns\u003dt.staticRenderFns,d._compiled\u003d!0,o\u0026\u0026(d.functional\u003d!0)),i\u0026\u0026(d._scopeId\u003di),r?(u\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),e\u0026\u0026e.call(this,l(t)),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(r)},d._ssrRegister\u003du):e\u0026\u0026(u\u003ds?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h\u003dd.render;d.render\u003dfunction(t,e){return u.call(e),h(t,e)}}else{var p\u003dd.beforeCreate;d.beforeCreate\u003dp?[].concat(p,u):[u]}return n}\"undefined\"!\u003dtypeof window\u0026\u0026window.addEventListener(\"mousemove\",t\u003d\u003e{Ot\u003dPt,Bt\u003dLt,Pt\u003dt.clientX,Lt\u003dt.clientY},pt?{passive:!0}:void 0);var Ht\u003d{name:\"ResizeObserver\",props:{emitOnMount:{type:Boolean,default:!1},ignoreWidth:{type:Boolean,default:!1},ignoreHeight:{type:Boolean,default:!1}},mounted:function(){var t\u003dthis;zt(),this.$nextTick((function(){t._w\u003dt.$el.offsetWidth,t._h\u003dt.$el.offsetHeight,t.emitOnMount\u0026\u0026t.emitSize()}));var e\u003ddocument.createElement(\"object\");this._resizeObject\u003de,e.setAttribute(\"aria-hidden\",\"true\"),e.setAttribute(\"tabindex\",-1),e.onload\u003dthis.addResizeHandlers,e.type\u003d\"text/html\",At\u0026\u0026this.$el.appendChild(e),e.data\u003d\"about:blank\",At||this.$el.appendChild(e)},beforeDestroy:function(){this.removeResizeHandlers()},methods:{compareAndNotify:function(){(!this.ignoreWidth\u0026\u0026this._w!\u003d\u003dthis.$el.offsetWidth||!this.ignoreHeight\u0026\u0026this._h!\u003d\u003dthis.$el.offsetHeight)\u0026\u0026(this._w\u003dthis.$el.offsetWidth,this._h\u003dthis.$el.offsetHeight,this.emitSize())},emitSize:function(){this.$emit(\"notify\",{width:this._w,height:this._h})},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener(\"resize\",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject\u0026\u0026this._resizeObject.onload\u0026\u0026(!At\u0026\u0026this._resizeObject.contentDocument\u0026\u0026this._resizeObject.contentDocument.defaultView.removeEventListener(\"resize\",this.compareAndNotify),this.$el.removeChild(this._resizeObject),this._resizeObject.onload\u003dnull,this._resizeObject\u003dnull)}}},Dt\u003dfunction(){var t\u003dthis.$createElement;return(this._self._c||t)(\"div\",{staticClass:\"resize-observer\",attrs:{tabindex:\"-1\"}})};Dt._withStripped\u003d!0;var Rt\u003dMt({render:Dt,staticRenderFns:[]},void 0,Ht,\"data-v-8859cc6c\",!1,void 0,!1,void 0,void 0,void 0);var jt\u003d{version:\"1.0.1\",install:function(t){t.component(\"resize-observer\",Rt),t.component(\"ResizeObserver\",Rt)}},It\u003dnull;\"undefined\"!\u003dtypeof window?It\u003dwindow.Vue:void 0!\u003d\u003di.g\u0026\u0026(It\u003di.g.Vue),It\u0026\u0026It.use(jt);var qt\u003d{computed:{themeClass(){return function(t){const e\u003d[t];let n\u003ddt.themes[t]||{};do{n.$extend\u0026\u0026!n.$resetCss?(e.push(n.$extend),n\u003ddt.themes[n.$extend]||{}):n\u003dnull}while(n);return e.map(t\u003d\u003e\"v-popper--theme-\"+t)}(this.theme)}}},Wt\u003d{name:\"VPopperContent\",components:{ResizeObserver:Rt},mixins:[qt],props:{popperId:String,theme:String,shown:Boolean,mounted:Boolean,skipTransition:Boolean,autoHide:Boolean,handleResize:Boolean,classes:Object,result:Object},methods:{toPx:t\u003d\u003enull\u003d\u003dt||isNaN(t)?null:t+\"px\"}};function Ft(t,e,n,i,o,r,s,a){var l,c\u003d\"function\"\u003d\u003dtypeof t?t.options:t;if(e\u0026\u0026(c.render\u003de,c.staticRenderFns\u003dn,c._compiled\u003d!0),i\u0026\u0026(c.functional\u003d!0),r\u0026\u0026(c._scopeId\u003d\"data-v-\"+r),s?(l\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),o\u0026\u0026o.call(this,t),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(s)},c._ssrRegister\u003dl):o\u0026\u0026(l\u003da?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles\u003dl;var u\u003dc.render;c.render\u003dfunction(t,e){return l.call(e),u(t,e)}}else{var d\u003dc.beforeCreate;c.beforeCreate\u003dd?[].concat(d,l):[l]}return{exports:t,options:c}}const Vt\u003d{};var Ut\u003dFt(Wt,(function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{ref:\"popover\",staticClass:\"v-popper__popper\",class:[t.themeClass,t.classes.popperClass,{\"v-popper__popper--shown\":t.shown,\"v-popper__popper--hidden\":!t.shown,\"v-popper__popper--show-from\":t.classes.showFrom,\"v-popper__popper--show-to\":t.classes.showTo,\"v-popper__popper--hide-from\":t.classes.hideFrom,\"v-popper__popper--hide-to\":t.classes.hideTo,\"v-popper__popper--skip-transition\":t.skipTransition,\"v-popper__popper--arrow-overflow\":t.result\u0026\u0026t.result.arrow.overflow,\"v-popper__popper--no-positioning\":!t.result}],style:t.result?{position:t.result.strategy,transform:\"translate3d(\"+Math.round(t.result.x)+\"px,\"+Math.round(t.result.y)+\"px,0)\"}:void 0,attrs:{id:t.popperId,\"aria-hidden\":t.shown?\"false\":\"true\",tabindex:t.autoHide?0:void 0,\"data-popper-placement\":t.result?t.result.placement:void 0},on:{keyup:function(e){if(!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"]))return null;t.autoHide\u0026\u0026t.$emit(\"hide\")}}},[n(\"div\",{staticClass:\"v-popper__backdrop\",on:{click:function(e){t.autoHide\u0026\u0026t.$emit(\"hide\")}}}),n(\"div\",{staticClass:\"v-popper__wrapper\",style:t.result?{transformOrigin:t.result.transformOrigin}:void 0},[n(\"div\",{ref:\"inner\",staticClass:\"v-popper__inner\"},[t.mounted?[n(\"div\",[t._t(\"default\")],2),t.handleResize?n(\"ResizeObserver\",{on:{notify:function(e){return t.$emit(\"resize\",e)}}}):t._e()]:t._e()],2),n(\"div\",{ref:\"arrow\",staticClass:\"v-popper__arrow-container\",style:t.result?{left:t.toPx(t.result.arrow.x),top:t.toPx(t.result.arrow.y)}:void 0},[n(\"div\",{staticClass:\"v-popper__arrow-outer\"}),n(\"div\",{staticClass:\"v-popper__arrow-inner\"})])])])}),[],!1,Qt,null,null,null);function Qt(t){for(let t in Vt)this[t]\u003dVt[t]}var Xt\u003dfunction(){return Ut.exports}(),Yt\u003d{methods:{show(...t){return this.$refs.popper.show(...t)},hide(...t){return this.$refs.popper.hide(...t)},dispose(...t){return this.$refs.popper.dispose(...t)},onResize(...t){return this.$refs.popper.onResize(...t)}}},Kt\u003d{name:\"VPopperWrapper\",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt,qt],inheritAttrs:!1,props:{theme:{type:String,default(){return this.$options.vPopperTheme}}},methods:{getTargetNodes(){return Array.from(this.$refs.reference.children).filter(t\u003d\u003et!\u003d\u003dthis.$refs.popperContent.$el)}}};const Gt\u003d{};var Zt\u003dFt(Kt,(function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"Popper\",t._g(t._b({ref:\"popper\",attrs:{theme:t.theme,\"target-nodes\":t.getTargetNodes,\"reference-node\":function(){return t.$refs.reference},\"popper-node\":function(){return t.$refs.popperContent.$el}},scopedSlots:t._u([{key:\"default\",fn:function(e){var i\u003de.popperId,o\u003de.isShown,r\u003de.shouldMountContent,s\u003de.skipTransition,a\u003de.autoHide,l\u003de.show,c\u003de.hide,u\u003de.handleResize,d\u003de.onResize,h\u003de.classes,p\u003de.result;return[n(\"div\",{ref:\"reference\",staticClass:\"v-popper\",class:[t.themeClass,{\"v-popper--shown\":o}]},[t._t(\"default\",null,{shown:o,show:l,hide:c}),n(\"PopperContent\",{ref:\"popperContent\",attrs:{\"popper-id\":i,theme:t.theme,shown:o,mounted:r,\"skip-transition\":s,\"auto-hide\":a,\"handle-resize\":u,classes:h,result:p},on:{hide:c,resize:d}},[t._t(\"popper\",null,{shown:o,hide:c})],2)],2)]}}],null,!0)},\"Popper\",t.$attrs,!1),t.$listeners))}),[],!1,Jt,null,null,null);function Jt(t){for(let t in Gt)this[t]\u003dGt[t]}var te\u003dfunction(){return Zt.exports}(),ee\u003dut(ct({},te),{name:\"VDropdown\",vPopperTheme:\"dropdown\"});const ne\u003d{};var ie\u003dFt(ee,void 0,void 0,!1,oe,null,null,null);function oe(t){for(let t in ne)this[t]\u003dne[t]}var re\u003dfunction(){return ie.exports}(),se\u003dut(ct({},te),{name:\"VMenu\",vPopperTheme:\"menu\"});const ae\u003d{};var le\u003dFt(se,void 0,void 0,!1,ce,null,null,null);function ce(t){for(let t in ae)this[t]\u003dae[t]}var ue\u003dfunction(){return le.exports}(),de\u003dut(ct({},te),{name:\"VTooltip\",vPopperTheme:\"tooltip\"});const he\u003d{};var pe\u003dFt(de,void 0,void 0,!1,fe,null,null,null);function fe(t){for(let t in he)this[t]\u003dhe[t]}var me\u003dfunction(){return pe.exports}(),ve\u003d{name:\"VTooltipDirective\",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt],inheritAttrs:!1,props:{theme:{type:String,default:\"tooltip\"},html:{type:Boolean,default(){return ht(this.theme,\"html\")}},content:{type:[String,Number,Function],default:null},loadingContent:{type:String,default(){return ht(this.theme,\"loadingContent\")}}},data:()\u003d\u003e({asyncContent:null}),computed:{isContentAsync(){return\"function\"\u003d\u003dtypeof this.content},loading(){return this.isContentAsync\u0026\u0026null\u003d\u003dthis.asyncContent},finalContent(){return this.isContentAsync?this.loading?this.loadingContent:this.asyncContent:this.content}},watch:{content:{handler(){this.fetchContent(!0)},immediate:!0},async finalContent(t){await this.$nextTick(),this.$refs.popper.onResize()}},created(){this.$_fetchId\u003d0},methods:{fetchContent(t){if(\"function\"\u003d\u003dtypeof this.content\u0026\u0026this.$_isShown\u0026\u0026(t||!this.$_loading\u0026\u0026null\u003d\u003dthis.asyncContent)){this.asyncContent\u003dnull,this.$_loading\u003d!0;const t\u003d++this.$_fetchId,e\u003dthis.content(this);e.then?e.then(e\u003d\u003ethis.onResult(t,e)):this.onResult(t,e)}},onResult(t,e){t\u003d\u003d\u003dthis.$_fetchId\u0026\u0026(this.$_loading\u003d!1,this.asyncContent\u003de)},onShow(){this.$_isShown\u003d!0,this.fetchContent()},onHide(){this.$_isShown\u003d!1}}};const ge\u003d{};var ye\u003dFt(ve,(function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"Popper\",t._g(t._b({ref:\"popper\",attrs:{theme:t.theme,\"popper-node\":function(){return t.$refs.popperContent.$el}},on:{\"apply-show\":t.onShow,\"apply-hide\":t.onHide},scopedSlots:t._u([{key:\"default\",fn:function(e){var i\u003de.popperId,o\u003de.isShown,r\u003de.shouldMountContent,s\u003de.skipTransition,a\u003de.autoHide,l\u003de.hide,c\u003de.handleResize,u\u003de.onResize,d\u003de.classes,h\u003de.result;return[n(\"PopperContent\",{ref:\"popperContent\",class:{\"v-popper--tooltip-loading\":t.loading},attrs:{\"popper-id\":i,theme:t.theme,shown:o,mounted:r,\"skip-transition\":s,\"auto-hide\":a,\"handle-resize\":c,classes:d,result:h},on:{hide:l,resize:u}},[t.html?n(\"div\",{domProps:{innerHTML:t._s(t.finalContent)}}):n(\"div\",{domProps:{textContent:t._s(t.finalContent)}})])]}}])},\"Popper\",t.$attrs,!1),t.$listeners))}),[],!1,we,null,null,null);function we(t){for(let t in ge)this[t]\u003dge[t]}var be\u003dfunction(){return ye.exports}();function _e(t,e,n){let i;const o\u003dtypeof e;return i\u003d\"string\"\u003d\u003d\u003do?{content:e}:e\u0026\u0026\"object\"\u003d\u003d\u003do?e:{content:!1},i.placement\u003dfunction(t,e){let n\u003dt.placement;if(!n\u0026\u0026e)for(const t of mt)e[t]\u0026\u0026(n\u003dt);return n||(n\u003dht(t.theme||\"tooltip\",\"placement\")),n}(i,n),i.targetNodes\u003d()\u003d\u003e[t],i.referenceNode\u003d()\u003d\u003et,i}function Se(t,e,n){const i\u003d_e(t,e,n),o\u003dt.$_popper\u003dnew(et())({mixins:[Yt],data:()\u003d\u003e({options:i}),render(t){const e\u003dthis.options,{theme:n,html:i,content:o,loadingContent:r}\u003de,s\u003d((t,e)\u003d\u003e{var n\u003d{};for(var i in t)st.call(t,i)\u0026\u0026e.indexOf(i)\u003c0\u0026\u0026(n[i]\u003dt[i]);if(null!\u003dt\u0026\u0026rt)for(var i of rt(t))e.indexOf(i)\u003c0\u0026\u0026at.call(t,i)\u0026\u0026(n[i]\u003dt[i]);return n})(e,[\"theme\",\"html\",\"content\",\"loadingContent\"]);return t(be,{props:{theme:n,html:i,content:o,loadingContent:r},attrs:s,ref:\"popper\"})},devtools:{hide:!0}}),r\u003ddocument.createElement(\"div\");return document.body.appendChild(r),o.$mount(r),t.classList\u0026\u0026t.classList.add(\"v-popper--has-tooltip\"),o}function xe(t){t.$_popper\u0026\u0026(t.$_popper.$destroy(),delete t.$_popper,delete t.$_popperOldShown),t.classList\u0026\u0026t.classList.remove(\"v-popper--has-tooltip\")}function Ce(t,{value:e,oldValue:n,modifiers:i}){const o\u003d_e(t,e,i);if(!o.content||ht(o.theme||\"tooltip\",\"disabled\"))xe(t);else{let n;t.$_popper?(n\u003dt.$_popper,n.options\u003do):n\u003dSe(t,e,i),void 0!\u003d\u003de.shown\u0026\u0026e.shown!\u003d\u003dt.$_popperOldShown\u0026\u0026(t.$_popperOldShown\u003de.shown,e.shown?n.show():n.hide())}}var $e\u003d{bind:Ce,update:Ce,unbind(t){xe(t)}};function ke(t){t.addEventListener(\"click\",Ee),t.addEventListener(\"touchstart\",Oe,!!pt\u0026\u0026{passive:!0})}function Te(t){t.removeEventListener(\"click\",Ee),t.removeEventListener(\"touchstart\",Oe),t.removeEventListener(\"touchend\",Be),t.removeEventListener(\"touchcancel\",Pe)}function Ee(t){const e\u003dt.currentTarget;t.closePopover\u003d!e.$_vclosepopover_touch,t.closeAllPopover\u003de.$_closePopoverModifiers\u0026\u0026!!e.$_closePopoverModifiers.all}function Oe(t){if(1\u003d\u003d\u003dt.changedTouches.length){const e\u003dt.currentTarget;e.$_vclosepopover_touch\u003d!0;const n\u003dt.changedTouches[0];e.$_vclosepopover_touchPoint\u003dn,e.addEventListener(\"touchend\",Be),e.addEventListener(\"touchcancel\",Pe)}}function Be(t){const e\u003dt.currentTarget;if(e.$_vclosepopover_touch\u003d!1,1\u003d\u003d\u003dt.changedTouches.length){const n\u003dt.changedTouches[0],i\u003de.$_vclosepopover_touchPoint;t.closePopover\u003dMath.abs(n.screenY-i.screenY)\u003c20\u0026\u0026Math.abs(n.screenX-i.screenX)\u003c20,t.closeAllPopover\u003de.$_closePopoverModifiers\u0026\u0026!!e.$_closePopoverModifiers.all}}function Pe(t){t.currentTarget.$_vclosepopover_touch\u003d!1}var Le\u003d{bind(t,{value:e,modifiers:n}){t.$_closePopoverModifiers\u003dn,(void 0\u003d\u003d\u003de||e)\u0026\u0026ke(t)},update(t,{value:e,oldValue:n,modifiers:i}){t.$_closePopoverModifiers\u003di,e!\u003d\u003dn\u0026\u0026(void 0\u003d\u003d\u003de||e?ke(t):Te(t))},unbind(t){Te(t)}};const Ne\u003dre,Ae\u003dme;const ze\u003d{version:\"1.0.0-beta.14\",install:function(t,e\u003d{}){t.$_vTooltipInstalled||(t.$_vTooltipInstalled\u003d!0,function t(e,n){for(const i in n)Object.prototype.hasOwnProperty.call(n,i)\u0026\u0026(\"object\"\u003d\u003dtypeof n[i]\u0026\u0026e[i]?t(e[i],n[i]):e[i]\u003dn[i])}(dt,e),t.directive(\"tooltip\",$e),t.directive(\"close-popper\",Le),t.component(\"v-tooltip\",me),t.component(\"VTooltip\",me),t.component(\"v-dropdown\",re),t.component(\"VDropdown\",re),t.component(\"v-menu\",ue),t.component(\"VMenu\",ue))},options:dt};let Me\u003dnull;\"undefined\"!\u003dtypeof window?Me\u003dwindow.Vue:void 0!\u003d\u003di.g\u0026\u0026(Me\u003di.g.Vue),Me\u0026\u0026Me.use(ze);var He\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"alert box-container\",t.containerStyle(),t.addClass,{\"d-flex\":t.seamlessHeaderBool()}],style:t.customStyle()},[t.seamlessHeaderBool()?n(\"div\",{staticClass:\"d-flex\"},[t.iconBool()?n(\"div\",{class:[\"icon-wrapper\",t.iconStyle()],style:t.customIconColorStyle()},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas\",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"vertical-divider\",class:t.getBootstrapAlertStyle(),attrs:{\"aria-hidden\":\"true\"}})]):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"header-and-body\"},[t.headerBool()?n(\"div\",{class:[\"box-header-wrapper\",{\"alert-dismissible\":t.dismissible}]},[t.iconBool()\u0026\u0026!t.seamlessHeaderBool()?n(\"div\",{class:[\"icon-wrapper\",t.iconStyle()],style:t.customIconColorStyle()},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas\",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"box-header\"},[t._t(\"header\")],2),t._v(\" \"),t.dismissible?n(\"button\",{staticClass:\"btn-close close-with-heading\",attrs:{type:\"button\",\"data-bs-dismiss\":\"alert\",\"aria-label\":\"Close\"}}):t._e()]):t._e(),t._v(\" \"),n(\"div\",{class:[\"box-body-wrapper\",{\"alert-dismissible\":t.dismissible\u0026\u0026!t.headerBool(),\"box-body-wrapper-with-heading\":t.headerBool()}]},[t.iconBool()\u0026\u0026!t.headerBool()?n(\"div\",{class:[\"icon-wrapper\",t.iconStyle()],style:t.customIconColorStyle()},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas\",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(\" \"),t.seamlessNoHeaderBool()?n(\"div\",{staticClass:\"vertical-divider\",class:t.getBootstrapAlertStyle(),attrs:{\"aria-hidden\":\"true\"}}):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"contents\",style:t.customColorStyle()},[t._t(\"default\")],2),t._v(\" \"),t.dismissible\u0026\u0026!t.headerBool()?n(\"button\",{staticClass:\"btn-close\",attrs:{type:\"button\",\"data-bs-dismiss\":\"alert\",\"aria-label\":\"Close\"}}):t._e()])])])};He._withStripped\u003d!0;var De\u003dfunction(t){return\"string\"\u003d\u003dtypeof t?\"\"\u003d\u003d\u003dt||\"true\"\u003d\u003d\u003dt||\"false\"!\u003d\u003dt\u0026\u0026\"null\"!\u003d\u003dt\u0026\u0026\"undefined\"!\u003d\u003dt\u0026\u0026t:t};function Re(t){return\"string\"\u003d\u003dtypeof t?\"\"\u003d\u003d\u003dt||\"true\"\u003d\u003d\u003dt||\"false\"!\u003d\u003dt\u0026\u0026\"null\"!\u003d\u003dt\u0026\u0026\"undefined\"!\u003d\u003dt\u0026\u0026t:t}function je(t){return\"number\"\u003d\u003dtypeof t?t:null\u003d\u003dt||isNaN(Number(t))?null:Number(t)}function Ie(t){var e\u003dt.split(\"#\"),n\u003d\"\";return e.length\u003e1\u0026\u0026(n\u003de[1]),n}function qe(t,e,n,i,o,r,s,a){var l,c\u003d\"function\"\u003d\u003dtypeof t?t.options:t;if(e\u0026\u0026(c.render\u003de,c.staticRenderFns\u003dn,c._compiled\u003d!0),i\u0026\u0026(c.functional\u003d!0),r\u0026\u0026(c._scopeId\u003d\"data-v-\"+r),s?(l\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),o\u0026\u0026o.call(this,t),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(s)},c._ssrRegister\u003dl):o\u0026\u0026(l\u003da?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles\u003dl;var u\u003dc.render;c.render\u003dfunction(t,e){return l.call(e),u(t,e)}}else{var d\u003dc.beforeCreate;c.beforeCreate\u003dd?[].concat(d,l):[l]}return{exports:t,options:c}}const We\u003dqe({props:{dismissible:{type:Boolean,default:!1},backgroundColor:{type:String,default:null},borderColor:{type:String,default:null},borderLeftColor:{type:String,default:null},color:{type:String,default:null},icon:{type:String,default:null},iconSize:{type:String,default:null},iconColor:{type:String,default:null},type:{type:String,default:\"\"},addClass:{type:String,default:\"\"},light:{type:Boolean,default:!1},seamless:{type:Boolean,default:!1},noIcon:{type:Boolean,default:!1},noBackground:{type:Boolean,default:!1},noBorder:{type:Boolean,default:!1},theme:{type:String,default:\"\"}},computed:{bootStrapStyle:function(){return function(t,e){var n,i,o\u003d[\"warning\",\"info\",\"definition\",\"success\",\"danger\",\"tip\",\"important\",\"wrong\"].includes(t)?t:\"\",r\u003d[\"primary\",\"secondary\",\"success\",\"danger\",\"warning\",\"info\",\"light\",\"dark\"].includes(e)?e:\"\";if(r)n\u003dr;else switch(o){case\"warning\":n\u003d\"warning\";break;case\"info\":n\u003d\"info\";break;case\"definition\":n\u003d\"primary\";break;case\"success\":case\"tip\":n\u003d\"success\";break;case\"important\":case\"wrong\":n\u003d\"danger\";break;default:n\u003d\"default\"}switch(o){case\"wrong\":i\u003d\"fa-times\";break;case\"warning\":i\u003d\"fa-exclamation\";break;case\"info\":i\u003d\"fa-info\";break;case\"success\":i\u003d\"fa-check\";break;case\"important\":i\u003d\"fa-flag\";break;case\"tip\":i\u003d\"fa-lightbulb\";break;case\"definition\":i\u003d\"fa-atlas\";break;default:i\u003d\"\"}return{style:n,icon:i}}(this.type,this.theme)}},methods:{isSeamless:function(){return!this.light\u0026\u0026this.seamless},seamlessNoHeaderBool:function(){return this.isSeamless()\u0026\u0026!this.headerBool()},seamlessHeaderBool:function(){return this.isSeamless()\u0026\u0026this.headerBool()},headerBool:function(){return!!this.$scopedSlots.header},iconBool:function(){var t\u003d!!this.$scopedSlots.icon;return!this.noIcon\u0026\u0026this.type||t},containerStyle:function(){var t;return t\u003dthis.light?\"\".concat(this.getBootstrapBorderStyle(),\" alert-border-left\"):this.seamless?\"seamless\":this.getBootstrapAlertStyle(),this.noBackground\u0026\u0026(t+\u003d\" no-background\"),this.noBorder\u0026\u0026(t+\u003d\" no-border\"),t},customStyle:function(){var t\u003d{};return this.backgroundColor\u0026\u0026(t.backgroundColor\u003dthis.backgroundColor,t.borderColor\u003dthis.backgroundColor),this.borderColor\u0026\u0026(t.border\u003d\"1px solid \".concat(this.borderColor)),this.borderLeftColor\u0026\u0026(t.borderLeft\u003d\"5px solid \".concat(this.borderLeftColor)),t},customColorStyle:function(){return this.color?{color:this.color}:{}},iconStyle:function(){var t\u003d\"\";return this.iconSize\u0026\u0026(t+\u003d\"fa-\".concat(this.iconSize)),(this.light||this.seamless)\u0026\u0026(t+\u003d\" \".concat(this.getBootstrapTextStyle())),t},customIconColorStyle:function(){return this.iconColor?{color:\"\".concat(this.iconColor,\"!important\")}:{}},getBootstrapAlertStyle:function(){return\"alert-\".concat(this.bootStrapStyle.style)},getBootstrapTextStyle:function(){return\"text-\".concat(this.bootStrapStyle.style)},getBootstrapBorderStyle:function(){return\"border-\".concat(this.bootStrapStyle.style)},getFontAwesomeIconStyle:function(){return this.bootStrapStyle.icon}}},He,[],!1,null,\"0eabf1c4\",null).exports;var Fe\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[n(\"nav\",{staticClass:\"breadcrumb-divider\",attrs:{\"aria-label\":\"breadcrumb\"}},[n(\"ol\",{staticClass:\"breadcrumb\"},[n(\"li\",{staticClass:\"notlink breadcrumb-marker\"},[t._v(\"\\n ››  \\n \")]),t._v(\" \"),t._l(t.items,(function(e,i){return n(\"li\",{key:i,class:[\"breadcrumb-item\",{notlink:null\u003d\u003d\u003de.link}],attrs:{\"aria-current\":{page:t.isLast(i,t.items.length)}}},[null\u003d\u003d\u003de.link?n(\"a\",[t._v(\"\\n \"+t._s(e.title)+\"\\n \")]):n(\"a\",{attrs:{href:e.link}},[t._v(\"\\n \"+t._s(e.title)+\"\\n \")])])}))],2)])])};Fe._withStripped\u003d!0;const Ve\u003dqe({data:function(){return{items:[]}},methods:{isLast:function(t,e){return t\u003d\u003d\u003de-1}},mounted:function(){var t\u003dArray.from(document.querySelectorAll(\"ul\")).find((function(t){return t.classList.contains(\"site-nav-list-root\")}));if(t){var e\u003dt.querySelector(\".current\");if(e){this.items.unshift({title:e.textContent,link:null});for(var n\u003de.parentElement;n!\u003d\u003dt;){if(\"ul\"\u003d\u003d\u003dn.tagName.toLowerCase()){var i\u003dn.parentElement.querySelector(\"div\"),o\u003di.querySelector(\"a[href]\");null\u003d\u003d\u003do?this.items.unshift({title:i.textContent,link:null}):this.items.unshift({title:o.textContent,link:o.getAttribute(\"href\")})}n\u003dn.parentElement}}}}},Fe,[],!1,null,\"ef898034\",null).exports;var Ue\u003di(3),Qe\u003di.n(Ue),Xe\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.isLi?n(\"li\",{ref:\"dropdown\",class:[{disabled:t.disabledBool},\"dropdown\",t.addClass]},[t._t(\"button\",(function(){return[n(\"a\",{staticClass:\"dropdown-toggle nav-link\",class:{disabled:t.disabledBool},attrs:{role:\"button\",\"data-bs-toggle\":\"dropdown\"}},[t._t(\"header\")],2)]})),t._v(\" \"),t._t(\"dropdown-menu\",(function(){return[n(\"ul\",{staticClass:\"dropdown-menu\",class:[{show:t.show},{\"dropdown-menu-end\":t.menuAlignRight}]},[t._t(\"default\")],2)]}))],2):t.isSubmenu?n(\"submenu\",{ref:\"submenu\",scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)}):n(\"div\",{ref:\"dropdown\",class:[{disabled:t.disabledBool},\"btn-group\",t.addClass]},[t._t(\"before\"),t._v(\" \"),t._t(\"button\",(function(){return[n(\"button\",{staticClass:\"btn dropdown-toggle\",class:[t.btnType,t.btnWithBefore,{\"dropdown-toggle-split\":t.hasBefore}],attrs:{type:\"button\",disabled:t.disabledBool,\"data-bs-reference\":\"parent\",\"data-bs-toggle\":\"dropdown\"}},[t._t(\"header\")],2)]})),t._v(\" \"),t._t(\"dropdown-menu\",(function(){return[n(\"ul\",{staticClass:\"dropdown-menu\",class:[{show:t.show},{\"dropdown-menu-end\":t.menuAlignRight}]},[t._t(\"default\")],2)]}))],2)};Xe._withStripped\u003d!0;var Ye\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"li\",{ref:\"submenu\",class:[t.addClass,\"dropdown-submenu\",{dropend:t.dropright,dropstart:t.dropleft}]},[t._t(\"button\",(function(){return[n(\"a\",{staticClass:\"dropdown-item submenu-toggle\",class:{disabled:t.disabled},attrs:{role:\"button\",\"data-bs-toggle\":\"dropdown\"}},[t._t(\"header\")],2)]})),t._v(\" \"),t._t(\"dropdown-menu\",(function(){return[n(\"ul\",{staticClass:\"dropdown-menu\"},[t._t(\"default\")],2)]}))],2)};function Ke(t,n){for(var i\u003d0;i\u003cn.length;i++){var o\u003dn[i];o.enumerable\u003do.enumerable||!1,o.configurable\u003d!0,\"value\"in o\u0026\u0026(o.writable\u003d!0),Object.defineProperty(t,e(o.key),o)}}Ye._withStripped\u003d!0;var Ge,Ze\u003dArray.prototype,Je\u003dnew Error(\"Passed arguments must be of Node\"),tn\u003d[],en\u003d[];function nn(t){return t instanceof window.Node}function on(t){return t instanceof window.NodeList||t instanceof sn||t instanceof window.HTMLCollection||t instanceof Array}function rn(t){return(t\u003dt.trim()).length?t.replace(/\\s+/,\" \").split(\" \"):[]}var sn\u003dfunction(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n\u003de;if(e[0]\u003d\u003d\u003dwindow?n\u003d[window]:\"string\"\u003d\u003dtypeof e[0]?(n\u003d(e[1]||document).querySelectorAll(e[0]),e[1]\u0026\u0026(this.owner\u003de[1])):0 in e\u0026\u0026!nn(e[0])\u0026\u0026e[0]\u0026\u0026\"length\"in e[0]\u0026\u0026(n\u003de[0],e[1]\u0026\u0026(this.owner\u003de[1])),n){for(var i in n)this[i]\u003dn[i];this.length\u003dn.length}else this.length\u003d0}var e,n,i;return e\u003dt,(n\u003d[{key:\"concat\",value:function(){var t\u003dZe.slice.call(this);function e(n){Ze.forEach.call(n,(function(n){nn(n)?~t.indexOf(n)||t.push(n):on(n)\u0026\u0026e(n)}))}for(var n\u003darguments.length,i\u003dnew Array(n),o\u003d0;o\u003cn;o++)i[o]\u003darguments[o];return Ze.forEach.call(i,(function(n){if(nn(n))~t.indexOf(n)||t.push(n);else{if(!on(n))throw Error(\"Concat arguments must be of a Node, NodeList, HTMLCollection, or Array of (Node, NodeList, HTMLCollection, Array)\");e(n)}})),hn(t,this)}},{key:\"delete\",value:function(){var t\u003dln(this).filter((function(t){return t.remove?t.remove():t.parentNode\u0026\u0026t.parentNode.removeChild(t),document.body.contains(t)}));return t.length\u0026\u0026console.warn(\"NodeList: Some nodes could not be deleted.\"),t}},{key:\"each\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return Ze.forEach.apply(this,e),this}},{key:\"filter\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return hn(Ze.filter.apply(this,e),this)}},{key:\"find\",value:function(t){var e\u003d[];return ln(this).forEach((function(n){Ze.push.apply(e,n.querySelectorAll(t))})),ln(e,this.owner)}},{key:\"findChildren\",value:function(t){var e\u003dthis;return t?this.find(t).filter((function(t){return e.includes(t.parentElement)})):ln(this.map((function(t){return t.children})))}},{key:\"forEach\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return Ze.forEach.apply(this,e),this}},{key:\"includes\",value:function(t,e){return~this.indexOf(t,e)}},{key:\"map\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];var i\u003dZe.map.apply(this,e);return i.some((function(t){return nn(t)||on(t)}))?ln(i,this):i}},{key:\"parent\",value:function(){return ln(this.map((function(t){return t.parentNode})),this)}},{key:\"pop\",value:function(t){\"number\"!\u003dtypeof t\u0026\u0026(t\u003d1);for(var e\u003d[],n\u003dZe.pop.bind(this);t--;)e.push(n());return hn(e,this)}},{key:\"push\",value:function(){for(var t\u003dthis,e\u003darguments.length,n\u003dnew Array(e),i\u003d0;i\u003ce;i++)n[i]\u003darguments[i];return Ze.forEach.call(n,(function(e){if(!nn(e))throw Je;~t.indexOf(e)||Ze.push.call(t,e)})),this}},{key:\"shift\",value:function(t){\"number\"!\u003dtypeof t\u0026\u0026(t\u003d1);for(var e\u003d[];t--;)e.push(Ze.shift.call(this));return 1\u003d\u003de.length?e[0]:hn(e,this)}},{key:\"slice\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return hn(Ze.slice.apply(this,e),this)}},{key:\"splice\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];for(var i\u003d2,o\u003de.length;i\u003co;i++)if(!nn(e[i]))throw Je;return Ze.splice.apply(this,e),this}},{key:\"unshift\",value:function(){for(var t\u003dthis,e\u003dZe.unshift.bind(this),n\u003darguments.length,i\u003dnew Array(n),o\u003d0;o\u003cn;o++)i[o]\u003darguments[o];return Ze.forEach.call(i,(function(n){if(!nn(n))throw Je;~t.indexOf(n)||e(n)})),this}},{key:\"addClass\",value:function(t){return this.toggleClass(t,!0)}},{key:\"removeClass\",value:function(t){return this.toggleClass(t,!1)}},{key:\"toggleClass\",value:function(t,e){var n\u003dnull\u003d\u003de?\"toggle\":e?\"add\":\"remove\";return\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003drn(t)),this.each((function(e){var i,o\u003drn(e.className);t.forEach((function(t){var e\u003d~o.indexOf(t);e||\"remove\"\u003d\u003d\u003dn||o.push(t),e\u0026\u0026\"add\"!\u003d\u003dn\u0026\u0026(o\u003do.filter((function(e){return e!\u003d\u003dt})))})),(o\u003d(i\u003do).length?i.join(\" \"):\"\")?e.className\u003do:e.removeAttribute(\"class\")})),this}},{key:\"get\",value:function(t){var e\u003d[];return this.each((function(n){null!\u003d\u003dn\u0026\u0026(n\u003dn[t]),e.push(n)})),ln(e,this)}},{key:\"set\",value:function(t,e){return t.constructor\u003d\u003d\u003dObject?this.each((function(e){if(e)for(var n in t)n in e\u0026\u0026(e[n]\u003dt[n])})):this.each((function(n){t in n\u0026\u0026(n[t]\u003de)})),this}},{key:\"call\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];var i\u003dZe.shift.call(e),o\u003d[],r\u003d!0;return this.each((function(t){t\u0026\u0026t[i]instanceof Function?(t\u003dt[i].apply(t,e),o.push(t),r\u0026\u0026void 0!\u003d\u003dt\u0026\u0026(r\u003d!1)):o.push(void 0)})),r?this:ln(o,this)}},{key:\"item\",value:function(t){return hn([this[t]],this)}},{key:\"asArray\",get:function(){return Ze.slice.call(this)}},{key:\"on\",value:function(t,e,n){if(\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003drn(t)),!this||!this.length)return this;if(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003de,e\u003dnull),!n)return this;var i\u003dn;return n\u003de?function(t){var n\u003dhn(e,this);n.length\u0026\u0026n.some((function(e){var n\u003de.contains(t.target);return n\u0026\u0026i.call(e,t,e),n}))}:function(t){i.apply(this,[t,this])},this.each((function(e){t.forEach((function(t){(e\u003d\u003d\u003dwindow||nn(e))\u0026\u0026(e.addEventListener(t,n,!1),en.push({el:e,event:t,callback:n}))}))})),this}},{key:\"off\",value:function(t,e){return t instanceof Function\u0026\u0026(e\u003dt,t\u003dnull),t\u003dt instanceof Array?t:\"string\"\u003d\u003dtypeof t?rn(t):null,this.each((function(n){en\u003den.filter((function(i){return!!(!i||i.el!\u003d\u003dn||e\u0026\u0026e!\u003d\u003di.callback||t\u0026\u0026!~t.indexOf(i.event))||(i.el.removeEventListener(i.event,i.callback),!1)}))})),this}},{key:\"onBlur\",value:function(t){var e\u003d!(arguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1])||arguments[1];return this\u0026\u0026this.length\u0026\u0026t?(this.each((function(e){tn.push({el:e,callback:t})})),Ge||(Ge\u003dfunction(t){tn.forEach((function(e){e.el\u0026\u0026(e.el.contains(t.target)||e.el\u003d\u003d\u003dt.target||e.callback.call(e.el,t,e.el))}))},document.addEventListener(\"click\",Ge,!1),e\u0026\u0026document.addEventListener(\"touchstart\",Ge,!1)),this):this}},{key:\"offBlur\",value:function(t){return this.each((function(e){tn\u003dtn.filter((function(n){return!(n\u0026\u0026n.el\u003d\u003d\u003de\u0026\u0026(!t||n.callback\u003d\u003d\u003dt))\u0026\u0026e}))})),this}}])\u0026\u0026Ke(e.prototype,n),i\u0026\u0026Ke(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),t}(),an\u003dsn.prototype;function ln(t,e){var n\u003d[];return Ze.forEach.call(t,(function(i){if(nn(i))~n.indexOf(i)||n.push(i);else if(on(i))for(var o in i)n.push(i[o]);else if(null!\u003d\u003di)return t.get\u003dan.get,t.set\u003dan.set,t.call\u003dan.call,t.owner\u003de,t})),hn(n,e)}Object.getOwnPropertyNames(Ze).forEach((function(t){\"join\"!\u003d\u003dt\u0026\u0026\"copyWithin\"!\u003d\u003dt\u0026\u0026\"fill\"!\u003d\u003dt\u0026\u0026void 0\u003d\u003d\u003dan[t]\u0026\u0026(an[t]\u003dZe[t])})),window\u0026\u0026window.Symbol\u0026\u0026Symbol.iterator\u0026\u0026(an[Symbol.iterator]\u003dan.values\u003dZe[Symbol.iterator]);var cn\u003ddocument\u0026\u0026document.createElement(\"div\");function un(t){var e\u003dthis;an[t]||(cn[t]instanceof Function?an[t]\u003dfunction(){for(var n\u003d[],i\u003d!0,o\u003darguments.length,r\u003dnew Array(o),s\u003d0;s\u003co;s++)r[s]\u003darguments[s];for(var a in an){var l\u003dan[a];l\u0026\u0026l[t]instanceof Function?(l\u003dl[t].apply(l,r),n.push(l),i\u0026\u0026void 0!\u003d\u003dl\u0026\u0026(i\u003d!1)):n.push(void 0)}return i?e:ln(n,e)}:Object.defineProperty(an,t,{get:function(){var e\u003d[];return this.each((function(n){null!\u003d\u003dn\u0026\u0026(n\u003dn[t]),e.push(n)})),ln(e,this)},set:function(e){this.each((function(n){n\u0026\u0026t in n\u0026\u0026(n[t]\u003de)}))}}))}for(var dn in cn)un(dn);function hn(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return new sn(e)}window\u0026\u0026(window.NL\u003dhn);const pn\u003dhn;const fn\u003d{isRightAlign:function(t){var e\u003d0,n\u003dwindow.innerWidth,i\u003d(window.innerHeight,t.getBoundingClientRect());if(void 0\u003d\u003d\u003di)return!0;i.y;var o\u003di.x,r\u003di.x+t.offsetWidth;return i.y,t.offsetHeight,!(o\u003c0)\u0026\u0026(o\u003ce||!(r\u003en))},preventOverflow:function(t){t.removeAttribute(\"style\");var e\u003d0,n\u003d(window.innerWidth,window.innerHeight),i\u003dt.getBoundingClientRect();if(void 0!\u003d\u003di){var o\u003di.y,r\u003d(i.x,i.x,t.offsetWidth,i.y+t.offsetHeight);r\u003en?t.setAttribute(\"style\",\"bottom: auto; top: \".concat(-(r-n),\"px;\")):o\u003ce\u0026\u0026t.setAttribute(\"style\",\"top: auto; bottom: \".concat(-(e-o),\"px;\"))}}};function mn(t){for(var e\u003dt,n\u003dt;n;)n.classList\u0026\u0026n.classList.contains(\"dropdown-menu\")\u0026\u0026(e\u003dn),n\u003dn.parentNode;if(e.offsetWidth\u003ewindow.innerWidth)e.setAttribute(\"style\",\"left: 0px;\");else{var i\u003de.parentNode.getBoundingClientRect(),o\u003di.left+e.offsetWidth-window.innerWidth,r\u003do\u003c0?i.left:i.left-o;e.setAttribute(\"style\",\"left: \".concat(r,\"px;\"))}}const vn\u003dqe({props:{addClass:{type:String,default:\"\"},disabled:{type:[Boolean,String],default:!1}},data:function(){return{show:!1,dropright:!0,dropleft:!1}},inject:{isParentNavbar:{default:!1}},computed:{disabledBool:function(){return Re(this.disabled)}},methods:{hideSubmenu:function(){this.show\u003d!1,pn(this.$refs.submenu).find(\"ul.dropdown-menu\").each((function(t){return t.classList.toggle(\"show\",!1)})),this.alignMenuRight()},showSubmenu:function(){var t\u003dthis;this.show\u003d!0,pn(this.$refs.submenu).findChildren(\"ul\").each((function(e){e.classList.toggle(\"show\",!0),window.innerWidth\u003c768\u0026\u0026t.isParentNavbar?mn(e):(fn.isRightAlign(e)?t.alignMenuRight():t.alignMenuLeft(),fn.preventOverflow(e))}))},alignMenuRight:function(){this.dropright\u003d!0,this.dropleft\u003d!1},alignMenuLeft:function(){this.dropright\u003d!1,this.dropleft\u003d!0}},mounted:function(){var t\u003dthis,e\u003dpn(this.$refs.submenu);this.show\u0026\u0026this.showSubmenu(),e.onBlur((function(){t.hideSubmenu()}),!1),e.findChildren(\"a,button\").on(\"click\",(function(e){return e.preventDefault(),e.stopPropagation(),t.disabledBool||(t.show?t.hideSubmenu():t.showSubmenu()),!1})),e.findChildren(\"a,button\").on(\"mouseover\",(function(n){if(n.preventDefault(),window.innerWidth\u003e767){if(e.findChildren(\"ul.show\").length\u003e0||t.disabledBool)return!1;n.currentTarget.click(),t.$parent.$parent.$children.forEach((function(e){e.$el\u003d\u003d\u003dt.$el?e.$refs.submenu.showSubmenu():e.$refs.submenu.hideSubmenu()}))}return!1}))},beforeDestroy:function(){var t\u003dpn(this.$refs.submenu);t.offBlur(),t.findChildren(\"a,button\").off(),t.findChildren(\"ul\").off()}},Ye,[],!1,null,\"3c82541c\",null).exports;const gn\u003dqe({components:{Submenu:vn},props:{disabled:{type:[Boolean,String],default:!1},type:{type:String,default:\"light\"},menuAlignRight:{type:Boolean,default:!1},addClass:{type:String,default:\"\"}},provide:{hasParentDropdown:!0},inject:{hasParentDropdown:{default:void 0},isParentNavbar:{default:!1}},data:function(){return{show:!1}},computed:{btnType:function(){return\"btn-\".concat(this.type)},disabledBool:function(){return Re(this.disabled)},isLi:function(){return this.$parent._navbar||this.$parent.menu||this.$parent._tabset},isSubmenu:function(){return this.hasParentDropdown},menu:function(){return!this.$parent||this.$parent.navbar},submenu:function(){return this.$parent\u0026\u0026(this.$parent.menu||this.$parent.submenu)},slots:function(){return this.$scopedSlots.default},hasBefore:function(){return!!this.$scopedSlots.before},btnWithBefore:function(){return this.hasBefore?\"btn-with-before\":\"\"}},methods:{blur:function(){var t\u003dthis;this.unblur(),this._hide\u003dsetTimeout((function(){t._hide\u003dnull,t.hideDropdownMenu()}),100)},unblur:function(){this._hide\u0026\u0026(clearTimeout(this._hide),this._hide\u003dnull)},hideDropdownMenu:function(){var t\u003dthis;this.show\u003d!1,pn(this.$refs.dropdown).findChildren(\"ul\").each((function(e){e.classList.toggle(\"show\",!1),window.innerWidth\u003c768\u0026\u0026t.isParentNavbar\u0026\u0026e.style.removeProperty(\"left\")}))},showDropdownMenu:function(){var t\u003dthis;this.show\u003d!0,pn(this.$refs.dropdown).findChildren(\"ul\").each((function(e){e.classList.toggle(\"show\",!0),window.innerWidth\u003c768\u0026\u0026t.isParentNavbar\u0026\u0026mn(e)}))}},mounted:function(){var t\u003dthis,e\u003dpn(this.$refs.dropdown);this.$slots.button\u0026\u0026e.findChildren(\".dropdown-toggle\").forEach((function(t){return t.setAttribute(\"data-bs-toggle\",\"dropdown\")})),this.show\u0026\u0026this.showDropdownMenu(),e.onBlur((function(){t.hideDropdownMenu()}),!1),e.findChildren(\"a,button.dropdown-toggle\").on(\"click\",(function(e){return e.preventDefault(),t.disabledBool||(t.show?t.hideDropdownMenu():t.showDropdownMenu()),!1})),e.findChildren(\"ul\").on(\"click\",\"li\u003ea\",(function(e){e.target.classList.contains(\"submenu-toggle\")||t.hideDropdownMenu()}))},beforeDestroy:function(){var t\u003dpn(this.$refs.dropdown);t.offBlur(),t.findChildren(\"a,button\").off(),t.findChildren(\"ul\").off()}},Xe,[],!1,null,\"ccda25c0\",null).exports;var yn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[n(\"nav\",{ref:\"navbar\",class:[\"navbar\",\"navbar-expand-md\",\"d-print-none\",t.themeOptions,t.addClass,t.fixedOptions]},[n(\"div\",{staticClass:\"container-fluid\"},[n(\"div\",{staticClass:\"navbar-left\"},[t._t(\"brand\")],2),t._v(\" \"),n(\"div\",{ref:\"navbarDefault\",staticClass:\"navbar-default\"},[n(\"ul\",{staticClass:\"navbar-nav me-auto mt-2 mt-lg-0\"},[t._t(\"default\")],2)]),t._v(\" \"),t.slots.right?n(\"ul\",{staticClass:\"navbar-nav navbar-right\"},[t._t(\"right\")],2):t._e()])]),t._v(\" \"),n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isLowerNavbarShowing,expression:\"isLowerNavbarShowing\"}],ref:\"lowerNavbar\",staticClass:\"lower-navbar-container\"},[t._t(\"lower-navbar\",(function(){return[n(\"site-nav-button\"),t._v(\" \"),n(\"page-nav-button\")]}))],2)])};function wn(t,e){(null\u003d\u003de||e\u003et.length)\u0026\u0026(e\u003dt.length);for(var n\u003d0,i\u003dnew Array(e);n\u003ce;n++)i[n]\u003dt[n];return i}function bn(t,e){if(t){if(\"string\"\u003d\u003dtypeof t)return wn(t,e);var n\u003dObject.prototype.toString.call(t).slice(8,-1);return\"Object\"\u003d\u003d\u003dn\u0026\u0026t.constructor\u0026\u0026(n\u003dt.constructor.name),\"Map\"\u003d\u003d\u003dn||\"Set\"\u003d\u003d\u003dn?Array.from(t):\"Arguments\"\u003d\u003d\u003dn||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?wn(t,e):void 0}}function _n(t){return function(t){if(Array.isArray(t))return wn(t)}(t)||function(t){if(\"undefined\"!\u003dtypeof Symbol\u0026\u0026null!\u003dt[Symbol.iterator]||null!\u003dt[\"@@iterator\"])return Array.from(t)}(t)||bn(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function Sn(t){return t.endsWith(\".html\")?t.toLowerCase():t.endsWith(\"/\")?\"\".concat(t,\"index.html\").toLowerCase():t.endsWith(\"/\")?t.toLowerCase():\"\".concat(t,\".html\").toLowerCase()}yn._withStripped\u003d!0;var xn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.showSiteNav?n(\"overlay\",{attrs:{type:\"siteNav\",\"portal-name\":t.portalName},scopedSlots:t._u([{key:\"navMenuIcon\",fn:function(){return[n(\"div\",{class:[\"toggle-site-nav-button\"]},[n(\"span\"),t._v(\" \"),n(\"span\"),t._v(\" \"),n(\"span\")])]},proxy:!0}],null,!1,3920804522)}):t._e()};xn._withStripped\u003d!0;const Cn\u003dqe({data:function(){return{portalName:void 0,show:!1}},computed:{showSiteNav:function(){return this.show\u0026\u0026this.portalName}},methods:{toggleSiteNavButton:function(){window.innerWidth\u003c992?this.show\u003d!0:this.show\u003d!1}},mounted:function(){null!\u003d\u003ddocument.querySelector(\"#site-nav a\")?this.portalName\u003d\"site-nav\":null!\u003d\u003ddocument.querySelector(\".site-nav-root a\")\u0026\u0026(this.portalName\u003d\"mb-site-nav\"),this.toggleSiteNavButton(),pn(window).on(\"resize\",this.toggleSiteNavButton)},beforeDestroy:function(){pn(window).off(\"resize\",this.toggleSiteNavButton)}},xn,[],!1,null,\"d6ffaa8e\",null).exports;var $n\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.showPageNav?n(\"overlay\",{attrs:{type:\"pageNav\",\"portal-name\":t.portalName},scopedSlots:t._u([{key:\"navMenuIcon\",fn:function(){return[n(\"div\",{class:[\"toggle-page-nav-button\"]},[n(\"span\"),t._v(\" \"),n(\"span\"),t._v(\" \"),n(\"span\")])]},proxy:!0}],null,!1,171840498)}):t._e()};$n._withStripped\u003d!0;const kn\u003dqe({data:function(){return{portalName:void 0,show:!1}},computed:{showPageNav:function(){return this.show\u0026\u0026this.portalName}},methods:{togglePageNavButton:function(){window.innerWidth\u003c1300?this.show\u003d!0:this.show\u003d!1}},mounted:function(){null!\u003d\u003ddocument.querySelector(\"#page-nav a\")?this.portalName\u003d\"page-nav\":null!\u003d\u003ddocument.querySelector(\"#mb-page-nav a\")\u0026\u0026(this.portalName\u003d\"mb-page-nav\"),this.togglePageNavButton(),pn(window).on(\"resize\",this.togglePageNavButton)},beforeDestroy:function(){pn(window).off(\"resize\",this.togglePageNavButton)}},$n,[],!1,null,\"4b08b1df\",null).exports;const Tn\u003dqe({components:{SiteNavButton:Cn,PageNavButton:kn},props:{type:{type:String,default:\"primary\"},addClass:{type:String,default:\"\"},fixed:{type:[Boolean,String],default:!1},defaultHighlightOn:{type:String,default:\"sibling-or-child\"}},provide:function(){return{toggleLowerNavbar:this.toggleLowerNavbar,isParentNavbar:!0}},data:function(){return{id:\"bs-example-navbar-collapse-1\",styles:{},isLowerNavbarShowing:!1}},computed:{fixedBool:function(){return Re(this.fixed)},fixedOptions:function(){return this.fixedBool?\"navbar-fixed\":\"\"},slots:function(){return this.$scopedSlots},themeOptions:function(){switch(this.type){case\"none\":return\"\";case\"light\":return\"navbar-light bg-light\";case\"dark\":return\"navbar-dark bg-dark\";case\"primary\":default:return\"navbar-dark bg-primary\"}}},methods:{splitUrl:function(t){var e\u003dnew URL(Sn(t));return\"\".concat(e.pathname).substr(1).split(\"/\")},isEqualExceptLast:function(t,e){for(var n\u003d0;n\u003ct.length-1;n+\u003d1)if(t[n]!\u003d\u003de[n])return!1;return!0},isSibling:function(t,e){var n\u003dthis.splitUrl(e),i\u003dthis.splitUrl(t);return n.length\u003d\u003d\u003di.length\u0026\u0026this.isEqualExceptLast(n,i)},isChild:function(t,e){var n\u003dthis.splitUrl(e),i\u003dthis.splitUrl(t);return!(i.length\u003c\u003dn.length)\u0026\u0026this.isEqualExceptLast(n,i)},isExact:function(t,e){return Sn(t)\u003d\u003d\u003dSn(e)},addClassIfDropdown:function(t,e,n){t.includes(e)\u0026\u0026(e.classList.add(\"dropdown-current\"),this.addClassIfSubmenu(e,n))},addClassIfSubmenu:function(t,e){for(var n\u003dt.parentElement;n!\u003d\u003de;)n.classList.contains(\"dropdown-submenu\")\u0026\u0026pn(n).findChildren(\"a\").each((function(t){return t.classList.add(\"dropdown-current\")})),n\u003dn.parentElement},highlightLink:function(t){var e\u003dthis.defaultHighlightOn,n\u003d[];this.$el.querySelectorAll(\".navbar-nav\").forEach((function(t){return n.push.apply(n,_n(Array.from(t.children)))}));for(var i\u003d0;i\u003cn.length;i+\u003d1)for(var o\u003dn[i],r\u003d[o],s\u003dArray.from(o.querySelectorAll(\"a.nav-link\")),a\u003dArray.from(o.querySelectorAll(\"a.dropdown-item\")),l\u003dr.concat(s).concat(a).filter((function(t){return t.href})),c\u003d0;c\u003cl.length;c+\u003d1){var u\u003dl[c];if(\"none\"!\u003d\u003d(u.getAttribute(\"highlight-on\")||e)\u0026\u0026this.isExact(t,u.href))return o.classList.add(\"current\"),void this.addClassIfDropdown(a,u,o)}for(var d\u003d0;d\u003cn.length;d+\u003d1)for(var h\u003dn[d],p\u003d[h],f\u003dArray.from(h.querySelectorAll(\"a.nav-link\")),m\u003dArray.from(h.querySelectorAll(\"a.dropdown-item\")),v\u003dp.concat(f).concat(m).filter((function(t){return t.href})),g\u003d0;g\u003cv.length;g+\u003d1){var y\u003dv[g],w\u003dy.getAttribute(\"highlight-on\")||e;if(\"none\"!\u003d\u003dw)if(\"sibling-or-child\"\u003d\u003d\u003dw){if(this.isSibling(t,y.href)||this.isChild(t,y.href))return h.classList.add(\"current\"),void this.addClassIfDropdown(m,y,h)}else if(\"sibling\"\u003d\u003d\u003dw){if(this.isSibling(t,y.href))return h.classList.add(\"current\"),void this.addClassIfDropdown(m,y,h)}else if(\"child\"\u003d\u003d\u003dw\u0026\u0026this.isChild(t,y.href))return h.classList.add(\"current\"),void this.addClassIfDropdown(m,y,h)}},toggleLowerNavbar:function(){this.$refs.lowerNavbar.childElementCount\u003e0?this.isLowerNavbarShowing\u003d!0:this.isLowerNavbarShowing\u003d!1}},created:function(){this._navbar\u003d!0},mounted:function(){var t\u003dthis,e\u003dpn(\u0027.dropdown\u003e[data-bs-toggle\u003d\"dropdown\"]\u0027,this.$el).parent();e.on(\"click\",\".dropdown-toggle\",(function(t){t.preventDefault(),e.each((function(e){e.contains(t.target)\u0026\u0026e.classList.toggle(\"open\")}))})).on(\"click\",\".dropdown-menu\u003eli\u003ea\",(function(t){e.each((function(e){e.contains(t.target)\u0026\u0026e.classList.remove(\"open\")}))})).onBlur((function(t){e.each((function(e){e.contains(t.target)||e.classList.remove(\"open\")}))})),this.highlightLink(window.location.href);var n\u003dpn(this.$refs.navbarDefault).find(\".current\")[0];n\u0026\u0026window.innerWidth\u003c768\u0026\u0026n.offsetLeft+n.offsetWidth\u003ewindow.innerWidth\u0026\u0026(this.$refs.navbarDefault.scrollLeft\u003dn.offsetLeft+n.offsetWidth-window.innerWidth),this.toggleLowerNavbar(),pn(window).on(\"resize\",this.toggleLowerNavbar),pn(this.$refs.navbarDefault).on(\"wheel\",(function(e){window.innerWidth\u003c768\u0026\u0026!function(t){for(var e\u003d0;e\u003ct.length;e+\u003d1)if(t[e].classList\u0026\u0026t[e].classList.contains(\"dropdown-menu\"))return!0;return!1}(e.path)\u0026\u0026(e.preventDefault(),t.$refs.navbarDefault.scrollLeft+\u003de.deltaY)}))},beforeDestroy:function(){pn(\".dropdown\",this.$el).off(\"click\").offBlur(),pn(window).off(\"resize\",this.toggleLowerNavbar),pn(this.$refs.navbarDefault).off(\"wheel\")}},yn,[],!1,null,\"7c0fd418\",null).exports;var En\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.isMinimal?n(\"minimal-panel\",t._b({attrs:{\"panel-id\":t.panelId},scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)},\"minimal-panel\",t.$attrs,!1)):n(\"nested-panel\",t._b({attrs:{\"panel-id\":t.panelId,type:t.type},scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)},\"nested-panel\",t.$attrs,!1))};En._withStripped\u003d!0;var On\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.localMinimized?n(\"span\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[n(\"span\",{staticClass:\"morph\"},[n(\"button\",{class:[\"morph-display-wrapper\",\"btn\",t.btnType],on:{click:function(e){return t.open()}}},[t.noMinimizedSwitch?t._e():n(\"div\",{staticClass:\"minimal-caret-wrapper\"},[n(\"span\",{class:[\"glyphicon\",\"glyphicon-chevron-right\"]})]),t._v(\" \"),n(\"span\",{staticClass:\"card-title\"},[t._t(\"_alt\",(function(){return[t._t(\"header\")]}))],2)])])]):n(\"div\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[n(\"div\",{class:[\"card\",{\"expandable-card\":t.isExpandableCard},t.borderType]},[n(\"div\",{class:[\"card-header\",{\"header-toggle\":t.isExpandableCard},t.cardType,t.borderType],on:{click:function(e){e.preventDefault(),e.stopPropagation(),t.isExpandableCard\u0026\u0026t.toggle()}}},[n(\"div\",{staticClass:\"caret-wrapper\"},[t.showCaret?n(\"span\",{class:[\"glyphicon\",t.localExpanded?\"glyphicon-chevron-down\":\"glyphicon-chevron-right\"]}):t._e()]),t._v(\" \"),n(\"div\",{ref:\"headerWrapper\",class:[\"header-wrapper card-title\",t.cardType,{\"text-white\":!t.isLightBg,\"header-transparent\":!t.shouldShowHeader}]},[t._t(\"header\")],2),t._v(\" \"),n(\"div\",{staticClass:\"button-wrapper\"},[t._t(\"button\",(function(){return[n(\"panel-switch\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isExpandableCard\u0026\u0026!t.noSwitchBool\u0026\u0026!t.showCaret,expression:\"isExpandableCard \u0026\u0026 !noSwitchBool \u0026\u0026 !showCaret\"}],attrs:{\"is-open\":t.localExpanded,\"is-light-bg\":t.isLightBg}}),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.noCloseBool,expression:\"!noCloseBool\"}],staticClass:\"close-button btn\",class:[t.isLightBg?\"btn-outline-secondary\":\"btn-outline-light\",{\"seamless-button\":t.isSeamless}],attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.close()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-remove\",attrs:{\"aria-hidden\":\"true\"}})]),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.popupUrl,expression:\"popupUrl\"}],staticClass:\"popup-button btn\",class:[t.isLightBg?\"btn-outline-secondary\":\"btn-outline-light\",{\"seamless-button\":t.isSeamless}],attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.openPopup()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-new-window\",attrs:{\"aria-hidden\":\"true\"}})])]}))],2)]),t._v(\" \"),n(\"div\",{ref:\"panel\",staticClass:\"card-collapse\",class:{\"card-peek-collapsed\":t.shouldShowPeek}},[t.wasRetrieverLoaded||t.preloadBool?n(\"div\",{staticClass:\"card-body\"},[t._t(\"default\"),t._v(\" \"),t.hasSrc?n(\"retriever\",{ref:\"retriever\",attrs:{src:t.srcWithoutFragment,fragment:t.fragment},on:{\"src-loaded\":t.retrieverUpdateMaxHeight}}):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"bottom-button-wrapper\"},[n(\"panel-switch\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isExpandableCard\u0026\u0026t.bottomSwitchBool,expression:\"isExpandableCard \u0026\u0026 bottomSwitchBool\"}],attrs:{\"is-open\":t.localExpanded},nativeOn:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggle(!0)}}})],1)],2):t._e(),t._v(\" \"),n(\"hr\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isSeamless,expression:\"isSeamless\"}]})]),t._v(\" \"),n(\"transition\",{attrs:{name:\"peek-read-more-fade\"}},[t.shouldShowPeek?n(\"div\",{staticClass:\"peek-read-more glyphicon glyphicon-chevron-down\",on:{click:function(e){return t.toggle()}}}):t._e()])],1)])};On._withStripped\u003d!0;const Bn\u003d{props:{type:{type:String,default:null},expandable:{type:[Boolean,String],default:!0},isOpen:{type:[Boolean,String],default:null},expanded:{type:[Boolean,String],default:null},minimized:{type:[Boolean,String],default:!1},noMinimizedSwitch:{type:[Boolean,String],default:!1},noSwitch:{type:[Boolean,String],default:!1},noClose:{type:[Boolean,String],default:!1},popupUrl:{type:String,default:null},src:{type:String},bottomSwitch:{type:[Boolean,String],default:!0},preload:{type:[Boolean,String],default:!1},addClass:{type:String,default:\"\"},expandHeaderless:{type:Boolean,default:!1},peek:{type:Boolean,default:!1},panelId:{type:String,default:null}},computed:{expandableBool:function(){return Re(this.expandable)},isOpenBool:function(){return Re(this.isOpen)},expandedBool:function(){return Re(this.expanded)},minimizedBool:function(){return Re(this.minimized)},noSwitchBool:function(){return Re(this.noSwitch)},noCloseBool:function(){return Re(this.noClose)},bottomSwitchBool:function(){return Re(this.bottomSwitch)},preloadBool:function(){return Re(this.preload)},hasHeaderBool:function(){return this.$scopedSlots.header},isExpandableCard:function(){return this.expandableBool},hasId:function(){return this.panelId},hasSrc:function(){return this.src\u0026\u0026this.src.length\u003e0},srcWithoutFragment:function(){return this.src.split(\"#\")[0]},shouldShowHeader:function(){return!this.localExpanded||!this.expandHeaderless},shouldShowPeek:function(){return this.peek\u0026\u0026!this.localExpanded},collapsedPanelHeight:function(){return this.peek?125:0}},data:function(){return{localExpanded:!1,localMinimized:!1,wasRetrieverLoaded:!1,isRetrieverLoadDone:!this.src,fragment:\"\"}},methods:{toggle:function(t){var e\u003dthis;this.wasRetrieverLoaded?(this.localExpanded?(t\u0026\u0026(this.$refs.panel.style.maxHeight\u003d\"\".concat(this.$refs.panel.scrollHeight,\"px\")),requestAnimationFrame((function(){if(e.$el.getBoundingClientRect().top\u003c0){var n,i\u003ddocument.querySelector(\"header[sticky]\");if(null\u003d\u003di)n\u003d0;else{var o\u003dwindow.getComputedStyle(i,null);n\u003di.clientHeight-parseFloat(o.paddingTop)-parseFloat(o.paddingBottom)||0}window.scrollTo({top:window.scrollY+e.$el.getBoundingClientRect().top-n-3,left:0,behavior:t?\"smooth\":\"instant\"})}e.$refs.panel.style.maxHeight\u003d\"\".concat(e.collapsedPanelHeight,\"px\")}))):(this.$refs.panel.style.transition\u003d\"max-height 0.5s ease-in-out\",this.$refs.panel.style.maxHeight\u003d\"\".concat(this.$refs.panel.scrollHeight,\"px\")),this.localExpanded\u003d!this.localExpanded):this.open()},close:function(){this.localMinimized\u003d!0,this.localExpanded\u003d!1},open:function(){var t\u003dthis;this.localMinimized\u003d!1,this.$nextTick((function(){t.initPanel(),t.localExpanded\u003d!0,t.wasRetrieverLoaded\u003d!0,t.$nextTick((function(){t.$refs.panel.style.maxHeight\u003d\"\".concat(t.$refs.panel.scrollHeight,\"px\")}))}))},openPopup:function(){window.open(this.popupUrl)},retrieverUpdateMaxHeight:function(){this.isRetrieverLoadDone\u003d!0,this.localExpanded\u0026\u0026(this.expandedBool?this.$refs.panel.style.maxHeight\u003d\"none\":this.$refs.panel.style.maxHeight\u003d\"\".concat(this.$refs.panel.scrollHeight,\"px\"))},initPanel:function(){var t\u003dthis;this.$refs.panel.addEventListener(\"transitionend\",(function(e){t.localExpanded\u0026\u0026t.isRetrieverLoadDone\u0026\u0026e.target\u003d\u003d\u003dt.$refs.panel\u0026\u0026(t.$refs.panel.style.maxHeight\u003d\"none\")})),this.localExpanded?this.$refs.panel.style.maxHeight\u003d\"none\":this.$refs.panel.style.maxHeight\u003d\"\".concat(this.collapsedPanelHeight,\"px\")}},created:function(){if(this.src){var t\u003dIe(this.src);t\u0026\u0026(this.fragment\u003dt)}var e\u003d!this.expandableBool\u0026\u0026\"false\"!\u003d\u003dthis.expanded;this.localExpanded\u003de||this.expandedBool,null\u003d\u003d\u003dthis.localExpanded\u0026\u0026(this.localExpanded\u003d!1),this.wasRetrieverLoaded\u003dthis.localExpanded||this.peek,this.localMinimized\u003dthis.minimizedBool},mounted:function(){this.localMinimized||this.initPanel()}};var Pn\u003dfunction(){var t\u003dthis.$createElement,e\u003dthis._self._c||t;return e(\"button\",{class:[\"collapse-button\",\"btn\",this.isLightBg?\"btn-outline-secondary\":\"btn-outline-light\"],attrs:{type:\"button\"}},[e(\"span\",{class:[\"collapse-icon\",\"glyphicon\",\"glyphicon-menu-down\",{opened:this.isOpenBool}],attrs:{\"aria-hidden\":\"true\"}})])};Pn._withStripped\u003d!0;const Ln\u003dqe({props:{isOpen:{type:[Boolean,String],default:!1},isLightBg:{type:Boolean,default:!0}},computed:{isOpenBool:function(){return Re(this.isOpen)}}},Pn,[],!1,null,null,null).exports;var Nn\u003dfunction(){var t\u003dthis.$createElement;return(this._self._c||t)(\"div\",[this._v(\"\\n Loading...\\n\")])};function An(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}Nn._withStripped\u003d!0;const zn\u003dqe({props:{src:{type:String,default:null},fragment:{type:String,default:null},delay:{type:[Boolean,String],default:!1},hasFetched:{type:Boolean,default:!1}},data:function(){return{hasFetchedCopy:this.hasFetched}},computed:{delayBool:function(){return Re(this.delay)},hash:function(){return Ie(this.src)||this.fragment},srcWithoutHash:function(){return this.src.split(\"#\")[0]}},methods:{fetch:function(t){function e(){return t.apply(this,arguments)}return e.toString\u003dfunction(){return t.toString()},e}((function(){var t\u003dthis;this.srcWithoutHash\u0026\u0026(this.hasFetchedCopy||fetch(this.srcWithoutHash).then((function(t){return t.text()})).then((function(e){var i\u003de;if(t.hash){var o\u003ddocument.implementation.createHTMLDocument(\"\");o.body.innerHTML\u003di,o.querySelectorAll(\"svg \u003e script\").forEach((function(t){return t.remove()})),i\u003do.querySelector(\"#\".concat(t.hash)).innerHTML}if(t.hasFetchedCopy\u003d!0,void 0\u003d\u003d\u003di\u0026\u0026t.hash)t.$el.innerHTML\u003d\"\u003cstrong\u003eError\u003c/strong\u003e: Failed to retrieve page fragment:\"+\" \".concat(t.srcWithoutHash,\"#\").concat(t.hash);else{var r\u003dfunction(t){for(var e\u003d1;e\u003carguments.length;e++){var i\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?An(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):An(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}({},t.$root.$data);(new(Vue.extend({template:\"\u003cdiv\u003e\\n\".concat(i,\"\\n\u003c/div\u003e\"),data:function(){return r}}))).$mount(t.$el),t.$emit(\"src-loaded\")}})).catch((function(e){console.error(e),t.$el.innerHTML\u003d\"\u003cstrong\u003eError\u003c/strong\u003e: Failed to retrieve content from source: \"+\"\u003cem\u003e\".concat(t.srcWithoutHash,\"\u003c/em\u003e\"),t.$emit(\"src-loaded\")})))}))},mounted:function(){this.$nextTick((function(){this.srcWithoutHash||(this.$el.innerHTML\u003d\"\"),this.delayBool||this.fetch()}))}},Nn,[],!1,null,null,null).exports;const Mn\u003dqe({mixins:[Bn],components:{panelSwitch:Ln,retriever:zn},computed:{showCaret:function(){return this.isSeamless\u0026\u0026this.expandableBool},isSeamless:function(){return\"seamless\"\u003d\u003d\u003dthis.type},btnType:function(){return this.isSeamless||\"light\"\u003d\u003d\u003dthis.type?\"btn-outline-secondary\":\"btn-outline-\".concat(this.type||\"secondary\")},borderType:function(){return this.isSeamless?\"border-0\":this.type?\"light\"\u003d\u003d\u003dthis.type?\"\":\"border-\".concat(this.type):\"\"},cardType:function(){return this.isSeamless?\"bg-white\":\"bg-\".concat(this.type||\"light\")},isLightBg:function(){return\"bg-light\"\u003d\u003d\u003dthis.cardType||\"bg-white\"\u003d\u003d\u003dthis.cardType||\"bg-warning\"\u003d\u003d\u003dthis.cardType}}},On,[],!1,null,\"3602e6fc\",null).exports;var Hn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.localMinimized?n(\"span\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[t.hasId?n(\"span\",{staticClass:\"anchor\",attrs:{id:t.panelId}}):t._e(),t._v(\" \"),n(\"span\",{staticClass:\"morph\"},[n(\"button\",{staticClass:\"morph-display-wrapper btn card-title morph-title\",on:{click:function(e){return t.minimalOpen()}}},[t.noMinimizedSwitch?t._e():n(\"div\",{class:[\"glyphicon\",\"glyphicon-chevron-right\"]}),t._v(\" \"),t._t(\"_alt\",(function(){return[n(\"span\",{staticClass:\"card-title\"},[t._t(\"header\")],2)]}))],2)])]):n(\"div\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[t.hasId?n(\"span\",{staticClass:\"anchor\",attrs:{id:t.panelId}}):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"card card-flex\"},[n(\"div\",{class:[\"header-wrapper\",{\"header-wrapper-bottom\":t.isHeaderAtBottom,\"header-toggle\":t.isExpandableCard}],on:{click:function(e){e.preventDefault(),e.stopPropagation(),t.isExpandableCard\u0026\u0026t.minimalToggle()}}},[n(\"transition\",{attrs:{name:\"header-fade\"}},[n(\"span\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.isHeaderAtBottom,expression:\"!isHeaderAtBottom\"}],ref:\"headerWrapper\",class:[\"card-title\",{ellipses:!t.hasHeaderBool}]},[n(\"span\",{staticClass:\"card-title-inline\"},[t._t(\"header\")],2),t._v(\" \"),n(\"span\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.showDownSwitch,expression:\"showDownSwitch\"}],staticClass:\"minimal-button glyphicon glyphicon-menu-down minimal-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])]),t._v(\" \"),n(\"div\",{class:[\"button-wrapper\",{\"button-wrapper-expanded\":t.isHeaderAtBottom}]},[t._t(\"button\",(function(){return[n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.noCloseBool,expression:\"!noCloseBool\"}],staticClass:\"minimal-button\",attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.minimalClose()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-remove minimal-close-button\",attrs:{\"aria-hidden\":\"true\"}})]),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:null!\u003d\u003dt.popupUrl,expression:\"popupUrl !\u003d\u003d null\"}],staticClass:\"minimal-button\",attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.openPopup()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-new-window minimal-popup-button\",attrs:{\"aria-hidden\":\"true\"}})]),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isHeaderAtBottom\u0026\u0026t.isExpandableCard\u0026\u0026t.bottomSwitchBool,expression:\"isHeaderAtBottom \u0026\u0026 isExpandableCard \u0026\u0026 bottomSwitchBool\"}],staticClass:\"minimal-button\",attrs:{type:\"button\"}},[n(\"span\",{staticClass:\"glyphicon glyphicon-menu-up minimal-menu-up\",attrs:{\"aria-hidden\":\"true\"}})])]}))],2)],1),t._v(\" \"),n(\"div\",{ref:\"panel\",staticClass:\"card-collapse\",class:{\"card-peek-collapsed\":t.shouldShowPeek}},[t.wasRetrieverLoaded||t.preloadBool?n(\"div\",{staticClass:\"card-body\"},[t._t(\"default\"),t._v(\" \"),t.hasSrc?n(\"retriever\",{ref:\"retriever\",attrs:{src:t.srcWithoutFragment,fragment:t.fragment},on:{\"src-loaded\":t.retrieverUpdateMaxHeight}}):t._e()],2):t._e()])])])};Hn._withStripped\u003d!0;var Dn\u003dqe({mixins:[Bn],components:{retriever:zn},data:function(){return{isHeaderAtBottom:!1}},computed:{showDownSwitch:function(){return this.hasHeaderBool\u0026\u0026this.isExpandableCard\u0026\u0026!this.noSwitchBool}},methods:{minimalToggle:function(){var t\u003dthis;if(this.localExpanded){this.$refs.panel.addEventListener(\"transitionend\",(function e(n){n.target\u003d\u003d\u003dt.$refs.panel\u0026\u0026(t.isHeaderAtBottom\u003d!1,t.$refs.panel.removeEventListener(\"transitionend\",e))}))}else this.isHeaderAtBottom\u003d!0;this.toggle(!0)},minimalOpen:function(){this.open(),this.isHeaderAtBottom\u003d!0},minimalClose:function(){this.close(),this.isHeaderAtBottom\u003d!1}},created:function(){this.isHeaderAtBottom\u003dthis.localExpanded}},Hn,[],!1,null,\"6cec1f15\",null);const Rn\u003dqe({components:{nestedPanel:Mn,minimalPanel:Dn.exports},props:{panelId:{type:String,default:null},type:{type:String,default:null}},computed:{isMinimal:function(){return\"minimal\"\u003d\u003d\u003dthis.type}}},En,[],!1,null,null,null).exports;var jn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"annotate-image-wrapper\",t.addClass]},[n(\"img\",{ref:\"pic\",staticClass:\"annotate-image\",attrs:{src:t.src,alt:t.alt,width:t.computedWidth,height:t.computedHeight,loading:t.computedLoadType},on:{\"~load\":function(e){return t.computeWidthAndHeight.apply(null,arguments)}}}),t._v(\" \"),n(\"div\",{staticStyle:{top:\"0\",left:\"0\",height:\"0\"}},[t._t(\"default\")],2)])};jn._withStripped\u003d!0;const In\u003dqe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:\"\"},width:{type:String,default:\"\"},lazy:{type:Boolean,default:!1},addClass:{type:String,default:\"\"}},computed:{hasWidth:function(){return\"\"!\u003d\u003dthis.width},hasHeight:function(){return\"\"!\u003d\u003dthis.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight},computedHeight:function(){return this.heightFromWidth},computedLoadType:function(){return this.lazy?\"lazy\":\"eager\"}},data:function(){return{widthFromHeight:\"\",heightFromWidth:\"\"}},methods:{computeWidthAndHeight:function(){var t\u003dthis.$refs.pic,e\u003dt.naturalHeight,n\u003dt.naturalWidth/e;this.hasWidth?this.heightFromWidth\u003dMath.round(je(this.width)/n).toString():this.hasHeight\u0026\u0026(this.widthFromHeight\u003dMath.round(je(this.height)*n).toString(),this.heightFromWidth\u003dthis.height)}},provide:function(){return{width:this.width,height:this.height,src:this.src}}},jn,[],!1,null,null,null).exports;var qn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[t.hasBottomText\u0026\u0026t.hasLabel?n(\"div\",{staticClass:\"legend-wrapper\"},[n(\"div\",{staticClass:\"text-header\"},[t._v(\"\\n \"+t._s(t.computedBottomHeader)+\"\\n \")]),t._v(\" \"),t.hasContent?n(\"div\",[t._t(\"content\")],2):t._e()]):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"annotate-point\"},[t.isMounted?n(\"div\",{staticClass:\"popover-annotation\"},[n(\"div\",{style:t.pointPosition},[t.isMounted?n(\"v-popover\",{attrs:{placement:t.placement,delay:0,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,distance:t.computeDistance,disabled:!t.hasPopover,skidding:t.computeSkidding,\"arrow-padding\":t.computeArrowPadding,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[t.hasContent||t.hasHeader?n(\"div\",{staticClass:\"popover-container\"},[t.hasHeader?n(\"h3\",{staticClass:\"popover-header\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),t.hasContent?n(\"div\",{staticClass:\"popover-body\"},[t._t(\"content\")],2):t._e()]):t._e()]},proxy:!0}],null,!0)},[n(\"div\",{staticClass:\"hover-wrapper\"},[t._t(\"default\",(function(){return[n(\"button\",{staticClass:\"hover-point\",style:t.pointStyle})]})),t._v(\" \"),n(\"div\",{staticClass:\"hover-label\",style:t.labelStyle},[t._t(\"label\")],2)],2)]):t._e()],1)]):t._e()])])};qn._withStripped\u003d!0;const Wn\u003dqe({props:{content:{type:String,default:\"\"},header:{type:String,default:\"\"},placement:{type:String,default:\"top\"},x:{type:String,default:null},y:{type:String,default:null},color:{type:String,default:\"green\"},textColor:{type:String,default:\"black\"},fontSize:{type:String,default:\"14\"},opacity:{type:String,default:\"0.3\"},size:{type:String,default:\"40\"},label:{type:String,default:\"\"},legend:{type:String,default:\"popover\"},trigger:{type:String,default:\"click\"}},data:function(){return{targetEl:{},isMounted:!1,width:this.width,height:this.height,src:this.src}},inject:[\"width\",\"height\",\"src\"],computed:{pointPosition:function(){var t\u003dthis;this.computeImage((function(){t.width\u003dt.parentEl.offsetWidth,t.height\u003dt.parentEl.offsetHeight}));var e\u003d100*(this.toDecimal(this.x)-this.size/2/this.width),n\u003d100*(this.toDecimal(this.y)-this.size/2/this.height);return{left:\"\".concat(e,\"%\"),top:\"\".concat(n,\"%\"),position:\"absolute\",pointerEvents:\"all\"}},pointStyle:function(){var t\u003dthis.hasPopover?\"pointer\":\"default\";return{backgroundColor:this.color,opacity:this.opacity,width:\"\".concat(this.size,\"px\"),height:\"\".concat(this.size,\"px\"),cursor:t}},labelStyle:function(){return{fontSize:\"\".concat(Math.min(this.fontSize,this.size),\"px\"),color:this.textColor}},triggers:function(){return this.trigger.split(\" \")},computeDistance:function(){return\"top\"\u003d\u003d\u003dthis.placement?je(this.size*(2/3)):je(this.size/10)},computeSkidding:function(){return\"left\"\u003d\u003d\u003dthis.placement||\"right\"\u003d\u003d\u003dthis.placement?-je(this.size/4):0},computeArrowPadding:function(){return\"left\"\u003d\u003d\u003dthis.placement||\"right\"\u003d\u003d\u003dthis.placement?je(this.size/2):0},hasHeader:function(){return!!this.$scopedSlots.header},hasContent:function(){return!!this.$scopedSlots.content},hasWidth:function(){return\"\"!\u003d\u003dthis.width},hasHeight:function(){return\"\"!\u003d\u003dthis.height},hasLabel:function(){return!!this.$scopedSlots.label},hasBottomText:function(){return\"bottom\"\u003d\u003d\u003dthis.legend||\"both\"\u003d\u003d\u003dthis.legend},hasPopover:function(){return(this.hasContent||this.hasHeader)\u0026\u0026(\"popover\"\u003d\u003d\u003dthis.legend||\"both\"\u003d\u003d\u003dthis.legend)},computedBottomHeader:function(){return\"\"!\u003d\u003dthis.label\u0026\u0026\"\"\u003d\u003d\u003dthis.header?this.label:\"\"\u003d\u003d\u003dthis.label\u0026\u0026\"\"!\u003d\u003dthis.header?this.header:\"\".concat(this.label,\": \").concat(this.header)}},methods:{computeImage:function(t){var e\u003dnew Image;e.onload\u003dfunction(){t()},e.src\u003dthis.src},toDecimal:function(t){return parseFloat(t)/100}},mounted:function(){this.targetEl\u003dthis.$el,this.isMounted\u003d!0,this.parentEl\u003dthis.$el.parentElement.parentElement.querySelector(\".annotate-image\")}},qn,[],!1,null,null,null).exports;var Fn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:[\"image-wrapper\",t.addClass]},[n(\"img\",{ref:\"pic\",staticClass:\"img-fluid rounded\",attrs:{src:t.src,alt:t.alt,width:t.computedWidth,height:t.computedHeight,loading:t.computedLoadType},on:{\"~load\":function(e){return t.computeWidthAndHeight.apply(null,arguments)}}}),t._v(\" \"),n(\"span\",{staticClass:\"image-caption\"},[t._t(\"default\")],2)])};Fn._withStripped\u003d!0;const Vn\u003dqe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:\"\"},width:{type:String,default:\"\"},lazy:{type:Boolean,default:!1},addClass:{type:String,default:\"\"}},computed:{hasWidth:function(){return\"\"!\u003d\u003dthis.width},hasHeight:function(){return\"\"!\u003d\u003dthis.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight},computedHeight:function(){return this.heightFromWidth},computedLoadType:function(){return this.lazy?\"lazy\":\"eager\"}},data:function(){return{widthFromHeight:\"\",heightFromWidth:\"\"}},methods:{computeWidthAndHeight:function(){var t\u003dthis.$refs.pic,e\u003dt.naturalHeight,n\u003dt.naturalWidth/e;this.hasWidth?this.heightFromWidth\u003dMath.round(je(this.width)/n).toString():this.hasHeight\u0026\u0026(this.widthFromHeight\u003dMath.round(je(this.height)*n).toString(),this.heightFromWidth\u003dthis.height)}}},Fn,[],!1,null,null,null).exports;var Un\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"quiz-container\",t.addClass]},[n(\"transition\",{attrs:{name:\"intro-outro-card\"},on:{\"after-leave\":t.showFirstQuestion}},[3\u003d\u003d\u003dt.state?n(\"div\",{staticClass:\"card intro-outro-card\"},[n(\"div\",{staticClass:\"card-body\"},[t._t(\"intro\",(function(){return[n(\"h4\",[t._v(\"\\n Click start to begin\\n \")])]})),t._v(\" \"),n(\"h5\",[t._v(t._s(t.questions.length)+\" questions\")]),t._v(\" \"),n(\"hr\"),t._v(\" \"),n(\"button\",{staticClass:\"btn btn-primary d-inline-block\",attrs:{type:\"button\"},on:{click:t.begin}},[t._v(\"\\n Start\\n \")])],2)]):t._e()]),t._v(\" \"),n(\"transition\",{attrs:{name:\"intro-outro-card\"}},[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:4\u003d\u003d\u003dt.state,expression:\"state \u003d\u003d\u003d 4\"}],staticClass:\"progress intro-outro-card\",staticStyle:{height:\"1px\"}},[n(\"div\",{staticClass:\"progress-bar progress-bar-z\",style:{width:t.currentQuestion/t.questions.length*100+\"%\"},attrs:{role:\"progressbar\",\"aria-valuemin\":\"0\",\"aria-valuemax\":t.questions.length,\"aria-valuenow\":t.currentQuestion}})])]),t._v(\" \"),t._t(\"default\"),t._v(\" \"),n(\"transition\",{attrs:{name:\"intro-outro-card\"},on:{\"after-enter\":t.setScoreCircleStyles,\"after-leave\":t.showFirstQuestion}},[5\u003d\u003d\u003dt.state?n(\"div\",{staticClass:\"card intro-outro-card\"},[n(\"div\",{staticClass:\"card-body\"},[n(\"h4\",{staticClass:\"mb-3\"},[t._v(\"\\n \"+t._s(t.scoreText)+\"\\n \")]),t._v(\" \"),n(\"svg\",{attrs:{viewBox:\"0 0 100 100\",width:\"120px\",height:\"120px\"}},[n(\"circle\",{staticClass:\"score-background-circle\",attrs:{cx:\"50\",cy:\"50\",r:\"42\"}}),t._v(\" \"),n(\"circle\",{ref:\"score\",staticClass:\"score-circle\",attrs:{cx:\"50\",cy:\"50\",r:\"42\",transform:\"rotate(-90, 50, 50)\",\"stroke-dashoffset\":\"264\"}}),t._v(\" \"),n(\"text\",{staticClass:\"score\",attrs:{x:\"22\",y:\"57\",textLength:\"56\"}},[t._v(t._s(t.score)+\" / \"+t._s(t.questions.length))])]),t._v(\" \"),n(\"hr\"),t._v(\" \"),n(\"button\",{staticClass:\"btn btn-outline-primary\",attrs:{type:\"button\"},on:{click:t.begin}},[t._v(\"\\n Retry\\n \")])])]):t._e()])],2)};Un._withStripped\u003d!0;const Qn\u003dqe({name:\"Quiz\",props:{addClass:{type:String,default:null}},data:function(){return{currentQuestion:0,questions:[],score:0,state:3}},provide:function(){return{questions:this.questions,gotoNextQuestion:this.gotoNextQuestion,showNextQuestion:this.showNextQuestion}},computed:{scoreText:function(){return this.score/this.questions.length\u003e.5?\"Well done!\":\"Try again?\"}},methods:{gotoNextQuestion:function(){this.questions[this.currentQuestion-1].hide(),this.currentQuestion+\u003d1},showNextQuestion:function(){this.currentQuestion\u003c\u003dthis.questions.length?this.questions[this.currentQuestion-1].show():this.complete()},begin:function(){this.currentQuestion\u003d1,this.score\u003d0,this.state\u003d4},showFirstQuestion:function(){this.questions.length\u0026\u0026this.questions[0].show()},reset:function(){this.questions.forEach((function(t){return t.reset()}))},complete:function(){this.score\u003dthis.questions.filter((function(t){return 2\u003d\u003d\u003dt.qState.state})).length,this.state\u003d5,this.reset()},setScoreCircleStyles:function(){var t\u003dthis.score/this.questions.length;this.$refs.score.style.strokeDashoffset\u003d264*(1-t),this.$refs.score.style.stroke\u003d\"#51c2f8\"}}},Un,[],!1,null,\"2b2275c0\",null).exports;var Xn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"transition\",{attrs:{name:t.questions?\"question\":null},on:{\"after-leave\":t.showNextQuestion}},[t.active?n(\"div\",{class:[\"card\",\"question\",t.shakeClass,t.addClass]},[t.$scopedSlots.header?n(\"div\",{staticClass:\"card-header alert-light border-bottom border-light text-dark\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"card-body\"},[t._t(\"default\"),t._v(\" \"),t.isTextQuestion()?n(\"div\",{staticClass:\"mb-2\"},[n(\"textarea\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.textareaText,expression:\"textareaText\"}],staticClass:\"form-control\",attrs:{disabled:t.qState.answered},domProps:{value:t.textareaText},on:{input:function(e){e.target.composing||(t.textareaText\u003de.target.value)}}}),t._v(\" \"),t.qState.answered?n(\"div\",[n(\"hr\"),t._v(\" \"),t.keywordsSplitTrimmed().length?n(\"strong\",[t._v(\"\\n Keywords: \\n \"),t._l(t.keywordsSplitTrimmed(),(function(e){return n(\"span\",{key:e,staticClass:\"badge rounded-pill bg-light text-dark fw-normal\"},[t._v(\"\\n \"+t._s(e)+\"\\n \")])}))],2):t._e()]):t._e()]):t._e(),t._v(\" \"),t.qState.answered\u0026\u0026t.isTextQuestion()?n(\"div\",{staticClass:\"answer\"},[t._t(\"answer\")],2):t._e(),t._v(\" \"),t.showHint?n(\"box\",{staticClass:\"mb-0 mt-3\",attrs:{type:\"tip\"}},[t._t(\"hint\")],2):t._e()],2),t._v(\" \"),t.showCardFooter?n(\"div\",{staticClass:\"card-footer alert-light border-top border-light text-dark\"},[1\u003d\u003d\u003dt.qState.state?n(\"i\",{staticClass:\"fa fa-times text-danger border-danger result-icon\"}):2\u003d\u003d\u003dt.qState.state?n(\"i\",{staticClass:\"fa fa-check text-success border-success result-icon\"}):t._e(),t._v(\" \"),n(\"transition-group\",{staticClass:\"float-end\",attrs:{name:\"q-btn\",tag:\"div\"}},[t.$scopedSlots.hint\u0026\u0026!t.showHint?n(\"button\",{key:\"hint\",staticClass:\"btn btn-success q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){t.showHint\u003d!0}}},[t._v(\"\\n Hint\\n \")]):t._e(),t._v(\" \"),0!\u003d\u003dt.qState.state||t.isTextWithoutKeywords()\u0026\u0026!t.$scopedSlots.answer?t._e():n(\"button\",{key:\"check\",staticClass:\"btn btn-primary q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){return t.checkAnswer(!!t.questions)}}},[t._v(\"\\n Check\\n \")]),t._v(\" \"),0!\u003d\u003dt.qState.state\u0026\u0026t.questions?n(\"button\",{key:\"active\",staticClass:\"btn btn-primary q-btn ms-1\",attrs:{type:\"button\"},on:{\"~click\":function(e){return t.gotoNextQuestion.apply(null,arguments)}}},[t._v(\"\\n Next\\n \")]):t._e(),t._v(\" \"),t.retryState?n(\"button\",{key:\"show\",staticClass:\"btn btn-info q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){return t.checkAnswer(!0)}}},[t._v(\"\\n Show\\n \")]):t._e(),t._v(\" \"),t.retryState?n(\"button\",{key:\"retry\",staticClass:\"btn btn-primary q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){return t.checkAnswer(!1)}}},[t._v(\"\\n Retry\\n \")]):t._e()])],1):t._e()]):t._e()])};Xn._withStripped\u003d!0;function Yn(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Kn(t){for(var e\u003d1;e\u003carguments.length;e++){var i\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?Yn(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Yn(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}const Gn\u003dqe({name:\"Question\",mixins:[{data:function(){return{active:!0}},inject:{questions:{default:void 0},gotoNextQuestion:{default:void 0},showNextQuestion:{default:\"\"}},methods:{show:function(){this.active\u003d!0},hide:function(){this.active\u003d!1},reset:function(){this.active\u003d!1,this.qState.answered\u003d!1,this.qState.state\u003d0,this.showHint\u003d!1,this.textareaText\u0026\u0026(this.textareaText\u003d\"\"),this.answers\u0026\u0026this.answers.splice(0,this.answers.length)}},created:function(){this.questions\u0026\u0026(this.active\u003d!1,this.questions.push(this))}}],props:{type:{type:String,default:\"\"},addClass:{type:String,default:null},keywords:{type:String,default:\"\"},threshold:{type:[String,Number],default:1},noIntermediateResult:{type:Boolean}},computed:{retryState:function(){return 1\u003d\u003d\u003dthis.qState.state\u0026\u0026!this.qState.answered\u0026\u0026!this.questions},showCardFooter:function(){var t\u003d!this.$scopedSlots.hint||this.showHint;return!(this.isTextWithoutKeywords()\u0026\u0026t\u0026\u0026this.qState.answered\u0026\u0026!this.questions)}},data:function(){var t\u003d{qState:{state:0,answered:!1},showHint:!1,shakeClass:null};return this.isMcqOrCheckboxQuestion()||this.isBlanksQuestion()?Kn({answers:[]},t):this.isTextQuestion()?Kn({textareaText:\"\"},t):t},provide:function(){return this.isMcqOrCheckboxQuestion()?{answers:this.answers,qOptionType:this.type,qState:this.qState}:this.isBlanksQuestion()?{answers:this.answers,qOptionType:this.type,qState:this.qState,noIntermediateResult:this.noIntermediateResult}:void 0},methods:{keywordsSplitTrimmed:function(){return this.keywords.split(\",\").filter((function(t){return\"\"!\u003d\u003dt.trim()}))},isMcqOrCheckboxQuestion:function(){return\"mcq\"\u003d\u003d\u003dthis.type||\"checkbox\"\u003d\u003d\u003dthis.type},isBlanksQuestion:function(){return\"blanks\"\u003d\u003d\u003dthis.type},isTextQuestion:function(){return\"text\"\u003d\u003d\u003dthis.type},isTextWithoutKeywords:function(){return this.isTextQuestion()\u0026\u0026!this.keywords},shakeCard:function(){var t\u003dthis;this.shakeClass\u003d\"shake\",setTimeout((function(){t.shakeClass\u003dnull}),800)},markAsCorrect:function(){this.qState.state\u003d2,this.qState.answered\u003d!0},markAsWrong:function(t){this.qState.state\u003d1,t?this.qState.answered\u003d!0:this.shakeCard()},checkMcqAnswer:function(t){var e\u003dthis.answers.find((function(t){return t.selected}));e?e.$props.correct?this.markAsCorrect():this.markAsWrong(t):this.shakeCard()},checkCheckboxAnswer:function(t){this.answers.filter((function(t){return t.answeredCorrectly})).length\u003d\u003d\u003dthis.answers.length?this.markAsCorrect():this.markAsWrong(t)},checkBlanksAnswer:function(t){for(var e\u003d0,n\u003d0;n\u003cthis.answers.length;n+\u003d1)this.answers[n].checkAnswer(),this.answers[n].ansIsCorrect\u0026\u0026(e+\u003d1);e/this.answers.length\u003e\u003dthis.threshold?this.markAsCorrect():this.markAsWrong(t)},checkTextAnswer:function(t){for(var e\u003dthis.textareaText.toLowerCase(),n\u003dthis.keywordsSplitTrimmed(),i\u003d0,o\u003d0;o\u003cn.length;o+\u003d1)e.includes(n[o].toLowerCase())\u0026\u0026(i+\u003d1);i/n.length\u003e\u003dthis.threshold?this.markAsCorrect():this.markAsWrong(t)},checkAnswer:function(t){\"mcq\"\u003d\u003d\u003dthis.type?this.checkMcqAnswer(t):\"checkbox\"\u003d\u003d\u003dthis.type?this.checkCheckboxAnswer(t):\"blanks\"\u003d\u003d\u003dthis.type?this.checkBlanksAnswer(t):this.isTextQuestion()?this.checkTextAnswer(t):this.markAsCorrect()}}},Xn,[],!1,null,\"ae369d74\",null).exports;var Zn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return\"mcq\"\u003d\u003d\u003dt.qOptionType?n(\"div\",{class:[\"form-control\",t.hintClass],on:{click:t.toggleRadioOn,mouseover:function(e){t.hover\u003d!0},mouseleave:function(e){t.hover\u003d!1}}},[n(\"div\",{class:[\"row\",{disabled:t.qState.answered}]},[n(\"div\",{staticClass:\"col-auto p-0\"},[n(\"svg\",{staticClass:\"radio-svg\",attrs:{viewBox:\"0 0 100 100\"}},[n(\"circle\",{attrs:{cx:\"50\",cy:\"50\",r:\"47\",fill:\"none\",stroke:\"black\",\"stroke-width\":\"4\"}}),t._v(\" \"),n(\"circle\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.selected,expression:\"selected\"}],attrs:{cx:\"50\",cy:\"50\",r:\"25\",fill:\"dodgerblue\"}})])]),t._v(\" \"),n(\"div\",{staticClass:\"col content\"},[t._t(\"default\")],2),t._v(\" \"),n(\"div\",{staticClass:\"col-1\"},[t.qState.answered?n(\"div\",[t.correct?n(\"i\",{staticClass:\"fa fa-check text-success\",class:{\"align-bottom\":t.$scopedSlots.reason}}):n(\"i\",{staticClass:\"fa fa-times text-danger\",class:{\"align-bottom\":t.$scopedSlots.reason}})]):t._e()])]),t._v(\" \"),t.qState.answered\u0026\u0026t.$scopedSlots.reason?n(\"div\",[n(\"hr\"),t._v(\" \"),n(\"div\",{staticClass:\"reason\"},[t._t(\"reason\")],2)]):t._e()]):\"checkbox\"\u003d\u003d\u003dt.qOptionType?n(\"div\",{class:[\"form-control\",t.hintClass],on:{click:t.toggleCheckbox,mouseover:function(e){t.hover\u003d!0},mouseleave:function(e){t.hover\u003d!1}}},[n(\"label\",{class:[\"row\",\"checkbox-label\",\"m-0\",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.selected,expression:\"selected\"}],staticClass:\"checkbox\",attrs:{disabled:t.qState.answered,type:\"checkbox\",onclick:\"event.stopPropagation()\"},domProps:{checked:Array.isArray(t.selected)?t._i(t.selected,null)\u003e-1:t.selected},on:{change:function(e){var n\u003dt.selected,i\u003de.target,o\u003d!!i.checked;if(Array.isArray(n)){var r\u003dt._i(n,null);i.checked?r\u003c0\u0026\u0026(t.selected\u003dn.concat([null])):r\u003e-1\u0026\u0026(t.selected\u003dn.slice(0,r).concat(n.slice(r+1)))}else t.selected\u003do}}}),t._v(\" \"),n(\"div\",{staticClass:\"col content\"},[t._t(\"default\")],2),t._v(\" \"),n(\"div\",{staticClass:\"col-auto\"},[t.qState.answered?n(\"div\",[t.correct?n(\"i\",{staticClass:\"fa fa-check text-success\",class:{\"align-bottom\":t.$scopedSlots.reason}}):n(\"i\",{staticClass:\"fa fa-times text-danger\",class:{\"align-bottom\":t.$scopedSlots.reason}})]):t._e()])]),t._v(\" \"),t.qState.answered\u0026\u0026t.$scopedSlots.reason?n(\"div\",[n(\"hr\"),t._v(\" \"),n(\"div\",{staticClass:\"reason\"},[t._t(\"reason\")],2)]):t._e()]):\"blanks\"\u003d\u003d\u003dt.qOptionType?n(\"div\",{class:[\"form-control\",\"blanks-form-control\",t.hintClass]},[n(\"label\",{class:[\"row\",\"m-0\",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.inputText,expression:\"inputText\"}],staticClass:\"form-control\",attrs:{disabled:t.qState.answered},domProps:{value:t.inputText},on:{input:function(e){e.target.composing||(t.inputText\u003de.target.value)}}}),t._v(\" \"),n(\"div\",{staticClass:\"col-auto\"},[t.qState.answered?n(\"div\",[t.ansIsCorrect?n(\"i\",{staticClass:\"fa fa-check text-success\"}):n(\"i\",{staticClass:\"fa fa-times text-danger blanks-cross\"})]):t._e(),t._v(\" \"),t.isIntermediateResult()?n(\"div\",[t.ansIsCorrect?n(\"i\",{staticClass:\"fa fa-check text-success\"}):n(\"i\",{staticClass:\"fa fa-times text-danger blanks-cross\"})]):t._e()]),t._v(\" \"),t.qState.answered?n(\"div\",{staticClass:\"col-auto blanks-keywords\"},[t.keywordsSplitTrimmed().length?n(\"strong\",[t._v(\"\\n Keywords: \\n \"),t._l(t.keywordsSplitTrimmed(),(function(e){return n(\"span\",{key:e,staticClass:\"badge rounded-pill bg-light text-dark fw-normal\"},[t._v(\"\\n \"+t._s(e)+\"\\n \")])}))],2):n(\"strong\",[t._v(\"No answer checking keywords provided\")])]):t._e()]),t._v(\" \"),t.qState.answered\u0026\u0026t.$scopedSlots.reason?n(\"div\",[n(\"div\",{staticClass:\"reason blanks-reason\"},[t._t(\"reason\")],2)]):t._e()]):t._e()};Zn._withStripped\u003d!0;const Jn\u003dqe({name:\"McqOption\",props:{correct:{type:Boolean,default:!1},keywords:{type:String,default:\"\"}},data:function(){return{selected:!1,hover:!1,inputText:\"\",ansIsCorrect:!1}},inject:{answers:{default:void 0},qOptionType:{default:void 0},qState:{default:void 0},noIntermediateResult:{default:void 0}},computed:{hintClass:function(){return this.qState.answered?this.correct?\"success\":\"danger\":this.selected||this.hover?\"alert-light text-dark border border-secondary\":\"\"},answeredCorrectly:function(){return this.correct\u0026\u0026this.selected||!this.correct\u0026\u0026!this.selected}},methods:{checkAnswer:function(){var t\u003d!1,e\u003dthis.inputText.toLowerCase().trim(),n\u003dthis.keywords.toLowerCase().split(\",\").filter((function(t){return\"\"!\u003d\u003dt.trim()}));this.keywords.length||(t\u003d!0);for(var i\u003d0;i\u003cn.length;i+\u003d1)if(e\u003d\u003d\u003dn[i].trim()){t\u003d!0;break}this.ansIsCorrect\u003dt},isIntermediateResult:function(){return!this.noIntermediateResult\u0026\u00261\u003d\u003d\u003dthis.qState.state\u0026\u0026!this.qState.answered},isBlanksQuestion:function(){return\"blanks\"\u003d\u003d\u003dthis.type},keywordsSplitTrimmed:function(){return this.keywords.split(\",\").filter((function(t){return\"\"!\u003d\u003dt.trim()}))},toggleRadioOn:function(){this.qState.answered||this.selected||(this.answers.forEach((function(t){t.selected\u003d!1})),this.selected\u003d!0)},toggleCheckbox:function(){this.qState.answered||(this.selected\u003d!this.selected)}},created:function(){this.answers.push(this)}},Zn,[],!1,null,\"1074287c\",null).exports;var ti\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{staticClass:\"dropdown\",staticStyle:{position:\"relative\"}},[t.algolia?n(\"div\",{attrs:{id:\"algolia-search-input\"}}):[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.value,expression:\"value\"}],staticClass:\"form-control\",attrs:{\"data-bs-toggle\":\"dropdown\",type:\"text\",placeholder:t.placeholder,autocomplete:\"off\"},domProps:{value:t.value},on:{input:[function(e){e.target.composing||(t.value\u003de.target.value)},t.update],keyup:[function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"up\",38,e.key,[\"Up\",\"ArrowUp\"])?null:t.up.apply(null,arguments)},function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"down\",40,e.key,[\"Down\",\"ArrowDown\"])?null:t.down.apply(null,arguments)}],keydown:[function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"enter\",13,e.key,\"Enter\")?null:t.hit.apply(null,arguments)},function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"])?null:t.reset.apply(null,arguments)}],blur:function(e){t.showDropdown\u003d!1}}}),t._v(\" \"),n(\"div\",{staticClass:\"form-control placeholder-div-hidden\"},[t._v(\"\\n \"+t._s(t.placeholder)+\"\\n \")])],t._v(\" \"),n(\"ul\",{ref:\"dropdown\",class:t.dropdownMenuClasses},t._l(t.items,(function(e,i){return n(\"li\",{key:i,class:{\"table-active\":t.isActive(i)}},[n(\"a\",{staticClass:\"dropdown-item\",on:{mousedown:function(e){return e.preventDefault(),t.hit.apply(null,arguments)},mousemove:function(e){return t.setActive(i)}}},[n(\"searchbar-page-item\",{attrs:{item:e,value:t.value}})],1)])})),0)],2)};function ei(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n\u003dnull\u003d\u003dt?null:\"undefined\"!\u003dtypeof Symbol\u0026\u0026t[Symbol.iterator]||t[\"@@iterator\"];if(null!\u003dn){var i,o,r,s,a\u003d[],l\u003d!0,c\u003d!1;try{if(r\u003d(n\u003dn.call(t)).next,0\u003d\u003d\u003de){if(Object(n)!\u003d\u003dn)return;l\u003d!1}else for(;!(l\u003d(i\u003dr.call(n)).done)\u0026\u0026(a.push(i.value),a.length!\u003d\u003de);l\u003d!0);}catch(t){c\u003d!0,o\u003dt}finally{try{if(!l\u0026\u0026null!\u003dn.return\u0026\u0026(s\u003dn.return(),Object(s)!\u003d\u003ds))return}finally{if(c)throw o}}return a}}(t,e)||bn(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}ti._withStripped\u003d!0;var ni\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.item.heading?n(\"div\",{staticClass:\"heading\"},[n(\"i\",{staticClass:\"fa fa-hashtag\"}),t._v(\" \"),n(\"div\",{staticClass:\"heading-text\"},[n(\"span\",{domProps:{innerHTML:t._s(t.highlight(t.item.heading.text,t.value))}}),t._v(\" \"),t._l(t.item.keywords,(function(e,i){return n(\"div\",{key:i,staticClass:\"keyword-text\",domProps:{innerHTML:t._s(t.highlight(e,t.value))}})}))],2)]):n(\"div\",[n(\"span\",{staticClass:\"page-title\",domProps:{innerHTML:t._s(t.highlight(t.item.title,t.value))}}),t._v(\" \"),t.item.keywords?n(\"br\"):t._e(),t._v(\" \"),t.item.keywords?n(\"small\",{domProps:{innerHTML:t._s(t.highlight(t.item.keywords,t.value))}}):t._e(),t._v(\" \"),n(\"hr\",{staticClass:\"page-headings-separator\"})])};ni._withStripped\u003d!0;const ii\u003dqe({props:{item:{type:Object,default:null},value:{type:String,default:\"\"}},methods:{highlight:function(t,e){for(var n,i\u003d(n\u003dfunction(){var n\u003de.split(\" \").filter((function(t){return\"\"!\u003d\u003dt})).map((function(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$\u0026\")})).map((function(t){return new RegExp(\"(\".concat(t,\")\"),\"gi\")})),i\u003d[];return n.forEach((function(e){for(var n\u003de.exec(t);null!\u003d\u003dn\u0026\u0026n.index!\u003d\u003de.lastIndex;)i.push({start:n.index,end:e.lastIndex}),n\u003de.exec(t)})),i}()).length\u003c\u003d1?n:n.sort((function(t,e){return t.start-e.start})).reduce((function(t,e){var n\u003dt[t.length-1];return!n||n.end\u003ce.start?t.push(e):n.end\u003ce.end\u0026\u0026(n.end\u003de.end),t}),[]),o\u003dt,r\u003di.length-1;r\u003e\u003d0;r-\u003d1)o\u003d\"\".concat(o.slice(0,i[r].start),\"\u003cmark\u003e\")+\"\".concat(o.slice(i[r].start,i[r].end),\"\u003c/mark\u003e\")+\"\".concat(o.slice(i[r].end));return o}}},ni,[],!1,null,\"98afe086\",null).exports;const oi\u003dqe({created:function(){this.items\u003dthis.primitiveData},props:{data:{type:Array,default:function(){return[]}},limit:{type:Number,default:8},async:{type:String,default:\"\"},keyProp:{type:String,default:null},onHit:{type:Function,default:function(t){this.reset(),this.value\u003dt}},placeholder:{type:String,default:\"Search\"},delay:{type:Number,default:200},menuAlignRight:{type:Boolean,default:!1},algolia:{type:Boolean,default:!1}},data:function(){return{value:\"\",showDropdown:!1,noResults:!0,current:0,items:[]}},computed:{primitiveData:function(){function t(t,e){var n\u003dt.join(\" \");return e.reduce((function(t,e){var i\u003dn.match(e);return t+(i?i.length:0)}),0)}if(this.value.length\u003c2||!this.data)return[];var e\u003d[],n\u003dthis.value.split(\" \").filter((function(t){return\"\"!\u003d\u003dt})).map((function(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$\u0026\")})).map((function(t){return new RegExp(t,\"ig\")}));return this.data.forEach((function(i){var o\u003di.headings,r\u003di.src,s\u003di.title,a\u003di.headingKeywords,l\u003di.frontmatterKeywords||\"\",c\u003ds||r.substring(0,r.lastIndexOf(\".\")),u\u003dt([c,l].concat(_n(Object.values(o)),_n(Object.values(a))),n);if(u\u003e0){var d\u003d[];Object.entries(o).forEach((function(e,i){var o\u003dei(e,2),s\u003do[0],u\u003do[1],h\u003dn.some((function(t){return t.test(u)})),p\u003da[s]\u0026\u0026a[s].some((function(t){return n.some((function(e){return e.test(t)}))}));if(h||p){var f\u003dt([u].concat(_n(a[s]||[])),n);(0!\u003d\u003di||u!\u003d\u003dc||l.length)\u0026\u0026d.push({heading:{id:s,text:u},keywords:a[s],src:r,totalMatches:f})}})),d.sort((function(t,e){return e.totalMatches-t.totalMatches})),e.push({headings:d,keywords:l,src:r,title:c,totalMatches:u})}})),e.sort((function(t,e){return e.totalMatches-t.totalMatches})).flatMap((function(t){return t.headings?[t].concat(_n(t.headings)):t}))},dropdownMenuClasses:function(){return[\"dropdown-menu\",\"search-dropdown-menu\",{show:this.showDropdown},{\"d-none\":!this.showDropdown},{\"dropdown-menu-end\":this.menuAlignRight}]}},methods:{update:function(){return this.value?(this.data\u0026\u0026(this.items\u003dthis.primitiveData,this.showDropdown\u003dthis.items.length\u003e0),this.async\u0026\u0026this.query(),!0):(this.reset(),!1)},query:function(t,e){var n,i\u003darguments.length\u003e2\u0026\u0026void 0!\u003d\u003darguments[2]?arguments[2]:100;function o(t){return/^[0-9]+$/.test(t)?Number(t)||1:null}return function(){for(var r\u003dthis,s\u003darguments.length,a\u003dnew Array(s),l\u003d0;l\u003cs;l++)a[l]\u003darguments[l];n\u0026\u0026clearTimeout(n),n\u003dsetTimeout((function(){t.apply(r,a)}),o(e)||o(this[e])||i)}}((function(){var t\u003dthis;(function(t){var e\u003dnew window.XMLHttpRequest,n\u003d{},i\u003d{then:function(t,e){return i.done(t).fail(e)},catch:function(t){return i.fail(t)},always:function(t){return i.done(t).fail(t)}};return[\"done\",\"fail\"].forEach((function(t){n[t]\u003d[],i[t]\u003dfunction(e){return e instanceof Function\u0026\u0026n[t].push(e),i}})),i.done(JSON.parse),e.onreadystatechange\u003dfunction(){if(4\u003d\u003d\u003de.readyState){var t\u003d{status:e.status};if(200\u003d\u003d\u003de.status)try{var i\u003de.responseText;for(var o in n.done){var r\u003dn.done[o](i);void 0!\u003d\u003dr\u0026\u0026(i\u003dr)}}catch(t){n.fail.forEach((function(e){return e(t)}))}else n.fail.forEach((function(e){return e(t)}))}},e.open(\"GET\",t),e.setRequestHeader(\"Accept\",\"application/json\"),e.send(),i})(this.async+this.value).then((function(e){t.items\u003d(t.keyProp?e[t.keyProp]:e).slice(0,t.limit),t.showDropdown\u003dt.items.length}))}),\"delay\",200),reset:function(){this.items\u003d[],this.value\u003d\"\",this.loading\u003d!1,this.showDropdown\u003d!1},setActive:function(t){this.current\u003dt},isActive:function(t){return this.current\u003d\u003d\u003dt},hit:function(t){t.preventDefault(),this.onHit(this.items[this.current],this)},down:function(){this.current\u003cthis.items.length-1\u0026\u0026(this.current+\u003d1,this.scrollListView())},up:function(){this.current\u003e0\u0026\u0026(this.current-\u003d1,this.scrollListView())},scrollListView:function(){var t\u003dthis.$refs.dropdown,e\u003dt.children[this.current],n\u003dt.scrollTop,i\u003dn+t.clientHeight,o\u003de.offsetTop+e.offsetHeight;e.offsetTop\u003cn?t.scrollTop\u003de.offsetTop:o\u003ei\u0026\u0026(t.scrollTop\u003do-t.clientHeight)}},components:{searchbarPageItem:ii}},ti,[],!1,null,\"cea1a814\",null).exports;var ri\u003dfunction(){var t\u003dthis.$createElement,e\u003dthis._self._c||t;return e(\"div\",{staticClass:\"tab-pane active printable-tab-pane\",class:{\"tab-pane-hide\":!this.show},attrs:{role:\"tabpanel\"}},[e(\"div\",{staticClass:\"nav-tabs printable-tab-header\"},[e(\"div\",{ref:\"header\",staticClass:\"nav-link active\"},[this._t(\"header\")],2)]),this._v(\" \"),this._t(\"default\"),this._v(\" \"),e(\"hr\")],2)};ri._withStripped\u003d!0;const si\u003dqe({props:{header:{type:String,default:\"\"},disabled:{type:[Boolean,String],default:!1}},computed:{headerRendered:function(){return this.$refs.header.innerHTML},active:function(){return this._tabset.show\u003d\u003d\u003dthis},index:function(){return this._tabset.tabs.indexOf(this)},show:function(){return this._tabset\u0026\u0026this._tabset.show\u003d\u003d\u003dthis},disabledBool:function(){return Re(this.disabled)}},created:function(){this._ingroup\u003dthis.$parent\u0026\u0026this.$parent._tabgroup;for(var t\u003dthis;t\u0026\u0026!0!\u003d\u003dt._tabset\u0026\u0026t.$parent;)t\u003dt.$parent;t._tabset?(t.tabs.push(this),this._ingroup?~t.headers.indexOf(this.$parent)||t.headers.push(this.$parent):t.headers.push(this),this._tabset\u003dt):this._tabset\u003d{},this._ingroup\u0026\u0026this.$parent.tabs.push(this)},beforeDestroy:function(){if(this._tabset.activeNumber\u003d\u003d\u003dthis.index\u0026\u0026(this._tabset.activeNumber\u003d0),this._ingroup){var t\u003dthis.$parent.tabs.indexOf(this);this.$parent.tabs.splice(t,1)}this._tabset.tabs.splice(this.index,1)}},ri,[],!1,null,\"661c1b61\",null).exports;var ai\u003dfunction(){var t\u003dthis.$createElement,e\u003dthis._self._c||t;return e(\"div\",{staticClass:\"printable-tab-group\"},[e(\"div\",{ref:\"header\",staticClass:\"printable-tab-group-header\"},[this._t(\"header\")],2),this._v(\" \"),this._t(\"default\")],2)};ai._withStripped\u003d!0;const li\u003dqe({props:{disabled:{type:[Boolean,String],default:!1},header:{type:String,default:\"\"}},data:function(){return{tabs:[],show:!1}},computed:{active:function(){return~this.tabs.indexOf(this._tabset.show)},headerRendered:function(){return this.$refs.header.innerHTML},disabledBool:function(){return De(this.disabled)}},created:function(){this._tabgroup\u003d!0;for(var t\u003dthis.$parent\u0026\u0026!0\u003d\u003d\u003dthis.$parent._tabset?this.$parent:{};t\u0026\u0026!t._tabset\u0026\u0026t.$parent;)t\u003dt.$parent;t._tabset?this._tabset\u003dt:(this._tabset\u003d{},this.show\u003d!0)},methods:{blur:function(){this.show\u003d!1},toggle:function(){this.show\u003d!this.show}}},ai,[],!1,null,\"a785351c\",null).exports;var ci\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[t.addClass,\"printable-tabs\"]},[n(\"ul\",{staticClass:\"nav nav-tabs d-print-none\",class:t.getNavStyleClass,attrs:{role:\"tablist\"}},[t._l(t.headers,(function(e,i){return[e._tabgroup?n(\"dropdown\",{key:i,staticClass:\"nav-item\",class:{active:e.active},attrs:{header:e.headerRendered,disabled:e.disabled}},t._l(e.tabs,(function(e,i){return n(\"li\",{key:i},[n(\"a\",{staticClass:\"nav-link\",class:{disabled:e.disabled},attrs:{href:\"#\"},domProps:{innerHTML:t._s(e.headerRendered)},on:{click:function(n){return n.preventDefault(),t.select(e)}}})])})),0):n(\"li\",{key:i,staticClass:\"nav-item\",on:{click:function(n){return n.preventDefault(),t.select(e)}}},[n(\"a\",{staticClass:\"nav-link\",class:{active:e.active,disabled:e.disabledBool},attrs:{href:\"#\"}},[n(\"span\",{domProps:{innerHTML:t._s(e.headerRendered)}})])])]}))],2),t._v(\" \"),n(\"div\",{ref:\"tab-content\",staticClass:\"tab-content\"},[t._t(\"default\")],2)])};ci._withStripped\u003d!0;const ui\u003dqe({components:{dropdown:gn},props:{navStyle:{type:String,default:\"tabs\"},active:{type:String,default:\"0\"},addClass:{type:String,default:\"\"}},data:function(){return{show:null,headers:[],activeNumber:je(this.active),tabs:[]}},created:function(){this._tabset\u003d!0},computed:{getNavStyleClass:function(){return\"nav-\".concat(this.navStyle)}},watch:{activeNumber:function(t){this.show\u003dthis.tabs[t]}},mounted:function(){this.show\u003dthis.tabs[this.activeNumber]},methods:{select:function(t){t.disabled||(this.activeNumber\u003dt.index)}}},ci,[],!1,null,\"70a68808\",null).exports;var di\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:[\"thumb-wrapper\",{\"thumb-circle\":t.circle},t.addClass],style:[t.getBorder,t.getFontSize,t.getFontColor,t.getBgColor]},[t.hasSrc?n(\"img\",{ref:\"pic\",staticClass:\"thumb-image\",attrs:{src:t.src,width:t.computedWidth,height:t.computedHeight,alt:t.alt},on:{\"~load\":function(e){return t.computeImgSize.apply(null,arguments)}}}):t._e(),t._v(\" \"),t._t(\"default\")],2)};di._withStripped\u003d!0;const hi\u003dqe({props:{circle:{type:Boolean,default:!1},addClass:{type:String,default:\"\"},alt:{type:String,default:\"\"},background:{type:String,default:\"\"},border:{type:String,default:\"\"},fontColor:{type:String,default:\"\"},fontSize:{type:String,default:\"\"},size:{type:String,default:\"\"},src:{type:String,default:null},text:{type:String,default:\"\"}},computed:{getBorder:function(){return\"\"\u003d\u003d\u003dthis.border?{}:{border:this.border}},getFontSize:function(){var t\u003dthis.imageSize/2,e\u003dthis.fontSize;return{\"font-size\":\"\".concat(void 0\u003d\u003d\u003de||\"\"\u003d\u003d\u003de?t:e,\"px\")}},getFontColor:function(){return\"\"\u003d\u003d\u003dthis.fontColor?{}:{color:this.fontColor}},getBgColor:function(){return\"\"\u003d\u003d\u003dthis.background?{}:{background:this.background}},hasSrc:function(){return void 0!\u003d\u003dthis.src\u0026\u0026\"\"!\u003d\u003dthis.src},imageSize:function(){return this.size||100}},data:function(){return{computedWidth:\"\",computedHeight:\"\"}},mounted:function(){var t\u003dthis.$el;t.style.width\u003d\"\".concat(this.imageSize,\"px\"),t.style.height\u003d\"\".concat(this.imageSize,\"px\"),t.style.lineHeight\u003d\"\".concat(this.imageSize,\"px\")},methods:{computeImgSize:function(){var t\u003dthis.$refs.pic,e\u003dt.naturalHeight,n\u003dt.naturalWidth,i\u003dMath.min(e,n),o\u003dthis.imageSize/i;this.computedWidth\u003dn*o,this.computedHeight\u003de*o}}},di,[],!1,null,null,null).exports;var pi\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:\"click\"\u003d\u003d\u003dt.trigger?\"trigger-click\":\"trigger\",attrs:{tabindex:\"0\"},on:t._d({},[t.triggerEventType,function(e){return e.stopPropagation(),t.toggle()}])},[\"popover\"\u003d\u003d\u003dt.popoverOrTooltipType?n(\"v-popover\",{attrs:{\"auto-hide\":!t.isInput,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,placement:t.placement,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[n(\"div\",{staticClass:\"popover-container\"},[n(\"portal-target\",{attrs:{name:\"popover:\"+t.target}})],1)]},proxy:!0}],null,!1,1583262462)},[t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):\"tooltip\"\u003d\u003d\u003dt.popoverOrTooltipType?n(\"v-tooltip\",{attrs:{\"auto-hide\":!t.isInput,placement:t.placement,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[n(\"portal-target\",{attrs:{name:\"tooltip:\"+t.target}})]},proxy:!0}])},[t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):n(\"span\",[t._t(\"default\")],2)],1)};pi._withStripped\u003d!0;var fi\u003di(383);function mi(t){return(mi\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t})(t)}function vi(t,e){for(var n\u003d0;n\u003ce.length;n++){var i\u003de[n];i.enumerable\u003di.enumerable||!1,i.configurable\u003d!0,\"value\"in i\u0026\u0026(i.writable\u003d!0),Object.defineProperty(t,i.key,i)}}function gi(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]\u003dn,t}function yi(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function wi(t){for(var e\u003d1;e\u003carguments.length;e++){var n\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?yi(Object(n),!0).forEach((function(e){gi(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):yi(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function bi(t){return function(t){if(Array.isArray(t))return _i(t)}(t)||function(t){if(\"undefined\"!\u003dtypeof Symbol\u0026\u0026Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"\u003d\u003dtypeof t)return _i(t,e);var n\u003dObject.prototype.toString.call(t).slice(8,-1);return\"Object\"\u003d\u003d\u003dn\u0026\u0026t.constructor\u0026\u0026(n\u003dt.constructor.name),\"Map\"\u003d\u003d\u003dn||\"Set\"\u003d\u003d\u003dn?Array.from(t):\"Arguments\"\u003d\u003d\u003dn||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_i(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function _i(t,e){(null\u003d\u003de||e\u003et.length)\u0026\u0026(e\u003dt.length);for(var n\u003d0,i\u003dnew Array(e);n\u003ce;n++)i[n]\u003dt[n];return i}var Si\u003dfunction(t){return t\u003d\u003ddocument.activeElement},xi\u003dfunction(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.root\u003dnull,this.elements\u003d[],this.onKeyDown\u003dthis.onKeyDown.bind(this),this.enable\u003dthis.enable.bind(this),this.disable\u003dthis.disable.bind(this),this.firstElement\u003dthis.firstElement.bind(this),this.lastElement\u003dthis.lastElement.bind(this)}var e,n;return e\u003dt,(n\u003d[{key:\"lastElement\",value:function(){return this.elements[this.elements.length-1]||null}},{key:\"firstElement\",value:function(){return this.elements[0]||null}},{key:\"onKeyDown\",value:function(t){if(function(t){return\"Tab\"\u003d\u003d\u003dt.key||9\u003d\u003d\u003dt.keyCode}(t)){if(!t.shiftKey)return!document.activeElement||Si(this.lastElement())?(this.firstElement().focus(),void t.preventDefault()):void 0;Si(this.firstElement())\u0026\u0026(this.lastElement().focus(),t.preventDefault())}}},{key:\"enabled\",value:function(){return!!this.root}},{key:\"enable\",value:function(t){t\u0026\u0026(this.root\u003dt,this.elements\u003dfunction(t){return function(t,e){return bi(t.querySelectorAll(\u0027button:not([disabled]), select:not([disabled]), a[href]:not([disabled]), area[href]:not([disabled]), [contentEditable\u003d\"\"]:not([disabled]), [contentEditable\u003d\"true\"]:not([disabled]), [contentEditable\u003d\"TRUE\"]:not([disabled]), textarea:not([disabled]), iframe:not([disabled]), input:not([disabled]), summary:not([disabled]), [tabindex]:not([tabindex\u003d\"-1\"])\u0027)||[])}(t)}(this.root),this.root.addEventListener(\"keydown\",this.onKeyDown))}},{key:\"disable\",value:function(){this.root.removeEventListener(\"keydown\",this.onKeyDown),this.root\u003dnull}}])\u0026\u0026vi(e.prototype,n),t}(),Ci\u003dfunction(t){var e\u003dt.targetTouches?t.targetTouches[0]:t;return{x:e.clientX,y:e.clientY}},$i\u003dfunction(t,e,n){return\"number\"!\u003dtypeof t\u0026\u0026(t\u003dMath.min(e,n)||e),\"number\"!\u003dtypeof n\u0026\u0026(n\u003dMath.max(e,t)),Math.min(Math.max(e,t),n)},ki\u003dfunction(t){return t\u0026\u0026Number(t.replace(/px$/,\"\"))||0},Ti\u003d{down:{pc:\"mousedown\",m:\"touchstart\"},move:{pc:\"mousemove\",m:\"touchmove\"},up:{pc:\"mouseup\",m:\"touchend\"}},Ei\u003dfunction(t,e,n){e\u0026\u0026e.addEventListener(Ti[t].pc,n),e\u0026\u0026e.addEventListener(Ti[t].m,n,{passive:!1})},Oi\u003dfunction(t,e,n){e\u0026\u0026e.removeEventListener(Ti[t].pc,n),e\u0026\u0026e.removeEventListener(Ti[t].m,n)},Bi\u003d!1;if(\"undefined\"!\u003dtypeof window){var Pi\u003d{get passive(){Bi\u003d!0}};window.addEventListener(\"testPassive\",null,Pi),window.removeEventListener(\"testPassive\",null,Pi)}var Li,Ni,Ai,zi\u003d\"undefined\"!\u003dtypeof window\u0026\u0026window.navigator\u0026\u0026window.navigator.platform\u0026\u0026(/iP(ad|hone|od)/.test(window.navigator.platform)||\"MacIntel\"\u003d\u003d\u003dwindow.navigator.platform\u0026\u0026window.navigator.maxTouchPoints\u003e1),Mi\u003d[],Hi\u003d!1,Di\u003d0,Ri\u003d-1,ji\u003dfunction(t){return Mi.some((function(){return function(t,e){var n\u003d!1;return function(t){for(var e\u003d[];t;){if(e.push(t),t.classList.contains(\"vfm\"))return e;t\u003dt.parentElement}return e}(t).forEach((function(t){(function(t){if(!t||t.nodeType!\u003d\u003dNode.ELEMENT_NODE)return!1;var e\u003dwindow.getComputedStyle(t);return[\"auto\",\"scroll\"].includes(e.overflowY)\u0026\u0026t.scrollHeight\u003et.clientHeight})(t)\u0026\u0026function(t,e){return!(0\u003d\u003d\u003dt.scrollTop\u0026\u0026e\u003c0||t.scrollTop+t.clientHeight+e\u003e\u003dt.scrollHeight\u0026\u0026e\u003e0)}(t,e)\u0026\u0026(n\u003d!0)})),n}(t,-Di)}))},Ii\u003dfunction(t){var e\u003dt||window.event;return!!ji(e.target)||e.touches.length\u003e1||(e.preventDefault\u0026\u0026e.preventDefault(),!1)},qi\u003dfunction(t){t?(Mi\u003dMi.filter((function(e){return e.targetElement!\u003d\u003dt})),zi?(t.ontouchstart\u003dnull,t.ontouchmove\u003dnull,Hi\u0026\u00260\u003d\u003d\u003dMi.length\u0026\u0026(document.removeEventListener(\"touchmove\",Ii,Bi?{passive:!1}:void 0),Hi\u003d!1)):Mi.length||(void 0!\u003d\u003dNi\u0026\u0026(document.body.style.paddingRight\u003dNi,Ni\u003dvoid 0),void 0!\u003d\u003dLi\u0026\u0026(document.body.style.overflow\u003dLi,Li\u003dvoid 0))):console.error(\"enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.\")},Wi\u003dfunction(){},Fi\u003d\"enter\",Vi\u003d\"entering\",Ui\u003d\"leave\",Qi\u003d\"leavng\",Xi\u003d{type:[String,Object,Array],default:\"\"},Yi\u003d{type:[Object,Array],default:function(){return{}}},Ki\u003d{t:\"ns-resize\",tr:\"nesw-resize\",r:\"ew-resize\",br:\"nwse-resize\",b:\"ns-resize\",bl:\"nesw-resize\",l:\"ew-resize\",tl:\"nwse-resize\"},Gi\u003d{props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:Xi,overlayClass:Xi,contentClass:Xi,styles:Yi,overlayStyle:Yi,contentStyle:Yi,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var e\u003dmi(t);return\"boolean\"\u003d\u003d\u003de||\"string\"\u003d\u003d\u003de||t.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE}},transition:{type:[String,Object],default:\"vfm\"},overlayTransition:{type:[String,Object],default:\"vfm\"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1},fitParent:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},dragSelector:{type:String,default:\"\"},keepChangedStyle:{type:Boolean,default:!1},resize:{type:Boolean,default:!1},resizeDirections:{type:Array,default:function(){return[\"t\",\"tr\",\"r\",\"br\",\"b\",\"bl\",\"l\",\"tl\"]},validator:function(t){return[\"t\",\"tr\",\"r\",\"br\",\"b\",\"bl\",\"l\",\"tl\"].filter((function(e){return-1!\u003d\u003dt.indexOf(e)})).length\u003d\u003d\u003dt.length}},minWidth:{type:Number,default:0},minHeight:{type:Number,default:0},maxWidth:{type:Number,default:1/0},maxHeight:{type:Number,default:1/0}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1,resize:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{},dragResizeStyle:{},resolveToggle:Wi,rejectToggle:Wi,state:null,lastMousedownEl:null}},computed:{isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState\u003d\u003d\u003dUi)\u0026\u0026this.modalTransitionState\u003d\u003d\u003dUi},calculateZIndex:function(){return!1\u003d\u003d\u003dthis.zIndex?!!this.zIndexAuto\u0026\u0026+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return wi({},!1!\u003d\u003dthis.calculateZIndex\u0026\u0026{zIndex:this.calculateZIndex})},bindContentStyle:function(){var t\u003d[this.dragResizeStyle];return Array.isArray(this.contentStyle)?t.push.apply(t,bi(this.contentStyle)):t.push(this.contentStyle),t},computedTransition:function(){return\"string\"\u003d\u003dtypeof this.transition?{name:this.transition}:wi({},this.transition)},computedOverlayTransition:function(){return\"string\"\u003d\u003dtypeof this.overlayTransition?{name:this.overlayTransition}:wi({},this.overlayTransition)}},watch:{value:function(t){if(this.stopEvent)this.stopEvent\u003d!1;else if(this.mounted(),!t){if(this.emitEvent(\"before-close\",!0))return void this.rejectToggle(\"hide\");this.close()}},lockScroll:\"handleLockScroll\",hideOverlay:function(t){this.value\u0026\u0026!t\u0026\u0026(this.visibility.overlay\u003d!0)},attach:\"mounted\",isComponentReadyToBeDestroyed:function(t){t\u0026\u0026(this.visible\u003d!1)},drag:function(t){this.visible\u0026\u0026(t?this.addDragDown():this.removeDragDown())},resize:function(t){this.visible\u0026\u0026(t?this.addResizeDown():this.removeResizeDown())},keepChangedStyle:function(t){t||(this.dragResizeStyle\u003d{})}},mounted:function(){this.api.modals.push(this),this.$focusTrap\u003dnew xi,this.mounted()},beforeDestroy:function(){var t,e\u003dthis;this.close(),this.lockScroll\u0026\u0026this.$refs.vfmContainer\u0026\u0026qi(this.$refs.vfmContainer),null\u003d\u003dthis||null\u003d\u003d\u003d(t\u003dthis.$el)||void 0\u003d\u003d\u003dt||t.remove();var n\u003dthis.api.modals.findIndex((function(t){return t\u003d\u003d\u003de}));this.api.modals.splice(n,1)},methods:{mounted:function(){var t\u003dthis;if(this.value){if(this.emitEvent(\"before-open\",!1))return void this.rejectToggle(\"show\");var e\u003dthis.getAttachElement();if(e||!1\u003d\u003d\u003dthis.attach){!1!\u003d\u003dthis.attach\u0026\u0026e.appendChild(this.$el);var n\u003dthis.api.openedModals.findIndex((function(e){return e\u003d\u003d\u003dt}));-1!\u003d\u003dn\u0026\u0026this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex\u003dthis.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(e){return e!\u003d\u003dt})).forEach((function(t,n){t.getAttachElement()\u003d\u003d\u003de\u0026\u0026(t.modalStackIndex\u003dn,t.visibility.overlay\u003d!1)})),this.visible\u003d!0,this.$nextTick((function(){t.startTransitionEnter()}))}else!1!\u003d\u003de\u0026\u0026console.warn(\"Unable to locate target \".concat(this.attach))}},close:function(){var t\u003dthis,e\u003dthis.api.openedModals.findIndex((function(e){return e\u003d\u003d\u003dt}));if(-1!\u003d\u003de\u0026\u0026this.api.openedModals.splice(e,1),this.api.openedModals.length\u003e0){var n\u003dthis.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)\u0026\u0026n.$refs.vfmContainer.focus(),!n.hideOverlay\u0026\u0026(n.visibility.overlay\u003d!0)}this.drag\u0026\u0026this.removeDragDown(),this.resize\u0026\u0026this.removeResizeDown(),this.state\u003dnull,this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay\u003d!0,this.visibility.modal\u003d!0},startTransitionLeave:function(){this.visibility.overlay\u003d!1,this.visibility.modal\u003d!1},handleLockScroll:function(){var t\u003dthis;this.value\u0026\u0026this.$nextTick((function(){t.lockScroll?function(t,e){if(t){if(!Mi.some((function(e){return e.targetElement\u003d\u003d\u003dt}))){var n\u003d{targetElement:t,options:e||{}};Mi\u003d[].concat(bi(Mi),[n]),zi?(t.ontouchstart\u003dfunction(t){1\u003d\u003d\u003dt.targetTouches.length\u0026\u0026(Ri\u003dt.targetTouches[0].clientY)},t.ontouchmove\u003dfunction(e){1\u003d\u003d\u003de.targetTouches.length\u0026\u0026function(t,e){Di\u003dt.targetTouches[0].clientY-Ri,!ji(t.target)\u0026\u0026(e\u0026\u00260\u003d\u003d\u003de.scrollTop\u0026\u0026Di\u003e0||function(t){return!!t\u0026\u0026t.scrollHeight-t.scrollTop\u003c\u003dt.clientHeight}(e)\u0026\u0026Di\u003c0?Ii(t):t.stopPropagation())}(e,t)},Hi||(document.addEventListener(\"touchmove\",Ii,Bi?{passive:!1}:void 0),Hi\u003d!0)):function(t){if(void 0\u003d\u003d\u003dNi){var e\u003d!!t\u0026\u0026!0\u003d\u003d\u003dt.reserveScrollBarGap,n\u003dwindow.innerWidth-document.documentElement.clientWidth;if(e\u0026\u0026n\u003e0){var i\u003dparseInt(getComputedStyle(document.body).getPropertyValue(\"padding-right\"),10);Ni\u003ddocument.body.style.paddingRight,document.body.style.paddingRight\u003d\"\".concat(i+n,\"px\")}}void 0\u003d\u003d\u003dLi\u0026\u0026(Li\u003ddocument.body.style.overflow,document.body.style.overflow\u003d\"hidden\")}(e)}}else console.error(\"disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.\")}(t.$refs.vfmContainer,{reserveScrollBarGap:!0}):qi(t.$refs.vfmContainer)}))},getAttachElement:function(){return!1!\u003d\u003dthis.attach\u0026\u0026(\"string\"\u003d\u003dtypeof this.attach?!!window\u0026\u0026window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState\u003dVi},afterOverlayEnter:function(){this.overlayTransitionState\u003dFi},beforeOverlayLeave:function(){this.overlayTransitionState\u003dQi},afterOverlayLeave:function(){this.overlayTransitionState\u003dUi},beforeModalEnter:function(){this.modalTransitionState\u003dVi},afterModalEnter:function(){this.modalTransitionState\u003dFi,(this.focusRetain||this.focusTrap)\u0026\u0026this.$refs.vfmContainer.focus(),this.focusTrap\u0026\u0026this.$focusTrap.enable(this.$refs.vfmContainer),this.drag\u0026\u0026this.addDragDown(),this.resize\u0026\u0026this.addResizeDown(),this.$emit(\"opened\",this.createModalEvent({type:\"opened\"})),this.resolveToggle(\"show\")},beforeModalLeave:function(){this.modalTransitionState\u003dQi,this.$focusTrap.enabled()\u0026\u0026this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState\u003dUi,this.modalStackIndex\u003dnull,this.lockScroll\u0026\u0026qi(this.$refs.vfmContainer),this.keepChangedStyle||(this.dragResizeStyle\u003d{});var t\u003d!1,e\u003dthis.createModalEvent({type:\"closed\",stop:function(){t\u003d!0}});this.$emit(\"closed\",e),this.resolveToggle(\"hide\"),t||(this.params\u003d{})},onMousedown:function(t){this.lastMousedownEl\u003dnull\u003d\u003dt?void 0:t.target},onMouseupContainer:function(){this.lastMousedownEl\u003d\u003d\u003dthis.$refs.vfmContainer\u0026\u0026\"resize:move\"!\u003d\u003dthis.state\u0026\u0026(this.$emit(\"click-outside\",this.createModalEvent({type:\"click-outside\"})),this.clickToClose\u0026\u0026this.$emit(\"input\",!1))},onEsc:function(){this.visible\u0026\u0026this.escToClose\u0026\u0026this.$emit(\"input\",!1)},createModalEvent:function(){var t\u003darguments.length\u003e0\u0026\u0026void 0!\u003d\u003darguments[0]?arguments[0]:{};return wi({ref:this},t)},emitEvent:function(t,e){var n\u003d!1,i\u003dthis.createModalEvent({type:t,stop:function(){n\u003d!0}});return this.$emit(t,i),!!n\u0026\u0026(this.stopEvent\u003d!0,this.$emit(\"input\",e),!0)},emitState:function(t,e,n){this.state\u003d\"\".concat(e,\":\").concat(n),this.$emit(this.state,t)},toggle:function(t,e){var n\u003darguments,i\u003dthis;return new Promise((function(o,r){i.resolveToggle\u003dfunction(t){o(t),i.resolveToggle\u003dWi},i.rejectToggle\u003dfunction(t){r(t),i.rejectToggle\u003dWi};var s\u003d\"boolean\"\u003d\u003dtypeof t?t:!i.value;s\u0026\u00262\u003d\u003d\u003dn.length\u0026\u0026(i.params\u003de),i.$emit(\"input\",s)}))},pointerDown:function(t){var e\u003dthis;t.stopPropagation();var n,i\u003d\"resize\",o\u003d\"drag\",r\u003dthis.$refs,s\u003dr.vfmContainer,a\u003dr.vfmContent,l\u003dt.target.getAttribute(\"direction\");if(l)n\u003di;else{if(!function(t,e,n){return\"\"\u003d\u003d\u003dn||bi(e.querySelectorAll(n)).includes(t.target)}(t,a,this.dragSelector))return;n\u003do}this.emitState(t,n,\"start\");var c,u,d,h,p\u003dCi(t),f\u003ds.getBoundingClientRect(),m\u003da.getBoundingClientRect(),v\u003d\"absolute\"\u003d\u003d\u003dwindow.getComputedStyle(a).position,g\u003dki(this.dragResizeStyle.top),y\u003dki(this.dragResizeStyle.left),w\u003dfunction(){if(e.fitParent){var t\u003d{absolute:function(){return{minTop:0,minLeft:0,maxTop:f.height-m.height,maxLeft:f.width-m.width}},relative:function(){return{minTop:g+f.top-m.top,minLeft:y+f.left-m.left,maxTop:g+f.bottom-m.bottom,maxLeft:y+f.right-m.right}}};return v?t.absolute():t.relative()}return{}}(),b\u003dn\u003d\u003d\u003di\u0026\u0026(c\u003ddocument.body,u\u003d\"cursor\",d\u003dKi[l],h\u003dc.style[u],c.style[u]\u003dd,function(){c.style[u]\u003dh}),_\u003dfunction(t){t.stopPropagation(),e.emitState(t,n,\"move\");var r,s,a\u003dCi(t),c\u003d{x:a.x-p.x,y:a.y-p.y};n\u003d\u003d\u003di\u0026\u0026(c\u003de.getResizeOffset(l,c,f,m,v)),v?(r\u003dm.top-f.top+c.y,s\u003dm.left-f.left+c.x):(r\u003dg+c.y,s\u003dy+c.x),n\u003d\u003d\u003do\u0026\u0026e.fitParent\u0026\u0026(r\u003d$i(w.minTop,r,w.maxTop),s\u003d$i(w.minLeft,s,w.maxLeft));var u\u003dwi(wi(wi({position:\"relative\",top:r+\"px\",left:s+\"px\",margin:\"unset\",touchAction:\"none\"},v\u0026\u0026{position:\"absolute\",transform:\"unset\",width:m.width+\"px\",height:m.height+\"px\"}),c.width\u0026\u0026{width:c.width+\"px\"}),c.height\u0026\u0026{height:c.height+\"px\"});e.dragResizeStyle\u003dwi(wi({},e.dragResizeStyle),u)};Ei(\"move\",document,_),Ei(\"up\",document,(function t(o){o.stopPropagation(),n\u003d\u003d\u003di\u0026\u0026b\u0026\u0026b(),setTimeout((function(){e.emitState(o,n,\"end\")})),Oi(\"move\",document,_),Oi(\"up\",document,t)}))},addDragDown:function(){Ei(\"down\",this.$refs.vfmContent,this.pointerDown),this.dragResizeStyle.touchAction\u003d\"none\"},removeDragDown:function(){Oi(\"down\",this.$refs.vfmContent,this.pointerDown)},addResizeDown:function(){var t\u003dthis;this.visibility.resize\u003d!0,this.$nextTick((function(){Ei(\"down\",t.$refs.vfmResize,t.pointerDown)}))},removeResizeDown:function(){Oi(\"down\",this.$refs.vfmResize,this.pointerDown),this.visibility.resize\u003d!1},getResizeOffset:function(t,e,n,i,o){var r\u003dthis,s\u003dfunction(t,e,o,s){var a,l\u003di[e],c\u003dn[t]-i[t],u\u003d(a\u003de).charAt(0).toUpperCase()+a.slice(1);return{axis:o,edgeName:e,min:s?c:-l,max:s?l:c,minEdge:r[\"min\".concat(u)],maxEdge:r[\"max\".concat(u)],getEdge:function(t){return i[e]-t*(s?1:-1)},getOffsetAxis:function(t,n){var o\u003di[e]-t;return n?s?o:0:(s?1:-1)*o/2}}},a\u003d{t:[\"top\",\"height\",\"y\",!0],b:[\"bottom\",\"height\",\"y\",!1],l:[\"left\",\"width\",\"x\",!0],r:[\"right\",\"width\",\"x\",!1]},l\u003d{x:0,y:0};return t.split(\"\").forEach((function(t){var n\u003ds.apply(void 0,bi(a[t]));l\u003dwi(wi({},l),function(t){var n,i\u003de[t.axis];i\u003dr.fitParent?$i(t.min,i,t.max):i;var s\u003d$i(t.minEdge,t.getEdge(i),t.maxEdge);return i\u003dt.getOffsetAxis(s,o),gi(n\u003d{},t.edgeName,s),gi(n,t.axis,i),n}(n))})),l}}},Zi\u003dfunction(t,e,n,i,o,r,s,a,l,c){\"boolean\"!\u003dtypeof s\u0026\u0026(l\u003da,a\u003ds,s\u003d!1);var u,d\u003d\"function\"\u003d\u003dtypeof n?n.options:n;if(t\u0026\u0026t.render\u0026\u0026(d.render\u003dt.render,d.staticRenderFns\u003dt.staticRenderFns,d._compiled\u003d!0,o\u0026\u0026(d.functional\u003d!0)),i\u0026\u0026(d._scopeId\u003di),r?(u\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),e\u0026\u0026e.call(this,l(t)),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(r)},d._ssrRegister\u003du):e\u0026\u0026(u\u003ds?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h\u003dd.render;d.render\u003dfunction(t,e){return u.call(e),h(t,e)}}else{var p\u003dd.beforeCreate;d.beforeCreate\u003dp?[].concat(p,u):[u]}return n},Ji\u003d\"undefined\"!\u003dtypeof navigator\u0026\u0026/msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase()),to\u003d{},eo\u003dZi({render:function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.ssr||t.visible?n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.ssr||t.visible,expression:\"!ssr || visible\"}],staticClass:\"vfm vfm--inset\",class:[!1\u003d\u003d\u003dt.attach?\"vfm--fixed\":\"vfm--absolute\",{\"vfm--prevent-none\":t.preventClick}],style:t.bindStyle,on:{keydown:function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"])?null:t.onEsc.apply(null,arguments)}}},[n(\"transition\",t._b({ref:\"vfmOverlayTransition\",on:{\"before-enter\":t.beforeOverlayEnter,\"after-enter\":t.afterOverlayEnter,\"before-leave\":t.beforeOverlayLeave,\"after-leave\":t.afterOverlayLeave}},\"transition\",t.computedOverlayTransition,!1),[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.hideOverlay\u0026\u0026t.visibility.overlay,expression:\"!hideOverlay \u0026\u0026 visibility.overlay\"}],staticClass:\"vfm__overlay vfm--overlay vfm--absolute vfm--inset\",class:t.overlayClass,style:t.overlayStyle})]),t._v(\" \"),n(\"transition\",t._b({ref:\"vfmTransition\",on:{\"before-enter\":t.beforeModalEnter,\"after-enter\":t.afterModalEnter,\"before-leave\":t.beforeModalLeave,\"after-leave\":t.afterModalLeave}},\"transition\",t.computedTransition,!1),[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.visibility.modal,expression:\"visibility.modal\"}],ref:\"vfmContainer\",staticClass:\"vfm__container vfm--absolute vfm--inset vfm--outline-none\",class:t.classes,style:t.styles,attrs:{\"aria-expanded\":t.visibility.modal.toString(),role:\"dialog\",\"aria-modal\":\"true\",tabindex:\"-1\"},on:{mouseup:function(e){return e.target!\u003d\u003de.currentTarget?null:t.onMouseupContainer.apply(null,arguments)},mousedown:function(e){return e.target!\u003d\u003de.currentTarget?null:t.onMousedown.apply(null,arguments)}}},[n(\"div\",{ref:\"vfmContent\",staticClass:\"vfm__content\",class:[t.contentClass,{\"vfm--prevent-auto\":t.preventClick}],style:t.bindContentStyle,on:{mousedown:function(e){return t.onMousedown(null)}}},[t._t(\"default\",null,{params:t.params,close:function(){return t.$emit(\"input\",!1)}}),t._v(\" \"),t.visibility.resize\u0026\u0026t.visibility.modal?n(\"div\",{ref:\"vfmResize\",staticClass:\"vfm__resize vfm--absolute vfm--inset vfm--prevent-none vfm--select-none vfm--touch-none\"},t._l(t.resizeDirections,(function(t){return n(\"div\",{key:t,staticClass:\"vfm--absolute vfm--prevent-auto\",class:\"vfm--resize-\"+t,attrs:{direction:t}})})),0):t._e()],2)])])],1):t._e()},staticRenderFns:[]},(function(t){t\u0026\u0026t(\"data-v-1cd72822_0\",{source:\".vfm--fixed[data-v-1cd72822]{position:fixed}.vfm--absolute[data-v-1cd72822]{position:absolute}.vfm--inset[data-v-1cd72822]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-1cd72822]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-1cd72822]{pointer-events:none}.vfm--prevent-auto[data-v-1cd72822]{pointer-events:auto}.vfm--outline-none[data-v-1cd72822]:focus{outline:0}.vfm-enter-active[data-v-1cd72822],.vfm-leave-active[data-v-1cd72822]{transition:opacity .2s}.vfm-enter[data-v-1cd72822],.vfm-leave-to[data-v-1cd72822]{opacity:0}.vfm--touch-none[data-v-1cd72822]{touch-action:none}.vfm--select-none[data-v-1cd72822]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vfm--resize-bl[data-v-1cd72822],.vfm--resize-br[data-v-1cd72822],.vfm--resize-tl[data-v-1cd72822],.vfm--resize-tr[data-v-1cd72822]{width:12px;height:12px;z-index:10}.vfm--resize-t[data-v-1cd72822]{top:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-tr[data-v-1cd72822]{top:-6px;right:-6px;cursor:nesw-resize}.vfm--resize-r[data-v-1cd72822]{top:0;right:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-br[data-v-1cd72822]{bottom:-6px;right:-6px;cursor:nwse-resize}.vfm--resize-b[data-v-1cd72822]{bottom:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-bl[data-v-1cd72822]{bottom:-6px;left:-6px;cursor:nesw-resize}.vfm--resize-l[data-v-1cd72822]{top:0;left:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-tl[data-v-1cd72822]{top:-6px;left:-6px;cursor:nwse-resize}\",map:void 0,media:void 0})}),Gi,\"data-v-1cd72822\",!1,void 0,!1,(function(t){return function(t,e){return function(t,e){var n\u003dJi?e.media||\"default\":t,i\u003dto[n]||(to[n]\u003d{ids:new Set,styles:[]});if(!i.ids.has(t)){i.ids.add(t);var o\u003de.source;if(e.map\u0026\u0026(o+\u003d\"\\n/*# sourceURL\u003d\"+e.map.sources[0]+\" */\",o+\u003d\"\\n/*# sourceMappingURL\u003ddata:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(e.map))))+\" */\"),i.element||(i.element\u003ddocument.createElement(\"style\"),i.element.type\u003d\"text/css\",e.media\u0026\u0026i.element.setAttribute(\"media\",e.media),void 0\u003d\u003d\u003dAi\u0026\u0026(Ai\u003ddocument.head||document.getElementsByTagName(\"head\")[0]),Ai.appendChild(i.element)),\"styleSheet\"in i.element)i.styles.push(o),i.element.styleSheet.cssText\u003di.styles.filter(Boolean).join(\"\\n\");else{var r\u003di.ids.size-1,s\u003ddocument.createTextNode(o),a\u003di.element.childNodes;a[r]\u0026\u0026i.element.removeChild(a[r]),a.length?i.element.insertBefore(s,a[r]):i.element.appendChild(s)}}}(t,e)}}),void 0,void 0),no\u003dZi({render:function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{staticClass:\"modals-container\"},t._l(t.api.dynamicModals,(function(e,i){return n(e.component,t._g(t._b({key:e.id,tag:\"component\",on:{closed:function(e){return t.slice(i)},\"before-open\":function(n){return t.beforeOpen(n,e,i)},opened:e.opened},scopedSlots:t._u([t._l(e.slots,(function(e,i){return{key:i,fn:function(){return[t.isString(e)?n(\"div\",{key:i,domProps:{innerHTML:t._s(e)}}):n(e.component,t._g(t._b({key:i,tag:\"component\"},\"component\",e.bind,!1),e.on))]},proxy:!0}}))],null,!0),model:{value:e.value,callback:function(n){t.$set(e,\"value\",n)},expression:\"modal.value\"}},\"component\",e.bind,!1),e.on))})),1)},staticRenderFns:[]},void 0,{props:{},methods:{slice:function(t){this.api.dynamicModals.splice(t,1)},beforeOpen:function(t,e,n){var i\u003dthis;t.ref.params\u003de.params,this.$nextTick((function(){e.value||(i.slice(n),e.reject(\"show\"))}))},isString:function(t){return\"string\"\u003d\u003dtypeof t}}},void 0,!1,void 0,!1,void 0,void 0,void 0);function io(t,e){var n\u003dwi(wi({},t),{},{props:wi({},t.props)});return Object.assign(n.props,{api:{type:Object,default:function(){return e}}}),n}var oo\u003d0,ro\u003dfunction(){var t,e,n\u003d(e\u003dnull,et().observable({show:function(t){for(var n\u003dthis,i\u003darguments.length,o\u003dnew Array(i\u003e1?i-1:0),r\u003d1;r\u003ci;r++)o[r-1]\u003darguments[r];switch(mi(t)){case\"string\":return this.toggle.apply(this,[t,!0].concat(o));case\"object\":return Promise.allSettled([new Promise((function(i,r){var s\u003d{value:!0,id:Symbol(\"dynamicModal\"),component:e,bind:{},slots:{},on:{},params:o[0],reject:r,opened:function(){i(\"show\")}};n.dynamicModals.push(Object.assign(s,t))}))])}},hide:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return this.toggle(e,!1)},hideAll:function(){return this.hide.apply(this,bi(this.openedModals.map((function(t){return t.name}))))},toggle:function(t){for(var e\u003darguments.length,n\u003dnew Array(e\u003e1?e-1:0),i\u003d1;i\u003ce;i++)n[i-1]\u003darguments[i];var o\u003dArray.isArray(t)?this.get.apply(this,bi(t)):this.get(t);return Promise.allSettled(o.map((function(t){return t.toggle.apply(t,n)})))},get:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return this.modals.filter((function(t){return e.includes(t.name)}))},dynamicModals:[],openedModals:[],modals:[],_setDefaultModal:function(t){e\u003dt}}));return gi(t\u003d{},\"$vfm\",n),gi(t,\"VueFinalModal\",function(t){var e\u003dio(eo,t);return t._setDefaultModal(e),e}(n)),gi(t,\"ModalsContainer\",io(no,n)),t},so\u003dro(),ao\u003dso.$vfm,lo\u003dso.VueFinalModal,co\u003d(so.ModalsContainer,function(t){var e\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]?arguments[1]:{},n\u003d0\u003d\u003d\u003doo?so:ro(),i\u003dn.$vfm,o\u003dn.VueFinalModal,r\u003dn.ModalsContainer;oo+\u003d1;var s\u003de.key||\"$vfm\",a\u003de.componentName||\"VueFinalModal\",l\u003de.dynamicContainerName||\"ModalsContainer\";t.prototype[s]\u003di,t.component(a,o),t.component(l,r)}),uo\u003dfunction(t){return{install:function(e,n){var i\u003dObject.assign({},t,n);co(e,i)}}};uo.install\u003dco;const ho\u003dqe({name:\"Trigger\",components:{PortalTarget:fi.YC},props:{for:{type:String,default:\"\"},trigger:{type:String,default:\"hover focus\"},placement:{type:String,default:\"top\"}},data:function(){return{popoverOrTooltipType:void 0,isInput:!1}},methods:{toggle:function(){this.for\u0026\u0026ao.show(this.for)}},computed:{triggerEventType:function(){return\"click\"\u003d\u003d\u003dthis.trigger||\"focus\"\u003d\u003d\u003dthis.trigger?this.trigger:\"mouseenter\"},triggers:function(){return this.trigger.split(\" \")},target:function(){return this.for}},mounted:function(){if(this.isInput\u003dthis.$slots.default\u0026\u0026this.$slots.default.some((function(t){return\"input\"\u003d\u003d\u003dt.tag})),this.for\u0026\u0026void 0\u003d\u003d\u003dthis.popoverOrTooltipType){var t\u003ddocument.getElementById(this.for);if(!t)return;this.popoverOrTooltipType\u003dt.dataset.mbComponentType}}},pi,[],!1,null,null,null).exports;var po\u003dfunction(){var t\u003dthis.$createElement;return(this._self._c||t)(\"div\",{staticClass:\"site-nav-root\"},[this._t(\"default\")],2)};po._withStripped\u003d!0;const fo\u003dqe({name:\"SiteNav\",mounted:function(){var t\u003dthis,e\u003dSn(new URL(window.location.href).pathname);this.$el.querySelectorAll(\"a[href]\").forEach((function(n){var i\u003dSn(n.getAttribute(\"href\"));if(e\u003d\u003d\u003di){n.classList.add(\"current\");for(var o\u003dn.parentElement;o\u0026\u0026o!\u003d\u003dt.$el;)\"ul\"\u003d\u003d\u003do.tagName.toLowerCase()\u0026\u0026o.classList.contains(\"site-nav-dropdown-container\")\u0026\u0026o.classList.add(\"site-nav-dropdown-container-open\"),o\u003do.parentElement}}))}},po,[],!1,null,null,null).exports;var mo\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[n(\"span\",{class:[{\"nav-menu-close-icon\":t.show}],on:{click:function(e){return t.toggleNavMenu(void 0)}}},[t._t(\"navMenuIcon\")],2),t._v(\" \"),n(\"div\",{ref:\"navMenuContainer\",class:[\"nav-menu\",{\"nav-menu-open\":t.show}],style:t.navbarHeight,on:{click:t.toggleNavMenu}},[n(\"portal-target\",{attrs:{name:t.portalName,multiple:\"\"}})],1)])};mo._withStripped\u003d!0;var vo\u003d{};const go\u003dqe({components:{PortalTarget:fi.YC},props:{type:{type:String,default:null},portalName:{type:String,default:null}},inject:{toggleLowerNavbar:{default:void 0}},data:function(){return{show:!1,navbarHeight:\"\"}},methods:{toggleNavMenu:function(t){var e,n\u003dthis;t\u0026\u0026\"a\"\u003d\u003d\u003dt.target.tagName.toLowerCase()||!t\u0026\u0026this.show?(document.body.style.removeProperty(\"overflow\"),this.show\u003d!1):(vo[e\u003d\"closeOverlay\"]\u0026\u0026vo[e].forEach((function(t){return t()})),document.body.style.overflow\u003d\"hidden\",this.show\u003d!0,this.$nextTick((function(){var t\u003dn.$refs.navMenuContainer,e\u003dwindow.innerHeight-t.getBoundingClientRect().top;n.navbarHeight\u003d\"height: \".concat(e,\"px\")})))}},mounted:function(){var t,e,n\u003dthis;this.toggleLowerNavbar\u0026\u0026this.toggleLowerNavbar(),e\u003dfunction(){n.show\u003d!1},vo[t\u003d\"closeOverlay\"]||(vo[t]\u003d[]),vo[t].push(e)}},mo,[],!1,null,\"1a3e7aee\",null).exports;var yo\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(t.tagName,t._b({tag:\"component\"},\"component\",t.$attrs,!1),[t._t(\"default\"),t._v(\" \"),t.enablePortal?n(\"portal\",{attrs:{to:t.to}},[n(t.tagName,t._b({tag:\"component\",class:[t.$vnode.data.staticClass||\"\",\"mb-mobile-nav\"],style:t.$vnode.data.staticStyle},\"component\",t.$attrs,!1),[t._t(\"default\")],2)],1):t._e()],2)};yo._withStripped\u003d!0;const wo\u003dqe({name:\"OverlaySource\",components:{Portal:fi.h_},props:{to:{type:String,default:void 0},tagName:{type:String,default:void 0}},data:function(){return{enablePortal:!1}},mounted:function(){this.enablePortal\u003d!0}},yo,[],!1,null,\"e6005420\",null).exports;var bo\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:\"click\"\u003d\u003d\u003dt.trigger?\"trigger-click\":\"trigger\",attrs:{\"data-mb-component-type\":\"popover\",tabindex:\"0\"}},[t.targetEl.id?n(\"portal\",{attrs:{to:\"popover:\"+t.targetEl.id}},[t.hasHeader?n(\"h3\",{staticClass:\"popover-header\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"popover-body\"},[t._t(\"content\")],2)]):t._e(),t._v(\" \"),t.isMounted?n(\"v-popover\",{attrs:{\"auto-hide\":!t.isInput,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,placement:t.placement,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[n(\"div\",{staticClass:\"popover-container\"},[t.hasHeader?n(\"h3\",{staticClass:\"popover-header\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"popover-body\"},[t._t(\"content\")],2)])]},proxy:!0}],null,!0)},[t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):t._e()],1)};bo._withStripped\u003d!0;const _o\u003dqe({name:\"Popover\",components:{Portal:fi.h_},props:{trigger:{type:String,default:\"hover focus\"},placement:{type:String,default:\"top\"}},data:function(){return{targetEl:{},isMounted:!1}},computed:{triggers:function(){return this.trigger.split(\" \")},hasHeader:function(){return!!this.$slots.header}},mounted:function(){this.targetEl\u003dthis.$el,this.isInput\u003dthis.$slots.default\u0026\u0026this.$slots.default.some((function(t){return\"input\"\u003d\u003d\u003dt.tag})),this.isMounted\u003d!0}},bo,[],!1,null,null,null).exports;var So\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:\"click\"\u003d\u003d\u003dt.trigger?\"trigger-click\":\"trigger\",attrs:{\"data-mb-component-type\":\"tooltip\",tabindex:\"0\"}},[t.targetEl.id?n(\"portal\",{attrs:{to:\"tooltip:\"+t.targetEl.id}},[t._t(\"content\")],2):t._e(),t._v(\" \"),t.isMounted?n(\"v-tooltip\",{attrs:{\"auto-hide\":!t.isInput,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,placement:t.placement,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[t._t(\"content\")]},proxy:!0}],null,!0)},[t._v(\" \"),t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):t._e()],1)};So._withStripped\u003d!0;const xo\u003dqe({name:\"Tooltip\",components:{Portal:fi.h_},props:{trigger:{type:String,default:\"hover focus\"},placement:{type:String,default:\"top\"}},data:function(){return{targetEl:{},isInput:!1,isMounted:!1}},computed:{triggers:function(){return this.trigger.split(\" \")}},mounted:function(){this.targetEl\u003dthis.$el,this.isInput\u003dthis.$slots.default\u0026\u0026this.$slots.default.some((function(t){return\"input\"\u003d\u003d\u003dt.tag})),this.isMounted\u003d!0}},So,[],!1,null,null,null).exports;var Co\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.isMounted?n(\"vue-final-modal\",{attrs:{ssr:\"\",name:t.id,classes:[\"modal\"],\"content-class\":[\"modal-dialog\",\"modal-dialog-scrollable\",t.optionalModalSize,t.optionalCentering],\"overlay-transition\":\"none\",transition:t.effectClass,\"click-to-close\":\"false\"!\u003d\u003dt.backdrop,\"esc-to-close\":\"\",\"z-index-base\":\"2000\"},model:{value:t.show,callback:function(e){t.show\u003de},expression:\"show\"}},[n(\"div\",{staticClass:\"modal-content\"},[t.hasHeader?n(\"div\",{staticClass:\"modal-header\"},[n(\"h5\",{staticClass:\"modal-title\"},[t._t(\"header\")],2),t._v(\" \"),n(\"button\",{staticClass:\"btn-close\",attrs:{type:\"button\",\"aria-label\":\"Close\"},on:{click:function(e){return t.close()}}})]):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"modal-body\"},[t._t(\"default\")],2),t._v(\" \"),t.hasFooter||t.hasOk?n(\"div\",{staticClass:\"modal-footer\"},[t.hasFooter?t._t(\"footer\"):n(\"button\",{staticClass:\"btn btn-primary\",on:{click:function(e){return t.close()}}},[t._v(\"\\n \"+t._s(t.okText)+\"\\n \")])],2):t._e()])]):t._e()};Co._withStripped\u003d!0;const $o\u003dqe({name:\"Modal\",components:{VueFinalModal:lo},data:function(){return{show:!1,isMounted:!1,zoomEffect:{\"enter-class\":\"modal-zoom\",\"enter-to-class\":\"modal-zoom-show\",\"leave-to-class\":\"modal-zoom\",\"leave-class\":\"modal-zoom-show\"}}},props:{okText:{type:String,default:\"\"},effect:{type:String,default:\"zoom\"},id:{type:String,default:\"\"},small:{type:Boolean,default:!1},large:{type:Boolean,default:!1},center:{type:Boolean,default:!1},backdrop:{type:String,default:\"\"}},computed:{hasHeader:function(){return!!this.$slots.header},hasFooter:function(){return!!this.$slots.footer},hasOk:function(){return\"\"!\u003d\u003dthis.okText},optionalModalSize:function(){return this.small||this.large?this.small?\"modal-sm\":\"modal-lg\":\"\"},optionalCentering:function(){return this.center?\"modal-dialog-centered\":\"\"},effectClass:function(){return\"zoom\"\u003d\u003d\u003dthis.effect?this.zoomEffect:\"vfm\"}},methods:{close:function(){this.show\u003d!1}},mounted:function(){this.isMounted\u003d!0}},Co,[],!1,null,null,null).exports;var ko\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"scroll-top-button\",t.getIconSize(),\"d-print-none\",{lighten:t.$data.isLighten}],style:t.iconStyle(),attrs:{\"aria-hidden\":\"true\"},on:{click:function(e){return t.handleScrollTop()}}},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas fa-arrow-circle-up\"]})]}))],2)};ko._withStripped\u003d!0;var To\u003d{box:We,breadcrumb:Ve,dropdown:gn,navbar:Tn,panel:Rn,annotate:In,aPoint:Wn,pic:Vn,quiz:Qn,question:Gn,qOption:Jn,retriever:zn,searchbar:oi,tab:si,tabGroup:li,tabs:ui,thumbnail:hi,trigger:ho,siteNav:fo,submenu:vn,siteNavButton:Cn,pageNavButton:kn,overlay:go,overlaySource:wo,popover:_o,tooltip:xo,modal:$o,VPopover:Ne,VTooltip:Ae,scrollTopButton:qe({name:\"ScrollTopButton\",props:{icon:{type:String,default:null},iconSize:{type:String,default:\"lg\"},iconColor:{type:String,default:null},bottom:{type:String,default:null},right:{type:String,default:null}},data:function(){return{isVisible:!1,isLighten:!1,timers:{showOrHideButtonTimer:0,lightenButtonTimer:0}}},methods:{initScrollTopButton:function(){window.addEventListener(\"scroll\",this.promptScrollTopButton)},destroyScrollTopButton:function(){window.removeEventListener(\"scroll\",this.promptScrollTopButton)},promptScrollTopButton:function(){this.resetScrollTopButton(),this.showOrHideScrollTopButton()},resetScrollTopButton:function(){clearTimeout(this.timers.showOrHideButtonTimer),clearTimeout(this.timers.lightenButtonTimer),this.isLighten\u003d!1},showOrHideScrollTopButton:function(){var t\u003dthis;this.timers.showOrHideButtonTimer\u003dsetTimeout((function(){document.body.scrollTop\u003e20||document.documentElement.scrollTop\u003e20?(t.isVisible\u003d!0,t.lightenScrollTopButton()):t.isVisible\u003d!1}),100)},lightenScrollTopButton:function(){var t\u003dthis;this.timers.lightenButtonTimer\u003dsetTimeout((function(){t.isLighten||(t.isLighten\u003d!0)}),1e3)},iconStyle:function(){var t\u003d{};return t.display\u003dthis.isVisible?\"block\":\"none\",this.iconColor\u0026\u0026(t.color\u003dthis.iconColor),t.bottom\u003dthis.bottom?this.bottom:\"2%\",t.right\u003dthis.right?this.right:\"2%\",t.position\u003d\"fixed\",t},handleScrollTop:function(){document.body.scrollIntoView({block:\"start\",behavior:\"smooth\"})},getIconSize:function(){return this.iconSize?\"fa-\".concat(this.iconSize):\"\"}},mounted:function(){this.initScrollTopButton()},beforeDestroy:function(){this.destroyScrollTopButton()}},ko,[],!1,null,null,null).exports},Eo\u003d{closeable:Qe()};const Oo\u003d{MarkBindVue:{plugin:{install:function(t){Object.keys(Eo).forEach((function(e){t.directive(e,Eo[e])})),Object.keys(To).forEach((function(e){t.component(e,To[e])}))}},components:To,directives:Eo},appFactory:function(){return{data:function(){return{searchData:[]}},methods:{searchCallback:function(t){var e\u003d\"\".concat(baseUrl,\"/\").concat(t.src.replace(/.md$/,\".html\")),n\u003dt.heading?\"#\".concat(t.heading.id):\"\";window.location\u003d\"\".concat(e).concat(n)}}}}};i(605);function Bo(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Po(t){for(var e\u003d1;e\u003carguments.length;e++){var i\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?Bo(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Bo(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var Lo\u003dOo.MarkBindVue,No\u003dOo.appFactory;function Ao(){var t\u003ddocument.querySelector(\"header[sticky]\");if(null!\u003d\u003dt){var e\u003da(),n\u003d!1;t.addEventListener(\"transitionend\",(function(){n||(t.style.overflow\u003d\"\")})),new ResizeObserver((function(){e\u003da(),document.documentElement.style.setProperty(\"--sticky-header-height\",\"\".concat(e,\"px\")),window.innerWidth\u003e767\u0026\u0026n\u0026\u0026l()})).observe(t);var i,o\u003d0,r\u003dwindow.location.hash,s\u003dfunction(){if(!(window.innerWidth\u003e767)){if(r!\u003d\u003dwindow.location.hash)return r\u003dwindow.location.hash,void l();r\u003dwindow.location.hash;var i\u003dwindow.pageYOffset;if(!(window.innerHeight+i\u003e\u003ddocument.body.offsetHeight)){if(i\u003eo){t.style.position\u003d\"static\";var s\u003dt.getBoundingClientRect().top+e;if(t.style.position\u003d\"sticky\",s\u003e0)return;n\u003d!0,t.style.overflow\u003d\"hidden\",t.classList.add(\"hide-header\")}else l();o\u003di}}};window.addEventListener(\"scroll\",(function(){i\u0026\u0026clearTimeout(i),i\u003dsetTimeout(s,20)}))}function a(){var e\u003dwindow.getComputedStyle(t,null);return t.clientHeight-parseFloat(e.paddingTop)-parseFloat(e.paddingBottom)}function l(){n\u003d!1,t.classList.remove(\"hide-header\")}}function zo(){document.querySelectorAll(\"script[style-bypass-vue-compilation]\").forEach((function(t){var e\u003ddocument.createElement(\"style\");e.innerHTML\u003dt.innerHTML,t.parentNode.replaceChild(e,t)})),Ao()}Vue.use(Lo.plugin),window.onload\u003dfunction(){if(window.location.hash){var t\u003ddocument.getElementById(window.location.hash.slice(1));t\u0026\u0026t.scrollIntoView({behavior:\"smooth\",block:\"start\",inline:\"nearest\"})}},window.handleSiteNavClick\u003dfunction(t){var e\u003d!(arguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1])||arguments[1];if(e){var n\u003dt.getElementsByTagName(\"a\");if(n.length)return void(window.location.href\u003dn[0].href)}var i\u003dt.nextElementSibling,o\u003dt.lastElementChild.lastElementChild;i.classList.toggle(\"site-nav-dropdown-container-open\"),o.classList.toggle(\"site-nav-rotate-icon\")};const Mo\u003d{setup:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo()}})).$mount(\"#app\",!0)},setupWithSearch:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo(),function(t){fetch(\"\".concat(baseUrl,\"/siteData.json\")).then((function(t){return t.json()})).then((function(e){t.searchData\u003de.pages}))}(this)}})).$mount(\"#app\",!0)}}})(),o\u003do.default})());"}],"authorContributionMap":{"KevinEyo1":1}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/js/polyfill.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var c\u003d\"function\"\u003d\u003dtypeof require\u0026\u0026require;if(!u\u0026\u0026c)return c(o,!0);if(i)return i(o,!0);var a\u003dnew Error(\"Cannot find module \u0027\"+o+\"\u0027\");throw a.code\u003d\"MODULE_NOT_FOUND\",a}var f\u003dn[o]\u003d{exports:{}};t[o][0].call(f.exports,function(n){var r\u003dt[o][1][n];return s(r||n)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i\u003d\"function\"\u003d\u003dtypeof require\u0026\u0026require,o\u003d0;o\u003cr.length;o++)s(r[o]);return s}({1:[function(t,n,r){(function(n){\"use strict\";function define(t,n,e){t[n]||Object[r](t,n,{writable:!0,configurable:!0,value:e})}if(t(327),t(328),t(2),n._babelPolyfill)throw new Error(\"only one instance of babel-polyfill is allowed\");n._babelPolyfill\u003d!0;var r\u003d\"defineProperty\";define(String.prototype,\"padLeft\",\"\".padStart),define(String.prototype,\"padRight\",\"\".padEnd),\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function(t){[][t]\u0026\u0026define(Array,t,Function.call.bind([][t]))})}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{2:2,327:327,328:328}],2:[function(t,n,r){t(130),n.exports\u003dt(23).RegExp.escape},{130:130,23:23}],3:[function(t,n,r){n.exports\u003dfunction(t){if(\"function\"!\u003dtypeof t)throw TypeError(t+\" is not a function!\");return t}},{}],4:[function(t,n,r){var e\u003dt(18);n.exports\u003dfunction(t,n){if(\"number\"!\u003dtypeof t\u0026\u0026\"Number\"!\u003de(t))throw TypeError(n);return+t}},{18:18}],5:[function(t,n,r){var e\u003dt(128)(\"unscopables\"),i\u003dArray.prototype;void 0\u003d\u003di[e]\u0026\u0026t(42)(i,e,{}),n.exports\u003dfunction(t){i[e][t]\u003d!0}},{128:128,42:42}],6:[function(t,n,r){n.exports\u003dfunction(t,n,r,e){if(!(t instanceof n)||void 0!\u003d\u003de\u0026\u0026e in t)throw TypeError(r+\": incorrect invocation!\");return t}},{}],7:[function(t,n,r){var e\u003dt(51);n.exports\u003dfunction(t){if(!e(t))throw TypeError(t+\" is not an object!\");return t}},{51:51}],8:[function(t,n,r){\"use strict\";var e\u003dt(119),i\u003dt(114),o\u003dt(118);n.exports\u003d[].copyWithin||function copyWithin(t,n){var r\u003de(this),u\u003do(r.length),c\u003di(t,u),a\u003di(n,u),f\u003darguments.length\u003e2?arguments[2]:void 0,s\u003dMath.min((void 0\u003d\u003d\u003df?u:i(f,u))-a,u-c),l\u003d1;for(a\u003cc\u0026\u0026c\u003ca+s\u0026\u0026(l\u003d-1,a+\u003ds-1,c+\u003ds-1);s-- \u003e0;)a in r?r[c]\u003dr[a]:delete r[c],c+\u003dl,a+\u003dl;return r}},{114:114,118:118,119:119}],9:[function(t,n,r){\"use strict\";var e\u003dt(119),i\u003dt(114),o\u003dt(118);n.exports\u003dfunction fill(t){for(var n\u003de(this),r\u003do(n.length),u\u003darguments.length,c\u003di(u\u003e1?arguments[1]:void 0,r),a\u003du\u003e2?arguments[2]:void 0,f\u003dvoid 0\u003d\u003d\u003da?r:i(a,r);f\u003ec;)n[c++]\u003dt;return n}},{114:114,118:118,119:119}],10:[function(t,n,r){var e\u003dt(39);n.exports\u003dfunction(t,n){var r\u003d[];return e(t,!1,r.push,r,n),r}},{39:39}],11:[function(t,n,r){var e\u003dt(117),i\u003dt(118),o\u003dt(114);n.exports\u003dfunction(t){return function(n,r,u){var c,a\u003de(n),f\u003di(a.length),s\u003do(u,f);if(t\u0026\u0026r!\u003dr){for(;f\u003es;)if((c\u003da[s++])!\u003dc)return!0}else for(;f\u003es;s++)if((t||s in a)\u0026\u0026a[s]\u003d\u003d\u003dr)return t||s||0;return!t\u0026\u0026-1}}},{114:114,117:117,118:118}],12:[function(t,n,r){var e\u003dt(25),i\u003dt(47),o\u003dt(119),u\u003dt(118),c\u003dt(15);n.exports\u003dfunction(t,n){var r\u003d1\u003d\u003dt,a\u003d2\u003d\u003dt,f\u003d3\u003d\u003dt,s\u003d4\u003d\u003dt,l\u003d6\u003d\u003dt,h\u003d5\u003d\u003dt||l,v\u003dn||c;return function(n,c,p){for(var d,y,g\u003do(n),m\u003di(g),b\u003de(c,p,3),x\u003du(m.length),S\u003d0,w\u003dr?v(n,x):a?v(n,0):void 0;x\u003eS;S++)if((h||S in m)\u0026\u0026(d\u003dm[S],y\u003db(d,S,g),t))if(r)w[S]\u003dy;else if(y)switch(t){case 3:return!0;case 5:return d;case 6:return S;case 2:w.push(d)}else if(s)return!1;return l?-1:f||s?s:w}}},{118:118,119:119,15:15,25:25,47:47}],13:[function(t,n,r){var e\u003dt(3),i\u003dt(119),o\u003dt(47),u\u003dt(118);n.exports\u003dfunction(t,n,r,c,a){e(n);var f\u003di(t),s\u003do(f),l\u003du(f.length),h\u003da?l-1:0,v\u003da?-1:1;if(r\u003c2)for(;;){if(h in s){c\u003ds[h],h+\u003dv;break}if(h+\u003dv,a?h\u003c0:l\u003c\u003dh)throw TypeError(\"Reduce of empty array with no initial value\")}for(;a?h\u003e\u003d0:l\u003eh;h+\u003dv)h in s\u0026\u0026(c\u003dn(c,s[h],h,f));return c}},{118:118,119:119,3:3,47:47}],14:[function(t,n,r){var e\u003dt(51),i\u003dt(49),o\u003dt(128)(\"species\");n.exports\u003dfunction(t){var n;return i(t)\u0026\u0026(n\u003dt.constructor,\"function\"!\u003dtypeof n||n!\u003d\u003dArray\u0026\u0026!i(n.prototype)||(n\u003dvoid 0),e(n)\u0026\u0026null\u003d\u003d\u003d(n\u003dn[o])\u0026\u0026(n\u003dvoid 0)),void 0\u003d\u003d\u003dn?Array:n}},{128:128,49:49,51:51}],15:[function(t,n,r){var e\u003dt(14);n.exports\u003dfunction(t,n){return new(e(t))(n)}},{14:14}],16:[function(t,n,r){\"use strict\";var e\u003dt(3),i\u003dt(51),o\u003dt(46),u\u003d[].slice,c\u003d{},a\u003dfunction(t,n,r){if(!(n in c)){for(var e\u003d[],i\u003d0;i\u003cn;i++)e[i]\u003d\"a[\"+i+\"]\";c[n]\u003dFunction(\"F,a\",\"return new F(\"+e.join(\",\")+\")\")}return c[n](t,r)};n.exports\u003dFunction.bind||function bind(t){var n\u003de(this),r\u003du.call(arguments,1),c\u003dfunction(){var e\u003dr.concat(u.call(arguments));return this instanceof c?a(n,e.length,e):o(n,e,t)};return i(n.prototype)\u0026\u0026(c.prototype\u003dn.prototype),c}},{3:3,46:46,51:51}],17:[function(t,n,r){var e\u003dt(18),i\u003dt(128)(\"toStringTag\"),o\u003d\"Arguments\"\u003d\u003de(function(){return arguments}()),u\u003dfunction(t,n){try{return t[n]}catch(t){}};n.exports\u003dfunction(t){var n,r,c;return void 0\u003d\u003d\u003dt?\"Undefined\":null\u003d\u003d\u003dt?\"Null\":\"string\"\u003d\u003dtypeof(r\u003du(n\u003dObject(t),i))?r:o?e(n):\"Object\"\u003d\u003d(c\u003de(n))\u0026\u0026\"function\"\u003d\u003dtypeof n.callee?\"Arguments\":c}},{128:128,18:18}],18:[function(t,n,r){var e\u003d{}.toString;n.exports\u003dfunction(t){return e.call(t).slice(8,-1)}},{}],19:[function(t,n,r){\"use strict\";var e\u003dt(72).f,i\u003dt(71),o\u003dt(93),u\u003dt(25),c\u003dt(6),a\u003dt(39),f\u003dt(55),s\u003dt(57),l\u003dt(100),h\u003dt(29),v\u003dt(66).fastKey,p\u003dt(125),d\u003dh?\"_s\":\"size\",y\u003dfunction(t,n){var r,e\u003dv(n);if(\"F\"!\u003d\u003de)return t._i[e];for(r\u003dt._f;r;r\u003dr.n)if(r.k\u003d\u003dn)return r};n.exports\u003d{getConstructor:function(t,n,r,f){var s\u003dt(function(t,e){c(t,s,n,\"_i\"),t._t\u003dn,t._i\u003di(null),t._f\u003dvoid 0,t._l\u003dvoid 0,t[d]\u003d0,void 0!\u003de\u0026\u0026a(e,r,t[f],t)});return o(s.prototype,{clear:function clear(){for(var t\u003dp(this,n),r\u003dt._i,e\u003dt._f;e;e\u003de.n)e.r\u003d!0,e.p\u0026\u0026(e.p\u003de.p.n\u003dvoid 0),delete r[e.i];t._f\u003dt._l\u003dvoid 0,t[d]\u003d0},delete:function(t){var r\u003dp(this,n),e\u003dy(r,t);if(e){var i\u003de.n,o\u003de.p;delete r._i[e.i],e.r\u003d!0,o\u0026\u0026(o.n\u003di),i\u0026\u0026(i.p\u003do),r._f\u003d\u003de\u0026\u0026(r._f\u003di),r._l\u003d\u003de\u0026\u0026(r._l\u003do),r[d]--}return!!e},forEach:function forEach(t){p(this,n);for(var r,e\u003du(t,arguments.length\u003e1?arguments[1]:void 0,3);r\u003dr?r.n:this._f;)for(e(r.v,r.k,this);r\u0026\u0026r.r;)r\u003dr.p},has:function has(t){return!!y(p(this,n),t)}}),h\u0026\u0026e(s.prototype,\"size\",{get:function(){return p(this,n)[d]}}),s},def:function(t,n,r){var e,i,o\u003dy(t,n);return o?o.v\u003dr:(t._l\u003do\u003d{i:i\u003dv(n,!0),k:n,v:r,p:e\u003dt._l,n:void 0,r:!1},t._f||(t._f\u003do),e\u0026\u0026(e.n\u003do),t[d]++,\"F\"!\u003d\u003di\u0026\u0026(t._i[i]\u003do)),t},getEntry:y,setStrong:function(t,n,r){f(t,n,function(t,r){this._t\u003dp(t,n),this._k\u003dr,this._l\u003dvoid 0},function(){for(var t\u003dthis,n\u003dt._k,r\u003dt._l;r\u0026\u0026r.r;)r\u003dr.p;return t._t\u0026\u0026(t._l\u003dr\u003dr?r.n:t._t._f)?\"keys\"\u003d\u003dn?s(0,r.k):\"values\"\u003d\u003dn?s(0,r.v):s(0,[r.k,r.v]):(t._t\u003dvoid 0,s(1))},r?\"entries\":\"values\",!r,!0),l(n)}}},{100:100,125:125,25:25,29:29,39:39,55:55,57:57,6:6,66:66,71:71,72:72,93:93}],20:[function(t,n,r){var e\u003dt(17),i\u003dt(10);n.exports\u003dfunction(t){return function toJSON(){if(e(this)!\u003dt)throw TypeError(t+\"#toJSON isn\u0027t generic\");return i(this)}}},{10:10,17:17}],21:[function(t,n,r){\"use strict\";var e\u003dt(93),i\u003dt(66).getWeak,o\u003dt(7),u\u003dt(51),c\u003dt(6),a\u003dt(39),f\u003dt(12),s\u003dt(41),l\u003dt(125),h\u003df(5),v\u003df(6),p\u003d0,d\u003dfunction(t){return t._l||(t._l\u003dnew y)},y\u003dfunction(){this.a\u003d[]},g\u003dfunction(t,n){return h(t.a,function(t){return t[0]\u003d\u003d\u003dn})};y.prototype\u003d{get:function(t){var n\u003dg(this,t);if(n)return n[1]},has:function(t){return!!g(this,t)},set:function(t,n){var r\u003dg(this,t);r?r[1]\u003dn:this.a.push([t,n])},delete:function(t){var n\u003dv(this.a,function(n){return n[0]\u003d\u003d\u003dt});return~n\u0026\u0026this.a.splice(n,1),!!~n}},n.exports\u003d{getConstructor:function(t,n,r,o){var f\u003dt(function(t,e){c(t,f,n,\"_i\"),t._t\u003dn,t._i\u003dp++,t._l\u003dvoid 0,void 0!\u003de\u0026\u0026a(e,r,t[o],t)});return e(f.prototype,{delete:function(t){if(!u(t))return!1;var r\u003di(t);return!0\u003d\u003d\u003dr?d(l(this,n)).delete(t):r\u0026\u0026s(r,this._i)\u0026\u0026delete r[this._i]},has:function has(t){if(!u(t))return!1;var r\u003di(t);return!0\u003d\u003d\u003dr?d(l(this,n)).has(t):r\u0026\u0026s(r,this._i)}}),f},def:function(t,n,r){var e\u003di(o(n),!0);return!0\u003d\u003d\u003de?d(t).set(n,r):e[t._i]\u003dr,t},ufstore:d}},{12:12,125:125,39:39,41:41,51:51,6:6,66:66,7:7,93:93}],22:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(33),o\u003dt(94),u\u003dt(93),c\u003dt(66),a\u003dt(39),f\u003dt(6),s\u003dt(51),l\u003dt(35),h\u003dt(56),v\u003dt(101),p\u003dt(45);n.exports\u003dfunction(t,n,r,d,y,g){var m\u003de[t],b\u003dm,x\u003dy?\"set\":\"add\",S\u003db\u0026\u0026b.prototype,w\u003d{},_\u003dfunction(t){var n\u003dS[t];o(S,t,\"delete\"\u003d\u003dt?function(t){return!(g\u0026\u0026!s(t))\u0026\u0026n.call(this,0\u003d\u003d\u003dt?0:t)}:\"has\"\u003d\u003dt?function has(t){return!(g\u0026\u0026!s(t))\u0026\u0026n.call(this,0\u003d\u003d\u003dt?0:t)}:\"get\"\u003d\u003dt?function get(t){return g\u0026\u0026!s(t)?void 0:n.call(this,0\u003d\u003d\u003dt?0:t)}:\"add\"\u003d\u003dt?function add(t){return n.call(this,0\u003d\u003d\u003dt?0:t),this}:function set(t,r){return n.call(this,0\u003d\u003d\u003dt?0:t,r),this})};if(\"function\"\u003d\u003dtypeof b\u0026\u0026(g||S.forEach\u0026\u0026!l(function(){(new b).entries().next()}))){var E\u003dnew b,O\u003dE[x](g?{}:-0,1)!\u003dE,P\u003dl(function(){E.has(1)}),M\u003dh(function(t){new b(t)}),F\u003d!g\u0026\u0026l(function(){for(var t\u003dnew b,n\u003d5;n--;)t[x](n,n);return!t.has(-0)});M||(b\u003dn(function(n,r){f(n,b,t);var e\u003dp(new m,n,b);return void 0!\u003dr\u0026\u0026a(r,y,e[x],e),e}),b.prototype\u003dS,S.constructor\u003db),(P||F)\u0026\u0026(_(\"delete\"),_(\"has\"),y\u0026\u0026_(\"get\")),(F||O)\u0026\u0026_(x),g\u0026\u0026S.clear\u0026\u0026delete S.clear}else b\u003dd.getConstructor(n,t,y,x),u(b.prototype,r),c.NEED\u003d!0;return v(b,t),w[t]\u003db,i(i.G+i.W+i.F*(b!\u003dm),w),g||d.setStrong(b,t,y),b}},{101:101,33:33,35:35,39:39,40:40,45:45,51:51,56:56,6:6,66:66,93:93,94:94}],23:[function(t,n,r){var e\u003dn.exports\u003d{version:\"2.5.0\"};\"number\"\u003d\u003dtypeof __e\u0026\u0026(__e\u003de)},{}],24:[function(t,n,r){\"use strict\";var e\u003dt(72),i\u003dt(92);n.exports\u003dfunction(t,n,r){n in t?e.f(t,n,i(0,r)):t[n]\u003dr}},{72:72,92:92}],25:[function(t,n,r){var e\u003dt(3);n.exports\u003dfunction(t,n,r){if(e(t),void 0\u003d\u003d\u003dn)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,i){return t.call(n,r,e,i)}}return function(){return t.apply(n,arguments)}}},{3:3}],26:[function(t,n,r){\"use strict\";var e\u003dt(35),i\u003dDate.prototype.getTime,o\u003dDate.prototype.toISOString,u\u003dfunction(t){return t\u003e9?t:\"0\"+t};n.exports\u003de(function(){return\"0385-07-25T07:06:39.999Z\"!\u003do.call(new Date(-5e13-1))})||!e(function(){o.call(new Date(NaN))})?function toISOString(){if(!isFinite(i.call(this)))throw RangeError(\"Invalid time value\");var t\u003dthis,n\u003dt.getUTCFullYear(),r\u003dt.getUTCMilliseconds(),e\u003dn\u003c0?\"-\":n\u003e9999?\"+\":\"\";return e+(\"00000\"+Math.abs(n)).slice(e?-6:-4)+\"-\"+u(t.getUTCMonth()+1)+\"-\"+u(t.getUTCDate())+\"T\"+u(t.getUTCHours())+\":\"+u(t.getUTCMinutes())+\":\"+u(t.getUTCSeconds())+\".\"+(r\u003e99?r:\"0\"+u(r))+\"Z\"}:o},{35:35}],27:[function(t,n,r){\"use strict\";var e\u003dt(7),i\u003dt(120);n.exports\u003dfunction(t){if(\"string\"!\u003d\u003dt\u0026\u0026\"number\"!\u003d\u003dt\u0026\u0026\"default\"!\u003d\u003dt)throw TypeError(\"Incorrect hint\");return i(e(this),\"number\"!\u003dt)}},{120:120,7:7}],28:[function(t,n,r){n.exports\u003dfunction(t){if(void 0\u003d\u003dt)throw TypeError(\"Can\u0027t call method on \"+t);return t}},{}],29:[function(t,n,r){n.exports\u003d!t(35)(function(){return 7!\u003dObject.defineProperty({},\"a\",{get:function(){return 7}}).a})},{35:35}],30:[function(t,n,r){var e\u003dt(51),i\u003dt(40).document,o\u003de(i)\u0026\u0026e(i.createElement);n.exports\u003dfunction(t){return o?i.createElement(t):{}}},{40:40,51:51}],31:[function(t,n,r){n.exports\u003d\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},{}],32:[function(t,n,r){var e\u003dt(81),i\u003dt(78),o\u003dt(82);n.exports\u003dfunction(t){var n\u003de(t),r\u003di.f;if(r)for(var u,c\u003dr(t),a\u003do.f,f\u003d0;c.length\u003ef;)a.call(t,u\u003dc[f++])\u0026\u0026n.push(u);return n}},{78:78,81:81,82:82}],33:[function(t,n,r){var e\u003dt(40),i\u003dt(23),o\u003dt(42),u\u003dt(94),c\u003dt(25),a\u003dfunction(t,n,r){var f,s,l,h,v\u003dt\u0026a.F,p\u003dt\u0026a.G,d\u003dt\u0026a.S,y\u003dt\u0026a.P,g\u003dt\u0026a.B,m\u003dp?e:d?e[n]||(e[n]\u003d{}):(e[n]||{}).prototype,b\u003dp?i:i[n]||(i[n]\u003d{}),x\u003db.prototype||(b.prototype\u003d{});p\u0026\u0026(r\u003dn);for(f in r)s\u003d!v\u0026\u0026m\u0026\u0026void 0!\u003d\u003dm[f],l\u003d(s?m:r)[f],h\u003dg\u0026\u0026s?c(l,e):y\u0026\u0026\"function\"\u003d\u003dtypeof l?c(Function.call,l):l,m\u0026\u0026u(m,f,l,t\u0026a.U),b[f]!\u003dl\u0026\u0026o(b,f,h),y\u0026\u0026x[f]!\u003dl\u0026\u0026(x[f]\u003dl)};e.core\u003di,a.F\u003d1,a.G\u003d2,a.S\u003d4,a.P\u003d8,a.B\u003d16,a.W\u003d32,a.U\u003d64,a.R\u003d128,n.exports\u003da},{23:23,25:25,40:40,42:42,94:94}],34:[function(t,n,r){var e\u003dt(128)(\"match\");n.exports\u003dfunction(t){var n\u003d/./;try{\"/./\"[t](n)}catch(r){try{return n[e]\u003d!1,!\"/./\"[t](n)}catch(t){}}return!0}},{128:128}],35:[function(t,n,r){n.exports\u003dfunction(t){try{return!!t()}catch(t){return!0}}},{}],36:[function(t,n,r){\"use strict\";var e\u003dt(42),i\u003dt(94),o\u003dt(35),u\u003dt(28),c\u003dt(128);n.exports\u003dfunction(t,n,r){var a\u003dc(t),f\u003dr(u,a,\"\"[t]),s\u003df[0],l\u003df[1];o(function(){var n\u003d{};return n[a]\u003dfunction(){return 7},7!\u003d\"\"[t](n)})\u0026\u0026(i(String.prototype,t,s),e(RegExp.prototype,a,2\u003d\u003dn?function(t,n){return l.call(t,this,n)}:function(t){return l.call(t,this)}))}},{128:128,28:28,35:35,42:42,94:94}],37:[function(t,n,r){\"use strict\";var e\u003dt(7);n.exports\u003dfunction(){var t\u003de(this),n\u003d\"\";return t.global\u0026\u0026(n+\u003d\"g\"),t.ignoreCase\u0026\u0026(n+\u003d\"i\"),t.multiline\u0026\u0026(n+\u003d\"m\"),t.unicode\u0026\u0026(n+\u003d\"u\"),t.sticky\u0026\u0026(n+\u003d\"y\"),n}},{7:7}],38:[function(t,n,r){\"use strict\";function flattenIntoArray(t,n,r,a,f,s,l,h){for(var v,p,d\u003df,y\u003d0,g\u003d!!l\u0026\u0026u(l,h,3);y\u003ca;){if(y in r){if(v\u003dg?g(r[y],y,n):r[y],p\u003d!1,i(v)\u0026\u0026(p\u003dv[c],p\u003dvoid 0!\u003d\u003dp?!!p:e(v)),p\u0026\u0026s\u003e0)d\u003dflattenIntoArray(t,n,v,o(v.length),d,s-1)-1;else{if(d\u003e\u003d9007199254740991)throw TypeError();t[d]\u003dv}d++}y++}return d}var e\u003dt(49),i\u003dt(51),o\u003dt(118),u\u003dt(25),c\u003dt(128)(\"isConcatSpreadable\");n.exports\u003dflattenIntoArray},{118:118,128:128,25:25,49:49,51:51}],39:[function(t,n,r){var e\u003dt(25),i\u003dt(53),o\u003dt(48),u\u003dt(7),c\u003dt(118),a\u003dt(129),f\u003d{},s\u003d{},r\u003dn.exports\u003dfunction(t,n,r,l,h){var v,p,d,y,g\u003dh?function(){return t}:a(t),m\u003de(r,l,n?2:1),b\u003d0;if(\"function\"!\u003dtypeof g)throw TypeError(t+\" is not iterable!\");if(o(g)){for(v\u003dc(t.length);v\u003eb;b++)if((y\u003dn?m(u(p\u003dt[b])[0],p[1]):m(t[b]))\u003d\u003d\u003df||y\u003d\u003d\u003ds)return y}else for(d\u003dg.call(t);!(p\u003dd.next()).done;)if((y\u003di(d,m,p.value,n))\u003d\u003d\u003df||y\u003d\u003d\u003ds)return y};r.BREAK\u003df,r.RETURN\u003ds},{118:118,129:129,25:25,48:48,53:53,7:7}],40:[function(t,n,r){var e\u003dn.exports\u003d\"undefined\"!\u003dtypeof window\u0026\u0026window.Math\u003d\u003dMath?window:\"undefined\"!\u003dtypeof self\u0026\u0026self.Math\u003d\u003dMath?self:Function(\"return this\")();\"number\"\u003d\u003dtypeof __g\u0026\u0026(__g\u003de)},{}],41:[function(t,n,r){var e\u003d{}.hasOwnProperty;n.exports\u003dfunction(t,n){return e.call(t,n)}},{}],42:[function(t,n,r){var e\u003dt(72),i\u003dt(92);n.exports\u003dt(29)?function(t,n,r){return e.f(t,n,i(1,r))}:function(t,n,r){return t[n]\u003dr,t}},{29:29,72:72,92:92}],43:[function(t,n,r){var e\u003dt(40).document;n.exports\u003de\u0026\u0026e.documentElement},{40:40}],44:[function(t,n,r){n.exports\u003d!t(29)\u0026\u0026!t(35)(function(){return 7!\u003dObject.defineProperty(t(30)(\"div\"),\"a\",{get:function(){return 7}}).a})},{29:29,30:30,35:35}],45:[function(t,n,r){var e\u003dt(51),i\u003dt(99).set;n.exports\u003dfunction(t,n,r){var o,u\u003dn.constructor;return u!\u003d\u003dr\u0026\u0026\"function\"\u003d\u003dtypeof u\u0026\u0026(o\u003du.prototype)!\u003d\u003dr.prototype\u0026\u0026e(o)\u0026\u0026i\u0026\u0026i(t,o),t}},{51:51,99:99}],46:[function(t,n,r){n.exports\u003dfunction(t,n,r){var e\u003dvoid 0\u003d\u003d\u003dr;switch(n.length){case 0:return e?t():t.call(r);case 1:return e?t(n[0]):t.call(r,n[0]);case 2:return e?t(n[0],n[1]):t.call(r,n[0],n[1]);case 3:return e?t(n[0],n[1],n[2]):t.call(r,n[0],n[1],n[2]);case 4:return e?t(n[0],n[1],n[2],n[3]):t.call(r,n[0],n[1],n[2],n[3])}return t.apply(r,n)}},{}],47:[function(t,n,r){var e\u003dt(18);n.exports\u003dObject(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"\u003d\u003de(t)?t.split(\"\"):Object(t)}},{18:18}],48:[function(t,n,r){var e\u003dt(58),i\u003dt(128)(\"iterator\"),o\u003dArray.prototype;n.exports\u003dfunction(t){return void 0!\u003d\u003dt\u0026\u0026(e.Array\u003d\u003d\u003dt||o[i]\u003d\u003d\u003dt)}},{128:128,58:58}],49:[function(t,n,r){var e\u003dt(18);n.exports\u003dArray.isArray||function isArray(t){return\"Array\"\u003d\u003de(t)}},{18:18}],50:[function(t,n,r){var e\u003dt(51),i\u003dMath.floor;n.exports\u003dfunction isInteger(t){return!e(t)\u0026\u0026isFinite(t)\u0026\u0026i(t)\u003d\u003d\u003dt}},{51:51}],51:[function(t,n,r){n.exports\u003dfunction(t){return\"object\"\u003d\u003dtypeof t?null!\u003d\u003dt:\"function\"\u003d\u003dtypeof t}},{}],52:[function(t,n,r){var e\u003dt(51),i\u003dt(18),o\u003dt(128)(\"match\");n.exports\u003dfunction(t){var n;return e(t)\u0026\u0026(void 0!\u003d\u003d(n\u003dt[o])?!!n:\"RegExp\"\u003d\u003di(t))}},{128:128,18:18,51:51}],53:[function(t,n,r){var e\u003dt(7);n.exports\u003dfunction(t,n,r,i){try{return i?n(e(r)[0],r[1]):n(r)}catch(n){var o\u003dt.return;throw void 0!\u003d\u003do\u0026\u0026e(o.call(t)),n}}},{7:7}],54:[function(t,n,r){\"use strict\";var e\u003dt(71),i\u003dt(92),o\u003dt(101),u\u003d{};t(42)(u,t(128)(\"iterator\"),function(){return this}),n.exports\u003dfunction(t,n,r){t.prototype\u003de(u,{next:i(1,r)}),o(t,n+\" Iterator\")}},{101:101,128:128,42:42,71:71,92:92}],55:[function(t,n,r){\"use strict\";var e\u003dt(60),i\u003dt(33),o\u003dt(94),u\u003dt(42),c\u003dt(41),a\u003dt(58),f\u003dt(54),s\u003dt(101),l\u003dt(79),h\u003dt(128)(\"iterator\"),v\u003d!([].keys\u0026\u0026\"next\"in[].keys()),p\u003dfunction(){return this};n.exports\u003dfunction(t,n,r,d,y,g,m){f(r,n,d);var b,x,S,w\u003dfunction(t){if(!v\u0026\u0026t in P)return P[t];switch(t){case\"keys\":return function keys(){return new r(this,t)};case\"values\":return function values(){return new r(this,t)}}return function entries(){return new r(this,t)}},_\u003dn+\" Iterator\",E\u003d\"values\"\u003d\u003dy,O\u003d!1,P\u003dt.prototype,M\u003dP[h]||P[\"@@iterator\"]||y\u0026\u0026P[y],F\u003dM||w(y),I\u003dy?E?w(\"entries\"):F:void 0,A\u003d\"Array\"\u003d\u003dn?P.entries||M:M;if(A\u0026\u0026(S\u003dl(A.call(new t)))!\u003d\u003dObject.prototype\u0026\u0026S.next\u0026\u0026(s(S,_,!0),e||c(S,h)||u(S,h,p)),E\u0026\u0026M\u0026\u0026\"values\"!\u003d\u003dM.name\u0026\u0026(O\u003d!0,F\u003dfunction values(){return M.call(this)}),e\u0026\u0026!m||!v\u0026\u0026!O\u0026\u0026P[h]||u(P,h,F),a[n]\u003dF,a[_]\u003dp,y)if(b\u003d{values:E?F:w(\"values\"),keys:g?F:w(\"keys\"),entries:I},m)for(x in b)x in P||o(P,x,b[x]);else i(i.P+i.F*(v||O),n,b);return b}},{101:101,128:128,33:33,41:41,42:42,54:54,58:58,60:60,79:79,94:94}],56:[function(t,n,r){var e\u003dt(128)(\"iterator\"),i\u003d!1;try{var o\u003d[7][e]();o.return\u003dfunction(){i\u003d!0},Array.from(o,function(){throw 2})}catch(t){}n.exports\u003dfunction(t,n){if(!n\u0026\u0026!i)return!1;var r\u003d!1;try{var o\u003d[7],u\u003do[e]();u.next\u003dfunction(){return{done:r\u003d!0}},o[e]\u003dfunction(){return u},t(o)}catch(t){}return r}},{128:128}],57:[function(t,n,r){n.exports\u003dfunction(t,n){return{value:n,done:!!t}}},{}],58:[function(t,n,r){n.exports\u003d{}},{}],59:[function(t,n,r){var e\u003dt(81),i\u003dt(117);n.exports\u003dfunction(t,n){for(var r,o\u003di(t),u\u003de(o),c\u003du.length,a\u003d0;c\u003ea;)if(o[r\u003du[a++]]\u003d\u003d\u003dn)return r}},{117:117,81:81}],60:[function(t,n,r){n.exports\u003d!1},{}],61:[function(t,n,r){var e\u003dMath.expm1;n.exports\u003d!e||e(10)\u003e22025.465794806718||e(10)\u003c22025.465794806718||-2e-17!\u003de(-2e-17)?function expm1(t){return 0\u003d\u003d(t\u003d+t)?t:t\u003e-1e-6\u0026\u0026t\u003c1e-6?t+t*t/2:Math.exp(t)-1}:e},{}],62:[function(t,n,r){var e\u003dt(65),i\u003dMath.pow,o\u003di(2,-52),u\u003di(2,-23),c\u003di(2,127)*(2-u),a\u003di(2,-126),f\u003dfunction(t){return t+1/o-1/o};n.exports\u003dMath.fround||function fround(t){var n,r,i\u003dMath.abs(t),s\u003de(t);return i\u003ca?s*f(i/a/u)*a*u:(n\u003d(1+u/o)*i,r\u003dn-(n-i),r\u003ec||r!\u003dr?s*(1/0):s*r)}},{65:65}],63:[function(t,n,r){n.exports\u003dMath.log1p||function log1p(t){return(t\u003d+t)\u003e-1e-8\u0026\u0026t\u003c1e-8?t-t*t/2:Math.log(1+t)}},{}],64:[function(t,n,r){n.exports\u003dMath.scale||function scale(t,n,r,e,i){return 0\u003d\u003d\u003darguments.length||t!\u003dt||n!\u003dn||r!\u003dr||e!\u003de||i!\u003di?NaN:t\u003d\u003d\u003d1/0||t\u003d\u003d\u003d-1/0?t:(t-n)*(i-e)/(r-n)+e}},{}],65:[function(t,n,r){n.exports\u003dMath.sign||function sign(t){return 0\u003d\u003d(t\u003d+t)||t!\u003dt?t:t\u003c0?-1:1}},{}],66:[function(t,n,r){var e\u003dt(124)(\"meta\"),i\u003dt(51),o\u003dt(41),u\u003dt(72).f,c\u003d0,a\u003dObject.isExtensible||function(){return!0},f\u003d!t(35)(function(){return a(Object.preventExtensions({}))}),s\u003dfunction(t){u(t,e,{value:{i:\"O\"+ ++c,w:{}}})},l\u003dfunction(t,n){if(!i(t))return\"symbol\"\u003d\u003dtypeof t?t:(\"string\"\u003d\u003dtypeof t?\"S\":\"P\")+t;if(!o(t,e)){if(!a(t))return\"F\";if(!n)return\"E\";s(t)}return t[e].i},h\u003dfunction(t,n){if(!o(t,e)){if(!a(t))return!0;if(!n)return!1;s(t)}return t[e].w},v\u003dfunction(t){return f\u0026\u0026p.NEED\u0026\u0026a(t)\u0026\u0026!o(t,e)\u0026\u0026s(t),t},p\u003dn.exports\u003d{KEY:e,NEED:!1,fastKey:l,getWeak:h,onFreeze:v}},{124:124,35:35,41:41,51:51,72:72}],67:[function(t,n,r){var e\u003dt(160),i\u003dt(33),o\u003dt(103)(\"metadata\"),u\u003do.store||(o.store\u003dnew(t(266))),c\u003dfunction(t,n,r){var i\u003du.get(t);if(!i){if(!r)return;u.set(t,i\u003dnew e)}var o\u003di.get(n);if(!o){if(!r)return;i.set(n,o\u003dnew e)}return o},a\u003dfunction(t,n,r){var e\u003dc(n,r,!1);return void 0!\u003d\u003de\u0026\u0026e.has(t)},f\u003dfunction(t,n,r){var e\u003dc(n,r,!1);return void 0\u003d\u003d\u003de?void 0:e.get(t)},s\u003dfunction(t,n,r,e){c(r,e,!0).set(t,n)},l\u003dfunction(t,n){var r\u003dc(t,n,!1),e\u003d[];return r\u0026\u0026r.forEach(function(t,n){e.push(n)}),e},h\u003dfunction(t){return void 0\u003d\u003d\u003dt||\"symbol\"\u003d\u003dtypeof t?t:String(t)},v\u003dfunction(t){i(i.S,\"Reflect\",t)};n.exports\u003d{store:u,map:c,has:a,get:f,set:s,keys:l,key:h,exp:v}},{103:103,160:160,266:266,33:33}],68:[function(t,n,r){var e\u003dt(40),i\u003dt(113).set,o\u003de.MutationObserver||e.WebKitMutationObserver,u\u003de.process,c\u003de.Promise,a\u003d\"process\"\u003d\u003dt(18)(u);n.exports\u003dfunction(){var t,n,r,f\u003dfunction(){var e,i;for(a\u0026\u0026(e\u003du.domain)\u0026\u0026e.exit();t;){i\u003dt.fn,t\u003dt.next;try{i()}catch(e){throw t?r():n\u003dvoid 0,e}}n\u003dvoid 0,e\u0026\u0026e.enter()};if(a)r\u003dfunction(){u.nextTick(f)};else if(o){var s\u003d!0,l\u003ddocument.createTextNode(\"\");new o(f).observe(l,{characterData:!0}),r\u003dfunction(){l.data\u003ds\u003d!s}}else if(c\u0026\u0026c.resolve){var h\u003dc.resolve();r\u003dfunction(){h.then(f)}}else r\u003dfunction(){i.call(e,f)};return function(e){var i\u003d{fn:e,next:void 0};n\u0026\u0026(n.next\u003di),t||(t\u003di,r()),n\u003di}}},{113:113,18:18,40:40}],69:[function(t,n,r){\"use strict\";function PromiseCapability(t){var n,r;this.promise\u003dnew t(function(t,e){if(void 0!\u003d\u003dn||void 0!\u003d\u003dr)throw TypeError(\"Bad Promise constructor\");n\u003dt,r\u003de}),this.resolve\u003de(n),this.reject\u003de(r)}var e\u003dt(3);n.exports.f\u003dfunction(t){return new PromiseCapability(t)}},{3:3}],70:[function(t,n,r){\"use strict\";var e\u003dt(81),i\u003dt(78),o\u003dt(82),u\u003dt(119),c\u003dt(47),a\u003dObject.assign;n.exports\u003d!a||t(35)(function(){var t\u003d{},n\u003d{},r\u003dSymbol(),e\u003d\"abcdefghijklmnopqrst\";return t[r]\u003d7,e.split(\"\").forEach(function(t){n[t]\u003dt}),7!\u003da({},t)[r]||Object.keys(a({},n)).join(\"\")!\u003de})?function assign(t,n){for(var r\u003du(t),a\u003darguments.length,f\u003d1,s\u003di.f,l\u003do.f;a\u003ef;)for(var h,v\u003dc(arguments[f++]),p\u003ds?e(v).concat(s(v)):e(v),d\u003dp.length,y\u003d0;d\u003ey;)l.call(v,h\u003dp[y++])\u0026\u0026(r[h]\u003dv[h]);return r}:a},{119:119,35:35,47:47,78:78,81:81,82:82}],71:[function(t,n,r){var e\u003dt(7),i\u003dt(73),o\u003dt(31),u\u003dt(102)(\"IE_PROTO\"),c\u003dfunction(){},a\u003dfunction(){var n,r\u003dt(30)(\"iframe\"),e\u003do.length;for(r.style.display\u003d\"none\",t(43).appendChild(r),r.src\u003d\"javascript:\",n\u003dr.contentWindow.document,n.open(),n.write(\"\u003cscript\u003edocument.F\u003dObject\u003c\\/script\u003e\"),n.close(),a\u003dn.F;e--;)delete a.prototype[o[e]];return a()};n.exports\u003dObject.create||function create(t,n){var r;return null!\u003d\u003dt?(c.prototype\u003de(t),r\u003dnew c,c.prototype\u003dnull,r[u]\u003dt):r\u003da(),void 0\u003d\u003d\u003dn?r:i(r,n)}},{102:102,30:30,31:31,43:43,7:7,73:73}],72:[function(t,n,r){var e\u003dt(7),i\u003dt(44),o\u003dt(120),u\u003dObject.defineProperty;r.f\u003dt(29)?Object.defineProperty:function defineProperty(t,n,r){if(e(t),n\u003do(n,!0),e(r),i)try{return u(t,n,r)}catch(t){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported!\");return\"value\"in r\u0026\u0026(t[n]\u003dr.value),t}},{120:120,29:29,44:44,7:7}],73:[function(t,n,r){var e\u003dt(72),i\u003dt(7),o\u003dt(81);n.exports\u003dt(29)?Object.defineProperties:function defineProperties(t,n){i(t);for(var r,u\u003do(n),c\u003du.length,a\u003d0;c\u003ea;)e.f(t,r\u003du[a++],n[r]);return t}},{29:29,7:7,72:72,81:81}],74:[function(t,n,r){\"use strict\";n.exports\u003dt(60)||!t(35)(function(){var n\u003dMath.random();__defineSetter__.call(null,n,function(){}),delete t(40)[n]})},{35:35,40:40,60:60}],75:[function(t,n,r){var e\u003dt(82),i\u003dt(92),o\u003dt(117),u\u003dt(120),c\u003dt(41),a\u003dt(44),f\u003dObject.getOwnPropertyDescriptor;r.f\u003dt(29)?f:function getOwnPropertyDescriptor(t,n){if(t\u003do(t),n\u003du(n,!0),a)try{return f(t,n)}catch(t){}if(c(t,n))return i(!e.f.call(t,n),t[n])}},{117:117,120:120,29:29,41:41,44:44,82:82,92:92}],76:[function(t,n,r){var e\u003dt(117),i\u003dt(77).f,o\u003d{}.toString,u\u003d\"object\"\u003d\u003dtypeof window\u0026\u0026window\u0026\u0026Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c\u003dfunction(t){try{return i(t)}catch(t){return u.slice()}};n.exports.f\u003dfunction getOwnPropertyNames(t){return u\u0026\u0026\"[object Window]\"\u003d\u003do.call(t)?c(t):i(e(t))}},{117:117,77:77}],77:[function(t,n,r){var e\u003dt(80),i\u003dt(31).concat(\"length\",\"prototype\");r.f\u003dObject.getOwnPropertyNames||function getOwnPropertyNames(t){return e(t,i)}},{31:31,80:80}],78:[function(t,n,r){r.f\u003dObject.getOwnPropertySymbols},{}],79:[function(t,n,r){var e\u003dt(41),i\u003dt(119),o\u003dt(102)(\"IE_PROTO\"),u\u003dObject.prototype;n.exports\u003dObject.getPrototypeOf||function(t){return t\u003di(t),e(t,o)?t[o]:\"function\"\u003d\u003dtypeof t.constructor\u0026\u0026t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},{102:102,119:119,41:41}],80:[function(t,n,r){var e\u003dt(41),i\u003dt(117),o\u003dt(11)(!1),u\u003dt(102)(\"IE_PROTO\");n.exports\u003dfunction(t,n){var r,c\u003di(t),a\u003d0,f\u003d[];for(r in c)r!\u003du\u0026\u0026e(c,r)\u0026\u0026f.push(r);for(;n.length\u003ea;)e(c,r\u003dn[a++])\u0026\u0026(~o(f,r)||f.push(r));return f}},{102:102,11:11,117:117,41:41}],81:[function(t,n,r){var e\u003dt(80),i\u003dt(31);n.exports\u003dObject.keys||function keys(t){return e(t,i)}},{31:31,80:80}],82:[function(t,n,r){r.f\u003d{}.propertyIsEnumerable},{}],83:[function(t,n,r){var e\u003dt(33),i\u003dt(23),o\u003dt(35);n.exports\u003dfunction(t,n){var r\u003d(i.Object||{})[t]||Object[t],u\u003d{};u[t]\u003dn(r),e(e.S+e.F*o(function(){r(1)}),\"Object\",u)}},{23:23,33:33,35:35}],84:[function(t,n,r){var e\u003dt(81),i\u003dt(117),o\u003dt(82).f;n.exports\u003dfunction(t){return function(n){for(var r,u\u003di(n),c\u003de(u),a\u003dc.length,f\u003d0,s\u003d[];a\u003ef;)o.call(u,r\u003dc[f++])\u0026\u0026s.push(t?[r,u[r]]:u[r]);return s}}},{117:117,81:81,82:82}],85:[function(t,n,r){var e\u003dt(77),i\u003dt(78),o\u003dt(7),u\u003dt(40).Reflect;n.exports\u003du\u0026\u0026u.ownKeys||function ownKeys(t){var n\u003de.f(o(t)),r\u003di.f;return r?n.concat(r(t)):n}},{40:40,7:7,77:77,78:78}],86:[function(t,n,r){var e\u003dt(40).parseFloat,i\u003dt(111).trim;n.exports\u003d1/e(t(112)+\"-0\")!\u003d-1/0?function parseFloat(t){var n\u003di(String(t),3),r\u003de(n);return 0\u003d\u003d\u003dr\u0026\u0026\"-\"\u003d\u003dn.charAt(0)?-0:r}:e},{111:111,112:112,40:40}],87:[function(t,n,r){var e\u003dt(40).parseInt,i\u003dt(111).trim,o\u003dt(112),u\u003d/^[-+]?0[xX]/;n.exports\u003d8!\u003d\u003de(o+\"08\")||22!\u003d\u003de(o+\"0x16\")?function parseInt(t,n){var r\u003di(String(t),3);return e(r,n\u003e\u003e\u003e0||(u.test(r)?16:10))}:e},{111:111,112:112,40:40}],88:[function(t,n,r){\"use strict\";var e\u003dt(89),i\u003dt(46),o\u003dt(3);n.exports\u003dfunction(){for(var t\u003do(this),n\u003darguments.length,r\u003dArray(n),u\u003d0,c\u003de._,a\u003d!1;n\u003eu;)(r[u]\u003darguments[u++])\u003d\u003d\u003dc\u0026\u0026(a\u003d!0);return function(){var e,o\u003dthis,u\u003darguments.length,f\u003d0,s\u003d0;if(!a\u0026\u0026!u)return i(t,r,o);if(e\u003dr.slice(),a)for(;n\u003ef;f++)e[f]\u003d\u003d\u003dc\u0026\u0026(e[f]\u003darguments[s++]);for(;u\u003es;)e.push(arguments[s++]);return i(t,e,o)}}},{3:3,46:46,89:89}],89:[function(t,n,r){n.exports\u003dt(40)},{40:40}],90:[function(t,n,r){n.exports\u003dfunction(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},{}],91:[function(t,n,r){var e\u003dt(69);n.exports\u003dfunction(t,n){var r\u003de.f(t);return(0,r.resolve)(n),r.promise}},{69:69}],92:[function(t,n,r){n.exports\u003dfunction(t,n){return{enumerable:!(1\u0026t),configurable:!(2\u0026t),writable:!(4\u0026t),value:n}}},{}],93:[function(t,n,r){var e\u003dt(94);n.exports\u003dfunction(t,n,r){for(var i in n)e(t,i,n[i],r);return t}},{94:94}],94:[function(t,n,r){var e\u003dt(40),i\u003dt(42),o\u003dt(41),u\u003dt(124)(\"src\"),c\u003dFunction.toString,a\u003d(\"\"+c).split(\"toString\");t(23).inspectSource\u003dfunction(t){return c.call(t)},(n.exports\u003dfunction(t,n,r,c){var f\u003d\"function\"\u003d\u003dtypeof r;f\u0026\u0026(o(r,\"name\")||i(r,\"name\",n)),t[n]!\u003d\u003dr\u0026\u0026(f\u0026\u0026(o(r,u)||i(r,u,t[n]?\"\"+t[n]:a.join(String(n)))),t\u003d\u003d\u003de?t[n]\u003dr:c?t[n]?t[n]\u003dr:i(t,n,r):(delete t[n],i(t,n,r)))})(Function.prototype,\"toString\",function toString(){return\"function\"\u003d\u003dtypeof this\u0026\u0026this[u]||c.call(this)})},{124:124,23:23,40:40,41:41,42:42}],95:[function(t,n,r){n.exports\u003dfunction(t,n){var r\u003dn\u003d\u003d\u003dObject(n)?function(t){return n[t]}:n;return function(n){return String(n).replace(t,r)}}},{}],96:[function(t,n,r){n.exports\u003dObject.is||function is(t,n){return t\u003d\u003d\u003dn?0!\u003d\u003dt||1/t\u003d\u003d1/n:t!\u003dt\u0026\u0026n!\u003dn}},{}],97:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(3),o\u003dt(25),u\u003dt(39);n.exports\u003dfunction(t){e(e.S,t,{from:function from(t){var n,r,e,c,a\u003darguments[1];return i(this),n\u003dvoid 0!\u003d\u003da,n\u0026\u0026i(a),void 0\u003d\u003dt?new this:(r\u003d[],n?(e\u003d0,c\u003do(a,arguments[2],2),u(t,!1,function(t){r.push(c(t,e++))})):u(t,!1,r.push,r),new this(r))}})}},{25:25,3:3,33:33,39:39}],98:[function(t,n,r){\"use strict\";var e\u003dt(33);n.exports\u003dfunction(t){e(e.S,t,{of:function of(){for(var t\u003darguments.length,n\u003dArray(t);t--;)n[t]\u003darguments[t];return new this(n)}})}},{33:33}],99:[function(t,n,r){var e\u003dt(51),i\u003dt(7),o\u003dfunction(t,n){if(i(t),!e(n)\u0026\u0026null!\u003d\u003dn)throw TypeError(n+\": can\u0027t set as prototype!\")};n.exports\u003d{set:Object.setPrototypeOf||(\"__proto__\"in{}?function(n,r,e){try{e\u003dt(25)(Function.call,t(75).f(Object.prototype,\"__proto__\").set,2),e(n,[]),r\u003d!(n instanceof Array)}catch(t){r\u003d!0}return function setPrototypeOf(t,n){return o(t,n),r?t.__proto__\u003dn:e(t,n),t}}({},!1):void 0),check:o}},{25:25,51:51,7:7,75:75}],100:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(72),o\u003dt(29),u\u003dt(128)(\"species\");n.exports\u003dfunction(t){var n\u003de[t];o\u0026\u0026n\u0026\u0026!n[u]\u0026\u0026i.f(n,u,{configurable:!0,get:function(){return this}})}},{128:128,29:29,40:40,72:72}],101:[function(t,n,r){var e\u003dt(72).f,i\u003dt(41),o\u003dt(128)(\"toStringTag\");n.exports\u003dfunction(t,n,r){t\u0026\u0026!i(t\u003dr?t:t.prototype,o)\u0026\u0026e(t,o,{configurable:!0,value:n})}},{128:128,41:41,72:72}],102:[function(t,n,r){var e\u003dt(103)(\"keys\"),i\u003dt(124);n.exports\u003dfunction(t){return e[t]||(e[t]\u003di(t))}},{103:103,124:124}],103:[function(t,n,r){var e\u003dt(40),i\u003de[\"__core-js_shared__\"]||(e[\"__core-js_shared__\"]\u003d{});n.exports\u003dfunction(t){return i[t]||(i[t]\u003d{})}},{40:40}],104:[function(t,n,r){var e\u003dt(7),i\u003dt(3),o\u003dt(128)(\"species\");n.exports\u003dfunction(t,n){var r,u\u003de(t).constructor;return void 0\u003d\u003d\u003du||void 0\u003d\u003d(r\u003de(u)[o])?n:i(r)}},{128:128,3:3,7:7}],105:[function(t,n,r){\"use strict\";var e\u003dt(35);n.exports\u003dfunction(t,n){return!!t\u0026\u0026e(function(){n?t.call(null,function(){},1):t.call(null)})}},{35:35}],106:[function(t,n,r){var e\u003dt(116),i\u003dt(28);n.exports\u003dfunction(t){return function(n,r){var o,u,c\u003dString(i(n)),a\u003de(r),f\u003dc.length;return a\u003c0||a\u003e\u003df?t?\"\":void 0:(o\u003dc.charCodeAt(a),o\u003c55296||o\u003e56319||a+1\u003d\u003d\u003df||(u\u003dc.charCodeAt(a+1))\u003c56320||u\u003e57343?t?c.charAt(a):o:t?c.slice(a,a+2):u-56320+(o-55296\u003c\u003c10)+65536)}}},{116:116,28:28}],107:[function(t,n,r){var e\u003dt(52),i\u003dt(28);n.exports\u003dfunction(t,n,r){if(e(n))throw TypeError(\"String#\"+r+\" doesn\u0027t accept regex!\");return String(i(t))}},{28:28,52:52}],108:[function(t,n,r){var e\u003dt(33),i\u003dt(35),o\u003dt(28),u\u003d/\"/g,c\u003dfunction(t,n,r,e){var i\u003dString(o(t)),c\u003d\"\u003c\"+n;return\"\"!\u003d\u003dr\u0026\u0026(c+\u003d\" \"+r+\u0027\u003d\"\u0027+String(e).replace(u,\"\u0026quot;\")+\u0027\"\u0027),c+\"\u003e\"+i+\"\u003c/\"+n+\"\u003e\"};n.exports\u003dfunction(t,n){var r\u003d{};r[t]\u003dn(c),e(e.P+e.F*i(function(){var n\u003d\"\"[t](\u0027\"\u0027);return n!\u003d\u003dn.toLowerCase()||n.split(\u0027\"\u0027).length\u003e3}),\"String\",r)}},{28:28,33:33,35:35}],109:[function(t,n,r){var e\u003dt(118),i\u003dt(110),o\u003dt(28);n.exports\u003dfunction(t,n,r,u){var c\u003dString(o(t)),a\u003dc.length,f\u003dvoid 0\u003d\u003d\u003dr?\" \":String(r),s\u003de(n);if(s\u003c\u003da||\"\"\u003d\u003df)return c;var l\u003ds-a,h\u003di.call(f,Math.ceil(l/f.length));return h.length\u003el\u0026\u0026(h\u003dh.slice(0,l)),u?h+c:c+h}},{110:110,118:118,28:28}],110:[function(t,n,r){\"use strict\";var e\u003dt(116),i\u003dt(28);n.exports\u003dfunction repeat(t){var n\u003dString(i(this)),r\u003d\"\",o\u003de(t);if(o\u003c0||o\u003d\u003d1/0)throw RangeError(\"Count can\u0027t be negative\");for(;o\u003e0;(o\u003e\u003e\u003e\u003d1)\u0026\u0026(n+\u003dn))1\u0026o\u0026\u0026(r+\u003dn);return r}},{116:116,28:28}],111:[function(t,n,r){var e\u003dt(33),i\u003dt(28),o\u003dt(35),u\u003dt(112),c\u003d\"[\"+u+\"]\",a\u003d\"​…\",f\u003dRegExp(\"^\"+c+c+\"*\"),s\u003dRegExp(c+c+\"*$\"),l\u003dfunction(t,n,r){var i\u003d{},c\u003do(function(){return!!u[t]()||a[t]()!\u003da}),f\u003di[t]\u003dc?n(h):u[t];r\u0026\u0026(i[r]\u003df),e(e.P+e.F*c,\"String\",i)},h\u003dl.trim\u003dfunction(t,n){return t\u003dString(i(t)),1\u0026n\u0026\u0026(t\u003dt.replace(f,\"\")),2\u0026n\u0026\u0026(t\u003dt.replace(s,\"\")),t};n.exports\u003dl},{112:112,28:28,33:33,35:35}],112:[function(t,n,r){n.exports\u003d\"\\t\\n\\v\\f\\r   ᠎              \\u2028\\u2029\\ufeff\"},{}],113:[function(t,n,r){var e,i,o,u\u003dt(25),c\u003dt(46),a\u003dt(43),f\u003dt(30),s\u003dt(40),l\u003ds.process,h\u003ds.setImmediate,v\u003ds.clearImmediate,p\u003ds.MessageChannel,d\u003ds.Dispatch,y\u003d0,g\u003d{},m\u003dfunction(){var t\u003d+this;if(g.hasOwnProperty(t)){var n\u003dg[t];delete g[t],n()}},b\u003dfunction(t){m.call(t.data)};h\u0026\u0026v||(h\u003dfunction setImmediate(t){for(var n\u003d[],r\u003d1;arguments.length\u003er;)n.push(arguments[r++]);return g[++y]\u003dfunction(){c(\"function\"\u003d\u003dtypeof t?t:Function(t),n)},e(y),y},v\u003dfunction clearImmediate(t){delete g[t]},\"process\"\u003d\u003dt(18)(l)?e\u003dfunction(t){l.nextTick(u(m,t,1))}:d\u0026\u0026d.now?e\u003dfunction(t){d.now(u(m,t,1))}:p?(i\u003dnew p,o\u003di.port2,i.port1.onmessage\u003db,e\u003du(o.postMessage,o,1)):s.addEventListener\u0026\u0026\"function\"\u003d\u003dtypeof postMessage\u0026\u0026!s.importScripts?(e\u003dfunction(t){s.postMessage(t+\"\",\"*\")},s.addEventListener(\"message\",b,!1)):e\u003d\"onreadystatechange\"in f(\"script\")?function(t){a.appendChild(f(\"script\")).onreadystatechange\u003dfunction(){a.removeChild(this),m.call(t)}}:function(t){setTimeout(u(m,t,1),0)}),n.exports\u003d{set:h,clear:v}},{18:18,25:25,30:30,40:40,43:43,46:46}],114:[function(t,n,r){var e\u003dt(116),i\u003dMath.max,o\u003dMath.min;n.exports\u003dfunction(t,n){return t\u003de(t),t\u003c0?i(t+n,0):o(t,n)}},{116:116}],115:[function(t,n,r){var e\u003dt(116),i\u003dt(118);n.exports\u003dfunction(t){if(void 0\u003d\u003d\u003dt)return 0;var n\u003de(t),r\u003di(n);if(n!\u003d\u003dr)throw RangeError(\"Wrong length!\");return r}},{116:116,118:118}],116:[function(t,n,r){var e\u003dMath.ceil,i\u003dMath.floor;n.exports\u003dfunction(t){return isNaN(t\u003d+t)?0:(t\u003e0?i:e)(t)}},{}],117:[function(t,n,r){var e\u003dt(47),i\u003dt(28);n.exports\u003dfunction(t){return e(i(t))}},{28:28,47:47}],118:[function(t,n,r){var e\u003dt(116),i\u003dMath.min;n.exports\u003dfunction(t){return t\u003e0?i(e(t),9007199254740991):0}},{116:116}],"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"119:[function(t,n,r){var e\u003dt(28);n.exports\u003dfunction(t){return Object(e(t))}},{28:28}],120:[function(t,n,r){var e\u003dt(51);n.exports\u003dfunction(t,n){if(!e(t))return t;var r,i;if(n\u0026\u0026\"function\"\u003d\u003dtypeof(r\u003dt.toString)\u0026\u0026!e(i\u003dr.call(t)))return i;if(\"function\"\u003d\u003dtypeof(r\u003dt.valueOf)\u0026\u0026!e(i\u003dr.call(t)))return i;if(!n\u0026\u0026\"function\"\u003d\u003dtypeof(r\u003dt.toString)\u0026\u0026!e(i\u003dr.call(t)))return i;throw TypeError(\"Can\u0027t convert object to primitive value\")}},{51:51}],121:[function(t,n,r){\"use strict\";if(t(29)){var e\u003dt(60),i\u003dt(40),o\u003dt(35),u\u003dt(33),c\u003dt(123),a\u003dt(122),f\u003dt(25),s\u003dt(6),l\u003dt(92),h\u003dt(42),v\u003dt(93),p\u003dt(116),d\u003dt(118),y\u003dt(115),g\u003dt(114),m\u003dt(120),b\u003dt(41),x\u003dt(17),S\u003dt(51),w\u003dt(119),_\u003dt(48),E\u003dt(71),O\u003dt(79),P\u003dt(77).f,M\u003dt(129),F\u003dt(124),I\u003dt(128),A\u003dt(12),k\u003dt(11),N\u003dt(104),j\u003dt(141),T\u003dt(58),R\u003dt(56),L\u003dt(100),G\u003dt(9),D\u003dt(8),C\u003dt(72),W\u003dt(75),U\u003dC.f,B\u003dW.f,V\u003di.RangeError,z\u003di.TypeError,q\u003di.Uint8Array,K\u003dArray.prototype,Y\u003da.ArrayBuffer,J\u003da.DataView,H\u003dA(0),X\u003dA(2),$\u003dA(3),Z\u003dA(4),Q\u003dA(5),tt\u003dA(6),nt\u003dk(!0),rt\u003dk(!1),et\u003dj.values,it\u003dj.keys,ot\u003dj.entries,ut\u003dK.lastIndexOf,ct\u003dK.reduce,at\u003dK.reduceRight,ft\u003dK.join,st\u003dK.sort,lt\u003dK.slice,ht\u003dK.toString,vt\u003dK.toLocaleString,pt\u003dI(\"iterator\"),dt\u003dI(\"toStringTag\"),yt\u003dF(\"typed_constructor\"),gt\u003dF(\"def_constructor\"),mt\u003dc.CONSTR,bt\u003dc.TYPED,xt\u003dc.VIEW,St\u003dA(1,function(t,n){return Pt(N(t,t[gt]),n)}),wt\u003do(function(){return 1\u003d\u003d\u003dnew q(new Uint16Array([1]).buffer)[0]}),_t\u003d!!q\u0026\u0026!!q.prototype.set\u0026\u0026o(function(){new q(1).set({})}),Et\u003dfunction(t,n){var r\u003dp(t);if(r\u003c0||r%n)throw V(\"Wrong offset!\");return r},Ot\u003dfunction(t){if(S(t)\u0026\u0026bt in t)return t;throw z(t+\" is not a typed array!\")},Pt\u003dfunction(t,n){if(!(S(t)\u0026\u0026yt in t))throw z(\"It is not a typed array constructor!\");return new t(n)},Mt\u003dfunction(t,n){return Ft(N(t,t[gt]),n)},Ft\u003dfunction(t,n){for(var r\u003d0,e\u003dn.length,i\u003dPt(t,e);e\u003er;)i[r]\u003dn[r++];return i},It\u003dfunction(t,n,r){U(t,n,{get:function(){return this._d[r]}})},At\u003dfunction from(t){var n,r,e,i,o,u,c\u003dw(t),a\u003darguments.length,s\u003da\u003e1?arguments[1]:void 0,l\u003dvoid 0!\u003d\u003ds,h\u003dM(c);if(void 0!\u003dh\u0026\u0026!_(h)){for(u\u003dh.call(c),e\u003d[],n\u003d0;!(o\u003du.next()).done;n++)e.push(o.value);c\u003de}for(l\u0026\u0026a\u003e2\u0026\u0026(s\u003df(s,arguments[2],2)),n\u003d0,r\u003dd(c.length),i\u003dPt(this,r);r\u003en;n++)i[n]\u003dl?s(c[n],n):c[n];return i},kt\u003dfunction of(){for(var t\u003d0,n\u003darguments.length,r\u003dPt(this,n);n\u003et;)r[t]\u003darguments[t++];return r},Nt\u003d!!q\u0026\u0026o(function(){vt.call(new q(1))}),jt\u003dfunction toLocaleString(){return vt.apply(Nt?lt.call(Ot(this)):Ot(this),arguments)},Tt\u003d{copyWithin:function copyWithin(t,n){return D.call(Ot(this),t,n,arguments.length\u003e2?arguments[2]:void 0)},every:function every(t){return Z(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},fill:function fill(t){return G.apply(Ot(this),arguments)},filter:function filter(t){return Mt(this,X(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0))},find:function find(t){return Q(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},findIndex:function findIndex(t){return tt(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},forEach:function forEach(t){H(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},indexOf:function indexOf(t){return rt(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},includes:function includes(t){return nt(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},join:function join(t){return ft.apply(Ot(this),arguments)},lastIndexOf:function lastIndexOf(t){return ut.apply(Ot(this),arguments)},map:function map(t){return St(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},reduce:function reduce(t){return ct.apply(Ot(this),arguments)},reduceRight:function reduceRight(t){return at.apply(Ot(this),arguments)},reverse:function reverse(){for(var t,n\u003dthis,r\u003dOt(n).length,e\u003dMath.floor(r/2),i\u003d0;i\u003ce;)t\u003dn[i],n[i++]\u003dn[--r],n[r]\u003dt;return n},some:function some(t){return $(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},sort:function sort(t){return st.call(Ot(this),t)},subarray:function subarray(t,n){var r\u003dOt(this),e\u003dr.length,i\u003dg(t,e);return new(N(r,r[gt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,d((void 0\u003d\u003d\u003dn?e:g(n,e))-i))}},Rt\u003dfunction slice(t,n){return Mt(this,lt.call(Ot(this),t,n))},Lt\u003dfunction set(t){Ot(this);var n\u003dEt(arguments[1],1),r\u003dthis.length,e\u003dw(t),i\u003dd(e.length),o\u003d0;if(i+n\u003er)throw V(\"Wrong length!\");for(;o\u003ci;)this[n+o]\u003de[o++]},Gt\u003d{entries:function entries(){return ot.call(Ot(this))},keys:function keys(){return it.call(Ot(this))},values:function values(){return et.call(Ot(this))}},Dt\u003dfunction(t,n){return S(t)\u0026\u0026t[bt]\u0026\u0026\"symbol\"!\u003dtypeof n\u0026\u0026n in t\u0026\u0026String(+n)\u003d\u003dString(n)},Ct\u003dfunction getOwnPropertyDescriptor(t,n){return Dt(t,n\u003dm(n,!0))?l(2,t[n]):B(t,n)},Wt\u003dfunction defineProperty(t,n,r){return!(Dt(t,n\u003dm(n,!0))\u0026\u0026S(r)\u0026\u0026b(r,\"value\"))||b(r,\"get\")||b(r,\"set\")||r.configurable||b(r,\"writable\")\u0026\u0026!r.writable||b(r,\"enumerable\")\u0026\u0026!r.enumerable?U(t,n,r):(t[n]\u003dr.value,t)};mt||(W.f\u003dCt,C.f\u003dWt),u(u.S+u.F*!mt,\"Object\",{getOwnPropertyDescriptor:Ct,defineProperty:Wt}),o(function(){ht.call({})})\u0026\u0026(ht\u003dvt\u003dfunction toString(){return ft.call(this)});var Ut\u003dv({},Tt);v(Ut,Gt),h(Ut,pt,Gt.values),v(Ut,{slice:Rt,set:Lt,constructor:function(){},toString:ht,toLocaleString:jt}),It(Ut,\"buffer\",\"b\"),It(Ut,\"byteOffset\",\"o\"),It(Ut,\"byteLength\",\"l\"),It(Ut,\"length\",\"e\"),U(Ut,dt,{get:function(){return this[bt]}}),n.exports\u003dfunction(t,n,r,a){a\u003d!!a;var f\u003dt+(a?\"Clamped\":\"\")+\"Array\",l\u003d\"get\"+t,v\u003d\"set\"+t,p\u003di[f],g\u003dp||{},m\u003dp\u0026\u0026O(p),b\u003d!p||!c.ABV,w\u003d{},_\u003dp\u0026\u0026p.prototype,M\u003dfunction(t,r){var e\u003dt._d;return e.v[l](r*n+e.o,wt)},F\u003dfunction(t,r,e){var i\u003dt._d;a\u0026\u0026(e\u003d(e\u003dMath.round(e))\u003c0?0:e\u003e255?255:255\u0026e),i.v[v](r*n+i.o,e,wt)},I\u003dfunction(t,n){U(t,n,{get:function(){return M(this,n)},set:function(t){return F(this,n,t)},enumerable:!0})};b?(p\u003dr(function(t,r,e,i){s(t,p,f,\"_d\");var o,u,c,a,l\u003d0,v\u003d0;if(S(r)){if(!(r instanceof Y||\"ArrayBuffer\"\u003d\u003d(a\u003dx(r))||\"SharedArrayBuffer\"\u003d\u003da))return bt in r?Ft(p,r):At.call(p,r);o\u003dr,v\u003dEt(e,n);var g\u003dr.byteLength;if(void 0\u003d\u003d\u003di){if(g%n)throw V(\"Wrong length!\");if((u\u003dg-v)\u003c0)throw V(\"Wrong length!\")}else if((u\u003dd(i)*n)+v\u003eg)throw V(\"Wrong length!\");c\u003du/n}else c\u003dy(r),u\u003dc*n,o\u003dnew Y(u);for(h(t,\"_d\",{b:o,o:v,l:u,e:c,v:new J(o)});l\u003cc;)I(t,l++)}),_\u003dp.prototype\u003dE(Ut),h(_,\"constructor\",p)):o(function(){p(1)})\u0026\u0026o(function(){new p(-1)})\u0026\u0026R(function(t){new p,new p(null),new p(1.5),new p(t)},!0)||(p\u003dr(function(t,r,e,i){s(t,p,f);var o;return S(r)?r instanceof Y||\"ArrayBuffer\"\u003d\u003d(o\u003dx(r))||\"SharedArrayBuffer\"\u003d\u003do?void 0!\u003d\u003di?new g(r,Et(e,n),i):void 0!\u003d\u003de?new g(r,Et(e,n)):new g(r):bt in r?Ft(p,r):At.call(p,r):new g(y(r))}),H(m!\u003d\u003dFunction.prototype?P(g).concat(P(m)):P(g),function(t){t in p||h(p,t,g[t])}),p.prototype\u003d_,e||(_.constructor\u003dp));var A\u003d_[pt],k\u003d!!A\u0026\u0026(\"values\"\u003d\u003dA.name||void 0\u003d\u003dA.name),N\u003dGt.values;h(p,yt,!0),h(_,bt,f),h(_,xt,!0),h(_,gt,p),(a?new p(1)[dt]\u003d\u003df:dt in _)||U(_,dt,{get:function(){return f}}),w[f]\u003dp,u(u.G+u.W+u.F*(p!\u003dg),w),u(u.S,f,{BYTES_PER_ELEMENT:n}),u(u.S+u.F*o(function(){g.of.call(p,1)}),f,{from:At,of:kt}),\"BYTES_PER_ELEMENT\"in _||h(_,\"BYTES_PER_ELEMENT\",n),u(u.P,f,Tt),L(f),u(u.P+u.F*_t,f,{set:Lt}),u(u.P+u.F*!k,f,Gt),e||_.toString\u003d\u003dht||(_.toString\u003dht),u(u.P+u.F*o(function(){new p(1).slice()}),f,{slice:Rt}),u(u.P+u.F*(o(function(){return[1,2].toLocaleString()!\u003dnew p([1,2]).toLocaleString()})||!o(function(){_.toLocaleString.call([1,2])})),f,{toLocaleString:jt}),T[f]\u003dk?A:N,e||k||h(_,pt,N)}}else n.exports\u003dfunction(){}},{100:100,104:104,11:11,114:114,115:115,116:116,118:118,119:119,12:12,120:120,122:122,123:123,124:124,128:128,129:129,141:141,17:17,25:25,29:29,33:33,35:35,40:40,41:41,42:42,48:48,51:51,56:56,58:58,6:6,60:60,71:71,72:72,75:75,77:77,79:79,8:8,9:9,92:92,93:93}],122:[function(t,n,r){\"use strict\";function packIEEE754(t,n,r){var e,i,o,u\u003dArray(r),c\u003d8*r-n-1,a\u003d(1\u003c\u003cc)-1,f\u003da\u003e\u003e1,s\u003d23\u003d\u003d\u003dn?M(2,-24)-M(2,-77):0,l\u003d0,h\u003dt\u003c0||0\u003d\u003d\u003dt\u0026\u00261/t\u003c0?1:0;for(t\u003dP(t),t!\u003dt||t\u003d\u003d\u003dE?(i\u003dt!\u003dt?1:0,e\u003da):(e\u003dF(I(t)/A),t*(o\u003dM(2,-e))\u003c1\u0026\u0026(e--,o*\u003d2),t+\u003de+f\u003e\u003d1?s/o:s*M(2,1-f),t*o\u003e\u003d2\u0026\u0026(e++,o/\u003d2),e+f\u003e\u003da?(i\u003d0,e\u003da):e+f\u003e\u003d1?(i\u003d(t*o-1)*M(2,n),e+\u003df):(i\u003dt*M(2,f-1)*M(2,n),e\u003d0));n\u003e\u003d8;u[l++]\u003d255\u0026i,i/\u003d256,n-\u003d8);for(e\u003de\u003c\u003cn|i,c+\u003dn;c\u003e0;u[l++]\u003d255\u0026e,e/\u003d256,c-\u003d8);return u[--l]|\u003d128*h,u}function unpackIEEE754(t,n,r){var e,i\u003d8*r-n-1,o\u003d(1\u003c\u003ci)-1,u\u003do\u003e\u003e1,c\u003di-7,a\u003dr-1,f\u003dt[a--],s\u003d127\u0026f;for(f\u003e\u003e\u003d7;c\u003e0;s\u003d256*s+t[a],a--,c-\u003d8);for(e\u003ds\u0026(1\u003c\u003c-c)-1,s\u003e\u003e\u003d-c,c+\u003dn;c\u003e0;e\u003d256*e+t[a],a--,c-\u003d8);if(0\u003d\u003d\u003ds)s\u003d1-u;else{if(s\u003d\u003d\u003do)return e?NaN:f?-E:E;e+\u003dM(2,n),s-\u003du}return(f?-1:1)*e*M(2,s-n)}function unpackI32(t){return t[3]\u003c\u003c24|t[2]\u003c\u003c16|t[1]\u003c\u003c8|t[0]}function packI8(t){return[255\u0026t]}function packI16(t){return[255\u0026t,t\u003e\u003e8\u0026255]}function packI32(t){return[255\u0026t,t\u003e\u003e8\u0026255,t\u003e\u003e16\u0026255,t\u003e\u003e24\u0026255]}function packF64(t){return packIEEE754(t,52,8)}function packF32(t){return packIEEE754(t,23,4)}function addGetter(t,n,r){d(t[m],n,{get:function(){return this[r]}})}function get(t,n,r,e){var i\u003d+r,o\u003dv(i);if(o+n\u003et[N])throw _(b);var u\u003dt[k]._b,c\u003do+t[j],a\u003du.slice(c,c+n);return e?a:a.reverse()}function set(t,n,r,e,i,o){var u\u003d+r,c\u003dv(u);if(c+n\u003et[N])throw _(b);for(var a\u003dt[k]._b,f\u003dc+t[j],s\u003de(+i),l\u003d0;l\u003cn;l++)a[f+l]\u003ds[o?l:n-l-1]}var e\u003dt(40),i\u003dt(29),o\u003dt(60),u\u003dt(123),c\u003dt(42),a\u003dt(93),f\u003dt(35),s\u003dt(6),l\u003dt(116),h\u003dt(118),v\u003dt(115),p\u003dt(77).f,d\u003dt(72).f,y\u003dt(9),g\u003dt(101),m\u003d\"prototype\",b\u003d\"Wrong index!\",x\u003de.ArrayBuffer,S\u003de.DataView,w\u003de.Math,_\u003de.RangeError,E\u003de.Infinity,O\u003dx,P\u003dw.abs,M\u003dw.pow,F\u003dw.floor,I\u003dw.log,A\u003dw.LN2,k\u003di?\"_b\":\"buffer\",N\u003di?\"_l\":\"byteLength\",j\u003di?\"_o\":\"byteOffset\";if(u.ABV){if(!f(function(){x(1)})||!f(function(){new x(-1)})||f(function(){return new x,new x(1.5),new x(NaN),\"ArrayBuffer\"!\u003dx.name})){x\u003dfunction ArrayBuffer(t){return s(this,x),new O(v(t))};for(var T,R\u003dx[m]\u003dO[m],L\u003dp(O),G\u003d0;L.length\u003eG;)(T\u003dL[G++])in x||c(x,T,O[T]);o||(R.constructor\u003dx)}var D\u003dnew S(new x(2)),C\u003dS[m].setInt8;D.setInt8(0,2147483648),D.setInt8(1,2147483649),!D.getInt8(0)\u0026\u0026D.getInt8(1)||a(S[m],{setInt8:function setInt8(t,n){C.call(this,t,n\u003c\u003c24\u003e\u003e24)},setUint8:function setUint8(t,n){C.call(this,t,n\u003c\u003c24\u003e\u003e24)}},!0)}else x\u003dfunction ArrayBuffer(t){s(this,x,\"ArrayBuffer\");var n\u003dv(t);this._b\u003dy.call(Array(n),0),this[N]\u003dn},S\u003dfunction DataView(t,n,r){s(this,S,\"DataView\"),s(t,x,\"DataView\");var e\u003dt[N],i\u003dl(n);if(i\u003c0||i\u003ee)throw _(\"Wrong offset!\");if(r\u003dvoid 0\u003d\u003d\u003dr?e-i:h(r),i+r\u003ee)throw _(\"Wrong length!\");this[k]\u003dt,this[j]\u003di,this[N]\u003dr},i\u0026\u0026(addGetter(x,\"byteLength\",\"_l\"),addGetter(S,\"buffer\",\"_b\"),addGetter(S,\"byteLength\",\"_l\"),addGetter(S,\"byteOffset\",\"_o\")),a(S[m],{getInt8:function getInt8(t){return get(this,1,t)[0]\u003c\u003c24\u003e\u003e24},getUint8:function getUint8(t){return get(this,1,t)[0]},getInt16:function getInt16(t){var n\u003dget(this,2,t,arguments[1]);return(n[1]\u003c\u003c8|n[0])\u003c\u003c16\u003e\u003e16},getUint16:function getUint16(t){var n\u003dget(this,2,t,arguments[1]);return n[1]\u003c\u003c8|n[0]},getInt32:function getInt32(t){return unpackI32(get(this,4,t,arguments[1]))},getUint32:function getUint32(t){return unpackI32(get(this,4,t,arguments[1]))\u003e\u003e\u003e0},getFloat32:function getFloat32(t){return unpackIEEE754(get(this,4,t,arguments[1]),23,4)},getFloat64:function getFloat64(t){return unpackIEEE754(get(this,8,t,arguments[1]),52,8)},setInt8:function setInt8(t,n){set(this,1,t,packI8,n)},setUint8:function setUint8(t,n){set(this,1,t,packI8,n)},setInt16:function setInt16(t,n){set(this,2,t,packI16,n,arguments[2])},setUint16:function setUint16(t,n){set(this,2,t,packI16,n,arguments[2])},setInt32:function setInt32(t,n){set(this,4,t,packI32,n,arguments[2])},setUint32:function setUint32(t,n){set(this,4,t,packI32,n,arguments[2])},setFloat32:function setFloat32(t,n){set(this,4,t,packF32,n,arguments[2])},setFloat64:function setFloat64(t,n){set(this,8,t,packF64,n,arguments[2])}});g(x,\"ArrayBuffer\"),g(S,\"DataView\"),c(S[m],u.VIEW,!0),r.ArrayBuffer\u003dx,r.DataView\u003dS},{101:101,115:115,116:116,118:118,123:123,29:29,35:35,40:40,42:42,6:6,60:60,72:72,77:77,9:9,93:93}],123:[function(t,n,r){for(var e,i\u003dt(40),o\u003dt(42),u\u003dt(124),c\u003du(\"typed_array\"),a\u003du(\"view\"),f\u003d!(!i.ArrayBuffer||!i.DataView),s\u003df,l\u003d0,h\u003d\"Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array\".split(\",\");l\u003c9;)(e\u003di[h[l++]])?(o(e.prototype,c,!0),o(e.prototype,a,!0)):s\u003d!1;n.exports\u003d{ABV:f,CONSTR:s,TYPED:c,VIEW:a}},{124:124,40:40,42:42}],124:[function(t,n,r){var e\u003d0,i\u003dMath.random();n.exports\u003dfunction(t){return\"Symbol(\".concat(void 0\u003d\u003d\u003dt?\"\":t,\")_\",(++e+i).toString(36))}},{}],125:[function(t,n,r){var e\u003dt(51);n.exports\u003dfunction(t,n){if(!e(t)||t._t!\u003d\u003dn)throw TypeError(\"Incompatible receiver, \"+n+\" required!\");return t}},{51:51}],126:[function(t,n,r){var e\u003dt(40),i\u003dt(23),o\u003dt(60),u\u003dt(127),c\u003dt(72).f;n.exports\u003dfunction(t){var n\u003di.Symbol||(i.Symbol\u003do?{}:e.Symbol||{});\"_\"\u003d\u003dt.charAt(0)||t in n||c(n,t,{value:u.f(t)})}},{127:127,23:23,40:40,60:60,72:72}],127:[function(t,n,r){r.f\u003dt(128)},{128:128}],128:[function(t,n,r){var e\u003dt(103)(\"wks\"),i\u003dt(124),o\u003dt(40).Symbol,u\u003d\"function\"\u003d\u003dtypeof o;(n.exports\u003dfunction(t){return e[t]||(e[t]\u003du\u0026\u0026o[t]||(u?o:i)(\"Symbol.\"+t))}).store\u003de},{103:103,124:124,40:40}],129:[function(t,n,r){var e\u003dt(17),i\u003dt(128)(\"iterator\"),o\u003dt(58);n.exports\u003dt(23).getIteratorMethod\u003dfunction(t){if(void 0!\u003dt)return t[i]||t[\"@@iterator\"]||o[e(t)]}},{128:128,17:17,23:23,58:58}],130:[function(t,n,r){var e\u003dt(33),i\u003dt(95)(/[\\\\^$*+?.()|[\\]{}]/g,\"\\\\$\u0026\");e(e.S,\"RegExp\",{escape:function escape(t){return i(t)}})},{33:33,95:95}],131:[function(t,n,r){var e\u003dt(33);e(e.P,\"Array\",{copyWithin:t(8)}),t(5)(\"copyWithin\")},{33:33,5:5,8:8}],132:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(4);e(e.P+e.F*!t(105)([].every,!0),\"Array\",{every:function every(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],133:[function(t,n,r){var e\u003dt(33);e(e.P,\"Array\",{fill:t(9)}),t(5)(\"fill\")},{33:33,5:5,9:9}],134:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(2);e(e.P+e.F*!t(105)([].filter,!0),\"Array\",{filter:function filter(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],135:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(6),o\u003d\"findIndex\",u\u003d!0;o in[]\u0026\u0026Array(1)[o](function(){u\u003d!1}),e(e.P+e.F*u,\"Array\",{findIndex:function findIndex(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0)}}),t(5)(o)},{12:12,33:33,5:5}],136:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(5),o\u003d!0;\"find\"in[]\u0026\u0026Array(1).find(function(){o\u003d!1}),e(e.P+e.F*o,\"Array\",{find:function find(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0)}}),t(5)(\"find\")},{12:12,33:33,5:5}],137:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(0),o\u003dt(105)([].forEach,!0);e(e.P+e.F*!o,\"Array\",{forEach:function forEach(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],138:[function(t,n,r){\"use strict\";var e\u003dt(25),i\u003dt(33),o\u003dt(119),u\u003dt(53),c\u003dt(48),a\u003dt(118),f\u003dt(24),s\u003dt(129);i(i.S+i.F*!t(56)(function(t){Array.from(t)}),\"Array\",{from:function from(t){var n,r,i,l,h\u003do(t),v\u003d\"function\"\u003d\u003dtypeof this?this:Array,p\u003darguments.length,d\u003dp\u003e1?arguments[1]:void 0,y\u003dvoid 0!\u003d\u003dd,g\u003d0,m\u003ds(h);if(y\u0026\u0026(d\u003de(d,p\u003e2?arguments[2]:void 0,2)),void 0\u003d\u003dm||v\u003d\u003dArray\u0026\u0026c(m))for(n\u003da(h.length),r\u003dnew v(n);n\u003eg;g++)f(r,g,y?d(h[g],g):h[g]);else for(l\u003dm.call(h),r\u003dnew v;!(i\u003dl.next()).done;g++)f(r,g,y?u(l,d,[i.value,g],!0):i.value);return r.length\u003dg,r}})},{118:118,119:119,129:129,24:24,25:25,33:33,48:48,53:53,56:56}],139:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(11)(!1),o\u003d[].indexOf,u\u003d!!o\u0026\u00261/[1].indexOf(1,-0)\u003c0;e(e.P+e.F*(u||!t(105)(o)),\"Array\",{indexOf:function indexOf(t){return u?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},{105:105,11:11,33:33}],140:[function(t,n,r){var e\u003dt(33);e(e.S,\"Array\",{isArray:t(49)})},{33:33,49:49}],141:[function(t,n,r){\"use strict\";var e\u003dt(5),i\u003dt(57),o\u003dt(58),u\u003dt(117);n.exports\u003dt(55)(Array,\"Array\",function(t,n){this._t\u003du(t),this._i\u003d0,this._k\u003dn},function(){var t\u003dthis._t,n\u003dthis._k,r\u003dthis._i++;return!t||r\u003e\u003dt.length?(this._t\u003dvoid 0,i(1)):\"keys\"\u003d\u003dn?i(0,r):\"values\"\u003d\u003dn?i(0,t[r]):i(0,[r,t[r]])},\"values\"),o.Arguments\u003do.Array,e(\"keys\"),e(\"values\"),e(\"entries\")},{117:117,5:5,55:55,57:57,58:58}],142:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(117),o\u003d[].join;e(e.P+e.F*(t(47)!\u003dObject||!t(105)(o)),\"Array\",{join:function join(t){return o.call(i(this),void 0\u003d\u003d\u003dt?\",\":t)}})},{105:105,117:117,33:33,47:47}],143:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(117),o\u003dt(116),u\u003dt(118),c\u003d[].lastIndexOf,a\u003d!!c\u0026\u00261/[1].lastIndexOf(1,-0)\u003c0;e(e.P+e.F*(a||!t(105)(c)),\"Array\",{lastIndexOf:function lastIndexOf(t){if(a)return c.apply(this,arguments)||0;var n\u003di(this),r\u003du(n.length),e\u003dr-1;for(arguments.length\u003e1\u0026\u0026(e\u003dMath.min(e,o(arguments[1]))),e\u003c0\u0026\u0026(e\u003dr+e);e\u003e\u003d0;e--)if(e in n\u0026\u0026n[e]\u003d\u003d\u003dt)return e||0;return-1}})},{105:105,116:116,117:117,118:118,33:33}],144:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(1);e(e.P+e.F*!t(105)([].map,!0),\"Array\",{map:function map(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],145:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(24);e(e.S+e.F*t(35)(function(){function F(){}return!(Array.of.call(F)instanceof F)}),\"Array\",{of:function of(){for(var t\u003d0,n\u003darguments.length,r\u003dnew(\"function\"\u003d\u003dtypeof this?this:Array)(n);n\u003et;)i(r,t,arguments[t++]);return r.length\u003dn,r}})},{24:24,33:33,35:35}],146:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(13);e(e.P+e.F*!t(105)([].reduceRight,!0),\"Array\",{reduceRight:function reduceRight(t){return i(this,t,arguments.length,arguments[1],!0)}})},{105:105,13:13,33:33}],147:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(13);e(e.P+e.F*!t(105)([].reduce,!0),\"Array\",{reduce:function reduce(t){return i(this,t,arguments.length,arguments[1],!1)}})},{105:105,13:13,33:33}],148:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(43),o\u003dt(18),u\u003dt(114),c\u003dt(118),a\u003d[].slice;e(e.P+e.F*t(35)(function(){i\u0026\u0026a.call(i)}),\"Array\",{slice:function slice(t,n){var r\u003dc(this.length),e\u003do(this);if(n\u003dvoid 0\u003d\u003d\u003dn?r:n,\"Array\"\u003d\u003de)return a.call(this,t,n);for(var i\u003du(t,r),f\u003du(n,r),s\u003dc(f-i),l\u003dArray(s),h\u003d0;h\u003cs;h++)l[h]\u003d\"String\"\u003d\u003de?this.charAt(i+h):this[i+h];return l}})},{114:114,118:118,18:18,33:33,35:35,43:43}],149:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(3);e(e.P+e.F*!t(105)([].some,!0),\"Array\",{some:function some(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],150:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(3),o\u003dt(119),u\u003dt(35),c\u003d[].sort,a\u003d[1,2,3];e(e.P+e.F*(u(function(){a.sort(void 0)})||!u(function(){a.sort(null)})||!t(105)(c)),\"Array\",{sort:function sort(t){return void 0\u003d\u003d\u003dt?c.call(o(this)):c.call(o(this),i(t))}})},{105:105,119:119,3:3,33:33,35:35}],151:[function(t,n,r){t(100)(\"Array\")},{100:100}],152:[function(t,n,r){var e\u003dt(33);e(e.S,\"Date\",{now:function(){return(new Date).getTime()}})},{33:33}],153:[function(t,n,r){var e\u003dt(33),i\u003dt(26);e(e.P+e.F*(Date.prototype.toISOString!\u003d\u003di),\"Date\",{toISOString:i})},{26:26,33:33}],154:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(120);e(e.P+e.F*t(35)(function(){return null!\u003d\u003dnew Date(NaN).toJSON()||1!\u003d\u003dDate.prototype.toJSON.call({toISOString:function(){return 1}})}),\"Date\",{toJSON:function toJSON(t){var n\u003di(this),r\u003do(n);return\"number\"!\u003dtypeof r||isFinite(r)?n.toISOString():null}})},{119:119,120:120,33:33,35:35}],155:[function(t,n,r){var e\u003dt(128)(\"toPrimitive\"),i\u003dDate.prototype;e in i||t(42)(i,e,t(27))},{128:128,27:27,42:42}],156:[function(t,n,r){var e\u003dDate.prototype,i\u003de.toString,o\u003de.getTime;new Date(NaN)+\"\"!\u003d\"Invalid Date\"\u0026\u0026t(94)(e,\"toString\",function toString(){var t\u003do.call(this);return t\u003d\u003d\u003dt?i.call(this):\"Invalid Date\"})},{94:94}],157:[function(t,n,r){var e\u003dt(33);e(e.P,\"Function\",{bind:t(16)})},{16:16,33:33}],158:[function(t,n,r){\"use strict\";var e\u003dt(51),i\u003dt(79),o\u003dt(128)(\"hasInstance\"),u\u003dFunction.prototype;o in u||t(72).f(u,o,{value:function(t){if(\"function\"!\u003dtypeof this||!e(t))return!1;if(!e(this.prototype))return t instanceof this;for(;t\u003di(t);)if(this.prototype\u003d\u003d\u003dt)return!0;return!1}})},{128:128,51:51,72:72,79:79}],159:[function(t,n,r){var e\u003dt(72).f,i\u003dFunction.prototype,o\u003d/^\\s*function ([^ (]*)/;\"name\"in i||t(29)\u0026\u0026e(i,\"name\",{configurable:!0,get:function(){try{return(\"\"+this).match(o)[1]}catch(t){return\"\"}}})},{29:29,72:72}],160:[function(t,n,r){\"use strict\";var e\u003dt(19),i\u003dt(125);n.exports\u003dt(22)(\"Map\",function(t){return function Map(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},{get:function get(t){var n\u003de.getEntry(i(this,\"Map\"),t);return n\u0026\u0026n.v},set:function set(t,n){return e.def(i(this,\"Map\"),0\u003d\u003d\u003dt?0:t,n)}},e,!0)},{125:125,19:19,22:22}],161:[function(t,n,r){var e\u003dt(33),i\u003dt(63),o\u003dMath.sqrt,u\u003dMath.acosh;e(e.S+e.F*!(u\u0026\u0026710\u003d\u003dMath.floor(u(Number.MAX_VALUE))\u0026\u0026u(1/0)\u003d\u003d1/0),\"Math\",{acosh:function acosh(t){return(t\u003d+t)\u003c1?NaN:t\u003e94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},{33:33,63:63}],162:[function(t,n,r){function asinh(t){return isFinite(t\u003d+t)\u0026\u00260!\u003dt?t\u003c0?-asinh(-t):Math.log(t+Math.sqrt(t*t+1)):t}var e\u003dt(33),i\u003dMath.asinh;e(e.S+e.F*!(i\u0026\u00261/i(0)\u003e0),\"Math\",{asinh:asinh})},{33:33}],163:[function(t,n,r){var e\u003dt(33),i\u003dMath.atanh;e(e.S+e.F*!(i\u0026\u00261/i(-0)\u003c0),\"Math\",{atanh:function atanh(t){return 0\u003d\u003d(t\u003d+t)?t:Math.log((1+t)/(1-t))/2}})},{33:33}],164:[function(t,n,r){var e\u003dt(33),i\u003dt(65);e(e.S,\"Math\",{cbrt:function cbrt(t){return i(t\u003d+t)*Math.pow(Math.abs(t),1/3)}})},{33:33,65:65}],165:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{clz32:function clz32(t){return(t\u003e\u003e\u003e\u003d0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{33:33}],166:[function(t,n,r){var e\u003dt(33),i\u003dMath.exp;e(e.S,\"Math\",{cosh:function cosh(t){return(i(t\u003d+t)+i(-t))/2}})},{33:33}],167:[function(t,n,r){var e\u003dt(33),i\u003dt(61);e(e.S+e.F*(i!\u003dMath.expm1),\"Math\",{expm1:i})},{33:33,61:61}],168:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{fround:t(62)})},{33:33,62:62}],169:[function(t,n,r){var e\u003dt(33),i\u003dMath.abs;e(e.S,\"Math\",{hypot:function hypot(t,n){for(var r,e,o\u003d0,u\u003d0,c\u003darguments.length,a\u003d0;u\u003cc;)r\u003di(arguments[u++]),a\u003cr?(e\u003da/r,o\u003do*e*e+1,a\u003dr):r\u003e0?(e\u003dr/a,o+\u003de*e):o+\u003dr;return a\u003d\u003d\u003d1/0?1/0:a*Math.sqrt(o)}})},{33:33}],170:[function(t,n,r){var e\u003dt(33),i\u003dMath.imul;e(e.S+e.F*t(35)(function(){return-5!\u003di(4294967295,5)||2!\u003di.length}),\"Math\",{imul:function imul(t,n){var r\u003d+t,e\u003d+n,i\u003d65535\u0026r,o\u003d65535\u0026e;return 0|i*o+((65535\u0026r\u003e\u003e\u003e16)*o+i*(65535\u0026e\u003e\u003e\u003e16)\u003c\u003c16\u003e\u003e\u003e0)}})},{33:33,35:35}],171:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{log10:function log10(t){return Math.log(t)*Math.LOG10E}})},{33:33}],172:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{log1p:t(63)})},{33:33,63:63}],173:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{log2:function log2(t){return Math.log(t)/Math.LN2}})},{33:33}],174:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{sign:t(65)})},{33:33,65:65}],175:[function(t,n,r){var e\u003dt(33),i\u003dt(61),o\u003dMath.exp;e(e.S+e.F*t(35)(function(){return-2e-17!\u003d!Math.sinh(-2e-17)}),\"Math\",{sinh:function sinh(t){return Math.abs(t\u003d+t)\u003c1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},{33:33,35:35,61:61}],176:[function(t,n,r){var e\u003dt(33),i\u003dt(61),o\u003dMath.exp;e(e.S,\"Math\",{tanh:function tanh(t){var n\u003di(t\u003d+t),r\u003di(-t);return n\u003d\u003d1/0?1:r\u003d\u003d1/0?-1:(n-r)/(o(t)+o(-t))}})},{33:33,61:61}],177:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{trunc:function trunc(t){return(t\u003e0?Math.floor:Math.ceil)(t)}})},{33:33}],178:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(41),o\u003dt(18),u\u003dt(45),c\u003dt(120),a\u003dt(35),f\u003dt(77).f,s\u003dt(75).f,l\u003dt(72).f,h\u003dt(111).trim,v\u003de.Number,p\u003dv,d\u003dv.prototype,y\u003d\"Number\"\u003d\u003do(t(71)(d)),g\u003d\"trim\"in String.prototype,m\u003dfunction(t){var n\u003dc(t,!1);if(\"string\"\u003d\u003dtypeof n\u0026\u0026n.length\u003e2){n\u003dg?n.trim():h(n,3);var r,e,i,o\u003dn.charCodeAt(0);if(43\u003d\u003d\u003do||45\u003d\u003d\u003do){if(88\u003d\u003d\u003d(r\u003dn.charCodeAt(2))||120\u003d\u003d\u003dr)return NaN}else if(48\u003d\u003d\u003do){switch(n.charCodeAt(1)){case 66:case 98:e\u003d2,i\u003d49;break;case 79:case 111:e\u003d8,i\u003d55;break;default:return+n}for(var u,a\u003dn.slice(2),f\u003d0,s\u003da.length;f\u003cs;f++)if((u\u003da.charCodeAt(f))\u003c48||u\u003ei)return NaN;return parseInt(a,e)}}return+n};if(!v(\" 0o1\")||!v(\"0b1\")||v(\"+0x1\")){v\u003dfunction Number(t){var n\u003darguments.length\u003c1?0:t,r\u003dthis;return r instanceof v\u0026\u0026(y?a(function(){d.valueOf.call(r)}):\"Number\"!\u003do(r))?u(new p(m(n)),r,v):m(n)};for(var b,x\u003dt(29)?f(p):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger\".split(\",\"),S\u003d0;x.length\u003eS;S++)i(p,b\u003dx[S])\u0026\u0026!i(v,b)\u0026\u0026l(v,b,s(p,b));v.prototype\u003dd,d.constructor\u003dv,t(94)(e,\"Number\",v)}},{111:111,120:120,18:18,29:29,35:35,40:40,41:41,45:45,71:71,72:72,75:75,77:77,94:94}],179:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{EPSILON:Math.pow(2,-52)})},{33:33}],180:[function(t,n,r){var e\u003dt(33),i\u003dt(40).isFinite;e(e.S,\"Number\",{isFinite:function isFinite(t){return\"number\"\u003d\u003dtypeof t\u0026\u0026i(t)}})},{33:33,40:40}],181:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{isInteger:t(50)})},{33:33,50:50}],182:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{isNaN:function isNaN(t){return t!\u003dt}})},{33:33}],183:[function(t,n,r){var e\u003dt(33),i\u003dt(50),o\u003dMath.abs;e(e.S,\"Number\",{isSafeInteger:function isSafeInteger(t){return i(t)\u0026\u0026o(t)\u003c\u003d9007199254740991}})},{33:33,50:50}],184:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{MAX_SAFE_INTEGER:9007199254740991})},{33:33}],185:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{MIN_SAFE_INTEGER:-9007199254740991})},{33:33}],186:[function(t,n,r){var e\u003dt(33),i\u003dt(86);e(e.S+e.F*(Number.parseFloat!\u003di),\"Number\",{parseFloat:i})},{33:33,86:86}],187:[function(t,n,r){var e\u003dt(33),i\u003dt(87);e(e.S+e.F*(Number.parseInt!\u003di),\"Number\",{parseInt:i})},{33:33,87:87}],188:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(116),o\u003dt(4),u\u003dt(110),c\u003d1..toFixed,a\u003dMath.floor,f\u003d[0,0,0,0,0,0],s\u003d\"Number.toFixed: incorrect invocation!\",l\u003dfunction(t,n){for(var r\u003d-1,e\u003dn;++r\u003c6;)e+\u003dt*f[r],f[r]\u003de%1e7,e\u003da(e/1e7)},h\u003dfunction(t){for(var n\u003d6,r\u003d0;--n\u003e\u003d0;)r+\u003df[n],f[n]\u003da(r/t),r\u003dr%t*1e7},v\u003dfunction(){for(var t\u003d6,n\u003d\"\";--t\u003e\u003d0;)if(\"\"!\u003d\u003dn||0\u003d\u003d\u003dt||0!\u003d\u003df[t]){var r\u003dString(f[t]);n\u003d\"\"\u003d\u003d\u003dn?r:n+u.call(\"0\",7-r.length)+r}return n},p\u003dfunction(t,n,r){return 0\u003d\u003d\u003dn?r:n%2\u003d\u003d1?p(t,n-1,r*t):p(t*t,n/2,r)},d\u003dfunction(t){for(var n\u003d0,r\u003dt;r\u003e\u003d4096;)n+\u003d12,r/\u003d4096;for(;r\u003e\u003d2;)n+\u003d1,r/\u003d2;return n};e(e.P+e.F*(!!c\u0026\u0026(\"0.000\"!\u003d\u003d8e-5.toFixed(3)||\"1\"!\u003d\u003d.9.toFixed(0)||\"1.25\"!\u003d\u003d1.255.toFixed(2)||\"1000000000000000128\"!\u003d\u003d(0xde0b6b3a7640080).toFixed(0))||!t(35)(function(){c.call({})})),\"Number\",{toFixed:function toFixed(t){var n,r,e,c,a\u003do(this,s),f\u003di(t),y\u003d\"\",g\u003d\"0\";if(f\u003c0||f\u003e20)throw RangeError(s);if(a!\u003da)return\"NaN\";if(a\u003c\u003d-1e21||a\u003e\u003d1e21)return String(a);if(a\u003c0\u0026\u0026(y\u003d\"-\",a\u003d-a),a\u003e1e-21)if(n\u003dd(a*p(2,69,1))-69,r\u003dn\u003c0?a*p(2,-n,1):a/p(2,n,1),r*\u003d4503599627370496,(n\u003d52-n)\u003e0){for(l(0,r),e\u003df;e\u003e\u003d7;)l(1e7,0),e-\u003d7;for(l(p(10,e,1),0),e\u003dn-1;e\u003e\u003d23;)h(1\u003c\u003c23),e-\u003d23;h(1\u003c\u003ce),l(1,1),h(2),g\u003dv()}else l(0,r),l(1\u003c\u003c-n,0),g\u003dv()+u.call(\"0\",f);return f\u003e0?(c\u003dg.length,g\u003dy+(c\u003c\u003df?\"0.\"+u.call(\"0\",f-c)+g:g.slice(0,c-f)+\".\"+g.slice(c-f))):g\u003dy+g,g}})},{110:110,116:116,33:33,35:35,4:4}],189:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(35),o\u003dt(4),u\u003d1..toPrecision;e(e.P+e.F*(i(function(){return\"1\"!\u003d\u003du.call(1,void 0)})||!i(function(){u.call({})})),\"Number\",{toPrecision:function toPrecision(t){var n\u003do(this,\"Number#toPrecision: incorrect invocation!\");return void 0\u003d\u003d\u003dt?u.call(n):u.call(n,t)}})},{33:33,35:35,4:4}],190:[function(t,n,r){var e\u003dt(33);e(e.S+e.F,\"Object\",{assign:t(70)})},{33:33,70:70}],191:[function(t,n,r){var e\u003dt(33);e(e.S,\"Object\",{create:t(71)})},{33:33,71:71}],192:[function(t,n,r){var e\u003dt(33);e(e.S+e.F*!t(29),\"Object\",{defineProperties:t(73)})},{29:29,33:33,73:73}],193:[function(t,n,r){var e\u003dt(33);e(e.S+e.F*!t(29),\"Object\",{defineProperty:t(72).f})},{29:29,33:33,72:72}],194:[function(t,n,r){var e\u003dt(51),i\u003dt(66).onFreeze;t(83)(\"freeze\",function(t){return function freeze(n){return t\u0026\u0026e(n)?t(i(n)):n}})},{51:51,66:66,83:83}],195:[function(t,n,r){var e\u003dt(117),i\u003dt(75).f;t(83)(\"getOwnPropertyDescriptor\",function(){return function getOwnPropertyDescriptor(t,n){return i(e(t),n)}})},{117:117,75:75,83:83}],196:[function(t,n,r){t(83)(\"getOwnPropertyNames\",function(){return t(76).f})},{76:76,83:83}],197:[function(t,n,r){var e\u003dt(119),i\u003dt(79);t(83)(\"getPrototypeOf\",function(){return function getPrototypeOf(t){return i(e(t))}})},{119:119,79:79,83:83}],198:[function(t,n,r){var e\u003dt(51);t(83)(\"isExtensible\",function(t){return function isExtensible(n){return!!e(n)\u0026\u0026(!t||t(n))}})},{51:51,83:83}],199:[function(t,n,r){var e\u003dt(51);t(83)(\"isFrozen\",function(t){return function isFrozen(n){return!e(n)||!!t\u0026\u0026t(n)}})},{51:51,83:83}],200:[function(t,n,r){var e\u003dt(51);t(83)(\"isSealed\",function(t){return function isSealed(n){return!e(n)||!!t\u0026\u0026t(n)}})},{51:51,83:83}],201:[function(t,n,r){var e\u003dt(33);e(e.S,\"Object\",{is:t(96)})},{33:33,96:96}],202:[function(t,n,r){var e\u003dt(119),i\u003dt(81);t(83)(\"keys\",function(){return function keys(t){return i(e(t))}})},{119:119,81:81,83:83}],203:[function(t,n,r){var e\u003dt(51),i\u003dt(66).onFreeze;t(83)(\"preventExtensions\",function(t){return function preventExtensions(n){return t\u0026\u0026e(n)?t(i(n)):n}})},{51:51,66:66,83:83}],204:[function(t,n,r){var e\u003dt(51),i\u003dt(66).onFreeze;t(83)(\"seal\",function(t){return function seal(n){return t\u0026\u0026e(n)?t(i(n)):n}})},{51:51,66:66,83:83}],205:[function(t,n,r){var e\u003dt(33);e(e.S,\"Object\",{setPrototypeOf:t(99).set})},{33:33,99:99}],206:[function(t,n,r){\"use strict\";var e\u003dt(17),i\u003d{};i[t(128)(\"toStringTag\")]\u003d\"z\",i+\"\"!\u003d\"[object z]\"\u0026\u0026t(94)(Object.prototype,\"toString\",function toString(){return\"[object \"+e(this)+\"]\"},!0)},{128:128,17:17,94:94}],207:[function(t,n,r){var e\u003dt(33),i\u003dt(86);e(e.G+e.F*(parseFloat!\u003di),{parseFloat:i})},{33:33,86:86}],208:[function(t,n,r){var e\u003dt(33),i\u003dt(87);e(e.G+e.F*(parseInt!\u003di),{parseInt:i})},{33:33,87:87}],209:[function(t,n,r){\"use strict\";var e,i,o,u,c\u003dt(60),a\u003dt(40),f\u003dt(25),s\u003dt(17),l\u003dt(33),h\u003dt(51),v\u003dt(3),p\u003dt(6),d\u003dt(39),y\u003dt(104),g\u003dt(113).set,m\u003dt(68)(),b\u003dt(69),x\u003dt(90),S\u003dt(91),w\u003da.TypeError,_\u003da.process,E\u003da.Promise,O\u003d\"process\"\u003d\u003ds(_),P\u003dfunction(){},M\u003di\u003db.f,F\u003d!!function(){try{var n\u003dE.resolve(1),r\u003d(n.constructor\u003d{})[t(128)(\"species\")]\u003dfunction(t){t(P,P)};return(O||\"function\"\u003d\u003dtypeof PromiseRejectionEvent)\u0026\u0026n.then(P)instanceof r}catch(t){}}(),I\u003dc?function(t,n){return t\u003d\u003d\u003dn||t\u003d\u003d\u003dE\u0026\u0026n\u003d\u003d\u003du}:function(t,n){return t\u003d\u003d\u003dn},A\u003dfunction(t){var n;return!(!h(t)||\"function\"!\u003dtypeof(n\u003dt.then))\u0026\u0026n},k\u003dfunction(t,n){if(!t._n){t._n\u003d!0;var r\u003dt._c;m(function(){for(var e\u003dt._v,i\u003d1\u003d\u003dt._s,o\u003d0;r.length\u003eo;)!function(n){var r,o,u\u003di?n.ok:n.fail,c\u003dn.resolve,a\u003dn.reject,f\u003dn.domain;try{u?(i||(2\u003d\u003dt._h\u0026\u0026T(t),t._h\u003d1),!0\u003d\u003d\u003du?r\u003de:(f\u0026\u0026f.enter(),r\u003du(e),f\u0026\u0026f.exit()),r\u003d\u003d\u003dn.promise?a(w(\"Promise-chain cycle\")):(o\u003dA(r))?o.call(r,c,a):c(r)):a(e)}catch(t){a(t)}}(r[o++]);t._c\u003d[],t._n\u003d!1,n\u0026\u0026!t._h\u0026\u0026N(t)})}},N\u003dfunction(t){g.call(a,function(){var n,r,e,i\u003dt._v,o\u003dj(t);if(o\u0026\u0026(n\u003dx(function(){O?_.emit(\"unhandledRejection\",i,t):(r\u003da.onunhandledrejection)?r({promise:t,reason:i}):(e\u003da.console)\u0026\u0026e.error\u0026\u0026e.error(\"Unhandled promise rejection\",i)}),t._h\u003dO||j(t)?2:1),t._a\u003dvoid 0,o\u0026\u0026n.e)throw n.v})},j\u003dfunction(t){if(1\u003d\u003dt._h)return!1;for(var n,r\u003dt._a||t._c,e\u003d0;r.length\u003ee;)if(n\u003dr[e++],n.fail||!j(n.promise))return!1;return!0},T\u003dfunction(t){g.call(a,function(){var n;O?_.emit(\"rejectionHandled\",t):(n\u003da.onrejectionhandled)\u0026\u0026n({promise:t,reason:t._v})})},R\u003dfunction(t){var n\u003dthis;n._d||(n._d\u003d!0,n\u003dn._w||n,n._v\u003dt,n._s\u003d2,n._a||(n._a\u003dn._c.slice()),k(n,!0))},L\u003dfunction(t){var n,r\u003dthis;if(!r._d){r._d\u003d!0,r\u003dr._w||r;try{if(r\u003d\u003d\u003dt)throw w(\"Promise can\u0027t be resolved itself\");(n\u003dA(t))?m(function(){var e\u003d{_w:r,_d:!1};try{n.call(t,f(L,e,1),f(R,e,1))}catch(t){R.call(e,t)}}):(r._v\u003dt,r._s\u003d1,k(r,!1))}catch(t){R.call({_w:r,_d:!1},t)}}};F||(E\u003dfunction Promise(t){p(this,E,\"Promise\",\"_h\"),v(t),e.call(this);try{t(f(L,this,1),f(R,this,1))}catch(t){R.call(this,t)}},e\u003dfunction Promise(t){this._c\u003d[],this._a\u003dvoid 0,this._s\u003d0,this._d\u003d!1,this._v\u003dvoid 0,this._h\u003d0,this._n\u003d!1},e.prototype\u003dt(93)(E.prototype,{then:function then(t,n){var r\u003dM(y(this,E));return r.ok\u003d\"function\"!\u003dtypeof t||t,r.fail\u003d\"function\"\u003d\u003dtypeof n\u0026\u0026n,r.domain\u003dO?_.domain:void 0,this._c.push(r),this._a\u0026\u0026this._a.push(r),this._s\u0026\u0026k(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o\u003dfunction(){var t\u003dnew e;this.promise\u003dt,this.resolve\u003df(L,t,1),this.reject\u003df(R,t,1)},b.f\u003dM\u003dfunction(t){return I(E,t)?new o(t):i(t)}),l(l.G+l.W+l.F*!F,{Promise:E}),t(101)(E,\"Promise\"),t(100)(\"Promise\"),u\u003dt(23).Promise,l(l.S+l.F*!F,\"Promise\",{reject:function reject(t){var n\u003dM(this);return(0,n.reject)(t),n.promise}}),l(l.S+l.F*(c||!F),\"Promise\",{resolve:function resolve(t){return t instanceof E\u0026\u0026I(t.constructor,this)?t:S(this,t)}}),l(l.S+l.F*!(F\u0026\u0026t(56)(function(t){E.all(t).catch(P)})),\"Promise\",{all:function all(t){var n\u003dthis,r\u003dM(n),e\u003dr.resolve,i\u003dr.reject,o\u003dx(function(){var r\u003d[],o\u003d0,u\u003d1;d(t,!1,function(t){var c\u003do++,a\u003d!1;r.push(void 0),u++,n.resolve(t).then(function(t){a||(a\u003d!0,r[c]\u003dt,--u||e(r))},i)}),--u||e(r)});return o.e\u0026\u0026i(o.v),r.promise},race:function race(t){var n\u003dthis,r\u003dM(n),e\u003dr.reject,i\u003dx(function(){d(t,!1,function(t){n.resolve(t).then(r.resolve,e)})});return i.e\u0026\u0026e(i.v),r.promise}})},{100:100,101:101,104:104,113:113,128:128,17:17,23:23,25:25,"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"3:3,33:33,39:39,40:40,51:51,56:56,6:6,60:60,68:68,69:69,90:90,91:91,93:93}],210:[function(t,n,r){var e\u003dt(33),i\u003dt(3),o\u003dt(7),u\u003d(t(40).Reflect||{}).apply,c\u003dFunction.apply;e(e.S+e.F*!t(35)(function(){u(function(){})}),\"Reflect\",{apply:function apply(t,n,r){var e\u003di(t),a\u003do(r);return u?u(e,n,a):c.call(e,n,a)}})},{3:3,33:33,35:35,40:40,7:7}],211:[function(t,n,r){var e\u003dt(33),i\u003dt(71),o\u003dt(3),u\u003dt(7),c\u003dt(51),a\u003dt(35),f\u003dt(16),s\u003d(t(40).Reflect||{}).construct,l\u003da(function(){function F(){}return!(s(function(){},[],F)instanceof F)}),h\u003d!a(function(){s(function(){})});e(e.S+e.F*(l||h),\"Reflect\",{construct:function construct(t,n){o(t),u(n);var r\u003darguments.length\u003c3?t:o(arguments[2]);if(h\u0026\u0026!l)return s(t,n,r);if(t\u003d\u003dr){switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3])}var e\u003d[null];return e.push.apply(e,n),new(f.apply(t,e))}var a\u003dr.prototype,v\u003di(c(a)?a:Object.prototype),p\u003dFunction.apply.call(t,v,n);return c(p)?p:v}})},{16:16,3:3,33:33,35:35,40:40,51:51,7:7,71:71}],212:[function(t,n,r){var e\u003dt(72),i\u003dt(33),o\u003dt(7),u\u003dt(120);i(i.S+i.F*t(35)(function(){Reflect.defineProperty(e.f({},1,{value:1}),1,{value:2})}),\"Reflect\",{defineProperty:function defineProperty(t,n,r){o(t),n\u003du(n,!0),o(r);try{return e.f(t,n,r),!0}catch(t){return!1}}})},{120:120,33:33,35:35,7:7,72:72}],213:[function(t,n,r){var e\u003dt(33),i\u003dt(75).f,o\u003dt(7);e(e.S,\"Reflect\",{deleteProperty:function deleteProperty(t,n){var r\u003di(o(t),n);return!(r\u0026\u0026!r.configurable)\u0026\u0026delete t[n]}})},{33:33,7:7,75:75}],214:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(7),o\u003dfunction(t){this._t\u003di(t),this._i\u003d0;var n,r\u003dthis._k\u003d[];for(n in t)r.push(n)};t(54)(o,\"Object\",function(){var t,n\u003dthis,r\u003dn._k;do{if(n._i\u003e\u003dr.length)return{value:void 0,done:!0}}while(!((t\u003dr[n._i++])in n._t));return{value:t,done:!1}}),e(e.S,\"Reflect\",{enumerate:function enumerate(t){return new o(t)}})},{33:33,54:54,7:7}],215:[function(t,n,r){var e\u003dt(75),i\u003dt(33),o\u003dt(7);i(i.S,\"Reflect\",{getOwnPropertyDescriptor:function getOwnPropertyDescriptor(t,n){return e.f(o(t),n)}})},{33:33,7:7,75:75}],216:[function(t,n,r){var e\u003dt(33),i\u003dt(79),o\u003dt(7);e(e.S,\"Reflect\",{getPrototypeOf:function getPrototypeOf(t){return i(o(t))}})},{33:33,7:7,79:79}],217:[function(t,n,r){function get(t,n){var r,u,f\u003darguments.length\u003c3?t:arguments[2];return a(t)\u003d\u003d\u003df?t[n]:(r\u003de.f(t,n))?o(r,\"value\")?r.value:void 0!\u003d\u003dr.get?r.get.call(f):void 0:c(u\u003di(t))?get(u,n,f):void 0}var e\u003dt(75),i\u003dt(79),o\u003dt(41),u\u003dt(33),c\u003dt(51),a\u003dt(7);u(u.S,\"Reflect\",{get:get})},{33:33,41:41,51:51,7:7,75:75,79:79}],218:[function(t,n,r){var e\u003dt(33);e(e.S,\"Reflect\",{has:function has(t,n){return n in t}})},{33:33}],219:[function(t,n,r){var e\u003dt(33),i\u003dt(7),o\u003dObject.isExtensible;e(e.S,\"Reflect\",{isExtensible:function isExtensible(t){return i(t),!o||o(t)}})},{33:33,7:7}],220:[function(t,n,r){var e\u003dt(33);e(e.S,\"Reflect\",{ownKeys:t(85)})},{33:33,85:85}],221:[function(t,n,r){var e\u003dt(33),i\u003dt(7),o\u003dObject.preventExtensions;e(e.S,\"Reflect\",{preventExtensions:function preventExtensions(t){i(t);try{return o\u0026\u0026o(t),!0}catch(t){return!1}}})},{33:33,7:7}],222:[function(t,n,r){var e\u003dt(33),i\u003dt(99);i\u0026\u0026e(e.S,\"Reflect\",{setPrototypeOf:function setPrototypeOf(t,n){i.check(t,n);try{return i.set(t,n),!0}catch(t){return!1}}})},{33:33,99:99}],223:[function(t,n,r){function set(t,n,r){var c,l,h\u003darguments.length\u003c4?t:arguments[3],v\u003di.f(f(t),n);if(!v){if(s(l\u003do(t)))return set(l,n,r,h);v\u003da(0)}return u(v,\"value\")?!(!1\u003d\u003d\u003dv.writable||!s(h))\u0026\u0026(c\u003di.f(h,n)||a(0),c.value\u003dr,e.f(h,n,c),!0):void 0!\u003d\u003dv.set\u0026\u0026(v.set.call(h,r),!0)}var e\u003dt(72),i\u003dt(75),o\u003dt(79),u\u003dt(41),c\u003dt(33),a\u003dt(92),f\u003dt(7),s\u003dt(51);c(c.S,\"Reflect\",{set:set})},{33:33,41:41,51:51,7:7,72:72,75:75,79:79,92:92}],224:[function(t,n,r){var e\u003dt(40),i\u003dt(45),o\u003dt(72).f,u\u003dt(77).f,c\u003dt(52),a\u003dt(37),f\u003de.RegExp,s\u003df,l\u003df.prototype,h\u003d/a/g,v\u003d/a/g,p\u003dnew f(h)!\u003d\u003dh;if(t(29)\u0026\u0026(!p||t(35)(function(){return v[t(128)(\"match\")]\u003d!1,f(h)!\u003dh||f(v)\u003d\u003dv||\"/a/i\"!\u003df(h,\"i\")}))){f\u003dfunction RegExp(t,n){var r\u003dthis instanceof f,e\u003dc(t),o\u003dvoid 0\u003d\u003d\u003dn;return!r\u0026\u0026e\u0026\u0026t.constructor\u003d\u003d\u003df\u0026\u0026o?t:i(p?new s(e\u0026\u0026!o?t.source:t,n):s((e\u003dt instanceof f)?t.source:t,e\u0026\u0026o?a.call(t):n),r?this:l,f)};for(var d\u003du(s),y\u003d0;d.length\u003ey;)!function(t){t in f||o(f,t,{configurable:!0,get:function(){return s[t]},set:function(n){s[t]\u003dn}})}(d[y++]);l.constructor\u003df,f.prototype\u003dl,t(94)(e,\"RegExp\",f)}t(100)(\"RegExp\")},{100:100,128:128,29:29,35:35,37:37,40:40,45:45,52:52,72:72,77:77,94:94}],225:[function(t,n,r){t(29)\u0026\u0026\"g\"!\u003d/./g.flags\u0026\u0026t(72).f(RegExp.prototype,\"flags\",{configurable:!0,get:t(37)})},{29:29,37:37,72:72}],226:[function(t,n,r){t(36)(\"match\",1,function(t,n,r){return[function match(r){\"use strict\";var e\u003dt(this),i\u003dvoid 0\u003d\u003dr?void 0:r[n];return void 0!\u003d\u003di?i.call(r,e):new RegExp(r)[n](String(e))},r]})},{36:36}],227:[function(t,n,r){t(36)(\"replace\",2,function(t,n,r){return[function replace(e,i){\"use strict\";var o\u003dt(this),u\u003dvoid 0\u003d\u003de?void 0:e[n];return void 0!\u003d\u003du?u.call(e,o,i):r.call(String(o),e,i)},r]})},{36:36}],228:[function(t,n,r){t(36)(\"search\",1,function(t,n,r){return[function search(r){\"use strict\";var e\u003dt(this),i\u003dvoid 0\u003d\u003dr?void 0:r[n];return void 0!\u003d\u003di?i.call(r,e):new RegExp(r)[n](String(e))},r]})},{36:36}],229:[function(t,n,r){t(36)(\"split\",2,function(n,r,e){\"use strict\";var i\u003dt(52),o\u003de,u\u003d[].push,c\u003d\"length\";if(\"c\"\u003d\u003d\"abbc\".split(/(b)*/)[1]||4!\u003d\"test\".split(/(?:)/,-1)[c]||2!\u003d\"ab\".split(/(?:ab)*/)[c]||4!\u003d\".\".split(/(.?)(.?)/)[c]||\".\".split(/()()/)[c]\u003e1||\"\".split(/.?/)[c]){var a\u003dvoid 0\u003d\u003d\u003d/()??/.exec(\"\")[1];e\u003dfunction(t,n){var r\u003dString(this);if(void 0\u003d\u003d\u003dt\u0026\u00260\u003d\u003d\u003dn)return[];if(!i(t))return o.call(r,t,n);var e,f,s,l,h,v\u003d[],p\u003d(t.ignoreCase?\"i\":\"\")+(t.multiline?\"m\":\"\")+(t.unicode?\"u\":\"\")+(t.sticky?\"y\":\"\"),d\u003d0,y\u003dvoid 0\u003d\u003d\u003dn?4294967295:n\u003e\u003e\u003e0,g\u003dnew RegExp(t.source,p+\"g\");for(a||(e\u003dnew RegExp(\"^\"+g.source+\"$(?!\\\\s)\",p));(f\u003dg.exec(r))\u0026\u0026!((s\u003df.index+f[0][c])\u003ed\u0026\u0026(v.push(r.slice(d,f.index)),!a\u0026\u0026f[c]\u003e1\u0026\u0026f[0].replace(e,function(){for(h\u003d1;h\u003carguments[c]-2;h++)void 0\u003d\u003d\u003darguments[h]\u0026\u0026(f[h]\u003dvoid 0)}),f[c]\u003e1\u0026\u0026f.index\u003cr[c]\u0026\u0026u.apply(v,f.slice(1)),l\u003df[0][c],d\u003ds,v[c]\u003e\u003dy));)g.lastIndex\u003d\u003d\u003df.index\u0026\u0026g.lastIndex++;return d\u003d\u003d\u003dr[c]?!l\u0026\u0026g.test(\"\")||v.push(\"\"):v.push(r.slice(d)),v[c]\u003ey?v.slice(0,y):v}}else\"0\".split(void 0,0)[c]\u0026\u0026(e\u003dfunction(t,n){return void 0\u003d\u003d\u003dt\u0026\u00260\u003d\u003d\u003dn?[]:o.call(this,t,n)});return[function split(t,i){var o\u003dn(this),u\u003dvoid 0\u003d\u003dt?void 0:t[r];return void 0!\u003d\u003du?u.call(t,o,i):e.call(String(o),t,i)},e]})},{36:36,52:52}],230:[function(t,n,r){\"use strict\";t(225);var e\u003dt(7),i\u003dt(37),o\u003dt(29),u\u003d/./.toString,c\u003dfunction(n){t(94)(RegExp.prototype,\"toString\",n,!0)};t(35)(function(){return\"/a/b\"!\u003du.call({source:\"a\",flags:\"b\"})})?c(function toString(){var t\u003de(this);return\"/\".concat(t.source,\"/\",\"flags\"in t?t.flags:!o\u0026\u0026t instanceof RegExp?i.call(t):void 0)}):\"toString\"!\u003du.name\u0026\u0026c(function toString(){return u.call(this)})},{225:225,29:29,35:35,37:37,7:7,94:94}],231:[function(t,n,r){\"use strict\";var e\u003dt(19),i\u003dt(125);n.exports\u003dt(22)(\"Set\",function(t){return function Set(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},{add:function add(t){return e.def(i(this,\"Set\"),t\u003d0\u003d\u003d\u003dt?0:t,t)}},e)},{125:125,19:19,22:22}],232:[function(t,n,r){\"use strict\";t(108)(\"anchor\",function(t){return function anchor(n){return t(this,\"a\",\"name\",n)}})},{108:108}],233:[function(t,n,r){\"use strict\";t(108)(\"big\",function(t){return function big(){return t(this,\"big\",\"\",\"\")}})},{108:108}],234:[function(t,n,r){\"use strict\";t(108)(\"blink\",function(t){return function blink(){return t(this,\"blink\",\"\",\"\")}})},{108:108}],235:[function(t,n,r){\"use strict\";t(108)(\"bold\",function(t){return function bold(){return t(this,\"b\",\"\",\"\")}})},{108:108}],236:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(106)(!1);e(e.P,\"String\",{codePointAt:function codePointAt(t){return i(this,t)}})},{106:106,33:33}],237:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(118),o\u003dt(107),u\u003d\"\".endsWith;e(e.P+e.F*t(34)(\"endsWith\"),\"String\",{endsWith:function endsWith(t){var n\u003do(this,t,\"endsWith\"),r\u003darguments.length\u003e1?arguments[1]:void 0,e\u003di(n.length),c\u003dvoid 0\u003d\u003d\u003dr?e:Math.min(i(r),e),a\u003dString(t);return u?u.call(n,a,c):n.slice(c-a.length,c)\u003d\u003d\u003da}})},{107:107,118:118,33:33,34:34}],238:[function(t,n,r){\"use strict\";t(108)(\"fixed\",function(t){return function fixed(){return t(this,\"tt\",\"\",\"\")}})},{108:108}],239:[function(t,n,r){\"use strict\";t(108)(\"fontcolor\",function(t){return function fontcolor(n){return t(this,\"font\",\"color\",n)}})},{108:108}],240:[function(t,n,r){\"use strict\";t(108)(\"fontsize\",function(t){return function fontsize(n){return t(this,\"font\",\"size\",n)}})},{108:108}],241:[function(t,n,r){var e\u003dt(33),i\u003dt(114),o\u003dString.fromCharCode,u\u003dString.fromCodePoint;e(e.S+e.F*(!!u\u0026\u00261!\u003du.length),\"String\",{fromCodePoint:function fromCodePoint(t){for(var n,r\u003d[],e\u003darguments.length,u\u003d0;e\u003eu;){if(n\u003d+arguments[u++],i(n,1114111)!\u003d\u003dn)throw RangeError(n+\" is not a valid code point\");r.push(n\u003c65536?o(n):o(55296+((n-\u003d65536)\u003e\u003e10),n%1024+56320))}return r.join(\"\")}})},{114:114,33:33}],242:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(107);e(e.P+e.F*t(34)(\"includes\"),\"String\",{includes:function includes(t){return!!~i(this,t,\"includes\").indexOf(t,arguments.length\u003e1?arguments[1]:void 0)}})},{107:107,33:33,34:34}],243:[function(t,n,r){\"use strict\";t(108)(\"italics\",function(t){return function italics(){return t(this,\"i\",\"\",\"\")}})},{108:108}],244:[function(t,n,r){\"use strict\";var e\u003dt(106)(!0);t(55)(String,\"String\",function(t){this._t\u003dString(t),this._i\u003d0},function(){var t,n\u003dthis._t,r\u003dthis._i;return r\u003e\u003dn.length?{value:void 0,done:!0}:(t\u003de(n,r),this._i+\u003dt.length,{value:t,done:!1})})},{106:106,55:55}],245:[function(t,n,r){\"use strict\";t(108)(\"link\",function(t){return function link(n){return t(this,\"a\",\"href\",n)}})},{108:108}],246:[function(t,n,r){var e\u003dt(33),i\u003dt(117),o\u003dt(118);e(e.S,\"String\",{raw:function raw(t){for(var n\u003di(t.raw),r\u003do(n.length),e\u003darguments.length,u\u003d[],c\u003d0;r\u003ec;)u.push(String(n[c++])),c\u003ce\u0026\u0026u.push(String(arguments[c]));return u.join(\"\")}})},{117:117,118:118,33:33}],247:[function(t,n,r){var e\u003dt(33);e(e.P,\"String\",{repeat:t(110)})},{110:110,33:33}],248:[function(t,n,r){\"use strict\";t(108)(\"small\",function(t){return function small(){return t(this,\"small\",\"\",\"\")}})},{108:108}],249:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(118),o\u003dt(107),u\u003d\"\".startsWith;e(e.P+e.F*t(34)(\"startsWith\"),\"String\",{startsWith:function startsWith(t){var n\u003do(this,t,\"startsWith\"),r\u003di(Math.min(arguments.length\u003e1?arguments[1]:void 0,n.length)),e\u003dString(t);return u?u.call(n,e,r):n.slice(r,r+e.length)\u003d\u003d\u003de}})},{107:107,118:118,33:33,34:34}],250:[function(t,n,r){\"use strict\";t(108)(\"strike\",function(t){return function strike(){return t(this,\"strike\",\"\",\"\")}})},{108:108}],251:[function(t,n,r){\"use strict\";t(108)(\"sub\",function(t){return function sub(){return t(this,\"sub\",\"\",\"\")}})},{108:108}],252:[function(t,n,r){\"use strict\";t(108)(\"sup\",function(t){return function sup(){return t(this,\"sup\",\"\",\"\")}})},{108:108}],253:[function(t,n,r){\"use strict\";t(111)(\"trim\",function(t){return function trim(){return t(this,3)}})},{111:111}],254:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(41),o\u003dt(29),u\u003dt(33),c\u003dt(94),a\u003dt(66).KEY,f\u003dt(35),s\u003dt(103),l\u003dt(101),h\u003dt(124),v\u003dt(128),p\u003dt(127),d\u003dt(126),y\u003dt(59),g\u003dt(32),m\u003dt(49),b\u003dt(7),x\u003dt(117),S\u003dt(120),w\u003dt(92),_\u003dt(71),E\u003dt(76),O\u003dt(75),P\u003dt(72),M\u003dt(81),F\u003dO.f,I\u003dP.f,A\u003dE.f,k\u003de.Symbol,N\u003de.JSON,j\u003dN\u0026\u0026N.stringify,T\u003dv(\"_hidden\"),R\u003dv(\"toPrimitive\"),L\u003d{}.propertyIsEnumerable,G\u003ds(\"symbol-registry\"),D\u003ds(\"symbols\"),C\u003ds(\"op-symbols\"),W\u003dObject.prototype,U\u003d\"function\"\u003d\u003dtypeof k,B\u003de.QObject,V\u003d!B||!B.prototype||!B.prototype.findChild,z\u003do\u0026\u0026f(function(){return 7!\u003d_(I({},\"a\",{get:function(){return I(this,\"a\",{value:7}).a}})).a})?function(t,n,r){var e\u003dF(W,n);e\u0026\u0026delete W[n],I(t,n,r),e\u0026\u0026t!\u003d\u003dW\u0026\u0026I(W,n,e)}:I,q\u003dfunction(t){var n\u003dD[t]\u003d_(k.prototype);return n._k\u003dt,n},K\u003dU\u0026\u0026\"symbol\"\u003d\u003dtypeof k.iterator?function(t){return\"symbol\"\u003d\u003dtypeof t}:function(t){return t instanceof k},Y\u003dfunction defineProperty(t,n,r){return t\u003d\u003d\u003dW\u0026\u0026Y(C,n,r),b(t),n\u003dS(n,!0),b(r),i(D,n)?(r.enumerable?(i(t,T)\u0026\u0026t[T][n]\u0026\u0026(t[T][n]\u003d!1),r\u003d_(r,{enumerable:w(0,!1)})):(i(t,T)||I(t,T,w(1,{})),t[T][n]\u003d!0),z(t,n,r)):I(t,n,r)},J\u003dfunction defineProperties(t,n){b(t);for(var r,e\u003dg(n\u003dx(n)),i\u003d0,o\u003de.length;o\u003ei;)Y(t,r\u003de[i++],n[r]);return t},H\u003dfunction create(t,n){return void 0\u003d\u003d\u003dn?_(t):J(_(t),n)},X\u003dfunction propertyIsEnumerable(t){var n\u003dL.call(this,t\u003dS(t,!0));return!(this\u003d\u003d\u003dW\u0026\u0026i(D,t)\u0026\u0026!i(C,t))\u0026\u0026(!(n||!i(this,t)||!i(D,t)||i(this,T)\u0026\u0026this[T][t])||n)},$\u003dfunction getOwnPropertyDescriptor(t,n){if(t\u003dx(t),n\u003dS(n,!0),t!\u003d\u003dW||!i(D,n)||i(C,n)){var r\u003dF(t,n);return!r||!i(D,n)||i(t,T)\u0026\u0026t[T][n]||(r.enumerable\u003d!0),r}},Z\u003dfunction getOwnPropertyNames(t){for(var n,r\u003dA(x(t)),e\u003d[],o\u003d0;r.length\u003eo;)i(D,n\u003dr[o++])||n\u003d\u003dT||n\u003d\u003da||e.push(n);return e},Q\u003dfunction getOwnPropertySymbols(t){for(var n,r\u003dt\u003d\u003d\u003dW,e\u003dA(r?C:x(t)),o\u003d[],u\u003d0;e.length\u003eu;)!i(D,n\u003de[u++])||r\u0026\u0026!i(W,n)||o.push(D[n]);return o};U||(k\u003dfunction Symbol(){if(this instanceof k)throw TypeError(\"Symbol is not a constructor!\");var t\u003dh(arguments.length\u003e0?arguments[0]:void 0),n\u003dfunction(r){this\u003d\u003d\u003dW\u0026\u0026n.call(C,r),i(this,T)\u0026\u0026i(this[T],t)\u0026\u0026(this[T][t]\u003d!1),z(this,t,w(1,r))};return o\u0026\u0026V\u0026\u0026z(W,t,{configurable:!0,set:n}),q(t)},c(k.prototype,\"toString\",function toString(){return this._k}),O.f\u003d$,P.f\u003dY,t(77).f\u003dE.f\u003dZ,t(82).f\u003dX,t(78).f\u003dQ,o\u0026\u0026!t(60)\u0026\u0026c(W,\"propertyIsEnumerable\",X,!0),p.f\u003dfunction(t){return q(v(t))}),u(u.G+u.W+u.F*!U,{Symbol:k});for(var tt\u003d\"hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables\".split(\",\"),nt\u003d0;tt.length\u003ent;)v(tt[nt++]);for(var rt\u003dM(v.store),et\u003d0;rt.length\u003eet;)d(rt[et++]);u(u.S+u.F*!U,\"Symbol\",{for:function(t){return i(G,t+\u003d\"\")?G[t]:G[t]\u003dk(t)},keyFor:function keyFor(t){if(K(t))return y(G,t);throw TypeError(t+\" is not a symbol!\")},useSetter:function(){V\u003d!0},useSimple:function(){V\u003d!1}}),u(u.S+u.F*!U,\"Object\",{create:H,defineProperty:Y,defineProperties:J,getOwnPropertyDescriptor:$,getOwnPropertyNames:Z,getOwnPropertySymbols:Q}),N\u0026\u0026u(u.S+u.F*(!U||f(function(){var t\u003dk();return\"[null]\"!\u003dj([t])||\"{}\"!\u003dj({a:t})||\"{}\"!\u003dj(Object(t))})),\"JSON\",{stringify:function stringify(t){if(void 0!\u003d\u003dt\u0026\u0026!K(t)){for(var n,r,e\u003d[t],i\u003d1;arguments.length\u003ei;)e.push(arguments[i++]);return n\u003de[1],\"function\"\u003d\u003dtypeof n\u0026\u0026(r\u003dn),!r\u0026\u0026m(n)||(n\u003dfunction(t,n){if(r\u0026\u0026(n\u003dr.call(this,t,n)),!K(n))return n}),e[1]\u003dn,j.apply(N,e)}}}),k.prototype[R]||t(42)(k.prototype,R,k.prototype.valueOf),l(k,\"Symbol\"),l(Math,\"Math\",!0),l(e.JSON,\"JSON\",!0)},{101:101,103:103,117:117,120:120,124:124,126:126,127:127,128:128,29:29,32:32,33:33,35:35,40:40,41:41,42:42,49:49,59:59,60:60,66:66,7:7,71:71,72:72,75:75,76:76,77:77,78:78,81:81,82:82,92:92,94:94}],255:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(123),o\u003dt(122),u\u003dt(7),c\u003dt(114),a\u003dt(118),f\u003dt(51),s\u003dt(40).ArrayBuffer,l\u003dt(104),h\u003do.ArrayBuffer,v\u003do.DataView,p\u003di.ABV\u0026\u0026s.isView,d\u003dh.prototype.slice,y\u003di.VIEW;e(e.G+e.W+e.F*(s!\u003d\u003dh),{ArrayBuffer:h}),e(e.S+e.F*!i.CONSTR,\"ArrayBuffer\",{isView:function isView(t){return p\u0026\u0026p(t)||f(t)\u0026\u0026y in t}}),e(e.P+e.U+e.F*t(35)(function(){return!new h(2).slice(1,void 0).byteLength}),\"ArrayBuffer\",{slice:function slice(t,n){if(void 0!\u003d\u003dd\u0026\u0026void 0\u003d\u003d\u003dn)return d.call(u(this),t);for(var r\u003du(this).byteLength,e\u003dc(t,r),i\u003dc(void 0\u003d\u003d\u003dn?r:n,r),o\u003dnew(l(this,h))(a(i-e)),f\u003dnew v(this),s\u003dnew v(o),p\u003d0;e\u003ci;)s.setUint8(p++,f.getUint8(e++));return o}}),t(100)(\"ArrayBuffer\")},{100:100,104:104,114:114,118:118,122:122,123:123,33:33,35:35,40:40,51:51,7:7}],256:[function(t,n,r){var e\u003dt(33);e(e.G+e.W+e.F*!t(123).ABV,{DataView:t(122).DataView})},{122:122,123:123,33:33}],257:[function(t,n,r){t(121)(\"Float32\",4,function(t){return function Float32Array(n,r,e){return t(this,n,r,e)}})},{121:121}],258:[function(t,n,r){t(121)(\"Float64\",8,function(t){return function Float64Array(n,r,e){return t(this,n,r,e)}})},{121:121}],259:[function(t,n,r){t(121)(\"Int16\",2,function(t){return function Int16Array(n,r,e){return t(this,n,r,e)}})},{121:121}],260:[function(t,n,r){t(121)(\"Int32\",4,function(t){return function Int32Array(n,r,e){return t(this,n,r,e)}})},{121:121}],261:[function(t,n,r){t(121)(\"Int8\",1,function(t){return function Int8Array(n,r,e){return t(this,n,r,e)}})},{121:121}],262:[function(t,n,r){t(121)(\"Uint16\",2,function(t){return function Uint16Array(n,r,e){return t(this,n,r,e)}})},{121:121}],263:[function(t,n,r){t(121)(\"Uint32\",4,function(t){return function Uint32Array(n,r,e){return t(this,n,r,e)}})},{121:121}],264:[function(t,n,r){t(121)(\"Uint8\",1,function(t){return function Uint8Array(n,r,e){return t(this,n,r,e)}})},{121:121}],265:[function(t,n,r){t(121)(\"Uint8\",1,function(t){return function Uint8ClampedArray(n,r,e){return t(this,n,r,e)}},!0)},{121:121}],266:[function(t,n,r){\"use strict\";var e,i\u003dt(12)(0),o\u003dt(94),u\u003dt(66),c\u003dt(70),a\u003dt(21),f\u003dt(51),s\u003dt(35),l\u003dt(125),h\u003du.getWeak,v\u003dObject.isExtensible,p\u003da.ufstore,d\u003d{},y\u003dfunction(t){return function WeakMap(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},g\u003d{get:function get(t){if(f(t)){var n\u003dh(t);return!0\u003d\u003d\u003dn?p(l(this,\"WeakMap\")).get(t):n?n[this._i]:void 0}},set:function set(t,n){return a.def(l(this,\"WeakMap\"),t,n)}},m\u003dn.exports\u003dt(22)(\"WeakMap\",y,g,a,!0,!0);s(function(){return 7!\u003d(new m).set((Object.freeze||Object)(d),7).get(d)})\u0026\u0026(e\u003da.getConstructor(y,\"WeakMap\"),c(e.prototype,g),u.NEED\u003d!0,i([\"delete\",\"has\",\"get\",\"set\"],function(t){var n\u003dm.prototype,r\u003dn[t];o(n,t,function(n,i){if(f(n)\u0026\u0026!v(n)){this._f||(this._f\u003dnew e);var o\u003dthis._f[t](n,i);return\"set\"\u003d\u003dt?this:o}return r.call(this,n,i)})}))},{12:12,125:125,21:21,22:22,35:35,51:51,66:66,70:70,94:94}],267:[function(t,n,r){\"use strict\";var e\u003dt(21),i\u003dt(125);t(22)(\"WeakSet\",function(t){return function WeakSet(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},{add:function add(t){return e.def(i(this,\"WeakSet\"),t,!0)}},e,!1,!0)},{125:125,21:21,22:22}],268:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(38),o\u003dt(119),u\u003dt(118),c\u003dt(3),a\u003dt(15);e(e.P,\"Array\",{flatMap:function flatMap(t){var n,r,e\u003do(this);return c(t),n\u003du(e.length),r\u003da(e,0),i(r,e,e,n,0,1,t,arguments[1]),r}}),t(5)(\"flatMap\")},{118:118,119:119,15:15,3:3,33:33,38:38,5:5}],269:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(38),o\u003dt(119),u\u003dt(118),c\u003dt(116),a\u003dt(15);e(e.P,\"Array\",{flatten:function flatten(){var t\u003darguments[0],n\u003do(this),r\u003du(n.length),e\u003da(n,0);return i(e,n,n,r,0,void 0\u003d\u003d\u003dt?1:c(t)),e}}),t(5)(\"flatten\")},{116:116,118:118,119:119,15:15,33:33,38:38,5:5}],270:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(11)(!0);e(e.P,\"Array\",{includes:function includes(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0)}}),t(5)(\"includes\")},{11:11,33:33,5:5}],271:[function(t,n,r){var e\u003dt(33),i\u003dt(68)(),o\u003dt(40).process,u\u003d\"process\"\u003d\u003dt(18)(o);e(e.G,{asap:function asap(t){var n\u003du\u0026\u0026o.domain;i(n?n.bind(t):t)}})},{18:18,33:33,40:40,68:68}],272:[function(t,n,r){var e\u003dt(33),i\u003dt(18);e(e.S,\"Error\",{isError:function isError(t){return\"Error\"\u003d\u003d\u003di(t)}})},{18:18,33:33}],273:[function(t,n,r){var e\u003dt(33);e(e.G,{global:t(40)})},{33:33,40:40}],274:[function(t,n,r){t(97)(\"Map\")},{97:97}],275:[function(t,n,r){t(98)(\"Map\")},{98:98}],276:[function(t,n,r){var e\u003dt(33);e(e.P+e.R,\"Map\",{toJSON:t(20)(\"Map\")})},{20:20,33:33}],277:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{clamp:function clamp(t,n,r){return Math.min(r,Math.max(n,t))}})},{33:33}],278:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{DEG_PER_RAD:Math.PI/180})},{33:33}],279:[function(t,n,r){var e\u003dt(33),i\u003d180/Math.PI;e(e.S,\"Math\",{degrees:function degrees(t){return t*i}})},{33:33}],280:[function(t,n,r){var e\u003dt(33),i\u003dt(64),o\u003dt(62);e(e.S,\"Math\",{fscale:function fscale(t,n,r,e,u){return o(i(t,n,r,e,u))}})},{33:33,62:62,64:64}],281:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{iaddh:function iaddh(t,n,r,e){var i\u003dt\u003e\u003e\u003e0,o\u003dn\u003e\u003e\u003e0,u\u003dr\u003e\u003e\u003e0;return o+(e\u003e\u003e\u003e0)+((i\u0026u|(i|u)\u0026~(i+u\u003e\u003e\u003e0))\u003e\u003e\u003e31)|0}})},{33:33}],282:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{imulh:function imulh(t,n){var r\u003d+t,e\u003d+n,i\u003d65535\u0026r,o\u003d65535\u0026e,u\u003dr\u003e\u003e16,c\u003de\u003e\u003e16,a\u003d(u*o\u003e\u003e\u003e0)+(i*o\u003e\u003e\u003e16);return u*c+(a\u003e\u003e16)+((i*c\u003e\u003e\u003e0)+(65535\u0026a)\u003e\u003e16)}})},{33:33}],283:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{isubh:function isubh(t,n,r,e){var i\u003dt\u003e\u003e\u003e0,o\u003dn\u003e\u003e\u003e0,u\u003dr\u003e\u003e\u003e0;return o-(e\u003e\u003e\u003e0)-((~i\u0026u|~(i^u)\u0026i-u\u003e\u003e\u003e0)\u003e\u003e\u003e31)|0}})},{33:33}],284:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{RAD_PER_DEG:180/Math.PI})},{33:33}],285:[function(t,n,r){var e\u003dt(33),i\u003dMath.PI/180;e(e.S,\"Math\",{radians:function radians(t){return t*i}})},{33:33}],286:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{scale:t(64)})},{33:33,64:64}],287:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{signbit:function signbit(t){return(t\u003d+t)!\u003dt?t:0\u003d\u003dt?1/t\u003d\u003d1/0:t\u003e0}})},{33:33}],288:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{umulh:function umulh(t,n){var r\u003d+t,e\u003d+n,i\u003d65535\u0026r,o\u003d65535\u0026e,u\u003dr\u003e\u003e\u003e16,c\u003de\u003e\u003e\u003e16,a\u003d(u*o\u003e\u003e\u003e0)+(i*o\u003e\u003e\u003e16);return u*c+(a\u003e\u003e\u003e16)+((i*c\u003e\u003e\u003e0)+(65535\u0026a)\u003e\u003e\u003e16)}})},{33:33}],289:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(3),u\u003dt(72);t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__defineGetter__:function __defineGetter__(t,n){u.f(i(this),t,{get:o(n),enumerable:!0,configurable:!0})}})},{119:119,29:29,3:3,33:33,72:72,74:74}],290:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(3),u\u003dt(72);t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__defineSetter__:function __defineSetter__(t,n){u.f(i(this),t,{set:o(n),enumerable:!0,configurable:!0})}})},{119:119,29:29,3:3,33:33,72:72,74:74}],291:[function(t,n,r){var e\u003dt(33),i\u003dt(84)(!0);e(e.S,\"Object\",{entries:function entries(t){return i(t)}})},{33:33,84:84}],292:[function(t,n,r){var e\u003dt(33),i\u003dt(85),o\u003dt(117),u\u003dt(75),c\u003dt(24);e(e.S,\"Object\",{getOwnPropertyDescriptors:function getOwnPropertyDescriptors(t){for(var n,r,e\u003do(t),a\u003du.f,f\u003di(e),s\u003d{},l\u003d0;f.length\u003el;)void 0!\u003d\u003d(r\u003da(e,n\u003df[l++]))\u0026\u0026c(s,n,r);return s}})},{117:117,24:24,33:33,75:75,85:85}],293:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(120),u\u003dt(79),c\u003dt(75).f;t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__lookupGetter__:function __lookupGetter__(t){var n,r\u003di(this),e\u003do(t,!0);do{if(n\u003dc(r,e))return n.get}while(r\u003du(r))}})},{119:119,120:120,29:29,33:33,74:74,75:75,79:79}],294:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(120),u\u003dt(79),c\u003dt(75).f;t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__lookupSetter__:function __lookupSetter__(t){var n,r\u003di(this),e\u003do(t,!0);do{if(n\u003dc(r,e))return n.set}while(r\u003du(r))}})},{119:119,120:120,29:29,33:33,74:74,75:75,79:79}],295:[function(t,n,r){var e\u003dt(33),i\u003dt(84)(!1);e(e.S,\"Object\",{values:function values(t){return i(t)}})},{33:33,84:84}],296:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(40),o\u003dt(23),u\u003dt(68)(),c\u003dt(128)(\"observable\"),a\u003dt(3),f\u003dt(7),s\u003dt(6),l\u003dt(93),h\u003dt(42),v\u003dt(39),p\u003dv.RETURN,d\u003dfunction(t){return null\u003d\u003dt?void 0:a(t)},y\u003dfunction(t){var n\u003dt._c;n\u0026\u0026(t._c\u003dvoid 0,n())},g\u003dfunction(t){return void 0\u003d\u003d\u003dt._o},m\u003dfunction(t){g(t)||(t._o\u003dvoid 0,y(t))},b\u003dfunction(t,n){f(t),this._c\u003dvoid 0,this._o\u003dt,t\u003dnew x(this);try{var r\u003dn(t),e\u003dr;null!\u003dr\u0026\u0026(\"function\"\u003d\u003dtypeof r.unsubscribe?r\u003dfunction(){e.unsubscribe()}:a(r),this._c\u003dr)}catch(n){return void t.error(n)}g(this)\u0026\u0026y(this)};b.prototype\u003dl({},{unsubscribe:function unsubscribe(){m(this)}});var x\u003dfunction(t){this._s\u003dt};x.prototype\u003dl({},{next:function next(t){var n\u003dthis._s;if(!g(n)){var r\u003dn._o;try{var e\u003dd(r.next);if(e)return e.call(r,t)}catch(t){try{m(n)}finally{throw t}}}},error:function error(t){var n\u003dthis._s;if(g(n))throw t;var r\u003dn._o;n._o\u003dvoid 0;try{var e\u003dd(r.error);if(!e)throw t;t\u003de.call(r,t)}catch(t){try{y(n)}finally{throw t}}return y(n),t},complete:function complete(t){var n\u003dthis._s;if(!g(n)){var r\u003dn._o;n._o\u003dvoid 0;try{var e\u003dd(r.complete);t\u003de?e.call(r,t):void 0}catch(t){try{y(n)}finally{throw t}}return y(n),t}}});var S\u003dfunction Observable(t){s(this,S,\"Observable\",\"_f\")._f\u003da(t)};l(S.prototype,{subscribe:function subscribe(t){return new b(t,this._f)},forEach:function forEach(t){var n\u003dthis;return new(o.Promise||i.Promise)(function(r,e){a(t);var i\u003dn.subscribe({next:function(n){try{return t(n)}catch(t){e(t),i.unsubscribe()}},error:e,complete:r})})}}),l(S,{from:function from(t){var n\u003d\"function\"\u003d\u003dtypeof this?this:S,r\u003dd(f(t)[c]);if(r){var e\u003df(r.call(t));return e.constructor\u003d\u003d\u003dn?e:new n(function(t){return e.subscribe(t)})}return new n(function(n){var r\u003d!1;return u(function(){if(!r){try{if(v(t,!1,function(t){if(n.next(t),r)return p})\u003d\u003d\u003dp)return}catch(t){if(r)throw t;return void n.error(t)}n.complete()}}),function(){r\u003d!0}})},of:function of(){for(var t\u003d0,n\u003darguments.length,r\u003dArray(n);t\u003cn;)r[t]\u003darguments[t++];return new(\"function\"\u003d\u003dtypeof this?this:S)(function(t){var n\u003d!1;return u(function(){if(!n){for(var e\u003d0;e\u003cr.length;++e)if(t.next(r[e]),n)return;t.complete()}}),function(){n\u003d!0}})}}),h(S.prototype,c,function(){return this}),e(e.G,{Observable:S}),t(100)(\"Observable\")},{100:100,128:128,23:23,3:3,33:33,39:39,40:40,42:42,6:6,68:68,7:7,93:93}],297:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(23),o\u003dt(40),u\u003dt(104),c\u003dt(91);e(e.P+e.R,\"Promise\",{finally:function(t){var n\u003du(this,i.Promise||o.Promise),r\u003d\"function\"\u003d\u003dtypeof t;return this.then(r?function(r){return c(n,t()).then(function(){return r})}:t,r?function(r){return c(n,t()).then(function(){throw r})}:t)}})},{104:104,23:23,33:33,40:40,91:91}],298:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(69),o\u003dt(90);e(e.S,\"Promise\",{try:function(t){var n\u003di.f(this),r\u003do(t);return(r.e?n.reject:n.resolve)(r.v),n.promise}})},{33:33,69:69,90:90}],299:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.key,u\u003de.set;e.exp({defineMetadata:function defineMetadata(t,n,r,e){u(t,n,i(r),o(e))}})},{67:67,7:7}],300:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.key,u\u003de.map,c\u003de.store;e.exp({deleteMetadata:function deleteMetadata(t,n){var r\u003darguments.length\u003c3?void 0:o(arguments[2]),e\u003du(i(n),r,!1);if(void 0\u003d\u003d\u003de||!e.delete(t))return!1;if(e.size)return!0;var a\u003dc.get(n);return a.delete(r),!!a.size||c.delete(n)}})},{67:67,7:7}],301:[function(t,n,r){var e\u003dt(231),i\u003dt(10),o\u003dt(67),u\u003dt(7),c\u003dt(79),a\u003do.keys,f\u003do.key,s\u003dfunction(t,n){var r\u003da(t,n),o\u003dc(t);if(null\u003d\u003d\u003do)return r;var u\u003ds(o,n);return u.length?r.length?i(new e(r.concat(u))):u:r};o.exp({getMetadataKeys:function getMetadataKeys(t){return s(u(t),arguments.length\u003c2?void 0:f(arguments[1]))}})},{10:10,231:231,67:67,7:7,79:79}],302:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003dt(79),u\u003de.has,c\u003de.get,a\u003de.key,f\u003dfunction(t,n,r){if(u(t,n,r))return c(t,n,r);var e\u003do(n);return null!\u003d\u003de?f(t,e,r):void 0};e.exp({getMetadata:function getMetadata(t,n){return f(t,i(n),arguments.length\u003c3?void 0:a(arguments[2]))}})},{67:67,7:7,79:79}],303:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.keys,u\u003de.key;e.exp({getOwnMetadataKeys:function getOwnMetadataKeys(t){return o(i(t),arguments.length\u003c2?void 0:u(arguments[1]))}})},{67:67,7:7}],304:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.get,u\u003de.key;e.exp({getOwnMetadata:function getOwnMetadata(t,n){return o(t,i(n),arguments.length\u003c3?void 0:u(arguments[2]))}})},{67:67,7:7}],305:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003dt(79),u\u003de.has,c\u003de.key,a\u003dfunction(t,n,r){if(u(t,n,r))return!0;var e\u003do(n);return null!\u003d\u003de\u0026\u0026a(t,e,r)};e.exp({hasMetadata:function hasMetadata(t,n){return a(t,i(n),arguments.length\u003c3?void 0:c(arguments[2]))}})},{67:67,7:7,79:79}],306:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.has,u\u003de.key;e.exp({hasOwnMetadata:function hasOwnMetadata(t,n){return o(t,i(n),arguments.length\u003c3?void 0:u(arguments[2]))}})},{67:67,7:7}],307:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003dt(3),u\u003de.key,c\u003de.set;e.exp({metadata:function metadata(t,n){return function decorator(r,e){c(t,n,(void 0!\u003d\u003de?i:o)(r),u(e))}}})},{3:3,67:67,7:7}],308:[function(t,n,r){t(97)(\"Set\")},{97:97}],309:[function(t,n,r){t(98)(\"Set\")},{98:98}],310:[function(t,n,r){var e\u003dt(33);e(e.P+e.R,\"Set\",{toJSON:t(20)(\"Set\")})},{20:20,33:33}],311:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(106)(!0);e(e.P,\"String\",{at:function at(t){return i(this,t)}})},{106:106,33:33}],312:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(28),o\u003dt(118),u\u003dt(52),c\u003dt(37),a\u003dRegExp.prototype,f\u003dfunction(t,n){this._r\u003dt,this._s\u003dn};t(54)(f,\"RegExp String\",function next(){var t\u003dthis._r.exec(this._s);return{value:t,done:null\u003d\u003d\u003dt}}),e(e.P,\"String\",{matchAll:function matchAll(t){if(i(this),!u(t))throw TypeError(t+\" is not a regexp!\");var n\u003dString(this),r\u003d\"flags\"in a?String(t.flags):c.call(t),e\u003dnew RegExp(t.source,~r.indexOf(\"g\")?r:\"g\"+r);return e.lastIndex\u003do(t.lastIndex),new f(e,n)}})},{118:118,28:28,33:33,37:37,52:52,54:54}],313:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(109);e(e.P,\"String\",{padEnd:function padEnd(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0,!1)}})},{109:109,33:33}],314:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(109);e(e.P,\"String\",{padStart:function padStart(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0,!0)}})},{109:109,33:33}],315:[function(t,n,r){\"use strict\";t(111)(\"trimLeft\",function(t){return function trimLeft(){return t(this,1)}},\"trimStart\")},{111:111}],316:[function(t,n,r){\"use strict\";t(111)(\"trimRight\",function(t){return function trimRight(){return t(this,2)}},\"trimEnd\")},{111:111}],317:[function(t,n,r){t(126)(\"asyncIterator\")},{126:126}],318:[function(t,n,r){t(126)(\"observable\")},{126:126}],319:[function(t,n,r){var e\u003dt(33);e(e.S,\"System\",{global:t(40)})},{33:33,40:40}],320:[function(t,n,r){t(97)(\"WeakMap\")},{97:97}],321:[function(t,n,r){t(98)(\"WeakMap\")},{98:98}],322:[function(t,n,r){t(97)(\"WeakSet\")},{97:97}],323:[function(t,n,r){t(98)(\"WeakSet\")},{98:98}],324:[function(t,n,r){for(var e\u003dt(141),i\u003dt(81),o\u003dt(94),u\u003dt(40),c\u003dt(42),a\u003dt(58),f\u003dt(128),s\u003df(\"iterator\"),l\u003df(\"toStringTag\"),h\u003da.Array,v\u003d{CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},p\u003di(v),d\u003d0;d\u003cp.length;d++){var y,g\u003dp[d],m\u003dv[g],b\u003du[g],x\u003db\u0026\u0026b.prototype;if(x\u0026\u0026(x[s]||c(x,s,h),x[l]||c(x,l,g),a[g]\u003dh,m))for(y in e)x[y]||o(x,y,e[y],!0)}},{128:128,141:141,40:40,42:42,58:58,81:81,94:94}],325:[function(t,n,r){var e\u003dt(33),i\u003dt(113);e(e.G+e.B,{setImmediate:i.set,clearImmediate:i.clear})},{113:113,33:33}],326:[function(t,n,r){var e\u003dt(40),i\u003dt(33),o\u003dt(46),u\u003dt(88),c\u003de.navigator,a\u003d!!c\u0026\u0026/MSIE .\\./.test(c.userAgent),f\u003dfunction(t){return a?function(n,r){return t(o(u,[].slice.call(arguments,2),\"function\"\u003d\u003dtypeof n?n:Function(n)),r)}:t};i(i.G+i.B+i.F*a,{setTimeout:f(e.setTimeout),setInterval:f(e.setInterval)})},{33:33,40:40,46:46,88:88}],327:[function(t,n,r){t(254),t(191),t(193),t(192),t(195),t(197),t(202),t(196),t(194),t(204),t(203),t(199),t(200),t(198),t(190),t(201),t(205),t(206),t(157),t(159),t(158),t(208),t(207),t(178),t(188),t(189),t(179),t(180),t(181),t(182),t(183),t(184),t(185),t(186),t(187),t(161),t(162),t(163),t(164),t(165),t(166),t(167),t(168),t(169),t(170),t(171),t(172),t(173),t(174),t(175),t(176),t(177),t(241),t(246),t(253),t(244),t(236),t(237),t(242),t(247),t(249),t(232),t(233),t(234),t(235),t(238),t(239),t(240),t(243),t(245),t(248),t(250),t(251),t(252),t(152),t(154),t(153),t(156),t(155),t(140),t(138),t(145),t(142),t(148),t(150),t(137),t(144),t(134),t(149),t(132),t(147),t(146),t(139),t(143),t(131),t(133),t(136),t(135),t(151),t(141),t(224),t(230),t(225),t(226),t(227),t(228),t(229),t(209),t(160),t(231),t(266),t(267),t(255),t(256),t(261),t(264),t(265),t(259),t(262),t(260),t(263),t(257),t(258),t(210),t(211),t(212),t(213),t(214),t(217),t(215),t(216),t(218),t(219),t(220),t(221),t(223),t(222),t(270),t(268),t(269),t(311),t(314),t(313),t(315),t(316),t(312),t(317),t(318),t(292),t(295),t(291),t(289),t(290),t(293),t(294),t(276),t(310),t(275),t(309),t(321),t(323),t(274),t(308),t(320),t(322),t(273),t(319),t(272),t(277),t(278),t(279),t(280),t(281),t(283),t(282),t(284),t(285),t(286),t(288),t(287),t(297),t(298),t(299),t(300),t(302),t(301),t(304),t(303),t(305),t(306),t(307),t(271),t(296),t(326),t(325),t(324),n.exports\u003dt(23)},{131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"186:186,187:187,188:188,189:189,190:190,191:191,192:192,193:193,194:194,195:195,196:196,197:197,198:198,199:199,200:200,201:201,202:202,203:203,204:204,205:205,206:206,207:207,208:208,209:209,210:210,211:211,212:212,213:213,214:214,215:215,216:216,217:217,218:218,219:219,220:220,221:221,222:222,223:223,224:224,225:225,226:226,227:227,228:228,229:229,23:23,230:230,231:231,232:232,233:233,234:234,235:235,236:236,237:237,238:238,239:239,240:240,241:241,242:242,243:243,244:244,245:245,246:246,247:247,248:248,249:249,250:250,251:251,252:252,253:253,254:254,255:255,256:256,257:257,258:258,259:259,260:260,261:261,262:262,263:263,264:264,265:265,266:266,267:267,268:268,269:269,270:270,271:271,272:272,273:273,274:274,275:275,276:276,277:277,278:278,279:279,280:280,281:281,282:282,283:283,284:284,285:285,286:286,287:287,288:288,289:289,290:290,291:291,292:292,293:293,294:294,295:295,296:296,297:297,298:298,299:299,300:300,301:301,302:302,303:303,304:304,305:305,306:306,307:307,308:308,309:309,310:310,311:311,312:312,313:313,314:314,315:315,316:316,317:317,318:318,319:319,320:320,321:321,322:322,323:323,324:324,325:325,326:326}],328:[function(t,n,r){(function(t){!function(t){\"use strict\";function wrap(t,n,r,e){var i\u003dn\u0026\u0026n.prototype instanceof Generator?n:Generator,o\u003dObject.create(i.prototype),u\u003dnew Context(e||[]);return o._invoke\u003dmakeInvokeMethod(t,r,u),o}function tryCatch(t,n,r){try{return{type:\"normal\",arg:t.call(n,r)}}catch(t){return{type:\"throw\",arg:t}}}function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}function defineIteratorMethods(t){[\"next\",\"throw\",\"return\"].forEach(function(n){t[n]\u003dfunction(t){return this._invoke(n,t)}})}function AsyncIterator(n){function invoke(t,r,e,o){var u\u003dtryCatch(n[t],n,r);if(\"throw\"!\u003d\u003du.type){var c\u003du.arg,a\u003dc.value;return a\u0026\u0026\"object\"\u003d\u003dtypeof a\u0026\u0026i.call(a,\"__await\")?Promise.resolve(a.__await).then(function(t){invoke(\"next\",t,e,o)},function(t){invoke(\"throw\",t,e,o)}):Promise.resolve(a).then(function(t){c.value\u003dt,e(c)},o)}o(u.arg)}function enqueue(t,n){function callInvokeWithMethodAndArg(){return new Promise(function(r,e){invoke(t,n,r,e)})}return r\u003dr?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}\"object\"\u003d\u003dtypeof t.process\u0026\u0026t.process.domain\u0026\u0026(invoke\u003dt.process.domain.bind(invoke));var r;this._invoke\u003denqueue}function makeInvokeMethod(t,n,r){var e\u003dl;return function invoke(i,o){if(e\u003d\u003d\u003dv)throw new Error(\"Generator is already running\");if(e\u003d\u003d\u003dp){if(\"throw\"\u003d\u003d\u003di)throw o;return doneResult()}for(r.method\u003di,r.arg\u003do;;){var u\u003dr.delegate;if(u){var c\u003dmaybeInvokeDelegate(u,r);if(c){if(c\u003d\u003d\u003dd)continue;return c}}if(\"next\"\u003d\u003d\u003dr.method)r.sent\u003dr._sent\u003dr.arg;else if(\"throw\"\u003d\u003d\u003dr.method){if(e\u003d\u003d\u003dl)throw e\u003dp,r.arg;r.dispatchException(r.arg)}else\"return\"\u003d\u003d\u003dr.method\u0026\u0026r.abrupt(\"return\",r.arg);e\u003dv;var a\u003dtryCatch(t,n,r);if(\"normal\"\u003d\u003d\u003da.type){if(e\u003dr.done?p:h,a.arg\u003d\u003d\u003dd)continue;return{value:a.arg,done:r.done}}\"throw\"\u003d\u003d\u003da.type\u0026\u0026(e\u003dp,r.method\u003d\"throw\",r.arg\u003da.arg)}}}function maybeInvokeDelegate(t,n){var e\u003dt.iterator[n.method];if(e\u003d\u003d\u003dr){if(n.delegate\u003dnull,\"throw\"\u003d\u003d\u003dn.method){if(t.iterator.return\u0026\u0026(n.method\u003d\"return\",n.arg\u003dr,maybeInvokeDelegate(t,n),\"throw\"\u003d\u003d\u003dn.method))return d;n.method\u003d\"throw\",n.arg\u003dnew TypeError(\"The iterator does not provide a \u0027throw\u0027 method\")}return d}var i\u003dtryCatch(e,t.iterator,n.arg);if(\"throw\"\u003d\u003d\u003di.type)return n.method\u003d\"throw\",n.arg\u003di.arg,n.delegate\u003dnull,d;var o\u003di.arg;return o?o.done?(n[t.resultName]\u003do.value,n.next\u003dt.nextLoc,\"return\"!\u003d\u003dn.method\u0026\u0026(n.method\u003d\"next\",n.arg\u003dr),n.delegate\u003dnull,d):o:(n.method\u003d\"throw\",n.arg\u003dnew TypeError(\"iterator result is not an object\"),n.delegate\u003dnull,d)}function pushTryEntry(t){var n\u003d{tryLoc:t[0]};1 in t\u0026\u0026(n.catchLoc\u003dt[1]),2 in t\u0026\u0026(n.finallyLoc\u003dt[2],n.afterLoc\u003dt[3]),this.tryEntries.push(n)}function resetTryEntry(t){var n\u003dt.completion||{};n.type\u003d\"normal\",delete n.arg,t.completion\u003dn}function Context(t){this.tryEntries\u003d[{tryLoc:\"root\"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(t){if(t){var n\u003dt[u];if(n)return n.call(t);if(\"function\"\u003d\u003dtypeof t.next)return t;if(!isNaN(t.length)){var e\u003d-1,o\u003dfunction next(){for(;++e\u003ct.length;)if(i.call(t,e))return next.value\u003dt[e],next.done\u003d!1,next;return next.value\u003dr,next.done\u003d!0,next};return o.next\u003do}}return{next:doneResult}}function doneResult(){return{value:r,done:!0}}var r,e\u003dObject.prototype,i\u003de.hasOwnProperty,o\u003d\"function\"\u003d\u003dtypeof Symbol?Symbol:{},u\u003do.iterator||\"@@iterator\",c\u003do.asyncIterator||\"@@asyncIterator\",a\u003do.toStringTag||\"@@toStringTag\",f\u003d\"object\"\u003d\u003dtypeof n,s\u003dt.regeneratorRuntime;if(s)return void(f\u0026\u0026(n.exports\u003ds));s\u003dt.regeneratorRuntime\u003df?n.exports:{},s.wrap\u003dwrap;var l\u003d\"suspendedStart\",h\u003d\"suspendedYield\",v\u003d\"executing\",p\u003d\"completed\",d\u003d{},y\u003d{};y[u]\u003dfunction(){return this};var g\u003dObject.getPrototypeOf,m\u003dg\u0026\u0026g(g(values([])));m\u0026\u0026m!\u003d\u003de\u0026\u0026i.call(m,u)\u0026\u0026(y\u003dm);var b\u003dGeneratorFunctionPrototype.prototype\u003dGenerator.prototype\u003dObject.create(y);GeneratorFunction.prototype\u003db.constructor\u003dGeneratorFunctionPrototype,GeneratorFunctionPrototype.constructor\u003dGeneratorFunction,GeneratorFunctionPrototype[a]\u003dGeneratorFunction.displayName\u003d\"GeneratorFunction\",s.isGeneratorFunction\u003dfunction(t){var n\u003d\"function\"\u003d\u003dtypeof t\u0026\u0026t.constructor;return!!n\u0026\u0026(n\u003d\u003d\u003dGeneratorFunction||\"GeneratorFunction\"\u003d\u003d\u003d(n.displayName||n.name))},s.mark\u003dfunction(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,GeneratorFunctionPrototype):(t.__proto__\u003dGeneratorFunctionPrototype,a in t||(t[a]\u003d\"GeneratorFunction\")),t.prototype\u003dObject.create(b),t},s.awrap\u003dfunction(t){return{__await:t}},defineIteratorMethods(AsyncIterator.prototype),AsyncIterator.prototype[c]\u003dfunction(){return this},s.AsyncIterator\u003dAsyncIterator,s.async\u003dfunction(t,n,r,e){var i\u003dnew AsyncIterator(wrap(t,n,r,e));return s.isGeneratorFunction(n)?i:i.next().then(function(t){return t.done?t.value:i.next()})},defineIteratorMethods(b),b[a]\u003d\"Generator\",b[u]\u003dfunction(){return this},b.toString\u003dfunction(){return\"[object Generator]\"},s.keys\u003dfunction(t){var n\u003d[];for(var r in t)n.push(r);return n.reverse(),function next(){for(;n.length;){var r\u003dn.pop();if(r in t)return next.value\u003dr,next.done\u003d!1,next}return next.done\u003d!0,next}},s.values\u003dvalues,Context.prototype\u003d{constructor:Context,reset:function(t){if(this.prev\u003d0,this.next\u003d0,this.sent\u003dthis._sent\u003dr,this.done\u003d!1,this.delegate\u003dnull,this.method\u003d\"next\",this.arg\u003dr,this.tryEntries.forEach(resetTryEntry),!t)for(var n in this)\"t\"\u003d\u003d\u003dn.charAt(0)\u0026\u0026i.call(this,n)\u0026\u0026!isNaN(+n.slice(1))\u0026\u0026(this[n]\u003dr)},stop:function(){this.done\u003d!0;var t\u003dthis.tryEntries[0],n\u003dt.completion;if(\"throw\"\u003d\u003d\u003dn.type)throw n.arg;return this.rval},dispatchException:function(t){function handle(e,i){return u.type\u003d\"throw\",u.arg\u003dt,n.next\u003de,i\u0026\u0026(n.method\u003d\"next\",n.arg\u003dr),!!i}if(this.done)throw t;for(var n\u003dthis,e\u003dthis.tryEntries.length-1;e\u003e\u003d0;--e){var o\u003dthis.tryEntries[e],u\u003do.completion;if(\"root\"\u003d\u003d\u003do.tryLoc)return handle(\"end\");if(o.tryLoc\u003c\u003dthis.prev){var c\u003di.call(o,\"catchLoc\"),a\u003di.call(o,\"finallyLoc\");if(c\u0026\u0026a){if(this.prev\u003co.catchLoc)return handle(o.catchLoc,!0);if(this.prev\u003co.finallyLoc)return handle(o.finallyLoc)}else if(c){if(this.prev\u003co.catchLoc)return handle(o.catchLoc,!0)}else{if(!a)throw new Error(\"try statement without catch or finally\");if(this.prev\u003co.finallyLoc)return handle(o.finallyLoc)}}}},abrupt:function(t,n){for(var r\u003dthis.tryEntries.length-1;r\u003e\u003d0;--r){var e\u003dthis.tryEntries[r];if(e.tryLoc\u003c\u003dthis.prev\u0026\u0026i.call(e,\"finallyLoc\")\u0026\u0026this.prev\u003ce.finallyLoc){var o\u003de;break}}o\u0026\u0026(\"break\"\u003d\u003d\u003dt||\"continue\"\u003d\u003d\u003dt)\u0026\u0026o.tryLoc\u003c\u003dn\u0026\u0026n\u003c\u003do.finallyLoc\u0026\u0026(o\u003dnull);var u\u003do?o.completion:{};return u.type\u003dt,u.arg\u003dn,o?(this.method\u003d\"next\",this.next\u003do.finallyLoc,d):this.complete(u)},complete:function(t,n){if(\"throw\"\u003d\u003d\u003dt.type)throw t.arg;return\"break\"\u003d\u003d\u003dt.type||\"continue\"\u003d\u003d\u003dt.type?this.next\u003dt.arg:\"return\"\u003d\u003d\u003dt.type?(this.rval\u003dthis.arg\u003dt.arg,this.method\u003d\"return\",this.next\u003d\"end\"):\"normal\"\u003d\u003d\u003dt.type\u0026\u0026n\u0026\u0026(this.next\u003dn),d},finish:function(t){for(var n\u003dthis.tryEntries.length-1;n\u003e\u003d0;--n){var r\u003dthis.tryEntries[n];if(r.finallyLoc\u003d\u003d\u003dt)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),d}},catch:function(t){for(var n\u003dthis.tryEntries.length-1;n\u003e\u003d0;--n){var r\u003dthis.tryEntries[n];if(r.tryLoc\u003d\u003d\u003dt){var e\u003dr.completion;if(\"throw\"\u003d\u003d\u003de.type){var i\u003de.arg;resetTryEntry(r)}return i}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,n,e){return this.delegate\u003d{iterator:values(t),resultName:n,nextLoc:e},\"next\"\u003d\u003d\u003dthis.method\u0026\u0026(this.arg\u003dr),d}}}(\"object\"\u003d\u003dtypeof t?t:\"object\"\u003d\u003dtypeof window?window:\"object\"\u003d\u003dtypeof self?self:this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{}]},{},[1]);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/js/vue.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Vue.js v2.6.14"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * (c) 2014-2021 Evan You"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Released under the MIT License."},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"!function(e,t){\"object\"\u003d\u003dtypeof exports\u0026\u0026\"undefined\"!\u003dtypeof module?module.exports\u003dt():\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define(t):(e\u003de||self).Vue\u003dt()}(this,function(){\"use strict\";var e\u003dObject.freeze({});function t(e){return null\u003d\u003de}function n(e){return null!\u003de}function r(e){return!0\u003d\u003d\u003de}function i(e){return\"string\"\u003d\u003dtypeof e||\"number\"\u003d\u003dtypeof e||\"symbol\"\u003d\u003dtypeof e||\"boolean\"\u003d\u003dtypeof e}function o(e){return null!\u003d\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e}var a\u003dObject.prototype.toString;function s(e){return\"[object Object]\"\u003d\u003d\u003da.call(e)}function c(e){var t\u003dparseFloat(String(e));return t\u003e\u003d0\u0026\u0026Math.floor(t)\u003d\u003d\u003dt\u0026\u0026isFinite(e)}function u(e){return n(e)\u0026\u0026\"function\"\u003d\u003dtypeof e.then\u0026\u0026\"function\"\u003d\u003dtypeof e.catch}function l(e){return null\u003d\u003de?\"\":Array.isArray(e)||s(e)\u0026\u0026e.toString\u003d\u003d\u003da?JSON.stringify(e,null,2):String(e)}function f(e){var t\u003dparseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n\u003dObject.create(null),r\u003de.split(\",\"),i\u003d0;i\u003cr.length;i++)n[r[i]]\u003d!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var d\u003dp(\"slot,component\",!0),v\u003dp(\"key,ref,slot,slot-scope,is\");function h(e,t){if(e.length){var n\u003de.indexOf(t);if(n\u003e-1)return e.splice(n,1)}}var m\u003dObject.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t\u003dObject.create(null);return function(n){return t[n]||(t[n]\u003de(n))}}var _\u003d/-(\\w)/g,b\u003dg(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():\"\"})}),$\u003dg(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w\u003d/\\B([A-Z])/g,C\u003dg(function(e){return e.replace(w,\"-$1\").toLowerCase()});var x\u003dFunction.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r\u003darguments.length;return r?r\u003e1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length\u003de.length,n};function k(e,t){t\u003dt||0;for(var n\u003de.length-t,r\u003dnew Array(n);n--;)r[n]\u003de[n+t];return r}function A(e,t){for(var n in t)e[n]\u003dt[n];return e}function O(e){for(var t\u003d{},n\u003d0;n\u003ce.length;n++)e[n]\u0026\u0026A(t,e[n]);return t}function S(e,t,n){}var T\u003dfunction(e,t,n){return!1},N\u003dfunction(e){return e};function E(e,t){if(e\u003d\u003d\u003dt)return!0;var n\u003do(e),r\u003do(t);if(!n||!r)return!n\u0026\u0026!r\u0026\u0026String(e)\u003d\u003d\u003dString(t);try{var i\u003dArray.isArray(e),a\u003dArray.isArray(t);if(i\u0026\u0026a)return e.length\u003d\u003d\u003dt.length\u0026\u0026e.every(function(e,n){return E(e,t[n])});if(e instanceof Date\u0026\u0026t instanceof Date)return e.getTime()\u003d\u003d\u003dt.getTime();if(i||a)return!1;var s\u003dObject.keys(e),c\u003dObject.keys(t);return s.length\u003d\u003d\u003dc.length\u0026\u0026s.every(function(n){return E(e[n],t[n])})}catch(e){return!1}}function j(e,t){for(var n\u003d0;n\u003ce.length;n++)if(E(e[n],t))return n;return-1}function D(e){var t\u003d!1;return function(){t||(t\u003d!0,e.apply(this,arguments))}}var L\u003d\"data-server-rendered\",I\u003d[\"component\",\"directive\",\"filter\"],M\u003d[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\",\"errorCaptured\",\"serverPrefetch\"],F\u003d{optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:T,isReservedAttr:T,isUnknownElement:T,getTagNamespace:S,parsePlatformTagName:N,mustUseProp:T,async:!0,_lifecycleHooks:M},P\u003d/a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;function R(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var H\u003dnew RegExp(\"[^\"+P.source+\".$_\\\\d]\");var B,U\u003d\"__proto__\"in{},V\u003d\"undefined\"!\u003dtypeof window,z\u003d\"undefined\"!\u003dtypeof WXEnvironment\u0026\u0026!!WXEnvironment.platform,K\u003dz\u0026\u0026WXEnvironment.platform.toLowerCase(),J\u003dV\u0026\u0026window.navigator.userAgent.toLowerCase(),q\u003dJ\u0026\u0026/msie|trident/.test(J),W\u003dJ\u0026\u0026J.indexOf(\"msie 9.0\")\u003e0,Z\u003dJ\u0026\u0026J.indexOf(\"edge/\")\u003e0,G\u003d(J\u0026\u0026J.indexOf(\"android\"),J\u0026\u0026/iphone|ipad|ipod|ios/.test(J)||\"ios\"\u003d\u003d\u003dK),X\u003d(J\u0026\u0026/chrome\\/\\d+/.test(J),J\u0026\u0026/phantomjs/.test(J),J\u0026\u0026J.match(/firefox\\/(\\d+)/)),Y\u003d{}.watch,Q\u003d!1;if(V)try{var ee\u003d{};Object.defineProperty(ee,\"passive\",{get:function(){Q\u003d!0}}),window.addEventListener(\"test-passive\",null,ee)}catch(e){}var te\u003dfunction(){return void 0\u003d\u003d\u003dB\u0026\u0026(B\u003d!V\u0026\u0026!z\u0026\u0026\"undefined\"!\u003dtypeof global\u0026\u0026(global.process\u0026\u0026\"server\"\u003d\u003d\u003dglobal.process.env.VUE_ENV)),B},ne\u003dV\u0026\u0026window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return\"function\"\u003d\u003dtypeof e\u0026\u0026/native code/.test(e.toString())}var ie,oe\u003d\"undefined\"!\u003dtypeof Symbol\u0026\u0026re(Symbol)\u0026\u0026\"undefined\"!\u003dtypeof Reflect\u0026\u0026re(Reflect.ownKeys);ie\u003d\"undefined\"!\u003dtypeof Set\u0026\u0026re(Set)?Set:function(){function e(){this.set\u003dObject.create(null)}return e.prototype.has\u003dfunction(e){return!0\u003d\u003d\u003dthis.set[e]},e.prototype.add\u003dfunction(e){this.set[e]\u003d!0},e.prototype.clear\u003dfunction(){this.set\u003dObject.create(null)},e}();var ae\u003dS,se\u003d0,ce\u003dfunction(){this.id\u003dse++,this.subs\u003d[]};ce.prototype.addSub\u003dfunction(e){this.subs.push(e)},ce.prototype.removeSub\u003dfunction(e){h(this.subs,e)},ce.prototype.depend\u003dfunction(){ce.target\u0026\u0026ce.target.addDep(this)},ce.prototype.notify\u003dfunction(){for(var e\u003dthis.subs.slice(),t\u003d0,n\u003de.length;t\u003cn;t++)e[t].update()},ce.target\u003dnull;var ue\u003d[];function le(e){ue.push(e),ce.target\u003de}function fe(){ue.pop(),ce.target\u003due[ue.length-1]}var pe\u003dfunction(e,t,n,r,i,o,a,s){this.tag\u003de,this.data\u003dt,this.children\u003dn,this.text\u003dr,this.elm\u003di,this.ns\u003dvoid 0,this.context\u003do,this.fnContext\u003dvoid 0,this.fnOptions\u003dvoid 0,this.fnScopeId\u003dvoid 0,this.key\u003dt\u0026\u0026t.key,this.componentOptions\u003da,this.componentInstance\u003dvoid 0,this.parent\u003dvoid 0,this.raw\u003d!1,this.isStatic\u003d!1,this.isRootInsert\u003d!0,this.isComment\u003d!1,this.isCloned\u003d!1,this.isOnce\u003d!1,this.asyncFactory\u003ds,this.asyncMeta\u003dvoid 0,this.isAsyncPlaceholder\u003d!1},de\u003d{child:{configurable:!0}};de.child.get\u003dfunction(){return this.componentInstance},Object.defineProperties(pe.prototype,de);var ve\u003dfunction(e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"\");var t\u003dnew pe;return t.text\u003de,t.isComment\u003d!0,t};function he(e){return new pe(void 0,void 0,void 0,String(e))}function me(e){var t\u003dnew pe(e.tag,e.data,e.children\u0026\u0026e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns\u003de.ns,t.isStatic\u003de.isStatic,t.key\u003de.key,t.isComment\u003de.isComment,t.fnContext\u003de.fnContext,t.fnOptions\u003de.fnOptions,t.fnScopeId\u003de.fnScopeId,t.asyncMeta\u003de.asyncMeta,t.isCloned\u003d!0,t}var ye\u003dArray.prototype,ge\u003dObject.create(ye);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach(function(e){var t\u003dye[e];R(ge,e,function(){for(var n\u003d[],r\u003darguments.length;r--;)n[r]\u003darguments[r];var i,o\u003dt.apply(this,n),a\u003dthis.__ob__;switch(e){case\"push\":case\"unshift\":i\u003dn;break;case\"splice\":i\u003dn.slice(2)}return i\u0026\u0026a.observeArray(i),a.dep.notify(),o})});var _e\u003dObject.getOwnPropertyNames(ge),be\u003d!0;function $e(e){be\u003de}var we\u003dfunction(e){var t;this.value\u003de,this.dep\u003dnew ce,this.vmCount\u003d0,R(e,\"__ob__\",this),Array.isArray(e)?(U?(t\u003dge,e.__proto__\u003dt):function(e,t,n){for(var r\u003d0,i\u003dn.length;r\u003ci;r++){var o\u003dn[r];R(e,o,t[o])}}(e,ge,_e),this.observeArray(e)):this.walk(e)};function Ce(e,t){var n;if(o(e)\u0026\u0026!(e instanceof pe))return y(e,\"__ob__\")\u0026\u0026e.__ob__ instanceof we?n\u003de.__ob__:be\u0026\u0026!te()\u0026\u0026(Array.isArray(e)||s(e))\u0026\u0026Object.isExtensible(e)\u0026\u0026!e._isVue\u0026\u0026(n\u003dnew we(e)),t\u0026\u0026n\u0026\u0026n.vmCount++,n}function xe(e,t,n,r,i){var o\u003dnew ce,a\u003dObject.getOwnPropertyDescriptor(e,t);if(!a||!1!\u003d\u003da.configurable){var s\u003da\u0026\u0026a.get,c\u003da\u0026\u0026a.set;s\u0026\u0026!c||2!\u003d\u003darguments.length||(n\u003de[t]);var u\u003d!i\u0026\u0026Ce(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t\u003ds?s.call(e):n;return ce.target\u0026\u0026(o.depend(),u\u0026\u0026(u.dep.depend(),Array.isArray(t)\u0026\u0026function e(t){for(var n\u003dvoid 0,r\u003d0,i\u003dt.length;r\u003ci;r++)(n\u003dt[r])\u0026\u0026n.__ob__\u0026\u0026n.__ob__.dep.depend(),Array.isArray(n)\u0026\u0026e(n)}(t))),t},set:function(t){var r\u003ds?s.call(e):n;t\u003d\u003d\u003dr||t!\u003dt\u0026\u0026r!\u003dr||s\u0026\u0026!c||(c?c.call(e,t):n\u003dt,u\u003d!i\u0026\u0026Ce(t),o.notify())}})}}function ke(e,t,n){if(Array.isArray(e)\u0026\u0026c(t))return e.length\u003dMath.max(e.length,t),e.splice(t,1,n),n;if(t in e\u0026\u0026!(t in Object.prototype))return e[t]\u003dn,n;var r\u003de.__ob__;return e._isVue||r\u0026\u0026r.vmCount?n:r?(xe(r.value,t,n),r.dep.notify(),n):(e[t]\u003dn,n)}function Ae(e,t){if(Array.isArray(e)\u0026\u0026c(t))e.splice(t,1);else{var n\u003de.__ob__;e._isVue||n\u0026\u0026n.vmCount||y(e,t)\u0026\u0026(delete e[t],n\u0026\u0026n.dep.notify())}}we.prototype.walk\u003dfunction(e){for(var t\u003dObject.keys(e),n\u003d0;n\u003ct.length;n++)xe(e,t[n])},we.prototype.observeArray\u003dfunction(e){for(var t\u003d0,n\u003de.length;t\u003cn;t++)Ce(e[t])};var Oe\u003dF.optionMergeStrategies;function Se(e,t){if(!t)return e;for(var n,r,i,o\u003doe?Reflect.ownKeys(t):Object.keys(t),a\u003d0;a\u003co.length;a++)\"__ob__\"!\u003d\u003d(n\u003do[a])\u0026\u0026(r\u003de[n],i\u003dt[n],y(e,n)?r!\u003d\u003di\u0026\u0026s(r)\u0026\u0026s(i)\u0026\u0026Se(r,i):ke(e,n,i));return e}function Te(e,t,n){return n?function(){var r\u003d\"function\"\u003d\u003dtypeof t?t.call(n,n):t,i\u003d\"function\"\u003d\u003dtypeof e?e.call(n,n):e;return r?Se(r,i):i}:t?e?function(){return Se(\"function\"\u003d\u003dtypeof t?t.call(this,this):t,\"function\"\u003d\u003dtypeof e?e.call(this,this):e)}:t:e}function Ne(e,t){var n\u003dt?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n?function(e){for(var t\u003d[],n\u003d0;n\u003ce.length;n++)-1\u003d\u003d\u003dt.indexOf(e[n])\u0026\u0026t.push(e[n]);return t}(n):n}function Ee(e,t,n,r){var i\u003dObject.create(e||null);return t?A(i,t):i}Oe.data\u003dfunction(e,t,n){return n?Te(e,t,n):t\u0026\u0026\"function\"!\u003dtypeof t?e:Te(e,t)},M.forEach(function(e){Oe[e]\u003dNe}),I.forEach(function(e){Oe[e+\"s\"]\u003dEe}),Oe.watch\u003dfunction(e,t,n,r){if(e\u003d\u003d\u003dY\u0026\u0026(e\u003dvoid 0),t\u003d\u003d\u003dY\u0026\u0026(t\u003dvoid 0),!t)return Object.create(e||null);if(!e)return t;var i\u003d{};for(var o in A(i,e),t){var a\u003di[o],s\u003dt[o];a\u0026\u0026!Array.isArray(a)\u0026\u0026(a\u003d[a]),i[o]\u003da?a.concat(s):Array.isArray(s)?s:[s]}return i},Oe.props\u003dOe.methods\u003dOe.inject\u003dOe.computed\u003dfunction(e,t,n,r){if(!e)return t;var i\u003dObject.create(null);return A(i,e),t\u0026\u0026A(i,t),i},Oe.provide\u003dTe;var je\u003dfunction(e,t){return void 0\u003d\u003d\u003dt?e:t};function De(e,t,n){if(\"function\"\u003d\u003dtypeof t\u0026\u0026(t\u003dt.options),function(e,t){var n\u003de.props;if(n){var r,i,o\u003d{};if(Array.isArray(n))for(r\u003dn.length;r--;)\"string\"\u003d\u003dtypeof(i\u003dn[r])\u0026\u0026(o[b(i)]\u003d{type:null});else if(s(n))for(var a in n)i\u003dn[a],o[b(a)]\u003ds(i)?i:{type:i};e.props\u003do}}(t),function(e,t){var n\u003de.inject;if(n){var r\u003de.inject\u003d{};if(Array.isArray(n))for(var i\u003d0;i\u003cn.length;i++)r[n[i]]\u003d{from:n[i]};else if(s(n))for(var o in n){var a\u003dn[o];r[o]\u003ds(a)?A({from:o},a):{from:a}}}}(t),function(e){var t\u003de.directives;if(t)for(var n in t){var r\u003dt[n];\"function\"\u003d\u003dtypeof r\u0026\u0026(t[n]\u003d{bind:r,update:r})}}(t),!t._base\u0026\u0026(t.extends\u0026\u0026(e\u003dDe(e,t.extends,n)),t.mixins))for(var r\u003d0,i\u003dt.mixins.length;r\u003ci;r++)e\u003dDe(e,t.mixins[r],n);var o,a\u003d{};for(o in e)c(o);for(o in t)y(e,o)||c(o);function c(r){var i\u003dOe[r]||je;a[r]\u003di(e[r],t[r],n,r)}return a}function Le(e,t,n,r){if(\"string\"\u003d\u003dtypeof n){var i\u003de[t];if(y(i,n))return i[n];var o\u003db(n);if(y(i,o))return i[o];var a\u003d$(o);return y(i,a)?i[a]:i[n]||i[o]||i[a]}}function Ie(e,t,n,r){var i\u003dt[e],o\u003d!y(n,e),a\u003dn[e],s\u003dRe(Boolean,i.type);if(s\u003e-1)if(o\u0026\u0026!y(i,\"default\"))a\u003d!1;else if(\"\"\u003d\u003d\u003da||a\u003d\u003d\u003dC(e)){var c\u003dRe(String,i.type);(c\u003c0||s\u003cc)\u0026\u0026(a\u003d!0)}if(void 0\u003d\u003d\u003da){a\u003dfunction(e,t,n){if(!y(t,\"default\"))return;var r\u003dt.default;if(e\u0026\u0026e.$options.propsData\u0026\u0026void 0\u003d\u003d\u003de.$options.propsData[n]\u0026\u0026void 0!\u003d\u003de._props[n])return e._props[n];return\"function\"\u003d\u003dtypeof r\u0026\u0026\"Function\"!\u003d\u003dFe(t.type)?r.call(e):r}(r,i,e);var u\u003dbe;$e(!0),Ce(a),$e(u)}return a}var Me\u003d/^\\s*function (\\w+)/;function Fe(e){var t\u003de\u0026\u0026e.toString().match(Me);return t?t[1]:\"\"}function Pe(e,t){return Fe(e)\u003d\u003d\u003dFe(t)}function Re(e,t){if(!Array.isArray(t))return Pe(t,e)?0:-1;for(var n\u003d0,r\u003dt.length;n\u003cr;n++)if(Pe(t[n],e))return n;return-1}function He(e,t,n){le();try{if(t)for(var r\u003dt;r\u003dr.$parent;){var i\u003dr.$options.errorCaptured;if(i)for(var o\u003d0;o\u003ci.length;o++)try{if(!1\u003d\u003d\u003di[o].call(r,e,t,n))return}catch(e){Ue(e,r,\"errorCaptured hook\")}}Ue(e,t,n)}finally{fe()}}function Be(e,t,n,r,i){var o;try{(o\u003dn?e.apply(t,n):e.call(t))\u0026\u0026!o._isVue\u0026\u0026u(o)\u0026\u0026!o._handled\u0026\u0026(o.catch(function(e){return He(e,r,i+\" (Promise/async)\")}),o._handled\u003d!0)}catch(e){He(e,r,i)}return o}function Ue(e,t,n){if(F.errorHandler)try{return F.errorHandler.call(null,e,t,n)}catch(t){t!\u003d\u003de\u0026\u0026Ve(t,null,\"config.errorHandler\")}Ve(e,t,n)}function Ve(e,t,n){if(!V\u0026\u0026!z||\"undefined\"\u003d\u003dtypeof console)throw e;console.error(e)}var ze,Ke\u003d!1,Je\u003d[],qe\u003d!1;function We(){qe\u003d!1;var e\u003dJe.slice(0);Je.length\u003d0;for(var t\u003d0;t\u003ce.length;t++)e[t]()}if(\"undefined\"!\u003dtypeof Promise\u0026\u0026re(Promise)){var Ze\u003dPromise.resolve();ze\u003dfunction(){Ze.then(We),G\u0026\u0026setTimeout(S)},Ke\u003d!0}else if(q||\"undefined\"\u003d\u003dtypeof MutationObserver||!re(MutationObserver)\u0026\u0026\"[object MutationObserverConstructor]\"!\u003d\u003dMutationObserver.toString())ze\u003d\"undefined\"!\u003dtypeof setImmediate\u0026\u0026re(setImmediate)?function(){setImmediate(We)}:function(){setTimeout(We,0)};else{var Ge\u003d1,Xe\u003dnew MutationObserver(We),Ye\u003ddocument.createTextNode(String(Ge));Xe.observe(Ye,{characterData:!0}),ze\u003dfunction(){Ge\u003d(Ge+1)%2,Ye.data\u003dString(Ge)},Ke\u003d!0}function Qe(e,t){var n;if(Je.push(function(){if(e)try{e.call(t)}catch(e){He(e,t,\"nextTick\")}else n\u0026\u0026n(t)}),qe||(qe\u003d!0,ze()),!e\u0026\u0026\"undefined\"!\u003dtypeof Promise)return new Promise(function(e){n\u003de})}var et\u003dnew ie;function tt(e){!function e(t,n){var r,i;var a\u003dArray.isArray(t);if(!a\u0026\u0026!o(t)||Object.isFrozen(t)||t instanceof pe)return;if(t.__ob__){var s\u003dt.__ob__.dep.id;if(n.has(s))return;n.add(s)}if(a)for(r\u003dt.length;r--;)e(t[r],n);else for(i\u003dObject.keys(t),r\u003di.length;r--;)e(t[i[r]],n)}(e,et),et.clear()}var nt\u003dg(function(e){var t\u003d\"\u0026\"\u003d\u003d\u003de.charAt(0),n\u003d\"~\"\u003d\u003d\u003d(e\u003dt?e.slice(1):e).charAt(0),r\u003d\"!\"\u003d\u003d\u003d(e\u003dn?e.slice(1):e).charAt(0);return{name:e\u003dr?e.slice(1):e,once:n,capture:r,passive:t}});function rt(e,t){function n(){var e\u003darguments,r\u003dn.fns;if(!Array.isArray(r))return Be(r,null,arguments,t,\"v-on handler\");for(var i\u003dr.slice(),o\u003d0;o\u003ci.length;o++)Be(i[o],null,e,t,\"v-on handler\")}return n.fns\u003de,n}function it(e,n,i,o,a,s){var c,u,l,f;for(c in e)u\u003de[c],l\u003dn[c],f\u003dnt(c),t(u)||(t(l)?(t(u.fns)\u0026\u0026(u\u003de[c]\u003drt(u,s)),r(f.once)\u0026\u0026(u\u003de[c]\u003da(f.name,u,f.capture)),i(f.name,u,f.capture,f.passive,f.params)):u!\u003d\u003dl\u0026\u0026(l.fns\u003du,e[c]\u003dl));for(c in n)t(e[c])\u0026\u0026o((f\u003dnt(c)).name,n[c],f.capture)}function ot(e,i,o){var a;e instanceof pe\u0026\u0026(e\u003de.data.hook||(e.data.hook\u003d{}));var s\u003de[i];function c(){o.apply(this,arguments),h(a.fns,c)}t(s)?a\u003drt([c]):n(s.fns)\u0026\u0026r(s.merged)?(a\u003ds).fns.push(c):a\u003drt([s,c]),a.merged\u003d!0,e[i]\u003da}function at(e,t,r,i,o){if(n(t)){if(y(t,r))return e[r]\u003dt[r],o||delete t[r],!0;if(y(t,i))return e[r]\u003dt[i],o||delete t[i],!0}return!1}function st(e){return i(e)?[he(e)]:Array.isArray(e)?function e(o,a){var s\u003d[];var c,u,l,f;for(c\u003d0;c\u003co.length;c++)t(u\u003do[c])||\"boolean\"\u003d\u003dtypeof u||(l\u003ds.length-1,f\u003ds[l],Array.isArray(u)?u.length\u003e0\u0026\u0026(ct((u\u003de(u,(a||\"\")+\"_\"+c))[0])\u0026\u0026ct(f)\u0026\u0026(s[l]\u003dhe(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?ct(f)?s[l]\u003dhe(f.text+u):\"\"!\u003d\u003du\u0026\u0026s.push(he(u)):ct(u)\u0026\u0026ct(f)?s[l]\u003dhe(f.text+u.text):(r(o._isVList)\u0026\u0026n(u.tag)\u0026\u0026t(u.key)\u0026\u0026n(a)\u0026\u0026(u.key\u003d\"__vlist\"+a+\"_\"+c+\"__\"),s.push(u)));return s}(e):void 0}function ct(e){return n(e)\u0026\u0026n(e.text)\u0026\u0026!1\u003d\u003d\u003de.isComment}function ut(e,t){if(e){for(var n\u003dObject.create(null),r\u003doe?Reflect.ownKeys(e):Object.keys(e),i\u003d0;i\u003cr.length;i++){var o\u003dr[i];if(\"__ob__\"!\u003d\u003do){for(var a\u003de[o].from,s\u003dt;s;){if(s._provided\u0026\u0026y(s._provided,a)){n[o]\u003ds._provided[a];break}s\u003ds.$parent}if(!s\u0026\u0026\"default\"in e[o]){var c\u003de[o].default;n[o]\u003d\"function\"\u003d\u003dtypeof c?c.call(t):c}}}return n}}function lt(e,t){if(!e||!e.length)return{};for(var n\u003d{},r\u003d0,i\u003de.length;r\u003ci;r++){var o\u003de[r],a\u003do.data;if(a\u0026\u0026a.attrs\u0026\u0026a.attrs.slot\u0026\u0026delete a.attrs.slot,o.context!\u003d\u003dt\u0026\u0026o.fnContext!\u003d\u003dt||!a||null\u003d\u003da.slot)(n.default||(n.default\u003d[])).push(o);else{var s\u003da.slot,c\u003dn[s]||(n[s]\u003d[]);\"template\"\u003d\u003d\u003do.tag?c.push.apply(c,o.children||[]):c.push(o)}}for(var u in n)n[u].every(ft)\u0026\u0026delete n[u];return n}function ft(e){return e.isComment\u0026\u0026!e.asyncFactory||\" \"\u003d\u003d\u003de.text}function pt(e){return e.isComment\u0026\u0026e.asyncFactory}function dt(t,n,r){var i,o\u003dObject.keys(n).length\u003e0,a\u003dt?!!t.$stable:!o,s\u003dt\u0026\u0026t.$key;if(t){if(t._normalized)return t._normalized;if(a\u0026\u0026r\u0026\u0026r!\u003d\u003de\u0026\u0026s\u003d\u003d\u003dr.$key\u0026\u0026!o\u0026\u0026!r.$hasNormal)return r;for(var c in i\u003d{},t)t[c]\u0026\u0026\"$\"!\u003d\u003dc[0]\u0026\u0026(i[c]\u003dvt(n,c,t[c]))}else i\u003d{};for(var u in n)u in i||(i[u]\u003dht(n,u));return t\u0026\u0026Object.isExtensible(t)\u0026\u0026(t._normalized\u003di),R(i,\"$stable\",a),R(i,\"$key\",s),R(i,\"$hasNormal\",o),i}function vt(e,t,n){var r\u003dfunction(){var e\u003darguments.length?n.apply(null,arguments):n({}),t\u003d(e\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e\u0026\u0026!Array.isArray(e)?[e]:st(e))\u0026\u0026e[0];return e\u0026\u0026(!t||1\u003d\u003d\u003de.length\u0026\u0026t.isComment\u0026\u0026!pt(t))?void 0:e};return n.proxy\u0026\u0026Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function ht(e,t){return function(){return e[t]}}function mt(e,t){var r,i,a,s,c;if(Array.isArray(e)||\"string\"\u003d\u003dtypeof e)for(r\u003dnew Array(e.length),i\u003d0,a\u003de.length;i\u003ca;i++)r[i]\u003dt(e[i],i);else if(\"number\"\u003d\u003dtypeof e)for(r\u003dnew Array(e),i\u003d0;i\u003ce;i++)r[i]\u003dt(i+1,i);else if(o(e))if(oe\u0026\u0026e[Symbol.iterator]){r\u003d[];for(var u\u003de[Symbol.iterator](),l\u003du.next();!l.done;)r.push(t(l.value,r.length)),l\u003du.next()}else for(s\u003dObject.keys(e),r\u003dnew Array(s.length),i\u003d0,a\u003ds.length;i\u003ca;i++)c\u003ds[i],r[i]\u003dt(e[c],c,i);return n(r)||(r\u003d[]),r._isVList\u003d!0,r}function yt(e,t,n,r){var i,o\u003dthis.$scopedSlots[e];o?(n\u003dn||{},r\u0026\u0026(n\u003dA(A({},r),n)),i\u003do(n)||(\"function\"\u003d\u003dtypeof t?t():t)):i\u003dthis.$slots[e]||(\"function\"\u003d\u003dtypeof t?t():t);var a\u003dn\u0026\u0026n.slot;return a?this.$createElement(\"template\",{slot:a},i):i}function gt(e){return Le(this.$options,\"filters\",e)||N}function _t(e,t){return Array.isArray(e)?-1\u003d\u003d\u003de.indexOf(t):e!\u003d\u003dt}function bt(e,t,n,r,i){var o\u003dF.keyCodes[t]||n;return i\u0026\u0026r\u0026\u0026!F.keyCodes[t]?_t(i,r):o?_t(o,e):r?C(r)!\u003d\u003dt:void 0\u003d\u003d\u003de}function $t(e,t,n,r,i){if(n)if(o(n)){var a;Array.isArray(n)\u0026\u0026(n\u003dO(n));var s\u003dfunction(o){if(\"class\"\u003d\u003d\u003do||\"style\"\u003d\u003d\u003do||v(o))a\u003de;else{var s\u003de.attrs\u0026\u0026e.attrs.type;a\u003dr||F.mustUseProp(t,s,o)?e.domProps||(e.domProps\u003d{}):e.attrs||(e.attrs\u003d{})}var c\u003db(o),u\u003dC(o);c in a||u in a||(a[o]\u003dn[o],i\u0026\u0026((e.on||(e.on\u003d{}))[\"update:\"+o]\u003dfunction(e){n[o]\u003de}))};for(var c in n)s(c)}else;return e}function wt(e,t){var n\u003dthis._staticTrees||(this._staticTrees\u003d[]),r\u003dn[e];return r\u0026\u0026!t?r:(xt(r\u003dn[e]\u003dthis.$options.staticRenderFns[e].call(this._renderProxy,null,this),\"__static__\"+e,!1),r)}function Ct(e,t,n){return xt(e,\"__once__\"+t+(n?\"_\"+n:\"\"),!0),e}function xt(e,t,n){if(Array.isArray(e))for(var r\u003d0;r\u003ce.length;r++)e[r]\u0026\u0026\"string\"!\u003dtypeof e[r]\u0026\u0026kt(e[r],t+\"_\"+r,n);else kt(e,t,n)}function kt(e,t,n){e.isStatic\u003d!0,e.key\u003dt,e.isOnce\u003dn}function At(e,t){if(t)if(s(t)){var n\u003de.on\u003de.on?A({},e.on):{};for(var r in t){var i\u003dn[r],o\u003dt[r];n[r]\u003di?[].concat(i,o):o}}else;return e}function Ot(e,t,n,r){t\u003dt||{$stable:!n};for(var i\u003d0;i\u003ce.length;i++){var o\u003de[i];Array.isArray(o)?Ot(o,t,n):o\u0026\u0026(o.proxy\u0026\u0026(o.fn.proxy\u003d!0),t[o.key]\u003do.fn)}return r\u0026\u0026(t.$key\u003dr),t}function St(e,t){for(var n\u003d0;n\u003ct.length;n+\u003d2){var r\u003dt[n];\"string\"\u003d\u003dtypeof r\u0026\u0026r\u0026\u0026(e[t[n]]\u003dt[n+1])}return e}function Tt(e,t){return\"string\"\u003d\u003dtypeof e?t+e:e}function Nt(e){e._o\u003dCt,e._n\u003df,e._s\u003dl,e._l\u003dmt,e._t\u003dyt,e._q\u003dE,e._i\u003dj,e._m\u003dwt,e._f\u003dgt,e._k\u003dbt,e._b\u003d$t,e._v\u003dhe,e._e\u003dve,e._u\u003dOt,e._g\u003dAt,e._d\u003dSt,e._p\u003dTt}function Et(t,n,i,o,a){var s,c\u003dthis,u\u003da.options;y(o,\"_uid\")?(s\u003dObject.create(o))._original\u003do:(s\u003do,o\u003do._original);var l\u003dr(u._compiled),f\u003d!l;this.data\u003dt,this.props\u003dn,this.children\u003di,this.parent\u003do,this.listeners\u003dt.on||e,this.injections\u003dut(u.inject,o),this.slots\u003dfunction(){return c.$slots||dt(t.scopedSlots,c.$slots\u003dlt(i,o)),c.$slots},Object.defineProperty(this,\"scopedSlots\",{enumerable:!0,get:function(){return dt(t.scopedSlots,this.slots())}}),l\u0026\u0026(this.$options\u003du,this.$slots\u003dthis.slots(),this.$scopedSlots\u003ddt(t.scopedSlots,this.$slots)),u._scopeId?this._c\u003dfunction(e,t,n,r){var i\u003dHt(s,e,t,n,r,f);return i\u0026\u0026!Array.isArray(i)\u0026\u0026(i.fnScopeId\u003du._scopeId,i.fnContext\u003do),i}:this._c\u003dfunction(e,t,n,r){return Ht(s,e,t,n,r,f)}}function jt(e,t,n,r,i){var o\u003dme(e);return o.fnContext\u003dn,o.fnOptions\u003dr,t.slot\u0026\u0026((o.data||(o.data\u003d{})).slot\u003dt.slot),o}function Dt(e,t){for(var n in t)e[b(n)]\u003dt[n]}Nt(Et.prototype);var Lt\u003d{init:function(e,t){if(e.componentInstance\u0026\u0026!e.componentInstance._isDestroyed\u0026\u0026e.data.keepAlive){var r\u003de;Lt.prepatch(r,r)}else{(e.componentInstance\u003dfunction(e,t){var r\u003d{_isComponent:!0,_parentVnode:e,parent:t},i\u003de.data.inlineTemplate;n(i)\u0026\u0026(r.render\u003di.render,r.staticRenderFns\u003di.staticRenderFns);return new e.componentOptions.Ctor(r)}(e,Zt)).$mount(t?e.elm:void 0,t)}},prepatch:function(t,n){var r\u003dn.componentOptions;!function(t,n,r,i,o){var a\u003di.data.scopedSlots,s\u003dt.$scopedSlots,c\u003d!!(a\u0026\u0026!a.$stable||s!\u003d\u003de\u0026\u0026!s.$stable||a\u0026\u0026t.$scopedSlots.$key!\u003d\u003da.$key||!a\u0026\u0026t.$scopedSlots.$key),u\u003d!!(o||t.$options._renderChildren||c);t.$options._parentVnode\u003di,t.$vnode\u003di,t._vnode\u0026\u0026(t._vnode.parent\u003di);if(t.$options._renderChildren\u003do,t.$attrs\u003di.data.attrs||e,t.$listeners\u003dr||e,n\u0026\u0026t.$options.props){$e(!1);for(var l\u003dt._props,f\u003dt.$options._propKeys||[],p\u003d0;p\u003cf.length;p++){var d\u003df[p],v\u003dt.$options.props;l[d]\u003dIe(d,v,n,t)}$e(!0),t.$options.propsData\u003dn}r\u003dr||e;var h\u003dt.$options._parentListeners;t.$options._parentListeners\u003dr,Wt(t,r,h),u\u0026\u0026(t.$slots\u003dlt(o,i.context),t.$forceUpdate())}(n.componentInstance\u003dt.componentInstance,r.propsData,r.listeners,n,r.children)},insert:function(e){var t,n\u003de.context,r\u003de.componentInstance;r._isMounted||(r._isMounted\u003d!0,Qt(r,\"mounted\")),e.data.keepAlive\u0026\u0026(n._isMounted?((t\u003dr)._inactive\u003d!1,tn.push(t)):Yt(r,!0))},destroy:function(e){var t\u003de.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(n\u0026\u0026(t._directInactive\u003d!0,Xt(t)))return;if(!t._inactive){t._inactive\u003d!0;for(var r\u003d0;r\u003ct.$children.length;r++)e(t.$children[r]);Qt(t,\"deactivated\")}}(t,!0):t.$destroy())}},It\u003dObject.keys(Lt);function Mt(i,a,s,c,l){if(!t(i)){var f\u003ds.$options._base;if(o(i)\u0026\u0026(i\u003df.extend(i)),\"function\"\u003d\u003dtypeof i){var p;if(t(i.cid)\u0026\u0026void 0\u003d\u003d\u003d(i\u003dfunction(e,i){if(r(e.error)\u0026\u0026n(e.errorComp))return e.errorComp;if(n(e.resolved))return e.resolved;var a\u003dUt;a\u0026\u0026n(e.owners)\u0026\u0026-1\u003d\u003d\u003de.owners.indexOf(a)\u0026\u0026e.owners.push(a);if(r(e.loading)\u0026\u0026n(e.loadingComp))return e.loadingComp;if(a\u0026\u0026!n(e.owners)){var s\u003de.owners\u003d[a],c\u003d!0,l\u003dnull,f\u003dnull;a.$on(\"hook:destroyed\",function(){return h(s,a)});var p\u003dfunction(e){for(var t\u003d0,n\u003ds.length;t\u003cn;t++)s[t].$forceUpdate();e\u0026\u0026(s.length\u003d0,null!\u003d\u003dl\u0026\u0026(clearTimeout(l),l\u003dnull),null!\u003d\u003df\u0026\u0026(clearTimeout(f),f\u003dnull))},d\u003dD(function(t){e.resolved\u003dVt(t,i),c?s.length\u003d0:p(!0)}),v\u003dD(function(t){n(e.errorComp)\u0026\u0026(e.error\u003d!0,p(!0))}),m\u003de(d,v);return o(m)\u0026\u0026(u(m)?t(e.resolved)\u0026\u0026m.then(d,v):u(m.component)\u0026\u0026(m.component.then(d,v),n(m.error)\u0026\u0026(e.errorComp\u003dVt(m.error,i)),n(m.loading)\u0026\u0026(e.loadingComp\u003dVt(m.loading,i),0\u003d\u003d\u003dm.delay?e.loading\u003d!0:l\u003dsetTimeout(function(){l\u003dnull,t(e.resolved)\u0026\u0026t(e.error)\u0026\u0026(e.loading\u003d!0,p(!1))},m.delay||200)),n(m.timeout)\u0026\u0026(f\u003dsetTimeout(function(){f\u003dnull,t(e.resolved)\u0026\u0026v(null)},m.timeout)))),c\u003d!1,e.loading?e.loadingComp:e.resolved}}(p\u003di,f)))return function(e,t,n,r,i){var o\u003dve();return o.asyncFactory\u003de,o.asyncMeta\u003d{data:t,context:n,children:r,tag:i},o}(p,a,s,c,l);a\u003da||{},wn(i),n(a.model)\u0026\u0026function(e,t){var r\u003de.model\u0026\u0026e.model.prop||\"value\",i\u003de.model\u0026\u0026e.model.event||\"input\";(t.attrs||(t.attrs\u003d{}))[r]\u003dt.model.value;var o\u003dt.on||(t.on\u003d{}),a\u003do[i],s\u003dt.model.callback;n(a)?(Array.isArray(a)?-1\u003d\u003d\u003da.indexOf(s):a!\u003d\u003ds)\u0026\u0026(o[i]\u003d[s].concat(a)):o[i]\u003ds}(i.options,a);var d\u003dfunction(e,r,i){var o\u003dr.options.props;if(!t(o)){var a\u003d{},s\u003de.attrs,c\u003de.props;if(n(s)||n(c))for(var u in o){var l\u003dC(u);at(a,c,u,l,!0)||at(a,s,u,l,!1)}return a}}(a,i);if(r(i.options.functional))return function(t,r,i,o,a){var s\u003dt.options,c\u003d{},u\u003ds.props;if(n(u))for(var l in u)c[l]\u003dIe(l,u,r||e);else n(i.attrs)\u0026\u0026Dt(c,i.attrs),n(i.props)\u0026\u0026Dt(c,i.props);var f\u003dnew Et(i,c,a,o,t),p\u003ds.render.call(null,f._c,f);if(p instanceof pe)return jt(p,i,f.parent,s);if(Array.isArray(p)){for(var d\u003dst(p)||[],v\u003dnew Array(d.length),h\u003d0;h\u003cd.length;h++)v[h]\u003djt(d[h],i,f.parent,s);return v}}(i,d,a,s,c);var v\u003da.on;if(a.on\u003da.nativeOn,r(i.options.abstract)){var m\u003da.slot;a\u003d{},m\u0026\u0026(a.slot\u003dm)}!function(e){for(var t\u003de.hook||(e.hook\u003d{}),n\u003d0;n\u003cIt.length;n++){var r\u003dIt[n],i\u003dt[r],o\u003dLt[r];i\u003d\u003d\u003do||i\u0026\u0026i._merged||(t[r]\u003di?Ft(o,i):o)}}(a);var y\u003di.options.name||l;return new pe(\"vue-component-\"+i.cid+(y?\"-\"+y:\"\"),a,void 0,void 0,void 0,s,{Ctor:i,propsData:d,listeners:v,tag:l,children:c},p)}}}function Ft(e,t){var n\u003dfunction(n,r){e(n,r),t(n,r)};return n._merged\u003d!0,n}var Pt\u003d1,Rt\u003d2;function Ht(e,a,s,c,u,l){return(Array.isArray(s)||i(s))\u0026\u0026(u\u003dc,c\u003ds,s\u003dvoid 0),r(l)\u0026\u0026(u\u003dRt),function(e,i,a,s,c){if(n(a)\u0026\u0026n(a.__ob__))return ve();n(a)\u0026\u0026n(a.is)\u0026\u0026(i\u003da.is);if(!i)return ve();Array.isArray(s)\u0026\u0026\"function\"\u003d\u003dtypeof s[0]\u0026\u0026((a\u003da||{}).scopedSlots\u003d{default:s[0]},s.length\u003d0);c\u003d\u003d\u003dRt?s\u003dst(s):c\u003d\u003d\u003dPt\u0026\u0026(s\u003dfunction(e){for(var t\u003d0;t\u003ce.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(s));var u,l;if(\"string\"\u003d\u003dtypeof i){var f;l\u003de.$vnode\u0026\u0026e.$vnode.ns||F.getTagNamespace(i),u\u003dF.isReservedTag(i)?new pe(F.parsePlatformTagName(i),a,s,void 0,void 0,e):a\u0026\u0026a.pre||!n(f\u003dLe(e.$options,\"components\",i))?new pe(i,a,s,void 0,void 0,e):Mt(f,a,e,s,i)}else u\u003dMt(i,a,e,s);return Array.isArray(u)?u:n(u)?(n(l)\u0026\u0026function e(i,o,a){i.ns\u003do;\"foreignObject\"\u003d\u003d\u003di.tag\u0026\u0026(o\u003dvoid 0,a\u003d!0);if(n(i.children))for(var s\u003d0,c\u003di.children.length;s\u003cc;s++){var u\u003di.children[s];n(u.tag)\u0026\u0026(t(u.ns)||r(a)\u0026\u0026\"svg\"!\u003d\u003du.tag)\u0026\u0026e(u,o,a)}}(u,l),n(a)\u0026\u0026function(e){o(e.style)\u0026\u0026tt(e.style);o(e.class)\u0026\u0026tt(e.class)}(a),u):ve()}(e,a,s,c,u)}var Bt,Ut\u003dnull;function Vt(e,t){return(e.__esModule||oe\u0026\u0026\"Module\"\u003d\u003d\u003de[Symbol.toStringTag])\u0026\u0026(e\u003de.default),o(e)?t.extend(e):e}function zt(e){if(Array.isArray(e))for(var t\u003d0;t\u003ce.length;t++){var r\u003de[t];if(n(r)\u0026\u0026(n(r.componentOptions)||pt(r)))return r}}function Kt(e,t){Bt.$on(e,t)}function Jt(e,t){Bt.$off(e,t)}function qt(e,t){var n\u003dBt;return function r(){null!\u003d\u003dt.apply(null,arguments)\u0026\u0026n.$off(e,r)}}function Wt(e,t,n){Bt\u003de,it(t,n||{},Kt,Jt,qt,e),Bt\u003dvoid 0}var Zt\u003dnull;function Gt(e){var t\u003dZt;return Zt\u003de,function(){Zt\u003dt}}function Xt(e){for(;e\u0026\u0026(e\u003de.$parent);)if(e._inactive)return!0;return!1}function Yt(e,t){if(t){if(e._directInactive\u003d!1,Xt(e))return}else if(e._directInactive)return;if(e._inactive||null\u003d\u003d\u003de._inactive){e._inactive\u003d!1;for(var n\u003d0;n\u003ce.$children.length;n++)Yt(e.$children[n]);Qt(e,\"activated\")}}function Qt(e,t){le();var n\u003de.$options[t],r\u003dt+\" hook\";if(n)for(var i\u003d0,o\u003dn.length;i\u003co;i++)Be(n[i],e,null,e,r);e._hasHookEvent\u0026\u0026e.$emit(\"hook:\"+t),fe()}var en\u003d[],tn\u003d[],nn\u003d{},rn\u003d!1,on\u003d!1,an\u003d0;var sn\u003d0,cn\u003dDate.now;if(V\u0026\u0026!q){var un\u003dwindow.performance;un\u0026\u0026\"function\"\u003d\u003dtypeof un.now\u0026\u0026cn()\u003edocument.createEvent(\"Event\").timeStamp\u0026\u0026(cn\u003dfunction(){return un.now()})}function ln(){var e,t;for(sn\u003dcn(),on\u003d!0,en.sort(function(e,t){return e.id-t.id}),an\u003d0;an\u003cen.length;an++)(e\u003den[an]).before\u0026\u0026e.before(),t\u003de.id,nn[t]\u003dnull,e.run();var n\u003dtn.slice(),r\u003den.slice();an\u003den.length\u003dtn.length\u003d0,nn\u003d{},rn\u003don\u003d!1,function(e){for(var t\u003d0;t\u003ce.length;t++)e[t]._inactive\u003d!0,Yt(e[t],!0)}(n),function(e){var t\u003de.length;for(;t--;){var n\u003de[t],r\u003dn.vm;r._watcher\u003d\u003d\u003dn\u0026\u0026r._isMounted\u0026\u0026!r._isDestroyed\u0026\u0026Qt(r,\"updated\")}}(r),ne\u0026\u0026F.devtools\u0026\u0026ne.emit(\"flush\")}var fn\u003d0,pn\u003dfunction(e,t,n,r,i){this.vm\u003de,i\u0026\u0026(e._watcher\u003dthis),e._watchers.push(this),r?(this.deep\u003d!!r.deep,this.user\u003d!!r.user,this.lazy\u003d!!r.lazy,this.sync\u003d!!r.sync,this.before\u003dr.before):this.deep\u003dthis.user\u003dthis.lazy\u003dthis.sync\u003d!1,this.cb\u003dn,this.id\u003d++fn,this.active\u003d!0,this.dirty\u003dthis.lazy,this.deps\u003d[],this.newDeps\u003d[],this.depIds\u003dnew ie,this.newDepIds\u003dnew ie,this.expression\u003d\"\",\"function\"\u003d\u003dtypeof t?this.getter\u003dt:(this.getter\u003dfunction(e){if(!H.test(e)){var t\u003de.split(\".\");return function(e){for(var n\u003d0;n\u003ct.length;n++){if(!e)return;e\u003de[t[n]]}return e}}}(t),this.getter||(this.getter\u003dS)),this.value\u003dthis.lazy?void 0:this.get()};pn.prototype.get\u003dfunction(){var e;le(this);var t\u003dthis.vm;try{e\u003dthis.getter.call(t,t)}catch(e){if(!this.user)throw e;He(e,t,\u0027getter for watcher \"\u0027+this.expression+\u0027\"\u0027)}finally{this.deep\u0026\u0026tt(e),fe(),this.cleanupDeps()}return e},pn.prototype.addDep\u003dfunction(e){var t\u003de.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},pn.prototype.cleanupDeps\u003dfunction(){for(var e\u003dthis.deps.length;e--;){var t\u003dthis.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n\u003dthis.depIds;this.depIds\u003dthis.newDepIds,this.newDepIds\u003dn,this.newDepIds.clear(),n\u003dthis.deps,this.deps\u003dthis.newDeps,this.newDeps\u003dn,this.newDeps.length\u003d0},pn.prototype.update\u003dfunction(){this.lazy?this.dirty\u003d!0:this.sync?this.run():function(e){var t\u003de.id;if(null\u003d\u003dnn[t]){if(nn[t]\u003d!0,on){for(var n\u003den.length-1;n\u003ean\u0026\u0026en[n].id\u003ee.id;)n--;en.splice(n+1,0,e)}else en.push(e);rn||(rn\u003d!0,Qe(ln))}}(this)},pn.prototype.run\u003dfunction(){if(this.active){var e\u003dthis.get();if(e!\u003d\u003dthis.value||o(e)||this.deep){var t\u003dthis.value;if(this.value\u003de,this.user){var n\u003d\u0027callback for watcher \"\u0027+this.expression+\u0027\"\u0027;Be(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},pn.prototype.evaluate\u003dfunction(){this.value\u003dthis.get(),this.dirty\u003d!1},pn.prototype.depend\u003dfunction(){for(var e\u003dthis.deps.length;e--;)this.deps[e].depend()},pn.prototype.teardown\u003dfunction(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e\u003dthis.deps.length;e--;)this.deps[e].removeSub(this);this.active\u003d!1}};var dn\u003d{enumerable:!0,configurable:!0,get:S,set:S};function vn(e,t,n){dn.get\u003dfunction(){return this[t][n]},dn.set\u003dfunction(e){this[t][n]\u003de},Object.defineProperty(e,n,dn)}function hn(e){e._watchers\u003d[];var t\u003de.$options;t.props\u0026\u0026function(e,t){var n\u003de.$options.propsData||{},r\u003de._props\u003d{},i\u003de.$options._propKeys\u003d[];e.$parent\u0026\u0026$e(!1);var o\u003dfunction(o){i.push(o);var a\u003dIe(o,t,n,e);xe(r,o,a),o in e||vn(e,\"_props\",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods\u0026\u0026function(e,t){e.$options.props;for(var n in t)e[n]\u003d\"function\"!\u003dtypeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t\u003de.$options.data;s(t\u003de._data\u003d\"function\"\u003d\u003dtypeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return He(e,t,\"data()\"),{}}finally{fe()}}(t,e):t||{})||(t\u003d{});var n\u003dObject.keys(t),r\u003de.$options.props,i\u003d(e.$options.methods,n.length);for(;i--;){var o\u003dn[i];r\u0026\u0026y(r,o)||(a\u003dvoid 0,36!\u003d\u003d(a\u003d(o+\"\").charCodeAt(0))\u0026\u002695!\u003d\u003da\u0026\u0026vn(e,\"_data\",o))}var a;Ce(t,!0)}(e):Ce(e._data\u003d{},!0),t.computed\u0026\u0026function(e,t){var n\u003de._computedWatchers\u003dObject.create(null),r\u003dte();for(var i in t){var o\u003dt[i],a\u003d\"function\"\u003d\u003dtypeof o?o:o.get;r||(n[i]\u003dnew pn(e,a||S,S,mn)),i in e||yn(e,i,o)}}(e,t.computed),t.watch\u0026\u0026t.watch!\u003d\u003dY\u0026\u0026function(e,t){for(var n in t){var r\u003dt[n];if(Array.isArray(r))for(var i\u003d0;i\u003cr.length;i++)bn(e,n,r[i]);else bn(e,n,r)}}(e,t.watch)}var mn\u003d{lazy:!0};function yn(e,t,n){var r\u003d!te();\"function\"\u003d\u003dtypeof n?(dn.get\u003dr?gn(t):_n(n),dn.set\u003dS):(dn.get\u003dn.get?r\u0026\u0026!1!\u003d\u003dn.cache?gn(t):_n(n.get):S,dn.set\u003dn.set||S),Object.defineProperty(e,t,dn)}function gn(e){return function(){var t\u003dthis._computedWatchers\u0026\u0026this._computedWatchers[e];if(t)return t.dirty\u0026\u0026t.evaluate(),ce.target\u0026\u0026t.depend(),t.value}}function _n(e){return function(){return e.call(this,this)}}function bn(e,t,n,r){return s(n)\u0026\u0026(r\u003dn,n\u003dn.handler),\"string\"\u003d\u003dtypeof n\u0026\u0026(n\u003de[n]),e.$watch(t,n,r)}var $n\u003d0;function wn(e){var t\u003de.options;if(e.super){var n\u003dwn(e.super);if(n!\u003d\u003de.superOptions){e.superOptions\u003dn;var r\u003dfunction(e){var t,n\u003de.options,r\u003de.sealedOptions;for(var i in n)n[i]!\u003d\u003dr[i]\u0026\u0026(t||(t\u003d{}),t[i]\u003dn[i]);return t}(e);r\u0026\u0026A(e.extendOptions,r),(t\u003de.options\u003dDe(n,e.extendOptions)).name\u0026\u0026(t.components[t.name]\u003de)}}return t}function Cn(e){this._init(e)}function xn(e){e.cid\u003d0;var t\u003d1;e.extend\u003dfunction(e){e\u003de||{};var n\u003dthis,r\u003dn.cid,i\u003de._Ctor||(e._Ctor\u003d{});if(i[r])return i[r];var o\u003de.name||n.options.name,a\u003dfunction(e){this._init(e)};return(a.prototype\u003dObject.create(n.prototype)).constructor\u003da,a.cid\u003dt++,a.options\u003dDe(n.options,e),a.super\u003dn,a.options.props\u0026\u0026function(e){var t\u003de.options.props;for(var n in t)vn(e.prototype,\"_props\",n)}(a),a.options.computed\u0026\u0026function(e){var t\u003de.options.computed;for(var n in t)yn(e.prototype,n,t[n])}(a),a.extend\u003dn.extend,a.mixin\u003dn.mixin,a.use\u003dn.use,I.forEach(function(e){a[e]\u003dn[e]}),o\u0026\u0026(a.options.components[o]\u003da),a.superOptions\u003dn.options,a.extendOptions\u003de,a.sealedOptions\u003dA({},a.options),i[r]\u003da,a}}function kn(e){return e\u0026\u0026(e.Ctor.options.name||e.tag)}function An(e,t){return Array.isArray(e)?e.indexOf(t)\u003e-1:\"string\"\u003d\u003dtypeof e?e.split(\",\").indexOf(t)\u003e-1:(n\u003de,\"[object RegExp]\"\u003d\u003d\u003da.call(n)\u0026\u0026e.test(t));var n}function On(e,t){var n\u003de.cache,r\u003de.keys,i\u003de._vnode;for(var o in n){var a\u003dn[o];if(a){var s\u003da.name;s\u0026\u0026!t(s)\u0026\u0026Sn(n,o,r,i)}}}function Sn(e,t,n,r){var i\u003de[t];!i||r\u0026\u0026i.tag\u003d\u003d\u003dr.tag||i.componentInstance.$destroy(),e[t]\u003dnull,h(n,t)}!function(t){t.prototype._init\u003dfunction(t){var n\u003dthis;n._uid\u003d$n++,n._isVue\u003d!0,t\u0026\u0026t._isComponent?function(e,t){var n\u003de.$options\u003dObject.create(e.constructor.options),r\u003dt._parentVnode;n.parent\u003dt.parent,n._parentVnode\u003dr;var i\u003dr.componentOptions;n.propsData\u003di.propsData,n._parentListeners\u003di.listeners,n._renderChildren\u003di.children,n._componentTag\u003di.tag,t.render\u0026\u0026(n.render\u003dt.render,n.staticRenderFns\u003dt.staticRenderFns)}(n,t):n.$options\u003dDe(wn(n.constructor),t||{},n),n._renderProxy\u003dn,n._self\u003dn,function(e){var t\u003de.$options,n\u003dt.parent;if(n\u0026\u0026!t.abstract){for(;n.$options.abstract\u0026\u0026n.$parent;)n\u003dn.$parent;n.$children.push(e)}e.$parent\u003dn,e.$root\u003dn?n.$root:e,e.$children\u003d[],e.$refs\u003d{},e._watcher\u003dnull,e._inactive\u003dnull,e._directInactive\u003d!1,e._isMounted\u003d!1,e._isDestroyed\u003d!1,e._isBeingDestroyed\u003d!1}(n),function(e){e._events\u003dObject.create(null),e._hasHookEvent\u003d!1;var t\u003de.$options._parentListeners;t\u0026\u0026Wt(e,t)}(n),function(t){t._vnode\u003dnull,t._staticTrees\u003dnull;var n\u003dt.$options,r\u003dt.$vnode\u003dn._parentVnode,i\u003dr\u0026\u0026r.context;t.$slots\u003dlt(n._renderChildren,i),t.$scopedSlots\u003de,t._c\u003dfunction(e,n,r,i){return Ht(t,e,n,r,i,!1)},t.$createElement\u003dfunction(e,n,r,i){return Ht(t,e,n,r,i,!0)};var o\u003dr\u0026\u0026r.data;xe(t,\"$attrs\",o\u0026\u0026o.attrs||e,null,!0),xe(t,\"$listeners\",n._parentListeners||e,null,!0)}(n),Qt(n,\"beforeCreate\"),function(e){var t\u003dut(e.$options.inject,e);t\u0026\u0026($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),hn(n),function(e){var t\u003de.$options.provide;t\u0026\u0026(e._provided\u003d\"function\"\u003d\u003dtypeof t?t.call(e):t)}(n),Qt(n,\"created\"),n.$options.el\u0026\u0026n.$mount(n.$options.el)}}(Cn),function(e){var t\u003d{get:function(){return this._data}},n\u003d{get:function(){return this._props}};Object.defineProperty(e.prototype,\"$data\",t),Object.defineProperty(e.prototype,\"$props\",n),e.prototype.$set\u003dke,e.prototype.$delete\u003dAe,e.prototype.$watch\u003dfunction(e,t,n){if(s(t))return bn(this,e,t,n);(n\u003dn||{}).user\u003d!0;var r\u003dnew pn(this,e,t,n);if(n.immediate){var i\u003d\u0027callback for immediate watcher \"\u0027+r.expression+\u0027\"\u0027;le(),Be(t,this,[r.value],this,i),fe()}return function(){r.teardown()}}}(Cn),function(e){var t\u003d/^hook:/;e.prototype.$on\u003dfunction(e,n){var r\u003dthis;if(Array.isArray(e))for(var i\u003d0,o\u003de.length;i\u003co;i++)r.$on(e[i],n);else(r._events[e]||(r._events[e]\u003d[])).push(n),t.test(e)\u0026\u0026(r._hasHookEvent\u003d!0);return r},e.prototype.$once\u003dfunction(e,t){var n\u003dthis;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn\u003dt,n.$on(e,r),n},e.prototype.$off\u003dfunction(e,t){var n\u003dthis;if(!arguments.length)return n._events\u003dObject.create(null),n;if(Array.isArray(e)){for(var r\u003d0,i\u003de.length;r\u003ci;r++)n.$off(e[r],t);return n}var o,a\u003dn._events[e];if(!a)return n;if(!t)return n._events[e]\u003dnull,n;for(var s\u003da.length;s--;)if((o\u003da[s])\u003d\u003d\u003dt||o.fn\u003d\u003d\u003dt){a.splice(s,1);break}return n},e.prototype.$emit\u003dfunction(e){var t\u003dthis._events[e];if(t){t\u003dt.length\u003e1?k(t):t;for(var n\u003dk(arguments,1),r\u003d\u0027event handler for \"\u0027+e+\u0027\"\u0027,i\u003d0,o\u003dt.length;i\u003co;i++)Be(t[i],this,n,this,r)}return this}}(Cn),function(e){e.prototype._update\u003dfunction(e,t){var n\u003dthis,r\u003dn.$el,i\u003dn._vnode,o\u003dGt(n);n._vnode\u003de,n.$el\u003di?n.__patch__(i,e):n.__patch__(n.$el,e,t,!1),o(),r\u0026\u0026(r.__vue__\u003dnull),n.$el\u0026\u0026(n.$el.__vue__\u003dn),n.$vnode\u0026\u0026n.$parent\u0026\u0026n.$vnode\u003d\u003d\u003dn.$parent._vnode\u0026\u0026(n.$parent.$el\u003dn.$el)},e.prototype.$forceUpdate\u003dfunction(){this._watcher\u0026\u0026this._watcher.update()},e.prototype.$destroy\u003dfunction(){var e\u003dthis;if(!e._isBeingDestroyed){Qt(e,\"beforeDestroy\"),e._isBeingDestroyed\u003d!0;var t\u003de.$parent;!t||t._isBeingDestroyed||e.$options.abstract||h(t.$children,e),e._watcher\u0026\u0026e._watcher.teardown();for(var n\u003de._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__\u0026\u0026e._data.__ob__.vmCount--,e._isDestroyed\u003d!0,e.__patch__(e._vnode,null),Qt(e,\"destroyed\"),e.$off(),e.$el\u0026\u0026(e.$el.__vue__\u003dnull),e.$vnode\u0026\u0026(e.$vnode.parent\u003dnull)}}}(Cn),function(e){Nt(e.prototype),e.prototype.$nextTick\u003dfunction(e){return Qe(e,this)},e.prototype._render\u003dfunction(){var e,t\u003dthis,n\u003dt.$options,r\u003dn.render,i\u003dn._parentVnode;i\u0026\u0026(t.$scopedSlots\u003ddt(i.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode\u003di;try{Ut\u003dt,e\u003dr.call(t._renderProxy,t.$createElement)}catch(n){He(n,t,\"render\"),e\u003dt._vnode}finally{Ut\u003dnull}return Array.isArray(e)\u0026\u00261\u003d\u003d\u003de.length\u0026\u0026(e\u003de[0]),e instanceof pe||(e\u003dve()),e.parent\u003di,e}}(Cn);var Tn\u003d[String,RegExp,Array],Nn\u003d{KeepAlive:{name:\"keep-alive\",abstract:!0,props:{include:Tn,exclude:Tn,max:[String,Number]},methods:{cacheVNode:function(){var e\u003dthis.cache,t\u003dthis.keys,n\u003dthis.vnodeToCache,r\u003dthis.keyToCache;if(n){var i\u003dn.tag,o\u003dn.componentInstance,a\u003dn.componentOptions;e[r]\u003d{name:kn(a),tag:i,componentInstance:o},t.push(r),this.max\u0026\u0026t.length\u003eparseInt(this.max)\u0026\u0026Sn(e,t[0],t,this._vnode),this.vnodeToCache\u003dnull}}},created:function(){this.cache\u003dObject.create(null),this.keys\u003d[]},destroyed:function(){for(var e in this.cache)Sn(this.cache,e,this.keys)},mounted:function(){var e\u003dthis;this.cacheVNode(),this.$watch(\"include\",function(t){On(e,function(e){return An(t,e)})}),this.$watch(\"exclude\",function(t){On(e,function(e){return!An(t,e)})})},updated:function(){this.cacheVNode()},render:function(){var e\u003dthis.$slots.default,t\u003dzt(e),n\u003dt\u0026\u0026t.componentOptions;if(n){var r\u003dkn(n),i\u003dthis.include,o\u003dthis.exclude;if(i\u0026\u0026(!r||!An(i,r))||o\u0026\u0026r\u0026\u0026An(o,r))return t;var a\u003dthis.cache,s\u003dthis.keys,c\u003dnull\u003d\u003dt.key?n.Ctor.cid+(n.tag?\"::\"+n.tag:\"\"):t.key;a[c]?(t.componentInstance\u003da[c].componentInstance,h(s,c),s.push(c)):(this.vnodeToCache\u003dt,this.keyToCache\u003dc),t.data.keepAlive\u003d!0}return t||e\u0026\u0026e[0]}}};!function(e){var t\u003d{get:function(){return F}};Object.defineProperty(e,\"config\",t),e.util\u003d{warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set\u003dke,e.delete\u003dAe,e.nextTick\u003dQe,e.observable\u003dfunction(e){return Ce(e),e},e.options\u003dObject.create(null),I.forEach(function(t){e.options[t+\"s\"]\u003dObject.create(null)}),e.options._base\u003de,A(e.options.components,Nn),function(e){e.use\u003dfunction(e){var t\u003dthis._installedPlugins||(this._installedPlugins\u003d[]);if(t.indexOf(e)\u003e-1)return this;var n\u003dk(arguments,1);return n.unshift(this),\"function\"\u003d\u003dtypeof e.install?e.install.apply(e,n):\"function\"\u003d\u003dtypeof e\u0026\u0026e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin\u003dfunction(e){return this.options\u003dDe(this.options,e),this}}(e),xn(e),function(e){I.forEach(function(t){e[t]\u003dfunction(e,n){return n?(\"component\"\u003d\u003d\u003dt\u0026\u0026s(n)\u0026\u0026(n.name\u003dn.name||e,n\u003dthis.options._base.extend(n)),\"directive\"\u003d\u003d\u003dt\u0026\u0026\"function\"\u003d\u003dtypeof n\u0026\u0026(n\u003d{bind:n,update:n}),this.options[t+\"s\"][e]\u003dn,n):this.options[t+\"s\"][e]}})}(e)}(Cn),Object.defineProperty(Cn.prototype,\"$isServer\",{get:te}),Object.defineProperty(Cn.prototype,\"$ssrContext\",{get:function(){return this.$vnode\u0026\u0026this.$vnode.ssrContext}}),Object.defineProperty(Cn,\"FunctionalRenderContext\",{value:Et}),Cn.version\u003d\"2.6.14\";var En\u003dp(\"style,class\"),jn\u003dp(\"input,textarea,option,select,progress\"),Dn\u003dfunction(e,t,n){return\"value\"\u003d\u003d\u003dn\u0026\u0026jn(e)\u0026\u0026\"button\"!\u003d\u003dt||\"selected\"\u003d\u003d\u003dn\u0026\u0026\"option\"\u003d\u003d\u003de||\"checked\"\u003d\u003d\u003dn\u0026\u0026\"input\"\u003d\u003d\u003de||\"muted\"\u003d\u003d\u003dn\u0026\u0026\"video\"\u003d\u003d\u003de},Ln\u003dp(\"contenteditable,draggable,spellcheck\"),In\u003dp(\"events,caret,typing,plaintext-only\"),Mn\u003dfunction(e,t){return Bn(t)||\"false\"\u003d\u003d\u003dt?\"false\":\"contenteditable\"\u003d\u003d\u003de\u0026\u0026In(t)?t:\"true\"},Fn\u003dp(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible\"),Pn\u003d\"http://www.w3.org/1999/xlink\",Rn\u003dfunction(e){return\":\"\u003d\u003d\u003de.charAt(5)\u0026\u0026\"xlink\"\u003d\u003d\u003de.slice(0,5)},Hn\u003dfunction(e){return Rn(e)?e.slice(6,e.length):\"\"},Bn\u003dfunction(e){return null\u003d\u003de||!1\u003d\u003d\u003de};function Un(e){for(var t\u003de.data,r\u003de,i\u003de;n(i.componentInstance);)(i\u003di.componentInstance._vnode)\u0026\u0026i.data\u0026\u0026(t\u003dVn(i.data,t));for(;n(r\u003dr.parent);)r\u0026\u0026r.data\u0026\u0026(t\u003dVn(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Kn(t));return\"\"}(t.staticClass,t.class)}function Vn(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Kn(e){return Array.isArray(e)?function(e){for(var t,r\u003d\"\",i\u003d0,o\u003de.length;i\u003co;i++)n(t\u003dKn(e[i]))\u0026\u0026\"\"!\u003d\u003dt\u0026\u0026(r\u0026\u0026(r+\u003d\" \"),r+\u003dt);return r}(e):o(e)?function(e){var t\u003d\"\";for(var n in e)e[n]\u0026\u0026(t\u0026\u0026(t+\u003d\" \"),t+\u003dn);return t}(e):\"string\"\u003d\u003dtypeof e?e:\"\"}var Jn\u003d{svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},qn\u003dp(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),Wn\u003dp(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),Zn\u003dfunction(e){return qn(e)||Wn(e)};function Gn(e){return Wn(e)?\"svg\":\"math\"\u003d\u003d\u003de?\"math\":void 0}var Xn\u003dObject.create(null);var Yn\u003dp(\"text,number,password,search,email,tel,url\");function Qn(e){if(\"string\"\u003d\u003dtypeof e){var t\u003ddocument.querySelector(e);return t||document.createElement(\"div\")}return e}var er\u003dObject.freeze({createElement:function(e,t){var n\u003ddocument.createElement(e);return\"select\"!\u003d\u003de?n:(t.data\u0026\u0026t.data.attrs\u0026\u0026void 0!\u003d\u003dt.data.attrs.multiple\u0026\u0026n.setAttribute(\"multiple\",\"multiple\"),n)},createElementNS:function(e,t){return document.createElementNS(Jn[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent\u003dt},setStyleScope:function(e,t){e.setAttribute(t,\"\")}}),tr\u003d{create:function(e,t){nr(t)},update:function(e,t){e.data.ref!\u003d\u003dt.data.ref\u0026\u0026(nr(e,!0),nr(t))},destroy:function(e){nr(e,!0)}};function nr(e,t){var r\u003de.data.ref;if(n(r)){var i\u003de.context,o\u003de.componentInstance||e.elm,a\u003di.$refs;t?Array.isArray(a[r])?h(a[r],o):a[r]\u003d\u003d\u003do\u0026\u0026(a[r]\u003dvoid 0):e.data.refInFor?Array.isArray(a[r])?a[r].indexOf(o)\u003c0\u0026\u0026a[r].push(o):a[r]\u003d[o]:a[r]\u003do}}var rr\u003dnew pe(\"\",{},[]),ir\u003d[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"];function or(e,i){return e.key\u003d\u003d\u003di.key\u0026\u0026e.asyncFactory\u003d\u003d\u003di.asyncFactory\u0026\u0026(e.tag\u003d\u003d\u003di.tag\u0026\u0026e.isComment\u003d\u003d\u003di.isComment\u0026\u0026n(e.data)\u003d\u003d\u003dn(i.data)\u0026\u0026function(e,t){if(\"input\"!\u003d\u003de.tag)return!0;var r,i\u003dn(r\u003de.data)\u0026\u0026n(r\u003dr.attrs)\u0026\u0026r.type,o\u003dn(r\u003dt.data)\u0026\u0026n(r\u003dr.attrs)\u0026\u0026r.type;return i\u003d\u003d\u003do||Yn(i)\u0026\u0026Yn(o)}(e,i)||r(e.isAsyncPlaceholder)\u0026\u0026t(i.asyncFactory.error))}function ar(e,t,r){var i,o,a\u003d{};for(i\u003dt;i\u003c\u003dr;++i)n(o\u003de[i].key)\u0026\u0026(a[o]\u003di);return a}var sr\u003d{create:cr,update:cr,destroy:function(e){cr(e,rr)}};function cr(e,t){(e.data.directives||t.data.directives)\u0026\u0026function(e,t){var n,r,i,o\u003de\u003d\u003d\u003drr,a\u003dt\u003d\u003d\u003drr,s\u003dlr(e.data.directives,e.context),c\u003dlr(t.data.directives,t.context),u\u003d[],l\u003d[];for(n in c)r\u003ds[n],i\u003dc[n],r?(i.oldValue\u003dr.value,i.oldArg\u003dr.arg,pr(i,\"update\",t,e),i.def\u0026\u0026i.def.componentUpdated\u0026\u0026l.push(i)):(pr(i,\"bind\",t,e),i.def\u0026\u0026i.def.inserted\u0026\u0026u.push(i));if(u.length){var f\u003dfunction(){for(var n\u003d0;n\u003cu.length;n++)pr(u[n],\"inserted\",t,e)};o?ot(t,\"insert\",f):f()}l.length\u0026\u0026ot(t,\"postpatch\",function(){for(var n\u003d0;n\u003cl.length;n++)pr(l[n],\"componentUpdated\",t,e)});if(!o)for(n in s)c[n]||pr(s[n],\"unbind\",e,e,a)}(e,t)}var ur\u003dObject.create(null);function lr(e,t){var n,r,i\u003dObject.create(null);if(!e)return i;for(n\u003d0;n\u003ce.length;n++)(r\u003de[n]).modifiers||(r.modifiers\u003dur),i[fr(r)]\u003dr,r.def\u003dLe(t.$options,\"directives\",r.name);return i}function fr(e){return e.rawName||e.name+\".\"+Object.keys(e.modifiers||{}).join(\".\")}function pr(e,t,n,r,i){var o\u003de.def\u0026\u0026e.def[t];if(o)try{o(n.elm,e,n,r,i)}catch(r){He(r,n.context,\"directive \"+e.name+\" \"+t+\" hook\")}}var dr\u003d[tr,sr];function vr(e,r){var i\u003dr.componentOptions;if(!(n(i)\u0026\u0026!1\u003d\u003d\u003di.Ctor.options.inheritAttrs||t(e.data.attrs)\u0026\u0026t(r.data.attrs))){var o,a,s\u003dr.elm,c\u003de.data.attrs||{},u\u003dr.data.attrs||{};for(o in n(u.__ob__)\u0026\u0026(u\u003dr.data.attrs\u003dA({},u)),u)a\u003du[o],c[o]!\u003d\u003da\u0026\u0026hr(s,o,a,r.data.pre);for(o in(q||Z)\u0026\u0026u.value!\u003d\u003dc.value\u0026\u0026hr(s,\"value\",u.value),c)t(u[o])\u0026\u0026(Rn(o)?s.removeAttributeNS(Pn,Hn(o)):Ln(o)||s.removeAttribute(o))}}function hr(e,t,n,r){r||e.tagName.indexOf(\"-\")\u003e-1?mr(e,t,n):Fn(t)?Bn(n)?e.removeAttribute(t):(n\u003d\"allowfullscreen\"\u003d\u003d\u003dt\u0026\u0026\"EMBED\"\u003d\u003d\u003de.tagName?\"true\":t,e.setAttribute(t,n)):Ln(t)?e.setAttribute(t,Mn(t,n)):Rn(t)?Bn(n)?e.removeAttributeNS(Pn,Hn(t)):e.setAttributeNS(Pn,t,n):mr(e,t,n)}function mr(e,t,n){if(Bn(n))e.removeAttribute(t);else{if(q\u0026\u0026!W\u0026\u0026\"TEXTAREA\"\u003d\u003d\u003de.tagName\u0026\u0026\"placeholder\"\u003d\u003d\u003dt\u0026\u0026\"\"!\u003d\u003dn\u0026\u0026!e.__ieph){var r\u003dfunction(t){t.stopImmediatePropagation(),e.removeEventListener(\"input\",r)};e.addEventListener(\"input\",r),e.__ieph\u003d!0}e.setAttribute(t,n)}}var yr\u003d{create:vr,update:vr};function gr(e,r){var i\u003dr.elm,o\u003dr.data,a\u003de.data;if(!(t(o.staticClass)\u0026\u0026t(o.class)\u0026\u0026(t(a)||t(a.staticClass)\u0026\u0026t(a.class)))){var s\u003dUn(r),c\u003di._transitionClasses;n(c)\u0026\u0026(s\u003dzn(s,Kn(c))),s!\u003d\u003di._prevClass\u0026\u0026(i.setAttribute(\"class\",s),i._prevClass\u003ds)}}var _r,br,$r,wr,Cr,xr,kr\u003d{create:gr,update:gr},Ar\u003d/[\\w).+\\-_$\\]]/;function Or(e){var t,n,r,i,o,a\u003d!1,s\u003d!1,c\u003d!1,u\u003d!1,l\u003d0,f\u003d0,p\u003d0,d\u003d0;for(r\u003d0;r\u003ce.length;r++)if(n\u003dt,t\u003de.charCodeAt(r),a)39\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(a\u003d!1);else if(s)34\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(s\u003d!1);else if(c)96\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(c\u003d!1);else if(u)47\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(u\u003d!1);else if(124!\u003d\u003dt||124\u003d\u003d\u003de.charCodeAt(r+1)||124\u003d\u003d\u003de.charCodeAt(r-1)||l||f||p){switch(t){case 34:s\u003d!0;break;case 39:a\u003d!0;break;case 96:c\u003d!0;break;case 40:p++;break;case 41:p--;break;case 91:f++;break;case 93:f--;break;case 123:l++;break;case 125:l--}if(47\u003d\u003d\u003dt){for(var v\u003dr-1,h\u003dvoid 0;v\u003e\u003d0\u0026\u0026\" \"\u003d\u003d\u003d(h\u003de.charAt(v));v--);h\u0026\u0026Ar.test(h)||(u\u003d!0)}}else void 0\u003d\u003d\u003di?(d\u003dr+1,i\u003de.slice(0,r).trim()):m();function m(){(o||(o\u003d[])).push(e.slice(d,r).trim()),d\u003dr+1}if(void 0\u003d\u003d\u003di?i\u003de.slice(0,r).trim():0!\u003d\u003dd\u0026\u0026m(),o)for(r\u003d0;r\u003co.length;r++)i\u003dSr(i,o[r]);return i}function Sr(e,t){var n\u003dt.indexOf(\"(\");if(n\u003c0)return\u0027_f(\"\u0027+t+\u0027\")(\u0027+e+\")\";var r\u003dt.slice(0,n),i\u003dt.slice(n+1);return\u0027_f(\"\u0027+r+\u0027\")(\u0027+e+(\")\"!\u003d\u003di?\",\"+i:i)}function Tr(e,t){console.error(\"[Vue compiler]: \"+e)}function Nr(e,t){return e?e.map(function(e){return e[t]}).filter(function(e){return e}):[]}function Er(e,t,n,r,i){(e.props||(e.props\u003d[])).push(Hr({name:t,value:n,dynamic:i},r)),e.plain\u003d!1}function jr(e,t,n,r,i){(i?e.dynamicAttrs||(e.dynamicAttrs\u003d[]):e.attrs||(e.attrs\u003d[])).push(Hr({name:t,value:n,dynamic:i},r)),e.plain\u003d!1}function Dr(e,t,n,r){e.attrsMap[t]\u003dn,e.attrsList.push(Hr({name:t,value:n},r))}function Lr(e,t,n,r,i,o,a,s){(e.directives||(e.directives\u003d[])).push(Hr({name:t,rawName:n,value:r,arg:i,isDynamicArg:o,modifiers:a},s)),e.plain\u003d!1}function Ir(e,t,n){return n?\"_p(\"+t+\u0027,\"\u0027+e+\u0027\")\u0027:e+t}function Mr(t,n,r,i,o,a,s,c){var u;(i\u003di||e).right?c?n\u003d\"(\"+n+\")\u003d\u003d\u003d\u0027click\u0027?\u0027contextmenu\u0027:(\"+n+\")\":\"click\"\u003d\u003d\u003dn\u0026\u0026(n\u003d\"contextmenu\",delete i.right):i.middle\u0026\u0026(c?n\u003d\"(\"+n+\")\u003d\u003d\u003d\u0027click\u0027?\u0027mouseup\u0027:(\"+n+\")\":\"click\"\u003d\u003d\u003dn\u0026\u0026(n\u003d\"mouseup\")),i.capture\u0026\u0026(delete i.capture,n\u003dIr(\"!\",n,c)),i.once\u0026\u0026(delete i.once,n\u003dIr(\"~\",n,c)),i.passive\u0026\u0026(delete i.passive,n\u003dIr(\"\u0026\",n,c)),i.native?(delete i.native,u\u003dt.nativeEvents||(t.nativeEvents\u003d{})):u\u003dt.events||(t.events\u003d{});var l\u003dHr({value:r.trim(),dynamic:c},s);i!\u003d\u003de\u0026\u0026(l.modifiers\u003di);var f\u003du[n];Array.isArray(f)?o?f.unshift(l):f.push(l):u[n]\u003df?o?[l,f]:[f,l]:l,t.plain\u003d!1}function Fr(e,t,n){var r\u003dPr(e,\":\"+t)||Pr(e,\"v-bind:\"+t);if(null!\u003dr)return Or(r);if(!1!\u003d\u003dn){var i\u003dPr(e,t);if(null!\u003di)return JSON.stringify(i)}}function Pr(e,t,n){var r;if(null!\u003d(r\u003de.attrsMap[t]))for(var i\u003de.attrsList,o\u003d0,a\u003di.length;o\u003ca;o++)if(i[o].name\u003d\u003d\u003dt){i.splice(o,1);break}return n\u0026\u0026delete e.attrsMap[t],r}function Rr(e,t){for(var n\u003de.attrsList,r\u003d0,i\u003dn.length;r\u003ci;r++){var o\u003dn[r];if(t.test(o.name))return n.splice(r,1),o}}function Hr(e,t){return t\u0026\u0026(null!\u003dt.start\u0026\u0026(e.start\u003dt.start),null!\u003dt.end\u0026\u0026(e.end\u003dt.end)),e}function Br(e,t,n){var r\u003dn||{},i\u003dr.number,o\u003d\"$$v\";r.trim\u0026\u0026(o\u003d\"(typeof $$v \u003d\u003d\u003d \u0027string\u0027? $$v.trim(): $$v)\"),i\u0026\u0026(o\u003d\"_n(\"+o+\")\");var a\u003dUr(t,o);e.model\u003d{value:\"(\"+t+\")\",expression:JSON.stringify(t),callback:\"function ($$v) {\"+a+\"}\"}}function Ur(e,t){var n\u003dfunction(e){if(e\u003de.trim(),_r\u003de.length,e.indexOf(\"[\")\u003c0||e.lastIndexOf(\"]\")\u003c_r-1)return(wr\u003de.lastIndexOf(\".\"))\u003e-1?{exp:e.slice(0,wr),key:\u0027\"\u0027+e.slice(wr+1)+\u0027\"\u0027}:{exp:e,key:null};br\u003de,wr\u003dCr\u003dxr\u003d0;for(;!zr();)Kr($r\u003dVr())?qr($r):91\u003d\u003d\u003d$r\u0026\u0026Jr($r);return{exp:e.slice(0,Cr),key:e.slice(Cr+1,xr)}}(e);return null\u003d\u003d\u003dn.key?e+\"\u003d\"+t:\"$set(\"+n.exp+\", \"+n.key+\", \"+t+\")\"}function Vr(){return br.charCodeAt(++wr)}function zr(){return wr\u003e\u003d_r}function Kr(e){return 34\u003d\u003d\u003de||39\u003d\u003d\u003de}function Jr(e){var t\u003d1;for(Cr\u003dwr;!zr();)if(Kr(e\u003dVr()))qr(e);else if(91\u003d\u003d\u003de\u0026\u0026t++,93\u003d\u003d\u003de\u0026\u0026t--,0\u003d\u003d\u003dt){xr\u003dwr;break}}function qr(e){for(var t\u003de;!zr()\u0026\u0026(e\u003dVr())!\u003d\u003dt;);}var Wr,Zr\u003d\"__r\",Gr\u003d\"__c\";function Xr(e,t,n){var r\u003dWr;return function i(){null!\u003d\u003dt.apply(null,arguments)\u0026\u0026ei(e,i,n,r)}}var Yr\u003dKe\u0026\u0026!(X\u0026\u0026Number(X[1])\u003c\u003d53);function Qr(e,t,n,r){if(Yr){var i\u003dsn,o\u003dt;t\u003do._wrapper\u003dfunction(e){if(e.target\u003d\u003d\u003de.currentTarget||e.timeStamp\u003e\u003di||e.timeStamp\u003c\u003d0||e.target.ownerDocument!\u003d\u003ddocument)return o.apply(this,arguments)}}Wr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function ei(e,t,n,r){(r||Wr).removeEventListener(e,t._wrapper||t,n)}function ti(e,r){if(!t(e.data.on)||!t(r.data.on)){var i\u003dr.data.on||{},o\u003de.data.on||{};Wr\u003dr.elm,function(e){if(n(e[Zr])){var t\u003dq?\"change\":\"input\";e[t]\u003d[].concat(e[Zr],e[t]||[]),delete e[Zr]}n(e[Gr])\u0026\u0026(e.change\u003d[].concat(e[Gr],e.change||[]),delete e[Gr])}(i),it(i,o,Qr,ei,Xr,r.context),Wr\u003dvoid 0}}var ni,ri\u003d{create:ti,update:ti};function ii(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a\u003dr.elm,s\u003de.data.domProps||{},c\u003dr.data.domProps||{};for(i in n(c.__ob__)\u0026\u0026(c\u003dr.data.domProps\u003dA({},c)),s)i in c||(a[i]\u003d\"\");for(i in c){if(o\u003dc[i],\"textContent\"\u003d\u003d\u003di||\"innerHTML\"\u003d\u003d\u003di){if(r.children\u0026\u0026(r.children.length\u003d0),o\u003d\u003d\u003ds[i])continue;1\u003d\u003d\u003da.childNodes.length\u0026\u0026a.removeChild(a.childNodes[0])}if(\"value\"\u003d\u003d\u003di\u0026\u0026\"PROGRESS\"!\u003d\u003da.tagName){a._value\u003do;var u\u003dt(o)?\"\":String(o);oi(a,u)\u0026\u0026(a.value\u003du)}else if(\"innerHTML\"\u003d\u003d\u003di\u0026\u0026Wn(a.tagName)\u0026\u0026t(a.innerHTML)){(ni\u003dni||document.createElement(\"div\")).innerHTML\u003d\"\u003csvg\u003e\"+o+\"\u003c/svg\u003e\";for(var l\u003dni.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!\u003d\u003ds[i])try{a[i]\u003do}catch(e){}}}}function oi(e,t){return!e.composing\u0026\u0026(\"OPTION\"\u003d\u003d\u003de.tagName||function(e,t){var n\u003d!0;try{n\u003ddocument.activeElement!\u003d\u003de}catch(e){}return n\u0026\u0026e.value!\u003d\u003dt}(e,t)||function(e,t){var r\u003de.value,i\u003de._vModifiers;if(n(i)){if(i.number)return f(r)!\u003d\u003df(t);if(i.trim)return r.trim()!\u003d\u003dt.trim()}return r!\u003d\u003dt}(e,t))}var ai\u003d{create:ii,update:ii},si\u003dg(function(e){var t\u003d{},n\u003d/:(.+)/;return e.split(/;(?![^(]*\\))/g).forEach(function(e){if(e){var r\u003de.split(n);r.length\u003e1\u0026\u0026(t[r[0].trim()]\u003dr[1].trim())}}),t});function ci(e){var t\u003dui(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ui(e){return Array.isArray(e)?O(e):\"string\"\u003d\u003dtypeof e?si(e):e}var li,fi\u003d/^--/,pi\u003d/\\s*!important$/,di\u003dfunction(e,t,n){if(fi.test(t))e.style.setProperty(t,n);else if(pi.test(n))e.style.setProperty(C(t),n.replace(pi,\"\"),\"important\");else{var r\u003dhi(t);if(Array.isArray(n))for(var i\u003d0,o\u003dn.length;i\u003co;i++)e.style[r]\u003dn[i];else e.style[r]\u003dn}},vi\u003d[\"Webkit\",\"Moz\",\"ms\"],hi\u003dg(function(e){if(li\u003dli||document.createElement(\"div\").style,\"filter\"!\u003d\u003d(e\u003db(e))\u0026\u0026e in li)return e;for(var t\u003de.charAt(0).toUpperCase()+e.slice(1),n\u003d0;n\u003cvi.length;n++){var r\u003dvi[n]+t;if(r in li)return r}});function mi(e,r){var i\u003dr.data,o\u003de.data;if(!(t(i.staticStyle)\u0026\u0026t(i.style)\u0026\u0026t(o.staticStyle)\u0026\u0026t(o.style))){var a,s,c\u003dr.elm,u\u003do.staticStyle,l\u003do.normalizedStyle||o.style||{},f\u003du||l,p\u003dui(r.data.style)||{};r.data.normalizedStyle\u003dn(p.__ob__)?A({},p):p;var d\u003dfunction(e,t){var n,r\u003d{};if(t)for(var i\u003de;i.componentInstance;)(i\u003di.componentInstance._vnode)\u0026\u0026i.data\u0026\u0026(n\u003dci(i.data))\u0026\u0026A(r,n);(n\u003dci(e.data))\u0026\u0026A(r,n);for(var o\u003de;o\u003do.parent;)o.data\u0026\u0026(n\u003dci(o.data))\u0026\u0026A(r,n);return r}(r,!0);for(s in f)t(d[s])\u0026\u0026di(c,s,\"\");for(s in d)(a\u003dd[s])!\u003d\u003df[s]\u0026\u0026di(c,s,null\u003d\u003da?\"\":a)}}var yi\u003d{create:mi,update:mi},gi\u003d/\\s+/;function _i(e,t){if(t\u0026\u0026(t\u003dt.trim()))if(e.classList)t.indexOf(\" \")\u003e-1?t.split(gi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n\u003d\" \"+(e.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+t+\" \")\u003c0\u0026\u0026e.setAttribute(\"class\",(n+t).trim())}}function bi(e,t){if(t\u0026\u0026(t\u003dt.trim()))if(e.classList)t.indexOf(\" \")\u003e-1?t.split(gi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute(\"class\");else{for(var n\u003d\" \"+(e.getAttribute(\"class\")||\"\")+\" \",r\u003d\" \"+t+\" \";n.indexOf(r)\u003e\u003d0;)n\u003dn.replace(r,\" \");(n\u003dn.trim())?e.setAttribute(\"class\",n):e.removeAttribute(\"class\")}}function $i(e){if(e){if(\"object\"\u003d\u003dtypeof e){var t\u003d{};return!1!\u003d\u003de.css\u0026\u0026A(t,wi(e.name||\"v\")),A(t,e),t}return\"string\"\u003d\u003dtypeof e?wi(e):void 0}}var wi\u003dg(function(e){return{enterClass:e+\"-enter\",enterToClass:e+\"-enter-to\",enterActiveClass:e+\"-enter-active\",leaveClass:e+\"-leave\",leaveToClass:e+\"-leave-to\",leaveActiveClass:e+\"-leave-active\"}}),Ci\u003dV\u0026\u0026!W,xi\u003d\"transition\",ki\u003d\"animation\",Ai\u003d\"transition\",Oi\u003d\"transitionend\",Si\u003d\"animation\",Ti\u003d\"animationend\";Ci\u0026\u0026(void 0\u003d\u003d\u003dwindow.ontransitionend\u0026\u0026void 0!\u003d\u003dwindow.onwebkittransitionend\u0026\u0026(Ai\u003d\"WebkitTransition\",Oi\u003d\"webkitTransitionEnd\"),void 0\u003d\u003d\u003dwindow.onanimationend\u0026\u0026void 0!\u003d\u003dwindow.onwebkitanimationend\u0026\u0026(Si\u003d\"WebkitAnimation\",Ti\u003d\"webkitAnimationEnd\"));var Ni\u003dV?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ni(function(){Ni(e)})}function ji(e,t){var n\u003de._transitionClasses||(e._transitionClasses\u003d[]);n.indexOf(t)\u003c0\u0026\u0026(n.push(t),_i(e,t))}function Di(e,t){e._transitionClasses\u0026\u0026h(e._transitionClasses,t),bi(e,t)}function Li(e,t,n){var r\u003dMi(e,t),i\u003dr.type,o\u003dr.timeout,a\u003dr.propCount;if(!i)return n();var s\u003di\u003d\u003d\u003dxi?Oi:Ti,c\u003d0,u\u003dfunction(){e.removeEventListener(s,l),n()},l\u003dfunction(t){t.target\u003d\u003d\u003de\u0026\u0026++c\u003e\u003da\u0026\u0026u()};setTimeout(function(){c\u003ca\u0026\u0026u()},o+1),e.addEventListener(s,l)}var Ii\u003d/\\b(transform|all)(,|$)/;function Mi(e,t){var n,r\u003dwindow.getComputedStyle(e),i\u003d(r[Ai+\"Delay\"]||\"\").split(\", \"),o\u003d(r[Ai+\"Duration\"]||\"\").split(\", \"),a\u003dFi(i,o),s\u003d(r[Si+\"Delay\"]||\"\").split(\", \"),c\u003d(r[Si+\"Duration\"]||\"\").split(\", \"),u\u003dFi(s,c),l\u003d0,f\u003d0;return t\u003d\u003d\u003dxi?a\u003e0\u0026\u0026(n\u003dxi,l\u003da,f\u003do.length):t\u003d\u003d\u003dki?u\u003e0\u0026\u0026(n\u003dki,l\u003du,f\u003dc.length):f\u003d(n\u003d(l\u003dMath.max(a,u))\u003e0?a\u003eu?xi:ki:null)?n\u003d\u003d\u003dxi?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n\u003d\u003d\u003dxi\u0026\u0026Ii.test(r[Ai+\"Property\"])}}function Fi(e,t){for(;e.length\u003ct.length;)e\u003de.concat(e);return Math.max.apply(null,t.map(function(t,n){return Pi(t)+Pi(e[n])}))}function Pi(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function Ri(e,r){var i\u003de.elm;n(i._leaveCb)\u0026\u0026(i._leaveCb.cancelled\u003d!0,i._leaveCb());var a\u003d$i(e.data.transition);if(!t(a)\u0026\u0026!n(i._enterCb)\u0026\u00261\u003d\u003d\u003di.nodeType){for(var s\u003da.css,c\u003da.type,u\u003da.enterClass,l\u003da.enterToClass,p\u003da.enterActiveClass,d\u003da.appearClass,v\u003da.appearToClass,h\u003da.appearActiveClass,m\u003da.beforeEnter,y\u003da.enter,g\u003da.afterEnter,_\u003da.enterCancelled,b\u003da.beforeAppear,$\u003da.appear,w\u003da.afterAppear,C\u003da.appearCancelled,x\u003da.duration,k\u003dZt,A\u003dZt.$vnode;A\u0026\u0026A.parent;)k\u003dA.context,A\u003dA.parent;var O\u003d!k._isMounted||!e.isRootInsert;if(!O||$||\"\"\u003d\u003d\u003d$){var S\u003dO\u0026\u0026d?d:u,T\u003dO\u0026\u0026h?h:p,N\u003dO\u0026\u0026v?v:l,E\u003dO\u0026\u0026b||m,j\u003dO\u0026\u0026\"function\"\u003d\u003dtypeof $?$:y,L\u003dO\u0026\u0026w||g,I\u003dO\u0026\u0026C||_,M\u003df(o(x)?x.enter:x),F\u003d!1!\u003d\u003ds\u0026\u0026!W,P\u003dUi(j),R\u003di._enterCb\u003dD(function(){F\u0026\u0026(Di(i,N),Di(i,T)),R.cancelled?(F\u0026\u0026Di(i,S),I\u0026\u0026I(i)):L\u0026\u0026L(i),i._enterCb\u003dnull});e.data.show||ot(e,\"insert\",function(){var t\u003di.parentNode,n\u003dt\u0026\u0026t._pending\u0026\u0026t._pending[e.key];n\u0026\u0026n.tag\u003d\u003d\u003de.tag\u0026\u0026n.elm._leaveCb\u0026\u0026n.elm._leaveCb(),j\u0026\u0026j(i,R)}),E\u0026\u0026E(i),F\u0026\u0026(ji(i,S),ji(i,T),Ei(function(){Di(i,S),R.cancelled||(ji(i,N),P||(Bi(M)?setTimeout(R,M):Li(i,c,R)))})),e.data.show\u0026\u0026(r\u0026\u0026r(),j\u0026\u0026j(i,R)),F||P||R()}}}function Hi(e,r){var i\u003de.elm;n(i._enterCb)\u0026\u0026(i._enterCb.cancelled\u003d!0,i._enterCb());var a\u003d$i(e.data.transition);if(t(a)||1!\u003d\u003di.nodeType)return r();if(!n(i._leaveCb)){var s\u003da.css,c\u003da.type,u\u003da.leaveClass,l\u003da.leaveToClass,p\u003da.leaveActiveClass,d\u003da.beforeLeave,v\u003da.leave,h\u003da.afterLeave,m\u003da.leaveCancelled,y\u003da.delayLeave,g\u003da.duration,_\u003d!1!\u003d\u003ds\u0026\u0026!W,b\u003dUi(v),$\u003df(o(g)?g.leave:g),w\u003di._leaveCb\u003dD(function(){i.parentNode\u0026\u0026i.parentNode._pending\u0026\u0026(i.parentNode._pending[e.key]\u003dnull),_\u0026\u0026(Di(i,l),Di(i,p)),w.cancelled?(_\u0026\u0026Di(i,u),m\u0026\u0026m(i)):(r(),h\u0026\u0026h(i)),i._leaveCb\u003dnull});y?y(C):C()}function C(){w.cancelled||(!e.data.show\u0026\u0026i.parentNode\u0026\u0026((i.parentNode._pending||(i.parentNode._pending\u003d{}))[e.key]\u003de),d\u0026\u0026d(i),_\u0026\u0026(ji(i,u),ji(i,p),Ei(function(){Di(i,u),w.cancelled||(ji(i,l),b||(Bi($)?setTimeout(w,$):Li(i,c,w)))})),v\u0026\u0026v(i,w),_||b||w())}}function Bi(e){return\"number\"\u003d\u003dtypeof e\u0026\u0026!isNaN(e)}function Ui(e){if(t(e))return!1;var r\u003de.fns;return n(r)?Ui(Array.isArray(r)?r[0]:r):(e._length||e.length)\u003e1}function Vi(e,t){!0!\u003d\u003dt.data.show\u0026\u0026Ri(t)}var zi\u003dfunction(e){var o,a,s\u003d{},c\u003de.modules,u\u003de.nodeOps;for(o\u003d0;o\u003cir.length;++o)for(s[ir[o]]\u003d[],a\u003d0;a\u003cc.length;++a)n(c[a][ir[o]])\u0026\u0026s[ir[o]].push(c[a][ir[o]]);function l(e){var t\u003du.parentNode(e);n(t)\u0026\u0026u.removeChild(t,e)}function f(e,t,i,o,a,c,l){if(n(e.elm)\u0026\u0026n(c)\u0026\u0026(e\u003dc[l]\u003dme(e)),e.isRootInsert\u003d!a,!function(e,t,i,o){var a\u003de.data;if(n(a)){var c\u003dn(e.componentInstance)\u0026\u0026a.keepAlive;if(n(a\u003da.hook)\u0026\u0026n(a\u003da.init)\u0026\u0026a(e,!1),n(e.componentInstance))return d(e,t),v(i,e.elm,o),r(c)\u0026\u0026function(e,t,r,i){for(var o,a\u003de;a.componentInstance;)if(a\u003da.componentInstance._vnode,n(o\u003da.data)\u0026\u0026n(o\u003do.transition)){for(o\u003d0;o\u003cs.activate.length;++o)s.activate[o](rr,a);t.push(a);break}v(r,e.elm,i)}(e,t,i,o),!0}}(e,t,i,o)){var f\u003de.data,p\u003de.children,m\u003de.tag;n(m)?(e.elm\u003de.ns?u.createElementNS(e.ns,m):u.createElement(m,e),g(e),h(e,p,t),n(f)\u0026\u0026y(e,t),v(i,e.elm,o)):r(e.isComment)?(e.elm\u003du.createComment(e.text),v(i,e.elm,o)):(e.elm\u003du.createTextNode(e.text),v(i,e.elm,o))}}function d(e,t){n(e.data.pendingInsert)\u0026\u0026(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert\u003dnull),e.elm\u003de.componentInstance.$el,m(e)?(y(e,t),g(e)):(nr(e),t.push(e))}function v(e,t,r){n(e)\u0026\u0026(n(r)?u.parentNode(r)\u003d\u003d\u003de\u0026\u0026u.insertBefore(e,t,r):u.appendChild(e,t))}function h(e,t,n){if(Array.isArray(t))for(var r\u003d0;r\u003ct.length;++r)f(t[r],n,e.elm,null,!0,t,r);else i(e.text)\u0026\u0026u.appendChild(e.elm,u.createTextNode(String(e.text)))}function m(e){for(;e.componentInstance;)e\u003de.componentInstance._vnode;return n(e.tag)}function y(e,t){for(var r\u003d0;r\u003cs.create.length;++r)s.create[r](rr,e);n(o\u003de.data.hook)\u0026\u0026(n(o.create)\u0026\u0026o.create(rr,e),n(o.insert)\u0026\u0026t.push(e))}function g(e){var t;if(n(t\u003de.fnScopeId))u.setStyleScope(e.elm,t);else for(var r\u003de;r;)n(t\u003dr.context)\u0026\u0026n(t\u003dt.$options._scopeId)\u0026\u0026u.setStyleScope(e.elm,t),r\u003dr.parent;n(t\u003dZt)\u0026\u0026t!\u003d\u003de.context\u0026\u0026t!\u003d\u003de.fnContext\u0026\u0026n(t\u003dt.$options._scopeId)\u0026\u0026u.setStyleScope(e.elm,t)}function _(e,t,n,r,i,o){for(;r\u003c\u003di;++r)f(n[r],o,e,t,!1,n,r)}function b(e){var t,r,i\u003de.data;if(n(i))for(n(t\u003di.hook)\u0026\u0026n(t\u003dt.destroy)\u0026\u0026t(e),t\u003d0;t\u003cs.destroy.length;++t)s.destroy[t](e);if(n(t\u003de.children))for(r\u003d0;r\u003ce.children.length;++r)b(e.children[r])}function $(e,t,r){for(;t\u003c\u003dr;++t){var i\u003de[t];n(i)\u0026\u0026(n(i.tag)?(w(i),b(i)):l(i.elm))}}function w(e,t){if(n(t)||n(e.data)){var r,i\u003ds.remove.length+1;for(n(t)?t.listeners+\u003di:t\u003dfunction(e,t){function n(){0\u003d\u003d--n.listeners\u0026\u0026l(e)}return n.listeners\u003dt,n}(e.elm,i),n(r\u003de.componentInstance)\u0026\u0026n(r\u003dr._vnode)\u0026\u0026n(r.data)\u0026\u0026w(r,t),r\u003d0;r\u003cs.remove.length;++r)s.remove[r](e,t);n(r\u003de.data.hook)\u0026\u0026n(r\u003dr.remove)?r(e,t):t()}else l(e.elm)}function C(e,t,r,i){for(var o\u003dr;o\u003ci;o++){var a\u003dt[o];if(n(a)\u0026\u0026or(e,a))return o}}function x(e,i,o,a,c,l){if(e!\u003d\u003di){n(i.elm)\u0026\u0026n(a)\u0026\u0026(i\u003da[c]\u003dme(i));var p\u003di.elm\u003de.elm;if(r(e.isAsyncPlaceholder))n(i.asyncFactory.resolved)?O(e.elm,i,o):i.isAsyncPlaceholder\u003d!0;else if(r(i.isStatic)\u0026\u0026r(e.isStatic)\u0026\u0026i.key\u003d\u003d\u003de.key\u0026\u0026(r(i.isCloned)||r(i.isOnce)))i.componentInstance\u003de.componentInstance;else{var d,v\u003di.data;n(v)\u0026\u0026n(d\u003dv.hook)\u0026\u0026n(d\u003dd.prepatch)\u0026\u0026d(e,i);var h\u003de.children,y\u003di.children;if(n(v)\u0026\u0026m(i)){for(d\u003d0;d\u003cs.update.length;++d)s.update[d](e,i);n(d\u003dv.hook)\u0026\u0026n(d\u003dd.update)\u0026\u0026d(e,i)}t(i.text)?n(h)\u0026\u0026n(y)?h!\u003d\u003dy\u0026\u0026function(e,r,i,o,a){for(var s,c,l,p\u003d0,d\u003d0,v\u003dr.length-1,h\u003dr[0],m\u003dr[v],y\u003di.length-1,g\u003di[0],b\u003di[y],w\u003d!a;p\u003c\u003dv\u0026\u0026d\u003c\u003dy;)t(h)?h\u003dr[++p]:t(m)?m\u003dr[--v]:or(h,g)?(x(h,g,o,i,d),h\u003dr[++p],g\u003di[++d]):or(m,b)?(x(m,b,o,i,y),m\u003dr[--v],b\u003di[--y]):or(h,b)?(x(h,b,o,i,y),w\u0026\u0026u.insertBefore(e,h.elm,u.nextSibling(m.elm)),h\u003dr[++p],b\u003di[--y]):or(m,g)?(x(m,g,o,i,d),w\u0026\u0026u.insertBefore(e,m.elm,h.elm),m\u003dr[--v],g\u003di[++d]):(t(s)\u0026\u0026(s\u003dar(r,p,v)),t(c\u003dn(g.key)?s[g.key]:C(g,r,p,v))?f(g,o,e,h.elm,!1,i,d):or(l\u003dr[c],g)?(x(l,g,o,i,d),r[c]\u003dvoid 0,w\u0026\u0026u.insertBefore(e,l.elm,h.elm)):f(g,o,e,h.elm,!1,i,d),g\u003di[++d]);p\u003ev?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d\u003ey\u0026\u0026$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)\u0026\u0026u.setTextContent(p,\"\"),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)\u0026\u0026u.setTextContent(p,\"\"):e.text!\u003d\u003di.text\u0026\u0026u.setTextContent(p,i.text),n(v)\u0026\u0026n(d\u003dv.hook)\u0026\u0026n(d\u003dd.postpatch)\u0026\u0026d(e,i)}}}function k(e,t,i){if(r(i)\u0026\u0026n(e.parent))e.parent.data.pendingInsert\u003dt;else for(var o\u003d0;o\u003ct.length;++o)t[o].data.hook.insert(t[o])}var A\u003dp(\"attrs,class,staticClass,staticStyle,key\");function O(e,t,i,o){var a,s\u003dt.tag,c\u003dt.data,u\u003dt.children;if(o\u003do||c\u0026\u0026c.pre,t.elm\u003de,r(t.isComment)\u0026\u0026n(t.asyncFactory))return t.isAsyncPlaceholder\u003d!0,!0;if(n(c)\u0026\u0026(n(a\u003dc.hook)\u0026\u0026n(a\u003da.init)\u0026\u0026a(t,!0),n(a\u003dt.componentInstance)))return d(t,i),!0;if(n(s)){if(n(u))if(e.hasChildNodes())if(n(a\u003dc)\u0026\u0026n(a\u003da.domProps)\u0026\u0026n(a\u003da.innerHTML)){if(a!\u003d\u003de.innerHTML)return!1}else{for(var l\u003d!0,f\u003de.firstChild,p\u003d0;p\u003cu.length;p++){if(!f||!O(f,u[p],i,o)){l\u003d!1;break}f\u003df.nextSibling}if(!l||f)return!1}else h(t,u,i);if(n(c)){var v\u003d!1;for(var m in c)if(!A(m)){v\u003d!0,y(t,i);break}!v\u0026\u0026c.class\u0026\u0026tt(c.class)}}else e.data!\u003d\u003dt.text\u0026\u0026(e.data\u003dt.text);return!0}return function(e,i,o,a){if(!t(i)){var c,l\u003d!1,p\u003d[];if(t(e))l\u003d!0,f(i,p);else{var d\u003dn(e.nodeType);if(!d\u0026\u0026or(e,i))x(e,i,p,null,null,a);else{if(d){if(1\u003d\u003d\u003de.nodeType\u0026\u0026e.hasAttribute(L)\u0026\u0026(e.removeAttribute(L),o\u003d!0),r(o)\u0026\u0026O(e,i,p))return k(i,p,!0),e;c\u003de,e\u003dnew pe(u.tagName(c).toLowerCase(),{},[],void 0,c)}var v\u003de.elm,h\u003du.parentNode(v);if(f(i,p,v._leaveCb?null:h,u.nextSibling(v)),n(i.parent))for(var y\u003di.parent,g\u003dm(i);y;){for(var _\u003d0;_\u003cs.destroy.length;++_)s.destroy[_](y);if(y.elm\u003di.elm,g){for(var w\u003d0;w\u003cs.create.length;++w)s.create[w](rr,y);var C\u003dy.data.hook.insert;if(C.merged)for(var A\u003d1;A\u003cC.fns.length;A++)C.fns[A]()}else nr(y);y\u003dy.parent}n(h)?$([e],0,0):n(e.tag)\u0026\u0026b(e)}}return k(i,p,l),i.elm}n(e)\u0026\u0026b(e)}}({nodeOps:er,modules:[yr,kr,ri,ai,yi,V?{create:Vi,activate:Vi,remove:function(e,t){!0!\u003d\u003de.data.show?Hi(e,t):t()}}:{}].concat(dr)});W\u0026\u0026document.addEventListener(\"selectionchange\",function(){var e\u003ddocument.activeElement;e\u0026\u0026e.vmodel\u0026\u0026Yi(e,\"input\")});var Ki\u003d{inserted:function(e,t,n,r){\"select\"\u003d\u003d\u003dn.tag?(r.elm\u0026\u0026!r.elm._vOptions?ot(n,\"postpatch\",function(){Ki.componentUpdated(e,t,n)}):Ji(e,t,n.context),e._vOptions\u003d[].map.call(e.options,Zi)):(\"textarea\"\u003d\u003d\u003dn.tag||Yn(e.type))\u0026\u0026(e._vModifiers\u003dt.modifiers,t.modifiers.lazy||(e.addEventListener(\"compositionstart\",Gi),e.addEventListener(\"compositionend\",Xi),e.addEventListener(\"change\",Xi),W\u0026\u0026(e.vmodel\u003d!0)))},componentUpdated:function(e,t,n){if(\"select\"\u003d\u003d\u003dn.tag){Ji(e,t,n.context);var r\u003de._vOptions,i\u003de._vOptions\u003d[].map.call(e.options,Zi);if(i.some(function(e,t){return!E(e,r[t])}))(e.multiple?t.value.some(function(e){return Wi(e,i)}):t.value!\u003d\u003dt.oldValue\u0026\u0026Wi(t.value,i))\u0026\u0026Yi(e,\"change\")}}};function Ji(e,t,n){qi(e,t,n),(q||Z)\u0026\u0026setTimeout(function(){qi(e,t,n)},0)}function qi(e,t,n){var r\u003dt.value,i\u003de.multiple;if(!i||Array.isArray(r)){for(var o,a,s\u003d0,c\u003de.options.length;s\u003cc;s++)if(a\u003de.options[s],i)o\u003dj(r,Zi(a))\u003e-1,a.selected!\u003d\u003do\u0026\u0026(a.selected\u003do);else if(E(Zi(a),r))return void(e.selectedIndex!\u003d\u003ds\u0026\u0026(e.selectedIndex\u003ds));i||(e.selectedIndex\u003d-1)}}function Wi(e,t){return t.every(function(t){return!E(t,e)})}function Zi(e){return\"_value\"in e?e._value:e.value}function Gi(e){e.target.composing\u003d!0}function Xi(e){e.target.composing\u0026\u0026(e.target.composing\u003d!1,Yi(e.target,\"input\"))}function Yi(e,t){var n\u003ddocument.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Qi(e){return!e.componentInstance||e.data\u0026\u0026e.data.transition?e:Qi(e.componentInstance._vnode)}var eo\u003d{model:Ki,show:{bind:function(e,t,n){var r\u003dt.value,i\u003d(n\u003dQi(n)).data\u0026\u0026n.data.transition,o\u003de.__vOriginalDisplay\u003d\"none\"\u003d\u003d\u003de.style.display?\"\":e.style.display;r\u0026\u0026i?(n.data.show\u003d!0,Ri(n,function(){e.style.display\u003do})):e.style.display\u003dr?o:\"none\"},update:function(e,t,n){var r\u003dt.value;!r!\u003d!t.oldValue\u0026\u0026((n\u003dQi(n)).data\u0026\u0026n.data.transition?(n.data.show\u003d!0,r?Ri(n,function(){e.style.display\u003de.__vOriginalDisplay}):Hi(n,function(){e.style.display\u003d\"none\"})):e.style.display\u003dr?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,r,i){i||(e.style.display\u003de.__vOriginalDisplay)}}},to\u003d{name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function no(e){var t\u003de\u0026\u0026e.componentOptions;return t\u0026\u0026t.Ctor.options.abstract?no(zt(t.children)):e}function ro(e){var t\u003d{},n\u003de.$options;for(var r in n.propsData)t[r]\u003de[r];var i\u003dn._parentListeners;for(var o in i)t[b(o)]\u003di[o];return t}function io(e,t){if(/\\d-keep-alive$/.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}var oo\u003dfunction(e){return e.tag||pt(e)},ao\u003dfunction(e){return\"show\"\u003d\u003d\u003de.name},so\u003d{name:\"transition\",props:to,abstract:!0,render:function(e){var t\u003dthis,n\u003dthis.$slots.default;if(n\u0026\u0026(n\u003dn.filter(oo)).length){var r\u003dthis.mode,o\u003dn[0];if(function(e){for(;e\u003de.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a\u003dno(o);if(!a)return o;if(this._leaving)return io(e,o);var s\u003d\"__transition-\"+this._uid+\"-\";a.key\u003dnull\u003d\u003da.key?a.isComment?s+\"comment\":s+a.tag:i(a.key)?0\u003d\u003d\u003dString(a.key).indexOf(s)?a.key:s+a.key:a.key;var c\u003d(a.data||(a.data\u003d{})).transition\u003dro(this),u\u003dthis._vnode,l\u003dno(u);if(a.data.directives\u0026\u0026a.data.directives.some(ao)\u0026\u0026(a.data.show\u003d!0),l\u0026\u0026l.data\u0026\u0026!function(e,t){return t.key\u003d\u003d\u003de.key\u0026\u0026t.tag\u003d\u003d\u003de.tag}(a,l)\u0026\u0026!pt(l)\u0026\u0026(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f\u003dl.data.transition\u003dA({},c);if(\"out-in\"\u003d\u003d\u003dr)return this._leaving\u003d!0,ot(f,\"afterLeave\",function(){t._leaving\u003d!1,t.$forceUpdate()}),io(e,o);if(\"in-out\"\u003d\u003d\u003dr){if(pt(a))return u;var p,d\u003dfunction(){p()};ot(c,\"afterEnter\",d),ot(c,\"enterCancelled\",d),ot(f,\"delayLeave\",function(e){p\u003de})}}return o}}},co\u003dA({tag:String,moveClass:String},to);function uo(e){e.elm._moveCb\u0026\u0026e.elm._moveCb(),e.elm._enterCb\u0026\u0026e.elm._enterCb()}function lo(e){e.data.newPos\u003de.elm.getBoundingClientRect()}function fo(e){var t\u003de.data.pos,n\u003de.data.newPos,r\u003dt.left-n.left,i\u003dt.top-n.top;if(r||i){e.data.moved\u003d!0;var o\u003de.elm.style;o.transform\u003do.WebkitTransform\u003d\"translate(\"+r+\"px,\"+i+\"px)\",o.transitionDuration\u003d\"0s\"}}delete co.mode;var po\u003d{Transition:so,TransitionGroup:{props:co,beforeMount:function(){var e\u003dthis,t\u003dthis._update;this._update\u003dfunction(n,r){var i\u003dGt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode\u003de.kept,i(),t.call(e,n,r)}},render:function(e){for(var t\u003dthis.tag||this.$vnode.data.tag||\"span\",n\u003dObject.create(null),r\u003dthis.prevChildren\u003dthis.children,i\u003dthis.$slots.default||[],o\u003dthis.children\u003d[],a\u003dro(this),s\u003d0;s\u003ci.length;s++){var c\u003di[s];c.tag\u0026\u0026null!\u003dc.key\u0026\u00260!\u003d\u003dString(c.key).indexOf(\"__vlist\")\u0026\u0026(o.push(c),n[c.key]\u003dc,(c.data||(c.data\u003d{})).transition\u003da)}if(r){for(var u\u003d[],l\u003d[],f\u003d0;f\u003cr.length;f++){var p\u003dr[f];p.data.transition\u003da,p.data.pos\u003dp.elm.getBoundingClientRect(),n[p.key]?u.push(p):l.push(p)}this.kept\u003de(t,null,u),this.removed\u003dl}return e(t,null,o)},updated:function(){var e\u003dthis.prevChildren,t\u003dthis.moveClass||(this.name||\"v\")+\"-move\";e.length\u0026\u0026this.hasMove(e[0].elm,t)\u0026\u0026(e.forEach(uo),e.forEach(lo),e.forEach(fo),this._reflow\u003ddocument.body.offsetHeight,e.forEach(function(e){if(e.data.moved){var n\u003de.elm,r\u003dn.style;ji(n,t),r.transform\u003dr.WebkitTransform\u003dr.transitionDuration\u003d\"\",n.addEventListener(Oi,n._moveCb\u003dfunction e(r){r\u0026\u0026r.target!\u003d\u003dn||r\u0026\u0026!/transform$/.test(r.propertyName)||(n.removeEventListener(Oi,e),n._moveCb\u003dnull,Di(n,t))})}}))},methods:{hasMove:function(e,t){if(!Ci)return!1;if(this._hasMove)return this._hasMove;var n\u003de.cloneNode();e._transitionClasses\u0026\u0026e._transitionClasses.forEach(function(e){bi(n,e)}),_i(n,t),n.style.display\u003d\"none\",this.$el.appendChild(n);var r\u003dMi(n);return this.$el.removeChild(n),this._hasMove\u003dr.hasTransform}}}};Cn.config.mustUseProp\u003dDn,Cn.config.isReservedTag\u003dZn,Cn.config.isReservedAttr\u003dEn,Cn.config.getTagNamespace\u003dGn,Cn.config.isUnknownElement\u003dfunction(e){if(!V)return!0;if(Zn(e))return!1;if(e\u003de.toLowerCase(),null!\u003dXn[e])return Xn[e];var t\u003ddocument.createElement(e);return e.indexOf(\"-\")\u003e-1?Xn[e]\u003dt.constructor\u003d\u003d\u003dwindow.HTMLUnknownElement||t.constructor\u003d\u003d\u003dwindow.HTMLElement:Xn[e]\u003d/HTMLUnknownElement/.test(t.toString())},A(Cn.options.directives,eo),A(Cn.options.components,po),Cn.prototype.__patch__\u003dV?zi:S,Cn.prototype.$mount\u003dfunction(e,t){return function(e,t,n){var r;return e.$el\u003dt,e.$options.render||(e.$options.render\u003dve),Qt(e,\"beforeMount\"),r\u003dfunction(){e._update(e._render(),n)},new pn(e,r,S,{before:function(){e._isMounted\u0026\u0026!e._isDestroyed\u0026\u0026Qt(e,\"beforeUpdate\")}},!0),n\u003d!1,null\u003d\u003de.$vnode\u0026\u0026(e._isMounted\u003d!0,Qt(e,\"mounted\")),e}(this,e\u003de\u0026\u0026V?Qn(e):void 0,t)},V\u0026\u0026setTimeout(function(){F.devtools\u0026\u0026ne\u0026\u0026ne.emit(\"init\",Cn)},0);var vo\u003d/\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,ho\u003d/[-.*+?^${}()|[\\]\\/\\\\]/g,mo\u003dg(function(e){var t\u003de[0].replace(ho,\"\\\\$\u0026\"),n\u003de[1].replace(ho,\"\\\\$\u0026\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+n,\"g\")});var yo\u003d{staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;var n\u003dPr(e,\"class\");n\u0026\u0026(e.staticClass\u003dJSON.stringify(n));var r\u003dFr(e,\"class\",!1);r\u0026\u0026(e.classBinding\u003dr)},genData:function(e){var t\u003d\"\";return e.staticClass\u0026\u0026(t+\u003d\"staticClass:\"+e.staticClass+\",\"),e.classBinding\u0026\u0026(t+\u003d\"class:\"+e.classBinding+\",\"),t}};var go,_o\u003d{staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;var n\u003dPr(e,\"style\");n\u0026\u0026(e.staticStyle\u003dJSON.stringify(si(n)));var r\u003dFr(e,\"style\",!1);r\u0026\u0026(e.styleBinding\u003dr)},genData:function(e){var t\u003d\"\";return e.staticStyle\u0026\u0026(t+\u003d\"staticStyle:\"+e.staticStyle+\",\"),e.styleBinding\u0026\u0026(t+\u003d\"style:(\"+e.styleBinding+\"),\"),t}},bo\u003dfunction(e){return(go\u003dgo||document.createElement(\"div\")).innerHTML\u003de,go.textContent},$o\u003dp(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),wo\u003dp(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),Co\u003dp(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),xo\u003d/^\\s*([^\\s\"\u0027\u003c\u003e\\/\u003d]+)(?:\\s*(\u003d)\\s*(?:\"([^\"]*)\"+|\u0027([^\u0027]*)\u0027+|([^\\s\"\u0027\u003d\u003c\u003e`]+)))?/,ko\u003d/^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^\u003d]+?\\][^\\s\"\u0027\u003c\u003e\\/\u003d]*)(?:\\s*(\u003d)\\s*(?:\"([^\"]*)\"+|\u0027([^\u0027]*)\u0027+|([^\\s\"\u0027\u003d\u003c\u003e`]+)))?/,Ao\u003d\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\"+P.source+\"]*\",Oo\u003d\"((?:\"+Ao+\"\\\\:)?\"+Ao+\")\",So\u003dnew RegExp(\"^\u003c\"+Oo),To\u003d/^\\s*(\\/?)\u003e/,No\u003dnew RegExp(\"^\u003c\\\\/\"+Oo+\"[^\u003e]*\u003e\"),Eo\u003d/^\u003c!DOCTYPE [^\u003e]+\u003e/i,jo\u003d/^\u003c!\\--/,Do\u003d/^\u003c!\\[/,Lo\u003dp(\"script,style,textarea\",!0),Io\u003d{},Mo\u003d{\"\u0026lt;\":\"\u003c\",\"\u0026gt;\":\"\u003e\",\"\u0026quot;\":\u0027\"\u0027,\"\u0026amp;\":\"\u0026\",\"\u0026#10;\":\"\\n\",\"\u0026#9;\":\"\\t\",\"\u0026#39;\":\"\u0027\"},Fo\u003d/\u0026(?:lt|gt|quot|amp|#39);/g,Po\u003d/\u0026(?:lt|gt|quot|amp|#39|#10|#9);/g,Ro\u003dp(\"pre,textarea\",!0),Ho\u003dfunction(e,t){return e\u0026\u0026Ro(e)\u0026\u0026\"\\n\"\u003d\u003d\u003dt[0]};function Bo(e,t){var n\u003dt?Po:Fo;return e.replace(n,function(e){return Mo[e]})}var Uo,Vo,zo,Ko,Jo,qo,Wo,Zo,Go\u003d/^@|^v-on:/,Xo\u003d/^v-|^@|^:|^#/,Yo\u003d/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,Qo\u003d/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,ea\u003d/^\\(|\\)$/g,ta\u003d/^\\[.*\\]$/,na\u003d/:(.*)$/,ra\u003d/^:|^\\.|^v-bind:/,ia\u003d/\\.[^.\\]]+(?\u003d[^\\]]*$)/g,oa\u003d/^v-slot(:|$)|^#/,aa\u003d/[\\r\\n]/,sa\u003d/[ \\f\\t\\r\\n]+/g,ca\u003dg(bo),ua\u003d\"_empty_\";function la(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ya(t),rawAttrsMap:{},parent:n,children:[]}}function fa(e,t){Uo\u003dt.warn||Tr,qo\u003dt.isPreTag||T,Wo\u003dt.mustUseProp||T,Zo\u003dt.getTagNamespace||T;t.isReservedTag;zo\u003dNr(t.modules,\"transformNode\"),Ko\u003dNr(t.modules,\"preTransformNode\"),Jo\u003dNr(t.modules,\"postTransformNode\"),Vo\u003dt.delimiters;var n,r,i\u003d[],o\u003d!1!\u003d\u003dt.preserveWhitespace,a\u003dt.whitespace,s\u003d!1,c\u003d!1;function u(e){if(l(e),s||e.processed||(e\u003dpa(e,t)),i.length||e\u003d\u003d\u003dn||n.if\u0026\u0026(e.elseif||e.else)\u0026\u0026va(n,{exp:e.elseif,block:e}),r\u0026\u0026!e.forbidden)if(e.elseif||e.else)a\u003de,(u\u003dfunction(e){var t\u003de.length;for(;t--;){if(1\u003d\u003d\u003de[t].type)return e[t];e.pop()}}(r.children))\u0026\u0026u.if\u0026\u0026va(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o\u003de.slotTarget||\u0027\"default\"\u0027;(r.scopedSlots||(r.scopedSlots\u003d{}))[o]\u003de}r.children.push(e),e.parent\u003dr}var a,u;e.children\u003de.children.filter(function(e){return!e.slotScope}),l(e),e.pre\u0026\u0026(s\u003d!1),qo(e.tag)\u0026\u0026(c\u003d!1);for(var f\u003d0;f\u003cJo.length;f++)Jo[f](e,t)}function l(e){if(!c)for(var t;(t\u003de.children[e.children.length-1])\u0026\u00263\u003d\u003d\u003dt.type\u0026\u0026\" \"\u003d\u003d\u003dt.text;)e.children.pop()}return function(e,t){for(var n,r,i\u003d[],o\u003dt.expectHTML,a\u003dt.isUnaryTag||T,s\u003dt.canBeLeftOpenTag||T,c\u003d0;e;){if(n\u003de,r\u0026\u0026Lo(r)){var u\u003d0,l\u003dr.toLowerCase(),f\u003dIo[l]||(Io[l]\u003dnew RegExp(\"([\\\\s\\\\S]*?)(\u003c/\"+l+\"[^\u003e]*\u003e)\",\"i\")),p\u003de.replace(f,function(e,n,r){return u\u003dr.length,Lo(l)||\"noscript\"\u003d\u003d\u003dl||(n\u003dn.replace(/\u003c!\\--([\\s\\S]*?)--\u003e/g,\"$1\").replace(/\u003c!\\[CDATA\\[([\\s\\S]*?)]]\u003e/g,\"$1\")),Ho(l,n)\u0026\u0026(n\u003dn.slice(1)),t.chars\u0026\u0026t.chars(n),\"\"});c+\u003de.length-p.length,e\u003dp,A(l,c-u,c)}else{var d\u003de.indexOf(\"\u003c\");if(0\u003d\u003d\u003dd){if(jo.test(e)){var v\u003de.indexOf(\"--\\x3e\");if(v\u003e\u003d0){t.shouldKeepComment\u0026\u0026t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(Do.test(e)){var h\u003de.indexOf(\"]\u003e\");if(h\u003e\u003d0){C(h+2);continue}}var m\u003de.match(Eo);if(m){C(m[0].length);continue}var y\u003de.match(No);if(y){var g\u003dc;C(y[0].length),A(y[1],g,c);continue}var _\u003dx();if(_){k(_),Ho(_.tagName,e)\u0026\u0026C(1);continue}}var b\u003dvoid 0,$\u003dvoid 0,w\u003dvoid 0;if(d\u003e\u003d0){for($\u003de.slice(d);!(No.test($)||So.test($)||jo.test($)||Do.test($)||(w\u003d$.indexOf(\"\u003c\",1))\u003c0);)d+\u003dw,$\u003de.slice(d);b\u003de.substring(0,d)}d\u003c0\u0026\u0026(b\u003de),b\u0026\u0026C(b.length),t.chars\u0026\u0026b\u0026\u0026t.chars(b,c-b.length,c)}if(e\u003d\u003d\u003dn){t.chars\u0026\u0026t.chars(e);break}}function C(t){c+\u003dt,e\u003de.substring(t)}function x(){var t\u003de.match(So);if(t){var n,r,i\u003d{tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n\u003de.match(To))\u0026\u0026(r\u003de.match(ko)||e.match(xo));)r.start\u003dc,C(r[0].length),r.end\u003dc,i.attrs.push(r);if(n)return i.unarySlash\u003dn[1],C(n[0].length),i.end\u003dc,i}}function k(e){var n\u003de.tagName,c\u003de.unarySlash;o\u0026\u0026(\"p\"\u003d\u003d\u003dr\u0026\u0026Co(n)\u0026\u0026A(r),s(n)\u0026\u0026r\u003d\u003d\u003dn\u0026\u0026A(n));for(var u\u003da(n)||!!c,l\u003de.attrs.length,f\u003dnew Array(l),p\u003d0;p\u003cl;p++){var d\u003de.attrs[p],v\u003dd[3]||d[4]||d[5]||\"\",h\u003d\"a\"\u003d\u003d\u003dn\u0026\u0026\"href\"\u003d\u003d\u003dd[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;f[p]\u003d{name:d[1],value:Bo(v,h)}}u||(i.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:f,start:e.start,end:e.end}),r\u003dn),t.start\u0026\u0026t.start(n,f,u,e.start,e.end)}function A(e,n,o){var a,s;if(null\u003d\u003dn\u0026\u0026(n\u003dc),null\u003d\u003do\u0026\u0026(o\u003dc),e)for(s\u003de.toLowerCase(),a\u003di.length-1;a\u003e\u003d0\u0026\u0026i[a].lowerCasedTag!\u003d\u003ds;a--);else a\u003d0;if(a\u003e\u003d0){for(var u\u003di.length-1;u\u003e\u003da;u--)t.end\u0026\u0026t.end(i[u].tag,n,o);i.length\u003da,r\u003da\u0026\u0026i[a-1].tag}else\"br\"\u003d\u003d\u003ds?t.start\u0026\u0026t.start(e,[],!0,n,o):\"p\"\u003d\u003d\u003ds\u0026\u0026(t.start\u0026\u0026t.start(e,[],!1,n,o),t.end\u0026\u0026t.end(e,n,o))}A()}(e,{warn:Uo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p\u003dr\u0026\u0026r.ns||Zo(e);q\u0026\u0026\"svg\"\u003d\u003d\u003dp\u0026\u0026(o\u003dfunction(e){for(var t\u003d[],n\u003d0;n\u003ce.length;n++){var r\u003de[n];ga.test(r.name)||(r.name\u003dr.name.replace(_a,\"\"),t.push(r))}return t}(o));var d,v\u003dla(e,o,r);p\u0026\u0026(v.ns\u003dp),\"style\"!\u003d\u003d(d\u003dv).tag\u0026\u0026(\"script\"!\u003d\u003dd.tag||d.attrsMap.type\u0026\u0026\"text/javascript\"!\u003d\u003dd.attrsMap.type)||te()||(v.forbidden\u003d!0);for(var h\u003d0;h\u003cKo.length;h++)v\u003dKo[h](v,t)||v;s||(!function(e){null!\u003dPr(e,\"v-pre\")\u0026\u0026(e.pre\u003d!0)}(v),v.pre\u0026\u0026(s\u003d!0)),qo(v.tag)\u0026\u0026(c\u003d!0),s?function(e){var t\u003de.attrsList,n\u003dt.length;if(n)for(var r\u003de.attrs\u003dnew Array(n),i\u003d0;i\u003cn;i++)r[i]\u003d{name:t[i].name,value:JSON.stringify(t[i].value)},null!\u003dt[i].start\u0026\u0026(r[i].start\u003dt[i].start,r[i].end\u003dt[i].end);else e.pre||(e.plain\u003d!0)}(v):v.processed||(da(v),function(e){var t\u003dPr(e,\"v-if\");if(t)e.if\u003dt,va(e,{exp:t,block:e});else{null!\u003dPr(e,\"v-else\")\u0026\u0026(e.else\u003d!0);var n\u003dPr(e,\"v-else-if\");n\u0026\u0026(e.elseif\u003dn)}}(v),function(e){null!\u003dPr(e,\"v-once\")\u0026\u0026(e.once\u003d!0)}(v)),n||(n\u003dv),a?u(v):(r\u003dv,i.push(v))},end:function(e,t,n){var o\u003di[i.length-1];i.length-\u003d1,r\u003di[i.length-1],u(o)},chars:function(e,t,n){if(r\u0026\u0026(!q||\"textarea\"!\u003d\u003dr.tag||r.attrsMap.placeholder!\u003d\u003de)){var i,u,l,f\u003dr.children;if(e\u003dc||e.trim()?\"script\"\u003d\u003d\u003d(i\u003dr).tag||\"style\"\u003d\u003d\u003di.tag?e:ca(e):f.length?a?\"condense\"\u003d\u003d\u003da\u0026\u0026aa.test(e)?\"\":\" \":o?\" \":\"\":\"\")c||\"condense\"!\u003d\u003da||(e\u003de.replace(sa,\" \")),!s\u0026\u0026\" \"!\u003d\u003de\u0026\u0026(u\u003dfunction(e,t){var n\u003dt?mo(t):vo;if(n.test(e)){for(var r,i,o,a\u003d[],s\u003d[],c\u003dn.lastIndex\u003d0;r\u003dn.exec(e);){(i\u003dr.index)\u003ec\u0026\u0026(s.push(o\u003de.slice(c,i)),a.push(JSON.stringify(o)));var u\u003dOr(r[1].trim());a.push(\"_s(\"+u+\")\"),s.push({\"@binding\":u}),c\u003di+r[0].length}return c\u003ce.length\u0026\u0026(s.push(o\u003de.slice(c)),a.push(JSON.stringify(o))),{expression:a.join(\"+\"),tokens:s}}}(e,Vo))?l\u003d{type:2,expression:u.expression,tokens:u.tokens,text:e}:\" \"\u003d\u003d\u003de\u0026\u0026f.length\u0026\u0026\" \"\u003d\u003d\u003df[f.length-1].text||(l\u003d{type:3,text:e}),l\u0026\u0026f.push(l)}},comment:function(e,t,n){if(r){var i\u003d{type:3,text:e,isComment:!0};r.children.push(i)}}}),n}function pa(e,t){var n,r;(r\u003dFr(n\u003de,\"key\"))\u0026\u0026(n.key\u003dr),e.plain\u003d!e.key\u0026\u0026!e.scopedSlots\u0026\u0026!e.attrsList.length,function(e){var t\u003dFr(e,\"ref\");t\u0026\u0026(e.ref\u003dt,e.refInFor\u003dfunction(e){var t\u003de;for(;t;){if(void 0!\u003d\u003dt.for)return!0;t\u003dt.parent}return!1}(e))}(e),function(e){var t;\"template\"\u003d\u003d\u003de.tag?(t\u003dPr(e,\"scope\"),e.slotScope\u003dt||Pr(e,\"slot-scope\")):(t\u003dPr(e,\"slot-scope\"))\u0026\u0026(e.slotScope\u003dt);var n\u003dFr(e,\"slot\");n\u0026\u0026(e.slotTarget\u003d\u0027\"\"\u0027\u003d\u003d\u003dn?\u0027\"default\"\u0027:n,e.slotTargetDynamic\u003d!(!e.attrsMap[\":slot\"]\u0026\u0026!e.attrsMap[\"v-bind:slot\"]),\"template\"\u003d\u003d\u003de.tag||e.slotScope||jr(e,\"slot\",n,function(e,t){return e.rawAttrsMap[\":\"+t]||e.rawAttrsMap[\"v-bind:\"+t]||e.rawAttrsMap[t]}(e,\"slot\")));if(\"template\"\u003d\u003d\u003de.tag){var r\u003dRr(e,oa);if(r){var i\u003dha(r),o\u003di.name,a\u003di.dynamic;e.slotTarget\u003do,e.slotTargetDynamic\u003da,e.slotScope\u003dr.value||ua}}else{var s\u003dRr(e,oa);if(s){var c\u003de.scopedSlots||(e.scopedSlots\u003d{}),u\u003dha(s),l\u003du.name,f\u003du.dynamic,p\u003dc[l]\u003dla(\"template\",[],e);p.slotTarget\u003dl,p.slotTargetDynamic\u003df,p.children\u003de.children.filter(function(e){if(!e.slotScope)return e.parent\u003dp,!0}),p.slotScope\u003ds.value||ua,e.children\u003d[],e.plain\u003d!1}}}(e),function(e){\"slot\"\u003d\u003d\u003de.tag\u0026\u0026(e.slotName\u003dFr(e,\"name\"))}(e),function(e){var t;(t\u003dFr(e,\"is\"))\u0026\u0026(e.component\u003dt);null!\u003dPr(e,\"inline-template\")\u0026\u0026(e.inlineTemplate\u003d!0)}(e);for(var i\u003d0;i\u003czo.length;i++)e\u003dzo[i](e,t)||e;return function(e){var t,n,r,i,o,a,s,c,u\u003de.attrsList;for(t\u003d0,n\u003du.length;t\u003cn;t++)if(r\u003di\u003du[t].name,o\u003du[t].value,Xo.test(r))if(e.hasBindings\u003d!0,(a\u003dma(r.replace(Xo,\"\")))\u0026\u0026(r\u003dr.replace(ia,\"\")),ra.test(r))r\u003dr.replace(ra,\"\"),o\u003dOr(o),(c\u003dta.test(r))\u0026\u0026(r\u003dr.slice(1,-1)),a\u0026\u0026(a.prop\u0026\u0026!c\u0026\u0026\"innerHtml\"\u003d\u003d\u003d(r\u003db(r))\u0026\u0026(r\u003d\"innerHTML\"),a.camel\u0026\u0026!c\u0026\u0026(r\u003db(r)),a.sync\u0026\u0026(s\u003dUr(o,\"$event\"),c?Mr(e,\u0027\"update:\"+(\u0027+r+\")\",s,null,!1,0,u[t],!0):(Mr(e,\"update:\"+b(r),s,null,!1,0,u[t]),C(r)!\u003d\u003db(r)\u0026\u0026Mr(e,\"update:\"+C(r),s,null,!1,0,u[t])))),a\u0026\u0026a.prop||!e.component\u0026\u0026Wo(e.tag,e.attrsMap.type,r)?Er(e,r,o,u[t],c):jr(e,r,o,u[t],c);else if(Go.test(r))r\u003dr.replace(Go,\"\"),(c\u003dta.test(r))\u0026\u0026(r\u003dr.slice(1,-1)),Mr(e,r,o,a,!1,0,u[t],c);else{var l\u003d(r\u003dr.replace(Xo,\"\")).match(na),f\u003dl\u0026\u0026l[1];c\u003d!1,f\u0026\u0026(r\u003dr.slice(0,-(f.length+1)),ta.test(f)\u0026\u0026(f\u003df.slice(1,-1),c\u003d!0)),Lr(e,r,i,o,f,c,a,u[t])}else jr(e,r,JSON.stringify(o),u[t]),!e.component\u0026\u0026\"muted\"\u003d\u003d\u003dr\u0026\u0026Wo(e.tag,e.attrsMap.type,r)\u0026\u0026Er(e,r,\"true\",u[t])}(e),e}function da(e){var t;if(t\u003dPr(e,\"v-for\")){var n\u003dfunction(e){var t\u003de.match(Yo);if(!t)return;var n\u003d{};n.for\u003dt[2].trim();var r\u003dt[1].trim().replace(ea,\"\"),i\u003dr.match(Qo);i?(n.alias\u003dr.replace(Qo,\"\").trim(),n.iterator1\u003di[1].trim(),i[2]\u0026\u0026(n.iterator2\u003di[2].trim())):n.alias\u003dr;return n}(t);n\u0026\u0026A(e,n)}}function va(e,t){e.ifConditions||(e.ifConditions\u003d[]),e.ifConditions.push(t)}function ha(e){var t\u003de.name.replace(oa,\"\");return t||\"#\"!\u003d\u003de.name[0]\u0026\u0026(t\u003d\"default\"),ta.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:\u0027\"\u0027+t+\u0027\"\u0027,dynamic:!1}}function ma(e){var t\u003de.match(ia);if(t){var n\u003d{};return t.forEach(function(e){n[e.slice(1)]\u003d!0}),n}}function ya(e){for(var t\u003d{},n\u003d0,r\u003de.length;n\u003cr;n++)t[e[n].name]\u003de[n].value;return t}var ga\u003d/^xmlns:NS\\d+/,_a\u003d/^NS\\d+:/;function ba(e){return la(e.tag,e.attrsList.slice(),e.parent)}var $a\u003d[yo,_o,{preTransformNode:function(e,t){if(\"input\"\u003d\u003d\u003de.tag){var n,r\u003de.attrsMap;if(!r[\"v-model\"])return;if((r[\":type\"]||r[\"v-bind:type\"])\u0026\u0026(n\u003dFr(e,\"type\")),r.type||n||!r[\"v-bind\"]||(n\u003d\"(\"+r[\"v-bind\"]+\").type\"),n){var i\u003dPr(e,\"v-if\",!0),o\u003di?\"\u0026\u0026(\"+i+\")\":\"\",a\u003dnull!\u003dPr(e,\"v-else\",!0),s\u003dPr(e,\"v-else-if\",!0),c\u003dba(e);da(c),Dr(c,\"type\",\"checkbox\"),pa(c,t),c.processed\u003d!0,c.if\u003d\"(\"+n+\")\u003d\u003d\u003d\u0027checkbox\u0027\"+o,va(c,{exp:c.if,block:c});var u\u003dba(e);Pr(u,\"v-for\",!0),Dr(u,\"type\",\"radio\"),pa(u,t),va(c,{exp:\"(\"+n+\")\u003d\u003d\u003d\u0027radio\u0027\"+o,block:u});var l\u003dba(e);return Pr(l,\"v-for\",!0),Dr(l,\":type\",n),pa(l,t),va(c,{exp:i,block:l}),a?c.else\u003d!0:s\u0026\u0026(c.elseif\u003ds),c}}}}];var wa,Ca,xa\u003d{expectHTML:!0,modules:$a,directives:{model:function(e,t,n){var r\u003dt.value,i\u003dt.modifiers,o\u003de.tag,a\u003de.attrsMap.type;if(e.component)return Br(e,r,i),!1;if(\"select\"\u003d\u003d\u003do)!function(e,t,n){var r\u003d\u0027var $$selectedVal \u003d Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val \u003d \"_value\" in o ? o._value : o.value;return \u0027+(n\u0026\u0026n.number?\"_n(val)\":\"val\")+\"});\";r\u003dr+\" \"+Ur(t,\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),Mr(e,\"change\",r,null,!0)}(e,r,i);else if(\"input\"\u003d\u003d\u003do\u0026\u0026\"checkbox\"\u003d\u003d\u003da)!function(e,t,n){var r\u003dn\u0026\u0026n.number,i\u003dFr(e,\"value\")||\"null\",o\u003dFr(e,\"true-value\")||\"true\",a\u003dFr(e,\"false-value\")||\"false\";Er(e,\"checked\",\"Array.isArray(\"+t+\")?_i(\"+t+\",\"+i+\")\u003e-1\"+(\"true\"\u003d\u003d\u003do?\":(\"+t+\")\":\":_q(\"+t+\",\"+o+\")\")),Mr(e,\"change\",\"var $$a\u003d\"+t+\",$$el\u003d$event.target,$$c\u003d$$el.checked?(\"+o+\"):(\"+a+\");if(Array.isArray($$a)){var $$v\u003d\"+(r?\"_n(\"+i+\")\":i)+\",$$i\u003d_i($$a,$$v);if($$el.checked){$$i\u003c0\u0026\u0026(\"+Ur(t,\"$$a.concat([$$v])\")+\")}else{$$i\u003e-1\u0026\u0026(\"+Ur(t,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\")+\")}}else{\"+Ur(t,\"$$c\")+\"}\",null,!0)}(e,r,i);else if(\"input\"\u003d\u003d\u003do\u0026\u0026\"radio\"\u003d\u003d\u003da)!function(e,t,n){var r\u003dn\u0026\u0026n.number,i\u003dFr(e,\"value\")||\"null\";Er(e,\"checked\",\"_q(\"+t+\",\"+(i\u003dr?\"_n(\"+i+\")\":i)+\")\"),Mr(e,\"change\",Ur(t,i),null,!0)}(e,r,i);else if(\"input\"\u003d\u003d\u003do||\"textarea\"\u003d\u003d\u003do)!function(e,t,n){var r\u003de.attrsMap.type,i\u003dn||{},o\u003di.lazy,a\u003di.number,s\u003di.trim,c\u003d!o\u0026\u0026\"range\"!\u003d\u003dr,u\u003do?\"change\":\"range\"\u003d\u003d\u003dr?Zr:\"input\",l\u003d\"$event.target.value\";s\u0026\u0026(l\u003d\"$event.target.value.trim()\"),a\u0026\u0026(l\u003d\"_n(\"+l+\")\");var f\u003dUr(t,l);c\u0026\u0026(f\u003d\"if($event.target.composing)return;\"+f),Er(e,\"value\",\"(\"+t+\")\"),Mr(e,u,f,null,!0),(s||a)\u0026\u0026Mr(e,\"blur\",\"$forceUpdate()\")}(e,r,i);else if(!F.isReservedTag(o))return Br(e,r,i),!1;return!0},text:function(e,t){t.value\u0026\u0026Er(e,\"textContent\",\"_s(\"+t.value+\")\",t)},html:function(e,t){t.value\u0026\u0026Er(e,\"innerHTML\",\"_s(\"+t.value+\")\",t)}},isPreTag:function(e){return\"pre\"\u003d\u003d\u003de},isUnaryTag:$o,mustUseProp:Dn,canBeLeftOpenTag:wo,isReservedTag:Zn,getTagNamespace:Gn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(\",\")}($a)},ka\u003dg(function(e){return p(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))});function Aa(e,t){e\u0026\u0026(wa\u003dka(t.staticKeys||\"\"),Ca\u003dt.isReservedTag||T,function e(t){t.static\u003dfunction(e){if(2\u003d\u003d\u003de.type)return!1;if(3\u003d\u003d\u003de.type)return!0;return!(!e.pre\u0026\u0026(e.hasBindings||e.if||e.for||d(e.tag)||!Ca(e.tag)||function(e){for(;e.parent;){if(\"template\"!\u003d\u003d(e\u003de.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(wa)))}(t);if(1\u003d\u003d\u003dt.type){if(!Ca(t.tag)\u0026\u0026\"slot\"!\u003d\u003dt.tag\u0026\u0026null\u003d\u003dt.attrsMap[\"inline-template\"])return;for(var n\u003d0,r\u003dt.children.length;n\u003cr;n++){var i\u003dt.children[n];e(i),i.static||(t.static\u003d!1)}if(t.ifConditions)for(var o\u003d1,a\u003dt.ifConditions.length;o\u003ca;o++){var s\u003dt.ifConditions[o].block;e(s),s.static||(t.static\u003d!1)}}}(e),function e(t,n){if(1\u003d\u003d\u003dt.type){if((t.static||t.once)\u0026\u0026(t.staticInFor\u003dn),t.static\u0026\u0026t.children.length\u0026\u0026(1!\u003d\u003dt.children.length||3!\u003d\u003dt.children[0].type))return void(t.staticRoot\u003d!0);if(t.staticRoot\u003d!1,t.children)for(var r\u003d0,i\u003dt.children.length;r\u003ci;r++)e(t.children[r],n||!!t.for);if(t.ifConditions)for(var o\u003d1,a\u003dt.ifConditions.length;o\u003ca;o++)e(t.ifConditions[o].block,n)}}(e,!1))}var Oa\u003d/^([\\w$_]+|\\([^)]*?\\))\\s*\u003d\u003e|^function(?:\\s+[\\w$]+)?\\s*\\(/,Sa\u003d/\\([^)]*?\\);*$/,Ta\u003d/^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\[\u0027[^\u0027]*?\u0027]|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,Na\u003d{esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea\u003d{esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},ja\u003dfunction(e){return\"if(\"+e+\")return null;\"},Da\u003d{stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:ja(\"$event.target !\u003d\u003d $event.currentTarget\"),ctrl:ja(\"!$event.ctrlKey\"),shift:ja(\"!$event.shiftKey\"),alt:ja(\"!$event.altKey\"),meta:ja(\"!$event.metaKey\"),left:ja(\"\u0027button\u0027 in $event \u0026\u0026 $event.button !\u003d\u003d 0\"),middle:ja(\"\u0027button\u0027 in $event \u0026\u0026 $event.button !\u003d\u003d 1\"),right:ja(\"\u0027button\u0027 in $event \u0026\u0026 $event.button !\u003d\u003d 2\")};function La(e,t){var n\u003dt?\"nativeOn:\":\"on:\",r\u003d\"\",i\u003d\"\";for(var o in e){var a\u003dIa(e[o]);e[o]\u0026\u0026e[o].dynamic?i+\u003do+\",\"+a+\",\":r+\u003d\u0027\"\u0027+o+\u0027\":\u0027+a+\",\"}return r\u003d\"{\"+r.slice(0,-1)+\"}\",i?n+\"_d(\"+r+\",[\"+i.slice(0,-1)+\"])\":n+r}function Ia(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return Ia(e)}).join(\",\")+\"]\";var t\u003dTa.test(e.value),n\u003dOa.test(e.value),r\u003dTa.test(e.value.replace(Sa,\"\"));if(e.modifiers){var i\u003d\"\",o\u003d\"\",a\u003d[];for(var s in e.modifiers)if(Da[s])o+\u003dDa[s],Na[s]\u0026\u0026a.push(s);else if(\"exact\"\u003d\u003d\u003ds){var c\u003de.modifiers;o+\u003dja([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter(function(e){return!c[e]}).map(function(e){return\"$event.\"+e+\"Key\"}).join(\"||\"))}else a.push(s);return a.length\u0026\u0026(i+\u003dfunction(e){return\"if(!$event.type.indexOf(\u0027key\u0027)\u0026\u0026\"+e.map(Ma).join(\"\u0026\u0026\")+\")return null;\"}(a)),o\u0026\u0026(i+\u003do),\"function($event){\"+i+(t?\"return \"+e.value+\".apply(null, arguments)\":n?\"return (\"+e.value+\").apply(null, arguments)\":r?\"return \"+e.value:e.value)+\"}\"}return t||n?e.value:\"function($event){\"+(r?\"return \"+e.value:e.value)+\"}\"}function Ma(e){var t\u003dparseInt(e,10);if(t)return\"$event.keyCode!\u003d\u003d\"+t;var n\u003dNa[e],r\u003dEa[e];return\"_k($event.keyCode,\"+JSON.stringify(e)+\",\"+JSON.stringify(n)+\",$event.key,\"+JSON.stringify(r)+\")\"}var Fa\u003d{on:function(e,t){e.wrapListeners\u003dfunction(e){return\"_g(\"+e+\",\"+t.value+\")\"}},bind:function(e,t){e.wrapData\u003dfunction(n){return\"_b(\"+n+\",\u0027\"+e.tag+\"\u0027,\"+t.value+\",\"+(t.modifiers\u0026\u0026t.modifiers.prop?\"true\":\"false\")+(t.modifiers\u0026\u0026t.modifiers.sync?\",true\":\"\")+\")\"}},cloak:S},Pa\u003dfunction(e){this.options\u003de,this.warn\u003de.warn||Tr,this.transforms\u003dNr(e.modules,\"transformCode\"),this.dataGenFns\u003dNr(e.modules,\"genData\"),this.directives\u003dA(A({},Fa),e.directives);var t\u003de.isReservedTag||T;this.maybeComponent\u003dfunction(e){return!!e.component||!t(e.tag)},this.onceId\u003d0,this.staticRenderFns\u003d[],this.pre\u003d!1};function Ra(e,t){var n\u003dnew Pa(t);return{render:\"with(this){return \"+(e?\"script\"\u003d\u003d\u003de.tag?\"null\":Ha(e,n):\u0027_c(\"div\")\u0027)+\"}\",staticRenderFns:n.staticRenderFns}}function Ha(e,t){if(e.parent\u0026\u0026(e.pre\u003de.pre||e.parent.pre),e.staticRoot\u0026\u0026!e.staticProcessed)return Ba(e,t);if(e.once\u0026\u0026!e.onceProcessed)return Ua(e,t);if(e.for\u0026\u0026!e.forProcessed)return za(e,t);if(e.if\u0026\u0026!e.ifProcessed)return Va(e,t);if(\"template\"!\u003d\u003de.tag||e.slotTarget||t.pre){if(\"slot\"\u003d\u003d\u003de.tag)return function(e,t){var n\u003de.slotName||\u0027\"default\"\u0027,r\u003dWa(e,t),i\u003d\"_t(\"+n+(r?\",function(){return \"+r+\"}\":\"\"),o\u003de.attrs||e.dynamicAttrs?Xa((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a\u003de.attrsMap[\"v-bind\"];!o\u0026\u0026!a||r||(i+\u003d\",null\");o\u0026\u0026(i+\u003d\",\"+o);a\u0026\u0026(i+\u003d(o?\"\":\",null\")+\",\"+a);return i+\")\"}(e,t);var n;if(e.component)n\u003dfunction(e,t,n){var r\u003dt.inlineTemplate?null:Wa(t,n,!0);return\"_c(\"+e+\",\"+Ka(t,n)+(r?\",\"+r:\"\")+\")\"}(e.component,e,t);else{var r;(!e.plain||e.pre\u0026\u0026t.maybeComponent(e))\u0026\u0026(r\u003dKa(e,t));var i\u003de.inlineTemplate?null:Wa(e,t,!0);n\u003d\"_c(\u0027\"+e.tag+\"\u0027\"+(r?\",\"+r:\"\")+(i?\",\"+i:\"\")+\")\"}for(var o\u003d0;o\u003ct.transforms.length;o++)n\u003dt.transforms[o](e,n);return n}return Wa(e,t)||\"void 0\"}function Ba(e,t){e.staticProcessed\u003d!0;var n\u003dt.pre;return e.pre\u0026\u0026(t.pre\u003de.pre),t.staticRenderFns.push(\"with(this){return \"+Ha(e,t)+\"}\"),t.pre\u003dn,\"_m(\"+(t.staticRenderFns.length-1)+(e.staticInFor?\",true\":\"\")+\")\"}function Ua(e,t){if(e.onceProcessed\u003d!0,e.if\u0026\u0026!e.ifProcessed)return Va(e,t);if(e.staticInFor){for(var n\u003d\"\",r\u003de.parent;r;){if(r.for){n\u003dr.key;break}r\u003dr.parent}return n?\"_o(\"+Ha(e,t)+\",\"+t.onceId+++\",\"+n+\")\":Ha(e,t)}return Ba(e,t)}function Va(e,t,n,r){return e.ifProcessed\u003d!0,function e(t,n,r,i){if(!t.length)return i||\"_e()\";var o\u003dt.shift();return o.exp?\"(\"+o.exp+\")?\"+a(o.block)+\":\"+e(t,n,r,i):\"\"+a(o.block);function a(e){return r?r(e,n):e.once?Ua(e,n):Ha(e,n)}}(e.ifConditions.slice(),t,n,r)}function za(e,t,n,r){var i\u003de.for,o\u003de.alias,a\u003de.iterator1?\",\"+e.iterator1:\"\",s\u003de.iterator2?\",\"+e.iterator2:\"\";return e.forProcessed\u003d!0,(r||\"_l\")+\"((\"+i+\"),function(\"+o+a+s+\"){return \"+(n||Ha)(e,t)+\"})\"}function Ka(e,t){var n\u003d\"{\",r\u003dfunction(e,t){var n\u003de.directives;if(!n)return;var r,i,o,a,s\u003d\"directives:[\",c\u003d!1;for(r\u003d0,i\u003dn.length;r\u003ci;r++){o\u003dn[r],a\u003d!0;var u\u003dt.directives[o.name];u\u0026\u0026(a\u003d!!u(e,o,t.warn)),a\u0026\u0026(c\u003d!0,s+\u003d\u0027{name:\"\u0027+o.name+\u0027\",rawName:\"\u0027+o.rawName+\u0027\"\u0027+(o.value?\",value:(\"+o.value+\"),expression:\"+JSON.stringify(o.value):\"\")+(o.arg?\",arg:\"+(o.isDynamicArg?o.arg:\u0027\"\u0027+o.arg+\u0027\"\u0027):\"\")+(o.modifiers?\",modifiers:\"+JSON.stringify(o.modifiers):\"\")+\"},\")}if(c)return s.slice(0,-1)+\"]\"}(e,t);r\u0026\u0026(n+\u003dr+\",\"),e.key\u0026\u0026(n+\u003d\"key:\"+e.key+\",\"),e.ref\u0026\u0026(n+\u003d\"ref:\"+e.ref+\",\"),e.refInFor\u0026\u0026(n+\u003d\"refInFor:true,\"),e.pre\u0026\u0026(n+\u003d\"pre:true,\"),e.component\u0026\u0026(n+\u003d\u0027tag:\"\u0027+e.tag+\u0027\",\u0027);for(var i\u003d0;i\u003ct.dataGenFns.length;i++)n+\u003dt.dataGenFns[i](e);if(e.attrs\u0026\u0026(n+\u003d\"attrs:\"+Xa(e.attrs)+\",\"),e.props\u0026\u0026(n+\u003d\"domProps:\"+Xa(e.props)+\",\"),e.events\u0026\u0026(n+\u003dLa(e.events,!1)+\",\"),e.nativeEvents\u0026\u0026(n+\u003dLa(e.nativeEvents,!0)+\",\"),e.slotTarget\u0026\u0026!e.slotScope\u0026\u0026(n+\u003d\"slot:\"+e.slotTarget+\",\"),e.scopedSlots\u0026\u0026(n+\u003dfunction(e,t,n){var r\u003de.for||Object.keys(t).some(function(e){var n\u003dt[e];return n.slotTargetDynamic||n.if||n.for||Ja(n)}),i\u003d!!e.if;if(!r)for(var o\u003de.parent;o;){if(o.slotScope\u0026\u0026o.slotScope!\u003d\u003dua||o.for){r\u003d!0;break}o.if\u0026\u0026(i\u003d!0),o\u003do.parent}var a\u003dObject.keys(t).map(function(e){return qa(t[e],n)}).join(\",\");return\"scopedSlots:_u([\"+a+\"]\"+(r?\",null,true\":\"\")+(!r\u0026\u0026i?\",null,false,\"+function(e){var t\u003d5381,n\u003de.length;for(;n;)t\u003d33*t^e.charCodeAt(--n);return t\u003e\u003e\u003e0}(a):\"\")+\")\"}(e,e.scopedSlots,t)+\",\"),e.model\u0026\u0026(n+\u003d\"model:{value:\"+e.model.value+\",callback:\"+e.model.callback+\",expression:\"+e.model.expression+\"},\"),e.inlineTemplate){var o\u003dfunction(e,t){var n\u003de.children[0];if(n\u0026\u00261\u003d\u003d\u003dn.type){var r\u003dRa(n,t.options);return\"inlineTemplate:{render:function(){\"+r.render+\"},staticRenderFns:[\"+r.staticRenderFns.map(function(e){return\"function(){\"+e+\"}\"}).join(\",\")+\"]}\"}}(e,t);o\u0026\u0026(n+\u003do+\",\")}return n\u003dn.replace(/,$/,\"\")+\"}\",e.dynamicAttrs\u0026\u0026(n\u003d\"_b(\"+n+\u0027,\"\u0027+e.tag+\u0027\",\u0027+Xa(e.dynamicAttrs)+\")\"),e.wrapData\u0026\u0026(n\u003de.wrapData(n)),e.wrapListeners\u0026\u0026(n\u003de.wrapListeners(n)),n}function Ja(e){return 1\u003d\u003d\u003de.type\u0026\u0026(\"slot\"\u003d\u003d\u003de.tag||e.children.some(Ja))}function qa(e,t){var n\u003de.attrsMap[\"slot-scope\"];if(e.if\u0026\u0026!e.ifProcessed\u0026\u0026!n)return Va(e,t,qa,\"null\");if(e.for\u0026\u0026!e.forProcessed)return za(e,t,qa);var r\u003de.slotScope\u003d\u003d\u003dua?\"\":String(e.slotScope),i\u003d\"function(\"+r+\"){return \"+(\"template\"\u003d\u003d\u003de.tag?e.if\u0026\u0026n?\"(\"+e.if+\")?\"+(Wa(e,t)||\"undefined\")+\":undefined\":Wa(e,t)||\"undefined\":Ha(e,t))+\"}\",o\u003dr?\"\":\",proxy:true\";return\"{key:\"+(e.slotTarget||\u0027\"default\"\u0027)+\",fn:\"+i+o+\"}\"}function Wa(e,t,n,r,i){var o\u003de.children;if(o.length){var a\u003do[0];if(1\u003d\u003d\u003do.length\u0026\u0026a.for\u0026\u0026\"template\"!\u003d\u003da.tag\u0026\u0026\"slot\"!\u003d\u003da.tag){var s\u003dn?t.maybeComponent(a)?\",1\":\",0\":\"\";return\"\"+(r||Ha)(a,t)+s}var c\u003dn?function(e,t){for(var n\u003d0,r\u003d0;r\u003ce.length;r++){var i\u003de[r];if(1\u003d\u003d\u003di.type){if(Za(i)||i.ifConditions\u0026\u0026i.ifConditions.some(function(e){return Za(e.block)})){n\u003d2;break}(t(i)||i.ifConditions\u0026\u0026i.ifConditions.some(function(e){return t(e.block)}))\u0026\u0026(n\u003d1)}}return n}(o,t.maybeComponent):0,u\u003di||Ga;return\"[\"+o.map(function(e){return u(e,t)}).join(\",\")+\"]\"+(c?\",\"+c:\"\")}}function Za(e){return void 0!\u003d\u003de.for||\"template\"\u003d\u003d\u003de.tag||\"slot\"\u003d\u003d\u003de.tag}function Ga(e,t){return 1\u003d\u003d\u003de.type?Ha(e,t):3\u003d\u003d\u003de.type\u0026\u0026e.isComment?(r\u003de,\"_e(\"+JSON.stringify(r.text)+\")\"):\"_v(\"+(2\u003d\u003d\u003d(n\u003de).type?n.expression:Ya(JSON.stringify(n.text)))+\")\";var n,r}function Xa(e){for(var t\u003d\"\",n\u003d\"\",r\u003d0;r\u003ce.length;r++){var i\u003de[r],o\u003dYa(i.value);i.dynamic?n+\u003di.name+\",\"+o+\",\":t+\u003d\u0027\"\u0027+i.name+\u0027\":\u0027+o+\",\"}return t\u003d\"{\"+t.slice(0,-1)+\"}\",n?\"_d(\"+t+\",[\"+n.slice(0,-1)+\"])\":t}function Ya(e){return e.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\");function Qa(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),S}}function es(e){var t\u003dObject.create(null);return function(n,r,i){(r\u003dA({},r)).warn;delete r.warn;var o\u003dr.delimiters?String(r.delimiters)+n:n;if(t[o])return t[o];var a\u003de(n,r),s\u003d{},c\u003d[];return s.render\u003dQa(a.render,c),s.staticRenderFns\u003da.staticRenderFns.map(function(e){return Qa(e,c)}),t[o]\u003ds}}var ts,ns,rs\u003d(ts\u003dfunction(e,t){var n\u003dfa(e.trim(),t);!1!\u003d\u003dt.optimize\u0026\u0026Aa(n,t);var r\u003dRa(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(e){function t(t,n){var r\u003dObject.create(e),i\u003d[],o\u003d[];if(n)for(var a in n.modules\u0026\u0026(r.modules\u003d(e.modules||[]).concat(n.modules)),n.directives\u0026\u0026(r.directives\u003dA(Object.create(e.directives||null),n.directives)),n)\"modules\"!\u003d\u003da\u0026\u0026\"directives\"!\u003d\u003da\u0026\u0026(r[a]\u003dn[a]);r.warn\u003dfunction(e,t,n){(n?o:i).push(e)};var s\u003dts(t.trim(),r);return s.errors\u003di,s.tips\u003do,s}return{compile:t,compileToFunctions:es(t)}})(xa),is\u003d(rs.compile,rs.compileToFunctions);function os(e){return(ns\u003dns||document.createElement(\"div\")).innerHTML\u003de?\u0027\u003ca href\u003d\"\\n\"/\u003e\u0027:\u0027\u003cdiv a\u003d\"\\n\"/\u003e\u0027,ns.innerHTML.indexOf(\"\u0026#10;\")\u003e0}var as\u003d!!V\u0026\u0026os(!1),ss\u003d!!V\u0026\u0026os(!0),cs\u003dg(function(e){var t\u003dQn(e);return t\u0026\u0026t.innerHTML}),us\u003dCn.prototype.$mount;return Cn.prototype.$mount\u003dfunction(e,t){if((e\u003de\u0026\u0026Qn(e))\u003d\u003d\u003ddocument.body||e\u003d\u003d\u003ddocument.documentElement)return this;var n\u003dthis.$options;if(!n.render){var r\u003dn.template;if(r)if(\"string\"\u003d\u003dtypeof r)\"#\"\u003d\u003d\u003dr.charAt(0)\u0026\u0026(r\u003dcs(r));else{if(!r.nodeType)return this;r\u003dr.innerHTML}else e\u0026\u0026(r\u003dfunction(e){if(e.outerHTML)return e.outerHTML;var t\u003ddocument.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i\u003dis(r,{outputSourceRange:!1,shouldDecodeNewlines:as,shouldDecodeNewlinesForHref:ss,delimiters:n.delimiters,comments:n.comments},this),o\u003di.render,a\u003di.staticRenderFns;n.render\u003do,n.staticRenderFns\u003da}}return us.call(this,e,t)},Cn.compile\u003dis,Cn});"}],"authorContributionMap":{"KevinEyo1":6}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/_mixins.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"// @see https://github.com/twbs/bootstrap/blob/main/scss/_functions.scss"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@function material-icons-str-replace($string, $search, $replace: \u0027\u0027) {"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" $index: str-index($string, $search);"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" @if $index {"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" @return str-slice($string, 1, $index - 1) + $replace +"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" material-icons-str-replace("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" str-slice($string, $index + str-length($search)),"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" $search,"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" $replace"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" );"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" @return $string;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"@mixin material-icons-font-class($font-family) {"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" font-family: $font-family;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" font-size: $material-icons-font-size;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased; // Support for all WebKit browsers"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale; // Support for Firefox"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility; // Support for Safari and Chrome"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \u0027liga\u0027; // Support for IE"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"@mixin material-icons-font($font-family) {"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" $class-name: to-lower-case($font-family);"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" $class-name: material-icons-str-replace($class-name, \u0027 \u0027, \u0027-\u0027);"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" $font-file: $material-icons-font-path + $class-name;"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" @font-face {"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" font-family: $font-family;"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" font-display: $material-icons-font-display;"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" src: url(\u0027#{$font-file}.woff2\u0027) format(\u0027woff2\u0027),"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" url(\u0027#{$font-file}.woff\u0027) format(\u0027woff\u0027);"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" .#{$class-name} {"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" @include material-icons-font-class($font-family);"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"@mixin material-icons() {"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" @warn \"material-icons() Sass mixin has been deprecated as of 1.0. Use \u0027@extend .material-icons;\u0027 instead of \u0027@include material-icons();\u0027.\";"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" @include material-icons-font-class(\u0027Material Icons\u0027);"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":55}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/_variables.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"$material-icons-font-path: \u0027./\u0027 !default;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"$material-icons-font-size: 24px !default;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"$material-icons-font-display: block !default;"}],"authorContributionMap":{"KevinEyo1":3}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/filled.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons.woff2\") format(\"woff2\"), url(\"./material-icons.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/filled.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/material-icons.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons.woff2\") format(\"woff2\"), url(\"./material-icons.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-outlined.woff2\") format(\"woff2\"), url(\"./material-icons-outlined.woff\") format(\"woff\");"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":".material-icons-outlined {"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-round.woff2\") format(\"woff2\"), url(\"./material-icons-round.woff\") format(\"woff\");"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":".material-icons-round {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-sharp.woff2\") format(\"woff2\"), url(\"./material-icons-sharp.woff\") format(\"woff\");"},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":83,"author":{"gitId":"KevinEyo1"},"content":".material-icons-sharp {"},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":102,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":103,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":104,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":105,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":106,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-two-tone.woff2\") format(\"woff2\"), url(\"./material-icons-two-tone.woff\") format(\"woff\");"},{"lineNumber":107,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":108,"author":{"gitId":"KevinEyo1"},"content":".material-icons-two-tone {"},{"lineNumber":109,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":110,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":111,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":112,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":113,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":114,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":115,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":116,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":117,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":118,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":119,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":120,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":121,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":122,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":123,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":124,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":124}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/material-icons.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027filled\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027outlined\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027round\u0027;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027sharp\u0027;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027two-tone\u0027;"}],"authorContributionMap":{"KevinEyo1":5}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/outlined.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-outlined.woff2\") format(\"woff2\"), url(\"./material-icons-outlined.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons-outlined {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/outlined.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons Outlined\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/round.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-round.woff2\") format(\"woff2\"), url(\"./material-icons-round.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons-round {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/round.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons Round\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/sharp.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-sharp.woff2\") format(\"woff2\"), url(\"./material-icons-sharp.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons-sharp {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/sharp.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons Sharp\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/two-tone.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-two-tone.woff2\") format(\"woff2\"), url(\"./material-icons-two-tone.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons-two-tone {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/two-tone.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons Two Tone\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/plugins/markbind-plugin-anchors/markbind-plugin-anchors.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".fa.fa-anchor {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" color: #ccc;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" display: inline;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-size: 14px;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" margin-left: 10px;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" padding: 3px;"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" text-decoration: none;"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" visibility: hidden;"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":".fa.fa-anchor:hover {"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" color: #555;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"h1:hover \u003e .fa.fa-anchor,"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"h2:hover \u003e .fa.fa-anchor,"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"h3:hover \u003e .fa.fa-anchor,"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"h4:hover \u003e .fa.fa-anchor,"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"h5:hover \u003e .fa.fa-anchor,"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"h6:hover \u003e .fa.fa-anchor,"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":".header-wrapper:hover \u003e .fa.fa-anchor {"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" visibility: visible;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":23}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/plugins/markbind-plugin-tree/markbind-plugin-tree.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".tree {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" white-space: pre;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Fira Code\", \"Fira Mono\", monospace;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-size: 0.9375rem;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1.5;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" overflow-x: auto;"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":7}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/siteData.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"{"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" \"enableSearch\": true,"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" \"pages\": ["},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Configuration.md\","},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Configuration guide\","},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" \"configuration-guide\": \"Configuration guide\""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Design.md\","},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Design\","},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" \"design\": \"Design\","},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" \"architecture\": \"Architecture\","},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" \"component-1\": \"Component 1\","},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" \"component-2\": \"Component 2\""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/DevOps.md\","},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"DevOps guide\","},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" \"devops-guide\": \"DevOps guide\","},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" \"build-automation\": \"Build automation\","},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" \"continuous-integration-ci\": \"Continuous integration (CI)\","},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" \"code-coverage\": \"Code coverage\","},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" \"repository-wide-checks\": \"Repository-wide checks\","},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":" \"making-a-release\": \"Making a release\""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/DeveloperGuide.md\","},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Developer Guide\","},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" \"projectex-developer-guide\": \"ProjectEx Developer Guide\","},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" \"introduction\": \"Introduction\","},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" \"purpose-of-this-guide\": \"Purpose of this Guide\","},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" \"acknowledgements\": \"Acknowledgements\""},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Documentation.md\","},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Documentation guide\","},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" \"documentation-guide\": \"Documentation Guide\""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Implementation.md\","},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Implementation\","},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" \"implementation\": \"Implementation\","},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" \"proposed-featurex-implementation\": \"[Proposed] FeatureX Implementation\","},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" \"proposed-data-archiving\": \"[Proposed] Data archiving\""},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Requirements.md\","},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Requirements\","},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" \"requirements\": \"Requirements\","},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":" \"product-scope\": \"Product scope\","},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":" \"user-stories\": \"User stories\","},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":" \"use-cases\": \"Use cases\","},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":" \"non-functional-requirements\": \"Non-Functional Requirements\""},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/SettingUp.md\","},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Setting up and getting started\","},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":" \"setting-up-and-getting-started\": \"Setting up and getting started\","},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":" \"setting-up-the-project-in-your-computer\": \"Setting up the project in your computer\","},{"lineNumber":83,"author":{"gitId":"KevinEyo1"},"content":" \"before-writing-code\": \"Before writing code\""},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Testing.md\","},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Testing guide\","},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":" \"testing-guide\": \"Testing guide\","},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":" \"running-tests\": \"Running tests\","},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":" \"types-of-tests\": \"Types of tests\""},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/TracingCode.md\","},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Tutorial: Tracing code\","},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":" \"tutorial-tracing-code\": \"Tutorial: Tracing code\","},{"lineNumber":102,"author":{"gitId":"KevinEyo1"},"content":" \"before-we-start\": \"Before we start\","},{"lineNumber":103,"author":{"gitId":"KevinEyo1"},"content":" \"setting-a-breakpoint\": \"Setting a breakpoint\","},{"lineNumber":104,"author":{"gitId":"KevinEyo1"},"content":" \"tracing-the-execution-path\": \"Tracing the execution path\""},{"lineNumber":105,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":106,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":107,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":108,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":109,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"index.md\","},{"lineNumber":110,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"\","},{"lineNumber":111,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":112,"author":{"gitId":"KevinEyo1"},"content":" \"projectex\": \"ProjectEx\""},{"lineNumber":113,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":114,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":115,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":116,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":117,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"team/AboutUs.md\","},{"lineNumber":118,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"About Us\","},{"lineNumber":119,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":120,"author":{"gitId":"KevinEyo1"},"content":" \"about-us\": \"About Us\","},{"lineNumber":121,"author":{"gitId":"KevinEyo1"},"content":" \"project-team\": \"Project team\","},{"lineNumber":122,"author":{"gitId":"KevinEyo1"},"content":" \"john-doe\": \"John Doe\","},{"lineNumber":123,"author":{"gitId":"KevinEyo1"},"content":" \"jane-doe\": \"Jane Doe\","},{"lineNumber":124,"author":{"gitId":"KevinEyo1"},"content":" \"johnny-doe\": \"Johnny Doe\","},{"lineNumber":125,"author":{"gitId":"KevinEyo1"},"content":" \"jean-doe\": \"Jean Doe\","},{"lineNumber":126,"author":{"gitId":"KevinEyo1"},"content":" \"james-doe\": \"James Doe\""},{"lineNumber":127,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":128,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":129,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":130,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":131,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"team/johndoe.md\","},{"lineNumber":132,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Portfolio Page\","},{"lineNumber":133,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":134,"author":{"gitId":"KevinEyo1"},"content":" \"project-projectex\": \"Project: ProjectEx\""},{"lineNumber":135,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":136,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":137,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":138,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":139,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"userGuide/FAQ.md\","},{"lineNumber":140,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"FAQ\","},{"lineNumber":141,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":142,"author":{"gitId":"KevinEyo1"},"content":" \"faq\": \"FAQ\""},{"lineNumber":143,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":144,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":145,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":146,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":147,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"userGuide/Features.md\","},{"lineNumber":148,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Features\","},{"lineNumber":149,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":150,"author":{"gitId":"KevinEyo1"},"content":" \"features\": \"Features\","},{"lineNumber":151,"author":{"gitId":"KevinEyo1"},"content":" \"featurex\": \"FeatureX\","},{"lineNumber":152,"author":{"gitId":"KevinEyo1"},"content":" \"y-feature\": \"Y Feature\","},{"lineNumber":153,"author":{"gitId":"KevinEyo1"},"content":" \"future-feature-z-coming-in-v2-0\": \"Future Feature Z [coming in v2.0]\""},{"lineNumber":154,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":155,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":156,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":157,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":158,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"userGuide/QuickStart.md\","},{"lineNumber":159,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Quick Start\","},{"lineNumber":160,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":161,"author":{"gitId":"KevinEyo1"},"content":" \"quick-start\": \"Quick start\""},{"lineNumber":162,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":163,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":164,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":165,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":166,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"userGuide/UserGuide.md\","},{"lineNumber":167,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"User Guide\","},{"lineNumber":168,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":169,"author":{"gitId":"KevinEyo1"},"content":" \"projectex-user-guide\": \"ProjectEx User Guide\","},{"lineNumber":170,"author":{"gitId":"KevinEyo1"},"content":" \"introduction\": \"Introduction\","},{"lineNumber":171,"author":{"gitId":"KevinEyo1"},"content":" \"purpose-of-this-guide\": \"Purpose of this Guide\""},{"lineNumber":172,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":173,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":174,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":175,"author":{"gitId":"KevinEyo1"},"content":" ]"},{"lineNumber":176,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":176}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":".nav-component {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":"#page-nav {"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":" #page-nav {"},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":102,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":103,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":104,"author":{"gitId":"KevinEyo1"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":105,"author":{"gitId":"KevinEyo1"},"content":" .indented {"},{"lineNumber":106,"author":{"gitId":"KevinEyo1"},"content":" padding-left: 10px;"},{"lineNumber":107,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":108,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":109,"author":{"gitId":"KevinEyo1"},"content":" #content-wrapper {"},{"lineNumber":110,"author":{"gitId":"KevinEyo1"},"content":" padding: 0 10px;"},{"lineNumber":111,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":112,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":113,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":114,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":115,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":116,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":117,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":118,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":119,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":120,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":121,"author":{"gitId":"KevinEyo1"},"content":"/* Hide site navigation when printing */"},{"lineNumber":122,"author":{"gitId":"KevinEyo1"},"content":"@media print {"},{"lineNumber":123,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":124,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":125,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":126,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":127,"author":{"gitId":"KevinEyo1"},"content":" #page-nav {"},{"lineNumber":128,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":129,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":130,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":131,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":132,"author":{"gitId":"KevinEyo1"},"content":"h2,"},{"lineNumber":133,"author":{"gitId":"KevinEyo1"},"content":"h3,"},{"lineNumber":134,"author":{"gitId":"KevinEyo1"},"content":"h4,"},{"lineNumber":135,"author":{"gitId":"KevinEyo1"},"content":"h5,"},{"lineNumber":136,"author":{"gitId":"KevinEyo1"},"content":"h6 {"},{"lineNumber":137,"author":{"gitId":"KevinEyo1"},"content":" color: #e46c0a;"},{"lineNumber":138,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":137,"-":1}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/team/AboutUs.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_v(\"\\nThis section describes the contributors of your app.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_v(\"This img uses the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"placeholderImage\")]),_v(\" defined in the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"_markbind/variables.md\")]),_v(\" file.\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(8),_v(\" \"),_m(9),_v(\" \"),_m(10),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(11),_v(\" \"),_m(12),_v(\" \"),_m(13),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(14),_v(\" \"),_m(15),_v(\" \"),_m(16),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(17),_v(\" \"),_m(18)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(19)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"about-us\"}},[_v(\"About Us\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#about-us\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"We are a team based in \"),_c(\u0027a\u0027,{attrs:{\"href\":\"#project-team\"}},[_v(\"Organisation A\")]),_v(\".\")])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"You can reach us at the email \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"organisationa@gmail.sg\")])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"project-team\"}},[_v(\"Project team\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#project-team\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"john-doe\"}},[_v(\"John Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#john-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://www.comp.nus.edu.sg/~damithch\"}},[_v(\"homepage\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Project Advisor\")])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"jane-doe\"}},[_v(\"Jane Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#jane-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Team Lead\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Responsibilities: UI\")])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"johnny-doe\"}},[_v(\"Johnny Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#johnny-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Developer\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Responsibilities: Data\")])])}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"jean-doe\"}},[_v(\"Jean Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#jean-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Developer\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Responsibilities: Dev Ops + Threading\")])])}"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"james-doe\"}},[_v(\"James Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#james-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Developer\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Responsibilities: UI\")])])}"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":67}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/team/johndoe.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027p\u0027,[_v(\"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation. It can be taken as a reference for users to base their own MarkBind sites off of.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\n Content can be easily be replaced by the user\u0027s project information and context.\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Given below are my contributions to the project.\")]),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"project-projectex\"}},[_v(\"Project: ProjectEx\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#project-projectex\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"New Feature\")]),_v(\": Feature X\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"What it does: This feature does a thing\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Justification: This feature is important because...\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Highlights:\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Point 1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Point 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Credits: \"),_c(\u0027em\u0027,[_v(\"{mention here for reused code/ideas or use of a third-party library}\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Code contributed\")]),_v(\": \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"Github Repo\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Project management\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Managed releases \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"v1.3\")]),_v(\" - \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"v1.5rc\")]),_v(\" (3 releases) on GitHub\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Enhancements to existing features\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Wrote additional tests, increasing coverage to 92% (Pull requests \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#36\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#38\")]),_v(\")\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Documentation\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"User Guide:\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Added documentation for feature \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#72\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Developer Guide:\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Added implementation details of feature.\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Community\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"PRs reviewed (with non-trivial review comments): \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#12\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#32\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#19\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#42\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Contributed to forum discussions (examples: \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"1\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"2\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"3\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"4\")]),_v(\")\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tools\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Integrated a third party library (Natty) to the project (\"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#42\")]),_v(\")\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{ You can add/remove categories in the list above }\")])])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":16}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/userGuide/FAQ.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section answers common questions about the app or specific features.\\n\")]),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Question:\")]),_v(\" How do I learn to use this project?\")])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Answer:\")]),_v(\" Refer to the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\".\")])]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Question:\")]),_v(\" How do I contribute to this project?\")])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Answer:\")]),_v(\" Refer to the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\".\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#faq\"}},[_v(\"FAQ‎\")])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"faq\"}},[_v(\"FAQ\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#faq\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":13}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/userGuide/Features.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Notes about the app usage\")]),_c(\u0027br\u0027)]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"General information about the app\u0027s features.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"General tips about how to use the app efficiently.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Warnings that may lead to issues and how to avoid them.\")])])])]),_v(\" \"),_m(1),_v(\" \"),_c(\u0027p\u0027,[_v(\"Description of feature.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nA visual representation of the feature can be shown here.\\n\")]),_v(\" \"),_m(2),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"warning\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Caution:\")]),_v(\"\\nThings to avoid when using the feature.\")])]),_v(\" \"),_m(3),_v(\" \"),_c(\u0027p\u0027,[_v(\"Description of feature.\")]),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Feature Examples\")])]},proxy:true}])},[_v(\"\\nExamples of how to use the feature.\\n\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\" Secondary information about feature usage.\")])]),_v(\" \"),_m(4),_v(\" \"),_m(5)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#features\"}},[_v(\"Features‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#featurex\"}},[_v(\"FeatureX‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#y-feature\"}},[_v(\"Y Feature‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#future-feature-z-coming-in-v2-0\"}},[_v(\"Future Feature Z [coming in v2.0]‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(6)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"features\"}},[_v(\"Features\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#features\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"featurex\"}},[_v(\"FeatureX\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#featurex\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"List of primary information about the feature\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"How to use the feature\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"How the feature works\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Limitations of feature\")])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"y-feature\"}},[_v(\"Y Feature\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#y-feature\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"future-feature-z-coming-in-v2-0\"}},[_v(\"Future Feature Z \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"[coming in v2.0]\")]),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#future-feature-z-coming-in-v2-0\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"Details coming soon ...\")])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":28}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/userGuide/QuickStart.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section can be used to help users get started with the application quickly.\\n\")]),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#quick-start\"}},[_v(\"Quick start‎\")])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"quick-start\"}},[_v(\"Quick start\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#quick-start\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Ensure you have Java \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"11\")]),_v(\" and Node.js \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"v16\")]),_v(\" and above installed in your Computer.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Open a command terminal and run necessary setup commands like \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run setup\")]),_v(\".\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Refer to the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")]),_v(\" section for details of the app\u0027s features.\")])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":16}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/userGuide/UserGuide.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_m(0),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#projectex-user-guide\"}},[_v(\"ProjectEx User Guide‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#introduction\"}},[_v(\"Introduction‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#purpose-of-this-guide\"}},[_v(\"Purpose of this Guide‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027h1\u0027,{attrs:{\"id\":\"projectex-user-guide\"}},[_v(\"ProjectEx User Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#projectex-user-guide\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation. It can be taken as a reference for users to base their own MarkBind sites off of.\")]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"introduction\"}},[_v(\"Introduction\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#introduction\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the User Guide. This comprehensive resource is designed to assist you in navigating and utilizing our software to its fullest potential.\")]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"purpose-of-this-guide\"}},[_v(\"Purpose of this Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#purpose-of-this-guide\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"This guide aims to:\")]),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Equip users with the necessary knowledge.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Offer step-by-step instructions for common tasks and operations.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Provide tips and tricks to streamline the user experience.\")])])])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":13}},{"path":"packages/core-web/asset/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/core-web/src/print.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"// This file manipulates the content of the printed page by defining print event listeners."},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"const PAGE_NAV_ID \u003d \u0027mb-page-nav\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"const PAGE_NAV_CLONE_CLASS \u003d \u0027page-nav-clone\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"const PAGE_NAV_PRINT_CONTAINER \u003d \u0027page-nav-print\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * Remove the active style to prevent item highlighting."},{"lineNumber":9,"author":{"gitId":"-"},"content":" * @param {HTMLElement} node"},{"lineNumber":10,"author":{"gitId":"-"},"content":" */"},{"lineNumber":11,"author":{"gitId":"-"},"content":"function removeActiveStyle(container) {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" const activeElements \u003d container.querySelectorAll(\u0027a.active\u0027);"},{"lineNumber":13,"author":{"gitId":"-"},"content":" activeElements.forEach((activeElement) \u003d\u003e {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" activeElement.classList.remove(\u0027active\u0027);"},{"lineNumber":15,"author":{"gitId":"-"},"content":" });"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Create deep copies of the page navigation."},{"lineNumber":20,"author":{"gitId":"-"},"content":" * @param {HTMLElement} node"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * @returns {HTMLElement} node"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */"},{"lineNumber":23,"author":{"gitId":"-"},"content":"function clonePageNav(node) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" const pageNav \u003d node.cloneNode(true);"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" pageNav.removeAttribute(\u0027id\u0027); // avoid duplicate"},{"lineNumber":27,"author":{"gitId":"-"},"content":" removeActiveStyle(pageNav);"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" pageNav.classList.add(PAGE_NAV_CLONE_CLASS);"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" return pageNav;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"function removePageNavPrint() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" const tocElements \u003d document.querySelectorAll(`.${PAGE_NAV_CLONE_CLASS}`);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" tocElements.forEach((tocElement) \u003d\u003e {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" tocElement.remove();"},{"lineNumber":38,"author":{"gitId":"-"},"content":" });"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"// Insert page navigation into the \u003cpage-nav-print\u003e containers."},{"lineNumber":42,"author":{"gitId":"-"},"content":"window.addEventListener(\u0027beforeprint\u0027, () \u003d\u003e {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" const pageNav \u003d document.querySelector(`#${PAGE_NAV_ID}`);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" const pageNavPrintContainers \u003d document.querySelectorAll(`.${PAGE_NAV_PRINT_CONTAINER}`);"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" if (pageNav \u0026\u0026 pageNavPrintContainers.length \u003e\u003d 1) {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" removePageNavPrint(); // remove any existing clones"},{"lineNumber":48,"author":{"gitId":"-"},"content":" pageNavPrintContainers.forEach((container) \u003d\u003e {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" container.appendChild(clonePageNav(pageNav));"},{"lineNumber":50,"author":{"gitId":"-"},"content":" });"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":"});"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"// Remove page navigation clones."},{"lineNumber":55,"author":{"gitId":"-"},"content":"window.addEventListener(\u0027afterprint\u0027, () \u003d\u003e {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" removePageNavPrint();"},{"lineNumber":57,"author":{"gitId":"-"},"content":"});"},{"lineNumber":58,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":59,"author":{"gitId":"Tim-Siu"},"content":"// Check for wrapping in code blocks and adds line numbers if necessary"},{"lineNumber":60,"author":{"gitId":"Tim-Siu"},"content":"function checkForWrappingAndAddLineNumbers() {"},{"lineNumber":61,"author":{"gitId":"Tim-Siu"},"content":" document.querySelectorAll(\u0027pre \u003e code.hljs\u0027).forEach((block) \u003d\u003e {"},{"lineNumber":62,"author":{"gitId":"Tim-Siu"},"content":" // Check if any line within the block is wrapped"},{"lineNumber":63,"author":{"gitId":"Tim-Siu"},"content":" const isWrapped \u003d Array.from(block.querySelectorAll(\u0027span\u0027))"},{"lineNumber":64,"author":{"gitId":"Tim-Siu"},"content":" .some(line \u003d\u003e line.scrollWidth \u003e line.clientWidth);"},{"lineNumber":65,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":66,"author":{"gitId":"Tim-Siu"},"content":" if (isWrapped) {"},{"lineNumber":67,"author":{"gitId":"Tim-Siu"},"content":" // Add .line-numbers class to enable line numbering for wrapped lines"},{"lineNumber":68,"author":{"gitId":"Tim-Siu"},"content":" block.classList.add(\u0027line-numbers-print\u0027);"},{"lineNumber":69,"author":{"gitId":"Tim-Siu"},"content":" }"},{"lineNumber":70,"author":{"gitId":"Tim-Siu"},"content":" });"},{"lineNumber":71,"author":{"gitId":"Tim-Siu"},"content":"}"},{"lineNumber":72,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":73,"author":{"gitId":"Tim-Siu"},"content":"window.addEventListener(\u0027beforeprint\u0027, () \u003d\u003e {"},{"lineNumber":74,"author":{"gitId":"Tim-Siu"},"content":" checkForWrappingAndAddLineNumbers();"},{"lineNumber":75,"author":{"gitId":"Tim-Siu"},"content":"});"}],"authorContributionMap":{"-":57,"Tim-Siu":18}},{"path":"packages/core-web/src/styles/index.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"LamJiuFong"},"content":"@import url(\"markbind.css\");"},{"lineNumber":2,"author":{"gitId":"LamJiuFong"},"content":"@import url(\"page-nav.css\");"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":"@import url(\"~katex/dist/katex.css\");"},{"lineNumber":4,"author":{"gitId":"LamJiuFong"},"content":"@import url(\"~markdown-it-texmath/css/texmath.css\");"}],"authorContributionMap":{"LamJiuFong":4}},{"path":"packages/core-web/src/styles/markbind.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@import url(\"../../asset/css/codeblock-light.min.css\") print;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":":root {"},{"lineNumber":4,"author":{"gitId":"-"},"content":" --sticky-header-height: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"a {"},{"lineNumber":8,"author":{"gitId":"-"},"content":" text-decoration: none;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"blockquote {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" border-left: 0.25em solid #dfe2e5;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" color: #6a737d;"},{"lineNumber":14,"author":{"gitId":"-"},"content":" padding: 0 1rem;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"code {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" background: #f8f8f8;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" border-radius: 3px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" padding: 0.2em 0.4em;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" word-break: normal;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"mark code {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" background: #ffffffd4;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"}"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"pre.hljs \u003e code {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" background: none;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"pre \u003e code.hljs {"},{"lineNumber":33,"author":{"gitId":"LamJiuFong"},"content":" background-clip: padding-box;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" counter-reset: line;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"pre \u003e code.hljs[heading] {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" border-top-right-radius: 0;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":".code-block {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":".code-block-heading {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" border-radius: 6px 6px 0 0;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" font-size: 85%;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" line-height: 1;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" margin-top: 5px;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" max-width: 85%;"},{"lineNumber":54,"author":{"gitId":"-"},"content":" overflow-wrap: break-word;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" padding: 0.25em 0.4em;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" text-align: right;"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":".inline-markdown-heading {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" line-height: 1.5;"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":".code-block-content {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" clear: both;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":69,"author":{"gitId":"Tim-Siu"},"content":" pre \u003e code.hljs {"},{"lineNumber":70,"author":{"gitId":"Tim-Siu"},"content":" white-space: pre-wrap;"},{"lineNumber":71,"author":{"gitId":"Tim-Siu"},"content":" word-wrap: break-word;"},{"lineNumber":72,"author":{"gitId":"Tim-Siu"},"content":" word-break: break-all;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"Tim-Siu"},"content":" .hljs:not(.inline).line-numbers-print \u003e span {"},{"lineNumber":76,"author":{"gitId":"Tim-Siu"},"content":" padding: 0 0.5em 0 3.5em;"},{"lineNumber":77,"author":{"gitId":"Tim-Siu"},"content":" position: relative;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"Tim-Siu"},"content":" /* display line numbers beside each span */"},{"lineNumber":81,"author":{"gitId":"Tim-Siu"},"content":" .hljs:not(.inline).line-numbers-print \u003e span::before {"},{"lineNumber":82,"author":{"gitId":"Tim-Siu"},"content":" border-right: 1px solid #ddd;"},{"lineNumber":83,"author":{"gitId":"Tim-Siu"},"content":" display: inline-block;"},{"lineNumber":84,"author":{"gitId":"Tim-Siu"},"content":" color: #888;"},{"lineNumber":85,"author":{"gitId":"Tim-Siu"},"content":" content: counter(line);"},{"lineNumber":86,"author":{"gitId":"Tim-Siu"},"content":" counter-increment: line;"},{"lineNumber":87,"author":{"gitId":"Tim-Siu"},"content":" left: 0;"},{"lineNumber":88,"author":{"gitId":"Tim-Siu"},"content":" margin-right: 0.5em;"},{"lineNumber":89,"author":{"gitId":"Tim-Siu"},"content":" padding-right: 0.5em;"},{"lineNumber":90,"author":{"gitId":"Tim-Siu"},"content":" position: absolute;"},{"lineNumber":91,"author":{"gitId":"Tim-Siu"},"content":" text-align: right;"},{"lineNumber":92,"author":{"gitId":"Tim-Siu"},"content":" top: 0;"},{"lineNumber":93,"author":{"gitId":"Tim-Siu"},"content":" width: 3em;"},{"lineNumber":94,"author":{"gitId":"Tim-Siu"},"content":" height: 100%;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /* force printing the highlighting colour */"},{"lineNumber":98,"author":{"gitId":"-"},"content":" .hljs span.highlighted{"},{"lineNumber":99,"author":{"gitId":"-"},"content":" -webkit-print-color-adjust:exact;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" background:#e6e6fa !important;"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":"}"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"kbd {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" background-color: #fafbfc;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" border: 1px solid #c6cbd1;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" border-bottom-color: #959da5;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" box-shadow: inset 0 -1px 0 #959da5;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" color: #444d56;"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":".btn:active,"},{"lineNumber":113,"author":{"gitId":"-"},"content":".btn:focus {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" box-shadow: none !important;"},{"lineNumber":115,"author":{"gitId":"-"},"content":" outline: none !important;"},{"lineNumber":116,"author":{"gitId":"-"},"content":"}"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":"code.hljs.inline {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" display: initial;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" padding: 0.2em 0.4em;"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":".markbind-table {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" width: auto;"},{"lineNumber":125,"author":{"gitId":"-"},"content":"}"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":".radio-list-item,"},{"lineNumber":128,"author":{"gitId":"-"},"content":".task-list-item {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" list-style-type: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin: 0 0 0 -1.2em;"},{"lineNumber":131,"author":{"gitId":"-"},"content":"}"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":".radio-list-item label {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" font-weight: inherit;"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":".table-striped \u003e thead,"},{"lineNumber":138,"author":{"gitId":"-"},"content":".table-striped \u003e tbody \u003e tr:nth-of-type(even) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" background-color: #fff;"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * Holy Grail Layout"},{"lineNumber":144,"author":{"gitId":"-"},"content":" *"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * This section covers the common styles used within Header, Footer and Side Navigation bars"},{"lineNumber":146,"author":{"gitId":"-"},"content":" */"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":"/* Header */"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":"header[sticky] {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" transition: transform 0.3s ease-in-out;"},{"lineNumber":154,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" z-index: 1001;"},{"lineNumber":156,"author":{"gitId":"-"},"content":"}"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":"header[sticky].hide-header {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" transform: translateY(calc(-1 * var(--sticky-header-height)));"},{"lineNumber":160,"author":{"gitId":"-"},"content":"}"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"span.anchor {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":164,"author":{"gitId":"-"},"content":" top: calc(-1 * var(--sticky-header-height) - 1rem);"},{"lineNumber":165,"author":{"gitId":"-"},"content":"}"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":"/* #app is treated as the main container */"},{"lineNumber":168,"author":{"gitId":"-"},"content":"#app {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":170,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" min-height: 100vh;"},{"lineNumber":172,"author":{"gitId":"-"},"content":"}"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":"/* Footer */"},{"lineNumber":175,"author":{"gitId":"-"},"content":"footer {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" background-color: #f5f5f5;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" color: dimgrey;"},{"lineNumber":178,"author":{"gitId":"-"},"content":" padding: 10px 0;"},{"lineNumber":179,"author":{"gitId":"-"},"content":"}"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"/* TODO move this back to markdown-it-attr if bundling is implemented */"},{"lineNumber":182,"author":{"gitId":"-"},"content":".dimmed {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" color: #777;"},{"lineNumber":184,"author":{"gitId":"-"},"content":"}"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":".large {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" font-size: 125%;"},{"lineNumber":188,"author":{"gitId":"-"},"content":"}"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":".small {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" font-size: 80%;"},{"lineNumber":192,"author":{"gitId":"-"},"content":"}"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":".underline {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" text-decoration: underline;"},{"lineNumber":196,"author":{"gitId":"-"},"content":"}"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":".mkb-text-red {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" color: red !important;"},{"lineNumber":200,"author":{"gitId":"-"},"content":"}"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":".mkb-text-green {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" color: green !important;"},{"lineNumber":204,"author":{"gitId":"-"},"content":"}"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":".mkb-text-blue {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" color: blue !important;"},{"lineNumber":208,"author":{"gitId":"-"},"content":"}"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":".mkb-text-cyan {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" color: cyan !important;"},{"lineNumber":212,"author":{"gitId":"-"},"content":"}"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":".mkb-text-magenta {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" color: magenta !important;"},{"lineNumber":216,"author":{"gitId":"-"},"content":"}"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":".mkb-text-yellow {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" color: yellow !important;"},{"lineNumber":220,"author":{"gitId":"-"},"content":"}"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":".mkb-text-black {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" color: black !important;"},{"lineNumber":224,"author":{"gitId":"-"},"content":"}"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":".mkb-text-white {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" color: white !important;"},{"lineNumber":228,"author":{"gitId":"-"},"content":"}"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":231,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":232,"author":{"gitId":"-"},"content":" .dropdown-menu \u003e li \u003e a {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" white-space: normal;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" .navbar-nav .open .dropdown-menu {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" background-color: #fff;"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":"}"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":"/* Footnote anchor */"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":"li.footnote-item:target {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" background-color: #eee;"},{"lineNumber":245,"author":{"gitId":"-"},"content":"}"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":".hljs:not(.inline) \u003e span {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":249,"author":{"gitId":"-"},"content":"}"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":".hljs:not(.inline).line-numbers \u003e span {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" padding: 0 0.5em 0 3.5em;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":254,"author":{"gitId":"-"},"content":"}"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":"/* display line numbers beside each span */"},{"lineNumber":257,"author":{"gitId":"-"},"content":".hljs:not(.inline).line-numbers \u003e span::before {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" border-right: 1px solid #ddd;"},{"lineNumber":259,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" color: #888;"},{"lineNumber":261,"author":{"gitId":"-"},"content":" content: counter(line);"},{"lineNumber":262,"author":{"gitId":"-"},"content":" counter-increment: line;"},{"lineNumber":263,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" margin-right: 0.5em;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" padding-right: 0.5em;"},{"lineNumber":266,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" text-align: right;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" width: 3em;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" height: 100%;"},{"lineNumber":271,"author":{"gitId":"-"},"content":"}"},{"lineNumber":272,"author":{"gitId":"-"},"content":""},{"lineNumber":273,"author":{"gitId":"-"},"content":"/* styles for triggers and tooltips */"},{"lineNumber":274,"author":{"gitId":"-"},"content":".trigger {"},{"lineNumber":275,"author":{"gitId":"LamJiuFong"},"content":" border-bottom: 1px dotted currentcolor;"},{"lineNumber":276,"author":{"gitId":"-"},"content":"}"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":".trigger-click {"},{"lineNumber":279,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":280,"author":{"gitId":"LamJiuFong"},"content":" border-bottom: 1px dashed currentcolor;"},{"lineNumber":281,"author":{"gitId":"-"},"content":"}"},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":".trigger-click:focus {"},{"lineNumber":284,"author":{"gitId":"-"},"content":" outline: none;"},{"lineNumber":285,"author":{"gitId":"-"},"content":"}"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":"/* \"Copy\" and \"wrap text\" code block buttons */"},{"lineNumber":288,"author":{"gitId":"-"},"content":"pre {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":291,"author":{"gitId":"-"},"content":"}"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":"button.function-btn {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" border: 1px solid #d7dadc;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" color: darkgray;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":298,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":299,"author":{"gitId":"-"},"content":" margin: 0.17rem;"},{"lineNumber":300,"author":{"gitId":"-"},"content":" padding: 0.35rem;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":303,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" white-space: nowrap;"},{"lineNumber":305,"author":{"gitId":"-"},"content":"}"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":"button.function-btn + button.function-btn {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" right: 36px;"},{"lineNumber":309,"author":{"gitId":"-"},"content":"}"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":"pre:hover \u003e .function-btn-container \u003e button.function-btn {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":313,"author":{"gitId":"-"},"content":"}"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":".function-btn:hover {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" transition: all 0.5s ease;"},{"lineNumber":317,"author":{"gitId":"-"},"content":" color: gray;"},{"lineNumber":318,"author":{"gitId":"-"},"content":"}"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":".function-btn-body {"},{"lineNumber":321,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":323,"author":{"gitId":"-"},"content":"}"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":".function-btn svg {"},{"lineNumber":326,"author":{"gitId":"LamJiuFong"},"content":" fill: currentcolor;"},{"lineNumber":327,"author":{"gitId":"-"},"content":"}"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":"/* Wrap class used for \"wrap text\" button. */"},{"lineNumber":330,"author":{"gitId":"-"},"content":"code.wrap {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" white-space: pre-wrap;"},{"lineNumber":332,"author":{"gitId":"-"},"content":" word-wrap: break-word;"},{"lineNumber":333,"author":{"gitId":"Tim-Siu"},"content":" word-break: break-all;"},{"lineNumber":334,"author":{"gitId":"-"},"content":"}"},{"lineNumber":335,"author":{"gitId":"-"},"content":""},{"lineNumber":336,"author":{"gitId":"-"},"content":"/* Octicon sizing */"},{"lineNumber":337,"author":{"gitId":"-"},"content":".octicon {"},{"lineNumber":338,"author":{"gitId":"-"},"content":" height: 1em;"},{"lineNumber":339,"author":{"gitId":"-"},"content":" width: 1em;"},{"lineNumber":340,"author":{"gitId":"-"},"content":"}"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":"/* styles for \u003chr\u003e */"},{"lineNumber":343,"author":{"gitId":"-"},"content":"hr {"},{"lineNumber":344,"author":{"gitId":"LamJiuFong"},"content":" border-top: solid 1px rgb(0 0 0 / 10%);"},{"lineNumber":345,"author":{"gitId":"-"},"content":" background-color: transparent;"},{"lineNumber":346,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":347,"author":{"gitId":"-"},"content":"}"},{"lineNumber":348,"author":{"gitId":"-"},"content":""},{"lineNumber":349,"author":{"gitId":"-"},"content":"hr.dotted {"},{"lineNumber":350,"author":{"gitId":"-"},"content":" border-top-width: 0.1rem;"},{"lineNumber":351,"author":{"gitId":"-"},"content":" border-top-style: dotted;"},{"lineNumber":352,"author":{"gitId":"-"},"content":"}"},{"lineNumber":353,"author":{"gitId":"-"},"content":""},{"lineNumber":354,"author":{"gitId":"-"},"content":"hr.double {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" border-top-width: 0.2rem;"},{"lineNumber":356,"author":{"gitId":"-"},"content":" border-top-style: double;"},{"lineNumber":357,"author":{"gitId":"-"},"content":"}"},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":"hr.dashed {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" border-top-width: 0.1rem;"},{"lineNumber":361,"author":{"gitId":"-"},"content":" border-top-style: dashed;"},{"lineNumber":362,"author":{"gitId":"-"},"content":"}"},{"lineNumber":363,"author":{"gitId":"-"},"content":""},{"lineNumber":364,"author":{"gitId":"-"},"content":"hr.thick {"},{"lineNumber":365,"author":{"gitId":"-"},"content":" border-top-width: 0.15rem;"},{"lineNumber":366,"author":{"gitId":"-"},"content":"}"},{"lineNumber":367,"author":{"gitId":"-"},"content":""},{"lineNumber":368,"author":{"gitId":"-"},"content":"hr.thick-1 {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" border-top-width: 0.25rem;"},{"lineNumber":370,"author":{"gitId":"-"},"content":"}"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":"hr.thick-2 {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" border-top-width: 0.5rem;"},{"lineNumber":374,"author":{"gitId":"-"},"content":"}"},{"lineNumber":375,"author":{"gitId":"-"},"content":""},{"lineNumber":376,"author":{"gitId":"-"},"content":"hr.thick-3 {"},{"lineNumber":377,"author":{"gitId":"-"},"content":" border-top-width: 0.75rem;"},{"lineNumber":378,"author":{"gitId":"-"},"content":"}"},{"lineNumber":379,"author":{"gitId":"-"},"content":""},{"lineNumber":380,"author":{"gitId":"-"},"content":"ol,"},{"lineNumber":381,"author":{"gitId":"-"},"content":"ul {"},{"lineNumber":382,"author":{"gitId":"-"},"content":" padding-left: 1.5rem;"},{"lineNumber":383,"author":{"gitId":"-"},"content":"}"},{"lineNumber":384,"author":{"gitId":"-"},"content":""},{"lineNumber":385,"author":{"gitId":"-"},"content":"h1,"},{"lineNumber":386,"author":{"gitId":"-"},"content":"h2,"},{"lineNumber":387,"author":{"gitId":"-"},"content":"h3,"},{"lineNumber":388,"author":{"gitId":"-"},"content":"h4,"},{"lineNumber":389,"author":{"gitId":"-"},"content":"h5,"},{"lineNumber":390,"author":{"gitId":"-"},"content":"h6 {"},{"lineNumber":391,"author":{"gitId":"-"},"content":" margin-bottom: 1rem;"},{"lineNumber":392,"author":{"gitId":"-"},"content":" scroll-margin-top: var(--sticky-header-height);"},{"lineNumber":393,"author":{"gitId":"-"},"content":"}"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":".block-embed {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":397,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":398,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":399,"author":{"gitId":"-"},"content":"}"},{"lineNumber":400,"author":{"gitId":"-"},"content":""},{"lineNumber":401,"author":{"gitId":"-"},"content":".block-embed iframe {"},{"lineNumber":402,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":403,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":405,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":406,"author":{"gitId":"-"},"content":" height: 100%;"},{"lineNumber":407,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":378,"Tim-Siu":23}},{"path":"packages/core-web/src/styles/page-nav.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"/* Page navigation */"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"#mb-page-nav {"},{"lineNumber":4,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 12px 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"#mb-page-nav a:link,"},{"lineNumber":8,"author":{"gitId":"-"},"content":"#mb-page-nav a:visited {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" color: #9b9b9b;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" text-decoration: none;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"#mb-page-nav a:hover {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" color: black;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"#mb-page-nav a.active {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" background-color: transparent;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" color: black;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".page-nav-title {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" color: black;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" white-space: inherit;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" padding-left: 0.5rem;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"}"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":".nested {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" margin-left: 5%;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":".no-flex-wrap {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" flex-wrap: nowrap;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":1,"-":34}},{"path":"packages/core/package.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"name\": \"@markbind/core\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"version\": \"5.4.0\","},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"description\": \"MarkBind core module\","},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"keywords\": ["},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"mark\","},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"markdown\","},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"markbind\","},{"lineNumber":9,"author":{"gitId":"-"},"content":" \"fragment\","},{"lineNumber":10,"author":{"gitId":"-"},"content":" \"reusable\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"homepage\": \"https://markbind.org\","},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"license\": \"MIT\","},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"main\": \"index.js\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"types\": \"index.d.ts\","},{"lineNumber":16,"author":{"gitId":"-"},"content":" \"repository\": {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \"type\": \"git\","},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"url\": \"https://github.com/MarkBind/markbind.git\","},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"directory\": \"packages/core\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" },"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"publishConfig\": {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"access\": \"public\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" },"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"scripts\": {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"compile\": \"tsc\","},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"build\": \"tsc --noEmitOnError\","},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"prepare\": \"npm run build\","},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"test\": \"jest --colors\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" },"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"dependencies\": {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"@fortawesome/fontawesome-free\": \"^6.4.0\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"@markbind/core-web\": \"5.4.0\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"@primer/octicons\": \"^15.0.1\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"@sindresorhus/slugify\": \"^0.9.1\","},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"@tlylt/markdown-it-imsize\": \"^3.0.0\","},{"lineNumber":36,"author":{"gitId":"-"},"content":" \"bluebird\": \"^3.7.2\","},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"bootswatch\": \"5.1.3\","},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"cheerio\": \"^0.22.0\","},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"crypto-js\": \"^4.0.0\","},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"csv-parse\": \"^4.14.2\","},{"lineNumber":41,"author":{"gitId":"-"},"content":" \"ensure-posix-path\": \"^1.1.1\","},{"lineNumber":42,"author":{"gitId":"-"},"content":" \"fastmatter\": \"^2.1.1\","},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"fs-extra\": \"^9.0.1\","},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"gh-pages\": \"^2.1.1\","},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"highlight.js\": \"^10.4.1\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"htmlparser2\": \"^3.10.1\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"ignore\": \"^5.1.4\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"js-beautify\": \"1.14.3\","},{"lineNumber":49,"author":{"gitId":"-"},"content":" \"katex\": \"^0.15.6\","},{"lineNumber":50,"author":{"gitId":"-"},"content":" \"lodash\": \"^4.17.15\","},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"markdown-it\": \"^12.3.2\","},{"lineNumber":52,"author":{"gitId":"-"},"content":" \"markdown-it-attrs\": \"^4.1.3\","},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"markdown-it-emoji\": \"^1.4.0\","},{"lineNumber":54,"author":{"gitId":"-"},"content":" \"markdown-it-linkify-images\": \"^3.0.0\","},{"lineNumber":55,"author":{"gitId":"-"},"content":" \"markdown-it-mark\": \"^3.0.0\","},{"lineNumber":56,"author":{"gitId":"-"},"content":" \"markdown-it-regexp\": \"^0.4.0\","},{"lineNumber":57,"author":{"gitId":"-"},"content":" \"markdown-it-sub\": \"^1.0.0\","},{"lineNumber":58,"author":{"gitId":"-"},"content":" \"markdown-it-sup\": \"^1.0.0\","},{"lineNumber":59,"author":{"gitId":"-"},"content":" \"markdown-it-table-of-contents\": \"^0.4.4\","},{"lineNumber":60,"author":{"gitId":"-"},"content":" \"markdown-it-task-lists\": \"^2.1.1\","},{"lineNumber":61,"author":{"gitId":"-"},"content":" \"markdown-it-texmath\": \"^1.0.0\","},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"markdown-it-video\": \"^0.6.3\","},{"lineNumber":63,"author":{"gitId":"-"},"content":" \"material-icons\": \"^1.9.1\","},{"lineNumber":64,"author":{"gitId":"-"},"content":" \"moment\": \"^2.29.4\","},{"lineNumber":65,"author":{"gitId":"-"},"content":" \"nunjucks\": \"3.2.4\","},{"lineNumber":66,"author":{"gitId":"-"},"content":" \"path-is-inside\": \"^1.0.2\","},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" \"simple-git\": \"^3.22.0\","},{"lineNumber":68,"author":{"gitId":"-"},"content":" \"url-parse\": \"^1.5.10\","},{"lineNumber":69,"author":{"gitId":"-"},"content":" \"uuid\": \"^8.3.1\","},{"lineNumber":70,"author":{"gitId":"-"},"content":" \"vue\": \"2.6.14\","},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"vue-server-renderer\": \"2.6.14\","},{"lineNumber":72,"author":{"gitId":"-"},"content":" \"vue-template-compiler\": \"2.6.14\","},{"lineNumber":73,"author":{"gitId":"-"},"content":" \"walk-sync\": \"^2.0.2\","},{"lineNumber":74,"author":{"gitId":"-"},"content":" \"winston\": \"^2.4.4\""},{"lineNumber":75,"author":{"gitId":"-"},"content":" },"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \"devDependencies\": {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \"@jest/globals\": \"^29.5.0\","},{"lineNumber":78,"author":{"gitId":"-"},"content":" \"@types/bluebird\": \"^3.5.36\","},{"lineNumber":79,"author":{"gitId":"-"},"content":" \"@types/cheerio\": \"^0.22.31\","},{"lineNumber":80,"author":{"gitId":"-"},"content":" \"@types/crypto-js\": \"^4.1.1\","},{"lineNumber":81,"author":{"gitId":"-"},"content":" \"@types/domhandler\": \"^2.4.2\","},{"lineNumber":82,"author":{"gitId":"-"},"content":" \"@types/fs-extra\": \"^9.0.13\","},{"lineNumber":83,"author":{"gitId":"-"},"content":" \"@types/gh-pages\": \"^3.2.1\","},{"lineNumber":84,"author":{"gitId":"-"},"content":" \"@types/htmlparser2\": \"^3.10.3\","},{"lineNumber":85,"author":{"gitId":"-"},"content":" \"@types/jest\": \"^27.4.1\","},{"lineNumber":86,"author":{"gitId":"-"},"content":" \"@types/js-beautify\": \"^1.13.3\","},{"lineNumber":87,"author":{"gitId":"-"},"content":" \"@types/katex\": \"^0.16.0\","},{"lineNumber":88,"author":{"gitId":"-"},"content":" \"@types/lodash\": \"^4.14.181\","},{"lineNumber":89,"author":{"gitId":"-"},"content":" \"@types/markdown-it\": \"^12.2.3\","},{"lineNumber":90,"author":{"gitId":"-"},"content":" \"@types/node\": \"^18.15.0\","},{"lineNumber":91,"author":{"gitId":"-"},"content":" \"@types/nunjucks\": \"^3.2.1\","},{"lineNumber":92,"author":{"gitId":"-"},"content":" \"@types/path-is-inside\": \"^1.0.0\","},{"lineNumber":93,"author":{"gitId":"-"},"content":" \"@types/primer__octicons\": \"^17.11.0\","},{"lineNumber":94,"author":{"gitId":"-"},"content":" \"@types/url-parse\": \"^1.4.8\","},{"lineNumber":95,"author":{"gitId":"-"},"content":" \"@types/uuid\": \"^9.0.0\","},{"lineNumber":96,"author":{"gitId":"-"},"content":" \"jest\": \"^27.5.1\","},{"lineNumber":97,"author":{"gitId":"-"},"content":" \"memfs\": \"^3.0.1\","},{"lineNumber":98,"author":{"gitId":"-"},"content":" \"ts-jest\": \"^27.1.4\""},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"KevinEyo1":1,"-":99}},{"path":"packages/core/src/Page/page.njk","fileType":"njk","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003c!DOCTYPE html\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003chtml\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003chead\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" {%- if asset.headTop %}"},{"lineNumber":5,"author":{"gitId":"-"},"content":" {%- for headContent in asset.headTop %}"},{"lineNumber":6,"author":{"gitId":"-"},"content":" {{ headContent }}"},{"lineNumber":7,"author":{"gitId":"-"},"content":" {%- endfor %}"},{"lineNumber":8,"author":{"gitId":"-"},"content":" {%- endif %}"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cmeta charset\u003d\"utf-8\"\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cmeta http-equiv\u003d\"X-UA-Compatible\" content\u003d\"IE\u003dedge\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cmeta name\u003d\"generator\" content\u003d\"{{ markBindVersion }}\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cmeta name\u003d\"viewport\" content\u003d\"width\u003ddevice-width, initial-scale\u003d1\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" {%- if title -%} \u003ctitle\u003e{{ title }}\u003c/title\u003e {%- endif -%}"},{"lineNumber":14,"author":{"gitId":"-"},"content":" {% if asset.bootstrap %} \u003clink rel\u003d\"stylesheet\" href\u003d\"{{ asset.bootstrap }}\"\u003e {%- endif -%}"},{"lineNumber":15,"author":{"gitId":"-"},"content":" {% if asset.fontAwesome %} \u003clink rel\u003d\"stylesheet\" href\u003d\"{{ asset.fontAwesome }}\"\u003e {%- endif -%}"},{"lineNumber":16,"author":{"gitId":"-"},"content":" {% if asset.glyphicons %} \u003clink rel\u003d\"stylesheet\" href\u003d\"{{ asset.glyphicons }}\"\u003e {%- endif -%}"},{"lineNumber":17,"author":{"gitId":"-"},"content":" {% if asset.octicons %} \u003clink rel\u003d\"stylesheet\" href\u003d\"{{ asset.octicons }}\"\u003e {%- endif -%}"},{"lineNumber":18,"author":{"gitId":"-"},"content":" {% if asset.materialIcons %} \u003clink rel\u003d\"stylesheet\" href\u003d\"{{ asset.materialIcons }}\"\u003e {%- endif -%}"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{ asset.highlight }}\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" {%- if not dev -%}\u003clink rel\u003d\"stylesheet\" href\u003d\"{{ asset.markBindCss }}\"\u003e{%- endif -%}"},{"lineNumber":21,"author":{"gitId":"LamJiuFong"},"content":" \u003cscript src\u003d\"{{ asset.polyfillJs }}\" defer\u003e\u003c/script\u003e"},{"lineNumber":22,"author":{"gitId":"LamJiuFong"},"content":" \u003cscript src\u003d\"{{ asset.vue }}\" defer\u003e\u003c/script\u003e"},{"lineNumber":23,"author":{"gitId":"LamJiuFong"},"content":" \u003cscript src\u003d\"{{ asset.markBindJs }}\" defer\u003e\u003c/script\u003e"},{"lineNumber":24,"author":{"gitId":"LamJiuFong"},"content":" \u003cscript src\u003d\"{{ asset.pageVueRenderJs }}\" defer\u003e\u003c/script\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" {%- if asset.pluginLinks -%}"},{"lineNumber":26,"author":{"gitId":"-"},"content":" {%- for link in asset.pluginLinks -%}"},{"lineNumber":27,"author":{"gitId":"-"},"content":" {{ link }}"},{"lineNumber":28,"author":{"gitId":"-"},"content":" {%- endfor -%}"},{"lineNumber":29,"author":{"gitId":"-"},"content":" {%- endif -%}"},{"lineNumber":30,"author":{"gitId":"-"},"content":" {%- if asset.headBottom %}"},{"lineNumber":31,"author":{"gitId":"-"},"content":" {%- for headContent in asset.headBottom %}"},{"lineNumber":32,"author":{"gitId":"-"},"content":" {{ headContent }}"},{"lineNumber":33,"author":{"gitId":"-"},"content":" {%- endfor %}"},{"lineNumber":34,"author":{"gitId":"-"},"content":" {%- endif %}"},{"lineNumber":35,"author":{"gitId":"-"},"content":" {%- if faviconUrl -%} \u003clink rel\u003d\"icon\" href\u003d\"{{ faviconUrl }}\"\u003e {%- endif -%}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/head\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" const baseUrl \u003d \u0027{{ baseUrl }}\u0027"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003cbody {% if hasPageNavHeadings %} data-bs-spy\u003d\"scroll\" data-bs-target\u003d\"#mb-page-nav\" data-bs-offset\u003d\"100\" {% endif %}\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":"{{ content }}"},{"lineNumber":42,"author":{"gitId":"-"},"content":"\u003c/body\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":"{{- pageUserScriptsAndStyles -}}"},{"lineNumber":44,"author":{"gitId":"-"},"content":"{{- layoutUserScriptsAndStyles -}}"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cscript src\u003d\"{{ asset.bootstrapUtilityJs }}\"\u003e\u003c/script\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" {% if enableSearch %}MarkBind.setupWithSearch(){% else %}MarkBind.setup(){% endif %}"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":"{%- if asset.externalScripts %}"},{"lineNumber":50,"author":{"gitId":"-"},"content":"{%- for script in asset.externalScripts %}"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cscript src\u003d\"{{ script }}\"\u003e\u003c/script\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":"{%- endfor %}"},{"lineNumber":53,"author":{"gitId":"-"},"content":"{%- endif %}"},{"lineNumber":54,"author":{"gitId":"-"},"content":"{%- if asset.pluginScripts %}"},{"lineNumber":55,"author":{"gitId":"-"},"content":"{%- for script in asset.pluginScripts %}"},{"lineNumber":56,"author":{"gitId":"-"},"content":" {{ script }}"},{"lineNumber":57,"author":{"gitId":"-"},"content":"{%- endfor %}"},{"lineNumber":58,"author":{"gitId":"-"},"content":"{%- endif %}"},{"lineNumber":59,"author":{"gitId":"-"},"content":"{%- if asset.scriptBottom %}"},{"lineNumber":60,"author":{"gitId":"-"},"content":"{%- for scripts in asset.scriptBottom %}"},{"lineNumber":61,"author":{"gitId":"-"},"content":" {{ scripts }}"},{"lineNumber":62,"author":{"gitId":"-"},"content":"{%- endfor %}"},{"lineNumber":63,"author":{"gitId":"-"},"content":"{%- endif %}"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003c/html\u003e"}],"authorContributionMap":{"LamJiuFong":4,"-":60}},{"path":"packages/core/src/Site/siteConvertLayout.njk","fileType":"njk","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{% raw %}{{baseUrl}}{% endraw %}/stylesheets/main.css\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar placement\u003d\"top\" type\u003d\"dark\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{% raw %}{{baseUrl}}{% endraw %}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-solid fa-house\"\u003e\u003c/i\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{% raw %}{{baseUrl}}{% endraw %}/index.html\" class\u003d\"nav-link\"\u003eHOME\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{% raw %}{{baseUrl}}{% endraw %}/about.html\" class\u003d\"nav-link\"\u003eABOUT\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/form\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003c/header\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eContents\u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"{{ siteNav }}"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cbreadcrumb /\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" {% raw %}{{ content }}{% endraw %}"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cfooter\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":"{%- set defaultFooter -%}"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003csmall\u003e[Generated by {% raw %}{{MarkBind}}{% endraw %}]\u003c/small\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":"{%- endset -%}"},{"lineNumber":50,"author":{"gitId":"-"},"content":"{{ footer or defaultFooter }}"},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003c/footer\u003e"}],"authorContributionMap":{"jingting1412":1,"-":50}},{"path":"packages/core/src/plugins/web3FormAssets/web-3-form.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"LamJiuFong"},"content":".web-3-form input,"},{"lineNumber":2,"author":{"gitId":"LamJiuFong"},"content":".web-3-form select,"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":".web-3-form textarea {"},{"lineNumber":4,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding: 12px;"},{"lineNumber":6,"author":{"gitId":"-"},"content":" border: 1px solid #ccc;"},{"lineNumber":7,"author":{"gitId":"-"},"content":" border-radius: 4px;"},{"lineNumber":8,"author":{"gitId":"-"},"content":" box-sizing: border-box;"},{"lineNumber":9,"author":{"gitId":"-"},"content":" margin-top: 6px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" margin-bottom: 16px;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" resize: vertical;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":3,"-":9}},{"path":"packages/core/template/default/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"packages/core/template/project/_markbind/layouts/default.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"\u003chead-bottom\u003e"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"\u003c/head-bottom\u003e"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"\u003cheader sticky\u003e"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" \u003cnavbar type\u003d\"dark\"\u003e"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eProjectEx\u003c/a\u003e"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" \u003cli\u003e\u003ca highlight-on\u003d\"sibling-or-child\" href\u003d\"{{baseUrl}}/userGuide/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" \u003cli\u003e\u003ca highlight-on\u003d\"sibling-or-child\" href\u003d\"{{baseUrl}}/developerGuide/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" \u003cli\u003e\u003ca highlight-on\u003d\"sibling-or-child\" href\u003d\"{{baseUrl}}/team/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" \u003c/li\u003e"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" \u003c/form\u003e"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" \u003c/li\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" \u003c/navbar\u003e"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"\u003c/header\u003e"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" \u003cnav id\u003d\"site-nav\"\u003e"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" \u003csite-nav\u003e"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"* [Home]({{ baseUrl }}/index.html)"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"* [User Guide]({{ baseUrl }}/userGuide/UserGuide.html) :expanded:"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" * [Quick Start]({{ baseUrl }}/userGuide/QuickStart.html)"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" * [Features]({{ baseUrl }}/userGuide/Features.html)"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" * [FAQ]({{ baseUrl }}/userGuide/FAQ.html)"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"* [Developer Guide]({{ baseUrl }}/developerGuide/DeveloperGuide.html) :expanded:"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" * [Setting Up]({{ baseUrl }}/developerGuide/SettingUp.html)"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":" * [Tutorial: Tracing code]({{ baseUrl }}/developerGuide/TracingCode.html)"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" * [Design]({{ baseUrl }}/developerGuide/Design.html)"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" * [Implementation]({{ baseUrl }}/developerGuide/Implementation.html)"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" * Project Guides"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" * [Documentation]({{ baseUrl }}/developerGuide/Documentation.html)"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" * [Testing]({{ baseUrl }}/developerGuide/Testing.html)"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" * [Configuration]({{ baseUrl }}/developerGuide/Configuration.html)"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" * [DevOps]({{ baseUrl }}/developerGuide/DevOps.html)"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" * Appendix"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" * [Requirements]({{ baseUrl }}/developerGuide/Requirements.html)"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"* [About Us]({{ baseUrl }}/team/AboutUs.html) :expanded:"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" * [Contributor Portfolio Template]({{ baseUrl }}/team/johndoe.html)"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" \u003c/site-nav\u003e"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" \u003c/div\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" \u003c/nav\u003e"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" {{ content }}"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" \u003cnav id\u003d\"page-nav\"\u003e"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" \u003cpage-nav /\u003e"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" \u003c/div\u003e"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" \u003c/nav\u003e"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"\u003c/div\u003e"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":"\u003cfooter\u003e"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" \u003cdiv class\u003d\"text-center\"\u003e"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}]\u003c/small\u003e"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" \u003c/div\u003e"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":"\u003c/footer\u003e"}],"authorContributionMap":{"KevinEyo1":63}},{"path":"packages/core/template/project/_markbind/variables.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"example\"\u003e"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"To inject this HTML segment in your markbind files, use {{ example }} where you want to place it."},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"More generally, surround the segment\u0027s id with double curly braces."},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"\u003c/variable\u003e"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"placeholderImage\"\u003e"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"\u003cimg src\u003d\"../images/johndoe.png\" width\u003d\"200px\"\u003e"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"\u003c/variable\u003e"}],"authorContributionMap":{"KevinEyo1":8}},{"path":"packages/core/template/project/developerGuide/Configuration.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Configuration guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"# Configuration guide"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to understand how to configure the application such as descriptions of the config file and how to change the configuration."},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: `config.json`)."}],"authorContributionMap":{"KevinEyo1":12}},{"path":"packages/core/template/project/developerGuide/Design.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Design\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Design"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section describes the architecture of your app, explaining how the main components work and interact with each other. Using architecture diagrams is recommended."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"### Architecture"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"The ***Architecture Diagram*** given below explains the high-level design of the ProjectEx App."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cpuml src\u003d\"../diagrams/example.puml\" width\u003d300 /\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"Replace the above example diagram with an Architecture Diagram of your project created using [`puml` feature](https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams)."},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"Given below is a quick overview of main components and how they interact with each other."},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"**Main components of the architecture**"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"The bulk of the app\u0027s work is done by the following components:"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"* [**`Component 1`**](#component-1): Does something."},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"* [**`Component 2`**](#component-2): Does something."},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"**Interactions between architecture components**"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"The *Sequence Diagram* below shows how the components interact with each other for a certain scenario."},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"\u003cannotate src\u003d\"../images/johndoe.png\" width\u003d\"300\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Minimal Point --\u003e"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"25%\" content\u003d\"This point is 25% from the left and 25% from the top\" /\u003e"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Size (default size is 40px) --\u003e"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" content\u003d\"This point is 50% from the left and 25% from the top\" size\u003d\"60\"/\u003e"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Header (default is empty) --\u003e"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"25%\" content\u003d\"This point is 75% from the left and 25% from the top\" header\u003d\"This has a header\"/\u003e"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Color (default color is green) --\u003e"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"33%\" y\u003d\"50%\" content\u003d\"This point is 33% from the left and 50% from the top\" color\u003d\"red\"/\u003e"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Opacity (default opacity is 0.3) --\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"66%\" y\u003d\"50%\" content\u003d\"This point is 66% from the left and 50% from the top\" opacity\u003d\"0.7\"/\u003e"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Label (default is empty) --\u003e"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"75%\" content\u003d\"This point is 25% from the left and 75% from the top\" label\u003d\"1\"/\u003e"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Text Color (default color is black) --\u003e"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"75%\" content\u003d\"This point is 50% from the left and 75% from the top\" textColor\u003d\"white\" color\u003d\"black\" label\u003d\"2\" opacity\u003d\"1\"/\u003e"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Font Size (default font size is 14) --\u003e"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"75%\" content\u003d\"This point is 75% from the left and 75% from the top\" fontSize\u003d\"30\" label\u003d\"3\"/\u003e"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"\u003c/annotate\u003e"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"For diagrams like your Sequence Diagram, it can also be created using [`annotate` feature](https://markbind.org/userGuide/components/imagesAndDiagrams.html#annotations), that will allow you to annotate specific parts of your diagram."},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"The sections below give more details of each component."},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":"**Tip:** Describe in each section how each component works in detail, including its classes, methods, and how it interacts with other components."},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"You can use a combination of Markbind\u0027s [**Diagrams** feature](https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams) to provide a visual representation of each component, such as architecture and sequence diagrams."},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":"### Component 1"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":"Component 1 is made up of parts e.g.`A`, `B`, `C` etc."},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":"\u003cpic src\u003d\"../images/johndoe.png\" width\u003d\"200px\" style\u003d\"margin-bottom: 20px;\"\u003e"},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":"Diagram: Component 1"},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":"\u003c/pic\u003e"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":"Component 1,"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":"* works with Component 2 in this way."},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":"### Component 2"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":83,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":"**Note:** You can use boxes to include details that you want to draw the reader\u0027s attention to. See [`Boxes` feature](https://markbind.org/userGuide/components/presentation.html#boxes)."},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":"\u003cpic src\u003d\"../images/johndoe.png\" width\u003d\"200px\" style\u003d\"margin-bottom: 20px;\"\u003e"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":"Diagram: Component 2"},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":"\u003c/pic\u003e"},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":"Component 2,"},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":"* works with Component 1 in this way."}],"authorContributionMap":{"KevinEyo1":93}},{"path":"packages/core/template/project/developerGuide/DevOps.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"DevOps guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# DevOps guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to understand the DevOps practices adopted by the project."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"## Build automation"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"This example project includes features for **build automation and dependency management**. You can walkthrough command scripts you have in your project, such as how to clean, test, and run the project."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Example Commands for Typical Projects**\"\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"The following commands are examples. You can customize them according to your project\u0027s needs."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"* **`clean`**: Deletes the files created during the previous build tasks.\u003cbr\u003e"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" e.g. `npm run clean`"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"* **`run`**: Builds and runs the application.\u003cbr\u003e"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"* **`test`**: Runs all tests."},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" * `npm run test` — Runs all tests"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" * `npm run cleantest` — Cleans the project and runs tests"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"## Continuous integration (CI)"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"This project uses [GitHub Actions](https://github.com/features/actions) for CI. The project comes with the necessary GitHub Actions configurations files (in the `.github/workflows` folder). No further setting up required."},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"### Code coverage"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":"As part of CI, this project tracks code coverage as well."},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"### Repository-wide checks"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"Your CI can include some repository-wide checks. These repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements."},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"## Making a release"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"Here are the steps to create a new release."},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"Make sure you have the necessary permissions to create a release."},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":"\u003cpopover id\u003d\"pop:trigger_id\" content\u003d\"e.g. `v0.1`\"\u003e\u003c/popover\u003e"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"1. Update the version number."},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":"1. Tag the repo with the \u003ctrigger for\u003d\"pop:trigger_id\"\u003eversion number\u003c/trigger\u003e. "},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"1. [Create a new release using GitHub](https://help.github.com/articles/creating-releases/)."}],"authorContributionMap":{"KevinEyo1":59}},{"path":"packages/core/template/project/developerGuide/DeveloperGuide.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Developer Guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# ProjectEx Developer Guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"## Introduction"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"Welcome to the Developer Guide. This guide helps developers understand the architecture, setup, and development workflows of our software, serving as your starting point and companion."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"## Purpose of this Guide"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"The main objectives of this guide are to:"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"1. Orient new developers to the software\u0027s architecture and codebase structure."},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"1. Provide a comprehensive reference for the development practices, coding standards, and tools used."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"1. Detail the setup process for a development environment."},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"## **Acknowledgements**"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"_{ List and link sources of all reused/adapted ideas, code, documentation, and third-party libraries }_"}],"authorContributionMap":{"KevinEyo1":26}},{"path":"packages/core/template/project/developerGuide/Documentation.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Documentation guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Documentation Guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to understand the documentation practices and link to relevant sources to help developers contribute to documentation."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"* We use [**MarkBind**](https://markbind.org/) to manage documentation."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"* The `docs/` folder contains the source files for the documentation website."},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"* To learn how set it up and maintain the project website, follow the guide [[se-edu/guides] Working with Forked MarkBind sites](https://se-education.org/guides/tutorials/markbind-forked-sites.html) for project documentation."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"success\" seamless\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"Updating documentation as changes are made to the project is ideal for any project."},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"**Style guidance:**"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"* Follow the [**_Google developer documentation style guide_**](https://developers.google.com/style)."},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"* Also relevant is the [_se-edu/guides **Markdown coding standard**_](https://se-education.org/guides/conventions/markdown.html)."},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"**Converting to PDF**"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"* See the guide [_se-edu/guides **Saving web documents as PDF files**_](https://se-education.org/guides/tutorials/savingPdf.html)."}],"authorContributionMap":{"KevinEyo1":29}},{"path":"packages/core/template/project/developerGuide/Implementation.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Implementation\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Implementation"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section can be used to describe some noteworthy details on how certain features are implemented."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"### \\[Proposed\\] FeatureX Implementation"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"Given below is an example usage scenario and how FeatureX behaves at each step."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"1. **Step 1**: User does something"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" * **Expected**: FeatureX does something in response"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"1. **Step 2**: User does something else"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" "},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" * **Expected**: FeatureX does something else in response"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"#### Design considerations:"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"**Aspect: How FeatureX executes:**"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Alternative 1 (current choice):** Implementation 1\"\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"Pros: Easy to implement.\u003cbr\u003e"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"Cons: May have performance issues in terms of memory usage."},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Alternative 2:** Implementation 2\"\u003e"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"Pros: Will use less memory.\u003cbr\u003e"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"Cons: We must add addtional test cases."},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":"_{ More aspects and alternatives to be added }_"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"### \\[Proposed\\] Data archiving"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"_{ Explain here how the data archiving feature will be implemented }_"}],"authorContributionMap":{"KevinEyo1":44}},{"path":"packages/core/template/project/developerGuide/Requirements.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Requirements\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Requirements"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section can be used to describe the requirements of the app, through the use of user stories, use cases."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"### Product scope"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"**Target user profile**:"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"* user needs"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"* user preferences"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"* user information"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"**Value proposition**: Benefit compared to other similar products"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"**Non-Functional Requirements**:"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"* OS requirements"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"* Peformance"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"* Security"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"### User stories"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"|----------|--------------------------------|----------------|---------------------|"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"| `* * *` | new user | see something | visualise something |"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"| `* *` | user | do something | complete something |"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"| `*` | user with specific information | sort something | find something |"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"*{More to be added}*"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"### Use cases"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":"(For all use cases below, the **System** is the `ProjectEx` and the **Actor** is the `User`, unless specified otherwise)"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Use case 1: Do something**\"\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" "},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"**MSS**"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":"1. User requests ProjectEx"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"1. ProjectEx provides response"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" Use case ends."},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"**Extensions**"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"* 2a. Requests fails."},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" Use case ends."},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"* 2b. User request is invalid."},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" * 2b1. ProjectEx shows an error message."},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":" Use case resumes at step 2."},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":"*{More to be added}*"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":"### Non-Functional Requirements"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed."},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage."},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":"*{More to be added}*"}],"authorContributionMap":{"KevinEyo1":75}},{"path":"packages/core/template/project/developerGuide/SettingUp.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Setting up and getting started\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Setting up and getting started"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to help developers with setting up the project in their local environment."},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"## Setting up the project in your computer"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"**Caution:**"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"Follow the steps in the following guide precisely. Things will not work out if you deviate in some steps."},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"First, **fork** the project repo, and **clone** the fork into your computer."},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"\u003cpopover id\u003d\"pop:trigger_id\" content\u003d\"eg. `init` or `build` commands\"\u003e\u003c/popover\u003e"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"(Example) Steps to setup the project environment:"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"1. **Download packages**: Run `npm install` to download the required packages."},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"1. **Run setup commands**: Run \u003ctrigger for\u003d\"pop:trigger_id\"\u003ecommands\u003c/trigger\u003e needed to setup the project."},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" \u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" Note: Remember to run commands from the appropriate directory."},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" \u003c/box\u003e"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"1. **Configure files**: Edit config files according to your needs. For example, changing the `appTitle` in `config.js` to match your project name."},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"1. **Verify the setup (optional)**:"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" 1. Run the `build` and `serve` commands, ensuring that the site properly deploys on your local host."},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" 1. [Run the tests](Testing.md) to ensure they all pass."},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"## Before writing code"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"1. **Configure the coding style**"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" Configure your VSCode or IDEA checkstyle to allign with the project\u0027s coding style."},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" \u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" **Tip:**"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" You can easily customize your IDE\u0027s coding style through settings."},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" \u003c/box\u003e"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"1. **Set up CI**"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" This project comes with a GitHub Actions config files (in `.github/workflows` folder). When GitHub detects those files, it will run the CI for your project automatically at each push to the `master` branch or to any PR. No set up required."},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":"1. **Learn the design**"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" When you are ready to start coding, we recommend that you get some sense of the overall design by reading about [ProjectEx’s architecture](Design.md#Architecture)."},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"1. **Do the tutorial**"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" The [Tracing Code tutorial](TracingCode.md) can help you get acquainted with the codebase."},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":63}},{"path":"packages/core/template/project/developerGuide/Testing.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Testing guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Testing guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to understand the testing processes."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"## Running tests"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"* **Method 1: Using script**"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" * Create script for running tests in package.json"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" * Open a console and run the command for the script, like `npm run test`"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"## Types of tests"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"This project has two types of tests:"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**1. Unit tests**\"\u003e"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"These tests target the lowest level methods/classes.\u003cbr\u003e"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"Example command (replace with your own): `npm run test`"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**2. Integration tests**\"\u003e"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"These tests are checking the integration of multiple code units (those code units are assumed to be working)."},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"}],"authorContributionMap":{"KevinEyo1":33}},{"path":"packages/core/template/project/developerGuide/TracingCode.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Tutorial: Tracing code\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Tutorial: Tracing code"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"\u003e Indeed, the ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. …​\\[Therefore,\\] making it easy to read makes it easier to write."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"\u003e — Robert C. Martin Clean Code: A Handbook of Agile Software Craftsmanship"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"This page can be taken as a reference on a tutorial on how to trace the execution path of a user command through the codebase of the App."},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"To understand an unfamiliar codebase, one strategy is to trace some representative execution path through the codebase using a debugger."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"## Before we start"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"Before we jump into the code, it is useful to get an idea of the overall structure and the high-level behavior of the application."},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"Architecture diagrams can be easily utilised with the [`puml`](https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams) tag. The `src` attribute specifies the path to the PlantUML file."},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"\u003cpuml src\u003d\"../diagrams/example.puml\" width\u003d300 /\u003e"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"Before we proceed, ensure that you have done the following:"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"1. Read the [*Architecture* section of the DG](Design.html#architecture)"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"1. Set up the project in your preferred IDE"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"## Setting a breakpoint"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"As you know, the first step of debugging is to put in a breakpoint where you want the debugger to pause the execution."},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":"**Tip:** You can use a combination of Markbind\u0027s [**Images and Diagrams** features](https://markbind.org/userGuide/components/imagesAndDiagrams.html) such as `puml` and `pic` tags to provide a visual representation of the steps to be taken. [**Code blocks**](https://markbind.org/userGuide/formattingContents.html#code) can also be used as shown below."},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"```java"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"public interface Example {"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" /**"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" * Executes returns the output."},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" * @param exampleInput The input as entered by the user."},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" * @return The example output."},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" * @throws ExampleException If an error occurs."},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" ExampleOutput execute(String exampleInput) throws ExampleException;"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"..."},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":"```"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"## Tracing the execution path"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":"**Tip:** You can use a list of steps to guide the reader through the process of tracing the execution path. This can be done using Markbind\u0027s [**Lists** feature](https://markbind.org/userGuide/formattingContents.html#lists)."},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":"1. Firstly, do this."},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":"1. Next, do that."},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":"1. Finally, do this."}],"authorContributionMap":{"KevinEyo1":71}},{"path":"packages/core/template/project/index.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"# ProjectEx"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"[![CI Status](https://github.com/MarkBind/markbind/workflows/CI/badge.svg)](https://github.com/MarkBind/markbind/actions)"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"[![codecov](https://codecov.io/gh/MarkBind/markbind/branch/master/graph/badge.svg)](https://codecov.io/gh/MarkBind/markbind)"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003cpic src\u003d\"images/SeEduLogo.png\" width\u003d\"200px\" style\u003d\"margin-bottom: 20px;\"\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"Project Onboarding Screen"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"\u003c/pic\u003e"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"**ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation.** "},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"Take this template as a _starting point_ for your project documentation, taking reference of what would be in a typical project documentation site, replacing the content with your own."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"* If you are interested in using ProjectEx, head over to the [_Quick Start_ section of the **User Guide**](userGuide/QuickStart.html)."},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"* If you are interested about contributing to developing ProjectEx, the [**Developer Guide**](developerGuide/DeveloperGuide.html) is a good place to start."},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"**Acknowledgements**"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"Remember to replace the following with your own acknowledgements."},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)"}],"authorContributionMap":{"KevinEyo1":31}},{"path":"packages/core/template/project/site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"{"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" \"baseUrl\": \"\","},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" \"titlePrefix\": \"\","},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" \"titleSuffix\": \"ProjectEx\","},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" \"faviconPath\": \"images/SeEduLogo.png\","},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" \"style\": {"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" \"codeTheme\": \"light\""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" \"ignore\": ["},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" \"_markbind/layouts/*\","},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" \"_markbind/logs/*\","},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" \"_site/*\","},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" \"site.json\","},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" \"*.md\","},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" \"*.njk\","},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" \".git/*\","},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" \"node_modules/*\""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" ],"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" \"pagesExclude\": [\"node_modules/*\"],"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" \"pages\": ["},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" \"glob\": [\"**/index.md\", \"**/*.md\"]"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" ],"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" \"deploy\": {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" \"message\": \"Site Update.\""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" \"timeZone\": \"Asia/Singapore\""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":29}},{"path":"packages/core/template/project/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":".nav-component {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":"#page-nav {"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":" #page-nav {"},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":102,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":103,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":104,"author":{"gitId":"KevinEyo1"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":105,"author":{"gitId":"KevinEyo1"},"content":" .indented {"},{"lineNumber":106,"author":{"gitId":"KevinEyo1"},"content":" padding-left: 10px;"},{"lineNumber":107,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":108,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":109,"author":{"gitId":"KevinEyo1"},"content":" #content-wrapper {"},{"lineNumber":110,"author":{"gitId":"KevinEyo1"},"content":" padding: 0 10px;"},{"lineNumber":111,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":112,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":113,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":114,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":115,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":116,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":117,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":118,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":119,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":120,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":121,"author":{"gitId":"KevinEyo1"},"content":"/* Hide site navigation when printing */"},{"lineNumber":122,"author":{"gitId":"KevinEyo1"},"content":"@media print {"},{"lineNumber":123,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":124,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":125,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":126,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":127,"author":{"gitId":"KevinEyo1"},"content":" #page-nav {"},{"lineNumber":128,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":129,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":130,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":131,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":132,"author":{"gitId":"KevinEyo1"},"content":"h2,"},{"lineNumber":133,"author":{"gitId":"KevinEyo1"},"content":"h3,"},{"lineNumber":134,"author":{"gitId":"KevinEyo1"},"content":"h4,"},{"lineNumber":135,"author":{"gitId":"KevinEyo1"},"content":"h5,"},{"lineNumber":136,"author":{"gitId":"KevinEyo1"},"content":"h6 {"},{"lineNumber":137,"author":{"gitId":"KevinEyo1"},"content":" color: #e46c0a;"},{"lineNumber":138,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":137,"-":1}},{"path":"packages/core/template/project/team/AboutUs.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"About Us\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"# About Us"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"This section describes the contributors of your app."},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"We are a team based in [Organisation A](#project-team)."},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"You can reach us at the email `organisationa@gmail.sg`"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"## Project team"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"### John Doe"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"This img uses the `placeholderImage` defined in the `_markbind/variables.md` file."},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"[[homepage](http://www.comp.nus.edu.sg/~damithch)]"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"[[github](https://github.com/johndoe)]"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"* Role: Project Advisor"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"### Jane Doe"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"[[github](http://github.com/johndoe)]"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":"* Role: Team Lead"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"* Responsibilities: UI"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":"### Johnny Doe"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"[[github](http://github.com/johndoe)]"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"* Role: Developer"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"* Responsibilities: Data"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"### Jean Doe"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"[[github](http://github.com/johndoe)]"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"* Role: Developer"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":"* Responsibilities: Dev Ops + Threading"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":"### James Doe"},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":"[[github](http://github.com/johndoe)]"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":"* Role: Developer"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":"* Responsibilities: UI"}],"authorContributionMap":{"KevinEyo1":71}},{"path":"packages/core/template/project/team/johndoe.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Portfolio Page\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"### Project: ProjectEx"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation. It can be taken as a reference for users to base their own MarkBind sites off of."},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" Content can be easily be replaced by the user\u0027s project information and context."},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"Given below are my contributions to the project."},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"* **New Feature**: Feature X"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" * What it does: This feature does a thing"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" * Justification: This feature is important because..."},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" * Highlights:"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" * Point 1"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" * Point 2"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" * Credits: *{mention here for reused code/ideas or use of a third-party library}*"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"* **Code contributed**: [Github Repo]()"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"* **Project management**:"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"* **Enhancements to existing features**:"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" * Wrote additional tests, increasing coverage to 92% (Pull requests [\\#36](), [\\#38]())"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"* **Documentation**:"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" * User Guide:"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" * Added documentation for feature [\\#72]()"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" * Developer Guide:"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" * Added implementation details of feature."},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"* **Community**:"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"* **Tools**:"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"* _{ You can add/remove categories in the list above }_"}],"authorContributionMap":{"KevinEyo1":45}},{"path":"packages/core/template/project/userGuide/FAQ.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"FAQ\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# FAQ"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section answers common questions about the app or specific features."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Question:** How do I learn to use this project?\"\u003e"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"**Answer:** Refer to the [User Guide](../userGuide/UserGuide.md)."},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Question:** How do I contribute to this project?\"\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"**Answer:** Refer to the [Developer Guide](../developerGuide/DeveloperGuide.md)."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"}],"authorContributionMap":{"KevinEyo1":20}},{"path":"packages/core/template/project/userGuide/Features.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Features\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Features"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"**Notes about the app usage**\u003cbr\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"* General information about the app\u0027s features."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"* General tips about how to use the app efficiently."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"* Warnings that may lead to issues and how to avoid them."},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"### FeatureX"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"Description of feature."},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"A visual representation of the feature can be shown here."},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"* List of primary information about the feature"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"* How to use the feature"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"* How the feature works"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"* Limitations of feature"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"**Caution:**"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"Things to avoid when using the feature."},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"### Y Feature"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"Description of feature."},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"Feature Examples\"\u003e"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"Examples of how to use the feature."},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":"**Tip:** Secondary information about feature usage."},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"### Future Feature Z `[coming in v2.0]`"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"_Details coming soon ..._"}],"authorContributionMap":{"KevinEyo1":54}},{"path":"packages/core/template/project/userGuide/QuickStart.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Quick Start\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Quick start"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section can be used to help users get started with the application quickly."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"1. Ensure you have Java `11` and Node.js `v16` and above installed in your Computer."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"1. Open a command terminal and run necessary setup commands like `npm run setup`."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"1. Refer to the [Features](Features.html) section for details of the app\u0027s features."}],"authorContributionMap":{"KevinEyo1":17}},{"path":"packages/core/template/project/userGuide/UserGuide.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"User Guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# ProjectEx User Guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation. It can be taken as a reference for users to base their own MarkBind sites off of."},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"## Introduction"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"Welcome to the User Guide. This comprehensive resource is designed to assist you in navigating and utilizing our software to its fullest potential."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"## Purpose of this Guide"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"This guide aims to:"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"1. Equip users with the necessary knowledge."},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"1. Offer step-by-step instructions for common tasks and operations."},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"1. Provide tips and tricks to streamline the user experience."}],"authorContributionMap":{"KevinEyo1":22}},{"path":"packages/vue-components/src/Box.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":3,"author":{"gitId":"-"},"content":" :class\u003d\"["},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u0027alert box-container\u0027,"},{"lineNumber":5,"author":{"gitId":"-"},"content":" containerStyle(),"},{"lineNumber":6,"author":{"gitId":"-"},"content":" addClass,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" { \u0027d-flex\u0027: seamlessHeaderBool() },"},{"lineNumber":8,"author":{"gitId":"-"},"content":" ]\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" :style\u003d\"customStyle()\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003c!--Icon and vertical divider for seamless header box--\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"seamlessHeaderBool()\" class\u003d\"d-flex\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":14,"author":{"gitId":"-"},"content":" v-if\u003d\"iconBool()\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027icon-wrapper\u0027, iconStyle()]\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" :style\u003d\"customIconColorStyle()\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"icon\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003ci :class\u003d\"[\u0027fas\u0027, getFontAwesomeIconStyle()]\"\u003e\u003c/i\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":23,"author":{"gitId":"-"},"content":" class\u003d\"vertical-divider\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" :class\u003d\"getBootstrapAlertStyle()\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" aria-hidden\u003d\"true\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"header-and-body\"\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c!-- Header wrapper, not rendered if there is no header attribute --\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":32,"author":{"gitId":"-"},"content":" v-if\u003d\"headerBool()\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027box-header-wrapper\u0027, { \u0027alert-dismissible\u0027: dismissible }]\""},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c!-- icon on the left of the header --\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":37,"author":{"gitId":"-"},"content":" v-if\u003d\"iconBool() \u0026\u0026 !seamlessHeaderBool()\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027icon-wrapper\u0027, iconStyle()]\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" :style\u003d\"customIconColorStyle()\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"icon\"\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003ci :class\u003d\"[\u0027fas\u0027, getFontAwesomeIconStyle()]\"\u003e\u003c/i\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003c!-- header --\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"box-header\"\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003c!-- dismiss button to the right of the header --\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":53,"author":{"gitId":"-"},"content":" v-if\u003d\"dismissible\""},{"lineNumber":54,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" class\u003d\"btn-close close-with-heading\""},{"lineNumber":56,"author":{"gitId":"-"},"content":" data-bs-dismiss\u003d\"alert\""},{"lineNumber":57,"author":{"gitId":"-"},"content":" aria-label\u003d\"Close\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c!-- Body wrapper --\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":64,"author":{"gitId":"-"},"content":" :class\u003d\"["},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u0027box-body-wrapper\u0027,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u0027alert-dismissible\u0027: dismissible \u0026\u0026 !headerBool(),"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u0027box-body-wrapper-with-heading\u0027: headerBool(),"},{"lineNumber":69,"author":{"gitId":"-"},"content":" },"},{"lineNumber":70,"author":{"gitId":"-"},"content":" ]\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003c!-- icon on the left, not shown if there is a header --\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":74,"author":{"gitId":"-"},"content":" v-if\u003d\"iconBool() \u0026\u0026 !headerBool()\""},{"lineNumber":75,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027icon-wrapper\u0027, iconStyle()]\""},{"lineNumber":76,"author":{"gitId":"-"},"content":" :style\u003d\"customIconColorStyle()\""},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"icon\"\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003ci :class\u003d\"[\u0027fas\u0027, getFontAwesomeIconStyle()]\"\u003e\u003c/i\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003c!-- Icon -- content divider for seamless boxes without the header attribute --\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":85,"author":{"gitId":"-"},"content":" v-if\u003d\"seamlessNoHeaderBool()\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" class\u003d\"vertical-divider\""},{"lineNumber":87,"author":{"gitId":"-"},"content":" :class\u003d\"getBootstrapAlertStyle()\""},{"lineNumber":88,"author":{"gitId":"-"},"content":" aria-hidden\u003d\"true\""},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" \u003c!-- Content wrapper --\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"contents\" :style\u003d\"customColorStyle()\"\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003c!-- dismiss button on the right, not shown if there is a header --\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":98,"author":{"gitId":"-"},"content":" v-if\u003d\"dismissible \u0026\u0026 !headerBool()\""},{"lineNumber":99,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":100,"author":{"gitId":"-"},"content":" class\u003d\"btn-close\""},{"lineNumber":101,"author":{"gitId":"-"},"content":" data-bs-dismiss\u003d\"alert\""},{"lineNumber":102,"author":{"gitId":"-"},"content":" aria-label\u003d\"Close\""},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"import { classifyBootstrapStyle } from \u0027./utils/utils\u0027;"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" dismissible: {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":117,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":118,"author":{"gitId":"-"},"content":" },"},{"lineNumber":119,"author":{"gitId":"-"},"content":" backgroundColor: {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":121,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":122,"author":{"gitId":"-"},"content":" },"},{"lineNumber":123,"author":{"gitId":"-"},"content":" borderColor: {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" },"},{"lineNumber":127,"author":{"gitId":"-"},"content":" borderLeftColor: {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":129,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":130,"author":{"gitId":"-"},"content":" },"},{"lineNumber":131,"author":{"gitId":"-"},"content":" color: {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":133,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":134,"author":{"gitId":"-"},"content":" },"},{"lineNumber":135,"author":{"gitId":"-"},"content":" icon: {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":137,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":138,"author":{"gitId":"-"},"content":" },"},{"lineNumber":139,"author":{"gitId":"-"},"content":" iconSize: {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":141,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":142,"author":{"gitId":"-"},"content":" },"},{"lineNumber":143,"author":{"gitId":"-"},"content":" iconColor: {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":145,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":146,"author":{"gitId":"-"},"content":" },"},{"lineNumber":147,"author":{"gitId":"-"},"content":" type: {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":149,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":150,"author":{"gitId":"-"},"content":" },"},{"lineNumber":151,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":153,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":154,"author":{"gitId":"-"},"content":" },"},{"lineNumber":155,"author":{"gitId":"-"},"content":" light: {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":157,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":158,"author":{"gitId":"-"},"content":" },"},{"lineNumber":159,"author":{"gitId":"-"},"content":" seamless: {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":161,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":162,"author":{"gitId":"-"},"content":" },"},{"lineNumber":163,"author":{"gitId":"-"},"content":" noIcon: {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":165,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":166,"author":{"gitId":"-"},"content":" },"},{"lineNumber":167,"author":{"gitId":"-"},"content":" noBackground: {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":169,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":170,"author":{"gitId":"-"},"content":" },"},{"lineNumber":171,"author":{"gitId":"-"},"content":" noBorder: {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":173,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":174,"author":{"gitId":"-"},"content":" },"},{"lineNumber":175,"author":{"gitId":"-"},"content":" theme: {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":177,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":178,"author":{"gitId":"-"},"content":" },"},{"lineNumber":179,"author":{"gitId":"-"},"content":" },"},{"lineNumber":180,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" bootStrapStyle() {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" return classifyBootstrapStyle(this.type, this.theme);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" },"},{"lineNumber":184,"author":{"gitId":"-"},"content":" },"},{"lineNumber":185,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" isSeamless() {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return !this.light \u0026\u0026 this.seamless;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" },"},{"lineNumber":189,"author":{"gitId":"-"},"content":" seamlessNoHeaderBool() {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" return this.isSeamless() \u0026\u0026 !this.headerBool();"},{"lineNumber":191,"author":{"gitId":"-"},"content":" },"},{"lineNumber":192,"author":{"gitId":"-"},"content":" seamlessHeaderBool() {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" return this.isSeamless() \u0026\u0026 this.headerBool();"},{"lineNumber":194,"author":{"gitId":"-"},"content":" },"},{"lineNumber":195,"author":{"gitId":"-"},"content":" headerBool() {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" return !!this.$scopedSlots.header;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" },"},{"lineNumber":198,"author":{"gitId":"-"},"content":" iconBool() {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" // this.$scopedSlots.icon is either undefined or an object"},{"lineNumber":200,"author":{"gitId":"-"},"content":" const isIconSlotFilled \u003d !!this.$scopedSlots.icon;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" return (!this.noIcon \u0026\u0026 this.type) || isIconSlotFilled;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" },"},{"lineNumber":203,"author":{"gitId":"-"},"content":" containerStyle() {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" let containerStyle;"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" if (this.light) {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" containerStyle \u003d `${this.getBootstrapBorderStyle()} alert-border-left`;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" } else if (this.seamless) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" containerStyle \u003d \u0027seamless\u0027;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" containerStyle \u003d this.getBootstrapAlertStyle();"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" if (this.noBackground) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" containerStyle +\u003d \u0027 no-background\u0027;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" if (this.noBorder) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" containerStyle +\u003d \u0027 no-border\u0027;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" return containerStyle;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" },"},{"lineNumber":224,"author":{"gitId":"-"},"content":" customStyle() {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" const style \u003d {};"},{"lineNumber":226,"author":{"gitId":"-"},"content":" if (this.backgroundColor) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" style.backgroundColor \u003d this.backgroundColor;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" style.borderColor \u003d this.backgroundColor;"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":" if (this.borderColor) {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" style.border \u003d `1px solid ${this.borderColor}`;"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }"},{"lineNumber":233,"author":{"gitId":"-"},"content":" if (this.borderLeftColor) {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" style.borderLeft \u003d `5px solid ${this.borderLeftColor}`;"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":" return style;"},{"lineNumber":237,"author":{"gitId":"-"},"content":" },"},{"lineNumber":238,"author":{"gitId":"-"},"content":" customColorStyle() {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" if (this.color) {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" return { color: this.color };"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":" return {};"},{"lineNumber":243,"author":{"gitId":"-"},"content":" },"},{"lineNumber":244,"author":{"gitId":"-"},"content":" iconStyle() {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" let iconStyle \u003d \u0027\u0027;"},{"lineNumber":246,"author":{"gitId":"-"},"content":" if (this.iconSize) {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" iconStyle +\u003d `fa-${this.iconSize}`;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" if (this.light || this.seamless) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" iconStyle +\u003d ` ${this.getBootstrapTextStyle()}`;"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" return iconStyle;"},{"lineNumber":255,"author":{"gitId":"-"},"content":" },"},{"lineNumber":256,"author":{"gitId":"-"},"content":" customIconColorStyle() {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" if (this.iconColor) {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" return { color: `${this.iconColor}!important` };"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":" return {};"},{"lineNumber":261,"author":{"gitId":"-"},"content":" },"},{"lineNumber":262,"author":{"gitId":"-"},"content":" getBootstrapAlertStyle() {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" return `alert-${this.bootStrapStyle.style}`;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" },"},{"lineNumber":265,"author":{"gitId":"-"},"content":" getBootstrapTextStyle() {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" return `text-${this.bootStrapStyle.style}`;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" },"},{"lineNumber":268,"author":{"gitId":"-"},"content":" getBootstrapBorderStyle() {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" return `border-${this.bootStrapStyle.style}`;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" },"},{"lineNumber":271,"author":{"gitId":"-"},"content":" getFontAwesomeIconStyle() {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" return this.bootStrapStyle.icon;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" },"},{"lineNumber":274,"author":{"gitId":"-"},"content":" },"},{"lineNumber":275,"author":{"gitId":"-"},"content":"};"},{"lineNumber":276,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":279,"author":{"gitId":"-"},"content":" .box-container {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":281,"author":{"gitId":"-"},"content":" border-radius: 6px;"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" .box-header-wrapper {"},{"lineNumber":285,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":286,"author":{"gitId":"-"},"content":" flex-direction: row;"},{"lineNumber":287,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":288,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":289,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.4rem 1.25rem 0.28rem;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" border-radius: 6px 6px 0 0;"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" .box-body-wrapper {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" flex-direction: row;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" padding: 0.75rem 1.25rem;"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" .box-container.seamless \u003e .header-and-body \u003e .box-body-wrapper {"},{"lineNumber":301,"author":{"gitId":"-"},"content":" padding: 0.75rem 0.5rem;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" }"},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":" .contents {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" padding: 0 6px;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":307,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":308,"author":{"gitId":"-"},"content":" }"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" .box-container.seamless \u003e .header-and-body \u003e div.box-body-wrapper \u003e .contents {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" padding-left: 12px;"},{"lineNumber":312,"author":{"gitId":"-"},"content":" }"},{"lineNumber":313,"author":{"gitId":"-"},"content":""},{"lineNumber":314,"author":{"gitId":"-"},"content":" .heading {"},{"lineNumber":315,"author":{"gitId":"-"},"content":" display: inline;"},{"lineNumber":316,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":317,"author":{"gitId":"-"},"content":" font-weight: normal;"},{"lineNumber":318,"author":{"gitId":"-"},"content":" color: inherit;"},{"lineNumber":319,"author":{"gitId":"LamJiuFong"},"content":" background-color: rgb(240 240 240 / 60%);"},{"lineNumber":320,"author":{"gitId":"-"},"content":" width: auto;"},{"lineNumber":321,"author":{"gitId":"LamJiuFong"},"content":" padding: 3px 5px 4px;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" border-width: 0;"},{"lineNumber":323,"author":{"gitId":"LamJiuFong"},"content":" border-radius: 0 6px;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" margin: -13px -27px 0 15px;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":" .box-body-wrapper-with-heading {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" padding-top: 0.5rem;"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":""},{"lineNumber":331,"author":{"gitId":"-"},"content":" .alert-dismissible {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" padding-right: 4rem;"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" .box-header {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" font-weight: 500;"},{"lineNumber":337,"author":{"gitId":"-"},"content":" }"},{"lineNumber":338,"author":{"gitId":"-"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":" .icon-wrapper {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" display: inline;"},{"lineNumber":341,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":342,"author":{"gitId":"-"},"content":" margin-right: 0.5em;"},{"lineNumber":343,"author":{"gitId":"-"},"content":" min-width: 1em;"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" .close-with-heading {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":348,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":349,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":350,"author":{"gitId":"-"},"content":" padding: 1rem;"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" .close-with-heading \u003e span {"},{"lineNumber":354,"author":{"gitId":"-"},"content":" vertical-align: text-top;"},{"lineNumber":355,"author":{"gitId":"-"},"content":" }"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":" .alert-dismissible .btn-close {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" padding: 1rem;"},{"lineNumber":359,"author":{"gitId":"-"},"content":" }"},{"lineNumber":360,"author":{"gitId":"-"},"content":""},{"lineNumber":361,"author":{"gitId":"-"},"content":" .contents \u003e :last-child {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" margin-bottom: 0;"},{"lineNumber":363,"author":{"gitId":"-"},"content":" }"},{"lineNumber":364,"author":{"gitId":"-"},"content":""},{"lineNumber":365,"author":{"gitId":"-"},"content":" .alert-default {"},{"lineNumber":366,"author":{"gitId":"-"},"content":" color: #24292e;"},{"lineNumber":367,"author":{"gitId":"-"},"content":" background-color: #f6f8fa;"},{"lineNumber":368,"author":{"gitId":"-"},"content":" border-color: #e8ebef;"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":""},{"lineNumber":371,"author":{"gitId":"-"},"content":" .alert-border-left {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" background-color: #f9f8f8;"},{"lineNumber":373,"author":{"gitId":"-"},"content":" border-left: solid;"},{"lineNumber":374,"author":{"gitId":"-"},"content":" border-width: 0 0 0 5px;"},{"lineNumber":375,"author":{"gitId":"-"},"content":" }"},{"lineNumber":376,"author":{"gitId":"-"},"content":""},{"lineNumber":377,"author":{"gitId":"-"},"content":" .vertical-divider {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" width: 4px;"},{"lineNumber":379,"author":{"gitId":"-"},"content":" }"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":" .horizontal-divider {"},{"lineNumber":382,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":383,"author":{"gitId":"-"},"content":" width: calc(100% - 2.5rem);"},{"lineNumber":384,"author":{"gitId":"-"},"content":" height: 3px;"},{"lineNumber":385,"author":{"gitId":"-"},"content":" }"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" .no-background {"},{"lineNumber":388,"author":{"gitId":"-"},"content":" background: none;"},{"lineNumber":389,"author":{"gitId":"-"},"content":" }"},{"lineNumber":390,"author":{"gitId":"-"},"content":""},{"lineNumber":391,"author":{"gitId":"-"},"content":" .no-border {"},{"lineNumber":392,"author":{"gitId":"-"},"content":" border: none;"},{"lineNumber":393,"author":{"gitId":"-"},"content":" }"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"LamJiuFong"},"content":" @media screen and (width \u003c\u003d 768px) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" .box-header-wrapper {"},{"lineNumber":397,"author":{"gitId":"-"},"content":" padding: 0.75rem 0.75rem 0.1rem;"},{"lineNumber":398,"author":{"gitId":"-"},"content":" }"},{"lineNumber":399,"author":{"gitId":"-"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" .box-body-wrapper {"},{"lineNumber":401,"author":{"gitId":"-"},"content":" padding: 0.75rem;"},{"lineNumber":402,"author":{"gitId":"-"},"content":" }"},{"lineNumber":403,"author":{"gitId":"-"},"content":""},{"lineNumber":404,"author":{"gitId":"-"},"content":" .contents {"},{"lineNumber":405,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":406,"author":{"gitId":"-"},"content":" }"},{"lineNumber":407,"author":{"gitId":"-"},"content":" }"},{"lineNumber":408,"author":{"gitId":"-"},"content":"\u003c/style\u003e"},{"lineNumber":409,"author":{"gitId":"-"},"content":""},{"lineNumber":410,"author":{"gitId":"-"},"content":"\u003c!-- TODO move this once we upgrade vue-loader version for scoped deep selectors --\u003e"},{"lineNumber":411,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":412,"author":{"gitId":"-"},"content":" div.box-header \u003e * {"},{"lineNumber":413,"author":{"gitId":"-"},"content":" margin-bottom: 0;"},{"lineNumber":414,"author":{"gitId":"-"},"content":" }"},{"lineNumber":415,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":5,"-":410}},{"path":"packages/vue-components/src/Dropdown.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cli"},{"lineNumber":3,"author":{"gitId":"-"},"content":" v-if\u003d\"isLi\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"dropdown\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[{ \u0027disabled\u0027: disabledBool }, \u0027dropdown\u0027, addClass]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003ca"},{"lineNumber":9,"author":{"gitId":"-"},"content":" class\u003d\"dropdown-toggle nav-link\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" role\u003d\"button\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" :class\u003d\"{\u0027disabled\u0027: disabledBool}\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" data-bs-toggle\u003d\"dropdown\""},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"dropdown-menu\" :class\u003d\"[{ \u0027show\u0027: show }, { \u0027dropdown-menu-end\u0027: menuAlignRight }]\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cul class\u003d\"dropdown-menu\" :class\u003d\"[{ \u0027show\u0027: show }, { \u0027dropdown-menu-end\u0027: menuAlignRight }]\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003csubmenu v-else-if\u003d\"isSubmenu\" ref\u003d\"submenu\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003ctemplate v-for\u003d\"(node, name) in $scopedSlots\" #[name]\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cslot :name\u003d\"name\"\u003e\u003c/slot\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/template\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/submenu\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":29,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":30,"author":{"gitId":"-"},"content":" ref\u003d\"dropdown\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" :class\u003d\"[{ \u0027disabled\u0027: disabledBool }, \u0027btn-group\u0027, addClass]\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"before\"\u003e\u003c/slot\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":36,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" class\u003d\"btn dropdown-toggle\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"[btnType, btnWithBefore, { \u0027dropdown-toggle-split\u0027: hasBefore }]\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" :disabled\u003d\"disabledBool\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" data-bs-reference\u003d\"parent\""},{"lineNumber":41,"author":{"gitId":"-"},"content":" data-bs-toggle\u003d\"dropdown\""},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"dropdown-menu\" :class\u003d\"[{ \u0027show\u0027: show }, { \u0027dropdown-menu-end\u0027: menuAlignRight }]\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cul class\u003d\"dropdown-menu\" :class\u003d\"[{ \u0027show\u0027: show }, { \u0027dropdown-menu-end\u0027: menuAlignRight }]\"\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":"import Submenu from \u0027./Submenu.vue\u0027;"},{"lineNumber":56,"author":{"gitId":"-"},"content":"import { toBoolean } from \u0027./utils/utils\u0027;"},{"lineNumber":57,"author":{"gitId":"-"},"content":"import $ from \u0027./utils/NodeList\u0027;"},{"lineNumber":58,"author":{"gitId":"-"},"content":"import preventOverflowOnMobile from \u0027./utils/dropdown\u0027;"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Submenu,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" },"},{"lineNumber":64,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" disabled: {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" type: [Boolean, String],"},{"lineNumber":67,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" },"},{"lineNumber":69,"author":{"gitId":"-"},"content":" type: {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" default: \u0027light\u0027,"},{"lineNumber":72,"author":{"gitId":"-"},"content":" },"},{"lineNumber":73,"author":{"gitId":"-"},"content":" menuAlignRight: {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":75,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" },"},{"lineNumber":77,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":79,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":80,"author":{"gitId":"-"},"content":" },"},{"lineNumber":81,"author":{"gitId":"-"},"content":" },"},{"lineNumber":82,"author":{"gitId":"-"},"content":" provide: { hasParentDropdown: true },"},{"lineNumber":83,"author":{"gitId":"-"},"content":" inject: {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" hasParentDropdown: {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":86,"author":{"gitId":"-"},"content":" },"},{"lineNumber":87,"author":{"gitId":"-"},"content":" isParentNavbar: {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":89,"author":{"gitId":"-"},"content":" },"},{"lineNumber":90,"author":{"gitId":"-"},"content":" },"},{"lineNumber":91,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" show: false,"},{"lineNumber":94,"author":{"gitId":"-"},"content":" };"},{"lineNumber":95,"author":{"gitId":"-"},"content":" },"},{"lineNumber":96,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" btnType() {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return `btn-${this.type}`;"},{"lineNumber":99,"author":{"gitId":"-"},"content":" },"},{"lineNumber":100,"author":{"gitId":"-"},"content":" disabledBool() {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return toBoolean(this.disabled);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" },"},{"lineNumber":103,"author":{"gitId":"-"},"content":" isLi() { return this.$parent._navbar || this.$parent.menu || this.$parent._tabset; },"},{"lineNumber":104,"author":{"gitId":"-"},"content":" isSubmenu() { return this.hasParentDropdown; },"},{"lineNumber":105,"author":{"gitId":"-"},"content":" menu() {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" return !this.$parent || this.$parent.navbar;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" },"},{"lineNumber":108,"author":{"gitId":"-"},"content":" submenu() {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return this.$parent \u0026\u0026 (this.$parent.menu || this.$parent.submenu);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" },"},{"lineNumber":111,"author":{"gitId":"-"},"content":" slots() {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" return this.$scopedSlots.default;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" },"},{"lineNumber":114,"author":{"gitId":"-"},"content":" hasBefore() {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" return !!this.$scopedSlots.before;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" },"},{"lineNumber":117,"author":{"gitId":"-"},"content":" btnWithBefore() {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" return this.hasBefore ? \u0027btn-with-before\u0027 : \u0027\u0027;"},{"lineNumber":119,"author":{"gitId":"-"},"content":" },"},{"lineNumber":120,"author":{"gitId":"-"},"content":" },"},{"lineNumber":121,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" blur() {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" this.unblur();"},{"lineNumber":124,"author":{"gitId":"-"},"content":" this._hide \u003d setTimeout(() \u003d\u003e {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" this._hide \u003d null;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" this.hideDropdownMenu();"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }, 100);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" },"},{"lineNumber":129,"author":{"gitId":"-"},"content":" unblur() {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" if (this._hide) {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" clearTimeout(this._hide);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" this._hide \u003d null;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":" },"},{"lineNumber":135,"author":{"gitId":"-"},"content":" hideDropdownMenu() {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" this.show \u003d false;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" $(this.$refs.dropdown).findChildren(\u0027ul\u0027).each((ul) \u003d\u003e {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" ul.classList.toggle(\u0027show\u0027, false);"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003c 768 \u0026\u0026 this.isParentNavbar) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" ul.style.removeProperty(\u0027left\u0027);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":" });"},{"lineNumber":144,"author":{"gitId":"-"},"content":" },"},{"lineNumber":145,"author":{"gitId":"-"},"content":" showDropdownMenu() {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" this.show \u003d true;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" $(this.$refs.dropdown).findChildren(\u0027ul\u0027).each((ul) \u003d\u003e {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" ul.classList.toggle(\u0027show\u0027, true);"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" // check if the dropdown is part of the sliding menu on mobile"},{"lineNumber":151,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003c 768 \u0026\u0026 this.isParentNavbar) {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" preventOverflowOnMobile(ul);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":" });"},{"lineNumber":155,"author":{"gitId":"-"},"content":" },"},{"lineNumber":156,"author":{"gitId":"-"},"content":" },"},{"lineNumber":157,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" const $el \u003d $(this.$refs.dropdown);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" if (this.$slots.button) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" // If the button is passed via props, manually add a data-bs-toggle"},{"lineNumber":161,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027.dropdown-toggle\u0027).forEach(child \u003d\u003e child.setAttribute(\u0027data-bs-toggle\u0027, \u0027dropdown\u0027));"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":" if (this.show) {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" this.showDropdownMenu();"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":" $el.onBlur(() \u003d\u003e { this.hideDropdownMenu(); }, false);"},{"lineNumber":167,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button.dropdown-toggle\u0027).on(\u0027click\u0027, (e) \u003d\u003e {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (this.disabledBool) { return false; }"},{"lineNumber":170,"author":{"gitId":"-"},"content":" if (this.show) {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" this.hideDropdownMenu();"},{"lineNumber":172,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":173,"author":{"gitId":"-"},"content":" this.showDropdownMenu();"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" });"},{"lineNumber":177,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027ul\u0027).on(\u0027click\u0027, \u0027li\u003ea\u0027, (e) \u003d\u003e {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" if (e.target.classList.contains(\u0027submenu-toggle\u0027)) { return; }"},{"lineNumber":179,"author":{"gitId":"-"},"content":" this.hideDropdownMenu();"},{"lineNumber":180,"author":{"gitId":"-"},"content":" });"},{"lineNumber":181,"author":{"gitId":"-"},"content":" },"},{"lineNumber":182,"author":{"gitId":"-"},"content":" beforeDestroy() {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" const $el \u003d $(this.$refs.dropdown);"},{"lineNumber":184,"author":{"gitId":"-"},"content":" $el.offBlur();"},{"lineNumber":185,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button\u0027).off();"},{"lineNumber":186,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027ul\u0027).off();"},{"lineNumber":187,"author":{"gitId":"-"},"content":" },"},{"lineNumber":188,"author":{"gitId":"-"},"content":"};"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":192,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 767px) {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" .navbar-default .dropdown {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" position: static;"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" .navbar-default .dropdown-menu {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":199,"author":{"gitId":"-"},"content":" max-width: 100%;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" max-height: 75vh;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" overflow-y: auto;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" overscroll-behavior: contain;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" .navbar-default .dropdown-menu-end {"},{"lineNumber":206,"author":{"gitId":"-"},"content":" right: auto;"},{"lineNumber":207,"author":{"gitId":"-"},"content":" }"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":" .secret {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" clip: rect(0 0 0 0);"},{"lineNumber":213,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":214,"author":{"gitId":"-"},"content":" margin: -1px;"},{"lineNumber":215,"author":{"gitId":"-"},"content":" height: 1px;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" width: 1px;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" .btn-with-before {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" padding-left: 0.2rem;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" padding-right: 0.4rem;"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" .dropdown-toggle {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":229,"author":{"gitId":"-"},"content":" width: max-content;"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" .navbar .dropdown-toggle {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" text-decoration: none;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" .nav-link \u003e .nav-link {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":1,"-":238}},{"path":"packages/vue-components/src/Navbar.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cnav"},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"navbar\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027navbar\u0027, \u0027navbar-expand-md\u0027, \u0027d-print-none\u0027, themeOptions, addClass, fixedOptions]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"container-fluid\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"navbar-left\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"brand\"\u003e\u003c/slot\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cdiv ref\u003d\"navbarDefault\" class\u003d\"navbar-default\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cul class\u003d\"navbar-nav me-auto mt-2 mt-lg-0\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cul v-if\u003d\"slots.right\" class\u003d\"navbar-nav navbar-right\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"right\"\u003e\u003c/slot\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":23,"author":{"gitId":"-"},"content":" v-show\u003d\"isLowerNavbarShowing\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" ref\u003d\"lowerNavbar\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" class\u003d\"lower-navbar-container\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"lower-navbar\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav-button /\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cpage-nav-button /\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import $ from \u0027./utils/NodeList\u0027;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import { toBoolean } from \u0027./utils/utils\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import normalizeUrl from \u0027./utils/urls\u0027;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import SiteNavButton from \u0027./SiteNavButton.vue\u0027;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import PageNavButton from \u0027./PageNavButton.vue\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" SiteNavButton,"},{"lineNumber":45,"author":{"gitId":"-"},"content":" PageNavButton,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" },"},{"lineNumber":47,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" type: {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" default: \u0027primary\u0027,"},{"lineNumber":51,"author":{"gitId":"-"},"content":" },"},{"lineNumber":52,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" fixed: {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" type: [Boolean, String],"},{"lineNumber":58,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":59,"author":{"gitId":"-"},"content":" },"},{"lineNumber":60,"author":{"gitId":"-"},"content":" defaultHighlightOn: {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" default: \u0027sibling-or-child\u0027,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" },"},{"lineNumber":64,"author":{"gitId":"-"},"content":" },"},{"lineNumber":65,"author":{"gitId":"-"},"content":" provide() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" toggleLowerNavbar: this.toggleLowerNavbar,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" isParentNavbar: true,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" };"},{"lineNumber":70,"author":{"gitId":"-"},"content":" },"},{"lineNumber":71,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" id: \u0027bs-example-navbar-collapse-1\u0027,"},{"lineNumber":74,"author":{"gitId":"-"},"content":" styles: {},"},{"lineNumber":75,"author":{"gitId":"-"},"content":" isLowerNavbarShowing: false,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" };"},{"lineNumber":77,"author":{"gitId":"-"},"content":" },"},{"lineNumber":78,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" fixedBool() {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" return toBoolean(this.fixed);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" },"},{"lineNumber":82,"author":{"gitId":"-"},"content":" fixedOptions() {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" if (this.fixedBool) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return \u0027navbar-fixed\u0027;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":" return \u0027\u0027;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" },"},{"lineNumber":88,"author":{"gitId":"-"},"content":" slots() {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" return this.$scopedSlots;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" },"},{"lineNumber":91,"author":{"gitId":"-"},"content":" themeOptions() {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" switch (this.type) {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" case \u0027none\u0027:"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return \u0027\u0027;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" case \u0027light\u0027:"},{"lineNumber":96,"author":{"gitId":"-"},"content":" return \u0027navbar-light bg-light\u0027;"},{"lineNumber":97,"author":{"gitId":"-"},"content":" case \u0027dark\u0027:"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return \u0027navbar-dark bg-dark\u0027;"},{"lineNumber":99,"author":{"gitId":"-"},"content":" case \u0027primary\u0027:"},{"lineNumber":100,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return \u0027navbar-dark bg-primary\u0027;"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":" },"},{"lineNumber":104,"author":{"gitId":"-"},"content":" },"},{"lineNumber":105,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" // Splits a normalised URL into its parts,"},{"lineNumber":107,"author":{"gitId":"-"},"content":" // e.g http://site.org/foo/bar/index.html -\u003e [\u0027foo\u0027,\u0027bar\u0027,\u0027index.html\u0027]"},{"lineNumber":108,"author":{"gitId":"-"},"content":" splitUrl(url) {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" const u \u003d new URL(normalizeUrl(url));"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return `${u.pathname}`.substr(1).split(\u0027/\u0027);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" },"},{"lineNumber":112,"author":{"gitId":"-"},"content":" isEqualExceptLast(hParts, uParts) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c hParts.length - 1; i +\u003d 1) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" if (hParts[i] !\u003d\u003d uParts[i]) {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":119,"author":{"gitId":"-"},"content":" },"},{"lineNumber":120,"author":{"gitId":"-"},"content":" isSibling(url, href) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" const hParts \u003d this.splitUrl(href);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" const uParts \u003d this.splitUrl(url);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" if (hParts.length !\u003d\u003d uParts.length) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return this.isEqualExceptLast(hParts, uParts);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" },"},{"lineNumber":128,"author":{"gitId":"-"},"content":" isChild(url, href) {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const hParts \u003d this.splitUrl(href);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" const uParts \u003d this.splitUrl(url);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" if (uParts.length \u003c\u003d hParts.length) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":" return this.isEqualExceptLast(hParts, uParts);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" },"},{"lineNumber":136,"author":{"gitId":"-"},"content":" isExact(url, href) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return normalizeUrl(url) \u003d\u003d\u003d normalizeUrl(href);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" },"},{"lineNumber":139,"author":{"gitId":"-"},"content":" addClassIfDropdown(dropdownLinks, a, li) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (dropdownLinks.includes(a)) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" a.classList.add(\u0027dropdown-current\u0027);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" this.addClassIfSubmenu(a, li);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":" },"},{"lineNumber":145,"author":{"gitId":"-"},"content":" addClassIfSubmenu(a, li) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" let el \u003d a.parentElement;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" while (el !\u003d\u003d li) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" if (el.classList.contains(\u0027dropdown-submenu\u0027)) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" $(el).findChildren(\u0027a\u0027).each(aChild \u003d\u003e aChild.classList.add(\u0027dropdown-current\u0027));"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":" el \u003d el.parentElement;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":" },"},{"lineNumber":154,"author":{"gitId":"-"},"content":" highlightLink(url) {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" const defHlMode \u003d this.defaultHighlightOn;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" const navLis \u003d [];"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.$el.querySelectorAll(\u0027.navbar-nav\u0027).forEach(nav \u003d\u003e navLis.push(...Array.from(nav.children)));"},{"lineNumber":158,"author":{"gitId":"-"},"content":" // attempt an exact match first"},{"lineNumber":159,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c navLis.length; i +\u003d 1) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" const li \u003d navLis[i];"},{"lineNumber":161,"author":{"gitId":"-"},"content":" const standardLinks \u003d [li];"},{"lineNumber":162,"author":{"gitId":"-"},"content":" const navLinks \u003d Array.from(li.querySelectorAll(\u0027a.nav-link\u0027));"},{"lineNumber":163,"author":{"gitId":"-"},"content":" const dropdownLinks \u003d Array.from(li.querySelectorAll(\u0027a.dropdown-item\u0027));"},{"lineNumber":164,"author":{"gitId":"-"},"content":" const allNavLinks \u003d standardLinks.concat(navLinks).concat(dropdownLinks).filter(a \u003d\u003e a.href);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" for (let j \u003d 0; j \u003c allNavLinks.length; j +\u003d 1) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" const a \u003d allNavLinks[j];"},{"lineNumber":167,"author":{"gitId":"-"},"content":" const hlMode \u003d a.getAttribute(\u0027highlight-on\u0027) || defHlMode;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" if (hlMode \u003d\u003d\u003d \u0027none\u0027) {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" // eslint-disable-next-line no-continue"},{"lineNumber":170,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":" // terminate early on an exact match"},{"lineNumber":173,"author":{"gitId":"-"},"content":" if (this.isExact(url, a.href)) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" li.classList.add(\u0027current\u0027);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" this.addClassIfDropdown(dropdownLinks, a, li);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":" // fallback to user preference, otherwise"},{"lineNumber":181,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c navLis.length; i +\u003d 1) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" const li \u003d navLis[i];"},{"lineNumber":183,"author":{"gitId":"-"},"content":" const standardLinks \u003d [li];"},{"lineNumber":184,"author":{"gitId":"-"},"content":" const navLinks \u003d Array.from(li.querySelectorAll(\u0027a.nav-link\u0027));"},{"lineNumber":185,"author":{"gitId":"-"},"content":" const dropdownLinks \u003d Array.from(li.querySelectorAll(\u0027a.dropdown-item\u0027));"},{"lineNumber":186,"author":{"gitId":"-"},"content":" const allNavLinks \u003d standardLinks.concat(navLinks).concat(dropdownLinks).filter(a \u003d\u003e a.href);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" for (let j \u003d 0; j \u003c allNavLinks.length; j +\u003d 1) {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" const a \u003d allNavLinks[j];"},{"lineNumber":189,"author":{"gitId":"-"},"content":" const hlMode \u003d a.getAttribute(\u0027highlight-on\u0027) || defHlMode;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" if (hlMode \u003d\u003d\u003d \u0027none\u0027) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" // eslint-disable-next-line no-continue"},{"lineNumber":192,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":" // Ignores invalid navbar highlight rule"},{"lineNumber":195,"author":{"gitId":"-"},"content":" if (hlMode \u003d\u003d\u003d \u0027sibling-or-child\u0027) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" if (this.isSibling(url, a.href) || this.isChild(url, a.href)) {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" li.classList.add(\u0027current\u0027);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" this.addClassIfDropdown(dropdownLinks, a, li);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":" } else if (hlMode \u003d\u003d\u003d \u0027sibling\u0027) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" if (this.isSibling(url, a.href)) {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" li.classList.add(\u0027current\u0027);"},{"lineNumber":204,"author":{"gitId":"-"},"content":" this.addClassIfDropdown(dropdownLinks, a, li);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":" } else if (hlMode \u003d\u003d\u003d \u0027child\u0027) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" if (this.isChild(url, a.href)) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" li.classList.add(\u0027current\u0027);"},{"lineNumber":210,"author":{"gitId":"-"},"content":" this.addClassIfDropdown(dropdownLinks, a, li);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":" },"},{"lineNumber":217,"author":{"gitId":"-"},"content":" toggleLowerNavbar() {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" if (this.$refs.lowerNavbar.childElementCount \u003e 0) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" this.isLowerNavbarShowing \u003d true;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" this.isLowerNavbarShowing \u003d false;"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":" },"},{"lineNumber":224,"author":{"gitId":"-"},"content":" },"},{"lineNumber":225,"author":{"gitId":"-"},"content":" created() {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" this._navbar \u003d true;"},{"lineNumber":227,"author":{"gitId":"-"},"content":" },"},{"lineNumber":228,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" const $dropdown \u003d $(\u0027.dropdown\u003e[data-bs-toggle\u003d\"dropdown\"]\u0027, this.$el).parent();"},{"lineNumber":230,"author":{"gitId":"-"},"content":" $dropdown.on(\u0027click\u0027, \u0027.dropdown-toggle\u0027, (e) \u003d\u003e {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":232,"author":{"gitId":"-"},"content":" $dropdown.each((content) \u003d\u003e {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" if (content.contains(e.target)) content.classList.toggle(\u0027open\u0027);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" });"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }).on(\u0027click\u0027, \u0027.dropdown-menu\u003eli\u003ea\u0027, (e) \u003d\u003e {"},{"lineNumber":236,"author":{"gitId":"-"},"content":" $dropdown.each((content) \u003d\u003e {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" if (content.contains(e.target)) content.classList.remove(\u0027open\u0027);"},{"lineNumber":238,"author":{"gitId":"-"},"content":" });"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }).onBlur((e) \u003d\u003e {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" $dropdown.each((content) \u003d\u003e {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" if (!content.contains(e.target)) content.classList.remove(\u0027open\u0027);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" });"},{"lineNumber":243,"author":{"gitId":"-"},"content":" });"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":" // highlight current nav link"},{"lineNumber":246,"author":{"gitId":"-"},"content":" this.highlightLink(window.location.href);"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" // scroll default navbar horizontally to current link if it is beyond the current scroll"},{"lineNumber":249,"author":{"gitId":"-"},"content":" const currentNavlink \u003d $(this.$refs.navbarDefault).find(\u0027.current\u0027)[0];"},{"lineNumber":250,"author":{"gitId":"-"},"content":" if (currentNavlink \u0026\u0026 window.innerWidth \u003c 768"},{"lineNumber":251,"author":{"gitId":"-"},"content":" \u0026\u0026 currentNavlink.offsetLeft + currentNavlink.offsetWidth \u003e window.innerWidth) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" this.$refs.navbarDefault.scrollLeft \u003d currentNavlink.offsetLeft + currentNavlink.offsetWidth"},{"lineNumber":253,"author":{"gitId":"-"},"content":" - window.innerWidth;"},{"lineNumber":254,"author":{"gitId":"-"},"content":" }"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" this.toggleLowerNavbar();"},{"lineNumber":257,"author":{"gitId":"-"},"content":" $(window).on(\u0027resize\u0027, this.toggleLowerNavbar);"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" // scroll default navbar horizontally when mousewheel is scrolled"},{"lineNumber":260,"author":{"gitId":"-"},"content":" $(this.$refs.navbarDefault).on(\u0027wheel\u0027, (e) \u003d\u003e {"},{"lineNumber":261,"author":{"gitId":"-"},"content":" const isDropdown \u003d (nodes) \u003d\u003e {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c nodes.length; i +\u003d 1) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" if (nodes[i].classList \u0026\u0026 nodes[i].classList.contains(\u0027dropdown-menu\u0027)) {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" };"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":" // prevent horizontal scrolling if the scroll is on dropdown menu"},{"lineNumber":271,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003c 768 \u0026\u0026 !isDropdown(e.path)) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":273,"author":{"gitId":"-"},"content":" this.$refs.navbarDefault.scrollLeft +\u003d e.deltaY;"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":" });"},{"lineNumber":276,"author":{"gitId":"-"},"content":" },"},{"lineNumber":277,"author":{"gitId":"-"},"content":" beforeDestroy() {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" $(\u0027.dropdown\u0027, this.$el).off(\u0027click\u0027).offBlur();"},{"lineNumber":279,"author":{"gitId":"-"},"content":" $(window).off(\u0027resize\u0027, this.toggleLowerNavbar);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" $(this.$refs.navbarDefault).off(\u0027wheel\u0027);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" },"},{"lineNumber":282,"author":{"gitId":"-"},"content":"};"},{"lineNumber":283,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":284,"author":{"gitId":"-"},"content":""},{"lineNumber":285,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":286,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 767px) {"},{"lineNumber":287,"author":{"gitId":"-"},"content":" .navbar {"},{"lineNumber":288,"author":{"gitId":"-"},"content":" padding-left: 0;"},{"lineNumber":289,"author":{"gitId":"-"},"content":" padding-right: 0;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" .navbar-left {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" max-width: 50%;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" order: 1;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" padding-left: 1rem;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" .navbar-left * {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" white-space: normal;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" .navbar-right {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" order: 1;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" max-width: 50%;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" padding: 0 16px;"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" .navbar-default {"},{"lineNumber":310,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":311,"author":{"gitId":"-"},"content":" margin-top: 0.3125rem;"},{"lineNumber":312,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":313,"author":{"gitId":"-"},"content":" order: 2;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" overflow-x: scroll;"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" /* Hide overflow scroll bar */"},{"lineNumber":317,"author":{"gitId":"-"},"content":" -ms-overflow-style: none; /* IE and Edge */"},{"lineNumber":318,"author":{"gitId":"-"},"content":" scrollbar-width: none; /* Firefox */"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" /* Hide overflow scroll bar for Chrome and Safari */"},{"lineNumber":322,"author":{"gitId":"-"},"content":" .navbar-default::-webkit-scrollbar {"},{"lineNumber":323,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" .navbar-default ul {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" flex-direction: row;"},{"lineNumber":328,"author":{"gitId":"-"},"content":" margin-top: 0 !important;"},{"lineNumber":329,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }"},{"lineNumber":331,"author":{"gitId":"-"},"content":""},{"lineNumber":332,"author":{"gitId":"-"},"content":" .navbar-default \u003e ul \u003e * {"},{"lineNumber":333,"author":{"gitId":"LamJiuFong"},"content":" background: rgb(0 0 0 / 20%);"},{"lineNumber":334,"author":{"gitId":"-"},"content":" padding: 0.3125rem 0.625rem;"},{"lineNumber":335,"author":{"gitId":"-"},"content":" flex-grow: 1;"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" .navbar-light .navbar-default \u003e ul \u003e * {"},{"lineNumber":339,"author":{"gitId":"LamJiuFong"},"content":" background: rgb(0 0 0 / 5%);"},{"lineNumber":340,"author":{"gitId":"-"},"content":" }"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":" .navbar-default \u003e ul \u003e .current {"},{"lineNumber":343,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" .navbar-default a,"},{"lineNumber":347,"author":{"gitId":"-"},"content":" \u003e\u003e\u003e .dropdown-toggle {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":349,"author":{"gitId":"-"},"content":" width: max-content;"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":""},{"lineNumber":352,"author":{"gitId":"-"},"content":" \u003e\u003e\u003e .dropdown {"},{"lineNumber":353,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":354,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":355,"author":{"gitId":"-"},"content":" }"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":" .container-fluid {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":359,"author":{"gitId":"-"},"content":" }"},{"lineNumber":360,"author":{"gitId":"-"},"content":" }"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":" .navbar-brand {"},{"lineNumber":363,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" .navbar-brand \u003e img,"},{"lineNumber":367,"author":{"gitId":"-"},"content":" .navbar-brand \u003e svg {"},{"lineNumber":368,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":""},{"lineNumber":371,"author":{"gitId":"-"},"content":" .navbar-right {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" padding-right: 1rem;"},{"lineNumber":373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":374,"author":{"gitId":"-"},"content":""},{"lineNumber":375,"author":{"gitId":"-"},"content":" .navbar-left {"},{"lineNumber":376,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":377,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":378,"author":{"gitId":"-"},"content":" font-size: 1.25rem;"},{"lineNumber":379,"author":{"gitId":"-"},"content":" line-height: inherit;"},{"lineNumber":380,"author":{"gitId":"-"},"content":" padding: 0.3125rem 1rem;"},{"lineNumber":381,"author":{"gitId":"-"},"content":" white-space: nowrap;"},{"lineNumber":382,"author":{"gitId":"-"},"content":" }"},{"lineNumber":383,"author":{"gitId":"-"},"content":""},{"lineNumber":384,"author":{"gitId":"-"},"content":" .navbar-fixed {"},{"lineNumber":385,"author":{"gitId":"-"},"content":" position: fixed;"},{"lineNumber":386,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":387,"author":{"gitId":"-"},"content":" z-index: 1000;"},{"lineNumber":388,"author":{"gitId":"-"},"content":" }"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":" .navbar-default {"},{"lineNumber":391,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":392,"author":{"gitId":"-"},"content":" flex-basis: auto;"},{"lineNumber":393,"author":{"gitId":"-"},"content":" flex-grow: 1;"},{"lineNumber":394,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":395,"author":{"gitId":"-"},"content":" }"},{"lineNumber":396,"author":{"gitId":"-"},"content":""},{"lineNumber":397,"author":{"gitId":"-"},"content":" \u003e\u003e\u003e .dropdown-current {"},{"lineNumber":398,"author":{"gitId":"-"},"content":" color: #fff !important;"},{"lineNumber":399,"author":{"gitId":"-"},"content":" background: #007bff;"},{"lineNumber":400,"author":{"gitId":"-"},"content":" }"},{"lineNumber":401,"author":{"gitId":"-"},"content":""},{"lineNumber":402,"author":{"gitId":"-"},"content":" .lower-navbar-container {"},{"lineNumber":403,"author":{"gitId":"-"},"content":" background-color: #fff;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" border-bottom: 1px solid #c1c1c1;"},{"lineNumber":405,"author":{"gitId":"-"},"content":" height: 50px;"},{"lineNumber":406,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":407,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":408,"author":{"gitId":"-"},"content":" }"},{"lineNumber":409,"author":{"gitId":"-"},"content":""},{"lineNumber":410,"author":{"gitId":"-"},"content":" /* Navbar link highlight for current page */"},{"lineNumber":411,"author":{"gitId":"-"},"content":" .navbar.navbar-dark .navbar-nav \u003e\u003e\u003e .current:not(.dropdown) a,"},{"lineNumber":412,"author":{"gitId":"-"},"content":" .navbar.navbar-dark .navbar-nav \u003e\u003e\u003e .dropdown.current \u003e a {"},{"lineNumber":413,"author":{"gitId":"-"},"content":" color: #fff;"},{"lineNumber":414,"author":{"gitId":"-"},"content":" }"},{"lineNumber":415,"author":{"gitId":"-"},"content":""},{"lineNumber":416,"author":{"gitId":"-"},"content":" .navbar.navbar-light .navbar-nav \u003e\u003e\u003e .current:not(.dropdown) a,"},{"lineNumber":417,"author":{"gitId":"-"},"content":" .navbar.navbar-light .navbar-nav \u003e\u003e\u003e .dropdown.current \u003e a {"},{"lineNumber":418,"author":{"gitId":"-"},"content":" color: #000;"},{"lineNumber":419,"author":{"gitId":"-"},"content":" }"},{"lineNumber":420,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":417}},{"path":"packages/vue-components/src/Pic.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan :class\u003d\"[\u0027image-wrapper\u0027, addClass]\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cimg"},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"pic\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :src\u003d\"src\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" :alt\u003d\"alt\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" :width\u003d\"computedWidth\""},{"lineNumber":8,"author":{"gitId":"LamJiuFong"},"content":" :height\u003d\"computedHeight\""},{"lineNumber":9,"author":{"gitId":"LamJiuFong"},"content":" :loading\u003d\"computedLoadType\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" class\u003d\"img-fluid rounded\""},{"lineNumber":11,"author":{"gitId":"LamJiuFong"},"content":" @load.once\u003d\"computeWidthAndHeight\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"image-caption\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { toNumber } from \u0027./utils/utils\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" src: {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" },"},{"lineNumber":28,"author":{"gitId":"-"},"content":" alt: {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":31,"author":{"gitId":"-"},"content":" },"},{"lineNumber":32,"author":{"gitId":"-"},"content":" height: {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" },"},{"lineNumber":36,"author":{"gitId":"-"},"content":" width: {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" },"},{"lineNumber":40,"author":{"gitId":"LamJiuFong"},"content":" lazy: {"},{"lineNumber":41,"author":{"gitId":"LamJiuFong"},"content":" type: Boolean,"},{"lineNumber":42,"author":{"gitId":"LamJiuFong"},"content":" default: false,"},{"lineNumber":43,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":44,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" },"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" hasWidth() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return this.width !\u003d\u003d \u0027\u0027;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" },"},{"lineNumber":53,"author":{"gitId":"-"},"content":" hasHeight() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return this.height !\u003d\u003d \u0027\u0027;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" computedWidth() {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" if (this.hasWidth) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return this.width;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return this.widthFromHeight;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" },"},{"lineNumber":62,"author":{"gitId":"LamJiuFong"},"content":" computedHeight() {"},{"lineNumber":63,"author":{"gitId":"LamJiuFong"},"content":" return this.heightFromWidth;"},{"lineNumber":64,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":65,"author":{"gitId":"LamJiuFong"},"content":" computedLoadType() {"},{"lineNumber":66,"author":{"gitId":"LamJiuFong"},"content":" return this.lazy ? \u0027lazy\u0027 : \u0027eager\u0027;"},{"lineNumber":67,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":68,"author":{"gitId":"-"},"content":" },"},{"lineNumber":69,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" widthFromHeight: \u0027\u0027,"},{"lineNumber":72,"author":{"gitId":"LamJiuFong"},"content":" heightFromWidth: \u0027\u0027,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" };"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":76,"author":{"gitId":"LamJiuFong"},"content":" computeWidthAndHeight() {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" const renderedImg \u003d this.$refs.pic;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" const imgHeight \u003d renderedImg.naturalHeight;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" const imgWidth \u003d renderedImg.naturalWidth;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" const aspectRatio \u003d imgWidth / imgHeight;"},{"lineNumber":81,"author":{"gitId":"LamJiuFong"},"content":" if (this.hasWidth) { // if width is present, overwrite the height (if any) to maintain aspect ratio"},{"lineNumber":82,"author":{"gitId":"LamJiuFong"},"content":" this.heightFromWidth \u003d Math.round(toNumber(this.width) / aspectRatio).toString();"},{"lineNumber":83,"author":{"gitId":"LamJiuFong"},"content":" } else if (this.hasHeight) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" this.widthFromHeight \u003d Math.round(toNumber(this.height) * aspectRatio).toString();"},{"lineNumber":85,"author":{"gitId":"LamJiuFong"},"content":" this.heightFromWidth \u003d this.height;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" },"},{"lineNumber":88,"author":{"gitId":"-"},"content":" },"},{"lineNumber":89,"author":{"gitId":"-"},"content":"};"},{"lineNumber":90,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" .image-wrapper {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" padding: 4px;"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" .image-caption {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":19,"-":83}},{"path":"packages/vue-components/src/Popover.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":3,"author":{"gitId":"-"},"content":" :class\u003d\"trigger \u003d\u003d\u003d \u0027click\u0027 ? \u0027trigger-click\u0027 : \u0027trigger\u0027\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" data-mb-component-type\u003d\"popover\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" tabindex\u003d\"0\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cportal v-if\u003d\"targetEl.id\" :to\u003d\"\u0027popover:\u0027 + targetEl.id\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003ch3 v-if\u003d\"hasHeader\" class\u003d\"popover-header\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/h3\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"popover-body\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"content\"\u003e\u003c/slot\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":14,"author":{"gitId":"yiwen101"},"content":" \u003c/portal\u003e\u003c!-- do not delete this comment, it is for the stray space issue (#2419)"},{"lineNumber":15,"author":{"gitId":"yiwen101"},"content":" --\u003e\u003cv-popover"},{"lineNumber":16,"author":{"gitId":"-"},"content":" v-if\u003d\"isMounted\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" :auto-hide\u003d\"!isInput\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" :triggers\u003d\"triggers\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" :popper-triggers\u003d\"triggers\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" :hide-triggers\u003d\"triggers\""},{"lineNumber":21,"author":{"gitId":"-"},"content":" :placement\u003d\"placement\""},{"lineNumber":22,"author":{"gitId":"-"},"content":" :delay\u003d\"0\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" shift-cross-axis"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c!-- floating-vue triggers must be elements that receive mouse events, hence an empty @click --\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003cspan v-if\u003d\"!isInput\" @click.stop\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c!-- However, input elements are handled separately as they will lose focus when wrapped in a span --\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cslot v-else\u003e\u003c/slot\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003ctemplate #popper\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"popover-container\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003ch3 v-if\u003d\"hasHeader\" class\u003d\"popover-header\"\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/h3\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"popover-body\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"content\"\u003e\u003c/slot\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/template\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/v-popover\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":"// eslint-disable-next-line import/no-extraneous-dependencies"},{"lineNumber":47,"author":{"gitId":"-"},"content":"import { Portal } from \u0027portal-vue\u0027;"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" name: \u0027Popover\u0027,"},{"lineNumber":51,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" Portal,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" },"},{"lineNumber":54,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" trigger: {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":57,"author":{"gitId":"-"},"content":" default: \u0027hover focus\u0027,"},{"lineNumber":58,"author":{"gitId":"-"},"content":" },"},{"lineNumber":59,"author":{"gitId":"-"},"content":" placement: {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" default: \u0027top\u0027,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" },"},{"lineNumber":63,"author":{"gitId":"-"},"content":" },"},{"lineNumber":64,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" targetEl: {},"},{"lineNumber":67,"author":{"gitId":"-"},"content":" isMounted: false,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" };"},{"lineNumber":69,"author":{"gitId":"-"},"content":" },"},{"lineNumber":70,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" triggers() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return this.trigger.split(\u0027 \u0027);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" },"},{"lineNumber":74,"author":{"gitId":"-"},"content":" hasHeader() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return !!this.$slots.header;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" },"},{"lineNumber":77,"author":{"gitId":"-"},"content":" },"},{"lineNumber":78,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.targetEl \u003d this.$el;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" // \u003cinput\u003e tags need to be handled separately as they need to retain focus on inputs"},{"lineNumber":81,"author":{"gitId":"-"},"content":" this.isInput \u003d this.$slots.default \u0026\u0026 this.$slots.default.some(node \u003d\u003e node.tag \u003d\u003d\u003d \u0027input\u0027);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.isMounted \u003d true;"},{"lineNumber":83,"author":{"gitId":"-"},"content":" },"},{"lineNumber":84,"author":{"gitId":"-"},"content":"};"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" .popover-container {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" overflow: auto;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" max-height: 50vh;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" max-width: 276px; /* following bootstrap */"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" .popover-body {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" font-size: 0.875rem; /* following bootstrap */"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" .v-popper {"},{"lineNumber":99,"author":{"gitId":"-"},"content":" display: inline;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"-":99,"yiwen101":2}},{"path":"packages/vue-components/src/Searchbar.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv style\u003d\"position: relative;\" class\u003d\"dropdown\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"algolia\" id\u003d\"algolia-search-input\"\u003e\u003c/div\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003ctemplate v-else\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cinput"},{"lineNumber":6,"author":{"gitId":"-"},"content":" v-model\u003d\"value\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" data-bs-toggle\u003d\"dropdown\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" type\u003d\"text\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" class\u003d\"form-control\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" :placeholder\u003d\"placeholder\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" autocomplete\u003d\"off\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" @input\u003d\"update\""},{"lineNumber":13,"author":{"gitId":"-"},"content":" @keyup.up\u003d\"up\""},{"lineNumber":14,"author":{"gitId":"-"},"content":" @keyup.down\u003d\"down\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" @keydown.enter\u003d\"hit\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" @keydown.esc\u003d\"reset\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" @blur\u003d\"showDropdown \u003d false\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form-control placeholder-div-hidden\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" {{ placeholder }}"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/template\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cul ref\u003d\"dropdown\" :class\u003d\"dropdownMenuClasses\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cli"},{"lineNumber":25,"author":{"gitId":"-"},"content":" v-for\u003d\"(item, index) in items\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" :key\u003d\"index\""},{"lineNumber":27,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027table-active\u0027: isActive(index) }\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003ca"},{"lineNumber":30,"author":{"gitId":"-"},"content":" class\u003d\"dropdown-item\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @mousedown.prevent\u003d\"hit\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" @mousemove\u003d\"setActive(index)\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003csearchbar-page-item :item\u003d\"item\" :value\u003d\"value\" /\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import searchbarPageItem from \u0027./SearchbarPageItem.vue\u0027;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import { delayer, getJSON } from \u0027./utils/utils\u0027;"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"const _DELAY_ \u003d 200;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" created() {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" this.items \u003d this.primitiveData;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" },"},{"lineNumber":51,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" data: {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" type: Array,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" default: () \u003d\u003e [],"},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" limit: {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" type: Number,"},{"lineNumber":58,"author":{"gitId":"-"},"content":" default: 8,"},{"lineNumber":59,"author":{"gitId":"-"},"content":" },"},{"lineNumber":60,"author":{"gitId":"-"},"content":" async: {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" },"},{"lineNumber":64,"author":{"gitId":"-"},"content":" keyProp: {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":67,"author":{"gitId":"-"},"content":" },"},{"lineNumber":68,"author":{"gitId":"-"},"content":" onHit: {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" type: Function,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" default(items) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" this.reset();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" this.value \u003d items;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" },"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" placeholder: {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":77,"author":{"gitId":"-"},"content":" default: \u0027Search\u0027,"},{"lineNumber":78,"author":{"gitId":"-"},"content":" },"},{"lineNumber":79,"author":{"gitId":"-"},"content":" delay: {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" type: Number,"},{"lineNumber":81,"author":{"gitId":"-"},"content":" default: _DELAY_,"},{"lineNumber":82,"author":{"gitId":"-"},"content":" },"},{"lineNumber":83,"author":{"gitId":"-"},"content":" menuAlignRight: {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":85,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":86,"author":{"gitId":"-"},"content":" },"},{"lineNumber":87,"author":{"gitId":"-"},"content":" algolia: {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":89,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":90,"author":{"gitId":"-"},"content":" },"},{"lineNumber":91,"author":{"gitId":"-"},"content":" },"},{"lineNumber":92,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" value: \u0027\u0027,"},{"lineNumber":95,"author":{"gitId":"-"},"content":" showDropdown: false,"},{"lineNumber":96,"author":{"gitId":"-"},"content":" noResults: true,"},{"lineNumber":97,"author":{"gitId":"-"},"content":" current: 0,"},{"lineNumber":98,"author":{"gitId":"-"},"content":" items: [],"},{"lineNumber":99,"author":{"gitId":"-"},"content":" };"},{"lineNumber":100,"author":{"gitId":"-"},"content":" },"},{"lineNumber":101,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" primitiveData() {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" // Returns the total number of matches between an array of regex patterns and string search targets."},{"lineNumber":104,"author":{"gitId":"-"},"content":" function getTotalMatches(searchTargets, regexes) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" const searchTarget \u003d searchTargets.join(\u0027 \u0027);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" return regexes.reduce((total, regex) \u003d\u003e {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" const matches \u003d searchTarget.match(regex);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return total + (matches ? matches.length : 0);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }, 0);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (this.value.length \u003c 2 || !this.data) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" return [];"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":" const pages \u003d [];"},{"lineNumber":117,"author":{"gitId":"-"},"content":" const regexes \u003d this.value.split(\u0027 \u0027)"},{"lineNumber":118,"author":{"gitId":"-"},"content":" .filter(searchKeyword \u003d\u003e searchKeyword !\u003d\u003d \u0027\u0027)"},{"lineNumber":119,"author":{"gitId":"-"},"content":" .map(searchKeyword \u003d\u003e searchKeyword.replace(/[.*+?^${}()|[\\]\\\\]/g, \u0027\\\\$\u0026\u0027))"},{"lineNumber":120,"author":{"gitId":"-"},"content":" .map(searchKeyword \u003d\u003e new RegExp(searchKeyword, \u0027ig\u0027));"},{"lineNumber":121,"author":{"gitId":"-"},"content":" this.data.forEach((entry) \u003d\u003e {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" const {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" headings,"},{"lineNumber":124,"author":{"gitId":"-"},"content":" src,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" title,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" headingKeywords,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" frontmatterKeywords,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" } \u003d entry;"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const keywords \u003d frontmatterKeywords || \u0027\u0027;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" const displayTitle \u003d title || src.substring(0, src.lastIndexOf(\u0027.\u0027));"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" const pageSearchTargets \u003d ["},{"lineNumber":133,"author":{"gitId":"-"},"content":" displayTitle,"},{"lineNumber":134,"author":{"gitId":"-"},"content":" keywords,"},{"lineNumber":135,"author":{"gitId":"-"},"content":" ...Object.values(headings),"},{"lineNumber":136,"author":{"gitId":"-"},"content":" ...Object.values(headingKeywords),"},{"lineNumber":137,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":138,"author":{"gitId":"-"},"content":" const totalPageMatches \u003d getTotalMatches(pageSearchTargets, regexes);"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (totalPageMatches \u003e 0) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" const pageHeadings \u003d [];"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" Object.entries(headings).forEach(([id, text], idx) \u003d\u003e {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" const matchesHeading \u003d regexes.some(regex \u003d\u003e regex.test(text));"},{"lineNumber":145,"author":{"gitId":"-"},"content":" const matchesKeywords \u003d headingKeywords[id] \u0026\u0026 headingKeywords[id]"},{"lineNumber":146,"author":{"gitId":"-"},"content":" .some(keyword \u003d\u003e regexes.some(regex \u003d\u003e regex.test(keyword)));"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" if (matchesHeading || matchesKeywords) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" const headingSearchTargets \u003d ["},{"lineNumber":150,"author":{"gitId":"-"},"content":" text,"},{"lineNumber":151,"author":{"gitId":"-"},"content":" ...(headingKeywords[id] || []),"},{"lineNumber":152,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":153,"author":{"gitId":"-"},"content":" const totalHeadingMatches \u003d getTotalMatches(headingSearchTargets, regexes);"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" if (!(idx \u003d\u003d\u003d 0 \u0026\u0026 text \u003d\u003d\u003d displayTitle \u0026\u0026 !keywords.length)) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" pageHeadings.push({"},{"lineNumber":157,"author":{"gitId":"-"},"content":" heading: { id, text },"},{"lineNumber":158,"author":{"gitId":"-"},"content":" keywords: headingKeywords[id],"},{"lineNumber":159,"author":{"gitId":"-"},"content":" src,"},{"lineNumber":160,"author":{"gitId":"-"},"content":" totalMatches: totalHeadingMatches,"},{"lineNumber":161,"author":{"gitId":"-"},"content":" });"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":" });"},{"lineNumber":165,"author":{"gitId":"-"},"content":" pageHeadings.sort((a, b) \u003d\u003e b.totalMatches - a.totalMatches);"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" pages.push({"},{"lineNumber":168,"author":{"gitId":"-"},"content":" headings: pageHeadings,"},{"lineNumber":169,"author":{"gitId":"-"},"content":" keywords,"},{"lineNumber":170,"author":{"gitId":"-"},"content":" src,"},{"lineNumber":171,"author":{"gitId":"-"},"content":" title: displayTitle,"},{"lineNumber":172,"author":{"gitId":"-"},"content":" totalMatches: totalPageMatches,"},{"lineNumber":173,"author":{"gitId":"-"},"content":" });"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":" });"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" return pages"},{"lineNumber":178,"author":{"gitId":"-"},"content":" .sort((a, b) \u003d\u003e b.totalMatches - a.totalMatches)"},{"lineNumber":179,"author":{"gitId":"-"},"content":" .flatMap((page) \u003d\u003e {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" if (page.headings) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return [page, ...page.headings];"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":" return page;"},{"lineNumber":184,"author":{"gitId":"-"},"content":" });"},{"lineNumber":185,"author":{"gitId":"-"},"content":" },"},{"lineNumber":186,"author":{"gitId":"-"},"content":" dropdownMenuClasses() {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return ["},{"lineNumber":188,"author":{"gitId":"-"},"content":" \u0027dropdown-menu\u0027,"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \u0027search-dropdown-menu\u0027,"},{"lineNumber":190,"author":{"gitId":"-"},"content":" { show: this.showDropdown },"},{"lineNumber":191,"author":{"gitId":"-"},"content":" { \u0027d-none\u0027: !this.showDropdown },"},{"lineNumber":192,"author":{"gitId":"-"},"content":" { \u0027dropdown-menu-end\u0027: this.menuAlignRight },"},{"lineNumber":193,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":194,"author":{"gitId":"-"},"content":" },"},{"lineNumber":195,"author":{"gitId":"-"},"content":" },"},{"lineNumber":196,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" update() {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" if (!this.value) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" this.reset();"},{"lineNumber":200,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }"},{"lineNumber":202,"author":{"gitId":"-"},"content":" if (this.data) {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" this.items \u003d this.primitiveData;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" this.showDropdown \u003d this.items.length \u003e 0;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" if (this.async) this.query();"},{"lineNumber":207,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" },"},{"lineNumber":209,"author":{"gitId":"-"},"content":" query: delayer(function () {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" getJSON(this.async + this.value).then((data) \u003d\u003e {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" this.items \u003d (this.keyProp ? data[this.keyProp] : data).slice(0, this.limit);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" this.showDropdown \u003d this.items.length;"},{"lineNumber":213,"author":{"gitId":"-"},"content":" });"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }, \u0027delay\u0027, _DELAY_),"},{"lineNumber":215,"author":{"gitId":"-"},"content":" reset() {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" this.items \u003d [];"},{"lineNumber":217,"author":{"gitId":"-"},"content":" this.value \u003d \u0027\u0027;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" this.loading \u003d false;"},{"lineNumber":219,"author":{"gitId":"-"},"content":" this.showDropdown \u003d false;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" },"},{"lineNumber":221,"author":{"gitId":"-"},"content":" setActive(index) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" this.current \u003d index;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" },"},{"lineNumber":224,"author":{"gitId":"-"},"content":" isActive(index) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" return this.current \u003d\u003d\u003d index;"},{"lineNumber":226,"author":{"gitId":"-"},"content":" },"},{"lineNumber":227,"author":{"gitId":"-"},"content":" hit(e) {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":229,"author":{"gitId":"-"},"content":" this.onHit(this.items[this.current], this);"},{"lineNumber":230,"author":{"gitId":"-"},"content":" },"},{"lineNumber":231,"author":{"gitId":"-"},"content":" down() {"},{"lineNumber":232,"author":{"gitId":"-"},"content":" if (this.current \u003c this.items.length - 1) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" this.current +\u003d 1;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" this.scrollListView();"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":" },"},{"lineNumber":237,"author":{"gitId":"-"},"content":" up() {"},{"lineNumber":238,"author":{"gitId":"-"},"content":" if (this.current \u003e 0) {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" this.current -\u003d 1;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" this.scrollListView();"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":" },"},{"lineNumber":243,"author":{"gitId":"-"},"content":" scrollListView() {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" const { dropdown } \u003d this.$refs;"},{"lineNumber":245,"author":{"gitId":"-"},"content":" const currentEntry \u003d dropdown.children[this.current];"},{"lineNumber":246,"author":{"gitId":"-"},"content":" const upperBound \u003d dropdown.scrollTop;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" const lowerBound \u003d upperBound + dropdown.clientHeight;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" const currentEntryOffsetBottom \u003d currentEntry.offsetTop + currentEntry.offsetHeight;"},{"lineNumber":249,"author":{"gitId":"-"},"content":" if (currentEntry.offsetTop \u003c upperBound) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" dropdown.scrollTop \u003d currentEntry.offsetTop;"},{"lineNumber":251,"author":{"gitId":"-"},"content":" } else if (currentEntryOffsetBottom \u003e lowerBound) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" dropdown.scrollTop \u003d currentEntryOffsetBottom - dropdown.clientHeight;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":" },"},{"lineNumber":255,"author":{"gitId":"-"},"content":" },"},{"lineNumber":256,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" searchbarPageItem,"},{"lineNumber":258,"author":{"gitId":"-"},"content":" },"},{"lineNumber":259,"author":{"gitId":"-"},"content":"};"},{"lineNumber":260,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":" .dropdown {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":" .form-control {"},{"lineNumber":268,"author":{"gitId":"-"},"content":" min-width: 12.7em;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" max-width: 25.4em; /* twice of min-width, to accommodate a range of lengths */"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" /* For mobile devices and general tablets in portrait e.g. iPad */"},{"lineNumber":273,"author":{"gitId":"LamJiuFong"},"content":" @media screen and (width \u003c\u003d 878px) and (orientation: portrait) {"},{"lineNumber":274,"author":{"gitId":"-"},"content":" .form-control {"},{"lineNumber":275,"author":{"gitId":"-"},"content":" min-width: 8em;"},{"lineNumber":276,"author":{"gitId":"-"},"content":" max-width: 16em; /* twice of min-width, to accommodate a range of lengths */"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" /* For general tablets in landscape e.g. iPad */"},{"lineNumber":281,"author":{"gitId":"LamJiuFong"},"content":" @media screen and (width \u003e\u003d 768px) and (width \u003c\u003d 878px) and (orientation: landscape) {"},{"lineNumber":282,"author":{"gitId":"-"},"content":" .form-control {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" min-width: 9em;"},{"lineNumber":284,"author":{"gitId":"-"},"content":" max-width: 18em; /* twice of min-width, to accommodate a range of lengths */"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" .table-active {"},{"lineNumber":289,"author":{"gitId":"LamJiuFong"},"content":" background-color: rgb(0 0 0 / 7.5%); /* follows Bootstrap\u0027s table-active */"},{"lineNumber":290,"author":{"gitId":"-"},"content":" }"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" .dropdown-menu-end {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":294,"author":{"gitId":"-"},"content":" left: auto;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":" .placeholder-div-hidden {"},{"lineNumber":298,"author":{"gitId":"-"},"content":" /* prevents placeholderDiv from taking up space on the navbar to resolve FOUC */"},{"lineNumber":299,"author":{"gitId":"-"},"content":" height: 0;"},{"lineNumber":300,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" border-top: 0;"},{"lineNumber":303,"author":{"gitId":"-"},"content":" border-bottom: 0;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" visibility: hidden;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":"\u003c/style\u003e"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":310,"author":{"gitId":"-"},"content":" .search-dropdown-menu {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" min-width: 30em;"},{"lineNumber":312,"author":{"gitId":"-"},"content":" max-height: 30em;"},{"lineNumber":313,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" }"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" .dropdown-menu \u003e li \u003e a {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"LamJiuFong"},"content":" @media screen and (width \u003c\u003d 768px) {"},{"lineNumber":321,"author":{"gitId":"-"},"content":" .search-dropdown-menu {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" min-width: 90vw;"},{"lineNumber":323,"author":{"gitId":"-"},"content":" max-height: 30em;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":" .dropdown-menu.search-dropdown-menu {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }"},{"lineNumber":331,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":4,"-":327}},{"path":"packages/vue-components/src/SiteNav.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-root\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import normalizeUrl from \u0027./utils/urls\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" name: \u0027SiteNav\u0027,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" const currentUrl \u003d normalizeUrl(new URL(window.location.href).pathname);"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" this.$el.querySelectorAll(\u0027a[href]\u0027).forEach((el) \u003d\u003e {"},{"lineNumber":16,"author":{"gitId":"-"},"content":" const linkUrl \u003d normalizeUrl(el.getAttribute(\u0027href\u0027));"},{"lineNumber":17,"author":{"gitId":"-"},"content":" if (currentUrl !\u003d\u003d linkUrl) {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" }"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" el.classList.add(\u0027current\u0027);"},{"lineNumber":22,"author":{"gitId":"-"},"content":" let currentEl \u003d el.parentElement;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" while (currentEl \u0026\u0026 currentEl !\u003d\u003d this.$el) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" if (currentEl.tagName.toLowerCase() \u003d\u003d\u003d \u0027ul\u0027"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u0026\u0026 currentEl.classList.contains(\u0027site-nav-dropdown-container\u0027)) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" currentEl.classList.add(\u0027site-nav-dropdown-container-open\u0027);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":" currentEl \u003d currentEl.parentElement;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":" });"},{"lineNumber":31,"author":{"gitId":"-"},"content":" },"},{"lineNumber":32,"author":{"gitId":"-"},"content":"};"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" /* Site navigation */"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" .site-nav-root a.current {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" color: #0072ec;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" /* Navigation list */"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" .site-nav-list {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" list-style-type: none;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" padding-left: 0;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" .site-nav-default-list-item {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" padding: 0.5rem 0 0 2.8rem;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" transition: background-color 0.08s;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" color: #454545;"},{"lineNumber":54,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" .site-nav-custom-list-item {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" padding: 0.5rem 0 0 2.8rem;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" color: #454545;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" .site-nav-list-item-0 {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" padding: 0.5rem 0 0.5rem 0.8rem;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" font-weight: 500;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" font-size: 1.2em;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" .site-nav-list-item-1 {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" padding: 0.4rem 0 0.4rem 1.3rem;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" font-size: 1.03em;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" .site-nav-list-item-2 {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" padding: 0.3rem 0 0.3rem 1.8rem;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" font-size: 0.89em;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" .site-nav-list-item-3 {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" padding: 0.2rem 0 0.2rem 2.4rem;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" font-size: 0.76em;"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" .site-nav-default-list-item:hover {"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" background-color: rgb(214 233 255 / 35%);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" .site-nav-default-list-item a {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":89,"author":{"gitId":"-"},"content":" height: 100%;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" color: #454545;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" .site-nav-default-list-item:hover a {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" color: black;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" text-decoration: none;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" /* Navigation dropdown menu */"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" .site-nav-dropdown-btn-container {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":" place-content: center center;"},{"lineNumber":103,"author":{"gitId":"-"},"content":" width: 2rem;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" height: 1.5em;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" margin: 0 0.75rem 0 auto;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" .site-nav-dropdown-btn-icon {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" vertical-align: baseline;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" align-self: center;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" width: 1.5em;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" height: 1.5em;"},{"lineNumber":114,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":115,"author":{"gitId":"-"},"content":" border-radius: 1rem;"},{"lineNumber":116,"author":{"gitId":"LamJiuFong"},"content":" padding: 0;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":118,"author":{"gitId":"-"},"content":" transform: rotate(0deg);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" .site-nav-dropdown-btn-icon:hover {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" background-color: #d8e3fb;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" .site-nav-rotate-icon {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" color: #4c7ff1;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" transform: rotate(-180deg);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" .site-nav-dropdown-container {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" max-height: 0;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" transition: max-height 0.15s ease-out;"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" .site-nav-dropdown-container-open {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" max-height: 1000px;"},{"lineNumber":139,"author":{"gitId":"-"},"content":" transition: max-height 0.25s ease-in;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":138}},{"path":"packages/vue-components/src/Submenu.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cli"},{"lineNumber":3,"author":{"gitId":"-"},"content":" ref\u003d\"submenu\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" :class\u003d\"[addClass, \u0027dropdown-submenu\u0027,"},{"lineNumber":5,"author":{"gitId":"-"},"content":" { \u0027dropend\u0027: dropright, \u0027dropstart\u0027: dropleft }]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003ca"},{"lineNumber":9,"author":{"gitId":"-"},"content":" class\u003d\"dropdown-item submenu-toggle\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" role\u003d\"button\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" :class\u003d\"{disabled: disabled}\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" data-bs-toggle\u003d\"dropdown\""},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"dropdown-menu\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cul class\u003d\"dropdown-menu\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import { toBoolean } from \u0027./utils/utils\u0027;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import $ from \u0027./utils/NodeList\u0027;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import positionSubmenu from \u0027./utils/submenu\u0027;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import preventOverflowOnMobile from \u0027./utils/dropdown\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":36,"author":{"gitId":"-"},"content":" },"},{"lineNumber":37,"author":{"gitId":"-"},"content":" disabled: {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" type: [Boolean, String],"},{"lineNumber":39,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":40,"author":{"gitId":"-"},"content":" },"},{"lineNumber":41,"author":{"gitId":"-"},"content":" },"},{"lineNumber":42,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" show: false,"},{"lineNumber":45,"author":{"gitId":"-"},"content":" dropright: true,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" dropleft: false,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" };"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" inject: {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" isParentNavbar: {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":52,"author":{"gitId":"-"},"content":" },"},{"lineNumber":53,"author":{"gitId":"-"},"content":" },"},{"lineNumber":54,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" disabledBool() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return toBoolean(this.disabled);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" },"},{"lineNumber":58,"author":{"gitId":"-"},"content":" },"},{"lineNumber":59,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" hideSubmenu() {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.show \u003d false;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" $(this.$refs.submenu).find(\u0027ul.dropdown-menu\u0027).each(ul \u003d\u003e ul.classList.toggle(\u0027show\u0027, false));"},{"lineNumber":63,"author":{"gitId":"-"},"content":" this.alignMenuRight();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" },"},{"lineNumber":65,"author":{"gitId":"-"},"content":" showSubmenu() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.show \u003d true;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" $(this.$refs.submenu).findChildren(\u0027ul\u0027).each((ul) \u003d\u003e {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" ul.classList.toggle(\u0027show\u0027, true);"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" // check if submenu is part of the navbar sliding menu on mobile"},{"lineNumber":71,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003c 768 \u0026\u0026 this.isParentNavbar) {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" preventOverflowOnMobile(ul);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" if (positionSubmenu.isRightAlign(ul)) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" this.alignMenuRight();"},{"lineNumber":78,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.alignMenuLeft();"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":" positionSubmenu.preventOverflow(ul);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" });"},{"lineNumber":83,"author":{"gitId":"-"},"content":" },"},{"lineNumber":84,"author":{"gitId":"-"},"content":" alignMenuRight() {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.dropright \u003d true;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.dropleft \u003d false;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" },"},{"lineNumber":88,"author":{"gitId":"-"},"content":" alignMenuLeft() {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" this.dropright \u003d false;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" this.dropleft \u003d true;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" },"},{"lineNumber":92,"author":{"gitId":"-"},"content":" },"},{"lineNumber":93,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" const $el \u003d $(this.$refs.submenu);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" if (this.show) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.showSubmenu();"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":" $el.onBlur(() \u003d\u003e { this.hideSubmenu(); }, false);"},{"lineNumber":99,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button\u0027).on(\u0027click\u0027, (e) \u003d\u003e {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" e.stopPropagation();"},{"lineNumber":102,"author":{"gitId":"-"},"content":" if (this.disabledBool) { return false; }"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (this.show) {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" this.hideSubmenu();"},{"lineNumber":105,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" this.showSubmenu();"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" });"},{"lineNumber":110,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button\u0027).on(\u0027mouseover\u0027, (e) \u003d\u003e {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003e 767) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" const isShowing \u003d $el.findChildren(\u0027ul.show\u0027).length \u003e 0;"},{"lineNumber":114,"author":{"gitId":"-"},"content":" if (isShowing || this.disabledBool) { return false; }"},{"lineNumber":115,"author":{"gitId":"-"},"content":" e.currentTarget.click();"},{"lineNumber":116,"author":{"gitId":"-"},"content":" const fullMenu \u003d this.$parent.$parent;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" fullMenu.$children.forEach((menuItem) \u003d\u003e {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" if (menuItem.$el \u003d\u003d\u003d this.$el) {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" menuItem.$refs.submenu.showSubmenu();"},{"lineNumber":120,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" menuItem.$refs.submenu.hideSubmenu();"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":" });"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" });"},{"lineNumber":127,"author":{"gitId":"-"},"content":" },"},{"lineNumber":128,"author":{"gitId":"-"},"content":" beforeDestroy() {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const $el \u003d $(this.$refs.submenu);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" $el.offBlur();"},{"lineNumber":131,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button\u0027).off();"},{"lineNumber":132,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027ul\u0027).off();"},{"lineNumber":133,"author":{"gitId":"-"},"content":" },"},{"lineNumber":134,"author":{"gitId":"-"},"content":"};"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":" .dropdown-submenu {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" color: #212529 !important;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" padding: 0 !important;"},{"lineNumber":141,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" .dropdown-submenu ul.dropdown-menu {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" .dropdown \u003e ul \u003e .dropdown-submenu:last-child \u003e ul,"},{"lineNumber":149,"author":{"gitId":"-"},"content":" .btn-group \u003e ul \u003e .dropdown-submenu:last-child \u003e ul {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" margin-bottom: -0.5rem;"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003e\u003d 768px) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" .submenu-toggle::after {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" width: 0;"},{"lineNumber":157,"author":{"gitId":"-"},"content":" height: 0;"},{"lineNumber":158,"author":{"gitId":"-"},"content":" vertical-align: 0.255em;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" content: \"\";"},{"lineNumber":160,"author":{"gitId":"-"},"content":" border-top: 0.3em solid transparent;"},{"lineNumber":161,"author":{"gitId":"-"},"content":" border-right: 0;"},{"lineNumber":162,"author":{"gitId":"-"},"content":" border-bottom: 0.3em solid transparent;"},{"lineNumber":163,"author":{"gitId":"-"},"content":" border-left: 0.3em solid;"},{"lineNumber":164,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":165,"author":{"gitId":"-"},"content":" margin-top: 0.5em;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" }"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 767px) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" .dropdown-submenu \u003e ul {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" border-radius: 0;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" margin: -0.05rem;"},{"lineNumber":174,"author":{"gitId":"-"},"content":" position: static;"},{"lineNumber":175,"author":{"gitId":"-"},"content":" float: none;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" .submenu-toggle::after {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" width: 0;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" height: 0;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" margin-left: 0.255em;"},{"lineNumber":183,"author":{"gitId":"-"},"content":" vertical-align: 0.255em;"},{"lineNumber":184,"author":{"gitId":"-"},"content":" content: \"\";"},{"lineNumber":185,"author":{"gitId":"-"},"content":" border-top: 0.3em solid;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" border-right: 0.3em solid transparent;"},{"lineNumber":187,"author":{"gitId":"-"},"content":" border-bottom: 0;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" border-left: 0.3em solid transparent;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" margin-top: 0.5em;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":2,"-":191}},{"path":"packages/vue-components/src/Tooltip.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":3,"author":{"gitId":"-"},"content":" :class\u003d\"trigger \u003d\u003d\u003d \u0027click\u0027 ? \u0027trigger-click\u0027 : \u0027trigger\u0027\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" data-mb-component-type\u003d\"tooltip\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" tabindex\u003d\"0\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cportal v-if\u003d\"targetEl.id\" :to\u003d\"\u0027tooltip:\u0027 + targetEl.id\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"content\"\u003e\u003c/slot\u003e"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":" \u003c/portal\u003e\u003c!-- do not delete this comment, it is for the stray space issue (#2419)"},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":" --\u003e\u003cv-tooltip"},{"lineNumber":11,"author":{"gitId":"-"},"content":" v-if\u003d\"isMounted\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" :auto-hide\u003d\"!isInput\""},{"lineNumber":13,"author":{"gitId":"-"},"content":" :triggers\u003d\"triggers\""},{"lineNumber":14,"author":{"gitId":"-"},"content":" :popper-triggers\u003d\"triggers\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" :hide-triggers\u003d\"triggers\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" :placement\u003d\"placement\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" :delay\u003d\"0\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" shift-cross-axis"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003ctemplate #popper\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"content\"\u003e\u003c/slot\u003e"},{"lineNumber":22,"author":{"gitId":"yiwen101"},"content":" \u003c/template\u003e\u003c!-- do not delete this comment, it is for the stray space issue (#2419)"},{"lineNumber":23,"author":{"gitId":"yiwen101"},"content":" --\u003e\u003cspan v-if\u003d\"!isInput\" @click.stop\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003cslot v-else\u003e\u003c/slot\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/v-tooltip\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"// eslint-disable-next-line import/no-extraneous-dependencies"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import { Portal } from \u0027portal-vue\u0027;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" name: \u0027Tooltip\u0027,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" Portal,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" },"},{"lineNumber":40,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" trigger: {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":43,"author":{"gitId":"-"},"content":" default: \u0027hover focus\u0027,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" },"},{"lineNumber":45,"author":{"gitId":"-"},"content":" placement: {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" default: \u0027top\u0027,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" },"},{"lineNumber":50,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" targetEl: {},"},{"lineNumber":53,"author":{"gitId":"-"},"content":" isInput: false,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" isMounted: false,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" };"},{"lineNumber":56,"author":{"gitId":"-"},"content":" },"},{"lineNumber":57,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" triggers() {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return this.trigger.split(\u0027 \u0027);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" },"},{"lineNumber":61,"author":{"gitId":"-"},"content":" },"},{"lineNumber":62,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" this.targetEl \u003d this.$el;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" // \u003cinput\u003e tags need to be handled separately as they need to retain focus on inputs"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.isInput \u003d this.$slots.default \u0026\u0026 this.$slots.default.some(node \u003d\u003e node.tag \u003d\u003d\u003d \u0027input\u0027);"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.isMounted \u003d true;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" },"},{"lineNumber":68,"author":{"gitId":"-"},"content":"};"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":72,"author":{"gitId":"LamJiuFong"},"content":" /* stylelint-disable selector-class-pattern */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" .v-popper--theme-tooltip .v-popper__inner {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" /* following bootstrap */"},{"lineNumber":75,"author":{"gitId":"LamJiuFong"},"content":" background: rgb(0 0 0 / 90%);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" padding: 4px 8px;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" font-size: 0.875rem;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" max-width: 200px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"LamJiuFong"},"content":" /* stylelint-enable selector-class-pattern */"},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":75,"yiwen101":4}},{"path":"packages/vue-components/src/annotations/Annotate.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027annotate-image-wrapper\u0027, addClass]\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cimg"},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"pic\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :src\u003d\"src\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" :alt\u003d\"alt\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" :width\u003d\"computedWidth\""},{"lineNumber":8,"author":{"gitId":"LamJiuFong"},"content":" :height\u003d\"computedHeight\""},{"lineNumber":9,"author":{"gitId":"LamJiuFong"},"content":" :loading\u003d\"computedLoadType\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" class\u003d\"annotate-image\""},{"lineNumber":11,"author":{"gitId":"LamJiuFong"},"content":" @load.once\u003d\"computeWidthAndHeight\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cdiv style\u003d\"top: 0; left: 0; height: 0;\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { toNumber } from \u0027../utils/utils\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" src: {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" },"},{"lineNumber":28,"author":{"gitId":"-"},"content":" alt: {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":31,"author":{"gitId":"-"},"content":" },"},{"lineNumber":32,"author":{"gitId":"-"},"content":" height: {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" },"},{"lineNumber":36,"author":{"gitId":"-"},"content":" width: {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" },"},{"lineNumber":40,"author":{"gitId":"LamJiuFong"},"content":" lazy: {"},{"lineNumber":41,"author":{"gitId":"LamJiuFong"},"content":" type: Boolean,"},{"lineNumber":42,"author":{"gitId":"LamJiuFong"},"content":" default: false,"},{"lineNumber":43,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":44,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" },"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" hasWidth() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return this.width !\u003d\u003d \u0027\u0027;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" },"},{"lineNumber":53,"author":{"gitId":"-"},"content":" hasHeight() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return this.height !\u003d\u003d \u0027\u0027;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" computedWidth() {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" if (this.hasWidth) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return this.width;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return this.widthFromHeight;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" },"},{"lineNumber":62,"author":{"gitId":"LamJiuFong"},"content":" computedHeight() {"},{"lineNumber":63,"author":{"gitId":"LamJiuFong"},"content":" return this.heightFromWidth;"},{"lineNumber":64,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":65,"author":{"gitId":"LamJiuFong"},"content":" computedLoadType() {"},{"lineNumber":66,"author":{"gitId":"LamJiuFong"},"content":" return this.lazy ? \u0027lazy\u0027 : \u0027eager\u0027;"},{"lineNumber":67,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":68,"author":{"gitId":"-"},"content":" },"},{"lineNumber":69,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" widthFromHeight: \u0027\u0027,"},{"lineNumber":72,"author":{"gitId":"LamJiuFong"},"content":" heightFromWidth: \u0027\u0027,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" };"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":76,"author":{"gitId":"LamJiuFong"},"content":" computeWidthAndHeight() {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" const renderedImg \u003d this.$refs.pic;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" const imgHeight \u003d renderedImg.naturalHeight;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" const imgWidth \u003d renderedImg.naturalWidth;"},{"lineNumber":80,"author":{"gitId":"LamJiuFong"},"content":" const aspectRatio \u003d imgWidth / imgHeight;"},{"lineNumber":81,"author":{"gitId":"LamJiuFong"},"content":" if (this.hasWidth) { // if width is present, overwrite the height (if any) to maintain aspect ratio"},{"lineNumber":82,"author":{"gitId":"LamJiuFong"},"content":" this.heightFromWidth \u003d Math.round(toNumber(this.width) / aspectRatio).toString();"},{"lineNumber":83,"author":{"gitId":"LamJiuFong"},"content":" } else if (this.hasHeight) {"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" this.widthFromHeight \u003d Math.round(toNumber(this.height) * aspectRatio).toString();"},{"lineNumber":85,"author":{"gitId":"LamJiuFong"},"content":" this.heightFromWidth \u003d this.height;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" },"},{"lineNumber":88,"author":{"gitId":"-"},"content":" },"},{"lineNumber":89,"author":{"gitId":"-"},"content":" provide() {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" width: this.width,"},{"lineNumber":92,"author":{"gitId":"-"},"content":" height: this.height,"},{"lineNumber":93,"author":{"gitId":"-"},"content":" src: this.src,"},{"lineNumber":94,"author":{"gitId":"-"},"content":" };"},{"lineNumber":95,"author":{"gitId":"-"},"content":" },"},{"lineNumber":96,"author":{"gitId":"-"},"content":"};"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" .annotate-image-wrapper {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":102,"author":{"gitId":"-"},"content":" text-align: left;"},{"lineNumber":103,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" .annotate-image {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" max-width: 100%;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" height: auto;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":21,"-":89}},{"path":"packages/vue-components/src/panels/MinimalPanel.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":3,"author":{"gitId":"-"},"content":" v-if\u003d\"localMinimized\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"cardContainer\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-container\u0027, addClass]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":8,"author":{"gitId":"-"},"content":" v-if\u003d\"hasId\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" :id\u003d\"panelId\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" class\u003d\"anchor\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"morph\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cbutton class\u003d\"morph-display-wrapper btn card-title morph-title\" @click\u003d\"minimalOpen()\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":15,"author":{"gitId":"-"},"content":" v-if\u003d\"!noMinimizedSwitch\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027glyphicon\u0027, \u0027glyphicon-chevron-right\u0027]\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"_alt\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"card-title\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":27,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":28,"author":{"gitId":"-"},"content":" ref\u003d\"cardContainer\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-container\u0027, addClass]\""},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":32,"author":{"gitId":"-"},"content":" v-if\u003d\"hasId\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" :id\u003d\"panelId\""},{"lineNumber":34,"author":{"gitId":"-"},"content":" class\u003d\"anchor\""},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card card-flex\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027header-wrapper\u0027,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" { \u0027header-wrapper-bottom\u0027: isHeaderAtBottom, \u0027header-toggle\u0027: isExpandableCard }]\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" @click.prevent.stop\u003d\"isExpandableCard \u0026\u0026 minimalToggle()\""},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003ctransition name\u003d\"header-fade\"\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":44,"author":{"gitId":"-"},"content":" v-show\u003d\"!isHeaderAtBottom\""},{"lineNumber":45,"author":{"gitId":"-"},"content":" ref\u003d\"headerWrapper\""},{"lineNumber":46,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-title\u0027, { \u0027ellipses\u0027: !hasHeaderBool }]\""},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"card-title-inline\"\u003e\u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e\u003c/span\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":50,"author":{"gitId":"-"},"content":" v-show\u003d\"showDownSwitch\""},{"lineNumber":51,"author":{"gitId":"-"},"content":" aria-hidden\u003d\"true\""},{"lineNumber":52,"author":{"gitId":"-"},"content":" class\u003d\"minimal-button glyphicon glyphicon-menu-down minimal-menu-down\""},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027button-wrapper\u0027, { \u0027button-wrapper-expanded\u0027: isHeaderAtBottom }]\"\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":59,"author":{"gitId":"-"},"content":" v-show\u003d\"!noCloseBool\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" class\u003d\"minimal-button\""},{"lineNumber":61,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @click.stop\u003d\"minimalClose()\""},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-remove minimal-close-button\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":67,"author":{"gitId":"-"},"content":" v-show\u003d\"popupUrl !\u003d\u003d null\""},{"lineNumber":68,"author":{"gitId":"-"},"content":" class\u003d\"minimal-button\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" @click.stop\u003d\"openPopup()\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-new-window minimal-popup-button\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":75,"author":{"gitId":"-"},"content":" v-show\u003d\"isHeaderAtBottom \u0026\u0026 isExpandableCard \u0026\u0026 bottomSwitchBool\""},{"lineNumber":76,"author":{"gitId":"-"},"content":" class\u003d\"minimal-button\""},{"lineNumber":77,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-menu-up minimal-menu-up\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":85,"author":{"gitId":"-"},"content":" ref\u003d\"panel\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" class\u003d\"card-collapse\""},{"lineNumber":87,"author":{"gitId":"-"},"content":" :class\u003d\"{\u0027card-peek-collapsed\u0027: shouldShowPeek}\""},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":90,"author":{"gitId":"-"},"content":" v-if\u003d\"wasRetrieverLoaded || preloadBool\""},{"lineNumber":91,"author":{"gitId":"-"},"content":" class\u003d\"card-body\""},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003cretriever"},{"lineNumber":95,"author":{"gitId":"-"},"content":" v-if\u003d\"hasSrc\""},{"lineNumber":96,"author":{"gitId":"-"},"content":" ref\u003d\"retriever\""},{"lineNumber":97,"author":{"gitId":"-"},"content":" :src\u003d\"srcWithoutFragment\""},{"lineNumber":98,"author":{"gitId":"-"},"content":" :fragment\u003d\"fragment\""},{"lineNumber":99,"author":{"gitId":"-"},"content":" @src-loaded\u003d\"retrieverUpdateMaxHeight\""},{"lineNumber":100,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":"import retriever from \u0027../Retriever.vue\u0027;"},{"lineNumber":109,"author":{"gitId":"-"},"content":"import panelBase from \u0027./PanelBase\u0027;"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" mixins: [panelBase],"},{"lineNumber":113,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" retriever,"},{"lineNumber":115,"author":{"gitId":"-"},"content":" },"},{"lineNumber":116,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":119,"author":{"gitId":"-"},"content":" \u0027Copy\u0027 of localExpanded that is updated on certain animation events."},{"lineNumber":120,"author":{"gitId":"-"},"content":" It is minimal-panel specific due to its design (the header can shift to the bottom)."},{"lineNumber":121,"author":{"gitId":"-"},"content":" Its purpose is to show the header text only once the collapse animation has finished."},{"lineNumber":122,"author":{"gitId":"-"},"content":" */"},{"lineNumber":123,"author":{"gitId":"-"},"content":" isHeaderAtBottom: false,"},{"lineNumber":124,"author":{"gitId":"-"},"content":" };"},{"lineNumber":125,"author":{"gitId":"-"},"content":" },"},{"lineNumber":126,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" showDownSwitch() {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" return this.hasHeaderBool \u0026\u0026 this.isExpandableCard \u0026\u0026 !this.noSwitchBool;"},{"lineNumber":129,"author":{"gitId":"-"},"content":" },"},{"lineNumber":130,"author":{"gitId":"-"},"content":" },"},{"lineNumber":131,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" minimalToggle() {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" if (this.localExpanded) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":135,"author":{"gitId":"-"},"content":" This is a collapse."},{"lineNumber":136,"author":{"gitId":"-"},"content":" Set isHeaderAtBottom to true only at the end of transition."},{"lineNumber":137,"author":{"gitId":"-"},"content":" So that we can achieve the correct collapse transition effect of minimal panel."},{"lineNumber":138,"author":{"gitId":"-"},"content":" */"},{"lineNumber":139,"author":{"gitId":"-"},"content":" const onCollapseDone \u003d (event) \u003d\u003e {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (event.target \u003d\u003d\u003d this.$refs.panel) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d false;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" this.$refs.panel.removeEventListener(\u0027transitionend\u0027, onCollapseDone);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":" };"},{"lineNumber":145,"author":{"gitId":"-"},"content":" this.$refs.panel.addEventListener(\u0027transitionend\u0027, onCollapseDone);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" // This is an expansion. Set isHeaderAtBottom to true *immediately*."},{"lineNumber":148,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d true;"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":" this.toggle(true);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" },"},{"lineNumber":152,"author":{"gitId":"-"},"content":" minimalOpen() {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" this.open();"},{"lineNumber":154,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d true;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" },"},{"lineNumber":156,"author":{"gitId":"-"},"content":" minimalClose() {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.close();"},{"lineNumber":158,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d false;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" },"},{"lineNumber":160,"author":{"gitId":"-"},"content":" },"},{"lineNumber":161,"author":{"gitId":"-"},"content":" created() {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d this.localExpanded;"},{"lineNumber":163,"author":{"gitId":"-"},"content":" },"},{"lineNumber":164,"author":{"gitId":"-"},"content":"};"},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" .card-peek-collapsed {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * Gives the faded content effect for peek."},{"lineNumber":175,"author":{"gitId":"-"},"content":" * Ensure that height has the same value as collapsedPanelHeight in PanelBase.js."},{"lineNumber":176,"author":{"gitId":"-"},"content":" */"},{"lineNumber":177,"author":{"gitId":"-"},"content":" .card-peek-collapsed::after {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" content: \"\";"},{"lineNumber":179,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" bottom: 0;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" height: 125px;"},{"lineNumber":183,"author":{"gitId":"-"},"content":" background-image: linear-gradient(180deg, transparent, white 90%);"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" .morph-title {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" padding: 0 0.3em;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" border-color: black;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" background-color: transparent;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" vertical-align: top;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":" .morph-title:hover,"},{"lineNumber":194,"author":{"gitId":"-"},"content":" .morph-title:active,"},{"lineNumber":195,"author":{"gitId":"-"},"content":" .morph-title:focus {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" color: white;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" border-color: #343a40;"},{"lineNumber":198,"author":{"gitId":"-"},"content":" background-color: #343a40;"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" .card-collapse {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" transition: max-height 0.5s ease-in-out;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" .card-flex {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" margin: 0;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" .header-fade-enter {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" .header-fade-leave-active {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" .header-fade-leave-to {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" opacity: 0 !important;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" .card-title-inline {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":227,"author":{"gitId":"-"},"content":" }"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":" .card-body {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" .header-wrapper {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":235,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":236,"author":{"gitId":"-"},"content":" background-color: white;"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" .header-wrapper-bottom {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" order: 1;"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" .ellipses::before {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":245,"author":{"gitId":"-"},"content":" bottom: 3px;"},{"lineNumber":246,"author":{"gitId":"-"},"content":" content: \u0027...\u0027;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" font-weight: 900;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" margin-right: 4px;"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":" .button-wrapper {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" padding-left: 2px;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" border-width: 0 0 0 1px;"},{"lineNumber":254,"author":{"gitId":"LamJiuFong"},"content":" border-color: rgb(150 150 150 / 20%);"},{"lineNumber":255,"author":{"gitId":"-"},"content":" border-style: solid;"},{"lineNumber":256,"author":{"gitId":"-"},"content":" margin-left: 2px;"},{"lineNumber":257,"author":{"gitId":"-"},"content":" width: auto;"},{"lineNumber":258,"author":{"gitId":"-"},"content":" float: none;"},{"lineNumber":259,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" transition: opacity 0.5s;"},{"lineNumber":261,"author":{"gitId":"-"},"content":" vertical-align: text-top;"},{"lineNumber":262,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":263,"author":{"gitId":"-"},"content":" }"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":" .button-wrapper-expanded {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" padding-left: 0;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" .card:hover .button-wrapper {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" .header-toggle {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" .glyphicon {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" font-size: 12px;"},{"lineNumber":281,"author":{"gitId":"-"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":" .minimal-button {"},{"lineNumber":284,"author":{"gitId":"-"},"content":" padding: 0 3px;"},{"lineNumber":285,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":286,"author":{"gitId":"LamJiuFong"},"content":" color: rgb(150 150 150);"},{"lineNumber":287,"author":{"gitId":"-"},"content":" background-color: transparent;"},{"lineNumber":288,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":289,"author":{"gitId":"-"},"content":" }"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":" .minimal-button:hover,"},{"lineNumber":292,"author":{"gitId":"-"},"content":" .minimal-button:active,"},{"lineNumber":293,"author":{"gitId":"-"},"content":" .minimal-button:focus {"},{"lineNumber":294,"author":{"gitId":"LamJiuFong"},"content":" color: rgb(30 30 30);"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":" .minimal-popup-button {"},{"lineNumber":298,"author":{"gitId":"-"},"content":" top: 1px;"},{"lineNumber":299,"author":{"gitId":"-"},"content":" font-size: 9px;"},{"lineNumber":300,"author":{"gitId":"-"},"content":" }"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":" .minimal-menu-up {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" top: 2px;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" font-size: 13px;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" }"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" .minimal-menu-down {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" top: 1px;"},{"lineNumber":309,"author":{"gitId":"-"},"content":" font-size: 13px;"},{"lineNumber":310,"author":{"gitId":"-"},"content":" }"},{"lineNumber":311,"author":{"gitId":"-"},"content":""},{"lineNumber":312,"author":{"gitId":"-"},"content":" .minimal-close-button {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" font-size: 11px;"},{"lineNumber":315,"author":{"gitId":"-"},"content":" }"},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":" /* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":318,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 575.98px) {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" .button-wrapper-expanded {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" padding-left: 0;"},{"lineNumber":321,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":323,"author":{"gitId":"-"},"content":" opacity: 0.15;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" .button-wrapper-visible {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":328,"author":{"gitId":"-"},"content":" }"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":4,"-":326}},{"path":"packages/vue-components/src/panels/NestedPanel.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":3,"author":{"gitId":"-"},"content":" v-if\u003d\"localMinimized\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"cardContainer\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-container\u0027, addClass]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"morph\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cbutton :class\u003d\"[\u0027morph-display-wrapper\u0027, \u0027btn\u0027, btnType]\" @click\u003d\"open()\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":10,"author":{"gitId":"-"},"content":" v-if\u003d\"!noMinimizedSwitch\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" class\u003d\"minimal-caret-wrapper\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":14,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027glyphicon\u0027, \u0027glyphicon-chevron-right\u0027]\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"card-title\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"_alt\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":26,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":27,"author":{"gitId":"-"},"content":" ref\u003d\"cardContainer\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-container\u0027, addClass]\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027card\u0027, { \u0027expandable-card\u0027: isExpandableCard }, borderType]\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":32,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-header\u0027,{\u0027header-toggle\u0027:isExpandableCard}, cardType, borderType]\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" @click.prevent.stop\u003d\"isExpandableCard \u0026\u0026 toggle()\""},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"caret-wrapper\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":37,"author":{"gitId":"-"},"content":" v-if\u003d\"showCaret\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027glyphicon\u0027, localExpanded ? \u0027glyphicon-chevron-down\u0027 : \u0027glyphicon-chevron-right\u0027]\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":42,"author":{"gitId":"-"},"content":" ref\u003d\"headerWrapper\""},{"lineNumber":43,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027header-wrapper card-title\u0027, cardType,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" {\u0027text-white\u0027:!isLightBg, \u0027header-transparent\u0027:!shouldShowHeader}]\""},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"button-wrapper\"\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003cpanel-switch"},{"lineNumber":51,"author":{"gitId":"-"},"content":" v-show\u003d\"isExpandableCard \u0026\u0026 !noSwitchBool \u0026\u0026 !showCaret\""},{"lineNumber":52,"author":{"gitId":"-"},"content":" :is-open\u003d\"localExpanded\""},{"lineNumber":53,"author":{"gitId":"-"},"content":" :is-light-bg\u003d\"isLightBg\""},{"lineNumber":54,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":56,"author":{"gitId":"-"},"content":" v-show\u003d\"!noCloseBool\""},{"lineNumber":57,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" class\u003d\"close-button btn\""},{"lineNumber":59,"author":{"gitId":"-"},"content":" :class\u003d\"[isLightBg ? \u0027btn-outline-secondary\u0027 : \u0027btn-outline-light\u0027,"},{"lineNumber":60,"author":{"gitId":"-"},"content":" { \u0027seamless-button\u0027: isSeamless }]\""},{"lineNumber":61,"author":{"gitId":"-"},"content":" @click.stop\u003d\"close()\""},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-remove\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":66,"author":{"gitId":"-"},"content":" v-show\u003d\"popupUrl\""},{"lineNumber":67,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":68,"author":{"gitId":"-"},"content":" class\u003d\"popup-button btn\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" :class\u003d\"[isLightBg ? \u0027btn-outline-secondary\u0027 : \u0027btn-outline-light\u0027,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" { \u0027seamless-button\u0027: isSeamless }]\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" @click.stop\u003d\"openPopup()\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-new-window\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":79,"author":{"gitId":"-"},"content":" ref\u003d\"panel\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" class\u003d\"card-collapse\""},{"lineNumber":81,"author":{"gitId":"-"},"content":" :class\u003d\"{\u0027card-peek-collapsed\u0027: shouldShowPeek}\""},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":84,"author":{"gitId":"-"},"content":" v-if\u003d\"wasRetrieverLoaded || preloadBool\""},{"lineNumber":85,"author":{"gitId":"-"},"content":" class\u003d\"card-body\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003cretriever"},{"lineNumber":89,"author":{"gitId":"-"},"content":" v-if\u003d\"hasSrc\""},{"lineNumber":90,"author":{"gitId":"-"},"content":" ref\u003d\"retriever\""},{"lineNumber":91,"author":{"gitId":"-"},"content":" :src\u003d\"srcWithoutFragment\""},{"lineNumber":92,"author":{"gitId":"-"},"content":" :fragment\u003d\"fragment\""},{"lineNumber":93,"author":{"gitId":"-"},"content":" @src-loaded\u003d\"retrieverUpdateMaxHeight\""},{"lineNumber":94,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"bottom-button-wrapper\"\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003cpanel-switch"},{"lineNumber":97,"author":{"gitId":"-"},"content":" v-show\u003d\"isExpandableCard \u0026\u0026 bottomSwitchBool\""},{"lineNumber":98,"author":{"gitId":"-"},"content":" :is-open\u003d\"localExpanded\""},{"lineNumber":99,"author":{"gitId":"-"},"content":" @click.native.stop.prevent\u003d\"toggle(true)\""},{"lineNumber":100,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003chr v-show\u003d\"isSeamless\" /\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003ctransition name\u003d\"peek-read-more-fade\"\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":107,"author":{"gitId":"-"},"content":" v-if\u003d\"shouldShowPeek\""},{"lineNumber":108,"author":{"gitId":"-"},"content":" class\u003d\"peek-read-more glyphicon glyphicon-chevron-down\""},{"lineNumber":109,"author":{"gitId":"-"},"content":" @click\u003d\"toggle()\""},{"lineNumber":110,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":115,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":"import panelBase from \u0027./PanelBase\u0027;"},{"lineNumber":119,"author":{"gitId":"-"},"content":"import panelSwitch from \u0027./PanelSwitch.vue\u0027;"},{"lineNumber":120,"author":{"gitId":"-"},"content":"import retriever from \u0027../Retriever.vue\u0027;"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" mixins: [panelBase],"},{"lineNumber":124,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" panelSwitch,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" retriever,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" },"},{"lineNumber":128,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" showCaret() {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" return this.isSeamless \u0026\u0026 this.expandableBool;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" },"},{"lineNumber":132,"author":{"gitId":"-"},"content":" isSeamless() {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" return this.type \u003d\u003d\u003d \u0027seamless\u0027;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" },"},{"lineNumber":135,"author":{"gitId":"-"},"content":" btnType() {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" if (this.isSeamless || this.type \u003d\u003d\u003d \u0027light\u0027) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return \u0027btn-outline-secondary\u0027;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return `btn-outline-${this.type || \u0027secondary\u0027}`;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" },"},{"lineNumber":141,"author":{"gitId":"-"},"content":" borderType() {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" if (this.isSeamless) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return \u0027border-0\u0027;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" } else if (this.type) {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" if (this.type \u003d\u003d\u003d \u0027light\u0027) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" return \u0027\u0027; // Bootstrap 4.x light border is almost invisible on a white page"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":" return `border-${this.type}`;"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return \u0027\u0027;"},{"lineNumber":151,"author":{"gitId":"-"},"content":" },"},{"lineNumber":152,"author":{"gitId":"-"},"content":" cardType() {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" if (this.isSeamless) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" return \u0027bg-white\u0027;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":" return `bg-${this.type || \u0027light\u0027}`;"},{"lineNumber":157,"author":{"gitId":"-"},"content":" },"},{"lineNumber":158,"author":{"gitId":"-"},"content":" isLightBg() {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" return this.cardType \u003d\u003d\u003d \u0027bg-light\u0027 || this.cardType \u003d\u003d\u003d \u0027bg-white\u0027 || this.cardType \u003d\u003d\u003d \u0027bg-warning\u0027;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" },"},{"lineNumber":161,"author":{"gitId":"-"},"content":" },"},{"lineNumber":162,"author":{"gitId":"-"},"content":"};"},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":" .card-container {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" scroll-margin-top: var(--sticky-header-height);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" .card-collapse {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" transition: max-height 0.5s ease-in-out;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" .seamless-button {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" transition: 0.3s opacity;"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" .card-header:hover .seamless-button {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" .card-peek-collapsed {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":189,"author":{"gitId":"-"},"content":" * Gives the faded content effect for peek."},{"lineNumber":190,"author":{"gitId":"-"},"content":" * Ensure that height has the same value as collapsedPanelHeight in PanelBase.js."},{"lineNumber":191,"author":{"gitId":"-"},"content":" */"},{"lineNumber":192,"author":{"gitId":"-"},"content":" .card-peek-collapsed::after {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" content: \"\";"},{"lineNumber":194,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":195,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":196,"author":{"gitId":"-"},"content":" bottom: 0;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" height: 125px;"},{"lineNumber":198,"author":{"gitId":"-"},"content":" background-image: linear-gradient(180deg, transparent, white 90%);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" .peek-read-more {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" opacity: 0.2;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" transition: opacity 0.5s;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" /* Targets the before pseudoelement of glyphicon-chevron-down. */"},{"lineNumber":208,"author":{"gitId":"-"},"content":" .peek-read-more::before {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" bottom: 10px;"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":" .peek-read-more:hover {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" opacity: 0.4;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" .peek-read-more-fade-enter,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" .peek-read-more-fade-leave-to {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/style\u003e"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":" .card-heading {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" .card-title {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" font-size: 1em;"},{"lineNumber":235,"author":{"gitId":"-"},"content":" line-height: 1.2em;"},{"lineNumber":236,"author":{"gitId":"-"},"content":" margin: 0;"},{"lineNumber":237,"author":{"gitId":"-"},"content":" white-space: normal;"},{"lineNumber":238,"author":{"gitId":"-"},"content":" text-align: left;"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" .card-title * {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" margin-bottom: 0 !important;"},{"lineNumber":243,"author":{"gitId":"-"},"content":" }"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":" .caret-wrapper {"},{"lineNumber":246,"author":{"gitId":"-"},"content":" float: left;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" width: 32px;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" .minimal-caret-wrapper {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":252,"author":{"gitId":"-"},"content":" font-size: 13px;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" margin-right: 5px;"},{"lineNumber":254,"author":{"gitId":"-"},"content":" }"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" .header-wrapper {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":258,"author":{"gitId":"-"},"content":" width: calc(100% - 32px - 96px);"},{"lineNumber":259,"author":{"gitId":"-"},"content":" transition: 0.5s opacity;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" .header-transparent {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":" .button-wrapper {"},{"lineNumber":267,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" width: 96px;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" .header-toggle {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" .expandable-card {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" margin-bottom: 0 !important;"},{"lineNumber":277,"author":{"gitId":"-"},"content":" margin-top: 5px;"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" .card-collapse \u003e hr {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" margin-top: 0;"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" .card-group \u003e .card-container \u003e .expandable-card {"},{"lineNumber":285,"author":{"gitId":"-"},"content":" margin-top: 0 !important;"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" .bottom-button-wrapper {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" padding-bottom: 13px;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" margin-bottom: 13px;"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" .bottom-button-wrapper \u003e .collapse-button {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" margin-top: 5px;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" opacity: 0.2;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" }"},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":" .bottom-button-wrapper \u003e .collapse-button:hover {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":300,"author":{"gitId":"-"},"content":" }"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":" .close-button {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" font-size: 10px !important;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" padding: 3px 8px !important;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" margin-left: 3px;"},{"lineNumber":307,"author":{"gitId":"-"},"content":" margin-top: 2px;"},{"lineNumber":308,"author":{"gitId":"-"},"content":" }"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" .popup-button {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" font-size: 10px !important;"},{"lineNumber":312,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":313,"author":{"gitId":"-"},"content":" margin-top: 2px;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" padding: 3px 8px !important;"},{"lineNumber":315,"author":{"gitId":"-"},"content":" }"},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":" .morph {"},{"lineNumber":318,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" .morph-display-wrapper {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" margin-top: 5px;"},{"lineNumber":323,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":" /* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":328,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 575.98px) {"},{"lineNumber":329,"author":{"gitId":"-"},"content":" .header-wrapper {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":331,"author":{"gitId":"-"},"content":" width: calc(100% - 32px - 32px);"},{"lineNumber":332,"author":{"gitId":"-"},"content":" }"},{"lineNumber":333,"author":{"gitId":"-"},"content":""},{"lineNumber":334,"author":{"gitId":"-"},"content":" .button-wrapper {"},{"lineNumber":335,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":336,"author":{"gitId":"-"},"content":" width: 32px;"},{"lineNumber":337,"author":{"gitId":"-"},"content":" }"},{"lineNumber":338,"author":{"gitId":"-"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":" .card-body {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" padding: 0.5rem;"},{"lineNumber":341,"author":{"gitId":"-"},"content":" }"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"-"},"content":" .card-collapse \u003e hr {"},{"lineNumber":344,"author":{"gitId":"-"},"content":" margin-top: 0.5rem;"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" .card-header {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" padding: 0.5rem;"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":1,"-":350}},{"path":"packages/vue-components/src/questions/QOption.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003c!-- Mcq (radio) option --\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":4,"author":{"gitId":"-"},"content":" v-if\u003d\"qOptionType \u003d\u003d\u003d \u0027mcq\u0027\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027form-control\u0027, hintClass]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" @click\u003d\"toggleRadioOn\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" @mouseover\u003d\"hover \u003d true\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" @mouseleave\u003d\"hover \u003d false\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027row\u0027, { \u0027disabled\u0027: qState.answered }]\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-auto p-0\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003csvg viewBox\u003d\"0 0 100 100\" class\u003d\"radio-svg\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003ccircle"},{"lineNumber":14,"author":{"gitId":"-"},"content":" cx\u003d\"50\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" cy\u003d\"50\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" r\u003d\"47\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" fill\u003d\"none\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" stroke\u003d\"black\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" stroke-width\u003d\"4\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003ccircle"},{"lineNumber":22,"author":{"gitId":"-"},"content":" v-show\u003d\"selected\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" cx\u003d\"50\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" cy\u003d\"50\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" r\u003d\"25\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" fill\u003d\"dodgerblue\""},{"lineNumber":27,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/svg\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col content\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-1\"\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":36,"author":{"gitId":"-"},"content":" v-if\u003d\"correct\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-check text-success\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027align-bottom\u0027: $scopedSlots.reason }\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":41,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":42,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-times text-danger\""},{"lineNumber":43,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027align-bottom\u0027: $scopedSlots.reason }\""},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003e\u003c/i\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":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered \u0026\u0026 $scopedSlots.reason\"\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003chr /\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"reason\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"reason\"\u003e\u003c/slot\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c!-- Checkbox option --\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":59,"author":{"gitId":"-"},"content":" v-else-if\u003d\"qOptionType \u003d\u003d\u003d \u0027checkbox\u0027\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027form-control\u0027, hintClass]\""},{"lineNumber":61,"author":{"gitId":"-"},"content":" @click\u003d\"toggleCheckbox\""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @mouseover\u003d\"hover \u003d true\""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @mouseleave\u003d\"hover \u003d false\""},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003clabel :class\u003d\"[\u0027row\u0027, \u0027checkbox-label\u0027, \u0027m-0\u0027, { \u0027disabled\u0027: qState.answered }]\" @click.stop\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cinput"},{"lineNumber":67,"author":{"gitId":"-"},"content":" v-model\u003d\"selected\""},{"lineNumber":68,"author":{"gitId":"-"},"content":" class\u003d\"checkbox\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" :disabled\u003d\"qState.answered\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" type\u003d\"checkbox\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" onclick\u003d\"event.stopPropagation()\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col content\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-auto\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered\"\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":79,"author":{"gitId":"-"},"content":" v-if\u003d\"correct\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-check text-success\""},{"lineNumber":81,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027align-bottom\u0027: $scopedSlots.reason }\""},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":84,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":85,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-times text-danger\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027align-bottom\u0027: $scopedSlots.reason }\""},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered \u0026\u0026 $scopedSlots.reason\"\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003chr /\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"reason\"\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"reason\"\u003e\u003c/slot\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003c!-- blanks option --\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":102,"author":{"gitId":"-"},"content":" v-else-if\u003d\"qOptionType \u003d\u003d\u003d \u0027blanks\u0027\""},{"lineNumber":103,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027form-control\u0027, \u0027blanks-form-control\u0027, hintClass]\""},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003clabel :class\u003d\"[\u0027row\u0027, \u0027m-0\u0027, { \u0027disabled\u0027: qState.answered }]\" @click.stop\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003cinput"},{"lineNumber":107,"author":{"gitId":"-"},"content":" v-model\u003d\"inputText\""},{"lineNumber":108,"author":{"gitId":"-"},"content":" class\u003d\"form-control\""},{"lineNumber":109,"author":{"gitId":"-"},"content":" :disabled\u003d\"qState.answered\""},{"lineNumber":110,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-auto\"\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u003c!-- for when question is answered --\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered\"\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":115,"author":{"gitId":"-"},"content":" v-if\u003d\"ansIsCorrect\""},{"lineNumber":116,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-check text-success\""},{"lineNumber":117,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":119,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":120,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-times text-danger blanks-cross\""},{"lineNumber":121,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" \u003c!-- for when question is not answered and intermediate result is enabled --\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"isIntermediateResult()\"\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":127,"author":{"gitId":"-"},"content":" v-if\u003d\"ansIsCorrect\""},{"lineNumber":128,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-check text-success\""},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":131,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":132,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-times text-danger blanks-cross\""},{"lineNumber":133,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered\" class\u003d\"col-auto blanks-keywords\"\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":" \u003cstrong v-if\u003d\"keywordsSplitTrimmed().length\"\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":" Keywords:\u0026nbsp;"},{"lineNumber":139,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":140,"author":{"gitId":"-"},"content":" v-for\u003d\"keyword in keywordsSplitTrimmed()\""},{"lineNumber":141,"author":{"gitId":"-"},"content":" :key\u003d\"keyword\""},{"lineNumber":142,"author":{"gitId":"-"},"content":" class\u003d\"badge rounded-pill bg-light text-dark fw-normal\""},{"lineNumber":143,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":" {{ keyword }}"},{"lineNumber":145,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":" \u003c/strong\u003e"},{"lineNumber":147,"author":{"gitId":"-"},"content":" \u003cstrong v-else\u003eNo answer checking keywords provided\u003c/strong\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered \u0026\u0026 $scopedSlots.reason\"\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"reason blanks-reason\"\u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"reason\"\u003e\u003c/slot\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":"import { STATE_WRONG } from \u0027./QuestionConstants\u0027;"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" name: \u0027McqOption\u0027,"},{"lineNumber":164,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" correct: {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":167,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":168,"author":{"gitId":"-"},"content":" },"},{"lineNumber":169,"author":{"gitId":"-"},"content":" keywords: {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":171,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":172,"author":{"gitId":"-"},"content":" },"},{"lineNumber":173,"author":{"gitId":"-"},"content":" },"},{"lineNumber":174,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" selected: false,"},{"lineNumber":177,"author":{"gitId":"-"},"content":" hover: false,"},{"lineNumber":178,"author":{"gitId":"-"},"content":" inputText: \u0027\u0027,"},{"lineNumber":179,"author":{"gitId":"-"},"content":" ansIsCorrect: false,"},{"lineNumber":180,"author":{"gitId":"-"},"content":" };"},{"lineNumber":181,"author":{"gitId":"-"},"content":" },"},{"lineNumber":182,"author":{"gitId":"-"},"content":" inject: {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" answers: {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":185,"author":{"gitId":"-"},"content":" },"},{"lineNumber":186,"author":{"gitId":"-"},"content":" qOptionType: {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":188,"author":{"gitId":"-"},"content":" },"},{"lineNumber":189,"author":{"gitId":"-"},"content":" qState: {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":191,"author":{"gitId":"-"},"content":" },"},{"lineNumber":192,"author":{"gitId":"-"},"content":" noIntermediateResult: {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":194,"author":{"gitId":"-"},"content":" },"},{"lineNumber":195,"author":{"gitId":"-"},"content":" },"},{"lineNumber":196,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" hintClass() {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" if (this.qState.answered) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return this.correct ? \u0027success\u0027 : \u0027danger\u0027;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" return (this.selected || this.hover) ? \u0027alert-light text-dark border border-secondary\u0027 : \u0027\u0027;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" },"},{"lineNumber":204,"author":{"gitId":"-"},"content":" answeredCorrectly() {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" return (this.correct \u0026\u0026 this.selected) || (!this.correct \u0026\u0026 !this.selected);"},{"lineNumber":206,"author":{"gitId":"-"},"content":" },"},{"lineNumber":207,"author":{"gitId":"-"},"content":" },"},{"lineNumber":208,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" checkAnswer() {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" let ansIsCorrect \u003d false;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" const lowerCasedText \u003d this.inputText.toLowerCase().trim();"},{"lineNumber":212,"author":{"gitId":"-"},"content":" const keywords \u003d this.keywords.toLowerCase().split(\u0027,\u0027).filter(keyword \u003d\u003e keyword.trim() !\u003d\u003d \u0027\u0027);"},{"lineNumber":213,"author":{"gitId":"-"},"content":" if (!this.keywords.length) {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" ansIsCorrect \u003d true;"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c keywords.length; i +\u003d 1) {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" if (lowerCasedText \u003d\u003d\u003d keywords[i].trim()) {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" ansIsCorrect \u003d true;"},{"lineNumber":219,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }"},{"lineNumber":222,"author":{"gitId":"-"},"content":" this.ansIsCorrect \u003d ansIsCorrect;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" },"},{"lineNumber":224,"author":{"gitId":"-"},"content":" isIntermediateResult() {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" return !this.noIntermediateResult \u0026\u0026 this.qState.state \u003d\u003d\u003d STATE_WRONG \u0026\u0026 !this.qState.answered;"},{"lineNumber":226,"author":{"gitId":"-"},"content":" },"},{"lineNumber":227,"author":{"gitId":"-"},"content":" isBlanksQuestion() {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" return this.type \u003d\u003d\u003d \u0027blanks\u0027;"},{"lineNumber":229,"author":{"gitId":"-"},"content":" },"},{"lineNumber":230,"author":{"gitId":"-"},"content":" keywordsSplitTrimmed() {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" return this.keywords.split(\u0027,\u0027).filter(keyword \u003d\u003e keyword.trim() !\u003d\u003d \u0027\u0027);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" },"},{"lineNumber":233,"author":{"gitId":"-"},"content":" toggleRadioOn() {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" if (this.qState.answered || this.selected) {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" this.answers.forEach((answer) \u003d\u003e {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" answer.selected \u003d false;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" });"},{"lineNumber":241,"author":{"gitId":"-"},"content":" this.selected \u003d true;"},{"lineNumber":242,"author":{"gitId":"-"},"content":" },"},{"lineNumber":243,"author":{"gitId":"-"},"content":" toggleCheckbox() {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" if (this.qState.answered) {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":246,"author":{"gitId":"-"},"content":" }"},{"lineNumber":247,"author":{"gitId":"-"},"content":" this.selected \u003d !this.selected;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" },"},{"lineNumber":249,"author":{"gitId":"-"},"content":" },"},{"lineNumber":250,"author":{"gitId":"-"},"content":" created() {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" this.answers.push(this);"},{"lineNumber":252,"author":{"gitId":"-"},"content":" },"},{"lineNumber":253,"author":{"gitId":"-"},"content":"};"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":" .fa-check,"},{"lineNumber":258,"author":{"gitId":"-"},"content":" .fa-times {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" font-size: 1.2em;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" /* For accomodating block markdown nicely */"},{"lineNumber":263,"author":{"gitId":"-"},"content":" .reason :last-child,"},{"lineNumber":264,"author":{"gitId":"-"},"content":" .content :last-child {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" margin-bottom: 0;"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":" .reason {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" padding: 0 0.5rem;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" .checkbox-label {"},{"lineNumber":273,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" .form-control {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" height: auto;"},{"lineNumber":278,"author":{"gitId":"-"},"content":" margin-bottom: 10px;"},{"lineNumber":279,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" .form-control.success,"},{"lineNumber":283,"author":{"gitId":"-"},"content":" .form-control.success \u003e .checkbox-label,"},{"lineNumber":284,"author":{"gitId":"-"},"content":" .form-control.danger,"},{"lineNumber":285,"author":{"gitId":"-"},"content":" .form-control.danger \u003e .checkbox-label {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" cursor: default;"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" .disabled {"},{"lineNumber":290,"author":{"gitId":"-"},"content":" opacity: 0.9;"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" .radio-svg {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" width: 1em;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" height: 1em;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" vertical-align: text-top;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" .checkbox {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" width: 1em;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" height: 1em;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" margin-right: 5px;"},{"lineNumber":303,"author":{"gitId":"-"},"content":" vertical-align: middle;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" .row {"},{"lineNumber":307,"author":{"gitId":"LamJiuFong"},"content":" margin: 0.2rem 0 0;"},{"lineNumber":308,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" /* for blanks question type */"},{"lineNumber":312,"author":{"gitId":"-"},"content":" input.form-control {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" height: auto;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" min-height: 20px;"},{"lineNumber":315,"author":{"gitId":"-"},"content":" margin-bottom: 0;"},{"lineNumber":316,"author":{"gitId":"-"},"content":" width: 50%;"},{"lineNumber":317,"author":{"gitId":"-"},"content":" cursor: text;"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":" input.form-control:disabled,"},{"lineNumber":321,"author":{"gitId":"-"},"content":" .blanks-keywords {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" margin-bottom: 0.5rem;"},{"lineNumber":323,"author":{"gitId":"-"},"content":" }"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":" .blanks-form-control {"},{"lineNumber":326,"author":{"gitId":"-"},"content":" border: none;"},{"lineNumber":327,"author":{"gitId":"-"},"content":" cursor: default;"},{"lineNumber":328,"author":{"gitId":"-"},"content":" }"},{"lineNumber":329,"author":{"gitId":"-"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":" .blanks-cross {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" margin-right: 3px;"},{"lineNumber":332,"author":{"gitId":"-"},"content":" margin-left: 3px;"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":1,"-":333}},{"path":"packages/vue-components/src/questions/Quiz.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027quiz-container\u0027, addClass]\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003ctransition name\u003d\"intro-outro-card\" @after-leave\u003d\"showFirstQuestion\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"state \u003d\u003d\u003d 3\" class\u003d\"card intro-outro-card\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"intro\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003ch4\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" Click start to begin"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003c/h4\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003ch5\u003e{{ questions.length }} questions\u003c/h5\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003chr /\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":17,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" class\u003d\"btn btn-primary d-inline-block\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" @click\u003d\"begin\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" Start"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003ctransition name\u003d\"intro-outro-card\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":29,"author":{"gitId":"-"},"content":" v-show\u003d\"state \u003d\u003d\u003d 4\""},{"lineNumber":30,"author":{"gitId":"-"},"content":" class\u003d\"progress intro-outro-card\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" style\u003d\"height: 1px;\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":34,"author":{"gitId":"-"},"content":" class\u003d\"progress-bar progress-bar-z\""},{"lineNumber":35,"author":{"gitId":"-"},"content":" role\u003d\"progressbar\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" :style\u003d\"{ width: `${currentQuestion / questions.length * 100}%` }\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" aria-valuemin\u003d\"0\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :aria-valuemax\u003d\"questions.length\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" :aria-valuenow\u003d\"currentQuestion\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003ctransition"},{"lineNumber":47,"author":{"gitId":"-"},"content":" name\u003d\"intro-outro-card\""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @after-enter\u003d\"setScoreCircleStyles\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" @after-leave\u003d\"showFirstQuestion\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"state \u003d\u003d\u003d 5\" class\u003d\"card intro-outro-card\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003ch4 class\u003d\"mb-3\"\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" {{ scoreText }}"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/h4\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003csvg"},{"lineNumber":57,"author":{"gitId":"-"},"content":" viewBox\u003d\"0 0 100 100\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" width\u003d\"120px\""},{"lineNumber":59,"author":{"gitId":"-"},"content":" height\u003d\"120px\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003ccircle"},{"lineNumber":62,"author":{"gitId":"-"},"content":" cx\u003d\"50\""},{"lineNumber":63,"author":{"gitId":"-"},"content":" cy\u003d\"50\""},{"lineNumber":64,"author":{"gitId":"-"},"content":" r\u003d\"42\""},{"lineNumber":65,"author":{"gitId":"-"},"content":" class\u003d\"score-background-circle\""},{"lineNumber":66,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003ccircle"},{"lineNumber":68,"author":{"gitId":"-"},"content":" ref\u003d\"score\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" cx\u003d\"50\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" cy\u003d\"50\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" r\u003d\"42\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" transform\u003d\"rotate(-90, 50, 50)\""},{"lineNumber":73,"author":{"gitId":"-"},"content":" class\u003d\"score-circle\""},{"lineNumber":74,"author":{"gitId":"-"},"content":" stroke-dashoffset\u003d\"264\""},{"lineNumber":75,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003ctext"},{"lineNumber":77,"author":{"gitId":"-"},"content":" class\u003d\"score\""},{"lineNumber":78,"author":{"gitId":"-"},"content":" x\u003d\"22\""},{"lineNumber":79,"author":{"gitId":"-"},"content":" y\u003d\"57\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" textLength\u003d\"56\""},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003e{{ score }} / {{ questions.length }}\u003c/text\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003c/svg\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003chr /\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":87,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":88,"author":{"gitId":"-"},"content":" class\u003d\"btn btn-outline-primary\""},{"lineNumber":89,"author":{"gitId":"-"},"content":" @click\u003d\"begin\""},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":" Retry"},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":"import {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" STATE_CORRECT,"},{"lineNumber":102,"author":{"gitId":"-"},"content":"} from \u0027./QuestionConstants\u0027;"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"const STATE_QUIZ_FRESH \u003d 3;"},{"lineNumber":105,"author":{"gitId":"-"},"content":"const STATE_QUIZ_IN_PROGRESS \u003d 4;"},{"lineNumber":106,"author":{"gitId":"-"},"content":"const STATE_QUIZ_DONE \u003d 5;"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" name: \u0027Quiz\u0027,"},{"lineNumber":110,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":113,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":114,"author":{"gitId":"-"},"content":" },"},{"lineNumber":115,"author":{"gitId":"-"},"content":" },"},{"lineNumber":116,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" currentQuestion: 0,"},{"lineNumber":119,"author":{"gitId":"-"},"content":" questions: [],"},{"lineNumber":120,"author":{"gitId":"-"},"content":" score: 0,"},{"lineNumber":121,"author":{"gitId":"-"},"content":" state: STATE_QUIZ_FRESH,"},{"lineNumber":122,"author":{"gitId":"-"},"content":" };"},{"lineNumber":123,"author":{"gitId":"-"},"content":" },"},{"lineNumber":124,"author":{"gitId":"-"},"content":" provide() {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" questions: this.questions,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" gotoNextQuestion: this.gotoNextQuestion,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" showNextQuestion: this.showNextQuestion,"},{"lineNumber":129,"author":{"gitId":"-"},"content":" };"},{"lineNumber":130,"author":{"gitId":"-"},"content":" },"},{"lineNumber":131,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" scoreText() {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" return (this.score / this.questions.length) \u003e 0.5"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ? \u0027Well done!\u0027"},{"lineNumber":135,"author":{"gitId":"-"},"content":" : \u0027Try again?\u0027;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" },"},{"lineNumber":137,"author":{"gitId":"-"},"content":" },"},{"lineNumber":138,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" gotoNextQuestion() {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" this.questions[this.currentQuestion - 1].hide();"},{"lineNumber":141,"author":{"gitId":"-"},"content":" this.currentQuestion +\u003d 1;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" },"},{"lineNumber":143,"author":{"gitId":"-"},"content":" showNextQuestion() {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" if (this.currentQuestion \u003c\u003d this.questions.length) {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" this.questions[this.currentQuestion - 1].show();"},{"lineNumber":146,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" this.complete();"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":" },"},{"lineNumber":150,"author":{"gitId":"-"},"content":" begin() {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" this.currentQuestion \u003d 1;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" this.score \u003d 0;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" this.state \u003d STATE_QUIZ_IN_PROGRESS;"},{"lineNumber":154,"author":{"gitId":"-"},"content":" },"},{"lineNumber":155,"author":{"gitId":"-"},"content":" showFirstQuestion() {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" if (this.questions.length) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.questions[0].show();"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":" },"},{"lineNumber":160,"author":{"gitId":"-"},"content":" reset() {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" this.questions.forEach(question \u003d\u003e question.reset());"},{"lineNumber":162,"author":{"gitId":"-"},"content":" },"},{"lineNumber":163,"author":{"gitId":"-"},"content":" complete() {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" this.score \u003d this.questions.filter(q \u003d\u003e q.qState.state \u003d\u003d\u003d STATE_CORRECT).length;"},{"lineNumber":165,"author":{"gitId":"-"},"content":" this.state \u003d STATE_QUIZ_DONE;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" this.reset();"},{"lineNumber":167,"author":{"gitId":"-"},"content":" },"},{"lineNumber":168,"author":{"gitId":"-"},"content":" setScoreCircleStyles() {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" const scoreFactor \u003d this.score / this.questions.length;"},{"lineNumber":170,"author":{"gitId":"-"},"content":" this.$refs.score.style.strokeDashoffset \u003d (1 - scoreFactor) * 264;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" this.$refs.score.style.stroke \u003d \u0027#51c2f8\u0027;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" },"},{"lineNumber":173,"author":{"gitId":"-"},"content":" },"},{"lineNumber":174,"author":{"gitId":"-"},"content":"};"},{"lineNumber":175,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":" .quiz-container {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" isolation: isolate;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" .intro-outro-card {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" transition: transform 0.35s ease-out, opacity 0.35s linear;"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" .intro-outro-card-enter-active,"},{"lineNumber":188,"author":{"gitId":"-"},"content":" .intro-outro-card-leave-to {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" .intro-outro-card \u003e .card-body {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":194,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":195,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":196,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" .score {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" font-size: 1.4rem;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" font-weight: bold;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" }"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" .score-circle {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" stroke-dasharray: 264;"},{"lineNumber":206,"author":{"gitId":"-"},"content":" fill: none;"},{"lineNumber":207,"author":{"gitId":"LamJiuFong"},"content":" stroke: rgb(132 215 255 / 80%);"},{"lineNumber":208,"author":{"gitId":"-"},"content":" stroke-width: 8;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" transition: stroke-dashoffset 1.5s ease-out, stroke 1.5s linear;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" .score-background-circle {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" fill: none;"},{"lineNumber":214,"author":{"gitId":"LamJiuFong"},"content":" stroke: rgb(227 226 226 / 50%);"},{"lineNumber":215,"author":{"gitId":"-"},"content":" stroke-width: 8;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" .btn {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" border-radius: 2em;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" .progress-bar-z {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":2,"-":224}},{"path":"scripts/process_message.py","fileType":"py","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"import json"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"import re"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"import sys"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"markdown_content \u003d sys.argv[1]"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Preprocessing the markdown content"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"markdown_content \u003d markdown_content.replace(\u0027`\u0027, \u0027\\\\`\u0027)"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"markdown_content \u003d markdown_content.replace(\u0027(\u0027, \u0027\\\\(\u0027).replace(\u0027)\u0027, \u0027\\\\)\u0027)"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"markdown_content \u003d re.sub(r\u0027\u003c!--.*?--\u003e\u0027, \u0027\u0027, markdown_content, flags\u003dre.DOTALL) # Remove HTML comments"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"print(markdown_content)"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""}],"authorContributionMap":{"KevinEyo1":15}}] +[{"path":".github/workflows/pr-merge.yml","fileType":"yml","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"name: Pull Request Review Action"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"on:"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" pull_request_target:"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" types:"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" - closed"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"concurrency:"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" cancel-in-progress: true"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"jobs:"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" check-pr-label:"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" if: ${{ github.event.pull_request.merged }}"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" runs-on: ubuntu-latest"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" steps:"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" - uses: actions/checkout@v3"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" - name: Check for PR description label"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" id: check_pr_description_label"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" run: |"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" python scripts/process_message.py \"${TEXT_BODY}\" \u003e processed_body.txt"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" processed_body\u003d$(cat processed_body.txt)"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" proposed_version_impact\u003d$(echo \"$processed_body\" | awk \u0027/Major \\\\\\(when you make incompatible API changes\\\\\\)/,/Patch \\\\\\(when you make backward compatible bug fixes\\\\\\)/\u0027)"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" is_major\u003d$(echo \"$proposed_version_impact\" | grep -qi \u0027\\[X\\] Major\u0027; echo $((1-$?)))"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" is_minor\u003d$(echo \"$proposed_version_impact\" | grep -qi \u0027\\[X\\] Minor\u0027; echo $((1-$?)))"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" is_patch\u003d$(echo \"$proposed_version_impact\" | grep -qi \u0027\\[X\\] Patch\u0027; echo $((1-$?)))"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" num_labels_chosen\u003d$(($is_major + $is_minor + $is_patch))"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" echo \"num_labels_chosen\u003d$num_labels_chosen\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" if [[ \"$num_labels_chosen\" -eq 0 ]]; then"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" echo \"message\u003d$(echo \"@${MERGE_AUTHOR} Each PR must have a SEMVER impact label, please remember to label the PR properly.\")\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" elif [[ \"$num_labels_chosen\" -ge 2 ]]; then"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" echo \"message\u003d$(echo \"@${MERGE_AUTHOR} Each PR can only have one SEMVER impact label, please remember to label the PR properly.\")\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":" else"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" echo \"message\u003d$(echo \"SEMVER impact selected.\")\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" echo \"chosen_label\u003d$("},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" if [ \"$is_major\" -eq 1 ]; then"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" echo \"r.Major\""},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" elif [ \"$is_minor\" -eq 1 ]; then"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" echo \"r.Minor\""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" elif [ \"$is_patch\" -eq 1 ]; then"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" echo \"r.Patch\""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" fi"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" )\" \u003e\u003e $GITHUB_OUTPUT"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" fi"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" env:"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" TEXT_BODY: ${{ github.event.pull_request.body }}"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" MERGE_AUTHOR: ${{ github.event.sender.login }}"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" - name: Assign label based on version impact"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" uses: actions/github-script@v7"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" with:"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" script: |"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" if (process.env.NUM_LABELS_CHOSEN !\u003d 1) {"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" github.rest.issues.createComment({"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" issue_number: context.payload.pull_request.number,"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" owner: context.repo.owner,"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" repo: context.repo.repo,"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" body: process.env.MESSAGE,"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" });"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" } else {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" github.rest.issues.addLabels({"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" issue_number: context.payload.pull_request.number,"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" owner: context.repo.owner,"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" repo: context.repo.repo,"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":" labels: [process.env.CHOSEN_LABEL]"},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":" });"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" env:"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" NUM_LABELS_CHOSEN: ${{ steps.check_pr_description_label.outputs.num_labels_chosen }}"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" MESSAGE: ${{ steps.check_pr_description_label.outputs.message }}"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" CHOSEN_LABEL: ${{ steps.check_pr_description_label.outputs.chosen_label }}"}],"authorContributionMap":{"KevinEyo1":69}},{"path":".github/workflows/pr-message-reminder.yml","fileType":"yml","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"name: PR Message Reminder"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"on:"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" push:"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" branches:"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" - master"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" tags:"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" - \u0027v[0-9]+.[0-9]+.[0-9]+\u0027"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" pull_request:"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" types:"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" - opened"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" - synchronize"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" - reopened"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" - edited"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"concurrency:"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" cancel-in-progress: true"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"jobs:"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" remind-pr-author:"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" if: github.event_name \u003d\u003d \u0027pull_request\u0027"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" runs-on: ubuntu-latest"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" "},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" steps:"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" - uses: actions/checkout@v3"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" - name: Extract Proposed Commit Message"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" run: |"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" python scripts/process_message.py \"${TEXT_BODY}\" \u003e processed_body.txt"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" processed_body\u003d$(cat processed_body.txt)"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" proposed_commit_message\u003d$(echo \"$processed_body\" | awk \u0027/\\\\*\\\\*Proposed commit message: \\\\\\(wrap lines at 72 characters\\\\\\)\\\\*\\\\*/,/\\\\*\\\\*Checklist:\\\\*\\\\*/\u0027 | tail -n +2 | head -n -3)"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" echo \"Proposed commit message:\""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":" echo \"$proposed_commit_message\""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" if ! grep -q \u0027[^[:space:]]\u0027 \u003c\u003c\u003c \"$proposed_commit_message\"; then"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" echo \"Please fill in the proposed commit message section in the pull request description.\""},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" exit 1"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" fi"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" env:"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" TEXT_BODY: ${{ github.event.pull_request.body }}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":39}},{"path":".stylelintrc.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"module.exports \u003d {"},{"lineNumber":2,"author":{"gitId":"LamJiuFong"},"content":" \"extends\": [\"stylelint-config-standard\", \"stylelint-config-recommended-vue\"],"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":" \"plugins\": [\"@stylistic/stylelint-plugin\"],"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"rules\": {"},{"lineNumber":5,"author":{"gitId":"LamJiuFong"},"content":" \"@stylistic/indentation\": [4, { baseIndentLevel: 1 } ],"},{"lineNumber":6,"author":{"gitId":"-"},"content":" // MarkBind generates some blank CSS files when initialising a site,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" // which violates the no-empty-source rule"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"no-empty-source\": null"},{"lineNumber":9,"author":{"gitId":"-"},"content":" }"},{"lineNumber":10,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"LamJiuFong":3,"-":7}},{"path":"docs/_markbind/layouts/userGuide.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% include \"_markbind/layouts/headers/header.md\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" User Guide"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"* [Getting Started]({{baseUrl}}/userGuide/gettingStarted.html)"},{"lineNumber":13,"author":{"gitId":"-"},"content":"* Authoring Contents :expanded:"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * [Overview]({{baseUrl}}/userGuide/authoringContents.html)"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * [Adding Pages]({{baseUrl}}/userGuide/addingPages.html)"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * [MarkBind Syntax Overview]({{baseUrl}}/userGuide/markBindSyntaxOverview.html)"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * [Formatting Contents]({{baseUrl}}/userGuide/formattingContents.html)"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * [Using Components]({{baseUrl}}/userGuide/usingComponents.html) :expanded:"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * [Presentation]({{baseUrl}}/userGuide/components/presentation.html)"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * [Images \u0026 Diagrams]({{baseUrl}}/userGuide/components/imagesAndDiagrams.html)"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * [Pop-Ups]({{baseUrl}}/userGuide/components/popups.html)"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * [Navigation]({{baseUrl}}/userGuide/components/navigation.html)"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * [Others]({{baseUrl}}/userGuide/components/others.html)"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * [Advanced]({{baseUrl}}/userGuide/components/advanced.html)"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * [Using HTML, JavaScript, CSS]({{baseUrl}}/userGuide/usingHtmlJavaScriptCss.html)"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * [Tweaking the Page Structure]({{baseUrl}}/userGuide/tweakingThePageStructure.html)"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * [Reusing Contents]({{baseUrl}}/userGuide/reusingContents.html)"},{"lineNumber":28,"author":{"gitId":"-"},"content":"* Working with Sites :expanded:"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * [Overview]({{baseUrl}}/userGuide/workingWithSites.html)"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * [Setting Site Properties]({{baseUrl}}/userGuide/settingSiteProperties.html)"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Using Plugins]({{baseUrl}}/userGuide/usingPlugins.html)"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Making the Site Searchable]({{baseUrl}}/userGuide/makingTheSiteSearchable.html)"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [Applying Themes]({{baseUrl}}/userGuide/themes.html)"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Deploying the Site]({{baseUrl}}/userGuide/deployingTheSite.html)"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * [MarkBind in the Project Workflow]({{baseUrl}}/userGuide/markBindInTheProjectWorkflow.html)"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Redirecting to a Custom 404 Page]({{baseUrl}}/userGuide/redirectingToACustom404Page.html)"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Adding Navigation Buttons]({{baseUrl}}/userGuide/addingNavigationButtons.html)"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Templates]({{baseUrl}}/userGuide/templates.html)"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* References :expanded:"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [CLI Commands]({{baseUrl}}/userGuide/cliCommands.html)"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Reader-Facing Features]({{baseUrl}}/userGuide/readerFacingFeatures.html)"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" * [Syntax Reference]({{baseUrl}}/userGuide/syntaxReference.html)"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * [`site.json` File]({{baseUrl}}/userGuide/siteJsonFile.html)"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [`.gitignore` File]({{baseUrl}}/userGuide/gitignoreFile.html)"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Tips \u0026 Tricks]({{baseUrl}}/userGuide/tipsAndTricks.html)"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Troubleshooting]({{baseUrl}}/userGuide/troubleshooting.html)"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * [Glossary]({{baseUrl}}/userGuide/glossary.html)"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cbreadcrumb /\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" {{ content }}"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"footers/footer.md\" /\u003e"}],"authorContributionMap":{"jingting1412":1,"-":62}},{"path":"docs/css/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"docs/devGuide/bootcamp/exploreMarkBind.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Explore MarkBind as a User\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" title: \"{{ title }}\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" layout: devGuide.md"},{"lineNumber":7,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"Getting to know MarkBind as a user will help you understand what MarkBind offers and how it can be used to create static websites. This will also help you understand the different components and syntax available in MarkBind, which will be useful when you want to debug issues or create similar features in the future."},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"## TLDR"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"- [ ] Setup the master branch MarkBind"},{"lineNumber":21,"author":{"gitId":"-"},"content":"- [ ] Create a MarkBind site"},{"lineNumber":22,"author":{"gitId":"-"},"content":"- [ ] Create content with MarkBind"},{"lineNumber":23,"author":{"gitId":"-"},"content":"- [ ] Modify site structure and configuration"},{"lineNumber":24,"author":{"gitId":"-"},"content":"- [ ] Deploy your MarkBind site"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"## Setup the master branch of MarkBind"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"As mentioned in our \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/gettingStarted.html\"\u003euser guide\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/gettingStarted.html\"\u003euser guide\u003c/a\u003e, we can either install MarkBind via npm or create a new MarkBind site with npx."},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"In this bootcamp, we want to set up the master branch MarkBind so that we can test out any changes we make to the codebase on our local machine."},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" light\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"You can also switch between the master branch MarkBind and check out other branches if you are working on multiple issues. This is also useful when you want to test out a PR submitted by another developer."},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/devGuide/development/settingUp.md\" header\u003d\"**Setting up MarkBind**\" type\u003d\"info\" minimized\u003e\u003c/panel\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"After setting up MarkBind, try running from the root directory of your MarkBind repository:"},{"lineNumber":45,"author":{"gitId":"-"},"content":"- [ ] `markbind -v` to check that you have the correct version of MarkBind installed"},{"lineNumber":46,"author":{"gitId":"-"},"content":"- [ ] `cd docs \u0026\u0026 markbind serve -d` to check that you can serve the MarkBind documentation site in development mode"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"If you can browse the MarkBind documentation site that should have automatically been up in your browser at http://localhost:8080, you have successfully set up MarkBind!"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"port-info\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":"If port 8080 is in use, another port will be chosen. Refer to the console output for the exact URL address."},{"lineNumber":53,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Sample Console Output\" type\u003d\"info\" minimized\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"```"},{"lineNumber":59,"author":{"gitId":"-"},"content":"$ markbind -v"},{"lineNumber":60,"author":{"gitId":"-"},"content":" __ __ _ ____ _ _ "},{"lineNumber":61,"author":{"gitId":"-"},"content":" | \\/ | __ _ _ __ | | __ | __ ) (_) _ __ __| |"},{"lineNumber":62,"author":{"gitId":"-"},"content":" | |\\/| | / _` | | \u0027__| | |/ / | _ \\ | | | \u0027_ \\ / _` |"},{"lineNumber":63,"author":{"gitId":"-"},"content":" | | | | | (_| | | | | \u003c | |_) | | | | | | | | (_| |"},{"lineNumber":64,"author":{"gitId":"-"},"content":" |_| |_| \\__,_| |_| |_|\\_\\ |____/ |_| |_| |_| \\__,_|"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" v4.0.2"},{"lineNumber":67,"author":{"gitId":"-"},"content":"Usage: markbind \u003ccommand\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"Options:"},{"lineNumber":70,"author":{"gitId":"-"},"content":" -V, --version output the version number "},{"lineNumber":71,"author":{"gitId":"-"},"content":" -h, --help display help for command "},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"Commands:"},{"lineNumber":74,"author":{"gitId":"-"},"content":" init|i [options] [root] init a markbind website project"},{"lineNumber":75,"author":{"gitId":"-"},"content":" serve|s [options] [root] build then serve a website from a directory"},{"lineNumber":76,"author":{"gitId":"-"},"content":" build|b [options] [root] [output] build a website"},{"lineNumber":77,"author":{"gitId":"-"},"content":" deploy|d [options] [root] deploy the latest build of the site to the repo\u0027s Github pages"},{"lineNumber":78,"author":{"gitId":"-"},"content":" help [command] display help for command"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":"$ cd docs \u0026\u0026 markbind serve -d"},{"lineNumber":81,"author":{"gitId":"-"},"content":" __ __ _ ____ _ _"},{"lineNumber":82,"author":{"gitId":"-"},"content":" | \\/ | __ _ _ __ | | __ | __ ) (_) _ __ __| |"},{"lineNumber":83,"author":{"gitId":"-"},"content":" | |\\/| | / _` | | \u0027__| | |/ / | _ \\ | | | \u0027_ \\ / _` |"},{"lineNumber":84,"author":{"gitId":"-"},"content":" | | | | | (_| | | | | \u003c | |_) | | | | | | | | (_| |"},{"lineNumber":85,"author":{"gitId":"-"},"content":" |_| |_| \\__,_| |_| |_|\\_\\ |____/ |_| |_| |_| \\__,_|"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" v4.0.2"},{"lineNumber":88,"author":{"gitId":"-"},"content":"info: Changes detected in MarkBind Vue Source Files:"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Bundle is regenerated by webpack and built pages are re-rendered with the latest bundle."},{"lineNumber":90,"author":{"gitId":"-"},"content":"info: Website generation started at 4:16:47 pm"},{"lineNumber":91,"author":{"gitId":"-"},"content":"info: Building assets..."},{"lineNumber":92,"author":{"gitId":"-"},"content":"info: Assets built"},{"lineNumber":93,"author":{"gitId":"-"},"content":"info: Generating pages..."},{"lineNumber":94,"author":{"gitId":"-"},"content":"[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d------------------------------------] 23 / 59 pages [\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d-------[\u003d\u003d\u003d\u003d\u003d\u003d[\u003d\u003d\u003d[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 59 / 59 pages built"},{"lineNumber":95,"author":{"gitId":"-"},"content":"info: Pages built"},{"lineNumber":96,"author":{"gitId":"-"},"content":"webpack built 6d52f45b1910f9f545a2 in 11017ms"},{"lineNumber":97,"author":{"gitId":"-"},"content":"i 「wdm」: Hash: 6d52f45b1910f9f545a2"},{"lineNumber":98,"author":{"gitId":"-"},"content":"Version: webpack 4.46.0"},{"lineNumber":99,"author":{"gitId":"-"},"content":"Time: 11017ms"},{"lineNumber":100,"author":{"gitId":"-"},"content":"Built at: 01/01/2023 4:16:58 pm"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Asset Size Chunks Chunk Names"},{"lineNumber":102,"author":{"gitId":"-"},"content":" fonts/KaTeX_AMS-Regular.ttf 62.1 KiB [emitted]"},{"lineNumber":103,"author":{"gitId":"-"},"content":" fonts/KaTeX_AMS-Regular.woff 32.7 KiB [emitted]"},{"lineNumber":104,"author":{"gitId":"-"},"content":" fonts/KaTeX_AMS-Regular.woff2 27.4 KiB [emitted]"},{"lineNumber":105,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Bold.ttf 12.1 KiB [emitted]"},{"lineNumber":106,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Bold.woff 7.54 KiB [emitted]"},{"lineNumber":107,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Bold.woff2 6.75 KiB [emitted]"},{"lineNumber":108,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Regular.ttf 12.1 KiB [emitted]"},{"lineNumber":109,"author":{"gitId":"-"},"content":" fonts/KaTeX_Caligraphic-Regular.woff 7.48 KiB [emitted]"},{"lineNumber":110,"author":{"gitId":"-"},"content":"fonts/KaTeX_Caligraphic-Regular.woff2 6.75 KiB [emitted]"},{"lineNumber":111,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Bold.ttf 19.1 KiB [emitted]"},{"lineNumber":112,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Bold.woff 13 KiB [emitted]"},{"lineNumber":113,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Bold.woff2 11.1 KiB [emitted]"},{"lineNumber":114,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Regular.ttf 19.1 KiB [emitted]"},{"lineNumber":115,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Regular.woff 12.9 KiB [emitted]"},{"lineNumber":116,"author":{"gitId":"-"},"content":" fonts/KaTeX_Fraktur-Regular.woff2 11.1 KiB [emitted]"},{"lineNumber":117,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Bold.ttf 50.1 KiB [emitted]"},{"lineNumber":118,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Bold.woff 29.2 KiB [emitted]"},{"lineNumber":119,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Bold.woff2 24.7 KiB [emitted]"},{"lineNumber":120,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-BoldItalic.ttf 32.2 KiB [emitted]"},{"lineNumber":121,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-BoldItalic.woff 19 KiB [emitted]"},{"lineNumber":122,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-BoldItalic.woff2 16.4 KiB [emitted]"},{"lineNumber":123,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Italic.ttf 32.8 KiB [emitted]"},{"lineNumber":124,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Italic.woff 19.2 KiB [emitted]"},{"lineNumber":125,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Italic.woff2 16.6 KiB [emitted]"},{"lineNumber":126,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Regular.ttf 52.3 KiB [emitted]"},{"lineNumber":127,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Regular.woff 30.1 KiB [emitted]"},{"lineNumber":128,"author":{"gitId":"-"},"content":" fonts/KaTeX_Main-Regular.woff2 25.7 KiB [emitted]"},{"lineNumber":129,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-BoldItalic.ttf 30.5 KiB [emitted]"},{"lineNumber":130,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-BoldItalic.woff 18.2 KiB [emitted]"},{"lineNumber":131,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-BoldItalic.woff2 16 KiB [emitted]"},{"lineNumber":132,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-Italic.ttf 30.6 KiB [emitted]"},{"lineNumber":133,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-Italic.woff 18.3 KiB [emitted]"},{"lineNumber":134,"author":{"gitId":"-"},"content":" fonts/KaTeX_Math-Italic.woff2 16.1 KiB [emitted]"},{"lineNumber":135,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Bold.ttf 23.9 KiB [emitted]"},{"lineNumber":136,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Bold.woff 14.1 KiB [emitted]"},{"lineNumber":137,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Bold.woff2 11.9 KiB [emitted]"},{"lineNumber":138,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Italic.ttf 21.8 KiB [emitted]"},{"lineNumber":139,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Italic.woff 13.8 KiB [emitted]"},{"lineNumber":140,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Italic.woff2 11.7 KiB [emitted]"},{"lineNumber":141,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Regular.ttf 19 KiB [emitted]"},{"lineNumber":142,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Regular.woff 12 KiB [emitted]"},{"lineNumber":143,"author":{"gitId":"-"},"content":" fonts/KaTeX_SansSerif-Regular.woff2 10.1 KiB [emitted]"},{"lineNumber":144,"author":{"gitId":"-"},"content":" fonts/KaTeX_Script-Regular.ttf 16.3 KiB [emitted]"},{"lineNumber":145,"author":{"gitId":"-"},"content":" fonts/KaTeX_Script-Regular.woff 10.3 KiB [emitted]"},{"lineNumber":146,"author":{"gitId":"-"},"content":" fonts/KaTeX_Script-Regular.woff2 9.42 KiB [emitted]"},{"lineNumber":147,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size1-Regular.ttf 11.9 KiB [emitted]"},{"lineNumber":148,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size1-Regular.woff 6.34 KiB [emitted]"},{"lineNumber":149,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size1-Regular.woff2 5.34 KiB [emitted]"},{"lineNumber":150,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size2-Regular.ttf 11.2 KiB [emitted]"},{"lineNumber":151,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size2-Regular.woff 6.04 KiB [emitted]"},{"lineNumber":152,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size2-Regular.woff2 5.09 KiB [emitted]"},{"lineNumber":153,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size3-Regular.ttf 7.41 KiB [emitted]"},{"lineNumber":154,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size3-Regular.woff 4.32 KiB [emitted]"},{"lineNumber":155,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size3-Regular.woff2 3.54 KiB [emitted]"},{"lineNumber":156,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size4-Regular.ttf 10.1 KiB [emitted]"},{"lineNumber":157,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size4-Regular.woff 5.84 KiB [emitted]"},{"lineNumber":158,"author":{"gitId":"-"},"content":" fonts/KaTeX_Size4-Regular.woff2 4.81 KiB [emitted]"},{"lineNumber":159,"author":{"gitId":"-"},"content":" fonts/KaTeX_Typewriter-Regular.ttf 26.9 KiB [emitted]"},{"lineNumber":160,"author":{"gitId":"-"},"content":" fonts/KaTeX_Typewriter-Regular.woff 15.7 KiB [emitted]"},{"lineNumber":161,"author":{"gitId":"-"},"content":" fonts/KaTeX_Typewriter-Regular.woff2 13.3 KiB [emitted]"},{"lineNumber":162,"author":{"gitId":"-"},"content":" js/markbind.min.js 1.3 MiB markbind [emitted] markbind"},{"lineNumber":163,"author":{"gitId":"-"},"content":"Entrypoint markbind \u003d js/markbind.min.js"},{"lineNumber":164,"author":{"gitId":"-"},"content":"[0] multi webpack-hot-middleware/client ../packages/core-web/src/index.js 40 bytes {markbind} [built]"},{"lineNumber":165,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/arrayWithHoles.js] ../node_modules/@babel/runtime/helpers/arrayWithHoles.js "},{"lineNumber":166,"author":{"gitId":"-"},"content":"184 bytes {markbind} [built]"},{"lineNumber":167,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/defineProperty.js] ../node_modules/@babel/runtime/helpers/defineProperty.js "},{"lineNumber":168,"author":{"gitId":"-"},"content":"367 bytes {markbind} [built]"},{"lineNumber":169,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js] ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js 711 bytes {markbind} [built]"},{"lineNumber":170,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/nonIterableRest.js] ../node_modules/@babel/runtime/helpers/nonIterableRest.js 309 bytes {markbind} [built]"},{"lineNumber":171,"author":{"gitId":"-"},"content":"[../../node_modules/@babel/runtime/helpers/slicedToArray.js] ../node_modules/@babel/runtime/helpers/slicedToArray.js 522 bytes {markbind} [built]"},{"lineNumber":172,"author":{"gitId":"-"},"content":"[../../node_modules/strip-ansi/index.js] ../node_modules/strip-ansi/index.js 154 bytes {markbind} [built]"},{"lineNumber":173,"author":{"gitId":"-"},"content":"[../../node_modules/webpack-hot-middleware/client-overlay.js] ../node_modules/webpack-hot-middleware/client-overlay.js 2.14 KiB {markbind} [built] "},{"lineNumber":174,"author":{"gitId":"-"},"content":"[../../node_modules/webpack-hot-middleware/client.js] ../node_modules/webpack-hot-middleware/client.js 7.69 KiB {markbind} [built]"},{"lineNumber":175,"author":{"gitId":"-"},"content":"[../../node_modules/webpack-hot-middleware/process-update.js] ../node_modules/webpack-hot-middleware/process-update.js 4.36 KiB {markbind} [built] "},{"lineNumber":176,"author":{"gitId":"-"},"content":"[../../node_modules/webpack/buildin/module.js] ../node_modules/webpack/buildin/module.js 497 bytes {markbind} [built]"},{"lineNumber":177,"author":{"gitId":"-"},"content":"[./src/VueCommonAppFactory.js] ../packages/core-web/src/VueCommonAppFactory.js 1.09 KiB {markbind} [built]"},{"lineNumber":178,"author":{"gitId":"-"},"content":"[./src/index.js] ../packages/core-web/src/index.js 8.17 KiB {markbind} [built]"},{"lineNumber":179,"author":{"gitId":"-"},"content":"[./src/scrollTopButton.js] ../packages/core-web/src/scrollTopButton.js 1.49 KiB {markbind} [built]"},{"lineNumber":180,"author":{"gitId":"-"},"content":"[./src/styles/index.css] ../packages/core-web/src/styles/index.css 1.09 KiB {markbind} [built]"},{"lineNumber":181,"author":{"gitId":"-"},"content":" + 346 hidden modules"},{"lineNumber":182,"author":{"gitId":"-"},"content":"i 「wdm」: Compiled successfully."},{"lineNumber":183,"author":{"gitId":"-"},"content":"info: Site data built"},{"lineNumber":184,"author":{"gitId":"-"},"content":"info: Website generation complete! Total build time: 11.242s"},{"lineNumber":185,"author":{"gitId":"-"},"content":"info: Serving \"C:\\Users\\User\\Documents\\GitHub\\markbind\\docs\\_site\" at http://127.0.0.1:8080"},{"lineNumber":186,"author":{"gitId":"-"},"content":"info: Press CTRL+C to stop ..."},{"lineNumber":187,"author":{"gitId":"-"},"content":"```"},{"lineNumber":188,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"## Create a MarkBind site"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":"With MarkBind installed, we can now create a new MarkBind site."},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"We recommend that you set up a new repository for this MarkBind site so that you can push your site to GitHub pages later. This MarkBind site can be used to test out any changes you make to the codebase."},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":"As an example, let\u0027s create a test site together!"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"You can refer to the example repository [here](https://github.com/tlylt/mb-dev-tlylt) for the code and [here](https://tlylt.github.io/mb-dev-tlylt/) for the deployed site if you get stuck."},{"lineNumber":202,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":"1. Create a new folder called \u003ctooltip content\u003d\"replace \u0027xxx\u0027 with your GitHub username\"\u003e\"mb-dev-xxx\"\u003c/tooltip\u003e at a location outside of the MarkBind source code directory."},{"lineNumber":205,"author":{"gitId":"-"},"content":"1. Go to the folder and run `markbind init` to create a new MarkBind site with the default template."},{"lineNumber":206,"author":{"gitId":"-"},"content":"1. Initialize a new git repository in the folder by running `git init`. You can also create a new public repository on GitHub first and clone it to your local machine."},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":"You should see the following output:"},{"lineNumber":209,"author":{"gitId":"-"},"content":"```"},{"lineNumber":210,"author":{"gitId":"-"},"content":"$ markbind init"},{"lineNumber":211,"author":{"gitId":"-"},"content":" __ __ _ ____ _ _"},{"lineNumber":212,"author":{"gitId":"-"},"content":" | \\/ | __ _ _ __ | | __ | __ ) (_) _ __ __| |"},{"lineNumber":213,"author":{"gitId":"-"},"content":" | |\\/| | / _` | | \u0027__| | |/ / | _ \\ | | | \u0027_ \\ / _` |"},{"lineNumber":214,"author":{"gitId":"-"},"content":" | | | | | (_| | | | | \u003c | |_) | | | | | | | | (_| |"},{"lineNumber":215,"author":{"gitId":"-"},"content":" |_| |_| \\__,_| |_| |_|\\_\\ |____/ |_| |_| |_| \\__,_|"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" v4.0.2"},{"lineNumber":218,"author":{"gitId":"-"},"content":"info: Initialization success."},{"lineNumber":219,"author":{"gitId":"-"},"content":"```"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"After setting up the MarkBind test site, try running the following common operations from the root directory of your test site:"},{"lineNumber":226,"author":{"gitId":"-"},"content":"- [ ] Build the site by running `markbind build`"},{"lineNumber":227,"author":{"gitId":"-"},"content":"- [ ] Serve the site by running `markbind serve`"},{"lineNumber":228,"author":{"gitId":"-"},"content":"- [ ] Serve the site in development mode by running `markbind serve -d`"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":"You now have the test site up and running!"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":"## Create Content with MarkBind"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":"MarkBind contains a range of additional syntax on top of Markdown. It also comes with a set of components that can be used to create content."},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":"Two essential sections of the user guide to get started with are:"},{"lineNumber":239,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/formattingContents.html\"\u003eFormatting Contents\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/formattingContents.html\"\u003eFormatting Contents\u003c/a\u003e - Covering Markdown \u0026 Markdown-like syntax."},{"lineNumber":240,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/usingComponents.html\"\u003eUsing Components\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/usingComponents.html\"\u003eUsing Components\u003c/a\u003e - Covering MarkBind components (Built with Vue.js or Native HTML)."},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/userGuide/authoringContents.md\" header\u003d\"**Creating Content**\" type\u003d\"info\" minimized\u003e\u003c/panel\u003e"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":"The generated MarkBind site from the above step also includes a few sample usage in the `index.md` file."},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":"Now, let\u0027s try editing the `index.md` file to add some content of our own!"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":"1. Open the `index.md` file in your `mb-dev-xxx` folder."},{"lineNumber":249,"author":{"gitId":"-"},"content":"1. Replace the wording `Landing Page Title` with `MarkBind Developer Test Site`."},{"lineNumber":250,"author":{"gitId":"-"},"content":"1. Modify or add some content utilizing one or more of the following syntaxes:"},{"lineNumber":251,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/formattingContents.html#text-styles\"\u003eText Styles\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/formattingContents.html#text-styles\"\u003eText Styles\u003c/a\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/formattingContents.html#code\"\u003eCode Block\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/formattingContents.html#code\"\u003eCode Block\u003c/a\u003e"},{"lineNumber":253,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/formattingContents.html#emoji\"\u003eEmoji\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/formattingContents.html#emoji\"\u003eEmoji\u003c/a\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":" - etc."},{"lineNumber":255,"author":{"gitId":"-"},"content":"1. Modify or add some content utilizing one or more of the following components:"},{"lineNumber":256,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/components/presentation.html#boxes\"\u003eBox\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/components/presentation.html#boxes\"\u003eBox\u003c/a\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/components/presentation.html#panels\"\u003ePanel\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/components/presentation.html#panels\"\u003ePanel\u003c/a\u003e"},{"lineNumber":258,"author":{"gitId":"yiwen101"},"content":" - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/components/popups.html#tooltips\"\u003eTooltip\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/components/popups.html#tooltips\"\u003eTooltip\u003c/a\u003e"},{"lineNumber":259,"author":{"gitId":"-"},"content":" - etc."},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"With live preview, you should be able to see the changes you have made to the site after saving. Check that the following are true:"},{"lineNumber":266,"author":{"gitId":"-"},"content":"- [ ] Serve the site by running `markbind serve -d`"},{"lineNumber":267,"author":{"gitId":"-"},"content":"- [ ] Make changes to the `index.md` file and save"},{"lineNumber":268,"author":{"gitId":"-"},"content":"- [ ] See the changes reflected in the live preview, with the correct rendering of the syntax and components"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":"You now have created content with MarkBind!"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":"## Modify Site Structure and Configuration"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":"There are a few ways to modify the site\u0027s (as well as the page\u0027s) structure and configuration. We will cover the following:"},{"lineNumber":277,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/tweakingThePageStructure.html#frontmatter\"\u003eFrontmatter\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/tweakingThePageStructure.html#frontmatter\"\u003eFrontmatter\u003c/a\u003e"},{"lineNumber":278,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/tweakingThePageStructure.html#layouts\"\u003eLayouts\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/tweakingThePageStructure.html#layouts\"\u003eLayouts\u003c/a\u003e"},{"lineNumber":279,"author":{"gitId":"-"},"content":"- \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/siteJsonFile.html\"\u003esite.json\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/siteJsonFile.html\"\u003esite.json\u003c/a\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":""},{"lineNumber":281,"author":{"gitId":"-"},"content":"Let\u0027s continue with the test site we created earlier and modify the `index.md` file via frontmatter."},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":"1. Open the `index.md` file in your `mb-dev-xxx` folder."},{"lineNumber":284,"author":{"gitId":"-"},"content":"1. Change the `pageNavTitle` in the frontmatter from `Topics` to `Index Page`."},{"lineNumber":285,"author":{"gitId":"-"},"content":"1. Change the `pageNav` in the frontmatter from `4` to `5`."},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":"Ensure that you are still serving the site with `markbind serve -d`. Check that the following are true:"},{"lineNumber":292,"author":{"gitId":"-"},"content":"- [ ] The rendered page navigation title is changed to `Index Page`"},{"lineNumber":293,"author":{"gitId":"-"},"content":"- [ ] The rendered page navigation content now shows `H5` headings as well"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"-"},"content":"Screenshot before the changes:"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"{{baseUrl}}/images/bootcamp/page_nav_before.png\" alt\u003d\"Page navigation title and content before changes\"\u003e\u003c/pic\u003e"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":"Screenshot after the changes:"},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"{{baseUrl}}/images/bootcamp/page_nav_after.png\" alt\u003d\"Page navigation title and content after changes\"\u003e\u003c/pic\u003e"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":304,"author":{"gitId":"-"},"content":""},{"lineNumber":305,"author":{"gitId":"-"},"content":"Another commonly adjusted structure is the layout of the site (especially, the site\u0027s top header and the left-hand-side navigation)."},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":"1. Open the `_markbind/layouts/default.md` file in your `mb-dev-xxx` folder."},{"lineNumber":308,"author":{"gitId":"-"},"content":"1. Change `Your Logo` to `MarkBind Developer Test Site`."},{"lineNumber":309,"author":{"gitId":"-"},"content":"1. Change `Home :house:` to `My Test Playground :computer:`."},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"Ensure that you are still serving the site with `markbind serve -d`. Check that the following are true:"},{"lineNumber":316,"author":{"gitId":"-"},"content":"- [ ] The rendered page logo in the header is changed to `MarkBind Developer Test Site`"},{"lineNumber":317,"author":{"gitId":"-"},"content":"- [ ] The rendered site navigation title is changed to `My Test Playground` :computer:"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":"Screenshot after the changes:"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"{{baseUrl}}/images/bootcamp/logo_and_nav.png\" alt\u003d\"Logo and Nav changes\"\u003e\u003c/pic\u003e"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":"Lastly, let\u0027s modify the site configuration to change the site title and more."},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":"The `site.json` file is autogenerated and located in the root directory of the site. Refer to the User Guide - \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/siteJsonFile.html\"\u003e`site.json`\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/siteJsonFile.html\"\u003e`site.json`\u003c/a\u003e section for more details."},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":"1. Open the `site.json` file in your `mb-dev-xxx` folder."},{"lineNumber":330,"author":{"gitId":"-"},"content":"1. Change `\"titlePrefix\": \"\",` to `\"titlePrefix\": \"mb-dev-xxx\",`."},{"lineNumber":331,"author":{"gitId":"-"},"content":"1. Under `pages`, add `\"title\": \"Home\"`."},{"lineNumber":332,"author":{"gitId":"-"},"content":""},{"lineNumber":333,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":336,"author":{"gitId":"-"},"content":""},{"lineNumber":337,"author":{"gitId":"-"},"content":"Ensure that you are still serving the site with `markbind serve -d`. Check that the following are true:"},{"lineNumber":338,"author":{"gitId":"-"},"content":"- [ ] The page title in the browser tab is changed to `mb-dev-xxx - Home`"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":"Screenshot after the changes:"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"{{baseUrl}}/images/bootcamp/page_title.png\" alt\u003d\"Page title changes\"\u003e\u003c/pic\u003e"},{"lineNumber":343,"author":{"gitId":"-"},"content":""},{"lineNumber":344,"author":{"gitId":"-"},"content":"You now have modified some of the commonly adjusted site structure and configuration!"},{"lineNumber":345,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":"## Deploy your MarkBind site"},{"lineNumber":348,"author":{"gitId":"-"},"content":""},{"lineNumber":349,"author":{"gitId":"-"},"content":"MarkBind sites can be easily deployed with CLI commands or via CI. Let\u0027s try deploying our site via GitHub Actions."},{"lineNumber":350,"author":{"gitId":"-"},"content":""},{"lineNumber":351,"author":{"gitId":"-"},"content":"1. Open the `site.json` file in your `mb-dev-xxx` folder."},{"lineNumber":352,"author":{"gitId":"-"},"content":"1. Change `\"baseUrl\": \"\",` to `\"baseUrl\": \"/mb-dev-xxx\",` (Note the leading `/` and that the value is the same as your GitHub repository name)."},{"lineNumber":353,"author":{"gitId":"-"},"content":"1. Create a `.github/workflows/deploy.yml` file with the following content mentioned in the \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/deployingTheSite.html#deploying-via-github-actions\"\u003eGitHub Actions guide\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/deployingTheSite.html#deploying-via-github-actions\"\u003eGitHub Actions guide\u003c/a\u003e."},{"lineNumber":354,"author":{"gitId":"-"},"content":" 1. Note that you should change `branches: master` to `branches: main` if you are using the `main` branch."},{"lineNumber":355,"author":{"gitId":"-"},"content":""},{"lineNumber":356,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/userGuide/deployingTheSite.md#markbind-action-tip\" header\u003d\"**MarkBind Action**\" type\u003d\"info\" expanded/\u003e"},{"lineNumber":357,"author":{"gitId":"-"},"content":""},{"lineNumber":358,"author":{"gitId":"-"},"content":"4. Ensure that you have added your remote GitHub repository to your local repository with the following command (replace `xxx` with your GitHub username):"},{"lineNumber":359,"author":{"gitId":"-"},"content":" ```bash"},{"lineNumber":360,"author":{"gitId":"-"},"content":" git remote add origin https://github.com/xxx/mb-dev-xxx.git"},{"lineNumber":361,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":362,"author":{"gitId":"-"},"content":"5. Commit and push the changes to the `main` branch with the following commands:"},{"lineNumber":363,"author":{"gitId":"-"},"content":" ```bash"},{"lineNumber":364,"author":{"gitId":"-"},"content":" git add ."},{"lineNumber":365,"author":{"gitId":"-"},"content":" git commit -m \"Update content\""},{"lineNumber":366,"author":{"gitId":"-"},"content":" git push origin main"},{"lineNumber":367,"author":{"gitId":"-"},"content":"6. Update your GitHub repository setting for deploying to GitHub Pages."},{"lineNumber":368,"author":{"gitId":"-"},"content":" 1. Navigate to the Settings \u003e Pages section on GitHub for that repository and set the source to `Deploy from a branch` and the branch to `gh-pages` and `/(root)`."},{"lineNumber":369,"author":{"gitId":"-"},"content":""},{"lineNumber":370,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":"**Checkpoint**"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":"Check that the following are true:"},{"lineNumber":375,"author":{"gitId":"-"},"content":"- [ ] The triggered GitHub action runs are successful"},{"lineNumber":376,"author":{"gitId":"-"},"content":"- [ ] The site is deployed and available at `https://\u003cusername\u003e.github.io/mb-dev-xxx/` (after a few seconds to a few minutes)"},{"lineNumber":377,"author":{"gitId":"-"},"content":""},{"lineNumber":378,"author":{"gitId":"-"},"content":"Congratulations! :tada::tada::tada: You have deployed your MarkBind site!"},{"lineNumber":379,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":"## Summary"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":"In the first part of this bootcamp, we experimented with MarkBind as a user. We have set up the master branch of MarkBind and created a new MarkBind site. We have also created content with MarkBind components/syntax and deployed our site."},{"lineNumber":384,"author":{"gitId":"-"},"content":""},{"lineNumber":385,"author":{"gitId":"-"},"content":"Here are some additional tasks for you to try out:"},{"lineNumber":386,"author":{"gitId":"-"},"content":"- [ ] Create a new MarkBind site with a different \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/themes.html\"\u003etheme\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/themes.html\"\u003etheme\u003c/a\u003e"},{"lineNumber":387,"author":{"gitId":"-"},"content":"- [ ] Try out MarkBind\u0027s \u003ca tags\u003d\"environment--combined\" href\u003d\"/userGuide/reusingContents.html#includes\"\u003einclude mechanism\u003c/a\u003e\u003ca tags\u003d\"environment--dg\" href\u003d\"https://markbind.org/userGuide/reusingContents.html#includes\"\u003einclude mechanism\u003c/a\u003e"},{"lineNumber":388,"author":{"gitId":"-"},"content":"- [ ] Create a dedicated MarkBind site for your personal usage and [share it with us](https://github.com/MarkBind/markbind/discussions/new?category\u003dshow-and-tell)"},{"lineNumber":389,"author":{"gitId":"-"},"content":" - You can see some examples in the [MarkBind showcase]({{ baseUrl }}/showcase.html)"},{"lineNumber":390,"author":{"gitId":"-"},"content":""},{"lineNumber":391,"author":{"gitId":"-"},"content":"Take a break now :coffee: and we will continue with the second part of the bootcamp!"},{"lineNumber":392,"author":{"gitId":"-"},"content":""},{"lineNumber":393,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":394,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027intro\u0027, \u0027contributeToDocs\u0027) }}"}],"authorContributionMap":{"-":393,"yiwen101":1}},{"path":"docs/site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"baseUrl\": \"\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"timeZone\": \"Asia/Singapore\","},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"titlePrefix\": \"MarkBind\","},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"codeTheme\": \"light\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" },"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":9,"author":{"gitId":"-"},"content":" {"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \"glob\": [\"*.md\", \"userGuide/*.md\", \"userGuide/components/*.md\", \"devGuide/*.md\", \"devGuide/*/*.md\"]"},{"lineNumber":11,"author":{"gitId":"-"},"content":" },"},{"lineNumber":12,"author":{"gitId":"-"},"content":" {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"src\": ["},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"index.md\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"userGuide/index.md\","},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \"userGuide/syntaxReference.md\","},{"lineNumber":17,"author":{"gitId":"-"},"content":" \"userGuide/readerFacingFeatures.md\","},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"devGuide/index.md\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"searchable\": \"no\""},{"lineNumber":21,"author":{"gitId":"-"},"content":" }"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"plugins\" : ["},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"filterTags\","},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"mathDelimiters\","},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"codeBlockWrapButtons\","},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"web3Form\","},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"codeBlockCopyButtons\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"pluginsContext\" : {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"filterTags\" : {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"tags\": [\"environment--combined\"]"},{"lineNumber":33,"author":{"gitId":"-"},"content":" },"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"mathDelimiters\": {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"delimiters\": [\"beg_end\"]"},{"lineNumber":36,"author":{"gitId":"-"},"content":" },"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"web3Form\": {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"accessKey\": [\"\"]"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":" },"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \"headingIndexingLevel\": 6,"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \"ignore\": ["},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"_markbind\","},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"_site/*\","},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"lib/*\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"*.json\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"*.md\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"*.njk\","},{"lineNumber":49,"author":{"gitId":"-"},"content":" \".git/*\","},{"lineNumber":50,"author":{"gitId":"-"},"content":" \"*.pptx\","},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"CNAME\""},{"lineNumber":52,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"deploy\": {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \"message\": \"Site Update.\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"jingting1412":1,"-":55}},{"path":"docs/ug-site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"baseUrl\": \"\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"titlePrefix\": \"MarkBind\","},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"codeTheme\": \"light\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" },"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":8,"author":{"gitId":"-"},"content":" {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \"glob\": [\"*.md\", \"userGuide/*.md\", \"userGuide/components/*.md\"]"},{"lineNumber":10,"author":{"gitId":"-"},"content":" },"},{"lineNumber":11,"author":{"gitId":"-"},"content":" {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"src\": ["},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"index.md\","},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"userGuide/index.md\","},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \"userGuide/syntaxReference.md\","},{"lineNumber":16,"author":{"gitId":"-"},"content":" \"userGuide/readerFacingFeatures.md\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"searchable\": \"no\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" }"},{"lineNumber":20,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"plugins\" : ["},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"filterTags\","},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"mathDelimiters\","},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"codeBlockCopyButtons\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"pluginsContext\" : {"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"filterTags\" : {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"tags\": [\"environment--ug\"]"},{"lineNumber":29,"author":{"gitId":"-"},"content":" },"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"mathDelimiters\": {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"delimiters\": [\"beg_end\"]"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":" },"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"headingIndexingLevel\": 6,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"ignore\": ["},{"lineNumber":36,"author":{"gitId":"-"},"content":" \"_markbind\","},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"_site/*\","},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"lib/*\","},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"*.json\","},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"*.md\","},{"lineNumber":41,"author":{"gitId":"-"},"content":" \"*.njk\","},{"lineNumber":42,"author":{"gitId":"-"},"content":" \".git/*\","},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"*.pptx\""},{"lineNumber":44,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"deploy\": {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"message\": \"Site Update.\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"repo\": \"https://github.com/MarkBind/markbind.github.io.git\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"branch\": \"master\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" }"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"jingting1412":1,"-":49}},{"path":"docs/userGuide/cliCommands.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" title: \"User Guide: Command Line Interface (CLI)\""},{"lineNumber":3,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: default"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"# CLI Commands"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"### Overview"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"If you do not have MarkBind installed globally, you can still use MarkBind commands by prefixing the commands with `npx`. For example, `markbind init` becomes `npx markbind-cli init`."},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"If you have MarkBind installed locally, you may also refer to the scripts section of your `package.json` file for the commands you can use. For example, `npm run init` for `markbind init`."},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"An overview of MarkBind\u0027s Command Line Interface (CLI) can be referenced with `markbind --help`:"},{"lineNumber":21,"author":{"gitId":"-"},"content":"```"},{"lineNumber":22,"author":{"gitId":"-"},"content":"$ markbind --help"},{"lineNumber":23,"author":{"gitId":"-"},"content":"Usage: markbind \u003ccommand\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" "},{"lineNumber":25,"author":{"gitId":"-"},"content":" Options:"},{"lineNumber":26,"author":{"gitId":"-"},"content":" -V, --version output the version number"},{"lineNumber":27,"author":{"gitId":"-"},"content":" -h, --help output usage information"},{"lineNumber":28,"author":{"gitId":"-"},"content":" "},{"lineNumber":29,"author":{"gitId":"-"},"content":" Commands:"},{"lineNumber":30,"author":{"gitId":"-"},"content":" init|i [options] [root] init a markbind website project"},{"lineNumber":31,"author":{"gitId":"-"},"content":" serve|s [options] [root] build then serve a website from a directory"},{"lineNumber":32,"author":{"gitId":"-"},"content":" build|b [options] [root] [output] build a website"},{"lineNumber":33,"author":{"gitId":"-"},"content":" deploy|d [options] [root] deploy the latest build of the site to the repo\u0027s Github pages"},{"lineNumber":34,"author":{"gitId":"-"},"content":"```"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"markbind-init\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"### `init` Command"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"**Format:** `markbind init [options] [root]`"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"**Alias:** `markbind i`"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"**Description:** Initializes a directory into a MarkBind site by creating a skeleton structure for the website which includes a `index.md` and a `site.json`."},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"**Arguments:**"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* `[root]`\u003cbr\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" Root directory. Default is the current directory.\u003cbr\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite`"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Options** :fas-cogs:\" type\u003d\"minimal\" expanded\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"**Options** :fas-cogs:"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"* `-c`, `--convert`\u003cbr\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Convert an existing GitHub wiki or `docs` folder into a MarkBind website. See [Converting an existing GitHub project]({{ baseUrl }}/userGuide/markBindInTheProjectWorkflow.html#converting-existing-project-documentation-wiki) for more information."},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"* `-t`, `--template` \u003cbr\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" When initialising MarkBind, change the template that you start with. See [templates](templates.html)."},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"{{ icon_examples }}"},{"lineNumber":63,"author":{"gitId":"-"},"content":"* `markbind init` : Initializes the site in the current working directory."},{"lineNumber":64,"author":{"gitId":"-"},"content":"* `markbind init ./myWebsite` : Initializes the site in `./myWebsite` directory."},{"lineNumber":65,"author":{"gitId":"-"},"content":"* `markbind init --convert --template minimal`: Converts the GitHub wiki or `docs` folder in the current working directory into a minimal MarkBind website."},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"### `serve` Command"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":"**Format:** `markbind serve [options] [root]`"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"**Alias:** `markbind s`"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"**Description:** Does the following steps:"},{"lineNumber":79,"author":{"gitId":"-"},"content":"1. Builds the site and puts the generated files in a directory named `_site`."},{"lineNumber":80,"author":{"gitId":"LamJiuFong"},"content":"1. Starts a web server instance locally and makes the site available at `http://127.0.0.1:8080` by default."},{"lineNumber":81,"author":{"gitId":"-"},"content":"1. Opens a \u003ctrigger trigger\u003d\"click\" for\u003d\"modal:cliCommands-livePreview\"\u003elive preview\u003c/trigger\u003e of the website."},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"\u003cmodal large header\u003d\"Live Preview\" id\u003d\"modal:cliCommands-livePreview\"\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"glossary.md#live-preview\"/\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003c/modal\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"**Arguments:**"},{"lineNumber":88,"author":{"gitId":"-"},"content":"* `[root]`\u003cbr\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Root directory. The default is the directory where this command was executed.\u003cbr\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite`"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Options** :fas-cogs:\" type\u003d\"minimal\" expanded\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"**Options** :fas-cogs:"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":"* `-o \u003cfile\u003e`, `--one-page \u003cfile\u003e`\u003cbr\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":" Serves only a single page from your website **initially**. If `\u003cfile\u003e` is not specified, it defaults to `index.md`.\u003cbr\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Thereafter, when changes to source files have been made, the opened pages will be rebuilt if it was affected.\u003cbr\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * Navigating to a new page will build the new page, if it has not been built before, or there were some changes to source files that affected it before navigating to it.\u003cbr\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * {{ icon_example }} `--one-page guide/index.md`"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" light header\u003d\"Caveats\" style\u003d\"width: calc(100% - 50px); position: relative; left: 40px;\"\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"Essentially, this optional feature is very useful when writing content, more so if your build times are starting to slow down!"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"The caveat is that not building all pages during the initial process, or not rebuilding all affected pages when a file changes, will cause your search results for these pages to be empty or outdated, until you navigate to them to trigger a rebuild."},{"lineNumber":107,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":"* `-b`, `--background-build` **[BETA]**\u003cbr\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":" If `--one-page` is specified, this mode enhances the single-page serve by building the pages that are not yet built"},{"lineNumber":111,"author":{"gitId":"-"},"content":" or marked to be rebuilt in the background."},{"lineNumber":112,"author":{"gitId":"-"},"content":" "},{"lineNumber":113,"author":{"gitId":"-"},"content":" You can still edit the pages during the background build. When MarkBind detects changes to the source"},{"lineNumber":114,"author":{"gitId":"-"},"content":" files, the background build will stop, rebuild the files affected, then resumes the background build with the"},{"lineNumber":115,"author":{"gitId":"-"},"content":" remaining pages."},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":"* `-s \u003cfile\u003e`, `--site-config \u003cfile\u003e`\u003cbr\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" Specify the site config file (default: `site.json`)\u003cbr\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":" {{ icon_example }} `-s otherSite.json`"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":"* `-n`, `--no-open`\u003cbr\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":" Don\u0027t open a live preview in the browser automatically."},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":"* `-f`, `--force-reload`\u003cbr\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":" Force live reload to process all files in the site, instead of just the relevant files. This option is useful when you are modifying a file that is not a file type monitored by the \u003ctrigger trigger\u003d\"click\" for\u003d\"modal:cliCommands-livePreview\"\u003elive preview\u003c/trigger\u003e feature."},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"LamJiuFong"},"content":"* `-a \u003caddress\u003e`, `--address \u003caddress\u003e`\u003cbr\u003e"},{"lineNumber":128,"author":{"gitId":"LamJiuFong"},"content":" Specify the server address/host (Default is 127.0.0.1)."},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"LamJiuFong"},"content":"* `-p \u003cport\u003e`, `--port \u003cport\u003e`\u003cbr\u003e"},{"lineNumber":131,"author":{"gitId":"LamJiuFong"},"content":" Serve the website in the specified port (Default is 8080)."},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":"{{ icon_examples }}"},{"lineNumber":134,"author":{"gitId":"-"},"content":"* `markbind serve` : Serves the site from the current working directory."},{"lineNumber":135,"author":{"gitId":"-"},"content":"* `markbind serve ./myWebsite` : Serves the site from the `./myWebsite` directory."},{"lineNumber":136,"author":{"gitId":"-"},"content":"* `markbind serve -p 8888 -s otherSite.json` : Serves the site in Port 8888 from the current working directory, using `otherSite.json` as the site configuration file."},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"### `build` Command"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"**Format:** `markbind build [options] [root] [output]`"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"**Alias:** `markbind b`"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":"**Description:** Generates the site to the directory named `_site` in the current directory."},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"**Arguments:**"},{"lineNumber":152,"author":{"gitId":"-"},"content":"* `[root]`\u003cbr\u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":" Root directory. Default is the current directory.\u003cbr\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite`"},{"lineNumber":155,"author":{"gitId":"-"},"content":""},{"lineNumber":156,"author":{"gitId":"-"},"content":"* `[root] [output]`\u003cbr\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":" Read source files from the `[root]` directory and put the generated files in the specified `[output]` directory. Default output directory is `_site`.\u003cbr\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite ./myWebsite/myOutDir`"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Options** :fas-cogs:\" type\u003d\"minimal\" expanded\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"**Options** :fas-cogs:"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"* `--baseUrl \u003cbase\u003e`\u003cbr\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":" Override the `baseUrl` property (read from the `site.json`) with the given `\u003cbase\u003e` value.\u003cbr\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":" {{ icon_example }} `--baseUrl staging`"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `-s \u003cfile\u003e`, `--site-config \u003cfile\u003e`\u003cbr\u003e"},{"lineNumber":169,"author":{"gitId":"-"},"content":" Specify the site config file (default: `site.json`)\u003cbr\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":" {{ icon_example }} `-s otherSite.json`"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":"**{{ icon_examples }}**"},{"lineNumber":173,"author":{"gitId":"-"},"content":"* `markbind build` : Generates the site from the current working directory."},{"lineNumber":174,"author":{"gitId":"-"},"content":"* `markbind build ./myWebsite` : Generates the site from the `./myWebsite` directory."},{"lineNumber":175,"author":{"gitId":"-"},"content":"* `markbind build ./myWebsite ./myOutDir` : Generates the site from the `./myWebsite` directory to the `./myOutDir` directory."},{"lineNumber":176,"author":{"gitId":"-"},"content":"* `markbind build ./stagingDir --baseUrl staging` : Generates the site from the `./stagingDir` directory, with the `baseUrl` property in `site.json` set to `staging`."},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":"### `deploy` Command"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":"**Format:** `markbind deploy [options] [root]`"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":"**Alias:** `markbind d`"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Description:** Deploys the site to the repo\u0027s GitHub pages by generating the site (default dir: `_site`) and pushing the generated site to the `gh-pages` branch of the current git working directory\u0027s remote repo."},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"**Arguments:**"},{"lineNumber":192,"author":{"gitId":"-"},"content":"* `[root]`\u003cbr\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":" Root directory. Default is the current directory.\u003cbr\u003e"},{"lineNumber":194,"author":{"gitId":"-"},"content":" {{ icon_example }} `./myWebsite`"},{"lineNumber":195,"author":{"gitId":"-"},"content":""},{"lineNumber":196,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Options** :fas-cogs:\" type\u003d\"minimal\" expanded\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":"**Options** :fas-cogs:"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"* `-c \u003cgithubTokenName\u003e`, `--ci \u003cgithubTokenName\u003e`\u003cbr\u003e"},{"lineNumber":201,"author":{"gitId":"-"},"content":" Deploy the site in CI Environments using the GitHub personal access token stored in `\u003cgithubTokenName\u003e` (default: `GITHUB_TOKEN`).\u003cbr\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":" {{ icon_example }} `-c PA_TOKEN`"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":"* `-n`, `--no-build`\u003cbr\u003e"},{"lineNumber":205,"author":{"gitId":"-"},"content":" Skips the generation of the site before deploying it. By default, the `deploy` command generates the site before deploying the built site. This command should be used if the site needs to be generated with non-default arguments for the `build` command (e.g. baseUrl is specified using the `--baseUrl` flag for the `markbind build` command)."},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":"* `-s \u003cfile\u003e`, `--site-config \u003cfile\u003e`\u003cbr\u003e"},{"lineNumber":208,"author":{"gitId":"-"},"content":" Specify the site config file (default: `site.json`).\u003cbr\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":" {{ icon_example }} `-s otherSite.json`"},{"lineNumber":210,"author":{"gitId":"-"},"content":""},{"lineNumber":211,"author":{"gitId":"-"},"content":"%%{{ icon_info }} Related: [User Guide: Deploying the Website](deployingTheSite.html).%%"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":"**{{ icon_examples }}**"},{"lineNumber":214,"author":{"gitId":"-"},"content":"* `markbind deploy` : Deploys after generating the site from the current working directory."},{"lineNumber":215,"author":{"gitId":"-"},"content":"* `markbind deploy ./myWebsite` : Deploys after generating the site from the `./myWebsite` directory."},{"lineNumber":216,"author":{"gitId":"-"},"content":"* `markbind deploy --no-build` : Deploys the site from the current working directory without generating it."},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":"### `--help` Option"},{"lineNumber":223,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"**Format:** `markbind [command] --help`"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"**Alias:** `markbind [command] -h`"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"**Description:** Prints a summary of MarkBind commands or a detailed usage guide for the given `command`."},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"{{ icon_examples }}"},{"lineNumber":232,"author":{"gitId":"-"},"content":"* `markbind --help` : Prints a summary of MarkBind commands."},{"lineNumber":233,"author":{"gitId":"-"},"content":"* `markbind serve --help` : Prints a detailed usage guide for the `serve` command."}],"authorContributionMap":{"LamJiuFong":5,"-":228}},{"path":"docs/userGuide/components/imagesAndDiagrams.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Image \u0026 Diagram Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"imagesAndDiagrams\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Images \u0026 Diagrams"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The image components here provide **convenient syntax \u0026 styling abstractions** on top of raw HTML and Markdown images."},{"lineNumber":22,"author":{"gitId":"-"},"content":"Diagrams, in the form of **inline PlantUML components** are also supported."},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":"{% if \u0027images-diagrams\u0027 in v[2] %}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":41,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027presentation\u0027, \u0027popups\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":39}},{"path":"docs/userGuide/components/navigation.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Navigation Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"navigation\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Navigation"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The components in this page are used for scaffolding **site and page navigation**."},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"{% if \u0027navigation\u0027 in v[2] %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":40,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027popups\u0027, \u0027others\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":38}},{"path":"docs/userGuide/components/others.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Other Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"others\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Others"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"This page lists some other components that may be useful in creating education websites. For now, there are only question and quiz components."},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"{% if \u0027others\u0027 in v[2] %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":40,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027navigation\u0027, \u0027advanced\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":38}},{"path":"docs/userGuide/components/popups.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Pop-Up Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"popups\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Pop-Ups"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The components in this page can be used to easily create **various forms of pop-ups** that are activated on some user action (e.g., hovering over some text). This may be useful for showing additional information related to some specific area or span of content."},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"{% if \u0027popups\u0027 in v[2] %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":40,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027imagesAndDiagrams\u0027, \u0027navigation\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":38}},{"path":"docs/userGuide/components/presentation.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Presentational Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"presentation\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"advanced.md#slots-info\" /\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"# Presentation"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The components in this page are the core **presentational** components you may want to use. Panels and tabs can be used to **organise content sections**, while badges and boxes can **highlight small, specific pieces of information**."},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"yiwen101"},"content":"\u003cbox type \u003d \"warning\" header \u003d \"#### Use of markdown in content\" \u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"yiwen101"},"content":"As presentational components are HTML-based, you need to follow the HTML syntax when using markdown in the content of the components."},{"lineNumber":26,"author":{"gitId":"yiwen101"},"content":"More specifically, you should use either:"},{"lineNumber":27,"author":{"gitId":"yiwen101"},"content":"- add a line break with no indentation before the markdown content"},{"lineNumber":28,"author":{"gitId":"yiwen101"},"content":"- use the `\u003cmarkdown\u003e` (block level elements) or `\u003cmd\u003e` (inline level elements) tags to wrap the markdown content."},{"lineNumber":29,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":30,"author":{"gitId":"yiwen101"},"content":"For more information, please refer to this [section]({{baseUrl}}/userGuide/usingHtmlJavaScriptCss.html#markdown-in-html)."},{"lineNumber":31,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":"{% if \u0027presentation\u0027 in v[2] %}"},{"lineNumber":42,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":43,"author":{"gitId":"-"},"content":"{% endif %}"},{"lineNumber":44,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"# Relevant Tips \u0026 Tricks"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Indent components\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../tipsAndTricks.md#indentComponents\" /\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":57,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027../usingComponents\u0027, \u0027imagesAndDiagrams\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":47,"yiwen101":8}},{"path":"docs/userGuide/formattingContents.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Formatting Contents\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"formattingContents\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 2"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\" id\u003d\"overview\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"**MarkBind supports a wide collection of Markdown-like basic content formatting syntax** such as text styling, tables, lists, images, links, etc."},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"./syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" {% if \u0027basic\u0027 in v[2] %}"},{"lineNumber":32,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":33,"author":{"gitId":"-"},"content":" {% endif %}"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"# Relevant Tips \u0026 Tricks"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Escaping Characters\"\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tipsAndTricks.md#escapingCharacters\" /\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":45,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027markBindSyntaxOverview\u0027, \u0027usingComponents\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":43}},{"path":"docs/userGuide/markBindInTheProjectWorkflow.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"MarkBind in the Project Workflow\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"markBindInTheProjectWorkflow\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\" id\u003d\"overview\"\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"As **MarkBind is especially optimized as a project documentation tool**, it integrates well with the workflow of software projects."},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"#### Authoring Workflow"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"While most IDEs provide previews for Markdown files, unless your MarkBind files are using basic Markdown syntax only, you are recommended to launch a {{ link_live_preview }} and check the rendering of the page as you modify the source file."},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"#### GitHub Project Workflow"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"If you use GitHub for your project, you can [deploy your site to GitHub pages](deployingTheSite.html#deploying-to-github-pages) easily. You can even set up Travis to automatically deploy your site to GitHub pages whenever a branch in your repo is updated."},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"If you are using GitHub Pull Requests as part of your workflow, you can [set up Netlify to show a preview of the site generated from the MarkBind code in the PR](deployingTheSite.html#deploying-to-netlify)."},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"#### Using MarkBind for Project Documentation"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"Here is an example workflow for using MarkBind for both developer documentation and user documentation in a GitHub project:"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"Suppose the main development of the project is done in the `master` branch while product releases are done using the `release` branch."},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"You can keep the user docs in a separate directory (say `user-docs`) and set up a MarkBind project in that folder. When there is a new release, you can deploy the user-docs site to GitHub Pages for users to read."},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"Similarly, you can keep the dev docs in a separate directory (say `dev-docs`) and set up Netlify to deploy the site when there is an update to the `master` branch; that way, developers can see the latest version of dev-docs via the Netlify site."},{"lineNumber":42,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"#### Converting existing project documentation/wiki"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"MarkBind supports the automatic conversion of an existing GitHub wiki or `docs` folder containing Markdown files."},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"A MarkBind conversion involves the following:"},{"lineNumber":49,"author":{"gitId":"-"},"content":"- Adding a Home page: If your project already has a `README.md` or `Home.md`, the content will be copied over to `index.md`. Otherwise, a default home page will be added."},{"lineNumber":50,"author":{"gitId":"-"},"content":"- Adding an About Us page: If your project already has `about.md`, this will be used as the About page. Otherwise, a default About page will be added."},{"lineNumber":51,"author":{"gitId":"-"},"content":"- Adding a top navigation bar."},{"lineNumber":52,"author":{"gitId":"yiwen101"},"content":"- Adding a site navigation menu: If your project has a valid `_Sidebar.md` file, it will be used as the [site navigation menu]({{baseUrl}}/userGuide/tweakingThePageStructure.html#constructing-a-page-navigation-menu). Otherwise, the menu will be built from your project\u0027s directory structure and contain links to all addressable pages. "},{"lineNumber":53,"author":{"gitId":"-"},"content":"- Adding a custom footer: If your project has a valid `_Footer.md` file, it will be used as the website footer. Otherwise, a default footer will be added."},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" Conversion might not work if your project files have existing Nunjucks syntax. "},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"To convert your existing project, follow these steps:"},{"lineNumber":60,"author":{"gitId":"-"},"content":"1. Navigate into the project directory."},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Run `markbind init --convert` to convert the project."},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. You can now preview the website using `markbind serve` to view your newly converted MarkBind website."},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" You only need to run the conversion once. Once you have converted your project, you can proceed to edit it as a normal MarkBind project."},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003c/box\u003e "},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":69,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027deployingTheSite\u0027, \u0027redirectingToACustom404Page\u0027) }}"}],"authorContributionMap":{"-":68,"yiwen101":1}},{"path":"docs/userGuide/readerFacingFeatures.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" title: \"User Guide: Reader-Facing Features\""},{"lineNumber":3,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" pageNav: 5"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"components/advanced.md#slots-info\" /\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"# Reader-Facing Features"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"\u003cbox type\u003d\"info\"\u003eExpand the \u003cmd\u003e**details...**\u003c/md\u003e panel for more info!\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"{% macro show_topic(filename, heading) %}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"##### {{ heading }}"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"syntax/{{ filename }}.md#examples\" /\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"%%details...%%\" \u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" {% if \u0027reader-facing\u0027 in v[2] %}"},{"lineNumber":31,"author":{"gitId":"-"},"content":"{{ show_topic( k, v[0]) }}"},{"lineNumber":32,"author":{"gitId":"-"},"content":" {% endif %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{% endfor %}"}],"authorContributionMap":{"jingting1412":4,"-":29}},{"path":"docs/userGuide/reusingContents.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Reusing Contents\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"reusingContents\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 4"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\" id\u003d\"overview\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"**MarkBind is highly-optimized for content reuse**. It offers several mechanisms to provide readers with many variations of the content while minimizing duplication at source file level. As a result, instead of creating a one-size-fits-all site, MarkBind can create a site in which readers can chart their own path of reading."},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"syntax/variables.md\" /\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"syntax/includes.md\" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"## Reusing Contents Across Sites"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"**MarkBind supports reusing across sites.** It allows you to include the pages you want from a _sub-site_ in another _main-site_ without having to change anything in the source files of the _sub-site_ as long as the _sub-site_ source files are inside the directory of the _main-site_."},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose you have a site `textbook` and you want to include some pages from it in another site `course`. Given below is how you can locate the sub-site `textbook` inside the root directory of the main-site `course` so that files from `textbook` can be reused in the `course` site."},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"C:/course/"},{"lineNumber":40,"author":{"gitId":"-"},"content":" textbook/"},{"lineNumber":41,"author":{"gitId":"-"},"content":" index.md"},{"lineNumber":42,"author":{"gitId":"-"},"content":" overview.md"},{"lineNumber":43,"author":{"gitId":"-"},"content":" site.json"},{"lineNumber":44,"author":{"gitId":"-"},"content":" index.md"},{"lineNumber":45,"author":{"gitId":"-"},"content":" reading.md"},{"lineNumber":46,"author":{"gitId":"-"},"content":" site.json"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":"In `reading.md` (note how it reuses content from the sub-site `textbook`):"},{"lineNumber":50,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":51,"author":{"gitId":"-"},"content":"# Week 1 Reading:"},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"textbook/overview.md\" /\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":"```"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tip.md\" boilerplate \u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"tip_body\"\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":"If you are using Git for version control, you can set up the sub-site repository as a [Git sub-module](https://git-scm.com/book/en/v2/Git-Tools-Submodules) of the main site repository."},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"## Creating Content Variations"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"**MarkBind can create sites that give more control to the reader.** Given below are some mechanisms authors can use to create variations of content that gives more control to the reader in charting their own path through the content."},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"#### Allowing users to remove some contents"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"When the readers can remove an item from a page, they can create their own version of the page by removing items they don\u0027t want to see. This is especially useful when printing a page."},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"To make an element closeable, use `v-closeable`."},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003cdiv v-closeable\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":"Optional video:"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":"@[youtube](v40b3ExbM0c)"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"```"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"This is how the content will appear. Note how you can hover over the content to access the :x: button that can collapse the content."},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003cdiv v-closeable\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":"Optional video:"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":"@[youtube](v40b3ExbM0c)"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"#### Giving alternative contents"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":"You can use a [_Tabs_ component](components/presentation.html#tabs) to give alternative versions of content, for example, giving a code snippet in different programming languages."},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"#### Giving access to additional contents"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"You can use following components to give readers an option to access additional content at their discretion."},{"lineNumber":105,"author":{"gitId":"yiwen101"},"content":"* [Tooltips](components/popups.html#tooltips), [Popovers](components/popups.html#popovers), [Modals](components/popups.html#modals)"},{"lineNumber":106,"author":{"gitId":"-"},"content":"* [Expandable Panels](components/presentation.html#panels)"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"#### Organizing contents in alternative ways"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"You can take advantage of [MarkBind\u0027s feature for content reuse](reusingContents.html) to organize content in alternative ways to cater for different readers, without having to duplicate content. For example, you can have different pages that organizes the same information alphabetically, chronologically, by difficulty, group information by topic, etc."},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"#### Optimizing the Print View"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":"To \u003cspan class\u003d\"keyword\"\u003ehide minimized panels in the _print view_\u003c/span\u003e, add the following code to a CSS file used in your site."},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"```css"},{"lineNumber":117,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" .card-container \u003e .morph {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":"```"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"Tim-Siu"},"content":"MarkBind also comes with some built-in optimizations for printing by default:"},{"lineNumber":125,"author":{"gitId":"Tim-Siu"},"content":"- \u003cinclude src\u003d\"syntax/code.md#code-print-optimization\" /\u003e"},{"lineNumber":126,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":"#### Hiding some info in the generated content"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":"To permanently hide a fragment from the reader:"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"d-none\"\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":" content to hide ..."},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"...\" add-class\u003d\"d-none\"\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":" content to hide ..."},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003cpanel\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"```"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"To hide a fragment in one specific page, \u0027mark\u0027 the elements using a `class`:"},{"lineNumber":142,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"extra\"\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":" content to hide ..."},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":"```"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":"Then, in a page-specific CSS file,"},{"lineNumber":149,"author":{"gitId":"-"},"content":"```css"},{"lineNumber":150,"author":{"gitId":"-"},"content":".extra {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" display: none; /* \u0027block\u0027 or \u0027inline-block\u0027 if you want it to show */"},{"lineNumber":152,"author":{"gitId":"-"},"content":"}"},{"lineNumber":153,"author":{"gitId":"-"},"content":"```"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"#### Deploying a page multiple times with different titles"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"yiwen101"},"content":"By [overriding the `title` declared in the frontmatter of the page using `site.json`](tweakingThePageStructure.html#frontmatter), it is possible to allow MarkBind to serve the same page with different titles. "},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"This may especially be useful for users who are serving a page from a submodule."},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"#### Creating slight variations of content"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"yiwen101"},"content":"Tags are a good way to create multiple variations of a page within the same source file, such as to filter content for creating multiple different versions of the same page. See [_User Guide: Tweaking the Page Structure → Tags_](tweakingThePageStructure.html#plugin-tags) section for more information."},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":166,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027tweakingThePageStructure\u0027, \u0027workingWithSites\u0027) }}"}],"authorContributionMap":{"-":160,"yiwen101":3,"Tim-Siu":3}},{"path":"docs/userGuide/siteJsonFile.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" title: \"site.json File\""},{"lineNumber":3,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":4,"author":{"gitId":"-"},"content":" keywords: site.json"},{"lineNumber":5,"author":{"gitId":"-"},"content":" pageNav: 4"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"# `site.json` File"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"The `site.json` file {{ tooltip_root_directory }} is used to configure various aspects of a MarkBind website."},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"Here is a typical `site.json` file:"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"```json"},{"lineNumber":18,"author":{"gitId":"-"},"content":"{"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"baseUrl\": \"/myproduct\","},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"faviconPath\": \"myfavicon.png\","},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"titlePrefix\": \"FooBar Dev Docs\","},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"titleSuffix\": \"FooBar\","},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"bootstrapTheme\": \"bootswatch-cerulean\","},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"codeTheme\": \"light\","},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"codeLineNumbers\": true"},{"lineNumber":27,"author":{"gitId":"-"},"content":" },"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":29,"author":{"gitId":"-"},"content":" {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"layout\": \"normal\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"searchable\": \"no\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"externalScripts\": ["},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"https://cdn.plot.ly/plotly-latest.min.js\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"frontmatter\": {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"header\": \"header.md\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":" },"},{"lineNumber":41,"author":{"gitId":"-"},"content":" {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \"glob\": \"topics/**/*.md\","},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"globExclude\": [\"topics/*/appendix/*.md\"],"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"layout\": \"subtopic\""},{"lineNumber":45,"author":{"gitId":"-"},"content":" }"},{"lineNumber":46,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"pagesExclude\": [\"subsite/**/*.md\", \"node_modules/*\"],"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"externalScripts\": ["},{"lineNumber":49,"author":{"gitId":"-"},"content":" \"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config\u003dTeX-MML-AM_CHTML\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"deploy\": {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \"message\": \"Site Update.\","},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"repo\": \"https://github.com/myorg/myrepo.git\","},{"lineNumber":54,"author":{"gitId":"-"},"content":" \"branch\": \"gh-pages\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \"globalOverride\": {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \"footer\": \"my-footer.md\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" },"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \"ignore\": ["},{"lineNumber":60,"author":{"gitId":"-"},"content":" \"_site/*\","},{"lineNumber":61,"author":{"gitId":"-"},"content":" \"*.json\","},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"*.md\","},{"lineNumber":63,"author":{"gitId":"-"},"content":" \".git/*\","},{"lineNumber":64,"author":{"gitId":"-"},"content":" \".gitignore\","},{"lineNumber":65,"author":{"gitId":"-"},"content":" \"node_modules/*\""},{"lineNumber":66,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \"plugins\" : ["},{"lineNumber":68,"author":{"gitId":"-"},"content":" \"filterTags\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":70,"author":{"gitId":"-"},"content":" \"pluginsContext\" : {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"filterTags\" : {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \"tags\": [\"tag1\", \"tag2\"]"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \"headingIndexingLevel\": 4,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \"intrasiteLinkValidation\": {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \"enabled\": false"},{"lineNumber":78,"author":{"gitId":"-"},"content":" },"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \"plantumlCheck\": true"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":"```"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"#### **`baseUrl`**"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":"**The base URL relative to your domain.** Default: `\"\"`(empty)."},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"deployingTheSite.md#warning-about-baseUrl\" /\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"Note: `baseUrl` does not support [live preview](glossary.md#live-preview) as there is no use case for changing it in during `markbind serve`."},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"#### **`faviconPath`**"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":"**The location of the favicon.** Default: `favicon.ico`."},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":"%%{{ icon_info }} If the favicon was recently changed, you may need to force-refresh the Browser to see the new image.%%"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"#### **`titlePrefix`**"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"**The prefix for all page titles.** The separator `-` will be inserted by MarkBind."},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"#### **`titleSuffix`**"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"**The suffix for all page titles.** The separator `-` will be inserted by MarkBind."},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"#### **`style`**"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":"_(Optional)_ **The styling options to be applied to the site.** This includes:"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"* **`bootstrapTheme`**"},{"lineNumber":117,"author":{"gitId":"-"},"content":" _(Optional)_ The theme for the generated site.\u003cbr\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" Uses the default Bootstrap theme if not specified. See [User Guide: Themes](themes.html) for more details."},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":"* **`codeTheme`** [Optional. Default: `\"dark\"`]\u003cbr\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":" The theme used for fenced code blocks. Accepts either `\"light\"` or `\"dark\"`."},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"* **`codeLineNumbers`** [Optional. Default: `false`]\u003cbr\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":" The global setting to display or hide line numbers for code blocks. Accepts either `true` or `false`."},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"#### **`pages`**"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"**An array of pages to be rendered.**"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"* **`src/glob`**"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * `src` can be used to specify a single file, or an array of files.\u003cbr\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":" {{ icon_examples }} `docs/index.md` or `[ \u0027docs/index.md\u0027, \u0027docs/userGuide.md\u0027 ]` { .my-1 }"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * `glob` can be used alternatively to define a file pattern in the [_glob syntax_](https://en.wikipedia.org/wiki/Glob_(programming)), or an array of such file patterns.\u003cbr\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":" {{ icon_examples }} `**/*.md` or `[ \u0027**/*.md\u0027, \u0027**/index.md\u0027 ]` { .my-2 }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"* **`globExclude`**: An array of file patterns to be excluded from rendering when using `glob`, also defined in the glob syntax."},{"lineNumber":136,"author":{"gitId":"yiwen101"},"content":"* **`title`**: The page `\u003ctitle\u003e` for the generated web page. Titles specified here take priority over titles specified in the [frontmatter](tweakingThePageStructure.html#frontmatter) of individual pages."},{"lineNumber":137,"author":{"gitId":"yiwen101"},"content":"* **`layout`**: The [layout](tweakingThePageStructure.html#layouts) to be used by the page. Default: `default`."},{"lineNumber":138,"author":{"gitId":"-"},"content":"* **`searchable`**: Specifies that the page(s) should be excluded from searching. Default: `yes`."},{"lineNumber":139,"author":{"gitId":"-"},"content":"* **`externalScripts`**: An array of external scripts to be referenced on the page. Scripts referenced will be run before the layout script."},{"lineNumber":140,"author":{"gitId":"-"},"content":"* **`frontmatter`**: Specifies properties to add to the frontmatter of a page or glob of pages. Overrides any existing properties if they have the same name, and overrides any frontmatter properties specified in `globalOverride`."},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"page-property-overriding\"\u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"[Page properties that are defined in `site.json`](#pages) for a particular page will override those defined in the frontmatter of the page. For example, if we declare a `title` within the frontmatter of the page (say `index.md`) like such:"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" title: Hello World"},{"lineNumber":150,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":"```"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"But the `title` property in the corresponding `site.json` is set as such:"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"```js"},{"lineNumber":156,"author":{"gitId":"-"},"content":"{"},{"lineNumber":157,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":158,"author":{"gitId":"-"},"content":" {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":160,"author":{"gitId":"-"},"content":" \"title\": \"Landing Page\","},{"lineNumber":161,"author":{"gitId":"-"},"content":" }"},{"lineNumber":162,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":163,"author":{"gitId":"-"},"content":"}"},{"lineNumber":164,"author":{"gitId":"-"},"content":"```"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":"Then, the title of `index.md` will be set as \"Landing Page\" instead of \"Hello World\"."},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"In this manner, setting the property `title` in `site.json` will always override the `title` declared within the frontmatter of the page."},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"page-glob-overriding\"\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":"Note: If multiple **`src`** (pages) or **`glob`** (globs) attributes match a file, MarkBind will merge properties from all entries. If there are conflicting properties, pages are given priority over globs. If there are multiple matching glob entries, the last entry is given priority."},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":"{{ icon_example }} Multiple entries matching `index.md`:"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":"```js"},{"lineNumber":183,"author":{"gitId":"-"},"content":"{"},{"lineNumber":184,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":185,"author":{"gitId":"-"},"content":" {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":187,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":188,"author":{"gitId":"-"},"content":" \"searchable\": \"no\""},{"lineNumber":189,"author":{"gitId":"-"},"content":" },"},{"lineNumber":190,"author":{"gitId":"-"},"content":" {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" \"glob\": \"*.md\","},{"lineNumber":192,"author":{"gitId":"-"},"content":" \"layout\": \"normal\","},{"lineNumber":193,"author":{"gitId":"-"},"content":" \"searchable\": \"yes\""},{"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":""},{"lineNumber":199,"author":{"gitId":"-"},"content":"The following properties will apply to `index.md`:"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"```js"},{"lineNumber":202,"author":{"gitId":"-"},"content":"{"},{"lineNumber":203,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":204,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\", // Inherited from page"},{"lineNumber":205,"author":{"gitId":"-"},"content":" \"layout\": \"normal\", // Inherited from glob"},{"lineNumber":206,"author":{"gitId":"-"},"content":" \"searchable\": \"no\", // Page takes priority over glob"},{"lineNumber":207,"author":{"gitId":"-"},"content":"}"},{"lineNumber":208,"author":{"gitId":"-"},"content":"```"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":"#### **`pagesExclude`**"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":"**An array of file patterns to be excluded from rendering.** The exclusion pattern follows the glob syntax."},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"This property is the global variant to the `globExclude` property and is functionally identical to it. If the two are used at once, the file patterns from both properties will be combined when excluding pages."},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"#### **`externalScripts`**"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":"**An array of external scripts to be referenced on all pages.** To reference an external script only on specific pages, `externalScripts` should be specified in `pages` instead. Scripts referenced will be run before the layout script."},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"#### **`globalOverride`**"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":"**Globally overrides properties in the frontmatter of all pages.** Any property included in the global override will automatically be merged with the frontmatter of every single page, and override them if the property exists."},{"lineNumber":227,"author":{"gitId":"-"},"content":""},{"lineNumber":228,"author":{"gitId":"-"},"content":"#### **`ignore`**"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":"**An array of file patterns to be ignored when copying files to the generated site.** By default, MarkBind will copy all the files as assets of the generated site."},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":"The ignore pattern follows the [glob pattern used in .gitignore](https://git-scm.com/docs/gitignore#_pattern_format). For example, `*.md` ignores all markdown source files."},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"site-json-deploy\"\u003e"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":"#### **`deploy`**"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":"**The settings for [auto-deployment to GitHub pages](deployingTheSite.html).**"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":"* **`message`** [Optional. Default: `\"Site Update.\"`]\u003cbr\u003e"},{"lineNumber":241,"author":{"gitId":"-"},"content":" The commit message used for the deployment commit."},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **`repo`** [Optional. Default: the current working project\u0027s repo]\u003cbr\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":" The repo you want to deploy to.\u003cbr\u003e"},{"lineNumber":245,"author":{"gitId":"-"},"content":" Format: `\"https://github.com/\u003corg|username\u003e/\u003crepo\u003e.git\"` (`\"git@github.com:\u003corg|username\u003e/\u003crepo\u003e.git\"` if you use SSH)\u003cbr\u003e"},{"lineNumber":246,"author":{"gitId":"-"},"content":" {{ icon_example }} `\"https://github.com/myorg/myrepo.git\"`"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":"* **`branch`** [Optional. Default: `\"gh-pages\"`]\u003cbr\u003e"},{"lineNumber":249,"author":{"gitId":"-"},"content":" The branch that will be deployed to in the remote repo."},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":"#### **`plugins`**, **`pluginsContext`**"},{"lineNumber":254,"author":{"gitId":"-"},"content":""},{"lineNumber":255,"author":{"gitId":"-"},"content":"**A list of plugins to load.** Plugins are user-defined extensions that can add custom features to MarkBind. `pluginsContext` contains settings to be applied to the loaded plugins. See [User Guide: Using Plugins](usingPlugins.html) for more details."},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"yiwen101"},"content":"The example above uses tags as an example of configuring plugin settings, refer to the [`filterTags` plugin](tweakingThePageStructure.html#toggling-alternative-contents) for more details."},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"#### **`headingIndexingLevel`**"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":"**The level of headings to be indexed for searching.** Default: `3` %%i.e., only headings of levels 1,2,3 will be indexed for searching%%."},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":"#### **`enableSearch`**"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"**Specifies that the website should use MarkBind\u0027s search functionality.** Default: `true`. See [User Guide: Making the Site Searchable](makingTheSiteSearchable.html) for more details."},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":"#### **`timeZone`**"},{"lineNumber":268,"author":{"gitId":"-"},"content":""},{"lineNumber":269,"author":{"gitId":"-"},"content":"**Time zone of the [time stamp](reusingContents.html#built-in-global-variables).** Default: `\"UTC\"`."},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"Time Zone Options\"\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"pages/timeZones.md\" /\u003e"},{"lineNumber":273,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":""},{"lineNumber":277,"author":{"gitId":"-"},"content":"#### **`locale`**"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":"**Language by locale used for the [time stamp](reusingContents.html#built-in-global-variables).** Default: `\"en-GB\"` (`English (United Kingdom)`). \u003cbr\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":"The date format is thus: `\u003cDay\u003e, \u003cDate\u003e \u003cMonth\u003e \u003cYear\u003e, \u003c24-hour Time\u003e \u003cTime Zone Code\u003e`."},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"Locale Options\"\u003e"},{"lineNumber":283,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"pages/locales.md\" /\u003e"},{"lineNumber":284,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":285,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":"#### **`intrasiteLinkValidation`**"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":"**Toggle whether to validate intra-site links.** By default, MarkBind will validate all intra-site links and alert you of any potentially invalid ones."},{"lineNumber":290,"author":{"gitId":"-"},"content":"To disable this validation **entirely**, you may add the following to `site.json`:"},{"lineNumber":291,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"disable-global-intrasite-link-validation\"\u003e"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" ```js"},{"lineNumber":294,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":295,"author":{"gitId":"-"},"content":" \"intrasiteLinkValidation\": {"},{"lineNumber":296,"author":{"gitId":"-"},"content":" \"enabled\": false"},{"lineNumber":297,"author":{"gitId":"-"},"content":" },"},{"lineNumber":298,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":299,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":"#### **`plantumlCheck`**"},{"lineNumber":304,"author":{"gitId":"-"},"content":""},{"lineNumber":305,"author":{"gitId":"-"},"content":"**Toggle whether to display a warning about PlantUML\u0027s prerequisite. Only applicable for non-Windows users.** By default, MarkBind will check if you have Graphviz installed when you are using PlantUML diagrams."},{"lineNumber":306,"author":{"gitId":"-"},"content":"To disable this validation and the display of the warning, you may add the following to `site.json`:"},{"lineNumber":307,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"plantuml-check\"\u003e"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" ```js"},{"lineNumber":310,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":311,"author":{"gitId":"-"},"content":" \"plantumlCheck\": false,"},{"lineNumber":312,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":313,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":312,"yiwen101":3}},{"path":"docs/userGuide/syntax/annotations.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Annotations"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"**An `annotate` component allows you to easily annotate over any images.**"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"Annotate wrappers (`\u003cannotate\u003e`) are used in conjunction with Annotate"},{"lineNumber":6,"author":{"gitId":"-"},"content":"Points (`\u003ca-point\u003e`)."},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"- `\u003cannotate\u003e`: Annotate wrappers are used to hold the image and set its width and height."},{"lineNumber":9,"author":{"gitId":"-"},"content":"- `\u003ca-point\u003e`: Annotate points define the position, text and style of each point within the image. Insert them between the Annotate wrappers."},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"The x and y coordinates of each Annotate Point are relative to the image and are written in percentage of total width or height."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"LamJiuFong"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\" lazy\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c!-- Minimal Point --\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"25%\" content\u003d\"This point is 25% from the left and 25% from the top\" /\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Size (default size is 40px) --\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" content\u003d\"This point is 50% from the left and 25% from the top\" size\u003d\"60\"/\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Header (default is empty) --\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"25%\" content\u003d\"This point is 75% from the left and 25% from the top\" header\u003d\"This has a header\"/\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Color (default color is green) --\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"50%\" content\u003d\"This point is 25% from the left and 50% from the top\" color\u003d\"red\"/\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Opacity (default opacity is 0.3) --\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"50%\" content\u003d\"This point is 50% from the left and 50% from the top\" opacity\u003d\"0.7\"/\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c!-- Customize Point Label (default is empty) --\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"75%\" content\u003d\"This point is 25% from the left and 75% from the top\" label\u003d\"1\"/\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c!-- Customize Text Color (default color is black) --\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"75%\" content\u003d\"This point is 50% from the left and 75% from the top\" textColor\u003d\"white\" color\u003d\"black\" label\u003d\"2\" opacity\u003d\"1\"/\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c!-- Customize Font Size (default font size is 14) --\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"75%\" content\u003d\"This point is 75% from the left and 75% from the top\" fontSize\u003d\"30\" label\u003d\"3\"/\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c!-- Customize Label (default is a rounded button) --\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"50%\" content\u003d\"This point is 75% from the left and 50% from the top\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"badge bg-primary\"\u003eBadge label\u003c/span\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003c/a-point\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"**Use markdown in the header, label and content**"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"Annotate Points supports markdown in the header, label and content. "},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"25%\" content\u003d\"# Content\" /\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" header\u003d\":blush:\" /\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"25%\" label\u003d\":heart:\"/\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"**Customising shapes for Annotate Point** \u003cbr\u003e "},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"Annotate Points supports different shapes and customisation. "},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":"The default shape used is a rounded button."},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":"When using a customised shape, the options shape, color and opacity will not work. "},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"Style the shape to achieve the same effect."},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"50%\" content\u003d\"This point is 75% from the left and 50% from the top\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"badge bg-primary\"\u003eBadge label\u003c/span\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c/a-point\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"50%\" content\u003d\"This point is 25% from the left and 50% from the top\"\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003cpic src\u003d\"../../images/deer.jpg\" width\u003d\"50\" height\u003d\"50\"\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" \u003c/a-point\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003c!-- Customised Annotate Point with styling--\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"50%\" content\u003d\"This point is 25% from the left and 50% from the top\"\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003cdiv style\u003d\"opacity: 90%; color: red\"\u003eCustom\u003c/div\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003c/a-point\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":"**Using triggers and positions for Annotate Point** \u003cbr\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"Similar to **[popovers](../components/popups.md#popovers)**, Annotate Points also support different types of triggers and positions"},{"lineNumber":92,"author":{"gitId":"-"},"content":"for users with different needs."},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":" \u003c!-- Default Trigger (click)--\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"33%\" y\u003d\"33%\" content\u003d\"Lorem ipsum dolor sit amet\" /\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c!-- Set Trigger to hover focus --\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"66%\" y\u003d\"33%\" content\u003d\"Lorem ipsum dolor sit amet\" trigger\u003d\"hover focus\"/\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003c!-- Set Popover Placement (click)--\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"66%\" content\u003d\"Popover on the left\" placement\u003d\"left\"/\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"66%\" content\u003d\"Popover on the bottom\" placement\u003d\"bottom\"/\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"66%\" content\u003d\"Popover on the right\" placement\u003d\"right\"/\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \u003c!-- Both trigger and popover placement hover focus --\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"66%\" content\u003d\"Popover on the bottom\" placement\u003d\"bottom\" trigger\u003d\"hover focus\"/\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":"**Displaying content as legends in Annotate Point**"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":"`\u003ca-point\u003e` allows users to display its content !!inside a popover!! or !!as a legend below the diagram!! or !!both!!. However, the label attribute must be specified in `\u003ca-point\u003e` in order to display the content below the image."},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":" \u003c!-- Default Legend (popover only)--\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"50%\" content\u003d\"There is only text when you click me\" label\u003d\"1\"/\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \u003c!-- Set Legend to bottom only (no popover) --\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"50%\" content\u003d\"Clicking on this does nothing\" label\u003d\"2\" legend\u003d\"bottom\" header\u003d\"Headers are displayed as well\"/\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":" \u003c!-- Set Legend to both --\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"50%\" content\u003d\"There is text at both locations\" label\u003d\"3\" legend\u003d\"both\" header\u003d\"Headers are displayed at both positions\"/\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":"**Sample use cases for Annotate** \u003cbr\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":"Here we showcase some use cases of the Annotate feature."},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":"**Example 1: Describing elements in an image** \u003cbr\u003e"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleObject.png\" height\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":147,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"6%\" y\u003d\"50%\" content\u003d\"You can use a triangle and a solid line (not to be confused with an arrow) to indicate class inheritance.\" label\u003d\"1\" header\u003d\"Class inheritance\" legend\u003d\"both\"/\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25.5%\" y\u003d\"50%\" content\u003d\"UML uses a solid diamond symbol to denote composition.\" label\u003d\"2\" header\u003d\"Composition\" color\u003d\"red\" legend\u003d\"both\"/\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"45%\" y\u003d\"50%\" content\u003d\"UML uses a hollow diamond to indicate an aggregation.\" label\u003d\"3\" header\u003d\"Aggregation\" color\u003d\"blue\" legend\u003d\"both\"/\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"64.5%\" y\u003d\"50%\" content\u003d\"Association labels describe the meaning of the association.\" label\u003d\"4\" header\u003d\"Association labels\" color\u003d\"yellow\" legend\u003d\"both\"/\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"**Example 2: Drawing over elements** \u003cbr\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleSequence.png\" height\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":162,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"35%\" y\u003d\"18.5%\" content\u003d\"Operation is invoked\" header\u003d\"Operation\" opacity\u003d\"0.2\" size\u003d\"30\"/\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"65%\" y\u003d\"50%\" content\u003d\"This is the period during which the method is being executed\" header\u003d\"Activation Bar\" opacity\u003d\"0.3\" size\u003d\"50\" color\u003d\"yellow\"/\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"14%\" y\u003d\"85%\" content\u003d\"Return control and possibly some return value\" header\u003d\"Return Value\" opacity\u003d\"0.2\" size\u003d\"30\" color\u003d\"blue\"/\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":167,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":""},{"lineNumber":171,"author":{"gitId":"-"},"content":"****`\u003ca-point\u003e` Options****"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"| Name | Type | Default | Description |"},{"lineNumber":174,"author":{"gitId":"-"},"content":"| --------- | -------- | ----------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|"},{"lineNumber":175,"author":{"gitId":"-"},"content":"| x | `String` | | **This must be specified.**\u003cbr\u003eThe x-coordinate of the point.\u003cbr\u003eSupports range of values from `0%` to `100%`. |"},{"lineNumber":176,"author":{"gitId":"-"},"content":"| y | `String` | | **This must be specified.**\u003cbr\u003eThe y-coordinate of the point.\u003cbr\u003eSupports range of values from `0%` to `100%`. |"},{"lineNumber":177,"author":{"gitId":"-"},"content":"| content | `String` | `\u0027\u0027` | Annotate Point content.\u003cbr\u003eThe annotation content will be omitted if this is not provided. |"},{"lineNumber":178,"author":{"gitId":"-"},"content":"| header | `String` | `\u0027\u0027` | Annotate Point header.\u003cbr\u003eThe header will be omitted if this is not provided. |"},{"lineNumber":179,"author":{"gitId":"-"},"content":"| trigger | `String` | `click` | Popover trigger type.\u003cbr\u003eSupports: `click`, `focus`, `hover`, or any space-separated combination of these. |"},{"lineNumber":180,"author":{"gitId":"-"},"content":"| placement | `String` | `top` | Position of the Popover.\u003cbr\u003eSupports: `top`, `left`, `right`, `bottom`. |"},{"lineNumber":181,"author":{"gitId":"-"},"content":"| label | `String` | `\u0027\u0027` | The label shown on the point itself.\u003cbr\u003eThe label will be omitted if this is not provided.\u003cbr\u003eNote that labels should not be too long as they might overflow out of the point. |"},{"lineNumber":182,"author":{"gitId":"-"},"content":"| size | `String` | `\u002740\u0027` | The size of the point in pixels. \u003cbr\u003e Does not work with customised shapes |"},{"lineNumber":183,"author":{"gitId":"-"},"content":"| color | `String` | `\u0027green\u0027` | The color of the point.\u003cbr\u003eSupports any color in the CSS color format. E.g. `red`, `#ffffff`, `rgb(66, 135, 245)`, etc. \u003cbr\u003e Does not work with customised shapes |"},{"lineNumber":184,"author":{"gitId":"-"},"content":"| opacity | `String` | `\u00270.3\u0027` | The opacity of the point.\u003cbr\u003eSupports range of values from `0` to `1`. \u003cbr\u003e Does not work with customised shapes |"},{"lineNumber":185,"author":{"gitId":"-"},"content":"| fontSize | `String` | `\u002714\u0027` | The font size of the label.\u003cbr\u003eSupports any pixel size smaller than size of the point. |"},{"lineNumber":186,"author":{"gitId":"-"},"content":"| textColor | `String` | `\u0027black\u0027` | The color of the label.\u003cbr\u003eSupports any color in the CSS color format. E.g. `red`, `#ffffff`, `rgb(66, 135, 245)`, etc. |"},{"lineNumber":187,"author":{"gitId":"-"},"content":"| legend | `String` | `\u0027popover\u0027` | The position of the Annotate Point content and header.\u003cbr\u003eSupports: `popover`, `bottom`, `both`. |"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":"****`\u003cannotate\u003e` Options****"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"This is effectively the same as the options used for the [picture](#pictures) component."},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":"| Name | Type | Default | Description |"},{"lineNumber":194,"author":{"gitId":"LamJiuFong"},"content":"|--------| --------- | ------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|"},{"lineNumber":195,"author":{"gitId":"-"},"content":"| alt | `string` | | **This must be specified.**\u003cbr\u003eThe alternative text of the image. |"},{"lineNumber":196,"author":{"gitId":"-"},"content":"| src | `string` | | **This must be specified.**\u003cbr\u003eThe URL of the image.\u003cbr\u003eThe URL can be specified as absolute or relative references. More info in: _[Intra-Site Links]({{baseUrl}}/userGuide/formattingContents.html#intraSiteLinks)_ |"},{"lineNumber":197,"author":{"gitId":"-"},"content":"| height | `string` |`\u0027\u0027`| The height of the image in pixels. |"},{"lineNumber":198,"author":{"gitId":"-"},"content":"| width | `string` |`\u0027\u0027`| The width of the image in pixels.\u003cbr\u003eIf both width and height are specified, width takes priority over height. It is to maintain the image\u0027s aspect ratio. |"},{"lineNumber":199,"author":{"gitId":"LamJiuFong"},"content":"| lazy | `boolean` | false | The `\u003cannotate\u003e` component lazy loads if this attribute is specified.\u003cbr\u003e**Either the height or width should be specified to avoid layout shifts while lazy loading images.** |"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":"```"},{"lineNumber":206,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"../../images/annotateSampleImage.png\" width\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":207,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"25%\" content\u003d\"Lorem ipsum dolor sit amet\" /\u003e"},{"lineNumber":208,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" content\u003d\"Lorem ipsum dolor sit amet\" label\u003d\"1a\"/\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" content\u003d\"Lorem ipsum dolor sit amet\" label\u003d\"1b\" legend\u003d\"both\"/\u003e"},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"```"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cannotate src\u003d\"https://markbind.org/userGuide/diagrams/object.png\" height\u003d\"500\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":218,"author":{"gitId":"-"},"content":" \u003c!-- Default Legend (popover only)--\u003e"},{"lineNumber":219,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"6%\" y\u003d\"50%\" content\u003d\"You can use a triangle and a solid line (not to be confused with an arrow) to indicate class inheritance.\" label\u003d\"1\" header\u003d\""},{"lineNumber":220,"author":{"gitId":"-"},"content":"Class inheritance\"/\u003e"},{"lineNumber":221,"author":{"gitId":"-"},"content":" \u003c!-- Set Legend to bottom only (popover is not clickable) --\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"25.5%\" y\u003d\"50%\" content\u003d\"UML uses a solid diamond symbol to denote composition.\" label\u003d\"2\" header\u003d\"Composition\" color\u003d\"red\"/\u003e"},{"lineNumber":223,"author":{"gitId":"-"},"content":" \u003c!-- Set Legend to both --\u003e"},{"lineNumber":224,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"45%\" y\u003d\"50%\" content\u003d\"UML uses a hollow diamond to indicate an aggregation.\" label\u003d\"3\" header\u003d\""},{"lineNumber":225,"author":{"gitId":"-"},"content":"Aggregation\" color\u003d\"blue\"/\u003e"},{"lineNumber":226,"author":{"gitId":"-"},"content":" \u003ca-point x\u003d\"64.5%\" y\u003d\"50%\" content\u003d\"Association labels describe the meaning of the association.\" label\u003d\"4\" header\u003d\"Association labels\" color\u003d\"yellow\"/\u003e"},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003c/annotate\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":"\u003c/popover\u003e"},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":228}},{"path":"docs/userGuide/syntax/badges.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Badges"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"yiwen101"},"content":"**Example:**"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":5,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":6,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":7,"author":{"gitId":"yiwen101"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003e"},{"lineNumber":8,"author":{"gitId":"yiwen101"},"content":"Some Plain Text"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":"\u003c/span\u003e"},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003e"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":"\u003cmd\u003e_Some Markdown_\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"yiwen101"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"yiwen101"},"content":"\u003c/variable\u003e"},{"lineNumber":15,"author":{"gitId":"yiwen101"},"content":"\u003c/include\u003e"},{"lineNumber":16,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":17,"author":{"gitId":"yiwen101"},"content":"**You can choose from a variety of colors for your badges. You can also use the `rounded-pill` class to make the badges pill-shaped.**"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":"Normal:"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003ePrimary\u003c/span\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-secondary\"\u003eSecondary\u003c/span\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-success\"\u003eSuccess\u003c/span\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-danger\"\u003eDanger\u003c/span\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-warning text-dark\"\u003eWarning\u003c/span\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-info text-dark\"\u003eInfo\u003c/span\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-light text-dark\"\u003eLight\u003c/span\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-dark\"\u003eDark\u003c/span\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cbr\u003ePills:"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-primary\"\u003ePrimary\u003c/span\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-secondary\"\u003eSecondary\u003c/span\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-success\"\u003eSuccess\u003c/span\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-danger\"\u003eDanger\u003c/span\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-warning text-dark\"\u003eWarning\u003c/span\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-info text-dark\"\u003eInfo\u003c/span\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-light text-dark\"\u003eLight\u003c/span\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-dark\"\u003eDark\u003c/span\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"yiwen101"},"content":"**You can use Badges in combination with headings, buttons, links, etc.**"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":"Links:"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003ca href\u003d\"#\" class\u003d\"badge bg-primary\"\u003ePrimary\u003c/a\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":"\u003ca href\u003d\"#\" class\u003d\"badge rounded-pill bg-warning text-dark\"\u003eWarning\u003c/a\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"Buttons:"},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cbutton type\u003d\"button\" class\u003d\"btn btn-primary\"\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Difficulty Level \u003cspan class\u003d\"badge bg-light text-dark\"\u003e4\u003c/span\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/button\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"Headings:"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"### Feature X \u003cspan class\u003d\"badge bg-danger\"\u003ebeta\u003c/span\u003e {.no-index}"},{"lineNumber":59,"author":{"gitId":"-"},"content":"##### Feature Y \u003cspan class\u003d\"badge rounded-pill bg-success\"\u003estable\u003c/span\u003e {.no-index}"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"%%{{ icon_info }} You can refer to [Bootstrap documentation](https://getbootstrap.com/docs/5.1/components/badge/) to find more information about Badges.%%"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003ePrimary\u003c/span\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-success\"\u003eSuccess\u003c/span\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003cbutton type\u003d\"button\" class\u003d\"btn btn-primary\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" Difficulty Level \u003cspan class\u003d\"badge bg-light text-dark\"\u003e4\u003c/span\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"\u003c/button\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":"```"},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge bg-primary\"\u003ePrimary\u003c/span\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"badge rounded-pill bg-success\"\u003eSuccess\u003c/span\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003cbutton type\u003d\"button\" class\u003d\"btn btn-primary\"\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Difficulty Level \u003cspan class\u003d\"badge bg-light text-dark\"\u003e4\u003c/span\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":"##### Feature Y \u003cspan class\u003d\"badge rounded-pill bg-warning text-dark\"\u003estable\u003c/span\u003e {.no-index}"},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003c/button\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":73,"yiwen101":16}},{"path":"docs/userGuide/syntax/boxes.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% from \"userGuide/components/advanced.md\" import slot_info_trigger %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Boxes"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"yiwen101"},"content":"**Simple Example**"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":"plain text"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":13,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e"},{"lineNumber":14,"author":{"gitId":"yiwen101"},"content":"\u003cmd\u003e_markdown_\u003c/md\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":16,"author":{"gitId":"yiwen101"},"content":"\u003c/variable\u003e"},{"lineNumber":17,"author":{"gitId":"yiwen101"},"content":"\u003c/include\u003e"},{"lineNumber":18,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":19,"author":{"gitId":"yiwen101"},"content":"**Boxes come with different built-in types.**"},{"lineNumber":20,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":21,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":22,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":23,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" info"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" warning"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" success"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\"\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" important"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"wrong\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" wrong"},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" tip"},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\"\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" definition"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" dismissible\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" dismissible info"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\" header\u003d\"#### Header :rocket:\" icon-size\u003d\"2x\"\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cbox type\u003d\"warning\" header\u003d\"You can use **markdown** here! :pizza:\" dismissible\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/box\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"**The built in types can be colored.**"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"primary\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" primary"},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"secondary\"\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" secondary"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"success\"\u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":" success"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"danger\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" danger"},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"warning\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" warning"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"info\"\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" info"},{"lineNumber":81,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"light\"\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" light"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" theme\u003d\"dark\"\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":" dark"},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"**MarkBind also supports a light color scheme for boxes**"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003cbox light\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":" default light"},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" light\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" info light"},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" light\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" warning light"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\" light\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" success light"},{"lineNumber":107,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" light\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":" important light"},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"wrong\" light\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":" wrong light"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" light\u003e"},{"lineNumber":115,"author":{"gitId":"-"},"content":" tip light"},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" light\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" definition light"},{"lineNumber":119,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" header\u003d\"##### Header markdown :rocket:\" light\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":" definition light with header markdown"},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"**MarkBind also supports a seamless style of boxes**"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"As `light` and `seamless` are mutually exclusive styles, `light` takes priority over `seamless`."},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":"\u003cbox seamless\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":" default seamless"},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":140,"author":{"gitId":"-"},"content":" info seamless"},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":" warning seamless"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\" seamless\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":" success seamless"},{"lineNumber":147,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" seamless\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" important seamless"},{"lineNumber":150,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"wrong\" seamless\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":" wrong seamless"},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" tip seamless"},{"lineNumber":156,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" seamless dismissible\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":" dismissible definition seamless"},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" header\u003d\"##### Header markdown :rocket:\" seamless\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":" success seamless with header markdown"},{"lineNumber":162,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":"**You can further customize the Box\u0027s appearance.**"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":169,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003cbox background-color\u003d\"#ffca6a\" border-color\u003d\"grey\" border-left-color\u003d\"#8b5a01\"\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":"default type, styled as an orange box with a brown left border"},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" color\u003d\"red\" icon\u003d\":rocket:\"\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":"info, with a custom markdown rocket icon and `red` colored text."},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"You can use any inline markdown in the `icon` property."},{"lineNumber":179,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":180,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":"**You can remove the background, icon and borders of preset styles.**"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":186,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":188,"author":{"gitId":"-"},"content":"\u003cbox no-icon no-background type\u003d\"success\"\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":" success box without a tick icon and backgound"},{"lineNumber":190,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":"\u003cbox no-border type\u003d\"definition\" light\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":" definition type box, light style without border"},{"lineNumber":194,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox header\u003d\"Note\" type\u003d\"info\" seamless\u003e"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"Custom styles **(** `background-color`, `border-color`, `border-left-color`, `icon` **)** as introduced in the previous section, takes precedence over the `no-background`, `no-border`, `no-icon` attributes."},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":"**You can also use icons, resize them and change their color accordingly.**"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":206,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":208,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\" icon\u003d\":fas-camera:\"\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit"},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" icon\u003d\":fas-camera:\" icon-size\u003d\"2x\"\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":214,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\" icon\u003d\":fas-camera:\" icon-size\u003d\"3x\"\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."},{"lineNumber":216,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" icon\u003d\":fas-camera:\" icon-color\u003d\"red\" icon-size\u003d\"3x\"\u003e"},{"lineNumber":218,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."},{"lineNumber":219,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":220,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":224,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":225,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":226,"author":{"gitId":"-"},"content":"background-color | `String` | `null` |"},{"lineNumber":227,"author":{"gitId":"-"},"content":"border-color | `String` | `null` |"},{"lineNumber":228,"author":{"gitId":"-"},"content":"border-left-color | `String` | `null` | Overrides border-color for the left border."},{"lineNumber":229,"author":{"gitId":"-"},"content":"color | `String` | `null` | Color of the text."},{"lineNumber":230,"author":{"gitId":"-"},"content":"dismissible | `Boolean` | `false` | Adds a button to close the box to the top right corner."},{"lineNumber":231,"author":{"gitId":"-"},"content":"icon{{slot_info_trigger}} | `String` | `null` | Inline MarkDown text of the icon displayed on the left."},{"lineNumber":232,"author":{"gitId":"-"},"content":"icon-size | `String` | `null` | Resizes the icon. Supports integer-scaling of the icon dimensions e.g. `2x`, `3x`, `4x`, etc."},{"lineNumber":233,"author":{"gitId":"-"},"content":"icon-color | `String` | `null` | Color of the icon."},{"lineNumber":234,"author":{"gitId":"-"},"content":"header{{slot_info_trigger}} | `String` | `null` | Markdown text of the box header."},{"lineNumber":235,"author":{"gitId":"-"},"content":"type | `String` | `\u0027\u0027` | Supports: `info`, `warning`, `success`, `important`, `wrong`, `tip`, `definition`, or empty for default."},{"lineNumber":236,"author":{"gitId":"-"},"content":"theme | `String` | `\u0027\u0027` | Supports: `primary`, `secondary`, `success`, `danger`, `warning`, `tip`, `light`, `dark` or empty for default."},{"lineNumber":237,"author":{"gitId":"-"},"content":"light | `Boolean` | `false` | Uses a light color scheme for the box."},{"lineNumber":238,"author":{"gitId":"-"},"content":"seamless | `Boolean` | `false` | Uses a seamless style for the box. If `light` is specified, this style will not be activated."},{"lineNumber":239,"author":{"gitId":"-"},"content":"no-border | `Boolean` | `false` | Removes border, except if styled by `border-color` or `border-left-color`. "},{"lineNumber":240,"author":{"gitId":"-"},"content":"no-background | `Boolean` | `false` | Removes background, except if styled by `background-color` option."},{"lineNumber":241,"author":{"gitId":"-"},"content":"no-icon | `Boolean` | `false` | Removes icon, except if icon is displayed via `icon` option."},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":247,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":248,"author":{"gitId":"-"},"content":" warning"},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"```"},{"lineNumber":251,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":" default"},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":258,"author":{"gitId":"-"},"content":" info"},{"lineNumber":259,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":260,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":" warning"},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"success\"\u003e"},{"lineNumber":264,"author":{"gitId":"-"},"content":" success"},{"lineNumber":265,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\"\u003e"},{"lineNumber":267,"author":{"gitId":"-"},"content":" important"},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"wrong\"\u003e"},{"lineNumber":270,"author":{"gitId":"-"},"content":" wrong"},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":273,"author":{"gitId":"-"},"content":" tip"},{"lineNumber":274,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"definition\"\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":" definition"},{"lineNumber":277,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":278,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":264,"yiwen101":14}},{"path":"docs/userGuide/syntax/code.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Code"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"#### Themes"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"MarkBind can present formatted code blocks, be it fenced or inline, with either **light** or **dark** themes. The default is dark \u003ctrigger for\u003d\"modal:code-dark-example\" trigger\u003d\"click\"\u003e_(click for an example)_\u003c/trigger\u003e."},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cmodal header\u003d\"Dark Code Theme\" id\u003d\"modal:code-dark-example\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"/images/codeDarkTheme.png\" alt\u003d\"Theme example\"\u003e\u003c/pic\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/modal\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"Refer [here](../siteJsonFile.html#style) for configuring MarkBind to use a specific theme for the code blocks."},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"#### Fenced Code"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"MarkBind provides several features, some of which are added on top of the existing functionality of Markdown\u0027s _fenced code blocks_."},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003csmall\u003eMore info: \u003chttps://www.markdownguide.org/extended-syntax#fenced-code-blocks\u003e\u003c/small\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"Features:"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"* Syntax coloring"},{"lineNumber":23,"author":{"gitId":"-"},"content":"* Line numbering"},{"lineNumber":24,"author":{"gitId":"-"},"content":"* Line highlighting"},{"lineNumber":25,"author":{"gitId":"-"},"content":"* Code block headers"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"##### Syntax coloring"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"To enable syntax coloring, specify a language next to the backticks before the fenced code block."},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"```xml"},{"lineNumber":34,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"```"},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"##### Line numbering"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"Line numbers are \u003ctooltip content\u003d\"Line numbers were provided by default in version v3.1.1 and below. To preserve the exact line numbers behavior of sites generated in previous versions, simply set the codeLineNumbers option in site.json to true\"\u003ehidden by default\u003c/tooltip\u003e. To enable line numbers for the entire site by default,"},{"lineNumber":45,"author":{"gitId":"-"},"content":"add `\"codeLineNumbers\": true` to the [`site.json`]({{baseUrl}}/userGuide/siteJsonFile.html#style) file:"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"```json {highlight-lines\u003d\"8[:]\"}"},{"lineNumber":48,"author":{"gitId":"-"},"content":"{"},{"lineNumber":49,"author":{"gitId":"-"},"content":" // ..."},{"lineNumber":50,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"bootstrapTheme\": \"bootswatch-cerulean\","},{"lineNumber":52,"author":{"gitId":"-"},"content":" \"codeTheme\": \"light\","},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"codeLineNumbers\": true // optional, false if omitted"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // code below omitted for brevity"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}"},{"lineNumber":57,"author":{"gitId":"-"},"content":"```"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"For each code block, you may also use the `line-numbers` or `no-line-numbers` classes to override the site-wide setting as such:"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":"```xml {.line-numbers}"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":"```"},{"lineNumber":68,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":"```xml {.no-line-numbers}"},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"```"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":"You can have your line numbers start with a value other than `1` with the `start-from` attribute."},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"```js {start-from\u003d6}"},{"lineNumber":86,"author":{"gitId":"-"},"content":"function add(a, b) {"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return a + b;"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}"},{"lineNumber":89,"author":{"gitId":"-"},"content":"```"},{"lineNumber":90,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":"##### Line highlighting"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":"You can add the `highlight-lines` attribute to add highlighting to your code block. Refer to the examples"},{"lineNumber":96,"author":{"gitId":"-"},"content":"below for a visual demonstration of all the possible ways of highlighting a code block."},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"**Full text highlight**"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":"```js {start-from\u003d6 .line-numbers highlight-lines\u003d\"7, 9\"}"},{"lineNumber":102,"author":{"gitId":"-"},"content":"function add(a, b) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" const sum \u003d a + b;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" console.log(`${a} + ${b} \u003d ${sum}`);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return sum;"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":"```"},{"lineNumber":108,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":"**Substring highlight**"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":"```js {.line-numbers highlight-lines\u003d\"1[\u0027function\u0027], 2[\u0027a\u0027], 2[\u0027b\u0027], 4[\u0027diff\u0027]\"}"},{"lineNumber":115,"author":{"gitId":"-"},"content":"function subtract(a, b) {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" const diff \u003d a - b;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" console.log(`${a} + ${b} \u003d ${diff}`);"},{"lineNumber":118,"author":{"gitId":"-"},"content":" return diff;"},{"lineNumber":119,"author":{"gitId":"-"},"content":"}"},{"lineNumber":120,"author":{"gitId":"-"},"content":"```"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":"**Character-bounded highlight**"},{"lineNumber":125,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":"```js {.line-numbers highlight-lines\u003d\"1[0:3], 1[6:10], 2[5:], 3[:6]\"}"},{"lineNumber":128,"author":{"gitId":"-"},"content":"function multiply(a, b) {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const product \u003d a * b;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" console.log(\u0027Product \u003d ${product}\u0027);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" return product;"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":"```"},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":"**Word-bounded highlight**"},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":140,"author":{"gitId":"-"},"content":"```js {.line-numbers highlight-lines\u003d\"1[1::3], 1[5::7], 2[2::], 3[::3]\"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":"// Function returns the distance travelled assuming constant speed"},{"lineNumber":142,"author":{"gitId":"-"},"content":"function calculateDistance(speed, time) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" const distance \u003d speed * time;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" console.log(`Distance travelled \u003d ${distance}`);"},{"lineNumber":145,"author":{"gitId":"-"},"content":" return distance;"},{"lineNumber":146,"author":{"gitId":"-"},"content":"}"},{"lineNumber":147,"author":{"gitId":"-"},"content":"```"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"**Full-line highlight**"},{"lineNumber":152,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":"```js {start-from\u003d10 .line-numbers highlight-lines\u003d\"11[:]\"}"},{"lineNumber":155,"author":{"gitId":"-"},"content":"function add(a, b) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" return a + b;"},{"lineNumber":157,"author":{"gitId":"-"},"content":"}"},{"lineNumber":158,"author":{"gitId":"-"},"content":"```"},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"**Sample Combined Usage**"},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":"```java {.line-numbers highlight-lines\u003d\"1[:],3[\u0027Inventory\u0027],3[4::6],4[\u0027It\\\u0027s designed\u0027],5,6[8:15],6[18:],8[0::2],12[:]-14,16-18,20[12:]-22,24[1::]-26\"}"},{"lineNumber":166,"author":{"gitId":"-"},"content":"import java.util.List;"},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"// Inventory is a class that stores inventory items in a list."},{"lineNumber":169,"author":{"gitId":"-"},"content":"// It\u0027s designed as a thin wrapper on the List interface."},{"lineNumber":170,"author":{"gitId":"-"},"content":"public class Inventory {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" private List\u003cItem\u003e items;"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" public int getItemCount(){"},{"lineNumber":174,"author":{"gitId":"-"},"content":" return items.size();"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" public bool isEmpty() {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" return items.isEmpty();"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":" public Item getItem(idx: int) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" return items.get(idx);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }"},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"-"},"content":" public void addItem(item: Item) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return items.add(item);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }"},{"lineNumber":188,"author":{"gitId":"-"},"content":""},{"lineNumber":189,"author":{"gitId":"-"},"content":" public void removeItem(item: Item) {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" return items.remove(item);"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":"}"},{"lineNumber":193,"author":{"gitId":"-"},"content":"```"},{"lineNumber":194,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":"The value of `highlight-lines` is composed of *highlight rules*, separated by commas."},{"lineNumber":198,"author":{"gitId":"-"},"content":"These rules dictate where and how MarkBind should highlight your code block."},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"You can specify the highlight rules in many different ways, each is detailed as follows:"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":"Type | Format | Example"},{"lineNumber":203,"author":{"gitId":"-"},"content":"-----|--------|--------"},{"lineNumber":204,"author":{"gitId":"-"},"content":"**Full text highlight**\u003cbr\u003eHighlights the entirety of the text portion of the line | The line numbers as-is (subject to the starting line number set in `start-from`). | `3`, `5`"},{"lineNumber":205,"author":{"gitId":"-"},"content":"**Substring highlight**\u003cbr\u003eHighlights _all_ occurrences of a substring in the line | `lineNumber[part]`\u003cbr\u003e\u003cbr\u003e_Limitations_: `part` must be wrapped in quotes. If `part` contains a quote, escape it with a backslash (`\\`). | `3[\u0027Inventory\u0027]`,`4[\u0027It\\\u0027s designed\u0027]`"},{"lineNumber":206,"author":{"gitId":"-"},"content":"**Character-bounded highlight**\u003cbr\u003eHighlights a specific range of characters in the line | `lineNumber[start:end]`, highlights from character position `start` up to (but not including) `end`.\u003cbr\u003e\u003cbr\u003eCharacter positions start from `0` as the first non-whitespace character, upwards.\u003cbr\u003e\u003cbr\u003eOmit either `start`/`end` to highlight from the start / up to the end, respectively. | `19[1:5]`,`30[10:]`,`35[:20]`"},{"lineNumber":207,"author":{"gitId":"-"},"content":"**Word-bounded highlight**\u003cbr\u003eHighlights a specific range of words in the line | `lineNumber[start::end]`, highlights from word position `start` up to (but not including) `end`.\u003cbr\u003e\u003cbr\u003eWord positions start from `0` as the first word (sequence of non-whitespace characters), upwards.\u003cbr\u003e\u003cbr\u003eOmit either `start`/`end` to highlight from the start / up to the end, respectively. | `5[2::4]`,`9[1::]`,`11[::5]`"},{"lineNumber":208,"author":{"gitId":"-"},"content":"**Full line highlight**\u003cbr\u003eHighlights the entirety of the line | `lineNumber[:]` | `7[:]`"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":"Not only a single line, MarkBind is also capable of highlighting ranges of lines in various ways. In general, the syntax"},{"lineNumber":211,"author":{"gitId":"-"},"content":"for range highlighting consists of two single line highlight rules as listed above joined by a dash (`-`)."},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":"Type | Format | Example"},{"lineNumber":214,"author":{"gitId":"-"},"content":"-----|--------|--------"},{"lineNumber":215,"author":{"gitId":"-"},"content":"**Ranged full text highlight**\u003cbr\u003eHighlights from the first non-whitespace character to the last non-whitespace character | `lineStart-lineEnd` | `2-4`"},{"lineNumber":216,"author":{"gitId":"-"},"content":"**Ranged full line highlight**\u003cbr\u003eLike ranged full text highlight, but highlights the entirety of the lines | `lineStart[:]-lineEnd` or `lineStart-lineEnd[:]` | `1[:]-5`,`10-12[:]`"},{"lineNumber":217,"author":{"gitId":"-"},"content":"**Ranged character-bounded highlight**\u003cbr\u003eHighlights the text portion of the lines within the range, but starts/ends at an arbitrary character | `lineStart[start:]-lineEnd` or `lineStart-lineEnd[:end]` | `3[2:]-7`, `4-9[:17]`"},{"lineNumber":218,"author":{"gitId":"-"},"content":"**Ranged word-bounded highlight**\u003cbr\u003eLike ranged character-bounded highlight, but starts/ends at an arbitrary word | `lineStart[start::]-lineEnd` or `lineStart-lineEnd[::end]` | `16[1::]-20`,`22-24[::3]`"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"##### Heading"},{"lineNumber":221,"author":{"gitId":"-"},"content":"To add a heading, add the attribute `heading` with the heading text as the value, as shown below."},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":224,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":225,"author":{"gitId":"-"},"content":"```xml {heading\u003d\"Heading title\"}"},{"lineNumber":226,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":227,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":229,"author":{"gitId":"-"},"content":"```"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":232,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":233,"author":{"gitId":"-"},"content":""},{"lineNumber":234,"author":{"gitId":"-"},"content":"Headings support inline Markdown, except for `Inline Code` and %%Dim%% text styles."},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":"```{heading\u003d\"**Bold**, _Italic_, ___Bold and Italic___, ~~Strike through~~, ****Super Bold****, !!Underline!!, \u003d\u003dHighlight\u003d\u003d, :+1: :exclamation: :x: :construction:\u003cbr\u003eWe support page breaks\"}"},{"lineNumber":239,"author":{"gitId":"-"},"content":"\u003cfoo\u003e\u003c/foo\u003e"},{"lineNumber":240,"author":{"gitId":"-"},"content":"```"},{"lineNumber":241,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":242,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":243,"author":{"gitId":"-"},"content":""},{"lineNumber":244,"author":{"gitId":"-"},"content":"##### Using multiple features"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":"You can also use multiple features together, as shown below."},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputCode.md\" boilerplate \u003e"},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"```xml {highlight-lines\u003d\"2\" heading\u003d\"Heading title\"}"},{"lineNumber":251,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":"```"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"##### Copy button"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":"A _copy_ button can be added to code blocks using the `codeBlockCopyButtons` plugin:"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"**User Guide: Using Plugins → Plugin: `codeBlockCopyButtons`**\" popup-url\u003d\"usingPlugins.html#plugin-codeblockcopybuttons\"\u003e"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"../plugins/codeBlockCopyButtons.md\" /\u003e"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":"##### Wrap text button"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":"A _wrap text_ button can be added to code blocks using the `codeBlockWrapButtons` plugin:"},{"lineNumber":273,"author":{"gitId":"-"},"content":""},{"lineNumber":274,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"seamless\" header\u003d\"**User Guide: Using Plugins → Plugin: `codeBlockWrapButtons`**\" popup-url\u003d\"usingPlugins.html#plugin-codeblockwrapbuttons\"\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"../plugins/codeBlockWrapButtons.md\" /\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":279,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":""},{"lineNumber":281,"author":{"gitId":"Tim-Siu"},"content":"##### Printing optimization"},{"lineNumber":282,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":283,"author":{"gitId":"Tim-Siu"},"content":"\u003cdiv id\u003d\"code-print-optimization\"\u003e"},{"lineNumber":284,"author":{"gitId":"-"},"content":"Markbind enhances the readability of your code blocks for printing by "},{"lineNumber":285,"author":{"gitId":"-"},"content":""},{"lineNumber":286,"author":{"gitId":"-"},"content":"- Applying soft wrapping, ensuring code doesn\u0027t get cut off"},{"lineNumber":287,"author":{"gitId":"-"},"content":"- Adding line numbers to maintain context when wrapping occurs"},{"lineNumber":288,"author":{"gitId":"-"},"content":"- Automatically changing dark code theme to light"},{"lineNumber":289,"author":{"gitId":"-"},"content":"- Removing [codeBlockCopyButtons]({{baseUrl}}/userGuide/formattingContents.html#copy-button) and [codeBlockWrapButtons]({{baseUrl}}/userGuide/formattingContents.html#wrap-text-button)"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e "},{"lineNumber":292,"author":{"gitId":"-"},"content":" There are some issues with printing in Firefox. Please use other browsers such as Chrome if these issues persist."},{"lineNumber":293,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":294,"author":{"gitId":"-"},"content":""},{"lineNumber":295,"author":{"gitId":"Tim-Siu"},"content":"\u003c/div\u003e"},{"lineNumber":296,"author":{"gitId":"Tim-Siu"},"content":"\u003cbr\u003e"},{"lineNumber":297,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":"#### Inline Code"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":"##### Syntax coloring"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":"MarkBind can apply syntax-coloring on inline code too."},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":305,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":306,"author":{"gitId":"-"},"content":"Consider the XML code `\u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e`{.xml},\u003cbr\u003e"},{"lineNumber":307,"author":{"gitId":"-"},"content":"or the java code `public static void main(String[] args)`{.java}."},{"lineNumber":308,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":309,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":"##### Displaying content within curly braces: `{{ content }}`"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":"If your code contains special Nunjucks tags like `{{` or `}}`, use a [raw-endraw block](../tipsAndTricks.html#using-raw-endraw-to-display-content):"},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":318,"author":{"gitId":"-"},"content":"{% raw %} {{ content }} {% endraw %}"},{"lineNumber":319,"author":{"gitId":"-"},"content":"```"},{"lineNumber":320,"author":{"gitId":"-"},"content":"{% endraw %}"},{"lineNumber":321,"author":{"gitId":"-"},"content":""},{"lineNumber":322,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":323,"author":{"gitId":"-"},"content":""},{"lineNumber":324,"author":{"gitId":"-"},"content":"````"},{"lineNumber":325,"author":{"gitId":"-"},"content":"```xml"},{"lineNumber":326,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":327,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":328,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":329,"author":{"gitId":"-"},"content":"```"},{"lineNumber":330,"author":{"gitId":"-"},"content":"````"},{"lineNumber":331,"author":{"gitId":"-"},"content":""},{"lineNumber":332,"author":{"gitId":"-"},"content":"```"},{"lineNumber":333,"author":{"gitId":"-"},"content":"`\u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e`{.xml}"},{"lineNumber":334,"author":{"gitId":"-"},"content":"```"},{"lineNumber":335,"author":{"gitId":"-"},"content":""},{"lineNumber":336,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":"```xml"},{"lineNumber":341,"author":{"gitId":"-"},"content":"\u003cfoo\u003e"},{"lineNumber":342,"author":{"gitId":"-"},"content":" \u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e"},{"lineNumber":343,"author":{"gitId":"-"},"content":"\u003c/foo\u003e"},{"lineNumber":344,"author":{"gitId":"-"},"content":"```"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":"Syntax coloring for inline code: `\u003cbar type\u003d\"name\"\u003egoo\u003c/bar\u003e`{.xml} too!"},{"lineNumber":347,"author":{"gitId":"-"},"content":""},{"lineNumber":348,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":342,"Tim-Siu":6}},{"path":"docs/userGuide/syntax/dates.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Dates"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"{% macro njcode(raw) %}\u003ccode\u003e{\u003ca/\u003e{ {{ raw }} }}\u003c/code\u003e{% endmacro %}"},{"lineNumber":4,"author":{"gitId":"-"},"content":"{% macro njblock(raw) %}\u003ccode\u003e{\u003ca/\u003e% {{ raw }} %}\u003c/code\u003e{% endmacro %}"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"**MarkBind supports date formatting and simple calculations** as a Nunjucks [filter](https://mozilla.github.io/nunjucks/templating.html#filters)."},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"**Syntax:** {{ njcode(\u0027baseDate | date(format, daysToAdd)\u0027) }}"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"20 days after 1st Jan 2020:"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"{{ njcode(\u0027\"2020-01-01\" | date(\"ddd, Do MMM, YYYY\", 20) \u0027) }} :glyphicon-arrow-right: {{ \"2020-01-01\" | date(\"ddd, Do MMM, YYYY\", 20) }}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"The baseDate follows the format: `YYYY-MM-DD`"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"The default output format is `\"ddd D MMM\"` e.g. Fri 6 Mar"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"### Using variables"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set base1 \u003d \"2020-01-01\"\u0027) }} {% set base1 \u003d \"2020-01-01\" %} \u003cbr/\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set format1 \u003d \"DD MM YYYY\"\u0027) }} {% set format1 \u003d \"DD MM YYYY\" %} \u003cbr/\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set format2 \u003d \"ddd Do MMM (DD/MM/YYYY)\"\u0027) }} {% set format2 \u003d \"ddd Do MMM (DD/MM/YYYY)\" %}"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date\u0027) }} :glyphicon-arrow-right: {{ base1 | date }}\u003cbr/\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"#### Custom formatting"},{"lineNumber":33,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format1)\u0027) }} :glyphicon-arrow-right: {{ base1 | date(format1) }}\u003cbr/\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"#### Adding days"},{"lineNumber":36,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format2, 0)\u0027) }} :glyphicon-arrow-right: {{ base1 | date(format2, 0) }}\u003cbr/\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format2, 10)\u0027) }} :glyphicon-arrow-right: {{ base1 | date(format2, 10) }}\u003cbr/\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"#### Nunjucks variables"},{"lineNumber":40,"author":{"gitId":"-"},"content":"Dates can be supplied using [Nunjucks variables](../reusingContents.html#variables) for convenience."},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"Inside the `.md` file of a page:"},{"lineNumber":43,"author":{"gitId":"-"},"content":"```"},{"lineNumber":44,"author":{"gitId":"-"},"content":"{% raw %}{% set date_pagevar \u003d \"2020-03-06\" %}{% endraw %}"},{"lineNumber":45,"author":{"gitId":"-"},"content":"```"},{"lineNumber":46,"author":{"gitId":"-"},"content":"{% set date_pagevar \u003d \"2020-03-06\" %}"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"{{ njcode(\u0027date_pagevar | date(format2)\u0027) }} :glyphicon-arrow-right: {{ date_pagevar | date(format2) }} \u003cbr/\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"### Advanced Formatting"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"The output date can be formatted to suit your needs by specifying a format string as an argument to the date filter."},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"Default format: `\"ddd D MMM\"` e.g. Fri 6 Mar"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Brief reference**\"\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"Token | Output"},{"lineNumber":61,"author":{"gitId":"-"},"content":"--- | ---"},{"lineNumber":62,"author":{"gitId":"-"},"content":"D | 1"},{"lineNumber":63,"author":{"gitId":"-"},"content":"Do | 1st"},{"lineNumber":64,"author":{"gitId":"-"},"content":"DD | 01"},{"lineNumber":65,"author":{"gitId":"-"},"content":"M | 1"},{"lineNumber":66,"author":{"gitId":"-"},"content":"MM | 01"},{"lineNumber":67,"author":{"gitId":"-"},"content":"MMM | Jan"},{"lineNumber":68,"author":{"gitId":"-"},"content":"MMMM | January"},{"lineNumber":69,"author":{"gitId":"-"},"content":"YY | 19"},{"lineNumber":70,"author":{"gitId":"-"},"content":"YYYY | 2019"},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"Full formatting reference available [here](https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens) and [here](https://day.js.org/docs/en/plugin/advanced-format)."},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003cinclude boilerplate src\u003d\"outputBox.md\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003cbox\u003e\u003cspan\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set base1 \u003d \"2019-08-12\"\u0027) }}\u003cbr/\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set format1 \u003d \"DD MM YYYY\"\u0027) }}\u003cbr/\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":"{{ njblock(\u0027set format2 \u003d \"ddd Do MM\"\u0027) }}\u003cbr/\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date\u0027) }} \u003c!-- Mon 12 Aug --\u003e\u003cbr/\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format1)\u0027) }} \u003c!-- 12 08 2019 --\u003e\u003cbr/\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format1, 10)\u0027) }} \u003c!-- 22 08 2019 --\u003e\u003cbr/\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"{{ njcode(\u0027base1 | date(format2, 10)\u0027) }} \u003c!-- Thu 22/08 --\u003e\u003cbr/\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003c/span\u003e\u003c/box\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":""},{"lineNumber":90,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":"Mon 12 Aug\u003cbr/\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":"12 08 2019\u003cbr/\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":"22 08 2019\u003cbr/\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":"Thu 22/08"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003cbox\u003e\u003cspan\u003e"},{"lineNumber":102,"author":{"gitId":"jingting1412"},"content":"{{ njcode(\u0027baseDate | date(format, daysToAdd)\u0027) }} \u003c!-- 22.08.2019 --\u003e\u003cbr/\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":"\u003c/span\u003e\u003c/box\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":1,"-":103}},{"path":"docs/userGuide/syntax/emoji.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Emoji"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":":+1: :exclamation: :x: :construction: :) :/ :D"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"Tim-Siu"},"content":"%%{{ icon_info }} The list of supported [emoji](https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md) and [emoticon shortcuts](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/shortcuts.mjs).%%"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":20,"author":{"gitId":"-"},"content":":+1: :exclamation: :x: :construction: :) :/ :D"},{"lineNumber":21,"author":{"gitId":"-"},"content":"```"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":":+1: :exclamation: :x: :construction: :) :/ :D"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":26,"Tim-Siu":1}},{"path":"docs/userGuide/syntax/footnotes.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Footnotes"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example-markbind\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"**Normal footnotes:**"},{"lineNumber":9,"author":{"gitId":"-"},"content":"Here is a footnote reference,[^1] and another.[^longnote]"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"[^1]: Here is the footnote. Footnotes will appear at the bottom of the page."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"[^longnote]: Here\u0027s one with multiple blocks."},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" Subsequent paragraphs are indented to show that they"},{"lineNumber":16,"author":{"gitId":"-"},"content":"belong to the previous footnote."},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"**Inline footnotes:**"},{"lineNumber":20,"author":{"gitId":"-"},"content":"Here is an inline note.^[Inline notes are easier to write, since"},{"lineNumber":21,"author":{"gitId":"-"},"content":"you don\u0027t have to pick an identifier and move down to type the"},{"lineNumber":22,"author":{"gitId":"-"},"content":"note.]"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"Normal footnotes won\u0027t work when used inside the attributes of MarkBind components!"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"For example, it won\u0027t work in the `header` attribute of [panels](../components/presentation.html#panels)."},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**Normal footnotes:**"},{"lineNumber":39,"author":{"gitId":"-"},"content":"Here is a footnote reference,[^1] and another.[^longnote]"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"[^1]: Here is the footnote. Footnotes will appear at the bottom of the page."},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"[^longnote]: Here\u0027s one with multiple blocks."},{"lineNumber":44,"author":{"gitId":"-"},"content":" Subsequent paragraphs are indented to show that they"},{"lineNumber":45,"author":{"gitId":"-"},"content":"belong to the previous footnote."},{"lineNumber":46,"author":{"gitId":"-"},"content":"```"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":49,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"1 + 1 \u003d 2 ^[Math]"},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":50,"yiwen101":1}},{"path":"docs/userGuide/syntax/fullSyntaxSet.njk","fileType":"njk","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"{% set syntax_topics \u003d {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" headings : [\u0027Headings\u0027, \u0027headings\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" paragraphs : [\u0027Paragraphs\u0027, \u0027paragraphs\u0027, [\u0027basic\u0027]],"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" lineBreaks : [\u0027Line Breaks\u0027, \u0027line-breaks\u0027, [\u0027basic\u0027]],"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" textStyles : [\u0027Text Styles\u0027, \u0027text-styles\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" blockquotes: [\u0027Blockquotes\u0027, \u0027blockquotes\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" lists : [\u0027Lists\u0027, \u0027lists\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" code : [\u0027Code\u0027, \u0027code\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" horizontalrules : [\u0027Horizontal Rules\u0027, \u0027horizontal-rules\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" links : [\u0027Links\u0027, \u0027links\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" footnotes: [\u0027Footnotes\u0027, \u0027footnotes\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" images : [\u0027Images\u0027, \u0027images\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" attributes: [\u0027Classes, Attributes \u0026 Identifiers\u0027, \u0027classes-attributes-and-amp-identifiers\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" tables : [\u0027Tables\u0027, \u0027tables\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" emoji : [\u0027Emoji\u0027, \u0027emoji\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" icons : [\u0027Icons\u0027, \u0027icons\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" embeds : [\u0027Embeds\u0027, \u0027embeds\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" dates : [\u0027Dates\u0027, \u0027dates\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" mathformulae : [\u0027Math Formulae\u0027, \u0027math-formulae\u0027, [\u0027basic\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" frontmatter : [\u0027Frontmatter\u0027, \u0027frontmatter\u0027, [\u0027tweakingThePageStructure\u0027]],"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" tags : [\u0027Tags\u0027, \u0027plugin-tags\u0027, [\u0027tweakingThePageStructure\u0027]],"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" includes : [\u0027Includes\u0027, \u0027includes\u0027, [\u0027reusingContents\u0027]],"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" variables : [\u0027Variables\u0027, \u0027variables\u0027, [\u0027reusingContents\u0027]],"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" keywords : [\u0027Keywords\u0027, \u0027keywords\u0027, [\u0027makingTheSiteSearchable\u0027]],"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" badges : [\u0027Badges\u0027, \u0027badges\u0027, [\u0027presentation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" boxes : [\u0027Boxes\u0027, \u0027boxes\u0027, [\u0027presentation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" panels : [\u0027Panels\u0027, \u0027panels\u0027, [\u0027presentation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" tabs : [\u0027Tabs\u0027, \u0027tabs\u0027, [\u0027presentation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" pictures : [\u0027Pictures\u0027, \u0027pictures\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":" annotations : [\u0027Annotations\u0027, \u0027annotations\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" thumbnails : [\u0027Thumbnails\u0027, \u0027thumbnails\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" diagrams : [\u0027Diagrams\u0027, \u0027diagrams\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":" tree : [\u0027Tree\u0027, \u0027tree\u0027, [\u0027images-diagrams\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":" tooltips : [\u0027Tooltips\u0027, \u0027tooltips\u0027, [\u0027popups\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":" popovers : [\u0027Popovers\u0027, \u0027popovers\u0027, [\u0027popups\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" modals : [\u0027Modals\u0027, \u0027modals\u0027, [\u0027popups\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":" dropdowns : [\u0027Dropdowns\u0027, \u0027dropdowns\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":" searchBars : [\u0027Search Bars\u0027, \u0027search-bars\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":" navBars : [\u0027Nav Bars\u0027, \u0027navbars\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" breadcrumbs : [\u0027Breadcrumbs\u0027, \u0027breadcrumbs\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" siteNavigationMenus : [\u0027Site Navigation Menus\u0027, \u0027site-navigation-menus\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":" pageNavigationMenus : [\u0027Page Navigation Menus\u0027, \u0027page-navigation-menus\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" scrollTopButton : [\u0027Scroll To Top Button\u0027, \u0027scroll-to-top-button\u0027, [\u0027navigation\u0027, \u0027reader-facing\u0027]],"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" questions : [\u0027Questions and Quizzes\u0027, \u0027questions-and-quizzes\u0027, [\u0027others\u0027, \u0027reader-facing\u0027]]"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":"} %}"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":"{% macro generate_url(k, v) %}"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":" {% set url\u003d\"/userGuide/\" %}"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":" {% if v[2] is iterable %}"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":" {% if \u0027basic\u0027 in v[2] %}"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"formattingContents.html#\" + v[1] %}"},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027presentation\u0027 in v[2] %}"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/presentation.html#\" + v[1] %}"},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027images-diagrams\u0027 in v[2] %}"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/imagesAndDiagrams.html#\" + v[1] %}"},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027popups\u0027 in v[2] %}"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/popups.html#\" + v[1] %}"},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027navigation\u0027 in v[2] %}"},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/navigation.html#\" + v[1] %}"},{"lineNumber":62,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027others\u0027 in v[2] %}"},{"lineNumber":63,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/others.html#\" + v[1] %}"},{"lineNumber":64,"author":{"gitId":"jingting1412"},"content":" {% else %}"},{"lineNumber":65,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + v[2][0] + v[1] %}"},{"lineNumber":66,"author":{"gitId":"jingting1412"},"content":" {% endif %}"},{"lineNumber":67,"author":{"gitId":"jingting1412"},"content":" {% else %}"},{"lineNumber":68,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url %}"},{"lineNumber":69,"author":{"gitId":"jingting1412"},"content":" {% endif%}"},{"lineNumber":70,"author":{"gitId":"jingting1412"},"content":" {{ url }}"},{"lineNumber":71,"author":{"gitId":"jingting1412"},"content":"{% endmacro %} "}],"authorContributionMap":{"jingting1412":71}},{"path":"docs/userGuide/syntax/headings.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Headings"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"You can prepend the heading text with 1-6 `#` characters to indicate headings of levels 1-6."},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"### Heading level 3"},{"lineNumber":10,"author":{"gitId":"-"},"content":"..."},{"lineNumber":11,"author":{"gitId":"-"},"content":"###### Heading level 6"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"{{ icon_info }} **MarkBind auto-generates anchors for all headings.**\u003cbr\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"If the heading text is `Foo Bar (Goo)`, the ID of the generated anchor will be `foo-bar-goo` (all lower case, special characters omitted, joined by `-`)."},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003csmall\u003eAlternative syntax, more info: https://www.markdownguide.org/basic-syntax#headings"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":24,"author":{"gitId":"-"},"content":"### Heading level 3"},{"lineNumber":25,"author":{"gitId":"-"},"content":"..."},{"lineNumber":26,"author":{"gitId":"-"},"content":"###### Heading level 6"},{"lineNumber":27,"author":{"gitId":"-"},"content":"```"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":"```markdown"},{"lineNumber":32,"author":{"gitId":"-"},"content":"### Heading level 3"},{"lineNumber":33,"author":{"gitId":"-"},"content":"..."},{"lineNumber":34,"author":{"gitId":"-"},"content":"###### Heading level 6"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":"```"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":2,"-":34}},{"path":"docs/userGuide/syntax/includes.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → Reusing Contents → Includes_]({{ baseUrl }}/userGuide/reusingContents.html#includes)\u003c/md\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Includes"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"**MarkBind has a powerful `\u003cinclude\u003e` mechanism** which allows you to create documents by combining other content fragments."},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"**You can use `\u003cinclude\u003e` tag to include another markdown or HTML document into the current document.**"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"{{ icon_example }} Including text from a `tip2.md` in another file."},{"lineNumber":17,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":18,"author":{"gitId":"-"},"content":"Tip 1. ..."},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tips/tip2.md\" /\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"Tip 3. ..."},{"lineNumber":21,"author":{"gitId":"-"},"content":"```"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"**You can `\u003cinclude\u003e` a fragment of a file** by specifying the `#fragment-id` at the end of the `src` attribute value, provided the fragment is wrapped in a `\u003cdiv\u003e`/`\u003cspan\u003e` tag with the matching `id`."},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"important\" seamless\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"Choose `\u003cdiv\u003e` over `\u003cspan\u003e` when wrapping block-level elements, to prevent invalid HTML markup which causes [hydration issues](https://vuejs.org/guide/scaling-up/ssr.html#hydration-mismatch)."},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"{{ icon_example }} Including a fragment from a file:"},{"lineNumber":35,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":36,"author":{"gitId":"-"},"content":"Some text"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"docs/tips.md#tip-1\" /\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":"Some other text"},{"lineNumber":39,"author":{"gitId":"-"},"content":"```"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"`docs/tips.md`:"},{"lineNumber":42,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":43,"author":{"gitId":"-"},"content":"..."},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"tip-1\" /\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Tip 1. ..."},{"lineNumber":46,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"Tip 2. ..."},{"lineNumber":49,"author":{"gitId":"-"},"content":"```"},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"When setting the `id` of a fragment, be careful not to clash with heading anchor IDs auto-generated by MarkBind. For example, if you have a heading `## Some Useful Tips`, MarkBind will auto-generate an ID `some-useful-tips` for that heading."},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"panels.md#script_and_styles_warning\"\u003e\u003c/include\u003e"},{"lineNumber":59,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tip.md\" boilerplate \u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"tip_body\"\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"The `\u003cinclude\u003e` mechanism can be used inside any MarkBind source file (even inside the _frontmatter_ section) but it will not work inside some _special_ files such as the `_markbind/variables.md`."},{"lineNumber":63,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"**Attributes:**"},{"lineNumber":67,"author":{"gitId":"-"},"content":"* **`src`**: specify the source file path."},{"lineNumber":68,"author":{"gitId":"-"},"content":"* **`inline`** (optional): make the included result an inline element. (wrapped in `\u003cspan\u003e` tag). e.g.,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" ```html"},{"lineNumber":70,"author":{"gitId":"-"},"content":" The title is \u003cinclude src\u003d\"../docs/summary.md#title\" inline /\u003e while ..."},{"lineNumber":71,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":72,"author":{"gitId":"-"},"content":"* **`optional`** (optional): include the file/fragment only if it exists i.e., there will be no error message if the file/fragment does not exist. e.g.,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" ```html"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"UserStories.md\" optional /\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":76,"author":{"gitId":"-"},"content":"* **`trim`** (optional): remove leading and trailing whitespace and newlines from the document before including."},{"lineNumber":77,"author":{"gitId":"-"},"content":" ```html"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"UserStories.md#epic\" trim /\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* **`omitFrontmatter`** (optional): omit the frontmatter of the file/fragment from being included (if any)."},{"lineNumber":81,"author":{"gitId":"-"},"content":" ```html"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"UserStories.md#epic\" omitFrontmatter /\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" ```"},{"lineNumber":84,"author":{"gitId":"-"},"content":""},{"lineNumber":85,"author":{"gitId":"-"},"content":"##### `\u003cinclude\u003e` Inside an Included File"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"**Although the `src` attribute of an `\u003cinclude\u003e` is given _relative_ to the current directory, it is converted to an _absolute_ value _before_ the \u003ctooltip content\u003d\"i.e., the file containing the `\u003cinclude\u003e`\"\u003ehost file\u003c/tooltip\u003e is included from another file.**"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose you have a MarkBind project with the following file structure."},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":"C:/mySite/"},{"lineNumber":94,"author":{"gitId":"-"},"content":" bookFiles/"},{"lineNumber":95,"author":{"gitId":"-"},"content":" book.md"},{"lineNumber":96,"author":{"gitId":"-"},"content":" chapter1.md"},{"lineNumber":97,"author":{"gitId":"-"},"content":" chapter2.md"},{"lineNumber":98,"author":{"gitId":"-"},"content":" reviewFiles/"},{"lineNumber":99,"author":{"gitId":"-"},"content":" review.md"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":"The `book.md`:"},{"lineNumber":102,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":103,"author":{"gitId":"-"},"content":"# My Book"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter1.md\" /\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter2.md\" /\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":"```"},{"lineNumber":107,"author":{"gitId":"-"},"content":"The `review.md`:"},{"lineNumber":108,"author":{"gitId":"-"},"content":""},{"lineNumber":109,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":110,"author":{"gitId":"-"},"content":"# My Review"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"../bookFiles/book.md\" /\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":"..."},{"lineNumber":113,"author":{"gitId":"-"},"content":"```"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":"The content of the `chapter1.md` and `chapter2.md` will be included in the `review.md` (via `\u003cinclude src\u003d\"../bookFiles/book.md\" /\u003e`) although `chapter1.md` and `chapter2.md` are not in `reviewFiles` directory. i.e., `\u003cinclude src\u003d\"chapter1.md\" /\u003e` will be interpreted as `\u003cinclude src\u003d\"c:/mySite/bookFiles/chapter1.md\" /\u003e`"},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":"In other words, **`\u003cinclude\u003e` interprets the reused code relative to the original location of the file, not the location in which it is reused.**"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":"##### Specifying Variables in an `\u003cinclude\u003e`"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":"**It is possible to include variables in an `\u003cinclude\u003e`.**"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"{{ icon_example }} Specifying `title` and `author` variables in an `\u003cinclude\u003e` tag:"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"article.md\"\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"title\"\u003eMy Title\u003c/variable\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"author\"\u003eJohn Doe\u003c/variable\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":"```"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":"In `article.md`:"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":140,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":141,"author":{"gitId":"-"},"content":"# {{ title }}\u003cbr\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":"Author: {{ author }}"},{"lineNumber":143,"author":{"gitId":"-"},"content":"```"},{"lineNumber":144,"author":{"gitId":"-"},"content":"{% endraw %}"},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"These variables work the same way as variables in `_markbind/variables.md`, except that they only apply to the included file. They allow the included file to be reused as a template, for different source files using different variable values."},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":"You can also specify include variables within the `\u003cinclude\u003e` tag itself by adding a `var-` prefix."},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"{{ icon_example }} Specifying `title` and `author` variables inline:"},{"lineNumber":154,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":155,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"article.md\" var-title\u003d\"My Title\" var-author\u003d\"John Doe\" /\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":"```"},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"If the same variable is defined in a chain of `\u003cinclude\u003e`s (e.g. `a.md` includes `b.md` includes `c.md`...), variables defined in the top-most `\u003cinclude\u003e` will take precedence. Global variables (`_markbind/variables.md`) will take precedence over any `\u003cinclude\u003e` variables."},{"lineNumber":160,"author":{"gitId":"-"},"content":"This is to allow the outer context to adapt the reused content without changing its actual content."},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Preventing cyclical errors when using multiple includes with same variables\"\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"Since outer variables override inner variables, this may result in errors if attempting to use an `include` within another `include` with the same variables."},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":"This is because the inner variable of the same name will be replaced with the outer variable, which contains the inner variable. "},{"lineNumber":167,"author":{"gitId":"-"},"content":"This inner variable is once again overridden to result in another inner variable and so on, causing a cyclical error."},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":"To fix this issue, do not use an inner `include` if they use the same variables."},{"lineNumber":170,"author":{"gitId":"-"},"content":"Instead, copy the content of the `src` file and replace the variables with the defined values."},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":"Example:"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":"```html {.line-numbers}"},{"lineNumber":175,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"boilerplate.md\" boilerplate\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":177,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"boilerplate.md\"\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":" VALUE_OF_VARIABLE"},{"lineNumber":180,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":181,"author":{"gitId":"-"},"content":" \u003c/include\u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":"```"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":"The inner `variable` would be replaced by the outer `variable` resulting in a cyclical error:"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"-"},"content":"```html {.line-numbers highlight-lines\u003d\"5-9\"}"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"boilerplate.md\" boilerplate\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":191,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"boilerplate.md\"\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":" \u003cinclude src\u003d\"boilerplate.md\"\u003e"},{"lineNumber":194,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":195,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":196,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":" \u003c/include\u003e"},{"lineNumber":198,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":199,"author":{"gitId":"-"},"content":" \u003c/include\u003e"},{"lineNumber":200,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":"```"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":"To fix this problem, copy the content of the `src` file and replace the variables with the defined values as such:"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":"```html {.line-numbers highlight-lines\u003d\"3\"}"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"boilerplate.md\" boilerplate\u003e"},{"lineNumber":208,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"variable\"\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":" Boilerplate content: VALUE_OF_VARIABLE \u003c!-- Replace {{ \u0027{{\u0027 }} variable {{ \u0027}}\u0027 }} in boilerplate with VALUE_OF_VARIABLE --\u003e"},{"lineNumber":210,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":"```"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"##### Excluding Files from Rendering as Pages"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"**MarkBind supports the exclusion of files from page generation**. For example, you can exclude files containing \u003ctooltip content\u003d\"A fragment is a piece of content that can be reused across multiple pages.\"\u003ecustom fragments\u003c/tooltip\u003e that are only meant to be used in `\u003cinclude\u003e`."},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"Note: This example below is assuming that you have included the following glob pattern in the `site.json` file:"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"```js"},{"lineNumber":226,"author":{"gitId":"-"},"content":"{"},{"lineNumber":227,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":228,"author":{"gitId":"-"},"content":" {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" \"glob\": \"*.md\","},{"lineNumber":230,"author":{"gitId":"-"},"content":" \"layout\": \"normal\","},{"lineNumber":231,"author":{"gitId":"-"},"content":" \"searchable\": \"yes\""},{"lineNumber":232,"author":{"gitId":"-"},"content":" }"},{"lineNumber":233,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":234,"author":{"gitId":"-"},"content":"}"},{"lineNumber":235,"author":{"gitId":"-"},"content":"```"},{"lineNumber":236,"author":{"gitId":"-"},"content":""},{"lineNumber":237,"author":{"gitId":"-"},"content":"Else, if each page is included individually, there is no need to exclude the fragments as they will not be included in the page generation."},{"lineNumber":238,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose you have a fragment file `content-fragment.md` and you want to include it in some pages of the site `course` without rendering `content-fragment.md` as a page."},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":"C:/course/"},{"lineNumber":245,"author":{"gitId":"-"},"content":" content-fragment.md"},{"lineNumber":246,"author":{"gitId":"-"},"content":" index.md"},{"lineNumber":247,"author":{"gitId":"-"},"content":" reading.md"},{"lineNumber":248,"author":{"gitId":"-"},"content":" site.json"},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":"In `reading.md` (note how it reuses content from the `content-fragment.md`):"},{"lineNumber":252,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":253,"author":{"gitId":"-"},"content":"# Week 1 Reading:"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"content-fragment.md\" /\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":"```"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":"In `site.json` we then exclude the fragment from the page generation with [pagesExclude](../siteJsonFile.html#pagesexclude):"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"```json"},{"lineNumber":260,"author":{"gitId":"-"},"content":"..."},{"lineNumber":261,"author":{"gitId":"-"},"content":"\"pagesExclude\": ["},{"lineNumber":262,"author":{"gitId":"-"},"content":" \"**/*-fragment.md\""},{"lineNumber":263,"author":{"gitId":"-"},"content":"],"},{"lineNumber":264,"author":{"gitId":"-"},"content":"..."},{"lineNumber":265,"author":{"gitId":"-"},"content":"```"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"tip.md\" boilerplate \u003e"},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"tip_body\"\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":"You may use any custom name you wish for your fragments but be sure to update the `pagesExclude` list with the appropriate glob pattern."},{"lineNumber":273,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":274,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":"\u003chr\u003e\u003c!-- \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d --\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":"### Using Boilerplate Files"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":"**If you find yourself duplicating a \u003ctooltip content\u003d\"code that needs to stay relative to the directory in which it used\"\u003e_boilerplate code_\u003c/tooltip\u003e fragment in multiple places of your code base, you can use a `boilerplate` file to avoid such duplication.** Note that you cannot use a normal `\u003cinclude\u003e` in this case because the code included using a normal `\u003cinclude\u003e` stays relative to the original location while boilerplate code needs to be interpreted relative to the location it is being used."},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose you have a MarkBind project with the following file structure."},{"lineNumber":285,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":286,"author":{"gitId":"-"},"content":"C:/mySite/"},{"lineNumber":287,"author":{"gitId":"-"},"content":" chapter1/"},{"lineNumber":288,"author":{"gitId":"-"},"content":" chapter.md"},{"lineNumber":289,"author":{"gitId":"-"},"content":" text.md"},{"lineNumber":290,"author":{"gitId":"-"},"content":" exercises.md"},{"lineNumber":291,"author":{"gitId":"-"},"content":" chapter2/"},{"lineNumber":292,"author":{"gitId":"-"},"content":" chapter.md"},{"lineNumber":293,"author":{"gitId":"-"},"content":" text.md"},{"lineNumber":294,"author":{"gitId":"-"},"content":" exercises.md"},{"lineNumber":295,"author":{"gitId":"-"},"content":" book.md"},{"lineNumber":296,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":297,"author":{"gitId":"-"},"content":"The `book.md`:"},{"lineNumber":298,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":299,"author":{"gitId":"-"},"content":"# My Book"},{"lineNumber":300,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter1/chapter.md\" /\u003e"},{"lineNumber":301,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter2/chapter.md\" /\u003e"},{"lineNumber":302,"author":{"gitId":"-"},"content":"```"},{"lineNumber":303,"author":{"gitId":"-"},"content":"The `chapter1/chapter.md`:"},{"lineNumber":304,"author":{"gitId":"-"},"content":""},{"lineNumber":305,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":306,"author":{"gitId":"-"},"content":"## Text"},{"lineNumber":307,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"text.md\" /\u003e"},{"lineNumber":308,"author":{"gitId":"-"},"content":"## Exercises"},{"lineNumber":309,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"exercises.md\" /\u003e"},{"lineNumber":310,"author":{"gitId":"-"},"content":"```"},{"lineNumber":311,"author":{"gitId":"-"},"content":"The `chapter2/chapter.md`:"},{"lineNumber":312,"author":{"gitId":"-"},"content":""},{"lineNumber":313,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":314,"author":{"gitId":"-"},"content":"## Text"},{"lineNumber":315,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"text.md\" /\u003e"},{"lineNumber":316,"author":{"gitId":"-"},"content":"## Exercises"},{"lineNumber":317,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"exercises.md\" /\u003e"},{"lineNumber":318,"author":{"gitId":"-"},"content":"```"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":"As you can see, both `chapter.md` files are exactly the same. If we were to use only one of the `chapter.md` files and `\u003cinclude\u003e` it twice in the `book.md`, we\u0027ll end up with the same chapter content duplicated twice, which is not what we want. In other words, `chapter.md` contains boilerplate code that needs to be interpreted relative to where it is applied, once relative to `chapter1` directory and once relative to `chapter2` directory."},{"lineNumber":321,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":322,"author":{"gitId":"-"},"content":""},{"lineNumber":323,"author":{"gitId":"-"},"content":"To use a code fragment as a boilerplate file,"},{"lineNumber":324,"author":{"gitId":"-"},"content":"1. Put the code in a file inside the `_markbind/boilerplates` directory."},{"lineNumber":325,"author":{"gitId":"-"},"content":"2. `\u003cinclude\u003e` the file _as if_ a copy of it exists in any directory you want it to applied, but add the `boilerplate` attribute to the `\u003cinclude\u003e` tag."},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":"{{ icon_example }} Here\u0027s how you can use a boilerplate file to avoid duplicating the `chapter.md`:"},{"lineNumber":330,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":331,"author":{"gitId":"-"},"content":"C:/mySite/"},{"lineNumber":332,"author":{"gitId":"-"},"content":" _markbind/boilerplates/"},{"lineNumber":333,"author":{"gitId":"-"},"content":" chapter.md"},{"lineNumber":334,"author":{"gitId":"-"},"content":" chapter1/"},{"lineNumber":335,"author":{"gitId":"-"},"content":" text.md"},{"lineNumber":336,"author":{"gitId":"-"},"content":" exercises.md"},{"lineNumber":337,"author":{"gitId":"-"},"content":" chapter2/"},{"lineNumber":338,"author":{"gitId":"-"},"content":" text.md"},{"lineNumber":339,"author":{"gitId":"-"},"content":" exercises.md"},{"lineNumber":340,"author":{"gitId":"-"},"content":" book.md"},{"lineNumber":341,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":342,"author":{"gitId":"-"},"content":"The `book.md`:"},{"lineNumber":343,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":344,"author":{"gitId":"-"},"content":"# My Book"},{"lineNumber":345,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter1/chapter.md\" boilerplate /\u003e"},{"lineNumber":346,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter2/chapter.md\" boilerplate /\u003e"},{"lineNumber":347,"author":{"gitId":"-"},"content":"```"},{"lineNumber":348,"author":{"gitId":"-"},"content":"The `_markbind/boilerplates/chapter.md`:"},{"lineNumber":349,"author":{"gitId":"-"},"content":""},{"lineNumber":350,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":351,"author":{"gitId":"-"},"content":"## Text"},{"lineNumber":352,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"text.md\" /\u003e"},{"lineNumber":353,"author":{"gitId":"-"},"content":"## Exercises"},{"lineNumber":354,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"exercises.md\" /\u003e"},{"lineNumber":355,"author":{"gitId":"-"},"content":"```"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":"Consider the line `\u003cinclude src\u003d\"chapter1/chapter.md\" boilerplate /\u003e`. Note how you can use `src\u003d\"chapter1/chapter.md\"` even though there is no such file. MarkBind will use the `chapter.md` file from `/_markbind/boilerplates/` but interpret it as if the file exists in the `chapter1` directory (i.e., interpret the `chapter.md` code relative to the `chapter1` directory)."},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":"Similarly, `\u003cinclude src\u003d\"chapter2/chapter.md\" boilerplate /\u003e` interprets the `chapter.md` relative to the `chapter2` directory."},{"lineNumber":360,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":"If you have many boilerplate files, you can organize them into directories inside the `_markbind` directory. When using such boilerplate files, you need to replace `boilerplate` attribute with `boilerplate\u003d\"\u003cpath to file relative to _markbind/boilerplates\u003e\"`."},{"lineNumber":363,"author":{"gitId":"-"},"content":""},{"lineNumber":364,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":"{{ icon_example }} Suppose the `chapter.md` is places in a `book` directory:"},{"lineNumber":367,"author":{"gitId":"-"},"content":"\u003ctree\u003e"},{"lineNumber":368,"author":{"gitId":"-"},"content":"C:/mySite/"},{"lineNumber":369,"author":{"gitId":"-"},"content":" _markbind/boilerplates/"},{"lineNumber":370,"author":{"gitId":"-"},"content":" book/"},{"lineNumber":371,"author":{"gitId":"-"},"content":" chapter.md"},{"lineNumber":372,"author":{"gitId":"-"},"content":"\u003c/tree\u003e"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":"It needs to be used as follows:"},{"lineNumber":375,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":376,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter1/chapter.md\" boilerplate\u003d\"book/chapter.md\" /\u003e"},{"lineNumber":377,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"chapter2/chapter.md\" boilerplate\u003d\"book/chapter.md\" /\u003e"},{"lineNumber":378,"author":{"gitId":"-"},"content":"```"},{"lineNumber":379,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":""},{"lineNumber":382,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":383,"author":{"gitId":"-"},"content":""},{"lineNumber":384,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":385,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"foo.md#bar\" boilerplate inline trim\u003e"},{"lineNumber":386,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"x\"\u003e5\u003c/variable\u003e"},{"lineNumber":387,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":388,"author":{"gitId":"-"},"content":"```"},{"lineNumber":389,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":387,"yiwen101":2}},{"path":"docs/userGuide/syntax/lists.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Lists"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"****Unordered lists:****"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"* Item 1"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * Sub item 1.1"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Sub item 1.2\u003cbr\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" Second line"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * Sub item 1.2.1"},{"lineNumber":14,"author":{"gitId":"-"},"content":"* Item 2"},{"lineNumber":15,"author":{"gitId":"-"},"content":"* Item 3"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"****Customizing the Unordered list appearance:****"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"**To customize unordered lists\u0027 icons, add the configuration `{icon\u003d\"icon-name\"}` and/or `{text\u003d\"text\"}` after a specific list item.**"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"* Item 1 { text\u003d\"Step 1 :+1:\" icon\u003d\"glyphicon-education\" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":"* Item 2 { text\u003d\"Step 2\" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Item 2.1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Item 2.2"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Item 3 { text\u003d\"Step 3\" }"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Item 3.1 "},{"lineNumber":32,"author":{"gitId":"-"},"content":"* Item 4 { text\u003d\"\\`PR`\" icon\u003d\"octicon-git-pull-request\" }"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Item 4.1 { icon\u003d\"mif-perm-media\" }"},{"lineNumber":34,"author":{"gitId":"-"},"content":"* Item 5 { text\u003d\"Step 5\" icon\u003d\"glyphicon-education\" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Item 5.1 { icon\u003d\"notebook_with_decorative_cover\" }"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/variable\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003cbox type\u003dinfo seamless\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"Customization will be carried over to the other items within the **same level of the list**."},{"lineNumber":42,"author":{"gitId":"-"},"content":"Example: "},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"glyphicon-education\" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * Item 1.1"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* Item 2 "},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/variable\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"The customised icon appears for Item 2 but not for Item 1.1."},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"Hence, if you customize any item on a certain level, you must also **customize the first item on that level**. If not, the list will revert to its uncustomized form."},{"lineNumber":55,"author":{"gitId":"-"},"content":"If you wish to remove the customization from the following levels, you can set `text` and/or `icon` to be an empty string `\"\"`. "},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":"Example:"},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"glyphicon-education\" text\u003d\"Only for this bullet\" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":"* Item 2 { icon\u003d\"\" }"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c/variable\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003c/include\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":"You can use any of the [icons](../formattingContents.html#icons) supported by MarkBind. If an item has a specified icon, that icon will be used for it and for subsequent items at that level."},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"Markdown can also be used in texts."},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cbox type\u003dwarning seamless\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":"You may need to add escape characters when using special characters for Markdown in text. "},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":"**You can add an icon or text that only applies to a specific item by using the `once` attribute.**"},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":"* Item 1 { icon\u003d\"glyphicon-education\" }"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":"* Item 2 { icon\u003d\"fas-code-branch\" once\u003dtrue }"},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":" * Item 2.1"},{"lineNumber":83,"author":{"gitId":"KevinEyo1"},"content":" * Item 2.2"},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":"* Item 3"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":" \u003c/variable\u003e"},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":"\u003c/include\u003e"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":"Subsequent items at the same level will not inherit icons or texts with the `once` attribute and will instead inherit the icons or texts before it."},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":"The `once` attribute also applies to all other attributes such as `i-size` and `t-size` as seen below."},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":"* Item 1 { icon\u003d\"glyphicon-education\" i-size\u003d\"40px\" i-class\u003d\"text-primary\" }"},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":"* Item 2 { i-size\u003d\"25px\" once\u003dtrue }"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item 2.1"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":"* Item 3"},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":" \u003c/variable\u003e"},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":"\u003c/include\u003e"},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":"**You can adjust the icon and text\u0027s size by using the `i-size` and `t-size` attribute respectively.**"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"fas-file-code\" i-size\u003d\"35px\" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":"* Item 2 { icon\u003d\"fas-file-code\" i-size\u003d\"4rem\" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"* Item 3 { icon\u003d\"fas-file-code\" i-size\u003d\"5em\" }"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":""},{"lineNumber":115,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"* Item 1 { text\u003d\"Step 1\" t-size\u003d\"35px\" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":"* Item 2 { text\u003d\"Step 2\" t-size\u003d\"4rem\" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"* Item 3 { text\u003d\"Step 3\" t-size\u003d\"5em\" }"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"You can utilize any [CSS size unit](https://www.w3schools.com/cssref/css_units.php)."},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"**You can also use images as icons.**"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"/images/deer.jpg\" i-width\u003d\"30px\" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"* Item 2 { i-width\u003d\"60px\" i-height\u003d\"44px\" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":"* Item 3 { i-width\u003d\"90px\" i-height\u003d\"61px\" }"},{"lineNumber":137,"author":{"gitId":"-"},"content":""},{"lineNumber":138,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"If either the `i-width` or the `i-height` of an image is not specified, the unspecified dimension will adjust to maintain the image\u0027s original aspect ratio. For example, for an image of size 800x600 (4:3), if `i-width` is set to 400px, its height will be 300px."},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":"**The icon and text\u0027s appearance can be further customized by adding a `i-class` and `t-class` attribute respectively.**"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example-markbind\"\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"/images/deer.jpg\" text\u003d\"Deer\" i-width\u003d\"60px\" height\u003d\"17px\" i-class\u003d\"rounded\" t-class\u003d\"text-warning my-2\" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":"* Item 2 { t-class\u003d\"text-info my-2\" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":" * Item 2.1 { icon\u003d\"fas-question-circle\" i-class\u003d\"badge rounded-pill my-1 bg-success text-white\" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * Item 2.2"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * Item 2.3 { i-class\u003d\"badge rounded-pill my-1 bg-primary text-white\"}"},{"lineNumber":155,"author":{"gitId":"-"},"content":"* Item 3 { t-class\u003d\"text-primary my-2\" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * Item 3.1 "},{"lineNumber":157,"author":{"gitId":"-"},"content":" * Item 3.2 { icon\u003d\"fas-question-circle\" i-class\u003d\"badge rounded my-1 bg-danger text-white\" }"},{"lineNumber":158,"author":{"gitId":"-"},"content":" * Item 3.3 "},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":" "},{"lineNumber":162,"author":{"gitId":"-"},"content":"**The spacing between the icon and the content can be customized by using a `i-spacing` attribute.**"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"+1\" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* Item 2 { i-spacing\u003d\"1rem\" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* Item 3 { i-spacing\u003d\"2rem\" }"},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003cbox type\u003dtip seamless\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":"Similar to the `icon` and `text` attribute, other icon attributes such as `i-class`, `i-width`, `i-height`, `i-spacing`, `t-size` and `t-class` apply for subsequent list items at the same level, until they are overridden by the same attribute. For example, Item 2.3\u0027s `i-class` overrides Item 2.1\u0027s and applies up to Item 3.1."},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":"**The spacing between the icon and the content can be customized by using a `i-spacing` attribute.**"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":"* Item 1 { icon\u003d\"+1\" text\u003d\"Yay\" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":"* Item 2 { i-spacing\u003d\"1rem\" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":"* Item 3 { i-spacing\u003d\"2rem\" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":188,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":"**You can apply Markdown\u0027s heading and paragraph syntax within the list.**"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":"* #### Heading 1: Overview {icon\u003d\"/images/overview-d.png\" i-width\u003d\"65px\" i-class\u003d\"rounded\" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":" Content 1: This section provides a summary of the document or topic. "},{"lineNumber":201,"author":{"gitId":"-"},"content":" It sets the context and purpose of the content to follow."},{"lineNumber":202,"author":{"gitId":"-"},"content":"* #### Heading 2: Detailed Description { icon\u003d\"/images/detailed-d.png\" i-width\u003d\"65px\" i-class\u003d\"rounded\" }"},{"lineNumber":203,"author":{"gitId":"-"},"content":" Content 2: This section delves deeper into the topic, offering comprehensive information and detailed explanations."},{"lineNumber":204,"author":{"gitId":"-"},"content":" It might also include evidence, examples, or justifications."},{"lineNumber":205,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":206,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":"Icon specifications should be attached only to the first element of a list item (for the example above, the icon specification should be attached to the heading, not the content below the heading)."},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":"****Ordered lists:****"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":214,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":"1. Item 1"},{"lineNumber":216,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":217,"author":{"gitId":"-"},"content":" 2. Sub item 1.2"},{"lineNumber":218,"author":{"gitId":"-"},"content":"2. Item 2"},{"lineNumber":219,"author":{"gitId":"-"},"content":"3. Item 3"},{"lineNumber":220,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":224,"author":{"gitId":"-"},"content":"You can also start an ordered list at a particular number by changing the"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003cpopover\u003e"},{"lineNumber":226,"author":{"gitId":"-"},"content":"first number"},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003ctemplate slot\u003d\"content\"\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":"\u003cdiv style\u003d\"text-align: center; margin-bottom: 5px;\"\u003e{{ icon_example }}\u003c/div\u003e"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputSeparate.md\" boilerplate\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":232,"author":{"gitId":"-"},"content":"10. Item 1"},{"lineNumber":233,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":234,"author":{"gitId":"-"},"content":" 1. Sub item 1.2"},{"lineNumber":235,"author":{"gitId":"-"},"content":"1. Item 2"},{"lineNumber":236,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":"10. Item 1"},{"lineNumber":239,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":240,"author":{"gitId":"-"},"content":" 1. Sub item 1.2"},{"lineNumber":241,"author":{"gitId":"-"},"content":"1. Item 2"},{"lineNumber":242,"author":{"gitId":"-"},"content":"{.ps-0 .ms-0}"},{"lineNumber":243,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":245,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":246,"author":{"gitId":"-"},"content":"\u003c/popover\u003e!"},{"lineNumber":247,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003csmall\u003eMore info on above list types: https://www.markdownguide.org/basic-syntax#lists\u003c/small\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":"****Task lists**** (from GFMD):"},{"lineNumber":252,"author":{"gitId":"-"},"content":""},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example-gfmd\"\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":"- [ ] Item 1"},{"lineNumber":258,"author":{"gitId":"-"},"content":" - [ ] Sub item 1.1"},{"lineNumber":259,"author":{"gitId":"-"},"content":" - [x] Sub item 1.2"},{"lineNumber":260,"author":{"gitId":"-"},"content":"- [x] Item 2"},{"lineNumber":261,"author":{"gitId":"-"},"content":"- [ ] Item 3"},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":264,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":"****Radio-button lists:****"},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"main-example-markbind\"\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":270,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003emarkdown\u003c/variable\u003e"},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":"- ( ) Item 1"},{"lineNumber":273,"author":{"gitId":"-"},"content":"- ( ) Item 2"},{"lineNumber":274,"author":{"gitId":"-"},"content":"- (x) Item 3"},{"lineNumber":275,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":""},{"lineNumber":281,"author":{"gitId":"-"},"content":"```markdown"},{"lineNumber":282,"author":{"gitId":"-"},"content":"1. Item 1"},{"lineNumber":283,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":284,"author":{"gitId":"-"},"content":" 1. Sub item 1.2"},{"lineNumber":285,"author":{"gitId":"-"},"content":"* Item 2"},{"lineNumber":286,"author":{"gitId":"-"},"content":" * item 2.1"},{"lineNumber":287,"author":{"gitId":"-"},"content":"- [ ] Item 3"},{"lineNumber":288,"author":{"gitId":"-"},"content":"- [x] Item 4"},{"lineNumber":289,"author":{"gitId":"-"},"content":"- ( ) Item 5"},{"lineNumber":290,"author":{"gitId":"-"},"content":"```"},{"lineNumber":291,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":292,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":293,"author":{"gitId":"-"},"content":""},{"lineNumber":294,"author":{"gitId":"-"},"content":"1. Item 1"},{"lineNumber":295,"author":{"gitId":"-"},"content":" 1. Sub item 1.1"},{"lineNumber":296,"author":{"gitId":"-"},"content":" 1. Sub item 1.2"},{"lineNumber":297,"author":{"gitId":"-"},"content":"* Item 2"},{"lineNumber":298,"author":{"gitId":"-"},"content":" * item 2.1"},{"lineNumber":299,"author":{"gitId":"-"},"content":"- [ ] Item 3"},{"lineNumber":300,"author":{"gitId":"-"},"content":"- [x] Item 4"},{"lineNumber":301,"author":{"gitId":"-"},"content":"- ( ) Item 5"},{"lineNumber":302,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"KevinEyo1":27,"-":275}},{"path":"docs/userGuide/syntax/navBars.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Navbars"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"**Navbar allows visitors of your website to navigate through pages easily.**"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"**Navbars support link highlighting; link highlighting can be customised by specifying rules.**"},{"lineNumber":6,"author":{"gitId":"-"},"content":"- Define `default-highlight-on` in `\u003cnavbar\u003e` to specify fallback highlight rules."},{"lineNumber":7,"author":{"gitId":"-"},"content":"- Define `data-highlight` in `\u003ca\u003e` tags with the class `nav-link` or `dropdown-item` to specify individual highlight rules."},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cmarkdown\u003e"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"Note: **Navbars** should be placed within a [header file]({{ baseUrl }}/userGuide/tweakingThePageStructure.html#sticking-the-header-to-the-top) to ensure that they are correctly positioned at the top of the page, above the [site navigation]({{ baseUrl }}/userGuide/tweakingThePageStructure.html#constructing-a-page-navigation-menu) and [page navigation]({{ baseUrl }}/userGuide/tweakingThePageStructure.html#constructing-a-page-navigation-menu) menus."},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003c/markdown\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"primary\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"dark\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"light\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":65,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":66,"author":{"gitId":"-"},"content":"type | `String` | `primary` | Supports: `primary`, `dark`, `light`, `none`."},{"lineNumber":67,"author":{"gitId":"-"},"content":"default-highlight-on | `String` | `sibling-or-child` | Supports: `sibling-or-child`, `sibling`, `child`, `exact`, `none`. Specifies link highlight rules for navbars."},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"If you wish to further customize your navbar beyond the primary, dark, and light theme colors, specify the `type\u003d\"none\"` attribute and insert your own custom styles via the `add-class` attribute. You can \u003ctrigger trigger\u003d\"click\" for\u003d\"modal:built-in-bg\"\u003euse built-in background styles\u003c/trigger\u003e or [insert your own defined CSS classes](/userGuide/components/advanced.md#inserting-custom-classes-into-components)."},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003cmodal header\u003d\"Built-in background styles\" id\u003d\"modal:built-in-bg\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003cmd\u003eFor instance, Bootstrap supports `.bg-danger`, `bg-info`, `bg-primary`, `bg-success`, `bg-warning` as background colors.\u003c/md\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"\u003cmd\u003eIn `{your-site}/_markbind/headers/header.md`, you can change `\u003cnavbar type\u003d\"dark/primary/light\"\u003e` to `\u003cnavbar type\u003d\"none\" add-class\u003d\"bg-warning/danger/info/primary/success\"\u003e` to apply Bootstrap background styles.\u003c/md\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003c/modal\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":"****Navbar Link Highlighting****"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":83,"author":{"gitId":"-"},"content":"{% include \"_markbind/layouts/headers/header.md\" %}"},{"lineNumber":84,"author":{"gitId":"-"},"content":"```"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":"****Highlight Options****"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":"Name | Description"},{"lineNumber":89,"author":{"gitId":"-"},"content":"--- | ---"},{"lineNumber":90,"author":{"gitId":"-"},"content":"`child` | Highlights link if URL in address bar is a child of the link. E.g `foo/bar` is a child of `foo`."},{"lineNumber":91,"author":{"gitId":"-"},"content":"`sibling` | Highlights link if URL in address bar is a sibling of the link. E.g `foo/bar` and `foo/bear` are siblings."},{"lineNumber":92,"author":{"gitId":"-"},"content":"`sibling-or-child` | Highlights link if URL in address bar is a sibling or child of the link."},{"lineNumber":93,"author":{"gitId":"-"},"content":"`exact` | Highlights link if URL in address bar exactly matches link."},{"lineNumber":94,"author":{"gitId":"-"},"content":"`none` | No highlighting."},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"primary\"\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":"```"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"primary\"\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"dark\"\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":140,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":141,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":"\u003cnavbar type\u003d\"light\"\u003e"},{"lineNumber":147,"author":{"gitId":"-"},"content":" \u003c!-- Brand as slot --\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":" \u003c!-- You can use dropdown component --\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":" \u003cdropdown header\u003d\"Dropdown\" class\u003d\"nav-link\"\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"#navbars\" class\u003d\"dropdown-item\"\u003eOption\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":" \u003c/dropdown\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":" \u003c!-- For right positioning use slot --\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003eFork...\u003c/a\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"****Mobile page and site navigation menus****"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"The navbar component also provides access to MarkBind\u0027s [site navigation]({{ baseUrl }}/userGuide/components/navigation.html#site-navigation-menus) and [page navigation]({{ baseUrl }}/userGuide/components/navigation.html#page-navigation-menus) menu **components** if used in the page\u0027s [layout](../tweakingThePageStructure.md#layouts). No additional setup is required!"},{"lineNumber":165,"author":{"gitId":"-"},"content":""},{"lineNumber":166,"author":{"gitId":"-"},"content":"If you are viewing the documentation on a larger device, resize the window to see what it looks like."},{"lineNumber":167,"author":{"gitId":"-"},"content":""},{"lineNumber":168,"author":{"gitId":"-"},"content":"Alternatively, if you want to display \u003ctooltip content\u003d\"e.g. adding an image to the site nav\"\u003eadditional content\u003c/tooltip\u003e in these navigation menus, the navbar is also able to \"pull in\" any **container element** with a HTML `id` of `\"site-nav\"` or `\"page-nav\"`. You may refer to the [layouts](../tweakingThePageStructure.md#layouts) section for an example."},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":"The navbar component auto-detects if the MarkBind\u0027s navigation components or your element containers has any \u003ctooltip content\u003d\"`\u003ca\u003e` tags in particular\"\u003elinks\u003c/tooltip\u003e.\u003cbr\u003e"},{"lineNumber":173,"author":{"gitId":"-"},"content":"If absent, the navigation buttons to open the menus are _automatically hidden_."},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":"****Mobile navigation menu button placement****"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"If you wish to alter the button placement on the navbar, you may use the `\u003csite-nav-button /\u003e` and `\u003cpage-nav-button /\u003e` components in the `lower-navbar` slot."},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":"By default, if the `lower-navbar` slot is not specified, the site and page navigation buttons are simply placed as such."},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cnavbar\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":" \u003c!-- Any normal navbar items --\u003e"},{"lineNumber":185,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"/\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eMarkBind\u003c/a\u003e"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"/userGuide/components/navigation.html#navbars\" class\u003d\"nav-link\"\u003eHighlighted Link\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":187,"author":{"gitId":"-"},"content":" \u003c!-- Use slot to wrap the buttons in the lower navbar --\u003e"},{"lineNumber":188,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"lower-navbar\" class\u003d\"nav-menu-container\"\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \u003csite-nav-button /\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":" \u003cpage-nav-button /\u003e"},{"lineNumber":191,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":"\u003c/navbar\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":"```"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"Component | Description"},{"lineNumber":196,"author":{"gitId":"-"},"content":"--- | ---"},{"lineNumber":197,"author":{"gitId":"-"},"content":"`page-nav-button` | Pulls any element with an identifier, `id\u003dpage-nav` into the menu. If no such element exists, it pulls any [page navigation menu]({{ baseUrl }}/userGuide/components/navigation.html#page-navigation-menus) used in the layout."},{"lineNumber":198,"author":{"gitId":"-"},"content":"`site-nav-button` | Pulls any element with an identifier, `id\u003dsite-nav` into the menu. If no such element exists, it pulls all [site navigation menu components]({{ baseUrl }}/userGuide/components/navigation.html#site-navigation-menus) used in the layout."},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"****Styling the mobile page and site navigation menus****"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":"You may also wish to style your navigation content differently on mobile view."},{"lineNumber":203,"author":{"gitId":"-"},"content":"By default, MarkBind already provides some reasonable overrides for smaller screens, applied over any styles you might have for the mobile navigation content identified above."},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":"```css {heading\u003d\"CSS class attached to the root navigation element\"}"},{"lineNumber":206,"author":{"gitId":"-"},"content":".mb-mobile-nav {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" display: block !important;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" margin: 0 !important;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" border: none !important;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" padding: 10px !important;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" width: 100% !important;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" max-width: 100% !important;"},{"lineNumber":213,"author":{"gitId":"-"},"content":"}"},{"lineNumber":214,"author":{"gitId":"-"},"content":"```"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":"If you require greater customisation, you may simply compose the respective selectors with the `.mb-mobile-nav` element."},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":"{{ icon_example }}"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"```css {heading\u003d\"\"}"},{"lineNumber":221,"author":{"gitId":"-"},"content":"#site-nav.mb-mobile-nav {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" /* Be sure to add the !important css rule when overriding .mb-mobile-nav\u0027s properties! */"},{"lineNumber":223,"author":{"gitId":"-"},"content":" border: 1px solid black !important;"},{"lineNumber":224,"author":{"gitId":"-"},"content":" /* For other properties, there is no need. */"},{"lineNumber":225,"author":{"gitId":"-"},"content":" color: red;"},{"lineNumber":226,"author":{"gitId":"-"},"content":"}"},{"lineNumber":227,"author":{"gitId":"-"},"content":"```"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"Refer to the [layouts](../tweakingThePageStructure.md) section to find out how to add custom CSS files to a page!"},{"lineNumber":232,"author":{"gitId":"-"},"content":"\u003c/box\u003e"}],"authorContributionMap":{"-":231,"yiwen101":1}},{"path":"docs/userGuide/syntax/pageNavigationMenus.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Page Navigation Menus"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword d-none\"\u003eprint page nav as table of content\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"content\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"**A _Page Navigation Menu_ (\u003d\u003d_pageNav_ for short\u003d\u003d) displays a list of the current page\u0027s headings.** Page navigation menus are typically configured in [layouts]({{baseUrl}}/userGuide/tweakingThePageStructure.html#layouts), but can also be utilized in individual pages."},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"****Adding a pageNav****"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Specify the smallest heading level you want to be included** within the `\u003cfrontmatter\u003e` of a page with \u003ctooltip content\u003d\"The value `default` will use `headingIndexingLevel` within `site.json`.\"\u003e`\"default\"`\u003c/tooltip\u003e or a \u003ctooltip content\u003d\"HTML defines six levels of headings, numbered from \u003cbr\u003e`1 to 6`.\"\u003e`heading level`\u003c/tooltip\u003e."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" The `default` level uses the [`headingIndexingLevel` property]({{baseUrl}}/userGuide/siteJsonFile.html#headingindexinglevel) of your site configuration file."},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/box\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"2. **(Optional) You may also specify a page navigation title** within `\u003cfrontmatter\u003e` that will be placed at the top of the page navigation menu."},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"3. **Position the page navigation menu** within your layout using the `\u003cpage-nav /\u003e` component."},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"4. **(Optional) To make pageNav accessible on smaller screens, you can use the `\u003cpage-nav-button /\u003e` component in the [navbar]({{baseUrl}}/userGuide/components/navigation.html#navbars).**"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"5. **(Optional) To make pageNav available on print, you can position the page navigation menu on individual pages with the `\u003cpage-nav-print /\u003e` component.**"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Additional details on printing pageNav**\" type\u003d\"seamless\" class\u003d\"ms-4\" expanded\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"You can specify the location of the page navigation menu on print by using either of the following syntaxes:"},{"lineNumber":29,"author":{"gitId":"-"},"content":"- `\u003cpage-nav-print /\u003e`"},{"lineNumber":30,"author":{"gitId":"-"},"content":"- `\u003cpage-nav-print\u003e\u003c/page-nav-print\u003e`"},{"lineNumber":31,"author":{"gitId":"-"},"content":" - This is useful if you want to include a custom title (or any other content) before the page navigation menu. For example, `\u003cpage-nav-print\u003eTable of Contents\u003c/page-nav-print\u003e`"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"You can specify multiple `\u003cpage-nav-print /\u003e` components in a page and they do not have to be at the top of the page. They also do not appear when viewed on a browser."},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"{{ icon_example }}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"In the page that you want to have page navigation printed (i.e. to serve as a table of content when viewed on PDFs), use the `\u003cpage-nav-print /\u003e` component to position the pageNav like so:"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"indented\"\u003e"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" pageNav: 2"},{"lineNumber":43,"author":{"gitId":"-"},"content":" pageNavTitle: \"Chapters of This Page\""},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"# Overview"},{"lineNumber":49,"author":{"gitId":"-"},"content":"Content of the page..."},{"lineNumber":50,"author":{"gitId":"-"},"content":"```"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"To view the pageNav on print, open the print preview of the page using the browser\u0027s print function."},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"If you are using Chrome, you can right-click on the page and select \"Print\" to open the print preview."},{"lineNumber":59,"author":{"gitId":"-"},"content":"You can try it out by going to our [CLI Commands page]({{baseUrl}}/userGuide/cliCommands.html) and printing it."},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"You can see an example of a Page Navigation Bar \u003d\u003don the right side\u003d\u003d of \u003ca target\u003d\"_blank\" href\u003d\"{{ baseUrl }}/userGuide/formattingContents.html\"\u003ethis page\u003c/a\u003e."},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":4,"KevinEyo1":1,"-":64}},{"path":"docs/userGuide/syntax/panels.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% from \"userGuide/components/advanced.md\" import slot_info_trigger %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Panels"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"**Panel is a flexible container that supports collapsing and expanding its content. It is expandable by default.**"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This is your header for a Panel, click me to expand!\"\u003e"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"\u003cmarkdown\u003e_markdown_\u003c/markdown\u003e"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":"plain text ..."},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"**With `minimized` attribute, panel is minimized into an inline block element. The `alt` attribute is for you to specify the minimized block header.**"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"How to cultivate a tomato plant at home\" alt\u003d\"Tomatoes\" minimized\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" Lorem ipsum ..."},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"**With `expanded` attribute, you can set the panels to be expanded when loaded in.**"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Have your readers click less to see the Panel\u0027s contents\" expanded\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Lorem ipsum ..."},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"**With the `expand-headerless` attribute, you can hide the panel header when it is expanded.**"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This header will only show when the Panel is collapsed\" expand-headerless\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Lorem ipsum ..."},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"**With the `peek` attribute, you may showcase part of your content without expanding the panel.**"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Give your readers a peek of the content without expanding Panel\" peek\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore"},{"lineNumber":57,"author":{"gitId":"-"},"content":" magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"},{"lineNumber":58,"author":{"gitId":"-"},"content":" consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."},{"lineNumber":59,"author":{"gitId":"-"},"content":" Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."},{"lineNumber":60,"author":{"gitId":"-"},"content":" Curabitur ornare ipsum eu ex congue egestas. Maecenas pretium nibh sed enim ornare finibus. Mauris quis metus "},{"lineNumber":61,"author":{"gitId":"-"},"content":" facilisis, mattis tellus nec, pulvinar mi. Quisque at vehicula lectus. Ut ac lacus mi. Donec mattis nec velit "},{"lineNumber":62,"author":{"gitId":"-"},"content":" eget tincidunt. Maecenas vel mauris mattis nisl tempor sollicitudin. Orci varius natoque penatibus et magnis "},{"lineNumber":63,"author":{"gitId":"-"},"content":" dis parturient montes, nascetur ridiculus mus. Duis tincidunt diam eu dolor pellentesque, eget dignissim tortor "},{"lineNumber":64,"author":{"gitId":"-"},"content":" pellentesque. "},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"**Panel provides many types that change its appearance.**"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**light type panel (DEFAULT)**\" type\u003d\"light\" minimized\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**dark type panel**\" type\u003d\"dark\" minimized\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**primary type panel**\" type\u003d\"primary\" minimized\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**secondary type panel**\" type\u003d\"secondary\" minimized\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**info type panel**\" type\u003d\"info\" minimized\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**danger type panel**\" type\u003d\"danger\" minimized\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**warning type panel**\" type\u003d\"warning\" minimized\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":94,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**success type panel**\" type\u003d\"success\" minimized\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**seamless type panel**\" type\u003d\"seamless\" minimized\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**minimal type panel**\" type\u003d\"minimal\" minimized\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":103,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"**Show/Hide buttons using `no-switch`, `no-close`, or `no-minimized-switch`.**"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**This minimized panel does not have a switch button**\" minimized no-minimized-switch\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":115,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This panel does not have a switch button\" no-switch\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":118,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This panel does not have a close button\" no-close\u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"This panel does not have either buttons\" no-close no-switch\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"**Use markdown in the header (only inline level markdown are supported).**"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"**Bold text** :rocket: ![](https://markbind.org/images/logo-lightbackground.png \u003dx20)\" type\u003d\"seamless\"\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"**If `src` attribute is provided, the panel will take content from the `src` specified and add it to the Panel body.**"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":143,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Content loaded in from \u0027src\u0027\" src\u003d\"extra/loadContent.html#fragment\" minimized\u003e\u003c/panel\u003e"},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"yiwen101"},"content":"\u003cdiv id \u003d \"script_and_styles_warning\"\u003e"},{"lineNumber":149,"author":{"gitId":"yiwen101"},"content":"\u003cbox type \u003d \"warning\" header \u003d \"#### Global Effects of the Script and Styles from the Imported Externals\"\u003e"},{"lineNumber":150,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":151,"author":{"gitId":"yiwen101"},"content":"Importing external resources that contains `script` or `styles` can inadvertently take global effects on your MarkBind website. Due to hoisting during processing, imported scripts and stylesheets affect the entire page. This could potentially alter its appearance and behavior beyond the intended scope."},{"lineNumber":152,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":153,"author":{"gitId":"yiwen101"},"content":"For example, if a CSS file imported via such means styles headings to be red, this change will be reflected page-wide."},{"lineNumber":154,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":155,"author":{"gitId":"yiwen101"},"content":"To safeguard against unintended consequences, consider directly incorporating the code or customizing styles to target specific elements or classes not used universally. This approach grants more precise control over your website\u0027s presentation and reduces the risk of unexpected changes."},{"lineNumber":156,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":157,"author":{"gitId":"yiwen101"},"content":"\u003c/div\u003e"},{"lineNumber":158,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"**If `popup-url` attribute is provided, a popup button will be shown. If clicked, it opens the specified url in a new window.**"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":162,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Try clicking on my pop-up button\" popup-url\u003d\"{{ baseUrl }}/userGuide/syntax/extra/loadContent.html\"\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":" This panel has a popup."},{"lineNumber":166,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":167,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":168,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":"**If `preload` attribute is provided, the panel body will load the HTML when the page renders instead of after being expanded.**"},{"lineNumber":171,"author":{"gitId":"-"},"content":""},{"lineNumber":172,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Right click and inspect my HTML before expanding me!\" src\u003d\"extra/loadContent.html#fragment\" preload\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":" \u003cp\u003eYou should be able to find this text before expanding the Panel.\u003c/p\u003e"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"**You can nest Panels or other components within a Panel.**"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":186,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Parent Panel\"\u003e"},{"lineNumber":187,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"Level 1 Nested Panel\"\u003e"},{"lineNumber":188,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"Level 2 Nested Panel\"\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \u003cbox type\u003d\"success\"\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":" I\u0027m a nested box"},{"lineNumber":191,"author":{"gitId":"-"},"content":" \u003c/box\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"Level 3 Nested Panel\" type\u003d\"minimal\"\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":" minimal-type panel"},{"lineNumber":194,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":195,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"Level 1 Nested Panel\" type\u003d\"info\"\u003e"},{"lineNumber":198,"author":{"gitId":"-"},"content":" Some Text"},{"lineNumber":199,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":200,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":205,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":206,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":207,"author":{"gitId":"-"},"content":"header{{slot_info_trigger}} | `String` | `\u0027\u0027` | The clickable text on the Panel\u0027s header. Supports MarkDown text."},{"lineNumber":208,"author":{"gitId":"-"},"content":"alt | `String` | Panel header | The clickable text on the minimised Panel. Supports MarkDown text."},{"lineNumber":209,"author":{"gitId":"-"},"content":"expandable | `Boolean`| `true` | Whether Panel is expandable."},{"lineNumber":210,"author":{"gitId":"-"},"content":"expanded | `Boolean` | `false` | Whether Panel is expanded or collapsed when loaded in."},{"lineNumber":211,"author":{"gitId":"-"},"content":"minimized | `Boolean` | `false` | Whether Panel is minimized."},{"lineNumber":212,"author":{"gitId":"-"},"content":"expand-headerless | `Boolean` | `false` | Whether to hide the header text when the Panel is expanded."},{"lineNumber":213,"author":{"gitId":"-"},"content":"peek | `Boolean` | `false` | Whether to show part of the content when the Panel is collapsed."},{"lineNumber":214,"author":{"gitId":"-"},"content":"no-close | `Boolean` | `false` | Whether to show the close button."},{"lineNumber":215,"author":{"gitId":"-"},"content":"no-switch | `Boolean` | `false` | Whether to show the expand switch."},{"lineNumber":216,"author":{"gitId":"-"},"content":"bottom-switch | `Boolean` | `true` | Whether to show an expand switch at the bottom of the panel. Independent of no-switch."},{"lineNumber":217,"author":{"gitId":"-"},"content":"popup-url | `String` | | The URL that the popup window will navigate to. The URL can be absolute or relative."},{"lineNumber":218,"author":{"gitId":"-"},"content":"preload | `Boolean` | `false` | Whether the content is loaded immediately from `src`."},{"lineNumber":219,"author":{"gitId":"-"},"content":"src | `String` | | The URL to the remote page to be loaded as the content of the panel."},{"lineNumber":220,"author":{"gitId":"-"},"content":"type | `String` | `light` | The type or color scheme of the panel (single).\u003cbr\u003eSupports: `light`, `dark`, `primary`, `secondary`, `info`, `success`, `warning`, `danger`, `seamless`, `minimal`."},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"primary type panel\" type\u003d\"primary\" \u003e"},{"lineNumber":226,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":"```"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":232,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"minimal type panel\" type\u003d\"minimal\" \u003e"},{"lineNumber":233,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":234,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":235,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"seamless type panel\" type\u003d\"seamless\" \u003e"},{"lineNumber":236,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"info type panel\" type\u003d\"info\" expanded\u003e"},{"lineNumber":239,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":240,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":241,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"danger type panel\" type\u003d\"danger\" \u003e"},{"lineNumber":242,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":243,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"warning type panel\" type\u003d\"warning\" \u003e"},{"lineNumber":245,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":246,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":247,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"success type panel\" type\u003d\"success\" \u003e"},{"lineNumber":248,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"\u003cp/\u003e"},{"lineNumber":251,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"light type panel (DEFAULT)\" type\u003d\"light\" minimized\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"dark type panel\" type\u003d\"dark\" minimized\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"primary type panel\" type\u003d\"primary\" minimized\u003e"},{"lineNumber":258,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":259,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":260,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"secondary type panel\" type\u003d\"secondary\" minimized\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":" ..."},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":""},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":252,"yiwen101":13}},{"path":"docs/userGuide/syntax/pictures.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Pictures"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"**A `pic` component allows you to add captions below the image.**"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":8,"author":{"gitId":"LamJiuFong"},"content":"\u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" width\u003d\"300\" alt\u003d\"Logo\" lazy\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" MarkBind Logo"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/pic\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":15,"author":{"gitId":"-"},"content":"Name | Type | Default | Description "},{"lineNumber":16,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":17,"author":{"gitId":"-"},"content":"alt | `string` | | **This must be specified.**\u003cbr\u003eThe alternative text of the image."},{"lineNumber":18,"author":{"gitId":"-"},"content":"height | `string` | | The height of the image in pixels."},{"lineNumber":19,"author":{"gitId":"-"},"content":"src | `string` | | **This must be specified.**\u003cbr\u003eThe URL of the image.\u003cbr\u003eThe URL can be specified as absolute or relative references. More info in: _[Intra-Site Links]({{baseUrl}}/userGuide/formattingContents.html#intraSiteLinks)_"},{"lineNumber":20,"author":{"gitId":"-"},"content":"width | `string` | | The width of the image in pixels.\u003cbr\u003eIf both width and height are specified, width takes priority over height. It is to maintain the image\u0027s aspect ratio."},{"lineNumber":21,"author":{"gitId":"LamJiuFong"},"content":"lazy | `boolean` | false | The `\u003cpic\u003e` component lazy loads if this attribute is specified.\u003cbr\u003e**Either the height or width should be specified to avoid layout shifts while lazy loading images.**"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":26,"author":{"gitId":"LamJiuFong"},"content":"\u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" width\u003d\"300\" alt\u003d\"Logo\" lazy\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" MarkBind Logo"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003c/pic\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"```"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"\u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" width\u003d\"300\" alt\u003d\"Logo\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" MarkBind Logo"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003c/pic\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":34}},{"path":"docs/userGuide/syntax/questions.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% from \"userGuide/components/advanced.md\" import slot_info_trigger, slot_type_info_trigger %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Questions and Quizzes"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"Question and quiz components provide an easy way to test readers on the relevant content topic in the page. {.mt-3}"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"#### Introduction"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"Question components (`\u003cquestion\u003e`) can be one of the following types: **MCQ**, **Checkbox**, **Fill-in-the-Blanks**, or **Text**."},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"In all cases, content directly inserted in between `\u003cquestion\u003e...\u003c/question\u003e` will be inserted into the **question body**."},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"You can also insert markdown into the **header** or **hint box**, by using the `header` and `hint` attributes respectively. Click the hint button below to see how the hint box turns out!"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputSeparate.md\" boilerplate \u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"heading\"\u003eHeader and Hint syntax\u003c/variable\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003c!-- Insert markdown into the header and hint using the respective attributes --\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" header\u003d\"Which of the following is correct?\" hint\u003d\"Think out of the box! :fas-box:\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c!-- Anything you place directly under a question not in a slot is inserted into the question body! --\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003csmall\u003eAdapted from [Daily Mail](https://www.dailymail.co.uk/femail/article-4702868/Can-pass-intelligence-test.html)"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/small\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/pic\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c!-- Several hidden checkbox q-option components explained later --\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" header\u003d\"Which of the following is correct?\" hint\u003d\"Think out of the box! :fas-box:\"\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cpic src\u003d\"{{baseUrl}}/images/math-question.jpg\" alt\u003d\"math question image\" height\u003d\"200\" class\u003d\"d-block mx-auto\"\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003csmall\u003eAdapted from [Daily Mail](https://www.dailymail.co.uk/femail/article-4702868/Can-pass-intelligence-test.html)"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/small\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003c/pic\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cq-option correct reason\u003d\"Multiply the numbers on the left together and add the leftmost number!\"\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" 96"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"Under normal circumstances, this would be correct.\"\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" 19"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003cq-option correct reason\u003d\"Simply add the running sum of the results as well!\"\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" 40"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cq-option\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" 811"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":"If you require more expressive formatting for your header or hint markup, you can use the `\u003cdiv slot\u003d\"header\"\u003e` and `\u003cdiv slot\u003d\"hint\"\u003e` slots. Expand the panel below to see an example!"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"minimal\" header\u003d\"Header and Hint example **with slots**\"\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputSeparate.md\" boilerplate \u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"heading\"\u003eHeaders and Hints using slots\u003c/variable\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" header\u003d\"Which of the following is true?\" hint\u003d\"Think out of the box! :fas-box:\"\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Header slot --\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"header\"\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" Which of the following is correct?"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" Challenge: Try to get all the answers on your first try! :star: :star:"},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" \u003cpic src\u003d\"{{baseUrl}}/images/math-question.jpg\" alt\u003d\"math question image\" height\u003d\"200\" class\u003d\"d-block mx-auto\"\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003csmall\u003eAdapted from [Daily Mail](https://www.dailymail.co.uk/femail/article-4702868/Can-pass-intelligence-test.html)"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003c/small\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003c/pic\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":""},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c!-- Several hidden checkbox q-option components explained later --\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003c!-- Hint slot --\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"hint\"\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":" Think out of the box! :fas-box:"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" Need another hint? \u003ctooltip content\u003d\"Two of the answers are correct!\"\u003eHover over me!\u003c/tooltip\u003e :fas-mouse-pointer:"},{"lineNumber":85,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" header\u003d\"Which of the following is true?\" hint\u003d\"Think out of the box! :fas-box:\"\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003c!-- Header slot --\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"header\"\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" Which of the following is correct?"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" Challenge: Try to get all the answers on your first try! :star: :star:"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" \u003cpic src\u003d\"{{baseUrl}}/images/math-question.jpg\" alt\u003d\"math question image\" height\u003d\"200\" class\u003d\"d-block mx-auto\"\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003csmall\u003eAdapted from [Daily Mail](https://www.dailymail.co.uk/femail/article-4702868/Can-pass-intelligence-test.html)"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c/small\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003c/pic\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003cq-option correct reason\u003d\"Multiply the numbers on the left together and add the leftmost number!\"\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" 96"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"Under normal circumstances, this would be correct.\"\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":" 19"},{"lineNumber":109,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":" \u003cq-option correct reason\u003d\"Simply add the running sum of the results as well!\"\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":" 40"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u003cq-option\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":" 811"},{"lineNumber":115,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" \u003c!-- Hint slot --\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"hint\"\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":" Think out of the box! :fas-box:"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":" Need another hint? \u003ctooltip content\u003d\"Two of the answers are correct!\"\u003eHover over me!\u003c/tooltip\u003e :fas-mouse-pointer:"},{"lineNumber":123,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless class\u003d\"mt-3\"\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":""},{"lineNumber":131,"author":{"gitId":"-"},"content":"Placing the question into the header is entirely optional. You may also wish to include the question directly in the question body, omitting the header entirely."},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":""},{"lineNumber":135,"author":{"gitId":"-"},"content":"****Options and Slots common to all question types****"},{"lineNumber":136,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":137,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":138,"author":{"gitId":"-"},"content":"type | `String` | `\u0027\u0027` | The type of question. Supports `mcq`, `checkbox`, `blanks`, or `text`."},{"lineNumber":139,"author":{"gitId":"-"},"content":"header{{slot_info_trigger}} | `String` | `\u0027\u0027` | The markup to insert into the question header. The header is omitted if this is not provided."},{"lineNumber":140,"author":{"gitId":"-"},"content":"hint{{slot_info_trigger}} | `String` | `\u0027\u0027` | The content to display in the hint box."},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":"#### MCQ and Checkbox Questions {.mt-4 .mb-3}"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"MCQ and checkbox questions are indicated with the `type\u003d\"mcq\"` or `type\u003d\"checkbox\"` attribute."},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"In both instances, you can include the possible answers using the `\u003cq-option\u003e` component, placed anywhere inside the \u003ctooltip content\u003d\"if you wish, you could place it in the `header` mentioned above as well!\"\u003equestion\u003c/tooltip\u003e. To indicate the correct option(s), add the `\u003cq-option correct\u003e` attribute."},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":"Optionally, you can provide the reason for the particular option using the `\u003cq-option reason\u003d\"...\"\u003e` attribute, or the `\u003cdiv slot\u003d\"reason\"\u003e` slot for more expressive formatting, similar to the `hint` and `header` options and slots."},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"**MCQ Questions**"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"{% set mcqQuestion %}"},{"lineNumber":154,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"mcq\" header\u003d\"Which of these **contradicts** the heuristics recommended when creating test cases with multiple inputs?\"\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" \u003c!-- Insert the reason for the option using the reason attribute --\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"This is **correct**. We need to figure out if a positive test case works!\"\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":" Each valid test input should appear at least once in a test case that doesn’t have any invalid inputs."},{"lineNumber":158,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":159,"author":{"gitId":"-"},"content":" \u003cq-option\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":" It is ok to combine valid values for different inputs."},{"lineNumber":161,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":162,"author":{"gitId":"-"},"content":" \u003cq-option\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":" No more than one invalid test input should be in a given test case."},{"lineNumber":164,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":" \u003c!-- Use the \u0027correct\u0027 attribute to indicate an option as correct. --\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":" \u003cq-option correct\u003e"},{"lineNumber":167,"author":{"gitId":"-"},"content":" All invalid test inputs must be tested together."},{"lineNumber":168,"author":{"gitId":"-"},"content":" \u003c!-- Optionally, you may use a reason slot instead of a reason attribute. --\u003e"},{"lineNumber":169,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"reason\"\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":" If you test all invalid test inputs together, you will not know if each one of the invalid inputs are handled"},{"lineNumber":171,"author":{"gitId":"-"},"content":" correctly by the SUT."},{"lineNumber":172,"author":{"gitId":"-"},"content":" This is because most SUTs return an error message upon encountering the first invalid input."},{"lineNumber":173,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"hint\"\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":" How do you figure out which inputs are wrong? (or correct)"},{"lineNumber":177,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ mcqQuestion }}\u003c/variable\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003eMCQ questions can have multiple correct options!\u003c/box\u003e"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"-"},"content":"**Checkbox Questions**"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":"{% set checkboxQuestion %}"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"checkbox\" hint\u003d\"Use your calculator! :fas-calculator:\"\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"jingting1412"},"content":" ###### Which of the following is true?"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":" \u003cbr\u003e"},{"lineNumber":196,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum\"\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":" 1 + 1 \u003d 11"},{"lineNumber":198,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":199,"author":{"gitId":"-"},"content":" \u003cq-option reason\u003d\"Division by zero is **undefined**!\"\u003e"},{"lineNumber":200,"author":{"gitId":"-"},"content":" 1 / 0 \u003d infinity"},{"lineNumber":201,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":202,"author":{"gitId":"-"},"content":" \u003cq-option correct\u003e"},{"lineNumber":203,"author":{"gitId":"-"},"content":" 11 / 11 \u003d 1"},{"lineNumber":204,"author":{"gitId":"-"},"content":" \u003c/q-option\u003e"},{"lineNumber":205,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":206,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":207,"author":{"gitId":"-"},"content":""},{"lineNumber":208,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ checkboxQuestion }}\u003c/variable\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":"****`q-option` Options and Slots****"},{"lineNumber":214,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":215,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":216,"author":{"gitId":"-"},"content":"correct | `Boolean` | `false` | Whether this option (placed under either a MCQ or checkbox question) is correct. You may have multiple correct answers in either case."},{"lineNumber":217,"author":{"gitId":"-"},"content":"reason{{slot_info_trigger}} | `String` | `\u0027\u0027` | The explanation markup to display for the option once the answer is checked."},{"lineNumber":218,"author":{"gitId":"-"},"content":""},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":"#### Fill-in-the-Blanks Questions {.mt-4 .mb-3}"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":"Fill-in-the-blanks questions are specified with the `type\u003d\"blanks\"` attribute."},{"lineNumber":223,"author":{"gitId":"-"},"content":""},{"lineNumber":224,"author":{"gitId":"-"},"content":"Unlike MCQ and checkbox questions, answer checking is performed for each blank by providing keywords to check for in the user\u0027s answer through the `keywords` attribute in each `q-option`."},{"lineNumber":225,"author":{"gitId":"-"},"content":"If no keywords are provided, the answer for that blank will always be marked as correct."},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"Keywords are validated by checking if the keyword matches the user\u0027s answer exactly (ignoring letter casing)."},{"lineNumber":230,"author":{"gitId":"-"},"content":"This works well for some"},{"lineNumber":231,"author":{"gitId":"-"},"content":"\u003cpopover header\u003d\"When does validation work?\"\u003ecases"},{"lineNumber":232,"author":{"gitId":"-"},"content":" \u003cspan slot\u003d\"content\"\u003e"},{"lineNumber":233,"author":{"gitId":"-"},"content":" When the keywords given are short and specific to the blank (eg. `abstraction`), it increases the chances that the blank will be validated correctly."},{"lineNumber":234,"author":{"gitId":"-"},"content":" \u003cbr\u003e\u003cbr\u003e"},{"lineNumber":235,"author":{"gitId":"-"},"content":" In contrast, something long and vague like `after discussing for a period of time` which can easily be expressed in a different way (eg. `after deliberating for a while`) would likely cause the blank to be validated incorrectly."},{"lineNumber":236,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003c/popover\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":"and not others."},{"lineNumber":239,"author":{"gitId":"-"},"content":""},{"lineNumber":240,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":241,"author":{"gitId":"-"},"content":""},{"lineNumber":242,"author":{"gitId":"-"},"content":"{% set blanksQuestion %}"},{"lineNumber":243,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"blanks\" hint\u003d\"Google it!\"\u003e"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"jingting1412"},"content":" ###### German sociologist __________ called the process of simultaneously analyzing the behavior of individuals and the society that shapes that behavior __________."},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Norbert Elias, Elias\" reason\u003d\"That\u0027s his name!\"\u003e\u003c/q-option\u003e"},{"lineNumber":248,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"figuration\"\u003e\u003c/q-option\u003e"},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ blanksQuestion }}\u003c/variable\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":"By default, if the question has yet to be answered correctly, intermediate results will be shown beside each blank. You can specify a `no-intermediate-result` attribute to avoid this behvaiour (i.e. hide the result of each blank upon incorrect attempts)."},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":260,"author":{"gitId":"-"},"content":""},{"lineNumber":261,"author":{"gitId":"-"},"content":"Since the validation is imperfect, the minimum proportion of correct blanks needed for the entire question to be marked as correct can also be changed using the `threshold` attribute."},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":"If you don\u0027t want to validate the answer at all, you may set the `threshold` attribute to `0`. Doing so always marks the entire question correct, and users will be able to see all intended answers."},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":"{% set blanksQuestion2 %}"},{"lineNumber":268,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"blanks\" hint\u003d\"What properties would you want these database transactions to have?\" threshold\u003d0.75 no-intermediate-result\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"jingting1412"},"content":" ###### In computer science, ACID is a set of properties of database transactions intended to guarantee data validity despite errors, power failures, and other mishaps. These properties are: A for __________, C for __________, I for __________, and D for __________."},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Atomicity, Atomic\" reason\u003d\"Meaning: either all occurs or nothing occurs\"\u003e\u003c/q-option\u003e"},{"lineNumber":273,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Consistency, Consistent\"\u003e\u003c/q-option\u003e"},{"lineNumber":274,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Isolation, Isolated\"\u003e\u003c/q-option\u003e"},{"lineNumber":275,"author":{"gitId":"-"},"content":" \u003cq-option keywords\u003d\"Durability, Durable\"\u003e\u003c/q-option\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":281,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ blanksQuestion2 }}\u003c/variable\u003e"},{"lineNumber":282,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":"****Fill-in-the-Blanks Question specific Options and Slots****"},{"lineNumber":285,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":286,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":287,"author":{"gitId":"-"},"content":"threshold | `Number` | `0.5` | Minimum proportion of keywords that have to be matched in the user\u0027s answer for the answer to be marked as correct."},{"lineNumber":288,"author":{"gitId":"-"},"content":"no-intermediate-result | `Boolean` | `False` | Hides the result of each blank after an incorrect attempt."},{"lineNumber":289,"author":{"gitId":"-"},"content":""},{"lineNumber":290,"author":{"gitId":"-"},"content":"****`q-option` Options and Slots****"},{"lineNumber":291,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":292,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":293,"author":{"gitId":"-"},"content":"keywords | `String` | `\u0027\u0027` | Comma delimited string of keywords or phrases to match the user\u0027s answer against."},{"lineNumber":294,"author":{"gitId":"-"},"content":"reason{{slot_info_trigger}} | `String` | `\u0027\u0027` | The explanation markup to display for the option once the answer is checked."},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":"#### Text Questions {.mt-4 .mb-3}"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":"Text questions are specified with the `type\u003d\"text\"` attribute."},{"lineNumber":300,"author":{"gitId":"-"},"content":""},{"lineNumber":301,"author":{"gitId":"-"},"content":"Unlike MCQ and checkbox questions, answer checking is performed by providing keywords to check for in the user\u0027s answer through the `keywords` attribute."},{"lineNumber":302,"author":{"gitId":"-"},"content":"If no keywords are provided, the answer will always be marked as correct when placed in quizzes."},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":"Keywords are validated by simply looking for the keyword as a pattern in the user\u0027s answer!"},{"lineNumber":307,"author":{"gitId":"-"},"content":"This works well for some"},{"lineNumber":308,"author":{"gitId":"-"},"content":"\u003cpopover header\u003d\"When does validation work?\"\u003ecases"},{"lineNumber":309,"author":{"gitId":"-"},"content":" \u003cspan slot\u003d\"content\"\u003e"},{"lineNumber":310,"author":{"gitId":"-"},"content":" When the keywords specified are rather long (eg. `requirements`), it reduces the chance that this keyword can be mistakenly validated."},{"lineNumber":311,"author":{"gitId":"-"},"content":" \u003cbr\u003e\u003cbr\u003e"},{"lineNumber":312,"author":{"gitId":"-"},"content":" In contrast, something short and common like `take` which can easily be part of another word (eg. `mis-take-nly`) would be mistakenly validated."},{"lineNumber":313,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":314,"author":{"gitId":"-"},"content":"\u003c/popover\u003e"},{"lineNumber":315,"author":{"gitId":"-"},"content":"and not others."},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":"You can provide your answer in the `answer` attribute, or similarly, the `\u003cdiv slot\u003d\"answer\"\u003e` slot for more expressive formatting."},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":"{% set textQuestion %}"},{"lineNumber":322,"author":{"gitId":"-"},"content":"\u003cquestion type\u003d\"text\" header\u003d\"Which country did the Hawaiian pizza originate from?\""},{"lineNumber":323,"author":{"gitId":"-"},"content":" keywords\u003d\"hawaii\" threshold\u003d\"0.5\" answer\u003d\"It originated from Hawaii!\"\u003e"},{"lineNumber":324,"author":{"gitId":"-"},"content":" \u003cdiv slot\u003d\"hint\"\u003e"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" Watch some pizza commercials! :tv:"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza: :pizza:"},{"lineNumber":329,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":330,"author":{"gitId":"-"},"content":"\u003c/question\u003e"},{"lineNumber":331,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":332,"author":{"gitId":"-"},"content":""},{"lineNumber":333,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate\u003e"},{"lineNumber":334,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":335,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e{{ textQuestion }}\u003c/variable\u003e"},{"lineNumber":336,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":"Since the validation is imperfect, the minimum proportion of keywords that need to be matched can also be changed using the `threshold` attribute."},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":"If you don\u0027t want to validate the answer at all, you may also omit the `keywords` attribute entirely. Doing so also always marks the question as correct inside [quizzes](#quizzes)."},{"lineNumber":343,"author":{"gitId":"-"},"content":""},{"lineNumber":344,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":"****Text Question specific Options and Slots****"},{"lineNumber":347,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":348,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":349,"author":{"gitId":"-"},"content":"keywords | `String` | `\u0027\u0027` | Comma delimited string of keywords or phrases to match the user\u0027s answer against."},{"lineNumber":350,"author":{"gitId":"-"},"content":"threshold | `Number` | `0.5` | Minimum proportion of keywords that have to be matched in the user\u0027s answer for the answer to be marked as correct."},{"lineNumber":351,"author":{"gitId":"-"},"content":"answer{{slot_info_trigger}} | `String` | `\u0027\u0027` | The answer or explanation to display when the user clicks the check button."},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":"#### Quizzes"},{"lineNumber":354,"author":{"gitId":"-"},"content":""},{"lineNumber":355,"author":{"gitId":"-"},"content":"You can also build a series of questions out of multiple `\u003cquestion\u003e` components."},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":"Simply place the `\u003cquestion\u003e` components you want to include into the `\u003cquiz\u003e` component! No extra configuration is needed."},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutputSeparate.md\" boilerplate \u003e"},{"lineNumber":360,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":361,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":362,"author":{"gitId":"-"},"content":"\u003cquiz\u003e"},{"lineNumber":363,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"mcq\"\u003e...\u003c/question\u003e"},{"lineNumber":364,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"checkbox\"\u003e...\u003c/question\u003e"},{"lineNumber":365,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"blanks\"\u003e...\u003c/question\u003e"},{"lineNumber":366,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"text\"\u003e...\u003c/question\u003e"},{"lineNumber":367,"author":{"gitId":"-"},"content":"\u003c/quiz\u003e"},{"lineNumber":368,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":369,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"output\"\u003e"},{"lineNumber":370,"author":{"gitId":"-"},"content":"\u003cquiz\u003e"},{"lineNumber":371,"author":{"gitId":"-"},"content":"{{ mcqQuestion }}"},{"lineNumber":372,"author":{"gitId":"-"},"content":"{{ checkboxQuestion }}"},{"lineNumber":373,"author":{"gitId":"-"},"content":"{{ blanksQuestion }}"},{"lineNumber":374,"author":{"gitId":"-"},"content":"{{ textQuestion }}"},{"lineNumber":375,"author":{"gitId":"-"},"content":"\u003c/quiz\u003e"},{"lineNumber":376,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":377,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":378,"author":{"gitId":"-"},"content":""},{"lineNumber":379,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":"****Quiz Options and Slots****"},{"lineNumber":382,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":383,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":384,"author":{"gitId":"-"},"content":"intro | `String` | `\u0027\u0027` | Quiz intro markup above the question count."},{"lineNumber":385,"author":{"gitId":"-"},"content":"intro | Slot | `Click start to begin` | Quiz intro markup. Overrides the `intro` attribute if both are present."},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":"\u003c!-- Included in syntax cheat sheet --\u003e"},{"lineNumber":388,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":"```html { heading\u003d\"MCQ and Checkbox questions\" }"},{"lineNumber":391,"author":{"gitId":"-"},"content":"\u003c!-- use type\u003d\"checkbox\" for checkbox questions --\u003e"},{"lineNumber":392,"author":{"gitId":"-"},"content":"{{ mcqQuestion }}"},{"lineNumber":393,"author":{"gitId":"-"},"content":"```"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":"```html { heading\u003d\"Fill-in-the-Blanks questions\" }"},{"lineNumber":396,"author":{"gitId":"-"},"content":"{{ blanksQuestion }}"},{"lineNumber":397,"author":{"gitId":"-"},"content":"```"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":"```html { heading\u003d\"Text questions\" }"},{"lineNumber":400,"author":{"gitId":"-"},"content":"{{ textQuestion }}"},{"lineNumber":401,"author":{"gitId":"-"},"content":"```"},{"lineNumber":402,"author":{"gitId":"-"},"content":""},{"lineNumber":403,"author":{"gitId":"-"},"content":"```html { heading\u003d\"Quiz\" }"},{"lineNumber":404,"author":{"gitId":"-"},"content":"\u003cquiz\u003e"},{"lineNumber":405,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"mcq\"\u003e...\u003c/question\u003e"},{"lineNumber":406,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"checkbox\"\u003e...\u003c/question\u003e"},{"lineNumber":407,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"blanks\"\u003e...\u003c/question\u003e"},{"lineNumber":408,"author":{"gitId":"-"},"content":" \u003cquestion type\u003d\"text\"\u003e...\u003c/question\u003e"},{"lineNumber":409,"author":{"gitId":"-"},"content":"\u003c/quiz\u003e"},{"lineNumber":410,"author":{"gitId":"-"},"content":"```"},{"lineNumber":411,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":412,"author":{"gitId":"-"},"content":""},{"lineNumber":413,"author":{"gitId":"-"},"content":"\u003c!-- Included in readerFacingFeatures.md --\u003e"},{"lineNumber":414,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":415,"author":{"gitId":"-"},"content":"\u003cquiz\u003e"},{"lineNumber":416,"author":{"gitId":"-"},"content":"{{ mcqQuestion }}"},{"lineNumber":417,"author":{"gitId":"-"},"content":"{{ checkboxQuestion }}"},{"lineNumber":418,"author":{"gitId":"-"},"content":"{{ blanksQuestion }}"},{"lineNumber":419,"author":{"gitId":"-"},"content":"{{ textQuestion }}"},{"lineNumber":420,"author":{"gitId":"-"},"content":"\u003c/quiz\u003e"},{"lineNumber":421,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":3,"-":418}},{"path":"docs/userGuide/syntax/searchBars.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Search Bars"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"The `searchbar` component allows users to search all headings within any page on the site."},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"body\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"outputBox.md\" boilerplate \u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search (Right-aligned dropdown)\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"```"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"To use the searchbar within a navbar, add the following markup to your file. The searchbar can be positioned using the slot attribute for the list. The following markup adds a searchbar to the right side of the navbar with appropriate styling."},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003cli slot\u003d\"right\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/form\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003c/li\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":"```"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cvariable id\u003d\"output\"\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"Enter a search term (eg. \u0027search bar\u0027) to see the search result dropdown."},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search (Right-aligned dropdown)\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":37,"author":{"gitId":"-"},"content":"---- | ---- | ------- | ------"},{"lineNumber":38,"author":{"gitId":"yiwen101"},"content":"algolia | `Boolean` | `false` | Whether the searchbar should be connected to [Algolia DocSearch]({{ baseUrl }}/userGuide/usingPlugins.html#plugin-algolia)."},{"lineNumber":39,"author":{"gitId":"-"},"content":"data | `Array` || The local data source for suggestions. Expected to be a primitive array. To use MarkBind\u0027s search functionality, set this value to `\"searchData\"`."},{"lineNumber":40,"author":{"gitId":"-"},"content":"menu-align-right | `Boolean` | `false` | Whether the search bar\u0027s dropdown list will be right-aligned."},{"lineNumber":41,"author":{"gitId":"-"},"content":"on-hit | `Function` || A callback function when you click or hit return on an item. To use MarkBind\u0027s search functionality, set this value to `\"searchCallback\"`."},{"lineNumber":42,"author":{"gitId":"-"},"content":"placeholder | `String` | `\u0027\u0027` | The placeholder text shown when no keywords are entered in the search bar."},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"Note: If you are using MarkBind\u0027s search functionality, then `enableSearch` **must be set to `true` in `site.json`**."},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"yiwen101"},"content":"See: [User Guide: Site Configuration → enableSearch]({{ baseUrl }}/userGuide/siteJsonFile.html#enablesearch)."},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"%%{{ icon_info }} Related topic: [User Guide: Making the Site Searchable]({{ baseUrl }}/userGuide/makingTheSiteSearchable.html).%%"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"yiwen101"},"content":"%%{{ icon_info }} Related topic: [User Guide: Using Plugins → Algolia: Enabling Algolia DocSearch]({{ baseUrl }}/userGuide/usingPlugins.html#plugin-algolia).%%"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003c/div\u003e \u003c!-- end of body --\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":61,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"```"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003cli slot\u003d\"right\"\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u003c/form\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/li\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":"```"},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":"\u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\"\u003e\u003c/searchbar\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":73,"yiwen101":3}},{"path":"docs/userGuide/syntax/siteNavigationMenus.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Site Navigation Menus"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"content\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"**A _Site Navigation Menu_ (\u003d\u003d_siteNav_ for short\u003d\u003d) can be used to show a road map of the main pages of your site.**"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"Steps to add a siteNav:"},{"lineNumber":8,"author":{"gitId":"-"},"content":"1. Format your siteNav as an unordered Markdown list"},{"lineNumber":9,"author":{"gitId":"-"},"content":"2. Include it under a `\u003csite-nav\u003e` element."},{"lineNumber":10,"author":{"gitId":"-"},"content":"3. (Optional) To make siteNav accessible on smaller screens, you can use the `\u003csite-nav-button /\u003e` component in the [navbar]({{baseUrl}}/userGuide/components/navigation.html#navbars)."},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003csite-nav\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":"* [**Getting Started**]({{baseUrl}}/userGuide/gettingStarted.html)"},{"lineNumber":17,"author":{"gitId":"-"},"content":"* **Authoring Contents** :expanded:"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * [Overview]({{baseUrl}}/userGuide/authoringContents.html)"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * [Adding Pages]({{baseUrl}}/userGuide/addingPages.html)"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * [MarkBind Syntax Overview]({{baseUrl}}/userGuide/markBindSyntaxOverview.html)"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * [Formatting Contents]({{baseUrl}}/userGuide/formattingContents.html)"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * [Using Components]({{baseUrl}}/userGuide/usingComponents.html)"},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003c/site-nav\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"MarkBind has styles nested lists with additional padding and smaller text sizes up to **4** nesting levels."},{"lineNumber":29,"author":{"gitId":"-"},"content":"Beyond that, you\u0027d have to include your own styles."},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"****Expanding menu items by default****"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"You can **append the `:expanded:` to a \u003ctooltip content\u003d\"a menu item with sub menu-items\"\u003eparent menu item\u003c/tooltip\u003e to make it expand by default.** In the example above, `* Authoring Contents :expanded:` makes the menu item `Authoring Contents` expand by default."},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\"\u003e\u003c/div\u003e"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":"```html"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":"\u003csite-nav\u003e"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":"* [**Getting Started**]({{baseUrl}}/userGuide/gettingStarted.html)"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":"* **Authoring Contents** :expanded:"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" * [Overview]({{baseUrl}}/userGuide/authoringContents.html)"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" * [Adding Pages]({{baseUrl}}/userGuide/addingPages.html)"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" * [MarkBind Syntax Overview]({{baseUrl}}/userGuide/markBindSyntaxOverview.html)"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" * [Formatting Contents]({{baseUrl}}/userGuide/formattingContents.html)"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" * [Using Components]({{baseUrl}}/userGuide/usingComponents.html)"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":"\u003c/site-nav\u003e"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":"```"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":16,"-":37}},{"path":"docs/userGuide/syntax/tabs.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"## Tabs"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003ctabs\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"First tab\"\u003e"},{"lineNumber":8,"author":{"gitId":"yiwen101"},"content":" Text in the first tab"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":" \u003cmarkdown\u003e_some markdown_\u003c/markdown\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Disabled second tab :x:\" disabled\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Tab not printed\" class\u003d\"d-print-none\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" This tab will not be printed."},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003ctab-group header\u003d\"Third tab group :milky_way:\"\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Stars :star:\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Some stuff about stars ..."},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Disabled Moon :new_moon:\" disabled\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/tab-group\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003ctab-group header\u003d\"Disabled fourth tab group\" disabled\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Hidden tab\"\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ullamcorper ultrices lobortis."},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/tab-group\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"\u003c/tabs\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"****Options****"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"`tabs`:"},{"lineNumber":35,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":36,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":37,"author":{"gitId":"-"},"content":"active | `Number` | `0` | Active Tab index (0-based)"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"`tab`:"},{"lineNumber":40,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":41,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":42,"author":{"gitId":"-"},"content":"header | `String` | `null` | Tab title."},{"lineNumber":43,"author":{"gitId":"-"},"content":"disabled | `Boolean` | `false` | Whether Tab is clickable and can be activated."},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"`tab-group`:"},{"lineNumber":46,"author":{"gitId":"-"},"content":"Name | Type | Default | Description"},{"lineNumber":47,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":48,"author":{"gitId":"-"},"content":"header | `String` | `null` | Tab Group title."},{"lineNumber":49,"author":{"gitId":"-"},"content":"disabled | `Boolean` | `false` | Whether Tab Group is clickable and can be activated."},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"-"},"content":"Tabs, tab group and individual tab can be omitted during printing by adding Bootstrap\u0027s display property `class\u003d\"d-print-none\"` to the respective components."},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003ctabs\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"First tab\"\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":" Content of the first tab"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Second tab\"\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" Contents of the second tab"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003ctab-group header\u003d\"Third tab group :tv:\"\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Stars :star:\"\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" Some stuff about stars ..."},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Moon\"\u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":" Some stuff about the moon ..."},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003c/tab-group\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":"\u003c/tabs\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":"```"},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"examples\" class\u003d\"d-none\"\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"-"},"content":"\u003ctabs\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"First tab\"\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" Content of the first tab"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Second tab\"\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Contents of the second tab"},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003ctab-group header\u003d\"Third tab group :tv:\"\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Stars :star:\"\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Some stuff about stars ..."},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":" \u003ctab header\u003d\"Moon\"\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":" Some stuff about the moon ..."},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003c/tab\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003c/tab-group\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003c/tabs\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"-":94,"yiwen101":2}},{"path":"docs/userGuide/syntax/variables.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → Reusing Contents → Variables_]({{ baseUrl }}/userGuide/reusingContents.html#variables)\u003c/md\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Variables"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"**Nunjucks [variables](https://mozilla.github.io/nunjucks/templating.html#set) are ideal for reusing small bits of code** in multiple places; you can define a variable to represent the code bit in question and reuse it anywhere in the site by referring to the variable instead of duplicating the code bit."},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"MarkBind does not aim to alter the already robust variable features of Nunjucks, but provides several extensions to it."},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"### Global Variables"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"**Global variables are to be defined in the `_markbind/variables.md` file.** Each variable must have an `name` and the value can be any MarkBind-compliant code fragment. The `name` should not contain `-` and `.`. For example, `search-option` and `search.options` are not allowed."},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"The variables declared here are available from anywhere in the code base."},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"{{ icon_example }} Here\u0027s how you can define two variables `year` and `options`:"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"year\"\u003e2018\u003c/variable\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"options\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"* yes"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* no"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* maybe"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003c/variable\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"```"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"To include a variable value in your code, give the variable id enclosed in Nunjucks\u0027 double curly braces syntax."},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"{{ icon_example }} `The year was {% raw %}{{ year }}{% endraw %}.` {{ icon_arrow_right }} The year was 2018."},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"Global variables (`_markbind/variables.md`) will take precedence over any variables set via Nunjucks\u0027 tags (e.g. `{% raw %}{% set %}{% endraw %}`)."},{"lineNumber":46,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#### Built-in Global Variables"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"MarkBind also provides a number of built-in variables."},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"Variable | Notes | {{ icon_example }} | Output"},{"lineNumber":53,"author":{"gitId":"-"},"content":"--- | --- | --- | ---"},{"lineNumber":54,"author":{"gitId":"-"},"content":"`baseUrl` | Represents the root directory of the site on the server, as configured in your [site configuration]({{baseUrl}}/userGuide/siteJsonFile.html#baseurl) file. \u003cbr\u003e Used for specifying [intra-site links](../formattingContents.html#intra-site-links). | If `baseUrl` is specified as `userGuide/`:\u003cbr\u003e\u003cbr\u003e `\u003cimg src\u003d\"{% raw %}{{baseUrl}}{% endraw %}/images/logo.png\" /\u003e` | `\u003cimg src\u003d\"userGuide/images/logo.png\" /\u003e`"},{"lineNumber":55,"author":{"gitId":"-"},"content":"`timestamp` | The time stamp that indicates when the page was generated. \u003cbr\u003e\u003cbr\u003e The [default]({{baseUrl}}/userGuide/siteJsonFile.html#timezone) values of `\"timeZone\"` and `\"locale\"` are `\"UTC\"` and `\"en-GB\"` respectively. | The following example showcases the use of the `\"Asia/Singapore\"` time zone.\u003cbr\u003e\u003cbr\u003e `Page generated at: {% raw %}{{timestamp}}{% endraw %}` | `Page generated at: {{ timestamp }}`"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`MarkBind` | The MarkBind version in use, linked to the MarkBind website. | `Page generated by: {% raw %}{{MarkBind}}{% endraw %}` | `Page generated by:` {{ MarkBind | safe }}"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"### Importing variables from other external file formats"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":"You can also source variables from external files using MarkBind\u0027s {%raw%}`{% ext varName \u003d \"filepathToFile\" %}`{%endraw%} Nunjucks extension."},{"lineNumber":62,"author":{"gitId":"-"},"content":"This is useful if you have external datasets you want to display in your site!"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"To do so, assign a root variable name (`varName`) to the file path from the \u003ctooltip content\u003d\"similar to how you assign filepaths for other Nunjucks tags\"\u003eroot directory of the site\u003c/tooltip\u003e. You may then access the file\u0027s variables using dot `varName.xx` or array `varName[i]` syntax, depending on the file\u0027s contents."},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":""},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"\u003ctabs\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":"\u003ctab header\u003d\"Importing from JSON files\"\u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":"{{icon_example}}"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":"%%CODE:%%"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":79,"author":{"gitId":"-"},"content":"```html {heading\u003d\"Displaying a student scoreboard stored as JSON\"}"},{"lineNumber":80,"author":{"gitId":"-"},"content":"{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.json\" %}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":"Student Number | Score | Rank"},{"lineNumber":83,"author":{"gitId":"-"},"content":":----- | :-------: | ----"},{"lineNumber":84,"author":{"gitId":"-"},"content":"{% for student in studentScoreboard.students -%}"},{"lineNumber":85,"author":{"gitId":"-"},"content":"{{ student.number }} | {{ student.score }} | {{ student.rank }}"},{"lineNumber":86,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003csmall\u003eLast updated at {{ studentScoreboard.lastUpdated }}\u003c/small\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":"```"},{"lineNumber":90,"author":{"gitId":"-"},"content":"{% endraw %}"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"minimal\" header\u003d\"JSON file used in example\"\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":"```json {heading\u003d\"JSON File\"}"},{"lineNumber":95,"author":{"gitId":"-"},"content":"{% include \"userGuide/syntax/extra/scoreboard.json\" %}"},{"lineNumber":96,"author":{"gitId":"-"},"content":"```"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":"%%OUTPUT:%%"},{"lineNumber":104,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"\u003cbox border-left-color\u003d\"grey\" background-color\u003d\"white\"\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.json\" %}"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"Student Number | Score | Rank"},{"lineNumber":111,"author":{"gitId":"-"},"content":":----- | :-------: | ----"},{"lineNumber":112,"author":{"gitId":"-"},"content":"{% for student in studentScoreboard.students -%}"},{"lineNumber":113,"author":{"gitId":"-"},"content":"{{ student.number }} | {{ student.score }} / 100 | {{ student.rank }}"},{"lineNumber":114,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"\u003csmall\u003eLast updated at {{ studentScoreboard.lastUpdated }}\u003c/small\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":""},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003c/tab\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003ctab header\u003d\"Importing from CSV files\"\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"{{icon_example}}"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":"%%CODE:%%"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":130,"author":{"gitId":"-"},"content":"```html {heading\u003d\"Displaying a student scoreboard stored as CSV\"}"},{"lineNumber":131,"author":{"gitId":"-"},"content":"{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.csv\" %}"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":"Student Number | Score | Rank"},{"lineNumber":134,"author":{"gitId":"-"},"content":":----- | :-------: | ----"},{"lineNumber":135,"author":{"gitId":"-"},"content":"{% for student in studentScoreboard -%}"},{"lineNumber":136,"author":{"gitId":"-"},"content":"{{ student.number }} | {{ student.score }} | {{ student.rank }}"},{"lineNumber":137,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":138,"author":{"gitId":"-"},"content":"```"},{"lineNumber":139,"author":{"gitId":"-"},"content":"{% endraw %}"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003cpanel type\u003d\"minimal\" header\u003d\"CSV file used in example\"\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":"```csv {heading\u003d\"CSV File\"}"},{"lineNumber":144,"author":{"gitId":"-"},"content":"{% include \"userGuide/syntax/extra/scoreboard.csv\" %}"},{"lineNumber":145,"author":{"gitId":"-"},"content":"```"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":"\u003cbox border-left-color\u003d\"{{ markbind_blue}}\"\u003e"},{"lineNumber":151,"author":{"gitId":"-"},"content":""},{"lineNumber":152,"author":{"gitId":"-"},"content":"{{ icon_bulb_blue }} If you do not want to have a header row, you can specify it by appending a `noHeader` option at the end of the variable declaration. In this example, it should be {% raw %} `{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.csv\", noHeader %}` {% endraw %}. Elements have to be accessed using the `[]` operator (i.e. using `student[0]` to access student number instead of `student.number`)."},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":"%%OUTPUT:%%"},{"lineNumber":158,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":159,"author":{"gitId":"-"},"content":""},{"lineNumber":160,"author":{"gitId":"-"},"content":"\u003cbox border-left-color\u003d\"grey\" background-color\u003d\"white\"\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"{% ext studentScoreboard \u003d \"userGuide/syntax/extra/scoreboard.csv\" %}"},{"lineNumber":163,"author":{"gitId":"-"},"content":""},{"lineNumber":164,"author":{"gitId":"-"},"content":"Student Number | Score | Rank"},{"lineNumber":165,"author":{"gitId":"-"},"content":":----- | :-------: | ----"},{"lineNumber":166,"author":{"gitId":"-"},"content":"{% for student in studentScoreboard -%}"},{"lineNumber":167,"author":{"gitId":"-"},"content":"{{ student.number }} | {{ student.score }} / 100 | {{ student.rank }}"},{"lineNumber":168,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"\u003c/tab\u003e"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003c/tabs\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":""},{"lineNumber":176,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"Only `.json` and `.csv` files are supported for now."},{"lineNumber":179,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"short\" class\u003d\"d-none\"\u003e"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":""},{"lineNumber":185,"author":{"gitId":"jingting1412"},"content":"```markdown"},{"lineNumber":186,"author":{"gitId":"jingting1412"},"content":"Place global variables in `_markbind/variables.md`"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cvariable name\u003d\"year\"\u003e2018\u003c/variable\u003e"},{"lineNumber":188,"author":{"gitId":"jingting1412"},"content":"The year was {% raw %}{{ year }}{% endraw %}"},{"lineNumber":189,"author":{"gitId":"-"},"content":"```"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":3,"-":188}},{"path":"docs/userGuide/syntaxReference.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" title: \"User Guide: Syntax Reference\""},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" layout: userGuide.md"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" pageNav: 5"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"# Syntax Reference"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":"Expand the panels for detailed explanations of the feature or click on the link in the header to go to the corresponding page!"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":"{% macro show_topic(filename, heading, url) %}"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":"\u003cpanel type\u003d\"seamless\" no-close popup-url\u003d\"{{ url }}\"\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003cdiv slot\u003d\"header\"\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003cmarkdown\u003e##### **{{ heading }}**\u003c/markdown\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003cinclude src\u003d\"syntax/{{ filename }}.md#short\" /\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"indented\"\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" \u003cinclude src\u003d\"syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"\u003c/panel\u003e"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":"{% endmacro %}"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":"{% for k,v in topics | dictsort %}"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" {% set url\u003d\"/userGuide/\" %}"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" {% if v[2] is iterable %}"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" {% if \u0027basic\u0027 in v[2] %}"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"formattingContents.html#\" + v[1] %}"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027presentation\u0027 in v[2] %}"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/presentation.html#\" + v[1] %}"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027images-diagrams\u0027 in v[2] %}"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/imagesAndDiagrams.html#\" + v[1] %}"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027popups\u0027 in v[2] %}"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/popups.html#\" + v[1] %}"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027navigation\u0027 in v[2] %}"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/navigation.html#\" + v[1] %}"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":" {% elif \u0027others\u0027 in v[2] %}"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + \"components/others.html#\" + v[1] %}"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" {% else %}"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url + v[2][0] + \".html#\" + v[1] %}"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" {% endif %}"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" {% else %}"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" {% set url \u003d url %}"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" {% endif %}"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" {{ show_topic( k, v[0], url) }}"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":"{% endfor %}"}],"authorContributionMap":{"jingting1412":50}},{"path":"docs/userGuide/templates.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Templates\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"templates\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"# {{ title }}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"lead\" id\u003d\"overview\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"MarkBind allows you to start off your new project with different templates."},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"During initialization you can add a flag `--template \u003ctemplate-key\u003e` to select a different template to initialize with. For example:"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"```"},{"lineNumber":25,"author":{"gitId":"-"},"content":"markbind init --template minimal"},{"lineNumber":26,"author":{"gitId":"-"},"content":"```"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"## Supported Templates"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":"Name | Template key | Description | Quick Deploy"},{"lineNumber":31,"author":{"gitId":"-"},"content":"---- | ------- | ----------- | ------------"},{"lineNumber":32,"author":{"gitId":"-"},"content":"Default | `default` | Default template if `--template` is unspecified. Includes core features such as site and page navigation for a more convenient quick start. | \u003ca href\u003d\"https://app.netlify.com/start/deploy?repository\u003dhttps://github.com/MarkBind/init-typical-netlify\"\u003e\u003cimg src\u003d\"https://www.netlify.com/img/deploy/button.svg\" /\u003e\u003c/a\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"Minimal | `minimal` | Minimalistic template that gets you started quickly. | \u003ca href\u003d\"https://app.netlify.com/start/deploy?repository\u003dhttps://github.com/MarkBind/init-minimal-netlify\"\u003e\u003cimg src\u003d\"https://www.netlify.com/img/deploy/button.svg\" /\u003e\u003c/a\u003e"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"Project | `project` | Project documentation template serves as a good starting point for project developers. This template includes both a user guide and a developer guide, with some formatted dummy content. | \u003ca href\u003d\"https://markbind-template-project.netlify.app/\"\u003e\u003cimg src\u003d\"https://www.netlify.com/img/deploy/button.svg\" /\u003e\u003c/a\u003e"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":"Portfolio | `portfolio` | Portfolio template to quickly build your portfolio. | \u003ca href\u003d\"\"\u003eQuick deploy link to come!\u003c/a\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":38,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027addingNavigationButtons\u0027, \u0027\u0027) }}"}],"authorContributionMap":{"jingting1412":1,"KevinEyo1":1,"-":36}},{"path":"docs/userGuide/troubleshooting.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Troubleshooting\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title | safe }}\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":7,"author":{"gitId":"-"},"content":" pageNav: 5"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"# {{ title | safe }}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"##### HTML Rendering Issues"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"Unexpected behavior can occur in rendered pages due to a number of different reasons. One of these reasons is when the rendered pages are not valid HTML."},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"Incorrect HTML markup can be due to:"},{"lineNumber":17,"author":{"gitId":"-"},"content":"- nesting block-level elements inside `\u003cp\u003e` or `\u003cspan\u003e` elements"},{"lineNumber":18,"author":{"gitId":"-"},"content":"- missing `\u003ctbody\u003e` tags"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"###### Example: block-level elements inside `\u003cspan\u003e` elements"},{"lineNumber":21,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"example\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"Animal | Trainable? | Price | Remarks"},{"lineNumber":26,"author":{"gitId":"-"},"content":":------|:----------:|------:|--------"},{"lineNumber":27,"author":{"gitId":"-"},"content":"Ants | no | 5 |"},{"lineNumber":28,"author":{"gitId":"-"},"content":"Bees | no | 20 |"},{"lineNumber":29,"author":{"gitId":"-"},"content":"Cats | yes | 100 |"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":"```"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"yiwen101"},"content":"The table specified by the Markdown syntax above will be rendered as a block-level element, which will be included in a inline span element. This makes the HTML output invalid."},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Underlying Error (Example)\" type\u003d\"seamless\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"```"},{"lineNumber":38,"author":{"gitId":"-"},"content":"vue.js:634 [Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content."},{"lineNumber":39,"author":{"gitId":"-"},"content":"This is likely caused by incorrect HTML markup, for example nesting block-level elements inside `\u003cp\u003e`,"},{"lineNumber":40,"author":{"gitId":"-"},"content":"or missing `\u003ctbody\u003e`."},{"lineNumber":41,"author":{"gitId":"-"},"content":"Bailing hydration and performing full client-side render."},{"lineNumber":42,"author":{"gitId":"-"},"content":"```"},{"lineNumber":43,"author":{"gitId":"-"},"content":"See [SSR guide for Vue](https://vuejs.org/guide/scaling-up/ssr.html#hydration-mismatch) for more details on hydration mismatch."},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"A possible fix for the above situation is to wrap the table in a `\u003cdiv\u003e` element instead:"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"example\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"Animal | Trainable? | Price | Remarks"},{"lineNumber":53,"author":{"gitId":"-"},"content":":------|:----------:|------:|--------"},{"lineNumber":54,"author":{"gitId":"-"},"content":"Ants | no | 5 |"},{"lineNumber":55,"author":{"gitId":"-"},"content":"Bees | no | 20 |"},{"lineNumber":56,"author":{"gitId":"-"},"content":"Cats | yes | 100 |"},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":"```"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"yiwen101"},"content":"##### Markdown Rendering Issues"},{"lineNumber":61,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":62,"author":{"gitId":"yiwen101"},"content":"If you encounter issues in rendering Markdown in a component, it is likely that the Markdown is not being properly recognized due to syntax errors. Signposting is required to inform Markdown to parse the content of a presentation component as Markdown rather than plain text."},{"lineNumber":63,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":64,"author":{"gitId":"yiwen101"},"content":"You could signpost Markdown either by:"},{"lineNumber":65,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":66,"author":{"gitId":"yiwen101"},"content":"- using the `\u003cmarkdown\u003e`(block level elements) or `\u003cmd\u003e`(inline level elements) tags to wrap the Markdown content."},{"lineNumber":67,"author":{"gitId":"yiwen101"},"content":"- using an empty line without any indentation before the Markdown content"},{"lineNumber":68,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":69,"author":{"gitId":"yiwen101"},"content":"###### Example: correct Markdown rendering using tags or newline:"},{"lineNumber":70,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":71,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":72,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":73,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e"},{"lineNumber":74,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":75,"author":{"gitId":"yiwen101"},"content":"**Example1**"},{"lineNumber":76,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":77,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":78,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e "},{"lineNumber":79,"author":{"gitId":"yiwen101"},"content":"\u003cmd\u003e **Example2** \u003c/md\u003e "},{"lineNumber":80,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":81,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":82,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e "},{"lineNumber":83,"author":{"gitId":"yiwen101"},"content":"\u003cmarkdown\u003e **Example3** \u003c/markdown\u003e "},{"lineNumber":84,"author":{"gitId":"yiwen101"},"content":"\u003c/box\u003e"},{"lineNumber":85,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":86,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":87,"author":{"gitId":"yiwen101"},"content":"\u003c/variable\u003e"},{"lineNumber":88,"author":{"gitId":"yiwen101"},"content":"\u003c/include\u003e"},{"lineNumber":89,"author":{"gitId":"yiwen101"},"content":"\u003cpanel header\u003d\"###### Example: Markdown not rendered without singposting\" type\u003d\"seamless\"\u003e"},{"lineNumber":90,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"codeAndOutput.md\" boilerplate \u003e"},{"lineNumber":91,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"highlightStyle\"\u003ehtml\u003c/variable\u003e"},{"lineNumber":92,"author":{"gitId":"yiwen101"},"content":"\u003cvariable name\u003d\"code\"\u003e"},{"lineNumber":93,"author":{"gitId":"yiwen101"},"content":"\u003cbox\u003e **This will be rendered as plain text**\u003c/box\u003e"},{"lineNumber":94,"author":{"gitId":"yiwen101"},"content":"\u003c/variable\u003e"},{"lineNumber":95,"author":{"gitId":"yiwen101"},"content":"\u003c/include\u003e"},{"lineNumber":96,"author":{"gitId":"yiwen101"},"content":"\u003c/panel\u003e"}],"authorContributionMap":{"-":58,"yiwen101":38}},{"path":"docs/userGuide/usingComponents.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{% set title \u003d \"Using Components\" %}"},{"lineNumber":2,"author":{"gitId":"-"},"content":"{% set filename \u003d \"usingComponents\" %}"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"title\" class\u003d\"d-none\"\u003e{{ title }}\u003c/span\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" title: \"User Guide: {{ title }}\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" layout: userGuide.md"},{"lineNumber":8,"author":{"gitId":"-"},"content":" pageNav: 3"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cspan id\u003d\"link\" class\u003d\"d-none\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cmd\u003e[_User Guide → {{ title }}_]({{ filename }}.html)\u003c/md\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003c/span\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"# Using Components"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"overview\" class\u003d\"lead\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"**MarkBind provides a number of components** (e.g., expandable panels, tabbed displays, navigation bars, etc.) that you can use to enhance the appearance/behavior of your pages."},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"To use a component, just use the corresponding markup in your file. For example, to create a Panel, you just need to use the markup:"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"```html"},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Click to expand\" type\u003d\"seamless\"\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" Panel Content."},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":"```"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":"{% from \"userGuide/syntax/fullSyntaxSet.njk\" import syntax_topics as topics %}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"{% macro show_topic(filename) %}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"./syntax/{{ filename }}.md\" /\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":"\u003chr\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":"{% endmacro %}"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":"{% for k,v in topics %}"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" {% if \u0027component\u0027 in v[2] %}"},{"lineNumber":39,"author":{"gitId":"-"},"content":"{{ show_topic(k) }}"},{"lineNumber":40,"author":{"gitId":"-"},"content":" {% endif %}"},{"lineNumber":41,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cbr\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"{% from \"njk/common.njk\" import previous_next %}"},{"lineNumber":46,"author":{"gitId":"-"},"content":"{{ previous_next(\u0027formattingContents\u0027, \u0027components/presentation\u0027) }}"}],"authorContributionMap":{"jingting1412":2,"-":44}},{"path":"package.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"name\": \"root\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"private\": true,"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"workspaces\": [\"packages/*\"],"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"scripts\": {"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"prebuild:backend\": \"npm run clean\","},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"build:backend\": \"tsc --noEmitOnError\","},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"build:web\": \"cd packages/core-web \u0026\u0026 npm run build\","},{"lineNumber":9,"author":{"gitId":"-"},"content":" \"build:dg\": \"cd docs \u0026\u0026 ../packages/cli/index.js build -s dg-site.json\","},{"lineNumber":10,"author":{"gitId":"-"},"content":" \"build:ug\": \"cd docs \u0026\u0026 ../packages/cli/index.js build -s ug-site.json\","},{"lineNumber":11,"author":{"gitId":"-"},"content":" \"build:docs\": \"cd docs \u0026\u0026 node ../packages/cli/index.js build --baseUrl\","},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"deploy:dg\": \"cd docs \u0026\u0026 ../packages/cli/index.js deploy -s dg-site.json --ci\","},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"deploy:ug\": \"cd docs \u0026\u0026 ../packages/cli/index.js deploy -s ug-site.json --ci\","},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"deploy:netlify\": \"npm run setup \u0026\u0026 npm run build:web \u0026\u0026 cd docs \u0026\u0026 node ../packages/cli/index.js build --baseUrl\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"clean\": \"node ./scripts/clean.js\","},{"lineNumber":16,"author":{"gitId":"-"},"content":" \"csslint\": \"stylelint **/*.css **/*.vue\","},{"lineNumber":17,"author":{"gitId":"-"},"content":" \"csslintfix\": \"stylelint **/*.css **/*.vue --fix\","},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"dev\": \"tsc --watch\","},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"lint\": \"eslint . --ext .js,.ts,.vue \u0026\u0026 npm run csslint\","},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"lintfix\": \"eslint . --ext .js,.ts,.vue --fix \u0026\u0026 npm run csslintfix\","},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"setup\": \"npm ci \u0026\u0026 npm run clean \u0026\u0026 lerna run prepare\","},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"test\": \"npm run lint \u0026\u0026 lerna run test --stream --parallel\","},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"updatetest\": \"lerna run updatetest --stream --parallel\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" },"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"devDependencies\": {"},{"lineNumber":26,"author":{"gitId":"LamJiuFong"},"content":" \"@stylistic/stylelint-plugin\": \"^2.1.0\","},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"@types/node\": \"^18.15.0\","},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"@typescript-eslint/eslint-plugin\": \"^5.16.0\","},{"lineNumber":29,"author":{"gitId":"-"},"content":" \"@typescript-eslint/parser\": \"^5.16.0\","},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"eslint\": \"^7.32.0\","},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"eslint-config-airbnb-base\": \"^15.0.0\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"eslint-config-airbnb-typescript\": \"^16.1.4\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"eslint-plugin-import\": \"^2.25.2\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"eslint-plugin-lodash\": \"^7.2.0\","},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"lerna\": \"^6.5.1\","},{"lineNumber":36,"author":{"gitId":"LamJiuFong"},"content":" \"stylelint\": \"^16.2.1\","},{"lineNumber":37,"author":{"gitId":"LamJiuFong"},"content":" \"stylelint-config-recommended-vue\": \"^1.5.0\","},{"lineNumber":38,"author":{"gitId":"LamJiuFong"},"content":" \"stylelint-config-standard\": \"^36.0.0\","},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"typescript\": \"^4.6.2\","},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"walk-sync\": \"^2.0.2\""},{"lineNumber":41,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":42,"author":{"gitId":"LamJiuFong"},"content":" \"dependencies\": {"},{"lineNumber":43,"author":{"gitId":"LamJiuFong"},"content":" \"postcss\": \"^8.4.35\""},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":7,"-":38}},{"path":"packages/cli/index.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env node"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"// Entry file for MarkBind project"},{"lineNumber":4,"author":{"gitId":"-"},"content":"const program \u003d require(\u0027commander\u0027);"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":"const logger \u003d require(\u0027./src/util/logger\u0027);"},{"lineNumber":7,"author":{"gitId":"-"},"content":"const { build } \u003d require(\u0027./src/cmd/build\u0027);"},{"lineNumber":8,"author":{"gitId":"-"},"content":"const { deploy } \u003d require(\u0027./src/cmd/deploy\u0027);"},{"lineNumber":9,"author":{"gitId":"-"},"content":"const { init } \u003d require(\u0027./src/cmd/init\u0027);"},{"lineNumber":10,"author":{"gitId":"-"},"content":"const { serve } \u003d require(\u0027./src/cmd/serve\u0027);"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"const CLI_VERSION \u003d require(\u0027./package.json\u0027).version;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"process.title \u003d \u0027MarkBind\u0027;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"process.stdout.write("},{"lineNumber":16,"author":{"gitId":"-"},"content":" `${String.fromCharCode(27)}]0; MarkBind${String.fromCharCode(7)}`,"},{"lineNumber":17,"author":{"gitId":"-"},"content":");"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"function printHeader() {"},{"lineNumber":20,"author":{"gitId":"-"},"content":" logger.logo();"},{"lineNumber":21,"author":{"gitId":"-"},"content":" logger.log(` v${CLI_VERSION}`);"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"program"},{"lineNumber":25,"author":{"gitId":"-"},"content":" .addHelpText(\u0027beforeAll\u0027, printHeader())"},{"lineNumber":26,"author":{"gitId":"-"},"content":" .showHelpAfterError(\u0027(run \"markbind --help\" to list commands)\u0027);"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"program"},{"lineNumber":29,"author":{"gitId":"-"},"content":" .allowUnknownOption()"},{"lineNumber":30,"author":{"gitId":"-"},"content":" .usage(\u0027\u003ccommand\u003e\u0027);"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"program"},{"lineNumber":33,"author":{"gitId":"-"},"content":" .name(\u0027markbind\u0027)"},{"lineNumber":34,"author":{"gitId":"-"},"content":" .version(CLI_VERSION);"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"program"},{"lineNumber":37,"author":{"gitId":"-"},"content":" .command(\u0027init [root]\u0027)"},{"lineNumber":38,"author":{"gitId":"-"},"content":" .option(\u0027-c, --convert\u0027, \u0027convert a GitHub wiki or docs folder to a MarkBind website\u0027)"},{"lineNumber":39,"author":{"gitId":"-"},"content":" .option(\u0027-t, --template \u003ctype\u003e\u0027, \u0027initialise markbind with a specified template\u0027, \u0027default\u0027)"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .alias(\u0027i\u0027)"},{"lineNumber":41,"author":{"gitId":"-"},"content":" .description(\u0027init a markbind website project\u0027)"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .action((root, options) \u003d\u003e {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" init(root, options);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" });"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"program"},{"lineNumber":47,"author":{"gitId":"-"},"content":" .command(\u0027serve [root]\u0027)"},{"lineNumber":48,"author":{"gitId":"-"},"content":" .alias(\u0027s\u0027)"},{"lineNumber":49,"author":{"gitId":"-"},"content":" .option(\u0027-f, --force-reload\u0027, \u0027force a full reload of all site files when a file is changed\u0027)"},{"lineNumber":50,"author":{"gitId":"-"},"content":" .option(\u0027-n, --no-open\u0027, \u0027do not automatically open the site in browser\u0027)"},{"lineNumber":51,"author":{"gitId":"-"},"content":" .option(\u0027-o, --one-page [file]\u0027, \u0027build and serve only a single page in the site initially,\u0027"},{"lineNumber":52,"author":{"gitId":"-"},"content":" + \u0027building more pages when they are navigated to. Also lazily rebuilds only the page being viewed when\u0027"},{"lineNumber":53,"author":{"gitId":"-"},"content":" + \u0027there are changes to the source files (if needed), building others when navigated to\u0027)"},{"lineNumber":54,"author":{"gitId":"-"},"content":" .option(\u0027-b, --background-build\u0027, \u0027when --one-page is specified, enhances one-page serve by building\u0027"},{"lineNumber":55,"author":{"gitId":"-"},"content":" + \u0027remaining pages in the background\u0027)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" .option(\u0027-p, --port \u003cport\u003e\u0027, \u0027port for server to listen on (Default is 8080)\u0027)"},{"lineNumber":57,"author":{"gitId":"-"},"content":" .option(\u0027-s, --site-config \u003cfile\u003e\u0027, \u0027specify the site config file (default: site.json)\u0027)"},{"lineNumber":58,"author":{"gitId":"-"},"content":" .option(\u0027-d, --dev\u0027, \u0027development mode, enabling live \u0026 hot reload for frontend source files.\u0027)"},{"lineNumber":59,"author":{"gitId":"LamJiuFong"},"content":" .option(\u0027-a, --address \u003caddress\u003e\u0027, \u0027specify the server address/host (Default is 127.0.0.1)\u0027)"},{"lineNumber":60,"author":{"gitId":"-"},"content":" .description(\u0027build then serve a website from a directory\u0027)"},{"lineNumber":61,"author":{"gitId":"-"},"content":" .action((userSpecifiedRoot, options) \u003d\u003e {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" serve(userSpecifiedRoot, options);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" });"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":"program"},{"lineNumber":66,"author":{"gitId":"-"},"content":" .command(\u0027build [root] [output]\u0027)"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .alias(\u0027b\u0027)"},{"lineNumber":68,"author":{"gitId":"-"},"content":" .option(\u0027--baseUrl [baseUrl]\u0027,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u0027optional flag which overrides baseUrl in site.json, leave argument empty for empty baseUrl\u0027)"},{"lineNumber":70,"author":{"gitId":"-"},"content":" .option(\u0027-s, --site-config \u003cfile\u003e\u0027, \u0027specify the site config file (default: site.json)\u0027)"},{"lineNumber":71,"author":{"gitId":"-"},"content":" .description(\u0027build a website\u0027)"},{"lineNumber":72,"author":{"gitId":"-"},"content":" .action((userSpecifiedRoot, output, options) \u003d\u003e {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" build(userSpecifiedRoot, output, options);"},{"lineNumber":74,"author":{"gitId":"-"},"content":" });"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"program"},{"lineNumber":77,"author":{"gitId":"-"},"content":" .command(\u0027deploy [root]\u0027)"},{"lineNumber":78,"author":{"gitId":"-"},"content":" .alias(\u0027d\u0027)"},{"lineNumber":79,"author":{"gitId":"-"},"content":" .option(\u0027-c, --ci [githubTokenName]\u0027, \u0027deploy the site in CI Environment [GITHUB_TOKEN]\u0027)"},{"lineNumber":80,"author":{"gitId":"-"},"content":" .option(\u0027-n, --no-build\u0027, \u0027do not automatically build the site before deployment\u0027)"},{"lineNumber":81,"author":{"gitId":"-"},"content":" .option(\u0027-s, --site-config \u003cfile\u003e\u0027, \u0027specify the site config file (default: site.json)\u0027)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" .description(\u0027deploy the latest build of the site to the repo\\\u0027s Github pages\u0027)"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .action((userSpecifiedRoot, options) \u003d\u003e {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" deploy(userSpecifiedRoot, options);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" });"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"program.parse(process.argv);"}],"authorContributionMap":{"LamJiuFong":1,"-":86}},{"path":"packages/cli/src/cmd/serve.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"const chokidar \u003d require(\u0027chokidar\u0027);"},{"lineNumber":2,"author":{"gitId":"-"},"content":"const path \u003d require(\u0027path\u0027);"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":"const readline \u003d require(\u0027readline\u0027);"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"const { Site } \u003d require(\u0027@markbind/core\u0027);"},{"lineNumber":6,"author":{"gitId":"-"},"content":"const { pageVueServerRenderer } \u003d require(\u0027@markbind/core/src/Page/PageVueServerRenderer\u0027);"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"const fsUtil \u003d require(\u0027@markbind/core/src/utils/fsUtil\u0027);"},{"lineNumber":9,"author":{"gitId":"-"},"content":"const { INDEX_MARKDOWN_FILE } \u003d require(\u0027@markbind/core/src/Site/constants\u0027);"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"const cliUtil \u003d require(\u0027../util/cliUtil\u0027);"},{"lineNumber":12,"author":{"gitId":"-"},"content":"const liveServer \u003d require(\u0027../lib/live-server\u0027);"},{"lineNumber":13,"author":{"gitId":"-"},"content":"const logger \u003d require(\u0027../util/logger\u0027);"},{"lineNumber":14,"author":{"gitId":"-"},"content":"const {"},{"lineNumber":15,"author":{"gitId":"-"},"content":" addHandler,"},{"lineNumber":16,"author":{"gitId":"-"},"content":" changeHandler,"},{"lineNumber":17,"author":{"gitId":"-"},"content":" lazyReloadMiddleware,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" removeHandler,"},{"lineNumber":19,"author":{"gitId":"-"},"content":"} \u003d require(\u0027../util/serveUtil\u0027);"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"LamJiuFong"},"content":"function isIPAddressZero(address) {"},{"lineNumber":22,"author":{"gitId":"LamJiuFong"},"content":" const patternForZero \u003d /^0(\\.0)*$/;"},{"lineNumber":23,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":24,"author":{"gitId":"LamJiuFong"},"content":" return patternForZero.test(address);"},{"lineNumber":25,"author":{"gitId":"LamJiuFong"},"content":"}"},{"lineNumber":26,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":27,"author":{"gitId":"LamJiuFong"},"content":"function questionAsync(question) {"},{"lineNumber":28,"author":{"gitId":"LamJiuFong"},"content":" const readlineInterface \u003d readline.createInterface({ input: process.stdin, output: process.stdout });"},{"lineNumber":29,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":30,"author":{"gitId":"LamJiuFong"},"content":" return new Promise((resolve) \u003d\u003e {"},{"lineNumber":31,"author":{"gitId":"LamJiuFong"},"content":" readlineInterface.question(question, (response) \u003d\u003e {"},{"lineNumber":32,"author":{"gitId":"LamJiuFong"},"content":" readlineInterface.close();"},{"lineNumber":33,"author":{"gitId":"LamJiuFong"},"content":" resolve(response);"},{"lineNumber":34,"author":{"gitId":"LamJiuFong"},"content":" });"},{"lineNumber":35,"author":{"gitId":"LamJiuFong"},"content":" });"},{"lineNumber":36,"author":{"gitId":"LamJiuFong"},"content":"}"},{"lineNumber":37,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"function serve(userSpecifiedRoot, options) {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" if (options.dev) {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" logger.useDebugConsole();"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" let rootFolder;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" rootFolder \u003d cliUtil.findRootFolder(userSpecifiedRoot, options.siteConfig);"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" if (options.forceReload \u0026\u0026 options.onePage) {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" logger.error(\u0027Oops! You shouldn\\\u0027t need to use the --force-reload option with --one-page.\u0027);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" process.exitCode \u003d 1;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" process.exit();"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":" } catch (error) {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" logger.error(error.message);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" process.exitCode \u003d 1;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" const logsFolder \u003d path.join(rootFolder, \u0027_markbind/logs\u0027);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" const outputFolder \u003d path.join(rootFolder, \u0027_site\u0027);"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":" const presentDefaultFile \u003d fsUtil.fileExists(INDEX_MARKDOWN_FILE) ? INDEX_MARKDOWN_FILE : false;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" if (options.onePage \u003d\u003d\u003d true \u0026\u0026 !presentDefaultFile) {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" logger.error(\u0027Oops! It seems that you didn\\\u0027t have the default file index.md.\u0027);"},{"lineNumber":63,"author":{"gitId":"-"},"content":" process.exitCode \u003d 1;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" process.exit();"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":" let onePagePath \u003d options.onePage \u003d\u003d\u003d true ? presentDefaultFile : options.onePage;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" onePagePath \u003d onePagePath ? fsUtil.ensurePosix(onePagePath) : onePagePath;"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":" const reloadAfterBackgroundBuild \u003d () \u003d\u003e {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" logger.info(\u0027All opened pages will be reloaded.\u0027);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" liveServer.reloadActiveTabs();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" };"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" const site \u003d new Site(rootFolder, outputFolder, onePagePath,"},{"lineNumber":75,"author":{"gitId":"-"},"content":" options.forceReload, options.siteConfig, options.dev,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" options.backgroundBuild, reloadAfterBackgroundBuild);"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" // server config"},{"lineNumber":79,"author":{"gitId":"-"},"content":" const serverConfig \u003d {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" open: options.open,"},{"lineNumber":81,"author":{"gitId":"-"},"content":" logLevel: 0,"},{"lineNumber":82,"author":{"gitId":"-"},"content":" root: outputFolder,"},{"lineNumber":83,"author":{"gitId":"-"},"content":" port: options.port || 8080,"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" host: options.address || \u0027127.0.0.1\u0027,"},{"lineNumber":85,"author":{"gitId":"-"},"content":" middleware: [],"},{"lineNumber":86,"author":{"gitId":"-"},"content":" mount: [],"},{"lineNumber":87,"author":{"gitId":"-"},"content":" };"},{"lineNumber":88,"author":{"gitId":"-"},"content":""},{"lineNumber":89,"author":{"gitId":"-"},"content":" site"},{"lineNumber":90,"author":{"gitId":"-"},"content":" .readSiteConfig()"},{"lineNumber":91,"author":{"gitId":"-"},"content":" .then(async (config) \u003d\u003e {"},{"lineNumber":92,"author":{"gitId":"LamJiuFong"},"content":" if (isIPAddressZero(serverConfig.host)) {"},{"lineNumber":93,"author":{"gitId":"LamJiuFong"},"content":" const response \u003d await questionAsync("},{"lineNumber":94,"author":{"gitId":"LamJiuFong"},"content":" \u0027WARNING: Using the address \\\u00270.0.0.0\\\u0027 could potentially expose your server to the internet, \u0027"},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":" + \u0027which may pose security risks. \\n\u0027"},{"lineNumber":96,"author":{"gitId":"LamJiuFong"},"content":" + \u0027Proceed with caution? [y/N] \u0027);"},{"lineNumber":97,"author":{"gitId":"LamJiuFong"},"content":" if (response.toLowerCase() \u003d\u003d\u003d \u0027y\u0027) {"},{"lineNumber":98,"author":{"gitId":"LamJiuFong"},"content":" logger.info(\u0027Proceeding to generate website\u0027);"},{"lineNumber":99,"author":{"gitId":"LamJiuFong"},"content":" } else {"},{"lineNumber":100,"author":{"gitId":"LamJiuFong"},"content":" logger.info(\u0027Website generation is cancelled.\u0027);"},{"lineNumber":101,"author":{"gitId":"LamJiuFong"},"content":" process.exit();"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":" }"},{"lineNumber":103,"author":{"gitId":"LamJiuFong"},"content":" }"},{"lineNumber":104,"author":{"gitId":"LamJiuFong"},"content":""},{"lineNumber":105,"author":{"gitId":"-"},"content":" serverConfig.mount.push([config.baseUrl || \u0027/\u0027, outputFolder]);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" if (options.dev) {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" // eslint-disable-next-line global-require"},{"lineNumber":109,"author":{"gitId":"-"},"content":" const webpackDevConfig \u003d require(\u0027@markbind/core-web/webpack.dev\u0027);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" await webpackDevConfig.serverEntry(pageVueServerRenderer.updateMarkBindVueBundle, rootFolder);"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":" const getMiddlewares \u003d webpackDevConfig.clientEntry;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" getMiddlewares(`${config.baseUrl}/markbind`)"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .forEach(middleware \u003d\u003e serverConfig.middleware.push(middleware));"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":" if (onePagePath) {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" const onePageHtmlUrl \u003d `${config.baseUrl}/${onePagePath.replace(/\\.md$/, \u0027.html\u0027)}`;"},{"lineNumber":119,"author":{"gitId":"-"},"content":" serverConfig.open \u003d serverConfig.open \u0026\u0026 onePageHtmlUrl;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" serverConfig.middleware.push(lazyReloadMiddleware(site, rootFolder, config));"},{"lineNumber":121,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" serverConfig.open \u003d serverConfig.open \u0026\u0026 `${config.baseUrl}/`;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" return site.generate();"},{"lineNumber":126,"author":{"gitId":"-"},"content":" })"},{"lineNumber":127,"author":{"gitId":"-"},"content":" .then(() \u003d\u003e {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" const watcher \u003d chokidar.watch(rootFolder, {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" ignored: ["},{"lineNumber":130,"author":{"gitId":"-"},"content":" logsFolder,"},{"lineNumber":131,"author":{"gitId":"-"},"content":" outputFolder,"},{"lineNumber":132,"author":{"gitId":"-"},"content":" /(^|[/\\\\])\\../,"},{"lineNumber":133,"author":{"gitId":"-"},"content":" x \u003d\u003e x.endsWith(\u0027___jb_tmp___\u0027), x \u003d\u003e x.endsWith(\u0027___jb_old___\u0027), // IDE temp files"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":135,"author":{"gitId":"-"},"content":" ignoreInitial: true,"},{"lineNumber":136,"author":{"gitId":"-"},"content":" });"},{"lineNumber":137,"author":{"gitId":"-"},"content":" watcher"},{"lineNumber":138,"author":{"gitId":"-"},"content":" .on(\u0027add\u0027, addHandler(site, onePagePath))"},{"lineNumber":139,"author":{"gitId":"-"},"content":" .on(\u0027change\u0027, changeHandler(site, onePagePath))"},{"lineNumber":140,"author":{"gitId":"-"},"content":" .on(\u0027unlink\u0027, removeHandler(site, onePagePath));"},{"lineNumber":141,"author":{"gitId":"-"},"content":" })"},{"lineNumber":142,"author":{"gitId":"-"},"content":" .then(() \u003d\u003e {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" const server \u003d liveServer.start(serverConfig);"},{"lineNumber":144,"author":{"gitId":"-"},"content":" server.addListener(\u0027listening\u0027, () \u003d\u003e {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" const address \u003d server.address();"},{"lineNumber":146,"author":{"gitId":"LamJiuFong"},"content":" const serveHost \u003d address.address;"},{"lineNumber":147,"author":{"gitId":"LamJiuFong"},"content":" const servePort \u003d address.port;"},{"lineNumber":148,"author":{"gitId":"LamJiuFong"},"content":" const serveURL \u003d `http://${serveHost}:${servePort}`;"},{"lineNumber":149,"author":{"gitId":"-"},"content":" logger.info(`Serving \"${outputFolder}\" at ${serveURL}`);"},{"lineNumber":150,"author":{"gitId":"-"},"content":" logger.info(\u0027Press CTRL+C to stop ...\u0027);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" });"},{"lineNumber":152,"author":{"gitId":"-"},"content":" })"},{"lineNumber":153,"author":{"gitId":"-"},"content":" .catch((error) \u003d\u003e {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" logger.error(error.message);"},{"lineNumber":155,"author":{"gitId":"-"},"content":" process.exitCode \u003d 1;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" });"},{"lineNumber":157,"author":{"gitId":"-"},"content":"}"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"module.exports \u003d {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" serve,"},{"lineNumber":161,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"LamJiuFong":35,"-":126}},{"path":"packages/cli/src/lib/live-server/index.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env node"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"/*"},{"lineNumber":4,"author":{"gitId":"-"},"content":" * Patch for live-server to expose websocket clients for external use in order to keep track"},{"lineNumber":5,"author":{"gitId":"-"},"content":" * of opened tabs."},{"lineNumber":6,"author":{"gitId":"-"},"content":" *"},{"lineNumber":7,"author":{"gitId":"-"},"content":" * live-server locally keeps track of opened client websockets in order for it to be able"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * to perform live reload whenever there are changes in the watched directory. However, the"},{"lineNumber":9,"author":{"gitId":"-"},"content":" * clients list is stored internally."},{"lineNumber":10,"author":{"gitId":"-"},"content":" *"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * This patch allows us to gain access to the information that can be gathered with the client"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * websockets, which in turn enables the support for multiple-tab development."},{"lineNumber":13,"author":{"gitId":"-"},"content":" *"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Patch is written against live-server v1.2.1"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * The **only** changes are prefaced with a CHANGED comment"},{"lineNumber":16,"author":{"gitId":"-"},"content":" */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"var fs \u003d require(\u0027fs\u0027),"},{"lineNumber":19,"author":{"gitId":"-"},"content":" connect \u003d require(\u0027connect\u0027),"},{"lineNumber":20,"author":{"gitId":"-"},"content":" serveIndex \u003d require(\u0027serve-index\u0027),"},{"lineNumber":21,"author":{"gitId":"-"},"content":" logger \u003d require(\u0027morgan\u0027),"},{"lineNumber":22,"author":{"gitId":"-"},"content":" WebSocket \u003d require(\u0027faye-websocket\u0027),"},{"lineNumber":23,"author":{"gitId":"-"},"content":" path \u003d require(\u0027path\u0027),"},{"lineNumber":24,"author":{"gitId":"-"},"content":" parse \u003d require(\u0027url-parse\u0027),"},{"lineNumber":25,"author":{"gitId":"-"},"content":" http \u003d require(\u0027http\u0027),"},{"lineNumber":26,"author":{"gitId":"-"},"content":" send \u003d require(\u0027send\u0027),"},{"lineNumber":27,"author":{"gitId":"-"},"content":" open \u003d require(\u0027opn\u0027),"},{"lineNumber":28,"author":{"gitId":"-"},"content":" es \u003d require(\"event-stream\"),"},{"lineNumber":29,"author":{"gitId":"-"},"content":" os \u003d require(\u0027os\u0027),"},{"lineNumber":30,"author":{"gitId":"-"},"content":" chokidar \u003d require(\u0027chokidar\u0027),"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // CHANGED: added MarkBind\u0027s core fsUtil package"},{"lineNumber":32,"author":{"gitId":"-"},"content":" fsUtil \u003d require(\u0027@markbind/core/src/utils/fsUtil\u0027);"},{"lineNumber":33,"author":{"gitId":"-"},"content":"require(\u0027colors\u0027);"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"// CHANGED: added absolute path that directs to the live-server directory"},{"lineNumber":36,"author":{"gitId":"-"},"content":"const pathToLiveServerDir \u003d path.dirname(require.resolve(\u0027live-server\u0027));"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"// CHANGED: correctly resolve to the live-server directory"},{"lineNumber":39,"author":{"gitId":"-"},"content":"var INJECTED_CODE \u003d fs.readFileSync(path.join(pathToLiveServerDir, \"injected.html\"), \"utf8\");"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"var LiveServer \u003d {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" server: null,"},{"lineNumber":43,"author":{"gitId":"-"},"content":" watcher: null,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" logLevel: 2,"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" // CHANGED: added properties relevant to MarkBind live-preview"},{"lineNumber":47,"author":{"gitId":"-"},"content":" activeTabs: [],"},{"lineNumber":48,"author":{"gitId":"-"},"content":" baseUrl: \u0027\u0027,"},{"lineNumber":49,"author":{"gitId":"-"},"content":"};"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"function escape(html){"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return String(html)"},{"lineNumber":53,"author":{"gitId":"-"},"content":" .replace(/\u0026(?!\\w+;)/g, \u0027\u0026amp;\u0027)"},{"lineNumber":54,"author":{"gitId":"-"},"content":" .replace(/\u003c/g, \u0027\u0026lt;\u0027)"},{"lineNumber":55,"author":{"gitId":"-"},"content":" .replace(/\u003e/g, \u0027\u0026gt;\u0027)"},{"lineNumber":56,"author":{"gitId":"-"},"content":" .replace(/\"/g, \u0027\u0026quot;\u0027);"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":"// Based on connect.static(), but streamlined and with added code injecter"},{"lineNumber":60,"author":{"gitId":"-"},"content":"function staticServer(root) {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" var isFile \u003d false;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" try { // For supporting mounting files instead of just directories"},{"lineNumber":63,"author":{"gitId":"-"},"content":" isFile \u003d fs.statSync(root).isFile();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" } catch (e) {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" if (e.code !\u003d\u003d \"ENOENT\") throw e;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return function(req, res, next) {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" if (req.method !\u003d\u003d \u0027GET\u0027 \u0026\u0026 req.method !\u003d\u003d \u0027HEAD\u0027) return next();"},{"lineNumber":69,"author":{"gitId":"-"},"content":" const reqpath \u003d isFile ? \"\" : parse(req.url).pathname;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" var hasNoOrigin \u003d !req.headers.origin;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" var injectCandidates \u003d [ new RegExp(\"\u003c/body\u003e\", \"i\"), new RegExp(\"\u003c/svg\u003e\"), new RegExp(\"\u003c/head\u003e\", \"i\")];"},{"lineNumber":72,"author":{"gitId":"-"},"content":" var injectTag \u003d null;"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" function directory() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" var pathname \u003d parse(req.url).pathname;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" res.statusCode \u003d 301;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" res.setHeader(\u0027Location\u0027, pathname + \u0027/\u0027);"},{"lineNumber":78,"author":{"gitId":"-"},"content":" res.end(\u0027Redirecting to \u0027 + escape(pathname) + \u0027/\u0027);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":""},{"lineNumber":81,"author":{"gitId":"-"},"content":" function file(filepath /*, stat*/) {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" var x \u003d path.extname(filepath).toLocaleLowerCase(), match,"},{"lineNumber":83,"author":{"gitId":"-"},"content":" possibleExtensions \u003d [ \"\", \".html\", \".htm\", \".xhtml\", \".php\", \".svg\" ];"},{"lineNumber":84,"author":{"gitId":"-"},"content":" if (hasNoOrigin \u0026\u0026 (possibleExtensions.indexOf(x) \u003e -1)) {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" // TODO: Sync file read here is not nice, but we need to determine if the html should be injected or not"},{"lineNumber":86,"author":{"gitId":"-"},"content":" var contents \u003d fs.readFileSync(filepath, \"utf8\");"},{"lineNumber":87,"author":{"gitId":"-"},"content":" for (var i \u003d 0; i \u003c injectCandidates.length; ++i) {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" match \u003d injectCandidates[i].exec(contents);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (match) {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" injectTag \u003d match[0];"},{"lineNumber":91,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":" if (injectTag \u003d\u003d\u003d null \u0026\u0026 LiveServer.logLevel \u003e\u003d 3) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" console.warn(\"Failed to inject refresh script!\".yellow,"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \"Couldn\u0027t find any of the tags \", injectCandidates, \"from\", filepath);"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":""},{"lineNumber":102,"author":{"gitId":"-"},"content":" function error(err) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (err.status \u003d\u003d\u003d 404) return next();"},{"lineNumber":104,"author":{"gitId":"-"},"content":" next(err);"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" function inject(stream) {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" if (injectTag) {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" // We need to modify the length given to browser"},{"lineNumber":110,"author":{"gitId":"-"},"content":" var len \u003d INJECTED_CODE.length + res.getHeader(\u0027Content-Length\u0027);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" res.setHeader(\u0027Content-Length\u0027, len);"},{"lineNumber":112,"author":{"gitId":"-"},"content":" var originalPipe \u003d stream.pipe;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" stream.pipe \u003d function(resp) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" originalPipe.call(stream, es.replace(new RegExp(injectTag, \"i\"), INJECTED_CODE + injectTag)).pipe(resp);"},{"lineNumber":115,"author":{"gitId":"-"},"content":" };"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":" send(req, reqpath, { root: root })"},{"lineNumber":120,"author":{"gitId":"-"},"content":" .on(\u0027error\u0027, error)"},{"lineNumber":121,"author":{"gitId":"-"},"content":" .on(\u0027directory\u0027, directory)"},{"lineNumber":122,"author":{"gitId":"-"},"content":" .on(\u0027file\u0027, file)"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .on(\u0027stream\u0027, inject)"},{"lineNumber":124,"author":{"gitId":"-"},"content":" .pipe(res);"},{"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":" * Rewrite request URL and pass it back to the static handler."},{"lineNumber":130,"author":{"gitId":"-"},"content":" * @param staticHandler {function} Next handler"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * @param file {string} Path to the entry point file"},{"lineNumber":132,"author":{"gitId":"-"},"content":" */"},{"lineNumber":133,"author":{"gitId":"-"},"content":"function entryPoint(staticHandler, file) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" if (!file) return function(req, res, next) { next(); };"},{"lineNumber":135,"author":{"gitId":"-"},"content":""},{"lineNumber":136,"author":{"gitId":"-"},"content":" return function(req, res, next) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" req.url \u003d \"/\" + file;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" staticHandler(req, res, next);"},{"lineNumber":139,"author":{"gitId":"-"},"content":" };"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * Start a live server with parameters given as an object"},{"lineNumber":144,"author":{"gitId":"LamJiuFong"},"content":" * @param host {string} Address to bind to (default: 127.0.0.1)"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * @param port {number} Port number (default: 8080)"},{"lineNumber":146,"author":{"gitId":"-"},"content":" * @param root {string} Path to root directory (default: cwd)"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * @param watch {array} Paths to exclusively watch for changes"},{"lineNumber":148,"author":{"gitId":"-"},"content":" * @param ignore {array} Paths to ignore when watching files for changes"},{"lineNumber":149,"author":{"gitId":"-"},"content":" * @param ignorePattern {regexp} Ignore files by RegExp"},{"lineNumber":150,"author":{"gitId":"-"},"content":" * @param noCssInject Don\u0027t inject CSS changes, just reload as with any other file change"},{"lineNumber":151,"author":{"gitId":"-"},"content":" * @param open {(string|string[])} Subpath(s) to open in browser, use false to suppress launch (default: server root)"},{"lineNumber":152,"author":{"gitId":"-"},"content":" * @param mount {array} Mount directories onto a route, e.g. [[\u0027/components\u0027, \u0027./node_modules\u0027]]."},{"lineNumber":153,"author":{"gitId":"-"},"content":" * @param logLevel {number} 0 \u003d errors only, 1 \u003d some, 2 \u003d lots"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * @param file {string} Path to the entry point file"},{"lineNumber":155,"author":{"gitId":"-"},"content":" * @param wait {number} Server will wait for all changes, before reloading"},{"lineNumber":156,"author":{"gitId":"-"},"content":" * @param htpasswd {string} Path to htpasswd file to enable HTTP Basic authentication"},{"lineNumber":157,"author":{"gitId":"-"},"content":" * @param middleware {array} Append middleware to stack, e.g. [function(req, res, next) { next(); }]."},{"lineNumber":158,"author":{"gitId":"-"},"content":" */"},{"lineNumber":159,"author":{"gitId":"-"},"content":"LiveServer.start \u003d function(options) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" options \u003d options || {};"},{"lineNumber":161,"author":{"gitId":"LamJiuFong"},"content":" var host \u003d options.host ?? \u0027127.0.0.1\u0027;"},{"lineNumber":162,"author":{"gitId":"LamJiuFong"},"content":" var port \u003d options.port ?? 8080; // 0 means random"},{"lineNumber":163,"author":{"gitId":"-"},"content":" var root \u003d options.root || process.cwd();"},{"lineNumber":164,"author":{"gitId":"-"},"content":" var mount \u003d options.mount || [];"},{"lineNumber":165,"author":{"gitId":"-"},"content":" var watchPaths \u003d options.watch || [root];"},{"lineNumber":166,"author":{"gitId":"-"},"content":" LiveServer.logLevel \u003d options.logLevel \u003d\u003d\u003d undefined ? 2 : options.logLevel;"},{"lineNumber":167,"author":{"gitId":"-"},"content":" var openPath \u003d (options.open \u003d\u003d\u003d undefined || options.open \u003d\u003d\u003d true) ?"},{"lineNumber":168,"author":{"gitId":"-"},"content":" \"\" : ((options.open \u003d\u003d\u003d null || options.open \u003d\u003d\u003d false) ? null : options.open);"},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (options.noBrowser) openPath \u003d null; // Backwards compatibility with 0.7.0"},{"lineNumber":170,"author":{"gitId":"-"},"content":" var file \u003d options.file;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" var staticServerHandler \u003d staticServer(root);"},{"lineNumber":172,"author":{"gitId":"-"},"content":" var wait \u003d options.wait \u003d\u003d\u003d undefined ? 100 : options.wait;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" var browser \u003d options.browser || null;"},{"lineNumber":174,"author":{"gitId":"-"},"content":" var htpasswd \u003d options.htpasswd || null;"},{"lineNumber":175,"author":{"gitId":"-"},"content":" var cors \u003d options.cors || false;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" var https \u003d options.https || null;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" var proxy \u003d options.proxy || [];"},{"lineNumber":178,"author":{"gitId":"-"},"content":" var middleware \u003d options.middleware || [];"},{"lineNumber":179,"author":{"gitId":"-"},"content":" var noCssInject \u003d options.noCssInject;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" var httpsModule \u003d options.httpsModule;"},{"lineNumber":181,"author":{"gitId":"-"},"content":""},{"lineNumber":182,"author":{"gitId":"-"},"content":" if (httpsModule) {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" try {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" require.resolve(httpsModule);"},{"lineNumber":185,"author":{"gitId":"-"},"content":" } catch (e) {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" console.error((\"HTTPS module \\\"\" + httpsModule + \"\\\" you\u0027ve provided was not found.\").red);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" console.error(\"Did you do\", \"\\\"npm install \" + httpsModule + \"\\\"?\");"},{"lineNumber":188,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }"},{"lineNumber":190,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" httpsModule \u003d \"https\";"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":" // Setup a web server"},{"lineNumber":195,"author":{"gitId":"-"},"content":" var app \u003d connect();"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" // Add logger. Level 2 logs only errors"},{"lineNumber":198,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003d\u003d\u003d 2) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" app.use(logger(\u0027dev\u0027, {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" skip: function (req, res) { return res.statusCode \u003c 400; }"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }));"},{"lineNumber":202,"author":{"gitId":"-"},"content":" // Level 2 or above logs all requests"},{"lineNumber":203,"author":{"gitId":"-"},"content":" } else if (LiveServer.logLevel \u003e 2) {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" app.use(logger(\u0027dev\u0027));"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" if (options.spa) {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" middleware.push(\"spa\");"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }"},{"lineNumber":209,"author":{"gitId":"-"},"content":" // Add middleware"},{"lineNumber":210,"author":{"gitId":"-"},"content":" middleware.map(function(mw) {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" if (typeof mw \u003d\u003d\u003d \"string\") {"},{"lineNumber":212,"author":{"gitId":"-"},"content":" var ext \u003d path.extname(mw).toLocaleLowerCase();"},{"lineNumber":213,"author":{"gitId":"-"},"content":" if (ext !\u003d\u003d \".js\") {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" // CHANGED: correctly resolve to the live-server directory"},{"lineNumber":215,"author":{"gitId":"-"},"content":" mw \u003d require(path.join(pathToLiveServerDir, \"middleware\", mw + \".js\"));"},{"lineNumber":216,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" mw \u003d require(mw);"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":" app.use(mw);"},{"lineNumber":221,"author":{"gitId":"-"},"content":" });"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":" // Use http-auth if configured"},{"lineNumber":224,"author":{"gitId":"-"},"content":" if (htpasswd !\u003d\u003d null) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" var auth \u003d require(\u0027http-auth\u0027);"},{"lineNumber":226,"author":{"gitId":"-"},"content":" var basic \u003d auth.basic({"},{"lineNumber":227,"author":{"gitId":"-"},"content":" realm: \"Please authorize\","},{"lineNumber":228,"author":{"gitId":"-"},"content":" file: htpasswd"},{"lineNumber":229,"author":{"gitId":"-"},"content":" });"},{"lineNumber":230,"author":{"gitId":"-"},"content":" app.use(auth.connect(basic));"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":" if (cors) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" app.use(require(\"cors\")({"},{"lineNumber":234,"author":{"gitId":"-"},"content":" origin: true, // reflecting request origin"},{"lineNumber":235,"author":{"gitId":"-"},"content":" credentials: true // allowing requests with credentials"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }));"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":" mount.forEach(function(mountRule) {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" var mountPath \u003d path.resolve(process.cwd(), mountRule[1]);"},{"lineNumber":240,"author":{"gitId":"-"},"content":" if (!options.watch) // Auto add mount paths to wathing but only if exclusive path option is not given"},{"lineNumber":241,"author":{"gitId":"-"},"content":" watchPaths.push(mountPath);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" app.use(mountRule[0], staticServer(mountPath));"},{"lineNumber":243,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1)"},{"lineNumber":244,"author":{"gitId":"-"},"content":" console.log(\u0027Mapping %s to \"%s\"\u0027, mountRule[0], mountPath);"},{"lineNumber":245,"author":{"gitId":"-"},"content":""},{"lineNumber":246,"author":{"gitId":"-"},"content":" // CHANGED: added baseUrl initialization based on the first mount rule"},{"lineNumber":247,"author":{"gitId":"-"},"content":" if (LiveServer.baseUrl \u003d\u003d\u003d \u0027\u0027) {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" LiveServer.baseUrl \u003d mountRule[0] || \u0027/\u0027;"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":" });"},{"lineNumber":251,"author":{"gitId":"-"},"content":" proxy.forEach(function(proxyRule) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" var proxyOpts \u003d parse(proxyRule[1]);"},{"lineNumber":253,"author":{"gitId":"-"},"content":" proxyOpts.via \u003d true;"},{"lineNumber":254,"author":{"gitId":"-"},"content":" proxyOpts.preserveHost \u003d true;"},{"lineNumber":255,"author":{"gitId":"-"},"content":" app.use(proxyRule[0], require(\u0027proxy-middleware\u0027)(proxyOpts));"},{"lineNumber":256,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1)"},{"lineNumber":257,"author":{"gitId":"-"},"content":" console.log(\u0027Mapping %s to \"%s\"\u0027, proxyRule[0], proxyRule[1]);"},{"lineNumber":258,"author":{"gitId":"-"},"content":" });"},{"lineNumber":259,"author":{"gitId":"-"},"content":" app.use(staticServerHandler) // Custom static server"},{"lineNumber":260,"author":{"gitId":"-"},"content":" .use(entryPoint(staticServerHandler, file))"},{"lineNumber":261,"author":{"gitId":"-"},"content":" .use(serveIndex(root, { icons: true }));"},{"lineNumber":262,"author":{"gitId":"-"},"content":""},{"lineNumber":263,"author":{"gitId":"-"},"content":" var server, protocol;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" if (https !\u003d\u003d null) {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" var httpsConfig \u003d https;"},{"lineNumber":266,"author":{"gitId":"-"},"content":" if (typeof https \u003d\u003d\u003d \"string\") {"},{"lineNumber":267,"author":{"gitId":"-"},"content":" httpsConfig \u003d require(path.resolve(process.cwd(), https));"},{"lineNumber":268,"author":{"gitId":"-"},"content":" }"},{"lineNumber":269,"author":{"gitId":"-"},"content":" server \u003d require(httpsModule).createServer(httpsConfig, app);"},{"lineNumber":270,"author":{"gitId":"-"},"content":" protocol \u003d \"https\";"},{"lineNumber":271,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" server \u003d http.createServer(app);"},{"lineNumber":273,"author":{"gitId":"-"},"content":" protocol \u003d \"http\";"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" // Handle server startup errors"},{"lineNumber":277,"author":{"gitId":"-"},"content":" server.addListener(\u0027error\u0027, function(e) {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" if (e.code \u003d\u003d\u003d \u0027EADDRINUSE\u0027) {"},{"lineNumber":279,"author":{"gitId":"-"},"content":" var serveURL \u003d protocol + \u0027://\u0027 + host + \u0027:\u0027 + port;"},{"lineNumber":280,"author":{"gitId":"-"},"content":" console.log(\u0027%s is already in use. Trying another port.\u0027.yellow, serveURL);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" setTimeout(function() {"},{"lineNumber":282,"author":{"gitId":"-"},"content":" server.listen(0, host);"},{"lineNumber":283,"author":{"gitId":"-"},"content":" }, 1000);"},{"lineNumber":284,"author":{"gitId":"LamJiuFong"},"content":" } else if (e.code \u003d\u003d\u003d \u0027EADDRNOTAVAIL\u0027) {"},{"lineNumber":285,"author":{"gitId":"LamJiuFong"},"content":" console.log(\u0027%s is not available. Trying another address\u0027.yellow, host);"},{"lineNumber":286,"author":{"gitId":"LamJiuFong"},"content":" setTimeout(function() {"},{"lineNumber":287,"author":{"gitId":"LamJiuFong"},"content":" server.listen(port, \u0027127.0.0.1\u0027);"},{"lineNumber":288,"author":{"gitId":"LamJiuFong"},"content":" }, 1000);"},{"lineNumber":289,"author":{"gitId":"LamJiuFong"},"content":" }"},{"lineNumber":290,"author":{"gitId":"LamJiuFong"},"content":" else {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" console.error(e.toString().red);"},{"lineNumber":292,"author":{"gitId":"-"},"content":" LiveServer.shutdown();"},{"lineNumber":293,"author":{"gitId":"-"},"content":" }"},{"lineNumber":294,"author":{"gitId":"-"},"content":" });"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":" // Handle successful server"},{"lineNumber":297,"author":{"gitId":"-"},"content":" server.addListener(\u0027listening\u0027, function(/*e*/) {"},{"lineNumber":298,"author":{"gitId":"-"},"content":" LiveServer.server \u003d server;"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" var address \u003d server.address();"},{"lineNumber":301,"author":{"gitId":"LamJiuFong"},"content":" var serveHost \u003d address.address;"},{"lineNumber":302,"author":{"gitId":"LamJiuFong"},"content":" var openHost \u003d host;"},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":" var serveURL \u003d protocol + \u0027://\u0027 + serveHost + \u0027:\u0027 + address.port;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" var openURL \u003d protocol + \u0027://\u0027 + openHost + \u0027:\u0027 + address.port;"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" var serveURLs \u003d [ serveURL ];"},{"lineNumber":308,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e 2 \u0026\u0026 address.address \u003d\u003d\u003d \"0.0.0.0\") {"},{"lineNumber":309,"author":{"gitId":"-"},"content":" var ifaces \u003d os.networkInterfaces();"},{"lineNumber":310,"author":{"gitId":"-"},"content":" serveURLs \u003d Object.keys(ifaces)"},{"lineNumber":311,"author":{"gitId":"-"},"content":" .map(function(iface) {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" return ifaces[iface];"},{"lineNumber":313,"author":{"gitId":"-"},"content":" })"},{"lineNumber":314,"author":{"gitId":"-"},"content":" // flatten address data, use only IPv4"},{"lineNumber":315,"author":{"gitId":"-"},"content":" .reduce(function(data, addresses) {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" addresses.filter(function(addr) {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" return addr.family \u003d\u003d\u003d \"IPv4\";"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }).forEach(function(addr) {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" data.push(addr);"},{"lineNumber":320,"author":{"gitId":"-"},"content":" });"},{"lineNumber":321,"author":{"gitId":"-"},"content":" return data;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" }, [])"},{"lineNumber":323,"author":{"gitId":"-"},"content":" .map(function(addr) {"},{"lineNumber":324,"author":{"gitId":"-"},"content":" return protocol + \"://\" + addr.address + \":\" + address.port;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" });"},{"lineNumber":326,"author":{"gitId":"-"},"content":" }"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":" // Output"},{"lineNumber":329,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1) {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" if (serveURL \u003d\u003d\u003d openURL)"},{"lineNumber":331,"author":{"gitId":"-"},"content":" if (serveURLs.length \u003d\u003d\u003d 1) {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" console.log((\"Serving \\\"%s\\\" at %s\").green, root, serveURLs[0]);"},{"lineNumber":333,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":334,"author":{"gitId":"-"},"content":" console.log((\"Serving \\\"%s\\\" at\\n\\t%s\").green, root, serveURLs.join(\"\\n\\t\"));"},{"lineNumber":335,"author":{"gitId":"-"},"content":" }"},{"lineNumber":336,"author":{"gitId":"-"},"content":" else"},{"lineNumber":337,"author":{"gitId":"-"},"content":" console.log((\"Serving \\\"%s\\\" at %s (%s)\").green, root, openURL, serveURL);"},{"lineNumber":338,"author":{"gitId":"-"},"content":" }"},{"lineNumber":339,"author":{"gitId":"-"},"content":""},{"lineNumber":340,"author":{"gitId":"-"},"content":" // Launch browser"},{"lineNumber":341,"author":{"gitId":"-"},"content":" if (openPath !\u003d\u003d null)"},{"lineNumber":342,"author":{"gitId":"-"},"content":" if (typeof openPath \u003d\u003d\u003d \"object\") {"},{"lineNumber":343,"author":{"gitId":"-"},"content":" openPath.forEach(function(p) {"},{"lineNumber":344,"author":{"gitId":"-"},"content":" open(openURL + p, {app: browser});"},{"lineNumber":345,"author":{"gitId":"-"},"content":" });"},{"lineNumber":346,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" open(openURL + openPath, {app: browser});"},{"lineNumber":348,"author":{"gitId":"-"},"content":" }"},{"lineNumber":349,"author":{"gitId":"-"},"content":" });"},{"lineNumber":350,"author":{"gitId":"-"},"content":""},{"lineNumber":351,"author":{"gitId":"-"},"content":" // Setup server to listen at port"},{"lineNumber":352,"author":{"gitId":"-"},"content":" server.listen(port, host);"},{"lineNumber":353,"author":{"gitId":"-"},"content":" "},{"lineNumber":354,"author":{"gitId":"-"},"content":" // WebSocket"},{"lineNumber":355,"author":{"gitId":"-"},"content":" // CHANGED: Removed local clients variable in favour of the clients in active tabs entries"},{"lineNumber":356,"author":{"gitId":"-"},"content":" server.addListener(\u0027upgrade\u0027, function(request, socket, head) {"},{"lineNumber":357,"author":{"gitId":"-"},"content":" var ws \u003d new WebSocket(request, socket, head);"},{"lineNumber":358,"author":{"gitId":"-"},"content":" ws.onopen \u003d function() { ws.send(\u0027connected\u0027); };"},{"lineNumber":359,"author":{"gitId":"-"},"content":""},{"lineNumber":360,"author":{"gitId":"-"},"content":" if (wait \u003e 0) {"},{"lineNumber":361,"author":{"gitId":"-"},"content":" (function() {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" var wssend \u003d ws.send;"},{"lineNumber":363,"author":{"gitId":"-"},"content":" var waitTimeout;"},{"lineNumber":364,"author":{"gitId":"-"},"content":" ws.send \u003d function() {"},{"lineNumber":365,"author":{"gitId":"-"},"content":" var args \u003d arguments;"},{"lineNumber":366,"author":{"gitId":"-"},"content":" if (waitTimeout) clearTimeout(waitTimeout);"},{"lineNumber":367,"author":{"gitId":"-"},"content":" waitTimeout \u003d setTimeout(function(){"},{"lineNumber":368,"author":{"gitId":"-"},"content":" wssend.apply(ws, args);"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }, wait);"},{"lineNumber":370,"author":{"gitId":"-"},"content":" };"},{"lineNumber":371,"author":{"gitId":"-"},"content":" })();"},{"lineNumber":372,"author":{"gitId":"-"},"content":" }"},{"lineNumber":373,"author":{"gitId":"-"},"content":""},{"lineNumber":374,"author":{"gitId":"-"},"content":" ws.onclose \u003d function() {"},{"lineNumber":375,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":376,"author":{"gitId":"-"},"content":" * CHANGED: Modified to remove the active tab that has the closed socket as"},{"lineNumber":377,"author":{"gitId":"-"},"content":" * its current client on socket close. In other words, only socket close event that"},{"lineNumber":378,"author":{"gitId":"-"},"content":" * does not come from live reload will remove the active tab."},{"lineNumber":379,"author":{"gitId":"-"},"content":" */"},{"lineNumber":380,"author":{"gitId":"-"},"content":" LiveServer.activeTabs \u003d LiveServer.activeTabs.filter(tab \u003d\u003e tab.client !\u003d\u003d ws);"},{"lineNumber":381,"author":{"gitId":"-"},"content":" };"},{"lineNumber":382,"author":{"gitId":"-"},"content":""},{"lineNumber":383,"author":{"gitId":"-"},"content":" // CHANGED: Enhanced client websocket addition process to record the client as an active tab entry"},{"lineNumber":384,"author":{"gitId":"-"},"content":" const reqUrl \u003d path.dirname(request.url);"},{"lineNumber":385,"author":{"gitId":"-"},"content":" const normalizedUrl \u003d fsUtil.ensurePosix(path.relative(LiveServer.baseUrl, reqUrl));"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" // If an entry with empty client is present, reuse existing entry to maintain order from pre-reload "},{"lineNumber":388,"author":{"gitId":"-"},"content":" const existingTab \u003d LiveServer.activeTabs.find(tab \u003d\u003e tab.url \u003d\u003d\u003d normalizedUrl \u0026\u0026 !tab.client);"},{"lineNumber":389,"author":{"gitId":"-"},"content":" if (existingTab) {"},{"lineNumber":390,"author":{"gitId":"-"},"content":" existingTab.client \u003d ws;"},{"lineNumber":391,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":392,"author":{"gitId":"-"},"content":" }"},{"lineNumber":393,"author":{"gitId":"-"},"content":""},{"lineNumber":394,"author":{"gitId":"-"},"content":" // Insert new entry to the active tabs list"},{"lineNumber":395,"author":{"gitId":"-"},"content":" LiveServer.activeTabs.unshift({ url: normalizedUrl, client: ws });"},{"lineNumber":396,"author":{"gitId":"-"},"content":" });"},{"lineNumber":397,"author":{"gitId":"-"},"content":""},{"lineNumber":398,"author":{"gitId":"-"},"content":" var ignored \u003d ["},{"lineNumber":399,"author":{"gitId":"-"},"content":" function(testPath) { // Always ignore dotfiles (important e.g. because editor hidden temp files)"},{"lineNumber":400,"author":{"gitId":"-"},"content":" return testPath !\u003d\u003d \".\" \u0026\u0026 /(^[.#]|(?:__|~)$)/.test(path.basename(testPath));"},{"lineNumber":401,"author":{"gitId":"-"},"content":" }"},{"lineNumber":402,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":403,"author":{"gitId":"-"},"content":" if (options.ignore) {"},{"lineNumber":404,"author":{"gitId":"-"},"content":" ignored \u003d ignored.concat(options.ignore);"},{"lineNumber":405,"author":{"gitId":"-"},"content":" }"},{"lineNumber":406,"author":{"gitId":"-"},"content":" if (options.ignorePattern) {"},{"lineNumber":407,"author":{"gitId":"-"},"content":" ignored.push(options.ignorePattern);"},{"lineNumber":408,"author":{"gitId":"-"},"content":" }"},{"lineNumber":409,"author":{"gitId":"-"},"content":" // Setup file watcher"},{"lineNumber":410,"author":{"gitId":"-"},"content":" LiveServer.watcher \u003d chokidar.watch(watchPaths, {"},{"lineNumber":411,"author":{"gitId":"-"},"content":" ignored: ignored,"},{"lineNumber":412,"author":{"gitId":"-"},"content":" ignoreInitial: true"},{"lineNumber":413,"author":{"gitId":"-"},"content":" });"},{"lineNumber":414,"author":{"gitId":"-"},"content":" function handleChange(changePath) {"},{"lineNumber":415,"author":{"gitId":"-"},"content":" var cssChange \u003d path.extname(changePath) \u003d\u003d\u003d \".css\" \u0026\u0026 !noCssInject;"},{"lineNumber":416,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1) {"},{"lineNumber":417,"author":{"gitId":"-"},"content":" if (cssChange)"},{"lineNumber":418,"author":{"gitId":"-"},"content":" console.log(\"CSS change detected\".magenta, changePath);"},{"lineNumber":419,"author":{"gitId":"-"},"content":" else console.log(\"Change detected\".cyan, changePath);"},{"lineNumber":420,"author":{"gitId":"-"},"content":" }"},{"lineNumber":421,"author":{"gitId":"-"},"content":""},{"lineNumber":422,"author":{"gitId":"-"},"content":" // CHANGED: Modified the send message to clients routine"},{"lineNumber":423,"author":{"gitId":"-"},"content":""},{"lineNumber":424,"author":{"gitId":"-"},"content":" if (cssChange) {"},{"lineNumber":425,"author":{"gitId":"-"},"content":" LiveServer.sendMessageToActiveTabs(\u0027refreshcss\u0027);"},{"lineNumber":426,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":427,"author":{"gitId":"-"},"content":" }"},{"lineNumber":428,"author":{"gitId":"-"},"content":""},{"lineNumber":429,"author":{"gitId":"-"},"content":" // Only reload active tabs if the changed file is opened in one of them"},{"lineNumber":430,"author":{"gitId":"-"},"content":" const normalizeUrl \u003d (url) \u003d\u003e {"},{"lineNumber":431,"author":{"gitId":"-"},"content":" if (!url || url.length \u003d\u003d\u003d 0) {"},{"lineNumber":432,"author":{"gitId":"-"},"content":" return \"index.html\";"},{"lineNumber":433,"author":{"gitId":"-"},"content":" }"},{"lineNumber":434,"author":{"gitId":"-"},"content":""},{"lineNumber":435,"author":{"gitId":"-"},"content":" if (path.extname(url) \u003d\u003d\u003d \u0027.html\u0027) {"},{"lineNumber":436,"author":{"gitId":"-"},"content":" return url;"},{"lineNumber":437,"author":{"gitId":"-"},"content":" }"},{"lineNumber":438,"author":{"gitId":"-"},"content":""},{"lineNumber":439,"author":{"gitId":"-"},"content":" return path.posix.join(url, \u0027index.html\u0027);"},{"lineNumber":440,"author":{"gitId":"-"},"content":" };"},{"lineNumber":441,"author":{"gitId":"-"},"content":""},{"lineNumber":442,"author":{"gitId":"-"},"content":" let normalizedPath \u003d fsUtil.ensurePosix(path.relative(root, changePath));"},{"lineNumber":443,"author":{"gitId":"-"},"content":" if (LiveServer.activeTabs.some(tab \u003d\u003e tab.client \u0026\u0026 normalizeUrl(tab.url) \u003d\u003d\u003d normalizedPath)) {"},{"lineNumber":444,"author":{"gitId":"-"},"content":" LiveServer.sendMessageToActiveTabs(\u0027reload\u0027);"},{"lineNumber":445,"author":{"gitId":"-"},"content":" }"},{"lineNumber":446,"author":{"gitId":"-"},"content":" }"},{"lineNumber":447,"author":{"gitId":"-"},"content":" LiveServer.watcher"},{"lineNumber":448,"author":{"gitId":"-"},"content":" .on(\"change\", handleChange)"},{"lineNumber":449,"author":{"gitId":"-"},"content":" .on(\"add\", handleChange)"},{"lineNumber":450,"author":{"gitId":"-"},"content":" .on(\"unlink\", handleChange)"},{"lineNumber":451,"author":{"gitId":"-"},"content":" .on(\"addDir\", handleChange)"},{"lineNumber":452,"author":{"gitId":"-"},"content":" .on(\"unlinkDir\", handleChange)"},{"lineNumber":453,"author":{"gitId":"-"},"content":" .on(\"ready\", function () {"},{"lineNumber":454,"author":{"gitId":"-"},"content":" if (LiveServer.logLevel \u003e\u003d 1)"},{"lineNumber":455,"author":{"gitId":"-"},"content":" console.log(\"Ready for changes\".cyan);"},{"lineNumber":456,"author":{"gitId":"-"},"content":" })"},{"lineNumber":457,"author":{"gitId":"-"},"content":" .on(\"error\", function (err) {"},{"lineNumber":458,"author":{"gitId":"-"},"content":" console.log(\"ERROR:\".red, err);"},{"lineNumber":459,"author":{"gitId":"-"},"content":" });"},{"lineNumber":460,"author":{"gitId":"-"},"content":""},{"lineNumber":461,"author":{"gitId":"-"},"content":" return server;"},{"lineNumber":462,"author":{"gitId":"-"},"content":"};"},{"lineNumber":463,"author":{"gitId":"-"},"content":""},{"lineNumber":464,"author":{"gitId":"-"},"content":"LiveServer.shutdown \u003d function() {"},{"lineNumber":465,"author":{"gitId":"-"},"content":" var watcher \u003d LiveServer.watcher;"},{"lineNumber":466,"author":{"gitId":"-"},"content":" if (watcher) {"},{"lineNumber":467,"author":{"gitId":"-"},"content":" watcher.close();"},{"lineNumber":468,"author":{"gitId":"-"},"content":" }"},{"lineNumber":469,"author":{"gitId":"-"},"content":" var server \u003d LiveServer.server;"},{"lineNumber":470,"author":{"gitId":"-"},"content":" if (server)"},{"lineNumber":471,"author":{"gitId":"-"},"content":" server.close();"},{"lineNumber":472,"author":{"gitId":"-"},"content":"};"},{"lineNumber":473,"author":{"gitId":"-"},"content":""},{"lineNumber":474,"author":{"gitId":"-"},"content":"// CHANGED: Added method to retrieve current active urls"},{"lineNumber":475,"author":{"gitId":"-"},"content":"LiveServer.getActiveUrls \u003d () \u003d\u003e LiveServer.activeTabs.filter(tab \u003d\u003e tab.client).map(tab \u003d\u003e tab.url);"},{"lineNumber":476,"author":{"gitId":"-"},"content":""},{"lineNumber":477,"author":{"gitId":"-"},"content":"// CHANGED: Added method to send message to active tabs"},{"lineNumber":478,"author":{"gitId":"-"},"content":"LiveServer.sendMessageToActiveTabs \u003d (msg) \u003d\u003e {"},{"lineNumber":479,"author":{"gitId":"-"},"content":" LiveServer.activeTabs.forEach((tab) \u003d\u003e {"},{"lineNumber":480,"author":{"gitId":"-"},"content":" if (tab.client) {"},{"lineNumber":481,"author":{"gitId":"-"},"content":" const client \u003d tab.client;"},{"lineNumber":482,"author":{"gitId":"-"},"content":" if (msg \u003d\u003d\u003d \u0027reload\u0027) {"},{"lineNumber":483,"author":{"gitId":"-"},"content":" // Clear the client from the entry to be refilled in the socket establishment phase after reload"},{"lineNumber":484,"author":{"gitId":"-"},"content":" tab.client \u003d undefined;"},{"lineNumber":485,"author":{"gitId":"-"},"content":" }"},{"lineNumber":486,"author":{"gitId":"-"},"content":" client.send(msg);"},{"lineNumber":487,"author":{"gitId":"-"},"content":" }"},{"lineNumber":488,"author":{"gitId":"-"},"content":" });"},{"lineNumber":489,"author":{"gitId":"-"},"content":"}"},{"lineNumber":490,"author":{"gitId":"-"},"content":""},{"lineNumber":491,"author":{"gitId":"-"},"content":"// CHANGED: Added convenience method to reload all active tabs"},{"lineNumber":492,"author":{"gitId":"-"},"content":"LiveServer.reloadActiveTabs \u003d () \u003d\u003e LiveServer.sendMessageToActiveTabs(\u0027reload\u0027);"},{"lineNumber":493,"author":{"gitId":"-"},"content":""},{"lineNumber":494,"author":{"gitId":"-"},"content":"module.exports \u003d LiveServer;"}],"authorContributionMap":{"LamJiuFong":12,"-":482}},{"path":"packages/cli/test/functional/testSites.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"const testSites \u003d ["},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u0027test_site\u0027,"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u0027test_site_algolia_plugin\u0027,"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u0027test_site_special_tags\u0027,"},{"lineNumber":5,"author":{"gitId":"-"},"content":"];"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"const testConvertSites \u003d ["},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u0027test_site_convert/test_basic_convert\u0027,"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u0027test_site_convert/test_navigation_convert\u0027,"},{"lineNumber":10,"author":{"gitId":"-"},"content":"];"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"const testTemplateSites \u003d ["},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u0027minimal,test_site_templates/test_minimal\u0027,"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u0027default,test_site_templates/test_default\u0027,"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" \u0027project,test_site_templates/test_project\u0027,"},{"lineNumber":16,"author":{"gitId":"-"},"content":"];"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"// These files will be generated within test_site/expected/"},{"lineNumber":19,"author":{"gitId":"-"},"content":"// after running `npm run updatetest`. Due to the fact that"},{"lineNumber":20,"author":{"gitId":"-"},"content":"// these files create git diffs every time they are generated,"},{"lineNumber":21,"author":{"gitId":"-"},"content":"// we decided to not commit them to the repository."},{"lineNumber":22,"author":{"gitId":"-"},"content":"// However, we still want to verify that they are present."},{"lineNumber":23,"author":{"gitId":"-"},"content":"const plantumlGeneratedFilesForTestSites \u003d {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" test_site: ["},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u00279c9e77fc0a983cb6b592e65733787bec.png\u0027,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u0027inline-output.png\u0027,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u0027diagrams/activity.png\u0027,"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u0027diagrams/class.png\u0027,"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u0027diagrams/component.png\u0027,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u0027diagrams/object.png\u0027,"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u0027diagrams/sequence.png\u0027,"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u0027diagrams/state.png\u0027,"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u0027diagrams/usecase.png\u0027,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u0027sub_site/inline-output/inline-puml-image.png\u0027,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":36,"author":{"gitId":"-"},"content":"};"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"const plantumlGeneratedFilesForConvertSites \u003d {};"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"const plantumlGeneratedFilesForTemplateSites \u003d {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" test_project: [\u0027diagrams/example.png\u0027],"},{"lineNumber":42,"author":{"gitId":"-"},"content":"};"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"module.exports \u003d {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testSites,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" testConvertSites,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" testTemplateSites,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" plantumlGeneratedFilesForTestSites,"},{"lineNumber":49,"author":{"gitId":"-"},"content":" plantumlGeneratedFilesForConvertSites,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" plantumlGeneratedFilesForTemplateSites,"},{"lineNumber":51,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"KevinEyo1":1,"-":50}},{"path":"packages/cli/test/functional/test_site/expected/index.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027div\u0027,[_c(\u0027header\u0027,[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\",\"default-highlight-on\":\"sibling-or-child\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\",\"title\":\"Home\"}},[_v(\"MarkBind Test Site\")])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs\")])])]),_v(\" \"),_m(0)],1),_v(\" \"),_m(1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_c(\u0027div\u0027,[_c(\u0027h2\u0027,{attrs:{\"id\":\"default-layout\"}},[_v(\"Default Layout\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#default-layout\",\"onclick\":\"event.stopPropagation()\"}})])])])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027div\u0027,[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs 🐛\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_c(\u0027h3\u0027,{attrs:{\"id\":\"testing-site-nav\"}},[_v(\"Testing Site-Nav\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-site-nav\",\"onclick\":\"event.stopPropagation()\"}})])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027strong\u0027,[_v(\"Dropdown \")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-search\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" title ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Html within site-nav \"),_c(\u0027span\u0027,{staticStyle:{\"color\":\"red\"}},[_v(\"should\")]),_v(\" be displayed properly\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown title 📐\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027mark\u0027,[_v(\"Third Link\")]),_v(\" 📋\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Filler text \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-facetime-video\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" Youtube 📺\")]),_v(\" filler text\"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/watch?v\u003ddQw4w9WgXcQ\"}},[_v(\"The answer to everything in the universe\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027mark\u0027,[_v(\"Dropdown title\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-comment\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown Title\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Hello Doge Hello Doge 🐶\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_c(\u0027strong\u0027,[_v(\"NESTED LINK\")]),_v(\" Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Test line break in navigation layout\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Nested line break text ✂️\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Nested line break href\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Nested Nested line break text ✂️\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested line break dropdown menu\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Line break item 2 📘\")])])])])])])],1)],1)])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"website-content\"},[_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Normal footnotes:\")]),_v(\"\\nHere is a footnote reference,\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-1-1\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-1-1\"}},[_v(\"[1]\")])])]),_v(\" and another.\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-1-2\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-1-2\"}},[_v(\"[2]\")])])])],1),_v(\" \"),_c(\u0027p\u0027,[_v(\"Here is a repeated footnote to \"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-1-1\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-1-1\"}},[_v(\"[1:1]\")])])])],1),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Inline footnotes:\")]),_v(\"\\nHere is an inline note.\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-1-3\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-1-3\"}},[_v(\"[3]\")])])])],1)]),_v(\" \"),_m(8),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"text\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-2-1\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-2-1\"}},[_v(\"[1]\")])])]),_v(\", text2\"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:footnotefn-2-2\"}},[_c(\u0027sup\u0027,{staticClass:\"footnote-ref\"},[_c(\u0027a\u0027,{attrs:{\"aria-describedby\":\"footnote-label\",\"href\":\"#fn-2-2\"}},[_v(\"[2]\")])])])],1)]),_v(\" \"),_m(9),_v(\" \"),_c(\u0027div\u0027,[_v(\" front back \")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"arrayVarItem1\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"arrayVarItem2\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"nestedVarValue\")]),_v(\" \"),_m(10),_v(\" \"),_c(\u0027p\u0027,[_v(\"This variable can be referenced.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"References can be several levels deep.\")]),_v(\" \"),_m(11),_v(\" \"),_c(\u0027p\u0027,[_v(\"Page Variable with Global Variable\")]),_v(\" \"),_m(12),_v(\" \"),_c(\u0027p\u0027,[_v(\"Global Variable Overriding Page Variable\")]),_v(\" \"),_m(13),_v(\" \"),_m(14),_v(\" \"),_m(15),_v(\" \"),_m(16),_v(\" \"),_m(17),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Panel with keyword\")])]},proxy:true}])},[_v(\" \"),_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"panel keyword\")])]),_v(\" \"),_m(18),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-with-heading\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h1\u0027,{attrs:{\"id\":\"panel-with-heading\"}},[_v(\"Panel with heading\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-heading\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"panel keyword\")])]),_v(\" \"),_m(19),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-without-heading-with-keyword\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h1\u0027,{attrs:{\"id\":\"panel-without-heading-with-keyword\"}},[_v(\"Panel without heading with keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-without-heading-with-keyword\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027h1\u0027,{attrs:{\"id\":\"keyword-should-be-tagged-to-this-heading-not-the-panel-heading\"}},[_v(\"Keyword should be tagged to this heading, not the panel heading\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#keyword-should-be-tagged-to-this-heading-not-the-panel-heading\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"panel keyword\")])])]),_v(\" \"),_m(20),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"panelId\":\"panel-with-heading-with-keyword\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h1\u0027,{attrs:{\"id\":\"panel-with-heading-with-keyword\"}},[_v(\"Panel with heading with keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-heading-with-keyword\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027h1\u0027,{attrs:{\"id\":\"keyword-should-be-tagged-to-the-panel-heading-not-this-heading\"}},[_v(\"Keyword should be tagged to the panel heading, not this heading\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#keyword-should-be-tagged-to-the-panel-heading-not-this-heading\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"panel keyword\")])])]),_v(\" \"),_m(21),_v(\" \"),_m(22),_v(\" \"),_m(23),_v(\" \"),_m(24),_v(\" \"),_m(25),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"Keyword with included heading\")]),_v(\" \"),_m(26),_v(\" \"),_m(27),_v(\" \"),_m(28),_v(\" \"),_m(29),_v(\" \"),_m(30),_v(\" \"),_m(31),_v(\" \"),_c(\u0027div\u0027,[_m(32),_v(\" \"),_m(33),_v(\" \"),_c(\u0027p\u0027,[_v(\"There are many techniques used during a requirements gathering. The following are some of the techniques.\")]),_v(\" \"),_m(34),_v(\" \"),_c(\u0027p\u0027,[_v(\"Brainstorming is a group activity designed to generate a large number of diverse and creative ideas for the solution\\nof a problem. In a brainstorming session there are no \\\"bad\\\" ideas.\\nThe aim is to generate ideas; not to validate them. Brainstorming encourages you to \\\"think outside the box\\\" and\\nput \\\"crazy\\\" ideas on the table without fear of rejection.\")]),_v(\" \"),_m(35),_v(\" \"),_c(\u0027p\u0027,[_v(\"Carefully designed questionnaires can be used to solicit responses and opinions from a large number of users regarding\\nany current system or a new innovation.\")]),_v(\" \"),_m(36),_v(\" \"),_c(\u0027p\u0027,[_v(\"Focus groups are a kind of informal interview within an interactive group setting.\\nA \"),_c(\u0027tooltip\u0027,{scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"e.g. potential users, beta testers\")]},proxy:true}])},[_v(\"group of people\")]),_v(\"\\nare asked about their understanding of a specific issue or a process.\\nFocus groups can bring out undiscovered conflicts and misunderstandings among stakeholder interests which can then be\\nresolved or clarified as necessary.\")],1)]),_v(\" \"),_m(37),_v(\" \"),_m(38),_v(\" \"),_m(39),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"name\":\"Boilerplate Referencing\"}},[_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/UserStories._include_.html\",\"no-close\":\"\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Boilerplate Includes\")])]},proxy:true}])})],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"name\":\"Referencing specified path in boilerplate\"}},[_m(40),_v(\" \"),_c(\u0027p\u0027,[_v(\"Like static include, pages within the site should be able to use files located in folders within boilerplate.\")]),_v(\" \"),_m(41),_v(\" \"),_m(42),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/NonFunctionalRequirements._include_.html\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Tested with the folllowing include\")])]},proxy:true}])})],1),_v(\" \"),_m(43),_v(\" \"),_m(44),_v(\" \"),_m(45),_v(\" \"),_m(46),_v(\" \"),_m(47),_v(\" \"),_m(48),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"This is a page from another MarkBind site.\\nThe purpose of this page is to ensure that reuse works as expected.\\nAll the following images should display correctly.\")]),_v(\" \"),_m(49),_v(\" \"),_c(\u0027p\u0027,[_v(\"PIC tags:\\n\"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"https://dummyimage.com/600x400/000/fff\"}})],1),_v(\" \"),_m(50),_v(\" \"),_m(51),_v(\" \"),_c(\u0027p\u0027,[_v(\"Within DIV tag:\")]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"imageTest\"}},[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})],1)]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})],1),_v(\" \"),_m(52),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a nested sub-site should correctly evaluate to the nested sub-site\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in the nested_sub_site is /test_site/sub_site/nested_sub_site.\")]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a nested sub-site page\u0027s include should correctly evaluate to the nested sub-site\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in the nested_sub_site page\u0027s include is /test_site/sub_site/nested_sub_site.\")])])])]),_v(\" \"),_m(53),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a sub site should correctly evaluate\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in sub_site is /test_site/sub_site.\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Subsite including nested subsite:\")])]),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a nested sub-site should correctly evaluate to the nested sub-site\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in the nested_sub_site is /test_site/sub_site/nested_sub_site.\")]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"baseUrl in a nested sub-site page\u0027s include should correctly evaluate to the nested sub-site\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The base url in the nested_sub_site page\u0027s include is /test_site/sub_site/nested_sub_site.\")])])])])],1)]),_v(\" \"),_m(54),_v(\" \"),_c(\u0027div\u0027,[_v(\"As we establish requirements, they should be recorded in some way for future reference,\\nusually called a requirement specification. Furthermore, it is advisable to show these requirements to stakeholders,\\nand refine requirements based on their feedback. The next phase is to convert requirements into a product\\nspecification that specifies how the product will address the requirements. \")]),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/SpecifyingRequirements._include_.html#preview\",\"type\":\"minimal\",\"fragment\":\"preview\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(55),_v(\" \"),_m(56),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/testBaseUrlInIncludeSrc._include_.html\",\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(57),_v(\" \"),_m(58),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/requirements/testBaseUrlInIncludeSrc._include_.html\",\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(59),_v(\" \"),_m(60),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/sub_site/testBaseUrlInIncludeSrcSubSite._include_.html\",\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(61),_v(\" \"),_m(62),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/sub_site/testBaseUrlInIncludeSrcSubSite._include_.html\",\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"same test with panels\")])])]},proxy:true}])}),_v(\" \"),_m(63),_v(\" \"),_m(64),_v(\" \"),_m(65),_v(\" \"),_m(66),_v(\" \"),_m(67),_v(\" \"),_m(68),_v(\" \"),_m(69),_v(\" \"),_m(70),_v(\" \"),_m(71),_v(\" \"),_m(72),_v(\" \"),_m(73),_v(\" \"),_c(\u0027panel\u0027,[_c(\u0027span\u0027,{staticClass:\"card-title\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_v(\"\\n Heading\\n \")])]),_v(\" \"),_m(74),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-without-src-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-without-src-header\"}},[_v(\"Panel without src header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-without-src-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel without src content heading\")])])])]),_v(\" \"),_m(75),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/PanelNormalSource._include_.html\",\"expanded\":\"\",\"panelId\":\"panel-with-normal-src-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-normal-src-header\"}},[_v(\"Panel with normal src header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-normal-src-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_m(76),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/PanelSourceContainsSegment._include_.html#segment\",\"expanded\":\"\",\"fragment\":\"segment\",\"panelId\":\"panel-with-src-from-a-page-segment-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-src-from-a-page-segment-header\"}},[_v(\"Panel with src from a page segment header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-src-from-a-page-segment-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_m(77),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/boilerTestPanel._include_.html\",\"expanded\":\"\",\"panelId\":\"boilerplate-referencing\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"boilerplate-referencing\"}},[_v(\"Boilerplate referencing\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#boilerplate-referencing\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanelsDuplicate/boilerTestPanel._include_.html\",\"expanded\":\"\",\"panelId\":\"boilerplate-referencing-2\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"boilerplate-referencing-2\"}},[_v(\"Boilerplate referencing 2\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#boilerplate-referencing-2\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/notInside._include_.html\",\"expanded\":\"\",\"panelId\":\"referencing-specified-path-in-boilerplate\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"referencing-specified-path-in-boilerplate\"}},[_v(\"Referencing specified path in boilerplate\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#referencing-specified-path-in-boilerplate\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_m(78),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/NestedPanel._include_.html\",\"expanded\":\"\",\"panelId\":\"outer-nested-panel\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"outer-nested-panel\"}},[_v(\"Outer nested panel\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#outer-nested-panel\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_m(79),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"outer-nested-panel-without-src\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"outer-nested-panel-without-src\"}},[_v(\"Outer nested panel without src\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#outer-nested-panel-without-src\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content of outer nested panel\")])]),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"inner-panel-header-without-src\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"inner-panel-header-without-src\"}},[_v(\"Inner panel header without src\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#inner-panel-header-without-src\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content of inner nested panel\")])])])],1),_v(\" \"),_m(80),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/sub_site/index._include_.html\",\"expanded\":\"\",\"panelId\":\"panel-with-src-from-another-markbind-site-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-src-from-another-markbind-site-header\"}},[_v(\"Panel with src from another MarkBind site header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-src-from-another-markbind-site-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])}),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/sub_site/testReuseSubsite._include_.html\",\"expanded\":\"\",\"panelId\":\"panel-with-src-from-another-markbind-site-header-2\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-src-from-another-markbind-site-header-2\"}},[_v(\"Panel with src from another MarkBind site header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-src-from-another-markbind-site-header-2\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])})],1),_v(\" \"),_m(81),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027trigger\u0027,{attrs:{\"for\":\"modal-with-panel\"}},[_v(\"trigger\")])],1),_v(\" \"),_c(\u0027modal\u0027,{attrs:{\"id\":\"modal-with-panel\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_v(\"modal title with panel inside\")]},proxy:true}])},[_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-inside-modal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-inside-modal\"}},[_v(\"Panel inside modal\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-inside-modal\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content inside modal\")])])])],1),_v(\" \"),_m(82),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"panelId\":\"unexpanded-panel-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"unexpanded-panel-header\"}},[_v(\"Unexpanded panel header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#unexpanded-panel-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content of unexpanded panel should not appear in search data\")])]),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\",\"panelId\":\"panel-header-inside-unexpanded-panel-should-not-appear-in-search-data\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-header-inside-unexpanded-panel-should-not-appear-in-search-data\"}},[_v(\"Panel header inside unexpanded panel should not appear in search data\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-header-inside-unexpanded-panel-should-not-appear-in-search-data\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel content inside unexpanded panel should not appear in search data\")])])])],1),_v(\" \"),_m(83),_v(\" \"),_c(\u0027div\u0027,[_m(84),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"info\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Expandable panel without closing transition\")])]},proxy:true}])},[_v(\"\\n Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text some text some text some text some text some text some text some text. Some text some text some text some text some text some text. Some text some text some text some text some text some text some text.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n\")]),_v(\" \"),_m(85),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"info\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Expanded panel without transition\")])]},proxy:true}])},[_v(\"\\n Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text some text some text some text some text some text some text some text. Some text some text some text some text some text some text. Some text some text some text some text some text some text some text.\\n\")]),_v(\" \"),_m(86),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027em\u0027,[_c(\u0027strong\u0027,[_v(\"Minimal panel without closing transition \"),_c(\u0027strong\u0027,[_v(\"-\u003e\")])])])])]},proxy:true},{key:\"_alt\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Minimal panel 1\")])]},proxy:true}])},[_v(\"\\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\\n Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text some text some text some text some text some text some text some text. Some text some text some text some text some text some text. Some text some text some text some text some text some text some text.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n\")]),_v(\" \"),_m(87),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"minimal\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027em\u0027,[_c(\u0027strong\u0027,[_v(\"Minimal panel without closing transition \"),_c(\u0027strong\u0027,[_v(\"-\u003e\")])])])])]},proxy:true},{key:\"_alt\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Minimal panel 2\")])]},proxy:true}])},[_v(\"\\n Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text. Some text some text some text some text some text some text some text some text some text some text some text some text some text some text. Some text some text some text some text some text some text. Some text some text some text some text some text some text some text.\\n\")])],1),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test popover has no stray space\")]),_v(\"\\n(\"),_c(\u0027popover\u0027,{scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"content\")]},proxy:true}])},[_v(\"There should be no stray space before this\")]),_v(\")\")],1),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test tooltip has no stray space\")]),_v(\"\\n(\"),_c(\u0027tooltip\u0027,{scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"content\")]},proxy:true}])},[_v(\"There should be no stray space before this\")]),_v(\")\")],1),_v(\" \"),_m(88),_v(\" \"),_m(89),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/activity.png\",\"alt\":\"activity diagram\"}}),_v(\" \"),_m(90),_v(\" \"),_c(\u0027div\u0027,[_m(91),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/inline-output.png\"}}),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/9c9e77fc0a983cb6b592e65733787bec.png\"}}),_v(\" \"),_m(92),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/sequence.png\"}}),_v(\" \"),_m(93),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/usecase.png\"}}),_v(\" \"),_m(94),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/class.png\"}})],1),_v(\" \"),_m(95),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/sub_site/inline-output/inline-puml-image.png\"}}),_v(\" \"),_m(96),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/activity.png\"}}),_v(\" \"),_m(97),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/component.png\"}}),_v(\" \"),_m(98),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/state.png\"}}),_v(\" \"),_m(99),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/test_site/diagrams/object.png\"}})],1),_v(\" \"),_m(100),_v(\" \"),_m(101),_v(\" \"),_m(102),_v(\" \"),_c(\u0027div\u0027,{pre:true},[_v(\"{{ variable interpolation syntax can be used with v-pre }}\")]),_v(\" \"),_c(\u0027div\u0027,{pre:true},[_v(\"{{ nonExistentVariable }}\")]),_v(\" \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers\"}},[_v(\"{{ code elements should automatically be assigned v-pre }}\")]),_c(\u0027hr\u0027,{staticClass:\"footnotes-sep\"}),_v(\" \"),_c(\u0027section\u0027,{staticClass:\"footnotes\"},[_c(\u0027ol\u0027,{staticClass:\"footnotes-list\"},[_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-1-1\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Here is the footnote. Footnotes will appear at the bottom of the page.\")])])]},proxy:true}])}),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-1-2\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Here\u0027s one with multiple blocks.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Subsequent paragraphs are indented to show that they\\nbelong to the previous footnote.\")])])]},proxy:true}])}),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-1-3\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Inlines notes are easier to write, since\\nyou don\u0027t have to pick an identifier and move down to type the\\nnote.\")])])]},proxy:true}])}),_v(\" \"),_m(103),_v(\" \"),_m(104),_v(\" \"),_m(105),_v(\" \"),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-2-1\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"footnote1\")])])]},proxy:true}])}),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:footnotefn-2-2\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"footnote2\")])])]},proxy:true}])}),_v(\" \"),_m(106),_m(107)],1)])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"navbar-brand page-nav-title\",\"href\":\"#\"}},[_v(\"Testing Page Navigation\")]),_v(\" \"),_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-multiple-keywords\"}},[_v(\"Heading with multiple keywords‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-keyword-in-panel\"}},[_v(\"Heading with keyword in panel‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-heading\"}},[_v(\"Panel with heading‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-without-heading-with-keyword\"}},[_v(\"Panel without heading with keyword‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#keyword-should-be-tagged-to-this-heading-not-the-panel-heading\"}},[_v(\"Keyword should be tagged to this heading, not the panel heading‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-heading-with-keyword\"}},[_v(\"Panel with heading with keyword‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-fragment-with-leading-spaces-and-newline\"}},[_v(\"Heading \\nFragment with leading spaces and newline\\n‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-included-keyword\"}},[_v(\"Heading with included keyword‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#included-heading\"}},[_v(\"Included Heading‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-nested-keyword\"}},[_v(\"Heading with nested keyword‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#heading-with-hidden-keyword\"}},[_v(\"Heading with hidden keyword‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#establishing-requirements\"}},[_v(\"Establishing Requirements‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#brainstorming\"}},[_v(\"Brainstorming‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#user-surveys\"}},[_v(\"User surveys‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#focus-groups\"}},[_v(\"Focus groups‎\")])])]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#path-within-the-boilerplate-folder-is-separately-specified\"}},[_v(\"Path within the boilerplate folder is separately specified‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#feature-list\"}},[_v(\"Feature list‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-without-src-header\"}},[_v(\"Panel without src header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-normal-src-header\"}},[_v(\"Panel with normal src header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-src-from-a-page-segment-header\"}},[_v(\"Panel with src from a page segment header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#boilerplate-referencing\"}},[_v(\"Boilerplate referencing‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#boilerplate-referencing-2\"}},[_v(\"Boilerplate referencing 2‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#referencing-specified-path-in-boilerplate\"}},[_v(\"Referencing specified path in boilerplate‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#outer-nested-panel\"}},[_v(\"Outer nested panel‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#outer-nested-panel-without-src\"}},[_v(\"Outer nested panel without src‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#inner-panel-header-without-src\"}},[_v(\"Inner panel header without src‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-src-from-another-markbind-site-header\"}},[_v(\"Panel with src from another MarkBind site header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#panel-with-src-from-another-markbind-site-header-2\"}},[_v(\"Panel with src from another MarkBind site header‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#unexpanded-panel-header\"}},[_v(\"Unexpanded panel header‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#level-6-header-outside-headingsearchindex-with-always-index-attribute-should-be-indexed\"}},[_v(\"Level 6 header (outside headingSearchIndex) with always-index attribute should be indexed‎\")])])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(108)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"bg-info display-4 text-center text-white\"},[_c(\u0027br\u0027),_v(\"\\n Test Jumbotron\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027br\u0027)])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Relative Link Test\")]),_v(\" This is a relative Intra-Site link in a layout (see \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html#heading-with-hidden-keyword\"}},[_v(\"link\")]),_v(\")\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cmarkdown\u003e\")]),_v(\" and \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cmd\u003e\")]),_v(\" elements\")])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"-"},"content":") {"},{"lineNumber":17,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"This should be wrapped in a \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cp\u003e\")]),_v(\" tag as it uses the block-level markdown renderer\")])])}"},{"lineNumber":18,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"-"},"content":") {"},{"lineNumber":20,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027span\u0027,[_v(\"\\nThis should not be wrapped in a \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cp\u003e\")]),_v(\" tag as it uses the inline markdown renderer\\n\")])}"},{"lineNumber":21,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"-"},"content":") {"},{"lineNumber":23,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"mt-2\"},[_c(\u0027pre\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs\"}},[_c(\u0027span\u0027,[_v(\"\u003cmarkdown\u003e elements allow block-level markdown without needing a leading newline.\\n\")]),_c(\u0027span\u0027,[_v(\"Hence, the contained markdown should be parsed and output as is, without any parsing errors.\\n\")]),_c(\u0027span\u0027,[_v(\"\u003c/invalidhtml\u003e\\n\")])])])])}"},{"lineNumber":24,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"-"},"content":") {"},{"lineNumber":26,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027span\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cmd\u003e\")]),_v(\" elements allow inline-level markdown even in a non-markdown token.\\nHence, the contained markdown should be parsed and output as is, without any parsing errors.\\n\"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003c/invalid\u003e\")]),_v(\".\\n\")])}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"-"},"content":") {"},{"lineNumber":29,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test footnotes\")])])}"},{"lineNumber":30,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"-"},"content":") {"},{"lineNumber":32,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test include footnotes from hash\")])])}"},{"lineNumber":33,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":35,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nunjucks SetExt\")])])}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"-"},"content":") {"},{"lineNumber":38,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Variables that reference another variable\")])])}"},{"lineNumber":39,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"-"},"content":") {"},{"lineNumber":41,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Global Variables can be referenced in {% set %}\")])])}"},{"lineNumber":42,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"-"},"content":") {"},{"lineNumber":44,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Global Variables should override {% set %}\")])])}"},{"lineNumber":45,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":46,"author":{"gitId":"-"},"content":") {"},{"lineNumber":47,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test Page Variable and Included Variable Integrations\")])])}"},{"lineNumber":48,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":49,"author":{"gitId":"-"},"content":") {"},{"lineNumber":50,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Outer Page Variable Should Not Leak Into Inner Pages\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Outer Page Variable Should Not Leak Into Inner Pages\")])])}"},{"lineNumber":51,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":52,"author":{"gitId":"-"},"content":") {"},{"lineNumber":53,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-multiple-keywords\"}},[_v(\"Heading with multiple keywords\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-multiple-keywords\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":54,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":55,"author":{"gitId":"-"},"content":") {"},{"lineNumber":56,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"keyword 1\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"keyword 2\")])])}"},{"lineNumber":57,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":58,"author":{"gitId":"-"},"content":") {"},{"lineNumber":59,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-keyword-in-panel\"}},[_v(\"Heading with keyword in panel\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-keyword-in-panel\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":60,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":61,"author":{"gitId":"-"},"content":") {"},{"lineNumber":62,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with heading with keyword\")])])}"},{"lineNumber":63,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":64,"author":{"gitId":"-"},"content":") {"},{"lineNumber":65,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Expanded panel without heading with keyword\")])])}"},{"lineNumber":66,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":67,"author":{"gitId":"-"},"content":") {"},{"lineNumber":68,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Unexpanded panel with heading with keyword\")])])}"},{"lineNumber":69,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":70,"author":{"gitId":"-"},"content":") {"},{"lineNumber":71,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-fragment-with-leading-spaces-and-newline\"}},[_v(\"Heading \"),_c(\u0027div\u0027,[_c(\u0027pre\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers\"}},[_v(\"Fragment with leading spaces and newline\\n\")])])]),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-fragment-with-leading-spaces-and-newline\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":72,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":73,"author":{"gitId":"-"},"content":") {"},{"lineNumber":74,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"The \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"id\")]),_v(\" for the above heading should be \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"heading-fragment-with-leading-spaces-and-newline\")]),_v(\" in total.\\nThis test ensures heading ids are assigned last (e.g. after \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"\u003cinclude /\u003e\")]),_v(\"s are processed).\")])}"},{"lineNumber":75,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":76,"author":{"gitId":"-"},"content":") {"},{"lineNumber":77,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-included-keyword\"}},[_v(\"Heading with included keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-included-keyword\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":78,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":79,"author":{"gitId":"-"},"content":") {"},{"lineNumber":80,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"included keyword\")])])])}"},{"lineNumber":81,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":82,"author":{"gitId":"-"},"content":") {"},{"lineNumber":83,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"included-heading\"}},[_v(\"Included Heading\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#included-heading\",\"onclick\":\"event.stopPropagation()\"}})])])}"},{"lineNumber":84,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":85,"author":{"gitId":"-"},"content":") {"},{"lineNumber":86,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-nested-keyword\"}},[_v(\"Heading with nested keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-nested-keyword\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":87,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":88,"author":{"gitId":"-"},"content":") {"},{"lineNumber":89,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_c(\u0027div\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword\"},[_v(\"nested keyword\")])])])])}"},{"lineNumber":90,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":91,"author":{"gitId":"-"},"content":") {"},{"lineNumber":92,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"heading-with-hidden-keyword\"}},[_v(\"Heading with hidden keyword\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-with-hidden-keyword\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":93,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":94,"author":{"gitId":"-"},"content":") {"},{"lineNumber":95,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027span\u0027,{staticClass:\"keyword d-none\"},[_v(\"invisible keyword\")])])}"},{"lineNumber":96,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":97,"author":{"gitId":"-"},"content":") {"},{"lineNumber":98,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with frontmatter shown tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-frontmatter-shown\"}},[_v(\"\\nDiv with shown tag\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with site shown tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-site-shown\"}},[_v(\"\\nDiv with site shown tag\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with multiple tags\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-site-shown tag-other\"}},[_v(\"\\nDiv with multiple tags\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with hidden tag (Hidden)\")])]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag in included file\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-included-file\"}},[_v(\"\\nDiv with tag in included file\\n\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching general tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-exp-shown\"}},[_v(\"\\nDiv with tag matching general tag\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching general tag and specific tag (Hidden)\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching frontmatter tag overridden by matching site tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-site-override-shown\"}},[_v(\"\\nDiv with tag matching frontmatter tag overridden by matching site tag\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching general frontmatter tag not overridden by matching specific site tag (Hidden)\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Div with tag matching general frontmatter tag overridden by matching specific site tag\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"tags\":\"tag-site-override-shown\"}},[_v(\"\\nDiv with tag matching general frontmatter tag overridden by matching specific site tag\\n\")])])}"},{"lineNumber":99,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":100,"author":{"gitId":"-"},"content":") {"},{"lineNumber":101,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Normal include\")])])}"},{"lineNumber":102,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":103,"author":{"gitId":"-"},"content":") {"},{"lineNumber":104,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"establishing-requirements\"}},[_v(\"Establishing Requirements\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#establishing-requirements\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":105,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":106,"author":{"gitId":"-"},"content":") {"},{"lineNumber":107,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027span\u0027,{attrs:{\"id\":\"preview\"}},[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])])}"},{"lineNumber":108,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":109,"author":{"gitId":"-"},"content":") {"},{"lineNumber":110,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h4\u0027,{attrs:{\"id\":\"brainstorming\"}},[_v(\"Brainstorming\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#brainstorming\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":111,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":112,"author":{"gitId":"-"},"content":") {"},{"lineNumber":113,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h4\u0027,{attrs:{\"id\":\"user-surveys\"}},[_v(\"User surveys\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#user-surveys\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":114,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":115,"author":{"gitId":"-"},"content":") {"},{"lineNumber":116,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h4\u0027,{attrs:{\"id\":\"focus-groups\"}},[_v(\"Focus groups\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#focus-groups\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":117,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":118,"author":{"gitId":"-"},"content":") {"},{"lineNumber":119,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include segment\")])])}"},{"lineNumber":120,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":121,"author":{"gitId":"-"},"content":") {"},{"lineNumber":122,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])}"},{"lineNumber":123,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":124,"author":{"gitId":"-"},"content":") {"},{"lineNumber":125,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Boilerplate include\")])])}"},{"lineNumber":126,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":127,"author":{"gitId":"-"},"content":") {"},{"lineNumber":128,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"path-within-the-boilerplate-folder-is-separately-specified\"}},[_v(\"Path within the boilerplate folder is separately specified\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#path-within-the-boilerplate-folder-is-separately-specified\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":129,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":130,"author":{"gitId":"-"},"content":") {"},{"lineNumber":131,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Also, the boilerplate file name (e.g. \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"inside.md\")]),_v(\") and the file that it is supposed to act as (\"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"notInside.md\")]),_v(\") can be different.\")])}"},{"lineNumber":132,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":133,"author":{"gitId":"-"},"content":") {"},{"lineNumber":134,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"This file should behaves as if it is in the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"line-numbers hljs inline no-lang\"}},[_v(\"requirements\")]),_v(\" folder:\")])}"},{"lineNumber":135,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":136,"author":{"gitId":"-"},"content":") {"},{"lineNumber":137,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested include\")])])}"},{"lineNumber":138,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":139,"author":{"gitId":"-"},"content":") {"},{"lineNumber":140,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Establishing requirements\")]),_v(\": \"),_c(\u0027span\u0027,[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Specifying requirements\")]),_v(\": \"),_c(\u0027span\u0027,[_v(\"As we establish requirements, they should be recorded in some way for future reference,\\nusually called a requirement specification. Furthermore, it is advisable to show these requirements to stakeholders,\\nand refine requirements based on their feedback. The next phase is to convert requirements into a product\\nspecification that specifies how the product will address the requirements. \")])])])])}"},{"lineNumber":141,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":142,"author":{"gitId":"-"},"content":") {"},{"lineNumber":143,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"HTML include\")])])}"},{"lineNumber":144,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":145,"author":{"gitId":"-"},"content":") {"},{"lineNumber":146,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"This is a HTML document\")]),_v(\" \"),_c(\u0027span\u0027,[_v(\"It is \"),_c(\u0027strong\u0027,[_v(\"possible\")]),_v(\" to use Markdown in HTML\")])])}"},{"lineNumber":147,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":148,"author":{"gitId":"-"},"content":") {"},{"lineNumber":149,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include from another MarkBind site\")])])}"},{"lineNumber":150,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":151,"author":{"gitId":"-"},"content":") {"},{"lineNumber":152,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"This is a page from another MarkBind site.\")]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"feature-list\"}},[_v(\"Feature list\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#feature-list\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"It is a list of features (or functionalities) grouped according to some criteria such as priority\\n(e.g. must-have, nice-to-have, etc. ), order of delivery, object or process related\\n(e.g. order-related, invoice-related, etc.).\\nHere is a sample feature list from Minesweeper (only a brief description has been provided to save space).\")]),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Basic play – Single player play.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Difficulty levels – Additional Medium and Advanced levels.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Versus play – Two players can play against each other.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Timer – Additional fixed time restriction on the player.\")])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"image\"}},[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})])])}"},{"lineNumber":153,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":154,"author":{"gitId":"-"},"content":") {"},{"lineNumber":155,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"IMG tags:\\n\"),_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}}),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://dummyimage.com/600x400/000/fff\"}})])}"},{"lineNumber":156,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":157,"author":{"gitId":"-"},"content":") {"},{"lineNumber":158,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Anchor:\\n\"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://dummyimage.com/600x400/000/fff\"}},[_v(\"External Image\")])])}"},{"lineNumber":159,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":160,"author":{"gitId":"-"},"content":") {"},{"lineNumber":161,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/sub_site/images/I\u0027m%20not%20allowed%20to%20use%20my%20favorite%20tool.png\"}},[_v(\"Link to picture\")]),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"id\":\"namedAnchor\"}},[_v(\"Named Anchor\")]),_v(\" \"),_c(\u0027a\u0027,[_v(\"Anchor with no attributes\")])])}"},{"lineNumber":162,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":163,"author":{"gitId":"-"},"content":") {"},{"lineNumber":164,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include nested sub-site directly\")])])}"},{"lineNumber":165,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":166,"author":{"gitId":"-"},"content":") {"},{"lineNumber":167,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include nested sub-site from sub-site\")])])}"},{"lineNumber":168,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":169,"author":{"gitId":"-"},"content":") {"},{"lineNumber":170,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file using baseUrl\")])])}"},{"lineNumber":171,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":172,"author":{"gitId":"-"},"content":") {"},{"lineNumber":173,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file in a sub-folder that uses baseUrl\")])])}"},{"lineNumber":174,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":175,"author":{"gitId":"-"},"content":") {"},{"lineNumber":176,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])])}"},{"lineNumber":177,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":178,"author":{"gitId":"-"},"content":") {"},{"lineNumber":179,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file in a sub-folder that uses baseUrl using baseUrl\")])])}"},{"lineNumber":180,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":181,"author":{"gitId":"-"},"content":") {"},{"lineNumber":182,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_v(\"Requirements gathering, requirements elicitation, requirements analysis,\\nrequirements capture are some of the terms commonly \"),_c(\u0027strong\u0027,[_v(\"and\")]),_v(\" interchangeably used to represent the activity\\nof understanding what a software product should do.\")])])}"},{"lineNumber":183,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":184,"author":{"gitId":"-"},"content":") {"},{"lineNumber":185,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file in a sub-site that uses baseUrl\")])])}"},{"lineNumber":186,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":187,"author":{"gitId":"-"},"content":") {"},{"lineNumber":188,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})])])}"},{"lineNumber":189,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":190,"author":{"gitId":"-"},"content":") {"},{"lineNumber":191,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include a file in a sub-site that uses baseUrl using baseUrl\")])])}"},{"lineNumber":192,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":193,"author":{"gitId":"-"},"content":") {"},{"lineNumber":194,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027div\u0027,[_c(\u0027img\u0027,{attrs:{\"src\":\"/test_site/sub_site/images/I\u0027m not allowed to use my favorite tool.png\"}})])])}"},{"lineNumber":195,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":196,"author":{"gitId":"-"},"content":") {"},{"lineNumber":197,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Trimmed include\")])])}"},{"lineNumber":198,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":199,"author":{"gitId":"-"},"content":") {"},{"lineNumber":200,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027span\u0027,[_c(\u0027br\u0027),_v(\"\\nFragment with leading spaces and newline\")])])])}"},{"lineNumber":201,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":202,"author":{"gitId":"-"},"content":") {"},{"lineNumber":203,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Trimmed include fragment\")])])}"},{"lineNumber":204,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":205,"author":{"gitId":"-"},"content":") {"},{"lineNumber":206,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Before | \"),_c(\u0027span\u0027,[_v(\"Fragment with leading spaces and newline\")]),_v(\" | After\")])])}"},{"lineNumber":207,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":208,"author":{"gitId":"-"},"content":") {"},{"lineNumber":209,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Include with custom variables\")])])}"},{"lineNumber":210,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":211,"author":{"gitId":"-"},"content":") {"},{"lineNumber":212,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable as include attribute\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable as include attribute\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable with markdown\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027strong\u0027,[_v(\"Included variable with markdown\")])])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable as attribute\")])]),_v(\" \"),_c(\u0027p\u0027,{staticStyle:{\"color\":\"blue\"}},[_v(\"Test\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable as HTML element\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027span\u0027,[_v(\"Included variable within HTML element\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable overridden by variables.md\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Global Variable Overriding Included Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variables in included file\")])]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Included variable in outer included file\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable overriding inner variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Inner included variables should not leak into other files\")])]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Should be blank:\")])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test included variable with global variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable with Global Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks set overridden by include variable and global variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\\nGlobal Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks import overridden by include variable and global variable\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\\nGlobal Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks set overridden by include variable and global variable in nested include\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\\nGlobal Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks import overridden by include variable and global variable in nested include\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Included variable\\nGlobal Variable\")]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test missing variable with default\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Missing Variable\")])])}"},{"lineNumber":213,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":214,"author":{"gitId":"-"},"content":") {"},{"lineNumber":215,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Variables for includes should not be recognised as page variables, hence, there should be no text between \"),_c(\u0027strong\u0027,[_v(\"this\")])])}"},{"lineNumber":216,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":217,"author":{"gitId":"-"},"content":") {"},{"lineNumber":218,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"and \"),_c(\u0027strong\u0027,[_v(\"this\")]),_v(\".\")])}"},{"lineNumber":219,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":220,"author":{"gitId":"-"},"content":") {"},{"lineNumber":221,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Included variables should not leak into other files\")])])}"},{"lineNumber":222,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":223,"author":{"gitId":"-"},"content":") {"},{"lineNumber":224,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027p\u0027,[_v(\"Should be blank:\")])])}"},{"lineNumber":225,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":226,"author":{"gitId":"-"},"content":") {"},{"lineNumber":227,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with shorthand heading syntax\")])])}"},{"lineNumber":228,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":229,"author":{"gitId":"-"},"content":") {"},{"lineNumber":230,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel without src\")])])}"},{"lineNumber":231,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":232,"author":{"gitId":"-"},"content":") {"},{"lineNumber":233,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with normal src\")])])}"},{"lineNumber":234,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":235,"author":{"gitId":"-"},"content":") {"},{"lineNumber":236,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with src from a page segment\")])])}"},{"lineNumber":237,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":238,"author":{"gitId":"-"},"content":") {"},{"lineNumber":239,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with boilerplate\")])])}"},{"lineNumber":240,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":241,"author":{"gitId":"-"},"content":") {"},{"lineNumber":242,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested panel\")])])}"},{"lineNumber":243,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":244,"author":{"gitId":"-"},"content":") {"},{"lineNumber":245,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested panel without src\")])])}"},{"lineNumber":246,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":247,"author":{"gitId":"-"},"content":") {"},{"lineNumber":248,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Panel with src from another MarkBind site\")])])}"},{"lineNumber":249,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":250,"author":{"gitId":"-"},"content":") {"},{"lineNumber":251,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Modal with panel inside\")])])}"},{"lineNumber":252,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":253,"author":{"gitId":"-"},"content":") {"},{"lineNumber":254,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Unexpanded panel\")])])}"},{"lineNumber":255,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":256,"author":{"gitId":"-"},"content":") {"},{"lineNumber":257,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test panel closing transitions\")])])}"},{"lineNumber":258,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":259,"author":{"gitId":"-"},"content":") {"},{"lineNumber":260,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested Panel with height greater than viewport\")])])}"},{"lineNumber":261,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":262,"author":{"gitId":"-"},"content":") {"},{"lineNumber":263,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Nested Panel with height smaller than viewport\")])])}"},{"lineNumber":264,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":265,"author":{"gitId":"-"},"content":") {"},{"lineNumber":266,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Minimal Panel with height greater than viewport\")])])}"},{"lineNumber":267,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":268,"author":{"gitId":"-"},"content":") {"},{"lineNumber":269,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Minimal Panel with height smaller than viewport\")])])}"},{"lineNumber":270,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":271,"author":{"gitId":"-"},"content":") {"},{"lineNumber":272,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test search indexing\")])])}"},{"lineNumber":273,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":274,"author":{"gitId":"-"},"content":") {"},{"lineNumber":275,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test PlantUML live reload without include\")])])}"},{"lineNumber":276,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":277,"author":{"gitId":"-"},"content":") {"},{"lineNumber":278,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test PlantUML live reload with include\")])])}"},{"lineNumber":279,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":280,"author":{"gitId":"-"},"content":") {"},{"lineNumber":281,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"PlantUML Test\")])])}"},{"lineNumber":282,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":283,"author":{"gitId":"-"},"content":") {"},{"lineNumber":284,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Sequence Diagram\")])])}"},{"lineNumber":285,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":286,"author":{"gitId":"-"},"content":") {"},{"lineNumber":287,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Use Case Diagram\")])])}"},{"lineNumber":288,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":289,"author":{"gitId":"-"},"content":") {"},{"lineNumber":290,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Class Diagram\")])])}"},{"lineNumber":291,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":292,"author":{"gitId":"-"},"content":") {"},{"lineNumber":293,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test PlantUML in sub folder\")])])}"},{"lineNumber":294,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":295,"author":{"gitId":"-"},"content":") {"},{"lineNumber":296,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Activity Diagram\")])])}"},{"lineNumber":297,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":298,"author":{"gitId":"-"},"content":") {"},{"lineNumber":299,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Component Diagram\")])])}"},{"lineNumber":300,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":301,"author":{"gitId":"-"},"content":") {"},{"lineNumber":302,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"State Diagram\")])])}"},{"lineNumber":303,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":304,"author":{"gitId":"-"},"content":") {"},{"lineNumber":305,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Object Diagram\")])])}"},{"lineNumber":306,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":307,"author":{"gitId":"-"},"content":") {"},{"lineNumber":308,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h2\u0027,{staticClass:\"no-index\",attrs:{\"id\":\"level-2-header-inside-headingsearchindex-with-no-index-attribute-should-not-be-indexed\"}},[_v(\"Level 2 header (inside headingSearchIndex) with no-index attribute should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#level-2-header-inside-headingsearchindex-with-no-index-attribute-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":309,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":310,"author":{"gitId":"-"},"content":") {"},{"lineNumber":311,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h6\u0027,{staticClass:\"always-index\",attrs:{\"id\":\"level-6-header-outside-headingsearchindex-with-always-index-attribute-should-be-indexed\"}},[_v(\"Level 6 header (outside headingSearchIndex) with always-index attribute should be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#level-6-header-outside-headingsearchindex-with-always-index-attribute-should-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":312,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":313,"author":{"gitId":"-"},"content":") {"},{"lineNumber":314,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Test nunjucks raw tags\")])])}"},{"lineNumber":315,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":316,"author":{"gitId":"-"},"content":") {"},{"lineNumber":317,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-1-1\"}},[_c(\u0027p\u0027,[_v(\"Here is the footnote. Footnotes will appear at the bottom of the page.\")])])}"},{"lineNumber":318,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":319,"author":{"gitId":"-"},"content":") {"},{"lineNumber":320,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-1-2\"}},[_c(\u0027p\u0027,[_v(\"Here\u0027s one with multiple blocks.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Subsequent paragraphs are indented to show that they\\nbelong to the previous footnote.\")])])}"},{"lineNumber":321,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":322,"author":{"gitId":"-"},"content":") {"},{"lineNumber":323,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-1-3\"}},[_c(\u0027p\u0027,[_v(\"Inlines notes are easier to write, since\\nyou don\u0027t have to pick an identifier and move down to type the\\nnote.\")])])}"},{"lineNumber":324,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":325,"author":{"gitId":"-"},"content":") {"},{"lineNumber":326,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-2-1\"}},[_c(\u0027p\u0027,[_v(\"footnote1\")])])}"},{"lineNumber":327,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":328,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":329,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027li\u0027,{staticClass:\"footnote-item\",attrs:{\"id\":\"fn-2-2\"}},[_c(\u0027p\u0027,[_v(\"footnote2\")])])}"},{"lineNumber":330,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":331,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":332,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027footer\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"heading-in-footer-should-not-be-indexed\"}},[_v(\"Heading in footer should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-in-footer-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"text-center\"},[_v(\"\\n This is a dynamic height footer that supports markdown \"),_c(\u0027span\u0027,[_v(\"😄\")]),_v(\"!\\n \")])])])}"},{"lineNumber":333,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":334,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"-":324,"yiwen101":10}},{"path":"packages/cli/test/functional/test_site/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site/expected/plugins/web3Form/web-3-form.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"LamJiuFong"},"content":".web-3-form input,"},{"lineNumber":2,"author":{"gitId":"LamJiuFong"},"content":".web-3-form select,"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":".web-3-form textarea {"},{"lineNumber":4,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding: 12px;"},{"lineNumber":6,"author":{"gitId":"-"},"content":" border: 1px solid #ccc;"},{"lineNumber":7,"author":{"gitId":"-"},"content":" border-radius: 4px;"},{"lineNumber":8,"author":{"gitId":"-"},"content":" box-sizing: border-box;"},{"lineNumber":9,"author":{"gitId":"-"},"content":" margin-top: 6px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" margin-bottom: 16px;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" resize: vertical;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":3,"-":9}},{"path":"packages/cli/test/functional/test_site/expected/siteData.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"enableSearch\": true,"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":4,"author":{"gitId":"-"},"content":" {"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"src\": \"bugs/index.md\","},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"title\": \"Open Bugs\","},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":9,"author":{"gitId":"-"},"content":" },"},{"lineNumber":10,"author":{"gitId":"-"},"content":" {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"panel-with-heading\": \"Panel with heading\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"panel-without-heading-with-keyword\": \"Panel without heading with keyword\","},{"lineNumber":16,"author":{"gitId":"-"},"content":" \"panel-with-heading-with-keyword\": \"Panel with heading with keyword\","},{"lineNumber":17,"author":{"gitId":"-"},"content":" \"panel-without-src-header\": \"Panel without src header\","},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"panel-with-normal-src-header\": \"Panel with normal src header\","},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"panel-with-src-from-a-page-segment-header\": \"Panel with src from a page segment header\","},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"boilerplate-referencing\": \"Boilerplate referencing\","},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"boilerplate-referencing-2\": \"Boilerplate referencing 2\","},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"referencing-specified-path-in-boilerplate\": \"Referencing specified path in boilerplate\","},{"lineNumber":23,"author":{"gitId":"-"},"content":" \"outer-nested-panel\": \"Outer nested panel\","},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"outer-nested-panel-without-src\": \"Outer nested panel without src\","},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"panel-with-src-from-another-markbind-site-header\": \"Panel with src from another MarkBind site header\","},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"panel-with-src-from-another-markbind-site-header-2\": \"Panel with src from another MarkBind site header\","},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"unexpanded-panel-header\": \"Unexpanded panel header\","},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"keyword-should-be-tagged-to-this-heading-not-the-panel-heading\": \"Keyword should be tagged to this heading, not the panel heading\","},{"lineNumber":29,"author":{"gitId":"-"},"content":" \"panel-normal-source-content-headings\": \"Panel normal source content headings\","},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"panel-source-segment-content-headings\": \"Panel source segment content headings\","},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"boilerplate-test-for-panel-heading\": \"boilerplate test for panel heading\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"heading-in-panel-boilerplate\": \"heading in panel boilerplate\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"nested-panel\": \"Nested Panel\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"normal-panel-content-heading\": \"Normal panel content heading\","},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"inner-panel-header-without-src\": \"Inner panel header without src\","},{"lineNumber":36,"author":{"gitId":"-"},"content":" \"feature-list\": \"Feature list\","},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"heading-with-multiple-keywords\": \"Heading with multiple keywords\","},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"heading-with-keyword-in-panel\": \"Heading with keyword in panel\","},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"heading-fragment-with-leading-spaces-and-newline\": \"Heading \\nFragment with leading spaces and newline\\n\","},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"heading-with-included-keyword\": \"Heading with included keyword\","},{"lineNumber":41,"author":{"gitId":"-"},"content":" \"included-heading\": \"Included Heading\","},{"lineNumber":42,"author":{"gitId":"-"},"content":" \"heading-with-nested-keyword\": \"Heading with nested keyword\","},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"heading-with-hidden-keyword\": \"Heading with hidden keyword\","},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"establishing-requirements\": \"Establishing Requirements\","},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"brainstorming\": \"Brainstorming\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"user-surveys\": \"User surveys\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"focus-groups\": \"Focus groups\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"path-within-the-boilerplate-folder-is-separately-specified\": \"Path within the boilerplate folder is separately specified\","},{"lineNumber":49,"author":{"gitId":"-"},"content":" \"level-6-header-outside-headingsearchindex-with-always-index-attribute-should-be-indexed\": \"Level 6 header (outside headingSearchIndex) with always-index attribute should be indexed\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" },"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"headingKeywords\": {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \"heading-with-keyword-in-panel\": ["},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"panel keyword\""},{"lineNumber":54,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \"panel-with-heading\": ["},{"lineNumber":56,"author":{"gitId":"-"},"content":" \"panel keyword\""},{"lineNumber":57,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \"keyword-should-be-tagged-to-this-heading-not-the-panel-heading\": ["},{"lineNumber":59,"author":{"gitId":"-"},"content":" \"panel keyword\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \"panel-with-heading-with-keyword\": ["},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"panel keyword\""},{"lineNumber":63,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \"heading-with-multiple-keywords\": ["},{"lineNumber":65,"author":{"gitId":"-"},"content":" \"keyword 1\","},{"lineNumber":66,"author":{"gitId":"-"},"content":" \"keyword 2\""},{"lineNumber":67,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \"heading-with-included-keyword\": ["},{"lineNumber":69,"author":{"gitId":"-"},"content":" \"included keyword\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"included-heading\": ["},{"lineNumber":72,"author":{"gitId":"-"},"content":" \"Keyword with included heading\""},{"lineNumber":73,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \"heading-with-nested-keyword\": ["},{"lineNumber":75,"author":{"gitId":"-"},"content":" \"nested keyword\""},{"lineNumber":76,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \"heading-with-hidden-keyword\": ["},{"lineNumber":78,"author":{"gitId":"-"},"content":" \"invisible keyword\""},{"lineNumber":79,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":" },"},{"lineNumber":82,"author":{"gitId":"-"},"content":" {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \"src\": \"sub_site/index.md\","},{"lineNumber":84,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" \"feature-list\": \"Feature list\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" },"},{"lineNumber":87,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":88,"author":{"gitId":"-"},"content":" },"},{"lineNumber":89,"author":{"gitId":"-"},"content":" {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \"src\": \"sub_site/nested_sub_site/index.md\","},{"lineNumber":91,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":92,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":93,"author":{"gitId":"-"},"content":" },"},{"lineNumber":94,"author":{"gitId":"-"},"content":" {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" \"src\": \"test_md_fragment.md\","},{"lineNumber":96,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \"some-heading\": \"Some heading\""},{"lineNumber":98,"author":{"gitId":"-"},"content":" },"},{"lineNumber":99,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":100,"author":{"gitId":"-"},"content":" },"},{"lineNumber":101,"author":{"gitId":"-"},"content":" {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \"src\": \"testEmptyFrontmatter.md\","},{"lineNumber":103,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":104,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":106,"author":{"gitId":"-"},"content":" },"},{"lineNumber":107,"author":{"gitId":"-"},"content":" {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" \"src\": \"testLayoutsOverride.md\","},{"lineNumber":109,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":110,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":111,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":112,"author":{"gitId":"-"},"content":" },"},{"lineNumber":113,"author":{"gitId":"-"},"content":" {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \"src\": \"testEmptyAltFrontMatter.md\","},{"lineNumber":115,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":116,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":117,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":118,"author":{"gitId":"-"},"content":" },"},{"lineNumber":119,"author":{"gitId":"-"},"content":" {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" \"src\": \"testLayoutsOverrideWithAltFrontmatter.md\","},{"lineNumber":121,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":122,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":123,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":124,"author":{"gitId":"-"},"content":" },"},{"lineNumber":125,"author":{"gitId":"-"},"content":" {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \"src\": \"testAltFrontMatterInvalidKeyValue.md\","},{"lineNumber":127,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":128,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":130,"author":{"gitId":"-"},"content":" },"},{"lineNumber":131,"author":{"gitId":"-"},"content":" {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \"src\": \"testSingleAltFrontMatter.md\","},{"lineNumber":133,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":134,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":135,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":136,"author":{"gitId":"-"},"content":" },"},{"lineNumber":137,"author":{"gitId":"-"},"content":" {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" \"src\": \"testAltFrontMatterParsing.md\","},{"lineNumber":139,"author":{"gitId":"-"},"content":" \"title\": \"new title\","},{"lineNumber":140,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":141,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":142,"author":{"gitId":"-"},"content":" },"},{"lineNumber":143,"author":{"gitId":"-"},"content":" {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" \"src\": \"testExternalScripts.md\","},{"lineNumber":145,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":146,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":147,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":148,"author":{"gitId":"-"},"content":" },"},{"lineNumber":149,"author":{"gitId":"-"},"content":" {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" \"src\": \"testLayouts.md\","},{"lineNumber":151,"author":{"gitId":"-"},"content":" \"title\": \"Test nunjucks path resolving\","},{"lineNumber":152,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":153,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":154,"author":{"gitId":"-"},"content":" },"},{"lineNumber":155,"author":{"gitId":"-"},"content":" {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" \"src\": \"testLayoutsWithAltFrontMatter.md\","},{"lineNumber":157,"author":{"gitId":"-"},"content":" \"title\": \"Test nunjucks path resolving\","},{"lineNumber":158,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":159,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":160,"author":{"gitId":"-"},"content":" },"},{"lineNumber":161,"author":{"gitId":"-"},"content":" {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" \"src\": \"testNunjucksPathResolving.md\","},{"lineNumber":163,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":164,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":165,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":166,"author":{"gitId":"-"},"content":" },"},{"lineNumber":167,"author":{"gitId":"-"},"content":" {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" \"src\": \"sub_site/testNunjucksPathResolving.md\","},{"lineNumber":169,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":170,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":171,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":172,"author":{"gitId":"-"},"content":" },"},{"lineNumber":173,"author":{"gitId":"-"},"content":" {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" \"src\": \"sub_site/nested_sub_site/testNunjucksPathResolving.md\","},{"lineNumber":175,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":176,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":177,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":178,"author":{"gitId":"-"},"content":" },"},{"lineNumber":179,"author":{"gitId":"-"},"content":" {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" \"src\": \"testAntiFOUCStyles.md\","},{"lineNumber":181,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":182,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":183,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":184,"author":{"gitId":"-"},"content":" },"},{"lineNumber":185,"author":{"gitId":"-"},"content":" {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \"src\": \"testAnchorGeneration.md\","},{"lineNumber":187,"author":{"gitId":"-"},"content":" \"title\": \"Anchor Generation Test\","},{"lineNumber":188,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \"should-have-anchor-7\": \"should have anchor\","},{"lineNumber":190,"author":{"gitId":"-"},"content":" \"should-have-anchor-20\": \"should have anchor\","},{"lineNumber":191,"author":{"gitId":"-"},"content":" \"should-have-anchor-8\": \"should have anchor\","},{"lineNumber":192,"author":{"gitId":"-"},"content":" \"should-have-anchor-9\": \"should have anchor\","},{"lineNumber":193,"author":{"gitId":"-"},"content":" \"should-have-anchor-10\": \"should have anchor\","},{"lineNumber":194,"author":{"gitId":"-"},"content":" \"should-have-anchor-11\": \"should have anchor\","},{"lineNumber":195,"author":{"gitId":"-"},"content":" \"should-have-anchor-21\": \"should have anchor\","},{"lineNumber":196,"author":{"gitId":"-"},"content":" \"should-have-anchor-22\": \"should have anchor\","},{"lineNumber":197,"author":{"gitId":"-"},"content":" \"should-have-anchor-23\": \"should have anchor\","},{"lineNumber":198,"author":{"gitId":"-"},"content":" \"should-have-anchor-24\": \"should have anchor\","},{"lineNumber":199,"author":{"gitId":"-"},"content":" \"root-file\": \"Root file\","},{"lineNumber":200,"author":{"gitId":"-"},"content":" \"should-have-anchor\": \"should have anchor\","},{"lineNumber":201,"author":{"gitId":"-"},"content":" \"should-have-anchor-2\": \"should have anchor\","},{"lineNumber":202,"author":{"gitId":"-"},"content":" \"should-have-anchor-3\": \"should have anchor\","},{"lineNumber":203,"author":{"gitId":"-"},"content":" \"should-have-anchor-4\": \"should have anchor\","},{"lineNumber":204,"author":{"gitId":"-"},"content":" \"included-file\": \"Included File\","},{"lineNumber":205,"author":{"gitId":"-"},"content":" \"should-have-anchor-14\": \"should have anchor\","},{"lineNumber":206,"author":{"gitId":"-"},"content":" \"should-have-anchor-15\": \"should have anchor\","},{"lineNumber":207,"author":{"gitId":"-"},"content":" \"should-have-anchor-16\": \"should have anchor\","},{"lineNumber":208,"author":{"gitId":"-"},"content":" \"should-have-anchor-17\": \"should have anchor\""},{"lineNumber":209,"author":{"gitId":"-"},"content":" },"},{"lineNumber":210,"author":{"gitId":"-"},"content":" \"headingKeywords\": {},"},{"lineNumber":211,"author":{"gitId":"-"},"content":" \"frontmatterKeywords\": \"testFrontmatterKeywords\""},{"lineNumber":212,"author":{"gitId":"-"},"content":" },"},{"lineNumber":213,"author":{"gitId":"-"},"content":" {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" \"src\": \"testAnnotate.md\","},{"lineNumber":215,"author":{"gitId":"-"},"content":" \"title\": \"Annotate Feature Test\","},{"lineNumber":216,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" \"content\": \"Content\""},{"lineNumber":218,"author":{"gitId":"-"},"content":" },"},{"lineNumber":219,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":220,"author":{"gitId":"-"},"content":" },"},{"lineNumber":221,"author":{"gitId":"-"},"content":" {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" \"src\": \"testTooltipSpacing.md\","},{"lineNumber":223,"author":{"gitId":"-"},"content":" \"title\": \"Tooltip Spacing Test\","},{"lineNumber":224,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" \"569-stray-space-after-tooltip\": \"569: Stray space after tooltip\""},{"lineNumber":226,"author":{"gitId":"-"},"content":" },"},{"lineNumber":227,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":228,"author":{"gitId":"-"},"content":" },"},{"lineNumber":229,"author":{"gitId":"-"},"content":" {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" \"src\": \"testThumbnails.md\","},{"lineNumber":231,"author":{"gitId":"-"},"content":" \"title\": \"Thumbnails Test\","},{"lineNumber":232,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":233,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":234,"author":{"gitId":"-"},"content":" },"},{"lineNumber":235,"author":{"gitId":"-"},"content":" {"},{"lineNumber":236,"author":{"gitId":"-"},"content":" \"src\": \"testPlantUML.md\","},{"lineNumber":237,"author":{"gitId":"-"},"content":" \"title\": \"PlantUML Test\","},{"lineNumber":238,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":239,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":240,"author":{"gitId":"-"},"content":" },"},{"lineNumber":241,"author":{"gitId":"-"},"content":" {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" \"src\": \"testCodeBlocks.md\","},{"lineNumber":243,"author":{"gitId":"-"},"content":" \"title\": \"Test: Code Blocks\","},{"lineNumber":244,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":245,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":246,"author":{"gitId":"-"},"content":" },"},{"lineNumber":247,"author":{"gitId":"-"},"content":" {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" \"src\": \"testIncludePluginsRendered.md\","},{"lineNumber":249,"author":{"gitId":"-"},"content":" \"title\": \"Included files should have plugins rendered on them\","},{"lineNumber":250,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":251,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":252,"author":{"gitId":"-"},"content":" },"},{"lineNumber":253,"author":{"gitId":"-"},"content":" {"},{"lineNumber":254,"author":{"gitId":"-"},"content":" \"src\": \"testIncludeMultipleModals.md\","},{"lineNumber":255,"author":{"gitId":"-"},"content":" \"title\": \"Multiple inclusions of a modal should be supported\","},{"lineNumber":256,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":257,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":258,"author":{"gitId":"-"},"content":" },"},{"lineNumber":259,"author":{"gitId":"-"},"content":" {"},{"lineNumber":260,"author":{"gitId":"-"},"content":" \"src\": \"testPopovers.md\","},{"lineNumber":261,"author":{"gitId":"-"},"content":" \"title\": \"Test: Popovers\","},{"lineNumber":262,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" \"nested-panel\": \"Nested Panel\","},{"lineNumber":264,"author":{"gitId":"-"},"content":" \"normal-panel-content-heading\": \"Normal panel content heading\","},{"lineNumber":265,"author":{"gitId":"-"},"content":" \"some-heading\": \"Some heading\","},{"lineNumber":266,"author":{"gitId":"-"},"content":" \"some-heading-2\": \"Some heading\""},{"lineNumber":267,"author":{"gitId":"-"},"content":" },"},{"lineNumber":268,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":269,"author":{"gitId":"-"},"content":" },"},{"lineNumber":270,"author":{"gitId":"-"},"content":" {"},{"lineNumber":271,"author":{"gitId":"-"},"content":" \"src\": \"testPopoverTrigger.md\","},{"lineNumber":272,"author":{"gitId":"-"},"content":" \"title\": \"Popover initiated by trigger should honor trigger attribute\","},{"lineNumber":273,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":274,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":275,"author":{"gitId":"-"},"content":" },"},{"lineNumber":276,"author":{"gitId":"-"},"content":" {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" \"src\": \"testModals.md\","},{"lineNumber":278,"author":{"gitId":"-"},"content":" \"title\": \"Test: Modals\","},{"lineNumber":279,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":280,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":281,"author":{"gitId":"-"},"content":" },"},{"lineNumber":282,"author":{"gitId":"-"},"content":" {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" \"src\": \"testDates.md\","},{"lineNumber":284,"author":{"gitId":"-"},"content":" \"title\": \"Nunjucks date filter tests\","},{"lineNumber":285,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" \"dates\": \"Dates\""},{"lineNumber":287,"author":{"gitId":"-"},"content":" },"},{"lineNumber":288,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":289,"author":{"gitId":"-"},"content":" },"},{"lineNumber":290,"author":{"gitId":"-"},"content":" {"},{"lineNumber":291,"author":{"gitId":"-"},"content":" \"src\": \"testVariableContainsInclude.md\","},{"lineNumber":292,"author":{"gitId":"-"},"content":" \"title\": \"Variable should be able to store included content fragments\","},{"lineNumber":293,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" \"content-fragment\": \"content fragment\""},{"lineNumber":295,"author":{"gitId":"-"},"content":" },"},{"lineNumber":296,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":297,"author":{"gitId":"-"},"content":" },"},{"lineNumber":298,"author":{"gitId":"-"},"content":" {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" \"src\": \"testIncludeBoilerplate.md\","},{"lineNumber":300,"author":{"gitId":"-"},"content":" \"title\": \"Content inside \u003cinclude\u003e should not be processed by markdown\","},{"lineNumber":301,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":302,"author":{"gitId":"-"},"content":" \"hello\": \"hello\""},{"lineNumber":303,"author":{"gitId":"-"},"content":" },"},{"lineNumber":304,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":305,"author":{"gitId":"-"},"content":" },"},{"lineNumber":306,"author":{"gitId":"-"},"content":" {"},{"lineNumber":307,"author":{"gitId":"-"},"content":" \"src\": \"testPanels.md\","},{"lineNumber":308,"author":{"gitId":"-"},"content":" \"title\": \"Test: Panels\","},{"lineNumber":309,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":310,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":311,"author":{"gitId":"-"},"content":" },"},{"lineNumber":312,"author":{"gitId":"-"},"content":" {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" \"src\": \"testPanelMarkdownParsing.md\","},{"lineNumber":314,"author":{"gitId":"-"},"content":" \"title\": \"markdown-it should parse minimized panel as inline element and normal panel as block element\","},{"lineNumber":315,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":316,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":317,"author":{"gitId":"-"},"content":" },"},{"lineNumber":318,"author":{"gitId":"-"},"content":" {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" \"src\": \"testCenterText.md\","},{"lineNumber":320,"author":{"gitId":"-"},"content":" \"title\": \"Center-aligned text test\","},{"lineNumber":321,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" \"center-text\": \"Center Text\""},{"lineNumber":323,"author":{"gitId":"-"},"content":" },"},{"lineNumber":324,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":325,"author":{"gitId":"-"},"content":" },"},{"lineNumber":326,"author":{"gitId":"-"},"content":" {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" \"src\": \"testHr.md\","},{"lineNumber":328,"author":{"gitId":"-"},"content":" \"title\": \"create different types of horizontal rules\","},{"lineNumber":329,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" \"different-types-of-horizontal-rules\": \"Different types of horizontal rules\""},{"lineNumber":331,"author":{"gitId":"-"},"content":" },"},{"lineNumber":332,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":333,"author":{"gitId":"-"},"content":" },"},{"lineNumber":334,"author":{"gitId":"-"},"content":" {"},{"lineNumber":335,"author":{"gitId":"-"},"content":" \"src\": \"testPageNav.md\","},{"lineNumber":336,"author":{"gitId":"-"},"content":" \"title\": \"text interpolation should be skipped appropriately\","},{"lineNumber":337,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":338,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":339,"author":{"gitId":"-"},"content":" },"},{"lineNumber":340,"author":{"gitId":"-"},"content":" {"},{"lineNumber":341,"author":{"gitId":"-"},"content":" \"src\": \"testPanelsClosingTransition.md\","},{"lineNumber":342,"author":{"gitId":"-"},"content":" \"title\": \"Test: Panels closing transition\","},{"lineNumber":343,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":344,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":345,"author":{"gitId":"-"},"content":" },"},{"lineNumber":346,"author":{"gitId":"-"},"content":" {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" \"src\": \"testLinks.md\","},{"lineNumber":348,"author":{"gitId":"-"},"content":" \"title\": \"Autolink tests\","},{"lineNumber":349,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":350,"author":{"gitId":"-"},"content":" \"autolinks\": \"Autolinks\""},{"lineNumber":351,"author":{"gitId":"-"},"content":" },"},{"lineNumber":352,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":353,"author":{"gitId":"-"},"content":" },"},{"lineNumber":354,"author":{"gitId":"-"},"content":" {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" \"src\": \"testTree.md\","},{"lineNumber":356,"author":{"gitId":"-"},"content":" \"title\": \"Tree tests\","},{"lineNumber":357,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" \"tree\": \"Tree\","},{"lineNumber":359,"author":{"gitId":"-"},"content":" \"single-tree\": \"Single Tree\","},{"lineNumber":360,"author":{"gitId":"-"},"content":" \"multiple-tree\": \"Multiple Tree\","},{"lineNumber":361,"author":{"gitId":"-"},"content":" \"inline-markdown\": \"Inline Markdown\""},{"lineNumber":362,"author":{"gitId":"-"},"content":" },"},{"lineNumber":363,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":364,"author":{"gitId":"-"},"content":" },"},{"lineNumber":365,"author":{"gitId":"-"},"content":" {"},{"lineNumber":366,"author":{"gitId":"-"},"content":" \"src\": \"testMath.md\","},{"lineNumber":367,"author":{"gitId":"-"},"content":" \"title\": \"Math formulae should be displayed correctly, with additional plugin\","},{"lineNumber":368,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" \"math-formulae\": \"Math Formulae\","},{"lineNumber":370,"author":{"gitId":"-"},"content":" \"markbind-supports-typesetting-tex-math-equations\": \"Markbind supports typesetting TeX math equations\","},{"lineNumber":371,"author":{"gitId":"-"},"content":" \"additional-delimiters-can-be-used-if-mathdelimiters-plugin-is-enabled\": \"Additional delimiters can be used if mathDelimiters plugin is enabled\""},{"lineNumber":372,"author":{"gitId":"-"},"content":" },"},{"lineNumber":373,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":374,"author":{"gitId":"-"},"content":" },"},{"lineNumber":375,"author":{"gitId":"-"},"content":" {"},{"lineNumber":376,"author":{"gitId":"-"},"content":" \"src\": \"testImages.md\","},{"lineNumber":377,"author":{"gitId":"-"},"content":" \"title\": \"Rendering of images according to specified dimension and auto-linkify ability\","},{"lineNumber":378,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":379,"author":{"gitId":"-"},"content":" \"images\": \"Images\","},{"lineNumber":380,"author":{"gitId":"-"},"content":" \"alt\": \"Alt\","},{"lineNumber":381,"author":{"gitId":"-"},"content":" \"dimension\": \"Dimension\","},{"lineNumber":382,"author":{"gitId":"-"},"content":" \"linkify\": \"Linkify\""},{"lineNumber":383,"author":{"gitId":"-"},"content":" },"},{"lineNumber":384,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":385,"author":{"gitId":"-"},"content":" },"},{"lineNumber":386,"author":{"gitId":"-"},"content":" {"},{"lineNumber":387,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavTarget.md\","},{"lineNumber":388,"author":{"gitId":"-"},"content":" \"title\": \"Bootstrap scrollspy related classes should be applied only if there are navigable headings\","},{"lineNumber":389,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":390,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":391,"author":{"gitId":"-"},"content":" },"},{"lineNumber":392,"author":{"gitId":"-"},"content":" {"},{"lineNumber":393,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavWithoutTitleAndNavHeadings.md\","},{"lineNumber":394,"author":{"gitId":"-"},"content":" \"title\": \"page nav separator should be omitted when there is no title and navigation headings added\","},{"lineNumber":395,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":396,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":397,"author":{"gitId":"-"},"content":" },"},{"lineNumber":398,"author":{"gitId":"-"},"content":" {"},{"lineNumber":399,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavWithOnlyTitle.md\","},{"lineNumber":400,"author":{"gitId":"-"},"content":" \"title\": \"page nav with title added\","},{"lineNumber":401,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":402,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":403,"author":{"gitId":"-"},"content":" },"},{"lineNumber":404,"author":{"gitId":"-"},"content":" {"},{"lineNumber":405,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavPrint.md\","},{"lineNumber":406,"author":{"gitId":"-"},"content":" \"title\": \"printing page nav\","},{"lineNumber":407,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" \"h1\": \"H1\","},{"lineNumber":409,"author":{"gitId":"-"},"content":" \"h2\": \"H2\""},{"lineNumber":410,"author":{"gitId":"-"},"content":" },"},{"lineNumber":411,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":412,"author":{"gitId":"-"},"content":" },"},{"lineNumber":413,"author":{"gitId":"-"},"content":" {"},{"lineNumber":414,"author":{"gitId":"-"},"content":" \"src\": \"testWeb3FormPlugin.md\","},{"lineNumber":415,"author":{"gitId":"-"},"content":" \"title\": \"web 3 forms\","},{"lineNumber":416,"author":{"gitId":"-"},"content":" \"headings\": {"},{"lineNumber":417,"author":{"gitId":"-"},"content":" \"i-am-a-header\": \"🚀 I am a header\""},{"lineNumber":418,"author":{"gitId":"-"},"content":" },"},{"lineNumber":419,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":420,"author":{"gitId":"-"},"content":" },"},{"lineNumber":421,"author":{"gitId":"-"},"content":" {"},{"lineNumber":422,"author":{"gitId":"-"},"content":" \"src\": \"testList.md\","},{"lineNumber":423,"author":{"gitId":"-"},"content":" \"title\": \"web 3 forms\","},{"lineNumber":424,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":425,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":426,"author":{"gitId":"-"},"content":" },"},{"lineNumber":427,"author":{"gitId":"-"},"content":" {"},{"lineNumber":428,"author":{"gitId":"-"},"content":" \"src\": \"testFontAwesomeInPage.md\","},{"lineNumber":429,"author":{"gitId":"-"},"content":" \"title\": \"font-awesome icon in page, only font-awesome stylesheet should be loaded\","},{"lineNumber":430,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":431,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":432,"author":{"gitId":"-"},"content":" },"},{"lineNumber":433,"author":{"gitId":"-"},"content":" {"},{"lineNumber":434,"author":{"gitId":"-"},"content":" \"src\": \"testGlyphiconInPage.md\","},{"lineNumber":435,"author":{"gitId":"-"},"content":" \"title\": \"glyphicon icon in page, only glyphicon stylesheet should be loaded\","},{"lineNumber":436,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":437,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":438,"author":{"gitId":"-"},"content":" },"},{"lineNumber":439,"author":{"gitId":"-"},"content":" {"},{"lineNumber":440,"author":{"gitId":"-"},"content":" \"src\": \"testMaterialIconsInPage.md\","},{"lineNumber":441,"author":{"gitId":"-"},"content":" \"title\": \"material-icons icon in page, only material-icons stylesheet should be loaded\","},{"lineNumber":442,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":443,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":444,"author":{"gitId":"-"},"content":" },"},{"lineNumber":445,"author":{"gitId":"-"},"content":" {"},{"lineNumber":446,"author":{"gitId":"-"},"content":" \"src\": \"testOcticonInPage.md\","},{"lineNumber":447,"author":{"gitId":"-"},"content":" \"title\": \"octicon icon in page, only octicon stylesheet should be loaded\","},{"lineNumber":448,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":449,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":450,"author":{"gitId":"-"},"content":" },"},{"lineNumber":451,"author":{"gitId":"-"},"content":" {"},{"lineNumber":452,"author":{"gitId":"-"},"content":" \"src\": \"testIconsInSiteLayout.md\","},{"lineNumber":453,"author":{"gitId":"-"},"content":" \"title\": \"glyphicon \u0026 octicon icon in page, only glyphicon \u0026 octicon stylesheets should be loaded\","},{"lineNumber":454,"author":{"gitId":"-"},"content":" \"headings\": {},"},{"lineNumber":455,"author":{"gitId":"-"},"content":" \"headingKeywords\": {}"},{"lineNumber":456,"author":{"gitId":"yiwen101"},"content":" },"},{"lineNumber":457,"author":{"gitId":"yiwen101"},"content":" {"},{"lineNumber":458,"author":{"gitId":"yiwen101"},"content":" \"src\": \"testSourceContainScript.md\","},{"lineNumber":459,"author":{"gitId":"yiwen101"},"content":" \"title\": \"Test: If source contains script or css, when included, the script or css should be included\","},{"lineNumber":460,"author":{"gitId":"yiwen101"},"content":" \"headings\": {"},{"lineNumber":461,"author":{"gitId":"yiwen101"},"content":" \"panel-with-src-that-contains-css-and-script-header\": \"Panel with src that contains css and script header\","},{"lineNumber":462,"author":{"gitId":"yiwen101"},"content":" \"h1-text\": \"\\n\\n\\n h1 text\\n \\n\""},{"lineNumber":463,"author":{"gitId":"yiwen101"},"content":" },"},{"lineNumber":464,"author":{"gitId":"yiwen101"},"content":" \"headingKeywords\": {}"},{"lineNumber":465,"author":{"gitId":"-"},"content":" }"},{"lineNumber":466,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":467,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"-":458,"yiwen101":9}},{"path":"packages/cli/test/functional/test_site/expected/stylesheets/styles.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: auto;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" margin-left: 60px;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":113,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":124,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":135,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":137}},{"path":"packages/cli/test/functional/test_site/expected/testList.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027div\u0027,[_c(\u0027header\u0027,[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\",\"default-highlight-on\":\"sibling-or-child\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\",\"title\":\"Home\"}},[_v(\"MarkBind Test Site\")])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs\")])])]),_v(\" \"),_m(0)],1),_v(\" \"),_m(1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_c(\u0027div\u0027,[_c(\u0027h2\u0027,{attrs:{\"id\":\"default-layout\"}},[_v(\"Default Layout\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#default-layout\",\"onclick\":\"event.stopPropagation()\"}})])])])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027div\u0027,[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs 🐛\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_c(\u0027h3\u0027,{attrs:{\"id\":\"testing-site-nav\"}},[_v(\"Testing Site-Nav\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-site-nav\",\"onclick\":\"event.stopPropagation()\"}})])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027strong\u0027,[_v(\"Dropdown \")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-search\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" title ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Html within site-nav \"),_c(\u0027span\u0027,{staticStyle:{\"color\":\"red\"}},[_v(\"should\")]),_v(\" be displayed properly\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown title 📐\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027mark\u0027,[_v(\"Third Link\")]),_v(\" 📋\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Filler text \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-facetime-video\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" Youtube 📺\")]),_v(\" filler text\"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/watch?v\u003ddQw4w9WgXcQ\"}},[_v(\"The answer to everything in the universe\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027mark\u0027,[_v(\"Dropdown title\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-comment\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown Title\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Hello Doge Hello Doge 🐶\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_c(\u0027strong\u0027,[_v(\"NESTED LINK\")]),_v(\" Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Test line break in navigation layout\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Nested line break text ✂️\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Nested line break href\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Nested Nested line break text ✂️\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested line break dropdown menu\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Line break item 2 📘\")])])])])])])],1)],1)])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7),_v(\" \"),_m(8),_v(\" \"),_m(9),_v(\" \"),_m(10),_v(\" \"),_m(11),_v(\" \"),_m(12),_v(\" \"),_m(13),_v(\" \"),_m(14),_v(\" \"),_m(15),_v(\" \"),_m(16),_v(\" \"),_m(17),_v(\" \"),_m(18),_v(\" \"),_m(19),_v(\" \"),_m(20),_v(\" \"),_m(21),_v(\" \"),_m(22),_v(\" \"),_m(23),_v(\" \"),_m(24),_v(\" \"),_m(25),_v(\" \"),_m(26),_v(\" \"),_m(27),_v(\" \"),_m(28),_v(\" \"),_m(29),_v(\" \"),_m(30),_v(\" \"),_m(31),_v(\" \"),_m(32),_v(\" \"),_m(33),_v(\" \"),_m(34),_v(\" \"),_m(35),_v(\" \"),_m(36),_v(\" \"),_m(37),_v(\" \"),_m(38),_v(\" \"),_m(39),_v(\" \"),_m(40),_v(\" \"),_m(41),_v(\" \"),_m(42),_v(\" \"),_m(43),_v(\" \"),_m(44),_v(\" \"),_m(45),_v(\" \"),_m(46),_v(\" \"),_m(47),_v(\" \"),_m(48),_v(\" \"),_m(49),_v(\" \"),_m(50),_v(\" \"),_m(51),_v(\" \"),_m(52),_v(\" \"),_m(53),_v(\" \"),_m(54),_v(\" \"),_m(55),_v(\" \"),_m(56),_v(\" \"),_m(57),_v(\" \"),_m(58),_v(\" \"),_m(59),_v(\" \"),_m(60),_v(\" \"),_m(61),_v(\" \"),_m(62),_v(\" \"),_m(63),_v(\" \"),_m(64),_v(\" \"),_m(65)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(66)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"bg-info display-4 text-center text-white\"},[_c(\u0027br\u0027),_v(\"\\n Test Jumbotron\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027br\u0027)])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Relative Link Test\")]),_v(\" This is a relative Intra-Site link in a layout (see \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html#heading-with-hidden-keyword\"}},[_v(\"link\")]),_v(\")\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item\")])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"-"},"content":") {"},{"lineNumber":17,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Only 1 item\")])])}"},{"lineNumber":18,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"-"},"content":") {"},{"lineNumber":20,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item with customization icon\")])])}"},{"lineNumber":21,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"-"},"content":") {"},{"lineNumber":23,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])}"},{"lineNumber":24,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"-"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item with once customization\")])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item with customization text\")])])}"},{"lineNumber":33,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"-"},"content":") {"},{"lineNumber":35,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])}"},{"lineNumber":36,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"-"},"content":") {"},{"lineNumber":38,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item + nested list\")])])}"},{"lineNumber":39,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"-"},"content":") {"},{"lineNumber":41,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Only 1 item\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Only 1 item\")])])])])}"},{"lineNumber":42,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"-"},"content":") {"},{"lineNumber":44,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item + nested list with icon customization\")])])}"},{"lineNumber":45,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":46,"author":{"gitId":"-"},"content":") {"},{"lineNumber":47,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])])])])}"},{"lineNumber":48,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":49,"author":{"gitId":"-"},"content":") {"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item + nested list with once customization\")])])}"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])])])])}"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":56,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"One item + nested list with text customization\")])])}"},{"lineNumber":57,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":58,"author":{"gitId":"-"},"content":") {"},{"lineNumber":59,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1.1\")]),_c(\u0027div\u0027,[_v(\"Only 1 item\")])])])])])])}"},{"lineNumber":60,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":61,"author":{"gitId":"-"},"content":") {"},{"lineNumber":62,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Basic structure\")])])}"},{"lineNumber":63,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":64,"author":{"gitId":"-"},"content":") {"},{"lineNumber":65,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])])}"},{"lineNumber":66,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":67,"author":{"gitId":"-"},"content":") {"},{"lineNumber":68,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Icon inheritance test\")])])}"},{"lineNumber":69,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":70,"author":{"gitId":"-"},"content":") {"},{"lineNumber":71,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":72,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":73,"author":{"gitId":"-"},"content":") {"},{"lineNumber":74,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Text inheritance test\")])])}"},{"lineNumber":75,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":76,"author":{"gitId":"-"},"content":") {"},{"lineNumber":77,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"First layer\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"First layer\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Second layer\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Second layer\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Second layer\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Third layer\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Third layer\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Second layer\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":78,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":79,"author":{"gitId":"-"},"content":") {"},{"lineNumber":80,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"First item no customization test\")])])}"},{"lineNumber":81,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":82,"author":{"gitId":"-"},"content":") {"},{"lineNumber":83,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"./images/deer.jpg\",\"text\":\"First\"}},[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"fas-file-code\",\"text\":\"Should not be appearing\"}},[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.1\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"./images/deer.jpg\",\"i-width\":\"50px\",\"text\":\"Should not be appearing\"}},[_v(\"Sub-sub-item B3.2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])])}"},{"lineNumber":84,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":85,"author":{"gitId":"-"},"content":") {"},{"lineNumber":86,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Correct first item customization test\")])])}"},{"lineNumber":87,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":88,"author":{"gitId":"-"},"content":") {"},{"lineNumber":89,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":90,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":91,"author":{"gitId":"-"},"content":") {"},{"lineNumber":92,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Testing with various icon attributes\")])])}"},{"lineNumber":93,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":94,"author":{"gitId":"-"},"content":") {"},{"lineNumber":95,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticClass:\"text-warning\",staticStyle:{\"width\":\"200px\",\"height\":\"100px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Hi\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"2rem\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Hi\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"2rem\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Hi\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"height\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"height\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,{attrs:{\"i-class\":\"text-danger\"}},[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"1rem\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Hi\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":96,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":97,"author":{"gitId":"-"},"content":") {"},{"lineNumber":98,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Testing with various text attributes\")])])}"},{"lineNumber":99,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":100,"author":{"gitId":"-"},"content":") {"},{"lineNumber":101,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-primary\",staticStyle:{\"font-size\":\"20px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-warning\",staticStyle:{\"font-size\":\"20px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 2\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,{attrs:{\"t-class\":\"text-danger\"}},[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":102,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":103,"author":{"gitId":"-"},"content":") {"},{"lineNumber":104,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Mixing text and icon\")])])}"},{"lineNumber":105,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":106,"author":{"gitId":"-"},"content":") {"},{"lineNumber":107,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticClass:\"text-primary\",staticStyle:{\"font-size\":\"20px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 1\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027span\u0027,{staticClass:\"text-warning\",staticStyle:{\"font-size\":\"20px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"Step 2\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"20px\",\"height\":\"20px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027span\u0027,{staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"30px\",\"height\":\"30px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"30px\",\"height\":\"30px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍​\")]),_c(\u0027span\u0027,{staticStyle:{\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"👍\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,{attrs:{\"t-class\":\"text-danger\"}},[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"30px\",\"height\":\"30px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027span\u0027,{staticClass:\"text-success\",staticStyle:{\"font-size\":\"10px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_c(\u0027em\u0027,[_v(\"MD\")])]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":108,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":109,"author":{"gitId":"-"},"content":") {"},{"lineNumber":110,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Mixing basic and customized lists\")])])}"},{"lineNumber":111,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":112,"author":{"gitId":"-"},"content":") {"},{"lineNumber":113,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-danger\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-danger\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticClass:\"text-warning\",staticStyle:{\"width\":\"200px\",\"height\":\"100px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])}"},{"lineNumber":114,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":115,"author":{"gitId":"-"},"content":") {"},{"lineNumber":116,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Reverse mixing basic and customized lists\")])])}"},{"lineNumber":117,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":118,"author":{"gitId":"-"},"content":") {"},{"lineNumber":119,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-sub-item B3.2\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-sub-sub-item B3.2.1\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])])])}"},{"lineNumber":120,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":121,"author":{"gitId":"-"},"content":") {"},{"lineNumber":122,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Every second list item customized\")])])}"},{"lineNumber":123,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":124,"author":{"gitId":"-"},"content":") {"},{"lineNumber":125,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"20px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code text-success\",staticStyle:{\"font-size\":\"30px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticClass:\"text-warning\",staticStyle:{\"width\":\"200px\",\"height\":\"100px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticClass:\"text-warning\",staticStyle:{\"width\":\"200px\",\"height\":\"100px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])])])}"},{"lineNumber":126,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":127,"author":{"gitId":"-"},"content":") {"},{"lineNumber":128,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Once + none + customization\")])])}"},{"lineNumber":129,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":130,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":131,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":132,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":133,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":134,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Customization + none + once\")])])}"},{"lineNumber":135,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":136,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":137,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B2\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":138,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":139,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":140,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Customization + once + none\")])])}"},{"lineNumber":141,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":142,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":143,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":144,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":145,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":146,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Once + customization + none\")])])}"},{"lineNumber":147,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":148,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":149,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":150,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":151,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":152,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"None + customization + once\")])])}"},{"lineNumber":153,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":154,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":155,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"fas-file-code\"}},[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"glyphicon-education\",\"once\":\"true\"}},[_v(\"Item C\")])])}"},{"lineNumber":156,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":157,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":158,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"None + once + customization\")])])}"},{"lineNumber":159,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":160,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":161,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"glyphicon-education\",\"once\":\"true\"}},[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"fas-file-code\"}},[_v(\"Item C\")])])}"},{"lineNumber":162,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":163,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":164,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Customization + once + customization\")])])}"},{"lineNumber":165,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":166,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":167,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":168,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":169,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":170,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"String once\")])])}"},{"lineNumber":171,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":172,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":173,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item C\")])])}"},{"lineNumber":174,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":175,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":176,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"False once for item A, rest of items will inherit\")])])}"},{"lineNumber":177,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":178,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":179,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":180,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":181,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":182,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"False once for item B, will overwrite item A\")])])}"},{"lineNumber":183,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":184,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":185,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":186,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":187,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":188,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Once for specific attributes besides icon, does not overwrite\")])])}"},{"lineNumber":189,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":190,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":191,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"70px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"40px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"70px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":192,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":193,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":194,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"False once for specific attributes besides icon, does overwrite\")])])}"},{"lineNumber":195,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":196,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":197,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"70px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item A\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"40px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Sub-item B1\")])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education text-primary\",staticStyle:{\"font-size\":\"40px\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Item C\")])])])}"},{"lineNumber":198,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":199,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":200,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Sub-level\")])])}"},{"lineNumber":201,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":202,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":203,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Item A\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Item B\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-education\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B1\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Sub-item B2\")]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B3\\n\"),_c(\u0027ul\u0027,{staticStyle:{\"list-style-type\":\"none\",\"padding-inline-start\":\"0px\"}},[_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.1\")])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticStyle:{\"padding-bottom\":\"0.3em\",\"padding-top\":\"0.3em\",\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"}},[_c(\u0027img\u0027,{staticStyle:{\"width\":\"50px\",\"display\":\"inline-block\"},attrs:{\"src\":\"/test_site/images/deer.jpg\",\"alt\":\"Icon\"}}),_v(\"​​\")]),_c(\u0027div\u0027,[_v(\"Sub-sub-item B3.2\")])])])])]),_v(\" \"),_c(\u0027li\u0027,{staticStyle:{\"display\":\"flex\"}},[_c(\u0027span\u0027,{staticClass:\"fas fa-file-code\",staticStyle:{\"font-size\":\"unset\",\"min-width\":\"16px\",\"line-height\":\"unset\",\"margin-inline-end\":\"0.35em\",\"align-self\":\"flex-start\",\"flex-shrink\":\"0\"},attrs:{\"aria-hidden\":\"true\"}},[_v(\"​\")]),_c(\u0027div\u0027,[_v(\"Sub-item B4\")])])])]),_v(\" \"),_c(\u0027li\u0027,{attrs:{\"icon\":\"./images/deer.jpg\",\"i-width\":\"50px\"}},[_v(\"Item C\")])])}"},{"lineNumber":204,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":205,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":206,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027footer\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"heading-in-footer-should-not-be-indexed\"}},[_v(\"Heading in footer should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-in-footer-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"text-center\"},[_v(\"\\n This is a dynamic height footer that supports markdown \"),_c(\u0027span\u0027,[_v(\"😄\")]),_v(\"!\\n \")])])])}"},{"lineNumber":207,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":208,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"KevinEyo1":91,"-":117}},{"path":"packages/cli/test/functional/test_site/expected/testSourceContainScript.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":2,"author":{"gitId":"yiwen101"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027div\u0027,[_c(\u0027header\u0027,[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\",\"default-highlight-on\":\"sibling-or-child\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\",\"title\":\"Home\"}},[_v(\"MarkBind Test Site\")])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs\")])])]),_v(\" \"),_m(0)],1),_v(\" \"),_m(1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_c(\u0027div\u0027,[_c(\u0027h2\u0027,{attrs:{\"id\":\"default-layout\"}},[_v(\"Default Layout\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#default-layout\",\"onclick\":\"event.stopPropagation()\"}})])])])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027div\u0027,[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs 🐛\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_c(\u0027h3\u0027,{attrs:{\"id\":\"testing-site-nav\"}},[_v(\"Testing Site-Nav\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-site-nav\",\"onclick\":\"event.stopPropagation()\"}})])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027strong\u0027,[_v(\"Dropdown \")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-search\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" title ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Html within site-nav \"),_c(\u0027span\u0027,{staticStyle:{\"color\":\"red\"}},[_v(\"should\")]),_v(\" be displayed properly\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown title 📐\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027mark\u0027,[_v(\"Third Link\")]),_v(\" 📋\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Filler text \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-facetime-video\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" Youtube 📺\")]),_v(\" filler text\"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/watch?v\u003ddQw4w9WgXcQ\"}},[_v(\"The answer to everything in the universe\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027mark\u0027,[_v(\"Dropdown title\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-comment\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown Title\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Hello Doge Hello Doge 🐶\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_c(\u0027strong\u0027,[_v(\"NESTED LINK\")]),_v(\" Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Test line break in navigation layout\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Nested line break text ✂️\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Nested line break href\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Nested Nested line break text ✂️\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested line break dropdown menu\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Line break item 2 📘\")])])])])])])],1)],1)])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"src\":\"/test_site/testPanels/PanelSourceContainsScript._include_.html\",\"expanded\":\"\",\"panelId\":\"panel-with-src-that-contains-css-and-script-header\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h2\u0027,{attrs:{\"id\":\"panel-with-src-that-contains-css-and-script-header\"}},[_v(\"Panel with src that contains css and script header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#panel-with-src-that-contains-css-and-script-header\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])})],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"yiwen101"},"content":"};"},{"lineNumber":6,"author":{"gitId":"yiwen101"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":8,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"bg-info display-4 text-center text-white\"},[_c(\u0027br\u0027),_v(\"\\n Test Jumbotron\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027br\u0027)])}"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Relative Link Test\")]),_v(\" This is a relative Intra-Site link in a layout (see \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html#heading-with-hidden-keyword\"}},[_v(\"link\")]),_v(\")\")])}"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"yiwen101"},"content":") {"},{"lineNumber":14,"author":{"gitId":"yiwen101"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027footer\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"heading-in-footer-should-not-be-indexed\"}},[_v(\"Heading in footer should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-in-footer-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"text-center\"},[_v(\"\\n This is a dynamic height footer that supports markdown \"),_c(\u0027span\u0027,[_v(\"😄\")]),_v(\"!\\n \")])])])}"},{"lineNumber":15,"author":{"gitId":"yiwen101"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"yiwen101"},"content":" "}],"authorContributionMap":{"yiwen101":16}},{"path":"packages/cli/test/functional/test_site/expected/testWeb3FormPlugin.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"LamJiuFong"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027div\u0027,[_c(\u0027header\u0027,[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\",\"default-highlight-on\":\"sibling-or-child\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\",\"title\":\"Home\"}},[_v(\"MarkBind Test Site\")])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs\")])])]),_v(\" \"),_m(0)],1),_v(\" \"),_m(1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_c(\u0027div\u0027,[_c(\u0027h2\u0027,{attrs:{\"id\":\"default-layout\"}},[_v(\"Default Layout\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#default-layout\",\"onclick\":\"event.stopPropagation()\"}})])])])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027div\u0027,[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/bugs/index.html\"}},[_v(\"Open Bugs 🐛\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_c(\u0027h3\u0027,{attrs:{\"id\":\"testing-site-nav\"}},[_v(\"Testing Site-Nav\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-site-nav\",\"onclick\":\"event.stopPropagation()\"}})])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027strong\u0027,[_v(\"Dropdown \")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-search\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" title ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Html within site-nav \"),_c(\u0027span\u0027,{staticStyle:{\"color\":\"red\"}},[_v(\"should\")]),_v(\" be displayed properly\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown title 📐\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_v(\"Dropdown link two\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027mark\u0027,[_v(\"Third Link\")]),_v(\" 📋\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Filler text \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-facetime-video\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" Youtube 📺\")]),_v(\" filler text\"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.youtube.com/watch?v\u003ddQw4w9WgXcQ\"}},[_v(\"The answer to everything in the universe\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027mark\u0027,[_v(\"Dropdown title\")]),_v(\" \"),_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-comment\",attrs:{\"aria-hidden\":\"true\"}}),_v(\" ✏️ \"),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"https://www.google.com/\"}},[_c(\u0027strong\u0027,[_v(\"Nested\")]),_v(\" Dropdown link one\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown Title Really Long Dropdown\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text Really Really Long Text\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested Dropdown Title\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Hello Doge Hello Doge 🐶\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_c(\u0027strong\u0027,[_v(\"NESTED LINK\")]),_v(\" Home 🏠\")])])]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit Text cut off from height limit\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Test line break in navigation layout\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-1\"},[_v(\"Nested line break text ✂️\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html\"}},[_v(\"Nested line break href\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Nested Nested line break text ✂️\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Nested line break dropdown menu\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-2\"},[_v(\"Line break item 2 📘\")])])])])])])],1)],1)])]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(2),_v(\" \"),_c(\u0027box\u0027,{staticClass:\"web-3-form\",attrs:{\"type\":\"info\",\"no-icon\":\"\"}},[_c(\u0027p\u0027,{staticClass:\"h2\"},[_v(\"Contact Us\")]),_c(\u0027form\u0027,{attrs:{\"onsubmit\":\"submitForm(this)\"}},[_c(\u0027input\u0027,{attrs:{\"type\":\"hidden\",\"name\":\"access_key\",\"value\":\"\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"name\"}},[_v(\"Name\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"text\",\"name\":\"name\",\"required\":\"\",\"placeholder\":\"John Doe\"}}),_v(\" \"),_c(\u0027label\u0027,{attrs:{\"for\":\"email\"}},[_v(\"Email\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"email\",\"name\":\"email\",\"required\":\"\",\"placeholder\":\"johndoe@gmail.com\"}}),_v(\" \"),_c(\u0027label\u0027,{attrs:{\"for\":\"message\"}},[_v(\"Message\")]),_v(\" \"),_c(\u0027textarea\u0027,{attrs:{\"name\":\"message\",\"required\":\"\"}}),_v(\" \"),_c(\u0027button\u0027,{staticClass:\"badge bg-info\",attrs:{\"type\":\"submit\"}},[_v(\"Submit\")])])]),_v(\" \"),_m(3),_v(\" \"),_c(\u0027box\u0027,{staticClass:\"web-3-form\",attrs:{\"type\":\"info\",\"no-icon\":\"\"}},[_c(\u0027form\u0027,{attrs:{\"onsubmit\":\"submitForm(this)\"}},[_c(\u0027input\u0027,{attrs:{\"type\":\"hidden\",\"name\":\"access_key\",\"value\":\"\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"name\"}},[_v(\"Name\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"text\",\"name\":\"name\",\"required\":\"\",\"placeholder\":\"John Doe\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"message\"}},[_v(\"Message\")]),_v(\" \"),_c(\u0027textarea\u0027,{attrs:{\"name\":\"message\",\"required\":\"\"}}),_c(\u0027button\u0027,{staticClass:\"badge bg-info\",attrs:{\"type\":\"submit\"}},[_v(\"Submit\")])])]),_v(\" \"),_m(4),_v(\" \"),_c(\u0027box\u0027,{staticClass:\"web-3-form\",attrs:{\"type\":\"info\",\"no-icon\":\"\"}},[_c(\u0027form\u0027,{attrs:{\"onsubmit\":\"submitForm(this)\"}},[_c(\u0027input\u0027,{attrs:{\"type\":\"hidden\",\"name\":\"access_key\",\"value\":\"\"}}),_c(\u0027input\u0027,{attrs:{\"type\":\"radio\",\"id\":\"html\",\"name\":\"fav_language\",\"value\":\"HTML\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"html\"}},[_v(\"HTML\")]),_c(\u0027br\u0027),_c(\u0027input\u0027,{attrs:{\"type\":\"radio\",\"id\":\"css\",\"name\":\"fav_language\",\"value\":\"CSS\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"css\"}},[_v(\"CSS\")]),_c(\u0027br\u0027),_c(\u0027input\u0027,{attrs:{\"type\":\"radio\",\"id\":\"javascript\",\"name\":\"fav_language\",\"value\":\"JavaScript\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"javascript\"}},[_v(\"JavaScript\")]),_c(\u0027br\u0027),_c(\u0027input\u0027,{attrs:{\"list\":\"browsers\"}}),_c(\u0027datalist\u0027,{attrs:{\"id\":\"browsers\"}},[_c(\u0027option\u0027,{attrs:{\"value\":\"Internet Explorer\"}}),_c(\u0027option\u0027,{attrs:{\"value\":\"Firefox\"}}),_c(\u0027option\u0027,{attrs:{\"value\":\"Chrome\"}}),_c(\u0027option\u0027,{attrs:{\"value\":\"Opera\"}}),_c(\u0027option\u0027,{attrs:{\"value\":\"Safari\"}})]),_c(\u0027br\u0027),_c(\u0027button\u0027,{staticClass:\"badge bg-info\",attrs:{\"type\":\"submit\"}},[_v(\"Submit\")])])]),_v(\" \"),_m(5),_v(\" \"),_c(\u0027box\u0027,{staticClass:\"web-3-form\",attrs:{\"type\":\"warning\",\"no-icon\":\"\"}},[_c(\u0027h3\u0027,{attrs:{\"id\":\"i-am-a-header\"}},[_v(\"🚀 I am a header\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#i-am-a-header\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027form\u0027,{attrs:{\"onsubmit\":\"submitForm(this)\"}},[_c(\u0027input\u0027,{attrs:{\"type\":\"hidden\",\"name\":\"access_key\",\"value\":\"\"}}),_c(\u0027label\u0027,{attrs:{\"for\":\"name\"}},[_v(\"Name\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"text\",\"name\":\"name\",\"required\":\"\",\"placeholder\":\"John Doe\"}}),_v(\" \"),_c(\u0027label\u0027,{attrs:{\"for\":\"email\"}},[_v(\"Email\")]),_v(\" \"),_c(\u0027input\u0027,{attrs:{\"type\":\"email\",\"name\":\"email\",\"required\":\"\",\"placeholder\":\"johndoe@gmail.com\"}}),_v(\" \"),_c(\u0027label\u0027,{attrs:{\"for\":\"message\"}},[_v(\"Message\")]),_v(\" \"),_c(\u0027textarea\u0027,{attrs:{\"name\":\"message\",\"required\":\"\"}}),_v(\" \"),_c(\u0027button\u0027,{staticClass:\"badge bg-info\",attrs:{\"type\":\"submit\"}},[_v(\"Submit\")])])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(6)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"bg-info display-4 text-center text-white\"},[_c(\u0027br\u0027),_v(\"\\n Test Jumbotron\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027br\u0027)])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Relative Link Test\")]),_v(\" This is a relative Intra-Site link in a layout (see \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/test_site/index.html#heading-with-hidden-keyword\"}},[_v(\"link\")]),_v(\")\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Default contact us form\")])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"-"},"content":") {"},{"lineNumber":17,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Form with default inputs\")])])}"},{"lineNumber":18,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"-"},"content":") {"},{"lineNumber":20,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Form with customised inputs\")])])}"},{"lineNumber":21,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"-"},"content":") {"},{"lineNumber":23,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Form with customised options\")])])}"},{"lineNumber":24,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"-"},"content":") {"},{"lineNumber":26,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027footer\u0027,[_c(\u0027h1\u0027,{attrs:{\"id\":\"heading-in-footer-should-not-be-indexed\"}},[_v(\"Heading in footer should not be indexed\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#heading-in-footer-should-not-be-indexed\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"text-center\"},[_v(\"\\n This is a dynamic height footer that supports markdown \"),_c(\u0027span\u0027,[_v(\"😄\")]),_v(\"!\\n \")])])])}"},{"lineNumber":27,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":28,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"LamJiuFong":1,"-":27}},{"path":"packages/cli/test/functional/test_site/index.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"title: Hello World"},{"lineNumber":3,"author":{"gitId":"-"},"content":"pageNav: \"default\""},{"lineNumber":4,"author":{"gitId":"-"},"content":"pageNavTitle: \"Testing Page Navigation\""},{"lineNumber":5,"author":{"gitId":"-"},"content":"globalOverrideProperty: \"To be overridden by global override\""},{"lineNumber":6,"author":{"gitId":"-"},"content":"frontmatterOverrideProperty: \"To be overridden by frontmatter override\""},{"lineNumber":7,"author":{"gitId":"-"},"content":"globalAndFrontmatterOverrideProperty: \"To be overridden by frontmatter and global override\""},{"lineNumber":8,"author":{"gitId":"-"},"content":"tags: [\"tag-frontmatter-shown\", \"tag-included-file\", \"+tag-exp*\", \"-tag-exp-hidden\", \"-tag-site-override-shown\", \"-tag-site-override-specific*\"]"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"website-content\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"**Test `\u003cmarkdown\u003e` and `\u003cmd\u003e` elements**"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cmarkdown\u003eThis should be wrapped in a `\u003cp\u003e` tag as it uses the block-level markdown renderer\u003c/markdown\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003cmd\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"This should not be wrapped in a `\u003cp\u003e` tag as it uses the inline markdown renderer"},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003c/md\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"\u003cmarkdown class\u003d\"mt-2\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":"```"},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003cmarkdown\u003e elements allow block-level markdown without needing a leading newline."},{"lineNumber":24,"author":{"gitId":"-"},"content":"Hence, the contained markdown should be parsed and output as is, without any parsing errors."},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003c/invalidhtml\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"```"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003c/markdown\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003cmd\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":"`\u003cmd\u003e` elements allow inline-level markdown even in a non-markdown token."},{"lineNumber":31,"author":{"gitId":"-"},"content":"Hence, the contained markdown should be parsed and output as is, without any parsing errors."},{"lineNumber":32,"author":{"gitId":"-"},"content":"`\u003c/invalid\u003e`."},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/md\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Test footnotes**"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testFootnotes.md\" /\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"yiwen101"},"content":"**Test include footnotes from hash**"},{"lineNumber":41,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":42,"author":{"gitId":"yiwen101"},"content":"\u003cinclude src\u003d\"testHashFootnotes.md#import\" /\u003e"},{"lineNumber":43,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"**Nunjucks SetExt**"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"{% ext externalVar \u003d \"_markbind/variable.json\" %}"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"{{ externalVar.front }} {{ externalVar.back }}"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"{% for val in externalVar.arrayVar %}"},{"lineNumber":51,"author":{"gitId":"-"},"content":"{{ val }}"},{"lineNumber":52,"author":{"gitId":"-"},"content":"{% endfor %}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"{{ externalVar.nestedVar.nestedVarKey }}"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"**Variables that reference another variable**"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"{{finalized_value}}"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"{{reference_level_4}}"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"**Global Variables can be referenced in {% raw %}{% set %}{% endraw %}**"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"{% set page_variable_with_global_variable %}"},{"lineNumber":65,"author":{"gitId":"-"},"content":"Page Variable with {{ global_variable }}"},{"lineNumber":66,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":67,"author":{"gitId":"-"},"content":"{{ page_variable_with_global_variable }}"},{"lineNumber":68,"author":{"gitId":"-"},"content":""},{"lineNumber":69,"author":{"gitId":"-"},"content":"**Global Variables should override {% raw %}{% set %}{% endraw %}**"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"{% set page_global_variable_overriding_page_variable %}"},{"lineNumber":72,"author":{"gitId":"-"},"content":"**Should not appear**: Page Variable overridden by Global Variable"},{"lineNumber":73,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":74,"author":{"gitId":"-"},"content":"{{ page_global_variable_overriding_page_variable }}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"**Test Page Variable and Included Variable Integrations**"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":"{% set outerNunjucksVariable %}"},{"lineNumber":79,"author":{"gitId":"-"},"content":"Outer Nunjucks Variable"},{"lineNumber":80,"author":{"gitId":"-"},"content":"{% endset %}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testPageVariablesInInclude.md\" /\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":"# Heading with multiple keywords"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword\"\u003ekeyword 1\u003c/span\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword\"\u003ekeyword 2\u003c/span\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":"# Heading with keyword in panel"},{"lineNumber":89,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"Panel with keyword\" expanded\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003epanel keyword\u003c/span\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":"**Panel with heading with keyword**"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"# Panel with heading\" expanded\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003epanel keyword\u003c/span\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Expanded panel without heading with keyword**"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"# Panel without heading with keyword\" expanded\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":""},{"lineNumber":103,"author":{"gitId":"-"},"content":" # Keyword should be tagged to this heading, not the panel heading"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003epanel keyword\u003c/span\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":"**Unexpanded panel with heading with keyword**"},{"lineNumber":108,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"# Panel with heading with keyword\"\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":" # Keyword should be tagged to the panel heading, not this heading"},{"lineNumber":111,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003epanel keyword\u003c/span\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":"# Heading \u003cinclude src\u003d\"testTrimIncludeFragment.md#fragment\" /\u003e"},{"lineNumber":115,"author":{"gitId":"-"},"content":""},{"lineNumber":116,"author":{"gitId":"-"},"content":"The `id` for the above heading should be `heading-fragment-with-leading-spaces-and-newline` in total."},{"lineNumber":117,"author":{"gitId":"-"},"content":"This test ensures heading ids are assigned last (e.g. after `\u003cinclude /\u003e`s are processed)."},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"# Heading with included keyword"},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testKeyword.md\" /\u003e"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testKeywordHeading.md\" /\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword\"\u003eKeyword with included heading\u003c/span\u003e"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":"# Heading with nested keyword"},{"lineNumber":126,"author":{"gitId":"-"},"content":"\u003cdiv\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"keyword\"\u003enested keyword\u003c/span\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"# Heading with hidden keyword"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cspan class\u003d\"keyword d-none\"\u003einvisible keyword\u003c/span\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testTags.md\" /\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"**Normal include**"},{"lineNumber":140,"author":{"gitId":"-"},"content":""},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/EstablishingRequirements.md\" /\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":"**Include segment**"},{"lineNumber":144,"author":{"gitId":"-"},"content":""},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/EstablishingRequirements.md#preview\" /\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":""},{"lineNumber":147,"author":{"gitId":"-"},"content":"**Boilerplate include**"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/boilerTest.md\" name\u003d\"Boilerplate Referencing\" boilerplate /\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/notInside.md\" name\u003d\"Referencing specified path in boilerplate\" boilerplate\u003d\"folder/inside.md\"/\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"-"},"content":"**Nested include**"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/nestedInclude.md\" /\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":""},{"lineNumber":157,"author":{"gitId":"-"},"content":"**HTML include**"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testInclude.html\" /\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":""},{"lineNumber":161,"author":{"gitId":"-"},"content":"**Include from another MarkBind site**"},{"lineNumber":162,"author":{"gitId":"-"},"content":""},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/index.md\" /\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testReuseSubsite.md\" /\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testReuseSubsite.md#imageTest\" /\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":"**Include nested sub-site directly**"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/nested_sub_site/index.md\" /\u003e"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":"**Include nested sub-site from sub-site**"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":"\u003cbox\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testSubsiteAndNestedSubsiteBaseUrl.md\" /\u003e"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003c/box\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":""},{"lineNumber":179,"author":{"gitId":"-"},"content":"**Include a file using baseUrl**"},{"lineNumber":180,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"{{baseUrl}}/requirements/SpecifyingRequirements.md#preview\" /\u003e"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/requirements/SpecifyingRequirements.md#preview\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":"**Include a file in a sub-folder that uses baseUrl**"},{"lineNumber":184,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"requirements/testBaseUrlInIncludeSrc.md\" /\u003e"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"requirements/testBaseUrlInIncludeSrc.md\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":"**Include a file in a sub-folder that uses baseUrl using baseUrl**"},{"lineNumber":188,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"{{baseUrl}}/requirements/testBaseUrlInIncludeSrc.md\" /\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/requirements/testBaseUrlInIncludeSrc.md\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"**Include a file in a sub-site that uses baseUrl**"},{"lineNumber":192,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testBaseUrlInIncludeSrcSubSite.md\" /\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"sub_site/testBaseUrlInIncludeSrcSubSite.md\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":194,"author":{"gitId":"-"},"content":""},{"lineNumber":195,"author":{"gitId":"-"},"content":"**Include a file in a sub-site that uses baseUrl using baseUrl**"},{"lineNumber":196,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"{{baseUrl}}/sub_site/testBaseUrlInIncludeSrcSubSite.md\" /\u003e"},{"lineNumber":197,"author":{"gitId":"-"},"content":"\u003cpanel src\u003d\"{{baseUrl}}/sub_site/testBaseUrlInIncludeSrcSubSite.md\" header\u003d\"**same test with panels**\" type\u003d\"minimal\" /\u003e"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":"**Trimmed include** "},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":"**\u003cinclude src\u003d\"testTrimInclude.md\" trim inline /\u003e**"},{"lineNumber":202,"author":{"gitId":"-"},"content":""},{"lineNumber":203,"author":{"gitId":"-"},"content":"**Trimmed include fragment**"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":"**Before | \u003cinclude src\u003d\"testTrimIncludeFragment.md#fragment\" trim inline /\u003e | After**"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":"**Include with custom variables**"},{"lineNumber":208,"author":{"gitId":"-"},"content":""},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testIncludeVariables.md\" var-included_variable_as_include_attribute\u003d\"Included variable as include attribute\"\u003e"},{"lineNumber":210,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable\"\u003eIncluded variable\u003c/variable\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_with_markdown\"\u003e__**Included variable with markdown**__\u003c/variable\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_as_attribute\"\u003ecolor: blue\u003c/variable\u003e"},{"lineNumber":213,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_as_html_element\"\u003e\u003cspan\u003eIncluded variable within HTML element\u003c/span\u003e\u003c/variable\u003e"},{"lineNumber":214,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"global_variable_overriding_included_variable\"\u003e**Should not appear**: Included variable overridden by global variable\u003c/variable\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_inner_overridden\"\u003eIncluded variable overriding inner variable\u003c/variable\u003e"},{"lineNumber":216,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_in_outer_included_file\"\u003eIncluded variable in outer included file\u003c/variable\u003e"},{"lineNumber":217,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_should_not_leak\"\u003e**Should not appear**: Included variable should not leak into other files\u003c/variable\u003e"},{"lineNumber":218,"author":{"gitId":"-"},"content":" \u003cvariable name\u003d\"included_variable_with_global_variable\"\u003eIncluded variable with {{ global_variable }}\u003c/variable\u003e"},{"lineNumber":219,"author":{"gitId":"-"},"content":"\u003c/include\u003e"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":"Variables for includes should not be recognised as page variables, hence, there should be no text between **this**"},{"lineNumber":222,"author":{"gitId":"-"},"content":""},{"lineNumber":223,"author":{"gitId":"-"},"content":"{{ included_variable }}"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"and **this**."},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"**Included variables should not leak into other files**"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testIncludeVariableLeak.md\" /\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":""},{"lineNumber":231,"author":{"gitId":"-"},"content":"**Panel with shorthand heading syntax**"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpanel\u003e"},{"lineNumber":234,"author":{"gitId":"-"},"content":" \u003cspan heading\u003e"},{"lineNumber":235,"author":{"gitId":"-"},"content":" Heading"},{"lineNumber":236,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":"**Panel without src**"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel without src header\" expanded\u003e"},{"lineNumber":242,"author":{"gitId":"-"},"content":"\u003cmarkdown\u003e"},{"lineNumber":243,"author":{"gitId":"-"},"content":"**Panel without src content heading**"},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003c/markdown\u003e "},{"lineNumber":245,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":"**Panel with normal src**"},{"lineNumber":248,"author":{"gitId":"-"},"content":""},{"lineNumber":249,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel with normal src header\" src\u003d\"testPanels/PanelNormalSource.md\" expanded\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":"\u003c/panel\u003e "},{"lineNumber":251,"author":{"gitId":"-"},"content":""},{"lineNumber":252,"author":{"gitId":"-"},"content":"**Panel with src from a page segment**"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel with src from a page segment header\" src\u003d\"testPanels/PanelSourceContainsSegment.md#segment\" expanded\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":256,"author":{"gitId":"-"},"content":""},{"lineNumber":257,"author":{"gitId":"-"},"content":"**Panel with boilerplate**"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Boilerplate referencing\" src\u003d\"testPanels/boilerTestPanel.md\" boilerplate expanded\u003e"},{"lineNumber":260,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Boilerplate referencing 2\" src\u003d\"testPanelsDuplicate/boilerTestPanel.md\" boilerplate expanded\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Referencing specified path in boilerplate\" src\u003d\"testPanels/notInside.md\" boilerplate\u003d\"folder/panelBoilerplate.md\" expanded\u003e"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":"**Nested panel**"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Outer nested panel\" src\u003d\"testPanels/NestedPanel.md\" expanded\u003e"},{"lineNumber":271,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":""},{"lineNumber":273,"author":{"gitId":"-"},"content":"**Nested panel without src**"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Outer nested panel without src\" expanded\u003e"},{"lineNumber":276,"author":{"gitId":"-"},"content":""},{"lineNumber":277,"author":{"gitId":"-"},"content":" **Panel content of outer nested panel**"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"## Inner panel header without src\" expanded\u003e"},{"lineNumber":280,"author":{"gitId":"-"},"content":" "},{"lineNumber":281,"author":{"gitId":"-"},"content":" **Panel content of inner nested panel**"},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":284,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":285,"author":{"gitId":"-"},"content":""},{"lineNumber":286,"author":{"gitId":"-"},"content":"**Panel with src from another MarkBind site**"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel with src from another MarkBind site header\" src\u003d\"sub_site/index.md\" expanded\u003e"},{"lineNumber":289,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":290,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Panel with src from another MarkBind site header\" src\u003d\"sub_site/testReuseSubsite.md\" expanded\u003e"},{"lineNumber":291,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":292,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":293,"author":{"gitId":"-"},"content":""},{"lineNumber":294,"author":{"gitId":"-"},"content":"**Modal with panel inside**"},{"lineNumber":295,"author":{"gitId":"-"},"content":""},{"lineNumber":296,"author":{"gitId":"-"},"content":"\u003ctrigger for\u003d\"modal-with-panel\"\u003etrigger\u003c/trigger\u003e"},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":"\u003cmodal header\u003d\"modal title with panel inside\" id\u003d\"modal-with-panel\"\u003e"},{"lineNumber":299,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"## Panel inside modal\" expanded\u003e"},{"lineNumber":300,"author":{"gitId":"-"},"content":" "},{"lineNumber":301,"author":{"gitId":"-"},"content":" **Panel content inside modal**"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":304,"author":{"gitId":"-"},"content":"\u003c/modal\u003e"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":"**Unexpanded panel**"},{"lineNumber":307,"author":{"gitId":"-"},"content":""},{"lineNumber":308,"author":{"gitId":"-"},"content":"\u003cpanel header\u003d\"## Unexpanded panel header\"\u003e"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" **Panel content of unexpanded panel should not appear in search data**"},{"lineNumber":311,"author":{"gitId":"-"},"content":""},{"lineNumber":312,"author":{"gitId":"-"},"content":" \u003cpanel header\u003d\"## Panel header inside unexpanded panel should not appear in search data\" expanded\u003e"},{"lineNumber":313,"author":{"gitId":"-"},"content":" "},{"lineNumber":314,"author":{"gitId":"-"},"content":" **Panel content inside unexpanded panel should not appear in search data**"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" \u003c/panel\u003e"},{"lineNumber":317,"author":{"gitId":"-"},"content":"\u003c/panel\u003e"},{"lineNumber":318,"author":{"gitId":"-"},"content":""},{"lineNumber":319,"author":{"gitId":"-"},"content":"**Test panel closing transitions**"},{"lineNumber":320,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testPanelsClosingTransition.md\" /\u003e"},{"lineNumber":321,"author":{"gitId":"-"},"content":""},{"lineNumber":322,"author":{"gitId":"yiwen101"},"content":"**Test popover has no stray space**"},{"lineNumber":323,"author":{"gitId":"yiwen101"},"content":"(\u003cpopover content\u003d\"content\"\u003eThere should be no stray space before this\u003c/popover\u003e)"},{"lineNumber":324,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":325,"author":{"gitId":"yiwen101"},"content":"**Test tooltip has no stray space**"},{"lineNumber":326,"author":{"gitId":"yiwen101"},"content":"(\u003ctooltip content\u003d\"content\"\u003eThere should be no stray space before this\u003c/tooltip\u003e)"},{"lineNumber":327,"author":{"gitId":"-"},"content":""},{"lineNumber":328,"author":{"gitId":"-"},"content":"**Test search indexing**"},{"lineNumber":329,"author":{"gitId":"-"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":"**Test PlantUML live reload without include**"},{"lineNumber":331,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/activity.puml\" alt\u003d\"activity diagram\" /\u003e"},{"lineNumber":332,"author":{"gitId":"-"},"content":""},{"lineNumber":333,"author":{"gitId":"-"},"content":"**Test PlantUML live reload with include**"},{"lineNumber":334,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"testPlantUML.md\" /\u003e"},{"lineNumber":335,"author":{"gitId":"-"},"content":""},{"lineNumber":336,"author":{"gitId":"-"},"content":"**Test PlantUML in sub folder**"},{"lineNumber":337,"author":{"gitId":"-"},"content":"\u003cinclude src\u003d\"sub_site/testPlantUMLSubFolderInclude.md\" /\u003e"},{"lineNumber":338,"author":{"gitId":"-"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":"## Level 2 header (inside headingSearchIndex) with no-index attribute should not be indexed {.no-index}"},{"lineNumber":340,"author":{"gitId":"-"},"content":""},{"lineNumber":341,"author":{"gitId":"-"},"content":"###### Level 6 header (outside headingSearchIndex) with always-index attribute should be indexed {.always-index}"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"-"},"content":"**Test nunjucks raw tags**"},{"lineNumber":344,"author":{"gitId":"-"},"content":""},{"lineNumber":345,"author":{"gitId":"-"},"content":"{% raw %}"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":"\u003cdiv v-pre\u003e{{ variable interpolation syntax can be used with v-pre }}\u003c/div\u003e"},{"lineNumber":348,"author":{"gitId":"-"},"content":"\u003cdiv v-pre\u003e{{ nonExistentVariable }}\u003c/div\u003e"},{"lineNumber":349,"author":{"gitId":"-"},"content":"\u003ccode\u003e{{ code elements should automatically be assigned v-pre }}\u003c/code\u003e"},{"lineNumber":350,"author":{"gitId":"-"},"content":""},{"lineNumber":351,"author":{"gitId":"-"},"content":"{% endraw %}"}],"authorContributionMap":{"-":342,"yiwen101":9}},{"path":"packages/cli/test/functional/test_site/site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"baseUrl\": \"/test_site\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"faviconPath\": \"favicon.png\","},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"titlePrefix\": \"\","},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"titleSuffix\": \"\","},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"style\": {"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"codeLineNumbers\": true"},{"lineNumber":8,"author":{"gitId":"-"},"content":" },"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \"pages\": ["},{"lineNumber":10,"author":{"gitId":"-"},"content":" {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \"src\": \"index.md\","},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"frontmatter\": {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"frontmatterOverrideProperty\": \"Overridden by frontmatter override\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"globalAndFrontmatterOverrideProperty\": \"Overridden by frontmatter override\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" }"},{"lineNumber":17,"author":{"gitId":"-"},"content":" },"},{"lineNumber":18,"author":{"gitId":"-"},"content":" {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"src\": [\"testEmptyFrontmatter.md\", \"testLayoutsOverride.md\", \"testEmptyAltFrontMatter.md\", \"testLayoutsOverrideWithAltFrontmatter.md\"],"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"layout\": \"testLayout.md\""},{"lineNumber":22,"author":{"gitId":"-"},"content":" },"},{"lineNumber":23,"author":{"gitId":"-"},"content":" {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"src\": [\"testAltFrontMatterInvalidKeyValue.md\", \"testSingleAltFrontMatter.md\"],"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" },"},{"lineNumber":27,"author":{"gitId":"-"},"content":" {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"src\": [\"testAltFrontMatterParsing.md\"]"},{"lineNumber":29,"author":{"gitId":"-"},"content":" },"},{"lineNumber":30,"author":{"gitId":"-"},"content":" {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"src\": \"testExternalScripts.md\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"layout\": \"testLayout.md\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"externalScripts\": ["},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config\u003dTeX-MML-AM_CHTML\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":37,"author":{"gitId":"-"},"content":" },"},{"lineNumber":38,"author":{"gitId":"-"},"content":" {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"src\": [\"testLayouts.md\", \"testLayoutsWithAltFrontMatter.md\"],"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"title\": \"Test nunjucks path resolving\""},{"lineNumber":41,"author":{"gitId":"-"},"content":" },"},{"lineNumber":42,"author":{"gitId":"-"},"content":" {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"src\": ["},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"testNunjucksPathResolving.md\","},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"sub_site/testNunjucksPathResolving.md\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"sub_site/nested_sub_site/testNunjucksPathResolving.md\""},{"lineNumber":47,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" },"},{"lineNumber":50,"author":{"gitId":"-"},"content":" {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"glob\": [\"**/index.md\", \"**/test_md_fragment.md\"]"},{"lineNumber":52,"author":{"gitId":"-"},"content":" },"},{"lineNumber":53,"author":{"gitId":"-"},"content":" {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \"src\": \"testAntiFOUCStyles.md\","},{"lineNumber":55,"author":{"gitId":"-"},"content":" \"title\": \"Hello World\""},{"lineNumber":56,"author":{"gitId":"-"},"content":" },"},{"lineNumber":57,"author":{"gitId":"-"},"content":" {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \"src\": \"testAnchorGeneration.md\","},{"lineNumber":59,"author":{"gitId":"-"},"content":" \"title\": \"Anchor Generation Test\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" },"},{"lineNumber":61,"author":{"gitId":"-"},"content":" {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"src\": \"testAnnotate.md\","},{"lineNumber":63,"author":{"gitId":"-"},"content":" \"title\": \"Annotate Feature Test\""},{"lineNumber":64,"author":{"gitId":"-"},"content":" },"},{"lineNumber":65,"author":{"gitId":"-"},"content":" {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \"src\": \"testTooltipSpacing.md\","},{"lineNumber":67,"author":{"gitId":"-"},"content":" \"title\": \"Tooltip Spacing Test\""},{"lineNumber":68,"author":{"gitId":"-"},"content":" },"},{"lineNumber":69,"author":{"gitId":"-"},"content":" {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" \"src\": \"testThumbnails.md\","},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"title\": \"Thumbnails Test\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" },"},{"lineNumber":73,"author":{"gitId":"-"},"content":" {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \"src\": \"testPlantUML.md\","},{"lineNumber":75,"author":{"gitId":"-"},"content":" \"title\": \"PlantUML Test\""},{"lineNumber":76,"author":{"gitId":"-"},"content":" },"},{"lineNumber":77,"author":{"gitId":"-"},"content":" {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \"src\": \"testCodeBlocks.md\","},{"lineNumber":79,"author":{"gitId":"-"},"content":" \"title\": \"Test: Code Blocks\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" },"},{"lineNumber":81,"author":{"gitId":"-"},"content":" {"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \"src\": \"testIncludePluginsRendered.md\","},{"lineNumber":83,"author":{"gitId":"-"},"content":" \"title\": \"Included files should have plugins rendered on them\""},{"lineNumber":84,"author":{"gitId":"-"},"content":" },"},{"lineNumber":85,"author":{"gitId":"-"},"content":" {"},{"lineNumber":86,"author":{"gitId":"-"},"content":" \"src\": \"testIncludeMultipleModals.md\","},{"lineNumber":87,"author":{"gitId":"-"},"content":" \"title\": \"Multiple inclusions of a modal should be supported\""},{"lineNumber":88,"author":{"gitId":"-"},"content":" },"},{"lineNumber":89,"author":{"gitId":"-"},"content":" {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \"src\": \"testPopovers.md\","},{"lineNumber":91,"author":{"gitId":"-"},"content":" \"title\": \"Test: Popovers\""},{"lineNumber":92,"author":{"gitId":"-"},"content":" },"},{"lineNumber":93,"author":{"gitId":"-"},"content":" {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \"src\": \"testPopoverTrigger.md\","},{"lineNumber":95,"author":{"gitId":"-"},"content":" \"title\": \"Popover initiated by trigger should honor trigger attribute\""},{"lineNumber":96,"author":{"gitId":"-"},"content":" },"},{"lineNumber":97,"author":{"gitId":"-"},"content":" {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" \"src\": \"testModals.md\","},{"lineNumber":99,"author":{"gitId":"-"},"content":" \"title\": \"Test: Modals\""},{"lineNumber":100,"author":{"gitId":"-"},"content":" },"},{"lineNumber":101,"author":{"gitId":"-"},"content":" {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \"src\": \"testDates.md\","},{"lineNumber":103,"author":{"gitId":"-"},"content":" \"title\": \"Nunjucks date filter tests\""},{"lineNumber":104,"author":{"gitId":"-"},"content":" },"},{"lineNumber":105,"author":{"gitId":"-"},"content":" {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \"src\": \"testVariableContainsInclude.md\","},{"lineNumber":107,"author":{"gitId":"-"},"content":" \"title\": \"Variable should be able to store included content fragments\""},{"lineNumber":108,"author":{"gitId":"-"},"content":" },"},{"lineNumber":109,"author":{"gitId":"-"},"content":" {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" \"src\": \"testIncludeBoilerplate.md\","},{"lineNumber":111,"author":{"gitId":"-"},"content":" \"title\": \"Content inside \u003cinclude\u003e should not be processed by markdown\""},{"lineNumber":112,"author":{"gitId":"-"},"content":" },"},{"lineNumber":113,"author":{"gitId":"-"},"content":" {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \"src\": \"testPanels.md\","},{"lineNumber":115,"author":{"gitId":"-"},"content":" \"title\": \"Test: Panels\""},{"lineNumber":116,"author":{"gitId":"-"},"content":" },"},{"lineNumber":117,"author":{"gitId":"-"},"content":" {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" \"src\": \"testPanelMarkdownParsing.md\","},{"lineNumber":119,"author":{"gitId":"-"},"content":" \"title\": \"markdown-it should parse minimized panel as inline element and normal panel as block element\""},{"lineNumber":120,"author":{"gitId":"-"},"content":" },"},{"lineNumber":121,"author":{"gitId":"-"},"content":" {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" \"src\": \"testCenterText.md\","},{"lineNumber":123,"author":{"gitId":"-"},"content":" \"title\": \"Center-aligned text test\""},{"lineNumber":124,"author":{"gitId":"-"},"content":" },"},{"lineNumber":125,"author":{"gitId":"-"},"content":" {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \"src\": \"testHr.md\","},{"lineNumber":127,"author":{"gitId":"-"},"content":" \"title\": \"create different types of horizontal rules\""},{"lineNumber":128,"author":{"gitId":"-"},"content":" },"},{"lineNumber":129,"author":{"gitId":"-"},"content":" {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \"src\": \"testPageNav.md\","},{"lineNumber":131,"author":{"gitId":"-"},"content":" \"title\": \"text interpolation should be skipped appropriately\""},{"lineNumber":132,"author":{"gitId":"-"},"content":" },"},{"lineNumber":133,"author":{"gitId":"-"},"content":" {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" \"src\": \"testPanelsClosingTransition.md\","},{"lineNumber":135,"author":{"gitId":"-"},"content":" \"title\": \"Test: Panels closing transition\""},{"lineNumber":136,"author":{"gitId":"-"},"content":" },"},{"lineNumber":137,"author":{"gitId":"-"},"content":" {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" \"src\": \"testLinks.md\","},{"lineNumber":139,"author":{"gitId":"-"},"content":" \"title\": \"Autolink tests\""},{"lineNumber":140,"author":{"gitId":"-"},"content":" },"},{"lineNumber":141,"author":{"gitId":"-"},"content":" {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" \"src\": \"testTree.md\","},{"lineNumber":143,"author":{"gitId":"-"},"content":" \"title\": \"Tree tests\""},{"lineNumber":144,"author":{"gitId":"-"},"content":" },"},{"lineNumber":145,"author":{"gitId":"-"},"content":" {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" \"src\": \"testMath.md\","},{"lineNumber":147,"author":{"gitId":"-"},"content":" \"title\": \"Math formulae should be displayed correctly, with additional plugin\""},{"lineNumber":148,"author":{"gitId":"-"},"content":" },"},{"lineNumber":149,"author":{"gitId":"-"},"content":" {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" \"src\": \"testImages.md\","},{"lineNumber":151,"author":{"gitId":"-"},"content":" \"title\": \"Rendering of images according to specified dimension and auto-linkify ability\""},{"lineNumber":152,"author":{"gitId":"-"},"content":" },"},{"lineNumber":153,"author":{"gitId":"-"},"content":" {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavTarget.md\","},{"lineNumber":155,"author":{"gitId":"-"},"content":" \"title\": \"Bootstrap scrollspy related classes should be applied only if there are navigable headings\""},{"lineNumber":156,"author":{"gitId":"-"},"content":" },"},{"lineNumber":157,"author":{"gitId":"-"},"content":" {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavWithoutTitleAndNavHeadings.md\","},{"lineNumber":159,"author":{"gitId":"-"},"content":" \"title\": \"page nav separator should be omitted when there is no title and navigation headings added\""},{"lineNumber":160,"author":{"gitId":"-"},"content":" },"},{"lineNumber":161,"author":{"gitId":"-"},"content":" {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavWithOnlyTitle.md\","},{"lineNumber":163,"author":{"gitId":"-"},"content":" \"title\": \"page nav with title added\""},{"lineNumber":164,"author":{"gitId":"-"},"content":" },"},{"lineNumber":165,"author":{"gitId":"-"},"content":" {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" \"src\": \"testPageNavPrint.md\","},{"lineNumber":167,"author":{"gitId":"-"},"content":" \"title\": \"printing page nav\""},{"lineNumber":168,"author":{"gitId":"-"},"content":" },"},{"lineNumber":169,"author":{"gitId":"-"},"content":" {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" \"src\": \"testWeb3FormPlugin.md\","},{"lineNumber":171,"author":{"gitId":"-"},"content":" \"title\": \"web 3 forms\""},{"lineNumber":172,"author":{"gitId":"-"},"content":" },"},{"lineNumber":173,"author":{"gitId":"-"},"content":" {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" \"src\": \"testList.md\","},{"lineNumber":175,"author":{"gitId":"-"},"content":" \"title\": \"web 3 forms\""},{"lineNumber":176,"author":{"gitId":"-"},"content":" },"},{"lineNumber":177,"author":{"gitId":"-"},"content":" {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" \"src\": \"testFontAwesomeInPage.md\","},{"lineNumber":179,"author":{"gitId":"-"},"content":" \"title\": \"font-awesome icon in page, only font-awesome stylesheet should be loaded\""},{"lineNumber":180,"author":{"gitId":"-"},"content":" },"},{"lineNumber":181,"author":{"gitId":"-"},"content":" {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" \"src\": \"testGlyphiconInPage.md\","},{"lineNumber":183,"author":{"gitId":"-"},"content":" \"title\": \"glyphicon icon in page, only glyphicon stylesheet should be loaded\""},{"lineNumber":184,"author":{"gitId":"-"},"content":" },"},{"lineNumber":185,"author":{"gitId":"-"},"content":" {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \"src\": \"testMaterialIconsInPage.md\","},{"lineNumber":187,"author":{"gitId":"-"},"content":" \"title\": \"material-icons icon in page, only material-icons stylesheet should be loaded\""},{"lineNumber":188,"author":{"gitId":"-"},"content":" },"},{"lineNumber":189,"author":{"gitId":"-"},"content":" {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" \"src\": \"testOcticonInPage.md\","},{"lineNumber":191,"author":{"gitId":"-"},"content":" \"title\": \"octicon icon in page, only octicon stylesheet should be loaded\""},{"lineNumber":192,"author":{"gitId":"-"},"content":" },"},{"lineNumber":193,"author":{"gitId":"-"},"content":" {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" \"src\": \"testIconsInSiteLayout.md\","},{"lineNumber":195,"author":{"gitId":"-"},"content":" \"title\": \"glyphicon \u0026 octicon icon in page, only glyphicon \u0026 octicon stylesheets should be loaded\""},{"lineNumber":196,"author":{"gitId":"yiwen101"},"content":" },"},{"lineNumber":197,"author":{"gitId":"yiwen101"},"content":" {"},{"lineNumber":198,"author":{"gitId":"yiwen101"},"content":" \"src\": \"testSourceContainScript.md\","},{"lineNumber":199,"author":{"gitId":"yiwen101"},"content":" \"title\": \"Test: If source contains script or css, when included, the script or css should be included\""},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":202,"author":{"gitId":"-"},"content":" \"pagesExclude\": [\"**/*-fragment.md\"],"},{"lineNumber":203,"author":{"gitId":"-"},"content":" \"ignore\": ["},{"lineNumber":204,"author":{"gitId":"-"},"content":" \"_markbind/layouts/*\","},{"lineNumber":205,"author":{"gitId":"-"},"content":" \"_markbind/logs/*\","},{"lineNumber":206,"author":{"gitId":"-"},"content":" \"_site/*\","},{"lineNumber":207,"author":{"gitId":"-"},"content":" \"site.json\","},{"lineNumber":208,"author":{"gitId":"-"},"content":" \"*.md\","},{"lineNumber":209,"author":{"gitId":"-"},"content":" \"testFileIgnore.sh\","},{"lineNumber":210,"author":{"gitId":"-"},"content":" \"testFileIgnore/*\","},{"lineNumber":211,"author":{"gitId":"-"},"content":" \"expected/*\""},{"lineNumber":212,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":213,"author":{"gitId":"-"},"content":" \"deploy\": {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" \"message\": \"Site Update.\""},{"lineNumber":215,"author":{"gitId":"-"},"content":" },"},{"lineNumber":216,"author":{"gitId":"-"},"content":" \"globalOverride\": {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" \"globalOverrideProperty\": \"Overridden by global override\","},{"lineNumber":218,"author":{"gitId":"-"},"content":" \"globalAndFrontmatterOverrideProperty\": \"Overridden by global override\""},{"lineNumber":219,"author":{"gitId":"-"},"content":" },"},{"lineNumber":220,"author":{"gitId":"-"},"content":" \"headingIndexingLevel\": 4,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" \"plugins\": ["},{"lineNumber":222,"author":{"gitId":"-"},"content":" \"testMarkbindPlugin\","},{"lineNumber":223,"author":{"gitId":"-"},"content":" \"filterTags\","},{"lineNumber":224,"author":{"gitId":"-"},"content":" \"googleAnalytics\","},{"lineNumber":225,"author":{"gitId":"-"},"content":" \"mathDelimiters\","},{"lineNumber":226,"author":{"gitId":"-"},"content":" \"web3Form\""},{"lineNumber":227,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":228,"author":{"gitId":"-"},"content":" \"pluginsContext\": {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" \"testMarkbindPlugin\": {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" \"pre\": \"\\n\\n# Markbind Plugin Pre-render\","},{"lineNumber":231,"author":{"gitId":"-"},"content":" \"post\": \"\u003cp\u003eNode Modules Plugin Post-render\u003c/p\u003e\""},{"lineNumber":232,"author":{"gitId":"-"},"content":" },"},{"lineNumber":233,"author":{"gitId":"-"},"content":" \"filterTags\": {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" \"tags\": ["},{"lineNumber":235,"author":{"gitId":"-"},"content":" \"tag-site-shown\","},{"lineNumber":236,"author":{"gitId":"-"},"content":" \"+tag-site-override-shown\","},{"lineNumber":237,"author":{"gitId":"-"},"content":" \"+tag-site-override-specific-shown\""},{"lineNumber":238,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":239,"author":{"gitId":"-"},"content":" },"},{"lineNumber":240,"author":{"gitId":"-"},"content":" \"googleAnalytics\": {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" \"trackingID\": \"TRACKING-ID\""},{"lineNumber":242,"author":{"gitId":"-"},"content":" },"},{"lineNumber":243,"author":{"gitId":"-"},"content":" \"mathDelimiters\": {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" \"delimiters\": [\"beg_end\"]"},{"lineNumber":245,"author":{"gitId":"-"},"content":" },"},{"lineNumber":246,"author":{"gitId":"-"},"content":" \"web3Form\": {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" \"accessKey\": \"\""},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"-":246,"yiwen101":4}},{"path":"packages/cli/test/functional/test_site/stylesheets/styles.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: auto;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" margin-left: 60px;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":113,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":124,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":135,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":137}},{"path":"packages/cli/test/functional/test_site/testHashFootnotes.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yiwen101"},"content":"\u003cdiv id\u003d\"import\"\u003e"},{"lineNumber":2,"author":{"gitId":"yiwen101"},"content":""},{"lineNumber":3,"author":{"gitId":"yiwen101"},"content":"text^[footnote1], text2^[footnote2]"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"yiwen101":4}},{"path":"packages/cli/test/functional/test_site/testList.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"1. One item"},{"lineNumber":2,"author":{"gitId":"-"},"content":"- Only 1 item "},{"lineNumber":3,"author":{"gitId":"-"},"content":""},{"lineNumber":4,"author":{"gitId":"-"},"content":"1. One item with customization icon"},{"lineNumber":5,"author":{"gitId":"-"},"content":"- Only 1 item { icon\u003d\"glyphicon-education\" }"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"1. One item with once customization"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"- Only 1 item { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. One item with customization text"},{"lineNumber":11,"author":{"gitId":"-"},"content":"- Only 1 item { text\u003d\"Step 1\" }"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"1. One item + nested list"},{"lineNumber":14,"author":{"gitId":"-"},"content":"- Only 1 item"},{"lineNumber":15,"author":{"gitId":"-"},"content":" - Only 1 item"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"1. One item + nested list with icon customization"},{"lineNumber":18,"author":{"gitId":"-"},"content":"- Only 1 item { icon\u003d\"glyphicon-education\" }"},{"lineNumber":19,"author":{"gitId":"-"},"content":" - Only 1 item { icon\u003d\"glyphicon-education\" }"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"1. One item + nested list with once customization"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"- Only 1 item { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" - Only 1 item { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"1. One item + nested list with text customization"},{"lineNumber":26,"author":{"gitId":"-"},"content":"- Only 1 item { text\u003d\"Step 1\" }"},{"lineNumber":27,"author":{"gitId":"-"},"content":" - Only 1 item { text\u003d\"Step 1.1\" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":"1. Basic structure"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Item A"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":32,"author":{"gitId":"-"},"content":" * Sub-item B1 "},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Sub-item B2 "},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Sub-item B3 "},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 "},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * Sub-item B4 "},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":"1. Icon inheritance test"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* Item A { icon\u003d\"glyphicon-education\" }"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Sub-item B2"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * Sub-item B3 "},{"lineNumber":46,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Sub-item B4 "},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":"1. Text inheritance test"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Item A { text\u003d\"First layer\" }"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Item B"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * Sub-item B1 { text\u003d\"Second layer\" }"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Sub-item B2"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { text\u003d\"Third layer\" }"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. First item no customization test"},{"lineNumber":63,"author":{"gitId":"-"},"content":"* Item A "},{"lineNumber":64,"author":{"gitId":"-"},"content":"* Item B { icon\u003d\"./images/deer.jpg\" text\u003d\"First\"}"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Sub-item B1"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * Sub-item B2 { icon\u003d\"fas-file-code\" text\u003d\"Should not be appearing\"}"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" text\u003d\"Should not be appearing\"}"},{"lineNumber":70,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":"1. Correct first item customization test"},{"lineNumber":74,"author":{"gitId":"-"},"content":"* Item A { icon\u003d\"glyphicon-education\" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":"* Item B { icon\u003d\"./images/deer.jpg\" }"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * Sub-item B2 "},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 "},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":"1. Testing with various icon attributes"},{"lineNumber":85,"author":{"gitId":"-"},"content":"* Item A { icon\u003d\"glyphicon-education\" i-size\u003d\"20px\" i-class\u003d\"text-primary\" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":"* Item B { icon\u003d\"./images/deer.jpg\" i-width\u003d\"200px\" i-height\u003d\"100px\" i-class\u003d\"text-warning\" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" text\u003d\"Hi\" i-size\u003d\"30px\" }"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Sub-item B2 { i-class\u003d\"text-success\" i-spacing\u003d\"2rem\" }"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" i-height\u003d\"50px\" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 "},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 { i-class\u003d\"text-danger\" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Sub-item B4 { i-spacing\u003d\"1rem\" }"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"-"},"content":"1. Testing with various text attributes"},{"lineNumber":96,"author":{"gitId":"-"},"content":"* Item A { text\u003d\"Step 1\" t-size\u003d\"20px\" t-class\u003d\"text-primary\" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":"* Item B { text\u003d\"Step 2\" t-class\u003d\"text-warning\" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Sub-item B1 { text\u003d\"\\_MD_\" t-size\u003d\"10px\" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * Sub-item B2 { t-class\u003d\"text-success\" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { text\u003d\":+1:\"}"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 { t-class\u003d\"text-danger\" }"},{"lineNumber":104,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. Mixing text and icon "},{"lineNumber":107,"author":{"gitId":"-"},"content":"* Item A { text\u003d\"Step 1\" icon\u003d\"glyphicon-education\" t-size\u003d\"20px\" t-class\u003d\"text-primary\" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":"* Item B { text\u003d\"Step 2\" t-class\u003d\"text-warning\" }"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Sub-item B1 { text\u003d\"\\_MD_\" icon\u003d\"./images/deer.jpg\" t-size\u003d\"10px\" i-width\u003d\"20px\" i-height\u003d\"20px\"}"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Sub-item B2 { t-class\u003d\"text-success\" i-height\u003d\"30px\" i-width\u003d\"30px\"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":112,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 { text\u003d\":+1:\" icon\u003d\"+1\"}"},{"lineNumber":113,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 { t-class\u003d\"text-danger\" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":"1. Mixing basic and customized lists"},{"lineNumber":118,"author":{"gitId":"-"},"content":"* Item A"},{"lineNumber":119,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":120,"author":{"gitId":"-"},"content":" * Sub-item B1 {icon\u003d\"fas-file-code\" i-size\u003d\"20px\" i-class\u003d\"text-success\"}"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * Sub-item B2 "},{"lineNumber":122,"author":{"gitId":"-"},"content":" * Sub-item B3 "},{"lineNumber":123,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 {icon\u003d\"glyphicon-education\" i-size\u003d\"30px\" i-class\u003d\"text-danger\"}"},{"lineNumber":124,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2 "},{"lineNumber":125,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 {icon\u003d\"./images/deer.jpg\" i-width\u003d\"200px\" i-height\u003d\"100px\" i-class\u003d\"text-warning\"}"},{"lineNumber":126,"author":{"gitId":"-"},"content":" * Sub-item B4 "},{"lineNumber":127,"author":{"gitId":"-"},"content":""},{"lineNumber":128,"author":{"gitId":"-"},"content":"1. Reverse mixing basic and customized lists"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* Item A {icon\u003d\"glyphicon-education\" i-size\u003d\"20px\" i-class\u003d\"text-primary\"}"},{"lineNumber":130,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":131,"author":{"gitId":"-"},"content":" * Sub-item B1 "},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Sub-item B2"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Sub-item B3"},{"lineNumber":134,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.1 "},{"lineNumber":135,"author":{"gitId":"-"},"content":" * Sub-sub-item B3.2"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * Sub-sub-sub-item B3.2.1 "},{"lineNumber":137,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":138,"author":{"gitId":"-"},"content":""},{"lineNumber":139,"author":{"gitId":"-"},"content":"1. Every second list item customized"},{"lineNumber":140,"author":{"gitId":"-"},"content":"* Item A {icon\u003d\"glyphicon-education\" i-size\u003d\"20px\" i-class\u003d\"text-primary\"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":"* Item B "},{"lineNumber":142,"author":{"gitId":"-"},"content":" * Sub-item B1 {icon\u003d\"fas-file-code\" i-size\u003d\"30px\" i-class\u003d\"text-success\"}"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * Sub-item B2 "},{"lineNumber":144,"author":{"gitId":"-"},"content":" * Sub-item B3 {icon\u003d\"./images/deer.jpg\" i-width\u003d\"200px\" i-height\u003d\"100px\" i-class\u003d\"text-warning\"}"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * Sub-item B4"},{"lineNumber":146,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":147,"author":{"gitId":"KevinEyo1"},"content":"1. Once + none + customization"},{"lineNumber":148,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":149,"author":{"gitId":"KevinEyo1"},"content":"* Item B "},{"lineNumber":150,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":151,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":152,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":153,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":154,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":155,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":156,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"fas-file-code\" }"},{"lineNumber":157,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":158,"author":{"gitId":"KevinEyo1"},"content":"1. Customization + none + once"},{"lineNumber":159,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"fas-file-code\" }"},{"lineNumber":160,"author":{"gitId":"KevinEyo1"},"content":"* Item B"},{"lineNumber":161,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1 { icon\u003d\"fas-file-code\" }"},{"lineNumber":162,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":163,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":164,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":165,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":166,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":167,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":168,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":169,"author":{"gitId":"KevinEyo1"},"content":"1. Customization + once + none"},{"lineNumber":170,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"fas-file-code\" }"},{"lineNumber":171,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":172,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":173,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":174,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":175,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":176,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":177,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":178,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":179,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":180,"author":{"gitId":"KevinEyo1"},"content":"1. Once + customization + none"},{"lineNumber":181,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":182,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"fas-file-code\" }"},{"lineNumber":183,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":184,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":185,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":186,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":187,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":188,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":189,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":190,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":191,"author":{"gitId":"KevinEyo1"},"content":"1. None + customization + once"},{"lineNumber":192,"author":{"gitId":"KevinEyo1"},"content":"* Item A "},{"lineNumber":193,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"fas-file-code\" }"},{"lineNumber":194,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":195,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":196,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":197,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":198,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":199,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":200,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":201,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":202,"author":{"gitId":"KevinEyo1"},"content":"1. None + once + customization"},{"lineNumber":203,"author":{"gitId":"KevinEyo1"},"content":"* Item A "},{"lineNumber":204,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":205,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":206,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":207,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":208,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":209,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":210,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":211,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"fas-file-code\" }"},{"lineNumber":212,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":213,"author":{"gitId":"KevinEyo1"},"content":"1. Customization + once + customization"},{"lineNumber":214,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"fas-file-code\" }"},{"lineNumber":215,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":216,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":217,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":218,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":219,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":220,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":221,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":222,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":223,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":224,"author":{"gitId":"KevinEyo1"},"content":"1. String once"},{"lineNumber":225,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" once\u003d\"true\" }"},{"lineNumber":226,"author":{"gitId":"KevinEyo1"},"content":"* Item B "},{"lineNumber":227,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":228,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":229,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":230,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":231,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":232,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":233,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":234,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":235,"author":{"gitId":"KevinEyo1"},"content":"1. False once for item A, rest of items will inherit"},{"lineNumber":236,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" once\u003dfalse }"},{"lineNumber":237,"author":{"gitId":"KevinEyo1"},"content":"* Item B "},{"lineNumber":238,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":239,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":240,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":241,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":242,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":243,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":244,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":245,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":246,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":247,"author":{"gitId":"KevinEyo1"},"content":"1. False once for item B, will overwrite item A"},{"lineNumber":248,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"fas-file-code\" }"},{"lineNumber":249,"author":{"gitId":"KevinEyo1"},"content":"* Item B { icon\u003d\"glyphicon-education\" once\u003dfalse }"},{"lineNumber":250,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":251,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":252,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 "},{"lineNumber":253,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":254,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":255,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":256,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":257,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":258,"author":{"gitId":"KevinEyo1"},"content":"1. Once for specific attributes besides icon, does not overwrite"},{"lineNumber":259,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" i-size\u003d\"70px\" i-class\u003d\"text-primary\" }"},{"lineNumber":260,"author":{"gitId":"KevinEyo1"},"content":"* Item B { i-size\u003d\"40px\" once\u003dtrue }"},{"lineNumber":261,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":262,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":263,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":264,"author":{"gitId":"KevinEyo1"},"content":"1. False once for specific attributes besides icon, does overwrite"},{"lineNumber":265,"author":{"gitId":"KevinEyo1"},"content":"* Item A { icon\u003d\"glyphicon-education\" i-size\u003d\"70px\" i-class\u003d\"text-primary\" }"},{"lineNumber":266,"author":{"gitId":"KevinEyo1"},"content":"* Item B { i-size\u003d\"40px\" once\u003dfalse }"},{"lineNumber":267,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1"},{"lineNumber":268,"author":{"gitId":"KevinEyo1"},"content":"* Item C"},{"lineNumber":269,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":270,"author":{"gitId":"KevinEyo1"},"content":"1. Sub-level"},{"lineNumber":271,"author":{"gitId":"KevinEyo1"},"content":"* Item A "},{"lineNumber":272,"author":{"gitId":"KevinEyo1"},"content":"* Item B "},{"lineNumber":273,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B1 { icon\u003d\"glyphicon-education\" once\u003dtrue }"},{"lineNumber":274,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B2"},{"lineNumber":275,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B3 { icon\u003d\"fas-file-code\" }"},{"lineNumber":276,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.1 { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"},{"lineNumber":277,"author":{"gitId":"KevinEyo1"},"content":" * Sub-sub-item B3.2"},{"lineNumber":278,"author":{"gitId":"KevinEyo1"},"content":" * Sub-item B4 "},{"lineNumber":279,"author":{"gitId":"KevinEyo1"},"content":"* Item C { icon\u003d\"./images/deer.jpg\" i-width\u003d\"50px\" }"}],"authorContributionMap":{"KevinEyo1":141,"-":138}},{"path":"packages/cli/test/functional/test_site/testPanels/PanelSourceContainsScript.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yiwen101"},"content":"\u003ch1\u003e"},{"lineNumber":2,"author":{"gitId":"yiwen101"},"content":"\u003cscript\u003e"},{"lineNumber":3,"author":{"gitId":"yiwen101"},"content":" // JavaScript code specific to this component"},{"lineNumber":4,"author":{"gitId":"yiwen101"},"content":" console.log(\"Inline script executed! 35\");"},{"lineNumber":5,"author":{"gitId":"yiwen101"},"content":"\u003c/script\u003e"},{"lineNumber":6,"author":{"gitId":"yiwen101"},"content":"\u003cstyle\u003e"},{"lineNumber":7,"author":{"gitId":"yiwen101"},"content":" /* CSS styles specific to this component */"},{"lineNumber":8,"author":{"gitId":"yiwen101"},"content":" h1 {"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":" color: red;"},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":" }"},{"lineNumber":11,"author":{"gitId":"yiwen101"},"content":"\u003c/style\u003e"},{"lineNumber":12,"author":{"gitId":"yiwen101"},"content":"h1 text"},{"lineNumber":13,"author":{"gitId":"yiwen101"},"content":"\u003c/h1\u003e"}],"authorContributionMap":{"yiwen101":13}},{"path":"packages/cli/test/functional/test_site/testSourceContainScript.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"yiwen101"},"content":"\u003cpanel header\u003d\"## Panel with src that contains css and script header\" src\u003d\"testPanels/PanelSourceContainsScript.md\" expanded\u003e\u003c/panel\u003e"}],"authorContributionMap":{"yiwen101":1}},{"path":"packages/cli/test/functional/test_site_algolia_plugin/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/404.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027),_m(0),_v(\" \"),_m(1),_c(\u0027p\u0027)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027p\u0027,{staticStyle:{\"font-size\":\"10rem\"}},[_v(\"404\")])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027p\u0027,{staticStyle:{\"font-size\":\"1.5rem\"}},[_v(\"File not found\"),_c(\u0027br\u0027),_v(\"Click \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/\"}},[_v(\"here\")]),_v(\" to go back to the home page.\")])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/Home.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the test-deploy wiki!\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/Page-1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"page-1\"}},[_v(\"Page 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#page-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/_Footer.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Custom footer.\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/_Sidebar.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"[[Page-1]]\")])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/about.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"about\"}},[_v(\"About\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#about\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Welcome to your \"),_c(\u0027strong\u0027,[_v(\"About Us\")]),_v(\" page.\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/contents/topic1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(0),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"topic-1\"}},[_v(\"Topic 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#topic-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027blockquote\u0027,[_c(\u0027p\u0027,[_v(\"More content to be added\")])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/contents/topic2.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/contents/topic3a.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/contents/topic3b.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/index.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Home]]\")]),_v(\" \"),_c(\u0027li\u0027,{staticClass:\"site-nav-custom-list-item site-nav-list-item-0\"},[_v(\"[[Page-1]]\")])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the test-deploy wiki!\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_c(\u0027footer\u0027,[_v(\"\\nCustom footer.\\n\")])])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [];"},{"lineNumber":7,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":6}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/expected/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" margin-left: 60px;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":113,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":124,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":135,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":137}},{"path":"packages/cli/test/functional/test_site_convert/test_basic_convert/non_markbind_site/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" margin-left: 60px;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":113,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":124,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" footer {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}"},{"lineNumber":133,"author":{"gitId":"-"},"content":""},{"lineNumber":134,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":135,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":137}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/404.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027),_m(0),_v(\" \"),_m(1),_c(\u0027p\u0027)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027p\u0027,{staticStyle:{\"font-size\":\"10rem\"}},[_v(\"404\")])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027p\u0027,{staticStyle:{\"font-size\":\"1.5rem\"}},[_v(\"File not found\"),_c(\u0027br\u0027),_v(\"Click \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/\"}},[_v(\"here\")]),_v(\" to go back to the home page.\")])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":15}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/Home.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the test-deploy wiki!\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(0)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/Page-1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"page-1\"}},[_v(\"Page 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#page-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/README.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0),_v(\" \"),_c(\u0027p\u0027,[_v(\"Test readme file\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"readme\"}},[_v(\"Readme\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#readme\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/about.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"about\"}},[_v(\"About\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#about\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Welcome to your \"),_c(\u0027strong\u0027,[_v(\"About Us\")]),_v(\" page.\")])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":15}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/contents/topic1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(0),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"topic-1\"}},[_v(\"Topic 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#topic-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027blockquote\u0027,[_c(\u0027p\u0027,[_v(\"More content to be added\")])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"-"},"content":") {"},{"lineNumber":14,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":15}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/contents/topic2.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(0)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/contents/topic3a.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(0)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/contents/topic3b.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027box\u0027,[_c(\u0027span\u0027,{staticClass:\"fas fa-tools\"}),_c(\u0027span\u0027,[_v(\" This is a placeholder page\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(0)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":10,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":9}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/index.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0),_v(\" \"),_c(\u0027p\u0027,[_v(\"Test readme file\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"readme\"}},[_v(\"Readme\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#readme\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/test_folder/extra_1.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"sample-content-in-another-folder-which-is-not-named-content\"}},[_v(\"Sample content in another folder which is not named content\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#sample-content-in-another-folder-which-is-not-named-content\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/test_folder/extra_2.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"sample-content-in-another-folder-which-is-not-named-content\"}},[_v(\"Sample content in another folder which is not named content\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#sample-content-in-another-folder-which-is-not-named-content\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/expected/test_folder/extra_3.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":""},{"lineNumber":2,"author":{"gitId":"-"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"-"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"placement\":\"top\",\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_c(\u0027i\u0027,{staticClass:\"fa-solid fa-house\"})])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html\"}},[_v(\"HOME\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/about.html\"}},[_v(\"ABOUT\")])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"site-nav-top\"},[_c(\u0027div\u0027,{staticClass:\"fw-bold mb-2\",staticStyle:{\"font-size\":\"1.25rem\"}},[_v(\"Contents\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/404.html\"}},[_v(\"404\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Home.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/Page-1.html\"}},[_v(\"Page 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/README.html\"}},[_v(\"README\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic1.html\"}},[_v(\"Topic 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic2.html\"}},[_v(\"Topic 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3a.html\"}},[_v(\"Topic 3 A\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/topic3b.html\"}},[_v(\"Topic 3 B\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Index\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_1.html\"}},[_v(\"Extra 1\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_2.html\"}},[_v(\"Extra 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/test_folder/extra_3.html\"}},[_v(\"Extra 3\")])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027breadcrumb\u0027),_v(\" \"),_m(0)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"-"},"content":"};"},{"lineNumber":6,"author":{"gitId":"-"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"-"},"content":") {"},{"lineNumber":8,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"sample-content-in-another-folder-which-is-not-named-content\"}},[_v(\"Sample content in another folder which is not named content\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#sample-content-in-another-folder-which-is-not-named-content\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"-"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"-"},"content":") {"},{"lineNumber":11,"author":{"gitId":"-"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"-"},"content":" "}],"authorContributionMap":{"jingting1412":1,"-":12}},{"path":"packages/cli/test/functional/test_site_convert/test_navigation_convert/non_markbind_site/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"packages/cli/test/functional/test_site_special_tags/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_templates/test_default/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_templates/test_default/expected/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"packages/cli/test/functional/test_site_templates/test_minimal/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/404.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" title: Page not found"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" layout: 404.md"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"-\u003e\u003cp style\u003d\"font-size: 10rem\"\u003e404\u003c/p\u003e\u003c-"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"-\u003e\u003cp style\u003d\"font-size: 1.5rem\"\u003eFile not found\u003cbr\u003eClick \u003ca href\u003d\"/\"\u003ehere\u003c/a\u003e to go back to the home page.\u003c/p\u003e\u003c-"}],"authorContributionMap":{"jingting1412":7}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/_markbind/layouts/404.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cdiv\u003e{{ content }}\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":1}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/_markbind/layouts/default.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003chead-bottom\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003c/head-bottom\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003cheader sticky\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cnavbar type\u003d\"dark\"\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eYour Name\u003c/a\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#skills\" class\u003d\"nav-link\"\u003eSkills\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#experience\" class\u003d\"nav-link\"\u003eExperience\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003cdropdown header\u003d\"Projects\" class\u003d\"nav-link\"\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#project-1\" class\u003d\"dropdown-item\"\u003eProject 1\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#project-2\" class\u003d\"dropdown-item\"\u003eProject 2\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#other-projects\" class\u003d\"dropdown-item\"\u003eOther projects\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003c/dropdown\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003c/form\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003c/li\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003c/navbar\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":"\u003c/header\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" {{ content }}"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":"\u003cfooter\u003e"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"text-center\"\u003e"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" \u003csmall\u003e[Generated by {{MarkBind}}]\u003c/small\u003e"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":"\u003c/footer\u003e"}],"authorContributionMap":{"jingting1412":35}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/_markbind/variables.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"name\"\u003e[NAME]\u003c/variable\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"javascript\"\u003e\u003cthumbnail src\u003d\u0027../contents/assets/JavaScript.svg\u0027 size\u003d\"50\"/\u003e\u003c/variable\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"typescript\"\u003e\u003cthumbnail src\u003d\u0027../contents/assets/Typescript.svg\u0027 size\u003d\"50\"/\u003e\u003c/variable\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"vue\"\u003e\u003cthumbnail src\u003d\u0027../contents/assets/Vue.svg\u0027 size\u003d\"50\"/\u003e\u003c/variable\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"java\"\u003e\u003cthumbnail src\u003d\"../contents/assets/java-icon.svg\" size\u003d\"50\"/\u003e\u003c/variable\u003e"}],"authorContributionMap":{"jingting1412":5}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/contents/experience.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"# Experience"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cul class\u003d\"nav nav-tabs\" role\u003d\"tablist\"\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" \u003cli class\u003d\"nav-item\" role\u003d\"presentation\"\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" \u003ca class\u003d\"nav-link active\" data-bs-toggle\u003d\"tab\" href\u003d\"#NUS\" aria-selected\u003d\"false\" role\u003d\"tab\" tabindex\u003d\"-1\"\u003eNUS\u003c/a\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003c/li\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003cli class\u003d\"nav-item\" role\u003d\"presentation\"\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003ca class\u003d\"nav-link\" data-bs-toggle\u003d\"tab\" href\u003d\"#another-company\" aria-selected\u003d\"true\" role\u003d\"tab\"\u003eAnother Company\u003c/a\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003c/li\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":"\u003c/ul\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"\u003cdiv id\u003d\"myTabContent\" class\u003d\"tab-content\" style\u003d\"margin-top:15px;\"\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"tab-pane fade active show\" id\u003d\"NUS\" role\u003d\"tabpanel\"\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003ch4\u003eSoftware Engineering Intern @ \u003cmd\u003e[NUS](https://nus.edu.sg/)\u003c/md\u003e\u003c/h4\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003ch6\u003eMay 2024 - Aug 2024\u003c/h6\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003cp\u003eSome description of your role in the company and the technologies you\u0027ve used.\u003c/p\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"tab-pane fade\" id\u003d\"another-company\" role\u003d\"tabpanel\"\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003ch4\u003eAnother role @ \u003cmd\u003e[Another company](https://markbind.org/)\u003c/md\u003e\u003c/h4\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003ch6\u003eMay 2022 - Aug 2022\u003c/h6\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003cp\u003eSome description of your role in the company and the technologies you\u0027ve used.\u003c/p\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" {{ javascript }}"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":24}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/contents/project1.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"card mb-3\"\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \u003ch3 class\u003d\"card-header\" id\u003d\"project-1\"\u003eExample project: iP for CS2103\u003c/h3\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" \u003cmd\u003eThis would be a good place to add images and embeds showcasing your contributions to a project. In this case, an `\u003ciframe\u003e` containing the [RepoSense](https://reposense.org/index.html) report of a student\u0027s contributions to their iP is embedded. For more information on embeds, refer to our user guide [here.](https://markbind.org/userGuide/formattingContents.html#embeds)\u003c/md\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cdiv\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003ciframe src\u003d\"https://nus-cs3281.github.io/2024-dashboard/#/widget/?search\u003dReposense\u0026sort\u003dgroupTitle\u0026sortWithin\u003dtitle\u0026timeframe\u003dcommit\u0026mergegroup\u003d\u0026groupSelect\u003dgroupByAuthors\u0026breakdown\u003dfalse\u0026since\u003d2023-12-01\u0026tabOpen\u003dtrue\u0026tabType\u003dauthorship\u0026tabAuthor\u003dasdfghjkxd\u0026tabRepo\u003dreposense%2Freposense%5Bmaster%5D\u0026authorshipIsMergeGroup\u003dfalse\u0026authorshipFileTypes\u003djava~md\u0026authorshipIsBinaryFileTypeChecked\u003dfalse\u0026authorshipIsIgnoredFilesChecked\u003dfalse\u0026chartGroupIndex\u003d5\u0026chartIndex\u003d0\" width\u003d\"100%\"\u003e\u003c/iframe\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration of the project can be added here\u003c/p\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" {{ java }}"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":17}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/contents/project2.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"card mb-3\"\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \u003ch3 class\u003d\"card-header\" id\u003d\"project-2\"\u003eProject 2\u003c/h3\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" This is another project. "},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" alt\u003d\"markbind-logo\" width\u003d\"90%\" height\u003d\"200\"\u003e\u003c/pic\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration on the project.\u003c/p\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" {{javascript}}"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":16}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/contents/projects.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"# Projects"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"project1.md\"/\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"project2.md\"/\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"### Other projects"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"row row-cols-1 row-cols-md-3 g-3\"\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col\"\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card\"\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003ch4 class\u003d\"card-header\"\u003eProject title\u003c/h4\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" This is another project. "},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" alt\u003d\"markbind-logo\" width\u003d\"90%\" height\u003d\"200\"\u003e\u003c/pic\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration on the project.\u003c/p\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" {{javascript}}"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col\"\u003e"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card\"\u003e"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" \u003ch4 class\u003d\"card-header\"\u003eProject title\u003c/h4\u003e"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" This is another project. "},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" alt\u003d\"markbind-logo\" width\u003d\"90%\" height\u003d\"200\"\u003e\u003c/pic\u003e"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration on the project.\u003c/p\u003e"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":" {{ java }}"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col\"\u003e"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card\"\u003e"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" \u003ch4 class\u003d\"card-header\"\u003eProject title\u003c/h4\u003e"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" This is another project. "},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" alt\u003d\"markbind-logo\" width\u003d\"90%\" height\u003d\"200\"\u003e\u003c/pic\u003e"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration on the project.\u003c/p\u003e"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":61}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/contents/skills.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"# Skills"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cp\u003eThis is where you can give a quick overview of the technologies and frameworks you know using our \u003ca href\u003d\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#thumbnails\" target\u003d\"_blank\"\u003ethumbnail feature\u003c/a\u003e or our \u003ca href\u003d\"https://markbind.org/userGuide/formattingContents.html#icons\" target\u003d\"_blank\"\u003eicons\u003c/a\u003e.\u003c/p\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003cpanel header\u003d\"Example using thumbnails\" expanded\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cbox type\u003d\"info\"\u003eThese thumbnails are available as variables to use anywhere in this page!\u003c/box\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" {{ javascript }}"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" {{ typescript }}"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" {{ java }}"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"\u003c/panel\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":"\u003cbr/\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":"\u003cpanel header\u003d\"Example using icons\" expanded\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" Some icons are not available in the libraries that MarkBind supports! Please ensure that "},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" the desired icons are available before choosing this option. For more information regarding"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" icons, please refer to \u003ca href\u003d\"https://markbind.org/userGuide/formattingContents.html#icons\" target\u003d\"_blank\"\u003ethis section of our User Guide.\u003c/a\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003c/box\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-square-js fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-vuejs fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-java fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":"\u003c/panel\u003e"}],"authorContributionMap":{"jingting1412":22}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/index.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" title: Portfolio"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" layout: default.md"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"\u003cbr\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"bg-light text-black px-2 py-5 mb-4\"\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"container\"\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003ch1 class\u003d\"display-5 no-index\"\u003e\u003cmd\u003e:wave:\u003c/md\u003e Hello!\u003cbr\u003eI\u0027m {{ name }}\u003c/h1\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"lead\"\u003eWelcome to my portfolio!\u003c/p\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cdiv style\u003d\"margin-bottom:20px;\"\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003cspan style\u003d\"margin-right:10px;\"\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"icon\"\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-github fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003c/a\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003c/span\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003cspan style\u003d\"margin-right:10px;\"\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://www.linkedin.com/school/national-university-of-singapore/\" target\u003d\"_blank\" class\u003d\"icon\"\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-linkedin fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003c/a\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" \u003c/span\u003e"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \u003cspan style\u003d\"margin-right:10px;\"\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"mailto:secretary_cs@comp.nus.edu.sg\" target\u003d\"_blank\" class\u003d\"icon\"\u003e"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-solid fa-envelope fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":" \u003c/a\u003e"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" \u003c/span\u003e"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" \u003ca class\u003d\"btn btn-primary\" href\u003d\"./contents/assets/UG-template-resume.pdf\" target\u003d\"_blank\" rel\u003d\"noopener noreferrer\"\u003eResume\u003c/a\u003e"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" Want to change the theme? Explore more themes and other components offered by MarkBind in our \u003ca href\u003d\"https://markbind.org/userGuide/authoringContents.html\" target\u003d\"_blank\"\u003euser guide here\u003c/a\u003e."},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":"\u003c/box\u003e"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":"\u003cbox type\u003d\"info\" header\u003d\"##### Deploying this site\"\u003e"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" \u003cmd\u003eMarkBind makes it easy to deploy this site to GitHub Pages using the `markbind deploy` command. To allow `http://[username].github.io` to go straight to this portfolio, it is best to set your repository name as `[username].github.io` Read more about [deploying the site here](https://markbind.org/userGuide/deployingTheSite.html#deploying-to-github-pages)\u003c/md\u003e"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":"\u003c/box\u003e"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":"## About me"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"container text-left\"\u003e"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"row\" \u003e"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col-md-3 col-md-push-9\"\u003e"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" \u003cimg src\u003d\u0027./contents/assets/default_profile_pic.png\u0027 class\u003d\"img-fluid\" alt\u003d\u0027default-profile-pic\u0027/\u003e"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col-md-9 col-md-pull-3\"\u003e"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":" This is where you can add a picture of yourself and a brief introduction. This can be a good place to use \u003ctooltip content\u003d\"Add more information here\" placement\u003d\"top\"\u003etooltips\u003c/tooltip\u003e, or \u003cmd\u003e[add relevant links](https://markbind.org/userGuide/formattingContents.html#links).\u003c/md\u003e"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"contents/skills.md\"/\u003e"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":62,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"contents/experience.md\"/\u003e"},{"lineNumber":63,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":64,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":65,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":66,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"contents/projects.md\"/\u003e"},{"lineNumber":67,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":68,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":69,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":70,"author":{"gitId":"jingting1412"},"content":""}],"authorContributionMap":{"jingting1412":70}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/index.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"Your Name\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html#skills\"}},[_v(\"Skills\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"/index.html#experience\"}},[_v(\"Experience\")])]),_v(\" \"),_c(\u0027dropdown\u0027,{staticClass:\"nav-link\",scopedSlots:_u([{key:\"header\",fn:function(){return [_v(\"Projects\")]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"dropdown-item\",attrs:{\"href\":\"/index.html#project-1\"}},[_v(\"Project 1\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"dropdown-item\",attrs:{\"href\":\"/index.html#project-2\"}},[_v(\"Project 2\")])])])],1)],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027br\u0027),_v(\" \"),_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\n Want to change the theme? Explore more themes and other components offered by MarkBind in our \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/authoringContents.html\",\"target\":\"_blank\"}},[_v(\"user guide here\")])]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027h5\u0027,{attrs:{\"id\":\"deploying-this-site\"}},[_v(\"Deploying this site\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#deploying-this-site\",\"onclick\":\"event.stopPropagation()\"}})])]},proxy:true}])},[_v(\" \"),_c(\u0027span\u0027,[_v(\"MarkBind makes it easy to deploy this site to Github Pages using the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"markbind deploy\")]),_v(\" command. To allow \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"http://[username].github.io\")]),_v(\" to go straight to this portfolio, it is best to set your repository name as \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"[username].github.io\")]),_v(\" Read more about \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/deployingTheSite.html#deploying-to-github-pages\"}},[_v(\"deploying the site here\")])])]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_m(1),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"container text-left\"},[_c(\u0027div\u0027,{staticClass:\"row\"},[_m(2),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"col-md-9 col-md-pull-3\"},[_v(\"\\n This is where you can add a picture of yourself and a brief introduction. This can be a good place to use \"),_c(\u0027tooltip\u0027,{attrs:{\"placement\":\"top\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"Add more information here\")]},proxy:true}])},[_v(\"tooltips\")]),_v(\", or \"),_m(3)],1)])]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_c(\u0027div\u0027,[_m(4),_v(\" \"),_m(5),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Example using thumbnails\")])]},proxy:true}])},[_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_v(\"These thumbnails are available as variables to use anywhere in this page!\")]),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/JavaScript.svg\",\"size\":\"50\"}}),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/Typescript.svg\",\"size\":\"50\"}}),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/Vue.svg\",\"size\":\"50\"}}),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/java-icon.svg\",\"size\":\"50\"}})],1),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"expanded\":\"\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Example using icons\")])]},proxy:true}])},[_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"warning\"}},[_v(\"\\n Some icons are not available in the libraries MarkBind supports! Please ensure that \\n the desired icons are available before choosing this option. For more information regarding\\n icons, please refer to \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/formattingContents.html#icons\",\"target\":\"_blank\"}},[_v(\"this section of our User Guide\")])]),_v(\" \"),_c(\u0027i\u0027,{staticClass:\"fa-brands fa-square-js fa-2xl\"}),_v(\" \"),_c(\u0027i\u0027,{staticClass:\"fa-brands fa-vuejs fa-2xl\"}),_v(\" \"),_c(\u0027i\u0027,{staticClass:\"fa-brands fa-java fa-2xl\"})],1)],1),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_c(\u0027div\u0027,[_m(6),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"seamless\",\"no-close\":\"\",\"minimized\":\"\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Software Engineering Intern @ \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://nus.edu.sg/\"}},[_v(\"NUS\")])]),_v(\" | May 2024 - Aug 2024\")])])]},proxy:true}])},[_v(\" \"),_c(\u0027div\u0027,{staticClass:\"container\"},[_v(\"\\n Role description\\n \")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"container\"},[_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/Vue.svg\",\"size\":\"50\"}})],1)]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027panel\u0027,{attrs:{\"type\":\"seamless\",\"no-close\":\"\",\"minimized\":\"\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027div\u0027,[_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Another experience @ \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"Another Company\")])]),_v(\" | May 2022 - Aug 2022\")])])]},proxy:true}])},[_v(\" \"),_c(\u0027div\u0027,{staticClass:\"container\"},[_v(\"\\n Role description\\n \")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"container\"},[_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/JavaScript.svg\",\"size\":\"50\"}})],1)])],1),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_c(\u0027div\u0027,[_m(7),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027div\u0027,{staticClass:\"card mb-3\"},[_m(8),_v(\" \"),_m(9),_v(\" \"),_m(10),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027p\u0027,{staticClass:\"card-text\"},[_v(\"Some further elaboration of the project can be added here\")]),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/java-icon.svg\",\"size\":\"50\"}})],1),_v(\" \"),_m(11)])]),_v(\" \"),_c(\u0027div\u0027,[_c(\u0027div\u0027,{staticClass:\"card mb-3\"},[_m(12),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"card-body\"},[_v(\"\\n This is another project. \\n \")]),_v(\" \"),_c(\u0027svg\u0027,{staticClass:\"d-block user-select-none\",staticStyle:{\"font-size\":\"1.125rem\",\"text-anchor\":\"middle\"},attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"100%\",\"height\":\"200\",\"aria-label\":\"Placeholder: Image cap\",\"focusable\":\"false\",\"role\":\"img\",\"preserveAspectRatio\":\"xMidYMid slice\",\"viewBox\":\"0 0 318 180\"}},[_c(\u0027rect\u0027,{attrs:{\"width\":\"100%\",\"height\":\"100%\",\"fill\":\"#868e96\"}}),_c(\u0027text\u0027,{attrs:{\"x\":\"50%\",\"y\":\"50%\",\"fill\":\"#dee2e6\",\"dy\":\".3em\"}},[_v(\"Image cap\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027p\u0027,{staticClass:\"card-text\"},[_v(\"Some further elaboration on the project.\")]),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/JavaScript.svg\",\"size\":\"50\"}}),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/Vue.svg\",\"size\":\"50\"}})],1),_v(\" \"),_m(13)])]),_v(\" \"),_m(14),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"row row-cols-1 row-cols-md-3 g-3\"},[_c(\u0027div\u0027,{staticClass:\"col\"},[_c(\u0027div\u0027,{staticClass:\"card\"},[_m(15),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"card-body\"},[_v(\"\\n This is another project. \\n \")]),_v(\" \"),_c(\u0027svg\u0027,{staticClass:\"d-block user-select-none\",staticStyle:{\"font-size\":\"1.125rem\",\"text-anchor\":\"middle\"},attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"100%\",\"height\":\"200\",\"aria-label\":\"Placeholder: Image cap\",\"focusable\":\"false\",\"role\":\"img\",\"preserveAspectRatio\":\"xMidYMid slice\",\"viewBox\":\"0 0 318 180\"}},[_c(\u0027rect\u0027,{attrs:{\"width\":\"100%\",\"height\":\"100%\",\"fill\":\"#868e96\"}}),_c(\u0027text\u0027,{attrs:{\"x\":\"50%\",\"y\":\"50%\",\"fill\":\"#dee2e6\",\"dy\":\".3em\"}},[_v(\"Image cap\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027p\u0027,{staticClass:\"card-text\"},[_v(\"Some further elaboration on the project.\")]),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/JavaScript.svg\",\"size\":\"50\"}}),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/Vue.svg\",\"size\":\"50\"}})],1),_v(\" \"),_m(16)])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"col\"},[_c(\u0027div\u0027,{staticClass:\"card\"},[_m(17),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"card-body\"},[_v(\"\\n This is another project. \\n \")]),_v(\" \"),_c(\u0027svg\u0027,{staticClass:\"d-block user-select-none\",staticStyle:{\"font-size\":\"1.125rem\",\"text-anchor\":\"middle\"},attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"100%\",\"height\":\"200\",\"aria-label\":\"Placeholder: Image cap\",\"focusable\":\"false\",\"role\":\"img\",\"preserveAspectRatio\":\"xMidYMid slice\",\"viewBox\":\"0 0 318 180\"}},[_c(\u0027rect\u0027,{attrs:{\"width\":\"100%\",\"height\":\"100%\",\"fill\":\"#868e96\"}}),_c(\u0027text\u0027,{attrs:{\"x\":\"50%\",\"y\":\"50%\",\"fill\":\"#dee2e6\",\"dy\":\".3em\"}},[_v(\"Image cap\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027p\u0027,{staticClass:\"card-text\"},[_v(\"Some further elaboration on the project.\")]),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/java-icon.svg\",\"size\":\"50\"}})],1),_v(\" \"),_m(18)])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"col\"},[_c(\u0027div\u0027,{staticClass:\"card\"},[_m(19),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"card-body\"},[_v(\"\\n This is another project. \\n \")]),_v(\" \"),_c(\u0027svg\u0027,{staticClass:\"d-block user-select-none\",staticStyle:{\"font-size\":\"1.125rem\",\"text-anchor\":\"middle\"},attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"100%\",\"height\":\"200\",\"aria-label\":\"Placeholder: Image cap\",\"focusable\":\"false\",\"role\":\"img\",\"preserveAspectRatio\":\"xMidYMid slice\",\"viewBox\":\"0 0 318 180\"}},[_c(\u0027rect\u0027,{attrs:{\"width\":\"100%\",\"height\":\"100%\",\"fill\":\"#868e96\"}}),_c(\u0027text\u0027,{attrs:{\"x\":\"50%\",\"y\":\"50%\",\"fill\":\"#dee2e6\",\"dy\":\".3em\"}},[_v(\"Image cap\")])]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027p\u0027,{staticClass:\"card-text\"},[_v(\"Some further elaboration on the project.\")]),_v(\" \"),_c(\u0027thumbnail\u0027,{attrs:{\"src\":\"/contents/assets/Vue.svg\",\"size\":\"50\"}})],1),_v(\" \"),_m(20)])])])]),_v(\" \"),_c(\u0027hr\u0027)],1),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(21)])}"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"};"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"bg-light text-black px-2 py-5 mb-4\"},[_c(\u0027div\u0027,{staticClass:\"container\"},[_c(\u0027h1\u0027,{staticClass:\"display-5 no-index\",attrs:{\"id\":\"hello-i-m-name\"}},[_c(\u0027span\u0027,[_v(\"👋\")]),_v(\" Hello!\"),_c(\u0027br\u0027),_v(\"I\u0027m [NAME]\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#hello-i-m-name\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,{staticClass:\"lead\"},[_v(\"Welcome to my portfolio!\")]),_v(\" \"),_c(\u0027span\u0027,{staticStyle:{\"margin-right\":\"10px\"}},[_c(\u0027a\u0027,{staticClass:\"icon\",attrs:{\"href\":\"https://github.com/MarkBind/markbind\",\"target\":\"_blank\"}},[_c(\u0027i\u0027,{staticClass:\"fa-brands fa-github fa-2xl\"})])]),_v(\" \"),_c(\u0027span\u0027,{staticStyle:{\"margin-right\":\"10px\"}},[_c(\u0027a\u0027,{staticClass:\"icon\",attrs:{\"href\":\"https://www.linkedin.com/school/national-university-of-singapore/\",\"target\":\"_blank\"}},[_c(\u0027i\u0027,{staticClass:\"fa-brands fa-linkedin fa-2xl\"})])])])])}"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"about-me\"}},[_v(\"About me\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#about-me\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"col-md-3 col-md-push-9\"},[_c(\u0027img\u0027,{staticClass:\"img-fluid\",attrs:{\"src\":\"/contents/assets/default_profile_pic.png\",\"alt\":\"default-profile-pic\"}})])}"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027span\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/formattingContents.html#links\"}},[_v(\"add relevant links\")])])}"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"skills\"}},[_v(\"Skills\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#skills\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"This is where you can give a quick overview of the technologies and frameworks you know using our \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#thumbnails\",\"target\":\"_blank\"}},[_v(\"thumbnail feature\")]),_v(\" or our \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/formattingContents.html#icons\",\"target\":\"_blank\"}},[_v(\"icons\")]),_v(\".\")])}"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"experience\"}},[_v(\"Experience\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#experience\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"projects\"}},[_v(\"Projects\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#projects\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h3\u0027,{staticClass:\"card-header\",attrs:{\"id\":\"example-project-ip-for-cs2103\"}},[_v(\"Example project: iP for CS2103\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#example-project-ip-for-cs2103\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027span\u0027,[_v(\"This would be a good place to add images and embeds showcasing your contributions to a project. In this case, an \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"\u003ciframe\u003e\")]),_v(\" containing the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://reposense.org/index.html\"}},[_v(\"RepoSense\")]),_v(\" report of a student\u0027s contributions to their iP is embedded. For more information on embeds, refer to our user guide \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/contents/(https:/markbind.org/userGuide/formattingContents.html#embeds)\"}},[_v(\"here.\")])])])}"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,[_c(\u0027iframe\u0027,{attrs:{\"src\":\"https://nus-cs3281.github.io/2024-dashboard/#/widget/?search\u003dReposense\u0026sort\u003dgroupTitle\u0026sortWithin\u003dtitle\u0026timeframe\u003dcommit\u0026mergegroup\u003d\u0026groupSelect\u003dgroupByAuthors\u0026breakdown\u003dfalse\u0026since\u003d2023-12-01\u0026tabOpen\u003dtrue\u0026tabType\u003dauthorship\u0026tabAuthor\u003dasdfghjkxd\u0026tabRepo\u003dreposense%2Freposense%5Bmaster%5D\u0026authorshipIsMergeGroup\u003dfalse\u0026authorshipFileTypes\u003djava~md\u0026authorshipIsBinaryFileTypeChecked\u003dfalse\u0026authorshipIsIgnoredFilesChecked\u003dfalse\u0026chartGroupIndex\u003d5\u0026chartIndex\u003d0\",\"width\":\"100%\"}})])}"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View on Github\")]),_v(\" \"),_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View Devpost\")])])}"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h3\u0027,{staticClass:\"card-header\",attrs:{\"id\":\"project-2\"}},[_v(\"Project 2\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#project-2\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View on Github\")]),_v(\" \"),_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View Devpost\")])])}"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"other-projects\"}},[_v(\"Other projects\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#other-projects\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h4\u0027,{staticClass:\"card-header\",attrs:{\"id\":\"project-title\"}},[_v(\"Project title\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#project-title\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View on Github\")]),_v(\" \"),_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View Devpost\")])])}"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h4\u0027,{staticClass:\"card-header\",attrs:{\"id\":\"project-title-2\"}},[_v(\"Project title\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#project-title-2\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":62,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View on Github\")]),_v(\" \"),_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View Devpost\")])])}"},{"lineNumber":63,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":64,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":65,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027h4\u0027,{staticClass:\"card-header\",attrs:{\"id\":\"project-title-3\"}},[_v(\"Project title\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#project-title-3\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":66,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":67,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":68,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"card-body\"},[_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View on Github\")]),_v(\" \"),_c(\u0027a\u0027,{staticClass:\"btn btn-primary\",attrs:{\"href\":\"#\"}},[_v(\"View Devpost\")])])}"},{"lineNumber":69,"author":{"gitId":"jingting1412"},"content":"},function anonymous("},{"lineNumber":70,"author":{"gitId":"jingting1412"},"content":") {"},{"lineNumber":71,"author":{"gitId":"jingting1412"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[Generated by \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.3.0\")]),_v(\"]\")])])])}"},{"lineNumber":72,"author":{"gitId":"jingting1412"},"content":"}];"},{"lineNumber":73,"author":{"gitId":"jingting1412"},"content":" "}],"authorContributionMap":{"jingting1412":73}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/css/bootstrap.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" * Bootswatch v5.1.3"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" * Homepage: https://bootswatch.com"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" * Copyright 2012-2021 Thomas Park"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" * Licensed under MIT"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" * Based on Bootstrap"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"*//*!"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" * Bootstrap v5.1.3 (https://getbootstrap.com/)"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" * Copyright 2011-2021 The Bootstrap Authors"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" * Copyright 2011-2021 Twitter, Inc."},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" */@import url(https://fonts.googleapis.com/css2?family\u003dLato:ital,wght@0,400;0,700;1,400\u0026display\u003dswap);:root{--bs-blue:#2c3e50;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#e83e8c;--bs-red:#e74c3c;--bs-orange:#fd7e14;--bs-yellow:#f39c12;--bs-green:#18bc9c;--bs-teal:#20c997;--bs-cyan:#3498db;--bs-white:#fff;--bs-gray:#95a5a6;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#ecf0f1;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#b4bcc2;--bs-gray-600:#95a5a6;--bs-gray-700:#7b8a8b;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#2c3e50;--bs-secondary:#95a5a6;--bs-success:#18bc9c;--bs-info:#3498db;--bs-warning:#f39c12;--bs-danger:#e74c3c;--bs-light:#ecf0f1;--bs-dark:#7b8a8b;--bs-primary-rgb:44,62,80;--bs-secondary-rgb:149,165,166;--bs-success-rgb:24,188,156;--bs-info-rgb:52,152,219;--bs-warning-rgb:243,156,18;--bs-danger-rgb:231,76,60;--bs-light-rgb:236,240,241;--bs-dark-rgb:123,138,139;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:Lato,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.425rem + 2.1vw)}@media (min-width:1200px){.h1,h1{font-size:3rem}}.h2,h2{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h2,h2{font-size:2.5rem}}.h3,h3{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h3,h3{font-size:2rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#18bc9c;text-decoration:underline}a:hover{color:#13967d}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#e83e8c;word-wrap:break-word}a\u003ecode{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#95a5a6;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role\u003dbutton]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type\u003dbutton],[type\u003dreset],[type\u003dsubmit],button{-webkit-appearance:button}[type\u003dbutton]:not(:disabled),[type\u003dreset]:not(:disabled),[type\u003dsubmit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type\u003dsearch]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote\u003e:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#95a5a6}.blockquote-footer::before{content:\"\\2014\\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#95a5a6}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row\u003e*{-ms-flex-negative:0;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-auto\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-1\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-2\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-3\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.row-cols-4\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-5\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-6\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.333333%}.col-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.col-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.666667%}.col-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.333333%}.col-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.666667%}.col-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.333333%}.col-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.666667%}.col-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-sm-auto\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-sm-1\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-sm-2\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-sm-3\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.row-cols-sm-4\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-sm-5\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-sm-6\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.333333%}.col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.666667%}.col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.333333%}.col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.666667%}.col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.333333%}.col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.666667%}.col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-md-auto\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-md-1\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-md-2\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-md-3\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.row-cols-md-4\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-md-5\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-md-6\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.333333%}.col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.666667%}.col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.333333%}.col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.666667%}.col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.333333%}.col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.666667%}.col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-lg-auto\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-lg-1\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-lg-2\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-lg-3\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.row-cols-lg-4\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-lg-5\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-lg-6\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.333333%}.col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.666667%}.col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.333333%}.col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.666667%}.col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.333333%}.col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.666667%}.col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-xl-auto\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-xl-1\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-xl-2\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-xl-3\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.row-cols-xl-4\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-xl-5\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-xl-6\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.333333%}.col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.666667%}.col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.333333%}.col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.666667%}.col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.333333%}.col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.666667%}.col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-xxl-auto\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-xxl-1\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-xxl-2\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-xxl-3\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.row-cols-xxl-4\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-xxl-5\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-xxl-6\u003e*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-xxl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-xxl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.333333%}.col-xxl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.666667%}.col-xxl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-xxl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.333333%}.col-xxl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.666667%}.col-xxl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-xxl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.333333%}.col-xxl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.666667%}.col-xxl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-xxl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.333333%}.col-xxl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.666667%}.col-xxl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.333333%}.offset-xxl-2{margin-left:16.666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.333333%}.offset-xxl-5{margin-left:41.666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.333333%}.offset-xxl-8{margin-left:66.666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.333333%}.offset-xxl-11{margin-left:91.666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table\u003e:not(caption)\u003e*\u003e*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table\u003etbody{vertical-align:inherit}.table\u003ethead{vertical-align:bottom}.table\u003e:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm\u003e:not(caption)\u003e*\u003e*{padding:.25rem .25rem}.table-bordered\u003e:not(caption)\u003e*{border-width:1px 0}.table-bordered\u003e:not(caption)\u003e*\u003e*{border-width:0 1px}.table-borderless\u003e:not(caption)\u003e*\u003e*{border-bottom-width:0}.table-borderless\u003e:not(:first-child){border-top-width:0}.table-striped\u003etbody\u003etr:nth-of-type(odd)\u003e*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover\u003etbody\u003etr:hover\u003e*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#2c3e50;--bs-table-striped-bg:#374859;--bs-table-striped-color:#fff;--bs-table-active-bg:#415162;--bs-table-active-color:#fff;--bs-table-hover-bg:#3c4c5d;--bs-table-hover-color:#fff;color:#fff;border-color:#415162}.table-secondary{--bs-table-bg:#95a5a6;--bs-table-striped-bg:#9aaaaa;--bs-table-striped-color:#fff;--bs-table-active-bg:#a0aeaf;--bs-table-active-color:#fff;--bs-table-hover-bg:#9dacad;--bs-table-hover-color:#fff;color:#fff;border-color:#a0aeaf}.table-success{--bs-table-bg:#18bc9c;--bs-table-striped-bg:#24bfa1;--bs-table-striped-color:#fff;--bs-table-active-bg:#2fc3a6;--bs-table-active-color:#fff;--bs-table-hover-bg:#29c1a3;--bs-table-hover-color:#fff;color:#fff;border-color:#2fc3a6}.table-info{--bs-table-bg:#3498db;--bs-table-striped-bg:#3e9ddd;--bs-table-striped-color:#fff;--bs-table-active-bg:#48a2df;--bs-table-active-color:#fff;--bs-table-hover-bg:#43a0de;--bs-table-hover-color:#fff;color:#fff;border-color:#48a2df}.table-warning{--bs-table-bg:#f39c12;--bs-table-striped-bg:#f4a11e;--bs-table-striped-color:#fff;--bs-table-active-bg:#f4a62a;--bs-table-active-color:#000;--bs-table-hover-bg:#f4a324;--bs-table-hover-color:#fff;color:#fff;border-color:#f4a62a}.table-danger{--bs-table-bg:#e74c3c;--bs-table-striped-bg:#e85546;--bs-table-striped-color:#fff;--bs-table-active-bg:#e95e50;--bs-table-active-color:#fff;--bs-table-hover-bg:#e9594b;--bs-table-hover-color:#fff;color:#fff;border-color:#e95e50}.table-light{--bs-table-bg:#ecf0f1;--bs-table-striped-bg:#e0e4e5;--bs-table-striped-color:#000;--bs-table-active-bg:#d4d8d9;--bs-table-active-color:#000;--bs-table-hover-bg:#dadedf;--bs-table-hover-color:#000;color:#000;border-color:#d4d8d9}.table-dark{--bs-table-bg:#7b8a8b;--bs-table-striped-bg:#829091;--bs-table-striped-color:#fff;--bs-table-active-bg:#889697;--bs-table-active-color:#fff;--bs-table-hover-bg:#859394;--bs-table-hover-color:#fff;color:#fff;border-color:#889697}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#95a5a6}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type\u003dfile]{overflow:hidden}.form-control[type\u003dfile]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-webkit-input-placeholder{color:#95a5a6;opacity:1}.form-control::-moz-placeholder{color:#95a5a6;opacity:1}.form-control:-ms-input-placeholder{color:#95a5a6;opacity:1}.form-control::-ms-input-placeholder{color:#95a5a6;opacity:1}.form-control::placeholder{color:#95a5a6;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#ecf0f1;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;-moz-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#ecf0f1;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e0e4e5}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#ecf0f1;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#e0e4e5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;-moz-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;-moz-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23343a40\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M2 5l6 6 6-6\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,.25)}.form-select[multiple],.form-select[size]:not([size\u003d\"1\"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#ecf0f1}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type\u003dcheckbox]{border-radius:.25em}.form-check-input[type\u003dradio]{border-radius:50%}.form-check-input:active{-webkit-filter:brightness(90%);filter:brightness(90%)}.form-check-input:focus{border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,.25)}.form-check-input:checked{background-color:#2c3e50;border-color:#2c3e50}.form-check-input:checked[type\u003dcheckbox]{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 20 20\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23fff\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00273\u0027 d\u003d\u0027M6 10l3 3l6-6\u0027/%3e%3c/svg%3e\")}.form-check-input:checked[type\u003dradio]{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00272\u0027 fill\u003d\u0027%23fff\u0027/%3e%3c/svg%3e\")}.form-check-input[type\u003dcheckbox]:indeterminate{background-color:#2c3e50;border-color:#2c3e50;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 20 20\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23fff\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00273\u0027 d\u003d\u0027M6 10h8\u0027/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;-webkit-filter:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00273\u0027 fill\u003d\u0027rgba%280, 0, 0, 0.25%29\u0027/%3e%3c/svg%3e\");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00273\u0027 fill\u003d\u0027%23969fa8\u0027/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00273\u0027 fill\u003d\u0027%23fff\u0027/%3e%3c/svg%3e\")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;-webkit-filter:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(44,62,80,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(44,62,80,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#2c3e50;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c0c5cb}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#2c3e50;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#c0c5cb}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#b4bcc2}.form-range:disabled::-moz-range-thumb{background-color:#b4bcc2}.form-floating{position:relative}.form-floating\u003e.form-control,.form-floating\u003e.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating\u003elabel{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;-webkit-transform-origin:0 0;transform-origin:0 0;transition:opacity .1s ease-in-out,-webkit-transform .1s ease-in-out;transition:opacity .1s ease-in-out,transform .1s ease-in-out;transition:opacity .1s ease-in-out,transform .1s ease-in-out,-webkit-transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating\u003elabel{transition:none}}.form-floating\u003e.form-control{padding:1rem .75rem}.form-floating\u003e.form-control::-webkit-input-placeholder{color:transparent}.form-floating\u003e.form-control::-moz-placeholder{color:transparent}.form-floating\u003e.form-control:-ms-input-placeholder{color:transparent}.form-floating\u003e.form-control::-ms-input-placeholder{color:transparent}.form-floating\u003e.form-control::placeholder{color:transparent}.form-floating\u003e.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:not(:-ms-input-placeholder){padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:focus,.form-floating\u003e.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating\u003e.form-control:not(:-ms-input-placeholder)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating\u003e.form-control:focus~label,.form-floating\u003e.form-control:not(:placeholder-shown)~label,.form-floating\u003e.form-select~label{opacity:.65;-webkit-transform:scale(.85) translateY(-.5rem) translateX(.15rem);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating\u003e.form-control:-webkit-autofill~label{opacity:.65;-webkit-transform:scale(.85) translateY(-.5rem) translateX(.15rem);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group\u003e.form-control,.input-group\u003e.form-select{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0}.input-group\u003e.form-control:focus,.input-group\u003e.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#ecf0f1;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg\u003e.btn,.input-group-lg\u003e.form-control,.input-group-lg\u003e.form-select,.input-group-lg\u003e.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm\u003e.btn,.input-group-sm\u003e.form-control,.input-group-sm\u003e.form-select,.input-group-sm\u003e.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg\u003e.form-select,.input-group-sm\u003e.form-select{padding-right:3rem}.input-group:not(.has-validation)\u003e.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)\u003e:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation\u003e.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation\u003e:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group\u003e:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#18bc9c}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(24,188,156,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#18bc9c;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 8 8\u0027%3e%3cpath fill\u003d\u0027%2318bc9c\u0027 d\u003d\u0027M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#18bc9c;box-shadow:0 0 0 .25rem rgba(24,188,156,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#18bc9c}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size\u003d\"1\"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size\u003d\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23343a40\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M2 5l6 6 6-6\u0027/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 8 8\u0027%3e%3cpath fill\u003d\u0027%2318bc9c\u0027 d\u003d\u0027M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z\u0027/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#18bc9c;box-shadow:0 0 0 .25rem rgba(24,188,156,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#18bc9c}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#18bc9c}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(24,188,156,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#18bc9c}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#e74c3c}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(231,76,60,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#e74c3c;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 12 12\u0027 width\u003d\u002712\u0027 height\u003d\u002712\u0027 fill\u003d\u0027none\u0027 stroke\u003d\u0027%23e74c3c\u0027%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00276\u0027 r\u003d\u00274.5\u0027/%3e%3cpath stroke-linejoin\u003d\u0027round\u0027 d\u003d\u0027M5.8 3.6h.4L6 6.5z\u0027/%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00278.2\u0027 r\u003d\u0027.6\u0027 fill\u003d\u0027%23e74c3c\u0027 stroke\u003d\u0027none\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#e74c3c;box-shadow:0 0 0 .25rem rgba(231,76,60,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#e74c3c}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size\u003d\"1\"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size\u003d\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23343a40\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M2 5l6 6 6-6\u0027/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 12 12\u0027 width\u003d\u002712\u0027 height\u003d\u002712\u0027 fill\u003d\u0027none\u0027 stroke\u003d\u0027%23e74c3c\u0027%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00276\u0027 r\u003d\u00274.5\u0027/%3e%3cpath stroke-linejoin\u003d\u0027round\u0027 d\u003d\u0027M5.8 3.6h.4L6 6.5z\u0027/%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00278.2\u0027 r\u003d\u0027.6\u0027 fill\u003d\u0027%23e74c3c\u0027 stroke\u003d\u0027none\u0027/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#e74c3c;box-shadow:0 0 0 .25rem rgba(231,76,60,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#e74c3c}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#e74c3c}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(231,76,60,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#e74c3c}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.btn-primary:hover{color:#fff;background-color:#253544;border-color:#233240}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#253544;border-color:#233240;box-shadow:0 0 0 .25rem rgba(76,91,106,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show\u003e.btn-primary.dropdown-toggle{color:#fff;background-color:#233240;border-color:#212f3c}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show\u003e.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(76,91,106,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.btn-secondary{color:#fff;background-color:#95a5a6;border-color:#95a5a6}.btn-secondary:hover{color:#fff;background-color:#7f8c8d;border-color:#778485}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#7f8c8d;border-color:#778485;box-shadow:0 0 0 .25rem rgba(165,179,179,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show\u003e.btn-secondary.dropdown-toggle{color:#fff;background-color:#778485;border-color:#707c7d}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show\u003e.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(165,179,179,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#95a5a6;border-color:#95a5a6}.btn-success{color:#fff;background-color:#18bc9c;border-color:#18bc9c}.btn-success:hover{color:#fff;background-color:#14a085;border-color:#13967d}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#14a085;border-color:#13967d;box-shadow:0 0 0 .25rem rgba(59,198,171,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show\u003e.btn-success.dropdown-toggle{color:#fff;background-color:#13967d;border-color:#128d75}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show\u003e.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(59,198,171,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#18bc9c;border-color:#18bc9c}.btn-info{color:#fff;background-color:#3498db;border-color:#3498db}.btn-info:hover{color:#fff;background-color:#2c81ba;border-color:#2a7aaf}.btn-check:focus+.btn-info,.btn-info:focus{color:#fff;background-color:#2c81ba;border-color:#2a7aaf;box-shadow:0 0 0 .25rem rgba(82,167,224,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show\u003e.btn-info.dropdown-toggle{color:#fff;background-color:#2a7aaf;border-color:#2772a4}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show\u003e.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(82,167,224,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#3498db;border-color:#3498db}.btn-warning{color:#fff;background-color:#f39c12;border-color:#f39c12}.btn-warning:hover{color:#fff;background-color:#cf850f;border-color:#c27d0e}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#fff;background-color:#cf850f;border-color:#c27d0e;box-shadow:0 0 0 .25rem rgba(245,171,54,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show\u003e.btn-warning.dropdown-toggle{color:#fff;background-color:#c27d0e;border-color:#b6750e}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show\u003e.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(245,171,54,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#f39c12;border-color:#f39c12}.btn-danger{color:#fff;background-color:#e74c3c;border-color:#e74c3c}.btn-danger:hover{color:#fff;background-color:#c44133;border-color:#b93d30}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#c44133;border-color:#b93d30;box-shadow:0 0 0 .25rem rgba(235,103,89,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show\u003e.btn-danger.dropdown-toggle{color:#fff;background-color:#b93d30;border-color:#ad392d}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show\u003e.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(235,103,89,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#e74c3c;border-color:#e74c3c}.btn-light{color:#000;background-color:#ecf0f1;border-color:#ecf0f1}.btn-light:hover{color:#000;background-color:#eff2f3;border-color:#eef2f2}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#eff2f3;border-color:#eef2f2;box-shadow:0 0 0 .25rem rgba(201,204,205,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show\u003e.btn-light.dropdown-toggle{color:#000;background-color:#f0f3f4;border-color:#eef2f2}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show\u003e.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(201,204,205,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#ecf0f1;border-color:#ecf0f1}.btn-dark{color:#fff;background-color:#7b8a8b;border-color:#7b8a8b}.btn-dark:hover{color:#fff;background-color:#697576;border-color:#626e6f}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#697576;border-color:#626e6f;box-shadow:0 0 0 .25rem rgba(143,156,156,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show\u003e.btn-dark.dropdown-toggle{color:#fff;background-color:#626e6f;border-color:#5c6868}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show\u003e.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(143,156,156,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#7b8a8b;border-color:#7b8a8b}.btn-outline-primary{color:#2c3e50;border-color:#2c3e50}.btn-outline-primary:hover{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(44,62,80,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(44,62,80,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#2c3e50;background-color:transparent}.btn-outline-secondary{color:#95a5a6;border-color:#95a5a6}.btn-outline-secondary:hover{color:#fff;background-color:#95a5a6;border-color:#95a5a6}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(149,165,166,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#95a5a6;border-color:#95a5a6}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(149,165,166,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#95a5a6;background-color:transparent}.btn-outline-success{color:#18bc9c;border-color:#18bc9c}.btn-outline-success:hover{color:#fff;background-color:#18bc9c;border-color:#18bc9c}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(24,188,156,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#18bc9c;border-color:#18bc9c}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(24,188,156,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#18bc9c;background-color:transparent}.btn-outline-info{color:#3498db;border-color:#3498db}.btn-outline-info:hover{color:#fff;background-color:#3498db;border-color:#3498db}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(52,152,219,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#fff;background-color:#3498db;border-color:#3498db}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(52,152,219,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#3498db;background-color:transparent}.btn-outline-warning{color:#f39c12;border-color:#f39c12}.btn-outline-warning:hover{color:#fff;background-color:#f39c12;border-color:#f39c12}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(243,156,18,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#fff;background-color:#f39c12;border-color:#f39c12}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(243,156,18,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f39c12;background-color:transparent}.btn-outline-danger{color:#e74c3c;border-color:#e74c3c}.btn-outline-danger:hover{color:#fff;background-color:#e74c3c;border-color:#e74c3c}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(231,76,60,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#e74c3c;border-color:#e74c3c}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(231,76,60,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#e74c3c;background-color:transparent}.btn-outline-light{color:#ecf0f1;border-color:#ecf0f1}.btn-outline-light:hover{color:#000;background-color:#ecf0f1;border-color:#ecf0f1}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(236,240,241,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#ecf0f1;border-color:#ecf0f1}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(236,240,241,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#ecf0f1;background-color:transparent}.btn-outline-dark{color:#7b8a8b;border-color:#7b8a8b}.btn-outline-dark:hover{color:#fff;background-color:#7b8a8b;border-color:#7b8a8b}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(123,138,139,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#7b8a8b;border-color:#7b8a8b}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(123,138,139,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#7b8a8b;background-color:transparent}.btn-link{font-weight:400;color:#18bc9c;text-decoration:underline}.btn-link:hover{color:#13967d}.btn-link.disabled,.btn-link:disabled{color:#95a5a6}.btn-group-lg\u003e.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm\u003e.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#7b8a8b;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#fff;background-color:#2c3e50}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#2c3e50}.dropdown-item.disabled,.dropdown-item:disabled{color:#b4bcc2;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#95a5a6;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#7b8a8b}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#2c3e50}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#b4bcc2}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#b4bcc2}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical\u003e.btn,.btn-group\u003e.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical\u003e.btn-check:checked+.btn,.btn-group-vertical\u003e.btn-check:focus+.btn,.btn-group-vertical\u003e.btn.active,.btn-group-vertical\u003e.btn:active,.btn-group-vertical\u003e.btn:focus,.btn-group-vertical\u003e.btn:hover,.btn-group\u003e.btn-check:checked+.btn,.btn-group\u003e.btn-check:focus+.btn,.btn-group\u003e.btn.active,.btn-group\u003e.btn:active,.btn-group\u003e.btn:focus,.btn-group\u003e.btn:hover{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group\u003e.btn-group:not(:first-child),.btn-group\u003e.btn:not(:first-child){margin-left:-1px}.btn-group\u003e.btn-group:not(:last-child)\u003e.btn,.btn-group\u003e.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group\u003e.btn-group:not(:first-child)\u003e.btn,.btn-group\u003e.btn:nth-child(n+3),.btn-group\u003e:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm\u003e.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg\u003e.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical\u003e.btn,.btn-group-vertical\u003e.btn-group{width:100%}.btn-group-vertical\u003e.btn-group:not(:first-child),.btn-group-vertical\u003e.btn:not(:first-child){margin-top:-1px}.btn-group-vertical\u003e.btn-group:not(:last-child)\u003e.btn,.btn-group-vertical\u003e.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical\u003e.btn-group:not(:first-child)\u003e.btn,.btn-group-vertical\u003e.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 2rem;color:#18bc9c;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#13967d}.nav-link.disabled{color:#95a5a6;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #ecf0f1}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#ecf0f1 #ecf0f1 #ecf0f1;isolation:isolate}.nav-tabs .nav-link.disabled{color:#95a5a6;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#7b8a8b;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show\u003e.nav-link{color:#fff;background-color:#2c3e50}.nav-fill .nav-item,.nav-fill\u003e.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified\u003e.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content\u003e.tab-pane{display:none}.tab-content\u003e.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem;padding-bottom:1rem}.navbar\u003e.container,.navbar\u003e.container-fluid,.navbar\u003e.container-lg,.navbar\u003e.container-md,.navbar\u003e.container-sm,.navbar\u003e.container-xl,.navbar\u003e.container-xxl{display:-ms-flexbox;display:flex;-ms-flex-wrap:inherit;flex-wrap:inherit;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;-ms-flex-positive:1;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;-ms-flex-positive:1;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;-ms-flex-positive:1;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;-ms-flex-positive:1;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;-ms-flex-positive:1;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;-ms-flex-positive:1;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;-webkit-transform:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show\u003e.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 30 30\u0027%3e%3cpath stroke\u003d\u0027rgba%280, 0, 0, 0.55%29\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-miterlimit\u003d\u002710\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M4 7h22M4 15h22M4 23h22\u0027/%3e%3c/svg%3e\")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:#fff}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:#2c3e50}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show\u003e.nav-link{color:#2c3e50}.navbar-dark .navbar-toggler{color:#fff;border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 30 30\u0027%3e%3cpath stroke\u003d\u0027%23fff\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-miterlimit\u003d\u002710\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M4 7h22M4 15h22M4 23h22\u0027/%3e%3c/svg%3e\")}.navbar-dark .navbar-text{color:#fff}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#2c3e50}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card\u003ehr{margin-right:0;margin-left:0}.card\u003e.list-group{border-top:inherit;border-bottom:inherit}.card\u003e.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card\u003e.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card\u003e.card-header+.list-group,.card\u003e.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group\u003e.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group\u003e.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group\u003e.card+.card{margin-left:0;border-left:0}.card-group\u003e.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group\u003e.card:not(:last-child) .card-header,.card-group\u003e.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group\u003e.card:not(:last-child) .card-footer,.card-group\u003e.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group\u003e.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group\u003e.card:not(:first-child) .card-header,.card-group\u003e.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group\u003e.card:not(:first-child) .card-footer,.card-group\u003e.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#283848;background-color:#eaecee;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23283848\u0027%3e%3cpath fill-rule\u003d\u0027evenodd\u0027 d\u003d\u0027M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\u0027/%3e%3c/svg%3e\");-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.accordion-button::after{-ms-flex-negative:0;flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:\"\";background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23212529\u0027%3e%3cpath fill-rule\u003d\u0027evenodd\u0027 d\u003d\u0027M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-size:1.25rem;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#969fa8;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.375rem .75rem;margin-bottom:1rem;list-style:none;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#95a5a6;content:var(--bs-breadcrumb-divider, \"/\")}.breadcrumb-item.active{color:#95a5a6}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#fff;text-decoration:none;background-color:#18bc9c;border:0 solid transparent;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#fff;background-color:#0f7864;border-color:transparent}.page-link:focus{z-index:3;color:#13967d;background-color:#ecf0f1;outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,.25)}.page-item:not(:first-child) .page-link{margin-left:0}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0f7864;border-color:transparent}.page-item.disabled .page-link{color:#ecf0f1;pointer-events:none;background-color:#3be6c4;border-color:transparent}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#1a2530;background-color:#d5d8dc;border-color:#c0c5cb}.alert-primary .alert-link{color:#151e26}.alert-secondary{color:#596364;background-color:#eaeded;border-color:#dfe4e4}.alert-secondary .alert-link{color:#474f50}.alert-success{color:#0e715e;background-color:#d1f2eb;border-color:#baebe1}.alert-success .alert-link{color:#0b5a4b}.alert-info{color:#1f5b83;background-color:#d6eaf8;border-color:#c2e0f4}.alert-info .alert-link{color:#194969}.alert-warning{color:#925e0b;background-color:#fdebd0;border-color:#fbe1b8}.alert-warning .alert-link{color:#754b09}.alert-danger{color:#8b2e24;background-color:#fadbd8;border-color:#f8c9c5}.alert-danger .alert-link{color:#6f251d}.alert-light{color:#8e9091;background-color:#fbfcfc;border-color:#f9fbfb}.alert-light .alert-link{color:#727374}.alert-dark{color:#4a5353;background-color:#e5e8e8;border-color:#d7dcdc}.alert-dark .alert-link{color:#3b4242}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#ecf0f1;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#2c3e50;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered\u003eli::before{content:counters(section, \".\") \". \";counter-increment:section}.list-group-item-action{width:100%;color:#7b8a8b;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#7b8a8b;text-decoration:none;background-color:#ecf0f1}.list-group-item-action:active{color:#212529;background-color:#ecf0f1}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#95a5a6;pointer-events:none;background-color:#ecf0f1}.list-group-item.active{z-index:2;color:#fff;background-color:#2c3e50;border-color:#2c3e50}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal\u003e.list-group-item.active{margin-top:0}.list-group-horizontal\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-sm\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-md\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-lg\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-xl\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xxl\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-xxl\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush\u003e.list-group-item{border-width:0 0 1px}.list-group-flush\u003e.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#1a2530;background-color:#d5d8dc}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#1a2530;background-color:#c0c2c6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#1a2530;border-color:#1a2530}.list-group-item-secondary{color:#596364;background-color:#eaeded}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#596364;background-color:#d3d5d5}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#596364;border-color:#596364}.list-group-item-success{color:#0e715e;background-color:#d1f2eb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0e715e;background-color:#bcdad4}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0e715e;border-color:#0e715e}.list-group-item-info{color:#1f5b83;background-color:#d6eaf8}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#1f5b83;background-color:#c1d3df}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#1f5b83;border-color:#1f5b83}.list-group-item-warning{color:#925e0b;background-color:#fdebd0}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#925e0b;background-color:#e4d4bb}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#925e0b;border-color:#925e0b}.list-group-item-danger{color:#8b2e24;background-color:#fadbd8}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#8b2e24;background-color:#e1c5c2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#8b2e24;border-color:#8b2e24}.list-group-item-light{color:#8e9091;background-color:#fbfcfc}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#8e9091;background-color:#e2e3e3}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#8e9091;border-color:#8e9091}.list-group-item-dark{color:#4a5353;background-color:#e5e8e8}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#4a5353;background-color:#ced1d1}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#4a5353;border-color:#4a5353}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#fff;background:transparent url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23fff\u0027%3e%3cpath d\u003d\u0027M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z\u0027/%3e%3c/svg%3e\") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.4}.btn-close:hover{color:#fff;text-decoration:none;opacity:1}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(44,62,80,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:.25}.btn-close-white{-webkit-filter:invert(1) grayscale(100%) brightness(200%);filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container\u003e:not(:last-child){margin-bottom:.75rem}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.5rem .75rem;color:#95a5a6;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-negative:0;flex-shrink:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer\u003e*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^\u003dtop],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^\u003dtop] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^\u003dtop] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^\u003dright],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^\u003dright] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^\u003dright] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^\u003dbottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^\u003dbottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^\u003dbottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^\u003dleft],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^\u003dleft] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^\u003dleft] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^\u003dtop]\u003e.popover-arrow,.bs-popover-top\u003e.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^\u003dtop]\u003e.popover-arrow::before,.bs-popover-top\u003e.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dtop]\u003e.popover-arrow::after,.bs-popover-top\u003e.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^\u003dright]\u003e.popover-arrow,.bs-popover-end\u003e.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^\u003dright]\u003e.popover-arrow::before,.bs-popover-end\u003e.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dright]\u003e.popover-arrow::after,.bs-popover-end\u003e.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^\u003dbottom]\u003e.popover-arrow,.bs-popover-bottom\u003e.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^\u003dbottom]\u003e.popover-arrow::before,.bs-popover-bottom\u003e.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dbottom]\u003e.popover-arrow::after,.bs-popover-bottom\u003e.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^\u003dbottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^\u003dleft]\u003e.popover-arrow,.bs-popover-start\u003e.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^\u003dleft]\u003e.popover-arrow::before,.bs-popover-start\u003e.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dleft]\u003e.popover-arrow::after,.bs-popover-start\u003e.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23fff\u0027%3e%3cpath d\u003d\u0027M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\u0027/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23fff\u0027%3e%3cpath d\u003d\u0027M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\u0027/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{-webkit-filter:invert(1) grayscale(100);filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{-ms-flex-positive:1;flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);-webkit-transform:translateY(100%);transform:translateY(100%)}.offcanvas.show{-webkit-transform:none;transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:\"\"}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0;mask-position:-200% 0}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.clearfix::after{display:block;clear:both;content:\"\"}.link-primary{color:#2c3e50}.link-primary:focus,.link-primary:hover{color:#233240}.link-secondary{color:#95a5a6}.link-secondary:focus,.link-secondary:hover{color:#778485}.link-success{color:#18bc9c}.link-success:focus,.link-success:hover{color:#13967d}.link-info{color:#3498db}.link-info:focus,.link-info:hover{color:#2a7aaf}.link-warning{color:#f39c12}.link-warning:focus,.link-warning:hover{color:#c27d0e}.link-danger{color:#e74c3c}.link-danger:focus,.link-danger:hover{color:#b93d30}.link-light{color:#ecf0f1}.link-light:focus,.link-light:hover{color:#f0f3f4}.link-dark{color:#7b8a8b}.link-dark:focus,.link-dark:hover{color:#626e6f}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio\u003e*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch}.vstack{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-direction:column;flex-direction:column;-ms-flex-item-align:stretch;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;-ms-flex-item-align:stretch;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{-webkit-transform:translate(-50%,-50%)!important;transform:translate(-50%,-50%)!important}.translate-middle-x{-webkit-transform:translateX(-50%)!important;transform:translateX(-50%)!important}.translate-middle-y{-webkit-transform:translateY(-50%)!important;transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#2c3e50!important}.border-secondary{border-color:#95a5a6!important}.border-success{border-color:#18bc9c!important}.border-info{border-color:#3498db!important}.border-warning{border-color:#f39c12!important}.border-danger{border-color:#e74c3c!important}.border-light{border-color:#ecf0f1!important}.border-dark{border-color:#7b8a8b!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-evenly{-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-first{-ms-flex-order:-1!important;order:-1!important}.order-0{-ms-flex-order:0!important;order:0!important}.order-1{-ms-flex-order:1!important;order:1!important}.order-2{-ms-flex-order:2!important;order:2!important}.order-3{-ms-flex-order:3!important;order:3!important}.order-4{-ms-flex-order:4!important;order:4!important}.order-5{-ms-flex-order:5!important;order:5!important}.order-last{-ms-flex-order:6!important;order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.425rem + 2.1vw)!important}.fs-2{font-size:calc(1.375rem + 1.5vw)!important}.fs-3{font-size:calc(1.325rem + .9vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#95a5a6!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-sm-evenly{-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-sm-first{-ms-flex-order:-1!important;order:-1!important}.order-sm-0{-ms-flex-order:0!important;order:0!important}.order-sm-1{-ms-flex-order:1!important;order:1!important}.order-sm-2{-ms-flex-order:2!important;order:2!important}.order-sm-3{-ms-flex-order:3!important;order:3!important}.order-sm-4{-ms-flex-order:4!important;order:4!important}.order-sm-5{-ms-flex-order:5!important;order:5!important}.order-sm-last{-ms-flex-order:6!important;order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-md-evenly{-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-md-first{-ms-flex-order:-1!important;order:-1!important}.order-md-0{-ms-flex-order:0!important;order:0!important}.order-md-1{-ms-flex-order:1!important;order:1!important}.order-md-2{-ms-flex-order:2!important;order:2!important}.order-md-3{-ms-flex-order:3!important;order:3!important}.order-md-4{-ms-flex-order:4!important;order:4!important}.order-md-5{-ms-flex-order:5!important;order:5!important}.order-md-last{-ms-flex-order:6!important;order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-lg-evenly{-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-lg-first{-ms-flex-order:-1!important;order:-1!important}.order-lg-0{-ms-flex-order:0!important;order:0!important}.order-lg-1{-ms-flex-order:1!important;order:1!important}.order-lg-2{-ms-flex-order:2!important;order:2!important}.order-lg-3{-ms-flex-order:3!important;order:3!important}.order-lg-4{-ms-flex-order:4!important;order:4!important}.order-lg-5{-ms-flex-order:5!important;order:5!important}.order-lg-last{-ms-flex-order:6!important;order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-xl-evenly{-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-xl-first{-ms-flex-order:-1!important;order:-1!important}.order-xl-0{-ms-flex-order:0!important;order:0!important}.order-xl-1{-ms-flex-order:1!important;order:1!important}.order-xl-2{-ms-flex-order:2!important;order:2!important}.order-xl-3{-ms-flex-order:3!important;order:3!important}.order-xl-4{-ms-flex-order:4!important;order:4!important}.order-xl-5{-ms-flex-order:5!important;order:5!important}.order-xl-last{-ms-flex-order:6!important;order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:-ms-flexbox!important;display:flex!important}.d-xxl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xxl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xxl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xxl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xxl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xxl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xxl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xxl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xxl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-xxl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xxl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xxl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xxl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xxl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xxl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-xxl-evenly{-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-xxl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xxl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xxl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xxl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xxl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xxl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xxl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xxl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xxl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xxl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xxl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xxl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xxl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xxl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xxl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xxl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xxl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-xxl-first{-ms-flex-order:-1!important;order:-1!important}.order-xxl-0{-ms-flex-order:0!important;order:0!important}.order-xxl-1{-ms-flex-order:1!important;order:1!important}.order-xxl-2{-ms-flex-order:2!important;order:2!important}.order-xxl-3{-ms-flex-order:3!important;order:3!important}.order-xxl-4{-ms-flex-order:4!important;order:4!important}.order-xxl-5{-ms-flex-order:5!important;order:5!important}.order-xxl-last{-ms-flex-order:6!important;order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:3rem!important}.fs-2{font-size:2.5rem!important}.fs-3{font-size:2rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}.d-print-none{display:none!important}}.bg-primary .navbar-nav .nav-link.active,.bg-primary .navbar-nav .nav-link:focus,.bg-primary .navbar-nav .nav-link:hover,.bg-primary .navbar-nav .show\u003e.nav-link{color:#18bc9c!important}.nav-tabs .nav-item.open .nav-link,.nav-tabs .nav-item.open .nav-link:focus,.nav-tabs .nav-item.open .nav-link:hover,.nav-tabs .nav-link.active,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-link.active:hover{color:#2c3e50}.pagination a:hover{text-decoration:none}.badge.bg-light{color:#7b8a8b}.alert{border:none;color:#fff}.alert .alert-link,.alert a{color:#fff;text-decoration:underline}.alert-primary{background-color:#2c3e50}.alert-secondary{background-color:#95a5a6}.alert-success{background-color:#18bc9c}.alert-info{background-color:#3498db}.alert-warning{background-color:#f39c12}.alert-danger{background-color:#e74c3c}.alert-light{background-color:#ecf0f1}.alert-dark{background-color:#7b8a8b}.alert-light,.alert-light .alert-link,.alert-light a{color:#212529}.modal .btn-close,.toast .btn-close{background-image:url(\"data:image/svg+xml,\u003csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23000\u0027\u003e\u003cpath d\u003d\u0027M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z\u0027/\u003e\u003c/svg\u003e\")}"}],"authorContributionMap":{"jingting1412":12}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"jingting1412":2}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/css/codeblock-light.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8ff}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#e6e6fa}.hljs.inline{background:#f8f8f8}.hljs.inline.no-lang{color:#e83e8c}.hljs:not(.inline){border:1px solid #c8c8c8;border:1px solid rgba(200,200,200,.3)}.code-block-heading{background:#f2f2ff;color:#8787a5}button.function-btn{background-color: #f8f8ff}"}],"authorContributionMap":{"jingting1412":2}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/css/markbind.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":".resize-observer[data-v-8859cc6c]{background-color:transparent;border:none;opacity:0}.resize-observer[data-v-8859cc6c],.resize-observer[data-v-8859cc6c] object{display:block;height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.v-popper__popper{left:0;top:0;z-index:10000}.v-popper__popper.v-popper__popper--hidden{opacity:0;pointer-events:none;transition:opacity .15s,visibility .15s;visibility:hidden}.v-popper__popper.v-popper__popper--shown{opacity:1;transition:opacity .15s;visibility:visible}.v-popper__popper.v-popper__popper--skip-transition,.v-popper__popper.v-popper__popper--skip-transition\u003e.v-popper__wrapper{transition:none!important}.v-popper__backdrop{display:none;height:100%;left:0;position:absolute;top:0;width:100%}.v-popper__inner{box-sizing:border-box;overflow-y:auto;position:relative}.v-popper__inner\u003ediv{max-height:inherit;max-width:inherit;position:relative;z-index:1}.v-popper__arrow-container{height:10px;position:absolute;width:10px}.v-popper__popper--arrow-overflow .v-popper__arrow-container,.v-popper__popper--no-positioning .v-popper__arrow-container{display:none}.v-popper__arrow-inner,.v-popper__arrow-outer{border-style:solid;height:0;left:0;position:absolute;top:0;width:0}.v-popper__arrow-inner{border-width:7px;visibility:hidden}.v-popper__arrow-outer{border-width:6px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-inner{left:-2px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-outer{left:-1px}.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-bottom-width:0;border-left-color:transparent!important;border-right-color:transparent!important}.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-container{top:0}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-outer{border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;border-top-width:0}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-inner{top:-4px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-outer{top:-6px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-outer{top:-1px}.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-left-color:transparent!important;border-left-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-inner{left:-4px}.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-outer{left:-6px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-container{right:-10px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-right-color:transparent!important;border-right-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-inner{left:-2px}.v-popper--theme-dropdown .v-popper__inner{background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 6px 30px #0000001a;color:#000}.v-popper--theme-dropdown .v-popper__arrow-inner{border-color:#fff;visibility:visible}.v-popper--theme-dropdown .v-popper__arrow-outer{border-color:#ddd}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.8);border-radius:6px;color:#fff;padding:7px 12px 6px}.v-popper--theme-tooltip .v-popper__arrow-outer{border-color:#000c}.box-container[data-v-4d146e2c]{border-radius:6px;padding:0}.box-header-wrapper[data-v-4d146e2c]{align-items:center;border-radius:6px 6px 0 0;display:flex;flex-direction:row;padding:.4rem 1.25rem .28rem;width:100%}.box-body-wrapper[data-v-4d146e2c]{display:flex;flex-direction:row;padding:.75rem 1.25rem;width:100%}.box-container.seamless\u003e.header-and-body\u003e.box-body-wrapper[data-v-4d146e2c]{padding:.75rem .5rem}.contents[data-v-4d146e2c]{min-width:0;padding:0 6px;width:100%}.box-container.seamless\u003e.header-and-body\u003ediv.box-body-wrapper\u003e.contents[data-v-4d146e2c]{padding-left:12px}.heading[data-v-4d146e2c]{background-color:hsla(0,0%,94%,.6);border-radius:0 6px 0 6px;border-width:0;color:inherit;display:inline;float:right;font-weight:400;margin:-13px -27px 0 15px;padding:3px 5px 4px;width:auto}.box-body-wrapper-with-heading[data-v-4d146e2c]{padding-top:.5rem}.alert-dismissible[data-v-4d146e2c]{padding-right:4rem}.box-header[data-v-4d146e2c]{font-weight:500}.icon-wrapper[data-v-4d146e2c]{display:inline;margin-right:.5em;min-width:1em;text-align:center}.close-with-heading[data-v-4d146e2c]{padding:1rem;position:absolute;right:0;top:0}.close-with-heading\u003espan[data-v-4d146e2c]{vertical-align:text-top}.alert-dismissible .btn-close[data-v-4d146e2c]{padding:1rem}.contents[data-v-4d146e2c]\u003e:last-child{margin-bottom:0}.alert-default[data-v-4d146e2c]{background-color:#f6f8fa;border-color:#e8ebef;color:#24292e}.alert-border-left[data-v-4d146e2c]{background-color:#f9f8f8;border-left:solid;border-width:0 0 0 5px}.vertical-divider[data-v-4d146e2c]{width:4px}.horizontal-divider[data-v-4d146e2c]{height:3px;margin:0 auto;width:calc(100% - 2.5rem)}.no-background[data-v-4d146e2c]{background:none}.no-border[data-v-4d146e2c]{border:none}@media screen and (max-width:768px){.box-header-wrapper[data-v-4d146e2c]{padding:.75rem .75rem .1rem}.box-body-wrapper[data-v-4d146e2c]{padding:.75rem}.contents[data-v-4d146e2c]{padding:0}}div.box-header\u003e*{margin-bottom:0}.notlink[data-v-ef898034]{color:#6d757d}.breadcrumb-divider[data-v-ef898034]{--bs-breadcrumb-divider:\"›\"}.breadcrumb-item[data-v-ef898034]:before,.breadcrumb-marker[data-v-ef898034]{font-size:15px}.dropdown-submenu[data-v-6df16086]{color:#212529!important;padding:0!important;position:relative}.dropdown-submenu ul.dropdown-menu[data-v-6df16086]{margin-left:0}.btn-group\u003eul\u003e.dropdown-submenu:last-child\u003eul[data-v-6df16086],.dropdown\u003eul\u003e.dropdown-submenu:last-child\u003eul[data-v-6df16086]{margin-bottom:-.5rem}@media (min-width:768px){.submenu-toggle[data-v-6df16086]:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:\"\";display:inline-block;float:right;height:0;margin-top:.5em;vertical-align:.255em;width:0}}@media (max-width:767px){.dropdown-submenu\u003eul[data-v-6df16086]{border-radius:0;float:none;margin:-.05rem;padding-bottom:0;position:static}.submenu-toggle[data-v-6df16086]:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:\"\";display:inline-block;float:right;height:0;margin-left:.255em;margin-top:.5em;vertical-align:.255em;width:0}.navbar-default .dropdown[data-v-12679d7e]{position:static}.navbar-default .dropdown-menu[data-v-12679d7e]{max-height:75vh;max-width:100%;overflow-y:auto;overscroll-behavior:contain;position:absolute}.navbar-default .dropdown-menu-end[data-v-12679d7e]{right:auto}}.secret[data-v-12679d7e]{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.btn-with-before[data-v-12679d7e]{padding-left:.2rem;padding-right:.4rem}.dropdown-toggle[data-v-12679d7e]{cursor:pointer;display:block;width:max-content}.navbar .dropdown-toggle[data-v-12679d7e]{text-decoration:none}.nav-link\u003e.nav-link[data-v-12679d7e]{padding:0}.toggle-site-nav-button[data-v-d6ffaa8e]{cursor:pointer;height:53px;left:0;padding:15px;position:absolute;transform:rotate(0deg);transition:all .25s ease-in-out;width:52px}.toggle-site-nav-button span[data-v-d6ffaa8e]{background-color:#000;display:block;height:3px;left:15px;position:absolute;top:50%;transition:all .25s ease-in-out;width:21px}.toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:first-child{transform:translateY(-8px)}.toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(2){transform-origin:100% 50%}.toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:first-child{transform:rotate(135deg)}.nav-menu-close-icon .toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(2){left:-60px;opacity:0}.nav-menu-close-icon .toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(3){transform:rotate(-135deg)}.toggle-page-nav-button[data-v-4b08b1df]{cursor:pointer;padding:15px;position:absolute;right:0;top:6px}.toggle-page-nav-button span[data-v-4b08b1df]{background-color:#000;border-radius:50%;display:block;height:5px;margin-top:2px;position:absolute;right:15px;transform:rotate(0deg);transition:all .25s ease-in-out;width:5px}.toggle-page-nav-button\u003espan[data-v-4b08b1df]:first-child{transform:translateY(-8px)}.toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(2){transform-origin:100% 50%}.toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-page-nav-button\u003espan[data-v-4b08b1df]:first-child{border-radius:0;height:3px;transform:rotate(135deg);width:21px}.nav-menu-close-icon .toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(2){transform:scale(0)}.nav-menu-close-icon .toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(3){border-radius:0;height:3px;transform:rotate(-135deg);width:21px}@media (max-width:767px){.navbar[data-v-73b4aa16]{padding-bottom:0;padding-left:0;padding-right:0}.navbar-left[data-v-73b4aa16]{max-width:50%;order:1;padding-left:1rem}.navbar-left [data-v-73b4aa16]{white-space:normal}.navbar-right[data-v-73b4aa16]{max-width:50%;order:1;padding:0 16px}.navbar-default[data-v-73b4aa16]{-ms-overflow-style:none;display:block;margin-top:.3125rem;order:2;overflow-x:scroll;scrollbar-width:none;width:100%}.navbar-default[data-v-73b4aa16]::-webkit-scrollbar{display:none}.navbar-default ul[data-v-73b4aa16]{flex-direction:row;margin-top:0!important;width:100%}.navbar-default\u003eul\u003e[data-v-73b4aa16]{background:rgba(0,0,0,.2);flex-grow:1;padding:.3125rem .625rem}.navbar-light .navbar-default\u003eul\u003e[data-v-73b4aa16]{background:rgba(0,0,0,.05)}.navbar-default\u003eul\u003e.current[data-v-73b4aa16]{background:transparent}.navbar-default a[data-v-73b4aa16],[data-v-73b4aa16] .dropdown-toggle{margin:0 auto;width:max-content}[data-v-73b4aa16] .dropdown{align-items:center;display:flex}.container-fluid[data-v-73b4aa16]{padding:0}}.navbar-brand[data-v-73b4aa16]{display:inline-block}.navbar-brand\u003eimg[data-v-73b4aa16],.navbar-brand\u003esvg[data-v-73b4aa16]{display:block}.navbar-right[data-v-73b4aa16]{padding-right:1rem}.navbar-left[data-v-73b4aa16]{align-items:center;display:flex;font-size:1.25rem;line-height:inherit;padding:.3125rem 1rem;white-space:nowrap}.navbar-fixed[data-v-73b4aa16]{position:fixed;width:100%;z-index:1000}.navbar-default[data-v-73b4aa16]{align-items:center;display:flex;flex-basis:auto;flex-grow:1}[data-v-73b4aa16] .dropdown-current{background:#007bff;color:#fff!important}.lower-navbar-container[data-v-73b4aa16]{background-color:#fff;border-bottom:1px solid #c1c1c1;height:50px;position:relative;width:100%}.navbar.navbar-dark .navbar-nav[data-v-73b4aa16] .current:not(.dropdown) a,.navbar.navbar-dark .navbar-nav[data-v-73b4aa16] .dropdown.current\u003ea{color:#fff}.navbar.navbar-light .navbar-nav[data-v-73b4aa16] .current:not(.dropdown) a,.navbar.navbar-light .navbar-nav[data-v-73b4aa16] .dropdown.current\u003ea{color:#000}.collapse-button{float:right;font-size:10px!important;margin-left:3px;margin-top:2px;padding:3px 8px!important}.collapse-icon{transition:transform .4s ease-in-out}.collapse-icon.opened{transform:rotate(-180deg)}.card-container[data-v-1e33c620]{scroll-margin-top:var(--sticky-header-height)}.card-collapse[data-v-1e33c620]{overflow:hidden;transition:max-height .5s ease-in-out}.seamless-button[data-v-1e33c620]{opacity:0;transition:opacity .3s}.card-header:hover .seamless-button[data-v-1e33c620]{opacity:1}.card-peek-collapsed[data-v-1e33c620]{position:relative}.card-peek-collapsed[data-v-1e33c620]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:\"\";height:125px;position:absolute;width:100%}.peek-read-more[data-v-1e33c620]{opacity:.2;transition:opacity .5s;z-index:1}.peek-read-more[data-v-1e33c620]:before{bottom:10px;position:absolute;text-align:center;width:100%}.peek-read-more[data-v-1e33c620]:hover{cursor:pointer;opacity:.4}.peek-read-more-fade-enter[data-v-1e33c620],.peek-read-more-fade-leave-to[data-v-1e33c620]{opacity:0}.card-heading{width:100%}.card-title{display:inline-block;font-size:1em;line-height:1.2em;margin:0;text-align:left;white-space:normal}.card-title *{margin-bottom:0!important}.caret-wrapper{float:left;width:32px}.minimal-caret-wrapper{display:inline-block;font-size:13px;margin-right:5px}.header-wrapper{display:inline-block;transition:opacity .5s;width:calc(100% - 128px)}.header-transparent{opacity:0}.button-wrapper{float:right;width:96px}.header-toggle{cursor:pointer}.expandable-card{margin-bottom:0!important;margin-top:5px}.card-collapse\u003ehr{margin-top:0}.card-group\u003e.card-container\u003e.expandable-card{margin-top:0!important}.bottom-button-wrapper{margin-bottom:13px;padding-bottom:13px}.bottom-button-wrapper\u003e.collapse-button{margin-top:5px;opacity:.2}.bottom-button-wrapper\u003e.collapse-button:hover{opacity:1}.close-button{margin-left:3px}.close-button,.popup-button{float:right;font-size:10px!important;margin-top:2px;padding:3px 8px!important}.morph{display:inline-block}.morph-display-wrapper{align-items:center;display:flex;margin-top:5px}@media (max-width:575.98px){.header-wrapper{display:inline-block;width:calc(100% - 64px)}.button-wrapper{float:right;width:32px}.card-body{padding:.5rem}.card-collapse\u003ehr{margin-top:.5rem}.card-header{padding:.5rem}}.card-peek-collapsed[data-v-5d519034]{position:relative}.card-peek-collapsed[data-v-5d519034]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:\"\";height:125px;position:absolute;width:100%}.morph-title[data-v-5d519034]{background-color:transparent;border-color:#000;padding:0 .3em;vertical-align:top}.morph-title[data-v-5d519034]:active,.morph-title[data-v-5d519034]:focus,.morph-title[data-v-5d519034]:hover{background-color:#343a40;border-color:#343a40;color:#fff}.card-collapse[data-v-5d519034]{overflow:hidden;transition:max-height .5s ease-in-out}.card-flex[data-v-5d519034]{border:0;display:flex;flex-direction:column;margin:0}.header-fade-enter[data-v-5d519034]{opacity:0}.header-fade-leave-active[data-v-5d519034]{position:absolute}.header-fade-leave-to[data-v-5d519034]{opacity:0!important}.card-title-inline[data-v-5d519034]{display:inline-block}.card-body[data-v-5d519034]{padding:0}.header-wrapper[data-v-5d519034]{background-color:#fff;display:inline-block;width:100%}.header-wrapper-bottom[data-v-5d519034]{order:1}.ellipses[data-v-5d519034]:before{bottom:3px;content:\"...\";font-weight:900;margin-right:4px;position:relative}.button-wrapper[data-v-5d519034]{border:solid hsla(0,0%,59%,.2);border-width:0 0 0 1px;display:inline-block;float:none;margin-left:2px;opacity:0;padding-left:2px;transition:opacity .5s;vertical-align:text-top;width:auto}.button-wrapper-expanded[data-v-5d519034]{border:0;margin-left:0;padding-left:0}.card:hover .button-wrapper[data-v-5d519034]{opacity:1}.header-toggle[data-v-5d519034]{cursor:pointer}.glyphicon[data-v-5d519034]{font-size:12px}.minimal-button[data-v-5d519034]{background-color:transparent;border:0;color:#969696;cursor:pointer;padding:0 3px}.minimal-button[data-v-5d519034]:active,.minimal-button[data-v-5d519034]:focus,.minimal-button[data-v-5d519034]:hover{color:#1e1e1e}.minimal-popup-button[data-v-5d519034]{font-size:9px;top:1px}.minimal-menu-up[data-v-5d519034]{font-size:13px;top:2px}.minimal-menu-down[data-v-5d519034]{font-size:13px;top:1px}.minimal-close-button[data-v-5d519034]{font-size:11px;top:0}@media (max-width:575.98px){.button-wrapper-expanded[data-v-5d519034]{border:0;margin-left:0;opacity:.15;padding-left:0}.button-wrapper-visible[data-v-5d519034]{opacity:1}}.annotate-image-wrapper{display:inline-block;position:relative;text-align:left}.annotate-image{height:auto;max-width:100%}.annotate-point{bottom:0;left:0;pointer-events:none;top:0}.annotate-point,.popover-annotation{height:100%;position:absolute;width:100%}.hover-point{border-radius:50%;border-style:solid;border-width:1px;z-index:1}.hover-label{pointer-events:none;position:absolute;text-align:center;z-index:2}.hover-wrapper{align-items:center;background:transparent;display:inline-flex;justify-content:center;z-index:0}.legend-wrapper{height:100%;position:relative}.text-header{font-size:1.1em;font-weight:500;margin-top:1em}.image-wrapper{display:inline-block;padding:4px;text-align:center}.image-caption{display:block}.quiz-container[data-v-7a8f322c]{isolation:isolate;overflow:hidden}.intro-outro-card[data-v-7a8f322c]{transition:transform .35s ease-out,opacity .35s linear}.intro-outro-card-enter-active[data-v-7a8f322c],.intro-outro-card-leave-to[data-v-7a8f322c]{opacity:0}.intro-outro-card\u003e.card-body[data-v-7a8f322c]{align-items:center;display:flex;flex-direction:column;justify-content:center}.score[data-v-7a8f322c]{font-size:1.4rem;font-weight:700}.score-circle[data-v-7a8f322c]{stroke-dasharray:264;fill:none;stroke:rgba(132,215,255,.8);stroke-width:8;transition:stroke-dashoffset 1.5s ease-out,stroke 1.5s linear}.score-background-circle[data-v-7a8f322c]{fill:none;stroke:hsla(0,2%,89%,.5);stroke-width:8}.btn[data-v-7a8f322c]{border-radius:2em}.progress-bar-z[data-v-7a8f322c]{z-index:1}.result-icon[data-v-ae369d74]{align-items:center;border-radius:2em;border-style:solid;border-width:2px;display:inline-flex;height:2em;justify-content:center;width:2em}.question[data-v-ae369d74]{margin-bottom:1rem;transition:transform .35s ease-out,opacity .35s linear}.question-enter-active[data-v-ae369d74]{opacity:0;transform:translateY(-2%)}.question-leave-to[data-v-ae369d74]{opacity:0;transform:translateY(2%)}.q-btn[data-v-ae369d74]{border-radius:2.5em;transition:opacity .5s,transform .7s}.q-btn-enter[data-v-ae369d74]{opacity:0;transform:translateY(30px)}.q-btn-leave-to[data-v-ae369d74]{opacity:0;transform:translateX(calc(-100% - .25rem))}.q-btn-leave-active[data-v-ae369d74]{position:absolute}.card-header[data-v-ae369d74]{font-size:1.05em;font-weight:400}.answer[data-v-ae369d74]\u003e:last-child,.card-header[data-v-ae369d74]\u003e:last-child{margin-bottom:0}@keyframes shake-data-v-ae369d74{50%{transform:translate(-2px)}to{transform:translate(2px)}}.shake[data-v-ae369d74]{animation:shake-data-v-ae369d74 .15s;animation-iteration-count:1}textarea.form-control[data-v-ae369d74]{height:auto;margin-bottom:10px;min-height:75px}.fa-check[data-v-d09dfee8],.fa-times[data-v-d09dfee8]{font-size:1.2em}.content[data-v-d09dfee8] :last-child,.reason[data-v-d09dfee8] :last-child{margin-bottom:0}.reason[data-v-d09dfee8]{padding:0 .5rem}.checkbox-label[data-v-d09dfee8]{cursor:pointer}.form-control[data-v-d09dfee8]{cursor:pointer;height:auto;margin-bottom:10px}.form-control.danger\u003e.checkbox-label[data-v-d09dfee8],.form-control.danger[data-v-d09dfee8],.form-control.success\u003e.checkbox-label[data-v-d09dfee8],.form-control.success[data-v-d09dfee8]{cursor:default}.disabled[data-v-d09dfee8]{opacity:.9}.radio-svg[data-v-d09dfee8]{height:1em;vertical-align:text-top;width:1em}.checkbox[data-v-d09dfee8]{height:1em;margin-right:5px;vertical-align:middle;width:1em}.row[data-v-d09dfee8]{align-items:center;margin:.2rem 0 0}input.form-control[data-v-d09dfee8]{cursor:text;height:auto;margin-bottom:0;min-height:20px;width:50%}.blanks-keywords[data-v-d09dfee8],input.form-control[data-v-d09dfee8]:disabled{margin-bottom:.5rem}.blanks-form-control[data-v-d09dfee8]{border:none;cursor:default}.blanks-cross[data-v-d09dfee8]{margin-left:3px;margin-right:3px}.fa-hashtag[data-v-98afe086],.fa-key[data-v-98afe086]{padding-right:.2em}.mark[data-v-98afe086]{padding:0!important}.heading[data-v-98afe086]{padding:0 0 .1rem .2rem}.heading-text[data-v-98afe086]{display:inline-block;vertical-align:top;white-space:normal;width:92%;word-break:break-word}.keyword-text[data-v-98afe086]{font-size:smaller}.page-title[data-v-98afe086]{font-size:1.05rem;font-weight:700}.page-headings-separator[data-v-98afe086]{margin:.2rem 0}.dropdown[data-v-01e11c9b]{display:block}.form-control[data-v-01e11c9b]{max-width:25.4em;min-width:12.7em}@media screen and (max-width:878px) and (orientation:portrait){.form-control[data-v-01e11c9b]{max-width:16em;min-width:8em}}@media screen and (min-width:768px) and (max-width:878px) and (orientation:landscape){.form-control[data-v-01e11c9b]{max-width:18em;min-width:9em}}.table-active[data-v-01e11c9b]{background-color:rgba(0,0,0,.075)}.dropdown-menu-end[data-v-01e11c9b]{left:auto;right:0}.placeholder-div-hidden[data-v-01e11c9b]{border-bottom:0;border-top:0;height:0;overflow:hidden;padding-bottom:0;padding-top:0;visibility:hidden}.search-dropdown-menu{max-height:30em;min-width:30em;overflow-y:scroll}.dropdown-menu\u003eli\u003ea{cursor:pointer}@media screen and (max-width:768px){.search-dropdown-menu{max-height:30em;min-width:90vw;overflow-y:scroll}.dropdown-menu.search-dropdown-menu{position:absolute}}.tab-pane\u003ehr[data-v-661c1b61]{margin:0}.printable-tab-header[data-v-661c1b61],.tab-pane-hide[data-v-661c1b61]{display:none}@media print{.printable-tab-header[data-v-661c1b61]{border-bottom:1px solid #dee2e6;display:flex;margin-bottom:15px}.printable-tab-header\u003ediv[data-v-661c1b61]{margin-bottom:-2px}.printable-tab-pane[data-v-661c1b61]{display:block;padding:10px}}.nav-tabs[data-v-a785351c]{margin-bottom:15px}.printable-tab-group-header[data-v-a785351c]{display:none}@media print{.printable-tab-group[data-v-a785351c]{border:1px solid #dee2e6;border-radius:5px;margin:10px 0;padding:10px}.printable-tab-group-header[data-v-a785351c]{display:block;margin-bottom:10px;text-decoration:underline}}.nav-tabs[data-v-70a68808]{margin-bottom:15px}.tab-content[data-v-70a68808]{margin-bottom:1.5rem}@media print{.printable-tabs[data-v-70a68808]{border:1px solid #dee2e6;border-radius:5px;padding:20px}}.thumb-wrapper{display:inline-block;overflow:hidden;position:relative;text-align:center;vertical-align:middle}.thumb-circle{border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.thumb-image{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%)}.site-nav-root a.current{color:#0072ec}.site-nav-list{list-style-type:none;padding-left:0}.site-nav-default-list-item{cursor:pointer;display:flex;transition:background-color .08s}.site-nav-custom-list-item,.site-nav-default-list-item{color:#454545;padding:.5rem 0 0 2.8rem}.site-nav-list-item-0{font-size:1.2em;font-weight:500;padding:.5rem 0 .5rem .8rem}.site-nav-list-item-1{font-size:1.03em;padding:.4rem 0 .4rem 1.3rem}.site-nav-list-item-2{font-size:.89em;padding:.3rem 0 .3rem 1.8rem}.site-nav-list-item-3{font-size:.76em;padding:.2rem 0 .2rem 2.4rem}.site-nav-default-list-item:hover{background-color:rgba(214,233,255,.35)}.site-nav-default-list-item a{color:#454545;display:inline-block;height:100%}.site-nav-default-list-item:hover a{color:#000;text-decoration:none}.site-nav-dropdown-btn-container{align-content:center;display:flex;height:1.5em;justify-content:center;margin:0 .75rem 0 auto;width:2rem}.site-nav-dropdown-btn-icon{align-self:center;border-radius:1rem;display:inline-block;height:1.5em;padding:0;text-align:center;transform:rotate(0deg);-webkit-transform:rotate(0deg);transition:.4s;-webkit-transition:.4s;vertical-align:baseline;width:1.5em}.site-nav-dropdown-btn-icon:hover{background-color:#d8e3fb}.site-nav-rotate-icon{color:#4c7ff1;transform:rotate(-180deg);-webkit-transform:rotate(-180deg)}.site-nav-dropdown-container{background:transparent;max-height:0;overflow:hidden;transition:max-height .15s ease-out;-webkit-transition:max-height .15s ease-out}.site-nav-dropdown-container-open{max-height:1000px;transition:max-height .25s ease-in;-webkit-transition:max-height .25s ease-in}.nav-menu[data-v-1a3e7aee]{display:none;overflow-y:auto;padding:0 10px 20px;position:absolute;top:100%}.nav-menu-open[data-v-1a3e7aee]{background:#fff;clear:both;display:block!important;width:100%!important}.mb-mobile-nav[data-v-e6005420]{border:none!important;display:block!important;margin:0!important;max-width:100%!important;padding:10px!important;width:100%!important}.popover-container{max-height:50vh;max-width:276px;overflow:auto}.popover-body{font-size:.875rem}.v-popper{display:inline}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.9);font-size:.875rem;max-width:200px;padding:4px 8px;text-align:center}.modal{display:block}.modal-zoom{opacity:0;-webkit-transform:scale(.1);-moz-transform:scale(.1);-ms-transform:scale(.1);transform:scale(.1)}.modal-zoom,.modal-zoom-show{-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}.modal-zoom-show{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.scroll-top-button{bottom:20px;cursor:pointer;display:none;opacity:.4;position:fixed;right:30px;transition-duration:.25s;transition-property:opacity;z-index:99}.scroll-top-button.lighten{opacity:.15}@media (hover:hover){.scroll-top-button:hover{opacity:.7}}.scroll-top-button:active{opacity:1}:root{--sticky-header-height:0}a{text-decoration:none}blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;padding:0 1rem}code{background:#f8f8f8;border-radius:3px;padding:.2em .4em;word-break:normal}mark code{background:#ffffffd4}pre.hljs\u003ecode{background:none}pre\u003ecode.hljs{-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:5px;counter-reset:line;width:100%}pre\u003ecode.hljs[heading]{border-top-right-radius:0}.code-block{position:relative}.code-block-heading{border-radius:6px 6px 0 0;float:right;font-size:85%;line-height:1;margin-top:5px;max-width:85%;overflow-wrap:break-word;padding:.25em .4em;text-align:right}.inline-markdown-heading{line-height:1.5}.code-block-content{clear:both;display:block}@media print{code.hljs.inline,pre\u003ecode.hljs{background:#f8f8ff;color:#333}code.hljs.inline{border:.5px solid #d4d4d4}code span.highlighted{background:#e6e6fa}}kbd{background-color:#fafbfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5;color:#444d56}.btn:active,.btn:focus{box-shadow:none!important;outline:none!important}code.hljs.inline{display:initial;padding:.2em .4em}.markbind-table{width:auto}.radio-list-item,.task-list-item{list-style-type:none;margin:0 0 0 -1.2em}.radio-list-item label{font-weight:inherit}.table-striped\u003etbody\u003etr:nth-of-type(2n),.table-striped\u003ethead{background-color:#fff}header[sticky]{position:sticky;top:0;transition:transform .3s ease-in-out;width:100%;z-index:1001}header[sticky].hide-header{transform:translateY(calc(var(--sticky-header-height)*-1))}span.anchor{position:relative;top:calc(var(--sticky-header-height)*-1 - 1rem)}#app{display:flex;flex-direction:column;min-height:100vh}footer{background-color:#f5f5f5;color:dimgrey;padding:10px 0}.dimmed{color:#777}.large{font-size:125%}.small{font-size:80%}.underline{text-decoration:underline}.mkb-text-red{color:red!important}.mkb-text-green{color:green!important}.mkb-text-blue{color:blue!important}.mkb-text-cyan{color:cyan!important}.mkb-text-magenta{color:#f0f!important}.mkb-text-yellow{color:#ff0!important}.mkb-text-black{color:#000!important}.mkb-text-white{color:#fff!important}@media (max-width:767.98px){.dropdown-menu\u003eli\u003ea{white-space:normal}.navbar-nav .open .dropdown-menu{background-color:#fff}}li.footnote-item:target{background-color:#eee}.hljs:not(.inline)\u003espan{display:block}.hljs:not(.inline).line-numbers\u003espan{padding:0 .5em 0 3.5em;position:relative}.hljs:not(.inline).line-numbers\u003espan:before{border-right:1px solid #ddd;color:#888;content:counter(line);counter-increment:line;display:inline-block;height:100%;left:0;margin-right:.5em;padding-right:.5em;position:absolute;text-align:right;top:0;width:3em}.trigger{border-bottom:1px dotted}.trigger-click{border-bottom:1px dashed;cursor:pointer}.trigger-click:focus{outline:none}pre{display:flex;position:relative}button.function-btn{border:1px solid #d7dadc;border-radius:5px;color:#a9a9a9;cursor:pointer;display:none;margin:.17rem;padding:.35rem;position:absolute;right:0;text-align:center;white-space:nowrap}button.function-btn+button.function-btn{right:36px}pre:hover\u003e.function-btn-container\u003ebutton.function-btn{display:block}.function-btn:hover{color:gray;transition:all .5s ease}.function-btn-body{align-items:center;display:flex}.function-btn svg{fill:currentColor}code.wrap{word-wrap:break-word;white-space:pre-wrap}.octicon{height:1em;width:1em}hr{background-color:transparent;border-top:1px solid rgba(0,0,0,.1);opacity:1}hr.dotted{border-top-style:dotted;border-top-width:.1rem}hr.double{border-top-style:double;border-top-width:.2rem}hr.dashed{border-top-style:dashed;border-top-width:.1rem}hr.thick{border-top-width:.15rem}hr.thick-1{border-top-width:.25rem}hr.thick-2{border-top-width:.5rem}hr.thick-3{border-top-width:.75rem}ol,ul{padding-left:1.5rem}h1,h2,h3,h4,h5,h6{margin-bottom:1rem;scroll-margin-top:var(--sticky-header-height)}.block-embed{overflow-x:auto;position:relative;width:100%}.block-embed iframe{height:100%;left:0;position:absolute;top:0;width:100%}#mb-page-nav{padding:.8rem 12px 0}#mb-page-nav a:link,#mb-page-nav a:visited{color:#9b9b9b;text-decoration:none}#mb-page-nav a:hover{color:#000}#mb-page-nav a.active{background-color:transparent;color:#000}.page-nav-title{color:#000;display:block;padding-left:.5rem;white-space:inherit}.nested{margin-left:5%}.no-flex-wrap{flex-wrap:nowrap}@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_AMS-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_AMS-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_AMS-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Caligraphic-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_Caligraphic-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_Caligraphic-Bold.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Caligraphic-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Caligraphic-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Caligraphic-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Fraktur-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_Fraktur-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_Fraktur-Bold.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Fraktur-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Fraktur-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Fraktur-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Main-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_Main-Bold.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Main-BoldItalic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-BoldItalic.woff) format(\"woff\"),url(../fonts/KaTeX_Main-BoldItalic.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Main-Italic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-Italic.woff) format(\"woff\"),url(../fonts/KaTeX_Main-Italic.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Main-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Main-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Math-BoldItalic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Math-BoldItalic.woff) format(\"woff\"),url(../fonts/KaTeX_Math-BoldItalic.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Math-Italic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Math-Italic.woff) format(\"woff\"),url(../fonts/KaTeX_Math-Italic.ttf) format(\"truetype\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:normal;font-weight:700;src:url(../fonts/KaTeX_SansSerif-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_SansSerif-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_SansSerif-Bold.ttf) format(\"truetype\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:italic;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Italic.woff2) format(\"woff2\"),url(../fonts/KaTeX_SansSerif-Italic.woff) format(\"woff\"),url(../fonts/KaTeX_SansSerif-Italic.ttf) format(\"truetype\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:normal;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_SansSerif-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_SansSerif-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Script-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Script-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Script-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size1-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size1-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size1-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size2-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size2-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size2-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size3-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size3-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size3-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size4-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size4-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size4-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Typewriter-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Typewriter-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Typewriter-Regular.ttf) format(\"truetype\")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:\"0.15.6\"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html\u003e.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist\u003espan{display:block;height:0;position:relative}.katex .vlist\u003espan\u003espan{display:inline-block}.katex .vlist\u003espan\u003e.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac\u003espan\u003espan{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap\u003e.inner,.katex .llap\u003e.inner,.katex .rlap\u003e.inner{position:absolute}.katex .clap\u003e.fix,.katex .llap\u003e.fix,.katex .rlap\u003e.fix{display:inline-block}.katex .llap\u003e.inner{right:0}.katex .clap\u003e.inner,.katex .rlap\u003e.inner{left:0}.katex .clap\u003e.inner\u003espan{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt\u003e.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1\u003espan{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4\u003espan{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent\u003e.vlist-t,.katex .op-limits\u003e.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c\u003e.vlist-t{text-align:center}.katex .mtable .col-align-l\u003e.vlist-t{text-align:left}.katex .mtable .col-align-r\u003e.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:\"\"}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:\"(\" counter(katexEqnNo) \")\";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:\"(\" counter(mmlEqnNo) \")\";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display\u003e.katex{display:block;text-align:center;white-space:nowrap}.katex-display\u003e.katex\u003e.katex-html{display:block;position:relative}.katex-display\u003e.katex\u003e.katex-html\u003e.tag{position:absolute;right:0}.katex-display.leqno\u003e.katex\u003e.katex-html\u003e.tag{left:0;right:auto}.katex-display.fleqn\u003e.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.katex{font-size:1em!important}eq{display:inline-block}eqn{display:block}section.eqno{align-content:space-between;align-items:center;display:flex;flex-direction:row}section.eqno\u003eeqn{margin-left:3em;width:100%}section.eqno\u003espan{text-align:right;width:3em}"}],"authorContributionMap":{"jingting1412":1}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/css/octicons.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":".octicon {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" vertical-align: text-top;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" fill: currentColor;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" overflow: visible;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":6}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/fontawesome/css/all.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" * Copyright 2023 Fonticons, Inc."},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" */"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":".fa{font-family:var(--fa-style-family,\"Font Awesome 6 Free\");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:\"Font Awesome 6 Free\"}.fa-brands,.fab{font-family:\"Font Awesome 6 Brands\"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul\u003eli{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":".fa-0:before{content:\"\\30\"}.fa-1:before{content:\"\\31\"}.fa-2:before{content:\"\\32\"}.fa-3:before{content:\"\\33\"}.fa-4:before{content:\"\\34\"}.fa-5:before{content:\"\\35\"}.fa-6:before{content:\"\\36\"}.fa-7:before{content:\"\\37\"}.fa-8:before{content:\"\\38\"}.fa-9:before{content:\"\\39\"}.fa-fill-drip:before{content:\"\\f576\"}.fa-arrows-to-circle:before{content:\"\\e4bd\"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:\"\\f138\"}.fa-at:before{content:\"\\40\"}.fa-trash-alt:before,.fa-trash-can:before{content:\"\\f2ed\"}.fa-text-height:before{content:\"\\f034\"}.fa-user-times:before,.fa-user-xmark:before{content:\"\\f235\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-comment-alt:before,.fa-message:before{content:\"\\f27a\"}.fa-info:before{content:\"\\f129\"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:\"\\f422\"}.fa-explosion:before{content:\"\\e4e9\"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:\"\\f15c\"}.fa-wave-square:before{content:\"\\f83e\"}.fa-ring:before{content:\"\\f70b\"}.fa-building-un:before{content:\"\\e4d9\"}.fa-dice-three:before{content:\"\\f527\"}.fa-calendar-alt:before,.fa-calendar-days:before{content:\"\\f073\"}.fa-anchor-circle-check:before{content:\"\\e4aa\"}.fa-building-circle-arrow-right:before{content:\"\\e4d1\"}.fa-volleyball-ball:before,.fa-volleyball:before{content:\"\\f45f\"}.fa-arrows-up-to-line:before{content:\"\\e4c2\"}.fa-sort-desc:before,.fa-sort-down:before{content:\"\\f0dd\"}.fa-circle-minus:before,.fa-minus-circle:before{content:\"\\f056\"}.fa-door-open:before{content:\"\\f52b\"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:\"\\f2f5\"}.fa-atom:before{content:\"\\f5d2\"}.fa-soap:before{content:\"\\e06e\"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:\"\\f86d\"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:\"\\f539\"}.fa-bridge-circle-check:before{content:\"\\e4c9\"}.fa-pump-medical:before{content:\"\\e06a\"}.fa-fingerprint:before{content:\"\\f577\"}.fa-hand-point-right:before{content:\"\\f0a4\"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:\"\\f689\"}.fa-forward-step:before,.fa-step-forward:before{content:\"\\f051\"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:\"\\f5b8\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-football-ball:before,.fa-football:before{content:\"\\f44e\"}.fa-school-circle-exclamation:before{content:\"\\e56c\"}.fa-crop:before{content:\"\\f125\"}.fa-angle-double-down:before,.fa-angles-down:before{content:\"\\f103\"}.fa-users-rectangle:before{content:\"\\e594\"}.fa-people-roof:before{content:\"\\e537\"}.fa-people-line:before{content:\"\\e534\"}.fa-beer-mug-empty:before,.fa-beer:before{content:\"\\f0fc\"}.fa-diagram-predecessor:before{content:\"\\e477\"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:\"\\f176\"}.fa-burn:before,.fa-fire-flame-simple:before{content:\"\\f46a\"}.fa-male:before,.fa-person:before{content:\"\\f183\"}.fa-laptop:before{content:\"\\f109\"}.fa-file-csv:before{content:\"\\f6dd\"}.fa-menorah:before{content:\"\\f676\"}.fa-truck-plane:before{content:\"\\e58f\"}.fa-record-vinyl:before{content:\"\\f8d9\"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:\"\\f587\"}.fa-bong:before{content:\"\\f55c\"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:\"\\f67b\"}.fa-arrow-down-up-across-line:before{content:\"\\e4af\"}.fa-spoon:before,.fa-utensil-spoon:before{content:\"\\f2e5\"}.fa-jar-wheat:before{content:\"\\e517\"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:\"\\f674\"}.fa-file-circle-exclamation:before{content:\"\\e4eb\"}.fa-circle-h:before,.fa-hospital-symbol:before{content:\"\\f47e\"}.fa-pager:before{content:\"\\f815\"}.fa-address-book:before,.fa-contact-book:before{content:\"\\f2b9\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-k:before{content:\"\\4b\"}.fa-landmark-flag:before{content:\"\\e51c\"}.fa-pencil-alt:before,.fa-pencil:before{content:\"\\f303\"}.fa-backward:before{content:\"\\f04a\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-comments:before{content:\"\\f086\"}.fa-file-clipboard:before,.fa-paste:before{content:\"\\f0ea\"}.fa-code-pull-request:before{content:\"\\e13c\"}.fa-clipboard-list:before{content:\"\\f46d\"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:\"\\f4de\"}.fa-user-check:before{content:\"\\f4fc\"}.fa-vial-virus:before{content:\"\\e597\"}.fa-sheet-plastic:before{content:\"\\e571\"}.fa-blog:before{content:\"\\f781\"}.fa-user-ninja:before{content:\"\\f504\"}.fa-person-arrow-up-from-line:before{content:\"\\e539\"}.fa-scroll-torah:before,.fa-torah:before{content:\"\\f6a0\"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:\"\\f458\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-archive:before,.fa-box-archive:before{content:\"\\f187\"}.fa-person-drowning:before{content:\"\\e545\"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:\"\\f886\"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:\"\\f58a\"}.fa-spray-can:before{content:\"\\f5bd\"}.fa-truck-monster:before{content:\"\\f63b\"}.fa-w:before{content:\"\\57\"}.fa-earth-africa:before,.fa-globe-africa:before{content:\"\\f57c\"}.fa-rainbow:before{content:\"\\f75b\"}.fa-circle-notch:before{content:\"\\f1ce\"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:\"\\f3fa\"}.fa-paw:before{content:\"\\f1b0\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-trowel-bricks:before{content:\"\\e58a\"}.fa-face-flushed:before,.fa-flushed:before{content:\"\\f579\"}.fa-hospital-user:before{content:\"\\f80d\"}.fa-tent-arrow-left-right:before{content:\"\\e57f\"}.fa-gavel:before,.fa-legal:before{content:\"\\f0e3\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-box-tissue:before{content:\"\\e05b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:\"\\f562\"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:\"\\f5ae\"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:\"\\e068\"}.fa-mars-and-venus-burst:before{content:\"\\e523\"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:\"\\f152\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-sun-plant-wilt:before{content:\"\\e57a\"}.fa-toilets-portable:before{content:\"\\e584\"}.fa-hockey-puck:before{content:\"\\f453\"}.fa-table:before{content:\"\\f0ce\"}.fa-magnifying-glass-arrow-right:before{content:\"\\e521\"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:\"\\f566\"}.fa-users-slash:before{content:\"\\e073\"}.fa-clover:before{content:\"\\e139\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f3e5\"}.fa-star-and-crescent:before{content:\"\\f699\"}.fa-house-fire:before{content:\"\\e50c\"}.fa-minus-square:before,.fa-square-minus:before{content:\"\\f146\"}.fa-helicopter:before{content:\"\\f533\"}.fa-compass:before{content:\"\\f14e\"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:\"\\f150\"}.fa-file-circle-question:before{content:\"\\e4ef\"}.fa-laptop-code:before{content:\"\\f5fc\"}.fa-swatchbook:before{content:\"\\f5c3\"}.fa-prescription-bottle:before{content:\"\\f485\"}.fa-bars:before,.fa-navicon:before{content:\"\\f0c9\"}.fa-people-group:before{content:\"\\e533\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-heart-broken:before,.fa-heart-crack:before{content:\"\\f7a9\"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:\"\\f360\"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:\"\\f597\"}.fa-film:before{content:\"\\f008\"}.fa-ruler-horizontal:before{content:\"\\f547\"}.fa-people-robbery:before{content:\"\\e536\"}.fa-lightbulb:before{content:\"\\f0eb\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-school-circle-xmark:before{content:\"\\e56d\"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:\"\\f08b\"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:\"\\f13a\"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:\"\\f13e\"}.fa-cloud-showers-heavy:before{content:\"\\f740\"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:\"\\f58f\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:\"\\f4b9\"}.fa-memory:before{content:\"\\f538\"}.fa-road-spikes:before{content:\"\\e568\"}.fa-fire-burner:before{content:\"\\e4f1\"}.fa-flag:before{content:\"\\f024\"}.fa-hanukiah:before{content:\"\\f6e6\"}.fa-feather:before{content:\"\\f52d\"}.fa-volume-down:before,.fa-volume-low:before{content:\"\\f027\"}.fa-comment-slash:before{content:\"\\f4b3\"}.fa-cloud-sun-rain:before{content:\"\\f743\"}.fa-compress:before{content:\"\\f066\"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:\"\\e2cd\"}.fa-ankh:before{content:\"\\f644\"}.fa-hands-holding-child:before{content:\"\\e4fa\"}.fa-asterisk:before{content:\"\\2a\"}.fa-check-square:before,.fa-square-check:before{content:\"\\f14a\"}.fa-peseta-sign:before{content:\"\\e221\"}.fa-header:before,.fa-heading:before{content:\"\\f1dc\"}.fa-ghost:before{content:\"\\f6e2\"}.fa-list-squares:before,.fa-list:before{content:\"\\f03a\"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:\"\\f87b\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-circle-dot:before,.fa-dot-circle:before{content:\"\\f192\"}.fa-dizzy:before,.fa-face-dizzy:before{content:\"\\f567\"}.fa-egg:before{content:\"\\f7fb\"}.fa-house-medical-circle-xmark:before{content:\"\\e513\"}.fa-campground:before{content:\"\\f6bb\"}.fa-folder-plus:before{content:\"\\f65e\"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:\"\\f1e3\"}.fa-paint-brush:before,.fa-paintbrush:before{content:\"\\f1fc\"}.fa-lock:before{content:\"\\f023\"}.fa-gas-pump:before{content:\"\\f52f\"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:\"\\f593\"}.fa-map-location:before,.fa-map-marked:before{content:\"\\f59f\"}.fa-house-flood-water:before{content:\"\\e50e\"}.fa-tree:before{content:\"\\f1bb\"}.fa-bridge-lock:before{content:\"\\e4cc\"}.fa-sack-dollar:before{content:\"\\f81d\"}.fa-edit:before,.fa-pen-to-square:before{content:\"\\f044\"}.fa-car-side:before{content:\"\\f5e4\"}.fa-share-alt:before,.fa-share-nodes:before{content:\"\\f1e0\"}.fa-heart-circle-minus:before{content:\"\\e4ff\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-microscope:before{content:\"\\f610\"}.fa-sink:before{content:\"\\e06d\"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:\"\\f290\"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:\"\\f881\"}.fa-mitten:before{content:\"\\f7b5\"}.fa-person-rays:before{content:\"\\e54d\"}.fa-users:before{content:\"\\f0c0\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-flask-vial:before{content:\"\\e4f3\"}.fa-hand-paper:before,.fa-hand:before{content:\"\\f256\"}.fa-om:before{content:\"\\f679\"}.fa-worm:before{content:\"\\e599\"}.fa-house-circle-xmark:before{content:\"\\e50b\"}.fa-plug:before{content:\"\\f1e6\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-hand-spock:before{content:\"\\f259\"}.fa-stopwatch:before{content:\"\\f2f2\"}.fa-face-kiss:before,.fa-kiss:before{content:\"\\f596\"}.fa-bridge-circle-xmark:before{content:\"\\e4cb\"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:\"\\f589\"}.fa-chess-bishop:before{content:\"\\f43a\"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:\"\\f58c\"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:\"\\f2a4\"}.fa-road-circle-check:before{content:\"\\e564\"}.fa-dice-five:before{content:\"\\f523\"}.fa-rss-square:before,.fa-square-rss:before{content:\"\\f143\"}.fa-land-mine-on:before{content:\"\\e51b\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-stamp:before{content:\"\\f5bf\"}.fa-stairs:before{content:\"\\e289\"}.fa-i:before{content:\"\\49\"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:\"\\f6f2\"}.fa-pills:before{content:\"\\f484\"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:\"\\f581\"}.fa-tooth:before{content:\"\\f5c9\"}.fa-v:before{content:\"\\56\"}.fa-bangladeshi-taka-sign:before{content:\"\\e2e6\"}.fa-bicycle:before{content:\"\\f206\"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:\"\\e579\"}.fa-head-side-cough-slash:before{content:\"\\e062\"}.fa-ambulance:before,.fa-truck-medical:before{content:\"\\f0f9\"}.fa-wheat-awn-circle-exclamation:before{content:\"\\e598\"}.fa-snowman:before{content:\"\\f7d0\"}.fa-mortar-pestle:before{content:\"\\f5a7\"}.fa-road-barrier:before{content:\"\\e562\"}.fa-school:before{content:\"\\f549\"}.fa-igloo:before{content:\"\\f7ae\"}.fa-joint:before{content:\"\\f595\"}.fa-angle-right:before{content:\"\\f105\"}.fa-horse:before{content:\"\\f6f0\"}.fa-q:before{content:\"\\51\"}.fa-g:before{content:\"\\47\"}.fa-notes-medical:before{content:\"\\f481\"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-dong-sign:before{content:\"\\e169\"}.fa-capsules:before{content:\"\\f46b\"}.fa-poo-bolt:before,.fa-poo-storm:before{content:\"\\f75a\"}.fa-face-frown-open:before,.fa-frown-open:before{content:\"\\f57a\"}.fa-hand-point-up:before{content:\"\\f0a6\"}.fa-money-bill:before{content:\"\\f0d6\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-align-justify:before{content:\"\\f039\"}.fa-umbrella-beach:before{content:\"\\f5ca\"}.fa-helmet-un:before{content:\"\\e503\"}.fa-bullseye:before{content:\"\\f140\"}.fa-bacon:before{content:\"\\f7e5\"}.fa-hand-point-down:before{content:\"\\f0a7\"}.fa-arrow-up-from-bracket:before{content:\"\\e09a\"}.fa-folder-blank:before,.fa-folder:before{content:\"\\f07b\"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:\"\\f478\"}.fa-radiation:before{content:\"\\f7b9\"}.fa-chart-simple:before{content:\"\\e473\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-vial:before{content:\"\\f492\"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:\"\\f624\"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:\"\\e2ca\"}.fa-e:before{content:\"\\45\"}.fa-pen-alt:before,.fa-pen-clip:before{content:\"\\f305\"}.fa-bridge-circle-exclamation:before{content:\"\\e4ca\"}.fa-user:before{content:\"\\f007\"}.fa-school-circle-check:before{content:\"\\e56b\"}.fa-dumpster:before{content:\"\\f793\"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:\"\\f5b6\"}.fa-building-user:before{content:\"\\e4da\"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:\"\\f191\"}.fa-highlighter:before{content:\"\\f591\"}.fa-key:before{content:\"\\f084\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-globe:before{content:\"\\f0ac\"}.fa-synagogue:before{content:\"\\f69b\"}.fa-person-half-dress:before{content:\"\\e548\"}.fa-road-bridge:before{content:\"\\e563\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-c:before{content:\"\\43\"}.fa-tablet-button:before{content:\"\\f10a\"}.fa-building-lock:before{content:\"\\e4d6\"}.fa-pizza-slice:before{content:\"\\f818\"}.fa-money-bill-wave:before{content:\"\\f53a\"}.fa-area-chart:before,.fa-chart-area:before{content:\"\\f1fe\"}.fa-house-flag:before{content:\"\\e50d\"}.fa-person-circle-minus:before{content:\"\\e540\"}.fa-ban:before,.fa-cancel:before{content:\"\\f05e\"}.fa-camera-rotate:before{content:\"\\e0d8\"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:\"\\f5d0\"}.fa-star:before{content:\"\\f005\"}.fa-repeat:before{content:\"\\f363\"}.fa-cross:before{content:\"\\f654\"}.fa-box:before{content:\"\\f466\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:\"\\f245\"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:\"\\f31e\"}.fa-charging-station:before{content:\"\\f5e7\"}.fa-shapes:before,.fa-triangle-circle-square:before{content:\"\\f61f\"}.fa-random:before,.fa-shuffle:before{content:\"\\f074\"}.fa-person-running:before,.fa-running:before{content:\"\\f70c\"}.fa-mobile-retro:before{content:\"\\e527\"}.fa-grip-lines-vertical:before{content:\"\\f7a5\"}.fa-spider:before{content:\"\\f717\"}.fa-hands-bound:before{content:\"\\e4f9\"}.fa-file-invoice-dollar:before{content:\"\\f571\"}.fa-plane-circle-exclamation:before{content:\"\\e556\"}.fa-x-ray:before{content:\"\\f497\"}.fa-spell-check:before{content:\"\\f891\"}.fa-slash:before{content:\"\\f715\"}.fa-computer-mouse:before,.fa-mouse:before{content:\"\\f8cc\"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:\"\\f090\"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:\"\\e070\"}.fa-server:before{content:\"\\f233\"}.fa-virus-covid-slash:before{content:\"\\e4a9\"}.fa-shop-lock:before{content:\"\\e4a5\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-blender-phone:before{content:\"\\f6b6\"}.fa-building-wheat:before{content:\"\\e4db\"}.fa-person-breastfeeding:before{content:\"\\e53a\"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:\"\\f2f6\"}.fa-venus:before{content:\"\\f221\"}.fa-passport:before{content:\"\\f5ab\"}.fa-heart-pulse:before,.fa-heartbeat:before{content:\"\\f21e\"}.fa-people-carry-box:before,.fa-people-carry:before{content:\"\\f4ce\"}.fa-temperature-high:before{content:\"\\f769\"}.fa-microchip:before{content:\"\\f2db\"}.fa-crown:before{content:\"\\f521\"}.fa-weight-hanging:before{content:\"\\f5cd\"}.fa-xmarks-lines:before{content:\"\\e59a\"}.fa-file-prescription:before{content:\"\\f572\"}.fa-weight-scale:before,.fa-weight:before{content:\"\\f496\"}.fa-user-friends:before,.fa-user-group:before{content:\"\\f500\"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:\"\\f15e\"}.fa-chess-knight:before{content:\"\\f441\"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:\"\\f59b\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:\"\\f0aa\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-person-walking:before,.fa-walking:before{content:\"\\f554\"}.fa-l:before{content:\"\\4c\"}.fa-fire:before{content:\"\\f06d\"}.fa-bed-pulse:before,.fa-procedures:before{content:\"\\f487\"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:\"\\f197\"}.fa-face-laugh:before,.fa-laugh:before{content:\"\\f599\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-heart-circle-plus:before{content:\"\\e500\"}.fa-code-fork:before{content:\"\\e13b\"}.fa-city:before{content:\"\\f64f\"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:\"\\f3c9\"}.fa-pepper-hot:before{content:\"\\f816\"}.fa-unlock:before{content:\"\\f09c\"}.fa-colon-sign:before{content:\"\\e140\"}.fa-headset:before{content:\"\\f590\"}.fa-store-slash:before{content:\"\\e071\"}.fa-road-circle-xmark:before{content:\"\\e566\"}.fa-user-minus:before{content:\"\\f503\"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:\"\\f79f\"}.fa-clipboard:before{content:\"\\f328\"}.fa-house-circle-exclamation:before{content:\"\\e50a\"}.fa-file-arrow-up:before,.fa-file-upload:before{content:\"\\f574\"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:\"\\f1eb\"}.fa-bath:before,.fa-bathtub:before{content:\"\\f2cd\"}.fa-underline:before{content:\"\\f0cd\"}.fa-user-edit:before,.fa-user-pen:before{content:\"\\f4ff\"}.fa-signature:before{content:\"\\f5b7\"}.fa-stroopwafel:before{content:\"\\f551\"}.fa-bold:before{content:\"\\f032\"}.fa-anchor-lock:before{content:\"\\e4ad\"}.fa-building-ngo:before{content:\"\\e4d7\"}.fa-manat-sign:before{content:\"\\e1d5\"}.fa-not-equal:before{content:\"\\f53e\"}.fa-border-style:before,.fa-border-top-left:before{content:\"\\f853\"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:\"\\f5a0\"}.fa-jedi:before{content:\"\\f669\"}.fa-poll:before,.fa-square-poll-vertical:before{content:\"\\f681\"}.fa-mug-hot:before{content:\"\\f7b6\"}.fa-battery-car:before,.fa-car-battery:before{content:\"\\f5df\"}.fa-gift:before{content:\"\\f06b\"}.fa-dice-two:before{content:\"\\f528\"}.fa-chess-queen:before{content:\"\\f445\"}.fa-glasses:before{content:\"\\f530\"}.fa-chess-board:before{content:\"\\f43c\"}.fa-building-circle-check:before{content:\"\\e4d2\"}.fa-person-chalkboard:before{content:\"\\e53d\"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:\"\\f22b\"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:\"\\f255\"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:\"\\f151\"}.fa-cloud-showers-water:before{content:\"\\e4e4\"}.fa-bar-chart:before,.fa-chart-bar:before{content:\"\\f080\"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:\"\\e05e\"}.fa-less-than-equal:before{content:\"\\f537\"}.fa-train:before{content:\"\\f238\"}.fa-eye-low-vision:before,.fa-low-vision:before{content:\"\\f2a8\"}.fa-crow:before{content:\"\\f520\"}.fa-sailboat:before{content:\"\\e445\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-plus-square:before,.fa-square-plus:before{content:\"\\f0fe\"}.fa-torii-gate:before{content:\"\\f6a1\"}.fa-frog:before{content:\"\\f52e\"}.fa-bucket:before{content:\"\\e4cf\"}.fa-image:before{content:\"\\f03e\"}.fa-microphone:before{content:\"\\f130\"}.fa-cow:before{content:\"\\f6c8\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-screwdriver:before{content:\"\\f54a\"}.fa-folder-closed:before{content:\"\\e185\"}.fa-house-tsunami:before{content:\"\\e515\"}.fa-square-nfi:before{content:\"\\e576\"}.fa-arrow-up-from-ground-water:before{content:\"\\e4b5\"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:\"\\f57b\"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:\"\\f2ea\"}.fa-columns:before,.fa-table-columns:before{content:\"\\f0db\"}.fa-lemon:before{content:\"\\f094\"}.fa-head-side-mask:before{content:\"\\e063\"}.fa-handshake:before{content:\"\\f2b5\"}.fa-gem:before{content:\"\\f3a5\"}.fa-dolly-box:before,.fa-dolly:before{content:\"\\f472\"}.fa-smoking:before{content:\"\\f48d\"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:\"\\f78c\"}.fa-monument:before{content:\"\\f5a6\"}.fa-snowplow:before{content:\"\\f7d2\"}.fa-angle-double-right:before,.fa-angles-right:before{content:\"\\f101\"}.fa-cannabis:before{content:\"\\f55f\"}.fa-circle-play:before,.fa-play-circle:before{content:\"\\f144\"}.fa-tablets:before{content:\"\\f490\"}.fa-ethernet:before{content:\"\\f796\"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:\"\\f153\"}.fa-chair:before{content:\"\\f6c0\"}.fa-check-circle:before,.fa-circle-check:before{content:\"\\f058\"}.fa-circle-stop:before,.fa-stop-circle:before{content:\"\\f28d\"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:\"\\f568\"}.fa-plate-wheat:before{content:\"\\e55a\"}.fa-icicles:before{content:\"\\f7ad\"}.fa-person-shelter:before{content:\"\\e54f\"}.fa-neuter:before{content:\"\\f22c\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-marker:before{content:\"\\f5a1\"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:\"\\f59a\"}.fa-helicopter-symbol:before{content:\"\\e502\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:\"\\f139\"}.fa-lari-sign:before{content:\"\\e1c8\"}.fa-volcano:before{content:\"\\f770\"}.fa-person-walking-dashed-line-arrow-right:before{content:\"\\e553\"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:\"\\f154\"}.fa-viruses:before{content:\"\\e076\"}.fa-square-person-confined:before{content:\"\\e577\"}.fa-user-tie:before{content:\"\\f508\"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:\"\\f175\"}.fa-tent-arrow-down-to-line:before{content:\"\\e57e\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-person-skating:before,.fa-skating:before{content:\"\\f7c5\"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:\"\\f662\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:\"\\f0ab\"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:\"\\f56f\"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:\"\\f14c\"}.fa-box-open:before{content:\"\\f49e\"}.fa-scroll:before{content:\"\\f70e\"}.fa-spa:before{content:\"\\f5bb\"}.fa-location-pin-lock:before{content:\"\\e51f\"}.fa-pause:before{content:\"\\f04c\"}.fa-hill-avalanche:before{content:\"\\e507\"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-registered:before{content:\"\\f25d\"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:\"\\f2bb\"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:\"\\f516\"}.fa-subscript:before{content:\"\\f12c\"}.fa-diamond-turn-right:before,.fa-directions:before{content:\"\\f5eb\"}.fa-burst:before{content:\"\\e4dc\"}.fa-house-laptop:before,.fa-laptop-house:before{content:\"\\e066\"}.fa-face-tired:before,.fa-tired:before{content:\"\\f5c8\"}.fa-money-bills:before{content:\"\\e1f3\"}.fa-smog:before{content:\"\\f75f\"}.fa-crutch:before{content:\"\\f7f7\"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-palette:before{content:\"\\f53f\"}.fa-arrows-turn-right:before{content:\"\\e4c0\"}.fa-vest:before{content:\"\\e085\"}.fa-ferry:before{content:\"\\e4ea\"}.fa-arrows-down-to-people:before{content:\"\\e4b9\"}.fa-seedling:before,.fa-sprout:before{content:\"\\f4d8\"}.fa-arrows-alt-h:before,.fa-left-right:before{content:\"\\f337\"}.fa-boxes-packing:before{content:\"\\e4c7\"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:\"\\f0a8\"}.fa-group-arrows-rotate:before{content:\"\\e4f6\"}.fa-bowl-food:before{content:\"\\e4c6\"}.fa-candy-cane:before{content:\"\\f786\"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:\"\\f160\"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:\"\\f76c\"}.fa-remove-format:before,.fa-text-slash:before{content:\"\\f87d\"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:\"\\f4da\"}.fa-file-word:before{content:\"\\f1c2\"}.fa-file-powerpoint:before{content:\"\\f1c4\"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:\"\\f07e\"}.fa-house-lock:before{content:\"\\e510\"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:\"\\f0ed\"}.fa-children:before{content:\"\\e4e1\"}.fa-blackboard:before,.fa-chalkboard:before{content:\"\\f51b\"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:\"\\f4fa\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:\"\\e05f\"}.fa-mattress-pillow:before{content:\"\\e525\"}.fa-guarani-sign:before{content:\"\\e19a\"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:\"\\f021\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-cruzeiro-sign:before{content:\"\\e152\"}.fa-greater-than-equal:before{content:\"\\f532\"}.fa-shield-alt:before,.fa-shield-halved:before{content:\"\\f3ed\"}.fa-atlas:before,.fa-book-atlas:before{content:\"\\f558\"}.fa-virus:before{content:\"\\e074\"}.fa-envelope-circle-check:before{content:\"\\e4e8\"}.fa-layer-group:before{content:\"\\f5fd\"}.fa-arrows-to-dot:before{content:\"\\e4be\"}.fa-archway:before{content:\"\\f557\"}.fa-heart-circle-check:before{content:\"\\e4fd\"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:\"\\f6f1\"}.fa-file-archive:before,.fa-file-zipper:before{content:\"\\f1c6\"}.fa-square:before{content:\"\\f0c8\"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:\"\\f000\"}.fa-couch:before{content:\"\\f4b8\"}.fa-cedi-sign:before{content:\"\\e0df\"}.fa-italic:before{content:\"\\f033\"}.fa-church:before{content:\"\\f51d\"}.fa-comments-dollar:before{content:\"\\f653\"}.fa-democrat:before{content:\"\\f747\"}.fa-z:before{content:\"\\5a\"}.fa-person-skiing:before,.fa-skiing:before{content:\"\\f7c9\"}.fa-road-lock:before{content:\"\\e567\"}.fa-a:before{content:\"\\41\"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:\"\\e03f\"}.fa-feather-alt:before,.fa-feather-pointed:before{content:\"\\f56b\"}.fa-p:before{content:\"\\50\"}.fa-snowflake:before{content:\"\\f2dc\"}.fa-newspaper:before{content:\"\\f1ea\"}.fa-ad:before,.fa-rectangle-ad:before{content:\"\\f641\"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:\"\\f0a9\"}.fa-filter-circle-xmark:before{content:\"\\e17b\"}.fa-locust:before{content:\"\\e520\"}.fa-sort:before,.fa-unsorted:before{content:\"\\f0dc\"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:\"\\f0cb\"}.fa-person-dress-burst:before{content:\"\\e544\"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:\"\\f53d\"}.fa-vector-square:before{content:\"\\f5cb\"}.fa-bread-slice:before{content:\"\\f7ec\"}.fa-language:before{content:\"\\f1ab\"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:\"\\f598\"}.fa-filter:before{content:\"\\f0b0\"}.fa-question:before{content:\"\\3f\"}.fa-file-signature:before{content:\"\\f573\"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:\"\\f0b2\"}.fa-house-chimney-user:before{content:\"\\e065\"}.fa-hand-holding-heart:before{content:\"\\f4be\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-money-check:before{content:\"\\f53c\"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:\"\\f5c0\"}.fa-code:before{content:\"\\f121\"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:\"\\f7a0\"}.fa-building-circle-exclamation:before{content:\"\\e4d3\"}.fa-magnifying-glass-chart:before{content:\"\\e522\"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:\"\\f08e\"}.fa-cubes-stacked:before{content:\"\\e4e6\"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:\"\\f159\"}.fa-virus-covid:before{content:\"\\e4a8\"}.fa-austral-sign:before{content:\"\\e0a9\"}.fa-f:before{content:\"\\46\"}.fa-leaf:before{content:\"\\f06c\"}.fa-road:before{content:\"\\f018\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-person-circle-plus:before{content:\"\\e541\"}.fa-chart-pie:before,.fa-pie-chart:before{content:\"\\f200\"}.fa-bolt-lightning:before{content:\"\\e0b7\"}.fa-sack-xmark:before{content:\"\\e56a\"}.fa-file-excel:before{content:\"\\f1c3\"}.fa-file-contract:before{content:\"\\f56c\"}.fa-fish-fins:before{content:\"\\e4f2\"}.fa-building-flag:before{content:\"\\e4d5\"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:\"\\f582\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-poop:before{content:\"\\f619\"}.fa-location-pin:before,.fa-map-marker:before{content:\"\\f041\"}.fa-kaaba:before{content:\"\\f66b\"}.fa-toilet-paper:before{content:\"\\f71e\"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:\"\\f807\"}.fa-eject:before{content:\"\\f052\"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:\"\\f35a\"}.fa-plane-circle-check:before{content:\"\\e555\"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:\"\\f5a5\"}.fa-object-group:before{content:\"\\f247\"}.fa-chart-line:before,.fa-line-chart:before{content:\"\\f201\"}.fa-mask-ventilator:before{content:\"\\e524\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-map-signs:before,.fa-signs-post:before{content:\"\\f277\"}.fa-cash-register:before{content:\"\\f788\"}.fa-person-circle-question:before{content:\"\\e542\"}.fa-h:before{content:\"\\48\"}.fa-tarp:before{content:\"\\e57b\"}.fa-screwdriver-wrench:before,.fa-tools:before{content:\"\\f7d9\"}.fa-arrows-to-eye:before{content:\"\\e4bf\"}.fa-plug-circle-bolt:before{content:\"\\e55b\"}.fa-heart:before{content:\"\\f004\"}.fa-mars-and-venus:before{content:\"\\f224\"}.fa-home-user:before,.fa-house-user:before{content:\"\\e1b0\"}.fa-dumpster-fire:before{content:\"\\f794\"}.fa-house-crack:before{content:\"\\e3b1\"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:\"\\f561\"}.fa-face-surprise:before,.fa-surprise:before{content:\"\\f5c2\"}.fa-bottle-water:before{content:\"\\e4c5\"}.fa-circle-pause:before,.fa-pause-circle:before{content:\"\\f28b\"}.fa-toilet-paper-slash:before{content:\"\\e072\"}.fa-apple-alt:before,.fa-apple-whole:before{content:\"\\f5d1\"}.fa-kitchen-set:before{content:\"\\e51a\"}.fa-r:before{content:\"\\52\"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-cube:before{content:\"\\f1b2\"}.fa-bitcoin-sign:before{content:\"\\e0b4\"}.fa-shield-dog:before{content:\"\\e573\"}.fa-solar-panel:before{content:\"\\f5ba\"}.fa-lock-open:before{content:\"\\f3c1\"}.fa-elevator:before{content:\"\\e16d\"}.fa-money-bill-transfer:before{content:\"\\e528\"}.fa-money-bill-trend-up:before{content:\"\\e529\"}.fa-house-flood-water-circle-arrow-right:before{content:\"\\e50f\"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:\"\\f682\"}.fa-circle:before{content:\"\\f111\"}.fa-backward-fast:before,.fa-fast-backward:before{content:\"\\f049\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-user-astronaut:before{content:\"\\f4fb\"}.fa-plane-slash:before{content:\"\\e069\"}.fa-trademark:before{content:\"\\f25c\"}.fa-basketball-ball:before,.fa-basketball:before{content:\"\\f434\"}.fa-satellite-dish:before{content:\"\\f7c0\"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:\"\\f35b\"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:\"\\f3cd\"}.fa-volume-high:before,.fa-volume-up:before{content:\"\\f028\"}.fa-users-rays:before{content:\"\\e593\"}.fa-wallet:before{content:\"\\f555\"}.fa-clipboard-check:before{content:\"\\f46c\"}.fa-file-audio:before{content:\"\\f1c7\"}.fa-burger:before,.fa-hamburger:before{content:\"\\f805\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-bugs:before{content:\"\\e4d0\"}.fa-rupee-sign:before,.fa-rupee:before{content:\"\\f156\"}.fa-file-image:before{content:\"\\f1c5\"}.fa-circle-question:before,.fa-question-circle:before{content:\"\\f059\"}.fa-plane-departure:before{content:\"\\f5b0\"}.fa-handshake-slash:before{content:\"\\e060\"}.fa-book-bookmark:before{content:\"\\e0bb\"}.fa-code-branch:before{content:\"\\f126\"}.fa-hat-cowboy:before{content:\"\\f8c0\"}.fa-bridge:before{content:\"\\e4c8\"}.fa-phone-alt:before,.fa-phone-flip:before{content:\"\\f879\"}.fa-truck-front:before{content:\"\\e2b7\"}.fa-cat:before{content:\"\\f6be\"}.fa-anchor-circle-exclamation:before{content:\"\\e4ab\"}.fa-truck-field:before{content:\"\\e58d\"}.fa-route:before{content:\"\\f4d7\"}.fa-clipboard-question:before{content:\"\\e4e3\"}.fa-panorama:before{content:\"\\e209\"}.fa-comment-medical:before{content:\"\\f7f5\"}.fa-teeth-open:before{content:\"\\f62f\"}.fa-file-circle-minus:before{content:\"\\e4ed\"}.fa-tags:before{content:\"\\f02c\"}.fa-wine-glass:before{content:\"\\f4e3\"}.fa-fast-forward:before,.fa-forward-fast:before{content:\"\\f050\"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:\"\\f5a4\"}.fa-parking:before,.fa-square-parking:before{content:\"\\f540\"}.fa-house-signal:before{content:\"\\e012\"}.fa-bars-progress:before,.fa-tasks-alt:before{content:\"\\f828\"}.fa-faucet-drip:before{content:\"\\e006\"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:\"\\f474\"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:\"\\f54d\"}.fa-terminal:before{content:\"\\f120\"}.fa-mobile-button:before{content:\"\\f10b\"}.fa-house-medical-flag:before{content:\"\\e514\"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:\"\\f291\"}.fa-tape:before{content:\"\\f4db\"}.fa-bus-alt:before,.fa-bus-simple:before{content:\"\\f55e\"}.fa-eye:before{content:\"\\f06e\"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:\"\\f5b3\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-person-military-to-person:before{content:\"\\e54c\"}.fa-file-shield:before{content:\"\\e4f0\"}.fa-user-slash:before{content:\"\\f506\"}.fa-pen:before{content:\"\\f304\"}.fa-tower-observation:before{content:\"\\e586\"}.fa-file-code:before{content:\"\\f1c9\"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:\"\\f012\"}.fa-bus:before{content:\"\\f207\"}.fa-heart-circle-xmark:before{content:\"\\e501\"}.fa-home-lg:before,.fa-house-chimney:before{content:\"\\e3af\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-face-frown:before,.fa-frown:before{content:\"\\f119\"}.fa-prescription:before{content:\"\\f5b1\"}.fa-shop:before,.fa-store-alt:before{content:\"\\f54f\"}.fa-floppy-disk:before,.fa-save:before{content:\"\\f0c7\"}.fa-vihara:before{content:\"\\f6a7\"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:\"\\f515\"}.fa-sort-asc:before,.fa-sort-up:before{content:\"\\f0de\"}.fa-comment-dots:before,.fa-commenting:before{content:\"\\f4ad\"}.fa-plant-wilt:before{content:\"\\e5aa\"}.fa-diamond:before{content:\"\\f219\"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:\"\\f585\"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:\"\\f4c0\"}.fa-bacterium:before{content:\"\\e05a\"}.fa-hand-pointer:before{content:\"\\f25a\"}.fa-drum-steelpan:before{content:\"\\f56a\"}.fa-hand-scissors:before{content:\"\\f257\"}.fa-hands-praying:before,.fa-praying-hands:before{content:\"\\f684\"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:\"\\f01e\"}.fa-biohazard:before{content:\"\\f780\"}.fa-location-crosshairs:before,.fa-location:before{content:\"\\f601\"}.fa-mars-double:before{content:\"\\f227\"}.fa-child-dress:before{content:\"\\e59c\"}.fa-users-between-lines:before{content:\"\\e591\"}.fa-lungs-virus:before{content:\"\\e067\"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:\"\\f588\"}.fa-phone:before{content:\"\\f095\"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:\"\\f273\"}.fa-child-reaching:before{content:\"\\e59d\"}.fa-head-side-virus:before{content:\"\\e064\"}.fa-user-cog:before,.fa-user-gear:before{content:\"\\f4fe\"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:\"\\f163\"}.fa-door-closed:before{content:\"\\f52a\"}.fa-shield-virus:before{content:\"\\e06c\"}.fa-dice-six:before{content:\"\\f526\"}.fa-mosquito-net:before{content:\"\\e52c\"}.fa-bridge-water:before{content:\"\\e4ce\"}.fa-person-booth:before{content:\"\\f756\"}.fa-text-width:before{content:\"\\f035\"}.fa-hat-wizard:before{content:\"\\f6e8\"}.fa-pen-fancy:before{content:\"\\f5ac\"}.fa-digging:before,.fa-person-digging:before{content:\"\\f85e\"}.fa-trash:before{content:\"\\f1f8\"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:\"\\f629\"}.fa-book-medical:before{content:\"\\f7e6\"}.fa-poo:before{content:\"\\f2fe\"}.fa-quote-right-alt:before,.fa-quote-right:before{content:\"\\f10e\"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:\"\\f553\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-divide:before{content:\"\\f529\"}.fa-tenge-sign:before,.fa-tenge:before{content:\"\\f7d7\"}.fa-headphones:before{content:\"\\f025\"}.fa-hands-holding:before{content:\"\\f4c2\"}.fa-hands-clapping:before{content:\"\\e1a8\"}.fa-republican:before{content:\"\\f75e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-person-circle-xmark:before{content:\"\\e543\"}.fa-ruler:before{content:\"\\f545\"}.fa-align-left:before{content:\"\\f036\"}.fa-dice-d6:before{content:\"\\f6d1\"}.fa-restroom:before{content:\"\\f7bd\"}.fa-j:before{content:\"\\4a\"}.fa-users-viewfinder:before{content:\"\\e595\"}.fa-file-video:before{content:\"\\f1c8\"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:\"\\f35d\"}.fa-table-cells:before,.fa-th:before{content:\"\\f00a\"}.fa-file-pdf:before{content:\"\\f1c1\"}.fa-bible:before,.fa-book-bible:before{content:\"\\f647\"}.fa-o:before{content:\"\\4f\"}.fa-medkit:before,.fa-suitcase-medical:before{content:\"\\f0fa\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-otter:before{content:\"\\f700\"}.fa-female:before,.fa-person-dress:before{content:\"\\f182\"}.fa-comment-dollar:before{content:\"\\f651\"}.fa-briefcase-clock:before,.fa-business-time:before{content:\"\\f64a\"}.fa-table-cells-large:before,.fa-th-large:before{content:\"\\f009\"}.fa-book-tanakh:before,.fa-tanakh:before{content:\"\\f827\"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:\"\\f2a0\"}.fa-hat-cowboy-side:before{content:\"\\f8c1\"}.fa-clipboard-user:before{content:\"\\f7f3\"}.fa-child:before{content:\"\\f1ae\"}.fa-lira-sign:before{content:\"\\f195\"}.fa-satellite:before{content:\"\\f7bf\"}.fa-plane-lock:before{content:\"\\e558\"}.fa-tag:before{content:\"\\f02b\"}.fa-comment:before{content:\"\\f075\"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:\"\\f1fd\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-angle-double-up:before,.fa-angles-up:before{content:\"\\f102\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-arrow-right-to-city:before{content:\"\\e4b3\"}.fa-ribbon:before{content:\"\\f4d6\"}.fa-lungs:before{content:\"\\f604\"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:\"\\f887\"}.fa-litecoin-sign:before{content:\"\\e1d3\"}.fa-border-none:before{content:\"\\f850\"}.fa-circle-nodes:before{content:\"\\e4e2\"}.fa-parachute-box:before{content:\"\\f4cd\"}.fa-indent:before{content:\"\\f03c\"}.fa-truck-field-un:before{content:\"\\e58e\"}.fa-hourglass-empty:before,.fa-hourglass:before{content:\"\\f254\"}.fa-mountain:before{content:\"\\f6fc\"}.fa-user-doctor:before,.fa-user-md:before{content:\"\\f0f0\"}.fa-circle-info:before,.fa-info-circle:before{content:\"\\f05a\"}.fa-cloud-meatball:before{content:\"\\f73b\"}.fa-camera-alt:before,.fa-camera:before{content:\"\\f030\"}.fa-square-virus:before{content:\"\\e578\"}.fa-meteor:before{content:\"\\f753\"}.fa-car-on:before{content:\"\\e4dd\"}.fa-sleigh:before{content:\"\\f7cc\"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:\"\\f162\"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:\"\\f4c1\"}.fa-water:before{content:\"\\f773\"}.fa-calendar-check:before{content:\"\\f274\"}.fa-braille:before{content:\"\\f2a1\"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:\"\\f486\"}.fa-landmark:before{content:\"\\f66f\"}.fa-truck:before{content:\"\\f0d1\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-person-cane:before{content:\"\\e53c\"}.fa-tent:before{content:\"\\e57d\"}.fa-vest-patches:before{content:\"\\e086\"}.fa-check-double:before{content:\"\\f560\"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:\"\\f15d\"}.fa-money-bill-wheat:before{content:\"\\e52a\"}.fa-cookie:before{content:\"\\f563\"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-hard-drive:before,.fa-hdd:before{content:\"\\f0a0\"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:\"\\f586\"}.fa-dumbbell:before{content:\"\\f44b\"}.fa-list-alt:before,.fa-rectangle-list:before{content:\"\\f022\"}.fa-tarp-droplet:before{content:\"\\e57c\"}.fa-house-medical-circle-check:before{content:\"\\e511\"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:\"\\f7ca\"}.fa-calendar-plus:before{content:\"\\f271\"}.fa-plane-arrival:before{content:\"\\f5af\"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:\"\\f359\"}.fa-subway:before,.fa-train-subway:before{content:\"\\f239\"}.fa-chart-gantt:before{content:\"\\e0e4\"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:\"\\e1bc\"}.fa-crop-alt:before,.fa-crop-simple:before{content:\"\\f565\"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:\"\\f3d1\"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:\"\\f30a\"}.fa-dna:before{content:\"\\f471\"}.fa-virus-slash:before{content:\"\\e075\"}.fa-minus:before,.fa-subtract:before{content:\"\\f068\"}.fa-chess:before{content:\"\\f439\"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:\"\\f177\"}.fa-plug-circle-check:before{content:\"\\e55c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-franc-sign:before{content:\"\\e18f\"}.fa-volume-off:before{content:\"\\f026\"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:\"\\f2a3\"}.fa-cog:before,.fa-gear:before{content:\"\\f013\"}.fa-droplet-slash:before,.fa-tint-slash:before{content:\"\\f5c7\"}.fa-mosque:before{content:\"\\f678\"}.fa-mosquito:before{content:\"\\e52b\"}.fa-star-of-david:before{content:\"\\f69a\"}.fa-person-military-rifle:before{content:\"\\e54b\"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:\"\\f07a\"}.fa-vials:before{content:\"\\f493\"}.fa-plug-circle-plus:before{content:\"\\e55f\"}.fa-place-of-worship:before{content:\"\\f67f\"}.fa-grip-vertical:before{content:\"\\f58e\"}.fa-arrow-turn-up:before,.fa-level-up:before{content:\"\\f148\"}.fa-u:before{content:\"\\55\"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:\"\\f698\"}.fa-clock-four:before,.fa-clock:before{content:\"\\f017\"}.fa-backward-step:before,.fa-step-backward:before{content:\"\\f048\"}.fa-pallet:before{content:\"\\f482\"}.fa-faucet:before{content:\"\\e005\"}.fa-baseball-bat-ball:before{content:\"\\f432\"}.fa-s:before{content:\"\\53\"}.fa-timeline:before{content:\"\\e29c\"}.fa-keyboard:before{content:\"\\f11c\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:\"\\f7f2\"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:\"\\f3cf\"}.fa-plane-up:before{content:\"\\e22d\"}.fa-piggy-bank:before{content:\"\\f4d3\"}.fa-battery-3:before,.fa-battery-half:before{content:\"\\f242\"}.fa-mountain-city:before{content:\"\\e52e\"}.fa-coins:before{content:\"\\f51e\"}.fa-khanda:before{content:\"\\f66d\"}.fa-sliders-h:before,.fa-sliders:before{content:\"\\f1de\"}.fa-folder-tree:before{content:\"\\f802\"}.fa-network-wired:before{content:\"\\f6ff\"}.fa-map-pin:before{content:\"\\f276\"}.fa-hamsa:before{content:\"\\f665\"}.fa-cent-sign:before{content:\"\\e3f5\"}.fa-flask:before{content:\"\\f0c3\"}.fa-person-pregnant:before{content:\"\\e31e\"}.fa-wand-sparkles:before{content:\"\\f72b\"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:\"\\f142\"}.fa-ticket:before{content:\"\\f145\"}.fa-power-off:before{content:\"\\f011\"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:\"\\f30b\"}.fa-flag-usa:before{content:\"\\f74d\"}.fa-laptop-file:before{content:\"\\e51d\"}.fa-teletype:before,.fa-tty:before{content:\"\\f1e4\"}.fa-diagram-next:before{content:\"\\e476\"}.fa-person-rifle:before{content:\"\\e54e\"}.fa-house-medical-circle-exclamation:before{content:\"\\e512\"}.fa-closed-captioning:before{content:\"\\f20a\"}.fa-hiking:before,.fa-person-hiking:before{content:\"\\f6ec\"}.fa-venus-double:before{content:\"\\f226\"}.fa-images:before{content:\"\\f302\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-people-pulling:before{content:\"\\e535\"}.fa-n:before{content:\"\\4e\"}.fa-cable-car:before,.fa-tram:before{content:\"\\f7da\"}.fa-cloud-rain:before{content:\"\\f73d\"}.fa-building-circle-xmark:before{content:\"\\e4d4\"}.fa-ship:before{content:\"\\f21a\"}.fa-arrows-down-to-line:before{content:\"\\e4b8\"}.fa-download:before{content:\"\\f019\"}.fa-face-grin:before,.fa-grin:before{content:\"\\f580\"}.fa-backspace:before,.fa-delete-left:before{content:\"\\f55a\"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:\"\\f1fb\"}.fa-file-circle-check:before{content:\"\\e5a0\"}.fa-forward:before{content:\"\\f04e\"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f3ce\"}.fa-face-meh:before,.fa-meh:before{content:\"\\f11a\"}.fa-align-center:before{content:\"\\f037\"}.fa-book-dead:before,.fa-book-skull:before{content:\"\\f6b7\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\f2c2\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-heart-circle-exclamation:before{content:\"\\e4fe\"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:\"\\f015\"}.fa-calendar-week:before{content:\"\\f784\"}.fa-laptop-medical:before{content:\"\\f812\"}.fa-b:before{content:\"\\42\"}.fa-file-medical:before{content:\"\\f477\"}.fa-dice-one:before{content:\"\\f525\"}.fa-kiwi-bird:before{content:\"\\f535\"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:\"\\f0ec\"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:\"\\f2f9\"}.fa-cutlery:before,.fa-utensils:before{content:\"\\f2e7\"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:\"\\f161\"}.fa-mill-sign:before{content:\"\\e1ed\"}.fa-bowl-rice:before{content:\"\\e2eb\"}.fa-skull:before{content:\"\\f54c\"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:\"\\f519\"}.fa-truck-pickup:before{content:\"\\f63c\"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:\"\\f30c\"}.fa-stop:before{content:\"\\f04d\"}.fa-code-merge:before{content:\"\\f387\"}.fa-upload:before{content:\"\\f093\"}.fa-hurricane:before{content:\"\\f751\"}.fa-mound:before{content:\"\\e52d\"}.fa-toilet-portable:before{content:\"\\e583\"}.fa-compact-disc:before{content:\"\\f51f\"}.fa-file-arrow-down:before,.fa-file-download:before{content:\"\\f56d\"}.fa-caravan:before{content:\"\\f8ff\"}.fa-shield-cat:before{content:\"\\e572\"}.fa-bolt:before,.fa-zap:before{content:\"\\f0e7\"}.fa-glass-water:before{content:\"\\e4f4\"}.fa-oil-well:before{content:\"\\e532\"}.fa-vault:before{content:\"\\e2c5\"}.fa-mars:before{content:\"\\f222\"}.fa-toilet:before{content:\"\\f7d8\"}.fa-plane-circle-xmark:before{content:\"\\e557\"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:\"\\f157\"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:\"\\f158\"}.fa-sun:before{content:\"\\f185\"}.fa-guitar:before{content:\"\\f7a6\"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:\"\\f59c\"}.fa-horse-head:before{content:\"\\f7ab\"}.fa-bore-hole:before{content:\"\\e4c3\"}.fa-industry:before{content:\"\\f275\"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:\"\\f358\"}.fa-arrows-turn-to-dots:before{content:\"\\e4c1\"}.fa-florin-sign:before{content:\"\\e184\"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:\"\\f884\"}.fa-less-than:before{content:\"\\3c\"}.fa-angle-down:before{content:\"\\f107\"}.fa-car-tunnel:before{content:\"\\e4de\"}.fa-head-side-cough:before{content:\"\\e061\"}.fa-grip-lines:before{content:\"\\f7a4\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-user-lock:before{content:\"\\f502\"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:\"\\f178\"}.fa-anchor-circle-xmark:before{content:\"\\e4ac\"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:\"\\f141\"}.fa-chess-pawn:before{content:\"\\f443\"}.fa-first-aid:before,.fa-kit-medical:before{content:\"\\f479\"}.fa-person-through-window:before{content:\"\\e5a9\"}.fa-toolbox:before{content:\"\\f552\"}.fa-hands-holding-circle:before{content:\"\\e4fb\"}.fa-bug:before{content:\"\\f188\"}.fa-credit-card-alt:before,.fa-credit-card:before{content:\"\\f09d\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-hand-holding-hand:before{content:\"\\e4f7\"}.fa-book-open-reader:before,.fa-book-reader:before{content:\"\\f5da\"}.fa-mountain-sun:before{content:\"\\e52f\"}.fa-arrows-left-right-to-line:before{content:\"\\e4ba\"}.fa-dice-d20:before{content:\"\\f6cf\"}.fa-truck-droplet:before{content:\"\\e58c\"}.fa-file-circle-xmark:before{content:\"\\e5a1\"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:\"\\e040\"}.fa-medal:before{content:\"\\f5a2\"}.fa-bed:before{content:\"\\f236\"}.fa-h-square:before,.fa-square-h:before{content:\"\\f0fd\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:\"\\f2c7\"}.fa-bell:before{content:\"\\f0f3\"}.fa-superscript:before{content:\"\\f12b\"}.fa-plug-circle-xmark:before{content:\"\\e560\"}.fa-star-of-life:before{content:\"\\f621\"}.fa-phone-slash:before{content:\"\\f3dd\"}.fa-paint-roller:before{content:\"\\f5aa\"}.fa-hands-helping:before,.fa-handshake-angle:before{content:\"\\f4c4\"}.fa-location-dot:before,.fa-map-marker-alt:before{content:\"\\f3c5\"}.fa-file:before{content:\"\\f15b\"}.fa-greater-than:before{content:\"\\3e\"}.fa-person-swimming:before,.fa-swimmer:before{content:\"\\f5c4\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-droplet:before,.fa-tint:before{content:\"\\f043\"}.fa-eraser:before{content:\"\\f12d\"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:\"\\f57d\"}.fa-person-burst:before{content:\"\\e53b\"}.fa-dove:before{content:\"\\f4ba\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-socks:before{content:\"\\f696\"}.fa-inbox:before{content:\"\\f01c\"}.fa-section:before{content:\"\\e447\"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:\"\\f625\"}.fa-envelope-open-text:before{content:\"\\f658\"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:\"\\f0f8\"}.fa-wine-bottle:before{content:\"\\f72f\"}.fa-chess-rook:before{content:\"\\f447\"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:\"\\f550\"}.fa-dharmachakra:before{content:\"\\f655\"}.fa-hotdog:before{content:\"\\f80f\"}.fa-blind:before,.fa-person-walking-with-cane:before{content:\"\\f29d\"}.fa-drum:before{content:\"\\f569\"}.fa-ice-cream:before{content:\"\\f810\"}.fa-heart-circle-bolt:before{content:\"\\e4fc\"}.fa-fax:before{content:\"\\f1ac\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-check-to-slot:before,.fa-vote-yea:before{content:\"\\f772\"}.fa-star-half:before{content:\"\\f089\"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:\"\\f468\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:\"\\f2a2\"}.fa-tree-city:before{content:\"\\e587\"}.fa-play:before{content:\"\\f04b\"}.fa-font:before{content:\"\\f031\"}.fa-rupiah-sign:before{content:\"\\e23d\"}.fa-magnifying-glass:before,.fa-search:before{content:\"\\f002\"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:\"\\f45d\"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:\"\\f470\"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:\"\\f82a\"}.fa-naira-sign:before{content:\"\\e1f6\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-walkie-talkie:before{content:\"\\f8ef\"}.fa-file-edit:before,.fa-file-pen:before{content:\"\\f31c\"}.fa-receipt:before{content:\"\\f543\"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:\"\\f14b\"}.fa-suitcase-rolling:before{content:\"\\f5c1\"}.fa-person-circle-exclamation:before{content:\"\\e53f\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:\"\\f240\"}.fa-skull-crossbones:before{content:\"\\f714\"}.fa-code-compare:before{content:\"\\e13a\"}.fa-list-dots:before,.fa-list-ul:before{content:\"\\f0ca\"}.fa-school-lock:before{content:\"\\e56f\"}.fa-tower-cell:before{content:\"\\e585\"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:\"\\f309\"}.fa-ranking-star:before{content:\"\\e561\"}.fa-chess-king:before{content:\"\\f43f\"}.fa-person-harassing:before{content:\"\\e549\"}.fa-brazilian-real-sign:before{content:\"\\e46c\"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:\"\\f752\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:\"\\f26c\"}.fa-shrimp:before{content:\"\\e448\"}.fa-list-check:before,.fa-tasks:before{content:\"\\f0ae\"}.fa-jug-detergent:before{content:\"\\e519\"}.fa-circle-user:before,.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-shield:before{content:\"\\f505\"}.fa-wind:before{content:\"\\f72e\"}.fa-car-burst:before,.fa-car-crash:before{content:\"\\f5e1\"}.fa-y:before{content:\"\\59\"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:\"\\f7ce\"}.fa-shipping-fast:before,.fa-truck-fast:before{content:\"\\f48b\"}.fa-fish:before{content:\"\\f578\"}.fa-user-graduate:before{content:\"\\f501\"}.fa-adjust:before,.fa-circle-half-stroke:before{content:\"\\f042\"}.fa-clapperboard:before{content:\"\\e131\"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:\"\\f7ba\"}.fa-baseball-ball:before,.fa-baseball:before{content:\"\\f433\"}.fa-jet-fighter-up:before{content:\"\\e518\"}.fa-diagram-project:before,.fa-project-diagram:before{content:\"\\f542\"}.fa-copy:before{content:\"\\f0c5\"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:\"\\f6a9\"}.fa-hand-sparkles:before{content:\"\\e05d\"}.fa-grip-horizontal:before,.fa-grip:before{content:\"\\f58d\"}.fa-share-from-square:before,.fa-share-square:before{content:\"\\f14d\"}.fa-child-combatant:before,.fa-child-rifle:before{content:\"\\e4e0\"}.fa-gun:before{content:\"\\e19b\"}.fa-phone-square:before,.fa-square-phone:before{content:\"\\f098\"}.fa-add:before,.fa-plus:before{content:\"\\2b\"}.fa-expand:before{content:\"\\f065\"}.fa-computer:before{content:\"\\e4e5\"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:\"\\f00d\"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:\"\\f047\"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:\"\\f51c\"}.fa-peso-sign:before{content:\"\\e222\"}.fa-building-shield:before{content:\"\\e4d8\"}.fa-baby:before{content:\"\\f77c\"}.fa-users-line:before{content:\"\\e592\"}.fa-quote-left-alt:before,.fa-quote-left:before{content:\"\\f10d\"}.fa-tractor:before{content:\"\\f722\"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:\"\\f829\"}.fa-arrow-down-up-lock:before{content:\"\\e4b0\"}.fa-lines-leaning:before{content:\"\\e51e\"}.fa-ruler-combined:before{content:\"\\f546\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-equals:before{content:\"\\3d\"}.fa-blender:before{content:\"\\f517\"}.fa-teeth:before{content:\"\\f62e\"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:\"\\f20b\"}.fa-map:before{content:\"\\f279\"}.fa-rocket:before{content:\"\\f135\"}.fa-photo-film:before,.fa-photo-video:before{content:\"\\f87c\"}.fa-folder-minus:before{content:\"\\f65d\"}.fa-store:before{content:\"\\f54e\"}.fa-arrow-trend-up:before{content:\"\\e098\"}.fa-plug-circle-minus:before{content:\"\\e55e\"}.fa-sign-hanging:before,.fa-sign:before{content:\"\\f4d9\"}.fa-bezier-curve:before{content:\"\\f55b\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-tablet-android:before,.fa-tablet:before{content:\"\\f3fb\"}.fa-school-flag:before{content:\"\\e56e\"}.fa-fill:before{content:\"\\f575\"}.fa-angle-up:before{content:\"\\f106\"}.fa-drumstick-bite:before{content:\"\\f6d7\"}.fa-holly-berry:before{content:\"\\f7aa\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-bacteria:before{content:\"\\e059\"}.fa-hand-lizard:before{content:\"\\f258\"}.fa-notdef:before{content:\"\\e1fe\"}.fa-disease:before{content:\"\\f7fa\"}.fa-briefcase-medical:before{content:\"\\f469\"}.fa-genderless:before{content:\"\\f22d\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-retweet:before{content:\"\\f079\"}.fa-car-alt:before,.fa-car-rear:before{content:\"\\f5de\"}.fa-pump-soap:before{content:\"\\e06b\"}.fa-video-slash:before{content:\"\\f4e2\"}.fa-battery-2:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-radio:before{content:\"\\f8d7\"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:\"\\f77d\"}.fa-traffic-light:before{content:\"\\f637\"}.fa-thermometer:before{content:\"\\f491\"}.fa-vr-cardboard:before{content:\"\\f729\"}.fa-hand-middle-finger:before{content:\"\\f806\"}.fa-percent:before,.fa-percentage:before{content:\"\\25\"}.fa-truck-moving:before{content:\"\\f4df\"}.fa-glass-water-droplet:before{content:\"\\e4f5\"}.fa-display:before{content:\"\\e163\"}.fa-face-smile:before,.fa-smile:before{content:\"\\f118\"}.fa-thumb-tack:before,.fa-thumbtack:before{content:\"\\f08d\"}.fa-trophy:before{content:\"\\f091\"}.fa-person-praying:before,.fa-pray:before{content:\"\\f683\"}.fa-hammer:before{content:\"\\f6e3\"}.fa-hand-peace:before{content:\"\\f25b\"}.fa-rotate:before,.fa-sync-alt:before{content:\"\\f2f1\"}.fa-spinner:before{content:\"\\f110\"}.fa-robot:before{content:\"\\f544\"}.fa-peace:before{content:\"\\f67c\"}.fa-cogs:before,.fa-gears:before{content:\"\\f085\"}.fa-warehouse:before{content:\"\\f494\"}.fa-arrow-up-right-dots:before{content:\"\\e4b7\"}.fa-splotch:before{content:\"\\f5bc\"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:\"\\f584\"}.fa-dice-four:before{content:\"\\f524\"}.fa-sim-card:before{content:\"\\f7c4\"}.fa-transgender-alt:before,.fa-transgender:before{content:\"\\f225\"}.fa-mercury:before{content:\"\\f223\"}.fa-arrow-turn-down:before,.fa-level-down:before{content:\"\\f149\"}.fa-person-falling-burst:before{content:\"\\e547\"}.fa-award:before{content:\"\\f559\"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:\"\\f3ff\"}.fa-building:before{content:\"\\f1ad\"}.fa-angle-double-left:before,.fa-angles-left:before{content:\"\\f100\"}.fa-qrcode:before{content:\"\\f029\"}.fa-clock-rotate-left:before,.fa-history:before{content:\"\\f1da\"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:\"\\f583\"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:\"\\f56e\"}.fa-shield-blank:before,.fa-shield:before{content:\"\\f132\"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:\"\\f885\"}.fa-house-medical:before{content:\"\\e3b2\"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:\"\\f450\"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:\"\\f137\"}.fa-house-chimney-window:before{content:\"\\e00d\"}.fa-pen-nib:before{content:\"\\f5ad\"}.fa-tent-arrow-turn-left:before{content:\"\\e580\"}.fa-tents:before{content:\"\\e582\"}.fa-magic:before,.fa-wand-magic:before{content:\"\\f0d0\"}.fa-dog:before{content:\"\\f6d3\"}.fa-carrot:before{content:\"\\f787\"}.fa-moon:before{content:\"\\f186\"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:\"\\f5ce\"}.fa-cheese:before{content:\"\\f7ef\"}.fa-yin-yang:before{content:\"\\f6ad\"}.fa-music:before{content:\"\\f001\"}.fa-code-commit:before{content:\"\\f386\"}.fa-temperature-low:before{content:\"\\f76b\"}.fa-biking:before,.fa-person-biking:before{content:\"\\f84a\"}.fa-broom:before{content:\"\\f51a\"}.fa-shield-heart:before{content:\"\\e574\"}.fa-gopuram:before{content:\"\\f664\"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:\"\\e47b\"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:\"\\f2d3\"}.fa-hashtag:before{content:\"\\23\"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:\"\\f424\"}.fa-oil-can:before{content:\"\\f613\"}.fa-t:before{content:\"\\54\"}.fa-hippo:before{content:\"\\f6ed\"}.fa-chart-column:before{content:\"\\e0e3\"}.fa-infinity:before{content:\"\\f534\"}.fa-vial-circle-check:before{content:\"\\e596\"}.fa-person-arrow-down-to-line:before{content:\"\\e538\"}.fa-voicemail:before{content:\"\\f897\"}.fa-fan:before{content:\"\\f863\"}.fa-person-walking-luggage:before{content:\"\\e554\"}.fa-arrows-alt-v:before,.fa-up-down:before{content:\"\\f338\"}.fa-cloud-moon-rain:before{content:\"\\f73c\"}.fa-calendar:before{content:\"\\f133\"}.fa-trailer:before{content:\"\\e041\"}.fa-bahai:before,.fa-haykal:before{content:\"\\f666\"}.fa-sd-card:before{content:\"\\f7c2\"}.fa-dragon:before{content:\"\\f6d5\"}.fa-shoe-prints:before{content:\"\\f54b\"}.fa-circle-plus:before,.fa-plus-circle:before{content:\"\\f055\"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:\"\\f58b\"}.fa-hand-holding:before{content:\"\\f4bd\"}.fa-plug-circle-exclamation:before{content:\"\\e55d\"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:\"\\f127\"}.fa-clone:before{content:\"\\f24d\"}.fa-person-walking-arrow-loop-left:before{content:\"\\e551\"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:\"\\f882\"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:\"\\f7e4\"}.fa-tornado:before{content:\"\\f76f\"}.fa-file-circle-plus:before{content:\"\\e494\"}.fa-book-quran:before,.fa-quran:before{content:\"\\f687\"}.fa-anchor:before{content:\"\\f13d\"}.fa-border-all:before{content:\"\\f84c\"}.fa-angry:before,.fa-face-angry:before{content:\"\\f556\"}.fa-cookie-bite:before{content:\"\\f564\"}.fa-arrow-trend-down:before{content:\"\\e097\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-draw-polygon:before{content:\"\\f5ee\"}.fa-balance-scale:before,.fa-scale-balanced:before{content:\"\\f24e\"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:\"\\f62a\"}.fa-shower:before{content:\"\\f2cc\"}.fa-desktop-alt:before,.fa-desktop:before{content:\"\\f390\"}.fa-m:before{content:\"\\4d\"}.fa-table-list:before,.fa-th-list:before{content:\"\\f00b\"}.fa-comment-sms:before,.fa-sms:before{content:\"\\f7cd\"}.fa-book:before{content:\"\\f02d\"}.fa-user-plus:before{content:\"\\f234\"}.fa-check:before{content:\"\\f00c\"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-house-circle-check:before{content:\"\\e509\"}.fa-angle-left:before{content:\"\\f104\"}.fa-diagram-successor:before{content:\"\\e47a\"}.fa-truck-arrow-right:before{content:\"\\e58b\"}.fa-arrows-split-up-and-left:before{content:\"\\e4bc\"}.fa-fist-raised:before,.fa-hand-fist:before{content:\"\\f6de\"}.fa-cloud-moon:before{content:\"\\f6c3\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-person-falling:before{content:\"\\e546\"}.fa-image-portrait:before,.fa-portrait:before{content:\"\\f3e0\"}.fa-user-tag:before{content:\"\\f507\"}.fa-rug:before{content:\"\\e569\"}.fa-earth-europe:before,.fa-globe-europe:before{content:\"\\f7a2\"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:\"\\f59d\"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:\"\\f410\"}.fa-baht-sign:before{content:\"\\e0ac\"}.fa-book-open:before{content:\"\\f518\"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:\"\\f66a\"}.fa-handcuffs:before{content:\"\\e4f8\"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:\"\\f071\"}.fa-database:before{content:\"\\f1c0\"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-bottle-droplet:before{content:\"\\e4c4\"}.fa-mask-face:before{content:\"\\e1d7\"}.fa-hill-rockslide:before{content:\"\\e508\"}.fa-exchange-alt:before,.fa-right-left:before{content:\"\\f362\"}.fa-paper-plane:before{content:\"\\f1d8\"}.fa-road-circle-exclamation:before{content:\"\\e565\"}.fa-dungeon:before{content:\"\\f6d9\"}.fa-align-right:before{content:\"\\f038\"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:\"\\f53b\"}.fa-life-ring:before{content:\"\\f1cd\"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:\"\\f2a7\"}.fa-calendar-day:before{content:\"\\f783\"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:\"\\f5c5\"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:\"\\f07d\"}.fa-face-grimace:before,.fa-grimace:before{content:\"\\f57f\"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:\"\\e2ce\"}.fa-level-down-alt:before,.fa-turn-down:before{content:\"\\f3be\"}.fa-person-walking-arrow-right:before{content:\"\\e552\"}.fa-envelope-square:before,.fa-square-envelope:before{content:\"\\f199\"}.fa-dice:before{content:\"\\f522\"}.fa-bowling-ball:before{content:\"\\f436\"}.fa-brain:before{content:\"\\f5dc\"}.fa-band-aid:before,.fa-bandage:before{content:\"\\f462\"}.fa-calendar-minus:before{content:\"\\f272\"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:\"\\f057\"}.fa-gifts:before{content:\"\\f79c\"}.fa-hotel:before{content:\"\\f594\"}.fa-earth-asia:before,.fa-globe-asia:before{content:\"\\f57e\"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:\"\\f47f\"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:\"\\f00e\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-user-clock:before{content:\"\\f4fd\"}.fa-allergies:before,.fa-hand-dots:before{content:\"\\f461\"}.fa-file-invoice:before{content:\"\\f570\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-coffee:before,.fa-mug-saucer:before{content:\"\\f0f4\"}.fa-brush:before{content:\"\\f55d\"}.fa-mask:before{content:\"\\f6fa\"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:\"\\f010\"}.fa-ruler-vertical:before{content:\"\\f548\"}.fa-user-alt:before,.fa-user-large:before{content:\"\\f406\"}.fa-train-tram:before{content:\"\\e5b4\"}.fa-user-nurse:before{content:\"\\f82f\"}.fa-syringe:before{content:\"\\f48e\"}.fa-cloud-sun:before{content:\"\\f6c4\"}.fa-stopwatch-20:before{content:\"\\e06f\"}.fa-square-full:before{content:\"\\f45c\"}.fa-magnet:before{content:\"\\f076\"}.fa-jar:before{content:\"\\e516\"}.fa-note-sticky:before,.fa-sticky-note:before{content:\"\\f249\"}.fa-bug-slash:before{content:\"\\e490\"}.fa-arrow-up-from-water-pump:before{content:\"\\e4b6\"}.fa-bone:before{content:\"\\f5d7\"}.fa-user-injured:before{content:\"\\f728\"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:\"\\f5b4\"}.fa-plane:before{content:\"\\f072\"}.fa-tent-arrows-down:before{content:\"\\e581\"}.fa-exclamation:before{content:\"\\21\"}.fa-arrows-spin:before{content:\"\\e4bb\"}.fa-print:before{content:\"\\f02f\"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:\"\\e2bb\"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:\"\\24\"}.fa-x:before{content:\"\\58\"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:\"\\f688\"}.fa-users-cog:before,.fa-users-gear:before{content:\"\\f509\"}.fa-person-military-pointing:before{content:\"\\e54a\"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:\"\\f19c\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-trowel:before{content:\"\\e589\"}.fa-d:before{content:\"\\44\"}.fa-stapler:before{content:\"\\e5af\"}.fa-masks-theater:before,.fa-theater-masks:before{content:\"\\f630\"}.fa-kip-sign:before{content:\"\\e1c4\"}.fa-hand-point-left:before{content:\"\\f0a5\"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:\"\\f4c6\"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:\"\\f0fb\"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:\"\\f1e1\"}.fa-barcode:before{content:\"\\f02a\"}.fa-plus-minus:before{content:\"\\e43c\"}.fa-video-camera:before,.fa-video:before{content:\"\\f03d\"}.fa-graduation-cap:before,.fa-mortar-board:before{content:\"\\f19d\"}.fa-hand-holding-medical:before{content:\"\\e05c\"}.fa-person-circle-check:before{content:\"\\e53e\"}.fa-level-up-alt:before,.fa-turn-up:before{content:\"\\f3bf\"}"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":".fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:\"Font Awesome 6 Brands\";--fa-font-brands:normal 400 1em/1 \"Font Awesome 6 Brands\"}@font-face{font-family:\"Font Awesome 6 Brands\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:\"\\f3d0\"}.fa-hooli:before{content:\"\\f427\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-lastfm:before{content:\"\\f202\"}.fa-shopware:before{content:\"\\f5b5\"}.fa-creative-commons-nc:before{content:\"\\f4e8\"}.fa-aws:before{content:\"\\f375\"}.fa-redhat:before{content:\"\\f7bc\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-cloudflare:before{content:\"\\e07d\"}.fa-ups:before{content:\"\\f7e0\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-dyalog:before{content:\"\\f399\"}.fa-bity:before{content:\"\\f37a\"}.fa-stackpath:before{content:\"\\f842\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-modx:before{content:\"\\f285\"}.fa-guilded:before{content:\"\\e07e\"}.fa-vnv:before{content:\"\\f40b\"}.fa-js-square:before,.fa-square-js:before{content:\"\\f3b9\"}.fa-microsoft:before{content:\"\\f3ca\"}.fa-qq:before{content:\"\\f1d6\"}.fa-orcid:before{content:\"\\f8d2\"}.fa-java:before{content:\"\\f4e4\"}.fa-invision:before{content:\"\\f7b0\"}.fa-creative-commons-pd-alt:before{content:\"\\f4ed\"}.fa-centercode:before{content:\"\\f380\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-hire-a-helper:before{content:\"\\f3b0\"}.fa-creative-commons-by:before{content:\"\\f4e7\"}.fa-unity:before{content:\"\\e049\"}.fa-whmcs:before{content:\"\\f40d\"}.fa-rocketchat:before{content:\"\\f3e8\"}.fa-vk:before{content:\"\\f189\"}.fa-untappd:before{content:\"\\f405\"}.fa-mailchimp:before{content:\"\\f59e\"}.fa-css3-alt:before{content:\"\\f38b\"}.fa-reddit-square:before,.fa-square-reddit:before{content:\"\\f1a2\"}.fa-vimeo-v:before{content:\"\\f27d\"}.fa-contao:before{content:\"\\f26d\"}.fa-square-font-awesome:before{content:\"\\e5ad\"}.fa-deskpro:before{content:\"\\f38f\"}.fa-sistrix:before{content:\"\\f3ee\"}.fa-instagram-square:before,.fa-square-instagram:before{content:\"\\e055\"}.fa-battle-net:before{content:\"\\f835\"}.fa-the-red-yeti:before{content:\"\\f69d\"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:\"\\f3af\"}.fa-edge:before{content:\"\\f282\"}.fa-napster:before{content:\"\\f3d2\"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:\"\\f2ad\"}.fa-google-plus-g:before{content:\"\\f0d5\"}.fa-artstation:before{content:\"\\f77a\"}.fa-markdown:before{content:\"\\f60f\"}.fa-sourcetree:before{content:\"\\f7d3\"}.fa-google-plus:before{content:\"\\f2b3\"}.fa-diaspora:before{content:\"\\f791\"}.fa-foursquare:before{content:\"\\f180\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-github-alt:before{content:\"\\f113\"}.fa-phoenix-squadron:before{content:\"\\f511\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-algolia:before{content:\"\\f36c\"}.fa-red-river:before{content:\"\\f3e3\"}.fa-creative-commons-sa:before{content:\"\\f4ef\"}.fa-safari:before{content:\"\\f267\"}.fa-google:before{content:\"\\f1a0\"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:\"\\f35c\"}.fa-atlassian:before{content:\"\\f77b\"}.fa-linkedin-in:before{content:\"\\f0e1\"}.fa-digital-ocean:before{content:\"\\f391\"}.fa-nimblr:before{content:\"\\f5a8\"}.fa-chromecast:before{content:\"\\f838\"}.fa-evernote:before{content:\"\\f839\"}.fa-hacker-news:before{content:\"\\f1d4\"}.fa-creative-commons-sampling:before{content:\"\\f4f0\"}.fa-adversal:before{content:\"\\f36a\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-watchman-monitoring:before{content:\"\\e087\"}.fa-fonticons:before{content:\"\\f280\"}.fa-weixin:before{content:\"\\f1d7\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-git-alt:before{content:\"\\f841\"}.fa-lyft:before{content:\"\\f3c3\"}.fa-rev:before{content:\"\\f5b2\"}.fa-windows:before{content:\"\\f17a\"}.fa-wizards-of-the-coast:before{content:\"\\f730\"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-meetup:before{content:\"\\f2e0\"}.fa-centos:before{content:\"\\f789\"}.fa-adn:before{content:\"\\f170\"}.fa-cloudsmith:before{content:\"\\f384\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:\"\\f397\"}.fa-codiepie:before{content:\"\\f284\"}.fa-node:before{content:\"\\f419\"}.fa-mix:before{content:\"\\f3cb\"}.fa-steam:before{content:\"\\f1b6\"}.fa-cc-apple-pay:before{content:\"\\f416\"}.fa-scribd:before{content:\"\\f28a\"}.fa-openid:before{content:\"\\f19b\"}.fa-instalod:before{content:\"\\e081\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-sellcast:before{content:\"\\f2da\"}.fa-square-twitter:before,.fa-twitter-square:before{content:\"\\f081\"}.fa-r-project:before{content:\"\\f4f7\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-freebsd:before{content:\"\\f3a4\"}.fa-vuejs:before{content:\"\\f41f\"}.fa-accusoft:before{content:\"\\f369\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-fonticons-fi:before{content:\"\\f3a2\"}.fa-app-store:before{content:\"\\f36f\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-itunes-note:before{content:\"\\f3b5\"}.fa-golang:before{content:\"\\e40f\"}.fa-kickstarter:before{content:\"\\f3bb\"}.fa-grav:before{content:\"\\f2d6\"}.fa-weibo:before{content:\"\\f18a\"}.fa-uncharted:before{content:\"\\e084\"}.fa-firstdraft:before{content:\"\\f3a1\"}.fa-square-youtube:before,.fa-youtube-square:before{content:\"\\f431\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-rendact:before,.fa-wpressr:before{content:\"\\f3e4\"}.fa-angellist:before{content:\"\\f209\"}.fa-galactic-republic:before{content:\"\\f50c\"}.fa-nfc-directional:before{content:\"\\e530\"}.fa-skype:before{content:\"\\f17e\"}.fa-joget:before{content:\"\\f3b7\"}.fa-fedora:before{content:\"\\f798\"}.fa-stripe-s:before{content:\"\\f42a\"}.fa-meta:before{content:\"\\e49b\"}.fa-laravel:before{content:\"\\f3bd\"}.fa-hotjar:before{content:\"\\f3b1\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-sticker-mule:before{content:\"\\f3f7\"}.fa-creative-commons-zero:before{content:\"\\f4f3\"}.fa-hips:before{content:\"\\f452\"}.fa-behance:before{content:\"\\f1b4\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-discord:before{content:\"\\f392\"}.fa-chrome:before{content:\"\\f268\"}.fa-app-store-ios:before{content:\"\\f370\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-confluence:before{content:\"\\f78d\"}.fa-mdb:before{content:\"\\f8ca\"}.fa-dochub:before{content:\"\\f394\"}.fa-accessible-icon:before{content:\"\\f368\"}.fa-ebay:before{content:\"\\f4f4\"}.fa-amazon:before{content:\"\\f270\"}.fa-unsplash:before{content:\"\\e07c\"}.fa-yarn:before{content:\"\\f7e3\"}.fa-square-steam:before,.fa-steam-square:before{content:\"\\f1b7\"}.fa-500px:before{content:\"\\f26e\"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:\"\\f194\"}.fa-asymmetrik:before{content:\"\\f372\"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:\"\\f2b4\"}.fa-gratipay:before{content:\"\\f184\"}.fa-apple:before{content:\"\\f179\"}.fa-hive:before{content:\"\\e07f\"}.fa-gitkraken:before{content:\"\\f3a6\"}.fa-keybase:before{content:\"\\f4f5\"}.fa-apple-pay:before{content:\"\\f415\"}.fa-padlet:before{content:\"\\e4a0\"}.fa-amazon-pay:before{content:\"\\f42c\"}.fa-github-square:before,.fa-square-github:before{content:\"\\f092\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-fedex:before{content:\"\\f797\"}.fa-phoenix-framework:before{content:\"\\f3dc\"}.fa-shopify:before{content:\"\\e057\"}.fa-neos:before{content:\"\\f612\"}.fa-hackerrank:before{content:\"\\f5f7\"}.fa-researchgate:before{content:\"\\f4f8\"}.fa-swift:before{content:\"\\f8e1\"}.fa-angular:before{content:\"\\f420\"}.fa-speakap:before{content:\"\\f3f3\"}.fa-angrycreative:before{content:\"\\f36e\"}.fa-y-combinator:before{content:\"\\f23b\"}.fa-empire:before{content:\"\\f1d1\"}.fa-envira:before{content:\"\\f299\"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:\"\\e5ae\"}.fa-studiovinari:before{content:\"\\f3f8\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-firefox:before{content:\"\\f269\"}.fa-linode:before{content:\"\\f2b8\"}.fa-goodreads:before{content:\"\\f3a8\"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:\"\\f264\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-sith:before{content:\"\\f512\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-page4:before{content:\"\\f3d7\"}.fa-hashnode:before{content:\"\\e499\"}.fa-react:before{content:\"\\f41b\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-squarespace:before{content:\"\\f5be\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-creative-commons-share:before{content:\"\\f4f2\"}.fa-bitcoin:before{content:\"\\f379\"}.fa-keycdn:before{content:\"\\f3ba\"}.fa-opera:before{content:\"\\f26a\"}.fa-itch-io:before{content:\"\\f83a\"}.fa-umbraco:before{content:\"\\f8e8\"}.fa-galactic-senate:before{content:\"\\f50d\"}.fa-ubuntu:before{content:\"\\f7df\"}.fa-draft2digital:before{content:\"\\f396\"}.fa-stripe:before{content:\"\\f429\"}.fa-houzz:before{content:\"\\f27c\"}.fa-gg:before{content:\"\\f260\"}.fa-dhl:before{content:\"\\f790\"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:\"\\f0d3\"}.fa-xing:before{content:\"\\f168\"}.fa-blackberry:before{content:\"\\f37b\"}.fa-creative-commons-pd:before{content:\"\\f4ec\"}.fa-playstation:before{content:\"\\f3df\"}.fa-quinscape:before{content:\"\\f459\"}.fa-less:before{content:\"\\f41d\"}.fa-blogger-b:before{content:\"\\f37d\"}.fa-opencart:before{content:\"\\f23d\"}.fa-vine:before{content:\"\\f1ca\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-gitlab:before{content:\"\\f296\"}.fa-typo3:before{content:\"\\f42b\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-dailymotion:before{content:\"\\e052\"}.fa-affiliatetheme:before{content:\"\\f36b\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-bootstrap:before{content:\"\\f836\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-nfc-symbol:before{content:\"\\e531\"}.fa-ethereum:before{content:\"\\f42e\"}.fa-speaker-deck:before{content:\"\\f83c\"}.fa-creative-commons-nc-eu:before{content:\"\\f4e9\"}.fa-patreon:before{content:\"\\f3d9\"}.fa-avianex:before{content:\"\\f374\"}.fa-ello:before{content:\"\\f5f1\"}.fa-gofore:before{content:\"\\f3a7\"}.fa-bimobject:before{content:\"\\f378\"}.fa-facebook-f:before{content:\"\\f39e\"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:\"\\f0d4\"}.fa-mandalorian:before{content:\"\\f50f\"}.fa-first-order-alt:before{content:\"\\f50a\"}.fa-osi:before{content:\"\\f41a\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-d-and-d-beyond:before{content:\"\\f6ca\"}.fa-periscope:before{content:\"\\f3da\"}.fa-fulcrum:before{content:\"\\f50b\"}.fa-cloudscale:before{content:\"\\f383\"}.fa-forumbee:before{content:\"\\f211\"}.fa-mizuni:before{content:\"\\f3cc\"}.fa-schlix:before{content:\"\\f3ea\"}.fa-square-xing:before,.fa-xing-square:before{content:\"\\f169\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-wpforms:before{content:\"\\f298\"}.fa-cloudversify:before{content:\"\\f385\"}.fa-usps:before{content:\"\\f7e1\"}.fa-megaport:before{content:\"\\f5a3\"}.fa-magento:before{content:\"\\f3c4\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-fly:before{content:\"\\f417\"}.fa-aviato:before{content:\"\\f421\"}.fa-itunes:before{content:\"\\f3b4\"}.fa-cuttlefish:before{content:\"\\f38c\"}.fa-blogger:before{content:\"\\f37c\"}.fa-flickr:before{content:\"\\f16e\"}.fa-viber:before{content:\"\\f409\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-digg:before{content:\"\\f1a6\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-symfony:before{content:\"\\f83d\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-facebook-messenger:before{content:\"\\f39f\"}.fa-audible:before{content:\"\\f373\"}.fa-think-peaks:before{content:\"\\f731\"}.fa-bilibili:before{content:\"\\e3d9\"}.fa-erlang:before{content:\"\\f39d\"}.fa-cotton-bureau:before{content:\"\\f89e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-42-group:before,.fa-innosoft:before{content:\"\\e080\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-elementor:before{content:\"\\f430\"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:\"\\e01e\"}.fa-creative-commons-nd:before{content:\"\\f4eb\"}.fa-palfed:before{content:\"\\f3d8\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-resolving:before{content:\"\\f3e7\"}.fa-xbox:before{content:\"\\f412\"}.fa-searchengin:before{content:\"\\f3eb\"}.fa-tiktok:before{content:\"\\e07b\"}.fa-facebook-square:before,.fa-square-facebook:before{content:\"\\f082\"}.fa-renren:before{content:\"\\f18b\"}.fa-linux:before{content:\"\\f17c\"}.fa-glide:before{content:\"\\f2a5\"}.fa-linkedin:before{content:\"\\f08c\"}.fa-hubspot:before{content:\"\\f3b2\"}.fa-deploydog:before{content:\"\\f38e\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-mixer:before{content:\"\\e056\"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:\"\\f203\"}.fa-vimeo:before{content:\"\\f40a\"}.fa-mendeley:before{content:\"\\f7b3\"}.fa-uniregistry:before{content:\"\\f404\"}.fa-figma:before{content:\"\\f799\"}.fa-creative-commons-remix:before{content:\"\\f4ee\"}.fa-cc-amazon-pay:before{content:\"\\f42d\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-instagram:before{content:\"\\f16d\"}.fa-cmplid:before{content:\"\\e360\"}.fa-facebook:before{content:\"\\f09a\"}.fa-gripfire:before{content:\"\\f3ac\"}.fa-jedi-order:before{content:\"\\f50e\"}.fa-uikit:before{content:\"\\f403\"}.fa-fort-awesome-alt:before{content:\"\\f3a3\"}.fa-phabricator:before{content:\"\\f3db\"}.fa-ussunnah:before{content:\"\\f407\"}.fa-earlybirds:before{content:\"\\f39a\"}.fa-trade-federation:before{content:\"\\f513\"}.fa-autoprefixer:before{content:\"\\f41c\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-google-play:before{content:\"\\f3ab\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-line:before{content:\"\\f3c0\"}.fa-google-drive:before{content:\"\\f3aa\"}.fa-servicestack:before{content:\"\\f3ec\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-deezer:before{content:\"\\e077\"}.fa-raspberry-pi:before{content:\"\\f7bb\"}.fa-jira:before{content:\"\\f7b1\"}.fa-docker:before{content:\"\\f395\"}.fa-screenpal:before{content:\"\\e570\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-gitter:before{content:\"\\f426\"}.fa-d-and-d:before{content:\"\\f38d\"}.fa-microblog:before{content:\"\\e01a\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-pied-piper-hat:before{content:\"\\f4e5\"}.fa-kickstarter-k:before{content:\"\\f3bc\"}.fa-yandex:before{content:\"\\f413\"}.fa-readme:before{content:\"\\f4d5\"}.fa-html5:before{content:\"\\f13b\"}.fa-sellsy:before{content:\"\\f213\"}.fa-sass:before{content:\"\\f41e\"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:\"\\e2d0\"}.fa-buromobelexperte:before{content:\"\\f37f\"}.fa-salesforce:before{content:\"\\f83b\"}.fa-octopus-deploy:before{content:\"\\e082\"}.fa-medapps:before{content:\"\\f3c6\"}.fa-ns8:before{content:\"\\f3d5\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-apper:before{content:\"\\f371\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-waze:before{content:\"\\f83f\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:\"\\f2ab\"}.fa-fantasy-flight-games:before{content:\"\\f6dc\"}.fa-rust:before{content:\"\\e07a\"}.fa-wix:before{content:\"\\f5cf\"}.fa-behance-square:before,.fa-square-behance:before{content:\"\\f1b5\"}.fa-supple:before{content:\"\\f3f9\"}.fa-rebel:before{content:\"\\f1d0\"}.fa-css3:before{content:\"\\f13c\"}.fa-staylinked:before{content:\"\\f3f5\"}.fa-kaggle:before{content:\"\\f5fa\"}.fa-space-awesome:before{content:\"\\e5ac\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-cpanel:before{content:\"\\f388\"}.fa-goodreads-g:before{content:\"\\f3a9\"}.fa-git-square:before,.fa-square-git:before{content:\"\\f1d2\"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:\"\\f174\"}.fa-trello:before{content:\"\\f181\"}.fa-creative-commons-nc-jp:before{content:\"\\f4ea\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-perbyte:before{content:\"\\e083\"}.fa-grunt:before{content:\"\\f3ad\"}.fa-weebly:before{content:\"\\f5cc\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-leanpub:before{content:\"\\f212\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-themeco:before{content:\"\\f5c6\"}.fa-python:before{content:\"\\f3e2\"}.fa-android:before{content:\"\\f17b\"}.fa-bots:before{content:\"\\e340\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-hornbill:before{content:\"\\f592\"}.fa-js:before{content:\"\\f3b8\"}.fa-ideal:before{content:\"\\e013\"}.fa-git:before{content:\"\\f1d3\"}.fa-dev:before{content:\"\\f6cc\"}.fa-sketch:before{content:\"\\f7c6\"}.fa-yandex-international:before{content:\"\\f414\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-uber:before{content:\"\\f402\"}.fa-github:before{content:\"\\f09b\"}.fa-php:before{content:\"\\f457\"}.fa-alipay:before{content:\"\\f642\"}.fa-youtube:before{content:\"\\f167\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-firefox-browser:before{content:\"\\e007\"}.fa-replyd:before{content:\"\\f3e6\"}.fa-suse:before{content:\"\\f7d6\"}.fa-jenkins:before{content:\"\\f3b6\"}.fa-twitter:before{content:\"\\f099\"}.fa-rockrms:before{content:\"\\f3e9\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-buffer:before{content:\"\\f837\"}.fa-npm:before{content:\"\\f3d4\"}.fa-yammer:before{content:\"\\f840\"}.fa-btc:before{content:\"\\f15a\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-stubber:before{content:\"\\e5c7\"}.fa-telegram-plane:before,.fa-telegram:before{content:\"\\f2c6\"}.fa-old-republic:before{content:\"\\f510\"}.fa-odysee:before{content:\"\\e5c6\"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:\"\\f40c\"}.fa-node-js:before{content:\"\\f3d3\"}.fa-edge-legacy:before{content:\"\\e078\"}.fa-slack-hash:before,.fa-slack:before{content:\"\\f198\"}.fa-medrt:before{content:\"\\f3c8\"}.fa-usb:before{content:\"\\f287\"}.fa-tumblr:before{content:\"\\f173\"}.fa-vaadin:before{content:\"\\f408\"}.fa-quora:before{content:\"\\f2c4\"}.fa-reacteurope:before{content:\"\\f75d\"}.fa-medium-m:before,.fa-medium:before{content:\"\\f23a\"}.fa-amilia:before{content:\"\\f36d\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-flipboard:before{content:\"\\f44d\"}.fa-viacoin:before{content:\"\\f237\"}.fa-critical-role:before{content:\"\\f6c9\"}.fa-sitrox:before{content:\"\\e44a\"}.fa-discourse:before{content:\"\\f393\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-mastodon:before{content:\"\\f4f6\"}.fa-airbnb:before{content:\"\\f834\"}.fa-wolf-pack-battalion:before{content:\"\\f514\"}.fa-buy-n-large:before{content:\"\\f8a6\"}.fa-gulp:before{content:\"\\f3ae\"}.fa-creative-commons-sampling-plus:before{content:\"\\f4f1\"}.fa-strava:before{content:\"\\f428\"}.fa-ember:before{content:\"\\f423\"}.fa-canadian-maple-leaf:before{content:\"\\f785\"}.fa-teamspeak:before{content:\"\\f4f9\"}.fa-pushed:before{content:\"\\f3e1\"}.fa-wordpress-simple:before{content:\"\\f411\"}.fa-nutritionix:before{content:\"\\f3d6\"}.fa-wodu:before{content:\"\\e088\"}.fa-google-pay:before{content:\"\\e079\"}.fa-intercom:before{content:\"\\f7af\"}.fa-zhihu:before{content:\"\\f63f\"}.fa-korvue:before{content:\"\\f42f\"}.fa-pix:before{content:\"\\e43a\"}.fa-steam-symbol:before{content:\"\\f3f6\"}:host,:root{--fa-font-regular:normal 400 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:\"Font Awesome 6 Free\";--fa-font-solid:normal 900 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}.fa-solid,.fas{font-weight:900}@font-face{font-family:\"Font Awesome 5 Brands\";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format(\"woff2\"),url(../webfonts/fa-v4compatibility.ttf) format(\"truetype\");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}"}],"authorContributionMap":{"jingting1412":9}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/glyphicons/css/bootstrap-glyphicons.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" * Bootstrap v3.3.7 (http://getbootstrap.com)"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" * Copyright 2011-2016 Twitter, Inc."},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" */"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"/*!"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id\u003d76290a4e23bf2c3f61a4e17625be4627)"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" * Config saved to config.json and https://gist.github.com/76290a4e23bf2c3f61a4e17625be4627"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" */"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"/*!"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" * Bootstrap v3.3.7 (http://getbootstrap.com)"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" * Copyright 2011-2016 Twitter, Inc."},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" */"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":"/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":"@font-face{font-family:\u0027Glyphicons Halflings\u0027;src:url(../fonts/glyphicons-halflings-regular.eot);src:url(\u0027../fonts/glyphicons-halflings-regular.eot?#iefix\u0027) format(\u0027embedded-opentype\u0027),url(../fonts/glyphicons-halflings-regular.woff2) format(\u0027woff2\u0027),url(../fonts/glyphicons-halflings-regular.woff) format(\u0027woff\u0027),url(../fonts/glyphicons-halflings-regular.ttf) format(\u0027truetype\u0027),url(\u0027../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\u0027) format(\u0027svg\u0027)}.glyphicon{position:relative;top:1px;display:inline-block;font-family:\u0027Glyphicons Halflings\u0027;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:\"\\002a\"}.glyphicon-plus:before{content:\"\\002b\"}.glyphicon-euro:before,.glyphicon-eur:before{content:\"\\20ac\"}.glyphicon-minus:before{content:\"\\2212\"}.glyphicon-cloud:before{content:\"\\2601\"}.glyphicon-envelope:before{content:\"\\2709\"}.glyphicon-pencil:before{content:\"\\270f\"}.glyphicon-glass:before{content:\"\\e001\"}.glyphicon-music:before{content:\"\\e002\"}.glyphicon-search:before{content:\"\\e003\"}.glyphicon-heart:before{content:\"\\e005\"}.glyphicon-star:before{content:\"\\e006\"}.glyphicon-star-empty:before{content:\"\\e007\"}.glyphicon-user:before{content:\"\\e008\"}.glyphicon-film:before{content:\"\\e009\"}.glyphicon-th-large:before{content:\"\\e010\"}.glyphicon-th:before{content:\"\\e011\"}.glyphicon-th-list:before{content:\"\\e012\"}.glyphicon-ok:before{content:\"\\e013\"}.glyphicon-remove:before{content:\"\\e014\"}.glyphicon-zoom-in:before{content:\"\\e015\"}.glyphicon-zoom-out:before{content:\"\\e016\"}.glyphicon-off:before{content:\"\\e017\"}.glyphicon-signal:before{content:\"\\e018\"}.glyphicon-cog:before{content:\"\\e019\"}.glyphicon-trash:before{content:\"\\e020\"}.glyphicon-home:before{content:\"\\e021\"}.glyphicon-file:before{content:\"\\e022\"}.glyphicon-time:before{content:\"\\e023\"}.glyphicon-road:before{content:\"\\e024\"}.glyphicon-download-alt:before{content:\"\\e025\"}.glyphicon-download:before{content:\"\\e026\"}.glyphicon-upload:before{content:\"\\e027\"}.glyphicon-inbox:before{content:\"\\e028\"}.glyphicon-play-circle:before{content:\"\\e029\"}.glyphicon-repeat:before{content:\"\\e030\"}.glyphicon-refresh:before{content:\"\\e031\"}.glyphicon-list-alt:before{content:\"\\e032\"}.glyphicon-lock:before{content:\"\\e033\"}.glyphicon-flag:before{content:\"\\e034\"}.glyphicon-headphones:before{content:\"\\e035\"}.glyphicon-volume-off:before{content:\"\\e036\"}.glyphicon-volume-down:before{content:\"\\e037\"}.glyphicon-volume-up:before{content:\"\\e038\"}.glyphicon-qrcode:before{content:\"\\e039\"}.glyphicon-barcode:before{content:\"\\e040\"}.glyphicon-tag:before{content:\"\\e041\"}.glyphicon-tags:before{content:\"\\e042\"}.glyphicon-book:before{content:\"\\e043\"}.glyphicon-bookmark:before{content:\"\\e044\"}.glyphicon-print:before{content:\"\\e045\"}.glyphicon-camera:before{content:\"\\e046\"}.glyphicon-font:before{content:\"\\e047\"}.glyphicon-bold:before{content:\"\\e048\"}.glyphicon-italic:before{content:\"\\e049\"}.glyphicon-text-height:before{content:\"\\e050\"}.glyphicon-text-width:before{content:\"\\e051\"}.glyphicon-align-left:before{content:\"\\e052\"}.glyphicon-align-center:before{content:\"\\e053\"}.glyphicon-align-right:before{content:\"\\e054\"}.glyphicon-align-justify:before{content:\"\\e055\"}.glyphicon-list:before{content:\"\\e056\"}.glyphicon-indent-left:before{content:\"\\e057\"}.glyphicon-indent-right:before{content:\"\\e058\"}.glyphicon-facetime-video:before{content:\"\\e059\"}.glyphicon-picture:before{content:\"\\e060\"}.glyphicon-map-marker:before{content:\"\\e062\"}.glyphicon-adjust:before{content:\"\\e063\"}.glyphicon-tint:before{content:\"\\e064\"}.glyphicon-edit:before{content:\"\\e065\"}.glyphicon-share:before{content:\"\\e066\"}.glyphicon-check:before{content:\"\\e067\"}.glyphicon-move:before{content:\"\\e068\"}.glyphicon-step-backward:before{content:\"\\e069\"}.glyphicon-fast-backward:before{content:\"\\e070\"}.glyphicon-backward:before{content:\"\\e071\"}.glyphicon-play:before{content:\"\\e072\"}.glyphicon-pause:before{content:\"\\e073\"}.glyphicon-stop:before{content:\"\\e074\"}.glyphicon-forward:before{content:\"\\e075\"}.glyphicon-fast-forward:before{content:\"\\e076\"}.glyphicon-step-forward:before{content:\"\\e077\"}.glyphicon-eject:before{content:\"\\e078\"}.glyphicon-chevron-left:before{content:\"\\e079\"}.glyphicon-chevron-right:before{content:\"\\e080\"}.glyphicon-plus-sign:before{content:\"\\e081\"}.glyphicon-minus-sign:before{content:\"\\e082\"}.glyphicon-remove-sign:before{content:\"\\e083\"}.glyphicon-ok-sign:before{content:\"\\e084\"}.glyphicon-question-sign:before{content:\"\\e085\"}.glyphicon-info-sign:before{content:\"\\e086\"}.glyphicon-screenshot:before{content:\"\\e087\"}.glyphicon-remove-circle:before{content:\"\\e088\"}.glyphicon-ok-circle:before{content:\"\\e089\"}.glyphicon-ban-circle:before{content:\"\\e090\"}.glyphicon-arrow-left:before{content:\"\\e091\"}.glyphicon-arrow-right:before{content:\"\\e092\"}.glyphicon-arrow-up:before{content:\"\\e093\"}.glyphicon-arrow-down:before{content:\"\\e094\"}.glyphicon-share-alt:before{content:\"\\e095\"}.glyphicon-resize-full:before{content:\"\\e096\"}.glyphicon-resize-small:before{content:\"\\e097\"}.glyphicon-exclamation-sign:before{content:\"\\e101\"}.glyphicon-gift:before{content:\"\\e102\"}.glyphicon-leaf:before{content:\"\\e103\"}.glyphicon-fire:before{content:\"\\e104\"}.glyphicon-eye-open:before{content:\"\\e105\"}.glyphicon-eye-close:before{content:\"\\e106\"}.glyphicon-warning-sign:before{content:\"\\e107\"}.glyphicon-plane:before{content:\"\\e108\"}.glyphicon-calendar:before{content:\"\\e109\"}.glyphicon-random:before{content:\"\\e110\"}.glyphicon-comment:before{content:\"\\e111\"}.glyphicon-magnet:before{content:\"\\e112\"}.glyphicon-chevron-up:before{content:\"\\e113\"}.glyphicon-chevron-down:before{content:\"\\e114\"}.glyphicon-retweet:before{content:\"\\e115\"}.glyphicon-shopping-cart:before{content:\"\\e116\"}.glyphicon-folder-close:before{content:\"\\e117\"}.glyphicon-folder-open:before{content:\"\\e118\"}.glyphicon-resize-vertical:before{content:\"\\e119\"}.glyphicon-resize-horizontal:before{content:\"\\e120\"}.glyphicon-hdd:before{content:\"\\e121\"}.glyphicon-bullhorn:before{content:\"\\e122\"}.glyphicon-bell:before{content:\"\\e123\"}.glyphicon-certificate:before{content:\"\\e124\"}.glyphicon-thumbs-up:before{content:\"\\e125\"}.glyphicon-thumbs-down:before{content:\"\\e126\"}.glyphicon-hand-right:before{content:\"\\e127\"}.glyphicon-hand-left:before{content:\"\\e128\"}.glyphicon-hand-up:before{content:\"\\e129\"}.glyphicon-hand-down:before{content:\"\\e130\"}.glyphicon-circle-arrow-right:before{content:\"\\e131\"}.glyphicon-circle-arrow-left:before{content:\"\\e132\"}.glyphicon-circle-arrow-up:before{content:\"\\e133\"}.glyphicon-circle-arrow-down:before{content:\"\\e134\"}.glyphicon-globe:before{content:\"\\e135\"}.glyphicon-wrench:before{content:\"\\e136\"}.glyphicon-tasks:before{content:\"\\e137\"}.glyphicon-filter:before{content:\"\\e138\"}.glyphicon-briefcase:before{content:\"\\e139\"}.glyphicon-fullscreen:before{content:\"\\e140\"}.glyphicon-dashboard:before{content:\"\\e141\"}.glyphicon-paperclip:before{content:\"\\e142\"}.glyphicon-heart-empty:before{content:\"\\e143\"}.glyphicon-link:before{content:\"\\e144\"}.glyphicon-phone:before{content:\"\\e145\"}.glyphicon-pushpin:before{content:\"\\e146\"}.glyphicon-usd:before{content:\"\\e148\"}.glyphicon-gbp:before{content:\"\\e149\"}.glyphicon-sort:before{content:\"\\e150\"}.glyphicon-sort-by-alphabet:before{content:\"\\e151\"}.glyphicon-sort-by-alphabet-alt:before{content:\"\\e152\"}.glyphicon-sort-by-order:before{content:\"\\e153\"}.glyphicon-sort-by-order-alt:before{content:\"\\e154\"}.glyphicon-sort-by-attributes:before{content:\"\\e155\"}.glyphicon-sort-by-attributes-alt:before{content:\"\\e156\"}.glyphicon-unchecked:before{content:\"\\e157\"}.glyphicon-expand:before{content:\"\\e158\"}.glyphicon-collapse-down:before{content:\"\\e159\"}.glyphicon-collapse-up:before{content:\"\\e160\"}.glyphicon-log-in:before{content:\"\\e161\"}.glyphicon-flash:before{content:\"\\e162\"}.glyphicon-log-out:before{content:\"\\e163\"}.glyphicon-new-window:before{content:\"\\e164\"}.glyphicon-record:before{content:\"\\e165\"}.glyphicon-save:before{content:\"\\e166\"}.glyphicon-open:before{content:\"\\e167\"}.glyphicon-saved:before{content:\"\\e168\"}.glyphicon-import:before{content:\"\\e169\"}.glyphicon-export:before{content:\"\\e170\"}.glyphicon-send:before{content:\"\\e171\"}.glyphicon-floppy-disk:before{content:\"\\e172\"}.glyphicon-floppy-saved:before{content:\"\\e173\"}.glyphicon-floppy-remove:before{content:\"\\e174\"}.glyphicon-floppy-save:before{content:\"\\e175\"}.glyphicon-floppy-open:before{content:\"\\e176\"}.glyphicon-credit-card:before{content:\"\\e177\"}.glyphicon-transfer:before{content:\"\\e178\"}.glyphicon-cutlery:before{content:\"\\e179\"}.glyphicon-header:before{content:\"\\e180\"}.glyphicon-compressed:before{content:\"\\e181\"}.glyphicon-earphone:before{content:\"\\e182\"}.glyphicon-phone-alt:before{content:\"\\e183\"}.glyphicon-tower:before{content:\"\\e184\"}.glyphicon-stats:before{content:\"\\e185\"}.glyphicon-sd-video:before{content:\"\\e186\"}.glyphicon-hd-video:before{content:\"\\e187\"}.glyphicon-subtitles:before{content:\"\\e188\"}.glyphicon-sound-stereo:before{content:\"\\e189\"}.glyphicon-sound-dolby:before{content:\"\\e190\"}.glyphicon-sound-5-1:before{content:\"\\e191\"}.glyphicon-sound-6-1:before{content:\"\\e192\"}.glyphicon-sound-7-1:before{content:\"\\e193\"}.glyphicon-copyright-mark:before{content:\"\\e194\"}.glyphicon-registration-mark:before{content:\"\\e195\"}.glyphicon-cloud-download:before{content:\"\\e197\"}.glyphicon-cloud-upload:before{content:\"\\e198\"}.glyphicon-tree-conifer:before{content:\"\\e199\"}.glyphicon-tree-deciduous:before{content:\"\\e200\"}.glyphicon-cd:before{content:\"\\e201\"}.glyphicon-save-file:before{content:\"\\e202\"}.glyphicon-open-file:before{content:\"\\e203\"}.glyphicon-level-up:before{content:\"\\e204\"}.glyphicon-copy:before{content:\"\\e205\"}.glyphicon-paste:before{content:\"\\e206\"}.glyphicon-alert:before{content:\"\\e209\"}.glyphicon-equalizer:before{content:\"\\e210\"}.glyphicon-king:before{content:\"\\e211\"}.glyphicon-queen:before{content:\"\\e212\"}.glyphicon-pawn:before{content:\"\\e213\"}.glyphicon-bishop:before{content:\"\\e214\"}.glyphicon-knight:before{content:\"\\e215\"}.glyphicon-baby-formula:before{content:\"\\e216\"}.glyphicon-tent:before{content:\"\\26fa\"}.glyphicon-blackboard:before{content:\"\\e218\"}.glyphicon-bed:before{content:\"\\e219\"}.glyphicon-apple:before{content:\"\\f8ff\"}.glyphicon-erase:before{content:\"\\e221\"}.glyphicon-hourglass:before{content:\"\\231b\"}.glyphicon-lamp:before{content:\"\\e223\"}.glyphicon-duplicate:before{content:\"\\e224\"}.glyphicon-piggy-bank:before{content:\"\\e225\"}.glyphicon-scissors:before{content:\"\\e226\"}.glyphicon-bitcoin:before{content:\"\\e227\"}.glyphicon-btc:before{content:\"\\e227\"}.glyphicon-xbt:before{content:\"\\e227\"}.glyphicon-yen:before{content:\"\\00a5\"}.glyphicon-jpy:before{content:\"\\00a5\"}.glyphicon-ruble:before{content:\"\\20bd\"}.glyphicon-rub:before{content:\"\\20bd\"}.glyphicon-scale:before{content:\"\\e230\"}.glyphicon-ice-lolly:before{content:\"\\e231\"}.glyphicon-ice-lolly-tasted:before{content:\"\\e232\"}.glyphicon-education:before{content:\"\\e233\"}.glyphicon-option-horizontal:before{content:\"\\e234\"}.glyphicon-option-vertical:before{content:\"\\e235\"}.glyphicon-menu-hamburger:before{content:\"\\e236\"}.glyphicon-modal-window:before{content:\"\\e237\"}.glyphicon-oil:before{content:\"\\e238\"}.glyphicon-grain:before{content:\"\\e239\"}.glyphicon-sunglasses:before{content:\"\\e240\"}.glyphicon-text-size:before{content:\"\\e241\"}.glyphicon-text-color:before{content:\"\\e242\"}.glyphicon-text-background:before{content:\"\\e243\"}.glyphicon-object-align-top:before{content:\"\\e244\"}.glyphicon-object-align-bottom:before{content:\"\\e245\"}.glyphicon-object-align-horizontal:before{content:\"\\e246\"}.glyphicon-object-align-left:before{content:\"\\e247\"}.glyphicon-object-align-vertical:before{content:\"\\e248\"}.glyphicon-object-align-right:before{content:\"\\e249\"}.glyphicon-triangle-right:before{content:\"\\e250\"}.glyphicon-triangle-left:before{content:\"\\e251\"}.glyphicon-triangle-bottom:before{content:\"\\e252\"}.glyphicon-triangle-top:before{content:\"\\e253\"}.glyphicon-console:before{content:\"\\e254\"}.glyphicon-superscript:before{content:\"\\e255\"}.glyphicon-subscript:before{content:\"\\e256\"}.glyphicon-menu-left:before{content:\"\\e257\"}.glyphicon-menu-right:before{content:\"\\e258\"}.glyphicon-menu-down:before{content:\"\\e259\"}.glyphicon-menu-up:before{content:\"\\e260\"}"}],"authorContributionMap":{"jingting1412":17}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/js/bootstrap-utility.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" * Bootstrap v5.1.3 (https://getbootstrap.com/)"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" */"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"!function(t,e){\"object\"\u003d\u003dtypeof exports\u0026\u0026\"undefined\"!\u003dtypeof module?module.exports\u003de():\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define(e):(t\u003d\"undefined\"!\u003dtypeof globalThis?globalThis:t||self).bootstrap\u003de()}(this,(function(){\"use strict\";const t\u003d\"transitionend\",e\u003dt\u003d\u003e{let e\u003dt.getAttribute(\"data-bs-target\");if(!e||\"#\"\u003d\u003d\u003de){let i\u003dt.getAttribute(\"href\");if(!i||!i.includes(\"#\")\u0026\u0026!i.startsWith(\".\"))return null;i.includes(\"#\")\u0026\u0026!i.startsWith(\"#\")\u0026\u0026(i\u003d`#${i.split(\"#\")[1]}`),e\u003di\u0026\u0026\"#\"!\u003d\u003di?i.trim():null}return e},i\u003dt\u003d\u003e{const i\u003de(t);return i\u0026\u0026document.querySelector(i)?i:null},n\u003dt\u003d\u003e{const i\u003de(t);return i?document.querySelector(i):null},s\u003de\u003d\u003e{e.dispatchEvent(new Event(t))},o\u003dt\u003d\u003e!(!t||\"object\"!\u003dtypeof t)\u0026\u0026(void 0!\u003d\u003dt.jquery\u0026\u0026(t\u003dt[0]),void 0!\u003d\u003dt.nodeType),r\u003dt\u003d\u003eo(t)?t.jquery?t[0]:t:\"string\"\u003d\u003dtypeof t\u0026\u0026t.length\u003e0?document.querySelector(t):null,a\u003d(t,e,i)\u003d\u003e{Object.keys(i).forEach((n\u003d\u003e{const s\u003di[n],r\u003de[n],a\u003dr\u0026\u0026o(r)?\"element\":null\u003d\u003d(l\u003dr)?`${l}`:{}.toString.call(l).match(/\\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option \"${n}\" provided type \"${a}\" but expected type \"${s}\".`)}))},l\u003dt\u003d\u003e!(!o(t)||0\u003d\u003d\u003dt.getClientRects().length)\u0026\u0026\"visible\"\u003d\u003d\u003dgetComputedStyle(t).getPropertyValue(\"visibility\"),c\u003dt\u003d\u003e!t||t.nodeType!\u003d\u003dNode.ELEMENT_NODE||!!t.classList.contains(\"disabled\")||(void 0!\u003d\u003dt.disabled?t.disabled:t.hasAttribute(\"disabled\")\u0026\u0026\"false\"!\u003d\u003dt.getAttribute(\"disabled\")),h\u003dt\u003d\u003e{if(!document.documentElement.attachShadow)return null;if(\"function\"\u003d\u003dtypeof t.getRootNode){const e\u003dt.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d\u003d()\u003d\u003e{},u\u003dt\u003d\u003e{t.offsetHeight},f\u003d()\u003d\u003e{const{jQuery:t}\u003dwindow;return t\u0026\u0026!document.body.hasAttribute(\"data-bs-no-jquery\")?t:null},p\u003d[],m\u003d()\u003d\u003e\"rtl\"\u003d\u003d\u003ddocument.documentElement.dir,g\u003dt\u003d\u003e{var e;e\u003d()\u003d\u003e{const e\u003df();if(e){const i\u003dt.NAME,n\u003de.fn[i];e.fn[i]\u003dt.jQueryInterface,e.fn[i].Constructor\u003dt,e.fn[i].noConflict\u003d()\u003d\u003e(e.fn[i]\u003dn,t.jQueryInterface)}},\"loading\"\u003d\u003d\u003ddocument.readyState?(p.length||document.addEventListener(\"DOMContentLoaded\",(()\u003d\u003e{p.forEach((t\u003d\u003et()))})),p.push(e)):e()},_\u003dt\u003d\u003e{\"function\"\u003d\u003dtypeof t\u0026\u0026t()},b\u003d(e,i,n\u003d!0)\u003d\u003e{if(!n)return void _(e);const o\u003d(t\u003d\u003e{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}\u003dwindow.getComputedStyle(t);const n\u003dNumber.parseFloat(e),s\u003dNumber.parseFloat(i);return n||s?(e\u003de.split(\",\")[0],i\u003di.split(\",\")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r\u003d!1;const a\u003d({target:n})\u003d\u003e{n\u003d\u003d\u003di\u0026\u0026(r\u003d!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()\u003d\u003e{r||s(i)}),o)},v\u003d(t,e,i,n)\u003d\u003e{let s\u003dt.indexOf(e);if(-1\u003d\u003d\u003ds)return t[!i\u0026\u0026n?t.length-1:0];const o\u003dt.length;return s+\u003di?1:-1,n\u0026\u0026(s\u003d(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y\u003d/[^.]*(?\u003d\\..*)\\.|.*/,w\u003d/\\..*/,E\u003d/::\\d+$/,A\u003d{};let T\u003d1;const O\u003d{mouseenter:\"mouseover\",mouseleave:\"mouseout\"},C\u003d/^(mouseenter|mouseleave)/i,k\u003dnew Set([\"click\",\"dblclick\",\"mouseup\",\"mousedown\",\"contextmenu\",\"mousewheel\",\"DOMMouseScroll\",\"mouseover\",\"mouseout\",\"mousemove\",\"selectstart\",\"selectend\",\"keydown\",\"keypress\",\"keyup\",\"orientationchange\",\"touchstart\",\"touchmove\",\"touchend\",\"touchcancel\",\"pointerdown\",\"pointermove\",\"pointerup\",\"pointerleave\",\"pointercancel\",\"gesturestart\",\"gesturechange\",\"gestureend\",\"focus\",\"blur\",\"change\",\"reset\",\"select\",\"submit\",\"focusin\",\"focusout\",\"load\",\"unload\",\"beforeunload\",\"resize\",\"move\",\"DOMContentLoaded\",\"readystatechange\",\"error\",\"abort\",\"scroll\"]);function L(t,e){return e\u0026\u0026`${e}::${T++}`||t.uidEvent||T++}function x(t){const e\u003dL(t);return t.uidEvent\u003de,A[e]\u003dA[e]||{},A[e]}function D(t,e,i\u003dnull){const n\u003dObject.keys(t);for(let s\u003d0,o\u003dn.length;s\u003co;s++){const o\u003dt[n[s]];if(o.originalHandler\u003d\u003d\u003de\u0026\u0026o.delegationSelector\u003d\u003d\u003di)return o}return null}function S(t,e,i){const n\u003d\"string\"\u003d\u003dtypeof e,s\u003dn?i:e;let o\u003dP(t);return k.has(o)||(o\u003dt),[n,s,o]}function N(t,e,i,n,s){if(\"string\"!\u003dtypeof e||!t)return;if(i||(i\u003dn,n\u003dnull),C.test(e)){const t\u003dt\u003d\u003efunction(e){if(!e.relatedTarget||e.relatedTarget!\u003d\u003de.delegateTarget\u0026\u0026!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n\u003dt(n):i\u003dt(i)}const[o,r,a]\u003dS(e,i,n),l\u003dx(t),c\u003dl[a]||(l[a]\u003d{}),h\u003dD(c,r,o?i:null);if(h)return void(h.oneOff\u003dh.oneOff\u0026\u0026s);const d\u003dL(r,e.replace(y,\"\")),u\u003do?function(t,e,i){return function n(s){const o\u003dt.querySelectorAll(e);for(let{target:r}\u003ds;r\u0026\u0026r!\u003d\u003dthis;r\u003dr.parentNode)for(let a\u003do.length;a--;)if(o[a]\u003d\u003d\u003dr)return s.delegateTarget\u003dr,n.oneOff\u0026\u0026j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget\u003dt,i.oneOff\u0026\u0026j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector\u003do?i:null,u.originalHandler\u003dr,u.oneOff\u003ds,u.uidEvent\u003dd,c[d]\u003du,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o\u003dD(e[i],n,s);o\u0026\u0026(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t\u003dt.replace(w,\"\"),O[t]||t}const j\u003d{on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if(\"string\"!\u003dtypeof e||!t)return;const[s,o,r]\u003dS(e,i,n),a\u003dr!\u003d\u003de,l\u003dx(t),c\u003de.startsWith(\".\");if(void 0!\u003d\u003do){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c\u0026\u0026Object.keys(l).forEach((i\u003d\u003e{!function(t,e,i,n){const s\u003de[i]||{};Object.keys(s).forEach((o\u003d\u003e{if(o.includes(n)){const n\u003ds[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h\u003dl[r]||{};Object.keys(h).forEach((i\u003d\u003e{const n\u003di.replace(E,\"\");if(!a||e.includes(n)){const e\u003dh[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if(\"string\"!\u003dtypeof e||!t)return null;const n\u003df(),s\u003dP(e),o\u003de!\u003d\u003ds,r\u003dk.has(s);let a,l\u003d!0,c\u003d!0,h\u003d!1,d\u003dnull;return o\u0026\u0026n\u0026\u0026(a\u003dn.Event(e,i),n(t).trigger(a),l\u003d!a.isPropagationStopped(),c\u003d!a.isImmediatePropagationStopped(),h\u003da.isDefaultPrevented()),r?(d\u003ddocument.createEvent(\"HTMLEvents\"),d.initEvent(s,l,!0)):d\u003dnew CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!\u003d\u003di\u0026\u0026Object.keys(i).forEach((t\u003d\u003e{Object.defineProperty(d,t,{get:()\u003d\u003ei[t]})})),h\u0026\u0026d.preventDefault(),c\u0026\u0026t.dispatchEvent(d),d.defaultPrevented\u0026\u0026void 0!\u003d\u003da\u0026\u0026a.preventDefault(),d}},M\u003dnew Map,H\u003d{set(t,e,i){M.has(t)||M.set(t,new Map);const n\u003dM.get(t);n.has(e)||0\u003d\u003d\u003dn.size?n.set(e,i):console.error(`Bootstrap doesn\u0027t allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)\u003d\u003eM.has(t)\u0026\u0026M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i\u003dM.get(t);i.delete(e),0\u003d\u003d\u003di.size\u0026\u0026M.delete(t)}};class B{constructor(t){(t\u003dr(t))\u0026\u0026(this._element\u003dt,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t\u003d\u003e{this[t]\u003dnull}))}_queueCallback(t,e,i\u003d!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e\u003d{}){return this.getInstance(t)||new this(t,\"object\"\u003d\u003dtypeof e?e:null)}static get VERSION(){return\"5.1.3\"}static get NAME(){throw new Error(\u0027You have to implement the static method \"NAME\", for each component!\u0027)}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R\u003d(t,e\u003d\"hide\")\u003d\u003e{const i\u003d`click.dismiss${t.EVENT_KEY}`,s\u003dt.NAME;j.on(document,i,`[data-bs-dismiss\u003d\"${s}\"]`,(function(i){if([\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026i.preventDefault(),c(this))return;const o\u003dn(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return\"alert\"}close(){if(j.trigger(this._element,\"close.bs.alert\").defaultPrevented)return;this._element.classList.remove(\"show\");const t\u003dthis._element.classList.contains(\"fade\");this._queueCallback((()\u003d\u003ethis._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,\"closed.bs.alert\"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e\u003dW.getOrCreateInstance(this);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t]||t.startsWith(\"_\")||\"constructor\"\u003d\u003d\u003dt)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}R(W,\"close\"),g(W);const $\u003d\u0027[data-bs-toggle\u003d\"button\"]\u0027;class z extends B{static get NAME(){return\"button\"}toggle(){this._element.setAttribute(\"aria-pressed\",this._element.classList.toggle(\"active\"))}static jQueryInterface(t){return this.each((function(){const e\u003dz.getOrCreateInstance(this);\"toggle\"\u003d\u003d\u003dt\u0026\u0026e[t]()}))}}function q(t){return\"true\"\u003d\u003d\u003dt||\"false\"!\u003d\u003dt\u0026\u0026(t\u003d\u003d\u003dNumber(t).toString()?Number(t):\"\"\u003d\u003d\u003dt||\"null\"\u003d\u003d\u003dt?null:t)}function F(t){return t.replace(/[A-Z]/g,(t\u003d\u003e`-${t.toLowerCase()}`))}j.on(document,\"click.bs.button.data-api\",$,(t\u003d\u003e{t.preventDefault();const e\u003dt.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U\u003d{setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e\u003d{};return Object.keys(t.dataset).filter((t\u003d\u003et.startsWith(\"bs\"))).forEach((i\u003d\u003e{let n\u003di.replace(/^bs/,\"\");n\u003dn.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]\u003dq(t.dataset[i])})),e},getDataAttribute:(t,e)\u003d\u003eq(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e\u003dt.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t\u003d\u003e({top:t.offsetTop,left:t.offsetLeft})},V\u003d{find:(t,e\u003ddocument.documentElement)\u003d\u003e[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e\u003ddocument.documentElement)\u003d\u003eElement.prototype.querySelector.call(e,t),children:(t,e)\u003d\u003e[].concat(...t.children).filter((t\u003d\u003et.matches(e))),parents(t,e){const i\u003d[];let n\u003dt.parentNode;for(;n\u0026\u0026n.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE\u0026\u00263!\u003d\u003dn.nodeType;)n.matches(e)\u0026\u0026i.push(n),n\u003dn.parentNode;return i},prev(t,e){let i\u003dt.previousElementSibling;for(;i;){if(i.matches(e))return[i];i\u003di.previousElementSibling}return[]},next(t,e){let i\u003dt.nextElementSibling;for(;i;){if(i.matches(e))return[i];i\u003di.nextElementSibling}return[]},focusableChildren(t){const e\u003d[\"a\",\"button\",\"input\",\"textarea\",\"select\",\"details\",\"[tabindex]\",\u0027[contenteditable\u003d\"true\"]\u0027].map((t\u003d\u003e`${t}:not([tabindex^\u003d\"-\"])`)).join(\", \");return this.find(e,t).filter((t\u003d\u003e!c(t)\u0026\u0026l(t)))}},K\u003d\"carousel\",X\u003d{interval:5e3,keyboard:!0,slide:!1,pause:\"hover\",wrap:!0,touch:!0},Y\u003d{interval:\"(number|boolean)\",keyboard:\"boolean\",slide:\"(boolean|string)\",pause:\"(string|boolean)\",wrap:\"boolean\",touch:\"boolean\"},Q\u003d\"next\",G\u003d\"prev\",Z\u003d\"left\",J\u003d\"right\",tt\u003d{ArrowLeft:J,ArrowRight:Z},et\u003d\"slid.bs.carousel\",it\u003d\"active\",nt\u003d\".active.carousel-item\";class st extends B{constructor(t,e){super(t),this._items\u003dnull,this._interval\u003dnull,this._activeElement\u003dnull,this._isPaused\u003d!1,this._isSliding\u003d!1,this.touchTimeout\u003dnull,this.touchStartX\u003d0,this.touchDeltaX\u003d0,this._config\u003dthis._getConfig(e),this._indicatorsElement\u003dV.findOne(\".carousel-indicators\",this._element),this._touchSupported\u003d\"ontouchstart\"in document.documentElement||navigator.maxTouchPoints\u003e0,this._pointerEvent\u003dBoolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden\u0026\u0026l(this._element)\u0026\u0026this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused\u003d!0),V.findOne(\".carousel-item-next, .carousel-item-prev\",this._element)\u0026\u0026(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval\u003dnull}cycle(t){t||(this._isPaused\u003d!1),this._interval\u0026\u0026(clearInterval(this._interval),this._interval\u003dnull),this._config\u0026\u0026this._config.interval\u0026\u0026!this._isPaused\u0026\u0026(this._updateInterval(),this._interval\u003dsetInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement\u003dV.findOne(nt,this._element);const e\u003dthis._getItemIndex(this._activeElement);if(t\u003ethis._items.length-1||t\u003c0)return;if(this._isSliding)return void j.one(this._element,et,(()\u003d\u003ethis.to(t)));if(e\u003d\u003d\u003dt)return this.pause(),void this.cycle();const i\u003dt\u003ee?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t\u003d{...X,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t\u003dMath.abs(this.touchDeltaX);if(t\u003c\u003d40)return;const e\u003dt/this.touchDeltaX;this.touchDeltaX\u003d0,e\u0026\u0026this._slide(e\u003e0?J:Z)}_addEventListeners(){this._config.keyboard\u0026\u0026j.on(this._element,\"keydown.bs.carousel\",(t\u003d\u003ethis._keydown(t))),\"hover\"\u003d\u003d\u003dthis._config.pause\u0026\u0026(j.on(this._element,\"mouseenter.bs.carousel\",(t\u003d\u003ethis.pause(t))),j.on(this._element,\"mouseleave.bs.carousel\",(t\u003d\u003ethis.cycle(t)))),this._config.touch\u0026\u0026this._touchSupported\u0026\u0026this._addTouchEventListeners()}_addTouchEventListeners(){const t\u003dt\u003d\u003ethis._pointerEvent\u0026\u0026(\"pen\"\u003d\u003d\u003dt.pointerType||\"touch\"\u003d\u003d\u003dt.pointerType),e\u003de\u003d\u003e{t(e)?this.touchStartX\u003de.clientX:this._pointerEvent||(this.touchStartX\u003de.touches[0].clientX)},i\u003dt\u003d\u003e{this.touchDeltaX\u003dt.touches\u0026\u0026t.touches.length\u003e1?0:t.touches[0].clientX-this.touchStartX},n\u003de\u003d\u003e{t(e)\u0026\u0026(this.touchDeltaX\u003de.clientX-this.touchStartX),this._handleSwipe(),\"hover\"\u003d\u003d\u003dthis._config.pause\u0026\u0026(this.pause(),this.touchTimeout\u0026\u0026clearTimeout(this.touchTimeout),this.touchTimeout\u003dsetTimeout((t\u003d\u003ethis.cycle(t)),500+this._config.interval))};V.find(\".carousel-item img\",this._element).forEach((t\u003d\u003e{j.on(t,\"dragstart.bs.carousel\",(t\u003d\u003et.preventDefault()))})),this._pointerEvent?(j.on(this._element,\"pointerdown.bs.carousel\",(t\u003d\u003ee(t))),j.on(this._element,\"pointerup.bs.carousel\",(t\u003d\u003en(t))),this._element.classList.add(\"pointer-event\")):(j.on(this._element,\"touchstart.bs.carousel\",(t\u003d\u003ee(t))),j.on(this._element,\"touchmove.bs.carousel\",(t\u003d\u003ei(t))),j.on(this._element,\"touchend.bs.carousel\",(t\u003d\u003en(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e\u003dtt[t.key];e\u0026\u0026(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items\u003dt\u0026\u0026t.parentNode?V.find(\".carousel-item\",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i\u003dt\u003d\u003d\u003dQ;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i\u003dthis._getItemIndex(t),n\u003dthis._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,\"slide.bs.carousel\",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e\u003dV.findOne(\".active\",this._indicatorsElement);e.classList.remove(it),e.removeAttribute(\"aria-current\");const i\u003dV.find(\"[data-bs-target]\",this._indicatorsElement);for(let e\u003d0;e\u003ci.length;e++)if(Number.parseInt(i[e].getAttribute(\"data-bs-slide-to\"),10)\u003d\u003d\u003dthis._getItemIndex(t)){i[e].classList.add(it),i[e].setAttribute(\"aria-current\",\"true\");break}}}_updateInterval(){const t\u003dthis._activeElement||V.findOne(nt,this._element);if(!t)return;const e\u003dNumber.parseInt(t.getAttribute(\"data-bs-interval\"),10);e?(this._config.defaultInterval\u003dthis._config.defaultInterval||this._config.interval,this._config.interval\u003de):this._config.interval\u003dthis._config.defaultInterval||this._config.interval}_slide(t,e){const i\u003dthis._directionToOrder(t),n\u003dV.findOne(nt,this._element),s\u003dthis._getItemIndex(n),o\u003de||this._getItemByOrder(i,n),r\u003dthis._getItemIndex(o),a\u003dBoolean(this._interval),l\u003di\u003d\u003d\u003dQ,c\u003dl?\"carousel-item-start\":\"carousel-item-end\",h\u003dl?\"carousel-item-next\":\"carousel-item-prev\",d\u003dthis._orderToDirection(i);if(o\u0026\u0026o.classList.contains(it))return void(this._isSliding\u003d!1);if(this._isSliding)return;if(this._triggerSlideEvent(o,d).defaultPrevented)return;if(!n||!o)return;this._isSliding\u003d!0,a\u0026\u0026this.pause(),this._setActiveIndicatorElement(o),this._activeElement\u003do;const f\u003d()\u003d\u003e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains(\"slide\")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t\u003d()\u003d\u003e{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding\u003d!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding\u003d!1,f();a\u0026\u0026this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t\u003d\u003d\u003dZ?G:Q:t\u003d\u003d\u003dZ?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t\u003d\u003d\u003dG?Z:J:t\u003d\u003d\u003dG?J:Z:t}static carouselInterface(t,e){const i\u003dst.getOrCreateInstance(t,e);let{_config:n}\u003di;\"object\"\u003d\u003dtypeof e\u0026\u0026(n\u003d{...n,...e});const s\u003d\"string\"\u003d\u003dtypeof e?e:n.slide;if(\"number\"\u003d\u003dtypeof e)i.to(e);else if(\"string\"\u003d\u003dtypeof s){if(void 0\u003d\u003d\u003di[s])throw new TypeError(`No method named \"${s}\"`);i[s]()}else n.interval\u0026\u0026n.ride\u0026\u0026(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e\u003dn(this);if(!e||!e.classList.contains(\"carousel\"))return;const i\u003d{...U.getDataAttributes(e),...U.getDataAttributes(this)},s\u003dthis.getAttribute(\"data-bs-slide-to\");s\u0026\u0026(i.interval\u003d!1),st.carouselInterface(e,i),s\u0026\u0026st.getInstance(e).to(s),t.preventDefault()}}j.on(document,\"click.bs.carousel.data-api\",\"[data-bs-slide], [data-bs-slide-to]\",st.dataApiClickHandler),j.on(window,\"load.bs.carousel.data-api\",(()\u003d\u003e{const t\u003dV.find(\u0027[data-bs-ride\u003d\"carousel\"]\u0027);for(let e\u003d0,i\u003dt.length;e\u003ci;e++)st.carouselInterface(t[e],st.getInstance(t[e]))})),g(st);const ot\u003d\"collapse\",rt\u003d{toggle:!0,parent:null},at\u003d{toggle:\"boolean\",parent:\"(null|element)\"},lt\u003d\"show\",ct\u003d\"collapse\",ht\u003d\"collapsing\",dt\u003d\"collapsed\",ut\u003d\":scope .collapse .collapse\",ft\u003d\u0027[data-bs-toggle\u003d\"collapse\"]\u0027;class pt extends B{constructor(t,e){super(t),this._isTransitioning\u003d!1,this._config\u003dthis._getConfig(e),this._triggerArray\u003d[];const n\u003dV.find(ft);for(let t\u003d0,e\u003dn.length;t\u003ce;t++){const e\u003dn[t],s\u003di(e),o\u003dV.find(s).filter((t\u003d\u003et\u003d\u003d\u003dthis._element));null!\u003d\u003ds\u0026\u0026o.length\u0026\u0026(this._selector\u003ds,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle\u0026\u0026this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e\u003d[];if(this._config.parent){const t\u003dV.find(ut,this._config.parent);e\u003dV.find(\".collapse.show, .collapse.collapsing\",this._config.parent).filter((e\u003d\u003e!t.includes(e)))}const i\u003dV.findOne(this._selector);if(e.length){const n\u003de.find((t\u003d\u003ei!\u003d\u003dt));if(t\u003dn?pt.getInstance(n):null,t\u0026\u0026t._isTransitioning)return}if(j.trigger(this._element,\"show.bs.collapse\").defaultPrevented)return;e.forEach((e\u003d\u003e{i!\u003d\u003de\u0026\u0026pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,\"bs.collapse\",null)}));const n\u003dthis._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]\u003d0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning\u003d!0;const s\u003d`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()\u003d\u003e{this._isTransitioning\u003d!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]\u003d\"\",j.trigger(this._element,\"shown.bs.collapse\")}),this._element,!0),this._element.style[n]\u003d`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,\"hide.bs.collapse\").defaultPrevented)return;const t\u003dthis._getDimension();this._element.style[t]\u003d`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e\u003dthis._triggerArray.length;for(let t\u003d0;t\u003ce;t++){const e\u003dthis._triggerArray[t],i\u003dn(e);i\u0026\u0026!this._isShown(i)\u0026\u0026this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning\u003d!0,this._element.style[t]\u003d\"\",this._queueCallback((()\u003d\u003e{this._isTransitioning\u003d!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,\"hidden.bs.collapse\")}),this._element,!0)}_isShown(t\u003dthis._element){return t.classList.contains(lt)}_getConfig(t){return(t\u003d{...rt,...U.getDataAttributes(this._element),...t}).toggle\u003dBoolean(t.toggle),t.parent\u003dr(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains(\"collapse-horizontal\")?\"width\":\"height\"}_initializeChildren(){if(!this._config.parent)return;const t\u003dV.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e\u003d\u003e!t.includes(e))).forEach((t\u003d\u003e{const e\u003dn(t);e\u0026\u0026this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length\u0026\u0026t.forEach((t\u003d\u003e{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute(\"aria-expanded\",e)}))}static jQueryInterface(t){return this.each((function(){const e\u003d{};\"string\"\u003d\u003dtypeof t\u0026\u0026/show|hide/.test(t)\u0026\u0026(e.toggle\u003d!1);const i\u003dpt.getOrCreateInstance(this,e);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003di[t])throw new TypeError(`No method named \"${t}\"`);i[t]()}}))}}j.on(document,\"click.bs.collapse.data-api\",ft,(function(t){(\"A\"\u003d\u003d\u003dt.target.tagName||t.delegateTarget\u0026\u0026\"A\"\u003d\u003d\u003dt.delegateTarget.tagName)\u0026\u0026t.preventDefault();const e\u003di(this);V.find(e).forEach((t\u003d\u003e{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt\u003d\"top\",gt\u003d\"bottom\",_t\u003d\"right\",bt\u003d\"left\",vt\u003d\"auto\",yt\u003d[mt,gt,_t,bt],wt\u003d\"start\",Et\u003d\"end\",At\u003d\"clippingParents\",Tt\u003d\"viewport\",Ot\u003d\"popper\",Ct\u003d\"reference\",kt\u003dyt.reduce((function(t,e){return t.concat([e+\"-\"+wt,e+\"-\"+Et])}),[]),Lt\u003d[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+\"-\"+wt,e+\"-\"+Et])}),[]),xt\u003d\"beforeRead\",Dt\u003d\"read\",St\u003d\"afterRead\",Nt\u003d\"beforeMain\",It\u003d\"main\",Pt\u003d\"afterMain\",jt\u003d\"beforeWrite\",Mt\u003d\"write\",Ht\u003d\"afterWrite\",Bt\u003d[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||\"\").toLowerCase():null}function Wt(t){if(null\u003d\u003dt)return window;if(\"[object Window]\"!\u003d\u003dt.toString()){var e\u003dt.ownerDocument;return e\u0026\u0026e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return\"undefined\"!\u003dtypeof ShadowRoot\u0026\u0026(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft\u003d{name:\"applyStyles\",enabled:!0,phase:\"write\",fn:function(t){var e\u003dt.state;Object.keys(e.elements).forEach((function(t){var i\u003de.styles[t]||{},n\u003de.attributes[t]||{},s\u003de.elements[t];zt(s)\u0026\u0026Rt(s)\u0026\u0026(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e\u003dn[t];!1\u003d\u003d\u003de?s.removeAttribute(t):s.setAttribute(t,!0\u003d\u003d\u003de?\"\":e)})))}))},effect:function(t){var e\u003dt.state,i\u003d{popper:{position:e.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles\u003di,e.elements.arrow\u0026\u0026Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n\u003de.elements[t],s\u003de.attributes[t]||{},o\u003dObject.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]\u003d\"\",t}),{});zt(n)\u0026\u0026Rt(n)\u0026\u0026(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:[\"computeStyles\"]};function Ut(t){return t.split(\"-\")[0]}function Vt(t,e){var i\u003dt.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e\u003dVt(t),i\u003dt.offsetWidth,n\u003dt.offsetHeight;return Math.abs(e.width-i)\u003c\u003d1\u0026\u0026(i\u003de.width),Math.abs(e.height-n)\u003c\u003d1\u0026\u0026(n\u003de.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i\u003de.getRootNode\u0026\u0026e.getRootNode();if(t.contains(e))return!0;if(i\u0026\u0026qt(i)){var n\u003de;do{if(n\u0026\u0026t.isSameNode(n))return!0;n\u003dn.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return[\"table\",\"td\",\"th\"].indexOf(Rt(t))\u003e\u003d0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return\"html\"\u003d\u003d\u003dRt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)\u0026\u0026\"fixed\"!\u003d\u003dYt(t).position?t.offsetParent:null}function te(t){for(var e\u003dWt(t),i\u003dJt(t);i\u0026\u0026Qt(i)\u0026\u0026\"static\"\u003d\u003d\u003dYt(i).position;)i\u003dJt(i);return i\u0026\u0026(\"html\"\u003d\u003d\u003dRt(i)||\"body\"\u003d\u003d\u003dRt(i)\u0026\u0026\"static\"\u003d\u003d\u003dYt(i).position)?e:i||function(t){var e\u003d-1!\u003d\u003dnavigator.userAgent.toLowerCase().indexOf(\"firefox\");if(-1!\u003d\u003dnavigator.userAgent.indexOf(\"Trident\")\u0026\u0026zt(t)\u0026\u0026\"fixed\"\u003d\u003d\u003dYt(t).position)return null;for(var i\u003dZt(t);zt(i)\u0026\u0026[\"html\",\"body\"].indexOf(Rt(i))\u003c0;){var n\u003dYt(i);if(\"none\"!\u003d\u003dn.transform||\"none\"!\u003d\u003dn.perspective||\"paint\"\u003d\u003d\u003dn.contain||-1!\u003d\u003d[\"transform\",\"perspective\"].indexOf(n.willChange)||e\u0026\u0026\"filter\"\u003d\u003d\u003dn.willChange||e\u0026\u0026n.filter\u0026\u0026\"none\"!\u003d\u003dn.filter)return i;i\u003di.parentNode}return null}(t)||e}function ee(t){return[\"top\",\"bottom\"].indexOf(t)\u003e\u003d0?\"x\":\"y\"}var ie\u003dMath.max,ne\u003dMath.min,se\u003dMath.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]\u003dt,e}),{})}const le\u003d{name:\"arrow\",enabled:!0,phase:\"main\",fn:function(t){var e,i\u003dt.state,n\u003dt.name,s\u003dt.options,o\u003di.elements.arrow,r\u003di.modifiersData.popperOffsets,a\u003dUt(i.placement),l\u003dee(a),c\u003d[bt,_t].indexOf(a)\u003e\u003d0?\"height\":\"width\";if(o\u0026\u0026r){var h\u003dfunction(t,e){return re(\"number\"!\u003dtypeof(t\u003d\"function\"\u003d\u003dtypeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d\u003dKt(o),u\u003d\"y\"\u003d\u003d\u003dl?mt:bt,f\u003d\"y\"\u003d\u003d\u003dl?gt:_t,p\u003di.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m\u003dr[l]-i.rects.reference[l],g\u003dte(o),_\u003dg?\"y\"\u003d\u003d\u003dl?g.clientHeight||0:g.clientWidth||0:0,b\u003dp/2-m/2,v\u003dh[u],y\u003d_-d[c]-h[f],w\u003d_/2-d[c]/2+b,E\u003doe(v,w,y),A\u003dl;i.modifiersData[n]\u003d((e\u003d{})[A]\u003dE,e.centerOffset\u003dE-w,e)}},effect:function(t){var e\u003dt.state,i\u003dt.options.element,n\u003dvoid 0\u003d\u003d\u003di?\"[data-popper-arrow]\":i;null!\u003dn\u0026\u0026(\"string\"!\u003dtypeof n||(n\u003de.elements.popper.querySelector(n)))\u0026\u0026Xt(e.elements.popper,n)\u0026\u0026(e.elements.arrow\u003dn)},requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function ce(t){return t.split(\"-\")[1]}var he\u003d{top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function de(t){var e,i\u003dt.popper,n\u003dt.popperRect,s\u003dt.placement,o\u003dt.variation,r\u003dt.offsets,a\u003dt.position,l\u003dt.gpuAcceleration,c\u003dt.adaptive,h\u003dt.roundOffsets,d\u003d!0\u003d\u003d\u003dh?function(t){var e\u003dt.x,i\u003dt.y,n\u003dwindow.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):\"function\"\u003d\u003dtypeof h?h(r):r,u\u003dd.x,f\u003dvoid 0\u003d\u003d\u003du?0:u,p\u003dd.y,m\u003dvoid 0\u003d\u003d\u003dp?0:p,g\u003dr.hasOwnProperty(\"x\"),_\u003dr.hasOwnProperty(\"y\"),b\u003dbt,v\u003dmt,y\u003dwindow;if(c){var w\u003dte(i),E\u003d\"clientHeight\",A\u003d\"clientWidth\";w\u003d\u003d\u003dWt(i)\u0026\u0026\"static\"!\u003d\u003dYt(w\u003dGt(i)).position\u0026\u0026\"absolute\"\u003d\u003d\u003da\u0026\u0026(E\u003d\"scrollHeight\",A\u003d\"scrollWidth\"),w\u003dw,s!\u003d\u003dmt\u0026\u0026(s!\u003d\u003dbt\u0026\u0026s!\u003d\u003d_t||o!\u003d\u003dEt)||(v\u003dgt,m-\u003dw[E]-n.height,m*\u003dl?1:-1),s!\u003d\u003dbt\u0026\u0026(s!\u003d\u003dmt\u0026\u0026s!\u003d\u003dgt||o!\u003d\u003dEt)||(b\u003d_t,f-\u003dw[A]-n.width,f*\u003dl?1:-1)}var T,O\u003dObject.assign({position:a},c\u0026\u0026he);return l?Object.assign({},O,((T\u003d{})[v]\u003d_?\"0\":\"\",T[b]\u003dg?\"0\":\"\",T.transform\u003d(y.devicePixelRatio||1)\u003c\u003d1?\"translate(\"+f+\"px, \"+m+\"px)\":\"translate3d(\"+f+\"px, \"+m+\"px, 0)\",T)):Object.assign({},O,((e\u003d{})[v]\u003d_?m+\"px\":\"\",e[b]\u003dg?f+\"px\":\"\",e.transform\u003d\"\",e))}const ue\u003d{name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003di.gpuAcceleration,s\u003dvoid 0\u003d\u003d\u003dn||n,o\u003di.adaptive,r\u003dvoid 0\u003d\u003d\u003do||o,a\u003di.roundOffsets,l\u003dvoid 0\u003d\u003d\u003da||a,c\u003d{placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!\u003de.modifiersData.popperOffsets\u0026\u0026(e.styles.popper\u003dObject.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!\u003de.modifiersData.arrow\u0026\u0026(e.styles.arrow\u003dObject.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:l})))),e.attributes.popper\u003dObject.assign({},e.attributes.popper,{\"data-popper-placement\":e.placement})},data:{}};var fe\u003d{passive:!0};const pe\u003d{name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:function(t){var e\u003dt.state,i\u003dt.instance,n\u003dt.options,s\u003dn.scroll,o\u003dvoid 0\u003d\u003d\u003ds||s,r\u003dn.resize,a\u003dvoid 0\u003d\u003d\u003dr||r,l\u003dWt(e.elements.popper),c\u003d[].concat(e.scrollParents.reference,e.scrollParents.popper);return o\u0026\u0026c.forEach((function(t){t.addEventListener(\"scroll\",i.update,fe)})),a\u0026\u0026l.addEventListener(\"resize\",i.update,fe),function(){o\u0026\u0026c.forEach((function(t){t.removeEventListener(\"scroll\",i.update,fe)})),a\u0026\u0026l.removeEventListener(\"resize\",i.update,fe)}},data:{}};var me\u003d{left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e\u003d{start:\"end\",end:\"start\"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e\u003dWt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e\u003dYt(t),i\u003de.overflow,n\u003de.overflowX,s\u003de.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return[\"html\",\"body\",\"#document\"].indexOf(Rt(t))\u003e\u003d0?t.ownerDocument.body:zt(t)\u0026\u0026we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[]);var n\u003dEe(t),s\u003dn\u003d\u003d\u003d(null\u003d\u003d(i\u003dt.ownerDocument)?void 0:i.body),o\u003dWt(n),r\u003ds?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a\u003de.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e\u003d\u003d\u003dTt?Te(function(t){var e\u003dWt(t),i\u003dGt(t),n\u003de.visualViewport,s\u003di.clientWidth,o\u003di.clientHeight,r\u003d0,a\u003d0;return n\u0026\u0026(s\u003dn.width,o\u003dn.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r\u003dn.offsetLeft,a\u003dn.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e\u003dVt(t);return e.top\u003de.top+t.clientTop,e.left\u003de.left+t.clientLeft,e.bottom\u003de.top+t.clientHeight,e.right\u003de.left+t.clientWidth,e.width\u003dt.clientWidth,e.height\u003dt.clientHeight,e.x\u003de.left,e.y\u003de.top,e}(e):Te(function(t){var e,i\u003dGt(t),n\u003dve(t),s\u003dnull\u003d\u003d(e\u003dt.ownerDocument)?void 0:e.body,o\u003die(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r\u003die(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a\u003d-n.scrollLeft+ye(t),l\u003d-n.scrollTop;return\"rtl\"\u003d\u003d\u003dYt(s||i).direction\u0026\u0026(a+\u003die(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i\u003dt.reference,n\u003dt.element,s\u003dt.placement,o\u003ds?Ut(s):null,r\u003ds?ce(s):null,a\u003di.x+i.width/2-n.width/2,l\u003di.y+i.height/2-n.height/2;switch(o){case mt:e\u003d{x:a,y:i.y-n.height};break;case gt:e\u003d{x:a,y:i.y+i.height};break;case _t:e\u003d{x:i.x+i.width,y:l};break;case bt:e\u003d{x:i.x-n.width,y:l};break;default:e\u003d{x:i.x,y:i.y}}var c\u003do?ee(o):null;if(null!\u003dc){var h\u003d\"y\"\u003d\u003d\u003dc?\"height\":\"width\";switch(r){case wt:e[c]\u003de[c]-(i[h]/2-n[h]/2);break;case Et:e[c]\u003de[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var i\u003de,n\u003di.placement,s\u003dvoid 0\u003d\u003d\u003dn?t.placement:n,o\u003di.boundary,r\u003dvoid 0\u003d\u003d\u003do?At:o,a\u003di.rootBoundary,l\u003dvoid 0\u003d\u003d\u003da?Tt:a,c\u003di.elementContext,h\u003dvoid 0\u003d\u003d\u003dc?Ot:c,d\u003di.altBoundary,u\u003dvoid 0!\u003d\u003dd\u0026\u0026d,f\u003di.padding,p\u003dvoid 0\u003d\u003d\u003df?0:f,m\u003dre(\"number\"!\u003dtypeof p?p:ae(p,yt)),g\u003dh\u003d\u003d\u003dOt?Ct:Ot,_\u003dt.rects.popper,b\u003dt.elements[u?g:h],v\u003dfunction(t,e,i){var n\u003d\"clippingParents\"\u003d\u003d\u003de?function(t){var e\u003dAe(Zt(t)),i\u003d[\"absolute\",\"fixed\"].indexOf(Yt(t).position)\u003e\u003d0\u0026\u0026zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)\u0026\u0026Xt(t,i)\u0026\u0026\"body\"!\u003d\u003dRt(t)})):[]}(t):[].concat(e),s\u003d[].concat(n,[i]),o\u003ds[0],r\u003ds.reduce((function(e,i){var n\u003dOe(t,i);return e.top\u003die(n.top,e.top),e.right\u003dne(n.right,e.right),e.bottom\u003dne(n.bottom,e.bottom),e.left\u003die(n.left,e.left),e}),Oe(t,o));return r.width\u003dr.right-r.left,r.height\u003dr.bottom-r.top,r.x\u003dr.left,r.y\u003dr.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y\u003dVt(t.elements.reference),w\u003dCe({reference:y,element:_,strategy:\"absolute\",placement:s}),E\u003dTe(Object.assign({},_,w)),A\u003dh\u003d\u003d\u003dOt?E:y,T\u003d{top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O\u003dt.modifiersData.offset;if(h\u003d\u003d\u003dOt\u0026\u0026O){var C\u003dO[s];Object.keys(T).forEach((function(t){var e\u003d[_t,gt].indexOf(t)\u003e\u003d0?1:-1,i\u003d[mt,gt].indexOf(t)\u003e\u003d0?\"y\":\"x\";T[t]+\u003dC[i]*e}))}return T}function Le(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var i\u003de,n\u003di.placement,s\u003di.boundary,o\u003di.rootBoundary,r\u003di.padding,a\u003di.flipVariations,l\u003di.allowedAutoPlacements,c\u003dvoid 0\u003d\u003d\u003dl?Lt:l,h\u003dce(n),d\u003dh?a?kt:kt.filter((function(t){return ce(t)\u003d\u003d\u003dh})):yt,u\u003dd.filter((function(t){return c.indexOf(t)\u003e\u003d0}));0\u003d\u003d\u003du.length\u0026\u0026(u\u003dd);var f\u003du.reduce((function(e,i){return e[i]\u003dke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe\u003d{name:\"flip\",enabled:!0,phase:\"main\",fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003dt.name;if(!e.modifiersData[n]._skip){for(var s\u003di.mainAxis,o\u003dvoid 0\u003d\u003d\u003ds||s,r\u003di.altAxis,a\u003dvoid 0\u003d\u003d\u003dr||r,l\u003di.fallbackPlacements,c\u003di.padding,h\u003di.boundary,d\u003di.rootBoundary,u\u003di.altBoundary,f\u003di.flipVariations,p\u003dvoid 0\u003d\u003d\u003df||f,m\u003di.allowedAutoPlacements,g\u003de.options.placement,_\u003dUt(g),b\u003dl||(_!\u003d\u003dg\u0026\u0026p?function(t){if(Ut(t)\u003d\u003d\u003dvt)return[];var e\u003dge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v\u003d[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)\u003d\u003d\u003dvt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y\u003de.rects.reference,w\u003de.rects.popper,E\u003dnew Map,A\u003d!0,T\u003dv[0],O\u003d0;O\u003cv.length;O++){var C\u003dv[O],k\u003dUt(C),L\u003dce(C)\u003d\u003d\u003dwt,x\u003d[mt,gt].indexOf(k)\u003e\u003d0,D\u003dx?\"width\":\"height\",S\u003dke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N\u003dx?L?_t:bt:L?gt:mt;y[D]\u003ew[D]\u0026\u0026(N\u003dge(N));var I\u003dge(N),P\u003d[];if(o\u0026\u0026P.push(S[k]\u003c\u003d0),a\u0026\u0026P.push(S[N]\u003c\u003d0,S[I]\u003c\u003d0),P.every((function(t){return t}))){T\u003dC,A\u003d!1;break}E.set(C,P)}if(A)for(var j\u003dfunction(t){var e\u003dv.find((function(e){var i\u003dE.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T\u003de,\"break\"},M\u003dp?3:1;M\u003e0\u0026\u0026\"break\"!\u003d\u003dj(M);M--);e.placement!\u003d\u003dT\u0026\u0026(e.modifiersData[n]._skip\u003d!0,e.placement\u003dT,e.reset\u003d!0)}},requiresIfExists:[\"offset\"],data:{_skip:!1}};function De(t,e,i){return void 0\u003d\u003d\u003di\u0026\u0026(i\u003d{x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]\u003e\u003d0}))}const Ne\u003d{name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:function(t){var e\u003dt.state,i\u003dt.name,n\u003de.rects.reference,s\u003de.rects.popper,o\u003de.modifiersData.preventOverflow,r\u003dke(e,{elementContext:\"reference\"}),a\u003dke(e,{altBoundary:!0}),l\u003dDe(r,n),c\u003dDe(a,s,o),h\u003dSe(l),d\u003dSe(c);e.modifiersData[i]\u003d{referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper\u003dObject.assign({},e.attributes.popper,{\"data-popper-reference-hidden\":h,\"data-popper-escaped\":d})}},Ie\u003d{name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003dt.name,s\u003di.offset,o\u003dvoid 0\u003d\u003d\u003ds?[0,0]:s,r\u003dLt.reduce((function(t,i){return t[i]\u003dfunction(t,e,i){var n\u003dUt(t),s\u003d[bt,mt].indexOf(n)\u003e\u003d0?-1:1,o\u003d\"function\"\u003d\u003dtypeof i?i(Object.assign({},e,{placement:t})):i,r\u003do[0],a\u003do[1];return r\u003dr||0,a\u003d(a||0)*s,[bt,_t].indexOf(n)\u003e\u003d0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a\u003dr[e.placement],l\u003da.x,c\u003da.y;null!\u003de.modifiersData.popperOffsets\u0026\u0026(e.modifiersData.popperOffsets.x+\u003dl,e.modifiersData.popperOffsets.y+\u003dc),e.modifiersData[n]\u003dr}},Pe\u003d{name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:function(t){var e\u003dt.state,i\u003dt.name;e.modifiersData[i]\u003dCe({reference:e.rects.reference,element:e.rects.popper,strategy:\"absolute\",placement:e.placement})},data:{}},je\u003d{name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003dt.name,s\u003di.mainAxis,o\u003dvoid 0\u003d\u003d\u003ds||s,r\u003di.altAxis,a\u003dvoid 0!\u003d\u003dr\u0026\u0026r,l\u003di.boundary,c\u003di.rootBoundary,h\u003di.altBoundary,d\u003di.padding,u\u003di.tether,f\u003dvoid 0\u003d\u003d\u003du||u,p\u003di.tetherOffset,m\u003dvoid 0\u003d\u003d\u003dp?0:p,g\u003dke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_\u003dUt(e.placement),b\u003dce(e.placement),v\u003d!b,y\u003dee(_),w\u003d\"x\"\u003d\u003d\u003dy?\"y\":\"x\",E\u003de.modifiersData.popperOffsets,A\u003de.rects.reference,T\u003de.rects.popper,O\u003d\"function\"\u003d\u003dtypeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C\u003d{x:0,y:0};if(E){if(o||a){var k\u003d\"y\"\u003d\u003d\u003dy?mt:bt,L\u003d\"y\"\u003d\u003d\u003dy?gt:_t,x\u003d\"y\"\u003d\u003d\u003dy?\"height\":\"width\",D\u003dE[y],S\u003dE[y]+g[k],N\u003dE[y]-g[L],I\u003df?-T[x]/2:0,P\u003db\u003d\u003d\u003dwt?A[x]:T[x],j\u003db\u003d\u003d\u003dwt?-T[x]:-A[x],M\u003de.elements.arrow,H\u003df\u0026\u0026M?Kt(M):{width:0,height:0},B\u003de.modifiersData[\"arrow#persistent\"]?e.modifiersData[\"arrow#persistent\"].padding:{top:0,right:0,bottom:0,left:0},R\u003dB[k],W\u003dB[L],$\u003doe(0,A[x],H[x]),z\u003dv?A[x]/2-I-$-R-O:P-$-R-O,q\u003dv?-A[x]/2+I+$+W+O:j+$+W+O,F\u003de.elements.arrow\u0026\u0026te(e.elements.arrow),U\u003dF?\"y\"\u003d\u003d\u003dy?F.clientTop||0:F.clientLeft||0:0,V\u003de.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K\u003dE[y]+z-V-U,X\u003dE[y]+q-V;if(o){var Y\u003doe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]\u003dY,C[y]\u003dY-D}if(a){var Q\u003d\"x\"\u003d\u003d\u003dy?mt:bt,G\u003d\"x\"\u003d\u003d\u003dy?gt:_t,Z\u003dE[w],J\u003dZ+g[Q],tt\u003dZ-g[G],et\u003doe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]\u003det,C[w]\u003det-Z}}e.modifiersData[n]\u003dC}},requiresIfExists:[\"offset\"]};function Me(t,e,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003d!1);var n\u003dzt(e);zt(e)\u0026\u0026function(t){var e\u003dt.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r\u003dGt(e),a\u003dVt(t),l\u003d{scrollLeft:0,scrollTop:0},c\u003d{x:0,y:0};return(n||!n\u0026\u0026!i)\u0026\u0026((\"body\"!\u003d\u003dRt(e)||we(r))\u0026\u0026(l\u003d(s\u003de)!\u003d\u003dWt(s)\u0026\u0026zt(s)?{scrollLeft:(o\u003ds).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c\u003dVt(e)).x+\u003de.clientLeft,c.y+\u003de.clientTop):r\u0026\u0026(c.x\u003dye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e\u003dnew Map,i\u003dnew Set,n\u003d[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n\u003de.get(t);n\u0026\u0026s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be\u003d{placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function Re(){for(var t\u003darguments.length,e\u003dnew Array(t),i\u003d0;i\u003ct;i++)e[i]\u003darguments[i];return!e.some((function(t){return!(t\u0026\u0026\"function\"\u003d\u003dtypeof t.getBoundingClientRect)}))}function We(t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{});var e\u003dt,i\u003de.defaultModifiers,n\u003dvoid 0\u003d\u003d\u003di?[]:i,s\u003de.defaultOptions,o\u003dvoid 0\u003d\u003d\u003ds?Be:s;return function(t,e,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003do);var s,r,a\u003d{placement:\"bottom\",orderedModifiers:[],options:Object.assign({},Be,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l\u003d[],c\u003d!1,h\u003d{state:a,setOptions:function(i){var s\u003d\"function\"\u003d\u003dtypeof i?i(a.options):i;d(),a.options\u003dObject.assign({},o,a.options,s),a.scrollParents\u003d{reference:$t(t)?Ae(t):t.contextElement?Ae(t.contextElement):[],popper:Ae(e)};var r,c,u\u003dfunction(t){var e\u003dHe(t);return Bt.reduce((function(t,i){return t.concat(e.filter((function(t){return t.phase\u003d\u003d\u003di})))}),[])}((r\u003d[].concat(n,a.options.modifiers),c\u003dr.reduce((function(t,e){var i\u003dt[e.name];return t[e.name]\u003di?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t}),{}),Object.keys(c).map((function(t){return c[t]}))));return a.orderedModifiers\u003du.filter((function(t){return t.enabled})),a.orderedModifiers.forEach((function(t){var e\u003dt.name,i\u003dt.options,n\u003dvoid 0\u003d\u003d\u003di?{}:i,s\u003dt.effect;if(\"function\"\u003d\u003dtypeof s){var o\u003ds({state:a,name:e,instance:h,options:n});l.push(o||function(){})}})),h.update()},forceUpdate:function(){if(!c){var t\u003da.elements,e\u003dt.reference,i\u003dt.popper;if(Re(e,i)){a.rects\u003d{reference:Me(e,te(i),\"fixed\"\u003d\u003d\u003da.options.strategy),popper:Kt(i)},a.reset\u003d!1,a.placement\u003da.options.placement,a.orderedModifiers.forEach((function(t){return a.modifiersData[t.name]\u003dObject.assign({},t.data)}));for(var n\u003d0;n\u003ca.orderedModifiers.length;n++)if(!0!\u003d\u003da.reset){var s\u003da.orderedModifiers[n],o\u003ds.fn,r\u003ds.options,l\u003dvoid 0\u003d\u003d\u003dr?{}:r,d\u003ds.name;\"function\"\u003d\u003dtypeof o\u0026\u0026(a\u003do({state:a,options:l,name:d,instance:h})||a)}else a.reset\u003d!1,n\u003d-1}}},update:(s\u003dfunction(){return new Promise((function(t){h.forceUpdate(),t(a)}))},function(){return r||(r\u003dnew Promise((function(t){Promise.resolve().then((function(){r\u003dvoid 0,t(s())}))}))),r}),destroy:function(){d(),c\u003d!0}};if(!Re(t,e))return h;function d(){l.forEach((function(t){return t()})),l\u003d[]}return h.setOptions(i).then((function(t){!c\u0026\u0026i.onFirstUpdate\u0026\u0026i.onFirstUpdate(t)})),h}}var $e\u003dWe(),ze\u003dWe({defaultModifiers:[pe,Pe,ue,Ft]}),qe\u003dWe({defaultModifiers:[pe,Pe,ue,Ft,Ie,xe,je,le,Ne]});const Fe\u003dObject.freeze({__proto__:null,popperGenerator:We,detectOverflow:ke,createPopperBase:$e,createPopper:qe,createPopperLite:ze,top:mt,bottom:gt,right:_t,left:bt,auto:vt,basePlacements:yt,start:wt,end:Et,clippingParents:At,viewport:Tt,popper:Ot,reference:Ct,variationPlacements:kt,placements:Lt,beforeRead:xt,read:Dt,afterRead:St,beforeMain:Nt,main:It,afterMain:Pt,beforeWrite:jt,write:Mt,afterWrite:Ht,modifierPhases:Bt,applyStyles:Ft,arrow:le,computeStyles:ue,eventListeners:pe,flip:xe,hide:Ne,offset:Ie,popperOffsets:Pe,preventOverflow:je}),Ue\u003d\"dropdown\",Ve\u003d\"Escape\",Ke\u003d\"Space\",Xe\u003d\"ArrowUp\",Ye\u003d\"ArrowDown\",Qe\u003dnew RegExp(\"ArrowUp|ArrowDown|Escape\"),Ge\u003d\"click.bs.dropdown.data-api\",Ze\u003d\"keydown.bs.dropdown.data-api\",Je\u003d\"show\",ti\u003d\u0027[data-bs-toggle\u003d\"dropdown\"]\u0027,ei\u003d\".dropdown-menu\",ii\u003dm()?\"top-end\":\"top-start\",ni\u003dm()?\"top-start\":\"top-end\",si\u003dm()?\"bottom-end\":\"bottom-start\",oi\u003dm()?\"bottom-start\":\"bottom-end\",ri\u003dm()?\"left-start\":\"right-start\",ai\u003dm()?\"right-start\":\"left-start\",li\u003d{offset:[0,2],boundary:\"clippingParents\",reference:\"toggle\",display:\"dynamic\",popperConfig:null,autoClose:!0},ci\u003d{offset:\"(array|string|function)\",boundary:\"(string|element)\",reference:\"(string|element|object)\",display:\"string\",popperConfig:\"(null|object|function)\",autoClose:\"(boolean|string)\"};class hi extends B{constructor(t,e){super(t),this._popper\u003dnull,this._config\u003dthis._getConfig(e),this._menu\u003dthis._getMenuElement(),this._inNavbar\u003dthis._detectNavbar()}static get Default(){return li}static get DefaultType(){return ci}static get NAME(){return Ue}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown(this._menu))return;const t\u003d{relatedTarget:this._element};if(j.trigger(this._element,\"show.bs.dropdown\",t).defaultPrevented)return;const e\u003dhi.getParentFromElement(this._element);this._inNavbar?U.setDataAttribute(this._menu,\"popper\",\"none\"):this._createPopper(e),\"ontouchstart\"in document.documentElement\u0026\u0026!e.closest(\".navbar-nav\")\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003ej.on(t,\"mouseover\",d))),this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,\"shown.bs.dropdown\",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t\u003d{relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper\u0026\u0026this._popper.destroy(),super.dispose()}update(){this._inNavbar\u003dthis._detectNavbar(),this._popper\u0026\u0026this._popper.update()}_completeHide(t){j.trigger(this._element,\"hide.bs.dropdown\",t).defaultPrevented||(\"ontouchstart\"in document.documentElement\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003ej.off(t,\"mouseover\",d))),this._popper\u0026\u0026this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute(\"aria-expanded\",\"false\"),U.removeDataAttribute(this._menu,\"popper\"),j.trigger(this._element,\"hidden.bs.dropdown\",t))}_getConfig(t){if(t\u003d{...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),\"object\"\u003d\u003dtypeof t.reference\u0026\u0026!o(t.reference)\u0026\u0026\"function\"!\u003dtypeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);return t}_createPopper(t){if(void 0\u003d\u003d\u003dFe)throw new TypeError(\"Bootstrap\u0027s dropdowns require Popper (https://popper.js.org)\");let e\u003dthis._element;\"parent\"\u003d\u003d\u003dthis._config.reference?e\u003dt:o(this._config.reference)?e\u003dr(this._config.reference):\"object\"\u003d\u003dtypeof this._config.reference\u0026\u0026(e\u003dthis._config.reference);const i\u003dthis._getPopperConfig(),n\u003di.modifiers.find((t\u003d\u003e\"applyStyles\"\u003d\u003d\u003dt.name\u0026\u0026!1\u003d\u003d\u003dt.enabled));this._popper\u003dqe(e,this._menu,i),n\u0026\u0026U.setDataAttribute(this._menu,\"popper\",\"static\")}_isShown(t\u003dthis._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t\u003dthis._element.parentNode;if(t.classList.contains(\"dropend\"))return ri;if(t.classList.contains(\"dropstart\"))return ai;const e\u003d\"end\"\u003d\u003d\u003dgetComputedStyle(this._menu).getPropertyValue(\"--bs-position\").trim();return t.classList.contains(\"dropup\")?e?ni:ii:e?oi:si}_detectNavbar(){return null!\u003d\u003dthis._element.closest(\".navbar\")}_getOffset(){const{offset:t}\u003dthis._config;return\"string\"\u003d\u003dtypeof t?t.split(\",\").map((t\u003d\u003eNumber.parseInt(t,10))):\"function\"\u003d\u003dtypeof t?e\u003d\u003et(e,this._element):t}_getPopperConfig(){const t\u003d{placement:this._getPlacement(),modifiers:[{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"offset\",options:{offset:this._getOffset()}}]};return\"static\"\u003d\u003d\u003dthis._config.display\u0026\u0026(t.modifiers\u003d[{name:\"applyStyles\",enabled:!1}]),{...t,...\"function\"\u003d\u003dtypeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i\u003dV.find(\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",this._menu).filter(l);i.length\u0026\u0026v(i,e,t\u003d\u003d\u003dYe,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e\u003dhi.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}static clearMenus(t){if(t\u0026\u0026(2\u003d\u003d\u003dt.button||\"keyup\"\u003d\u003d\u003dt.type\u0026\u0026\"Tab\"!\u003d\u003dt.key))return;const e\u003dV.find(ti);for(let i\u003d0,n\u003de.length;i\u003cn;i++){const n\u003dhi.getInstance(e[i]);if(!n||!1\u003d\u003d\u003dn._config.autoClose)continue;if(!n._isShown())continue;const s\u003d{relatedTarget:n._element};if(t){const e\u003dt.composedPath(),i\u003de.includes(n._menu);if(e.includes(n._element)||\"inside\"\u003d\u003d\u003dn._config.autoClose\u0026\u0026!i||\"outside\"\u003d\u003d\u003dn._config.autoClose\u0026\u0026i)continue;if(n._menu.contains(t.target)\u0026\u0026(\"keyup\"\u003d\u003d\u003dt.type\u0026\u0026\"Tab\"\u003d\u003d\u003dt.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;\"click\"\u003d\u003d\u003dt.type\u0026\u0026(s.clickEvent\u003dt)}n._completeHide(s)}}static getParentFromElement(t){return n(t)||t.parentNode}static dataApiKeydownHandler(t){if(/input|textarea/i.test(t.target.tagName)?t.key\u003d\u003d\u003dKe||t.key!\u003d\u003dVe\u0026\u0026(t.key!\u003d\u003dYe\u0026\u0026t.key!\u003d\u003dXe||t.target.closest(ei)):!Qe.test(t.key))return;const e\u003dthis.classList.contains(Je);if(!e\u0026\u0026t.key\u003d\u003d\u003dVe)return;if(t.preventDefault(),t.stopPropagation(),c(this))return;const i\u003dthis.matches(ti)?this:V.prev(this,ti)[0],n\u003dhi.getOrCreateInstance(i);if(t.key!\u003d\u003dVe)return t.key\u003d\u003d\u003dXe||t.key\u003d\u003d\u003dYe?(e||n.show(),void n._selectMenuItem(t)):void(e\u0026\u0026t.key!\u003d\u003dKe||hi.clearMenus());n.hide()}}j.on(document,Ze,ti,hi.dataApiKeydownHandler),j.on(document,Ze,ei,hi.dataApiKeydownHandler),j.on(document,Ge,hi.clearMenus),j.on(document,\"keyup.bs.dropdown.data-api\",hi.clearMenus),j.on(document,Ge,ti,(function(t){t.preventDefault(),hi.getOrCreateInstance(this).toggle()})),g(hi);const di\u003d\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",ui\u003d\".sticky-top\";class fi{constructor(){this._element\u003ddocument.body}getWidth(){const t\u003ddocument.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t\u003dthis.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,\"paddingRight\",(e\u003d\u003ee+t)),this._setElementAttributes(di,\"paddingRight\",(e\u003d\u003ee+t)),this._setElementAttributes(ui,\"marginRight\",(e\u003d\u003ee-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,\"overflow\"),this._element.style.overflow\u003d\"hidden\"}_setElementAttributes(t,e,i){const n\u003dthis.getWidth();this._applyManipulationCallback(t,(t\u003d\u003e{if(t!\u003d\u003dthis._element\u0026\u0026window.innerWidth\u003et.clientWidth+n)return;this._saveInitialAttribute(t,e);const s\u003dwindow.getComputedStyle(t)[e];t.style[e]\u003d`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,\"overflow\"),this._resetElementAttributes(this._element,\"paddingRight\"),this._resetElementAttributes(di,\"paddingRight\"),this._resetElementAttributes(ui,\"marginRight\")}_saveInitialAttribute(t,e){const i\u003dt.style[e];i\u0026\u0026U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t\u003d\u003e{const i\u003dU.getDataAttribute(t,e);void 0\u003d\u003d\u003di?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]\u003di)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()\u003e0}}const pi\u003d{className:\"modal-backdrop\",isVisible:!0,isAnimated:!1,rootElement:\"body\",clickCallback:null},mi\u003d{className:\"string\",isVisible:\"boolean\",isAnimated:\"boolean\",rootElement:\"(element|string)\",clickCallback:\"(function|null)\"},gi\u003d\"show\",_i\u003d\"mousedown.bs.backdrop\";class bi{constructor(t){this._config\u003dthis._getConfig(t),this._isAppended\u003d!1,this._element\u003dnull}show(t){this._config.isVisible?(this._append(),this._config.isAnimated\u0026\u0026u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()\u003d\u003e{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()\u003d\u003e{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t\u003ddocument.createElement(\"div\");t.className\u003dthis._config.className,this._config.isAnimated\u0026\u0026t.classList.add(\"fade\"),this._element\u003dt}return this._element}_getConfig(t){return(t\u003d{...pi,...\"object\"\u003d\u003dtypeof t?t:{}}).rootElement\u003dr(t.rootElement),a(\"backdrop\",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()\u003d\u003e{_(this._config.clickCallback)})),this._isAppended\u003d!0)}dispose(){this._isAppended\u0026\u0026(j.off(this._element,_i),this._element.remove(),this._isAppended\u003d!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi\u003d{trapElement:null,autofocus:!0},yi\u003d{trapElement:\"element\",autofocus:\"boolean\"},wi\u003d\".bs.focustrap\",Ei\u003d\"backward\";class Ai{constructor(t){this._config\u003dthis._getConfig(t),this._isActive\u003d!1,this._lastTabNavDirection\u003dnull}activate(){const{trapElement:t,autofocus:e}\u003dthis._config;this._isActive||(e\u0026\u0026t.focus(),j.off(document,wi),j.on(document,\"focusin.bs.focustrap\",(t\u003d\u003ethis._handleFocusin(t))),j.on(document,\"keydown.tab.bs.focustrap\",(t\u003d\u003ethis._handleKeydown(t))),this._isActive\u003d!0)}deactivate(){this._isActive\u0026\u0026(this._isActive\u003d!1,j.off(document,wi))}_handleFocusin(t){const{target:e}\u003dt,{trapElement:i}\u003dthis._config;if(e\u003d\u003d\u003ddocument||e\u003d\u003d\u003di||i.contains(e))return;const n\u003dV.focusableChildren(i);0\u003d\u003d\u003dn.length?i.focus():this._lastTabNavDirection\u003d\u003d\u003dEi?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){\"Tab\"\u003d\u003d\u003dt.key\u0026\u0026(this._lastTabNavDirection\u003dt.shiftKey?Ei:\"forward\")}_getConfig(t){return t\u003d{...vi,...\"object\"\u003d\u003dtypeof t?t:{}},a(\"focustrap\",t,yi),t}}const Ti\u003d\"modal\",Oi\u003d\"Escape\",Ci\u003d{backdrop:!0,keyboard:!0,focus:!0},ki\u003d{backdrop:\"(boolean|string)\",keyboard:\"boolean\",focus:\"boolean\"},Li\u003d\"hidden.bs.modal\",xi\u003d\"show.bs.modal\",Di\u003d\"resize.bs.modal\",Si\u003d\"click.dismiss.bs.modal\",Ni\u003d\"keydown.dismiss.bs.modal\",Ii\u003d\"mousedown.dismiss.bs.modal\",Pi\u003d\"modal-open\",ji\u003d\"show\",Mi\u003d\"modal-static\";class Hi extends B{constructor(t,e){super(t),this._config\u003dthis._getConfig(e),this._dialog\u003dV.findOne(\".modal-dialog\",this._element),this._backdrop\u003dthis._initializeBackDrop(),this._focustrap\u003dthis._initializeFocusTrap(),this._isShown\u003d!1,this._ignoreBackdropClick\u003d!1,this._isTransitioning\u003d!1,this._scrollBar\u003dnew fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown\u003d!0,this._isAnimated()\u0026\u0026(this._isTransitioning\u003d!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()\u003d\u003e{j.one(this._element,\"mouseup.dismiss.bs.modal\",(t\u003d\u003e{t.target\u003d\u003d\u003dthis._element\u0026\u0026(this._ignoreBackdropClick\u003d!0)}))})),this._showBackdrop((()\u003d\u003ethis._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,\"hide.bs.modal\").defaultPrevented)return;this._isShown\u003d!1;const t\u003dthis._isAnimated();t\u0026\u0026(this._isTransitioning\u003d!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()\u003d\u003ethis._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t\u003d\u003ej.off(t,\".bs.modal\"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t\u003d{...Ci,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e\u003dthis._isAnimated(),i\u003dV.findOne(\".modal-body\",this._dialog);this._element.parentNode\u0026\u0026this._element.parentNode.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE||document.body.append(this._element),this._element.style.display\u003d\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.scrollTop\u003d0,i\u0026\u0026(i.scrollTop\u003d0),e\u0026\u0026u(this._element),this._element.classList.add(ji),this._queueCallback((()\u003d\u003e{this._config.focus\u0026\u0026this._focustrap.activate(),this._isTransitioning\u003d!1,j.trigger(this._element,\"shown.bs.modal\",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t\u003d\u003e{this._config.keyboard\u0026\u0026t.key\u003d\u003d\u003dOi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!\u003d\u003dOi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()\u003d\u003ethis._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display\u003d\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._isTransitioning\u003d!1,this._backdrop.hide((()\u003d\u003e{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t\u003d\u003e{this._ignoreBackdropClick?this._ignoreBackdropClick\u003d!1:t.target\u003d\u003d\u003dt.currentTarget\u0026\u0026(!0\u003d\u003d\u003dthis._config.backdrop?this.hide():\"static\"\u003d\u003d\u003dthis._config.backdrop\u0026\u0026this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains(\"fade\")}_triggerBackdropTransition(){if(j.trigger(this._element,\"hidePrevented.bs.modal\").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}\u003dthis._element,n\u003de\u003edocument.documentElement.clientHeight;!n\u0026\u0026\"hidden\"\u003d\u003d\u003di.overflowY||t.contains(Mi)||(n||(i.overflowY\u003d\"hidden\"),t.add(Mi),this._queueCallback((()\u003d\u003e{t.remove(Mi),n||this._queueCallback((()\u003d\u003e{i.overflowY\u003d\"\"}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t\u003dthis._element.scrollHeight\u003edocument.documentElement.clientHeight,e\u003dthis._scrollBar.getWidth(),i\u003de\u003e0;(!i\u0026\u0026t\u0026\u0026!m()||i\u0026\u0026!t\u0026\u0026m())\u0026\u0026(this._element.style.paddingLeft\u003d`${e}px`),(i\u0026\u0026!t\u0026\u0026!m()||!i\u0026\u0026t\u0026\u0026m())\u0026\u0026(this._element.style.paddingRight\u003d`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft\u003d\"\",this._element.style.paddingRight\u003d\"\"}static jQueryInterface(t,e){return this.each((function(){const i\u003dHi.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003di[t])throw new TypeError(`No method named \"${t}\"`);i[t](e)}}))}}j.on(document,\"click.bs.modal.data-api\",\u0027[data-bs-toggle\u003d\"modal\"]\u0027,(function(t){const e\u003dn(this);[\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026t.preventDefault(),j.one(e,xi,(t\u003d\u003e{t.defaultPrevented||j.one(e,Li,(()\u003d\u003e{l(this)\u0026\u0026this.focus()}))}));const i\u003dV.findOne(\".modal.show\");i\u0026\u0026Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi\u003d\"offcanvas\",Ri\u003d{backdrop:!0,keyboard:!0,scroll:!1},Wi\u003d{backdrop:\"boolean\",keyboard:\"boolean\",scroll:\"boolean\"},$i\u003d\"show\",zi\u003d\".offcanvas.show\",qi\u003d\"hidden.bs.offcanvas\";class Fi extends B{constructor(t,e){super(t),this._config\u003dthis._getConfig(e),this._isShown\u003d!1,this._backdrop\u003dthis._initializeBackDrop(),this._focustrap\u003dthis._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,\"show.bs.offcanvas\",{relatedTarget:t}).defaultPrevented||(this._isShown\u003d!0,this._element.style.visibility\u003d\"visible\",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.classList.add($i),this._queueCallback((()\u003d\u003e{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,\"shown.bs.offcanvas\",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown\u0026\u0026(j.trigger(this._element,\"hide.bs.offcanvas\").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown\u003d!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()\u003d\u003e{this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._element.style.visibility\u003d\"hidden\",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t\u003d{...Ri,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:\"offcanvas-backdrop\",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()\u003d\u003ethis.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,\"keydown.dismiss.bs.offcanvas\",(t\u003d\u003e{this._config.keyboard\u0026\u0026\"Escape\"\u003d\u003d\u003dt.key\u0026\u0026this.hide()}))}static jQueryInterface(t){return this.each((function(){const e\u003dFi.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t]||t.startsWith(\"_\")||\"constructor\"\u003d\u003d\u003dt)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}j.on(document,\"click.bs.offcanvas.data-api\",\u0027[data-bs-toggle\u003d\"offcanvas\"]\u0027,(function(t){const e\u003dn(this);if([\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026t.preventDefault(),c(this))return;j.one(e,qi,(()\u003d\u003e{l(this)\u0026\u0026this.focus()}));const i\u003dV.findOne(zi);i\u0026\u0026i!\u003d\u003de\u0026\u0026Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,\"load.bs.offcanvas.data-api\",(()\u003d\u003eV.find(zi).forEach((t\u003d\u003eFi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui\u003dnew Set([\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"]),Vi\u003d/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#\u0026/:?]*(?:[#/?]|$))/i,Ki\u003d/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+\u003d*$/i,Xi\u003d(t,e)\u003d\u003e{const i\u003dt.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n\u003de.filter((t\u003d\u003et instanceof RegExp));for(let t\u003d0,e\u003dn.length;t\u003ce;t++)if(n[t].test(i))return!0;return!1};function Yi(t,e,i){if(!t.length)return t;if(i\u0026\u0026\"function\"\u003d\u003dtypeof i)return i(t);const n\u003d(new window.DOMParser).parseFromString(t,\"text/html\"),s\u003d[].concat(...n.body.querySelectorAll(\"*\"));for(let t\u003d0,i\u003ds.length;t\u003ci;t++){const i\u003ds[t],n\u003di.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){i.remove();continue}const o\u003d[].concat(...i.attributes),r\u003d[].concat(e[\"*\"]||[],e[n]||[]);o.forEach((t\u003d\u003e{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi\u003d\"tooltip\",Gi\u003dnew Set([\"sanitize\",\"allowList\",\"sanitizeFn\"]),Zi\u003d{animation:\"boolean\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\",delay:\"(number|object)\",html:\"boolean\",selector:\"(string|boolean)\",placement:\"(string|function)\",offset:\"(array|string|function)\",container:\"(string|element|boolean)\",fallbackPlacements:\"array\",boundary:\"(string|element)\",customClass:\"(string|function)\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",allowList:\"object\",popperConfig:\"(null|object|function)\"},Ji\u003d{AUTO:\"auto\",TOP:\"top\",RIGHT:m()?\"left\":\"right\",BOTTOM:\"bottom\",LEFT:m()?\"right\":\"left\"},tn\u003d{animation:!0,template:\u0027\u003cdiv class\u003d\"tooltip\" role\u003d\"tooltip\"\u003e\u003cdiv class\u003d\"tooltip-arrow\"\u003e\u003c/div\u003e\u003cdiv class\u003d\"tooltip-inner\"\u003e\u003c/div\u003e\u003c/div\u003e\u0027,trigger:\"hover focus\",title:\"\",delay:0,html:!1,selector:!1,placement:\"top\",offset:[0,0],container:!1,fallbackPlacements:[\"top\",\"right\",\"bottom\",\"left\"],boundary:\"clippingParents\",customClass:\"\",sanitize:!0,sanitizeFn:null,allowList:{\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en\u003d{HIDE:\"hide.bs.tooltip\",HIDDEN:\"hidden.bs.tooltip\",SHOW:\"show.bs.tooltip\",SHOWN:\"shown.bs.tooltip\",INSERTED:\"inserted.bs.tooltip\",CLICK:\"click.bs.tooltip\",FOCUSIN:\"focusin.bs.tooltip\",FOCUSOUT:\"focusout.bs.tooltip\",MOUSEENTER:\"mouseenter.bs.tooltip\",MOUSELEAVE:\"mouseleave.bs.tooltip\"},nn\u003d\"fade\",sn\u003d\"show\",on\u003d\"show\",rn\u003d\"out\",an\u003d\".tooltip-inner\",ln\u003d\".modal\",cn\u003d\"hide.bs.modal\",hn\u003d\"hover\",dn\u003d\"focus\";class un extends B{constructor(t,e){if(void 0\u003d\u003d\u003dFe)throw new TypeError(\"Bootstrap\u0027s tooltips require Popper (https://popper.js.org)\");super(t),this._isEnabled\u003d!0,this._timeout\u003d0,this._hoverState\u003d\"\",this._activeTrigger\u003d{},this._popper\u003dnull,this._config\u003dthis._getConfig(e),this.tip\u003dnull,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled\u003d!0}disable(){this._isEnabled\u003d!1}toggleEnabled(){this._isEnabled\u003d!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e\u003dthis._initializeOnDelegatedTarget(t);e._activeTrigger.click\u003d!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip\u0026\u0026this.tip.remove(),this._disposePopper(),super.dispose()}show(){if(\"none\"\u003d\u003d\u003dthis._element.style.display)throw new Error(\"Please use show on visible elements\");if(!this.isWithContent()||!this._isEnabled)return;const t\u003dj.trigger(this._element,this.constructor.Event.SHOW),e\u003dh(this._element),i\u003dnull\u003d\u003d\u003de?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;\"tooltip\"\u003d\u003d\u003dthis.constructor.NAME\u0026\u0026this.tip\u0026\u0026this.getTitle()!\u003d\u003dthis.tip.querySelector(an).innerHTML\u0026\u0026(this._disposePopper(),this.tip.remove(),this.tip\u003dnull);const n\u003dthis.getTipElement(),s\u003d(t\u003d\u003e{do{t+\u003dMath.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute(\"id\",s),this._element.setAttribute(\"aria-describedby\",s),this._config.animation\u0026\u0026n.classList.add(nn);const o\u003d\"function\"\u003d\u003dtypeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r\u003dthis._getAttachment(o);this._addAttachmentClass(r);const{container:a}\u003dthis._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper\u003dqe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l\u003dthis._resolvePossibleFunction(this._config.customClass);l\u0026\u0026n.classList.add(...l.split(\" \")),\"ontouchstart\"in document.documentElement\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003e{j.on(t,\"mouseover\",d)}));const c\u003dthis.tip.classList.contains(nn);this._queueCallback((()\u003d\u003e{const t\u003dthis._hoverState;this._hoverState\u003dnull,j.trigger(this._element,this.constructor.Event.SHOWN),t\u003d\u003d\u003drn\u0026\u0026this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t\u003dthis.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),\"ontouchstart\"in document.documentElement\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003ej.off(t,\"mouseover\",d))),this._activeTrigger.click\u003d!1,this._activeTrigger.focus\u003d!1,this._activeTrigger.hover\u003d!1;const e\u003dthis.tip.classList.contains(nn);this._queueCallback((()\u003d\u003e{this._isWithActiveTrigger()||(this._hoverState!\u003d\u003don\u0026\u0026t.remove(),this._cleanTipClass(),this._element.removeAttribute(\"aria-describedby\"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState\u003d\"\"}update(){null!\u003d\u003dthis._popper\u0026\u0026this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t\u003ddocument.createElement(\"div\");t.innerHTML\u003dthis._config.template;const e\u003dt.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip\u003de,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n\u003dV.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!\u003d\u003dt)return o(e)?(e\u003dr(e),void(this._config.html?e.parentNode!\u003d\u003dt\u0026\u0026(t.innerHTML\u003d\"\",t.append(e)):t.textContent\u003de.textContent)):void(this._config.html?(this._config.sanitize\u0026\u0026(e\u003dYi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML\u003de):t.textContent\u003de)}getTitle(){const t\u003dthis._element.getAttribute(\"data-bs-original-title\")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return\"right\"\u003d\u003d\u003dt?\"end\":\"left\"\u003d\u003d\u003dt?\"start\":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}\u003dthis._config;return\"string\"\u003d\u003dtypeof t?t.split(\",\").map((t\u003d\u003eNumber.parseInt(t,10))):\"function\"\u003d\u003dtypeof t?e\u003d\u003et(e,this._element):t}_resolvePossibleFunction(t){return\"function\"\u003d\u003dtypeof t?t.call(this._element):t}_getPopperConfig(t){const e\u003d{placement:t,modifiers:[{name:\"flip\",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:\"offset\",options:{offset:this._getOffset()}},{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"arrow\",options:{element:`.${this.constructor.NAME}-arrow`}},{name:\"onChange\",enabled:!0,phase:\"afterWrite\",fn:t\u003d\u003ethis._handlePopperPlacementChange(t)}],onFirstUpdate:t\u003d\u003e{t.options.placement!\u003d\u003dt.placement\u0026\u0026this._handlePopperPlacementChange(t)}};return{...e,...\"function\"\u003d\u003dtypeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(\" \").forEach((t\u003d\u003e{if(\"click\"\u003d\u003d\u003dt)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t\u003d\u003ethis.toggle(t)));else if(\"manual\"!\u003d\u003dt){const e\u003dt\u003d\u003d\u003dhn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i\u003dt\u003d\u003d\u003dhn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t\u003d\u003ethis._enter(t))),j.on(this._element,i,this._config.selector,(t\u003d\u003ethis._leave(t)))}})),this._hideModalHandler\u003d()\u003d\u003e{this._element\u0026\u0026this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config\u003d{...this._config,trigger:\"manual\",selector:\"\"}:this._fixTitle()}_fixTitle(){const t\u003dthis._element.getAttribute(\"title\"),e\u003dtypeof this._element.getAttribute(\"data-bs-original-title\");(t||\"string\"!\u003d\u003de)\u0026\u0026(this._element.setAttribute(\"data-bs-original-title\",t||\"\"),!t||this._element.getAttribute(\"aria-label\")||this._element.textContent||this._element.setAttribute(\"aria-label\",t),this._element.setAttribute(\"title\",\"\"))}_enter(t,e){e\u003dthis._initializeOnDelegatedTarget(t,e),t\u0026\u0026(e._activeTrigger[\"focusin\"\u003d\u003d\u003dt.type?dn:hn]\u003d!0),e.getTipElement().classList.contains(sn)||e._hoverState\u003d\u003d\u003don?e._hoverState\u003don:(clearTimeout(e._timeout),e._hoverState\u003don,e._config.delay\u0026\u0026e._config.delay.show?e._timeout\u003dsetTimeout((()\u003d\u003e{e._hoverState\u003d\u003d\u003don\u0026\u0026e.show()}),e._config.delay.show):e.show())}_leave(t,e){e\u003dthis._initializeOnDelegatedTarget(t,e),t\u0026\u0026(e._activeTrigger[\"focusout\"\u003d\u003d\u003dt.type?dn:hn]\u003de._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState\u003drn,e._config.delay\u0026\u0026e._config.delay.hide?e._timeout\u003dsetTimeout((()\u003d\u003e{e._hoverState\u003d\u003d\u003drn\u0026\u0026e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e\u003dU.getDataAttributes(this._element);return Object.keys(e).forEach((t\u003d\u003e{Gi.has(t)\u0026\u0026delete e[t]})),(t\u003d{...this.constructor.Default,...e,...\"object\"\u003d\u003dtypeof t\u0026\u0026t?t:{}}).container\u003d!1\u003d\u003d\u003dt.container?document.body:r(t.container),\"number\"\u003d\u003dtypeof t.delay\u0026\u0026(t.delay\u003d{show:t.delay,hide:t.delay}),\"number\"\u003d\u003dtypeof t.title\u0026\u0026(t.title\u003dt.title.toString()),\"number\"\u003d\u003dtypeof t.content\u0026\u0026(t.content\u003dt.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize\u0026\u0026(t.template\u003dYi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t\u003d{};for(const e in this._config)this.constructor.Default[e]!\u003d\u003dthis._config[e]\u0026\u0026(t[e]\u003dthis._config[e]);return t}_cleanTipClass(){const t\u003dthis.getTipElement(),e\u003dnew RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`,\"g\"),i\u003dt.getAttribute(\"class\").match(e);null!\u003d\u003di\u0026\u0026i.length\u003e0\u0026\u0026i.map((t\u003d\u003et.trim())).forEach((e\u003d\u003et.classList.remove(e)))}_getBasicClassPrefix(){return\"bs-tooltip\"}_handlePopperPlacementChange(t){const{state:e}\u003dt;e\u0026\u0026(this.tip\u003de.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper\u0026\u0026(this._popper.destroy(),this._popper\u003dnull)}static jQueryInterface(t){return this.each((function(){const e\u003dun.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}g(un);const fn\u003d{...un.Default,placement:\"right\",offset:[0,8],trigger:\"click\",content:\"\",template:\u0027\u003cdiv class\u003d\"popover\" role\u003d\"tooltip\"\u003e\u003cdiv class\u003d\"popover-arrow\"\u003e\u003c/div\u003e\u003ch3 class\u003d\"popover-header\"\u003e\u003c/h3\u003e\u003cdiv class\u003d\"popover-body\"\u003e\u003c/div\u003e\u003c/div\u003e\u0027},pn\u003d{...un.DefaultType,content:\"(string|element|function)\"},mn\u003d{HIDE:\"hide.bs.popover\",HIDDEN:\"hidden.bs.popover\",SHOW:\"show.bs.popover\",SHOWN:\"shown.bs.popover\",INSERTED:\"inserted.bs.popover\",CLICK:\"click.bs.popover\",FOCUSIN:\"focusin.bs.popover\",FOCUSOUT:\"focusout.bs.popover\",MOUSEENTER:\"mouseenter.bs.popover\",MOUSELEAVE:\"mouseleave.bs.popover\"};class gn extends un{static get Default(){return fn}static get NAME(){return\"popover\"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),\".popover-header\"),this._sanitizeAndSetContent(t,this._getContent(),\".popover-body\")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return\"bs-popover\"}static jQueryInterface(t){return this.each((function(){const e\u003dgn.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}g(gn);const _n\u003d\"scrollspy\",bn\u003d{offset:10,method:\"auto\",target:\"\"},vn\u003d{offset:\"number\",method:\"string\",target:\"(string|element)\"},yn\u003d\"active\",wn\u003d\".nav-link, .list-group-item, .dropdown-item\",En\u003d\"position\";class An extends B{constructor(t,e){super(t),this._scrollElement\u003d\"BODY\"\u003d\u003d\u003dthis._element.tagName?window:this._element,this._config\u003dthis._getConfig(e),this._offsets\u003d[],this._targets\u003d[],this._activeTarget\u003dnull,this._scrollHeight\u003d0,j.on(this._scrollElement,\"scroll.bs.scrollspy\",(()\u003d\u003ethis._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t\u003dthis._scrollElement\u003d\u003d\u003dthis._scrollElement.window?\"offset\":En,e\u003d\"auto\"\u003d\u003d\u003dthis._config.method?t:this._config.method,n\u003de\u003d\u003d\u003dEn?this._getScrollTop():0;this._offsets\u003d[],this._targets\u003d[],this._scrollHeight\u003dthis._getScrollHeight(),V.find(wn,this._config.target).map((t\u003d\u003e{const s\u003di(t),o\u003ds?V.findOne(s):null;if(o){const t\u003do.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t\u003d\u003et)).sort(((t,e)\u003d\u003et[0]-e[0])).forEach((t\u003d\u003e{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,\".bs.scrollspy\"),super.dispose()}_getConfig(t){return(t\u003d{...bn,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t\u0026\u0026t?t:{}}).target\u003dr(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement\u003d\u003d\u003dwindow?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement\u003d\u003d\u003dwindow?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t\u003dthis._getScrollTop()+this._config.offset,e\u003dthis._getScrollHeight(),i\u003dthis._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!\u003d\u003de\u0026\u0026this.refresh(),t\u003e\u003di){const t\u003dthis._targets[this._targets.length-1];this._activeTarget!\u003d\u003dt\u0026\u0026this._activate(t)}else{if(this._activeTarget\u0026\u0026t\u003cthis._offsets[0]\u0026\u0026this._offsets[0]\u003e0)return this._activeTarget\u003dnull,void this._clear();for(let e\u003dthis._offsets.length;e--;)this._activeTarget!\u003d\u003dthis._targets[e]\u0026\u0026t\u003e\u003dthis._offsets[e]\u0026\u0026(void 0\u003d\u003d\u003dthis._offsets[e+1]||t\u003cthis._offsets[e+1])\u0026\u0026this._activate(this._targets[e])}}_activate(t){this._activeTarget\u003dt,this._clear();const e\u003dwn.split(\",\").map((e\u003d\u003e`${e}[data-bs-target\u003d\"${t}\"],${e}[href\u003d\"${t}\"]`)),i\u003dV.findOne(e.join(\",\"),this._config.target);i.classList.add(yn),i.classList.contains(\"dropdown-item\")?V.findOne(\".dropdown-toggle\",i.closest(\".dropdown\")).classList.add(yn):V.parents(i,\".nav, .list-group\").forEach((t\u003d\u003e{V.prev(t,\".nav-link, .list-group-item\").forEach((t\u003d\u003et.classList.add(yn))),V.prev(t,\".nav-item\").forEach((t\u003d\u003e{V.children(t,\".nav-link\").forEach((t\u003d\u003et.classList.add(yn)))}))})),j.trigger(this._scrollElement,\"activate.bs.scrollspy\",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t\u003d\u003et.classList.contains(yn))).forEach((t\u003d\u003et.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e\u003dAn.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}j.on(window,\"load.bs.scrollspy.data-api\",(()\u003d\u003e{V.find(\u0027[data-bs-spy\u003d\"scroll\"]\u0027).forEach((t\u003d\u003enew An(t)))})),g(An);const Tn\u003d\"active\",On\u003d\"fade\",Cn\u003d\"show\",kn\u003d\".active\",Ln\u003d\":scope \u003e li \u003e .active\";class xn extends B{static get NAME(){return\"tab\"}show(){if(this._element.parentNode\u0026\u0026this._element.parentNode.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE\u0026\u0026this._element.classList.contains(Tn))return;let t;const e\u003dn(this._element),i\u003dthis._element.closest(\".nav, .list-group\");if(i){const e\u003d\"UL\"\u003d\u003d\u003di.nodeName||\"OL\"\u003d\u003d\u003di.nodeName?Ln:kn;t\u003dV.find(e,i),t\u003dt[t.length-1]}const s\u003dt?j.trigger(t,\"hide.bs.tab\",{relatedTarget:this._element}):null;if(j.trigger(this._element,\"show.bs.tab\",{relatedTarget:t}).defaultPrevented||null!\u003d\u003ds\u0026\u0026s.defaultPrevented)return;this._activate(this._element,i);const o\u003d()\u003d\u003e{j.trigger(t,\"hidden.bs.tab\",{relatedTarget:this._element}),j.trigger(this._element,\"shown.bs.tab\",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n\u003d(!e||\"UL\"!\u003d\u003de.nodeName\u0026\u0026\"OL\"!\u003d\u003de.nodeName?V.children(e,kn):V.find(Ln,e))[0],s\u003di\u0026\u0026n\u0026\u0026n.classList.contains(On),o\u003d()\u003d\u003ethis._transitionComplete(t,n,i);n\u0026\u0026s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t\u003dV.findOne(\":scope \u003e .dropdown-menu .active\",e.parentNode);t\u0026\u0026t.classList.remove(Tn),\"tab\"\u003d\u003d\u003de.getAttribute(\"role\")\u0026\u0026e.setAttribute(\"aria-selected\",!1)}t.classList.add(Tn),\"tab\"\u003d\u003d\u003dt.getAttribute(\"role\")\u0026\u0026t.setAttribute(\"aria-selected\",!0),u(t),t.classList.contains(On)\u0026\u0026t.classList.add(Cn);let n\u003dt.parentNode;if(n\u0026\u0026\"LI\"\u003d\u003d\u003dn.nodeName\u0026\u0026(n\u003dn.parentNode),n\u0026\u0026n.classList.contains(\"dropdown-menu\")){const e\u003dt.closest(\".dropdown\");e\u0026\u0026V.find(\".dropdown-toggle\",e).forEach((t\u003d\u003et.classList.add(Tn))),t.setAttribute(\"aria-expanded\",!0)}i\u0026\u0026i()}static jQueryInterface(t){return this.each((function(){const e\u003dxn.getOrCreateInstance(this);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}j.on(document,\"click.bs.tab.data-api\",\u0027[data-bs-toggle\u003d\"tab\"], [data-bs-toggle\u003d\"pill\"], [data-bs-toggle\u003d\"list\"]\u0027,(function(t){[\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn\u003d\"toast\",Sn\u003d\"hide\",Nn\u003d\"show\",In\u003d\"showing\",Pn\u003d{animation:\"boolean\",autohide:\"boolean\",delay:\"number\"},jn\u003d{animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config\u003dthis._getConfig(e),this._timeout\u003dnull,this._hasMouseInteraction\u003d!1,this._hasKeyboardInteraction\u003d!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,\"show.bs.toast\").defaultPrevented||(this._clearTimeout(),this._config.animation\u0026\u0026this._element.classList.add(\"fade\"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()\u003d\u003e{this._element.classList.remove(In),j.trigger(this._element,\"shown.bs.toast\"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)\u0026\u0026(j.trigger(this._element,\"hide.bs.toast\").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()\u003d\u003e{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,\"hidden.bs.toast\")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)\u0026\u0026this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t\u003d{...jn,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t\u0026\u0026t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide\u0026\u0026(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout\u003dsetTimeout((()\u003d\u003e{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case\"mouseover\":case\"mouseout\":this._hasMouseInteraction\u003de;break;case\"focusin\":case\"focusout\":this._hasKeyboardInteraction\u003de}if(e)return void this._clearTimeout();const i\u003dt.relatedTarget;this._element\u003d\u003d\u003di||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,\"mouseover.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!0))),j.on(this._element,\"mouseout.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!1))),j.on(this._element,\"focusin.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!0))),j.on(this._element,\"focusout.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout\u003dnull}static jQueryInterface(t){return this.each((function(){const e\u003dMn.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}}));"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"//# sourceMappingURL\u003dbootstrap.bundle.min.js.map"}],"authorContributionMap":{"jingting1412":7}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/js/markbind.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"!function(t,e){\"object\"\u003d\u003dtypeof exports\u0026\u0026\"object\"\u003d\u003dtypeof module?module.exports\u003de(require(\"Vue\")):\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define([\"Vue\"],e):\"object\"\u003d\u003dtypeof exports?exports.MarkBind\u003de(require(\"Vue\")):t.MarkBind\u003de(t.Vue)}(self,t\u003d\u003e(()\u003d\u003e{var e\u003d{605:()\u003d\u003e{function t(){document.querySelectorAll(\".\".concat(\"page-nav-clone\")).forEach((function(t){t.remove()}))}window.addEventListener(\"beforeprint\",(function(){var e\u003ddocument.querySelector(\"#\".concat(\"mb-page-nav\")),n\u003ddocument.querySelectorAll(\".\".concat(\"page-nav-print\"));e\u0026\u0026n.length\u003e\u003d1\u0026\u0026(t(),n.forEach((function(t){t.appendChild(function(t){var e\u003dt.cloneNode(!0);return e.removeAttribute(\"id\"),e.querySelectorAll(\"a.active\").forEach((function(t){t.classList.remove(\"active\")})),e.classList.add(\"page-nav-clone\"),e}(e))})))})),window.addEventListener(\"afterprint\",(function(){t()}))},3:t\u003d\u003e{t.exports\u003d{bind:function(t){function e(){t.dataset.isShown\u003d\"false\",r.style.display\u003d\"\",o.style.display\u003d\"none\",i.style.display\u003d\"none\"}function n(){t.dataset.isShown\u003d\"true\",r.style.display\u003d\"none\",i.style.display\u003d\"\"}t.dataset.isShown\u003d\"true\",t.style.position\u003d\"relative\";var i\u003ddocument.createElement(\"div\");i.classList.add(\"content\"),Array.from(t.children).forEach((function(t){return i.append(t)})),t.replaceChildren(),t.append(i),t.classList.add(\"closeable-wrapper\");var o\u003dfunction(){var t\u003ddocument.createElement(\"span\");return t.classList.add(\"closeable-button\",\"label\",\"label-default\",\"hidden-print\"),t.style.cssText+\u003d\"display: none; position: absolute; top: 0; left: 0; cursor: pointer;background: #d9534f\",t.innerHTML\u003d\u0027\u003cspan class\u003d\"glyphicon glyphicon-remove\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e\u0027,t.addEventListener(\"click\",e),t}();t.append(o);var r\u003dfunction(t){var e\u003ddocument.createElement(\"a\");return e.classList.add(\"closeable-show\",\"hidden-print\"),e.style.cssText+\u003d\"display: none; cursor: pointer;text-decoration: underline\",e.innerHTML\u003dt,e.addEventListener(\"click\",n),e}(t.getAttribute(\"alt\")||\"Expand Content\");t.append(r),t.addEventListener(\"mouseover\",(function(){\"false\"!\u003d\u003dt.dataset.isShown\u0026\u0026(o.style.display\u003d\"\")})),t.addEventListener(\"mouseout\",(function(){\"false\"!\u003d\u003dt.dataset.isShown\u0026\u0026(o.style.display\u003d\"none\")}))}}},383:(t,e,n)\u003d\u003e{\"use strict\";var i,o\u003d(i\u003dn(740))\u0026\u0026\"object\"\u003d\u003dtypeof i\u0026\u0026\"default\"in i?i.default:i;function r(t){return(r\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t})(t)}function s(t){return function(t){if(Array.isArray(t)){for(var e\u003d0,n\u003dnew Array(t.length);e\u003ct.length;e++)n[e]\u003dt[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||\"[object Arguments]\"\u003d\u003d\u003dObject.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}var a\u003d\"undefined\"!\u003dtypeof window;function l(t,e){return e.reduce((function(e,n){return t.hasOwnProperty(n)\u0026\u0026(e[n]\u003dt[n]),e}),{})}var c\u003d{},u\u003d{},d\u003d{},h\u003dnew(o.extend({data:function(){return{transports:c,targets:u,sources:d,trackInstances:a}},methods:{open:function(t){if(a){var e\u003dt.to,n\u003dt.from,i\u003dt.passengers,s\u003dt.order,l\u003dvoid 0\u003d\u003d\u003ds?1/0:s;if(e\u0026\u0026n\u0026\u0026i){var c,u\u003d{to:e,from:n,passengers:(c\u003di,Array.isArray(c)||\"object\"\u003d\u003d\u003dr(c)?Object.freeze(c):c),order:l};-1\u003d\u003d\u003dObject.keys(this.transports).indexOf(e)\u0026\u0026o.set(this.transports,e,[]);var d,h\u003dthis.$_getTransportIndex(u),p\u003dthis.transports[e].slice(0);-1\u003d\u003d\u003dh?p.push(u):p[h]\u003du,this.transports[e]\u003d(d\u003dfunction(t,e){return t.order-e.order},p.map((function(t,e){return[e,t]})).sort((function(t,e){return d(t[1],e[1])||t[0]-e[0]})).map((function(t){return t[1]})))}}},close:function(t){var e\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]\u0026\u0026arguments[1],n\u003dt.to,i\u003dt.from;if(n\u0026\u0026(i||!1!\u003d\u003de)\u0026\u0026this.transports[n])if(e)this.transports[n]\u003d[];else{var o\u003dthis.$_getTransportIndex(t);if(o\u003e\u003d0){var r\u003dthis.transports[n].slice(0);r.splice(o,1),this.transports[n]\u003dr}}},registerTarget:function(t,e,n){a\u0026\u0026(this.trackInstances\u0026\u0026!n\u0026\u0026this.targets[t]\u0026\u0026console.warn(\"[portal-vue]: Target \".concat(t,\" already exists\")),this.$set(this.targets,t,Object.freeze([e])))},unregisterTarget:function(t){this.$delete(this.targets,t)},registerSource:function(t,e,n){a\u0026\u0026(this.trackInstances\u0026\u0026!n\u0026\u0026this.sources[t]\u0026\u0026console.warn(\"[portal-vue]: source \".concat(t,\" already exists\")),this.$set(this.sources,t,Object.freeze([e])))},unregisterSource:function(t){this.$delete(this.sources,t)},hasTarget:function(t){return!(!this.targets[t]||!this.targets[t][0])},hasSource:function(t){return!(!this.sources[t]||!this.sources[t][0])},hasContentFor:function(t){return!!this.transports[t]\u0026\u0026!!this.transports[t].length},$_getTransportIndex:function(t){var e\u003dt.to,n\u003dt.from;for(var i in this.transports[e])if(this.transports[e][i].from\u003d\u003d\u003dn)return+i;return-1}}}))(c),p\u003d1,f\u003do.extend({name:\"portal\",props:{disabled:{type:Boolean},name:{type:String,default:function(){return String(p++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:\"DIV\"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}}},created:function(){var t\u003dthis;this.$nextTick((function(){h.registerSource(t.name,t)}))},mounted:function(){this.disabled||this.sendUpdate()},updated:function(){this.disabled?this.clear():this.sendUpdate()},beforeDestroy:function(){h.unregisterSource(this.name),this.clear()},watch:{to:function(t,e){e\u0026\u0026e!\u003d\u003dt\u0026\u0026this.clear(e),this.sendUpdate()}},methods:{clear:function(t){var e\u003d{from:this.name,to:t||this.to};h.close(e)},normalizeSlots:function(){return this.$scopedSlots.default?[this.$scopedSlots.default]:this.$slots.default},normalizeOwnChildren:function(t){return\"function\"\u003d\u003dtypeof t?t(this.slotProps):t},sendUpdate:function(){var t\u003dthis.normalizeSlots();if(t){var e\u003d{from:this.name,to:this.to,passengers:s(t),order:this.order};h.open(e)}else this.clear()}},render:function(t){var e\u003dthis.$slots.default||this.$scopedSlots.default||[],n\u003dthis.tag;return e\u0026\u0026this.disabled?e.length\u003c\u003d1\u0026\u0026this.slim?this.normalizeOwnChildren(e)[0]:t(n,[this.normalizeOwnChildren(e)]):this.slim?t():t(n,{class:{\"v-portal\":!0},style:{display:\"none\"},key:\"v-portal-placeholder\"})}}),m\u003do.extend({name:\"portalTarget\",props:{multiple:{type:Boolean,default:!1},name:{type:String,required:!0},slim:{type:Boolean,default:!1},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:\"div\"},transition:{type:[String,Object,Function]}},data:function(){return{transports:h.transports,firstRender:!0}},created:function(){var t\u003dthis;this.$nextTick((function(){h.registerTarget(t.name,t)}))},watch:{ownTransports:function(){this.$emit(\"change\",this.children().length\u003e0)},name:function(t,e){h.unregisterTarget(e),h.registerTarget(t,this)}},mounted:function(){var t\u003dthis;this.transition\u0026\u0026this.$nextTick((function(){t.firstRender\u003d!1}))},beforeDestroy:function(){h.unregisterTarget(this.name)},computed:{ownTransports:function(){var t\u003dthis.transports[this.name]||[];return this.multiple?t:0\u003d\u003d\u003dt.length?[]:[t[t.length-1]]},passengers:function(){return function(t){var e\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]?arguments[1]:{};return t.reduce((function(t,n){var i\u003dn.passengers[0],o\u003d\"function\"\u003d\u003dtypeof i?i(e):n.passengers;return t.concat(o)}),[])}(this.ownTransports,this.slotProps)}},methods:{children:function(){return 0!\u003d\u003dthis.passengers.length?this.passengers:this.$scopedSlots.default?this.$scopedSlots.default(this.slotProps):this.$slots.default||[]},noWrapper:function(){var t\u003dthis.slim\u0026\u0026!this.transition;return t\u0026\u0026this.children().length\u003e1\u0026\u0026console.warn(\"[portal-vue]: PortalTarget with `slim` option received more than one child element.\"),t}},render:function(t){var e\u003dthis.noWrapper(),n\u003dthis.children(),i\u003dthis.transition||this.tag;return e?n[0]:this.slim\u0026\u0026!i?t():t(i,{props:{tag:this.transition\u0026\u0026this.tag?this.tag:void 0},class:{\"vue-portal-target\":!0}},n)}}),v\u003d0,g\u003d[\"disabled\",\"name\",\"order\",\"slim\",\"slotProps\",\"tag\",\"to\"],y\u003d[\"multiple\",\"transition\"],w\u003do.extend({name:\"MountingPortal\",inheritAttrs:!1,props:{append:{type:[Boolean,String]},bail:{type:Boolean},mountTo:{type:String,required:!0},disabled:{type:Boolean},name:{type:String,default:function(){return\"mounted_\"+String(v++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:\"DIV\"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}},multiple:{type:Boolean,default:!1},targetSlim:{type:Boolean},targetSlotProps:{type:Object,default:function(){return{}}},targetTag:{type:String,default:\"div\"},transition:{type:[String,Object,Function]}},created:function(){if(\"undefined\"!\u003dtypeof document){var t\u003ddocument.querySelector(this.mountTo);if(t){var e\u003dthis.$props;if(h.targets[e.name])e.bail?console.warn(\"[portal-vue]: Target \".concat(e.name,\" is already mounted.\\n Aborting because \u0027bail: true\u0027 is set\")):this.portalTarget\u003dh.targets[e.name];else{var n\u003de.append;if(n){var i\u003d\"string\"\u003d\u003dtypeof n?n:\"DIV\",o\u003ddocument.createElement(i);t.appendChild(o),t\u003do}var r\u003dl(this.$props,y);r.slim\u003dthis.targetSlim,r.tag\u003dthis.targetTag,r.slotProps\u003dthis.targetSlotProps,r.name\u003dthis.to,this.portalTarget\u003dnew m({el:t,parent:this.$parent||this,propsData:r})}}else console.error(\"[portal-vue]: Mount Point \u0027\".concat(this.mountTo,\"\u0027 not found in document\"))}},beforeDestroy:function(){var t\u003dthis.portalTarget;if(this.append){var e\u003dt.$el;e.parentNode.removeChild(e)}t.$destroy()},render:function(t){if(!this.portalTarget)return console.warn(\"[portal-vue] Target wasn\u0027t mounted\"),t();if(!this.$scopedSlots.manual){var e\u003dl(this.$props,g);return t(f,{props:e,attrs:this.$attrs,on:this.$listeners,scopedSlots:this.$scopedSlots},this.$slots.default)}var n\u003dthis.$scopedSlots.manual({to:this.to});return Array.isArray(n)\u0026\u0026(n\u003dn[0]),n||t()}});e.h_\u003df,e.YC\u003dm},740:e\u003d\u003e{\"use strict\";e.exports\u003dt}},n\u003d{};function i(t){var o\u003dn[t];if(void 0!\u003d\u003do)return o.exports;var r\u003dn[t]\u003d{exports:{}};return e[t](r,r.exports,i),r.exports}i.n\u003dt\u003d\u003e{var e\u003dt\u0026\u0026t.__esModule?()\u003d\u003et.default:()\u003d\u003et;return i.d(e,{a:e}),e},i.d\u003d(t,e)\u003d\u003e{for(var n in e)i.o(e,n)\u0026\u0026!i.o(t,n)\u0026\u0026Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g\u003dfunction(){if(\"object\"\u003d\u003dtypeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"\u003d\u003dtypeof window)return window}}(),i.o\u003d(t,e)\u003d\u003eObject.prototype.hasOwnProperty.call(t,e);var o\u003d{};return(()\u003d\u003e{\"use strict\";function t(e){return(t\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t})(e)}function e(e){var n\u003dfunction(e,n){if(\"object\"!\u003d\u003dt(e)||null\u003d\u003d\u003de)return e;var i\u003de[Symbol.toPrimitive];if(void 0!\u003d\u003di){var o\u003di.call(e,n||\"default\");if(\"object\"!\u003d\u003dt(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"\u003d\u003d\u003dn?String:Number)(e)}(e,\"string\");return\"symbol\"\u003d\u003d\u003dt(n)?n:String(n)}function n(t,n,i){return(n\u003de(n))in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]\u003di,t}function r(t){return t.split(\"-\")[0]}function s(t){return t.split(\"-\")[1]}function a(t){return[\"top\",\"bottom\"].includes(r(t))?\"x\":\"y\"}function l(t){return\"y\"\u003d\u003d\u003dt?\"height\":\"width\"}function c(t){let{reference:e,floating:n,placement:i}\u003dt;const o\u003de.x+e.width/2-n.width/2,c\u003de.y+e.height/2-n.height/2;let u;switch(r(i)){case\"top\":u\u003d{x:o,y:e.y-n.height};break;case\"bottom\":u\u003d{x:o,y:e.y+e.height};break;case\"right\":u\u003d{x:e.x+e.width,y:c};break;case\"left\":u\u003d{x:e.x-n.width,y:c};break;default:u\u003d{x:e.x,y:e.y}}const d\u003da(i),h\u003dl(d);switch(s(i)){case\"start\":u[d]\u003du[d]-(e[h]/2-n[h]/2);break;case\"end\":u[d]\u003du[d]+(e[h]/2-n[h]/2)}return u}i.d(o,{default:()\u003d\u003eMo});function u(t){return\"number\"!\u003dtypeof t?function(t){return{top:0,right:0,bottom:0,left:0,...t}}(t):{top:t,right:t,bottom:t,left:t}}function d(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}async function h(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});const{x:n,y:i,platform:o,rects:r,elements:s,strategy:a}\u003dt,{boundary:l\u003d\"clippingParents\",rootBoundary:c\u003d\"viewport\",elementContext:h\u003d\"floating\",altBoundary:p\u003d!1,padding:f\u003d0}\u003de,m\u003du(f),v\u003ds[p?\"floating\"\u003d\u003d\u003dh?\"reference\":\"floating\":h],g\u003dawait o.getClippingClientRect({element:await o.isElement(v)?v:v.contextElement||await o.getDocumentElement({element:s.floating}),boundary:l,rootBoundary:c}),y\u003dd(await o.convertOffsetParentRelativeRectToViewportRelativeRect({rect:\"floating\"\u003d\u003d\u003dh?{...r.floating,x:n,y:i}:r.reference,offsetParent:await o.getOffsetParent({element:s.floating}),strategy:a}));return{top:g.top-y.top+m.top,bottom:y.bottom-g.bottom+m.bottom,left:g.left-y.left+m.left,right:y.right-g.right+m.right}}const p\u003dMath.min,f\u003dMath.max;function m(t,e,n){return f(t,p(e,n))}const v\u003d{left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function g(t){return t.replace(/left|right|bottom|top/g,t\u003d\u003ev[t])}function y(t,e){const n\u003d\"start\"\u003d\u003d\u003ds(t),i\u003da(t),o\u003dl(i);let r\u003d\"x\"\u003d\u003d\u003di?n?\"right\":\"left\":n?\"bottom\":\"top\";return e.reference[o]\u003ee.floating[o]\u0026\u0026(r\u003dg(r)),{main:r,cross:g(r)}}const w\u003d{start:\"end\",end:\"start\"};function b(t){return t.replace(/start|end/g,t\u003d\u003ew[t])}const _\u003d[\"top\",\"right\",\"bottom\",\"left\"],S\u003d_.reduce((t,e)\u003d\u003et.concat(e,e+\"-start\",e+\"-end\"),[]);const x\u003dfunction(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"autoPlacement\",options:t,async fn(e){var n,i,o,a,l,c;const{x:u,y:d,rects:p,middlewareData:f,placement:m}\u003de,{alignment:v\u003dnull,allowedPlacements:g\u003dS,autoAlignment:w\u003d!0,..._}\u003dt;if(null!\u003d(n\u003df.autoPlacement)\u0026\u0026n.skip)return{};const x\u003dfunction(t,e,n){return(t?[...n.filter(e\u003d\u003es(e)\u003d\u003d\u003dt),...n.filter(e\u003d\u003es(e)!\u003d\u003dt)]:n.filter(t\u003d\u003er(t)\u003d\u003d\u003dt)).filter(n\u003d\u003e!t||(s(n)\u003d\u003d\u003dt||!!e\u0026\u0026b(n)!\u003d\u003dn))}(v,w,g),C\u003dawait h(e,_),$\u003dnull!\u003d(i\u003dnull\u003d\u003d(o\u003df.autoPlacement)?void 0:o.index)?i:0,k\u003dx[$],{main:T,cross:E}\u003dy(k,p);if(m!\u003d\u003dk)return{x:u,y:d,reset:{placement:x[0]}};const O\u003d[C[r(k)],C[T],C[E]],B\u003d[...null!\u003d(a\u003dnull\u003d\u003d(l\u003df.autoPlacement)?void 0:l.overflows)?a:[],{placement:k,overflows:O}],P\u003dx[$+1];if(P)return{data:{index:$+1,overflows:B},reset:{placement:P}};const L\u003dB.slice().sort((t,e)\u003d\u003et.overflows[0]-e.overflows[0]),N\u003dnull\u003d\u003d(c\u003dL.find(t\u003d\u003e{let{overflows:e}\u003dt;return e.every(t\u003d\u003et\u003c\u003d0)}))?void 0:c.placement;return{data:{skip:!0},reset:{placement:null!\u003dN?N:L[0].placement}}}}};const C\u003dfunction(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"flip\",options:t,async fn(e){var n,i;const{placement:o,middlewareData:s,rects:a,initialPlacement:l}\u003de;if(null!\u003d(n\u003ds.flip)\u0026\u0026n.skip)return{};const{mainAxis:c\u003d!0,crossAxis:u\u003d!0,fallbackPlacements:d,fallbackStrategy:p\u003d\"bestFit\",flipAlignment:f\u003d!0,...m}\u003dt,v\u003dr(o),w\u003d[l,...d||(v\u003d\u003d\u003dl||!f?[g(l)]:function(t){const e\u003dg(t);return[b(t),e,b(e)]}(l))],_\u003dawait h(e,m),S\u003d[];let x\u003d(null\u003d\u003d(i\u003ds.flip)?void 0:i.overflows)||[];if(c\u0026\u0026S.push(_[v]),u){const{main:t,cross:e}\u003dy(o,a);S.push(_[t],_[e])}if(x\u003d[...x,{placement:o,overflows:S}],!S.every(t\u003d\u003et\u003c\u003d0)){var C,$;const t\u003d(null!\u003d(C\u003dnull\u003d\u003d($\u003ds.flip)?void 0:$.index)?C:0)+1,e\u003dw[t];if(e)return{data:{index:t,overflows:x},reset:{placement:e}};let n\u003d\"bottom\";switch(p){case\"bestFit\":{var k;const t\u003dnull\u003d\u003d(k\u003dx.slice().sort((t,e)\u003d\u003et.overflows.filter(t\u003d\u003et\u003e0).reduce((t,e)\u003d\u003et+e,0)-e.overflows.filter(t\u003d\u003et\u003e0).reduce((t,e)\u003d\u003et+e,0))[0])?void 0:k.placement;t\u0026\u0026(n\u003dt);break}case\"initialPlacement\":n\u003dl}return{data:{skip:!0},reset:{placement:n}}}return{}}}};const $\u003dfunction(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d0),{name:\"offset\",options:t,fn(e){const{x:n,y:i,placement:o,rects:s}\u003de,l\u003dfunction(t){let{placement:e,rects:n,value:i}\u003dt;const o\u003dr(e),s\u003d[\"left\",\"top\"].includes(o)?-1:1,l\u003d\"function\"\u003d\u003dtypeof i?i({...n,placement:e}):i,{mainAxis:c,crossAxis:u}\u003d\"number\"\u003d\u003dtypeof l?{mainAxis:l,crossAxis:0}:{mainAxis:0,crossAxis:0,...l};return\"x\"\u003d\u003d\u003da(o)?{x:u,y:c*s}:{x:c*s,y:u}}({placement:o,rects:s,value:t});return{x:n+l.x,y:i+l.y,data:l}}}};function k(t){return\"x\"\u003d\u003d\u003dt?\"y\":\"x\"}function T(t){return\"[object Window]\"\u003d\u003d\u003d(null\u003d\u003dt?void 0:t.toString())}function E(t){if(null\u003d\u003dt)return window;if(!T(t)){const e\u003dt.ownerDocument;return e\u0026\u0026e.defaultView||window}return t}function O(t){return E(t).getComputedStyle(t)}function B(t){return T(t)?\"\":t?(t.nodeName||\"\").toLowerCase():\"\"}function P(t){return t instanceof E(t).HTMLElement}function L(t){return t instanceof E(t).Element}function N(t){return t instanceof E(t).ShadowRoot||t instanceof ShadowRoot}function A(t){const{overflow:e,overflowX:n,overflowY:i}\u003dO(t);return/auto|scroll|overlay|hidden/.test(e+i+n)}function z(t){return[\"table\",\"td\",\"th\"].includes(B(t))}function M(t){const e\u003dnavigator.userAgent.toLowerCase().includes(\"firefox\"),n\u003dO(t);return\"none\"!\u003d\u003dn.transform||\"none\"!\u003d\u003dn.perspective||\"paint\"\u003d\u003d\u003dn.contain||[\"transform\",\"perspective\"].includes(n.willChange)||e\u0026\u0026\"filter\"\u003d\u003d\u003dn.willChange||e\u0026\u0026!!n.filter\u0026\u0026\"none\"!\u003d\u003dn.filter}const H\u003dMath.min,D\u003dMath.max,R\u003dMath.round;function j(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!1);const n\u003dt.getBoundingClientRect();let i\u003d1,o\u003d1;return e\u0026\u0026P(t)\u0026\u0026(i\u003dt.offsetWidth\u003e0\u0026\u0026R(n.width)/t.offsetWidth||1,o\u003dt.offsetHeight\u003e0\u0026\u0026R(n.height)/t.offsetHeight||1),{width:n.width/i,height:n.height/o,top:n.top/o,right:n.right/i,bottom:n.bottom/o,left:n.left/i,x:n.left/i,y:n.top/o}}function I(t){return(e\u003dt,(e instanceof E(e).Node?t.ownerDocument:t.document)||window.document).documentElement;var e}function q(t){return T(t)?{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}:{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function W(t){return j(I(t)).left+q(t).scrollLeft}function F(t,e,n){const i\u003dP(e),o\u003dI(e),r\u003dj(t,i\u0026\u0026function(t){const e\u003dj(t);return R(e.width)!\u003d\u003dt.offsetWidth||R(e.height)!\u003d\u003dt.offsetHeight}(e));let s\u003d{scrollLeft:0,scrollTop:0};const a\u003d{x:0,y:0};if(i||!i\u0026\u0026\"fixed\"!\u003d\u003dn)if((\"body\"!\u003d\u003dB(e)||A(o))\u0026\u0026(s\u003dq(e)),P(e)){const t\u003dj(e,!0);a.x\u003dt.x+e.clientLeft,a.y\u003dt.y+e.clientTop}else o\u0026\u0026(a.x\u003dW(o));return{x:r.left+s.scrollLeft-a.x,y:r.top+s.scrollTop-a.y,width:r.width,height:r.height}}function V(t){return\"html\"\u003d\u003d\u003dB(t)?t:t.assignedSlot||t.parentNode||(N(t)?t.host:null)||I(t)}function U(t){return P(t)\u0026\u0026\"fixed\"!\u003d\u003dgetComputedStyle(t).position?t.offsetParent:null}function Q(t){const e\u003dE(t);let n\u003dU(t);for(;n\u0026\u0026z(n)\u0026\u0026\"static\"\u003d\u003d\u003dgetComputedStyle(n).position;)n\u003dU(n);return n\u0026\u0026(\"html\"\u003d\u003d\u003dB(n)||\"body\"\u003d\u003d\u003dB(n)\u0026\u0026\"static\"\u003d\u003d\u003dgetComputedStyle(n).position\u0026\u0026!M(n))?e:n||function(t){let e\u003dV(t);for(;P(e)\u0026\u0026![\"html\",\"body\"].includes(B(e));){if(M(e))return e;e\u003de.parentNode}return null}(t)||e}function X(t){return{width:t.offsetWidth,height:t.offsetHeight}}function Y(t,e){var n;void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[]);const i\u003dfunction t(e){return[\"html\",\"body\",\"#document\"].includes(B(e))?e.ownerDocument.body:P(e)\u0026\u0026A(e)?e:t(V(e))}(t),o\u003di\u003d\u003d\u003d(null\u003d\u003d(n\u003dt.ownerDocument)?void 0:n.body),r\u003dE(i),s\u003do?[r].concat(r.visualViewport||[],A(i)?i:[]):i,a\u003de.concat(s);return o?a:a.concat(Y(V(s)))}function K(t,e){return\"viewport\"\u003d\u003d\u003de?d(function(t){const e\u003dE(t),n\u003dI(t),i\u003de.visualViewport;let o\u003dn.clientWidth,r\u003dn.clientHeight,s\u003d0,a\u003d0;return i\u0026\u0026(o\u003di.width,r\u003di.height,Math.abs(e.innerWidth/i.scale-i.width)\u003c.01\u0026\u0026(s\u003di.offsetLeft,a\u003di.offsetTop)),{width:o,height:r,x:s,y:a}}(t)):L(e)?function(t){const e\u003dj(t),n\u003de.top+t.clientTop,i\u003de.left+t.clientLeft;return{top:n,left:i,x:i,y:n,right:i+t.clientWidth,bottom:n+t.clientHeight,width:t.clientWidth,height:t.clientHeight}}(e):d(function(t){var e;const n\u003dI(t),i\u003dq(t),o\u003dnull\u003d\u003d(e\u003dt.ownerDocument)?void 0:e.body,r\u003dD(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s\u003dD(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0);let a\u003d-i.scrollLeft+W(t);const l\u003d-i.scrollTop;return\"rtl\"\u003d\u003d\u003dO(o||n).direction\u0026\u0026(a+\u003dD(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(I(t)))}function G(t){const e\u003dY(V(t)),n\u003d[\"absolute\",\"fixed\"].includes(O(t).position)\u0026\u0026P(t)?Q(t):t;return L(n)?e.filter(t\u003d\u003eL(t)\u0026\u0026function(t,e){const n\u003dnull\u003d\u003de.getRootNode?void 0:e.getRootNode();if(t.contains(e))return!0;if(n\u0026\u0026N(n)){let n\u003de;do{if(n\u0026\u0026t\u003d\u003d\u003dn)return!0;n\u003dn.parentNode||n.host}while(n)}return!1}(t,n)\u0026\u0026\"body\"!\u003d\u003dB(t)):[]}const Z\u003d{getElementRects:t\u003d\u003e{let{reference:e,floating:n,strategy:i}\u003dt;return{reference:F(e,Q(n),i),floating:{...X(n),x:0,y:0}}},convertOffsetParentRelativeRectToViewportRelativeRect:t\u003d\u003efunction(t){let{rect:e,offsetParent:n,strategy:i}\u003dt;const o\u003dP(n),r\u003dI(n);if(n\u003d\u003d\u003dr)return e;let s\u003d{scrollLeft:0,scrollTop:0};const a\u003d{x:0,y:0};if((o||!o\u0026\u0026\"fixed\"!\u003d\u003di)\u0026\u0026((\"body\"!\u003d\u003dB(n)||A(r))\u0026\u0026(s\u003dq(n)),P(n))){const t\u003dj(n,!0);a.x\u003dt.x+n.clientLeft,a.y\u003dt.y+n.clientTop}return{...e,x:e.x-s.scrollLeft+a.x,y:e.y-s.scrollTop+a.y}}(t),getOffsetParent:t\u003d\u003e{let{element:e}\u003dt;return Q(e)},isElement:t\u003d\u003eL(t),getDocumentElement:t\u003d\u003e{let{element:e}\u003dt;return I(e)},getClippingClientRect:t\u003d\u003efunction(t){let{element:e,boundary:n,rootBoundary:i}\u003dt;const o\u003d[...\"clippingParents\"\u003d\u003d\u003dn?G(e):[].concat(n),i],r\u003do[0],s\u003do.reduce((t,n)\u003d\u003e{const i\u003dK(e,n);return t.top\u003dD(i.top,t.top),t.right\u003dH(i.right,t.right),t.bottom\u003dH(i.bottom,t.bottom),t.left\u003dD(i.left,t.left),t},K(e,r));return s.width\u003ds.right-s.left,s.height\u003ds.bottom-s.top,s.x\u003ds.left,s.y\u003ds.top,s}(t),getDimensions:t\u003d\u003e{let{element:e}\u003dt;return X(e)},getClientRects:t\u003d\u003e{let{element:e}\u003dt;return e.getClientRects()}},J\u003d(t,e,n)\u003d\u003e(async(t,e,n)\u003d\u003e{const{placement:i\u003d\"bottom\",strategy:o\u003d\"absolute\",middleware:r\u003d[],platform:s}\u003dn;let a\u003dawait s.getElementRects({reference:t,floating:e,strategy:o}),{x:l,y:u}\u003dc({...a,placement:i}),d\u003di,h\u003d{};for(let n\u003d0;n\u003cr.length;n++){0;const{name:p,fn:f}\u003dr[n],{x:m,y:v,data:g,reset:y}\u003dawait f({x:l,y:u,initialPlacement:i,placement:d,strategy:o,middlewareData:h,rects:a,platform:s,elements:{reference:t,floating:e}});l\u003dnull!\u003dm?m:l,u\u003dnull!\u003dv?v:u,h\u003d{...h,[p]:null!\u003dg?g:{}},y\u0026\u0026(\"object\"\u003d\u003dtypeof y\u0026\u0026(y.placement\u0026\u0026(d\u003dy.placement),y.rects\u0026\u0026(a\u003d!0\u003d\u003d\u003dy.rects?await s.getElementRects({reference:t,floating:e,strategy:o}):y.rects),({x:l,y:u}\u003dc({...a,placement:d}))),n\u003d-1)}return{x:l,y:u,placement:d,strategy:o,middlewareData:h}})(t,e,{platform:Z,...n});var tt\u003di(740),et\u003di.n(tt),nt\u003dObject.defineProperty,it\u003dObject.defineProperties,ot\u003dObject.getOwnPropertyDescriptors,rt\u003dObject.getOwnPropertySymbols,st\u003dObject.prototype.hasOwnProperty,at\u003dObject.prototype.propertyIsEnumerable,lt\u003d(t,e,n)\u003d\u003ee in t?nt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]\u003dn,ct\u003d(t,e)\u003d\u003e{for(var n in e||(e\u003d{}))st.call(e,n)\u0026\u0026lt(t,n,e[n]);if(rt)for(var n of rt(e))at.call(e,n)\u0026\u0026lt(t,n,e[n]);return t},ut\u003d(t,e)\u003d\u003eit(t,ot(e));const dt\u003d{disabled:!1,distance:5,skidding:0,container:\"body\",boundary:void 0,instantMove:!1,disposeTimeout:5e3,popperTriggers:[],strategy:\"absolute\",preventOverflow:!0,flip:!0,shift:!0,overflowPadding:0,arrowPadding:0,arrowOverflow:!0,themes:{tooltip:{placement:\"top\",triggers:[\"hover\",\"focus\",\"touch\"],hideTriggers:t\u003d\u003e[...t,\"click\"],delay:{show:200,hide:0},handleResize:!1,html:!1,loadingContent:\"...\"},dropdown:{placement:\"bottom\",triggers:[\"click\"],delay:0,handleResize:!0,autoHide:!0},menu:{$extend:\"dropdown\",triggers:[\"hover\",\"focus\"],popperTriggers:[\"hover\",\"focus\"],delay:{show:0,hide:400}}}};function ht(t,e){let n,i\u003ddt.themes[t]||{};do{n\u003di[e],void 0\u003d\u003d\u003dn?i.$extend?i\u003ddt.themes[i.$extend]||{}:(i\u003dnull,n\u003ddt[e]):i\u003dnull}while(i);return n}let pt\u003d!1;if(\"undefined\"!\u003dtypeof window){pt\u003d!1;try{const t\u003dObject.defineProperty({},\"passive\",{get(){pt\u003d!0}});window.addEventListener(\"test\",null,t)}catch(t){}}let ft\u003d!1;\"undefined\"!\u003dtypeof window\u0026\u0026\"undefined\"!\u003dtypeof navigator\u0026\u0026(ft\u003d/iPad|iPhone|iPod/.test(navigator.userAgent)\u0026\u0026!window.MSStream);const mt\u003d[\"auto\",\"top\",\"bottom\",\"left\",\"right\"].reduce((t,e)\u003d\u003et.concat([e,e+\"-start\",e+\"-end\"]),[]),vt\u003d{hover:\"mouseenter\",focus:\"focus\",click:\"click\",touch:\"touchstart\"},gt\u003d{hover:\"mouseleave\",focus:\"blur\",click:\"click\",touch:\"touchend\"};function yt(){return new Promise(t\u003d\u003erequestAnimationFrame(()\u003d\u003e{requestAnimationFrame(t)}))}const wt\u003d[];let bt\u003dnull,_t\u003dfunction(){};function St(t){return function(){return ht(this.$props.theme,t)}}\"undefined\"!\u003dtypeof window\u0026\u0026(_t\u003dwindow.Element);const xt\u003d\"__floating-vue__popper\";var Ct\u003d()\u003d\u003e({name:\"VPopper\",props:{theme:{type:String,required:!0},targetNodes:{type:Function,required:!0},referenceNode:{type:Function,required:!0},popperNode:{type:Function,required:!0},shown:{type:Boolean,default:!1},showGroup:{type:String,default:null},ariaId:{default:null},disabled:{type:Boolean,default:St(\"disabled\")},positioningDisabled:{type:Boolean,default:St(\"positioningDisabled\")},placement:{type:String,default:St(\"placement\"),validator:t\u003d\u003emt.includes(t)},delay:{type:[String,Number,Object],default:St(\"delay\")},distance:{type:[Number,String],default:St(\"distance\")},skidding:{type:[Number,String],default:St(\"skidding\")},triggers:{type:Array,default:St(\"triggers\")},showTriggers:{type:[Array,Function],default:St(\"showTriggers\")},hideTriggers:{type:[Array,Function],default:St(\"hideTriggers\")},popperTriggers:{type:Array,default:St(\"popperTriggers\")},popperShowTriggers:{type:[Array,Function],default:St(\"popperShowTriggers\")},popperHideTriggers:{type:[Array,Function],default:St(\"popperHideTriggers\")},container:{type:[String,Object,_t,Boolean],default:St(\"container\")},boundary:{type:[String,_t],default:St(\"boundary\")},strategy:{type:String,validator:t\u003d\u003e[\"absolute\",\"fixed\"].includes(t),default:St(\"strategy\")},autoHide:{type:Boolean,default:St(\"autoHide\")},handleResize:{type:Boolean,default:St(\"handleResize\")},instantMove:{type:Boolean,default:St(\"instantMove\")},eagerMount:{type:Boolean,default:St(\"eagerMount\")},popperClass:{type:[String,Array,Object],default:St(\"popperClass\")},computeTransformOrigin:{type:Boolean,default:St(\"computeTransformOrigin\")},autoMinSize:{type:Boolean,default:St(\"autoMinSize\")},autoSize:{type:[Boolean,String],default:St(\"autoSize\")},autoMaxSize:{type:Boolean,default:St(\"autoMaxSize\")},autoBoundaryMaxSize:{type:Boolean,default:St(\"autoBoundaryMaxSize\")},preventOverflow:{type:Boolean,default:St(\"preventOverflow\")},overflowPadding:{type:[Number,String],default:St(\"overflowPadding\")},arrowPadding:{type:[Number,String],default:St(\"arrowPadding\")},arrowOverflow:{type:Boolean,default:St(\"arrowOverflow\")},flip:{type:Boolean,default:St(\"flip\")},shift:{type:Boolean,default:St(\"shift\")},shiftCrossAxis:{type:Boolean,default:St(\"shiftCrossAxis\")}},provide(){return{[xt]:{parentPopper:this}}},inject:{[xt]:{default:null}},data(){return{isShown:!1,isMounted:!1,skipTransition:!1,classes:{showFrom:!1,showTo:!1,hideFrom:!1,hideTo:!0},result:{x:0,y:0,placement:\"\",strategy:this.strategy,arrow:{x:0,y:0,centerOffset:0},transformOrigin:null},shownChildren:new Set}},computed:{popperId(){return null!\u003dthis.ariaId?this.ariaId:this.randomId},shouldMountContent(){return this.eagerMount||this.isMounted},slotData(){return{popperId:this.popperId,isShown:this.isShown,shouldMountContent:this.shouldMountContent,skipTransition:this.skipTransition,autoHide:this.autoHide,show:this.show,hide:this.hide,handleResize:this.handleResize,onResize:this.onResize,classes:ut(ct({},this.classes),{popperClass:this.popperClass}),result:this.positioningDisabled?null:this.result}},parentPopper(){var t;return null\u003d\u003d(t\u003dthis[xt])?void 0:t.parentPopper}},watch:ct(ct({shown:\"$_autoShowHide\",disabled(t){t?this.dispose():this.init()},async container(){this.isShown\u0026\u0026(this.$_ensureTeleport(),await this.$_computePosition())}},[\"triggers\",\"positioningDisabled\"].reduce((t,e)\u003d\u003e(t[e]\u003d\"$_refreshListeners\",t),{})),[\"placement\",\"distance\",\"skidding\",\"boundary\",\"strategy\",\"overflowPadding\",\"arrowPadding\",\"preventOverflow\",\"shift\",\"shiftCrossAxis\",\"flip\"].reduce((t,e)\u003d\u003e(t[e]\u003d\"$_computePosition\",t),{})),created(){this.$_isDisposed\u003d!0,this.randomId\u003d\"popper_\"+[Math.random(),Date.now()].map(t\u003d\u003et.toString(36).substring(2,10)).join(\"_\"),this.autoMinSize\u0026\u0026console.warn(\u0027[floating-vue] `autoMinSize` option is deprecated. Use `autoSize\u003d\"min\"` instead.\u0027),this.autoMaxSize\u0026\u0026console.warn(\"[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead.\")},mounted(){this.init(),this.$_detachPopperNode()},activated(){this.$_autoShowHide()},deactivated(){this.hide()},beforeDestroy(){this.dispose()},methods:{show({event:t\u003dnull,skipDelay:e\u003d!1,force:n\u003d!1}\u003d{}){var i,o;(null\u003d\u003d(i\u003dthis.parentPopper)?void 0:i.lockedChild)\u0026\u0026this.parentPopper.lockedChild!\u003d\u003dthis||(this.$_pendingHide\u003d!1,!n\u0026\u0026this.disabled||((null\u003d\u003d(o\u003dthis.parentPopper)?void 0:o.lockedChild)\u003d\u003d\u003dthis\u0026\u0026(this.parentPopper.lockedChild\u003dnull),this.$_scheduleShow(t,e),this.$emit(\"show\"),this.$_showFrameLocked\u003d!0,requestAnimationFrame(()\u003d\u003e{this.$_showFrameLocked\u003d!1})),this.$emit(\"update:shown\",!0))},hide({event:t\u003dnull,skipDelay:e\u003d!1}\u003d{}){var n;this.$_hideInProgress||(this.shownChildren.size\u003e0?this.$_pendingHide\u003d!0:this.$_isAimingPopper()?this.parentPopper\u0026\u0026(this.parentPopper.lockedChild\u003dthis,clearTimeout(this.parentPopper.lockedChildTimer),this.parentPopper.lockedChildTimer\u003dsetTimeout(()\u003d\u003e{this.parentPopper.lockedChild\u003d\u003d\u003dthis\u0026\u0026(this.parentPopper.lockedChild.hide({skipDelay:e}),this.parentPopper.lockedChild\u003dnull)},1e3)):((null\u003d\u003d(n\u003dthis.parentPopper)?void 0:n.lockedChild)\u003d\u003d\u003dthis\u0026\u0026(this.parentPopper.lockedChild\u003dnull),this.$_pendingHide\u003d!1,this.$_scheduleHide(t,e),this.$emit(\"hide\"),this.$emit(\"update:shown\",!1)))},init(){this.$_isDisposed\u0026\u0026(this.$_isDisposed\u003d!1,this.isMounted\u003d!1,this.$_events\u003d[],this.$_preventShow\u003d!1,this.$_referenceNode\u003dthis.referenceNode(),this.$_targetNodes\u003dthis.targetNodes().filter(t\u003d\u003et.nodeType\u003d\u003d\u003dt.ELEMENT_NODE),this.$_popperNode\u003dthis.popperNode(),this.$_innerNode\u003dthis.$_popperNode.querySelector(\".v-popper__inner\"),this.$_arrowNode\u003dthis.$_popperNode.querySelector(\".v-popper__arrow-container\"),this.$_swapTargetAttrs(\"title\",\"data-original-title\"),this.$_detachPopperNode(),this.triggers.length\u0026\u0026this.$_addEventListeners(),this.shown\u0026\u0026this.show())},dispose(){this.$_isDisposed||(this.$_isDisposed\u003d!0,this.$_removeEventListeners(),this.hide({skipDelay:!0}),this.$_detachPopperNode(),this.isMounted\u003d!1,this.isShown\u003d!1,this.$_updateParentShownChildren(!1),this.$_swapTargetAttrs(\"data-original-title\",\"title\"),this.$emit(\"dispose\"))},async onResize(){this.isShown\u0026\u0026(await this.$_computePosition(),this.$emit(\"resize\"))},async $_computePosition(){var t;if(this.$_isDisposed||this.positioningDisabled)return;const e\u003d{strategy:this.strategy,middleware:[]};(this.distance||this.skidding)\u0026\u0026e.middleware.push($({mainAxis:this.distance,crossAxis:this.skidding}));const n\u003dthis.placement.startsWith(\"auto\");if(n?e.middleware.push(x({alignment:null!\u003d(t\u003dthis.placement.split(\"-\")[1])?t:\"\"})):e.placement\u003dthis.placement,this.preventOverflow\u0026\u0026(this.shift\u0026\u0026e.middleware.push(function(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"shift\",options:t,async fn(e){const{x:n,y:i,placement:o}\u003de,{mainAxis:s\u003d!0,crossAxis:l\u003d!1,limiter:c\u003d{fn:t\u003d\u003e{let{x:e,y:n}\u003dt;return{x:e,y:n}}},...u}\u003dt,d\u003d{x:n,y:i},p\u003dawait h(e,u),f\u003da(r(o)),v\u003dk(f);let g\u003dd[f],y\u003dd[v];if(s){const t\u003d\"y\"\u003d\u003d\u003df?\"bottom\":\"right\";g\u003dm(g+p[\"y\"\u003d\u003d\u003df?\"top\":\"left\"],g,g-p[t])}if(l){const t\u003d\"y\"\u003d\u003d\u003dv?\"bottom\":\"right\";y\u003dm(y+p[\"y\"\u003d\u003d\u003dv?\"top\":\"left\"],y,y-p[t])}const w\u003dc.fn({...e,[f]:g,[v]:y});return{...w,data:{x:w.x-n,y:w.y-i}}}}}({padding:this.overflowPadding,boundary:this.boundary,crossAxis:this.shiftCrossAxis})),!n\u0026\u0026this.flip\u0026\u0026e.middleware.push(C({padding:this.overflowPadding,boundary:this.boundary}))),e.middleware.push((t\u003d\u003e({name:\"arrow\",options:t,async fn(e){const{element:n,padding:i\u003d0}\u003dnull!\u003dt?t:{},{x:o,y:s,placement:c,rects:d,platform:h}\u003de;if(null\u003d\u003dn)return{};const p\u003du(i),f\u003d{x:o,y:s},v\u003da(r(c)),g\u003dl(v),y\u003dawait h.getDimensions({element:n}),w\u003d\"y\"\u003d\u003d\u003dv?\"top\":\"left\",b\u003d\"y\"\u003d\u003d\u003dv?\"bottom\":\"right\",_\u003dd.reference[g]+d.reference[v]-f[v]-d.floating[g],S\u003df[v]-d.reference[v],x\u003dawait h.getOffsetParent({element:n}),C\u003dx?\"y\"\u003d\u003d\u003dv?x.clientHeight||0:x.clientWidth||0:0,$\u003d_/2-S/2,k\u003dp[w],T\u003dC-y[g]-p[b],E\u003dC/2-y[g]/2+$,O\u003dm(k,E,T);return{data:{[v]:O,centerOffset:E-O}}}}))({element:this.$_arrowNode,padding:this.arrowPadding})),this.arrowOverflow\u0026\u0026e.middleware.push({name:\"arrowOverflow\",fn:({placement:t,rects:e,middlewareData:n})\u003d\u003e{let i;const{centerOffset:o}\u003dn.arrow;return i\u003dt.startsWith(\"top\")||t.startsWith(\"bottom\")?Math.abs(o)\u003ee.reference.width/2:Math.abs(o)\u003ee.reference.height/2,{data:{overflow:i}}}}),this.autoMinSize||this.autoSize){const t\u003dthis.autoSize?this.autoSize:this.autoMinSize?\"min\":null;e.middleware.push({name:\"autoSize\",fn:({rects:e,placement:n,middlewareData:i})\u003d\u003e{var o;if(null\u003d\u003d(o\u003di.autoSize)?void 0:o.skip)return{};let r,s;return n.startsWith(\"top\")||n.startsWith(\"bottom\")?r\u003de.reference.width:s\u003de.reference.height,this.$_innerNode.style[\"min\"\u003d\u003d\u003dt?\"minWidth\":\"max\"\u003d\u003d\u003dt?\"maxWidth\":\"width\"]\u003dnull!\u003dr?r+\"px\":null,this.$_innerNode.style[\"min\"\u003d\u003d\u003dt?\"minHeight\":\"max\"\u003d\u003d\u003dt?\"maxHeight\":\"height\"]\u003dnull!\u003ds?s+\"px\":null,{data:{skip:!0},reset:{rects:!0}}}})}(this.autoMaxSize||this.autoBoundaryMaxSize)\u0026\u0026(this.$_innerNode.style.maxWidth\u003dnull,this.$_innerNode.style.maxHeight\u003dnull,e.middleware.push(function(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"size\",options:t,async fn(e){var n;const{placement:i,rects:o,middlewareData:a}\u003de,{apply:l,...c}\u003dt;if(null!\u003d(n\u003da.size)\u0026\u0026n.skip)return{};const u\u003dawait h(e,c),d\u003dr(i),p\u003d\"end\"\u003d\u003d\u003ds(i);let m,v;\"top\"\u003d\u003d\u003dd||\"bottom\"\u003d\u003d\u003dd?(m\u003dd,v\u003dp?\"left\":\"right\"):(v\u003dd,m\u003dp?\"top\":\"bottom\");const g\u003df(u.left,0),y\u003df(u.right,0),w\u003df(u.top,0),b\u003df(u.bottom,0),_\u003d{height:o.floating.height-([\"left\",\"right\"].includes(i)?2*(0!\u003d\u003dw||0!\u003d\u003db?w+b:f(u.top,u.bottom)):u[m]),width:o.floating.width-([\"top\",\"bottom\"].includes(i)?2*(0!\u003d\u003dg||0!\u003d\u003dy?g+y:f(u.left,u.right)):u[v])};return null\u003d\u003dl||l({..._,...o}),{data:{skip:!0},reset:{rects:!0}}}}}({boundary:this.boundary,padding:this.overflowPadding,apply:({width:t,height:e})\u003d\u003e{this.$_innerNode.style.maxWidth\u003dnull!\u003dt?t+\"px\":null,this.$_innerNode.style.maxHeight\u003dnull!\u003de?e+\"px\":null}})));const i\u003dawait J(this.$_referenceNode,this.$_popperNode,e);Object.assign(this.result,{x:i.x,y:i.y,placement:i.placement,strategy:i.strategy,arrow:ct(ct({},i.middlewareData.arrow),i.middlewareData.arrowOverflow)})},$_scheduleShow(t\u003dnull,e\u003d!1){if(this.$_updateParentShownChildren(!0),this.$_hideInProgress\u003d!1,clearTimeout(this.$_scheduleTimer),bt\u0026\u0026this.instantMove\u0026\u0026bt.instantMove\u0026\u0026bt!\u003d\u003dthis.parentPopper)return bt.$_applyHide(!0),void this.$_applyShow(!0);e?this.$_applyShow():this.$_scheduleTimer\u003dsetTimeout(this.$_applyShow.bind(this),this.$_computeDelay(\"show\"))},$_scheduleHide(t\u003dnull,e\u003d!1){this.shownChildren.size\u003e0?this.$_pendingHide\u003d!0:(this.$_updateParentShownChildren(!1),this.$_hideInProgress\u003d!0,clearTimeout(this.$_scheduleTimer),this.isShown\u0026\u0026(bt\u003dthis),e?this.$_applyHide():this.$_scheduleTimer\u003dsetTimeout(this.$_applyHide.bind(this),this.$_computeDelay(\"hide\")))},$_computeDelay(t){const e\u003dthis.delay;return parseInt(e\u0026\u0026e[t]||e||0)},async $_applyShow(t\u003d!1){clearTimeout(this.$_disposeTimer),clearTimeout(this.$_scheduleTimer),this.skipTransition\u003dt,this.isShown||(this.$_ensureTeleport(),await yt(),await this.$_computePosition(),await this.$_applyShowEffect(),this.positioningDisabled||this.$_registerEventListeners([...Y(this.$_referenceNode),...Y(this.$_popperNode)],\"scroll\",()\u003d\u003e{this.$_computePosition()}))},async $_applyShowEffect(){if(this.$_hideInProgress)return;if(this.computeTransformOrigin){const t\u003dthis.$_referenceNode.getBoundingClientRect(),e\u003dthis.$_popperNode.querySelector(\".v-popper__wrapper\"),n\u003de.parentNode.getBoundingClientRect(),i\u003dt.x+t.width/2-(n.left+e.offsetLeft),o\u003dt.y+t.height/2-(n.top+e.offsetTop);this.result.transformOrigin\u003d`${i}px ${o}px`}this.isShown\u003d!0,this.$_applyAttrsToTarget({\"aria-describedby\":this.popperId,\"data-popper-shown\":\"\"});const t\u003dthis.showGroup;if(t){let e;for(let n\u003d0;n\u003cwt.length;n++)e\u003dwt[n],e.showGroup!\u003d\u003dt\u0026\u0026(e.hide(),e.$emit(\"close-group\"))}wt.push(this),this.$emit(\"apply-show\"),this.classes.showFrom\u003d!0,this.classes.showTo\u003d!1,this.classes.hideFrom\u003d!1,this.classes.hideTo\u003d!1,await yt(),this.classes.showFrom\u003d!1,this.classes.showTo\u003d!0},async $_applyHide(t\u003d!1){if(this.shownChildren.size\u003e0)return this.$_pendingHide\u003d!0,void(this.$_hideInProgress\u003d!1);if(clearTimeout(this.$_scheduleTimer),!this.isShown)return;this.skipTransition\u003dt,function(t,e){const n\u003dt.indexOf(e);-1!\u003d\u003dn\u0026\u0026t.splice(n,1)}(wt,this),bt\u003d\u003d\u003dthis\u0026\u0026(bt\u003dnull),this.isShown\u003d!1,this.$_applyAttrsToTarget({\"aria-describedby\":void 0,\"data-popper-shown\":void 0}),clearTimeout(this.$_disposeTimer);const e\u003dht(this.theme,\"disposeTimeout\");null!\u003d\u003de\u0026\u0026(this.$_disposeTimer\u003dsetTimeout(()\u003d\u003e{this.$_popperNode\u0026\u0026(this.$_detachPopperNode(),this.isMounted\u003d!1)},e)),this.$_removeEventListeners(\"scroll\"),this.$emit(\"apply-hide\"),this.classes.showFrom\u003d!1,this.classes.showTo\u003d!1,this.classes.hideFrom\u003d!0,this.classes.hideTo\u003d!1,await yt(),this.classes.hideFrom\u003d!1,this.classes.hideTo\u003d!0},$_autoShowHide(){this.shown?this.show():this.hide()},$_ensureTeleport(){if(this.$_isDisposed)return;let t\u003dthis.container;if(\"string\"\u003d\u003dtypeof t?t\u003dwindow.document.querySelector(t):!1\u003d\u003d\u003dt\u0026\u0026(t\u003dthis.$_targetNodes[0].parentNode),!t)throw new Error(\"No container for popover: \"+this.container);t.appendChild(this.$_popperNode),this.isMounted\u003d!0},$_addEventListeners(){const t\u003dt\u003d\u003e{this.isShown\u0026\u0026!this.$_hideInProgress||(t.usedByTooltip\u003d!0,!this.$_preventShow\u0026\u0026this.show({event:t}))};this.$_registerTriggerListeners(this.$_targetNodes,vt,this.triggers,this.showTriggers,t),this.$_registerTriggerListeners([this.$_popperNode],vt,this.popperTriggers,this.popperShowTriggers,t);const e\u003dt\u003d\u003e{t.usedByTooltip||this.hide({event:t})};this.$_registerTriggerListeners(this.$_targetNodes,gt,this.triggers,this.hideTriggers,e),this.$_registerTriggerListeners([this.$_popperNode],gt,this.popperTriggers,this.popperHideTriggers,e)},$_registerEventListeners(t,e,n){this.$_events.push({targetNodes:t,eventType:e,handler:n}),t.forEach(t\u003d\u003et.addEventListener(e,n,pt?{passive:!0}:void 0))},$_registerTriggerListeners(t,e,n,i,o){let r\u003dn;null!\u003di\u0026\u0026(r\u003d\"function\"\u003d\u003dtypeof i?i(r):i),r.forEach(n\u003d\u003e{const i\u003de[n];i\u0026\u0026this.$_registerEventListeners(t,i,o)})},$_removeEventListeners(t){const e\u003d[];this.$_events.forEach(n\u003d\u003e{const{targetNodes:i,eventType:o,handler:r}\u003dn;t\u0026\u0026t!\u003d\u003do?e.push(n):i.forEach(t\u003d\u003et.removeEventListener(o,r))}),this.$_events\u003de},$_refreshListeners(){this.$_isDisposed||(this.$_removeEventListeners(),this.$_addEventListeners())},$_handleGlobalClose(t,e\u003d!1){this.$_showFrameLocked||(this.hide({event:t}),t.closePopover?this.$emit(\"close-directive\"):this.$emit(\"auto-hide\"),e\u0026\u0026(this.$_preventShow\u003d!0,setTimeout(()\u003d\u003e{this.$_preventShow\u003d!1},300)))},$_detachPopperNode(){this.$_popperNode.parentNode\u0026\u0026this.$_popperNode.parentNode.removeChild(this.$_popperNode)},$_swapTargetAttrs(t,e){for(const n of this.$_targetNodes){const i\u003dn.getAttribute(t);i\u0026\u0026(n.removeAttribute(t),n.setAttribute(e,i))}},$_applyAttrsToTarget(t){for(const e of this.$_targetNodes)for(const n in t){const i\u003dt[n];null\u003d\u003di?e.removeAttribute(n):e.setAttribute(n,i)}},$_updateParentShownChildren(t){let e\u003dthis.parentPopper;for(;e;)t?e.shownChildren.add(this.randomId):(e.shownChildren.delete(this.randomId),e.$_pendingHide\u0026\u0026e.hide()),e\u003de.parentPopper},$_isAimingPopper(){const t\u003dthis.$el.getBoundingClientRect();if(Pt\u003e\u003dt.left\u0026\u0026Pt\u003c\u003dt.right\u0026\u0026Lt\u003e\u003dt.top\u0026\u0026Lt\u003c\u003dt.bottom){const t\u003dthis.$_popperNode.getBoundingClientRect(),e\u003dPt-Ot,n\u003dLt-Bt,i\u003dt.left+t.width/2-Ot+(t.top+t.height/2)-Bt+t.width+t.height,o\u003dOt+e*i,r\u003dBt+n*i;return Nt(Ot,Bt,o,r,t.left,t.top,t.left,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.top,t.right,t.top)||Nt(Ot,Bt,o,r,t.right,t.top,t.right,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.bottom,t.right,t.bottom)}return!1}},render(){return this.$scopedSlots.default(this.slotData)[0]}});function $t(t){for(let e\u003d0;e\u003cwt.length;e++){const n\u003dwt[e];try{const e\u003dn.popperNode();n.$_mouseDownContains\u003de.contains(t.target)}catch(t){}}}function kt(t,e\u003d!1){const n\u003d{};for(let i\u003dwt.length-1;i\u003e\u003d0;i--){const o\u003dwt[i];try{const i\u003do.$_containsGlobalTarget\u003dTt(o,t);o.$_pendingHide\u003d!1,requestAnimationFrame(()\u003d\u003e{if(o.$_pendingHide\u003d!1,!n[o.randomId]\u0026\u0026Et(o,i,t)){if(o.$_handleGlobalClose(t,e),!t.closeAllPopover\u0026\u0026t.closePopover\u0026\u0026i){let t\u003do.parentPopper;for(;t;)n[t.randomId]\u003d!0,t\u003dt.parentPopper;return}let r\u003do.parentPopper;for(;r\u0026\u0026Et(r,r.$_containsGlobalTarget,t);)r.$_handleGlobalClose(t,e),r\u003dr.parentPopper}})}catch(t){}}}function Tt(t,e){const n\u003dt.popperNode();return t.$_mouseDownContains||n.contains(e.target)}function Et(t,e,n){return n.closeAllPopover||n.closePopover\u0026\u0026e||t.autoHide\u0026\u0026!e}\"undefined\"!\u003dtypeof document\u0026\u0026\"undefined\"!\u003dtypeof window\u0026\u0026(ft?(document.addEventListener(\"touchstart\",$t,!pt||{passive:!0,capture:!0}),document.addEventListener(\"touchend\",(function(t){kt(t,!0)}),!pt||{passive:!0,capture:!0})):(window.addEventListener(\"mousedown\",$t,!0),window.addEventListener(\"click\",(function(t){kt(t)}),!0)),window.addEventListener(\"resize\",(function(t){for(let e\u003d0;e\u003cwt.length;e++){wt[e].$_computePosition(t)}})));let Ot\u003d0,Bt\u003d0,Pt\u003d0,Lt\u003d0;function Nt(t,e,n,i,o,r,s,a){const l\u003d((s-o)*(e-r)-(a-r)*(t-o))/((a-r)*(n-t)-(s-o)*(i-e)),c\u003d((n-t)*(e-r)-(i-e)*(t-o))/((a-r)*(n-t)-(s-o)*(i-e));return l\u003e\u003d0\u0026\u0026l\u003c\u003d1\u0026\u0026c\u003e\u003d0\u0026\u0026c\u003c\u003d1}var At;function zt(){zt.init||(zt.init\u003d!0,At\u003d-1!\u003d\u003dfunction(){var t\u003dwindow.navigator.userAgent,e\u003dt.indexOf(\"MSIE \");if(e\u003e0)return parseInt(t.substring(e+5,t.indexOf(\".\",e)),10);if(t.indexOf(\"Trident/\")\u003e0){var n\u003dt.indexOf(\"rv:\");return parseInt(t.substring(n+3,t.indexOf(\".\",n)),10)}var i\u003dt.indexOf(\"Edge/\");return i\u003e0?parseInt(t.substring(i+5,t.indexOf(\".\",i)),10):-1}())}function Mt(t,e,n,i,o,r,s,a,l,c){\"boolean\"!\u003dtypeof s\u0026\u0026(l\u003da,a\u003ds,s\u003d!1);var u,d\u003d\"function\"\u003d\u003dtypeof n?n.options:n;if(t\u0026\u0026t.render\u0026\u0026(d.render\u003dt.render,d.staticRenderFns\u003dt.staticRenderFns,d._compiled\u003d!0,o\u0026\u0026(d.functional\u003d!0)),i\u0026\u0026(d._scopeId\u003di),r?(u\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),e\u0026\u0026e.call(this,l(t)),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(r)},d._ssrRegister\u003du):e\u0026\u0026(u\u003ds?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h\u003dd.render;d.render\u003dfunction(t,e){return u.call(e),h(t,e)}}else{var p\u003dd.beforeCreate;d.beforeCreate\u003dp?[].concat(p,u):[u]}return n}\"undefined\"!\u003dtypeof window\u0026\u0026window.addEventListener(\"mousemove\",t\u003d\u003e{Ot\u003dPt,Bt\u003dLt,Pt\u003dt.clientX,Lt\u003dt.clientY},pt?{passive:!0}:void 0);var Ht\u003d{name:\"ResizeObserver\",props:{emitOnMount:{type:Boolean,default:!1},ignoreWidth:{type:Boolean,default:!1},ignoreHeight:{type:Boolean,default:!1}},mounted:function(){var t\u003dthis;zt(),this.$nextTick((function(){t._w\u003dt.$el.offsetWidth,t._h\u003dt.$el.offsetHeight,t.emitOnMount\u0026\u0026t.emitSize()}));var e\u003ddocument.createElement(\"object\");this._resizeObject\u003de,e.setAttribute(\"aria-hidden\",\"true\"),e.setAttribute(\"tabindex\",-1),e.onload\u003dthis.addResizeHandlers,e.type\u003d\"text/html\",At\u0026\u0026this.$el.appendChild(e),e.data\u003d\"about:blank\",At||this.$el.appendChild(e)},beforeDestroy:function(){this.removeResizeHandlers()},methods:{compareAndNotify:function(){(!this.ignoreWidth\u0026\u0026this._w!\u003d\u003dthis.$el.offsetWidth||!this.ignoreHeight\u0026\u0026this._h!\u003d\u003dthis.$el.offsetHeight)\u0026\u0026(this._w\u003dthis.$el.offsetWidth,this._h\u003dthis.$el.offsetHeight,this.emitSize())},emitSize:function(){this.$emit(\"notify\",{width:this._w,height:this._h})},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener(\"resize\",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject\u0026\u0026this._resizeObject.onload\u0026\u0026(!At\u0026\u0026this._resizeObject.contentDocument\u0026\u0026this._resizeObject.contentDocument.defaultView.removeEventListener(\"resize\",this.compareAndNotify),this.$el.removeChild(this._resizeObject),this._resizeObject.onload\u003dnull,this._resizeObject\u003dnull)}}},Dt\u003dfunction(){var t\u003dthis.$createElement;return(this._self._c||t)(\"div\",{staticClass:\"resize-observer\",attrs:{tabindex:\"-1\"}})};Dt._withStripped\u003d!0;var Rt\u003dMt({render:Dt,staticRenderFns:[]},void 0,Ht,\"data-v-8859cc6c\",!1,void 0,!1,void 0,void 0,void 0);var jt\u003d{version:\"1.0.1\",install:function(t){t.component(\"resize-observer\",Rt),t.component(\"ResizeObserver\",Rt)}},It\u003dnull;\"undefined\"!\u003dtypeof window?It\u003dwindow.Vue:void 0!\u003d\u003di.g\u0026\u0026(It\u003di.g.Vue),It\u0026\u0026It.use(jt);var qt\u003d{computed:{themeClass(){return function(t){const e\u003d[t];let n\u003ddt.themes[t]||{};do{n.$extend\u0026\u0026!n.$resetCss?(e.push(n.$extend),n\u003ddt.themes[n.$extend]||{}):n\u003dnull}while(n);return e.map(t\u003d\u003e\"v-popper--theme-\"+t)}(this.theme)}}},Wt\u003d{name:\"VPopperContent\",components:{ResizeObserver:Rt},mixins:[qt],props:{popperId:String,theme:String,shown:Boolean,mounted:Boolean,skipTransition:Boolean,autoHide:Boolean,handleResize:Boolean,classes:Object,result:Object},methods:{toPx:t\u003d\u003enull\u003d\u003dt||isNaN(t)?null:t+\"px\"}};function Ft(t,e,n,i,o,r,s,a){var l,c\u003d\"function\"\u003d\u003dtypeof t?t.options:t;if(e\u0026\u0026(c.render\u003de,c.staticRenderFns\u003dn,c._compiled\u003d!0),i\u0026\u0026(c.functional\u003d!0),r\u0026\u0026(c._scopeId\u003d\"data-v-\"+r),s?(l\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),o\u0026\u0026o.call(this,t),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(s)},c._ssrRegister\u003dl):o\u0026\u0026(l\u003da?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles\u003dl;var u\u003dc.render;c.render\u003dfunction(t,e){return l.call(e),u(t,e)}}else{var d\u003dc.beforeCreate;c.beforeCreate\u003dd?[].concat(d,l):[l]}return{exports:t,options:c}}const Vt\u003d{};var Ut\u003dFt(Wt,(function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{ref:\"popover\",staticClass:\"v-popper__popper\",class:[t.themeClass,t.classes.popperClass,{\"v-popper__popper--shown\":t.shown,\"v-popper__popper--hidden\":!t.shown,\"v-popper__popper--show-from\":t.classes.showFrom,\"v-popper__popper--show-to\":t.classes.showTo,\"v-popper__popper--hide-from\":t.classes.hideFrom,\"v-popper__popper--hide-to\":t.classes.hideTo,\"v-popper__popper--skip-transition\":t.skipTransition,\"v-popper__popper--arrow-overflow\":t.result\u0026\u0026t.result.arrow.overflow,\"v-popper__popper--no-positioning\":!t.result}],style:t.result?{position:t.result.strategy,transform:\"translate3d(\"+Math.round(t.result.x)+\"px,\"+Math.round(t.result.y)+\"px,0)\"}:void 0,attrs:{id:t.popperId,\"aria-hidden\":t.shown?\"false\":\"true\",tabindex:t.autoHide?0:void 0,\"data-popper-placement\":t.result?t.result.placement:void 0},on:{keyup:function(e){if(!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"]))return null;t.autoHide\u0026\u0026t.$emit(\"hide\")}}},[n(\"div\",{staticClass:\"v-popper__backdrop\",on:{click:function(e){t.autoHide\u0026\u0026t.$emit(\"hide\")}}}),n(\"div\",{staticClass:\"v-popper__wrapper\",style:t.result?{transformOrigin:t.result.transformOrigin}:void 0},[n(\"div\",{ref:\"inner\",staticClass:\"v-popper__inner\"},[t.mounted?[n(\"div\",[t._t(\"default\")],2),t.handleResize?n(\"ResizeObserver\",{on:{notify:function(e){return t.$emit(\"resize\",e)}}}):t._e()]:t._e()],2),n(\"div\",{ref:\"arrow\",staticClass:\"v-popper__arrow-container\",style:t.result?{left:t.toPx(t.result.arrow.x),top:t.toPx(t.result.arrow.y)}:void 0},[n(\"div\",{staticClass:\"v-popper__arrow-outer\"}),n(\"div\",{staticClass:\"v-popper__arrow-inner\"})])])])}),[],!1,Qt,null,null,null);function Qt(t){for(let t in Vt)this[t]\u003dVt[t]}var Xt\u003dfunction(){return Ut.exports}(),Yt\u003d{methods:{show(...t){return this.$refs.popper.show(...t)},hide(...t){return this.$refs.popper.hide(...t)},dispose(...t){return this.$refs.popper.dispose(...t)},onResize(...t){return this.$refs.popper.onResize(...t)}}},Kt\u003d{name:\"VPopperWrapper\",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt,qt],inheritAttrs:!1,props:{theme:{type:String,default(){return this.$options.vPopperTheme}}},methods:{getTargetNodes(){return Array.from(this.$refs.reference.children).filter(t\u003d\u003et!\u003d\u003dthis.$refs.popperContent.$el)}}};const Gt\u003d{};var Zt\u003dFt(Kt,(function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"Popper\",t._g(t._b({ref:\"popper\",attrs:{theme:t.theme,\"target-nodes\":t.getTargetNodes,\"reference-node\":function(){return t.$refs.reference},\"popper-node\":function(){return t.$refs.popperContent.$el}},scopedSlots:t._u([{key:\"default\",fn:function(e){var i\u003de.popperId,o\u003de.isShown,r\u003de.shouldMountContent,s\u003de.skipTransition,a\u003de.autoHide,l\u003de.show,c\u003de.hide,u\u003de.handleResize,d\u003de.onResize,h\u003de.classes,p\u003de.result;return[n(\"div\",{ref:\"reference\",staticClass:\"v-popper\",class:[t.themeClass,{\"v-popper--shown\":o}]},[t._t(\"default\",null,{shown:o,show:l,hide:c}),n(\"PopperContent\",{ref:\"popperContent\",attrs:{\"popper-id\":i,theme:t.theme,shown:o,mounted:r,\"skip-transition\":s,\"auto-hide\":a,\"handle-resize\":u,classes:h,result:p},on:{hide:c,resize:d}},[t._t(\"popper\",null,{shown:o,hide:c})],2)],2)]}}],null,!0)},\"Popper\",t.$attrs,!1),t.$listeners))}),[],!1,Jt,null,null,null);function Jt(t){for(let t in Gt)this[t]\u003dGt[t]}var te\u003dfunction(){return Zt.exports}(),ee\u003dut(ct({},te),{name:\"VDropdown\",vPopperTheme:\"dropdown\"});const ne\u003d{};var ie\u003dFt(ee,void 0,void 0,!1,oe,null,null,null);function oe(t){for(let t in ne)this[t]\u003dne[t]}var re\u003dfunction(){return ie.exports}(),se\u003dut(ct({},te),{name:\"VMenu\",vPopperTheme:\"menu\"});const ae\u003d{};var le\u003dFt(se,void 0,void 0,!1,ce,null,null,null);function ce(t){for(let t in ae)this[t]\u003dae[t]}var ue\u003dfunction(){return le.exports}(),de\u003dut(ct({},te),{name:\"VTooltip\",vPopperTheme:\"tooltip\"});const he\u003d{};var pe\u003dFt(de,void 0,void 0,!1,fe,null,null,null);function fe(t){for(let t in he)this[t]\u003dhe[t]}var me\u003dfunction(){return pe.exports}(),ve\u003d{name:\"VTooltipDirective\",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt],inheritAttrs:!1,props:{theme:{type:String,default:\"tooltip\"},html:{type:Boolean,default(){return ht(this.theme,\"html\")}},content:{type:[String,Number,Function],default:null},loadingContent:{type:String,default(){return ht(this.theme,\"loadingContent\")}}},data:()\u003d\u003e({asyncContent:null}),computed:{isContentAsync(){return\"function\"\u003d\u003dtypeof this.content},loading(){return this.isContentAsync\u0026\u0026null\u003d\u003dthis.asyncContent},finalContent(){return this.isContentAsync?this.loading?this.loadingContent:this.asyncContent:this.content}},watch:{content:{handler(){this.fetchContent(!0)},immediate:!0},async finalContent(t){await this.$nextTick(),this.$refs.popper.onResize()}},created(){this.$_fetchId\u003d0},methods:{fetchContent(t){if(\"function\"\u003d\u003dtypeof this.content\u0026\u0026this.$_isShown\u0026\u0026(t||!this.$_loading\u0026\u0026null\u003d\u003dthis.asyncContent)){this.asyncContent\u003dnull,this.$_loading\u003d!0;const t\u003d++this.$_fetchId,e\u003dthis.content(this);e.then?e.then(e\u003d\u003ethis.onResult(t,e)):this.onResult(t,e)}},onResult(t,e){t\u003d\u003d\u003dthis.$_fetchId\u0026\u0026(this.$_loading\u003d!1,this.asyncContent\u003de)},onShow(){this.$_isShown\u003d!0,this.fetchContent()},onHide(){this.$_isShown\u003d!1}}};const ge\u003d{};var ye\u003dFt(ve,(function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"Popper\",t._g(t._b({ref:\"popper\",attrs:{theme:t.theme,\"popper-node\":function(){return t.$refs.popperContent.$el}},on:{\"apply-show\":t.onShow,\"apply-hide\":t.onHide},scopedSlots:t._u([{key:\"default\",fn:function(e){var i\u003de.popperId,o\u003de.isShown,r\u003de.shouldMountContent,s\u003de.skipTransition,a\u003de.autoHide,l\u003de.hide,c\u003de.handleResize,u\u003de.onResize,d\u003de.classes,h\u003de.result;return[n(\"PopperContent\",{ref:\"popperContent\",class:{\"v-popper--tooltip-loading\":t.loading},attrs:{\"popper-id\":i,theme:t.theme,shown:o,mounted:r,\"skip-transition\":s,\"auto-hide\":a,\"handle-resize\":c,classes:d,result:h},on:{hide:l,resize:u}},[t.html?n(\"div\",{domProps:{innerHTML:t._s(t.finalContent)}}):n(\"div\",{domProps:{textContent:t._s(t.finalContent)}})])]}}])},\"Popper\",t.$attrs,!1),t.$listeners))}),[],!1,we,null,null,null);function we(t){for(let t in ge)this[t]\u003dge[t]}var be\u003dfunction(){return ye.exports}();function _e(t,e,n){let i;const o\u003dtypeof e;return i\u003d\"string\"\u003d\u003d\u003do?{content:e}:e\u0026\u0026\"object\"\u003d\u003d\u003do?e:{content:!1},i.placement\u003dfunction(t,e){let n\u003dt.placement;if(!n\u0026\u0026e)for(const t of mt)e[t]\u0026\u0026(n\u003dt);return n||(n\u003dht(t.theme||\"tooltip\",\"placement\")),n}(i,n),i.targetNodes\u003d()\u003d\u003e[t],i.referenceNode\u003d()\u003d\u003et,i}function Se(t,e,n){const i\u003d_e(t,e,n),o\u003dt.$_popper\u003dnew(et())({mixins:[Yt],data:()\u003d\u003e({options:i}),render(t){const e\u003dthis.options,{theme:n,html:i,content:o,loadingContent:r}\u003de,s\u003d((t,e)\u003d\u003e{var n\u003d{};for(var i in t)st.call(t,i)\u0026\u0026e.indexOf(i)\u003c0\u0026\u0026(n[i]\u003dt[i]);if(null!\u003dt\u0026\u0026rt)for(var i of rt(t))e.indexOf(i)\u003c0\u0026\u0026at.call(t,i)\u0026\u0026(n[i]\u003dt[i]);return n})(e,[\"theme\",\"html\",\"content\",\"loadingContent\"]);return t(be,{props:{theme:n,html:i,content:o,loadingContent:r},attrs:s,ref:\"popper\"})},devtools:{hide:!0}}),r\u003ddocument.createElement(\"div\");return document.body.appendChild(r),o.$mount(r),t.classList\u0026\u0026t.classList.add(\"v-popper--has-tooltip\"),o}function xe(t){t.$_popper\u0026\u0026(t.$_popper.$destroy(),delete t.$_popper,delete t.$_popperOldShown),t.classList\u0026\u0026t.classList.remove(\"v-popper--has-tooltip\")}function Ce(t,{value:e,oldValue:n,modifiers:i}){const o\u003d_e(t,e,i);if(!o.content||ht(o.theme||\"tooltip\",\"disabled\"))xe(t);else{let n;t.$_popper?(n\u003dt.$_popper,n.options\u003do):n\u003dSe(t,e,i),void 0!\u003d\u003de.shown\u0026\u0026e.shown!\u003d\u003dt.$_popperOldShown\u0026\u0026(t.$_popperOldShown\u003de.shown,e.shown?n.show():n.hide())}}var $e\u003d{bind:Ce,update:Ce,unbind(t){xe(t)}};function ke(t){t.addEventListener(\"click\",Ee),t.addEventListener(\"touchstart\",Oe,!!pt\u0026\u0026{passive:!0})}function Te(t){t.removeEventListener(\"click\",Ee),t.removeEventListener(\"touchstart\",Oe),t.removeEventListener(\"touchend\",Be),t.removeEventListener(\"touchcancel\",Pe)}function Ee(t){const e\u003dt.currentTarget;t.closePopover\u003d!e.$_vclosepopover_touch,t.closeAllPopover\u003de.$_closePopoverModifiers\u0026\u0026!!e.$_closePopoverModifiers.all}function Oe(t){if(1\u003d\u003d\u003dt.changedTouches.length){const e\u003dt.currentTarget;e.$_vclosepopover_touch\u003d!0;const n\u003dt.changedTouches[0];e.$_vclosepopover_touchPoint\u003dn,e.addEventListener(\"touchend\",Be),e.addEventListener(\"touchcancel\",Pe)}}function Be(t){const e\u003dt.currentTarget;if(e.$_vclosepopover_touch\u003d!1,1\u003d\u003d\u003dt.changedTouches.length){const n\u003dt.changedTouches[0],i\u003de.$_vclosepopover_touchPoint;t.closePopover\u003dMath.abs(n.screenY-i.screenY)\u003c20\u0026\u0026Math.abs(n.screenX-i.screenX)\u003c20,t.closeAllPopover\u003de.$_closePopoverModifiers\u0026\u0026!!e.$_closePopoverModifiers.all}}function Pe(t){t.currentTarget.$_vclosepopover_touch\u003d!1}var Le\u003d{bind(t,{value:e,modifiers:n}){t.$_closePopoverModifiers\u003dn,(void 0\u003d\u003d\u003de||e)\u0026\u0026ke(t)},update(t,{value:e,oldValue:n,modifiers:i}){t.$_closePopoverModifiers\u003di,e!\u003d\u003dn\u0026\u0026(void 0\u003d\u003d\u003de||e?ke(t):Te(t))},unbind(t){Te(t)}};const Ne\u003dre,Ae\u003dme;const ze\u003d{version:\"1.0.0-beta.14\",install:function(t,e\u003d{}){t.$_vTooltipInstalled||(t.$_vTooltipInstalled\u003d!0,function t(e,n){for(const i in n)Object.prototype.hasOwnProperty.call(n,i)\u0026\u0026(\"object\"\u003d\u003dtypeof n[i]\u0026\u0026e[i]?t(e[i],n[i]):e[i]\u003dn[i])}(dt,e),t.directive(\"tooltip\",$e),t.directive(\"close-popper\",Le),t.component(\"v-tooltip\",me),t.component(\"VTooltip\",me),t.component(\"v-dropdown\",re),t.component(\"VDropdown\",re),t.component(\"v-menu\",ue),t.component(\"VMenu\",ue))},options:dt};let Me\u003dnull;\"undefined\"!\u003dtypeof window?Me\u003dwindow.Vue:void 0!\u003d\u003di.g\u0026\u0026(Me\u003di.g.Vue),Me\u0026\u0026Me.use(ze);var He\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"alert box-container\",t.containerStyle(),t.addClass,{\"d-flex\":t.seamlessHeaderBool()}],style:t.customStyle()},[t.seamlessHeaderBool()?n(\"div\",{staticClass:\"d-flex\"},[t.iconBool()?n(\"div\",{class:[\"icon-wrapper\",t.iconStyle()],style:t.customIconColorStyle()},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas\",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"vertical-divider\",class:t.getBootstrapAlertStyle(),attrs:{\"aria-hidden\":\"true\"}})]):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"header-and-body\"},[t.headerBool()?n(\"div\",{class:[\"box-header-wrapper\",{\"alert-dismissible\":t.dismissible}]},[t.iconBool()\u0026\u0026!t.seamlessHeaderBool()?n(\"div\",{class:[\"icon-wrapper\",t.iconStyle()],style:t.customIconColorStyle()},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas\",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"box-header\"},[t._t(\"header\")],2),t._v(\" \"),t.dismissible?n(\"button\",{staticClass:\"btn-close close-with-heading\",attrs:{type:\"button\",\"data-bs-dismiss\":\"alert\",\"aria-label\":\"Close\"}}):t._e()]):t._e(),t._v(\" \"),n(\"div\",{class:[\"box-body-wrapper\",{\"alert-dismissible\":t.dismissible\u0026\u0026!t.headerBool(),\"box-body-wrapper-with-heading\":t.headerBool()}]},[t.iconBool()\u0026\u0026!t.headerBool()?n(\"div\",{class:[\"icon-wrapper\",t.iconStyle()],style:t.customIconColorStyle()},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas\",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(\" \"),t.seamlessNoHeaderBool()?n(\"div\",{staticClass:\"vertical-divider\",class:t.getBootstrapAlertStyle(),attrs:{\"aria-hidden\":\"true\"}}):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"contents\",style:t.customColorStyle()},[t._t(\"default\")],2),t._v(\" \"),t.dismissible\u0026\u0026!t.headerBool()?n(\"button\",{staticClass:\"btn-close\",attrs:{type:\"button\",\"data-bs-dismiss\":\"alert\",\"aria-label\":\"Close\"}}):t._e()])])])};He._withStripped\u003d!0;var De\u003dfunction(t){return\"string\"\u003d\u003dtypeof t?\"\"\u003d\u003d\u003dt||\"true\"\u003d\u003d\u003dt||\"false\"!\u003d\u003dt\u0026\u0026\"null\"!\u003d\u003dt\u0026\u0026\"undefined\"!\u003d\u003dt\u0026\u0026t:t};function Re(t){return\"string\"\u003d\u003dtypeof t?\"\"\u003d\u003d\u003dt||\"true\"\u003d\u003d\u003dt||\"false\"!\u003d\u003dt\u0026\u0026\"null\"!\u003d\u003dt\u0026\u0026\"undefined\"!\u003d\u003dt\u0026\u0026t:t}function je(t){return\"number\"\u003d\u003dtypeof t?t:null\u003d\u003dt||isNaN(Number(t))?null:Number(t)}function Ie(t){var e\u003dt.split(\"#\"),n\u003d\"\";return e.length\u003e1\u0026\u0026(n\u003de[1]),n}function qe(t,e,n,i,o,r,s,a){var l,c\u003d\"function\"\u003d\u003dtypeof t?t.options:t;if(e\u0026\u0026(c.render\u003de,c.staticRenderFns\u003dn,c._compiled\u003d!0),i\u0026\u0026(c.functional\u003d!0),r\u0026\u0026(c._scopeId\u003d\"data-v-\"+r),s?(l\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),o\u0026\u0026o.call(this,t),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(s)},c._ssrRegister\u003dl):o\u0026\u0026(l\u003da?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles\u003dl;var u\u003dc.render;c.render\u003dfunction(t,e){return l.call(e),u(t,e)}}else{var d\u003dc.beforeCreate;c.beforeCreate\u003dd?[].concat(d,l):[l]}return{exports:t,options:c}}const We\u003dqe({props:{dismissible:{type:Boolean,default:!1},backgroundColor:{type:String,default:null},borderColor:{type:String,default:null},borderLeftColor:{type:String,default:null},color:{type:String,default:null},icon:{type:String,default:null},iconSize:{type:String,default:null},iconColor:{type:String,default:null},type:{type:String,default:\"\"},addClass:{type:String,default:\"\"},light:{type:Boolean,default:!1},seamless:{type:Boolean,default:!1},noIcon:{type:Boolean,default:!1},noBackground:{type:Boolean,default:!1},noBorder:{type:Boolean,default:!1},theme:{type:String,default:\"\"}},computed:{bootStrapStyle:function(){return function(t,e){var n,i,o\u003d[\"warning\",\"info\",\"definition\",\"success\",\"danger\",\"tip\",\"important\",\"wrong\"].includes(t)?t:\"\",r\u003d[\"primary\",\"secondary\",\"success\",\"danger\",\"warning\",\"info\",\"light\",\"dark\"].includes(e)?e:\"\";if(r)n\u003dr;else switch(o){case\"warning\":n\u003d\"warning\";break;case\"info\":n\u003d\"info\";break;case\"definition\":n\u003d\"primary\";break;case\"success\":case\"tip\":n\u003d\"success\";break;case\"important\":case\"wrong\":n\u003d\"danger\";break;default:n\u003d\"default\"}switch(o){case\"wrong\":i\u003d\"fa-times\";break;case\"warning\":i\u003d\"fa-exclamation\";break;case\"info\":i\u003d\"fa-info\";break;case\"success\":i\u003d\"fa-check\";break;case\"important\":i\u003d\"fa-flag\";break;case\"tip\":i\u003d\"fa-lightbulb\";break;case\"definition\":i\u003d\"fa-atlas\";break;default:i\u003d\"\"}return{style:n,icon:i}}(this.type,this.theme)}},methods:{isSeamless:function(){return!this.light\u0026\u0026this.seamless},seamlessNoHeaderBool:function(){return this.isSeamless()\u0026\u0026!this.headerBool()},seamlessHeaderBool:function(){return this.isSeamless()\u0026\u0026this.headerBool()},headerBool:function(){return!!this.$scopedSlots.header},iconBool:function(){var t\u003d!!this.$scopedSlots.icon;return!this.noIcon\u0026\u0026this.type||t},containerStyle:function(){var t;return t\u003dthis.light?\"\".concat(this.getBootstrapBorderStyle(),\" alert-border-left\"):this.seamless?\"seamless\":this.getBootstrapAlertStyle(),this.noBackground\u0026\u0026(t+\u003d\" no-background\"),this.noBorder\u0026\u0026(t+\u003d\" no-border\"),t},customStyle:function(){var t\u003d{};return this.backgroundColor\u0026\u0026(t.backgroundColor\u003dthis.backgroundColor,t.borderColor\u003dthis.backgroundColor),this.borderColor\u0026\u0026(t.border\u003d\"1px solid \".concat(this.borderColor)),this.borderLeftColor\u0026\u0026(t.borderLeft\u003d\"5px solid \".concat(this.borderLeftColor)),t},customColorStyle:function(){return this.color?{color:this.color}:{}},iconStyle:function(){var t\u003d\"\";return this.iconSize\u0026\u0026(t+\u003d\"fa-\".concat(this.iconSize)),(this.light||this.seamless)\u0026\u0026(t+\u003d\" \".concat(this.getBootstrapTextStyle())),t},customIconColorStyle:function(){return this.iconColor?{color:\"\".concat(this.iconColor,\"!important\")}:{}},getBootstrapAlertStyle:function(){return\"alert-\".concat(this.bootStrapStyle.style)},getBootstrapTextStyle:function(){return\"text-\".concat(this.bootStrapStyle.style)},getBootstrapBorderStyle:function(){return\"border-\".concat(this.bootStrapStyle.style)},getFontAwesomeIconStyle:function(){return this.bootStrapStyle.icon}}},He,[],!1,null,\"4d146e2c\",null).exports;var Fe\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[n(\"nav\",{staticClass:\"breadcrumb-divider\",attrs:{\"aria-label\":\"breadcrumb\"}},[n(\"ol\",{staticClass:\"breadcrumb\"},[n(\"li\",{staticClass:\"notlink breadcrumb-marker\"},[t._v(\"\\n ››  \\n \")]),t._v(\" \"),t._l(t.items,(function(e,i){return n(\"li\",{key:i,class:[\"breadcrumb-item\",{notlink:null\u003d\u003d\u003de.link}],attrs:{\"aria-current\":{page:t.isLast(i,t.items.length)}}},[null\u003d\u003d\u003de.link?n(\"a\",[t._v(\"\\n \"+t._s(e.title)+\"\\n \")]):n(\"a\",{attrs:{href:e.link}},[t._v(\"\\n \"+t._s(e.title)+\"\\n \")])])}))],2)])])};Fe._withStripped\u003d!0;const Ve\u003dqe({data:function(){return{items:[]}},methods:{isLast:function(t,e){return t\u003d\u003d\u003de-1}},mounted:function(){var t\u003dArray.from(document.querySelectorAll(\"ul\")).find((function(t){return t.classList.contains(\"site-nav-list-root\")}));if(t){var e\u003dt.querySelector(\".current\");if(e){this.items.unshift({title:e.textContent,link:null});for(var n\u003de.parentElement;n!\u003d\u003dt;){if(\"ul\"\u003d\u003d\u003dn.tagName.toLowerCase()){var i\u003dn.parentElement.querySelector(\"div\"),o\u003di.querySelector(\"a[href]\");null\u003d\u003d\u003do?this.items.unshift({title:i.textContent,link:null}):this.items.unshift({title:o.textContent,link:o.getAttribute(\"href\")})}n\u003dn.parentElement}}}}},Fe,[],!1,null,\"ef898034\",null).exports;var Ue\u003di(3),Qe\u003di.n(Ue),Xe\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.isLi?n(\"li\",{ref:\"dropdown\",class:[{disabled:t.disabledBool},\"dropdown\",t.addClass]},[t._t(\"button\",(function(){return[n(\"a\",{staticClass:\"dropdown-toggle nav-link\",class:{disabled:t.disabledBool},attrs:{role:\"button\",\"data-bs-toggle\":\"dropdown\"}},[t._t(\"header\")],2)]})),t._v(\" \"),t._t(\"dropdown-menu\",(function(){return[n(\"ul\",{staticClass:\"dropdown-menu\",class:[{show:t.show},{\"dropdown-menu-end\":t.menuAlignRight}]},[t._t(\"default\")],2)]}))],2):t.isSubmenu?n(\"submenu\",{ref:\"submenu\",scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)}):n(\"div\",{ref:\"dropdown\",class:[{disabled:t.disabledBool},\"btn-group\",t.addClass]},[t._t(\"before\"),t._v(\" \"),t._t(\"button\",(function(){return[n(\"button\",{staticClass:\"btn dropdown-toggle\",class:[t.btnType,t.btnWithBefore,{\"dropdown-toggle-split\":t.hasBefore}],attrs:{type:\"button\",disabled:t.disabledBool,\"data-bs-reference\":\"parent\",\"data-bs-toggle\":\"dropdown\"}},[t._t(\"header\")],2)]})),t._v(\" \"),t._t(\"dropdown-menu\",(function(){return[n(\"ul\",{staticClass:\"dropdown-menu\",class:[{show:t.show},{\"dropdown-menu-end\":t.menuAlignRight}]},[t._t(\"default\")],2)]}))],2)};Xe._withStripped\u003d!0;var Ye\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"li\",{ref:\"submenu\",class:[t.addClass,\"dropdown-submenu\",{dropend:t.dropright,dropstart:t.dropleft}]},[t._t(\"button\",(function(){return[n(\"a\",{staticClass:\"dropdown-item submenu-toggle\",class:{disabled:t.disabled},attrs:{role:\"button\",\"data-bs-toggle\":\"dropdown\"}},[t._t(\"header\")],2)]})),t._v(\" \"),t._t(\"dropdown-menu\",(function(){return[n(\"ul\",{staticClass:\"dropdown-menu\"},[t._t(\"default\")],2)]}))],2)};function Ke(t,n){for(var i\u003d0;i\u003cn.length;i++){var o\u003dn[i];o.enumerable\u003do.enumerable||!1,o.configurable\u003d!0,\"value\"in o\u0026\u0026(o.writable\u003d!0),Object.defineProperty(t,e(o.key),o)}}Ye._withStripped\u003d!0;var Ge,Ze\u003dArray.prototype,Je\u003dnew Error(\"Passed arguments must be of Node\"),tn\u003d[],en\u003d[];function nn(t){return t instanceof window.Node}function on(t){return t instanceof window.NodeList||t instanceof sn||t instanceof window.HTMLCollection||t instanceof Array}function rn(t){return(t\u003dt.trim()).length?t.replace(/\\s+/,\" \").split(\" \"):[]}var sn\u003dfunction(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n\u003de;if(e[0]\u003d\u003d\u003dwindow?n\u003d[window]:\"string\"\u003d\u003dtypeof e[0]?(n\u003d(e[1]||document).querySelectorAll(e[0]),e[1]\u0026\u0026(this.owner\u003de[1])):0 in e\u0026\u0026!nn(e[0])\u0026\u0026e[0]\u0026\u0026\"length\"in e[0]\u0026\u0026(n\u003de[0],e[1]\u0026\u0026(this.owner\u003de[1])),n){for(var i in n)this[i]\u003dn[i];this.length\u003dn.length}else this.length\u003d0}var e,n,i;return e\u003dt,(n\u003d[{key:\"concat\",value:function(){var t\u003dZe.slice.call(this);function e(n){Ze.forEach.call(n,(function(n){nn(n)?~t.indexOf(n)||t.push(n):on(n)\u0026\u0026e(n)}))}for(var n\u003darguments.length,i\u003dnew Array(n),o\u003d0;o\u003cn;o++)i[o]\u003darguments[o];return Ze.forEach.call(i,(function(n){if(nn(n))~t.indexOf(n)||t.push(n);else{if(!on(n))throw Error(\"Concat arguments must be of a Node, NodeList, HTMLCollection, or Array of (Node, NodeList, HTMLCollection, Array)\");e(n)}})),hn(t,this)}},{key:\"delete\",value:function(){var t\u003dln(this).filter((function(t){return t.remove?t.remove():t.parentNode\u0026\u0026t.parentNode.removeChild(t),document.body.contains(t)}));return t.length\u0026\u0026console.warn(\"NodeList: Some nodes could not be deleted.\"),t}},{key:\"each\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return Ze.forEach.apply(this,e),this}},{key:\"filter\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return hn(Ze.filter.apply(this,e),this)}},{key:\"find\",value:function(t){var e\u003d[];return ln(this).forEach((function(n){Ze.push.apply(e,n.querySelectorAll(t))})),ln(e,this.owner)}},{key:\"findChildren\",value:function(t){var e\u003dthis;return t?this.find(t).filter((function(t){return e.includes(t.parentElement)})):ln(this.map((function(t){return t.children})))}},{key:\"forEach\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return Ze.forEach.apply(this,e),this}},{key:\"includes\",value:function(t,e){return~this.indexOf(t,e)}},{key:\"map\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];var i\u003dZe.map.apply(this,e);return i.some((function(t){return nn(t)||on(t)}))?ln(i,this):i}},{key:\"parent\",value:function(){return ln(this.map((function(t){return t.parentNode})),this)}},{key:\"pop\",value:function(t){\"number\"!\u003dtypeof t\u0026\u0026(t\u003d1);for(var e\u003d[],n\u003dZe.pop.bind(this);t--;)e.push(n());return hn(e,this)}},{key:\"push\",value:function(){for(var t\u003dthis,e\u003darguments.length,n\u003dnew Array(e),i\u003d0;i\u003ce;i++)n[i]\u003darguments[i];return Ze.forEach.call(n,(function(e){if(!nn(e))throw Je;~t.indexOf(e)||Ze.push.call(t,e)})),this}},{key:\"shift\",value:function(t){\"number\"!\u003dtypeof t\u0026\u0026(t\u003d1);for(var e\u003d[];t--;)e.push(Ze.shift.call(this));return 1\u003d\u003de.length?e[0]:hn(e,this)}},{key:\"slice\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return hn(Ze.slice.apply(this,e),this)}},{key:\"splice\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];for(var i\u003d2,o\u003de.length;i\u003co;i++)if(!nn(e[i]))throw Je;return Ze.splice.apply(this,e),this}},{key:\"unshift\",value:function(){for(var t\u003dthis,e\u003dZe.unshift.bind(this),n\u003darguments.length,i\u003dnew Array(n),o\u003d0;o\u003cn;o++)i[o]\u003darguments[o];return Ze.forEach.call(i,(function(n){if(!nn(n))throw Je;~t.indexOf(n)||e(n)})),this}},{key:\"addClass\",value:function(t){return this.toggleClass(t,!0)}},{key:\"removeClass\",value:function(t){return this.toggleClass(t,!1)}},{key:\"toggleClass\",value:function(t,e){var n\u003dnull\u003d\u003de?\"toggle\":e?\"add\":\"remove\";return\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003drn(t)),this.each((function(e){var i,o\u003drn(e.className);t.forEach((function(t){var e\u003d~o.indexOf(t);e||\"remove\"\u003d\u003d\u003dn||o.push(t),e\u0026\u0026\"add\"!\u003d\u003dn\u0026\u0026(o\u003do.filter((function(e){return e!\u003d\u003dt})))})),(o\u003d(i\u003do).length?i.join(\" \"):\"\")?e.className\u003do:e.removeAttribute(\"class\")})),this}},{key:\"get\",value:function(t){var e\u003d[];return this.each((function(n){null!\u003d\u003dn\u0026\u0026(n\u003dn[t]),e.push(n)})),ln(e,this)}},{key:\"set\",value:function(t,e){return t.constructor\u003d\u003d\u003dObject?this.each((function(e){if(e)for(var n in t)n in e\u0026\u0026(e[n]\u003dt[n])})):this.each((function(n){t in n\u0026\u0026(n[t]\u003de)})),this}},{key:\"call\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];var i\u003dZe.shift.call(e),o\u003d[],r\u003d!0;return this.each((function(t){t\u0026\u0026t[i]instanceof Function?(t\u003dt[i].apply(t,e),o.push(t),r\u0026\u0026void 0!\u003d\u003dt\u0026\u0026(r\u003d!1)):o.push(void 0)})),r?this:ln(o,this)}},{key:\"item\",value:function(t){return hn([this[t]],this)}},{key:\"asArray\",get:function(){return Ze.slice.call(this)}},{key:\"on\",value:function(t,e,n){if(\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003drn(t)),!this||!this.length)return this;if(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003de,e\u003dnull),!n)return this;var i\u003dn;return n\u003de?function(t){var n\u003dhn(e,this);n.length\u0026\u0026n.some((function(e){var n\u003de.contains(t.target);return n\u0026\u0026i.call(e,t,e),n}))}:function(t){i.apply(this,[t,this])},this.each((function(e){t.forEach((function(t){(e\u003d\u003d\u003dwindow||nn(e))\u0026\u0026(e.addEventListener(t,n,!1),en.push({el:e,event:t,callback:n}))}))})),this}},{key:\"off\",value:function(t,e){return t instanceof Function\u0026\u0026(e\u003dt,t\u003dnull),t\u003dt instanceof Array?t:\"string\"\u003d\u003dtypeof t?rn(t):null,this.each((function(n){en\u003den.filter((function(i){return!!(!i||i.el!\u003d\u003dn||e\u0026\u0026e!\u003d\u003di.callback||t\u0026\u0026!~t.indexOf(i.event))||(i.el.removeEventListener(i.event,i.callback),!1)}))})),this}},{key:\"onBlur\",value:function(t){var e\u003d!(arguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1])||arguments[1];return this\u0026\u0026this.length\u0026\u0026t?(this.each((function(e){tn.push({el:e,callback:t})})),Ge||(Ge\u003dfunction(t){tn.forEach((function(e){e.el\u0026\u0026(e.el.contains(t.target)||e.el\u003d\u003d\u003dt.target||e.callback.call(e.el,t,e.el))}))},document.addEventListener(\"click\",Ge,!1),e\u0026\u0026document.addEventListener(\"touchstart\",Ge,!1)),this):this}},{key:\"offBlur\",value:function(t){return this.each((function(e){tn\u003dtn.filter((function(n){return!(n\u0026\u0026n.el\u003d\u003d\u003de\u0026\u0026(!t||n.callback\u003d\u003d\u003dt))\u0026\u0026e}))})),this}}])\u0026\u0026Ke(e.prototype,n),i\u0026\u0026Ke(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),t}(),an\u003dsn.prototype;function ln(t,e){var n\u003d[];return Ze.forEach.call(t,(function(i){if(nn(i))~n.indexOf(i)||n.push(i);else if(on(i))for(var o in i)n.push(i[o]);else if(null!\u003d\u003di)return t.get\u003dan.get,t.set\u003dan.set,t.call\u003dan.call,t.owner\u003de,t})),hn(n,e)}Object.getOwnPropertyNames(Ze).forEach((function(t){\"join\"!\u003d\u003dt\u0026\u0026\"copyWithin\"!\u003d\u003dt\u0026\u0026\"fill\"!\u003d\u003dt\u0026\u0026void 0\u003d\u003d\u003dan[t]\u0026\u0026(an[t]\u003dZe[t])})),window\u0026\u0026window.Symbol\u0026\u0026Symbol.iterator\u0026\u0026(an[Symbol.iterator]\u003dan.values\u003dZe[Symbol.iterator]);var cn\u003ddocument\u0026\u0026document.createElement(\"div\");function un(t){var e\u003dthis;an[t]||(cn[t]instanceof Function?an[t]\u003dfunction(){for(var n\u003d[],i\u003d!0,o\u003darguments.length,r\u003dnew Array(o),s\u003d0;s\u003co;s++)r[s]\u003darguments[s];for(var a in an){var l\u003dan[a];l\u0026\u0026l[t]instanceof Function?(l\u003dl[t].apply(l,r),n.push(l),i\u0026\u0026void 0!\u003d\u003dl\u0026\u0026(i\u003d!1)):n.push(void 0)}return i?e:ln(n,e)}:Object.defineProperty(an,t,{get:function(){var e\u003d[];return this.each((function(n){null!\u003d\u003dn\u0026\u0026(n\u003dn[t]),e.push(n)})),ln(e,this)},set:function(e){this.each((function(n){n\u0026\u0026t in n\u0026\u0026(n[t]\u003de)}))}}))}for(var dn in cn)un(dn);function hn(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return new sn(e)}window\u0026\u0026(window.NL\u003dhn);const pn\u003dhn;const fn\u003d{isRightAlign:function(t){var e\u003d0,n\u003dwindow.innerWidth,i\u003d(window.innerHeight,t.getBoundingClientRect());if(void 0\u003d\u003d\u003di)return!0;i.y;var o\u003di.x,r\u003di.x+t.offsetWidth;return i.y,t.offsetHeight,!(o\u003c0)\u0026\u0026(o\u003ce||!(r\u003en))},preventOverflow:function(t){t.removeAttribute(\"style\");var e\u003d0,n\u003d(window.innerWidth,window.innerHeight),i\u003dt.getBoundingClientRect();if(void 0!\u003d\u003di){var o\u003di.y,r\u003d(i.x,i.x,t.offsetWidth,i.y+t.offsetHeight);r\u003en?t.setAttribute(\"style\",\"bottom: auto; top: \".concat(-(r-n),\"px;\")):o\u003ce\u0026\u0026t.setAttribute(\"style\",\"top: auto; bottom: \".concat(-(e-o),\"px;\"))}}};function mn(t){for(var e\u003dt,n\u003dt;n;)n.classList\u0026\u0026n.classList.contains(\"dropdown-menu\")\u0026\u0026(e\u003dn),n\u003dn.parentNode;if(e.offsetWidth\u003ewindow.innerWidth)e.setAttribute(\"style\",\"left: 0px;\");else{var i\u003de.parentNode.getBoundingClientRect(),o\u003di.left+e.offsetWidth-window.innerWidth,r\u003do\u003c0?i.left:i.left-o;e.setAttribute(\"style\",\"left: \".concat(r,\"px;\"))}}const vn\u003dqe({props:{addClass:{type:String,default:\"\"},disabled:{type:[Boolean,String],default:!1}},data:function(){return{show:!1,dropright:!0,dropleft:!1}},inject:{isParentNavbar:{default:!1}},computed:{disabledBool:function(){return Re(this.disabled)}},methods:{hideSubmenu:function(){this.show\u003d!1,pn(this.$refs.submenu).find(\"ul.dropdown-menu\").each((function(t){return t.classList.toggle(\"show\",!1)})),this.alignMenuRight()},showSubmenu:function(){var t\u003dthis;this.show\u003d!0,pn(this.$refs.submenu).findChildren(\"ul\").each((function(e){e.classList.toggle(\"show\",!0),window.innerWidth\u003c768\u0026\u0026t.isParentNavbar?mn(e):(fn.isRightAlign(e)?t.alignMenuRight():t.alignMenuLeft(),fn.preventOverflow(e))}))},alignMenuRight:function(){this.dropright\u003d!0,this.dropleft\u003d!1},alignMenuLeft:function(){this.dropright\u003d!1,this.dropleft\u003d!0}},mounted:function(){var t\u003dthis,e\u003dpn(this.$refs.submenu);this.show\u0026\u0026this.showSubmenu(),e.onBlur((function(){t.hideSubmenu()}),!1),e.findChildren(\"a,button\").on(\"click\",(function(e){return e.preventDefault(),e.stopPropagation(),t.disabledBool||(t.show?t.hideSubmenu():t.showSubmenu()),!1})),e.findChildren(\"a,button\").on(\"mouseover\",(function(n){if(n.preventDefault(),window.innerWidth\u003e767){if(e.findChildren(\"ul.show\").length\u003e0||t.disabledBool)return!1;n.currentTarget.click(),t.$parent.$parent.$children.forEach((function(e){e.$el\u003d\u003d\u003dt.$el?e.$refs.submenu.showSubmenu():e.$refs.submenu.hideSubmenu()}))}return!1}))},beforeDestroy:function(){var t\u003dpn(this.$refs.submenu);t.offBlur(),t.findChildren(\"a,button\").off(),t.findChildren(\"ul\").off()}},Ye,[],!1,null,\"6df16086\",null).exports;const gn\u003dqe({components:{Submenu:vn},props:{disabled:{type:[Boolean,String],default:!1},type:{type:String,default:\"light\"},menuAlignRight:{type:Boolean,default:!1},addClass:{type:String,default:\"\"}},provide:{hasParentDropdown:!0},inject:{hasParentDropdown:{default:void 0},isParentNavbar:{default:!1}},data:function(){return{show:!1}},computed:{btnType:function(){return\"btn-\".concat(this.type)},disabledBool:function(){return Re(this.disabled)},isLi:function(){return this.$parent._navbar||this.$parent.menu||this.$parent._tabset},isSubmenu:function(){return this.hasParentDropdown},menu:function(){return!this.$parent||this.$parent.navbar},submenu:function(){return this.$parent\u0026\u0026(this.$parent.menu||this.$parent.submenu)},slots:function(){return this.$scopedSlots.default},hasBefore:function(){return!!this.$scopedSlots.before},btnWithBefore:function(){return this.hasBefore?\"btn-with-before\":\"\"}},methods:{blur:function(){var t\u003dthis;this.unblur(),this._hide\u003dsetTimeout((function(){t._hide\u003dnull,t.hideDropdownMenu()}),100)},unblur:function(){this._hide\u0026\u0026(clearTimeout(this._hide),this._hide\u003dnull)},hideDropdownMenu:function(){var t\u003dthis;this.show\u003d!1,pn(this.$refs.dropdown).findChildren(\"ul\").each((function(e){e.classList.toggle(\"show\",!1),window.innerWidth\u003c768\u0026\u0026t.isParentNavbar\u0026\u0026e.style.removeProperty(\"left\")}))},showDropdownMenu:function(){var t\u003dthis;this.show\u003d!0,pn(this.$refs.dropdown).findChildren(\"ul\").each((function(e){e.classList.toggle(\"show\",!0),window.innerWidth\u003c768\u0026\u0026t.isParentNavbar\u0026\u0026mn(e)}))}},mounted:function(){var t\u003dthis,e\u003dpn(this.$refs.dropdown);this.$slots.button\u0026\u0026e.findChildren(\".dropdown-toggle\").forEach((function(t){return t.setAttribute(\"data-bs-toggle\",\"dropdown\")})),this.show\u0026\u0026this.showDropdownMenu(),e.onBlur((function(){t.hideDropdownMenu()}),!1),e.findChildren(\"a,button.dropdown-toggle\").on(\"click\",(function(e){return e.preventDefault(),t.disabledBool||(t.show?t.hideDropdownMenu():t.showDropdownMenu()),!1})),e.findChildren(\"ul\").on(\"click\",\"li\u003ea\",(function(e){e.target.classList.contains(\"submenu-toggle\")||t.hideDropdownMenu()}))},beforeDestroy:function(){var t\u003dpn(this.$refs.dropdown);t.offBlur(),t.findChildren(\"a,button\").off(),t.findChildren(\"ul\").off()}},Xe,[],!1,null,\"12679d7e\",null).exports;var yn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[n(\"nav\",{ref:\"navbar\",class:[\"navbar\",\"navbar-expand-md\",\"d-print-none\",t.themeOptions,t.addClass,t.fixedOptions]},[n(\"div\",{staticClass:\"container-fluid\"},[n(\"div\",{staticClass:\"navbar-left\"},[t._t(\"brand\")],2),t._v(\" \"),n(\"div\",{ref:\"navbarDefault\",staticClass:\"navbar-default\"},[n(\"ul\",{staticClass:\"navbar-nav me-auto mt-2 mt-lg-0\"},[t._t(\"default\")],2)]),t._v(\" \"),t.slots.right?n(\"ul\",{staticClass:\"navbar-nav navbar-right\"},[t._t(\"right\")],2):t._e()])]),t._v(\" \"),n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isLowerNavbarShowing,expression:\"isLowerNavbarShowing\"}],ref:\"lowerNavbar\",staticClass:\"lower-navbar-container\"},[t._t(\"lower-navbar\",(function(){return[n(\"site-nav-button\"),t._v(\" \"),n(\"page-nav-button\")]}))],2)])};function wn(t,e){(null\u003d\u003de||e\u003et.length)\u0026\u0026(e\u003dt.length);for(var n\u003d0,i\u003dnew Array(e);n\u003ce;n++)i[n]\u003dt[n];return i}function bn(t,e){if(t){if(\"string\"\u003d\u003dtypeof t)return wn(t,e);var n\u003dObject.prototype.toString.call(t).slice(8,-1);return\"Object\"\u003d\u003d\u003dn\u0026\u0026t.constructor\u0026\u0026(n\u003dt.constructor.name),\"Map\"\u003d\u003d\u003dn||\"Set\"\u003d\u003d\u003dn?Array.from(t):\"Arguments\"\u003d\u003d\u003dn||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?wn(t,e):void 0}}function _n(t){return function(t){if(Array.isArray(t))return wn(t)}(t)||function(t){if(\"undefined\"!\u003dtypeof Symbol\u0026\u0026null!\u003dt[Symbol.iterator]||null!\u003dt[\"@@iterator\"])return Array.from(t)}(t)||bn(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function Sn(t){return t.endsWith(\".html\")?t.toLowerCase():t.endsWith(\"/\")?\"\".concat(t,\"index.html\").toLowerCase():t.endsWith(\"/\")?t.toLowerCase():\"\".concat(t,\".html\").toLowerCase()}yn._withStripped\u003d!0;var xn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.showSiteNav?n(\"overlay\",{attrs:{type:\"siteNav\",\"portal-name\":t.portalName},scopedSlots:t._u([{key:\"navMenuIcon\",fn:function(){return[n(\"div\",{class:[\"toggle-site-nav-button\"]},[n(\"span\"),t._v(\" \"),n(\"span\"),t._v(\" \"),n(\"span\")])]},proxy:!0}],null,!1,3920804522)}):t._e()};xn._withStripped\u003d!0;const Cn\u003dqe({data:function(){return{portalName:void 0,show:!1}},computed:{showSiteNav:function(){return this.show\u0026\u0026this.portalName}},methods:{toggleSiteNavButton:function(){window.innerWidth\u003c992?this.show\u003d!0:this.show\u003d!1}},mounted:function(){null!\u003d\u003ddocument.querySelector(\"#site-nav a\")?this.portalName\u003d\"site-nav\":null!\u003d\u003ddocument.querySelector(\".site-nav-root a\")\u0026\u0026(this.portalName\u003d\"mb-site-nav\"),this.toggleSiteNavButton(),pn(window).on(\"resize\",this.toggleSiteNavButton)},beforeDestroy:function(){pn(window).off(\"resize\",this.toggleSiteNavButton)}},xn,[],!1,null,\"d6ffaa8e\",null).exports;var $n\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.showPageNav?n(\"overlay\",{attrs:{type:\"pageNav\",\"portal-name\":t.portalName},scopedSlots:t._u([{key:\"navMenuIcon\",fn:function(){return[n(\"div\",{class:[\"toggle-page-nav-button\"]},[n(\"span\"),t._v(\" \"),n(\"span\"),t._v(\" \"),n(\"span\")])]},proxy:!0}],null,!1,171840498)}):t._e()};$n._withStripped\u003d!0;const kn\u003dqe({data:function(){return{portalName:void 0,show:!1}},computed:{showPageNav:function(){return this.show\u0026\u0026this.portalName}},methods:{togglePageNavButton:function(){window.innerWidth\u003c1300?this.show\u003d!0:this.show\u003d!1}},mounted:function(){null!\u003d\u003ddocument.querySelector(\"#page-nav a\")?this.portalName\u003d\"page-nav\":null!\u003d\u003ddocument.querySelector(\"#mb-page-nav a\")\u0026\u0026(this.portalName\u003d\"mb-page-nav\"),this.togglePageNavButton(),pn(window).on(\"resize\",this.togglePageNavButton)},beforeDestroy:function(){pn(window).off(\"resize\",this.togglePageNavButton)}},$n,[],!1,null,\"4b08b1df\",null).exports;const Tn\u003dqe({components:{SiteNavButton:Cn,PageNavButton:kn},props:{type:{type:String,default:\"primary\"},addClass:{type:String,default:\"\"},fixed:{type:[Boolean,String],default:!1},defaultHighlightOn:{type:String,default:\"sibling-or-child\"}},provide:function(){return{toggleLowerNavbar:this.toggleLowerNavbar,isParentNavbar:!0}},data:function(){return{id:\"bs-example-navbar-collapse-1\",styles:{},isLowerNavbarShowing:!1}},computed:{fixedBool:function(){return Re(this.fixed)},fixedOptions:function(){return this.fixedBool?\"navbar-fixed\":\"\"},slots:function(){return this.$scopedSlots},themeOptions:function(){switch(this.type){case\"none\":return\"\";case\"light\":return\"navbar-light bg-light\";case\"dark\":return\"navbar-dark bg-dark\";case\"primary\":default:return\"navbar-dark bg-primary\"}}},methods:{splitUrl:function(t){var e\u003dnew URL(Sn(t));return\"\".concat(e.pathname).substr(1).split(\"/\")},isEqualExceptLast:function(t,e){for(var n\u003d0;n\u003ct.length-1;n+\u003d1)if(t[n]!\u003d\u003de[n])return!1;return!0},isSibling:function(t,e){var n\u003dthis.splitUrl(e),i\u003dthis.splitUrl(t);return n.length\u003d\u003d\u003di.length\u0026\u0026this.isEqualExceptLast(n,i)},isChild:function(t,e){var n\u003dthis.splitUrl(e),i\u003dthis.splitUrl(t);return!(i.length\u003c\u003dn.length)\u0026\u0026this.isEqualExceptLast(n,i)},isExact:function(t,e){return Sn(t)\u003d\u003d\u003dSn(e)},addClassIfDropdown:function(t,e,n){t.includes(e)\u0026\u0026(e.classList.add(\"dropdown-current\"),this.addClassIfSubmenu(e,n))},addClassIfSubmenu:function(t,e){for(var n\u003dt.parentElement;n!\u003d\u003de;)n.classList.contains(\"dropdown-submenu\")\u0026\u0026pn(n).findChildren(\"a\").each((function(t){return t.classList.add(\"dropdown-current\")})),n\u003dn.parentElement},highlightLink:function(t){var e\u003dthis.defaultHighlightOn,n\u003d[];this.$el.querySelectorAll(\".navbar-nav\").forEach((function(t){return n.push.apply(n,_n(Array.from(t.children)))}));for(var i\u003d0;i\u003cn.length;i+\u003d1)for(var o\u003dn[i],r\u003d[o],s\u003dArray.from(o.querySelectorAll(\"a.nav-link\")),a\u003dArray.from(o.querySelectorAll(\"a.dropdown-item\")),l\u003dr.concat(s).concat(a).filter((function(t){return t.href})),c\u003d0;c\u003cl.length;c+\u003d1){var u\u003dl[c];if(\"none\"!\u003d\u003d(u.getAttribute(\"highlight-on\")||e)\u0026\u0026this.isExact(t,u.href))return o.classList.add(\"current\"),void this.addClassIfDropdown(a,u,o)}for(var d\u003d0;d\u003cn.length;d+\u003d1)for(var h\u003dn[d],p\u003d[h],f\u003dArray.from(h.querySelectorAll(\"a.nav-link\")),m\u003dArray.from(h.querySelectorAll(\"a.dropdown-item\")),v\u003dp.concat(f).concat(m).filter((function(t){return t.href})),g\u003d0;g\u003cv.length;g+\u003d1){var y\u003dv[g],w\u003dy.getAttribute(\"highlight-on\")||e;if(\"none\"!\u003d\u003dw)if(\"sibling-or-child\"\u003d\u003d\u003dw){if(this.isSibling(t,y.href)||this.isChild(t,y.href))return h.classList.add(\"current\"),void this.addClassIfDropdown(m,y,h)}else if(\"sibling\"\u003d\u003d\u003dw){if(this.isSibling(t,y.href))return h.classList.add(\"current\"),void this.addClassIfDropdown(m,y,h)}else if(\"child\"\u003d\u003d\u003dw\u0026\u0026this.isChild(t,y.href))return h.classList.add(\"current\"),void this.addClassIfDropdown(m,y,h)}},toggleLowerNavbar:function(){this.$refs.lowerNavbar.childElementCount\u003e0?this.isLowerNavbarShowing\u003d!0:this.isLowerNavbarShowing\u003d!1}},created:function(){this._navbar\u003d!0},mounted:function(){var t\u003dthis,e\u003dpn(\u0027.dropdown\u003e[data-bs-toggle\u003d\"dropdown\"]\u0027,this.$el).parent();e.on(\"click\",\".dropdown-toggle\",(function(t){t.preventDefault(),e.each((function(e){e.contains(t.target)\u0026\u0026e.classList.toggle(\"open\")}))})).on(\"click\",\".dropdown-menu\u003eli\u003ea\",(function(t){e.each((function(e){e.contains(t.target)\u0026\u0026e.classList.remove(\"open\")}))})).onBlur((function(t){e.each((function(e){e.contains(t.target)||e.classList.remove(\"open\")}))})),this.highlightLink(window.location.href);var n\u003dpn(this.$refs.navbarDefault).find(\".current\")[0];n\u0026\u0026window.innerWidth\u003c768\u0026\u0026n.offsetLeft+n.offsetWidth\u003ewindow.innerWidth\u0026\u0026(this.$refs.navbarDefault.scrollLeft\u003dn.offsetLeft+n.offsetWidth-window.innerWidth),this.toggleLowerNavbar(),pn(window).on(\"resize\",this.toggleLowerNavbar),pn(this.$refs.navbarDefault).on(\"wheel\",(function(e){window.innerWidth\u003c768\u0026\u0026!function(t){for(var e\u003d0;e\u003ct.length;e+\u003d1)if(t[e].classList\u0026\u0026t[e].classList.contains(\"dropdown-menu\"))return!0;return!1}(e.path)\u0026\u0026(e.preventDefault(),t.$refs.navbarDefault.scrollLeft+\u003de.deltaY)}))},beforeDestroy:function(){pn(\".dropdown\",this.$el).off(\"click\").offBlur(),pn(window).off(\"resize\",this.toggleLowerNavbar),pn(this.$refs.navbarDefault).off(\"wheel\")}},yn,[],!1,null,\"73b4aa16\",null).exports;var En\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.isMinimal?n(\"minimal-panel\",t._b({attrs:{\"panel-id\":t.panelId},scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)},\"minimal-panel\",t.$attrs,!1)):n(\"nested-panel\",t._b({attrs:{\"panel-id\":t.panelId,type:t.type},scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)},\"nested-panel\",t.$attrs,!1))};En._withStripped\u003d!0;var On\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.localMinimized?n(\"span\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[n(\"span\",{staticClass:\"morph\"},[n(\"button\",{class:[\"morph-display-wrapper\",\"btn\",t.btnType],on:{click:function(e){return t.open()}}},[t.noMinimizedSwitch?t._e():n(\"div\",{staticClass:\"minimal-caret-wrapper\"},[n(\"span\",{class:[\"glyphicon\",\"glyphicon-chevron-right\"]})]),t._v(\" \"),n(\"span\",{staticClass:\"card-title\"},[t._t(\"_alt\",(function(){return[t._t(\"header\")]}))],2)])])]):n(\"div\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[n(\"div\",{class:[\"card\",{\"expandable-card\":t.isExpandableCard},t.borderType]},[n(\"div\",{class:[\"card-header\",{\"header-toggle\":t.isExpandableCard},t.cardType,t.borderType],on:{click:function(e){e.preventDefault(),e.stopPropagation(),t.isExpandableCard\u0026\u0026t.toggle()}}},[n(\"div\",{staticClass:\"caret-wrapper\"},[t.showCaret?n(\"span\",{class:[\"glyphicon\",t.localExpanded?\"glyphicon-chevron-down\":\"glyphicon-chevron-right\"]}):t._e()]),t._v(\" \"),n(\"div\",{ref:\"headerWrapper\",class:[\"header-wrapper card-title\",t.cardType,{\"text-white\":!t.isLightBg,\"header-transparent\":!t.shouldShowHeader}]},[t._t(\"header\")],2),t._v(\" \"),n(\"div\",{staticClass:\"button-wrapper\"},[t._t(\"button\",(function(){return[n(\"panel-switch\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isExpandableCard\u0026\u0026!t.noSwitchBool\u0026\u0026!t.showCaret,expression:\"isExpandableCard \u0026\u0026 !noSwitchBool \u0026\u0026 !showCaret\"}],attrs:{\"is-open\":t.localExpanded,\"is-light-bg\":t.isLightBg}}),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.noCloseBool,expression:\"!noCloseBool\"}],staticClass:\"close-button btn\",class:[t.isLightBg?\"btn-outline-secondary\":\"btn-outline-light\",{\"seamless-button\":t.isSeamless}],attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.close()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-remove\",attrs:{\"aria-hidden\":\"true\"}})]),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.popupUrl,expression:\"popupUrl\"}],staticClass:\"popup-button btn\",class:[t.isLightBg?\"btn-outline-secondary\":\"btn-outline-light\",{\"seamless-button\":t.isSeamless}],attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.openPopup()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-new-window\",attrs:{\"aria-hidden\":\"true\"}})])]}))],2)]),t._v(\" \"),n(\"div\",{ref:\"panel\",staticClass:\"card-collapse\",class:{\"card-peek-collapsed\":t.shouldShowPeek}},[t.wasRetrieverLoaded||t.preloadBool?n(\"div\",{staticClass:\"card-body\"},[t._t(\"default\"),t._v(\" \"),t.hasSrc?n(\"retriever\",{ref:\"retriever\",attrs:{src:t.srcWithoutFragment,fragment:t.fragment},on:{\"src-loaded\":t.retrieverUpdateMaxHeight}}):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"bottom-button-wrapper\"},[n(\"panel-switch\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isExpandableCard\u0026\u0026t.bottomSwitchBool,expression:\"isExpandableCard \u0026\u0026 bottomSwitchBool\"}],attrs:{\"is-open\":t.localExpanded},nativeOn:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggle(!0)}}})],1)],2):t._e(),t._v(\" \"),n(\"hr\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isSeamless,expression:\"isSeamless\"}]})]),t._v(\" \"),n(\"transition\",{attrs:{name:\"peek-read-more-fade\"}},[t.shouldShowPeek?n(\"div\",{staticClass:\"peek-read-more glyphicon glyphicon-chevron-down\",on:{click:function(e){return t.toggle()}}}):t._e()])],1)])};On._withStripped\u003d!0;const Bn\u003d{props:{type:{type:String,default:null},expandable:{type:[Boolean,String],default:!0},isOpen:{type:[Boolean,String],default:null},expanded:{type:[Boolean,String],default:null},minimized:{type:[Boolean,String],default:!1},noMinimizedSwitch:{type:[Boolean,String],default:!1},noSwitch:{type:[Boolean,String],default:!1},noClose:{type:[Boolean,String],default:!1},popupUrl:{type:String,default:null},src:{type:String},bottomSwitch:{type:[Boolean,String],default:!0},preload:{type:[Boolean,String],default:!1},addClass:{type:String,default:\"\"},expandHeaderless:{type:Boolean,default:!1},peek:{type:Boolean,default:!1},panelId:{type:String,default:null}},computed:{expandableBool:function(){return Re(this.expandable)},isOpenBool:function(){return Re(this.isOpen)},expandedBool:function(){return Re(this.expanded)},minimizedBool:function(){return Re(this.minimized)},noSwitchBool:function(){return Re(this.noSwitch)},noCloseBool:function(){return Re(this.noClose)},bottomSwitchBool:function(){return Re(this.bottomSwitch)},preloadBool:function(){return Re(this.preload)},hasHeaderBool:function(){return this.$scopedSlots.header},isExpandableCard:function(){return this.expandableBool},hasId:function(){return this.panelId},hasSrc:function(){return this.src\u0026\u0026this.src.length\u003e0},srcWithoutFragment:function(){return this.src.split(\"#\")[0]},shouldShowHeader:function(){return!this.localExpanded||!this.expandHeaderless},shouldShowPeek:function(){return this.peek\u0026\u0026!this.localExpanded},collapsedPanelHeight:function(){return this.peek?125:0}},data:function(){return{localExpanded:!1,localMinimized:!1,wasRetrieverLoaded:!1,isRetrieverLoadDone:!this.src,fragment:\"\"}},methods:{toggle:function(t){var e\u003dthis;this.wasRetrieverLoaded?(this.localExpanded?(t\u0026\u0026(this.$refs.panel.style.maxHeight\u003d\"\".concat(this.$refs.panel.scrollHeight,\"px\")),requestAnimationFrame((function(){if(e.$el.getBoundingClientRect().top\u003c0){var n,i\u003ddocument.querySelector(\"header[sticky]\");if(null\u003d\u003di)n\u003d0;else{var o\u003dwindow.getComputedStyle(i,null);n\u003di.clientHeight-parseFloat(o.paddingTop)-parseFloat(o.paddingBottom)||0}window.scrollTo({top:window.scrollY+e.$el.getBoundingClientRect().top-n-3,left:0,behavior:t?\"smooth\":\"instant\"})}e.$refs.panel.style.maxHeight\u003d\"\".concat(e.collapsedPanelHeight,\"px\")}))):(this.$refs.panel.style.transition\u003d\"max-height 0.5s ease-in-out\",this.$refs.panel.style.maxHeight\u003d\"\".concat(this.$refs.panel.scrollHeight,\"px\")),this.localExpanded\u003d!this.localExpanded):this.open()},close:function(){this.localMinimized\u003d!0,this.localExpanded\u003d!1},open:function(){var t\u003dthis;this.localMinimized\u003d!1,this.$nextTick((function(){t.initPanel(),t.localExpanded\u003d!0,t.wasRetrieverLoaded\u003d!0,t.$nextTick((function(){t.$refs.panel.style.maxHeight\u003d\"\".concat(t.$refs.panel.scrollHeight,\"px\")}))}))},openPopup:function(){window.open(this.popupUrl)},retrieverUpdateMaxHeight:function(){this.isRetrieverLoadDone\u003d!0,this.localExpanded\u0026\u0026(this.expandedBool?this.$refs.panel.style.maxHeight\u003d\"none\":this.$refs.panel.style.maxHeight\u003d\"\".concat(this.$refs.panel.scrollHeight,\"px\"))},initPanel:function(){var t\u003dthis;this.$refs.panel.addEventListener(\"transitionend\",(function(e){t.localExpanded\u0026\u0026t.isRetrieverLoadDone\u0026\u0026e.target\u003d\u003d\u003dt.$refs.panel\u0026\u0026(t.$refs.panel.style.maxHeight\u003d\"none\")})),this.localExpanded?this.$refs.panel.style.maxHeight\u003d\"none\":this.$refs.panel.style.maxHeight\u003d\"\".concat(this.collapsedPanelHeight,\"px\")}},created:function(){if(this.src){var t\u003dIe(this.src);t\u0026\u0026(this.fragment\u003dt)}var e\u003d!this.expandableBool\u0026\u0026\"false\"!\u003d\u003dthis.expanded;this.localExpanded\u003de||this.expandedBool,null\u003d\u003d\u003dthis.localExpanded\u0026\u0026(this.localExpanded\u003d!1),this.wasRetrieverLoaded\u003dthis.localExpanded||this.peek,this.localMinimized\u003dthis.minimizedBool},mounted:function(){this.localMinimized||this.initPanel()}};var Pn\u003dfunction(){var t\u003dthis.$createElement,e\u003dthis._self._c||t;return e(\"button\",{class:[\"collapse-button\",\"btn\",this.isLightBg?\"btn-outline-secondary\":\"btn-outline-light\"],attrs:{type:\"button\"}},[e(\"span\",{class:[\"collapse-icon\",\"glyphicon\",\"glyphicon-menu-down\",{opened:this.isOpenBool}],attrs:{\"aria-hidden\":\"true\"}})])};Pn._withStripped\u003d!0;const Ln\u003dqe({props:{isOpen:{type:[Boolean,String],default:!1},isLightBg:{type:Boolean,default:!0}},computed:{isOpenBool:function(){return Re(this.isOpen)}}},Pn,[],!1,null,null,null).exports;var Nn\u003dfunction(){var t\u003dthis.$createElement;return(this._self._c||t)(\"div\",[this._v(\"\\n Loading...\\n\")])};function An(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}Nn._withStripped\u003d!0;const zn\u003dqe({props:{src:{type:String,default:null},fragment:{type:String,default:null},delay:{type:[Boolean,String],default:!1},hasFetched:{type:Boolean,default:!1}},data:function(){return{hasFetchedCopy:this.hasFetched}},computed:{delayBool:function(){return Re(this.delay)},hash:function(){return Ie(this.src)||this.fragment},srcWithoutHash:function(){return this.src.split(\"#\")[0]}},methods:{fetch:function(t){function e(){return t.apply(this,arguments)}return e.toString\u003dfunction(){return t.toString()},e}((function(){var t\u003dthis;this.srcWithoutHash\u0026\u0026(this.hasFetchedCopy||fetch(this.srcWithoutHash).then((function(t){return t.text()})).then((function(e){var i\u003de;if(t.hash){var o\u003ddocument.implementation.createHTMLDocument(\"\");o.body.innerHTML\u003di,o.querySelectorAll(\"svg \u003e script\").forEach((function(t){return t.remove()})),i\u003do.querySelector(\"#\".concat(t.hash)).innerHTML}if(t.hasFetchedCopy\u003d!0,void 0\u003d\u003d\u003di\u0026\u0026t.hash)t.$el.innerHTML\u003d\"\u003cstrong\u003eError\u003c/strong\u003e: Failed to retrieve page fragment:\"+\" \".concat(t.srcWithoutHash,\"#\").concat(t.hash);else{var r\u003dfunction(t){for(var e\u003d1;e\u003carguments.length;e++){var i\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?An(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):An(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}({},t.$root.$data);(new(Vue.extend({template:\"\u003cdiv\u003e\\n\".concat(i,\"\\n\u003c/div\u003e\"),data:function(){return r}}))).$mount(t.$el),t.$emit(\"src-loaded\")}})).catch((function(e){console.error(e),t.$el.innerHTML\u003d\"\u003cstrong\u003eError\u003c/strong\u003e: Failed to retrieve content from source: \"+\"\u003cem\u003e\".concat(t.srcWithoutHash,\"\u003c/em\u003e\"),t.$emit(\"src-loaded\")})))}))},mounted:function(){this.$nextTick((function(){this.srcWithoutHash||(this.$el.innerHTML\u003d\"\"),this.delayBool||this.fetch()}))}},Nn,[],!1,null,null,null).exports;const Mn\u003dqe({mixins:[Bn],components:{panelSwitch:Ln,retriever:zn},computed:{showCaret:function(){return this.isSeamless\u0026\u0026this.expandableBool},isSeamless:function(){return\"seamless\"\u003d\u003d\u003dthis.type},btnType:function(){return this.isSeamless||\"light\"\u003d\u003d\u003dthis.type?\"btn-outline-secondary\":\"btn-outline-\".concat(this.type||\"secondary\")},borderType:function(){return this.isSeamless?\"border-0\":this.type?\"light\"\u003d\u003d\u003dthis.type?\"\":\"border-\".concat(this.type):\"\"},cardType:function(){return this.isSeamless?\"bg-white\":\"bg-\".concat(this.type||\"light\")},isLightBg:function(){return\"bg-light\"\u003d\u003d\u003dthis.cardType||\"bg-white\"\u003d\u003d\u003dthis.cardType||\"bg-warning\"\u003d\u003d\u003dthis.cardType}}},On,[],!1,null,\"1e33c620\",null).exports;var Hn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.localMinimized?n(\"span\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[t.hasId?n(\"span\",{staticClass:\"anchor\",attrs:{id:t.panelId}}):t._e(),t._v(\" \"),n(\"span\",{staticClass:\"morph\"},[n(\"button\",{staticClass:\"morph-display-wrapper btn card-title morph-title\",on:{click:function(e){return t.minimalOpen()}}},[t.noMinimizedSwitch?t._e():n(\"div\",{class:[\"glyphicon\",\"glyphicon-chevron-right\"]}),t._v(\" \"),t._t(\"_alt\",(function(){return[n(\"span\",{staticClass:\"card-title\"},[t._t(\"header\")],2)]}))],2)])]):n(\"div\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[t.hasId?n(\"span\",{staticClass:\"anchor\",attrs:{id:t.panelId}}):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"card card-flex\"},[n(\"div\",{class:[\"header-wrapper\",{\"header-wrapper-bottom\":t.isHeaderAtBottom,\"header-toggle\":t.isExpandableCard}],on:{click:function(e){e.preventDefault(),e.stopPropagation(),t.isExpandableCard\u0026\u0026t.minimalToggle()}}},[n(\"transition\",{attrs:{name:\"header-fade\"}},[n(\"span\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.isHeaderAtBottom,expression:\"!isHeaderAtBottom\"}],ref:\"headerWrapper\",class:[\"card-title\",{ellipses:!t.hasHeaderBool}]},[n(\"span\",{staticClass:\"card-title-inline\"},[t._t(\"header\")],2),t._v(\" \"),n(\"span\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.showDownSwitch,expression:\"showDownSwitch\"}],staticClass:\"minimal-button glyphicon glyphicon-menu-down minimal-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])]),t._v(\" \"),n(\"div\",{class:[\"button-wrapper\",{\"button-wrapper-expanded\":t.isHeaderAtBottom}]},[t._t(\"button\",(function(){return[n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.noCloseBool,expression:\"!noCloseBool\"}],staticClass:\"minimal-button\",attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.minimalClose()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-remove minimal-close-button\",attrs:{\"aria-hidden\":\"true\"}})]),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:null!\u003d\u003dt.popupUrl,expression:\"popupUrl !\u003d\u003d null\"}],staticClass:\"minimal-button\",attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.openPopup()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-new-window minimal-popup-button\",attrs:{\"aria-hidden\":\"true\"}})]),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isHeaderAtBottom\u0026\u0026t.isExpandableCard\u0026\u0026t.bottomSwitchBool,expression:\"isHeaderAtBottom \u0026\u0026 isExpandableCard \u0026\u0026 bottomSwitchBool\"}],staticClass:\"minimal-button\",attrs:{type:\"button\"}},[n(\"span\",{staticClass:\"glyphicon glyphicon-menu-up minimal-menu-up\",attrs:{\"aria-hidden\":\"true\"}})])]}))],2)],1),t._v(\" \"),n(\"div\",{ref:\"panel\",staticClass:\"card-collapse\",class:{\"card-peek-collapsed\":t.shouldShowPeek}},[t.wasRetrieverLoaded||t.preloadBool?n(\"div\",{staticClass:\"card-body\"},[t._t(\"default\"),t._v(\" \"),t.hasSrc?n(\"retriever\",{ref:\"retriever\",attrs:{src:t.srcWithoutFragment,fragment:t.fragment},on:{\"src-loaded\":t.retrieverUpdateMaxHeight}}):t._e()],2):t._e()])])])};Hn._withStripped\u003d!0;var Dn\u003dqe({mixins:[Bn],components:{retriever:zn},data:function(){return{isHeaderAtBottom:!1}},computed:{showDownSwitch:function(){return this.hasHeaderBool\u0026\u0026this.isExpandableCard\u0026\u0026!this.noSwitchBool}},methods:{minimalToggle:function(){var t\u003dthis;if(this.localExpanded){this.$refs.panel.addEventListener(\"transitionend\",(function e(n){n.target\u003d\u003d\u003dt.$refs.panel\u0026\u0026(t.isHeaderAtBottom\u003d!1,t.$refs.panel.removeEventListener(\"transitionend\",e))}))}else this.isHeaderAtBottom\u003d!0;this.toggle(!0)},minimalOpen:function(){this.open(),this.isHeaderAtBottom\u003d!0},minimalClose:function(){this.close(),this.isHeaderAtBottom\u003d!1}},created:function(){this.isHeaderAtBottom\u003dthis.localExpanded}},Hn,[],!1,null,\"5d519034\",null);const Rn\u003dqe({components:{nestedPanel:Mn,minimalPanel:Dn.exports},props:{panelId:{type:String,default:null},type:{type:String,default:null}},computed:{isMinimal:function(){return\"minimal\"\u003d\u003d\u003dthis.type}}},En,[],!1,null,null,null).exports;var jn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"annotate-image-wrapper\",t.addClass]},[n(\"img\",{ref:\"pic\",staticClass:\"annotate-image\",attrs:{src:t.src,alt:t.alt,width:t.computedWidth},on:{\"~load\":function(e){return t.getWidth.apply(null,arguments)}}}),t._v(\" \"),n(\"div\",{staticStyle:{top:\"0\",left:\"0\",height:\"0\"}},[t._t(\"default\")],2)])};jn._withStripped\u003d!0;const In\u003dqe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:\"\"},width:{type:String,default:\"\"},addClass:{type:String,default:\"\"}},computed:{hasWidth:function(){return\"\"!\u003d\u003dthis.width},hasHeight:function(){return\"\"!\u003d\u003dthis.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight}},data:function(){return{widthFromHeight:\"\"}},methods:{getWidth:function(){if(!this.hasWidth\u0026\u0026this.hasHeight){var t\u003dthis.$refs.pic,e\u003dt.naturalHeight,n\u003dt.naturalWidth/e;this.widthFromHeight\u003dMath.round(je(this.height)*n)}}},provide:function(){return{width:this.width,height:this.height,src:this.src}}},jn,[],!1,null,null,null).exports;var qn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[t.hasBottomText\u0026\u0026t.hasLabel?n(\"div\",{staticClass:\"legend-wrapper\"},[n(\"div\",{staticClass:\"text-header\"},[t._v(\"\\n \"+t._s(t.computedBottomHeader)+\"\\n \")]),t._v(\" \"),t.hasContent?n(\"div\",[t._t(\"content\")],2):t._e()]):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"annotate-point\"},[t.isMounted?n(\"div\",{staticClass:\"popover-annotation\"},[n(\"div\",{style:t.pointPosition},[t.isMounted?n(\"v-popover\",{attrs:{placement:t.placement,delay:0,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,distance:t.computeDistance,disabled:!t.hasPopover,skidding:t.computeSkidding,\"arrow-padding\":t.computeArrowPadding,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[t.hasContent||t.hasHeader?n(\"div\",{staticClass:\"popover-container\"},[t.hasHeader?n(\"h3\",{staticClass:\"popover-header\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),t.hasContent?n(\"div\",{staticClass:\"popover-body\"},[t._t(\"content\")],2):t._e()]):t._e()]},proxy:!0}],null,!0)},[n(\"div\",{staticClass:\"hover-wrapper\"},[t._t(\"default\",(function(){return[n(\"button\",{staticClass:\"hover-point\",style:t.pointStyle})]})),t._v(\" \"),n(\"div\",{staticClass:\"hover-label\",style:t.labelStyle},[t._t(\"label\")],2)],2)]):t._e()],1)]):t._e()])])};qn._withStripped\u003d!0;const Wn\u003dqe({props:{content:{type:String,default:\"\"},header:{type:String,default:\"\"},placement:{type:String,default:\"top\"},x:{type:String,default:null},y:{type:String,default:null},color:{type:String,default:\"green\"},textColor:{type:String,default:\"black\"},fontSize:{type:String,default:\"14\"},opacity:{type:String,default:\"0.3\"},size:{type:String,default:\"40\"},label:{type:String,default:\"\"},legend:{type:String,default:\"popover\"},trigger:{type:String,default:\"click\"}},data:function(){return{targetEl:{},isMounted:!1,width:this.width,height:this.height,src:this.src}},inject:[\"width\",\"height\",\"src\"],computed:{pointPosition:function(){var t\u003dthis;this.computeImage((function(){t.width\u003dt.parentEl.offsetWidth,t.height\u003dt.parentEl.offsetHeight}));var e\u003d100*(this.toDecimal(this.x)-this.size/2/this.width),n\u003d100*(this.toDecimal(this.y)-this.size/2/this.height);return{left:\"\".concat(e,\"%\"),top:\"\".concat(n,\"%\"),position:\"absolute\",pointerEvents:\"all\"}},pointStyle:function(){var t\u003dthis.hasPopover?\"pointer\":\"default\";return{backgroundColor:this.color,opacity:this.opacity,width:\"\".concat(this.size,\"px\"),height:\"\".concat(this.size,\"px\"),cursor:t}},labelStyle:function(){return{fontSize:\"\".concat(Math.min(this.fontSize,this.size),\"px\"),color:this.textColor}},triggers:function(){return this.trigger.split(\" \")},computeDistance:function(){return\"top\"\u003d\u003d\u003dthis.placement?je(this.size*(2/3)):je(this.size/10)},computeSkidding:function(){return\"left\"\u003d\u003d\u003dthis.placement||\"right\"\u003d\u003d\u003dthis.placement?-je(this.size/4):0},computeArrowPadding:function(){return\"left\"\u003d\u003d\u003dthis.placement||\"right\"\u003d\u003d\u003dthis.placement?je(this.size/2):0},hasHeader:function(){return!!this.$scopedSlots.header},hasContent:function(){return!!this.$scopedSlots.content},hasWidth:function(){return\"\"!\u003d\u003dthis.width},hasHeight:function(){return\"\"!\u003d\u003dthis.height},hasLabel:function(){return!!this.$scopedSlots.label},hasBottomText:function(){return\"bottom\"\u003d\u003d\u003dthis.legend||\"both\"\u003d\u003d\u003dthis.legend},hasPopover:function(){return\"popover\"\u003d\u003d\u003dthis.legend||\"both\"\u003d\u003d\u003dthis.legend},computedBottomHeader:function(){return\"\"!\u003d\u003dthis.label\u0026\u0026\"\"\u003d\u003d\u003dthis.header?this.label:\"\"\u003d\u003d\u003dthis.label\u0026\u0026\"\"!\u003d\u003dthis.header?this.header:\"\".concat(this.label,\": \").concat(this.header)}},methods:{computeImage:function(t){var e\u003dnew Image;e.onload\u003dfunction(){t()},e.src\u003dthis.src},toDecimal:function(t){return parseFloat(t)/100}},mounted:function(){this.targetEl\u003dthis.$el,this.isMounted\u003d!0,this.parentEl\u003dthis.$el.parentElement.parentElement.querySelector(\".annotate-image\")}},qn,[],!1,null,null,null).exports;var Fn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:[\"image-wrapper\",t.addClass]},[n(\"img\",{ref:\"pic\",staticClass:\"img-fluid rounded\",attrs:{src:t.src,alt:t.alt,width:t.computedWidth},on:{\"~load\":function(e){return t.computeWidth.apply(null,arguments)}}}),t._v(\" \"),n(\"span\",{staticClass:\"image-caption\"},[t._t(\"default\")],2)])};Fn._withStripped\u003d!0;const Vn\u003dqe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:\"\"},width:{type:String,default:\"\"},addClass:{type:String,default:\"\"}},computed:{hasWidth:function(){return\"\"!\u003d\u003dthis.width},hasHeight:function(){return\"\"!\u003d\u003dthis.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight}},data:function(){return{widthFromHeight:\"\"}},methods:{computeWidth:function(){if(!this.hasWidth\u0026\u0026this.hasHeight){var t\u003dthis.$refs.pic,e\u003dt.naturalHeight,n\u003dt.naturalWidth/e;this.widthFromHeight\u003dMath.round(je(this.height)*n).toString()}}}},Fn,[],!1,null,null,null).exports;var Un\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"quiz-container\",t.addClass]},[n(\"transition\",{attrs:{name:\"intro-outro-card\"},on:{\"after-leave\":t.showFirstQuestion}},[3\u003d\u003d\u003dt.state?n(\"div\",{staticClass:\"card intro-outro-card\"},[n(\"div\",{staticClass:\"card-body\"},[t._t(\"intro\",(function(){return[n(\"h4\",[t._v(\"\\n Click start to begin\\n \")])]})),t._v(\" \"),n(\"h5\",[t._v(t._s(t.questions.length)+\" questions\")]),t._v(\" \"),n(\"hr\"),t._v(\" \"),n(\"button\",{staticClass:\"btn btn-primary d-inline-block\",attrs:{type:\"button\"},on:{click:t.begin}},[t._v(\"\\n Start\\n \")])],2)]):t._e()]),t._v(\" \"),n(\"transition\",{attrs:{name:\"intro-outro-card\"}},[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:4\u003d\u003d\u003dt.state,expression:\"state \u003d\u003d\u003d 4\"}],staticClass:\"progress intro-outro-card\",staticStyle:{height:\"1px\"}},[n(\"div\",{staticClass:\"progress-bar progress-bar-z\",style:{width:t.currentQuestion/t.questions.length*100+\"%\"},attrs:{role:\"progressbar\",\"aria-valuemin\":\"0\",\"aria-valuemax\":t.questions.length,\"aria-valuenow\":t.currentQuestion}})])]),t._v(\" \"),t._t(\"default\"),t._v(\" \"),n(\"transition\",{attrs:{name:\"intro-outro-card\"},on:{\"after-enter\":t.setScoreCircleStyles,\"after-leave\":t.showFirstQuestion}},[5\u003d\u003d\u003dt.state?n(\"div\",{staticClass:\"card intro-outro-card\"},[n(\"div\",{staticClass:\"card-body\"},[n(\"h4\",{staticClass:\"mb-3\"},[t._v(\"\\n \"+t._s(t.scoreText)+\"\\n \")]),t._v(\" \"),n(\"svg\",{attrs:{viewBox:\"0 0 100 100\",width:\"120px\",height:\"120px\"}},[n(\"circle\",{staticClass:\"score-background-circle\",attrs:{cx:\"50\",cy:\"50\",r:\"42\"}}),t._v(\" \"),n(\"circle\",{ref:\"score\",staticClass:\"score-circle\",attrs:{cx:\"50\",cy:\"50\",r:\"42\",transform:\"rotate(-90, 50, 50)\",\"stroke-dashoffset\":\"264\"}}),t._v(\" \"),n(\"text\",{staticClass:\"score\",attrs:{x:\"22\",y:\"57\",textLength:\"56\"}},[t._v(t._s(t.score)+\" / \"+t._s(t.questions.length))])]),t._v(\" \"),n(\"hr\"),t._v(\" \"),n(\"button\",{staticClass:\"btn btn-outline-primary\",attrs:{type:\"button\"},on:{click:t.begin}},[t._v(\"\\n Retry\\n \")])])]):t._e()])],2)};Un._withStripped\u003d!0;const Qn\u003dqe({name:\"Quiz\",props:{addClass:{type:String,default:null}},data:function(){return{currentQuestion:0,questions:[],score:0,state:3}},provide:function(){return{questions:this.questions,gotoNextQuestion:this.gotoNextQuestion,showNextQuestion:this.showNextQuestion}},computed:{scoreText:function(){return this.score/this.questions.length\u003e.5?\"Well done!\":\"Try again?\"}},methods:{gotoNextQuestion:function(){this.questions[this.currentQuestion-1].hide(),this.currentQuestion+\u003d1},showNextQuestion:function(){this.currentQuestion\u003c\u003dthis.questions.length?this.questions[this.currentQuestion-1].show():this.complete()},begin:function(){this.currentQuestion\u003d1,this.score\u003d0,this.state\u003d4},showFirstQuestion:function(){this.questions.length\u0026\u0026this.questions[0].show()},reset:function(){this.questions.forEach((function(t){return t.reset()}))},complete:function(){this.score\u003dthis.questions.filter((function(t){return 2\u003d\u003d\u003dt.qState.state})).length,this.state\u003d5,this.reset()},setScoreCircleStyles:function(){var t\u003dthis.score/this.questions.length;this.$refs.score.style.strokeDashoffset\u003d264*(1-t),this.$refs.score.style.stroke\u003d\"#51c2f8\"}}},Un,[],!1,null,\"7a8f322c\",null).exports;var Xn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"transition\",{attrs:{name:t.questions?\"question\":null},on:{\"after-leave\":t.showNextQuestion}},[t.active?n(\"div\",{class:[\"card\",\"question\",t.shakeClass,t.addClass]},[t.$scopedSlots.header?n(\"div\",{staticClass:\"card-header alert-light border-bottom border-light text-dark\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"card-body\"},[t._t(\"default\"),t._v(\" \"),t.isTextQuestion()?n(\"div\",{staticClass:\"mb-2\"},[n(\"textarea\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.textareaText,expression:\"textareaText\"}],staticClass:\"form-control\",attrs:{disabled:t.qState.answered},domProps:{value:t.textareaText},on:{input:function(e){e.target.composing||(t.textareaText\u003de.target.value)}}}),t._v(\" \"),t.qState.answered?n(\"div\",[n(\"hr\"),t._v(\" \"),t.keywordsSplitTrimmed().length?n(\"strong\",[t._v(\"\\n Keywords: \\n \"),t._l(t.keywordsSplitTrimmed(),(function(e){return n(\"span\",{key:e,staticClass:\"badge rounded-pill bg-light text-dark fw-normal\"},[t._v(\"\\n \"+t._s(e)+\"\\n \")])}))],2):t._e()]):t._e()]):t._e(),t._v(\" \"),t.qState.answered\u0026\u0026t.isTextQuestion()?n(\"div\",{staticClass:\"answer\"},[t._t(\"answer\")],2):t._e(),t._v(\" \"),t.showHint?n(\"box\",{staticClass:\"mb-0 mt-3\",attrs:{type:\"tip\"}},[t._t(\"hint\")],2):t._e()],2),t._v(\" \"),t.showCardFooter?n(\"div\",{staticClass:\"card-footer alert-light border-top border-light text-dark\"},[1\u003d\u003d\u003dt.qState.state?n(\"i\",{staticClass:\"fa fa-times text-danger border-danger result-icon\"}):2\u003d\u003d\u003dt.qState.state?n(\"i\",{staticClass:\"fa fa-check text-success border-success result-icon\"}):t._e(),t._v(\" \"),n(\"transition-group\",{staticClass:\"float-end\",attrs:{name:\"q-btn\",tag:\"div\"}},[t.$scopedSlots.hint\u0026\u0026!t.showHint?n(\"button\",{key:\"hint\",staticClass:\"btn btn-success q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){t.showHint\u003d!0}}},[t._v(\"\\n Hint\\n \")]):t._e(),t._v(\" \"),0!\u003d\u003dt.qState.state||t.isTextWithoutKeywords()\u0026\u0026!t.$scopedSlots.answer?t._e():n(\"button\",{key:\"check\",staticClass:\"btn btn-primary q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){return t.checkAnswer(!!t.questions)}}},[t._v(\"\\n Check\\n \")]),t._v(\" \"),0!\u003d\u003dt.qState.state\u0026\u0026t.questions?n(\"button\",{key:\"active\",staticClass:\"btn btn-primary q-btn ms-1\",attrs:{type:\"button\"},on:{\"~click\":function(e){return t.gotoNextQuestion.apply(null,arguments)}}},[t._v(\"\\n Next\\n \")]):t._e(),t._v(\" \"),t.retryState?n(\"button\",{key:\"show\",staticClass:\"btn btn-info q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){return t.checkAnswer(!0)}}},[t._v(\"\\n Show\\n \")]):t._e(),t._v(\" \"),t.retryState?n(\"button\",{key:\"retry\",staticClass:\"btn btn-primary q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){return t.checkAnswer(!1)}}},[t._v(\"\\n Retry\\n \")]):t._e()])],1):t._e()]):t._e()])};Xn._withStripped\u003d!0;function Yn(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Kn(t){for(var e\u003d1;e\u003carguments.length;e++){var i\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?Yn(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Yn(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}const Gn\u003dqe({name:\"Question\",mixins:[{data:function(){return{active:!0}},inject:{questions:{default:void 0},gotoNextQuestion:{default:void 0},showNextQuestion:{default:\"\"}},methods:{show:function(){this.active\u003d!0},hide:function(){this.active\u003d!1},reset:function(){this.active\u003d!1,this.qState.answered\u003d!1,this.qState.state\u003d0,this.showHint\u003d!1,this.textareaText\u0026\u0026(this.textareaText\u003d\"\"),this.answers\u0026\u0026this.answers.splice(0,this.answers.length)}},created:function(){this.questions\u0026\u0026(this.active\u003d!1,this.questions.push(this))}}],props:{type:{type:String,default:\"\"},addClass:{type:String,default:null},keywords:{type:String,default:\"\"},threshold:{type:[String,Number],default:1},noIntermediateResult:{type:Boolean}},computed:{retryState:function(){return 1\u003d\u003d\u003dthis.qState.state\u0026\u0026!this.qState.answered\u0026\u0026!this.questions},showCardFooter:function(){var t\u003d!this.$scopedSlots.hint||this.showHint;return!(this.isTextWithoutKeywords()\u0026\u0026t\u0026\u0026this.qState.answered\u0026\u0026!this.questions)}},data:function(){var t\u003d{qState:{state:0,answered:!1},showHint:!1,shakeClass:null};return this.isMcqOrCheckboxQuestion()||this.isBlanksQuestion()?Kn({answers:[]},t):this.isTextQuestion()?Kn({textareaText:\"\"},t):t},provide:function(){return this.isMcqOrCheckboxQuestion()?{answers:this.answers,qOptionType:this.type,qState:this.qState}:this.isBlanksQuestion()?{answers:this.answers,qOptionType:this.type,qState:this.qState,noIntermediateResult:this.noIntermediateResult}:void 0},methods:{keywordsSplitTrimmed:function(){return this.keywords.split(\",\").filter((function(t){return\"\"!\u003d\u003dt.trim()}))},isMcqOrCheckboxQuestion:function(){return\"mcq\"\u003d\u003d\u003dthis.type||\"checkbox\"\u003d\u003d\u003dthis.type},isBlanksQuestion:function(){return\"blanks\"\u003d\u003d\u003dthis.type},isTextQuestion:function(){return\"text\"\u003d\u003d\u003dthis.type},isTextWithoutKeywords:function(){return this.isTextQuestion()\u0026\u0026!this.keywords},shakeCard:function(){var t\u003dthis;this.shakeClass\u003d\"shake\",setTimeout((function(){t.shakeClass\u003dnull}),800)},markAsCorrect:function(){this.qState.state\u003d2,this.qState.answered\u003d!0},markAsWrong:function(t){this.qState.state\u003d1,t?this.qState.answered\u003d!0:this.shakeCard()},checkMcqAnswer:function(t){var e\u003dthis.answers.find((function(t){return t.selected}));e?e.$props.correct?this.markAsCorrect():this.markAsWrong(t):this.shakeCard()},checkCheckboxAnswer:function(t){this.answers.filter((function(t){return t.answeredCorrectly})).length\u003d\u003d\u003dthis.answers.length?this.markAsCorrect():this.markAsWrong(t)},checkBlanksAnswer:function(t){for(var e\u003d0,n\u003d0;n\u003cthis.answers.length;n+\u003d1)this.answers[n].checkAnswer(),this.answers[n].ansIsCorrect\u0026\u0026(e+\u003d1);e/this.answers.length\u003e\u003dthis.threshold?this.markAsCorrect():this.markAsWrong(t)},checkTextAnswer:function(t){for(var e\u003dthis.textareaText.toLowerCase(),n\u003dthis.keywordsSplitTrimmed(),i\u003d0,o\u003d0;o\u003cn.length;o+\u003d1)e.includes(n[o].toLowerCase())\u0026\u0026(i+\u003d1);i/n.length\u003e\u003dthis.threshold?this.markAsCorrect():this.markAsWrong(t)},checkAnswer:function(t){\"mcq\"\u003d\u003d\u003dthis.type?this.checkMcqAnswer(t):\"checkbox\"\u003d\u003d\u003dthis.type?this.checkCheckboxAnswer(t):\"blanks\"\u003d\u003d\u003dthis.type?this.checkBlanksAnswer(t):this.isTextQuestion()?this.checkTextAnswer(t):this.markAsCorrect()}}},Xn,[],!1,null,\"ae369d74\",null).exports;var Zn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return\"mcq\"\u003d\u003d\u003dt.qOptionType?n(\"div\",{class:[\"form-control\",t.hintClass],on:{click:t.toggleRadioOn,mouseover:function(e){t.hover\u003d!0},mouseleave:function(e){t.hover\u003d!1}}},[n(\"div\",{class:[\"row\",{disabled:t.qState.answered}]},[n(\"div\",{staticClass:\"col-auto p-0\"},[n(\"svg\",{staticClass:\"radio-svg\",attrs:{viewBox:\"0 0 100 100\"}},[n(\"circle\",{attrs:{cx:\"50\",cy:\"50\",r:\"47\",fill:\"none\",stroke:\"black\",\"stroke-width\":\"4\"}}),t._v(\" \"),n(\"circle\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.selected,expression:\"selected\"}],attrs:{cx:\"50\",cy:\"50\",r:\"25\",fill:\"dodgerblue\"}})])]),t._v(\" \"),n(\"div\",{staticClass:\"col content\"},[t._t(\"default\")],2),t._v(\" \"),n(\"div\",{staticClass:\"col-1\"},[t.qState.answered?n(\"div\",[t.correct?n(\"i\",{staticClass:\"fa fa-check text-success\",class:{\"align-bottom\":t.$scopedSlots.reason}}):n(\"i\",{staticClass:\"fa fa-times text-danger\",class:{\"align-bottom\":t.$scopedSlots.reason}})]):t._e()])]),t._v(\" \"),t.qState.answered\u0026\u0026t.$scopedSlots.reason?n(\"div\",[n(\"hr\"),t._v(\" \"),n(\"div\",{staticClass:\"reason\"},[t._t(\"reason\")],2)]):t._e()]):\"checkbox\"\u003d\u003d\u003dt.qOptionType?n(\"div\",{class:[\"form-control\",t.hintClass],on:{click:t.toggleCheckbox,mouseover:function(e){t.hover\u003d!0},mouseleave:function(e){t.hover\u003d!1}}},[n(\"label\",{class:[\"row\",\"checkbox-label\",\"m-0\",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.selected,expression:\"selected\"}],staticClass:\"checkbox\",attrs:{disabled:t.qState.answered,type:\"checkbox\",onclick:\"event.stopPropagation()\"},domProps:{checked:Array.isArray(t.selected)?t._i(t.selected,null)\u003e-1:t.selected},on:{change:function(e){var n\u003dt.selected,i\u003de.target,o\u003d!!i.checked;if(Array.isArray(n)){var r\u003dt._i(n,null);i.checked?r\u003c0\u0026\u0026(t.selected\u003dn.concat([null])):r\u003e-1\u0026\u0026(t.selected\u003dn.slice(0,r).concat(n.slice(r+1)))}else t.selected\u003do}}}),t._v(\" \"),n(\"div\",{staticClass:\"col content\"},[t._t(\"default\")],2),t._v(\" \"),n(\"div\",{staticClass:\"col-auto\"},[t.qState.answered?n(\"div\",[t.correct?n(\"i\",{staticClass:\"fa fa-check text-success\",class:{\"align-bottom\":t.$scopedSlots.reason}}):n(\"i\",{staticClass:\"fa fa-times text-danger\",class:{\"align-bottom\":t.$scopedSlots.reason}})]):t._e()])]),t._v(\" \"),t.qState.answered\u0026\u0026t.$scopedSlots.reason?n(\"div\",[n(\"hr\"),t._v(\" \"),n(\"div\",{staticClass:\"reason\"},[t._t(\"reason\")],2)]):t._e()]):\"blanks\"\u003d\u003d\u003dt.qOptionType?n(\"div\",{class:[\"form-control\",\"blanks-form-control\",t.hintClass]},[n(\"label\",{class:[\"row\",\"m-0\",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.inputText,expression:\"inputText\"}],staticClass:\"form-control\",attrs:{disabled:t.qState.answered},domProps:{value:t.inputText},on:{input:function(e){e.target.composing||(t.inputText\u003de.target.value)}}}),t._v(\" \"),n(\"div\",{staticClass:\"col-auto\"},[t.qState.answered?n(\"div\",[t.ansIsCorrect?n(\"i\",{staticClass:\"fa fa-check text-success\"}):n(\"i\",{staticClass:\"fa fa-times text-danger blanks-cross\"})]):t._e(),t._v(\" \"),t.isIntermediateResult()?n(\"div\",[t.ansIsCorrect?n(\"i\",{staticClass:\"fa fa-check text-success\"}):n(\"i\",{staticClass:\"fa fa-times text-danger blanks-cross\"})]):t._e()]),t._v(\" \"),t.qState.answered?n(\"div\",{staticClass:\"col-auto blanks-keywords\"},[t.keywordsSplitTrimmed().length?n(\"strong\",[t._v(\"\\n Keywords: \\n \"),t._l(t.keywordsSplitTrimmed(),(function(e){return n(\"span\",{key:e,staticClass:\"badge rounded-pill bg-light text-dark fw-normal\"},[t._v(\"\\n \"+t._s(e)+\"\\n \")])}))],2):n(\"strong\",[t._v(\"No answer checking keywords provided\")])]):t._e()]),t._v(\" \"),t.qState.answered\u0026\u0026t.$scopedSlots.reason?n(\"div\",[n(\"div\",{staticClass:\"reason blanks-reason\"},[t._t(\"reason\")],2)]):t._e()]):t._e()};Zn._withStripped\u003d!0;const Jn\u003dqe({name:\"McqOption\",props:{correct:{type:Boolean,default:!1},keywords:{type:String,default:\"\"}},data:function(){return{selected:!1,hover:!1,inputText:\"\",ansIsCorrect:!1}},inject:{answers:{default:void 0},qOptionType:{default:void 0},qState:{default:void 0},noIntermediateResult:{default:void 0}},computed:{hintClass:function(){return this.qState.answered?this.correct?\"success\":\"danger\":this.selected||this.hover?\"alert-light text-dark border border-secondary\":\"\"},answeredCorrectly:function(){return this.correct\u0026\u0026this.selected||!this.correct\u0026\u0026!this.selected}},methods:{checkAnswer:function(){var t\u003d!1,e\u003dthis.inputText.toLowerCase().trim(),n\u003dthis.keywords.toLowerCase().split(\",\").filter((function(t){return\"\"!\u003d\u003dt.trim()}));this.keywords.length||(t\u003d!0);for(var i\u003d0;i\u003cn.length;i+\u003d1)if(e\u003d\u003d\u003dn[i].trim()){t\u003d!0;break}this.ansIsCorrect\u003dt},isIntermediateResult:function(){return!this.noIntermediateResult\u0026\u00261\u003d\u003d\u003dthis.qState.state\u0026\u0026!this.qState.answered},isBlanksQuestion:function(){return\"blanks\"\u003d\u003d\u003dthis.type},keywordsSplitTrimmed:function(){return this.keywords.split(\",\").filter((function(t){return\"\"!\u003d\u003dt.trim()}))},toggleRadioOn:function(){this.qState.answered||this.selected||(this.answers.forEach((function(t){t.selected\u003d!1})),this.selected\u003d!0)},toggleCheckbox:function(){this.qState.answered||(this.selected\u003d!this.selected)}},created:function(){this.answers.push(this)}},Zn,[],!1,null,\"d09dfee8\",null).exports;var ti\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{staticClass:\"dropdown\",staticStyle:{position:\"relative\"}},[t.algolia?n(\"div\",{attrs:{id:\"algolia-search-input\"}}):[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.value,expression:\"value\"}],staticClass:\"form-control\",attrs:{\"data-bs-toggle\":\"dropdown\",type:\"text\",placeholder:t.placeholder,autocomplete:\"off\"},domProps:{value:t.value},on:{input:[function(e){e.target.composing||(t.value\u003de.target.value)},t.update],keyup:[function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"up\",38,e.key,[\"Up\",\"ArrowUp\"])?null:t.up.apply(null,arguments)},function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"down\",40,e.key,[\"Down\",\"ArrowDown\"])?null:t.down.apply(null,arguments)}],keydown:[function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"enter\",13,e.key,\"Enter\")?null:t.hit.apply(null,arguments)},function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"])?null:t.reset.apply(null,arguments)}],blur:function(e){t.showDropdown\u003d!1}}}),t._v(\" \"),n(\"div\",{staticClass:\"form-control placeholder-div-hidden\"},[t._v(\"\\n \"+t._s(t.placeholder)+\"\\n \")])],t._v(\" \"),n(\"ul\",{ref:\"dropdown\",class:t.dropdownMenuClasses},t._l(t.items,(function(e,i){return n(\"li\",{key:i,class:{\"table-active\":t.isActive(i)}},[n(\"a\",{staticClass:\"dropdown-item\",on:{mousedown:function(e){return e.preventDefault(),t.hit.apply(null,arguments)},mousemove:function(e){return t.setActive(i)}}},[n(\"searchbar-page-item\",{attrs:{item:e,value:t.value}})],1)])})),0)],2)};function ei(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n\u003dnull\u003d\u003dt?null:\"undefined\"!\u003dtypeof Symbol\u0026\u0026t[Symbol.iterator]||t[\"@@iterator\"];if(null!\u003dn){var i,o,r,s,a\u003d[],l\u003d!0,c\u003d!1;try{if(r\u003d(n\u003dn.call(t)).next,0\u003d\u003d\u003de){if(Object(n)!\u003d\u003dn)return;l\u003d!1}else for(;!(l\u003d(i\u003dr.call(n)).done)\u0026\u0026(a.push(i.value),a.length!\u003d\u003de);l\u003d!0);}catch(t){c\u003d!0,o\u003dt}finally{try{if(!l\u0026\u0026null!\u003dn.return\u0026\u0026(s\u003dn.return(),Object(s)!\u003d\u003ds))return}finally{if(c)throw o}}return a}}(t,e)||bn(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}ti._withStripped\u003d!0;var ni\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.item.heading?n(\"div\",{staticClass:\"heading\"},[n(\"i\",{staticClass:\"fa fa-hashtag\"}),t._v(\" \"),n(\"div\",{staticClass:\"heading-text\"},[n(\"span\",{domProps:{innerHTML:t._s(t.highlight(t.item.heading.text,t.value))}}),t._v(\" \"),t._l(t.item.keywords,(function(e,i){return n(\"div\",{key:i,staticClass:\"keyword-text\",domProps:{innerHTML:t._s(t.highlight(e,t.value))}})}))],2)]):n(\"div\",[n(\"span\",{staticClass:\"page-title\",domProps:{innerHTML:t._s(t.highlight(t.item.title,t.value))}}),t._v(\" \"),t.item.keywords?n(\"br\"):t._e(),t._v(\" \"),t.item.keywords?n(\"small\",{domProps:{innerHTML:t._s(t.highlight(t.item.keywords,t.value))}}):t._e(),t._v(\" \"),n(\"hr\",{staticClass:\"page-headings-separator\"})])};ni._withStripped\u003d!0;const ii\u003dqe({props:{item:{type:Object,default:null},value:{type:String,default:\"\"}},methods:{highlight:function(t,e){for(var n,i\u003d(n\u003dfunction(){var n\u003de.split(\" \").filter((function(t){return\"\"!\u003d\u003dt})).map((function(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$\u0026\")})).map((function(t){return new RegExp(\"(\".concat(t,\")\"),\"gi\")})),i\u003d[];return n.forEach((function(e){for(var n\u003de.exec(t);null!\u003d\u003dn\u0026\u0026n.index!\u003d\u003de.lastIndex;)i.push({start:n.index,end:e.lastIndex}),n\u003de.exec(t)})),i}()).length\u003c\u003d1?n:n.sort((function(t,e){return t.start-e.start})).reduce((function(t,e){var n\u003dt[t.length-1];return!n||n.end\u003ce.start?t.push(e):n.end\u003ce.end\u0026\u0026(n.end\u003de.end),t}),[]),o\u003dt,r\u003di.length-1;r\u003e\u003d0;r-\u003d1)o\u003d\"\".concat(o.slice(0,i[r].start),\"\u003cmark\u003e\")+\"\".concat(o.slice(i[r].start,i[r].end),\"\u003c/mark\u003e\")+\"\".concat(o.slice(i[r].end));return o}}},ni,[],!1,null,\"98afe086\",null).exports;const oi\u003dqe({created:function(){this.items\u003dthis.primitiveData},props:{data:{type:Array,default:function(){return[]}},limit:{type:Number,default:8},async:{type:String,default:\"\"},keyProp:{type:String,default:null},onHit:{type:Function,default:function(t){this.reset(),this.value\u003dt}},placeholder:{type:String,default:\"Search\"},delay:{type:Number,default:200},menuAlignRight:{type:Boolean,default:!1},algolia:{type:Boolean,default:!1}},data:function(){return{value:\"\",showDropdown:!1,noResults:!0,current:0,items:[]}},computed:{primitiveData:function(){function t(t,e){var n\u003dt.join(\" \");return e.reduce((function(t,e){var i\u003dn.match(e);return t+(i?i.length:0)}),0)}if(this.value.length\u003c2||!this.data)return[];var e\u003d[],n\u003dthis.value.split(\" \").filter((function(t){return\"\"!\u003d\u003dt})).map((function(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$\u0026\")})).map((function(t){return new RegExp(t,\"ig\")}));return this.data.forEach((function(i){var o\u003di.headings,r\u003di.src,s\u003di.title,a\u003di.headingKeywords,l\u003di.frontmatterKeywords||\"\",c\u003ds||r.substring(0,r.lastIndexOf(\".\")),u\u003dt([c,l].concat(_n(Object.values(o)),_n(Object.values(a))),n);if(u\u003e0){var d\u003d[];Object.entries(o).forEach((function(e,i){var o\u003dei(e,2),s\u003do[0],u\u003do[1],h\u003dn.some((function(t){return t.test(u)})),p\u003da[s]\u0026\u0026a[s].some((function(t){return n.some((function(e){return e.test(t)}))}));if(h||p){var f\u003dt([u].concat(_n(a[s]||[])),n);(0!\u003d\u003di||u!\u003d\u003dc||l.length)\u0026\u0026d.push({heading:{id:s,text:u},keywords:a[s],src:r,totalMatches:f})}})),d.sort((function(t,e){return e.totalMatches-t.totalMatches})),e.push({headings:d,keywords:l,src:r,title:c,totalMatches:u})}})),e.sort((function(t,e){return e.totalMatches-t.totalMatches})).flatMap((function(t){return t.headings?[t].concat(_n(t.headings)):t}))},dropdownMenuClasses:function(){return[\"dropdown-menu\",\"search-dropdown-menu\",{show:this.showDropdown},{\"d-none\":!this.showDropdown},{\"dropdown-menu-end\":this.menuAlignRight}]}},methods:{update:function(){return this.value?(this.data\u0026\u0026(this.items\u003dthis.primitiveData,this.showDropdown\u003dthis.items.length\u003e0),this.async\u0026\u0026this.query(),!0):(this.reset(),!1)},query:function(t,e){var n,i\u003darguments.length\u003e2\u0026\u0026void 0!\u003d\u003darguments[2]?arguments[2]:100;function o(t){return/^[0-9]+$/.test(t)?Number(t)||1:null}return function(){for(var r\u003dthis,s\u003darguments.length,a\u003dnew Array(s),l\u003d0;l\u003cs;l++)a[l]\u003darguments[l];n\u0026\u0026clearTimeout(n),n\u003dsetTimeout((function(){t.apply(r,a)}),o(e)||o(this[e])||i)}}((function(){var t\u003dthis;(function(t){var e\u003dnew window.XMLHttpRequest,n\u003d{},i\u003d{then:function(t,e){return i.done(t).fail(e)},catch:function(t){return i.fail(t)},always:function(t){return i.done(t).fail(t)}};return[\"done\",\"fail\"].forEach((function(t){n[t]\u003d[],i[t]\u003dfunction(e){return e instanceof Function\u0026\u0026n[t].push(e),i}})),i.done(JSON.parse),e.onreadystatechange\u003dfunction(){if(4\u003d\u003d\u003de.readyState){var t\u003d{status:e.status};if(200\u003d\u003d\u003de.status)try{var i\u003de.responseText;for(var o in n.done){var r\u003dn.done[o](i);void 0!\u003d\u003dr\u0026\u0026(i\u003dr)}}catch(t){n.fail.forEach((function(e){return e(t)}))}else n.fail.forEach((function(e){return e(t)}))}},e.open(\"GET\",t),e.setRequestHeader(\"Accept\",\"application/json\"),e.send(),i})(this.async+this.value).then((function(e){t.items\u003d(t.keyProp?e[t.keyProp]:e).slice(0,t.limit),t.showDropdown\u003dt.items.length}))}),\"delay\",200),reset:function(){this.items\u003d[],this.value\u003d\"\",this.loading\u003d!1,this.showDropdown\u003d!1},setActive:function(t){this.current\u003dt},isActive:function(t){return this.current\u003d\u003d\u003dt},hit:function(t){t.preventDefault(),this.onHit(this.items[this.current],this)},down:function(){this.current\u003cthis.items.length-1\u0026\u0026(this.current+\u003d1,this.scrollListView())},up:function(){this.current\u003e0\u0026\u0026(this.current-\u003d1,this.scrollListView())},scrollListView:function(){var t\u003dthis.$refs.dropdown,e\u003dt.children[this.current],n\u003dt.scrollTop,i\u003dn+t.clientHeight,o\u003de.offsetTop+e.offsetHeight;e.offsetTop\u003cn?t.scrollTop\u003de.offsetTop:o\u003ei\u0026\u0026(t.scrollTop\u003do-t.clientHeight)}},components:{searchbarPageItem:ii}},ti,[],!1,null,\"01e11c9b\",null).exports;var ri\u003dfunction(){var t\u003dthis.$createElement,e\u003dthis._self._c||t;return e(\"div\",{staticClass:\"tab-pane active printable-tab-pane\",class:{\"tab-pane-hide\":!this.show},attrs:{role:\"tabpanel\"}},[e(\"div\",{staticClass:\"nav-tabs printable-tab-header\"},[e(\"div\",{ref:\"header\",staticClass:\"nav-link active\"},[this._t(\"header\")],2)]),this._v(\" \"),this._t(\"default\"),this._v(\" \"),e(\"hr\")],2)};ri._withStripped\u003d!0;const si\u003dqe({props:{header:{type:String,default:\"\"},disabled:{type:[Boolean,String],default:!1}},computed:{headerRendered:function(){return this.$refs.header.innerHTML},active:function(){return this._tabset.show\u003d\u003d\u003dthis},index:function(){return this._tabset.tabs.indexOf(this)},show:function(){return this._tabset\u0026\u0026this._tabset.show\u003d\u003d\u003dthis},disabledBool:function(){return Re(this.disabled)}},created:function(){this._ingroup\u003dthis.$parent\u0026\u0026this.$parent._tabgroup;for(var t\u003dthis;t\u0026\u0026!0!\u003d\u003dt._tabset\u0026\u0026t.$parent;)t\u003dt.$parent;t._tabset?(t.tabs.push(this),this._ingroup?~t.headers.indexOf(this.$parent)||t.headers.push(this.$parent):t.headers.push(this),this._tabset\u003dt):this._tabset\u003d{},this._ingroup\u0026\u0026this.$parent.tabs.push(this)},beforeDestroy:function(){if(this._tabset.activeNumber\u003d\u003d\u003dthis.index\u0026\u0026(this._tabset.activeNumber\u003d0),this._ingroup){var t\u003dthis.$parent.tabs.indexOf(this);this.$parent.tabs.splice(t,1)}this._tabset.tabs.splice(this.index,1)}},ri,[],!1,null,\"661c1b61\",null).exports;var ai\u003dfunction(){var t\u003dthis.$createElement,e\u003dthis._self._c||t;return e(\"div\",{staticClass:\"printable-tab-group\"},[e(\"div\",{ref:\"header\",staticClass:\"printable-tab-group-header\"},[this._t(\"header\")],2),this._v(\" \"),this._t(\"default\")],2)};ai._withStripped\u003d!0;const li\u003dqe({props:{disabled:{type:[Boolean,String],default:!1},header:{type:String,default:\"\"}},data:function(){return{tabs:[],show:!1}},computed:{active:function(){return~this.tabs.indexOf(this._tabset.show)},headerRendered:function(){return this.$refs.header.innerHTML},disabledBool:function(){return De(this.disabled)}},created:function(){this._tabgroup\u003d!0;for(var t\u003dthis.$parent\u0026\u0026!0\u003d\u003d\u003dthis.$parent._tabset?this.$parent:{};t\u0026\u0026!t._tabset\u0026\u0026t.$parent;)t\u003dt.$parent;t._tabset?this._tabset\u003dt:(this._tabset\u003d{},this.show\u003d!0)},methods:{blur:function(){this.show\u003d!1},toggle:function(){this.show\u003d!this.show}}},ai,[],!1,null,\"a785351c\",null).exports;var ci\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[t.addClass,\"printable-tabs\"]},[n(\"ul\",{staticClass:\"nav nav-tabs d-print-none\",class:t.getNavStyleClass,attrs:{role:\"tablist\"}},[t._l(t.headers,(function(e,i){return[e._tabgroup?n(\"dropdown\",{key:i,staticClass:\"nav-item\",class:{active:e.active},attrs:{header:e.headerRendered,disabled:e.disabled}},t._l(e.tabs,(function(e,i){return n(\"li\",{key:i},[n(\"a\",{staticClass:\"nav-link\",class:{disabled:e.disabled},attrs:{href:\"#\"},domProps:{innerHTML:t._s(e.headerRendered)},on:{click:function(n){return n.preventDefault(),t.select(e)}}})])})),0):n(\"li\",{key:i,staticClass:\"nav-item\",on:{click:function(n){return n.preventDefault(),t.select(e)}}},[n(\"a\",{staticClass:\"nav-link\",class:{active:e.active,disabled:e.disabledBool},attrs:{href:\"#\"}},[n(\"span\",{domProps:{innerHTML:t._s(e.headerRendered)}})])])]}))],2),t._v(\" \"),n(\"div\",{ref:\"tab-content\",staticClass:\"tab-content\"},[t._t(\"default\")],2)])};ci._withStripped\u003d!0;const ui\u003dqe({components:{dropdown:gn},props:{navStyle:{type:String,default:\"tabs\"},active:{type:String,default:\"0\"},addClass:{type:String,default:\"\"}},data:function(){return{show:null,headers:[],activeNumber:je(this.active),tabs:[]}},created:function(){this._tabset\u003d!0},computed:{getNavStyleClass:function(){return\"nav-\".concat(this.navStyle)}},watch:{activeNumber:function(t){this.show\u003dthis.tabs[t]}},mounted:function(){this.show\u003dthis.tabs[this.activeNumber]},methods:{select:function(t){t.disabled||(this.activeNumber\u003dt.index)}}},ci,[],!1,null,\"70a68808\",null).exports;var di\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:[\"thumb-wrapper\",{\"thumb-circle\":t.circle},t.addClass],style:[t.getBorder,t.getFontSize,t.getFontColor,t.getBgColor]},[t.hasSrc?n(\"img\",{ref:\"pic\",staticClass:\"thumb-image\",attrs:{src:t.src,width:t.computedWidth,height:t.computedHeight,alt:t.alt},on:{\"~load\":function(e){return t.computeImgSize.apply(null,arguments)}}}):t._e(),t._v(\" \"),t._t(\"default\")],2)};di._withStripped\u003d!0;const hi\u003dqe({props:{circle:{type:Boolean,default:!1},addClass:{type:String,default:\"\"},alt:{type:String,default:\"\"},background:{type:String,default:\"\"},border:{type:String,default:\"\"},fontColor:{type:String,default:\"\"},fontSize:{type:String,default:\"\"},size:{type:String,default:\"\"},src:{type:String,default:null},text:{type:String,default:\"\"}},computed:{getBorder:function(){return\"\"\u003d\u003d\u003dthis.border?{}:{border:this.border}},getFontSize:function(){var t\u003dthis.imageSize/2,e\u003dthis.fontSize;return{\"font-size\":\"\".concat(void 0\u003d\u003d\u003de||\"\"\u003d\u003d\u003de?t:e,\"px\")}},getFontColor:function(){return\"\"\u003d\u003d\u003dthis.fontColor?{}:{color:this.fontColor}},getBgColor:function(){return\"\"\u003d\u003d\u003dthis.background?{}:{background:this.background}},hasSrc:function(){return void 0!\u003d\u003dthis.src\u0026\u0026\"\"!\u003d\u003dthis.src},imageSize:function(){return this.size||100}},data:function(){return{computedWidth:\"\",computedHeight:\"\"}},mounted:function(){var t\u003dthis.$el;t.style.width\u003d\"\".concat(this.imageSize,\"px\"),t.style.height\u003d\"\".concat(this.imageSize,\"px\"),t.style.lineHeight\u003d\"\".concat(this.imageSize,\"px\")},methods:{computeImgSize:function(){var t\u003dthis.$refs.pic,e\u003dt.naturalHeight,n\u003dt.naturalWidth,i\u003dMath.min(e,n),o\u003dthis.imageSize/i;this.computedWidth\u003dn*o,this.computedHeight\u003de*o}}},di,[],!1,null,null,null).exports;var pi\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:\"click\"\u003d\u003d\u003dt.trigger?\"trigger-click\":\"trigger\",attrs:{tabindex:\"0\"},on:t._d({},[t.triggerEventType,function(e){return e.stopPropagation(),t.toggle()}])},[\"popover\"\u003d\u003d\u003dt.popoverOrTooltipType?n(\"v-popover\",{attrs:{\"auto-hide\":!t.isInput,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,placement:t.placement,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[n(\"div\",{staticClass:\"popover-container\"},[n(\"portal-target\",{attrs:{name:\"popover:\"+t.target}})],1)]},proxy:!0}],null,!1,1583262462)},[t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):\"tooltip\"\u003d\u003d\u003dt.popoverOrTooltipType?n(\"v-tooltip\",{attrs:{\"auto-hide\":!t.isInput,placement:t.placement,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[n(\"portal-target\",{attrs:{name:\"tooltip:\"+t.target}})]},proxy:!0}])},[t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):n(\"span\",[t._t(\"default\")],2)],1)};pi._withStripped\u003d!0;var fi\u003di(383);function mi(t){return(mi\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t})(t)}function vi(t,e){for(var n\u003d0;n\u003ce.length;n++){var i\u003de[n];i.enumerable\u003di.enumerable||!1,i.configurable\u003d!0,\"value\"in i\u0026\u0026(i.writable\u003d!0),Object.defineProperty(t,i.key,i)}}function gi(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]\u003dn,t}function yi(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function wi(t){for(var e\u003d1;e\u003carguments.length;e++){var n\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?yi(Object(n),!0).forEach((function(e){gi(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):yi(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function bi(t){return function(t){if(Array.isArray(t))return _i(t)}(t)||function(t){if(\"undefined\"!\u003dtypeof Symbol\u0026\u0026Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"\u003d\u003dtypeof t)return _i(t,e);var n\u003dObject.prototype.toString.call(t).slice(8,-1);return\"Object\"\u003d\u003d\u003dn\u0026\u0026t.constructor\u0026\u0026(n\u003dt.constructor.name),\"Map\"\u003d\u003d\u003dn||\"Set\"\u003d\u003d\u003dn?Array.from(t):\"Arguments\"\u003d\u003d\u003dn||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_i(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function _i(t,e){(null\u003d\u003de||e\u003et.length)\u0026\u0026(e\u003dt.length);for(var n\u003d0,i\u003dnew Array(e);n\u003ce;n++)i[n]\u003dt[n];return i}var Si\u003dfunction(t){return t\u003d\u003ddocument.activeElement},xi\u003dfunction(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.root\u003dnull,this.elements\u003d[],this.onKeyDown\u003dthis.onKeyDown.bind(this),this.enable\u003dthis.enable.bind(this),this.disable\u003dthis.disable.bind(this),this.firstElement\u003dthis.firstElement.bind(this),this.lastElement\u003dthis.lastElement.bind(this)}var e,n;return e\u003dt,(n\u003d[{key:\"lastElement\",value:function(){return this.elements[this.elements.length-1]||null}},{key:\"firstElement\",value:function(){return this.elements[0]||null}},{key:\"onKeyDown\",value:function(t){if(function(t){return\"Tab\"\u003d\u003d\u003dt.key||9\u003d\u003d\u003dt.keyCode}(t)){if(!t.shiftKey)return!document.activeElement||Si(this.lastElement())?(this.firstElement().focus(),void t.preventDefault()):void 0;Si(this.firstElement())\u0026\u0026(this.lastElement().focus(),t.preventDefault())}}},{key:\"enabled\",value:function(){return!!this.root}},{key:\"enable\",value:function(t){t\u0026\u0026(this.root\u003dt,this.elements\u003dfunction(t){return function(t,e){return bi(t.querySelectorAll(\u0027button:not([disabled]), select:not([disabled]), a[href]:not([disabled]), area[href]:not([disabled]), [contentEditable\u003d\"\"]:not([disabled]), [contentEditable\u003d\"true\"]:not([disabled]), [contentEditable\u003d\"TRUE\"]:not([disabled]), textarea:not([disabled]), iframe:not([disabled]), input:not([disabled]), summary:not([disabled]), [tabindex]:not([tabindex\u003d\"-1\"])\u0027)||[])}(t)}(this.root),this.root.addEventListener(\"keydown\",this.onKeyDown))}},{key:\"disable\",value:function(){this.root.removeEventListener(\"keydown\",this.onKeyDown),this.root\u003dnull}}])\u0026\u0026vi(e.prototype,n),t}(),Ci\u003dfunction(t){var e\u003dt.targetTouches?t.targetTouches[0]:t;return{x:e.clientX,y:e.clientY}},$i\u003dfunction(t,e,n){return\"number\"!\u003dtypeof t\u0026\u0026(t\u003dMath.min(e,n)||e),\"number\"!\u003dtypeof n\u0026\u0026(n\u003dMath.max(e,t)),Math.min(Math.max(e,t),n)},ki\u003dfunction(t){return t\u0026\u0026Number(t.replace(/px$/,\"\"))||0},Ti\u003d{down:{pc:\"mousedown\",m:\"touchstart\"},move:{pc:\"mousemove\",m:\"touchmove\"},up:{pc:\"mouseup\",m:\"touchend\"}},Ei\u003dfunction(t,e,n){e\u0026\u0026e.addEventListener(Ti[t].pc,n),e\u0026\u0026e.addEventListener(Ti[t].m,n,{passive:!1})},Oi\u003dfunction(t,e,n){e\u0026\u0026e.removeEventListener(Ti[t].pc,n),e\u0026\u0026e.removeEventListener(Ti[t].m,n)},Bi\u003d!1;if(\"undefined\"!\u003dtypeof window){var Pi\u003d{get passive(){Bi\u003d!0}};window.addEventListener(\"testPassive\",null,Pi),window.removeEventListener(\"testPassive\",null,Pi)}var Li,Ni,Ai,zi\u003d\"undefined\"!\u003dtypeof window\u0026\u0026window.navigator\u0026\u0026window.navigator.platform\u0026\u0026(/iP(ad|hone|od)/.test(window.navigator.platform)||\"MacIntel\"\u003d\u003d\u003dwindow.navigator.platform\u0026\u0026window.navigator.maxTouchPoints\u003e1),Mi\u003d[],Hi\u003d!1,Di\u003d0,Ri\u003d-1,ji\u003dfunction(t){return Mi.some((function(){return function(t,e){var n\u003d!1;return function(t){for(var e\u003d[];t;){if(e.push(t),t.classList.contains(\"vfm\"))return e;t\u003dt.parentElement}return e}(t).forEach((function(t){(function(t){if(!t||t.nodeType!\u003d\u003dNode.ELEMENT_NODE)return!1;var e\u003dwindow.getComputedStyle(t);return[\"auto\",\"scroll\"].includes(e.overflowY)\u0026\u0026t.scrollHeight\u003et.clientHeight})(t)\u0026\u0026function(t,e){return!(0\u003d\u003d\u003dt.scrollTop\u0026\u0026e\u003c0||t.scrollTop+t.clientHeight+e\u003e\u003dt.scrollHeight\u0026\u0026e\u003e0)}(t,e)\u0026\u0026(n\u003d!0)})),n}(t,-Di)}))},Ii\u003dfunction(t){var e\u003dt||window.event;return!!ji(e.target)||e.touches.length\u003e1||(e.preventDefault\u0026\u0026e.preventDefault(),!1)},qi\u003dfunction(t){t?(Mi\u003dMi.filter((function(e){return e.targetElement!\u003d\u003dt})),zi?(t.ontouchstart\u003dnull,t.ontouchmove\u003dnull,Hi\u0026\u00260\u003d\u003d\u003dMi.length\u0026\u0026(document.removeEventListener(\"touchmove\",Ii,Bi?{passive:!1}:void 0),Hi\u003d!1)):Mi.length||(void 0!\u003d\u003dNi\u0026\u0026(document.body.style.paddingRight\u003dNi,Ni\u003dvoid 0),void 0!\u003d\u003dLi\u0026\u0026(document.body.style.overflow\u003dLi,Li\u003dvoid 0))):console.error(\"enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.\")},Wi\u003dfunction(){},Fi\u003d\"enter\",Vi\u003d\"entering\",Ui\u003d\"leave\",Qi\u003d\"leavng\",Xi\u003d{type:[String,Object,Array],default:\"\"},Yi\u003d{type:[Object,Array],default:function(){return{}}},Ki\u003d{t:\"ns-resize\",tr:\"nesw-resize\",r:\"ew-resize\",br:\"nwse-resize\",b:\"ns-resize\",bl:\"nesw-resize\",l:\"ew-resize\",tl:\"nwse-resize\"},Gi\u003d{props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:Xi,overlayClass:Xi,contentClass:Xi,styles:Yi,overlayStyle:Yi,contentStyle:Yi,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var e\u003dmi(t);return\"boolean\"\u003d\u003d\u003de||\"string\"\u003d\u003d\u003de||t.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE}},transition:{type:[String,Object],default:\"vfm\"},overlayTransition:{type:[String,Object],default:\"vfm\"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1},fitParent:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},dragSelector:{type:String,default:\"\"},keepChangedStyle:{type:Boolean,default:!1},resize:{type:Boolean,default:!1},resizeDirections:{type:Array,default:function(){return[\"t\",\"tr\",\"r\",\"br\",\"b\",\"bl\",\"l\",\"tl\"]},validator:function(t){return[\"t\",\"tr\",\"r\",\"br\",\"b\",\"bl\",\"l\",\"tl\"].filter((function(e){return-1!\u003d\u003dt.indexOf(e)})).length\u003d\u003d\u003dt.length}},minWidth:{type:Number,default:0},minHeight:{type:Number,default:0},maxWidth:{type:Number,default:1/0},maxHeight:{type:Number,default:1/0}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1,resize:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{},dragResizeStyle:{},resolveToggle:Wi,rejectToggle:Wi,state:null,lastMousedownEl:null}},computed:{isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState\u003d\u003d\u003dUi)\u0026\u0026this.modalTransitionState\u003d\u003d\u003dUi},calculateZIndex:function(){return!1\u003d\u003d\u003dthis.zIndex?!!this.zIndexAuto\u0026\u0026+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return wi({},!1!\u003d\u003dthis.calculateZIndex\u0026\u0026{zIndex:this.calculateZIndex})},bindContentStyle:function(){var t\u003d[this.dragResizeStyle];return Array.isArray(this.contentStyle)?t.push.apply(t,bi(this.contentStyle)):t.push(this.contentStyle),t},computedTransition:function(){return\"string\"\u003d\u003dtypeof this.transition?{name:this.transition}:wi({},this.transition)},computedOverlayTransition:function(){return\"string\"\u003d\u003dtypeof this.overlayTransition?{name:this.overlayTransition}:wi({},this.overlayTransition)}},watch:{value:function(t){if(this.stopEvent)this.stopEvent\u003d!1;else if(this.mounted(),!t){if(this.emitEvent(\"before-close\",!0))return void this.rejectToggle(\"hide\");this.close()}},lockScroll:\"handleLockScroll\",hideOverlay:function(t){this.value\u0026\u0026!t\u0026\u0026(this.visibility.overlay\u003d!0)},attach:\"mounted\",isComponentReadyToBeDestroyed:function(t){t\u0026\u0026(this.visible\u003d!1)},drag:function(t){this.visible\u0026\u0026(t?this.addDragDown():this.removeDragDown())},resize:function(t){this.visible\u0026\u0026(t?this.addResizeDown():this.removeResizeDown())},keepChangedStyle:function(t){t||(this.dragResizeStyle\u003d{})}},mounted:function(){this.api.modals.push(this),this.$focusTrap\u003dnew xi,this.mounted()},beforeDestroy:function(){var t,e\u003dthis;this.close(),this.lockScroll\u0026\u0026this.$refs.vfmContainer\u0026\u0026qi(this.$refs.vfmContainer),null\u003d\u003dthis||null\u003d\u003d\u003d(t\u003dthis.$el)||void 0\u003d\u003d\u003dt||t.remove();var n\u003dthis.api.modals.findIndex((function(t){return t\u003d\u003d\u003de}));this.api.modals.splice(n,1)},methods:{mounted:function(){var t\u003dthis;if(this.value){if(this.emitEvent(\"before-open\",!1))return void this.rejectToggle(\"show\");var e\u003dthis.getAttachElement();if(e||!1\u003d\u003d\u003dthis.attach){!1!\u003d\u003dthis.attach\u0026\u0026e.appendChild(this.$el);var n\u003dthis.api.openedModals.findIndex((function(e){return e\u003d\u003d\u003dt}));-1!\u003d\u003dn\u0026\u0026this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex\u003dthis.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(e){return e!\u003d\u003dt})).forEach((function(t,n){t.getAttachElement()\u003d\u003d\u003de\u0026\u0026(t.modalStackIndex\u003dn,t.visibility.overlay\u003d!1)})),this.visible\u003d!0,this.$nextTick((function(){t.startTransitionEnter()}))}else!1!\u003d\u003de\u0026\u0026console.warn(\"Unable to locate target \".concat(this.attach))}},close:function(){var t\u003dthis,e\u003dthis.api.openedModals.findIndex((function(e){return e\u003d\u003d\u003dt}));if(-1!\u003d\u003de\u0026\u0026this.api.openedModals.splice(e,1),this.api.openedModals.length\u003e0){var n\u003dthis.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)\u0026\u0026n.$refs.vfmContainer.focus(),!n.hideOverlay\u0026\u0026(n.visibility.overlay\u003d!0)}this.drag\u0026\u0026this.removeDragDown(),this.resize\u0026\u0026this.removeResizeDown(),this.state\u003dnull,this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay\u003d!0,this.visibility.modal\u003d!0},startTransitionLeave:function(){this.visibility.overlay\u003d!1,this.visibility.modal\u003d!1},handleLockScroll:function(){var t\u003dthis;this.value\u0026\u0026this.$nextTick((function(){t.lockScroll?function(t,e){if(t){if(!Mi.some((function(e){return e.targetElement\u003d\u003d\u003dt}))){var n\u003d{targetElement:t,options:e||{}};Mi\u003d[].concat(bi(Mi),[n]),zi?(t.ontouchstart\u003dfunction(t){1\u003d\u003d\u003dt.targetTouches.length\u0026\u0026(Ri\u003dt.targetTouches[0].clientY)},t.ontouchmove\u003dfunction(e){1\u003d\u003d\u003de.targetTouches.length\u0026\u0026function(t,e){Di\u003dt.targetTouches[0].clientY-Ri,!ji(t.target)\u0026\u0026(e\u0026\u00260\u003d\u003d\u003de.scrollTop\u0026\u0026Di\u003e0||function(t){return!!t\u0026\u0026t.scrollHeight-t.scrollTop\u003c\u003dt.clientHeight}(e)\u0026\u0026Di\u003c0?Ii(t):t.stopPropagation())}(e,t)},Hi||(document.addEventListener(\"touchmove\",Ii,Bi?{passive:!1}:void 0),Hi\u003d!0)):function(t){if(void 0\u003d\u003d\u003dNi){var e\u003d!!t\u0026\u0026!0\u003d\u003d\u003dt.reserveScrollBarGap,n\u003dwindow.innerWidth-document.documentElement.clientWidth;if(e\u0026\u0026n\u003e0){var i\u003dparseInt(getComputedStyle(document.body).getPropertyValue(\"padding-right\"),10);Ni\u003ddocument.body.style.paddingRight,document.body.style.paddingRight\u003d\"\".concat(i+n,\"px\")}}void 0\u003d\u003d\u003dLi\u0026\u0026(Li\u003ddocument.body.style.overflow,document.body.style.overflow\u003d\"hidden\")}(e)}}else console.error(\"disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.\")}(t.$refs.vfmContainer,{reserveScrollBarGap:!0}):qi(t.$refs.vfmContainer)}))},getAttachElement:function(){return!1!\u003d\u003dthis.attach\u0026\u0026(\"string\"\u003d\u003dtypeof this.attach?!!window\u0026\u0026window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState\u003dVi},afterOverlayEnter:function(){this.overlayTransitionState\u003dFi},beforeOverlayLeave:function(){this.overlayTransitionState\u003dQi},afterOverlayLeave:function(){this.overlayTransitionState\u003dUi},beforeModalEnter:function(){this.modalTransitionState\u003dVi},afterModalEnter:function(){this.modalTransitionState\u003dFi,(this.focusRetain||this.focusTrap)\u0026\u0026this.$refs.vfmContainer.focus(),this.focusTrap\u0026\u0026this.$focusTrap.enable(this.$refs.vfmContainer),this.drag\u0026\u0026this.addDragDown(),this.resize\u0026\u0026this.addResizeDown(),this.$emit(\"opened\",this.createModalEvent({type:\"opened\"})),this.resolveToggle(\"show\")},beforeModalLeave:function(){this.modalTransitionState\u003dQi,this.$focusTrap.enabled()\u0026\u0026this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState\u003dUi,this.modalStackIndex\u003dnull,this.lockScroll\u0026\u0026qi(this.$refs.vfmContainer),this.keepChangedStyle||(this.dragResizeStyle\u003d{});var t\u003d!1,e\u003dthis.createModalEvent({type:\"closed\",stop:function(){t\u003d!0}});this.$emit(\"closed\",e),this.resolveToggle(\"hide\"),t||(this.params\u003d{})},onMousedown:function(t){this.lastMousedownEl\u003dnull\u003d\u003dt?void 0:t.target},onMouseupContainer:function(){this.lastMousedownEl\u003d\u003d\u003dthis.$refs.vfmContainer\u0026\u0026\"resize:move\"!\u003d\u003dthis.state\u0026\u0026(this.$emit(\"click-outside\",this.createModalEvent({type:\"click-outside\"})),this.clickToClose\u0026\u0026this.$emit(\"input\",!1))},onEsc:function(){this.visible\u0026\u0026this.escToClose\u0026\u0026this.$emit(\"input\",!1)},createModalEvent:function(){var t\u003darguments.length\u003e0\u0026\u0026void 0!\u003d\u003darguments[0]?arguments[0]:{};return wi({ref:this},t)},emitEvent:function(t,e){var n\u003d!1,i\u003dthis.createModalEvent({type:t,stop:function(){n\u003d!0}});return this.$emit(t,i),!!n\u0026\u0026(this.stopEvent\u003d!0,this.$emit(\"input\",e),!0)},emitState:function(t,e,n){this.state\u003d\"\".concat(e,\":\").concat(n),this.$emit(this.state,t)},toggle:function(t,e){var n\u003darguments,i\u003dthis;return new Promise((function(o,r){i.resolveToggle\u003dfunction(t){o(t),i.resolveToggle\u003dWi},i.rejectToggle\u003dfunction(t){r(t),i.rejectToggle\u003dWi};var s\u003d\"boolean\"\u003d\u003dtypeof t?t:!i.value;s\u0026\u00262\u003d\u003d\u003dn.length\u0026\u0026(i.params\u003de),i.$emit(\"input\",s)}))},pointerDown:function(t){var e\u003dthis;t.stopPropagation();var n,i\u003d\"resize\",o\u003d\"drag\",r\u003dthis.$refs,s\u003dr.vfmContainer,a\u003dr.vfmContent,l\u003dt.target.getAttribute(\"direction\");if(l)n\u003di;else{if(!function(t,e,n){return\"\"\u003d\u003d\u003dn||bi(e.querySelectorAll(n)).includes(t.target)}(t,a,this.dragSelector))return;n\u003do}this.emitState(t,n,\"start\");var c,u,d,h,p\u003dCi(t),f\u003ds.getBoundingClientRect(),m\u003da.getBoundingClientRect(),v\u003d\"absolute\"\u003d\u003d\u003dwindow.getComputedStyle(a).position,g\u003dki(this.dragResizeStyle.top),y\u003dki(this.dragResizeStyle.left),w\u003dfunction(){if(e.fitParent){var t\u003d{absolute:function(){return{minTop:0,minLeft:0,maxTop:f.height-m.height,maxLeft:f.width-m.width}},relative:function(){return{minTop:g+f.top-m.top,minLeft:y+f.left-m.left,maxTop:g+f.bottom-m.bottom,maxLeft:y+f.right-m.right}}};return v?t.absolute():t.relative()}return{}}(),b\u003dn\u003d\u003d\u003di\u0026\u0026(c\u003ddocument.body,u\u003d\"cursor\",d\u003dKi[l],h\u003dc.style[u],c.style[u]\u003dd,function(){c.style[u]\u003dh}),_\u003dfunction(t){t.stopPropagation(),e.emitState(t,n,\"move\");var r,s,a\u003dCi(t),c\u003d{x:a.x-p.x,y:a.y-p.y};n\u003d\u003d\u003di\u0026\u0026(c\u003de.getResizeOffset(l,c,f,m,v)),v?(r\u003dm.top-f.top+c.y,s\u003dm.left-f.left+c.x):(r\u003dg+c.y,s\u003dy+c.x),n\u003d\u003d\u003do\u0026\u0026e.fitParent\u0026\u0026(r\u003d$i(w.minTop,r,w.maxTop),s\u003d$i(w.minLeft,s,w.maxLeft));var u\u003dwi(wi(wi({position:\"relative\",top:r+\"px\",left:s+\"px\",margin:\"unset\",touchAction:\"none\"},v\u0026\u0026{position:\"absolute\",transform:\"unset\",width:m.width+\"px\",height:m.height+\"px\"}),c.width\u0026\u0026{width:c.width+\"px\"}),c.height\u0026\u0026{height:c.height+\"px\"});e.dragResizeStyle\u003dwi(wi({},e.dragResizeStyle),u)};Ei(\"move\",document,_),Ei(\"up\",document,(function t(o){o.stopPropagation(),n\u003d\u003d\u003di\u0026\u0026b\u0026\u0026b(),setTimeout((function(){e.emitState(o,n,\"end\")})),Oi(\"move\",document,_),Oi(\"up\",document,t)}))},addDragDown:function(){Ei(\"down\",this.$refs.vfmContent,this.pointerDown),this.dragResizeStyle.touchAction\u003d\"none\"},removeDragDown:function(){Oi(\"down\",this.$refs.vfmContent,this.pointerDown)},addResizeDown:function(){var t\u003dthis;this.visibility.resize\u003d!0,this.$nextTick((function(){Ei(\"down\",t.$refs.vfmResize,t.pointerDown)}))},removeResizeDown:function(){Oi(\"down\",this.$refs.vfmResize,this.pointerDown),this.visibility.resize\u003d!1},getResizeOffset:function(t,e,n,i,o){var r\u003dthis,s\u003dfunction(t,e,o,s){var a,l\u003di[e],c\u003dn[t]-i[t],u\u003d(a\u003de).charAt(0).toUpperCase()+a.slice(1);return{axis:o,edgeName:e,min:s?c:-l,max:s?l:c,minEdge:r[\"min\".concat(u)],maxEdge:r[\"max\".concat(u)],getEdge:function(t){return i[e]-t*(s?1:-1)},getOffsetAxis:function(t,n){var o\u003di[e]-t;return n?s?o:0:(s?1:-1)*o/2}}},a\u003d{t:[\"top\",\"height\",\"y\",!0],b:[\"bottom\",\"height\",\"y\",!1],l:[\"left\",\"width\",\"x\",!0],r:[\"right\",\"width\",\"x\",!1]},l\u003d{x:0,y:0};return t.split(\"\").forEach((function(t){var n\u003ds.apply(void 0,bi(a[t]));l\u003dwi(wi({},l),function(t){var n,i\u003de[t.axis];i\u003dr.fitParent?$i(t.min,i,t.max):i;var s\u003d$i(t.minEdge,t.getEdge(i),t.maxEdge);return i\u003dt.getOffsetAxis(s,o),gi(n\u003d{},t.edgeName,s),gi(n,t.axis,i),n}(n))})),l}}},Zi\u003dfunction(t,e,n,i,o,r,s,a,l,c){\"boolean\"!\u003dtypeof s\u0026\u0026(l\u003da,a\u003ds,s\u003d!1);var u,d\u003d\"function\"\u003d\u003dtypeof n?n.options:n;if(t\u0026\u0026t.render\u0026\u0026(d.render\u003dt.render,d.staticRenderFns\u003dt.staticRenderFns,d._compiled\u003d!0,o\u0026\u0026(d.functional\u003d!0)),i\u0026\u0026(d._scopeId\u003di),r?(u\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),e\u0026\u0026e.call(this,l(t)),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(r)},d._ssrRegister\u003du):e\u0026\u0026(u\u003ds?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h\u003dd.render;d.render\u003dfunction(t,e){return u.call(e),h(t,e)}}else{var p\u003dd.beforeCreate;d.beforeCreate\u003dp?[].concat(p,u):[u]}return n},Ji\u003d\"undefined\"!\u003dtypeof navigator\u0026\u0026/msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase()),to\u003d{},eo\u003dZi({render:function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.ssr||t.visible?n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.ssr||t.visible,expression:\"!ssr || visible\"}],staticClass:\"vfm vfm--inset\",class:[!1\u003d\u003d\u003dt.attach?\"vfm--fixed\":\"vfm--absolute\",{\"vfm--prevent-none\":t.preventClick}],style:t.bindStyle,on:{keydown:function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"])?null:t.onEsc.apply(null,arguments)}}},[n(\"transition\",t._b({ref:\"vfmOverlayTransition\",on:{\"before-enter\":t.beforeOverlayEnter,\"after-enter\":t.afterOverlayEnter,\"before-leave\":t.beforeOverlayLeave,\"after-leave\":t.afterOverlayLeave}},\"transition\",t.computedOverlayTransition,!1),[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.hideOverlay\u0026\u0026t.visibility.overlay,expression:\"!hideOverlay \u0026\u0026 visibility.overlay\"}],staticClass:\"vfm__overlay vfm--overlay vfm--absolute vfm--inset\",class:t.overlayClass,style:t.overlayStyle})]),t._v(\" \"),n(\"transition\",t._b({ref:\"vfmTransition\",on:{\"before-enter\":t.beforeModalEnter,\"after-enter\":t.afterModalEnter,\"before-leave\":t.beforeModalLeave,\"after-leave\":t.afterModalLeave}},\"transition\",t.computedTransition,!1),[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.visibility.modal,expression:\"visibility.modal\"}],ref:\"vfmContainer\",staticClass:\"vfm__container vfm--absolute vfm--inset vfm--outline-none\",class:t.classes,style:t.styles,attrs:{\"aria-expanded\":t.visibility.modal.toString(),role:\"dialog\",\"aria-modal\":\"true\",tabindex:\"-1\"},on:{mouseup:function(e){return e.target!\u003d\u003de.currentTarget?null:t.onMouseupContainer.apply(null,arguments)},mousedown:function(e){return e.target!\u003d\u003de.currentTarget?null:t.onMousedown.apply(null,arguments)}}},[n(\"div\",{ref:\"vfmContent\",staticClass:\"vfm__content\",class:[t.contentClass,{\"vfm--prevent-auto\":t.preventClick}],style:t.bindContentStyle,on:{mousedown:function(e){return t.onMousedown(null)}}},[t._t(\"default\",null,{params:t.params,close:function(){return t.$emit(\"input\",!1)}}),t._v(\" \"),t.visibility.resize\u0026\u0026t.visibility.modal?n(\"div\",{ref:\"vfmResize\",staticClass:\"vfm__resize vfm--absolute vfm--inset vfm--prevent-none vfm--select-none vfm--touch-none\"},t._l(t.resizeDirections,(function(t){return n(\"div\",{key:t,staticClass:\"vfm--absolute vfm--prevent-auto\",class:\"vfm--resize-\"+t,attrs:{direction:t}})})),0):t._e()],2)])])],1):t._e()},staticRenderFns:[]},(function(t){t\u0026\u0026t(\"data-v-1cd72822_0\",{source:\".vfm--fixed[data-v-1cd72822]{position:fixed}.vfm--absolute[data-v-1cd72822]{position:absolute}.vfm--inset[data-v-1cd72822]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-1cd72822]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-1cd72822]{pointer-events:none}.vfm--prevent-auto[data-v-1cd72822]{pointer-events:auto}.vfm--outline-none[data-v-1cd72822]:focus{outline:0}.vfm-enter-active[data-v-1cd72822],.vfm-leave-active[data-v-1cd72822]{transition:opacity .2s}.vfm-enter[data-v-1cd72822],.vfm-leave-to[data-v-1cd72822]{opacity:0}.vfm--touch-none[data-v-1cd72822]{touch-action:none}.vfm--select-none[data-v-1cd72822]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vfm--resize-bl[data-v-1cd72822],.vfm--resize-br[data-v-1cd72822],.vfm--resize-tl[data-v-1cd72822],.vfm--resize-tr[data-v-1cd72822]{width:12px;height:12px;z-index:10}.vfm--resize-t[data-v-1cd72822]{top:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-tr[data-v-1cd72822]{top:-6px;right:-6px;cursor:nesw-resize}.vfm--resize-r[data-v-1cd72822]{top:0;right:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-br[data-v-1cd72822]{bottom:-6px;right:-6px;cursor:nwse-resize}.vfm--resize-b[data-v-1cd72822]{bottom:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-bl[data-v-1cd72822]{bottom:-6px;left:-6px;cursor:nesw-resize}.vfm--resize-l[data-v-1cd72822]{top:0;left:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-tl[data-v-1cd72822]{top:-6px;left:-6px;cursor:nwse-resize}\",map:void 0,media:void 0})}),Gi,\"data-v-1cd72822\",!1,void 0,!1,(function(t){return function(t,e){return function(t,e){var n\u003dJi?e.media||\"default\":t,i\u003dto[n]||(to[n]\u003d{ids:new Set,styles:[]});if(!i.ids.has(t)){i.ids.add(t);var o\u003de.source;if(e.map\u0026\u0026(o+\u003d\"\\n/*# sourceURL\u003d\"+e.map.sources[0]+\" */\",o+\u003d\"\\n/*# sourceMappingURL\u003ddata:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(e.map))))+\" */\"),i.element||(i.element\u003ddocument.createElement(\"style\"),i.element.type\u003d\"text/css\",e.media\u0026\u0026i.element.setAttribute(\"media\",e.media),void 0\u003d\u003d\u003dAi\u0026\u0026(Ai\u003ddocument.head||document.getElementsByTagName(\"head\")[0]),Ai.appendChild(i.element)),\"styleSheet\"in i.element)i.styles.push(o),i.element.styleSheet.cssText\u003di.styles.filter(Boolean).join(\"\\n\");else{var r\u003di.ids.size-1,s\u003ddocument.createTextNode(o),a\u003di.element.childNodes;a[r]\u0026\u0026i.element.removeChild(a[r]),a.length?i.element.insertBefore(s,a[r]):i.element.appendChild(s)}}}(t,e)}}),void 0,void 0),no\u003dZi({render:function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{staticClass:\"modals-container\"},t._l(t.api.dynamicModals,(function(e,i){return n(e.component,t._g(t._b({key:e.id,tag:\"component\",on:{closed:function(e){return t.slice(i)},\"before-open\":function(n){return t.beforeOpen(n,e,i)},opened:e.opened},scopedSlots:t._u([t._l(e.slots,(function(e,i){return{key:i,fn:function(){return[t.isString(e)?n(\"div\",{key:i,domProps:{innerHTML:t._s(e)}}):n(e.component,t._g(t._b({key:i,tag:\"component\"},\"component\",e.bind,!1),e.on))]},proxy:!0}}))],null,!0),model:{value:e.value,callback:function(n){t.$set(e,\"value\",n)},expression:\"modal.value\"}},\"component\",e.bind,!1),e.on))})),1)},staticRenderFns:[]},void 0,{props:{},methods:{slice:function(t){this.api.dynamicModals.splice(t,1)},beforeOpen:function(t,e,n){var i\u003dthis;t.ref.params\u003de.params,this.$nextTick((function(){e.value||(i.slice(n),e.reject(\"show\"))}))},isString:function(t){return\"string\"\u003d\u003dtypeof t}}},void 0,!1,void 0,!1,void 0,void 0,void 0);function io(t,e){var n\u003dwi(wi({},t),{},{props:wi({},t.props)});return Object.assign(n.props,{api:{type:Object,default:function(){return e}}}),n}var oo\u003d0,ro\u003dfunction(){var t,e,n\u003d(e\u003dnull,et().observable({show:function(t){for(var n\u003dthis,i\u003darguments.length,o\u003dnew Array(i\u003e1?i-1:0),r\u003d1;r\u003ci;r++)o[r-1]\u003darguments[r];switch(mi(t)){case\"string\":return this.toggle.apply(this,[t,!0].concat(o));case\"object\":return Promise.allSettled([new Promise((function(i,r){var s\u003d{value:!0,id:Symbol(\"dynamicModal\"),component:e,bind:{},slots:{},on:{},params:o[0],reject:r,opened:function(){i(\"show\")}};n.dynamicModals.push(Object.assign(s,t))}))])}},hide:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return this.toggle(e,!1)},hideAll:function(){return this.hide.apply(this,bi(this.openedModals.map((function(t){return t.name}))))},toggle:function(t){for(var e\u003darguments.length,n\u003dnew Array(e\u003e1?e-1:0),i\u003d1;i\u003ce;i++)n[i-1]\u003darguments[i];var o\u003dArray.isArray(t)?this.get.apply(this,bi(t)):this.get(t);return Promise.allSettled(o.map((function(t){return t.toggle.apply(t,n)})))},get:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return this.modals.filter((function(t){return e.includes(t.name)}))},dynamicModals:[],openedModals:[],modals:[],_setDefaultModal:function(t){e\u003dt}}));return gi(t\u003d{},\"$vfm\",n),gi(t,\"VueFinalModal\",function(t){var e\u003dio(eo,t);return t._setDefaultModal(e),e}(n)),gi(t,\"ModalsContainer\",io(no,n)),t},so\u003dro(),ao\u003dso.$vfm,lo\u003dso.VueFinalModal,co\u003d(so.ModalsContainer,function(t){var e\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]?arguments[1]:{},n\u003d0\u003d\u003d\u003doo?so:ro(),i\u003dn.$vfm,o\u003dn.VueFinalModal,r\u003dn.ModalsContainer;oo+\u003d1;var s\u003de.key||\"$vfm\",a\u003de.componentName||\"VueFinalModal\",l\u003de.dynamicContainerName||\"ModalsContainer\";t.prototype[s]\u003di,t.component(a,o),t.component(l,r)}),uo\u003dfunction(t){return{install:function(e,n){var i\u003dObject.assign({},t,n);co(e,i)}}};uo.install\u003dco;const ho\u003dqe({name:\"Trigger\",components:{PortalTarget:fi.YC},props:{for:{type:String,default:\"\"},trigger:{type:String,default:\"hover focus\"},placement:{type:String,default:\"top\"}},data:function(){return{popoverOrTooltipType:void 0,isInput:!1}},methods:{toggle:function(){this.for\u0026\u0026ao.show(this.for)}},computed:{triggerEventType:function(){return\"click\"\u003d\u003d\u003dthis.trigger||\"focus\"\u003d\u003d\u003dthis.trigger?this.trigger:\"mouseenter\"},triggers:function(){return this.trigger.split(\" \")},target:function(){return this.for}},mounted:function(){if(this.isInput\u003dthis.$slots.default\u0026\u0026this.$slots.default.some((function(t){return\"input\"\u003d\u003d\u003dt.tag})),this.for\u0026\u0026void 0\u003d\u003d\u003dthis.popoverOrTooltipType){var t\u003ddocument.getElementById(this.for);if(!t)return;this.popoverOrTooltipType\u003dt.dataset.mbComponentType}}},pi,[],!1,null,null,null).exports;var po\u003dfunction(){var t\u003dthis.$createElement;return(this._self._c||t)(\"div\",{staticClass:\"site-nav-root\"},[this._t(\"default\")],2)};po._withStripped\u003d!0;const fo\u003dqe({name:\"SiteNav\",mounted:function(){var t\u003dthis,e\u003dSn(new URL(window.location.href).pathname);this.$el.querySelectorAll(\"a[href]\").forEach((function(n){var i\u003dSn(n.getAttribute(\"href\"));if(e\u003d\u003d\u003di){n.classList.add(\"current\");for(var o\u003dn.parentElement;o\u0026\u0026o!\u003d\u003dt.$el;)\"ul\"\u003d\u003d\u003do.tagName.toLowerCase()\u0026\u0026o.classList.contains(\"site-nav-dropdown-container\")\u0026\u0026o.classList.add(\"site-nav-dropdown-container-open\"),o\u003do.parentElement}}))}},po,[],!1,null,null,null).exports;var mo\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[n(\"span\",{class:[{\"nav-menu-close-icon\":t.show}],on:{click:function(e){return t.toggleNavMenu(void 0)}}},[t._t(\"navMenuIcon\")],2),t._v(\" \"),n(\"div\",{ref:\"navMenuContainer\",class:[\"nav-menu\",{\"nav-menu-open\":t.show}],style:t.navbarHeight,on:{click:t.toggleNavMenu}},[n(\"portal-target\",{attrs:{name:t.portalName,multiple:\"\"}})],1)])};mo._withStripped\u003d!0;var vo\u003d{};const go\u003dqe({components:{PortalTarget:fi.YC},props:{type:{type:String,default:null},portalName:{type:String,default:null}},inject:{toggleLowerNavbar:{default:void 0}},data:function(){return{show:!1,navbarHeight:\"\"}},methods:{toggleNavMenu:function(t){var e,n\u003dthis;t\u0026\u0026\"a\"\u003d\u003d\u003dt.target.tagName.toLowerCase()||!t\u0026\u0026this.show?(document.body.style.removeProperty(\"overflow\"),this.show\u003d!1):(vo[e\u003d\"closeOverlay\"]\u0026\u0026vo[e].forEach((function(t){return t()})),document.body.style.overflow\u003d\"hidden\",this.show\u003d!0,this.$nextTick((function(){var t\u003dn.$refs.navMenuContainer,e\u003dwindow.innerHeight-t.getBoundingClientRect().top;n.navbarHeight\u003d\"height: \".concat(e,\"px\")})))}},mounted:function(){var t,e,n\u003dthis;this.toggleLowerNavbar\u0026\u0026this.toggleLowerNavbar(),e\u003dfunction(){n.show\u003d!1},vo[t\u003d\"closeOverlay\"]||(vo[t]\u003d[]),vo[t].push(e)}},mo,[],!1,null,\"1a3e7aee\",null).exports;var yo\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(t.tagName,t._b({tag:\"component\"},\"component\",t.$attrs,!1),[t._t(\"default\"),t._v(\" \"),t.enablePortal?n(\"portal\",{attrs:{to:t.to}},[n(t.tagName,t._b({tag:\"component\",class:[t.$vnode.data.staticClass||\"\",\"mb-mobile-nav\"],style:t.$vnode.data.staticStyle},\"component\",t.$attrs,!1),[t._t(\"default\")],2)],1):t._e()],2)};yo._withStripped\u003d!0;const wo\u003dqe({name:\"OverlaySource\",components:{Portal:fi.h_},props:{to:{type:String,default:void 0},tagName:{type:String,default:void 0}},data:function(){return{enablePortal:!1}},mounted:function(){this.enablePortal\u003d!0}},yo,[],!1,null,\"e6005420\",null).exports;var bo\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:\"click\"\u003d\u003d\u003dt.trigger?\"trigger-click\":\"trigger\",attrs:{\"data-mb-component-type\":\"popover\",tabindex:\"0\"}},[t.targetEl.id?n(\"portal\",{attrs:{to:\"popover:\"+t.targetEl.id}},[t.hasHeader?n(\"h3\",{staticClass:\"popover-header\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"popover-body\"},[t._t(\"content\")],2)]):t._e(),t._v(\" \"),t.isMounted?n(\"v-popover\",{attrs:{\"auto-hide\":!t.isInput,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,placement:t.placement,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[n(\"div\",{staticClass:\"popover-container\"},[t.hasHeader?n(\"h3\",{staticClass:\"popover-header\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"popover-body\"},[t._t(\"content\")],2)])]},proxy:!0}],null,!0)},[t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):t._e()],1)};bo._withStripped\u003d!0;const _o\u003dqe({name:\"Popover\",components:{Portal:fi.h_},props:{trigger:{type:String,default:\"hover focus\"},placement:{type:String,default:\"top\"}},data:function(){return{targetEl:{},isMounted:!1}},computed:{triggers:function(){return this.trigger.split(\" \")},hasHeader:function(){return!!this.$slots.header}},mounted:function(){this.targetEl\u003dthis.$el,this.isInput\u003dthis.$slots.default\u0026\u0026this.$slots.default.some((function(t){return\"input\"\u003d\u003d\u003dt.tag})),this.isMounted\u003d!0}},bo,[],!1,null,null,null).exports;var So\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:\"click\"\u003d\u003d\u003dt.trigger?\"trigger-click\":\"trigger\",attrs:{\"data-mb-component-type\":\"tooltip\",tabindex:\"0\"}},[t.targetEl.id?n(\"portal\",{attrs:{to:\"tooltip:\"+t.targetEl.id}},[t._t(\"content\")],2):t._e(),t._v(\" \"),t.isMounted?n(\"v-tooltip\",{attrs:{\"auto-hide\":!t.isInput,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,placement:t.placement,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[t._t(\"content\")]},proxy:!0}],null,!0)},[t._v(\" \"),t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):t._e()],1)};So._withStripped\u003d!0;const xo\u003dqe({name:\"Tooltip\",components:{Portal:fi.h_},props:{trigger:{type:String,default:\"hover focus\"},placement:{type:String,default:\"top\"}},data:function(){return{targetEl:{},isInput:!1,isMounted:!1}},computed:{triggers:function(){return this.trigger.split(\" \")}},mounted:function(){this.targetEl\u003dthis.$el,this.isInput\u003dthis.$slots.default\u0026\u0026this.$slots.default.some((function(t){return\"input\"\u003d\u003d\u003dt.tag})),this.isMounted\u003d!0}},So,[],!1,null,null,null).exports;var Co\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.isMounted?n(\"vue-final-modal\",{attrs:{ssr:\"\",name:t.id,classes:[\"modal\"],\"content-class\":[\"modal-dialog\",\"modal-dialog-scrollable\",t.optionalModalSize,t.optionalCentering],\"overlay-transition\":\"none\",transition:t.effectClass,\"click-to-close\":\"false\"!\u003d\u003dt.backdrop,\"esc-to-close\":\"\",\"z-index-base\":\"2000\"},model:{value:t.show,callback:function(e){t.show\u003de},expression:\"show\"}},[n(\"div\",{staticClass:\"modal-content\"},[t.hasHeader?n(\"div\",{staticClass:\"modal-header\"},[n(\"h5\",{staticClass:\"modal-title\"},[t._t(\"header\")],2),t._v(\" \"),n(\"button\",{staticClass:\"btn-close\",attrs:{type:\"button\",\"aria-label\":\"Close\"},on:{click:function(e){return t.close()}}})]):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"modal-body\"},[t._t(\"default\")],2),t._v(\" \"),t.hasFooter||t.hasOk?n(\"div\",{staticClass:\"modal-footer\"},[t.hasFooter?t._t(\"footer\"):n(\"button\",{staticClass:\"btn btn-primary\",on:{click:function(e){return t.close()}}},[t._v(\"\\n \"+t._s(t.okText)+\"\\n \")])],2):t._e()])]):t._e()};Co._withStripped\u003d!0;const $o\u003dqe({name:\"Modal\",components:{VueFinalModal:lo},data:function(){return{show:!1,isMounted:!1,zoomEffect:{\"enter-class\":\"modal-zoom\",\"enter-to-class\":\"modal-zoom-show\",\"leave-to-class\":\"modal-zoom\",\"leave-class\":\"modal-zoom-show\"}}},props:{okText:{type:String,default:\"\"},effect:{type:String,default:\"zoom\"},id:{type:String,default:\"\"},small:{type:Boolean,default:!1},large:{type:Boolean,default:!1},center:{type:Boolean,default:!1},backdrop:{type:String,default:\"\"}},computed:{hasHeader:function(){return!!this.$slots.header},hasFooter:function(){return!!this.$slots.footer},hasOk:function(){return\"\"!\u003d\u003dthis.okText},optionalModalSize:function(){return this.small||this.large?this.small?\"modal-sm\":\"modal-lg\":\"\"},optionalCentering:function(){return this.center?\"modal-dialog-centered\":\"\"},effectClass:function(){return\"zoom\"\u003d\u003d\u003dthis.effect?this.zoomEffect:\"vfm\"}},methods:{close:function(){this.show\u003d!1}},mounted:function(){this.isMounted\u003d!0}},Co,[],!1,null,null,null).exports;var ko\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"scroll-top-button\",t.getIconSize(),\"d-print-none\",{lighten:t.$data.isLighten}],style:t.iconStyle(),attrs:{\"aria-hidden\":\"true\"},on:{click:function(e){return t.handleScrollTop()}}},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas fa-arrow-circle-up\"]})]}))],2)};ko._withStripped\u003d!0;var To\u003d{box:We,breadcrumb:Ve,dropdown:gn,navbar:Tn,panel:Rn,annotate:In,aPoint:Wn,pic:Vn,quiz:Qn,question:Gn,qOption:Jn,retriever:zn,searchbar:oi,tab:si,tabGroup:li,tabs:ui,thumbnail:hi,trigger:ho,siteNav:fo,submenu:vn,siteNavButton:Cn,pageNavButton:kn,overlay:go,overlaySource:wo,popover:_o,tooltip:xo,modal:$o,VPopover:Ne,VTooltip:Ae,scrollTopButton:qe({name:\"ScrollTopButton\",props:{icon:{type:String,default:null},iconSize:{type:String,default:\"lg\"},iconColor:{type:String,default:null},bottom:{type:String,default:null},right:{type:String,default:null}},data:function(){return{isVisible:!1,isLighten:!1,timers:{showOrHideButtonTimer:0,lightenButtonTimer:0}}},methods:{initScrollTopButton:function(){window.addEventListener(\"scroll\",this.promptScrollTopButton)},destroyScrollTopButton:function(){window.removeEventListener(\"scroll\",this.promptScrollTopButton)},promptScrollTopButton:function(){this.resetScrollTopButton(),this.showOrHideScrollTopButton()},resetScrollTopButton:function(){clearTimeout(this.timers.showOrHideButtonTimer),clearTimeout(this.timers.lightenButtonTimer),this.isLighten\u003d!1},showOrHideScrollTopButton:function(){var t\u003dthis;this.timers.showOrHideButtonTimer\u003dsetTimeout((function(){document.body.scrollTop\u003e20||document.documentElement.scrollTop\u003e20?(t.isVisible\u003d!0,t.lightenScrollTopButton()):t.isVisible\u003d!1}),100)},lightenScrollTopButton:function(){var t\u003dthis;this.timers.lightenButtonTimer\u003dsetTimeout((function(){t.isLighten||(t.isLighten\u003d!0)}),1e3)},iconStyle:function(){var t\u003d{};return t.display\u003dthis.isVisible?\"block\":\"none\",this.iconColor\u0026\u0026(t.color\u003dthis.iconColor),t.bottom\u003dthis.bottom?this.bottom:\"2%\",t.right\u003dthis.right?this.right:\"2%\",t.position\u003d\"fixed\",t},handleScrollTop:function(){document.body.scrollIntoView({block:\"start\",behavior:\"smooth\"})},getIconSize:function(){return this.iconSize?\"fa-\".concat(this.iconSize):\"\"}},mounted:function(){this.initScrollTopButton()},beforeDestroy:function(){this.destroyScrollTopButton()}},ko,[],!1,null,null,null).exports},Eo\u003d{closeable:Qe()};const Oo\u003d{MarkBindVue:{plugin:{install:function(t){Object.keys(Eo).forEach((function(e){t.directive(e,Eo[e])})),Object.keys(To).forEach((function(e){t.component(e,To[e])}))}},components:To,directives:Eo},appFactory:function(){return{data:function(){return{searchData:[]}},methods:{searchCallback:function(t){var e\u003d\"\".concat(baseUrl,\"/\").concat(t.src.replace(/.md$/,\".html\")),n\u003dt.heading?\"#\".concat(t.heading.id):\"\";window.location\u003d\"\".concat(e).concat(n)}}}}};i(605);function Bo(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Po(t){for(var e\u003d1;e\u003carguments.length;e++){var i\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?Bo(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Bo(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var Lo\u003dOo.MarkBindVue,No\u003dOo.appFactory;function Ao(){var t\u003ddocument.querySelector(\"header[sticky]\");if(null!\u003d\u003dt){var e\u003da(),n\u003d!1;t.addEventListener(\"transitionend\",(function(){n||(t.style.overflow\u003d\"\")})),new ResizeObserver((function(){e\u003da(),document.documentElement.style.setProperty(\"--sticky-header-height\",\"\".concat(e,\"px\")),window.innerWidth\u003e767\u0026\u0026n\u0026\u0026l()})).observe(t);var i,o\u003d0,r\u003dwindow.location.hash,s\u003dfunction(){if(!(window.innerWidth\u003e767)){if(r!\u003d\u003dwindow.location.hash)return r\u003dwindow.location.hash,void l();r\u003dwindow.location.hash;var i\u003dwindow.pageYOffset;if(!(window.innerHeight+i\u003e\u003ddocument.body.offsetHeight)){if(i\u003eo){t.style.position\u003d\"static\";var s\u003dt.getBoundingClientRect().top+e;if(t.style.position\u003d\"sticky\",s\u003e0)return;n\u003d!0,t.style.overflow\u003d\"hidden\",t.classList.add(\"hide-header\")}else l();o\u003di}}};window.addEventListener(\"scroll\",(function(){i\u0026\u0026clearTimeout(i),i\u003dsetTimeout(s,20)}))}function a(){var e\u003dwindow.getComputedStyle(t,null);return t.clientHeight-parseFloat(e.paddingTop)-parseFloat(e.paddingBottom)}function l(){n\u003d!1,t.classList.remove(\"hide-header\")}}function zo(){document.querySelectorAll(\"script[style-bypass-vue-compilation]\").forEach((function(t){var e\u003ddocument.createElement(\"style\");e.innerHTML\u003dt.innerHTML,t.parentNode.replaceChild(e,t)})),Ao()}Vue.use(Lo.plugin),window.onload\u003dfunction(){if(window.location.hash){var t\u003ddocument.getElementById(window.location.hash.slice(1));t\u0026\u0026t.scrollIntoView({behavior:\"smooth\",block:\"start\",inline:\"nearest\"})}},window.handleSiteNavClick\u003dfunction(t){var e\u003d!(arguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1])||arguments[1];if(e){var n\u003dt.getElementsByTagName(\"a\");if(n.length)return void(window.location.href\u003dn[0].href)}var i\u003dt.nextElementSibling,o\u003dt.lastElementChild.lastElementChild;i.classList.toggle(\"site-nav-dropdown-container-open\"),o.classList.toggle(\"site-nav-rotate-icon\")};const Mo\u003d{setup:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo()}})).$mount(\"#app\",!0)},setupWithSearch:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo(),function(t){fetch(\"\".concat(baseUrl,\"/siteData.json\")).then((function(t){return t.json()})).then((function(e){t.searchData\u003de.pages}))}(this)}})).$mount(\"#app\",!0)}}})(),o\u003do.default})());"}],"authorContributionMap":{"jingting1412":1}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/js/polyfill.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var c\u003d\"function\"\u003d\u003dtypeof require\u0026\u0026require;if(!u\u0026\u0026c)return c(o,!0);if(i)return i(o,!0);var a\u003dnew Error(\"Cannot find module \u0027\"+o+\"\u0027\");throw a.code\u003d\"MODULE_NOT_FOUND\",a}var f\u003dn[o]\u003d{exports:{}};t[o][0].call(f.exports,function(n){var r\u003dt[o][1][n];return s(r||n)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i\u003d\"function\"\u003d\u003dtypeof require\u0026\u0026require,o\u003d0;o\u003cr.length;o++)s(r[o]);return s}({1:[function(t,n,r){(function(n){\"use strict\";function define(t,n,e){t[n]||Object[r](t,n,{writable:!0,configurable:!0,value:e})}if(t(327),t(328),t(2),n._babelPolyfill)throw new Error(\"only one instance of babel-polyfill is allowed\");n._babelPolyfill\u003d!0;var r\u003d\"defineProperty\";define(String.prototype,\"padLeft\",\"\".padStart),define(String.prototype,\"padRight\",\"\".padEnd),\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function(t){[][t]\u0026\u0026define(Array,t,Function.call.bind([][t]))})}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{2:2,327:327,328:328}],2:[function(t,n,r){t(130),n.exports\u003dt(23).RegExp.escape},{130:130,23:23}],3:[function(t,n,r){n.exports\u003dfunction(t){if(\"function\"!\u003dtypeof t)throw TypeError(t+\" is not a function!\");return t}},{}],4:[function(t,n,r){var e\u003dt(18);n.exports\u003dfunction(t,n){if(\"number\"!\u003dtypeof t\u0026\u0026\"Number\"!\u003de(t))throw TypeError(n);return+t}},{18:18}],5:[function(t,n,r){var e\u003dt(128)(\"unscopables\"),i\u003dArray.prototype;void 0\u003d\u003di[e]\u0026\u0026t(42)(i,e,{}),n.exports\u003dfunction(t){i[e][t]\u003d!0}},{128:128,42:42}],6:[function(t,n,r){n.exports\u003dfunction(t,n,r,e){if(!(t instanceof n)||void 0!\u003d\u003de\u0026\u0026e in t)throw TypeError(r+\": incorrect invocation!\");return t}},{}],7:[function(t,n,r){var e\u003dt(51);n.exports\u003dfunction(t){if(!e(t))throw TypeError(t+\" is not an object!\");return t}},{51:51}],8:[function(t,n,r){\"use strict\";var e\u003dt(119),i\u003dt(114),o\u003dt(118);n.exports\u003d[].copyWithin||function copyWithin(t,n){var r\u003de(this),u\u003do(r.length),c\u003di(t,u),a\u003di(n,u),f\u003darguments.length\u003e2?arguments[2]:void 0,s\u003dMath.min((void 0\u003d\u003d\u003df?u:i(f,u))-a,u-c),l\u003d1;for(a\u003cc\u0026\u0026c\u003ca+s\u0026\u0026(l\u003d-1,a+\u003ds-1,c+\u003ds-1);s-- \u003e0;)a in r?r[c]\u003dr[a]:delete r[c],c+\u003dl,a+\u003dl;return r}},{114:114,118:118,119:119}],9:[function(t,n,r){\"use strict\";var e\u003dt(119),i\u003dt(114),o\u003dt(118);n.exports\u003dfunction fill(t){for(var n\u003de(this),r\u003do(n.length),u\u003darguments.length,c\u003di(u\u003e1?arguments[1]:void 0,r),a\u003du\u003e2?arguments[2]:void 0,f\u003dvoid 0\u003d\u003d\u003da?r:i(a,r);f\u003ec;)n[c++]\u003dt;return n}},{114:114,118:118,119:119}],10:[function(t,n,r){var e\u003dt(39);n.exports\u003dfunction(t,n){var r\u003d[];return e(t,!1,r.push,r,n),r}},{39:39}],11:[function(t,n,r){var e\u003dt(117),i\u003dt(118),o\u003dt(114);n.exports\u003dfunction(t){return function(n,r,u){var c,a\u003de(n),f\u003di(a.length),s\u003do(u,f);if(t\u0026\u0026r!\u003dr){for(;f\u003es;)if((c\u003da[s++])!\u003dc)return!0}else for(;f\u003es;s++)if((t||s in a)\u0026\u0026a[s]\u003d\u003d\u003dr)return t||s||0;return!t\u0026\u0026-1}}},{114:114,117:117,118:118}],12:[function(t,n,r){var e\u003dt(25),i\u003dt(47),o\u003dt(119),u\u003dt(118),c\u003dt(15);n.exports\u003dfunction(t,n){var r\u003d1\u003d\u003dt,a\u003d2\u003d\u003dt,f\u003d3\u003d\u003dt,s\u003d4\u003d\u003dt,l\u003d6\u003d\u003dt,h\u003d5\u003d\u003dt||l,v\u003dn||c;return function(n,c,p){for(var d,y,g\u003do(n),m\u003di(g),b\u003de(c,p,3),x\u003du(m.length),S\u003d0,w\u003dr?v(n,x):a?v(n,0):void 0;x\u003eS;S++)if((h||S in m)\u0026\u0026(d\u003dm[S],y\u003db(d,S,g),t))if(r)w[S]\u003dy;else if(y)switch(t){case 3:return!0;case 5:return d;case 6:return S;case 2:w.push(d)}else if(s)return!1;return l?-1:f||s?s:w}}},{118:118,119:119,15:15,25:25,47:47}],13:[function(t,n,r){var e\u003dt(3),i\u003dt(119),o\u003dt(47),u\u003dt(118);n.exports\u003dfunction(t,n,r,c,a){e(n);var f\u003di(t),s\u003do(f),l\u003du(f.length),h\u003da?l-1:0,v\u003da?-1:1;if(r\u003c2)for(;;){if(h in s){c\u003ds[h],h+\u003dv;break}if(h+\u003dv,a?h\u003c0:l\u003c\u003dh)throw TypeError(\"Reduce of empty array with no initial value\")}for(;a?h\u003e\u003d0:l\u003eh;h+\u003dv)h in s\u0026\u0026(c\u003dn(c,s[h],h,f));return c}},{118:118,119:119,3:3,47:47}],14:[function(t,n,r){var e\u003dt(51),i\u003dt(49),o\u003dt(128)(\"species\");n.exports\u003dfunction(t){var n;return i(t)\u0026\u0026(n\u003dt.constructor,\"function\"!\u003dtypeof n||n!\u003d\u003dArray\u0026\u0026!i(n.prototype)||(n\u003dvoid 0),e(n)\u0026\u0026null\u003d\u003d\u003d(n\u003dn[o])\u0026\u0026(n\u003dvoid 0)),void 0\u003d\u003d\u003dn?Array:n}},{128:128,49:49,51:51}],15:[function(t,n,r){var e\u003dt(14);n.exports\u003dfunction(t,n){return new(e(t))(n)}},{14:14}],16:[function(t,n,r){\"use strict\";var e\u003dt(3),i\u003dt(51),o\u003dt(46),u\u003d[].slice,c\u003d{},a\u003dfunction(t,n,r){if(!(n in c)){for(var e\u003d[],i\u003d0;i\u003cn;i++)e[i]\u003d\"a[\"+i+\"]\";c[n]\u003dFunction(\"F,a\",\"return new F(\"+e.join(\",\")+\")\")}return c[n](t,r)};n.exports\u003dFunction.bind||function bind(t){var n\u003de(this),r\u003du.call(arguments,1),c\u003dfunction(){var e\u003dr.concat(u.call(arguments));return this instanceof c?a(n,e.length,e):o(n,e,t)};return i(n.prototype)\u0026\u0026(c.prototype\u003dn.prototype),c}},{3:3,46:46,51:51}],17:[function(t,n,r){var e\u003dt(18),i\u003dt(128)(\"toStringTag\"),o\u003d\"Arguments\"\u003d\u003de(function(){return arguments}()),u\u003dfunction(t,n){try{return t[n]}catch(t){}};n.exports\u003dfunction(t){var n,r,c;return void 0\u003d\u003d\u003dt?\"Undefined\":null\u003d\u003d\u003dt?\"Null\":\"string\"\u003d\u003dtypeof(r\u003du(n\u003dObject(t),i))?r:o?e(n):\"Object\"\u003d\u003d(c\u003de(n))\u0026\u0026\"function\"\u003d\u003dtypeof n.callee?\"Arguments\":c}},{128:128,18:18}],18:[function(t,n,r){var e\u003d{}.toString;n.exports\u003dfunction(t){return e.call(t).slice(8,-1)}},{}],19:[function(t,n,r){\"use strict\";var e\u003dt(72).f,i\u003dt(71),o\u003dt(93),u\u003dt(25),c\u003dt(6),a\u003dt(39),f\u003dt(55),s\u003dt(57),l\u003dt(100),h\u003dt(29),v\u003dt(66).fastKey,p\u003dt(125),d\u003dh?\"_s\":\"size\",y\u003dfunction(t,n){var r,e\u003dv(n);if(\"F\"!\u003d\u003de)return t._i[e];for(r\u003dt._f;r;r\u003dr.n)if(r.k\u003d\u003dn)return r};n.exports\u003d{getConstructor:function(t,n,r,f){var s\u003dt(function(t,e){c(t,s,n,\"_i\"),t._t\u003dn,t._i\u003di(null),t._f\u003dvoid 0,t._l\u003dvoid 0,t[d]\u003d0,void 0!\u003de\u0026\u0026a(e,r,t[f],t)});return o(s.prototype,{clear:function clear(){for(var t\u003dp(this,n),r\u003dt._i,e\u003dt._f;e;e\u003de.n)e.r\u003d!0,e.p\u0026\u0026(e.p\u003de.p.n\u003dvoid 0),delete r[e.i];t._f\u003dt._l\u003dvoid 0,t[d]\u003d0},delete:function(t){var r\u003dp(this,n),e\u003dy(r,t);if(e){var i\u003de.n,o\u003de.p;delete r._i[e.i],e.r\u003d!0,o\u0026\u0026(o.n\u003di),i\u0026\u0026(i.p\u003do),r._f\u003d\u003de\u0026\u0026(r._f\u003di),r._l\u003d\u003de\u0026\u0026(r._l\u003do),r[d]--}return!!e},forEach:function forEach(t){p(this,n);for(var r,e\u003du(t,arguments.length\u003e1?arguments[1]:void 0,3);r\u003dr?r.n:this._f;)for(e(r.v,r.k,this);r\u0026\u0026r.r;)r\u003dr.p},has:function has(t){return!!y(p(this,n),t)}}),h\u0026\u0026e(s.prototype,\"size\",{get:function(){return p(this,n)[d]}}),s},def:function(t,n,r){var e,i,o\u003dy(t,n);return o?o.v\u003dr:(t._l\u003do\u003d{i:i\u003dv(n,!0),k:n,v:r,p:e\u003dt._l,n:void 0,r:!1},t._f||(t._f\u003do),e\u0026\u0026(e.n\u003do),t[d]++,\"F\"!\u003d\u003di\u0026\u0026(t._i[i]\u003do)),t},getEntry:y,setStrong:function(t,n,r){f(t,n,function(t,r){this._t\u003dp(t,n),this._k\u003dr,this._l\u003dvoid 0},function(){for(var t\u003dthis,n\u003dt._k,r\u003dt._l;r\u0026\u0026r.r;)r\u003dr.p;return t._t\u0026\u0026(t._l\u003dr\u003dr?r.n:t._t._f)?\"keys\"\u003d\u003dn?s(0,r.k):\"values\"\u003d\u003dn?s(0,r.v):s(0,[r.k,r.v]):(t._t\u003dvoid 0,s(1))},r?\"entries\":\"values\",!r,!0),l(n)}}},{100:100,125:125,25:25,29:29,39:39,55:55,57:57,6:6,66:66,71:71,72:72,93:93}],20:[function(t,n,r){var e\u003dt(17),i\u003dt(10);n.exports\u003dfunction(t){return function toJSON(){if(e(this)!\u003dt)throw TypeError(t+\"#toJSON isn\u0027t generic\");return i(this)}}},{10:10,17:17}],21:[function(t,n,r){\"use strict\";var e\u003dt(93),i\u003dt(66).getWeak,o\u003dt(7),u\u003dt(51),c\u003dt(6),a\u003dt(39),f\u003dt(12),s\u003dt(41),l\u003dt(125),h\u003df(5),v\u003df(6),p\u003d0,d\u003dfunction(t){return t._l||(t._l\u003dnew y)},y\u003dfunction(){this.a\u003d[]},g\u003dfunction(t,n){return h(t.a,function(t){return t[0]\u003d\u003d\u003dn})};y.prototype\u003d{get:function(t){var n\u003dg(this,t);if(n)return n[1]},has:function(t){return!!g(this,t)},set:function(t,n){var r\u003dg(this,t);r?r[1]\u003dn:this.a.push([t,n])},delete:function(t){var n\u003dv(this.a,function(n){return n[0]\u003d\u003d\u003dt});return~n\u0026\u0026this.a.splice(n,1),!!~n}},n.exports\u003d{getConstructor:function(t,n,r,o){var f\u003dt(function(t,e){c(t,f,n,\"_i\"),t._t\u003dn,t._i\u003dp++,t._l\u003dvoid 0,void 0!\u003de\u0026\u0026a(e,r,t[o],t)});return e(f.prototype,{delete:function(t){if(!u(t))return!1;var r\u003di(t);return!0\u003d\u003d\u003dr?d(l(this,n)).delete(t):r\u0026\u0026s(r,this._i)\u0026\u0026delete r[this._i]},has:function has(t){if(!u(t))return!1;var r\u003di(t);return!0\u003d\u003d\u003dr?d(l(this,n)).has(t):r\u0026\u0026s(r,this._i)}}),f},def:function(t,n,r){var e\u003di(o(n),!0);return!0\u003d\u003d\u003de?d(t).set(n,r):e[t._i]\u003dr,t},ufstore:d}},{12:12,125:125,39:39,41:41,51:51,6:6,66:66,7:7,93:93}],22:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(33),o\u003dt(94),u\u003dt(93),c\u003dt(66),a\u003dt(39),f\u003dt(6),s\u003dt(51),l\u003dt(35),h\u003dt(56),v\u003dt(101),p\u003dt(45);n.exports\u003dfunction(t,n,r,d,y,g){var m\u003de[t],b\u003dm,x\u003dy?\"set\":\"add\",S\u003db\u0026\u0026b.prototype,w\u003d{},_\u003dfunction(t){var n\u003dS[t];o(S,t,\"delete\"\u003d\u003dt?function(t){return!(g\u0026\u0026!s(t))\u0026\u0026n.call(this,0\u003d\u003d\u003dt?0:t)}:\"has\"\u003d\u003dt?function has(t){return!(g\u0026\u0026!s(t))\u0026\u0026n.call(this,0\u003d\u003d\u003dt?0:t)}:\"get\"\u003d\u003dt?function get(t){return g\u0026\u0026!s(t)?void 0:n.call(this,0\u003d\u003d\u003dt?0:t)}:\"add\"\u003d\u003dt?function add(t){return n.call(this,0\u003d\u003d\u003dt?0:t),this}:function set(t,r){return n.call(this,0\u003d\u003d\u003dt?0:t,r),this})};if(\"function\"\u003d\u003dtypeof b\u0026\u0026(g||S.forEach\u0026\u0026!l(function(){(new b).entries().next()}))){var E\u003dnew b,O\u003dE[x](g?{}:-0,1)!\u003dE,P\u003dl(function(){E.has(1)}),M\u003dh(function(t){new b(t)}),F\u003d!g\u0026\u0026l(function(){for(var t\u003dnew b,n\u003d5;n--;)t[x](n,n);return!t.has(-0)});M||(b\u003dn(function(n,r){f(n,b,t);var e\u003dp(new m,n,b);return void 0!\u003dr\u0026\u0026a(r,y,e[x],e),e}),b.prototype\u003dS,S.constructor\u003db),(P||F)\u0026\u0026(_(\"delete\"),_(\"has\"),y\u0026\u0026_(\"get\")),(F||O)\u0026\u0026_(x),g\u0026\u0026S.clear\u0026\u0026delete S.clear}else b\u003dd.getConstructor(n,t,y,x),u(b.prototype,r),c.NEED\u003d!0;return v(b,t),w[t]\u003db,i(i.G+i.W+i.F*(b!\u003dm),w),g||d.setStrong(b,t,y),b}},{101:101,33:33,35:35,39:39,40:40,45:45,51:51,56:56,6:6,66:66,93:93,94:94}],23:[function(t,n,r){var e\u003dn.exports\u003d{version:\"2.5.0\"};\"number\"\u003d\u003dtypeof __e\u0026\u0026(__e\u003de)},{}],24:[function(t,n,r){\"use strict\";var e\u003dt(72),i\u003dt(92);n.exports\u003dfunction(t,n,r){n in t?e.f(t,n,i(0,r)):t[n]\u003dr}},{72:72,92:92}],25:[function(t,n,r){var e\u003dt(3);n.exports\u003dfunction(t,n,r){if(e(t),void 0\u003d\u003d\u003dn)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,i){return t.call(n,r,e,i)}}return function(){return t.apply(n,arguments)}}},{3:3}],26:[function(t,n,r){\"use strict\";var e\u003dt(35),i\u003dDate.prototype.getTime,o\u003dDate.prototype.toISOString,u\u003dfunction(t){return t\u003e9?t:\"0\"+t};n.exports\u003de(function(){return\"0385-07-25T07:06:39.999Z\"!\u003do.call(new Date(-5e13-1))})||!e(function(){o.call(new Date(NaN))})?function toISOString(){if(!isFinite(i.call(this)))throw RangeError(\"Invalid time value\");var t\u003dthis,n\u003dt.getUTCFullYear(),r\u003dt.getUTCMilliseconds(),e\u003dn\u003c0?\"-\":n\u003e9999?\"+\":\"\";return e+(\"00000\"+Math.abs(n)).slice(e?-6:-4)+\"-\"+u(t.getUTCMonth()+1)+\"-\"+u(t.getUTCDate())+\"T\"+u(t.getUTCHours())+\":\"+u(t.getUTCMinutes())+\":\"+u(t.getUTCSeconds())+\".\"+(r\u003e99?r:\"0\"+u(r))+\"Z\"}:o},{35:35}],27:[function(t,n,r){\"use strict\";var e\u003dt(7),i\u003dt(120);n.exports\u003dfunction(t){if(\"string\"!\u003d\u003dt\u0026\u0026\"number\"!\u003d\u003dt\u0026\u0026\"default\"!\u003d\u003dt)throw TypeError(\"Incorrect hint\");return i(e(this),\"number\"!\u003dt)}},{120:120,7:7}],28:[function(t,n,r){n.exports\u003dfunction(t){if(void 0\u003d\u003dt)throw TypeError(\"Can\u0027t call method on \"+t);return t}},{}],29:[function(t,n,r){n.exports\u003d!t(35)(function(){return 7!\u003dObject.defineProperty({},\"a\",{get:function(){return 7}}).a})},{35:35}],30:[function(t,n,r){var e\u003dt(51),i\u003dt(40).document,o\u003de(i)\u0026\u0026e(i.createElement);n.exports\u003dfunction(t){return o?i.createElement(t):{}}},{40:40,51:51}],31:[function(t,n,r){n.exports\u003d\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},{}],32:[function(t,n,r){var e\u003dt(81),i\u003dt(78),o\u003dt(82);n.exports\u003dfunction(t){var n\u003de(t),r\u003di.f;if(r)for(var u,c\u003dr(t),a\u003do.f,f\u003d0;c.length\u003ef;)a.call(t,u\u003dc[f++])\u0026\u0026n.push(u);return n}},{78:78,81:81,82:82}],33:[function(t,n,r){var e\u003dt(40),i\u003dt(23),o\u003dt(42),u\u003dt(94),c\u003dt(25),a\u003dfunction(t,n,r){var f,s,l,h,v\u003dt\u0026a.F,p\u003dt\u0026a.G,d\u003dt\u0026a.S,y\u003dt\u0026a.P,g\u003dt\u0026a.B,m\u003dp?e:d?e[n]||(e[n]\u003d{}):(e[n]||{}).prototype,b\u003dp?i:i[n]||(i[n]\u003d{}),x\u003db.prototype||(b.prototype\u003d{});p\u0026\u0026(r\u003dn);for(f in r)s\u003d!v\u0026\u0026m\u0026\u0026void 0!\u003d\u003dm[f],l\u003d(s?m:r)[f],h\u003dg\u0026\u0026s?c(l,e):y\u0026\u0026\"function\"\u003d\u003dtypeof l?c(Function.call,l):l,m\u0026\u0026u(m,f,l,t\u0026a.U),b[f]!\u003dl\u0026\u0026o(b,f,h),y\u0026\u0026x[f]!\u003dl\u0026\u0026(x[f]\u003dl)};e.core\u003di,a.F\u003d1,a.G\u003d2,a.S\u003d4,a.P\u003d8,a.B\u003d16,a.W\u003d32,a.U\u003d64,a.R\u003d128,n.exports\u003da},{23:23,25:25,40:40,42:42,94:94}],34:[function(t,n,r){var e\u003dt(128)(\"match\");n.exports\u003dfunction(t){var n\u003d/./;try{\"/./\"[t](n)}catch(r){try{return n[e]\u003d!1,!\"/./\"[t](n)}catch(t){}}return!0}},{128:128}],35:[function(t,n,r){n.exports\u003dfunction(t){try{return!!t()}catch(t){return!0}}},{}],36:[function(t,n,r){\"use strict\";var e\u003dt(42),i\u003dt(94),o\u003dt(35),u\u003dt(28),c\u003dt(128);n.exports\u003dfunction(t,n,r){var a\u003dc(t),f\u003dr(u,a,\"\"[t]),s\u003df[0],l\u003df[1];o(function(){var n\u003d{};return n[a]\u003dfunction(){return 7},7!\u003d\"\"[t](n)})\u0026\u0026(i(String.prototype,t,s),e(RegExp.prototype,a,2\u003d\u003dn?function(t,n){return l.call(t,this,n)}:function(t){return l.call(t,this)}))}},{128:128,28:28,35:35,42:42,94:94}],37:[function(t,n,r){\"use strict\";var e\u003dt(7);n.exports\u003dfunction(){var t\u003de(this),n\u003d\"\";return t.global\u0026\u0026(n+\u003d\"g\"),t.ignoreCase\u0026\u0026(n+\u003d\"i\"),t.multiline\u0026\u0026(n+\u003d\"m\"),t.unicode\u0026\u0026(n+\u003d\"u\"),t.sticky\u0026\u0026(n+\u003d\"y\"),n}},{7:7}],38:[function(t,n,r){\"use strict\";function flattenIntoArray(t,n,r,a,f,s,l,h){for(var v,p,d\u003df,y\u003d0,g\u003d!!l\u0026\u0026u(l,h,3);y\u003ca;){if(y in r){if(v\u003dg?g(r[y],y,n):r[y],p\u003d!1,i(v)\u0026\u0026(p\u003dv[c],p\u003dvoid 0!\u003d\u003dp?!!p:e(v)),p\u0026\u0026s\u003e0)d\u003dflattenIntoArray(t,n,v,o(v.length),d,s-1)-1;else{if(d\u003e\u003d9007199254740991)throw TypeError();t[d]\u003dv}d++}y++}return d}var e\u003dt(49),i\u003dt(51),o\u003dt(118),u\u003dt(25),c\u003dt(128)(\"isConcatSpreadable\");n.exports\u003dflattenIntoArray},{118:118,128:128,25:25,49:49,51:51}],39:[function(t,n,r){var e\u003dt(25),i\u003dt(53),o\u003dt(48),u\u003dt(7),c\u003dt(118),a\u003dt(129),f\u003d{},s\u003d{},r\u003dn.exports\u003dfunction(t,n,r,l,h){var v,p,d,y,g\u003dh?function(){return t}:a(t),m\u003de(r,l,n?2:1),b\u003d0;if(\"function\"!\u003dtypeof g)throw TypeError(t+\" is not iterable!\");if(o(g)){for(v\u003dc(t.length);v\u003eb;b++)if((y\u003dn?m(u(p\u003dt[b])[0],p[1]):m(t[b]))\u003d\u003d\u003df||y\u003d\u003d\u003ds)return y}else for(d\u003dg.call(t);!(p\u003dd.next()).done;)if((y\u003di(d,m,p.value,n))\u003d\u003d\u003df||y\u003d\u003d\u003ds)return y};r.BREAK\u003df,r.RETURN\u003ds},{118:118,129:129,25:25,48:48,53:53,7:7}],40:[function(t,n,r){var e\u003dn.exports\u003d\"undefined\"!\u003dtypeof window\u0026\u0026window.Math\u003d\u003dMath?window:\"undefined\"!\u003dtypeof self\u0026\u0026self.Math\u003d\u003dMath?self:Function(\"return this\")();\"number\"\u003d\u003dtypeof __g\u0026\u0026(__g\u003de)},{}],41:[function(t,n,r){var e\u003d{}.hasOwnProperty;n.exports\u003dfunction(t,n){return e.call(t,n)}},{}],42:[function(t,n,r){var e\u003dt(72),i\u003dt(92);n.exports\u003dt(29)?function(t,n,r){return e.f(t,n,i(1,r))}:function(t,n,r){return t[n]\u003dr,t}},{29:29,72:72,92:92}],43:[function(t,n,r){var e\u003dt(40).document;n.exports\u003de\u0026\u0026e.documentElement},{40:40}],44:[function(t,n,r){n.exports\u003d!t(29)\u0026\u0026!t(35)(function(){return 7!\u003dObject.defineProperty(t(30)(\"div\"),\"a\",{get:function(){return 7}}).a})},{29:29,30:30,35:35}],45:[function(t,n,r){var e\u003dt(51),i\u003dt(99).set;n.exports\u003dfunction(t,n,r){var o,u\u003dn.constructor;return u!\u003d\u003dr\u0026\u0026\"function\"\u003d\u003dtypeof u\u0026\u0026(o\u003du.prototype)!\u003d\u003dr.prototype\u0026\u0026e(o)\u0026\u0026i\u0026\u0026i(t,o),t}},{51:51,99:99}],46:[function(t,n,r){n.exports\u003dfunction(t,n,r){var e\u003dvoid 0\u003d\u003d\u003dr;switch(n.length){case 0:return e?t():t.call(r);case 1:return e?t(n[0]):t.call(r,n[0]);case 2:return e?t(n[0],n[1]):t.call(r,n[0],n[1]);case 3:return e?t(n[0],n[1],n[2]):t.call(r,n[0],n[1],n[2]);case 4:return e?t(n[0],n[1],n[2],n[3]):t.call(r,n[0],n[1],n[2],n[3])}return t.apply(r,n)}},{}],47:[function(t,n,r){var e\u003dt(18);n.exports\u003dObject(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"\u003d\u003de(t)?t.split(\"\"):Object(t)}},{18:18}],48:[function(t,n,r){var e\u003dt(58),i\u003dt(128)(\"iterator\"),o\u003dArray.prototype;n.exports\u003dfunction(t){return void 0!\u003d\u003dt\u0026\u0026(e.Array\u003d\u003d\u003dt||o[i]\u003d\u003d\u003dt)}},{128:128,58:58}],49:[function(t,n,r){var e\u003dt(18);n.exports\u003dArray.isArray||function isArray(t){return\"Array\"\u003d\u003de(t)}},{18:18}],50:[function(t,n,r){var e\u003dt(51),i\u003dMath.floor;n.exports\u003dfunction isInteger(t){return!e(t)\u0026\u0026isFinite(t)\u0026\u0026i(t)\u003d\u003d\u003dt}},{51:51}],51:[function(t,n,r){n.exports\u003dfunction(t){return\"object\"\u003d\u003dtypeof t?null!\u003d\u003dt:\"function\"\u003d\u003dtypeof t}},{}],52:[function(t,n,r){var e\u003dt(51),i\u003dt(18),o\u003dt(128)(\"match\");n.exports\u003dfunction(t){var n;return e(t)\u0026\u0026(void 0!\u003d\u003d(n\u003dt[o])?!!n:\"RegExp\"\u003d\u003di(t))}},{128:128,18:18,51:51}],53:[function(t,n,r){var e\u003dt(7);n.exports\u003dfunction(t,n,r,i){try{return i?n(e(r)[0],r[1]):n(r)}catch(n){var o\u003dt.return;throw void 0!\u003d\u003do\u0026\u0026e(o.call(t)),n}}},{7:7}],54:[function(t,n,r){\"use strict\";var e\u003dt(71),i\u003dt(92),o\u003dt(101),u\u003d{};t(42)(u,t(128)(\"iterator\"),function(){return this}),n.exports\u003dfunction(t,n,r){t.prototype\u003de(u,{next:i(1,r)}),o(t,n+\" Iterator\")}},{101:101,128:128,42:42,71:71,92:92}],55:[function(t,n,r){\"use strict\";var e\u003dt(60),i\u003dt(33),o\u003dt(94),u\u003dt(42),c\u003dt(41),a\u003dt(58),f\u003dt(54),s\u003dt(101),l\u003dt(79),h\u003dt(128)(\"iterator\"),v\u003d!([].keys\u0026\u0026\"next\"in[].keys()),p\u003dfunction(){return this};n.exports\u003dfunction(t,n,r,d,y,g,m){f(r,n,d);var b,x,S,w\u003dfunction(t){if(!v\u0026\u0026t in P)return P[t];switch(t){case\"keys\":return function keys(){return new r(this,t)};case\"values\":return function values(){return new r(this,t)}}return function entries(){return new r(this,t)}},_\u003dn+\" Iterator\",E\u003d\"values\"\u003d\u003dy,O\u003d!1,P\u003dt.prototype,M\u003dP[h]||P[\"@@iterator\"]||y\u0026\u0026P[y],F\u003dM||w(y),I\u003dy?E?w(\"entries\"):F:void 0,A\u003d\"Array\"\u003d\u003dn?P.entries||M:M;if(A\u0026\u0026(S\u003dl(A.call(new t)))!\u003d\u003dObject.prototype\u0026\u0026S.next\u0026\u0026(s(S,_,!0),e||c(S,h)||u(S,h,p)),E\u0026\u0026M\u0026\u0026\"values\"!\u003d\u003dM.name\u0026\u0026(O\u003d!0,F\u003dfunction values(){return M.call(this)}),e\u0026\u0026!m||!v\u0026\u0026!O\u0026\u0026P[h]||u(P,h,F),a[n]\u003dF,a[_]\u003dp,y)if(b\u003d{values:E?F:w(\"values\"),keys:g?F:w(\"keys\"),entries:I},m)for(x in b)x in P||o(P,x,b[x]);else i(i.P+i.F*(v||O),n,b);return b}},{101:101,128:128,33:33,41:41,42:42,54:54,58:58,60:60,79:79,94:94}],56:[function(t,n,r){var e\u003dt(128)(\"iterator\"),i\u003d!1;try{var o\u003d[7][e]();o.return\u003dfunction(){i\u003d!0},Array.from(o,function(){throw 2})}catch(t){}n.exports\u003dfunction(t,n){if(!n\u0026\u0026!i)return!1;var r\u003d!1;try{var o\u003d[7],u\u003do[e]();u.next\u003dfunction(){return{done:r\u003d!0}},o[e]\u003dfunction(){return u},t(o)}catch(t){}return r}},{128:128}],57:[function(t,n,r){n.exports\u003dfunction(t,n){return{value:n,done:!!t}}},{}],58:[function(t,n,r){n.exports\u003d{}},{}],59:[function(t,n,r){var e\u003dt(81),i\u003dt(117);n.exports\u003dfunction(t,n){for(var r,o\u003di(t),u\u003de(o),c\u003du.length,a\u003d0;c\u003ea;)if(o[r\u003du[a++]]\u003d\u003d\u003dn)return r}},{117:117,81:81}],60:[function(t,n,r){n.exports\u003d!1},{}],61:[function(t,n,r){var e\u003dMath.expm1;n.exports\u003d!e||e(10)\u003e22025.465794806718||e(10)\u003c22025.465794806718||-2e-17!\u003de(-2e-17)?function expm1(t){return 0\u003d\u003d(t\u003d+t)?t:t\u003e-1e-6\u0026\u0026t\u003c1e-6?t+t*t/2:Math.exp(t)-1}:e},{}],62:[function(t,n,r){var e\u003dt(65),i\u003dMath.pow,o\u003di(2,-52),u\u003di(2,-23),c\u003di(2,127)*(2-u),a\u003di(2,-126),f\u003dfunction(t){return t+1/o-1/o};n.exports\u003dMath.fround||function fround(t){var n,r,i\u003dMath.abs(t),s\u003de(t);return i\u003ca?s*f(i/a/u)*a*u:(n\u003d(1+u/o)*i,r\u003dn-(n-i),r\u003ec||r!\u003dr?s*(1/0):s*r)}},{65:65}],63:[function(t,n,r){n.exports\u003dMath.log1p||function log1p(t){return(t\u003d+t)\u003e-1e-8\u0026\u0026t\u003c1e-8?t-t*t/2:Math.log(1+t)}},{}],64:[function(t,n,r){n.exports\u003dMath.scale||function scale(t,n,r,e,i){return 0\u003d\u003d\u003darguments.length||t!\u003dt||n!\u003dn||r!\u003dr||e!\u003de||i!\u003di?NaN:t\u003d\u003d\u003d1/0||t\u003d\u003d\u003d-1/0?t:(t-n)*(i-e)/(r-n)+e}},{}],65:[function(t,n,r){n.exports\u003dMath.sign||function sign(t){return 0\u003d\u003d(t\u003d+t)||t!\u003dt?t:t\u003c0?-1:1}},{}],66:[function(t,n,r){var e\u003dt(124)(\"meta\"),i\u003dt(51),o\u003dt(41),u\u003dt(72).f,c\u003d0,a\u003dObject.isExtensible||function(){return!0},f\u003d!t(35)(function(){return a(Object.preventExtensions({}))}),s\u003dfunction(t){u(t,e,{value:{i:\"O\"+ ++c,w:{}}})},l\u003dfunction(t,n){if(!i(t))return\"symbol\"\u003d\u003dtypeof t?t:(\"string\"\u003d\u003dtypeof t?\"S\":\"P\")+t;if(!o(t,e)){if(!a(t))return\"F\";if(!n)return\"E\";s(t)}return t[e].i},h\u003dfunction(t,n){if(!o(t,e)){if(!a(t))return!0;if(!n)return!1;s(t)}return t[e].w},v\u003dfunction(t){return f\u0026\u0026p.NEED\u0026\u0026a(t)\u0026\u0026!o(t,e)\u0026\u0026s(t),t},p\u003dn.exports\u003d{KEY:e,NEED:!1,fastKey:l,getWeak:h,onFreeze:v}},{124:124,35:35,41:41,51:51,72:72}],67:[function(t,n,r){var e\u003dt(160),i\u003dt(33),o\u003dt(103)(\"metadata\"),u\u003do.store||(o.store\u003dnew(t(266))),c\u003dfunction(t,n,r){var i\u003du.get(t);if(!i){if(!r)return;u.set(t,i\u003dnew e)}var o\u003di.get(n);if(!o){if(!r)return;i.set(n,o\u003dnew e)}return o},a\u003dfunction(t,n,r){var e\u003dc(n,r,!1);return void 0!\u003d\u003de\u0026\u0026e.has(t)},f\u003dfunction(t,n,r){var e\u003dc(n,r,!1);return void 0\u003d\u003d\u003de?void 0:e.get(t)},s\u003dfunction(t,n,r,e){c(r,e,!0).set(t,n)},l\u003dfunction(t,n){var r\u003dc(t,n,!1),e\u003d[];return r\u0026\u0026r.forEach(function(t,n){e.push(n)}),e},h\u003dfunction(t){return void 0\u003d\u003d\u003dt||\"symbol\"\u003d\u003dtypeof t?t:String(t)},v\u003dfunction(t){i(i.S,\"Reflect\",t)};n.exports\u003d{store:u,map:c,has:a,get:f,set:s,keys:l,key:h,exp:v}},{103:103,160:160,266:266,33:33}],68:[function(t,n,r){var e\u003dt(40),i\u003dt(113).set,o\u003de.MutationObserver||e.WebKitMutationObserver,u\u003de.process,c\u003de.Promise,a\u003d\"process\"\u003d\u003dt(18)(u);n.exports\u003dfunction(){var t,n,r,f\u003dfunction(){var e,i;for(a\u0026\u0026(e\u003du.domain)\u0026\u0026e.exit();t;){i\u003dt.fn,t\u003dt.next;try{i()}catch(e){throw t?r():n\u003dvoid 0,e}}n\u003dvoid 0,e\u0026\u0026e.enter()};if(a)r\u003dfunction(){u.nextTick(f)};else if(o){var s\u003d!0,l\u003ddocument.createTextNode(\"\");new o(f).observe(l,{characterData:!0}),r\u003dfunction(){l.data\u003ds\u003d!s}}else if(c\u0026\u0026c.resolve){var h\u003dc.resolve();r\u003dfunction(){h.then(f)}}else r\u003dfunction(){i.call(e,f)};return function(e){var i\u003d{fn:e,next:void 0};n\u0026\u0026(n.next\u003di),t||(t\u003di,r()),n\u003di}}},{113:113,18:18,40:40}],69:[function(t,n,r){\"use strict\";function PromiseCapability(t){var n,r;this.promise\u003dnew t(function(t,e){if(void 0!\u003d\u003dn||void 0!\u003d\u003dr)throw TypeError(\"Bad Promise constructor\");n\u003dt,r\u003de}),this.resolve\u003de(n),this.reject\u003de(r)}var e\u003dt(3);n.exports.f\u003dfunction(t){return new PromiseCapability(t)}},{3:3}],70:[function(t,n,r){\"use strict\";var e\u003dt(81),i\u003dt(78),o\u003dt(82),u\u003dt(119),c\u003dt(47),a\u003dObject.assign;n.exports\u003d!a||t(35)(function(){var t\u003d{},n\u003d{},r\u003dSymbol(),e\u003d\"abcdefghijklmnopqrst\";return t[r]\u003d7,e.split(\"\").forEach(function(t){n[t]\u003dt}),7!\u003da({},t)[r]||Object.keys(a({},n)).join(\"\")!\u003de})?function assign(t,n){for(var r\u003du(t),a\u003darguments.length,f\u003d1,s\u003di.f,l\u003do.f;a\u003ef;)for(var h,v\u003dc(arguments[f++]),p\u003ds?e(v).concat(s(v)):e(v),d\u003dp.length,y\u003d0;d\u003ey;)l.call(v,h\u003dp[y++])\u0026\u0026(r[h]\u003dv[h]);return r}:a},{119:119,35:35,47:47,78:78,81:81,82:82}],71:[function(t,n,r){var e\u003dt(7),i\u003dt(73),o\u003dt(31),u\u003dt(102)(\"IE_PROTO\"),c\u003dfunction(){},a\u003dfunction(){var n,r\u003dt(30)(\"iframe\"),e\u003do.length;for(r.style.display\u003d\"none\",t(43).appendChild(r),r.src\u003d\"javascript:\",n\u003dr.contentWindow.document,n.open(),n.write(\"\u003cscript\u003edocument.F\u003dObject\u003c\\/script\u003e\"),n.close(),a\u003dn.F;e--;)delete a.prototype[o[e]];return a()};n.exports\u003dObject.create||function create(t,n){var r;return null!\u003d\u003dt?(c.prototype\u003de(t),r\u003dnew c,c.prototype\u003dnull,r[u]\u003dt):r\u003da(),void 0\u003d\u003d\u003dn?r:i(r,n)}},{102:102,30:30,31:31,43:43,7:7,73:73}],72:[function(t,n,r){var e\u003dt(7),i\u003dt(44),o\u003dt(120),u\u003dObject.defineProperty;r.f\u003dt(29)?Object.defineProperty:function defineProperty(t,n,r){if(e(t),n\u003do(n,!0),e(r),i)try{return u(t,n,r)}catch(t){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported!\");return\"value\"in r\u0026\u0026(t[n]\u003dr.value),t}},{120:120,29:29,44:44,7:7}],73:[function(t,n,r){var e\u003dt(72),i\u003dt(7),o\u003dt(81);n.exports\u003dt(29)?Object.defineProperties:function defineProperties(t,n){i(t);for(var r,u\u003do(n),c\u003du.length,a\u003d0;c\u003ea;)e.f(t,r\u003du[a++],n[r]);return t}},{29:29,7:7,72:72,81:81}],74:[function(t,n,r){\"use strict\";n.exports\u003dt(60)||!t(35)(function(){var n\u003dMath.random();__defineSetter__.call(null,n,function(){}),delete t(40)[n]})},{35:35,40:40,60:60}],75:[function(t,n,r){var e\u003dt(82),i\u003dt(92),o\u003dt(117),u\u003dt(120),c\u003dt(41),a\u003dt(44),f\u003dObject.getOwnPropertyDescriptor;r.f\u003dt(29)?f:function getOwnPropertyDescriptor(t,n){if(t\u003do(t),n\u003du(n,!0),a)try{return f(t,n)}catch(t){}if(c(t,n))return i(!e.f.call(t,n),t[n])}},{117:117,120:120,29:29,41:41,44:44,82:82,92:92}],76:[function(t,n,r){var e\u003dt(117),i\u003dt(77).f,o\u003d{}.toString,u\u003d\"object\"\u003d\u003dtypeof window\u0026\u0026window\u0026\u0026Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c\u003dfunction(t){try{return i(t)}catch(t){return u.slice()}};n.exports.f\u003dfunction getOwnPropertyNames(t){return u\u0026\u0026\"[object Window]\"\u003d\u003do.call(t)?c(t):i(e(t))}},{117:117,77:77}],77:[function(t,n,r){var e\u003dt(80),i\u003dt(31).concat(\"length\",\"prototype\");r.f\u003dObject.getOwnPropertyNames||function getOwnPropertyNames(t){return e(t,i)}},{31:31,80:80}],78:[function(t,n,r){r.f\u003dObject.getOwnPropertySymbols},{}],79:[function(t,n,r){var e\u003dt(41),i\u003dt(119),o\u003dt(102)(\"IE_PROTO\"),u\u003dObject.prototype;n.exports\u003dObject.getPrototypeOf||function(t){return t\u003di(t),e(t,o)?t[o]:\"function\"\u003d\u003dtypeof t.constructor\u0026\u0026t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},{102:102,119:119,41:41}],80:[function(t,n,r){var e\u003dt(41),i\u003dt(117),o\u003dt(11)(!1),u\u003dt(102)(\"IE_PROTO\");n.exports\u003dfunction(t,n){var r,c\u003di(t),a\u003d0,f\u003d[];for(r in c)r!\u003du\u0026\u0026e(c,r)\u0026\u0026f.push(r);for(;n.length\u003ea;)e(c,r\u003dn[a++])\u0026\u0026(~o(f,r)||f.push(r));return f}},{102:102,11:11,117:117,41:41}],81:[function(t,n,r){var e\u003dt(80),i\u003dt(31);n.exports\u003dObject.keys||function keys(t){return e(t,i)}},{31:31,80:80}],82:[function(t,n,r){r.f\u003d{}.propertyIsEnumerable},{}],83:[function(t,n,r){var e\u003dt(33),i\u003dt(23),o\u003dt(35);n.exports\u003dfunction(t,n){var r\u003d(i.Object||{})[t]||Object[t],u\u003d{};u[t]\u003dn(r),e(e.S+e.F*o(function(){r(1)}),\"Object\",u)}},{23:23,33:33,35:35}],84:[function(t,n,r){var e\u003dt(81),i\u003dt(117),o\u003dt(82).f;n.exports\u003dfunction(t){return function(n){for(var r,u\u003di(n),c\u003de(u),a\u003dc.length,f\u003d0,s\u003d[];a\u003ef;)o.call(u,r\u003dc[f++])\u0026\u0026s.push(t?[r,u[r]]:u[r]);return s}}},{117:117,81:81,82:82}],85:[function(t,n,r){var e\u003dt(77),i\u003dt(78),o\u003dt(7),u\u003dt(40).Reflect;n.exports\u003du\u0026\u0026u.ownKeys||function ownKeys(t){var n\u003de.f(o(t)),r\u003di.f;return r?n.concat(r(t)):n}},{40:40,7:7,77:77,78:78}],86:[function(t,n,r){var e\u003dt(40).parseFloat,i\u003dt(111).trim;n.exports\u003d1/e(t(112)+\"-0\")!\u003d-1/0?function parseFloat(t){var n\u003di(String(t),3),r\u003de(n);return 0\u003d\u003d\u003dr\u0026\u0026\"-\"\u003d\u003dn.charAt(0)?-0:r}:e},{111:111,112:112,40:40}],87:[function(t,n,r){var e\u003dt(40).parseInt,i\u003dt(111).trim,o\u003dt(112),u\u003d/^[-+]?0[xX]/;n.exports\u003d8!\u003d\u003de(o+\"08\")||22!\u003d\u003de(o+\"0x16\")?function parseInt(t,n){var r\u003di(String(t),3);return e(r,n\u003e\u003e\u003e0||(u.test(r)?16:10))}:e},{111:111,112:112,40:40}],88:[function(t,n,r){\"use strict\";var e\u003dt(89),i\u003dt(46),o\u003dt(3);n.exports\u003dfunction(){for(var t\u003do(this),n\u003darguments.length,r\u003dArray(n),u\u003d0,c\u003de._,a\u003d!1;n\u003eu;)(r[u]\u003darguments[u++])\u003d\u003d\u003dc\u0026\u0026(a\u003d!0);return function(){var e,o\u003dthis,u\u003darguments.length,f\u003d0,s\u003d0;if(!a\u0026\u0026!u)return i(t,r,o);if(e\u003dr.slice(),a)for(;n\u003ef;f++)e[f]\u003d\u003d\u003dc\u0026\u0026(e[f]\u003darguments[s++]);for(;u\u003es;)e.push(arguments[s++]);return i(t,e,o)}}},{3:3,46:46,89:89}],89:[function(t,n,r){n.exports\u003dt(40)},{40:40}],90:[function(t,n,r){n.exports\u003dfunction(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},{}],91:[function(t,n,r){var e\u003dt(69);n.exports\u003dfunction(t,n){var r\u003de.f(t);return(0,r.resolve)(n),r.promise}},{69:69}],92:[function(t,n,r){n.exports\u003dfunction(t,n){return{enumerable:!(1\u0026t),configurable:!(2\u0026t),writable:!(4\u0026t),value:n}}},{}],93:[function(t,n,r){var e\u003dt(94);n.exports\u003dfunction(t,n,r){for(var i in n)e(t,i,n[i],r);return t}},{94:94}],94:[function(t,n,r){var e\u003dt(40),i\u003dt(42),o\u003dt(41),u\u003dt(124)(\"src\"),c\u003dFunction.toString,a\u003d(\"\"+c).split(\"toString\");t(23).inspectSource\u003dfunction(t){return c.call(t)},(n.exports\u003dfunction(t,n,r,c){var f\u003d\"function\"\u003d\u003dtypeof r;f\u0026\u0026(o(r,\"name\")||i(r,\"name\",n)),t[n]!\u003d\u003dr\u0026\u0026(f\u0026\u0026(o(r,u)||i(r,u,t[n]?\"\"+t[n]:a.join(String(n)))),t\u003d\u003d\u003de?t[n]\u003dr:c?t[n]?t[n]\u003dr:i(t,n,r):(delete t[n],i(t,n,r)))})(Function.prototype,\"toString\",function toString(){return\"function\"\u003d\u003dtypeof this\u0026\u0026this[u]||c.call(this)})},{124:124,23:23,40:40,41:41,42:42}],95:[function(t,n,r){n.exports\u003dfunction(t,n){var r\u003dn\u003d\u003d\u003dObject(n)?function(t){return n[t]}:n;return function(n){return String(n).replace(t,r)}}},{}],96:[function(t,n,r){n.exports\u003dObject.is||function is(t,n){return t\u003d\u003d\u003dn?0!\u003d\u003dt||1/t\u003d\u003d1/n:t!\u003dt\u0026\u0026n!\u003dn}},{}],97:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(3),o\u003dt(25),u\u003dt(39);n.exports\u003dfunction(t){e(e.S,t,{from:function from(t){var n,r,e,c,a\u003darguments[1];return i(this),n\u003dvoid 0!\u003d\u003da,n\u0026\u0026i(a),void 0\u003d\u003dt?new this:(r\u003d[],n?(e\u003d0,c\u003do(a,arguments[2],2),u(t,!1,function(t){r.push(c(t,e++))})):u(t,!1,r.push,r),new this(r))}})}},{25:25,3:3,33:33,39:39}],98:[function(t,n,r){\"use strict\";var e\u003dt(33);n.exports\u003dfunction(t){e(e.S,t,{of:function of(){for(var t\u003darguments.length,n\u003dArray(t);t--;)n[t]\u003darguments[t];return new this(n)}})}},{33:33}],99:[function(t,n,r){var e\u003dt(51),i\u003dt(7),o\u003dfunction(t,n){if(i(t),!e(n)\u0026\u0026null!\u003d\u003dn)throw TypeError(n+\": can\u0027t set as prototype!\")};n.exports\u003d{set:Object.setPrototypeOf||(\"__proto__\"in{}?function(n,r,e){try{e\u003dt(25)(Function.call,t(75).f(Object.prototype,\"__proto__\").set,2),e(n,[]),r\u003d!(n instanceof Array)}catch(t){r\u003d!0}return function setPrototypeOf(t,n){return o(t,n),r?t.__proto__\u003dn:e(t,n),t}}({},!1):void 0),check:o}},{25:25,51:51,7:7,75:75}],100:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(72),o\u003dt(29),u\u003dt(128)(\"species\");n.exports\u003dfunction(t){var n\u003de[t];o\u0026\u0026n\u0026\u0026!n[u]\u0026\u0026i.f(n,u,{configurable:!0,get:function(){return this}})}},{128:128,29:29,40:40,72:72}],101:[function(t,n,r){var e\u003dt(72).f,i\u003dt(41),o\u003dt(128)(\"toStringTag\");n.exports\u003dfunction(t,n,r){t\u0026\u0026!i(t\u003dr?t:t.prototype,o)\u0026\u0026e(t,o,{configurable:!0,value:n})}},{128:128,41:41,72:72}],102:[function(t,n,r){var e\u003dt(103)(\"keys\"),i\u003dt(124);n.exports\u003dfunction(t){return e[t]||(e[t]\u003di(t))}},{103:103,124:124}],103:[function(t,n,r){var e\u003dt(40),i\u003de[\"__core-js_shared__\"]||(e[\"__core-js_shared__\"]\u003d{});n.exports\u003dfunction(t){return i[t]||(i[t]\u003d{})}},{40:40}],104:[function(t,n,r){var e\u003dt(7),i\u003dt(3),o\u003dt(128)(\"species\");n.exports\u003dfunction(t,n){var r,u\u003de(t).constructor;return void 0\u003d\u003d\u003du||void 0\u003d\u003d(r\u003de(u)[o])?n:i(r)}},{128:128,3:3,7:7}],105:[function(t,n,r){\"use strict\";var e\u003dt(35);n.exports\u003dfunction(t,n){return!!t\u0026\u0026e(function(){n?t.call(null,function(){},1):t.call(null)})}},{35:35}],106:[function(t,n,r){var e\u003dt(116),i\u003dt(28);n.exports\u003dfunction(t){return function(n,r){var o,u,c\u003dString(i(n)),a\u003de(r),f\u003dc.length;return a\u003c0||a\u003e\u003df?t?\"\":void 0:(o\u003dc.charCodeAt(a),o\u003c55296||o\u003e56319||a+1\u003d\u003d\u003df||(u\u003dc.charCodeAt(a+1))\u003c56320||u\u003e57343?t?c.charAt(a):o:t?c.slice(a,a+2):u-56320+(o-55296\u003c\u003c10)+65536)}}},{116:116,28:28}],107:[function(t,n,r){var e\u003dt(52),i\u003dt(28);n.exports\u003dfunction(t,n,r){if(e(n))throw TypeError(\"String#\"+r+\" doesn\u0027t accept regex!\");return String(i(t))}},{28:28,52:52}],108:[function(t,n,r){var e\u003dt(33),i\u003dt(35),o\u003dt(28),u\u003d/\"/g,c\u003dfunction(t,n,r,e){var i\u003dString(o(t)),c\u003d\"\u003c\"+n;return\"\"!\u003d\u003dr\u0026\u0026(c+\u003d\" \"+r+\u0027\u003d\"\u0027+String(e).replace(u,\"\u0026quot;\")+\u0027\"\u0027),c+\"\u003e\"+i+\"\u003c/\"+n+\"\u003e\"};n.exports\u003dfunction(t,n){var r\u003d{};r[t]\u003dn(c),e(e.P+e.F*i(function(){var n\u003d\"\"[t](\u0027\"\u0027);return n!\u003d\u003dn.toLowerCase()||n.split(\u0027\"\u0027).length\u003e3}),\"String\",r)}},{28:28,33:33,35:35}],109:[function(t,n,r){var e\u003dt(118),i\u003dt(110),o\u003dt(28);n.exports\u003dfunction(t,n,r,u){var c\u003dString(o(t)),a\u003dc.length,f\u003dvoid 0\u003d\u003d\u003dr?\" \":String(r),s\u003de(n);if(s\u003c\u003da||\"\"\u003d\u003df)return c;var l\u003ds-a,h\u003di.call(f,Math.ceil(l/f.length));return h.length\u003el\u0026\u0026(h\u003dh.slice(0,l)),u?h+c:c+h}},{110:110,118:118,28:28}],110:[function(t,n,r){\"use strict\";var e\u003dt(116),i\u003dt(28);n.exports\u003dfunction repeat(t){var n\u003dString(i(this)),r\u003d\"\",o\u003de(t);if(o\u003c0||o\u003d\u003d1/0)throw RangeError(\"Count can\u0027t be negative\");for(;o\u003e0;(o\u003e\u003e\u003e\u003d1)\u0026\u0026(n+\u003dn))1\u0026o\u0026\u0026(r+\u003dn);return r}},{116:116,28:28}],111:[function(t,n,r){var e\u003dt(33),i\u003dt(28),o\u003dt(35),u\u003dt(112),c\u003d\"[\"+u+\"]\",a\u003d\"​…\",f\u003dRegExp(\"^\"+c+c+\"*\"),s\u003dRegExp(c+c+\"*$\"),l\u003dfunction(t,n,r){var i\u003d{},c\u003do(function(){return!!u[t]()||a[t]()!\u003da}),f\u003di[t]\u003dc?n(h):u[t];r\u0026\u0026(i[r]\u003df),e(e.P+e.F*c,\"String\",i)},h\u003dl.trim\u003dfunction(t,n){return t\u003dString(i(t)),1\u0026n\u0026\u0026(t\u003dt.replace(f,\"\")),2\u0026n\u0026\u0026(t\u003dt.replace(s,\"\")),t};n.exports\u003dl},{112:112,28:28,33:33,35:35}],112:[function(t,n,r){n.exports\u003d\"\\t\\n\\v\\f\\r   ᠎              \\u2028\\u2029\\ufeff\"},{}],113:[function(t,n,r){var e,i,o,u\u003dt(25),c\u003dt(46),a\u003dt(43),f\u003dt(30),s\u003dt(40),l\u003ds.process,h\u003ds.setImmediate,v\u003ds.clearImmediate,p\u003ds.MessageChannel,d\u003ds.Dispatch,y\u003d0,g\u003d{},m\u003dfunction(){var t\u003d+this;if(g.hasOwnProperty(t)){var n\u003dg[t];delete g[t],n()}},b\u003dfunction(t){m.call(t.data)};h\u0026\u0026v||(h\u003dfunction setImmediate(t){for(var n\u003d[],r\u003d1;arguments.length\u003er;)n.push(arguments[r++]);return g[++y]\u003dfunction(){c(\"function\"\u003d\u003dtypeof t?t:Function(t),n)},e(y),y},v\u003dfunction clearImmediate(t){delete g[t]},\"process\"\u003d\u003dt(18)(l)?e\u003dfunction(t){l.nextTick(u(m,t,1))}:d\u0026\u0026d.now?e\u003dfunction(t){d.now(u(m,t,1))}:p?(i\u003dnew p,o\u003di.port2,i.port1.onmessage\u003db,e\u003du(o.postMessage,o,1)):s.addEventListener\u0026\u0026\"function\"\u003d\u003dtypeof postMessage\u0026\u0026!s.importScripts?(e\u003dfunction(t){s.postMessage(t+\"\",\"*\")},s.addEventListener(\"message\",b,!1)):e\u003d\"onreadystatechange\"in f(\"script\")?function(t){a.appendChild(f(\"script\")).onreadystatechange\u003dfunction(){a.removeChild(this),m.call(t)}}:function(t){setTimeout(u(m,t,1),0)}),n.exports\u003d{set:h,clear:v}},{18:18,25:25,30:30,40:40,43:43,46:46}],114:[function(t,n,r){var e\u003dt(116),i\u003dMath.max,o\u003dMath.min;n.exports\u003dfunction(t,n){return t\u003de(t),t\u003c0?i(t+n,0):o(t,n)}},{116:116}],115:[function(t,n,r){var e\u003dt(116),i\u003dt(118);n.exports\u003dfunction(t){if(void 0\u003d\u003d\u003dt)return 0;var n\u003de(t),r\u003di(n);if(n!\u003d\u003dr)throw RangeError(\"Wrong length!\");return r}},{116:116,118:118}],116:[function(t,n,r){var e\u003dMath.ceil,i\u003dMath.floor;n.exports\u003dfunction(t){return isNaN(t\u003d+t)?0:(t\u003e0?i:e)(t)}},{}],117:[function(t,n,r){var e\u003dt(47),i\u003dt(28);n.exports\u003dfunction(t){return e(i(t))}},{28:28,47:47}],118:[function(t,n,r){var e\u003dt(116),i\u003dMath.min;n.exports\u003dfunction(t){return t\u003e0?i(e(t),9007199254740991):0}},{116:116}],"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"119:[function(t,n,r){var e\u003dt(28);n.exports\u003dfunction(t){return Object(e(t))}},{28:28}],120:[function(t,n,r){var e\u003dt(51);n.exports\u003dfunction(t,n){if(!e(t))return t;var r,i;if(n\u0026\u0026\"function\"\u003d\u003dtypeof(r\u003dt.toString)\u0026\u0026!e(i\u003dr.call(t)))return i;if(\"function\"\u003d\u003dtypeof(r\u003dt.valueOf)\u0026\u0026!e(i\u003dr.call(t)))return i;if(!n\u0026\u0026\"function\"\u003d\u003dtypeof(r\u003dt.toString)\u0026\u0026!e(i\u003dr.call(t)))return i;throw TypeError(\"Can\u0027t convert object to primitive value\")}},{51:51}],121:[function(t,n,r){\"use strict\";if(t(29)){var e\u003dt(60),i\u003dt(40),o\u003dt(35),u\u003dt(33),c\u003dt(123),a\u003dt(122),f\u003dt(25),s\u003dt(6),l\u003dt(92),h\u003dt(42),v\u003dt(93),p\u003dt(116),d\u003dt(118),y\u003dt(115),g\u003dt(114),m\u003dt(120),b\u003dt(41),x\u003dt(17),S\u003dt(51),w\u003dt(119),_\u003dt(48),E\u003dt(71),O\u003dt(79),P\u003dt(77).f,M\u003dt(129),F\u003dt(124),I\u003dt(128),A\u003dt(12),k\u003dt(11),N\u003dt(104),j\u003dt(141),T\u003dt(58),R\u003dt(56),L\u003dt(100),G\u003dt(9),D\u003dt(8),C\u003dt(72),W\u003dt(75),U\u003dC.f,B\u003dW.f,V\u003di.RangeError,z\u003di.TypeError,q\u003di.Uint8Array,K\u003dArray.prototype,Y\u003da.ArrayBuffer,J\u003da.DataView,H\u003dA(0),X\u003dA(2),$\u003dA(3),Z\u003dA(4),Q\u003dA(5),tt\u003dA(6),nt\u003dk(!0),rt\u003dk(!1),et\u003dj.values,it\u003dj.keys,ot\u003dj.entries,ut\u003dK.lastIndexOf,ct\u003dK.reduce,at\u003dK.reduceRight,ft\u003dK.join,st\u003dK.sort,lt\u003dK.slice,ht\u003dK.toString,vt\u003dK.toLocaleString,pt\u003dI(\"iterator\"),dt\u003dI(\"toStringTag\"),yt\u003dF(\"typed_constructor\"),gt\u003dF(\"def_constructor\"),mt\u003dc.CONSTR,bt\u003dc.TYPED,xt\u003dc.VIEW,St\u003dA(1,function(t,n){return Pt(N(t,t[gt]),n)}),wt\u003do(function(){return 1\u003d\u003d\u003dnew q(new Uint16Array([1]).buffer)[0]}),_t\u003d!!q\u0026\u0026!!q.prototype.set\u0026\u0026o(function(){new q(1).set({})}),Et\u003dfunction(t,n){var r\u003dp(t);if(r\u003c0||r%n)throw V(\"Wrong offset!\");return r},Ot\u003dfunction(t){if(S(t)\u0026\u0026bt in t)return t;throw z(t+\" is not a typed array!\")},Pt\u003dfunction(t,n){if(!(S(t)\u0026\u0026yt in t))throw z(\"It is not a typed array constructor!\");return new t(n)},Mt\u003dfunction(t,n){return Ft(N(t,t[gt]),n)},Ft\u003dfunction(t,n){for(var r\u003d0,e\u003dn.length,i\u003dPt(t,e);e\u003er;)i[r]\u003dn[r++];return i},It\u003dfunction(t,n,r){U(t,n,{get:function(){return this._d[r]}})},At\u003dfunction from(t){var n,r,e,i,o,u,c\u003dw(t),a\u003darguments.length,s\u003da\u003e1?arguments[1]:void 0,l\u003dvoid 0!\u003d\u003ds,h\u003dM(c);if(void 0!\u003dh\u0026\u0026!_(h)){for(u\u003dh.call(c),e\u003d[],n\u003d0;!(o\u003du.next()).done;n++)e.push(o.value);c\u003de}for(l\u0026\u0026a\u003e2\u0026\u0026(s\u003df(s,arguments[2],2)),n\u003d0,r\u003dd(c.length),i\u003dPt(this,r);r\u003en;n++)i[n]\u003dl?s(c[n],n):c[n];return i},kt\u003dfunction of(){for(var t\u003d0,n\u003darguments.length,r\u003dPt(this,n);n\u003et;)r[t]\u003darguments[t++];return r},Nt\u003d!!q\u0026\u0026o(function(){vt.call(new q(1))}),jt\u003dfunction toLocaleString(){return vt.apply(Nt?lt.call(Ot(this)):Ot(this),arguments)},Tt\u003d{copyWithin:function copyWithin(t,n){return D.call(Ot(this),t,n,arguments.length\u003e2?arguments[2]:void 0)},every:function every(t){return Z(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},fill:function fill(t){return G.apply(Ot(this),arguments)},filter:function filter(t){return Mt(this,X(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0))},find:function find(t){return Q(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},findIndex:function findIndex(t){return tt(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},forEach:function forEach(t){H(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},indexOf:function indexOf(t){return rt(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},includes:function includes(t){return nt(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},join:function join(t){return ft.apply(Ot(this),arguments)},lastIndexOf:function lastIndexOf(t){return ut.apply(Ot(this),arguments)},map:function map(t){return St(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},reduce:function reduce(t){return ct.apply(Ot(this),arguments)},reduceRight:function reduceRight(t){return at.apply(Ot(this),arguments)},reverse:function reverse(){for(var t,n\u003dthis,r\u003dOt(n).length,e\u003dMath.floor(r/2),i\u003d0;i\u003ce;)t\u003dn[i],n[i++]\u003dn[--r],n[r]\u003dt;return n},some:function some(t){return $(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},sort:function sort(t){return st.call(Ot(this),t)},subarray:function subarray(t,n){var r\u003dOt(this),e\u003dr.length,i\u003dg(t,e);return new(N(r,r[gt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,d((void 0\u003d\u003d\u003dn?e:g(n,e))-i))}},Rt\u003dfunction slice(t,n){return Mt(this,lt.call(Ot(this),t,n))},Lt\u003dfunction set(t){Ot(this);var n\u003dEt(arguments[1],1),r\u003dthis.length,e\u003dw(t),i\u003dd(e.length),o\u003d0;if(i+n\u003er)throw V(\"Wrong length!\");for(;o\u003ci;)this[n+o]\u003de[o++]},Gt\u003d{entries:function entries(){return ot.call(Ot(this))},keys:function keys(){return it.call(Ot(this))},values:function values(){return et.call(Ot(this))}},Dt\u003dfunction(t,n){return S(t)\u0026\u0026t[bt]\u0026\u0026\"symbol\"!\u003dtypeof n\u0026\u0026n in t\u0026\u0026String(+n)\u003d\u003dString(n)},Ct\u003dfunction getOwnPropertyDescriptor(t,n){return Dt(t,n\u003dm(n,!0))?l(2,t[n]):B(t,n)},Wt\u003dfunction defineProperty(t,n,r){return!(Dt(t,n\u003dm(n,!0))\u0026\u0026S(r)\u0026\u0026b(r,\"value\"))||b(r,\"get\")||b(r,\"set\")||r.configurable||b(r,\"writable\")\u0026\u0026!r.writable||b(r,\"enumerable\")\u0026\u0026!r.enumerable?U(t,n,r):(t[n]\u003dr.value,t)};mt||(W.f\u003dCt,C.f\u003dWt),u(u.S+u.F*!mt,\"Object\",{getOwnPropertyDescriptor:Ct,defineProperty:Wt}),o(function(){ht.call({})})\u0026\u0026(ht\u003dvt\u003dfunction toString(){return ft.call(this)});var Ut\u003dv({},Tt);v(Ut,Gt),h(Ut,pt,Gt.values),v(Ut,{slice:Rt,set:Lt,constructor:function(){},toString:ht,toLocaleString:jt}),It(Ut,\"buffer\",\"b\"),It(Ut,\"byteOffset\",\"o\"),It(Ut,\"byteLength\",\"l\"),It(Ut,\"length\",\"e\"),U(Ut,dt,{get:function(){return this[bt]}}),n.exports\u003dfunction(t,n,r,a){a\u003d!!a;var f\u003dt+(a?\"Clamped\":\"\")+\"Array\",l\u003d\"get\"+t,v\u003d\"set\"+t,p\u003di[f],g\u003dp||{},m\u003dp\u0026\u0026O(p),b\u003d!p||!c.ABV,w\u003d{},_\u003dp\u0026\u0026p.prototype,M\u003dfunction(t,r){var e\u003dt._d;return e.v[l](r*n+e.o,wt)},F\u003dfunction(t,r,e){var i\u003dt._d;a\u0026\u0026(e\u003d(e\u003dMath.round(e))\u003c0?0:e\u003e255?255:255\u0026e),i.v[v](r*n+i.o,e,wt)},I\u003dfunction(t,n){U(t,n,{get:function(){return M(this,n)},set:function(t){return F(this,n,t)},enumerable:!0})};b?(p\u003dr(function(t,r,e,i){s(t,p,f,\"_d\");var o,u,c,a,l\u003d0,v\u003d0;if(S(r)){if(!(r instanceof Y||\"ArrayBuffer\"\u003d\u003d(a\u003dx(r))||\"SharedArrayBuffer\"\u003d\u003da))return bt in r?Ft(p,r):At.call(p,r);o\u003dr,v\u003dEt(e,n);var g\u003dr.byteLength;if(void 0\u003d\u003d\u003di){if(g%n)throw V(\"Wrong length!\");if((u\u003dg-v)\u003c0)throw V(\"Wrong length!\")}else if((u\u003dd(i)*n)+v\u003eg)throw V(\"Wrong length!\");c\u003du/n}else c\u003dy(r),u\u003dc*n,o\u003dnew Y(u);for(h(t,\"_d\",{b:o,o:v,l:u,e:c,v:new J(o)});l\u003cc;)I(t,l++)}),_\u003dp.prototype\u003dE(Ut),h(_,\"constructor\",p)):o(function(){p(1)})\u0026\u0026o(function(){new p(-1)})\u0026\u0026R(function(t){new p,new p(null),new p(1.5),new p(t)},!0)||(p\u003dr(function(t,r,e,i){s(t,p,f);var o;return S(r)?r instanceof Y||\"ArrayBuffer\"\u003d\u003d(o\u003dx(r))||\"SharedArrayBuffer\"\u003d\u003do?void 0!\u003d\u003di?new g(r,Et(e,n),i):void 0!\u003d\u003de?new g(r,Et(e,n)):new g(r):bt in r?Ft(p,r):At.call(p,r):new g(y(r))}),H(m!\u003d\u003dFunction.prototype?P(g).concat(P(m)):P(g),function(t){t in p||h(p,t,g[t])}),p.prototype\u003d_,e||(_.constructor\u003dp));var A\u003d_[pt],k\u003d!!A\u0026\u0026(\"values\"\u003d\u003dA.name||void 0\u003d\u003dA.name),N\u003dGt.values;h(p,yt,!0),h(_,bt,f),h(_,xt,!0),h(_,gt,p),(a?new p(1)[dt]\u003d\u003df:dt in _)||U(_,dt,{get:function(){return f}}),w[f]\u003dp,u(u.G+u.W+u.F*(p!\u003dg),w),u(u.S,f,{BYTES_PER_ELEMENT:n}),u(u.S+u.F*o(function(){g.of.call(p,1)}),f,{from:At,of:kt}),\"BYTES_PER_ELEMENT\"in _||h(_,\"BYTES_PER_ELEMENT\",n),u(u.P,f,Tt),L(f),u(u.P+u.F*_t,f,{set:Lt}),u(u.P+u.F*!k,f,Gt),e||_.toString\u003d\u003dht||(_.toString\u003dht),u(u.P+u.F*o(function(){new p(1).slice()}),f,{slice:Rt}),u(u.P+u.F*(o(function(){return[1,2].toLocaleString()!\u003dnew p([1,2]).toLocaleString()})||!o(function(){_.toLocaleString.call([1,2])})),f,{toLocaleString:jt}),T[f]\u003dk?A:N,e||k||h(_,pt,N)}}else n.exports\u003dfunction(){}},{100:100,104:104,11:11,114:114,115:115,116:116,118:118,119:119,12:12,120:120,122:122,123:123,124:124,128:128,129:129,141:141,17:17,25:25,29:29,33:33,35:35,40:40,41:41,42:42,48:48,51:51,56:56,58:58,6:6,60:60,71:71,72:72,75:75,77:77,79:79,8:8,9:9,92:92,93:93}],122:[function(t,n,r){\"use strict\";function packIEEE754(t,n,r){var e,i,o,u\u003dArray(r),c\u003d8*r-n-1,a\u003d(1\u003c\u003cc)-1,f\u003da\u003e\u003e1,s\u003d23\u003d\u003d\u003dn?M(2,-24)-M(2,-77):0,l\u003d0,h\u003dt\u003c0||0\u003d\u003d\u003dt\u0026\u00261/t\u003c0?1:0;for(t\u003dP(t),t!\u003dt||t\u003d\u003d\u003dE?(i\u003dt!\u003dt?1:0,e\u003da):(e\u003dF(I(t)/A),t*(o\u003dM(2,-e))\u003c1\u0026\u0026(e--,o*\u003d2),t+\u003de+f\u003e\u003d1?s/o:s*M(2,1-f),t*o\u003e\u003d2\u0026\u0026(e++,o/\u003d2),e+f\u003e\u003da?(i\u003d0,e\u003da):e+f\u003e\u003d1?(i\u003d(t*o-1)*M(2,n),e+\u003df):(i\u003dt*M(2,f-1)*M(2,n),e\u003d0));n\u003e\u003d8;u[l++]\u003d255\u0026i,i/\u003d256,n-\u003d8);for(e\u003de\u003c\u003cn|i,c+\u003dn;c\u003e0;u[l++]\u003d255\u0026e,e/\u003d256,c-\u003d8);return u[--l]|\u003d128*h,u}function unpackIEEE754(t,n,r){var e,i\u003d8*r-n-1,o\u003d(1\u003c\u003ci)-1,u\u003do\u003e\u003e1,c\u003di-7,a\u003dr-1,f\u003dt[a--],s\u003d127\u0026f;for(f\u003e\u003e\u003d7;c\u003e0;s\u003d256*s+t[a],a--,c-\u003d8);for(e\u003ds\u0026(1\u003c\u003c-c)-1,s\u003e\u003e\u003d-c,c+\u003dn;c\u003e0;e\u003d256*e+t[a],a--,c-\u003d8);if(0\u003d\u003d\u003ds)s\u003d1-u;else{if(s\u003d\u003d\u003do)return e?NaN:f?-E:E;e+\u003dM(2,n),s-\u003du}return(f?-1:1)*e*M(2,s-n)}function unpackI32(t){return t[3]\u003c\u003c24|t[2]\u003c\u003c16|t[1]\u003c\u003c8|t[0]}function packI8(t){return[255\u0026t]}function packI16(t){return[255\u0026t,t\u003e\u003e8\u0026255]}function packI32(t){return[255\u0026t,t\u003e\u003e8\u0026255,t\u003e\u003e16\u0026255,t\u003e\u003e24\u0026255]}function packF64(t){return packIEEE754(t,52,8)}function packF32(t){return packIEEE754(t,23,4)}function addGetter(t,n,r){d(t[m],n,{get:function(){return this[r]}})}function get(t,n,r,e){var i\u003d+r,o\u003dv(i);if(o+n\u003et[N])throw _(b);var u\u003dt[k]._b,c\u003do+t[j],a\u003du.slice(c,c+n);return e?a:a.reverse()}function set(t,n,r,e,i,o){var u\u003d+r,c\u003dv(u);if(c+n\u003et[N])throw _(b);for(var a\u003dt[k]._b,f\u003dc+t[j],s\u003de(+i),l\u003d0;l\u003cn;l++)a[f+l]\u003ds[o?l:n-l-1]}var e\u003dt(40),i\u003dt(29),o\u003dt(60),u\u003dt(123),c\u003dt(42),a\u003dt(93),f\u003dt(35),s\u003dt(6),l\u003dt(116),h\u003dt(118),v\u003dt(115),p\u003dt(77).f,d\u003dt(72).f,y\u003dt(9),g\u003dt(101),m\u003d\"prototype\",b\u003d\"Wrong index!\",x\u003de.ArrayBuffer,S\u003de.DataView,w\u003de.Math,_\u003de.RangeError,E\u003de.Infinity,O\u003dx,P\u003dw.abs,M\u003dw.pow,F\u003dw.floor,I\u003dw.log,A\u003dw.LN2,k\u003di?\"_b\":\"buffer\",N\u003di?\"_l\":\"byteLength\",j\u003di?\"_o\":\"byteOffset\";if(u.ABV){if(!f(function(){x(1)})||!f(function(){new x(-1)})||f(function(){return new x,new x(1.5),new x(NaN),\"ArrayBuffer\"!\u003dx.name})){x\u003dfunction ArrayBuffer(t){return s(this,x),new O(v(t))};for(var T,R\u003dx[m]\u003dO[m],L\u003dp(O),G\u003d0;L.length\u003eG;)(T\u003dL[G++])in x||c(x,T,O[T]);o||(R.constructor\u003dx)}var D\u003dnew S(new x(2)),C\u003dS[m].setInt8;D.setInt8(0,2147483648),D.setInt8(1,2147483649),!D.getInt8(0)\u0026\u0026D.getInt8(1)||a(S[m],{setInt8:function setInt8(t,n){C.call(this,t,n\u003c\u003c24\u003e\u003e24)},setUint8:function setUint8(t,n){C.call(this,t,n\u003c\u003c24\u003e\u003e24)}},!0)}else x\u003dfunction ArrayBuffer(t){s(this,x,\"ArrayBuffer\");var n\u003dv(t);this._b\u003dy.call(Array(n),0),this[N]\u003dn},S\u003dfunction DataView(t,n,r){s(this,S,\"DataView\"),s(t,x,\"DataView\");var e\u003dt[N],i\u003dl(n);if(i\u003c0||i\u003ee)throw _(\"Wrong offset!\");if(r\u003dvoid 0\u003d\u003d\u003dr?e-i:h(r),i+r\u003ee)throw _(\"Wrong length!\");this[k]\u003dt,this[j]\u003di,this[N]\u003dr},i\u0026\u0026(addGetter(x,\"byteLength\",\"_l\"),addGetter(S,\"buffer\",\"_b\"),addGetter(S,\"byteLength\",\"_l\"),addGetter(S,\"byteOffset\",\"_o\")),a(S[m],{getInt8:function getInt8(t){return get(this,1,t)[0]\u003c\u003c24\u003e\u003e24},getUint8:function getUint8(t){return get(this,1,t)[0]},getInt16:function getInt16(t){var n\u003dget(this,2,t,arguments[1]);return(n[1]\u003c\u003c8|n[0])\u003c\u003c16\u003e\u003e16},getUint16:function getUint16(t){var n\u003dget(this,2,t,arguments[1]);return n[1]\u003c\u003c8|n[0]},getInt32:function getInt32(t){return unpackI32(get(this,4,t,arguments[1]))},getUint32:function getUint32(t){return unpackI32(get(this,4,t,arguments[1]))\u003e\u003e\u003e0},getFloat32:function getFloat32(t){return unpackIEEE754(get(this,4,t,arguments[1]),23,4)},getFloat64:function getFloat64(t){return unpackIEEE754(get(this,8,t,arguments[1]),52,8)},setInt8:function setInt8(t,n){set(this,1,t,packI8,n)},setUint8:function setUint8(t,n){set(this,1,t,packI8,n)},setInt16:function setInt16(t,n){set(this,2,t,packI16,n,arguments[2])},setUint16:function setUint16(t,n){set(this,2,t,packI16,n,arguments[2])},setInt32:function setInt32(t,n){set(this,4,t,packI32,n,arguments[2])},setUint32:function setUint32(t,n){set(this,4,t,packI32,n,arguments[2])},setFloat32:function setFloat32(t,n){set(this,4,t,packF32,n,arguments[2])},setFloat64:function setFloat64(t,n){set(this,8,t,packF64,n,arguments[2])}});g(x,\"ArrayBuffer\"),g(S,\"DataView\"),c(S[m],u.VIEW,!0),r.ArrayBuffer\u003dx,r.DataView\u003dS},{101:101,115:115,116:116,118:118,123:123,29:29,35:35,40:40,42:42,6:6,60:60,72:72,77:77,9:9,93:93}],123:[function(t,n,r){for(var e,i\u003dt(40),o\u003dt(42),u\u003dt(124),c\u003du(\"typed_array\"),a\u003du(\"view\"),f\u003d!(!i.ArrayBuffer||!i.DataView),s\u003df,l\u003d0,h\u003d\"Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array\".split(\",\");l\u003c9;)(e\u003di[h[l++]])?(o(e.prototype,c,!0),o(e.prototype,a,!0)):s\u003d!1;n.exports\u003d{ABV:f,CONSTR:s,TYPED:c,VIEW:a}},{124:124,40:40,42:42}],124:[function(t,n,r){var e\u003d0,i\u003dMath.random();n.exports\u003dfunction(t){return\"Symbol(\".concat(void 0\u003d\u003d\u003dt?\"\":t,\")_\",(++e+i).toString(36))}},{}],125:[function(t,n,r){var e\u003dt(51);n.exports\u003dfunction(t,n){if(!e(t)||t._t!\u003d\u003dn)throw TypeError(\"Incompatible receiver, \"+n+\" required!\");return t}},{51:51}],126:[function(t,n,r){var e\u003dt(40),i\u003dt(23),o\u003dt(60),u\u003dt(127),c\u003dt(72).f;n.exports\u003dfunction(t){var n\u003di.Symbol||(i.Symbol\u003do?{}:e.Symbol||{});\"_\"\u003d\u003dt.charAt(0)||t in n||c(n,t,{value:u.f(t)})}},{127:127,23:23,40:40,60:60,72:72}],127:[function(t,n,r){r.f\u003dt(128)},{128:128}],128:[function(t,n,r){var e\u003dt(103)(\"wks\"),i\u003dt(124),o\u003dt(40).Symbol,u\u003d\"function\"\u003d\u003dtypeof o;(n.exports\u003dfunction(t){return e[t]||(e[t]\u003du\u0026\u0026o[t]||(u?o:i)(\"Symbol.\"+t))}).store\u003de},{103:103,124:124,40:40}],129:[function(t,n,r){var e\u003dt(17),i\u003dt(128)(\"iterator\"),o\u003dt(58);n.exports\u003dt(23).getIteratorMethod\u003dfunction(t){if(void 0!\u003dt)return t[i]||t[\"@@iterator\"]||o[e(t)]}},{128:128,17:17,23:23,58:58}],130:[function(t,n,r){var e\u003dt(33),i\u003dt(95)(/[\\\\^$*+?.()|[\\]{}]/g,\"\\\\$\u0026\");e(e.S,\"RegExp\",{escape:function escape(t){return i(t)}})},{33:33,95:95}],131:[function(t,n,r){var e\u003dt(33);e(e.P,\"Array\",{copyWithin:t(8)}),t(5)(\"copyWithin\")},{33:33,5:5,8:8}],132:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(4);e(e.P+e.F*!t(105)([].every,!0),\"Array\",{every:function every(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],133:[function(t,n,r){var e\u003dt(33);e(e.P,\"Array\",{fill:t(9)}),t(5)(\"fill\")},{33:33,5:5,9:9}],134:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(2);e(e.P+e.F*!t(105)([].filter,!0),\"Array\",{filter:function filter(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],135:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(6),o\u003d\"findIndex\",u\u003d!0;o in[]\u0026\u0026Array(1)[o](function(){u\u003d!1}),e(e.P+e.F*u,\"Array\",{findIndex:function findIndex(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0)}}),t(5)(o)},{12:12,33:33,5:5}],136:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(5),o\u003d!0;\"find\"in[]\u0026\u0026Array(1).find(function(){o\u003d!1}),e(e.P+e.F*o,\"Array\",{find:function find(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0)}}),t(5)(\"find\")},{12:12,33:33,5:5}],137:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(0),o\u003dt(105)([].forEach,!0);e(e.P+e.F*!o,\"Array\",{forEach:function forEach(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],138:[function(t,n,r){\"use strict\";var e\u003dt(25),i\u003dt(33),o\u003dt(119),u\u003dt(53),c\u003dt(48),a\u003dt(118),f\u003dt(24),s\u003dt(129);i(i.S+i.F*!t(56)(function(t){Array.from(t)}),\"Array\",{from:function from(t){var n,r,i,l,h\u003do(t),v\u003d\"function\"\u003d\u003dtypeof this?this:Array,p\u003darguments.length,d\u003dp\u003e1?arguments[1]:void 0,y\u003dvoid 0!\u003d\u003dd,g\u003d0,m\u003ds(h);if(y\u0026\u0026(d\u003de(d,p\u003e2?arguments[2]:void 0,2)),void 0\u003d\u003dm||v\u003d\u003dArray\u0026\u0026c(m))for(n\u003da(h.length),r\u003dnew v(n);n\u003eg;g++)f(r,g,y?d(h[g],g):h[g]);else for(l\u003dm.call(h),r\u003dnew v;!(i\u003dl.next()).done;g++)f(r,g,y?u(l,d,[i.value,g],!0):i.value);return r.length\u003dg,r}})},{118:118,119:119,129:129,24:24,25:25,33:33,48:48,53:53,56:56}],139:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(11)(!1),o\u003d[].indexOf,u\u003d!!o\u0026\u00261/[1].indexOf(1,-0)\u003c0;e(e.P+e.F*(u||!t(105)(o)),\"Array\",{indexOf:function indexOf(t){return u?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},{105:105,11:11,33:33}],140:[function(t,n,r){var e\u003dt(33);e(e.S,\"Array\",{isArray:t(49)})},{33:33,49:49}],141:[function(t,n,r){\"use strict\";var e\u003dt(5),i\u003dt(57),o\u003dt(58),u\u003dt(117);n.exports\u003dt(55)(Array,\"Array\",function(t,n){this._t\u003du(t),this._i\u003d0,this._k\u003dn},function(){var t\u003dthis._t,n\u003dthis._k,r\u003dthis._i++;return!t||r\u003e\u003dt.length?(this._t\u003dvoid 0,i(1)):\"keys\"\u003d\u003dn?i(0,r):\"values\"\u003d\u003dn?i(0,t[r]):i(0,[r,t[r]])},\"values\"),o.Arguments\u003do.Array,e(\"keys\"),e(\"values\"),e(\"entries\")},{117:117,5:5,55:55,57:57,58:58}],142:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(117),o\u003d[].join;e(e.P+e.F*(t(47)!\u003dObject||!t(105)(o)),\"Array\",{join:function join(t){return o.call(i(this),void 0\u003d\u003d\u003dt?\",\":t)}})},{105:105,117:117,33:33,47:47}],143:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(117),o\u003dt(116),u\u003dt(118),c\u003d[].lastIndexOf,a\u003d!!c\u0026\u00261/[1].lastIndexOf(1,-0)\u003c0;e(e.P+e.F*(a||!t(105)(c)),\"Array\",{lastIndexOf:function lastIndexOf(t){if(a)return c.apply(this,arguments)||0;var n\u003di(this),r\u003du(n.length),e\u003dr-1;for(arguments.length\u003e1\u0026\u0026(e\u003dMath.min(e,o(arguments[1]))),e\u003c0\u0026\u0026(e\u003dr+e);e\u003e\u003d0;e--)if(e in n\u0026\u0026n[e]\u003d\u003d\u003dt)return e||0;return-1}})},{105:105,116:116,117:117,118:118,33:33}],144:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(1);e(e.P+e.F*!t(105)([].map,!0),\"Array\",{map:function map(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],145:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(24);e(e.S+e.F*t(35)(function(){function F(){}return!(Array.of.call(F)instanceof F)}),\"Array\",{of:function of(){for(var t\u003d0,n\u003darguments.length,r\u003dnew(\"function\"\u003d\u003dtypeof this?this:Array)(n);n\u003et;)i(r,t,arguments[t++]);return r.length\u003dn,r}})},{24:24,33:33,35:35}],146:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(13);e(e.P+e.F*!t(105)([].reduceRight,!0),\"Array\",{reduceRight:function reduceRight(t){return i(this,t,arguments.length,arguments[1],!0)}})},{105:105,13:13,33:33}],147:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(13);e(e.P+e.F*!t(105)([].reduce,!0),\"Array\",{reduce:function reduce(t){return i(this,t,arguments.length,arguments[1],!1)}})},{105:105,13:13,33:33}],148:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(43),o\u003dt(18),u\u003dt(114),c\u003dt(118),a\u003d[].slice;e(e.P+e.F*t(35)(function(){i\u0026\u0026a.call(i)}),\"Array\",{slice:function slice(t,n){var r\u003dc(this.length),e\u003do(this);if(n\u003dvoid 0\u003d\u003d\u003dn?r:n,\"Array\"\u003d\u003de)return a.call(this,t,n);for(var i\u003du(t,r),f\u003du(n,r),s\u003dc(f-i),l\u003dArray(s),h\u003d0;h\u003cs;h++)l[h]\u003d\"String\"\u003d\u003de?this.charAt(i+h):this[i+h];return l}})},{114:114,118:118,18:18,33:33,35:35,43:43}],149:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(3);e(e.P+e.F*!t(105)([].some,!0),\"Array\",{some:function some(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],150:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(3),o\u003dt(119),u\u003dt(35),c\u003d[].sort,a\u003d[1,2,3];e(e.P+e.F*(u(function(){a.sort(void 0)})||!u(function(){a.sort(null)})||!t(105)(c)),\"Array\",{sort:function sort(t){return void 0\u003d\u003d\u003dt?c.call(o(this)):c.call(o(this),i(t))}})},{105:105,119:119,3:3,33:33,35:35}],151:[function(t,n,r){t(100)(\"Array\")},{100:100}],152:[function(t,n,r){var e\u003dt(33);e(e.S,\"Date\",{now:function(){return(new Date).getTime()}})},{33:33}],153:[function(t,n,r){var e\u003dt(33),i\u003dt(26);e(e.P+e.F*(Date.prototype.toISOString!\u003d\u003di),\"Date\",{toISOString:i})},{26:26,33:33}],154:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(120);e(e.P+e.F*t(35)(function(){return null!\u003d\u003dnew Date(NaN).toJSON()||1!\u003d\u003dDate.prototype.toJSON.call({toISOString:function(){return 1}})}),\"Date\",{toJSON:function toJSON(t){var n\u003di(this),r\u003do(n);return\"number\"!\u003dtypeof r||isFinite(r)?n.toISOString():null}})},{119:119,120:120,33:33,35:35}],155:[function(t,n,r){var e\u003dt(128)(\"toPrimitive\"),i\u003dDate.prototype;e in i||t(42)(i,e,t(27))},{128:128,27:27,42:42}],156:[function(t,n,r){var e\u003dDate.prototype,i\u003de.toString,o\u003de.getTime;new Date(NaN)+\"\"!\u003d\"Invalid Date\"\u0026\u0026t(94)(e,\"toString\",function toString(){var t\u003do.call(this);return t\u003d\u003d\u003dt?i.call(this):\"Invalid Date\"})},{94:94}],157:[function(t,n,r){var e\u003dt(33);e(e.P,\"Function\",{bind:t(16)})},{16:16,33:33}],158:[function(t,n,r){\"use strict\";var e\u003dt(51),i\u003dt(79),o\u003dt(128)(\"hasInstance\"),u\u003dFunction.prototype;o in u||t(72).f(u,o,{value:function(t){if(\"function\"!\u003dtypeof this||!e(t))return!1;if(!e(this.prototype))return t instanceof this;for(;t\u003di(t);)if(this.prototype\u003d\u003d\u003dt)return!0;return!1}})},{128:128,51:51,72:72,79:79}],159:[function(t,n,r){var e\u003dt(72).f,i\u003dFunction.prototype,o\u003d/^\\s*function ([^ (]*)/;\"name\"in i||t(29)\u0026\u0026e(i,\"name\",{configurable:!0,get:function(){try{return(\"\"+this).match(o)[1]}catch(t){return\"\"}}})},{29:29,72:72}],160:[function(t,n,r){\"use strict\";var e\u003dt(19),i\u003dt(125);n.exports\u003dt(22)(\"Map\",function(t){return function Map(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},{get:function get(t){var n\u003de.getEntry(i(this,\"Map\"),t);return n\u0026\u0026n.v},set:function set(t,n){return e.def(i(this,\"Map\"),0\u003d\u003d\u003dt?0:t,n)}},e,!0)},{125:125,19:19,22:22}],161:[function(t,n,r){var e\u003dt(33),i\u003dt(63),o\u003dMath.sqrt,u\u003dMath.acosh;e(e.S+e.F*!(u\u0026\u0026710\u003d\u003dMath.floor(u(Number.MAX_VALUE))\u0026\u0026u(1/0)\u003d\u003d1/0),\"Math\",{acosh:function acosh(t){return(t\u003d+t)\u003c1?NaN:t\u003e94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},{33:33,63:63}],162:[function(t,n,r){function asinh(t){return isFinite(t\u003d+t)\u0026\u00260!\u003dt?t\u003c0?-asinh(-t):Math.log(t+Math.sqrt(t*t+1)):t}var e\u003dt(33),i\u003dMath.asinh;e(e.S+e.F*!(i\u0026\u00261/i(0)\u003e0),\"Math\",{asinh:asinh})},{33:33}],163:[function(t,n,r){var e\u003dt(33),i\u003dMath.atanh;e(e.S+e.F*!(i\u0026\u00261/i(-0)\u003c0),\"Math\",{atanh:function atanh(t){return 0\u003d\u003d(t\u003d+t)?t:Math.log((1+t)/(1-t))/2}})},{33:33}],164:[function(t,n,r){var e\u003dt(33),i\u003dt(65);e(e.S,\"Math\",{cbrt:function cbrt(t){return i(t\u003d+t)*Math.pow(Math.abs(t),1/3)}})},{33:33,65:65}],165:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{clz32:function clz32(t){return(t\u003e\u003e\u003e\u003d0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{33:33}],166:[function(t,n,r){var e\u003dt(33),i\u003dMath.exp;e(e.S,\"Math\",{cosh:function cosh(t){return(i(t\u003d+t)+i(-t))/2}})},{33:33}],167:[function(t,n,r){var e\u003dt(33),i\u003dt(61);e(e.S+e.F*(i!\u003dMath.expm1),\"Math\",{expm1:i})},{33:33,61:61}],168:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{fround:t(62)})},{33:33,62:62}],169:[function(t,n,r){var e\u003dt(33),i\u003dMath.abs;e(e.S,\"Math\",{hypot:function hypot(t,n){for(var r,e,o\u003d0,u\u003d0,c\u003darguments.length,a\u003d0;u\u003cc;)r\u003di(arguments[u++]),a\u003cr?(e\u003da/r,o\u003do*e*e+1,a\u003dr):r\u003e0?(e\u003dr/a,o+\u003de*e):o+\u003dr;return a\u003d\u003d\u003d1/0?1/0:a*Math.sqrt(o)}})},{33:33}],170:[function(t,n,r){var e\u003dt(33),i\u003dMath.imul;e(e.S+e.F*t(35)(function(){return-5!\u003di(4294967295,5)||2!\u003di.length}),\"Math\",{imul:function imul(t,n){var r\u003d+t,e\u003d+n,i\u003d65535\u0026r,o\u003d65535\u0026e;return 0|i*o+((65535\u0026r\u003e\u003e\u003e16)*o+i*(65535\u0026e\u003e\u003e\u003e16)\u003c\u003c16\u003e\u003e\u003e0)}})},{33:33,35:35}],171:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{log10:function log10(t){return Math.log(t)*Math.LOG10E}})},{33:33}],172:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{log1p:t(63)})},{33:33,63:63}],173:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{log2:function log2(t){return Math.log(t)/Math.LN2}})},{33:33}],174:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{sign:t(65)})},{33:33,65:65}],175:[function(t,n,r){var e\u003dt(33),i\u003dt(61),o\u003dMath.exp;e(e.S+e.F*t(35)(function(){return-2e-17!\u003d!Math.sinh(-2e-17)}),\"Math\",{sinh:function sinh(t){return Math.abs(t\u003d+t)\u003c1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},{33:33,35:35,61:61}],176:[function(t,n,r){var e\u003dt(33),i\u003dt(61),o\u003dMath.exp;e(e.S,\"Math\",{tanh:function tanh(t){var n\u003di(t\u003d+t),r\u003di(-t);return n\u003d\u003d1/0?1:r\u003d\u003d1/0?-1:(n-r)/(o(t)+o(-t))}})},{33:33,61:61}],177:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{trunc:function trunc(t){return(t\u003e0?Math.floor:Math.ceil)(t)}})},{33:33}],178:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(41),o\u003dt(18),u\u003dt(45),c\u003dt(120),a\u003dt(35),f\u003dt(77).f,s\u003dt(75).f,l\u003dt(72).f,h\u003dt(111).trim,v\u003de.Number,p\u003dv,d\u003dv.prototype,y\u003d\"Number\"\u003d\u003do(t(71)(d)),g\u003d\"trim\"in String.prototype,m\u003dfunction(t){var n\u003dc(t,!1);if(\"string\"\u003d\u003dtypeof n\u0026\u0026n.length\u003e2){n\u003dg?n.trim():h(n,3);var r,e,i,o\u003dn.charCodeAt(0);if(43\u003d\u003d\u003do||45\u003d\u003d\u003do){if(88\u003d\u003d\u003d(r\u003dn.charCodeAt(2))||120\u003d\u003d\u003dr)return NaN}else if(48\u003d\u003d\u003do){switch(n.charCodeAt(1)){case 66:case 98:e\u003d2,i\u003d49;break;case 79:case 111:e\u003d8,i\u003d55;break;default:return+n}for(var u,a\u003dn.slice(2),f\u003d0,s\u003da.length;f\u003cs;f++)if((u\u003da.charCodeAt(f))\u003c48||u\u003ei)return NaN;return parseInt(a,e)}}return+n};if(!v(\" 0o1\")||!v(\"0b1\")||v(\"+0x1\")){v\u003dfunction Number(t){var n\u003darguments.length\u003c1?0:t,r\u003dthis;return r instanceof v\u0026\u0026(y?a(function(){d.valueOf.call(r)}):\"Number\"!\u003do(r))?u(new p(m(n)),r,v):m(n)};for(var b,x\u003dt(29)?f(p):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger\".split(\",\"),S\u003d0;x.length\u003eS;S++)i(p,b\u003dx[S])\u0026\u0026!i(v,b)\u0026\u0026l(v,b,s(p,b));v.prototype\u003dd,d.constructor\u003dv,t(94)(e,\"Number\",v)}},{111:111,120:120,18:18,29:29,35:35,40:40,41:41,45:45,71:71,72:72,75:75,77:77,94:94}],179:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{EPSILON:Math.pow(2,-52)})},{33:33}],180:[function(t,n,r){var e\u003dt(33),i\u003dt(40).isFinite;e(e.S,\"Number\",{isFinite:function isFinite(t){return\"number\"\u003d\u003dtypeof t\u0026\u0026i(t)}})},{33:33,40:40}],181:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{isInteger:t(50)})},{33:33,50:50}],182:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{isNaN:function isNaN(t){return t!\u003dt}})},{33:33}],183:[function(t,n,r){var e\u003dt(33),i\u003dt(50),o\u003dMath.abs;e(e.S,\"Number\",{isSafeInteger:function isSafeInteger(t){return i(t)\u0026\u0026o(t)\u003c\u003d9007199254740991}})},{33:33,50:50}],184:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{MAX_SAFE_INTEGER:9007199254740991})},{33:33}],185:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{MIN_SAFE_INTEGER:-9007199254740991})},{33:33}],186:[function(t,n,r){var e\u003dt(33),i\u003dt(86);e(e.S+e.F*(Number.parseFloat!\u003di),\"Number\",{parseFloat:i})},{33:33,86:86}],187:[function(t,n,r){var e\u003dt(33),i\u003dt(87);e(e.S+e.F*(Number.parseInt!\u003di),\"Number\",{parseInt:i})},{33:33,87:87}],188:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(116),o\u003dt(4),u\u003dt(110),c\u003d1..toFixed,a\u003dMath.floor,f\u003d[0,0,0,0,0,0],s\u003d\"Number.toFixed: incorrect invocation!\",l\u003dfunction(t,n){for(var r\u003d-1,e\u003dn;++r\u003c6;)e+\u003dt*f[r],f[r]\u003de%1e7,e\u003da(e/1e7)},h\u003dfunction(t){for(var n\u003d6,r\u003d0;--n\u003e\u003d0;)r+\u003df[n],f[n]\u003da(r/t),r\u003dr%t*1e7},v\u003dfunction(){for(var t\u003d6,n\u003d\"\";--t\u003e\u003d0;)if(\"\"!\u003d\u003dn||0\u003d\u003d\u003dt||0!\u003d\u003df[t]){var r\u003dString(f[t]);n\u003d\"\"\u003d\u003d\u003dn?r:n+u.call(\"0\",7-r.length)+r}return n},p\u003dfunction(t,n,r){return 0\u003d\u003d\u003dn?r:n%2\u003d\u003d1?p(t,n-1,r*t):p(t*t,n/2,r)},d\u003dfunction(t){for(var n\u003d0,r\u003dt;r\u003e\u003d4096;)n+\u003d12,r/\u003d4096;for(;r\u003e\u003d2;)n+\u003d1,r/\u003d2;return n};e(e.P+e.F*(!!c\u0026\u0026(\"0.000\"!\u003d\u003d8e-5.toFixed(3)||\"1\"!\u003d\u003d.9.toFixed(0)||\"1.25\"!\u003d\u003d1.255.toFixed(2)||\"1000000000000000128\"!\u003d\u003d(0xde0b6b3a7640080).toFixed(0))||!t(35)(function(){c.call({})})),\"Number\",{toFixed:function toFixed(t){var n,r,e,c,a\u003do(this,s),f\u003di(t),y\u003d\"\",g\u003d\"0\";if(f\u003c0||f\u003e20)throw RangeError(s);if(a!\u003da)return\"NaN\";if(a\u003c\u003d-1e21||a\u003e\u003d1e21)return String(a);if(a\u003c0\u0026\u0026(y\u003d\"-\",a\u003d-a),a\u003e1e-21)if(n\u003dd(a*p(2,69,1))-69,r\u003dn\u003c0?a*p(2,-n,1):a/p(2,n,1),r*\u003d4503599627370496,(n\u003d52-n)\u003e0){for(l(0,r),e\u003df;e\u003e\u003d7;)l(1e7,0),e-\u003d7;for(l(p(10,e,1),0),e\u003dn-1;e\u003e\u003d23;)h(1\u003c\u003c23),e-\u003d23;h(1\u003c\u003ce),l(1,1),h(2),g\u003dv()}else l(0,r),l(1\u003c\u003c-n,0),g\u003dv()+u.call(\"0\",f);return f\u003e0?(c\u003dg.length,g\u003dy+(c\u003c\u003df?\"0.\"+u.call(\"0\",f-c)+g:g.slice(0,c-f)+\".\"+g.slice(c-f))):g\u003dy+g,g}})},{110:110,116:116,33:33,35:35,4:4}],189:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(35),o\u003dt(4),u\u003d1..toPrecision;e(e.P+e.F*(i(function(){return\"1\"!\u003d\u003du.call(1,void 0)})||!i(function(){u.call({})})),\"Number\",{toPrecision:function toPrecision(t){var n\u003do(this,\"Number#toPrecision: incorrect invocation!\");return void 0\u003d\u003d\u003dt?u.call(n):u.call(n,t)}})},{33:33,35:35,4:4}],190:[function(t,n,r){var e\u003dt(33);e(e.S+e.F,\"Object\",{assign:t(70)})},{33:33,70:70}],191:[function(t,n,r){var e\u003dt(33);e(e.S,\"Object\",{create:t(71)})},{33:33,71:71}],192:[function(t,n,r){var e\u003dt(33);e(e.S+e.F*!t(29),\"Object\",{defineProperties:t(73)})},{29:29,33:33,73:73}],193:[function(t,n,r){var e\u003dt(33);e(e.S+e.F*!t(29),\"Object\",{defineProperty:t(72).f})},{29:29,33:33,72:72}],194:[function(t,n,r){var e\u003dt(51),i\u003dt(66).onFreeze;t(83)(\"freeze\",function(t){return function freeze(n){return t\u0026\u0026e(n)?t(i(n)):n}})},{51:51,66:66,83:83}],195:[function(t,n,r){var e\u003dt(117),i\u003dt(75).f;t(83)(\"getOwnPropertyDescriptor\",function(){return function getOwnPropertyDescriptor(t,n){return i(e(t),n)}})},{117:117,75:75,83:83}],196:[function(t,n,r){t(83)(\"getOwnPropertyNames\",function(){return t(76).f})},{76:76,83:83}],197:[function(t,n,r){var e\u003dt(119),i\u003dt(79);t(83)(\"getPrototypeOf\",function(){return function getPrototypeOf(t){return i(e(t))}})},{119:119,79:79,83:83}],198:[function(t,n,r){var e\u003dt(51);t(83)(\"isExtensible\",function(t){return function isExtensible(n){return!!e(n)\u0026\u0026(!t||t(n))}})},{51:51,83:83}],199:[function(t,n,r){var e\u003dt(51);t(83)(\"isFrozen\",function(t){return function isFrozen(n){return!e(n)||!!t\u0026\u0026t(n)}})},{51:51,83:83}],200:[function(t,n,r){var e\u003dt(51);t(83)(\"isSealed\",function(t){return function isSealed(n){return!e(n)||!!t\u0026\u0026t(n)}})},{51:51,83:83}],201:[function(t,n,r){var e\u003dt(33);e(e.S,\"Object\",{is:t(96)})},{33:33,96:96}],202:[function(t,n,r){var e\u003dt(119),i\u003dt(81);t(83)(\"keys\",function(){return function keys(t){return i(e(t))}})},{119:119,81:81,83:83}],203:[function(t,n,r){var e\u003dt(51),i\u003dt(66).onFreeze;t(83)(\"preventExtensions\",function(t){return function preventExtensions(n){return t\u0026\u0026e(n)?t(i(n)):n}})},{51:51,66:66,83:83}],204:[function(t,n,r){var e\u003dt(51),i\u003dt(66).onFreeze;t(83)(\"seal\",function(t){return function seal(n){return t\u0026\u0026e(n)?t(i(n)):n}})},{51:51,66:66,83:83}],205:[function(t,n,r){var e\u003dt(33);e(e.S,\"Object\",{setPrototypeOf:t(99).set})},{33:33,99:99}],206:[function(t,n,r){\"use strict\";var e\u003dt(17),i\u003d{};i[t(128)(\"toStringTag\")]\u003d\"z\",i+\"\"!\u003d\"[object z]\"\u0026\u0026t(94)(Object.prototype,\"toString\",function toString(){return\"[object \"+e(this)+\"]\"},!0)},{128:128,17:17,94:94}],207:[function(t,n,r){var e\u003dt(33),i\u003dt(86);e(e.G+e.F*(parseFloat!\u003di),{parseFloat:i})},{33:33,86:86}],208:[function(t,n,r){var e\u003dt(33),i\u003dt(87);e(e.G+e.F*(parseInt!\u003di),{parseInt:i})},{33:33,87:87}],209:[function(t,n,r){\"use strict\";var e,i,o,u,c\u003dt(60),a\u003dt(40),f\u003dt(25),s\u003dt(17),l\u003dt(33),h\u003dt(51),v\u003dt(3),p\u003dt(6),d\u003dt(39),y\u003dt(104),g\u003dt(113).set,m\u003dt(68)(),b\u003dt(69),x\u003dt(90),S\u003dt(91),w\u003da.TypeError,_\u003da.process,E\u003da.Promise,O\u003d\"process\"\u003d\u003ds(_),P\u003dfunction(){},M\u003di\u003db.f,F\u003d!!function(){try{var n\u003dE.resolve(1),r\u003d(n.constructor\u003d{})[t(128)(\"species\")]\u003dfunction(t){t(P,P)};return(O||\"function\"\u003d\u003dtypeof PromiseRejectionEvent)\u0026\u0026n.then(P)instanceof r}catch(t){}}(),I\u003dc?function(t,n){return t\u003d\u003d\u003dn||t\u003d\u003d\u003dE\u0026\u0026n\u003d\u003d\u003du}:function(t,n){return t\u003d\u003d\u003dn},A\u003dfunction(t){var n;return!(!h(t)||\"function\"!\u003dtypeof(n\u003dt.then))\u0026\u0026n},k\u003dfunction(t,n){if(!t._n){t._n\u003d!0;var r\u003dt._c;m(function(){for(var e\u003dt._v,i\u003d1\u003d\u003dt._s,o\u003d0;r.length\u003eo;)!function(n){var r,o,u\u003di?n.ok:n.fail,c\u003dn.resolve,a\u003dn.reject,f\u003dn.domain;try{u?(i||(2\u003d\u003dt._h\u0026\u0026T(t),t._h\u003d1),!0\u003d\u003d\u003du?r\u003de:(f\u0026\u0026f.enter(),r\u003du(e),f\u0026\u0026f.exit()),r\u003d\u003d\u003dn.promise?a(w(\"Promise-chain cycle\")):(o\u003dA(r))?o.call(r,c,a):c(r)):a(e)}catch(t){a(t)}}(r[o++]);t._c\u003d[],t._n\u003d!1,n\u0026\u0026!t._h\u0026\u0026N(t)})}},N\u003dfunction(t){g.call(a,function(){var n,r,e,i\u003dt._v,o\u003dj(t);if(o\u0026\u0026(n\u003dx(function(){O?_.emit(\"unhandledRejection\",i,t):(r\u003da.onunhandledrejection)?r({promise:t,reason:i}):(e\u003da.console)\u0026\u0026e.error\u0026\u0026e.error(\"Unhandled promise rejection\",i)}),t._h\u003dO||j(t)?2:1),t._a\u003dvoid 0,o\u0026\u0026n.e)throw n.v})},j\u003dfunction(t){if(1\u003d\u003dt._h)return!1;for(var n,r\u003dt._a||t._c,e\u003d0;r.length\u003ee;)if(n\u003dr[e++],n.fail||!j(n.promise))return!1;return!0},T\u003dfunction(t){g.call(a,function(){var n;O?_.emit(\"rejectionHandled\",t):(n\u003da.onrejectionhandled)\u0026\u0026n({promise:t,reason:t._v})})},R\u003dfunction(t){var n\u003dthis;n._d||(n._d\u003d!0,n\u003dn._w||n,n._v\u003dt,n._s\u003d2,n._a||(n._a\u003dn._c.slice()),k(n,!0))},L\u003dfunction(t){var n,r\u003dthis;if(!r._d){r._d\u003d!0,r\u003dr._w||r;try{if(r\u003d\u003d\u003dt)throw w(\"Promise can\u0027t be resolved itself\");(n\u003dA(t))?m(function(){var e\u003d{_w:r,_d:!1};try{n.call(t,f(L,e,1),f(R,e,1))}catch(t){R.call(e,t)}}):(r._v\u003dt,r._s\u003d1,k(r,!1))}catch(t){R.call({_w:r,_d:!1},t)}}};F||(E\u003dfunction Promise(t){p(this,E,\"Promise\",\"_h\"),v(t),e.call(this);try{t(f(L,this,1),f(R,this,1))}catch(t){R.call(this,t)}},e\u003dfunction Promise(t){this._c\u003d[],this._a\u003dvoid 0,this._s\u003d0,this._d\u003d!1,this._v\u003dvoid 0,this._h\u003d0,this._n\u003d!1},e.prototype\u003dt(93)(E.prototype,{then:function then(t,n){var r\u003dM(y(this,E));return r.ok\u003d\"function\"!\u003dtypeof t||t,r.fail\u003d\"function\"\u003d\u003dtypeof n\u0026\u0026n,r.domain\u003dO?_.domain:void 0,this._c.push(r),this._a\u0026\u0026this._a.push(r),this._s\u0026\u0026k(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o\u003dfunction(){var t\u003dnew e;this.promise\u003dt,this.resolve\u003df(L,t,1),this.reject\u003df(R,t,1)},b.f\u003dM\u003dfunction(t){return I(E,t)?new o(t):i(t)}),l(l.G+l.W+l.F*!F,{Promise:E}),t(101)(E,\"Promise\"),t(100)(\"Promise\"),u\u003dt(23).Promise,l(l.S+l.F*!F,\"Promise\",{reject:function reject(t){var n\u003dM(this);return(0,n.reject)(t),n.promise}}),l(l.S+l.F*(c||!F),\"Promise\",{resolve:function resolve(t){return t instanceof E\u0026\u0026I(t.constructor,this)?t:S(this,t)}}),l(l.S+l.F*!(F\u0026\u0026t(56)(function(t){E.all(t).catch(P)})),\"Promise\",{all:function all(t){var n\u003dthis,r\u003dM(n),e\u003dr.resolve,i\u003dr.reject,o\u003dx(function(){var r\u003d[],o\u003d0,u\u003d1;d(t,!1,function(t){var c\u003do++,a\u003d!1;r.push(void 0),u++,n.resolve(t).then(function(t){a||(a\u003d!0,r[c]\u003dt,--u||e(r))},i)}),--u||e(r)});return o.e\u0026\u0026i(o.v),r.promise},race:function race(t){var n\u003dthis,r\u003dM(n),e\u003dr.reject,i\u003dx(function(){d(t,!1,function(t){n.resolve(t).then(r.resolve,e)})});return i.e\u0026\u0026e(i.v),r.promise}})},{100:100,101:101,104:104,113:113,128:128,17:17,23:23,25:25,"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"3:3,33:33,39:39,40:40,51:51,56:56,6:6,60:60,68:68,69:69,90:90,91:91,93:93}],210:[function(t,n,r){var e\u003dt(33),i\u003dt(3),o\u003dt(7),u\u003d(t(40).Reflect||{}).apply,c\u003dFunction.apply;e(e.S+e.F*!t(35)(function(){u(function(){})}),\"Reflect\",{apply:function apply(t,n,r){var e\u003di(t),a\u003do(r);return u?u(e,n,a):c.call(e,n,a)}})},{3:3,33:33,35:35,40:40,7:7}],211:[function(t,n,r){var e\u003dt(33),i\u003dt(71),o\u003dt(3),u\u003dt(7),c\u003dt(51),a\u003dt(35),f\u003dt(16),s\u003d(t(40).Reflect||{}).construct,l\u003da(function(){function F(){}return!(s(function(){},[],F)instanceof F)}),h\u003d!a(function(){s(function(){})});e(e.S+e.F*(l||h),\"Reflect\",{construct:function construct(t,n){o(t),u(n);var r\u003darguments.length\u003c3?t:o(arguments[2]);if(h\u0026\u0026!l)return s(t,n,r);if(t\u003d\u003dr){switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3])}var e\u003d[null];return e.push.apply(e,n),new(f.apply(t,e))}var a\u003dr.prototype,v\u003di(c(a)?a:Object.prototype),p\u003dFunction.apply.call(t,v,n);return c(p)?p:v}})},{16:16,3:3,33:33,35:35,40:40,51:51,7:7,71:71}],212:[function(t,n,r){var e\u003dt(72),i\u003dt(33),o\u003dt(7),u\u003dt(120);i(i.S+i.F*t(35)(function(){Reflect.defineProperty(e.f({},1,{value:1}),1,{value:2})}),\"Reflect\",{defineProperty:function defineProperty(t,n,r){o(t),n\u003du(n,!0),o(r);try{return e.f(t,n,r),!0}catch(t){return!1}}})},{120:120,33:33,35:35,7:7,72:72}],213:[function(t,n,r){var e\u003dt(33),i\u003dt(75).f,o\u003dt(7);e(e.S,\"Reflect\",{deleteProperty:function deleteProperty(t,n){var r\u003di(o(t),n);return!(r\u0026\u0026!r.configurable)\u0026\u0026delete t[n]}})},{33:33,7:7,75:75}],214:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(7),o\u003dfunction(t){this._t\u003di(t),this._i\u003d0;var n,r\u003dthis._k\u003d[];for(n in t)r.push(n)};t(54)(o,\"Object\",function(){var t,n\u003dthis,r\u003dn._k;do{if(n._i\u003e\u003dr.length)return{value:void 0,done:!0}}while(!((t\u003dr[n._i++])in n._t));return{value:t,done:!1}}),e(e.S,\"Reflect\",{enumerate:function enumerate(t){return new o(t)}})},{33:33,54:54,7:7}],215:[function(t,n,r){var e\u003dt(75),i\u003dt(33),o\u003dt(7);i(i.S,\"Reflect\",{getOwnPropertyDescriptor:function getOwnPropertyDescriptor(t,n){return e.f(o(t),n)}})},{33:33,7:7,75:75}],216:[function(t,n,r){var e\u003dt(33),i\u003dt(79),o\u003dt(7);e(e.S,\"Reflect\",{getPrototypeOf:function getPrototypeOf(t){return i(o(t))}})},{33:33,7:7,79:79}],217:[function(t,n,r){function get(t,n){var r,u,f\u003darguments.length\u003c3?t:arguments[2];return a(t)\u003d\u003d\u003df?t[n]:(r\u003de.f(t,n))?o(r,\"value\")?r.value:void 0!\u003d\u003dr.get?r.get.call(f):void 0:c(u\u003di(t))?get(u,n,f):void 0}var e\u003dt(75),i\u003dt(79),o\u003dt(41),u\u003dt(33),c\u003dt(51),a\u003dt(7);u(u.S,\"Reflect\",{get:get})},{33:33,41:41,51:51,7:7,75:75,79:79}],218:[function(t,n,r){var e\u003dt(33);e(e.S,\"Reflect\",{has:function has(t,n){return n in t}})},{33:33}],219:[function(t,n,r){var e\u003dt(33),i\u003dt(7),o\u003dObject.isExtensible;e(e.S,\"Reflect\",{isExtensible:function isExtensible(t){return i(t),!o||o(t)}})},{33:33,7:7}],220:[function(t,n,r){var e\u003dt(33);e(e.S,\"Reflect\",{ownKeys:t(85)})},{33:33,85:85}],221:[function(t,n,r){var e\u003dt(33),i\u003dt(7),o\u003dObject.preventExtensions;e(e.S,\"Reflect\",{preventExtensions:function preventExtensions(t){i(t);try{return o\u0026\u0026o(t),!0}catch(t){return!1}}})},{33:33,7:7}],222:[function(t,n,r){var e\u003dt(33),i\u003dt(99);i\u0026\u0026e(e.S,\"Reflect\",{setPrototypeOf:function setPrototypeOf(t,n){i.check(t,n);try{return i.set(t,n),!0}catch(t){return!1}}})},{33:33,99:99}],223:[function(t,n,r){function set(t,n,r){var c,l,h\u003darguments.length\u003c4?t:arguments[3],v\u003di.f(f(t),n);if(!v){if(s(l\u003do(t)))return set(l,n,r,h);v\u003da(0)}return u(v,\"value\")?!(!1\u003d\u003d\u003dv.writable||!s(h))\u0026\u0026(c\u003di.f(h,n)||a(0),c.value\u003dr,e.f(h,n,c),!0):void 0!\u003d\u003dv.set\u0026\u0026(v.set.call(h,r),!0)}var e\u003dt(72),i\u003dt(75),o\u003dt(79),u\u003dt(41),c\u003dt(33),a\u003dt(92),f\u003dt(7),s\u003dt(51);c(c.S,\"Reflect\",{set:set})},{33:33,41:41,51:51,7:7,72:72,75:75,79:79,92:92}],224:[function(t,n,r){var e\u003dt(40),i\u003dt(45),o\u003dt(72).f,u\u003dt(77).f,c\u003dt(52),a\u003dt(37),f\u003de.RegExp,s\u003df,l\u003df.prototype,h\u003d/a/g,v\u003d/a/g,p\u003dnew f(h)!\u003d\u003dh;if(t(29)\u0026\u0026(!p||t(35)(function(){return v[t(128)(\"match\")]\u003d!1,f(h)!\u003dh||f(v)\u003d\u003dv||\"/a/i\"!\u003df(h,\"i\")}))){f\u003dfunction RegExp(t,n){var r\u003dthis instanceof f,e\u003dc(t),o\u003dvoid 0\u003d\u003d\u003dn;return!r\u0026\u0026e\u0026\u0026t.constructor\u003d\u003d\u003df\u0026\u0026o?t:i(p?new s(e\u0026\u0026!o?t.source:t,n):s((e\u003dt instanceof f)?t.source:t,e\u0026\u0026o?a.call(t):n),r?this:l,f)};for(var d\u003du(s),y\u003d0;d.length\u003ey;)!function(t){t in f||o(f,t,{configurable:!0,get:function(){return s[t]},set:function(n){s[t]\u003dn}})}(d[y++]);l.constructor\u003df,f.prototype\u003dl,t(94)(e,\"RegExp\",f)}t(100)(\"RegExp\")},{100:100,128:128,29:29,35:35,37:37,40:40,45:45,52:52,72:72,77:77,94:94}],225:[function(t,n,r){t(29)\u0026\u0026\"g\"!\u003d/./g.flags\u0026\u0026t(72).f(RegExp.prototype,\"flags\",{configurable:!0,get:t(37)})},{29:29,37:37,72:72}],226:[function(t,n,r){t(36)(\"match\",1,function(t,n,r){return[function match(r){\"use strict\";var e\u003dt(this),i\u003dvoid 0\u003d\u003dr?void 0:r[n];return void 0!\u003d\u003di?i.call(r,e):new RegExp(r)[n](String(e))},r]})},{36:36}],227:[function(t,n,r){t(36)(\"replace\",2,function(t,n,r){return[function replace(e,i){\"use strict\";var o\u003dt(this),u\u003dvoid 0\u003d\u003de?void 0:e[n];return void 0!\u003d\u003du?u.call(e,o,i):r.call(String(o),e,i)},r]})},{36:36}],228:[function(t,n,r){t(36)(\"search\",1,function(t,n,r){return[function search(r){\"use strict\";var e\u003dt(this),i\u003dvoid 0\u003d\u003dr?void 0:r[n];return void 0!\u003d\u003di?i.call(r,e):new RegExp(r)[n](String(e))},r]})},{36:36}],229:[function(t,n,r){t(36)(\"split\",2,function(n,r,e){\"use strict\";var i\u003dt(52),o\u003de,u\u003d[].push,c\u003d\"length\";if(\"c\"\u003d\u003d\"abbc\".split(/(b)*/)[1]||4!\u003d\"test\".split(/(?:)/,-1)[c]||2!\u003d\"ab\".split(/(?:ab)*/)[c]||4!\u003d\".\".split(/(.?)(.?)/)[c]||\".\".split(/()()/)[c]\u003e1||\"\".split(/.?/)[c]){var a\u003dvoid 0\u003d\u003d\u003d/()??/.exec(\"\")[1];e\u003dfunction(t,n){var r\u003dString(this);if(void 0\u003d\u003d\u003dt\u0026\u00260\u003d\u003d\u003dn)return[];if(!i(t))return o.call(r,t,n);var e,f,s,l,h,v\u003d[],p\u003d(t.ignoreCase?\"i\":\"\")+(t.multiline?\"m\":\"\")+(t.unicode?\"u\":\"\")+(t.sticky?\"y\":\"\"),d\u003d0,y\u003dvoid 0\u003d\u003d\u003dn?4294967295:n\u003e\u003e\u003e0,g\u003dnew RegExp(t.source,p+\"g\");for(a||(e\u003dnew RegExp(\"^\"+g.source+\"$(?!\\\\s)\",p));(f\u003dg.exec(r))\u0026\u0026!((s\u003df.index+f[0][c])\u003ed\u0026\u0026(v.push(r.slice(d,f.index)),!a\u0026\u0026f[c]\u003e1\u0026\u0026f[0].replace(e,function(){for(h\u003d1;h\u003carguments[c]-2;h++)void 0\u003d\u003d\u003darguments[h]\u0026\u0026(f[h]\u003dvoid 0)}),f[c]\u003e1\u0026\u0026f.index\u003cr[c]\u0026\u0026u.apply(v,f.slice(1)),l\u003df[0][c],d\u003ds,v[c]\u003e\u003dy));)g.lastIndex\u003d\u003d\u003df.index\u0026\u0026g.lastIndex++;return d\u003d\u003d\u003dr[c]?!l\u0026\u0026g.test(\"\")||v.push(\"\"):v.push(r.slice(d)),v[c]\u003ey?v.slice(0,y):v}}else\"0\".split(void 0,0)[c]\u0026\u0026(e\u003dfunction(t,n){return void 0\u003d\u003d\u003dt\u0026\u00260\u003d\u003d\u003dn?[]:o.call(this,t,n)});return[function split(t,i){var o\u003dn(this),u\u003dvoid 0\u003d\u003dt?void 0:t[r];return void 0!\u003d\u003du?u.call(t,o,i):e.call(String(o),t,i)},e]})},{36:36,52:52}],230:[function(t,n,r){\"use strict\";t(225);var e\u003dt(7),i\u003dt(37),o\u003dt(29),u\u003d/./.toString,c\u003dfunction(n){t(94)(RegExp.prototype,\"toString\",n,!0)};t(35)(function(){return\"/a/b\"!\u003du.call({source:\"a\",flags:\"b\"})})?c(function toString(){var t\u003de(this);return\"/\".concat(t.source,\"/\",\"flags\"in t?t.flags:!o\u0026\u0026t instanceof RegExp?i.call(t):void 0)}):\"toString\"!\u003du.name\u0026\u0026c(function toString(){return u.call(this)})},{225:225,29:29,35:35,37:37,7:7,94:94}],231:[function(t,n,r){\"use strict\";var e\u003dt(19),i\u003dt(125);n.exports\u003dt(22)(\"Set\",function(t){return function Set(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},{add:function add(t){return e.def(i(this,\"Set\"),t\u003d0\u003d\u003d\u003dt?0:t,t)}},e)},{125:125,19:19,22:22}],232:[function(t,n,r){\"use strict\";t(108)(\"anchor\",function(t){return function anchor(n){return t(this,\"a\",\"name\",n)}})},{108:108}],233:[function(t,n,r){\"use strict\";t(108)(\"big\",function(t){return function big(){return t(this,\"big\",\"\",\"\")}})},{108:108}],234:[function(t,n,r){\"use strict\";t(108)(\"blink\",function(t){return function blink(){return t(this,\"blink\",\"\",\"\")}})},{108:108}],235:[function(t,n,r){\"use strict\";t(108)(\"bold\",function(t){return function bold(){return t(this,\"b\",\"\",\"\")}})},{108:108}],236:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(106)(!1);e(e.P,\"String\",{codePointAt:function codePointAt(t){return i(this,t)}})},{106:106,33:33}],237:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(118),o\u003dt(107),u\u003d\"\".endsWith;e(e.P+e.F*t(34)(\"endsWith\"),\"String\",{endsWith:function endsWith(t){var n\u003do(this,t,\"endsWith\"),r\u003darguments.length\u003e1?arguments[1]:void 0,e\u003di(n.length),c\u003dvoid 0\u003d\u003d\u003dr?e:Math.min(i(r),e),a\u003dString(t);return u?u.call(n,a,c):n.slice(c-a.length,c)\u003d\u003d\u003da}})},{107:107,118:118,33:33,34:34}],238:[function(t,n,r){\"use strict\";t(108)(\"fixed\",function(t){return function fixed(){return t(this,\"tt\",\"\",\"\")}})},{108:108}],239:[function(t,n,r){\"use strict\";t(108)(\"fontcolor\",function(t){return function fontcolor(n){return t(this,\"font\",\"color\",n)}})},{108:108}],240:[function(t,n,r){\"use strict\";t(108)(\"fontsize\",function(t){return function fontsize(n){return t(this,\"font\",\"size\",n)}})},{108:108}],241:[function(t,n,r){var e\u003dt(33),i\u003dt(114),o\u003dString.fromCharCode,u\u003dString.fromCodePoint;e(e.S+e.F*(!!u\u0026\u00261!\u003du.length),\"String\",{fromCodePoint:function fromCodePoint(t){for(var n,r\u003d[],e\u003darguments.length,u\u003d0;e\u003eu;){if(n\u003d+arguments[u++],i(n,1114111)!\u003d\u003dn)throw RangeError(n+\" is not a valid code point\");r.push(n\u003c65536?o(n):o(55296+((n-\u003d65536)\u003e\u003e10),n%1024+56320))}return r.join(\"\")}})},{114:114,33:33}],242:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(107);e(e.P+e.F*t(34)(\"includes\"),\"String\",{includes:function includes(t){return!!~i(this,t,\"includes\").indexOf(t,arguments.length\u003e1?arguments[1]:void 0)}})},{107:107,33:33,34:34}],243:[function(t,n,r){\"use strict\";t(108)(\"italics\",function(t){return function italics(){return t(this,\"i\",\"\",\"\")}})},{108:108}],244:[function(t,n,r){\"use strict\";var e\u003dt(106)(!0);t(55)(String,\"String\",function(t){this._t\u003dString(t),this._i\u003d0},function(){var t,n\u003dthis._t,r\u003dthis._i;return r\u003e\u003dn.length?{value:void 0,done:!0}:(t\u003de(n,r),this._i+\u003dt.length,{value:t,done:!1})})},{106:106,55:55}],245:[function(t,n,r){\"use strict\";t(108)(\"link\",function(t){return function link(n){return t(this,\"a\",\"href\",n)}})},{108:108}],246:[function(t,n,r){var e\u003dt(33),i\u003dt(117),o\u003dt(118);e(e.S,\"String\",{raw:function raw(t){for(var n\u003di(t.raw),r\u003do(n.length),e\u003darguments.length,u\u003d[],c\u003d0;r\u003ec;)u.push(String(n[c++])),c\u003ce\u0026\u0026u.push(String(arguments[c]));return u.join(\"\")}})},{117:117,118:118,33:33}],247:[function(t,n,r){var e\u003dt(33);e(e.P,\"String\",{repeat:t(110)})},{110:110,33:33}],248:[function(t,n,r){\"use strict\";t(108)(\"small\",function(t){return function small(){return t(this,\"small\",\"\",\"\")}})},{108:108}],249:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(118),o\u003dt(107),u\u003d\"\".startsWith;e(e.P+e.F*t(34)(\"startsWith\"),\"String\",{startsWith:function startsWith(t){var n\u003do(this,t,\"startsWith\"),r\u003di(Math.min(arguments.length\u003e1?arguments[1]:void 0,n.length)),e\u003dString(t);return u?u.call(n,e,r):n.slice(r,r+e.length)\u003d\u003d\u003de}})},{107:107,118:118,33:33,34:34}],250:[function(t,n,r){\"use strict\";t(108)(\"strike\",function(t){return function strike(){return t(this,\"strike\",\"\",\"\")}})},{108:108}],251:[function(t,n,r){\"use strict\";t(108)(\"sub\",function(t){return function sub(){return t(this,\"sub\",\"\",\"\")}})},{108:108}],252:[function(t,n,r){\"use strict\";t(108)(\"sup\",function(t){return function sup(){return t(this,\"sup\",\"\",\"\")}})},{108:108}],253:[function(t,n,r){\"use strict\";t(111)(\"trim\",function(t){return function trim(){return t(this,3)}})},{111:111}],254:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(41),o\u003dt(29),u\u003dt(33),c\u003dt(94),a\u003dt(66).KEY,f\u003dt(35),s\u003dt(103),l\u003dt(101),h\u003dt(124),v\u003dt(128),p\u003dt(127),d\u003dt(126),y\u003dt(59),g\u003dt(32),m\u003dt(49),b\u003dt(7),x\u003dt(117),S\u003dt(120),w\u003dt(92),_\u003dt(71),E\u003dt(76),O\u003dt(75),P\u003dt(72),M\u003dt(81),F\u003dO.f,I\u003dP.f,A\u003dE.f,k\u003de.Symbol,N\u003de.JSON,j\u003dN\u0026\u0026N.stringify,T\u003dv(\"_hidden\"),R\u003dv(\"toPrimitive\"),L\u003d{}.propertyIsEnumerable,G\u003ds(\"symbol-registry\"),D\u003ds(\"symbols\"),C\u003ds(\"op-symbols\"),W\u003dObject.prototype,U\u003d\"function\"\u003d\u003dtypeof k,B\u003de.QObject,V\u003d!B||!B.prototype||!B.prototype.findChild,z\u003do\u0026\u0026f(function(){return 7!\u003d_(I({},\"a\",{get:function(){return I(this,\"a\",{value:7}).a}})).a})?function(t,n,r){var e\u003dF(W,n);e\u0026\u0026delete W[n],I(t,n,r),e\u0026\u0026t!\u003d\u003dW\u0026\u0026I(W,n,e)}:I,q\u003dfunction(t){var n\u003dD[t]\u003d_(k.prototype);return n._k\u003dt,n},K\u003dU\u0026\u0026\"symbol\"\u003d\u003dtypeof k.iterator?function(t){return\"symbol\"\u003d\u003dtypeof t}:function(t){return t instanceof k},Y\u003dfunction defineProperty(t,n,r){return t\u003d\u003d\u003dW\u0026\u0026Y(C,n,r),b(t),n\u003dS(n,!0),b(r),i(D,n)?(r.enumerable?(i(t,T)\u0026\u0026t[T][n]\u0026\u0026(t[T][n]\u003d!1),r\u003d_(r,{enumerable:w(0,!1)})):(i(t,T)||I(t,T,w(1,{})),t[T][n]\u003d!0),z(t,n,r)):I(t,n,r)},J\u003dfunction defineProperties(t,n){b(t);for(var r,e\u003dg(n\u003dx(n)),i\u003d0,o\u003de.length;o\u003ei;)Y(t,r\u003de[i++],n[r]);return t},H\u003dfunction create(t,n){return void 0\u003d\u003d\u003dn?_(t):J(_(t),n)},X\u003dfunction propertyIsEnumerable(t){var n\u003dL.call(this,t\u003dS(t,!0));return!(this\u003d\u003d\u003dW\u0026\u0026i(D,t)\u0026\u0026!i(C,t))\u0026\u0026(!(n||!i(this,t)||!i(D,t)||i(this,T)\u0026\u0026this[T][t])||n)},$\u003dfunction getOwnPropertyDescriptor(t,n){if(t\u003dx(t),n\u003dS(n,!0),t!\u003d\u003dW||!i(D,n)||i(C,n)){var r\u003dF(t,n);return!r||!i(D,n)||i(t,T)\u0026\u0026t[T][n]||(r.enumerable\u003d!0),r}},Z\u003dfunction getOwnPropertyNames(t){for(var n,r\u003dA(x(t)),e\u003d[],o\u003d0;r.length\u003eo;)i(D,n\u003dr[o++])||n\u003d\u003dT||n\u003d\u003da||e.push(n);return e},Q\u003dfunction getOwnPropertySymbols(t){for(var n,r\u003dt\u003d\u003d\u003dW,e\u003dA(r?C:x(t)),o\u003d[],u\u003d0;e.length\u003eu;)!i(D,n\u003de[u++])||r\u0026\u0026!i(W,n)||o.push(D[n]);return o};U||(k\u003dfunction Symbol(){if(this instanceof k)throw TypeError(\"Symbol is not a constructor!\");var t\u003dh(arguments.length\u003e0?arguments[0]:void 0),n\u003dfunction(r){this\u003d\u003d\u003dW\u0026\u0026n.call(C,r),i(this,T)\u0026\u0026i(this[T],t)\u0026\u0026(this[T][t]\u003d!1),z(this,t,w(1,r))};return o\u0026\u0026V\u0026\u0026z(W,t,{configurable:!0,set:n}),q(t)},c(k.prototype,\"toString\",function toString(){return this._k}),O.f\u003d$,P.f\u003dY,t(77).f\u003dE.f\u003dZ,t(82).f\u003dX,t(78).f\u003dQ,o\u0026\u0026!t(60)\u0026\u0026c(W,\"propertyIsEnumerable\",X,!0),p.f\u003dfunction(t){return q(v(t))}),u(u.G+u.W+u.F*!U,{Symbol:k});for(var tt\u003d\"hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables\".split(\",\"),nt\u003d0;tt.length\u003ent;)v(tt[nt++]);for(var rt\u003dM(v.store),et\u003d0;rt.length\u003eet;)d(rt[et++]);u(u.S+u.F*!U,\"Symbol\",{for:function(t){return i(G,t+\u003d\"\")?G[t]:G[t]\u003dk(t)},keyFor:function keyFor(t){if(K(t))return y(G,t);throw TypeError(t+\" is not a symbol!\")},useSetter:function(){V\u003d!0},useSimple:function(){V\u003d!1}}),u(u.S+u.F*!U,\"Object\",{create:H,defineProperty:Y,defineProperties:J,getOwnPropertyDescriptor:$,getOwnPropertyNames:Z,getOwnPropertySymbols:Q}),N\u0026\u0026u(u.S+u.F*(!U||f(function(){var t\u003dk();return\"[null]\"!\u003dj([t])||\"{}\"!\u003dj({a:t})||\"{}\"!\u003dj(Object(t))})),\"JSON\",{stringify:function stringify(t){if(void 0!\u003d\u003dt\u0026\u0026!K(t)){for(var n,r,e\u003d[t],i\u003d1;arguments.length\u003ei;)e.push(arguments[i++]);return n\u003de[1],\"function\"\u003d\u003dtypeof n\u0026\u0026(r\u003dn),!r\u0026\u0026m(n)||(n\u003dfunction(t,n){if(r\u0026\u0026(n\u003dr.call(this,t,n)),!K(n))return n}),e[1]\u003dn,j.apply(N,e)}}}),k.prototype[R]||t(42)(k.prototype,R,k.prototype.valueOf),l(k,\"Symbol\"),l(Math,\"Math\",!0),l(e.JSON,\"JSON\",!0)},{101:101,103:103,117:117,120:120,124:124,126:126,127:127,128:128,29:29,32:32,33:33,35:35,40:40,41:41,42:42,49:49,59:59,60:60,66:66,7:7,71:71,72:72,75:75,76:76,77:77,78:78,81:81,82:82,92:92,94:94}],255:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(123),o\u003dt(122),u\u003dt(7),c\u003dt(114),a\u003dt(118),f\u003dt(51),s\u003dt(40).ArrayBuffer,l\u003dt(104),h\u003do.ArrayBuffer,v\u003do.DataView,p\u003di.ABV\u0026\u0026s.isView,d\u003dh.prototype.slice,y\u003di.VIEW;e(e.G+e.W+e.F*(s!\u003d\u003dh),{ArrayBuffer:h}),e(e.S+e.F*!i.CONSTR,\"ArrayBuffer\",{isView:function isView(t){return p\u0026\u0026p(t)||f(t)\u0026\u0026y in t}}),e(e.P+e.U+e.F*t(35)(function(){return!new h(2).slice(1,void 0).byteLength}),\"ArrayBuffer\",{slice:function slice(t,n){if(void 0!\u003d\u003dd\u0026\u0026void 0\u003d\u003d\u003dn)return d.call(u(this),t);for(var r\u003du(this).byteLength,e\u003dc(t,r),i\u003dc(void 0\u003d\u003d\u003dn?r:n,r),o\u003dnew(l(this,h))(a(i-e)),f\u003dnew v(this),s\u003dnew v(o),p\u003d0;e\u003ci;)s.setUint8(p++,f.getUint8(e++));return o}}),t(100)(\"ArrayBuffer\")},{100:100,104:104,114:114,118:118,122:122,123:123,33:33,35:35,40:40,51:51,7:7}],256:[function(t,n,r){var e\u003dt(33);e(e.G+e.W+e.F*!t(123).ABV,{DataView:t(122).DataView})},{122:122,123:123,33:33}],257:[function(t,n,r){t(121)(\"Float32\",4,function(t){return function Float32Array(n,r,e){return t(this,n,r,e)}})},{121:121}],258:[function(t,n,r){t(121)(\"Float64\",8,function(t){return function Float64Array(n,r,e){return t(this,n,r,e)}})},{121:121}],259:[function(t,n,r){t(121)(\"Int16\",2,function(t){return function Int16Array(n,r,e){return t(this,n,r,e)}})},{121:121}],260:[function(t,n,r){t(121)(\"Int32\",4,function(t){return function Int32Array(n,r,e){return t(this,n,r,e)}})},{121:121}],261:[function(t,n,r){t(121)(\"Int8\",1,function(t){return function Int8Array(n,r,e){return t(this,n,r,e)}})},{121:121}],262:[function(t,n,r){t(121)(\"Uint16\",2,function(t){return function Uint16Array(n,r,e){return t(this,n,r,e)}})},{121:121}],263:[function(t,n,r){t(121)(\"Uint32\",4,function(t){return function Uint32Array(n,r,e){return t(this,n,r,e)}})},{121:121}],264:[function(t,n,r){t(121)(\"Uint8\",1,function(t){return function Uint8Array(n,r,e){return t(this,n,r,e)}})},{121:121}],265:[function(t,n,r){t(121)(\"Uint8\",1,function(t){return function Uint8ClampedArray(n,r,e){return t(this,n,r,e)}},!0)},{121:121}],266:[function(t,n,r){\"use strict\";var e,i\u003dt(12)(0),o\u003dt(94),u\u003dt(66),c\u003dt(70),a\u003dt(21),f\u003dt(51),s\u003dt(35),l\u003dt(125),h\u003du.getWeak,v\u003dObject.isExtensible,p\u003da.ufstore,d\u003d{},y\u003dfunction(t){return function WeakMap(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},g\u003d{get:function get(t){if(f(t)){var n\u003dh(t);return!0\u003d\u003d\u003dn?p(l(this,\"WeakMap\")).get(t):n?n[this._i]:void 0}},set:function set(t,n){return a.def(l(this,\"WeakMap\"),t,n)}},m\u003dn.exports\u003dt(22)(\"WeakMap\",y,g,a,!0,!0);s(function(){return 7!\u003d(new m).set((Object.freeze||Object)(d),7).get(d)})\u0026\u0026(e\u003da.getConstructor(y,\"WeakMap\"),c(e.prototype,g),u.NEED\u003d!0,i([\"delete\",\"has\",\"get\",\"set\"],function(t){var n\u003dm.prototype,r\u003dn[t];o(n,t,function(n,i){if(f(n)\u0026\u0026!v(n)){this._f||(this._f\u003dnew e);var o\u003dthis._f[t](n,i);return\"set\"\u003d\u003dt?this:o}return r.call(this,n,i)})}))},{12:12,125:125,21:21,22:22,35:35,51:51,66:66,70:70,94:94}],267:[function(t,n,r){\"use strict\";var e\u003dt(21),i\u003dt(125);t(22)(\"WeakSet\",function(t){return function WeakSet(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},{add:function add(t){return e.def(i(this,\"WeakSet\"),t,!0)}},e,!1,!0)},{125:125,21:21,22:22}],268:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(38),o\u003dt(119),u\u003dt(118),c\u003dt(3),a\u003dt(15);e(e.P,\"Array\",{flatMap:function flatMap(t){var n,r,e\u003do(this);return c(t),n\u003du(e.length),r\u003da(e,0),i(r,e,e,n,0,1,t,arguments[1]),r}}),t(5)(\"flatMap\")},{118:118,119:119,15:15,3:3,33:33,38:38,5:5}],269:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(38),o\u003dt(119),u\u003dt(118),c\u003dt(116),a\u003dt(15);e(e.P,\"Array\",{flatten:function flatten(){var t\u003darguments[0],n\u003do(this),r\u003du(n.length),e\u003da(n,0);return i(e,n,n,r,0,void 0\u003d\u003d\u003dt?1:c(t)),e}}),t(5)(\"flatten\")},{116:116,118:118,119:119,15:15,33:33,38:38,5:5}],270:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(11)(!0);e(e.P,\"Array\",{includes:function includes(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0)}}),t(5)(\"includes\")},{11:11,33:33,5:5}],271:[function(t,n,r){var e\u003dt(33),i\u003dt(68)(),o\u003dt(40).process,u\u003d\"process\"\u003d\u003dt(18)(o);e(e.G,{asap:function asap(t){var n\u003du\u0026\u0026o.domain;i(n?n.bind(t):t)}})},{18:18,33:33,40:40,68:68}],272:[function(t,n,r){var e\u003dt(33),i\u003dt(18);e(e.S,\"Error\",{isError:function isError(t){return\"Error\"\u003d\u003d\u003di(t)}})},{18:18,33:33}],273:[function(t,n,r){var e\u003dt(33);e(e.G,{global:t(40)})},{33:33,40:40}],274:[function(t,n,r){t(97)(\"Map\")},{97:97}],275:[function(t,n,r){t(98)(\"Map\")},{98:98}],276:[function(t,n,r){var e\u003dt(33);e(e.P+e.R,\"Map\",{toJSON:t(20)(\"Map\")})},{20:20,33:33}],277:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{clamp:function clamp(t,n,r){return Math.min(r,Math.max(n,t))}})},{33:33}],278:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{DEG_PER_RAD:Math.PI/180})},{33:33}],279:[function(t,n,r){var e\u003dt(33),i\u003d180/Math.PI;e(e.S,\"Math\",{degrees:function degrees(t){return t*i}})},{33:33}],280:[function(t,n,r){var e\u003dt(33),i\u003dt(64),o\u003dt(62);e(e.S,\"Math\",{fscale:function fscale(t,n,r,e,u){return o(i(t,n,r,e,u))}})},{33:33,62:62,64:64}],281:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{iaddh:function iaddh(t,n,r,e){var i\u003dt\u003e\u003e\u003e0,o\u003dn\u003e\u003e\u003e0,u\u003dr\u003e\u003e\u003e0;return o+(e\u003e\u003e\u003e0)+((i\u0026u|(i|u)\u0026~(i+u\u003e\u003e\u003e0))\u003e\u003e\u003e31)|0}})},{33:33}],282:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{imulh:function imulh(t,n){var r\u003d+t,e\u003d+n,i\u003d65535\u0026r,o\u003d65535\u0026e,u\u003dr\u003e\u003e16,c\u003de\u003e\u003e16,a\u003d(u*o\u003e\u003e\u003e0)+(i*o\u003e\u003e\u003e16);return u*c+(a\u003e\u003e16)+((i*c\u003e\u003e\u003e0)+(65535\u0026a)\u003e\u003e16)}})},{33:33}],283:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{isubh:function isubh(t,n,r,e){var i\u003dt\u003e\u003e\u003e0,o\u003dn\u003e\u003e\u003e0,u\u003dr\u003e\u003e\u003e0;return o-(e\u003e\u003e\u003e0)-((~i\u0026u|~(i^u)\u0026i-u\u003e\u003e\u003e0)\u003e\u003e\u003e31)|0}})},{33:33}],284:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{RAD_PER_DEG:180/Math.PI})},{33:33}],285:[function(t,n,r){var e\u003dt(33),i\u003dMath.PI/180;e(e.S,\"Math\",{radians:function radians(t){return t*i}})},{33:33}],286:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{scale:t(64)})},{33:33,64:64}],287:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{signbit:function signbit(t){return(t\u003d+t)!\u003dt?t:0\u003d\u003dt?1/t\u003d\u003d1/0:t\u003e0}})},{33:33}],288:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{umulh:function umulh(t,n){var r\u003d+t,e\u003d+n,i\u003d65535\u0026r,o\u003d65535\u0026e,u\u003dr\u003e\u003e\u003e16,c\u003de\u003e\u003e\u003e16,a\u003d(u*o\u003e\u003e\u003e0)+(i*o\u003e\u003e\u003e16);return u*c+(a\u003e\u003e\u003e16)+((i*c\u003e\u003e\u003e0)+(65535\u0026a)\u003e\u003e\u003e16)}})},{33:33}],289:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(3),u\u003dt(72);t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__defineGetter__:function __defineGetter__(t,n){u.f(i(this),t,{get:o(n),enumerable:!0,configurable:!0})}})},{119:119,29:29,3:3,33:33,72:72,74:74}],290:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(3),u\u003dt(72);t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__defineSetter__:function __defineSetter__(t,n){u.f(i(this),t,{set:o(n),enumerable:!0,configurable:!0})}})},{119:119,29:29,3:3,33:33,72:72,74:74}],291:[function(t,n,r){var e\u003dt(33),i\u003dt(84)(!0);e(e.S,\"Object\",{entries:function entries(t){return i(t)}})},{33:33,84:84}],292:[function(t,n,r){var e\u003dt(33),i\u003dt(85),o\u003dt(117),u\u003dt(75),c\u003dt(24);e(e.S,\"Object\",{getOwnPropertyDescriptors:function getOwnPropertyDescriptors(t){for(var n,r,e\u003do(t),a\u003du.f,f\u003di(e),s\u003d{},l\u003d0;f.length\u003el;)void 0!\u003d\u003d(r\u003da(e,n\u003df[l++]))\u0026\u0026c(s,n,r);return s}})},{117:117,24:24,33:33,75:75,85:85}],293:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(120),u\u003dt(79),c\u003dt(75).f;t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__lookupGetter__:function __lookupGetter__(t){var n,r\u003di(this),e\u003do(t,!0);do{if(n\u003dc(r,e))return n.get}while(r\u003du(r))}})},{119:119,120:120,29:29,33:33,74:74,75:75,79:79}],294:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(120),u\u003dt(79),c\u003dt(75).f;t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__lookupSetter__:function __lookupSetter__(t){var n,r\u003di(this),e\u003do(t,!0);do{if(n\u003dc(r,e))return n.set}while(r\u003du(r))}})},{119:119,120:120,29:29,33:33,74:74,75:75,79:79}],295:[function(t,n,r){var e\u003dt(33),i\u003dt(84)(!1);e(e.S,\"Object\",{values:function values(t){return i(t)}})},{33:33,84:84}],296:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(40),o\u003dt(23),u\u003dt(68)(),c\u003dt(128)(\"observable\"),a\u003dt(3),f\u003dt(7),s\u003dt(6),l\u003dt(93),h\u003dt(42),v\u003dt(39),p\u003dv.RETURN,d\u003dfunction(t){return null\u003d\u003dt?void 0:a(t)},y\u003dfunction(t){var n\u003dt._c;n\u0026\u0026(t._c\u003dvoid 0,n())},g\u003dfunction(t){return void 0\u003d\u003d\u003dt._o},m\u003dfunction(t){g(t)||(t._o\u003dvoid 0,y(t))},b\u003dfunction(t,n){f(t),this._c\u003dvoid 0,this._o\u003dt,t\u003dnew x(this);try{var r\u003dn(t),e\u003dr;null!\u003dr\u0026\u0026(\"function\"\u003d\u003dtypeof r.unsubscribe?r\u003dfunction(){e.unsubscribe()}:a(r),this._c\u003dr)}catch(n){return void t.error(n)}g(this)\u0026\u0026y(this)};b.prototype\u003dl({},{unsubscribe:function unsubscribe(){m(this)}});var x\u003dfunction(t){this._s\u003dt};x.prototype\u003dl({},{next:function next(t){var n\u003dthis._s;if(!g(n)){var r\u003dn._o;try{var e\u003dd(r.next);if(e)return e.call(r,t)}catch(t){try{m(n)}finally{throw t}}}},error:function error(t){var n\u003dthis._s;if(g(n))throw t;var r\u003dn._o;n._o\u003dvoid 0;try{var e\u003dd(r.error);if(!e)throw t;t\u003de.call(r,t)}catch(t){try{y(n)}finally{throw t}}return y(n),t},complete:function complete(t){var n\u003dthis._s;if(!g(n)){var r\u003dn._o;n._o\u003dvoid 0;try{var e\u003dd(r.complete);t\u003de?e.call(r,t):void 0}catch(t){try{y(n)}finally{throw t}}return y(n),t}}});var S\u003dfunction Observable(t){s(this,S,\"Observable\",\"_f\")._f\u003da(t)};l(S.prototype,{subscribe:function subscribe(t){return new b(t,this._f)},forEach:function forEach(t){var n\u003dthis;return new(o.Promise||i.Promise)(function(r,e){a(t);var i\u003dn.subscribe({next:function(n){try{return t(n)}catch(t){e(t),i.unsubscribe()}},error:e,complete:r})})}}),l(S,{from:function from(t){var n\u003d\"function\"\u003d\u003dtypeof this?this:S,r\u003dd(f(t)[c]);if(r){var e\u003df(r.call(t));return e.constructor\u003d\u003d\u003dn?e:new n(function(t){return e.subscribe(t)})}return new n(function(n){var r\u003d!1;return u(function(){if(!r){try{if(v(t,!1,function(t){if(n.next(t),r)return p})\u003d\u003d\u003dp)return}catch(t){if(r)throw t;return void n.error(t)}n.complete()}}),function(){r\u003d!0}})},of:function of(){for(var t\u003d0,n\u003darguments.length,r\u003dArray(n);t\u003cn;)r[t]\u003darguments[t++];return new(\"function\"\u003d\u003dtypeof this?this:S)(function(t){var n\u003d!1;return u(function(){if(!n){for(var e\u003d0;e\u003cr.length;++e)if(t.next(r[e]),n)return;t.complete()}}),function(){n\u003d!0}})}}),h(S.prototype,c,function(){return this}),e(e.G,{Observable:S}),t(100)(\"Observable\")},{100:100,128:128,23:23,3:3,33:33,39:39,40:40,42:42,6:6,68:68,7:7,93:93}],297:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(23),o\u003dt(40),u\u003dt(104),c\u003dt(91);e(e.P+e.R,\"Promise\",{finally:function(t){var n\u003du(this,i.Promise||o.Promise),r\u003d\"function\"\u003d\u003dtypeof t;return this.then(r?function(r){return c(n,t()).then(function(){return r})}:t,r?function(r){return c(n,t()).then(function(){throw r})}:t)}})},{104:104,23:23,33:33,40:40,91:91}],298:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(69),o\u003dt(90);e(e.S,\"Promise\",{try:function(t){var n\u003di.f(this),r\u003do(t);return(r.e?n.reject:n.resolve)(r.v),n.promise}})},{33:33,69:69,90:90}],299:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.key,u\u003de.set;e.exp({defineMetadata:function defineMetadata(t,n,r,e){u(t,n,i(r),o(e))}})},{67:67,7:7}],300:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.key,u\u003de.map,c\u003de.store;e.exp({deleteMetadata:function deleteMetadata(t,n){var r\u003darguments.length\u003c3?void 0:o(arguments[2]),e\u003du(i(n),r,!1);if(void 0\u003d\u003d\u003de||!e.delete(t))return!1;if(e.size)return!0;var a\u003dc.get(n);return a.delete(r),!!a.size||c.delete(n)}})},{67:67,7:7}],301:[function(t,n,r){var e\u003dt(231),i\u003dt(10),o\u003dt(67),u\u003dt(7),c\u003dt(79),a\u003do.keys,f\u003do.key,s\u003dfunction(t,n){var r\u003da(t,n),o\u003dc(t);if(null\u003d\u003d\u003do)return r;var u\u003ds(o,n);return u.length?r.length?i(new e(r.concat(u))):u:r};o.exp({getMetadataKeys:function getMetadataKeys(t){return s(u(t),arguments.length\u003c2?void 0:f(arguments[1]))}})},{10:10,231:231,67:67,7:7,79:79}],302:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003dt(79),u\u003de.has,c\u003de.get,a\u003de.key,f\u003dfunction(t,n,r){if(u(t,n,r))return c(t,n,r);var e\u003do(n);return null!\u003d\u003de?f(t,e,r):void 0};e.exp({getMetadata:function getMetadata(t,n){return f(t,i(n),arguments.length\u003c3?void 0:a(arguments[2]))}})},{67:67,7:7,79:79}],303:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.keys,u\u003de.key;e.exp({getOwnMetadataKeys:function getOwnMetadataKeys(t){return o(i(t),arguments.length\u003c2?void 0:u(arguments[1]))}})},{67:67,7:7}],304:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.get,u\u003de.key;e.exp({getOwnMetadata:function getOwnMetadata(t,n){return o(t,i(n),arguments.length\u003c3?void 0:u(arguments[2]))}})},{67:67,7:7}],305:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003dt(79),u\u003de.has,c\u003de.key,a\u003dfunction(t,n,r){if(u(t,n,r))return!0;var e\u003do(n);return null!\u003d\u003de\u0026\u0026a(t,e,r)};e.exp({hasMetadata:function hasMetadata(t,n){return a(t,i(n),arguments.length\u003c3?void 0:c(arguments[2]))}})},{67:67,7:7,79:79}],306:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.has,u\u003de.key;e.exp({hasOwnMetadata:function hasOwnMetadata(t,n){return o(t,i(n),arguments.length\u003c3?void 0:u(arguments[2]))}})},{67:67,7:7}],307:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003dt(3),u\u003de.key,c\u003de.set;e.exp({metadata:function metadata(t,n){return function decorator(r,e){c(t,n,(void 0!\u003d\u003de?i:o)(r),u(e))}}})},{3:3,67:67,7:7}],308:[function(t,n,r){t(97)(\"Set\")},{97:97}],309:[function(t,n,r){t(98)(\"Set\")},{98:98}],310:[function(t,n,r){var e\u003dt(33);e(e.P+e.R,\"Set\",{toJSON:t(20)(\"Set\")})},{20:20,33:33}],311:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(106)(!0);e(e.P,\"String\",{at:function at(t){return i(this,t)}})},{106:106,33:33}],312:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(28),o\u003dt(118),u\u003dt(52),c\u003dt(37),a\u003dRegExp.prototype,f\u003dfunction(t,n){this._r\u003dt,this._s\u003dn};t(54)(f,\"RegExp String\",function next(){var t\u003dthis._r.exec(this._s);return{value:t,done:null\u003d\u003d\u003dt}}),e(e.P,\"String\",{matchAll:function matchAll(t){if(i(this),!u(t))throw TypeError(t+\" is not a regexp!\");var n\u003dString(this),r\u003d\"flags\"in a?String(t.flags):c.call(t),e\u003dnew RegExp(t.source,~r.indexOf(\"g\")?r:\"g\"+r);return e.lastIndex\u003do(t.lastIndex),new f(e,n)}})},{118:118,28:28,33:33,37:37,52:52,54:54}],313:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(109);e(e.P,\"String\",{padEnd:function padEnd(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0,!1)}})},{109:109,33:33}],314:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(109);e(e.P,\"String\",{padStart:function padStart(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0,!0)}})},{109:109,33:33}],315:[function(t,n,r){\"use strict\";t(111)(\"trimLeft\",function(t){return function trimLeft(){return t(this,1)}},\"trimStart\")},{111:111}],316:[function(t,n,r){\"use strict\";t(111)(\"trimRight\",function(t){return function trimRight(){return t(this,2)}},\"trimEnd\")},{111:111}],317:[function(t,n,r){t(126)(\"asyncIterator\")},{126:126}],318:[function(t,n,r){t(126)(\"observable\")},{126:126}],319:[function(t,n,r){var e\u003dt(33);e(e.S,\"System\",{global:t(40)})},{33:33,40:40}],320:[function(t,n,r){t(97)(\"WeakMap\")},{97:97}],321:[function(t,n,r){t(98)(\"WeakMap\")},{98:98}],322:[function(t,n,r){t(97)(\"WeakSet\")},{97:97}],323:[function(t,n,r){t(98)(\"WeakSet\")},{98:98}],324:[function(t,n,r){for(var e\u003dt(141),i\u003dt(81),o\u003dt(94),u\u003dt(40),c\u003dt(42),a\u003dt(58),f\u003dt(128),s\u003df(\"iterator\"),l\u003df(\"toStringTag\"),h\u003da.Array,v\u003d{CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},p\u003di(v),d\u003d0;d\u003cp.length;d++){var y,g\u003dp[d],m\u003dv[g],b\u003du[g],x\u003db\u0026\u0026b.prototype;if(x\u0026\u0026(x[s]||c(x,s,h),x[l]||c(x,l,g),a[g]\u003dh,m))for(y in e)x[y]||o(x,y,e[y],!0)}},{128:128,141:141,40:40,42:42,58:58,81:81,94:94}],325:[function(t,n,r){var e\u003dt(33),i\u003dt(113);e(e.G+e.B,{setImmediate:i.set,clearImmediate:i.clear})},{113:113,33:33}],326:[function(t,n,r){var e\u003dt(40),i\u003dt(33),o\u003dt(46),u\u003dt(88),c\u003de.navigator,a\u003d!!c\u0026\u0026/MSIE .\\./.test(c.userAgent),f\u003dfunction(t){return a?function(n,r){return t(o(u,[].slice.call(arguments,2),\"function\"\u003d\u003dtypeof n?n:Function(n)),r)}:t};i(i.G+i.B+i.F*a,{setTimeout:f(e.setTimeout),setInterval:f(e.setInterval)})},{33:33,40:40,46:46,88:88}],327:[function(t,n,r){t(254),t(191),t(193),t(192),t(195),t(197),t(202),t(196),t(194),t(204),t(203),t(199),t(200),t(198),t(190),t(201),t(205),t(206),t(157),t(159),t(158),t(208),t(207),t(178),t(188),t(189),t(179),t(180),t(181),t(182),t(183),t(184),t(185),t(186),t(187),t(161),t(162),t(163),t(164),t(165),t(166),t(167),t(168),t(169),t(170),t(171),t(172),t(173),t(174),t(175),t(176),t(177),t(241),t(246),t(253),t(244),t(236),t(237),t(242),t(247),t(249),t(232),t(233),t(234),t(235),t(238),t(239),t(240),t(243),t(245),t(248),t(250),t(251),t(252),t(152),t(154),t(153),t(156),t(155),t(140),t(138),t(145),t(142),t(148),t(150),t(137),t(144),t(134),t(149),t(132),t(147),t(146),t(139),t(143),t(131),t(133),t(136),t(135),t(151),t(141),t(224),t(230),t(225),t(226),t(227),t(228),t(229),t(209),t(160),t(231),t(266),t(267),t(255),t(256),t(261),t(264),t(265),t(259),t(262),t(260),t(263),t(257),t(258),t(210),t(211),t(212),t(213),t(214),t(217),t(215),t(216),t(218),t(219),t(220),t(221),t(223),t(222),t(270),t(268),t(269),t(311),t(314),t(313),t(315),t(316),t(312),t(317),t(318),t(292),t(295),t(291),t(289),t(290),t(293),t(294),t(276),t(310),t(275),t(309),t(321),t(323),t(274),t(308),t(320),t(322),t(273),t(319),t(272),t(277),t(278),t(279),t(280),t(281),t(283),t(282),t(284),t(285),t(286),t(288),t(287),t(297),t(298),t(299),t(300),t(302),t(301),t(304),t(303),t(305),t(306),t(307),t(271),t(296),t(326),t(325),t(324),n.exports\u003dt(23)},{131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"186:186,187:187,188:188,189:189,190:190,191:191,192:192,193:193,194:194,195:195,196:196,197:197,198:198,199:199,200:200,201:201,202:202,203:203,204:204,205:205,206:206,207:207,208:208,209:209,210:210,211:211,212:212,213:213,214:214,215:215,216:216,217:217,218:218,219:219,220:220,221:221,222:222,223:223,224:224,225:225,226:226,227:227,228:228,229:229,23:23,230:230,231:231,232:232,233:233,234:234,235:235,236:236,237:237,238:238,239:239,240:240,241:241,242:242,243:243,244:244,245:245,246:246,247:247,248:248,249:249,250:250,251:251,252:252,253:253,254:254,255:255,256:256,257:257,258:258,259:259,260:260,261:261,262:262,263:263,264:264,265:265,266:266,267:267,268:268,269:269,270:270,271:271,272:272,273:273,274:274,275:275,276:276,277:277,278:278,279:279,280:280,281:281,282:282,283:283,284:284,285:285,286:286,287:287,288:288,289:289,290:290,291:291,292:292,293:293,294:294,295:295,296:296,297:297,298:298,299:299,300:300,301:301,302:302,303:303,304:304,305:305,306:306,307:307,308:308,309:309,310:310,311:311,312:312,313:313,314:314,315:315,316:316,317:317,318:318,319:319,320:320,321:321,322:322,323:323,324:324,325:325,326:326}],328:[function(t,n,r){(function(t){!function(t){\"use strict\";function wrap(t,n,r,e){var i\u003dn\u0026\u0026n.prototype instanceof Generator?n:Generator,o\u003dObject.create(i.prototype),u\u003dnew Context(e||[]);return o._invoke\u003dmakeInvokeMethod(t,r,u),o}function tryCatch(t,n,r){try{return{type:\"normal\",arg:t.call(n,r)}}catch(t){return{type:\"throw\",arg:t}}}function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}function defineIteratorMethods(t){[\"next\",\"throw\",\"return\"].forEach(function(n){t[n]\u003dfunction(t){return this._invoke(n,t)}})}function AsyncIterator(n){function invoke(t,r,e,o){var u\u003dtryCatch(n[t],n,r);if(\"throw\"!\u003d\u003du.type){var c\u003du.arg,a\u003dc.value;return a\u0026\u0026\"object\"\u003d\u003dtypeof a\u0026\u0026i.call(a,\"__await\")?Promise.resolve(a.__await).then(function(t){invoke(\"next\",t,e,o)},function(t){invoke(\"throw\",t,e,o)}):Promise.resolve(a).then(function(t){c.value\u003dt,e(c)},o)}o(u.arg)}function enqueue(t,n){function callInvokeWithMethodAndArg(){return new Promise(function(r,e){invoke(t,n,r,e)})}return r\u003dr?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}\"object\"\u003d\u003dtypeof t.process\u0026\u0026t.process.domain\u0026\u0026(invoke\u003dt.process.domain.bind(invoke));var r;this._invoke\u003denqueue}function makeInvokeMethod(t,n,r){var e\u003dl;return function invoke(i,o){if(e\u003d\u003d\u003dv)throw new Error(\"Generator is already running\");if(e\u003d\u003d\u003dp){if(\"throw\"\u003d\u003d\u003di)throw o;return doneResult()}for(r.method\u003di,r.arg\u003do;;){var u\u003dr.delegate;if(u){var c\u003dmaybeInvokeDelegate(u,r);if(c){if(c\u003d\u003d\u003dd)continue;return c}}if(\"next\"\u003d\u003d\u003dr.method)r.sent\u003dr._sent\u003dr.arg;else if(\"throw\"\u003d\u003d\u003dr.method){if(e\u003d\u003d\u003dl)throw e\u003dp,r.arg;r.dispatchException(r.arg)}else\"return\"\u003d\u003d\u003dr.method\u0026\u0026r.abrupt(\"return\",r.arg);e\u003dv;var a\u003dtryCatch(t,n,r);if(\"normal\"\u003d\u003d\u003da.type){if(e\u003dr.done?p:h,a.arg\u003d\u003d\u003dd)continue;return{value:a.arg,done:r.done}}\"throw\"\u003d\u003d\u003da.type\u0026\u0026(e\u003dp,r.method\u003d\"throw\",r.arg\u003da.arg)}}}function maybeInvokeDelegate(t,n){var e\u003dt.iterator[n.method];if(e\u003d\u003d\u003dr){if(n.delegate\u003dnull,\"throw\"\u003d\u003d\u003dn.method){if(t.iterator.return\u0026\u0026(n.method\u003d\"return\",n.arg\u003dr,maybeInvokeDelegate(t,n),\"throw\"\u003d\u003d\u003dn.method))return d;n.method\u003d\"throw\",n.arg\u003dnew TypeError(\"The iterator does not provide a \u0027throw\u0027 method\")}return d}var i\u003dtryCatch(e,t.iterator,n.arg);if(\"throw\"\u003d\u003d\u003di.type)return n.method\u003d\"throw\",n.arg\u003di.arg,n.delegate\u003dnull,d;var o\u003di.arg;return o?o.done?(n[t.resultName]\u003do.value,n.next\u003dt.nextLoc,\"return\"!\u003d\u003dn.method\u0026\u0026(n.method\u003d\"next\",n.arg\u003dr),n.delegate\u003dnull,d):o:(n.method\u003d\"throw\",n.arg\u003dnew TypeError(\"iterator result is not an object\"),n.delegate\u003dnull,d)}function pushTryEntry(t){var n\u003d{tryLoc:t[0]};1 in t\u0026\u0026(n.catchLoc\u003dt[1]),2 in t\u0026\u0026(n.finallyLoc\u003dt[2],n.afterLoc\u003dt[3]),this.tryEntries.push(n)}function resetTryEntry(t){var n\u003dt.completion||{};n.type\u003d\"normal\",delete n.arg,t.completion\u003dn}function Context(t){this.tryEntries\u003d[{tryLoc:\"root\"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(t){if(t){var n\u003dt[u];if(n)return n.call(t);if(\"function\"\u003d\u003dtypeof t.next)return t;if(!isNaN(t.length)){var e\u003d-1,o\u003dfunction next(){for(;++e\u003ct.length;)if(i.call(t,e))return next.value\u003dt[e],next.done\u003d!1,next;return next.value\u003dr,next.done\u003d!0,next};return o.next\u003do}}return{next:doneResult}}function doneResult(){return{value:r,done:!0}}var r,e\u003dObject.prototype,i\u003de.hasOwnProperty,o\u003d\"function\"\u003d\u003dtypeof Symbol?Symbol:{},u\u003do.iterator||\"@@iterator\",c\u003do.asyncIterator||\"@@asyncIterator\",a\u003do.toStringTag||\"@@toStringTag\",f\u003d\"object\"\u003d\u003dtypeof n,s\u003dt.regeneratorRuntime;if(s)return void(f\u0026\u0026(n.exports\u003ds));s\u003dt.regeneratorRuntime\u003df?n.exports:{},s.wrap\u003dwrap;var l\u003d\"suspendedStart\",h\u003d\"suspendedYield\",v\u003d\"executing\",p\u003d\"completed\",d\u003d{},y\u003d{};y[u]\u003dfunction(){return this};var g\u003dObject.getPrototypeOf,m\u003dg\u0026\u0026g(g(values([])));m\u0026\u0026m!\u003d\u003de\u0026\u0026i.call(m,u)\u0026\u0026(y\u003dm);var b\u003dGeneratorFunctionPrototype.prototype\u003dGenerator.prototype\u003dObject.create(y);GeneratorFunction.prototype\u003db.constructor\u003dGeneratorFunctionPrototype,GeneratorFunctionPrototype.constructor\u003dGeneratorFunction,GeneratorFunctionPrototype[a]\u003dGeneratorFunction.displayName\u003d\"GeneratorFunction\",s.isGeneratorFunction\u003dfunction(t){var n\u003d\"function\"\u003d\u003dtypeof t\u0026\u0026t.constructor;return!!n\u0026\u0026(n\u003d\u003d\u003dGeneratorFunction||\"GeneratorFunction\"\u003d\u003d\u003d(n.displayName||n.name))},s.mark\u003dfunction(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,GeneratorFunctionPrototype):(t.__proto__\u003dGeneratorFunctionPrototype,a in t||(t[a]\u003d\"GeneratorFunction\")),t.prototype\u003dObject.create(b),t},s.awrap\u003dfunction(t){return{__await:t}},defineIteratorMethods(AsyncIterator.prototype),AsyncIterator.prototype[c]\u003dfunction(){return this},s.AsyncIterator\u003dAsyncIterator,s.async\u003dfunction(t,n,r,e){var i\u003dnew AsyncIterator(wrap(t,n,r,e));return s.isGeneratorFunction(n)?i:i.next().then(function(t){return t.done?t.value:i.next()})},defineIteratorMethods(b),b[a]\u003d\"Generator\",b[u]\u003dfunction(){return this},b.toString\u003dfunction(){return\"[object Generator]\"},s.keys\u003dfunction(t){var n\u003d[];for(var r in t)n.push(r);return n.reverse(),function next(){for(;n.length;){var r\u003dn.pop();if(r in t)return next.value\u003dr,next.done\u003d!1,next}return next.done\u003d!0,next}},s.values\u003dvalues,Context.prototype\u003d{constructor:Context,reset:function(t){if(this.prev\u003d0,this.next\u003d0,this.sent\u003dthis._sent\u003dr,this.done\u003d!1,this.delegate\u003dnull,this.method\u003d\"next\",this.arg\u003dr,this.tryEntries.forEach(resetTryEntry),!t)for(var n in this)\"t\"\u003d\u003d\u003dn.charAt(0)\u0026\u0026i.call(this,n)\u0026\u0026!isNaN(+n.slice(1))\u0026\u0026(this[n]\u003dr)},stop:function(){this.done\u003d!0;var t\u003dthis.tryEntries[0],n\u003dt.completion;if(\"throw\"\u003d\u003d\u003dn.type)throw n.arg;return this.rval},dispatchException:function(t){function handle(e,i){return u.type\u003d\"throw\",u.arg\u003dt,n.next\u003de,i\u0026\u0026(n.method\u003d\"next\",n.arg\u003dr),!!i}if(this.done)throw t;for(var n\u003dthis,e\u003dthis.tryEntries.length-1;e\u003e\u003d0;--e){var o\u003dthis.tryEntries[e],u\u003do.completion;if(\"root\"\u003d\u003d\u003do.tryLoc)return handle(\"end\");if(o.tryLoc\u003c\u003dthis.prev){var c\u003di.call(o,\"catchLoc\"),a\u003di.call(o,\"finallyLoc\");if(c\u0026\u0026a){if(this.prev\u003co.catchLoc)return handle(o.catchLoc,!0);if(this.prev\u003co.finallyLoc)return handle(o.finallyLoc)}else if(c){if(this.prev\u003co.catchLoc)return handle(o.catchLoc,!0)}else{if(!a)throw new Error(\"try statement without catch or finally\");if(this.prev\u003co.finallyLoc)return handle(o.finallyLoc)}}}},abrupt:function(t,n){for(var r\u003dthis.tryEntries.length-1;r\u003e\u003d0;--r){var e\u003dthis.tryEntries[r];if(e.tryLoc\u003c\u003dthis.prev\u0026\u0026i.call(e,\"finallyLoc\")\u0026\u0026this.prev\u003ce.finallyLoc){var o\u003de;break}}o\u0026\u0026(\"break\"\u003d\u003d\u003dt||\"continue\"\u003d\u003d\u003dt)\u0026\u0026o.tryLoc\u003c\u003dn\u0026\u0026n\u003c\u003do.finallyLoc\u0026\u0026(o\u003dnull);var u\u003do?o.completion:{};return u.type\u003dt,u.arg\u003dn,o?(this.method\u003d\"next\",this.next\u003do.finallyLoc,d):this.complete(u)},complete:function(t,n){if(\"throw\"\u003d\u003d\u003dt.type)throw t.arg;return\"break\"\u003d\u003d\u003dt.type||\"continue\"\u003d\u003d\u003dt.type?this.next\u003dt.arg:\"return\"\u003d\u003d\u003dt.type?(this.rval\u003dthis.arg\u003dt.arg,this.method\u003d\"return\",this.next\u003d\"end\"):\"normal\"\u003d\u003d\u003dt.type\u0026\u0026n\u0026\u0026(this.next\u003dn),d},finish:function(t){for(var n\u003dthis.tryEntries.length-1;n\u003e\u003d0;--n){var r\u003dthis.tryEntries[n];if(r.finallyLoc\u003d\u003d\u003dt)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),d}},catch:function(t){for(var n\u003dthis.tryEntries.length-1;n\u003e\u003d0;--n){var r\u003dthis.tryEntries[n];if(r.tryLoc\u003d\u003d\u003dt){var e\u003dr.completion;if(\"throw\"\u003d\u003d\u003de.type){var i\u003de.arg;resetTryEntry(r)}return i}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,n,e){return this.delegate\u003d{iterator:values(t),resultName:n,nextLoc:e},\"next\"\u003d\u003d\u003dthis.method\u0026\u0026(this.arg\u003dr),d}}}(\"object\"\u003d\u003dtypeof t?t:\"object\"\u003d\u003dtypeof window?window:\"object\"\u003d\u003dtypeof self?self:this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{}]},{},[1]);"}],"authorContributionMap":{"jingting1412":4}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/js/vue.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" * Vue.js v2.6.14"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" * (c) 2014-2021 Evan You"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" * Released under the MIT License."},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" */"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"!function(e,t){\"object\"\u003d\u003dtypeof exports\u0026\u0026\"undefined\"!\u003dtypeof module?module.exports\u003dt():\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define(t):(e\u003de||self).Vue\u003dt()}(this,function(){\"use strict\";var e\u003dObject.freeze({});function t(e){return null\u003d\u003de}function n(e){return null!\u003de}function r(e){return!0\u003d\u003d\u003de}function i(e){return\"string\"\u003d\u003dtypeof e||\"number\"\u003d\u003dtypeof e||\"symbol\"\u003d\u003dtypeof e||\"boolean\"\u003d\u003dtypeof e}function o(e){return null!\u003d\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e}var a\u003dObject.prototype.toString;function s(e){return\"[object Object]\"\u003d\u003d\u003da.call(e)}function c(e){var t\u003dparseFloat(String(e));return t\u003e\u003d0\u0026\u0026Math.floor(t)\u003d\u003d\u003dt\u0026\u0026isFinite(e)}function u(e){return n(e)\u0026\u0026\"function\"\u003d\u003dtypeof e.then\u0026\u0026\"function\"\u003d\u003dtypeof e.catch}function l(e){return null\u003d\u003de?\"\":Array.isArray(e)||s(e)\u0026\u0026e.toString\u003d\u003d\u003da?JSON.stringify(e,null,2):String(e)}function f(e){var t\u003dparseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n\u003dObject.create(null),r\u003de.split(\",\"),i\u003d0;i\u003cr.length;i++)n[r[i]]\u003d!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var d\u003dp(\"slot,component\",!0),v\u003dp(\"key,ref,slot,slot-scope,is\");function h(e,t){if(e.length){var n\u003de.indexOf(t);if(n\u003e-1)return e.splice(n,1)}}var m\u003dObject.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t\u003dObject.create(null);return function(n){return t[n]||(t[n]\u003de(n))}}var _\u003d/-(\\w)/g,b\u003dg(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():\"\"})}),$\u003dg(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w\u003d/\\B([A-Z])/g,C\u003dg(function(e){return e.replace(w,\"-$1\").toLowerCase()});var x\u003dFunction.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r\u003darguments.length;return r?r\u003e1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length\u003de.length,n};function k(e,t){t\u003dt||0;for(var n\u003de.length-t,r\u003dnew Array(n);n--;)r[n]\u003de[n+t];return r}function A(e,t){for(var n in t)e[n]\u003dt[n];return e}function O(e){for(var t\u003d{},n\u003d0;n\u003ce.length;n++)e[n]\u0026\u0026A(t,e[n]);return t}function S(e,t,n){}var T\u003dfunction(e,t,n){return!1},N\u003dfunction(e){return e};function E(e,t){if(e\u003d\u003d\u003dt)return!0;var n\u003do(e),r\u003do(t);if(!n||!r)return!n\u0026\u0026!r\u0026\u0026String(e)\u003d\u003d\u003dString(t);try{var i\u003dArray.isArray(e),a\u003dArray.isArray(t);if(i\u0026\u0026a)return e.length\u003d\u003d\u003dt.length\u0026\u0026e.every(function(e,n){return E(e,t[n])});if(e instanceof Date\u0026\u0026t instanceof Date)return e.getTime()\u003d\u003d\u003dt.getTime();if(i||a)return!1;var s\u003dObject.keys(e),c\u003dObject.keys(t);return s.length\u003d\u003d\u003dc.length\u0026\u0026s.every(function(n){return E(e[n],t[n])})}catch(e){return!1}}function j(e,t){for(var n\u003d0;n\u003ce.length;n++)if(E(e[n],t))return n;return-1}function D(e){var t\u003d!1;return function(){t||(t\u003d!0,e.apply(this,arguments))}}var L\u003d\"data-server-rendered\",I\u003d[\"component\",\"directive\",\"filter\"],M\u003d[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\",\"errorCaptured\",\"serverPrefetch\"],F\u003d{optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:T,isReservedAttr:T,isUnknownElement:T,getTagNamespace:S,parsePlatformTagName:N,mustUseProp:T,async:!0,_lifecycleHooks:M},P\u003d/a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;function R(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var H\u003dnew RegExp(\"[^\"+P.source+\".$_\\\\d]\");var B,U\u003d\"__proto__\"in{},V\u003d\"undefined\"!\u003dtypeof window,z\u003d\"undefined\"!\u003dtypeof WXEnvironment\u0026\u0026!!WXEnvironment.platform,K\u003dz\u0026\u0026WXEnvironment.platform.toLowerCase(),J\u003dV\u0026\u0026window.navigator.userAgent.toLowerCase(),q\u003dJ\u0026\u0026/msie|trident/.test(J),W\u003dJ\u0026\u0026J.indexOf(\"msie 9.0\")\u003e0,Z\u003dJ\u0026\u0026J.indexOf(\"edge/\")\u003e0,G\u003d(J\u0026\u0026J.indexOf(\"android\"),J\u0026\u0026/iphone|ipad|ipod|ios/.test(J)||\"ios\"\u003d\u003d\u003dK),X\u003d(J\u0026\u0026/chrome\\/\\d+/.test(J),J\u0026\u0026/phantomjs/.test(J),J\u0026\u0026J.match(/firefox\\/(\\d+)/)),Y\u003d{}.watch,Q\u003d!1;if(V)try{var ee\u003d{};Object.defineProperty(ee,\"passive\",{get:function(){Q\u003d!0}}),window.addEventListener(\"test-passive\",null,ee)}catch(e){}var te\u003dfunction(){return void 0\u003d\u003d\u003dB\u0026\u0026(B\u003d!V\u0026\u0026!z\u0026\u0026\"undefined\"!\u003dtypeof global\u0026\u0026(global.process\u0026\u0026\"server\"\u003d\u003d\u003dglobal.process.env.VUE_ENV)),B},ne\u003dV\u0026\u0026window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return\"function\"\u003d\u003dtypeof e\u0026\u0026/native code/.test(e.toString())}var ie,oe\u003d\"undefined\"!\u003dtypeof Symbol\u0026\u0026re(Symbol)\u0026\u0026\"undefined\"!\u003dtypeof Reflect\u0026\u0026re(Reflect.ownKeys);ie\u003d\"undefined\"!\u003dtypeof Set\u0026\u0026re(Set)?Set:function(){function e(){this.set\u003dObject.create(null)}return e.prototype.has\u003dfunction(e){return!0\u003d\u003d\u003dthis.set[e]},e.prototype.add\u003dfunction(e){this.set[e]\u003d!0},e.prototype.clear\u003dfunction(){this.set\u003dObject.create(null)},e}();var ae\u003dS,se\u003d0,ce\u003dfunction(){this.id\u003dse++,this.subs\u003d[]};ce.prototype.addSub\u003dfunction(e){this.subs.push(e)},ce.prototype.removeSub\u003dfunction(e){h(this.subs,e)},ce.prototype.depend\u003dfunction(){ce.target\u0026\u0026ce.target.addDep(this)},ce.prototype.notify\u003dfunction(){for(var e\u003dthis.subs.slice(),t\u003d0,n\u003de.length;t\u003cn;t++)e[t].update()},ce.target\u003dnull;var ue\u003d[];function le(e){ue.push(e),ce.target\u003de}function fe(){ue.pop(),ce.target\u003due[ue.length-1]}var pe\u003dfunction(e,t,n,r,i,o,a,s){this.tag\u003de,this.data\u003dt,this.children\u003dn,this.text\u003dr,this.elm\u003di,this.ns\u003dvoid 0,this.context\u003do,this.fnContext\u003dvoid 0,this.fnOptions\u003dvoid 0,this.fnScopeId\u003dvoid 0,this.key\u003dt\u0026\u0026t.key,this.componentOptions\u003da,this.componentInstance\u003dvoid 0,this.parent\u003dvoid 0,this.raw\u003d!1,this.isStatic\u003d!1,this.isRootInsert\u003d!0,this.isComment\u003d!1,this.isCloned\u003d!1,this.isOnce\u003d!1,this.asyncFactory\u003ds,this.asyncMeta\u003dvoid 0,this.isAsyncPlaceholder\u003d!1},de\u003d{child:{configurable:!0}};de.child.get\u003dfunction(){return this.componentInstance},Object.defineProperties(pe.prototype,de);var ve\u003dfunction(e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"\");var t\u003dnew pe;return t.text\u003de,t.isComment\u003d!0,t};function he(e){return new pe(void 0,void 0,void 0,String(e))}function me(e){var t\u003dnew pe(e.tag,e.data,e.children\u0026\u0026e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns\u003de.ns,t.isStatic\u003de.isStatic,t.key\u003de.key,t.isComment\u003de.isComment,t.fnContext\u003de.fnContext,t.fnOptions\u003de.fnOptions,t.fnScopeId\u003de.fnScopeId,t.asyncMeta\u003de.asyncMeta,t.isCloned\u003d!0,t}var ye\u003dArray.prototype,ge\u003dObject.create(ye);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach(function(e){var t\u003dye[e];R(ge,e,function(){for(var n\u003d[],r\u003darguments.length;r--;)n[r]\u003darguments[r];var i,o\u003dt.apply(this,n),a\u003dthis.__ob__;switch(e){case\"push\":case\"unshift\":i\u003dn;break;case\"splice\":i\u003dn.slice(2)}return i\u0026\u0026a.observeArray(i),a.dep.notify(),o})});var _e\u003dObject.getOwnPropertyNames(ge),be\u003d!0;function $e(e){be\u003de}var we\u003dfunction(e){var t;this.value\u003de,this.dep\u003dnew ce,this.vmCount\u003d0,R(e,\"__ob__\",this),Array.isArray(e)?(U?(t\u003dge,e.__proto__\u003dt):function(e,t,n){for(var r\u003d0,i\u003dn.length;r\u003ci;r++){var o\u003dn[r];R(e,o,t[o])}}(e,ge,_e),this.observeArray(e)):this.walk(e)};function Ce(e,t){var n;if(o(e)\u0026\u0026!(e instanceof pe))return y(e,\"__ob__\")\u0026\u0026e.__ob__ instanceof we?n\u003de.__ob__:be\u0026\u0026!te()\u0026\u0026(Array.isArray(e)||s(e))\u0026\u0026Object.isExtensible(e)\u0026\u0026!e._isVue\u0026\u0026(n\u003dnew we(e)),t\u0026\u0026n\u0026\u0026n.vmCount++,n}function xe(e,t,n,r,i){var o\u003dnew ce,a\u003dObject.getOwnPropertyDescriptor(e,t);if(!a||!1!\u003d\u003da.configurable){var s\u003da\u0026\u0026a.get,c\u003da\u0026\u0026a.set;s\u0026\u0026!c||2!\u003d\u003darguments.length||(n\u003de[t]);var u\u003d!i\u0026\u0026Ce(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t\u003ds?s.call(e):n;return ce.target\u0026\u0026(o.depend(),u\u0026\u0026(u.dep.depend(),Array.isArray(t)\u0026\u0026function e(t){for(var n\u003dvoid 0,r\u003d0,i\u003dt.length;r\u003ci;r++)(n\u003dt[r])\u0026\u0026n.__ob__\u0026\u0026n.__ob__.dep.depend(),Array.isArray(n)\u0026\u0026e(n)}(t))),t},set:function(t){var r\u003ds?s.call(e):n;t\u003d\u003d\u003dr||t!\u003dt\u0026\u0026r!\u003dr||s\u0026\u0026!c||(c?c.call(e,t):n\u003dt,u\u003d!i\u0026\u0026Ce(t),o.notify())}})}}function ke(e,t,n){if(Array.isArray(e)\u0026\u0026c(t))return e.length\u003dMath.max(e.length,t),e.splice(t,1,n),n;if(t in e\u0026\u0026!(t in Object.prototype))return e[t]\u003dn,n;var r\u003de.__ob__;return e._isVue||r\u0026\u0026r.vmCount?n:r?(xe(r.value,t,n),r.dep.notify(),n):(e[t]\u003dn,n)}function Ae(e,t){if(Array.isArray(e)\u0026\u0026c(t))e.splice(t,1);else{var n\u003de.__ob__;e._isVue||n\u0026\u0026n.vmCount||y(e,t)\u0026\u0026(delete e[t],n\u0026\u0026n.dep.notify())}}we.prototype.walk\u003dfunction(e){for(var t\u003dObject.keys(e),n\u003d0;n\u003ct.length;n++)xe(e,t[n])},we.prototype.observeArray\u003dfunction(e){for(var t\u003d0,n\u003de.length;t\u003cn;t++)Ce(e[t])};var Oe\u003dF.optionMergeStrategies;function Se(e,t){if(!t)return e;for(var n,r,i,o\u003doe?Reflect.ownKeys(t):Object.keys(t),a\u003d0;a\u003co.length;a++)\"__ob__\"!\u003d\u003d(n\u003do[a])\u0026\u0026(r\u003de[n],i\u003dt[n],y(e,n)?r!\u003d\u003di\u0026\u0026s(r)\u0026\u0026s(i)\u0026\u0026Se(r,i):ke(e,n,i));return e}function Te(e,t,n){return n?function(){var r\u003d\"function\"\u003d\u003dtypeof t?t.call(n,n):t,i\u003d\"function\"\u003d\u003dtypeof e?e.call(n,n):e;return r?Se(r,i):i}:t?e?function(){return Se(\"function\"\u003d\u003dtypeof t?t.call(this,this):t,\"function\"\u003d\u003dtypeof e?e.call(this,this):e)}:t:e}function Ne(e,t){var n\u003dt?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n?function(e){for(var t\u003d[],n\u003d0;n\u003ce.length;n++)-1\u003d\u003d\u003dt.indexOf(e[n])\u0026\u0026t.push(e[n]);return t}(n):n}function Ee(e,t,n,r){var i\u003dObject.create(e||null);return t?A(i,t):i}Oe.data\u003dfunction(e,t,n){return n?Te(e,t,n):t\u0026\u0026\"function\"!\u003dtypeof t?e:Te(e,t)},M.forEach(function(e){Oe[e]\u003dNe}),I.forEach(function(e){Oe[e+\"s\"]\u003dEe}),Oe.watch\u003dfunction(e,t,n,r){if(e\u003d\u003d\u003dY\u0026\u0026(e\u003dvoid 0),t\u003d\u003d\u003dY\u0026\u0026(t\u003dvoid 0),!t)return Object.create(e||null);if(!e)return t;var i\u003d{};for(var o in A(i,e),t){var a\u003di[o],s\u003dt[o];a\u0026\u0026!Array.isArray(a)\u0026\u0026(a\u003d[a]),i[o]\u003da?a.concat(s):Array.isArray(s)?s:[s]}return i},Oe.props\u003dOe.methods\u003dOe.inject\u003dOe.computed\u003dfunction(e,t,n,r){if(!e)return t;var i\u003dObject.create(null);return A(i,e),t\u0026\u0026A(i,t),i},Oe.provide\u003dTe;var je\u003dfunction(e,t){return void 0\u003d\u003d\u003dt?e:t};function De(e,t,n){if(\"function\"\u003d\u003dtypeof t\u0026\u0026(t\u003dt.options),function(e,t){var n\u003de.props;if(n){var r,i,o\u003d{};if(Array.isArray(n))for(r\u003dn.length;r--;)\"string\"\u003d\u003dtypeof(i\u003dn[r])\u0026\u0026(o[b(i)]\u003d{type:null});else if(s(n))for(var a in n)i\u003dn[a],o[b(a)]\u003ds(i)?i:{type:i};e.props\u003do}}(t),function(e,t){var n\u003de.inject;if(n){var r\u003de.inject\u003d{};if(Array.isArray(n))for(var i\u003d0;i\u003cn.length;i++)r[n[i]]\u003d{from:n[i]};else if(s(n))for(var o in n){var a\u003dn[o];r[o]\u003ds(a)?A({from:o},a):{from:a}}}}(t),function(e){var t\u003de.directives;if(t)for(var n in t){var r\u003dt[n];\"function\"\u003d\u003dtypeof r\u0026\u0026(t[n]\u003d{bind:r,update:r})}}(t),!t._base\u0026\u0026(t.extends\u0026\u0026(e\u003dDe(e,t.extends,n)),t.mixins))for(var r\u003d0,i\u003dt.mixins.length;r\u003ci;r++)e\u003dDe(e,t.mixins[r],n);var o,a\u003d{};for(o in e)c(o);for(o in t)y(e,o)||c(o);function c(r){var i\u003dOe[r]||je;a[r]\u003di(e[r],t[r],n,r)}return a}function Le(e,t,n,r){if(\"string\"\u003d\u003dtypeof n){var i\u003de[t];if(y(i,n))return i[n];var o\u003db(n);if(y(i,o))return i[o];var a\u003d$(o);return y(i,a)?i[a]:i[n]||i[o]||i[a]}}function Ie(e,t,n,r){var i\u003dt[e],o\u003d!y(n,e),a\u003dn[e],s\u003dRe(Boolean,i.type);if(s\u003e-1)if(o\u0026\u0026!y(i,\"default\"))a\u003d!1;else if(\"\"\u003d\u003d\u003da||a\u003d\u003d\u003dC(e)){var c\u003dRe(String,i.type);(c\u003c0||s\u003cc)\u0026\u0026(a\u003d!0)}if(void 0\u003d\u003d\u003da){a\u003dfunction(e,t,n){if(!y(t,\"default\"))return;var r\u003dt.default;if(e\u0026\u0026e.$options.propsData\u0026\u0026void 0\u003d\u003d\u003de.$options.propsData[n]\u0026\u0026void 0!\u003d\u003de._props[n])return e._props[n];return\"function\"\u003d\u003dtypeof r\u0026\u0026\"Function\"!\u003d\u003dFe(t.type)?r.call(e):r}(r,i,e);var u\u003dbe;$e(!0),Ce(a),$e(u)}return a}var Me\u003d/^\\s*function (\\w+)/;function Fe(e){var t\u003de\u0026\u0026e.toString().match(Me);return t?t[1]:\"\"}function Pe(e,t){return Fe(e)\u003d\u003d\u003dFe(t)}function Re(e,t){if(!Array.isArray(t))return Pe(t,e)?0:-1;for(var n\u003d0,r\u003dt.length;n\u003cr;n++)if(Pe(t[n],e))return n;return-1}function He(e,t,n){le();try{if(t)for(var r\u003dt;r\u003dr.$parent;){var i\u003dr.$options.errorCaptured;if(i)for(var o\u003d0;o\u003ci.length;o++)try{if(!1\u003d\u003d\u003di[o].call(r,e,t,n))return}catch(e){Ue(e,r,\"errorCaptured hook\")}}Ue(e,t,n)}finally{fe()}}function Be(e,t,n,r,i){var o;try{(o\u003dn?e.apply(t,n):e.call(t))\u0026\u0026!o._isVue\u0026\u0026u(o)\u0026\u0026!o._handled\u0026\u0026(o.catch(function(e){return He(e,r,i+\" (Promise/async)\")}),o._handled\u003d!0)}catch(e){He(e,r,i)}return o}function Ue(e,t,n){if(F.errorHandler)try{return F.errorHandler.call(null,e,t,n)}catch(t){t!\u003d\u003de\u0026\u0026Ve(t,null,\"config.errorHandler\")}Ve(e,t,n)}function Ve(e,t,n){if(!V\u0026\u0026!z||\"undefined\"\u003d\u003dtypeof console)throw e;console.error(e)}var ze,Ke\u003d!1,Je\u003d[],qe\u003d!1;function We(){qe\u003d!1;var e\u003dJe.slice(0);Je.length\u003d0;for(var t\u003d0;t\u003ce.length;t++)e[t]()}if(\"undefined\"!\u003dtypeof Promise\u0026\u0026re(Promise)){var Ze\u003dPromise.resolve();ze\u003dfunction(){Ze.then(We),G\u0026\u0026setTimeout(S)},Ke\u003d!0}else if(q||\"undefined\"\u003d\u003dtypeof MutationObserver||!re(MutationObserver)\u0026\u0026\"[object MutationObserverConstructor]\"!\u003d\u003dMutationObserver.toString())ze\u003d\"undefined\"!\u003dtypeof setImmediate\u0026\u0026re(setImmediate)?function(){setImmediate(We)}:function(){setTimeout(We,0)};else{var Ge\u003d1,Xe\u003dnew MutationObserver(We),Ye\u003ddocument.createTextNode(String(Ge));Xe.observe(Ye,{characterData:!0}),ze\u003dfunction(){Ge\u003d(Ge+1)%2,Ye.data\u003dString(Ge)},Ke\u003d!0}function Qe(e,t){var n;if(Je.push(function(){if(e)try{e.call(t)}catch(e){He(e,t,\"nextTick\")}else n\u0026\u0026n(t)}),qe||(qe\u003d!0,ze()),!e\u0026\u0026\"undefined\"!\u003dtypeof Promise)return new Promise(function(e){n\u003de})}var et\u003dnew ie;function tt(e){!function e(t,n){var r,i;var a\u003dArray.isArray(t);if(!a\u0026\u0026!o(t)||Object.isFrozen(t)||t instanceof pe)return;if(t.__ob__){var s\u003dt.__ob__.dep.id;if(n.has(s))return;n.add(s)}if(a)for(r\u003dt.length;r--;)e(t[r],n);else for(i\u003dObject.keys(t),r\u003di.length;r--;)e(t[i[r]],n)}(e,et),et.clear()}var nt\u003dg(function(e){var t\u003d\"\u0026\"\u003d\u003d\u003de.charAt(0),n\u003d\"~\"\u003d\u003d\u003d(e\u003dt?e.slice(1):e).charAt(0),r\u003d\"!\"\u003d\u003d\u003d(e\u003dn?e.slice(1):e).charAt(0);return{name:e\u003dr?e.slice(1):e,once:n,capture:r,passive:t}});function rt(e,t){function n(){var e\u003darguments,r\u003dn.fns;if(!Array.isArray(r))return Be(r,null,arguments,t,\"v-on handler\");for(var i\u003dr.slice(),o\u003d0;o\u003ci.length;o++)Be(i[o],null,e,t,\"v-on handler\")}return n.fns\u003de,n}function it(e,n,i,o,a,s){var c,u,l,f;for(c in e)u\u003de[c],l\u003dn[c],f\u003dnt(c),t(u)||(t(l)?(t(u.fns)\u0026\u0026(u\u003de[c]\u003drt(u,s)),r(f.once)\u0026\u0026(u\u003de[c]\u003da(f.name,u,f.capture)),i(f.name,u,f.capture,f.passive,f.params)):u!\u003d\u003dl\u0026\u0026(l.fns\u003du,e[c]\u003dl));for(c in n)t(e[c])\u0026\u0026o((f\u003dnt(c)).name,n[c],f.capture)}function ot(e,i,o){var a;e instanceof pe\u0026\u0026(e\u003de.data.hook||(e.data.hook\u003d{}));var s\u003de[i];function c(){o.apply(this,arguments),h(a.fns,c)}t(s)?a\u003drt([c]):n(s.fns)\u0026\u0026r(s.merged)?(a\u003ds).fns.push(c):a\u003drt([s,c]),a.merged\u003d!0,e[i]\u003da}function at(e,t,r,i,o){if(n(t)){if(y(t,r))return e[r]\u003dt[r],o||delete t[r],!0;if(y(t,i))return e[r]\u003dt[i],o||delete t[i],!0}return!1}function st(e){return i(e)?[he(e)]:Array.isArray(e)?function e(o,a){var s\u003d[];var c,u,l,f;for(c\u003d0;c\u003co.length;c++)t(u\u003do[c])||\"boolean\"\u003d\u003dtypeof u||(l\u003ds.length-1,f\u003ds[l],Array.isArray(u)?u.length\u003e0\u0026\u0026(ct((u\u003de(u,(a||\"\")+\"_\"+c))[0])\u0026\u0026ct(f)\u0026\u0026(s[l]\u003dhe(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?ct(f)?s[l]\u003dhe(f.text+u):\"\"!\u003d\u003du\u0026\u0026s.push(he(u)):ct(u)\u0026\u0026ct(f)?s[l]\u003dhe(f.text+u.text):(r(o._isVList)\u0026\u0026n(u.tag)\u0026\u0026t(u.key)\u0026\u0026n(a)\u0026\u0026(u.key\u003d\"__vlist\"+a+\"_\"+c+\"__\"),s.push(u)));return s}(e):void 0}function ct(e){return n(e)\u0026\u0026n(e.text)\u0026\u0026!1\u003d\u003d\u003de.isComment}function ut(e,t){if(e){for(var n\u003dObject.create(null),r\u003doe?Reflect.ownKeys(e):Object.keys(e),i\u003d0;i\u003cr.length;i++){var o\u003dr[i];if(\"__ob__\"!\u003d\u003do){for(var a\u003de[o].from,s\u003dt;s;){if(s._provided\u0026\u0026y(s._provided,a)){n[o]\u003ds._provided[a];break}s\u003ds.$parent}if(!s\u0026\u0026\"default\"in e[o]){var c\u003de[o].default;n[o]\u003d\"function\"\u003d\u003dtypeof c?c.call(t):c}}}return n}}function lt(e,t){if(!e||!e.length)return{};for(var n\u003d{},r\u003d0,i\u003de.length;r\u003ci;r++){var o\u003de[r],a\u003do.data;if(a\u0026\u0026a.attrs\u0026\u0026a.attrs.slot\u0026\u0026delete a.attrs.slot,o.context!\u003d\u003dt\u0026\u0026o.fnContext!\u003d\u003dt||!a||null\u003d\u003da.slot)(n.default||(n.default\u003d[])).push(o);else{var s\u003da.slot,c\u003dn[s]||(n[s]\u003d[]);\"template\"\u003d\u003d\u003do.tag?c.push.apply(c,o.children||[]):c.push(o)}}for(var u in n)n[u].every(ft)\u0026\u0026delete n[u];return n}function ft(e){return e.isComment\u0026\u0026!e.asyncFactory||\" \"\u003d\u003d\u003de.text}function pt(e){return e.isComment\u0026\u0026e.asyncFactory}function dt(t,n,r){var i,o\u003dObject.keys(n).length\u003e0,a\u003dt?!!t.$stable:!o,s\u003dt\u0026\u0026t.$key;if(t){if(t._normalized)return t._normalized;if(a\u0026\u0026r\u0026\u0026r!\u003d\u003de\u0026\u0026s\u003d\u003d\u003dr.$key\u0026\u0026!o\u0026\u0026!r.$hasNormal)return r;for(var c in i\u003d{},t)t[c]\u0026\u0026\"$\"!\u003d\u003dc[0]\u0026\u0026(i[c]\u003dvt(n,c,t[c]))}else i\u003d{};for(var u in n)u in i||(i[u]\u003dht(n,u));return t\u0026\u0026Object.isExtensible(t)\u0026\u0026(t._normalized\u003di),R(i,\"$stable\",a),R(i,\"$key\",s),R(i,\"$hasNormal\",o),i}function vt(e,t,n){var r\u003dfunction(){var e\u003darguments.length?n.apply(null,arguments):n({}),t\u003d(e\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e\u0026\u0026!Array.isArray(e)?[e]:st(e))\u0026\u0026e[0];return e\u0026\u0026(!t||1\u003d\u003d\u003de.length\u0026\u0026t.isComment\u0026\u0026!pt(t))?void 0:e};return n.proxy\u0026\u0026Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function ht(e,t){return function(){return e[t]}}function mt(e,t){var r,i,a,s,c;if(Array.isArray(e)||\"string\"\u003d\u003dtypeof e)for(r\u003dnew Array(e.length),i\u003d0,a\u003de.length;i\u003ca;i++)r[i]\u003dt(e[i],i);else if(\"number\"\u003d\u003dtypeof e)for(r\u003dnew Array(e),i\u003d0;i\u003ce;i++)r[i]\u003dt(i+1,i);else if(o(e))if(oe\u0026\u0026e[Symbol.iterator]){r\u003d[];for(var u\u003de[Symbol.iterator](),l\u003du.next();!l.done;)r.push(t(l.value,r.length)),l\u003du.next()}else for(s\u003dObject.keys(e),r\u003dnew Array(s.length),i\u003d0,a\u003ds.length;i\u003ca;i++)c\u003ds[i],r[i]\u003dt(e[c],c,i);return n(r)||(r\u003d[]),r._isVList\u003d!0,r}function yt(e,t,n,r){var i,o\u003dthis.$scopedSlots[e];o?(n\u003dn||{},r\u0026\u0026(n\u003dA(A({},r),n)),i\u003do(n)||(\"function\"\u003d\u003dtypeof t?t():t)):i\u003dthis.$slots[e]||(\"function\"\u003d\u003dtypeof t?t():t);var a\u003dn\u0026\u0026n.slot;return a?this.$createElement(\"template\",{slot:a},i):i}function gt(e){return Le(this.$options,\"filters\",e)||N}function _t(e,t){return Array.isArray(e)?-1\u003d\u003d\u003de.indexOf(t):e!\u003d\u003dt}function bt(e,t,n,r,i){var o\u003dF.keyCodes[t]||n;return i\u0026\u0026r\u0026\u0026!F.keyCodes[t]?_t(i,r):o?_t(o,e):r?C(r)!\u003d\u003dt:void 0\u003d\u003d\u003de}function $t(e,t,n,r,i){if(n)if(o(n)){var a;Array.isArray(n)\u0026\u0026(n\u003dO(n));var s\u003dfunction(o){if(\"class\"\u003d\u003d\u003do||\"style\"\u003d\u003d\u003do||v(o))a\u003de;else{var s\u003de.attrs\u0026\u0026e.attrs.type;a\u003dr||F.mustUseProp(t,s,o)?e.domProps||(e.domProps\u003d{}):e.attrs||(e.attrs\u003d{})}var c\u003db(o),u\u003dC(o);c in a||u in a||(a[o]\u003dn[o],i\u0026\u0026((e.on||(e.on\u003d{}))[\"update:\"+o]\u003dfunction(e){n[o]\u003de}))};for(var c in n)s(c)}else;return e}function wt(e,t){var n\u003dthis._staticTrees||(this._staticTrees\u003d[]),r\u003dn[e];return r\u0026\u0026!t?r:(xt(r\u003dn[e]\u003dthis.$options.staticRenderFns[e].call(this._renderProxy,null,this),\"__static__\"+e,!1),r)}function Ct(e,t,n){return xt(e,\"__once__\"+t+(n?\"_\"+n:\"\"),!0),e}function xt(e,t,n){if(Array.isArray(e))for(var r\u003d0;r\u003ce.length;r++)e[r]\u0026\u0026\"string\"!\u003dtypeof e[r]\u0026\u0026kt(e[r],t+\"_\"+r,n);else kt(e,t,n)}function kt(e,t,n){e.isStatic\u003d!0,e.key\u003dt,e.isOnce\u003dn}function At(e,t){if(t)if(s(t)){var n\u003de.on\u003de.on?A({},e.on):{};for(var r in t){var i\u003dn[r],o\u003dt[r];n[r]\u003di?[].concat(i,o):o}}else;return e}function Ot(e,t,n,r){t\u003dt||{$stable:!n};for(var i\u003d0;i\u003ce.length;i++){var o\u003de[i];Array.isArray(o)?Ot(o,t,n):o\u0026\u0026(o.proxy\u0026\u0026(o.fn.proxy\u003d!0),t[o.key]\u003do.fn)}return r\u0026\u0026(t.$key\u003dr),t}function St(e,t){for(var n\u003d0;n\u003ct.length;n+\u003d2){var r\u003dt[n];\"string\"\u003d\u003dtypeof r\u0026\u0026r\u0026\u0026(e[t[n]]\u003dt[n+1])}return e}function Tt(e,t){return\"string\"\u003d\u003dtypeof e?t+e:e}function Nt(e){e._o\u003dCt,e._n\u003df,e._s\u003dl,e._l\u003dmt,e._t\u003dyt,e._q\u003dE,e._i\u003dj,e._m\u003dwt,e._f\u003dgt,e._k\u003dbt,e._b\u003d$t,e._v\u003dhe,e._e\u003dve,e._u\u003dOt,e._g\u003dAt,e._d\u003dSt,e._p\u003dTt}function Et(t,n,i,o,a){var s,c\u003dthis,u\u003da.options;y(o,\"_uid\")?(s\u003dObject.create(o))._original\u003do:(s\u003do,o\u003do._original);var l\u003dr(u._compiled),f\u003d!l;this.data\u003dt,this.props\u003dn,this.children\u003di,this.parent\u003do,this.listeners\u003dt.on||e,this.injections\u003dut(u.inject,o),this.slots\u003dfunction(){return c.$slots||dt(t.scopedSlots,c.$slots\u003dlt(i,o)),c.$slots},Object.defineProperty(this,\"scopedSlots\",{enumerable:!0,get:function(){return dt(t.scopedSlots,this.slots())}}),l\u0026\u0026(this.$options\u003du,this.$slots\u003dthis.slots(),this.$scopedSlots\u003ddt(t.scopedSlots,this.$slots)),u._scopeId?this._c\u003dfunction(e,t,n,r){var i\u003dHt(s,e,t,n,r,f);return i\u0026\u0026!Array.isArray(i)\u0026\u0026(i.fnScopeId\u003du._scopeId,i.fnContext\u003do),i}:this._c\u003dfunction(e,t,n,r){return Ht(s,e,t,n,r,f)}}function jt(e,t,n,r,i){var o\u003dme(e);return o.fnContext\u003dn,o.fnOptions\u003dr,t.slot\u0026\u0026((o.data||(o.data\u003d{})).slot\u003dt.slot),o}function Dt(e,t){for(var n in t)e[b(n)]\u003dt[n]}Nt(Et.prototype);var Lt\u003d{init:function(e,t){if(e.componentInstance\u0026\u0026!e.componentInstance._isDestroyed\u0026\u0026e.data.keepAlive){var r\u003de;Lt.prepatch(r,r)}else{(e.componentInstance\u003dfunction(e,t){var r\u003d{_isComponent:!0,_parentVnode:e,parent:t},i\u003de.data.inlineTemplate;n(i)\u0026\u0026(r.render\u003di.render,r.staticRenderFns\u003di.staticRenderFns);return new e.componentOptions.Ctor(r)}(e,Zt)).$mount(t?e.elm:void 0,t)}},prepatch:function(t,n){var r\u003dn.componentOptions;!function(t,n,r,i,o){var a\u003di.data.scopedSlots,s\u003dt.$scopedSlots,c\u003d!!(a\u0026\u0026!a.$stable||s!\u003d\u003de\u0026\u0026!s.$stable||a\u0026\u0026t.$scopedSlots.$key!\u003d\u003da.$key||!a\u0026\u0026t.$scopedSlots.$key),u\u003d!!(o||t.$options._renderChildren||c);t.$options._parentVnode\u003di,t.$vnode\u003di,t._vnode\u0026\u0026(t._vnode.parent\u003di);if(t.$options._renderChildren\u003do,t.$attrs\u003di.data.attrs||e,t.$listeners\u003dr||e,n\u0026\u0026t.$options.props){$e(!1);for(var l\u003dt._props,f\u003dt.$options._propKeys||[],p\u003d0;p\u003cf.length;p++){var d\u003df[p],v\u003dt.$options.props;l[d]\u003dIe(d,v,n,t)}$e(!0),t.$options.propsData\u003dn}r\u003dr||e;var h\u003dt.$options._parentListeners;t.$options._parentListeners\u003dr,Wt(t,r,h),u\u0026\u0026(t.$slots\u003dlt(o,i.context),t.$forceUpdate())}(n.componentInstance\u003dt.componentInstance,r.propsData,r.listeners,n,r.children)},insert:function(e){var t,n\u003de.context,r\u003de.componentInstance;r._isMounted||(r._isMounted\u003d!0,Qt(r,\"mounted\")),e.data.keepAlive\u0026\u0026(n._isMounted?((t\u003dr)._inactive\u003d!1,tn.push(t)):Yt(r,!0))},destroy:function(e){var t\u003de.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(n\u0026\u0026(t._directInactive\u003d!0,Xt(t)))return;if(!t._inactive){t._inactive\u003d!0;for(var r\u003d0;r\u003ct.$children.length;r++)e(t.$children[r]);Qt(t,\"deactivated\")}}(t,!0):t.$destroy())}},It\u003dObject.keys(Lt);function Mt(i,a,s,c,l){if(!t(i)){var f\u003ds.$options._base;if(o(i)\u0026\u0026(i\u003df.extend(i)),\"function\"\u003d\u003dtypeof i){var p;if(t(i.cid)\u0026\u0026void 0\u003d\u003d\u003d(i\u003dfunction(e,i){if(r(e.error)\u0026\u0026n(e.errorComp))return e.errorComp;if(n(e.resolved))return e.resolved;var a\u003dUt;a\u0026\u0026n(e.owners)\u0026\u0026-1\u003d\u003d\u003de.owners.indexOf(a)\u0026\u0026e.owners.push(a);if(r(e.loading)\u0026\u0026n(e.loadingComp))return e.loadingComp;if(a\u0026\u0026!n(e.owners)){var s\u003de.owners\u003d[a],c\u003d!0,l\u003dnull,f\u003dnull;a.$on(\"hook:destroyed\",function(){return h(s,a)});var p\u003dfunction(e){for(var t\u003d0,n\u003ds.length;t\u003cn;t++)s[t].$forceUpdate();e\u0026\u0026(s.length\u003d0,null!\u003d\u003dl\u0026\u0026(clearTimeout(l),l\u003dnull),null!\u003d\u003df\u0026\u0026(clearTimeout(f),f\u003dnull))},d\u003dD(function(t){e.resolved\u003dVt(t,i),c?s.length\u003d0:p(!0)}),v\u003dD(function(t){n(e.errorComp)\u0026\u0026(e.error\u003d!0,p(!0))}),m\u003de(d,v);return o(m)\u0026\u0026(u(m)?t(e.resolved)\u0026\u0026m.then(d,v):u(m.component)\u0026\u0026(m.component.then(d,v),n(m.error)\u0026\u0026(e.errorComp\u003dVt(m.error,i)),n(m.loading)\u0026\u0026(e.loadingComp\u003dVt(m.loading,i),0\u003d\u003d\u003dm.delay?e.loading\u003d!0:l\u003dsetTimeout(function(){l\u003dnull,t(e.resolved)\u0026\u0026t(e.error)\u0026\u0026(e.loading\u003d!0,p(!1))},m.delay||200)),n(m.timeout)\u0026\u0026(f\u003dsetTimeout(function(){f\u003dnull,t(e.resolved)\u0026\u0026v(null)},m.timeout)))),c\u003d!1,e.loading?e.loadingComp:e.resolved}}(p\u003di,f)))return function(e,t,n,r,i){var o\u003dve();return o.asyncFactory\u003de,o.asyncMeta\u003d{data:t,context:n,children:r,tag:i},o}(p,a,s,c,l);a\u003da||{},wn(i),n(a.model)\u0026\u0026function(e,t){var r\u003de.model\u0026\u0026e.model.prop||\"value\",i\u003de.model\u0026\u0026e.model.event||\"input\";(t.attrs||(t.attrs\u003d{}))[r]\u003dt.model.value;var o\u003dt.on||(t.on\u003d{}),a\u003do[i],s\u003dt.model.callback;n(a)?(Array.isArray(a)?-1\u003d\u003d\u003da.indexOf(s):a!\u003d\u003ds)\u0026\u0026(o[i]\u003d[s].concat(a)):o[i]\u003ds}(i.options,a);var d\u003dfunction(e,r,i){var o\u003dr.options.props;if(!t(o)){var a\u003d{},s\u003de.attrs,c\u003de.props;if(n(s)||n(c))for(var u in o){var l\u003dC(u);at(a,c,u,l,!0)||at(a,s,u,l,!1)}return a}}(a,i);if(r(i.options.functional))return function(t,r,i,o,a){var s\u003dt.options,c\u003d{},u\u003ds.props;if(n(u))for(var l in u)c[l]\u003dIe(l,u,r||e);else n(i.attrs)\u0026\u0026Dt(c,i.attrs),n(i.props)\u0026\u0026Dt(c,i.props);var f\u003dnew Et(i,c,a,o,t),p\u003ds.render.call(null,f._c,f);if(p instanceof pe)return jt(p,i,f.parent,s);if(Array.isArray(p)){for(var d\u003dst(p)||[],v\u003dnew Array(d.length),h\u003d0;h\u003cd.length;h++)v[h]\u003djt(d[h],i,f.parent,s);return v}}(i,d,a,s,c);var v\u003da.on;if(a.on\u003da.nativeOn,r(i.options.abstract)){var m\u003da.slot;a\u003d{},m\u0026\u0026(a.slot\u003dm)}!function(e){for(var t\u003de.hook||(e.hook\u003d{}),n\u003d0;n\u003cIt.length;n++){var r\u003dIt[n],i\u003dt[r],o\u003dLt[r];i\u003d\u003d\u003do||i\u0026\u0026i._merged||(t[r]\u003di?Ft(o,i):o)}}(a);var y\u003di.options.name||l;return new pe(\"vue-component-\"+i.cid+(y?\"-\"+y:\"\"),a,void 0,void 0,void 0,s,{Ctor:i,propsData:d,listeners:v,tag:l,children:c},p)}}}function Ft(e,t){var n\u003dfunction(n,r){e(n,r),t(n,r)};return n._merged\u003d!0,n}var Pt\u003d1,Rt\u003d2;function Ht(e,a,s,c,u,l){return(Array.isArray(s)||i(s))\u0026\u0026(u\u003dc,c\u003ds,s\u003dvoid 0),r(l)\u0026\u0026(u\u003dRt),function(e,i,a,s,c){if(n(a)\u0026\u0026n(a.__ob__))return ve();n(a)\u0026\u0026n(a.is)\u0026\u0026(i\u003da.is);if(!i)return ve();Array.isArray(s)\u0026\u0026\"function\"\u003d\u003dtypeof s[0]\u0026\u0026((a\u003da||{}).scopedSlots\u003d{default:s[0]},s.length\u003d0);c\u003d\u003d\u003dRt?s\u003dst(s):c\u003d\u003d\u003dPt\u0026\u0026(s\u003dfunction(e){for(var t\u003d0;t\u003ce.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(s));var u,l;if(\"string\"\u003d\u003dtypeof i){var f;l\u003de.$vnode\u0026\u0026e.$vnode.ns||F.getTagNamespace(i),u\u003dF.isReservedTag(i)?new pe(F.parsePlatformTagName(i),a,s,void 0,void 0,e):a\u0026\u0026a.pre||!n(f\u003dLe(e.$options,\"components\",i))?new pe(i,a,s,void 0,void 0,e):Mt(f,a,e,s,i)}else u\u003dMt(i,a,e,s);return Array.isArray(u)?u:n(u)?(n(l)\u0026\u0026function e(i,o,a){i.ns\u003do;\"foreignObject\"\u003d\u003d\u003di.tag\u0026\u0026(o\u003dvoid 0,a\u003d!0);if(n(i.children))for(var s\u003d0,c\u003di.children.length;s\u003cc;s++){var u\u003di.children[s];n(u.tag)\u0026\u0026(t(u.ns)||r(a)\u0026\u0026\"svg\"!\u003d\u003du.tag)\u0026\u0026e(u,o,a)}}(u,l),n(a)\u0026\u0026function(e){o(e.style)\u0026\u0026tt(e.style);o(e.class)\u0026\u0026tt(e.class)}(a),u):ve()}(e,a,s,c,u)}var Bt,Ut\u003dnull;function Vt(e,t){return(e.__esModule||oe\u0026\u0026\"Module\"\u003d\u003d\u003de[Symbol.toStringTag])\u0026\u0026(e\u003de.default),o(e)?t.extend(e):e}function zt(e){if(Array.isArray(e))for(var t\u003d0;t\u003ce.length;t++){var r\u003de[t];if(n(r)\u0026\u0026(n(r.componentOptions)||pt(r)))return r}}function Kt(e,t){Bt.$on(e,t)}function Jt(e,t){Bt.$off(e,t)}function qt(e,t){var n\u003dBt;return function r(){null!\u003d\u003dt.apply(null,arguments)\u0026\u0026n.$off(e,r)}}function Wt(e,t,n){Bt\u003de,it(t,n||{},Kt,Jt,qt,e),Bt\u003dvoid 0}var Zt\u003dnull;function Gt(e){var t\u003dZt;return Zt\u003de,function(){Zt\u003dt}}function Xt(e){for(;e\u0026\u0026(e\u003de.$parent);)if(e._inactive)return!0;return!1}function Yt(e,t){if(t){if(e._directInactive\u003d!1,Xt(e))return}else if(e._directInactive)return;if(e._inactive||null\u003d\u003d\u003de._inactive){e._inactive\u003d!1;for(var n\u003d0;n\u003ce.$children.length;n++)Yt(e.$children[n]);Qt(e,\"activated\")}}function Qt(e,t){le();var n\u003de.$options[t],r\u003dt+\" hook\";if(n)for(var i\u003d0,o\u003dn.length;i\u003co;i++)Be(n[i],e,null,e,r);e._hasHookEvent\u0026\u0026e.$emit(\"hook:\"+t),fe()}var en\u003d[],tn\u003d[],nn\u003d{},rn\u003d!1,on\u003d!1,an\u003d0;var sn\u003d0,cn\u003dDate.now;if(V\u0026\u0026!q){var un\u003dwindow.performance;un\u0026\u0026\"function\"\u003d\u003dtypeof un.now\u0026\u0026cn()\u003edocument.createEvent(\"Event\").timeStamp\u0026\u0026(cn\u003dfunction(){return un.now()})}function ln(){var e,t;for(sn\u003dcn(),on\u003d!0,en.sort(function(e,t){return e.id-t.id}),an\u003d0;an\u003cen.length;an++)(e\u003den[an]).before\u0026\u0026e.before(),t\u003de.id,nn[t]\u003dnull,e.run();var n\u003dtn.slice(),r\u003den.slice();an\u003den.length\u003dtn.length\u003d0,nn\u003d{},rn\u003don\u003d!1,function(e){for(var t\u003d0;t\u003ce.length;t++)e[t]._inactive\u003d!0,Yt(e[t],!0)}(n),function(e){var t\u003de.length;for(;t--;){var n\u003de[t],r\u003dn.vm;r._watcher\u003d\u003d\u003dn\u0026\u0026r._isMounted\u0026\u0026!r._isDestroyed\u0026\u0026Qt(r,\"updated\")}}(r),ne\u0026\u0026F.devtools\u0026\u0026ne.emit(\"flush\")}var fn\u003d0,pn\u003dfunction(e,t,n,r,i){this.vm\u003de,i\u0026\u0026(e._watcher\u003dthis),e._watchers.push(this),r?(this.deep\u003d!!r.deep,this.user\u003d!!r.user,this.lazy\u003d!!r.lazy,this.sync\u003d!!r.sync,this.before\u003dr.before):this.deep\u003dthis.user\u003dthis.lazy\u003dthis.sync\u003d!1,this.cb\u003dn,this.id\u003d++fn,this.active\u003d!0,this.dirty\u003dthis.lazy,this.deps\u003d[],this.newDeps\u003d[],this.depIds\u003dnew ie,this.newDepIds\u003dnew ie,this.expression\u003d\"\",\"function\"\u003d\u003dtypeof t?this.getter\u003dt:(this.getter\u003dfunction(e){if(!H.test(e)){var t\u003de.split(\".\");return function(e){for(var n\u003d0;n\u003ct.length;n++){if(!e)return;e\u003de[t[n]]}return e}}}(t),this.getter||(this.getter\u003dS)),this.value\u003dthis.lazy?void 0:this.get()};pn.prototype.get\u003dfunction(){var e;le(this);var t\u003dthis.vm;try{e\u003dthis.getter.call(t,t)}catch(e){if(!this.user)throw e;He(e,t,\u0027getter for watcher \"\u0027+this.expression+\u0027\"\u0027)}finally{this.deep\u0026\u0026tt(e),fe(),this.cleanupDeps()}return e},pn.prototype.addDep\u003dfunction(e){var t\u003de.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},pn.prototype.cleanupDeps\u003dfunction(){for(var e\u003dthis.deps.length;e--;){var t\u003dthis.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n\u003dthis.depIds;this.depIds\u003dthis.newDepIds,this.newDepIds\u003dn,this.newDepIds.clear(),n\u003dthis.deps,this.deps\u003dthis.newDeps,this.newDeps\u003dn,this.newDeps.length\u003d0},pn.prototype.update\u003dfunction(){this.lazy?this.dirty\u003d!0:this.sync?this.run():function(e){var t\u003de.id;if(null\u003d\u003dnn[t]){if(nn[t]\u003d!0,on){for(var n\u003den.length-1;n\u003ean\u0026\u0026en[n].id\u003ee.id;)n--;en.splice(n+1,0,e)}else en.push(e);rn||(rn\u003d!0,Qe(ln))}}(this)},pn.prototype.run\u003dfunction(){if(this.active){var e\u003dthis.get();if(e!\u003d\u003dthis.value||o(e)||this.deep){var t\u003dthis.value;if(this.value\u003de,this.user){var n\u003d\u0027callback for watcher \"\u0027+this.expression+\u0027\"\u0027;Be(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},pn.prototype.evaluate\u003dfunction(){this.value\u003dthis.get(),this.dirty\u003d!1},pn.prototype.depend\u003dfunction(){for(var e\u003dthis.deps.length;e--;)this.deps[e].depend()},pn.prototype.teardown\u003dfunction(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e\u003dthis.deps.length;e--;)this.deps[e].removeSub(this);this.active\u003d!1}};var dn\u003d{enumerable:!0,configurable:!0,get:S,set:S};function vn(e,t,n){dn.get\u003dfunction(){return this[t][n]},dn.set\u003dfunction(e){this[t][n]\u003de},Object.defineProperty(e,n,dn)}function hn(e){e._watchers\u003d[];var t\u003de.$options;t.props\u0026\u0026function(e,t){var n\u003de.$options.propsData||{},r\u003de._props\u003d{},i\u003de.$options._propKeys\u003d[];e.$parent\u0026\u0026$e(!1);var o\u003dfunction(o){i.push(o);var a\u003dIe(o,t,n,e);xe(r,o,a),o in e||vn(e,\"_props\",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods\u0026\u0026function(e,t){e.$options.props;for(var n in t)e[n]\u003d\"function\"!\u003dtypeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t\u003de.$options.data;s(t\u003de._data\u003d\"function\"\u003d\u003dtypeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return He(e,t,\"data()\"),{}}finally{fe()}}(t,e):t||{})||(t\u003d{});var n\u003dObject.keys(t),r\u003de.$options.props,i\u003d(e.$options.methods,n.length);for(;i--;){var o\u003dn[i];r\u0026\u0026y(r,o)||(a\u003dvoid 0,36!\u003d\u003d(a\u003d(o+\"\").charCodeAt(0))\u0026\u002695!\u003d\u003da\u0026\u0026vn(e,\"_data\",o))}var a;Ce(t,!0)}(e):Ce(e._data\u003d{},!0),t.computed\u0026\u0026function(e,t){var n\u003de._computedWatchers\u003dObject.create(null),r\u003dte();for(var i in t){var o\u003dt[i],a\u003d\"function\"\u003d\u003dtypeof o?o:o.get;r||(n[i]\u003dnew pn(e,a||S,S,mn)),i in e||yn(e,i,o)}}(e,t.computed),t.watch\u0026\u0026t.watch!\u003d\u003dY\u0026\u0026function(e,t){for(var n in t){var r\u003dt[n];if(Array.isArray(r))for(var i\u003d0;i\u003cr.length;i++)bn(e,n,r[i]);else bn(e,n,r)}}(e,t.watch)}var mn\u003d{lazy:!0};function yn(e,t,n){var r\u003d!te();\"function\"\u003d\u003dtypeof n?(dn.get\u003dr?gn(t):_n(n),dn.set\u003dS):(dn.get\u003dn.get?r\u0026\u0026!1!\u003d\u003dn.cache?gn(t):_n(n.get):S,dn.set\u003dn.set||S),Object.defineProperty(e,t,dn)}function gn(e){return function(){var t\u003dthis._computedWatchers\u0026\u0026this._computedWatchers[e];if(t)return t.dirty\u0026\u0026t.evaluate(),ce.target\u0026\u0026t.depend(),t.value}}function _n(e){return function(){return e.call(this,this)}}function bn(e,t,n,r){return s(n)\u0026\u0026(r\u003dn,n\u003dn.handler),\"string\"\u003d\u003dtypeof n\u0026\u0026(n\u003de[n]),e.$watch(t,n,r)}var $n\u003d0;function wn(e){var t\u003de.options;if(e.super){var n\u003dwn(e.super);if(n!\u003d\u003de.superOptions){e.superOptions\u003dn;var r\u003dfunction(e){var t,n\u003de.options,r\u003de.sealedOptions;for(var i in n)n[i]!\u003d\u003dr[i]\u0026\u0026(t||(t\u003d{}),t[i]\u003dn[i]);return t}(e);r\u0026\u0026A(e.extendOptions,r),(t\u003de.options\u003dDe(n,e.extendOptions)).name\u0026\u0026(t.components[t.name]\u003de)}}return t}function Cn(e){this._init(e)}function xn(e){e.cid\u003d0;var t\u003d1;e.extend\u003dfunction(e){e\u003de||{};var n\u003dthis,r\u003dn.cid,i\u003de._Ctor||(e._Ctor\u003d{});if(i[r])return i[r];var o\u003de.name||n.options.name,a\u003dfunction(e){this._init(e)};return(a.prototype\u003dObject.create(n.prototype)).constructor\u003da,a.cid\u003dt++,a.options\u003dDe(n.options,e),a.super\u003dn,a.options.props\u0026\u0026function(e){var t\u003de.options.props;for(var n in t)vn(e.prototype,\"_props\",n)}(a),a.options.computed\u0026\u0026function(e){var t\u003de.options.computed;for(var n in t)yn(e.prototype,n,t[n])}(a),a.extend\u003dn.extend,a.mixin\u003dn.mixin,a.use\u003dn.use,I.forEach(function(e){a[e]\u003dn[e]}),o\u0026\u0026(a.options.components[o]\u003da),a.superOptions\u003dn.options,a.extendOptions\u003de,a.sealedOptions\u003dA({},a.options),i[r]\u003da,a}}function kn(e){return e\u0026\u0026(e.Ctor.options.name||e.tag)}function An(e,t){return Array.isArray(e)?e.indexOf(t)\u003e-1:\"string\"\u003d\u003dtypeof e?e.split(\",\").indexOf(t)\u003e-1:(n\u003de,\"[object RegExp]\"\u003d\u003d\u003da.call(n)\u0026\u0026e.test(t));var n}function On(e,t){var n\u003de.cache,r\u003de.keys,i\u003de._vnode;for(var o in n){var a\u003dn[o];if(a){var s\u003da.name;s\u0026\u0026!t(s)\u0026\u0026Sn(n,o,r,i)}}}function Sn(e,t,n,r){var i\u003de[t];!i||r\u0026\u0026i.tag\u003d\u003d\u003dr.tag||i.componentInstance.$destroy(),e[t]\u003dnull,h(n,t)}!function(t){t.prototype._init\u003dfunction(t){var n\u003dthis;n._uid\u003d$n++,n._isVue\u003d!0,t\u0026\u0026t._isComponent?function(e,t){var n\u003de.$options\u003dObject.create(e.constructor.options),r\u003dt._parentVnode;n.parent\u003dt.parent,n._parentVnode\u003dr;var i\u003dr.componentOptions;n.propsData\u003di.propsData,n._parentListeners\u003di.listeners,n._renderChildren\u003di.children,n._componentTag\u003di.tag,t.render\u0026\u0026(n.render\u003dt.render,n.staticRenderFns\u003dt.staticRenderFns)}(n,t):n.$options\u003dDe(wn(n.constructor),t||{},n),n._renderProxy\u003dn,n._self\u003dn,function(e){var t\u003de.$options,n\u003dt.parent;if(n\u0026\u0026!t.abstract){for(;n.$options.abstract\u0026\u0026n.$parent;)n\u003dn.$parent;n.$children.push(e)}e.$parent\u003dn,e.$root\u003dn?n.$root:e,e.$children\u003d[],e.$refs\u003d{},e._watcher\u003dnull,e._inactive\u003dnull,e._directInactive\u003d!1,e._isMounted\u003d!1,e._isDestroyed\u003d!1,e._isBeingDestroyed\u003d!1}(n),function(e){e._events\u003dObject.create(null),e._hasHookEvent\u003d!1;var t\u003de.$options._parentListeners;t\u0026\u0026Wt(e,t)}(n),function(t){t._vnode\u003dnull,t._staticTrees\u003dnull;var n\u003dt.$options,r\u003dt.$vnode\u003dn._parentVnode,i\u003dr\u0026\u0026r.context;t.$slots\u003dlt(n._renderChildren,i),t.$scopedSlots\u003de,t._c\u003dfunction(e,n,r,i){return Ht(t,e,n,r,i,!1)},t.$createElement\u003dfunction(e,n,r,i){return Ht(t,e,n,r,i,!0)};var o\u003dr\u0026\u0026r.data;xe(t,\"$attrs\",o\u0026\u0026o.attrs||e,null,!0),xe(t,\"$listeners\",n._parentListeners||e,null,!0)}(n),Qt(n,\"beforeCreate\"),function(e){var t\u003dut(e.$options.inject,e);t\u0026\u0026($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),hn(n),function(e){var t\u003de.$options.provide;t\u0026\u0026(e._provided\u003d\"function\"\u003d\u003dtypeof t?t.call(e):t)}(n),Qt(n,\"created\"),n.$options.el\u0026\u0026n.$mount(n.$options.el)}}(Cn),function(e){var t\u003d{get:function(){return this._data}},n\u003d{get:function(){return this._props}};Object.defineProperty(e.prototype,\"$data\",t),Object.defineProperty(e.prototype,\"$props\",n),e.prototype.$set\u003dke,e.prototype.$delete\u003dAe,e.prototype.$watch\u003dfunction(e,t,n){if(s(t))return bn(this,e,t,n);(n\u003dn||{}).user\u003d!0;var r\u003dnew pn(this,e,t,n);if(n.immediate){var i\u003d\u0027callback for immediate watcher \"\u0027+r.expression+\u0027\"\u0027;le(),Be(t,this,[r.value],this,i),fe()}return function(){r.teardown()}}}(Cn),function(e){var t\u003d/^hook:/;e.prototype.$on\u003dfunction(e,n){var r\u003dthis;if(Array.isArray(e))for(var i\u003d0,o\u003de.length;i\u003co;i++)r.$on(e[i],n);else(r._events[e]||(r._events[e]\u003d[])).push(n),t.test(e)\u0026\u0026(r._hasHookEvent\u003d!0);return r},e.prototype.$once\u003dfunction(e,t){var n\u003dthis;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn\u003dt,n.$on(e,r),n},e.prototype.$off\u003dfunction(e,t){var n\u003dthis;if(!arguments.length)return n._events\u003dObject.create(null),n;if(Array.isArray(e)){for(var r\u003d0,i\u003de.length;r\u003ci;r++)n.$off(e[r],t);return n}var o,a\u003dn._events[e];if(!a)return n;if(!t)return n._events[e]\u003dnull,n;for(var s\u003da.length;s--;)if((o\u003da[s])\u003d\u003d\u003dt||o.fn\u003d\u003d\u003dt){a.splice(s,1);break}return n},e.prototype.$emit\u003dfunction(e){var t\u003dthis._events[e];if(t){t\u003dt.length\u003e1?k(t):t;for(var n\u003dk(arguments,1),r\u003d\u0027event handler for \"\u0027+e+\u0027\"\u0027,i\u003d0,o\u003dt.length;i\u003co;i++)Be(t[i],this,n,this,r)}return this}}(Cn),function(e){e.prototype._update\u003dfunction(e,t){var n\u003dthis,r\u003dn.$el,i\u003dn._vnode,o\u003dGt(n);n._vnode\u003de,n.$el\u003di?n.__patch__(i,e):n.__patch__(n.$el,e,t,!1),o(),r\u0026\u0026(r.__vue__\u003dnull),n.$el\u0026\u0026(n.$el.__vue__\u003dn),n.$vnode\u0026\u0026n.$parent\u0026\u0026n.$vnode\u003d\u003d\u003dn.$parent._vnode\u0026\u0026(n.$parent.$el\u003dn.$el)},e.prototype.$forceUpdate\u003dfunction(){this._watcher\u0026\u0026this._watcher.update()},e.prototype.$destroy\u003dfunction(){var e\u003dthis;if(!e._isBeingDestroyed){Qt(e,\"beforeDestroy\"),e._isBeingDestroyed\u003d!0;var t\u003de.$parent;!t||t._isBeingDestroyed||e.$options.abstract||h(t.$children,e),e._watcher\u0026\u0026e._watcher.teardown();for(var n\u003de._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__\u0026\u0026e._data.__ob__.vmCount--,e._isDestroyed\u003d!0,e.__patch__(e._vnode,null),Qt(e,\"destroyed\"),e.$off(),e.$el\u0026\u0026(e.$el.__vue__\u003dnull),e.$vnode\u0026\u0026(e.$vnode.parent\u003dnull)}}}(Cn),function(e){Nt(e.prototype),e.prototype.$nextTick\u003dfunction(e){return Qe(e,this)},e.prototype._render\u003dfunction(){var e,t\u003dthis,n\u003dt.$options,r\u003dn.render,i\u003dn._parentVnode;i\u0026\u0026(t.$scopedSlots\u003ddt(i.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode\u003di;try{Ut\u003dt,e\u003dr.call(t._renderProxy,t.$createElement)}catch(n){He(n,t,\"render\"),e\u003dt._vnode}finally{Ut\u003dnull}return Array.isArray(e)\u0026\u00261\u003d\u003d\u003de.length\u0026\u0026(e\u003de[0]),e instanceof pe||(e\u003dve()),e.parent\u003di,e}}(Cn);var Tn\u003d[String,RegExp,Array],Nn\u003d{KeepAlive:{name:\"keep-alive\",abstract:!0,props:{include:Tn,exclude:Tn,max:[String,Number]},methods:{cacheVNode:function(){var e\u003dthis.cache,t\u003dthis.keys,n\u003dthis.vnodeToCache,r\u003dthis.keyToCache;if(n){var i\u003dn.tag,o\u003dn.componentInstance,a\u003dn.componentOptions;e[r]\u003d{name:kn(a),tag:i,componentInstance:o},t.push(r),this.max\u0026\u0026t.length\u003eparseInt(this.max)\u0026\u0026Sn(e,t[0],t,this._vnode),this.vnodeToCache\u003dnull}}},created:function(){this.cache\u003dObject.create(null),this.keys\u003d[]},destroyed:function(){for(var e in this.cache)Sn(this.cache,e,this.keys)},mounted:function(){var e\u003dthis;this.cacheVNode(),this.$watch(\"include\",function(t){On(e,function(e){return An(t,e)})}),this.$watch(\"exclude\",function(t){On(e,function(e){return!An(t,e)})})},updated:function(){this.cacheVNode()},render:function(){var e\u003dthis.$slots.default,t\u003dzt(e),n\u003dt\u0026\u0026t.componentOptions;if(n){var r\u003dkn(n),i\u003dthis.include,o\u003dthis.exclude;if(i\u0026\u0026(!r||!An(i,r))||o\u0026\u0026r\u0026\u0026An(o,r))return t;var a\u003dthis.cache,s\u003dthis.keys,c\u003dnull\u003d\u003dt.key?n.Ctor.cid+(n.tag?\"::\"+n.tag:\"\"):t.key;a[c]?(t.componentInstance\u003da[c].componentInstance,h(s,c),s.push(c)):(this.vnodeToCache\u003dt,this.keyToCache\u003dc),t.data.keepAlive\u003d!0}return t||e\u0026\u0026e[0]}}};!function(e){var t\u003d{get:function(){return F}};Object.defineProperty(e,\"config\",t),e.util\u003d{warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set\u003dke,e.delete\u003dAe,e.nextTick\u003dQe,e.observable\u003dfunction(e){return Ce(e),e},e.options\u003dObject.create(null),I.forEach(function(t){e.options[t+\"s\"]\u003dObject.create(null)}),e.options._base\u003de,A(e.options.components,Nn),function(e){e.use\u003dfunction(e){var t\u003dthis._installedPlugins||(this._installedPlugins\u003d[]);if(t.indexOf(e)\u003e-1)return this;var n\u003dk(arguments,1);return n.unshift(this),\"function\"\u003d\u003dtypeof e.install?e.install.apply(e,n):\"function\"\u003d\u003dtypeof e\u0026\u0026e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin\u003dfunction(e){return this.options\u003dDe(this.options,e),this}}(e),xn(e),function(e){I.forEach(function(t){e[t]\u003dfunction(e,n){return n?(\"component\"\u003d\u003d\u003dt\u0026\u0026s(n)\u0026\u0026(n.name\u003dn.name||e,n\u003dthis.options._base.extend(n)),\"directive\"\u003d\u003d\u003dt\u0026\u0026\"function\"\u003d\u003dtypeof n\u0026\u0026(n\u003d{bind:n,update:n}),this.options[t+\"s\"][e]\u003dn,n):this.options[t+\"s\"][e]}})}(e)}(Cn),Object.defineProperty(Cn.prototype,\"$isServer\",{get:te}),Object.defineProperty(Cn.prototype,\"$ssrContext\",{get:function(){return this.$vnode\u0026\u0026this.$vnode.ssrContext}}),Object.defineProperty(Cn,\"FunctionalRenderContext\",{value:Et}),Cn.version\u003d\"2.6.14\";var En\u003dp(\"style,class\"),jn\u003dp(\"input,textarea,option,select,progress\"),Dn\u003dfunction(e,t,n){return\"value\"\u003d\u003d\u003dn\u0026\u0026jn(e)\u0026\u0026\"button\"!\u003d\u003dt||\"selected\"\u003d\u003d\u003dn\u0026\u0026\"option\"\u003d\u003d\u003de||\"checked\"\u003d\u003d\u003dn\u0026\u0026\"input\"\u003d\u003d\u003de||\"muted\"\u003d\u003d\u003dn\u0026\u0026\"video\"\u003d\u003d\u003de},Ln\u003dp(\"contenteditable,draggable,spellcheck\"),In\u003dp(\"events,caret,typing,plaintext-only\"),Mn\u003dfunction(e,t){return Bn(t)||\"false\"\u003d\u003d\u003dt?\"false\":\"contenteditable\"\u003d\u003d\u003de\u0026\u0026In(t)?t:\"true\"},Fn\u003dp(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible\"),Pn\u003d\"http://www.w3.org/1999/xlink\",Rn\u003dfunction(e){return\":\"\u003d\u003d\u003de.charAt(5)\u0026\u0026\"xlink\"\u003d\u003d\u003de.slice(0,5)},Hn\u003dfunction(e){return Rn(e)?e.slice(6,e.length):\"\"},Bn\u003dfunction(e){return null\u003d\u003de||!1\u003d\u003d\u003de};function Un(e){for(var t\u003de.data,r\u003de,i\u003de;n(i.componentInstance);)(i\u003di.componentInstance._vnode)\u0026\u0026i.data\u0026\u0026(t\u003dVn(i.data,t));for(;n(r\u003dr.parent);)r\u0026\u0026r.data\u0026\u0026(t\u003dVn(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Kn(t));return\"\"}(t.staticClass,t.class)}function Vn(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Kn(e){return Array.isArray(e)?function(e){for(var t,r\u003d\"\",i\u003d0,o\u003de.length;i\u003co;i++)n(t\u003dKn(e[i]))\u0026\u0026\"\"!\u003d\u003dt\u0026\u0026(r\u0026\u0026(r+\u003d\" \"),r+\u003dt);return r}(e):o(e)?function(e){var t\u003d\"\";for(var n in e)e[n]\u0026\u0026(t\u0026\u0026(t+\u003d\" \"),t+\u003dn);return t}(e):\"string\"\u003d\u003dtypeof e?e:\"\"}var Jn\u003d{svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},qn\u003dp(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),Wn\u003dp(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),Zn\u003dfunction(e){return qn(e)||Wn(e)};function Gn(e){return Wn(e)?\"svg\":\"math\"\u003d\u003d\u003de?\"math\":void 0}var Xn\u003dObject.create(null);var Yn\u003dp(\"text,number,password,search,email,tel,url\");function Qn(e){if(\"string\"\u003d\u003dtypeof e){var t\u003ddocument.querySelector(e);return t||document.createElement(\"div\")}return e}var er\u003dObject.freeze({createElement:function(e,t){var n\u003ddocument.createElement(e);return\"select\"!\u003d\u003de?n:(t.data\u0026\u0026t.data.attrs\u0026\u0026void 0!\u003d\u003dt.data.attrs.multiple\u0026\u0026n.setAttribute(\"multiple\",\"multiple\"),n)},createElementNS:function(e,t){return document.createElementNS(Jn[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent\u003dt},setStyleScope:function(e,t){e.setAttribute(t,\"\")}}),tr\u003d{create:function(e,t){nr(t)},update:function(e,t){e.data.ref!\u003d\u003dt.data.ref\u0026\u0026(nr(e,!0),nr(t))},destroy:function(e){nr(e,!0)}};function nr(e,t){var r\u003de.data.ref;if(n(r)){var i\u003de.context,o\u003de.componentInstance||e.elm,a\u003di.$refs;t?Array.isArray(a[r])?h(a[r],o):a[r]\u003d\u003d\u003do\u0026\u0026(a[r]\u003dvoid 0):e.data.refInFor?Array.isArray(a[r])?a[r].indexOf(o)\u003c0\u0026\u0026a[r].push(o):a[r]\u003d[o]:a[r]\u003do}}var rr\u003dnew pe(\"\",{},[]),ir\u003d[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"];function or(e,i){return e.key\u003d\u003d\u003di.key\u0026\u0026e.asyncFactory\u003d\u003d\u003di.asyncFactory\u0026\u0026(e.tag\u003d\u003d\u003di.tag\u0026\u0026e.isComment\u003d\u003d\u003di.isComment\u0026\u0026n(e.data)\u003d\u003d\u003dn(i.data)\u0026\u0026function(e,t){if(\"input\"!\u003d\u003de.tag)return!0;var r,i\u003dn(r\u003de.data)\u0026\u0026n(r\u003dr.attrs)\u0026\u0026r.type,o\u003dn(r\u003dt.data)\u0026\u0026n(r\u003dr.attrs)\u0026\u0026r.type;return i\u003d\u003d\u003do||Yn(i)\u0026\u0026Yn(o)}(e,i)||r(e.isAsyncPlaceholder)\u0026\u0026t(i.asyncFactory.error))}function ar(e,t,r){var i,o,a\u003d{};for(i\u003dt;i\u003c\u003dr;++i)n(o\u003de[i].key)\u0026\u0026(a[o]\u003di);return a}var sr\u003d{create:cr,update:cr,destroy:function(e){cr(e,rr)}};function cr(e,t){(e.data.directives||t.data.directives)\u0026\u0026function(e,t){var n,r,i,o\u003de\u003d\u003d\u003drr,a\u003dt\u003d\u003d\u003drr,s\u003dlr(e.data.directives,e.context),c\u003dlr(t.data.directives,t.context),u\u003d[],l\u003d[];for(n in c)r\u003ds[n],i\u003dc[n],r?(i.oldValue\u003dr.value,i.oldArg\u003dr.arg,pr(i,\"update\",t,e),i.def\u0026\u0026i.def.componentUpdated\u0026\u0026l.push(i)):(pr(i,\"bind\",t,e),i.def\u0026\u0026i.def.inserted\u0026\u0026u.push(i));if(u.length){var f\u003dfunction(){for(var n\u003d0;n\u003cu.length;n++)pr(u[n],\"inserted\",t,e)};o?ot(t,\"insert\",f):f()}l.length\u0026\u0026ot(t,\"postpatch\",function(){for(var n\u003d0;n\u003cl.length;n++)pr(l[n],\"componentUpdated\",t,e)});if(!o)for(n in s)c[n]||pr(s[n],\"unbind\",e,e,a)}(e,t)}var ur\u003dObject.create(null);function lr(e,t){var n,r,i\u003dObject.create(null);if(!e)return i;for(n\u003d0;n\u003ce.length;n++)(r\u003de[n]).modifiers||(r.modifiers\u003dur),i[fr(r)]\u003dr,r.def\u003dLe(t.$options,\"directives\",r.name);return i}function fr(e){return e.rawName||e.name+\".\"+Object.keys(e.modifiers||{}).join(\".\")}function pr(e,t,n,r,i){var o\u003de.def\u0026\u0026e.def[t];if(o)try{o(n.elm,e,n,r,i)}catch(r){He(r,n.context,\"directive \"+e.name+\" \"+t+\" hook\")}}var dr\u003d[tr,sr];function vr(e,r){var i\u003dr.componentOptions;if(!(n(i)\u0026\u0026!1\u003d\u003d\u003di.Ctor.options.inheritAttrs||t(e.data.attrs)\u0026\u0026t(r.data.attrs))){var o,a,s\u003dr.elm,c\u003de.data.attrs||{},u\u003dr.data.attrs||{};for(o in n(u.__ob__)\u0026\u0026(u\u003dr.data.attrs\u003dA({},u)),u)a\u003du[o],c[o]!\u003d\u003da\u0026\u0026hr(s,o,a,r.data.pre);for(o in(q||Z)\u0026\u0026u.value!\u003d\u003dc.value\u0026\u0026hr(s,\"value\",u.value),c)t(u[o])\u0026\u0026(Rn(o)?s.removeAttributeNS(Pn,Hn(o)):Ln(o)||s.removeAttribute(o))}}function hr(e,t,n,r){r||e.tagName.indexOf(\"-\")\u003e-1?mr(e,t,n):Fn(t)?Bn(n)?e.removeAttribute(t):(n\u003d\"allowfullscreen\"\u003d\u003d\u003dt\u0026\u0026\"EMBED\"\u003d\u003d\u003de.tagName?\"true\":t,e.setAttribute(t,n)):Ln(t)?e.setAttribute(t,Mn(t,n)):Rn(t)?Bn(n)?e.removeAttributeNS(Pn,Hn(t)):e.setAttributeNS(Pn,t,n):mr(e,t,n)}function mr(e,t,n){if(Bn(n))e.removeAttribute(t);else{if(q\u0026\u0026!W\u0026\u0026\"TEXTAREA\"\u003d\u003d\u003de.tagName\u0026\u0026\"placeholder\"\u003d\u003d\u003dt\u0026\u0026\"\"!\u003d\u003dn\u0026\u0026!e.__ieph){var r\u003dfunction(t){t.stopImmediatePropagation(),e.removeEventListener(\"input\",r)};e.addEventListener(\"input\",r),e.__ieph\u003d!0}e.setAttribute(t,n)}}var yr\u003d{create:vr,update:vr};function gr(e,r){var i\u003dr.elm,o\u003dr.data,a\u003de.data;if(!(t(o.staticClass)\u0026\u0026t(o.class)\u0026\u0026(t(a)||t(a.staticClass)\u0026\u0026t(a.class)))){var s\u003dUn(r),c\u003di._transitionClasses;n(c)\u0026\u0026(s\u003dzn(s,Kn(c))),s!\u003d\u003di._prevClass\u0026\u0026(i.setAttribute(\"class\",s),i._prevClass\u003ds)}}var _r,br,$r,wr,Cr,xr,kr\u003d{create:gr,update:gr},Ar\u003d/[\\w).+\\-_$\\]]/;function Or(e){var t,n,r,i,o,a\u003d!1,s\u003d!1,c\u003d!1,u\u003d!1,l\u003d0,f\u003d0,p\u003d0,d\u003d0;for(r\u003d0;r\u003ce.length;r++)if(n\u003dt,t\u003de.charCodeAt(r),a)39\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(a\u003d!1);else if(s)34\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(s\u003d!1);else if(c)96\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(c\u003d!1);else if(u)47\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(u\u003d!1);else if(124!\u003d\u003dt||124\u003d\u003d\u003de.charCodeAt(r+1)||124\u003d\u003d\u003de.charCodeAt(r-1)||l||f||p){switch(t){case 34:s\u003d!0;break;case 39:a\u003d!0;break;case 96:c\u003d!0;break;case 40:p++;break;case 41:p--;break;case 91:f++;break;case 93:f--;break;case 123:l++;break;case 125:l--}if(47\u003d\u003d\u003dt){for(var v\u003dr-1,h\u003dvoid 0;v\u003e\u003d0\u0026\u0026\" \"\u003d\u003d\u003d(h\u003de.charAt(v));v--);h\u0026\u0026Ar.test(h)||(u\u003d!0)}}else void 0\u003d\u003d\u003di?(d\u003dr+1,i\u003de.slice(0,r).trim()):m();function m(){(o||(o\u003d[])).push(e.slice(d,r).trim()),d\u003dr+1}if(void 0\u003d\u003d\u003di?i\u003de.slice(0,r).trim():0!\u003d\u003dd\u0026\u0026m(),o)for(r\u003d0;r\u003co.length;r++)i\u003dSr(i,o[r]);return i}function Sr(e,t){var n\u003dt.indexOf(\"(\");if(n\u003c0)return\u0027_f(\"\u0027+t+\u0027\")(\u0027+e+\")\";var r\u003dt.slice(0,n),i\u003dt.slice(n+1);return\u0027_f(\"\u0027+r+\u0027\")(\u0027+e+(\")\"!\u003d\u003di?\",\"+i:i)}function Tr(e,t){console.error(\"[Vue compiler]: \"+e)}function Nr(e,t){return e?e.map(function(e){return e[t]}).filter(function(e){return e}):[]}function Er(e,t,n,r,i){(e.props||(e.props\u003d[])).push(Hr({name:t,value:n,dynamic:i},r)),e.plain\u003d!1}function jr(e,t,n,r,i){(i?e.dynamicAttrs||(e.dynamicAttrs\u003d[]):e.attrs||(e.attrs\u003d[])).push(Hr({name:t,value:n,dynamic:i},r)),e.plain\u003d!1}function Dr(e,t,n,r){e.attrsMap[t]\u003dn,e.attrsList.push(Hr({name:t,value:n},r))}function Lr(e,t,n,r,i,o,a,s){(e.directives||(e.directives\u003d[])).push(Hr({name:t,rawName:n,value:r,arg:i,isDynamicArg:o,modifiers:a},s)),e.plain\u003d!1}function Ir(e,t,n){return n?\"_p(\"+t+\u0027,\"\u0027+e+\u0027\")\u0027:e+t}function Mr(t,n,r,i,o,a,s,c){var u;(i\u003di||e).right?c?n\u003d\"(\"+n+\")\u003d\u003d\u003d\u0027click\u0027?\u0027contextmenu\u0027:(\"+n+\")\":\"click\"\u003d\u003d\u003dn\u0026\u0026(n\u003d\"contextmenu\",delete i.right):i.middle\u0026\u0026(c?n\u003d\"(\"+n+\")\u003d\u003d\u003d\u0027click\u0027?\u0027mouseup\u0027:(\"+n+\")\":\"click\"\u003d\u003d\u003dn\u0026\u0026(n\u003d\"mouseup\")),i.capture\u0026\u0026(delete i.capture,n\u003dIr(\"!\",n,c)),i.once\u0026\u0026(delete i.once,n\u003dIr(\"~\",n,c)),i.passive\u0026\u0026(delete i.passive,n\u003dIr(\"\u0026\",n,c)),i.native?(delete i.native,u\u003dt.nativeEvents||(t.nativeEvents\u003d{})):u\u003dt.events||(t.events\u003d{});var l\u003dHr({value:r.trim(),dynamic:c},s);i!\u003d\u003de\u0026\u0026(l.modifiers\u003di);var f\u003du[n];Array.isArray(f)?o?f.unshift(l):f.push(l):u[n]\u003df?o?[l,f]:[f,l]:l,t.plain\u003d!1}function Fr(e,t,n){var r\u003dPr(e,\":\"+t)||Pr(e,\"v-bind:\"+t);if(null!\u003dr)return Or(r);if(!1!\u003d\u003dn){var i\u003dPr(e,t);if(null!\u003di)return JSON.stringify(i)}}function Pr(e,t,n){var r;if(null!\u003d(r\u003de.attrsMap[t]))for(var i\u003de.attrsList,o\u003d0,a\u003di.length;o\u003ca;o++)if(i[o].name\u003d\u003d\u003dt){i.splice(o,1);break}return n\u0026\u0026delete e.attrsMap[t],r}function Rr(e,t){for(var n\u003de.attrsList,r\u003d0,i\u003dn.length;r\u003ci;r++){var o\u003dn[r];if(t.test(o.name))return n.splice(r,1),o}}function Hr(e,t){return t\u0026\u0026(null!\u003dt.start\u0026\u0026(e.start\u003dt.start),null!\u003dt.end\u0026\u0026(e.end\u003dt.end)),e}function Br(e,t,n){var r\u003dn||{},i\u003dr.number,o\u003d\"$$v\";r.trim\u0026\u0026(o\u003d\"(typeof $$v \u003d\u003d\u003d \u0027string\u0027? $$v.trim(): $$v)\"),i\u0026\u0026(o\u003d\"_n(\"+o+\")\");var a\u003dUr(t,o);e.model\u003d{value:\"(\"+t+\")\",expression:JSON.stringify(t),callback:\"function ($$v) {\"+a+\"}\"}}function Ur(e,t){var n\u003dfunction(e){if(e\u003de.trim(),_r\u003de.length,e.indexOf(\"[\")\u003c0||e.lastIndexOf(\"]\")\u003c_r-1)return(wr\u003de.lastIndexOf(\".\"))\u003e-1?{exp:e.slice(0,wr),key:\u0027\"\u0027+e.slice(wr+1)+\u0027\"\u0027}:{exp:e,key:null};br\u003de,wr\u003dCr\u003dxr\u003d0;for(;!zr();)Kr($r\u003dVr())?qr($r):91\u003d\u003d\u003d$r\u0026\u0026Jr($r);return{exp:e.slice(0,Cr),key:e.slice(Cr+1,xr)}}(e);return null\u003d\u003d\u003dn.key?e+\"\u003d\"+t:\"$set(\"+n.exp+\", \"+n.key+\", \"+t+\")\"}function Vr(){return br.charCodeAt(++wr)}function zr(){return wr\u003e\u003d_r}function Kr(e){return 34\u003d\u003d\u003de||39\u003d\u003d\u003de}function Jr(e){var t\u003d1;for(Cr\u003dwr;!zr();)if(Kr(e\u003dVr()))qr(e);else if(91\u003d\u003d\u003de\u0026\u0026t++,93\u003d\u003d\u003de\u0026\u0026t--,0\u003d\u003d\u003dt){xr\u003dwr;break}}function qr(e){for(var t\u003de;!zr()\u0026\u0026(e\u003dVr())!\u003d\u003dt;);}var Wr,Zr\u003d\"__r\",Gr\u003d\"__c\";function Xr(e,t,n){var r\u003dWr;return function i(){null!\u003d\u003dt.apply(null,arguments)\u0026\u0026ei(e,i,n,r)}}var Yr\u003dKe\u0026\u0026!(X\u0026\u0026Number(X[1])\u003c\u003d53);function Qr(e,t,n,r){if(Yr){var i\u003dsn,o\u003dt;t\u003do._wrapper\u003dfunction(e){if(e.target\u003d\u003d\u003de.currentTarget||e.timeStamp\u003e\u003di||e.timeStamp\u003c\u003d0||e.target.ownerDocument!\u003d\u003ddocument)return o.apply(this,arguments)}}Wr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function ei(e,t,n,r){(r||Wr).removeEventListener(e,t._wrapper||t,n)}function ti(e,r){if(!t(e.data.on)||!t(r.data.on)){var i\u003dr.data.on||{},o\u003de.data.on||{};Wr\u003dr.elm,function(e){if(n(e[Zr])){var t\u003dq?\"change\":\"input\";e[t]\u003d[].concat(e[Zr],e[t]||[]),delete e[Zr]}n(e[Gr])\u0026\u0026(e.change\u003d[].concat(e[Gr],e.change||[]),delete e[Gr])}(i),it(i,o,Qr,ei,Xr,r.context),Wr\u003dvoid 0}}var ni,ri\u003d{create:ti,update:ti};function ii(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a\u003dr.elm,s\u003de.data.domProps||{},c\u003dr.data.domProps||{};for(i in n(c.__ob__)\u0026\u0026(c\u003dr.data.domProps\u003dA({},c)),s)i in c||(a[i]\u003d\"\");for(i in c){if(o\u003dc[i],\"textContent\"\u003d\u003d\u003di||\"innerHTML\"\u003d\u003d\u003di){if(r.children\u0026\u0026(r.children.length\u003d0),o\u003d\u003d\u003ds[i])continue;1\u003d\u003d\u003da.childNodes.length\u0026\u0026a.removeChild(a.childNodes[0])}if(\"value\"\u003d\u003d\u003di\u0026\u0026\"PROGRESS\"!\u003d\u003da.tagName){a._value\u003do;var u\u003dt(o)?\"\":String(o);oi(a,u)\u0026\u0026(a.value\u003du)}else if(\"innerHTML\"\u003d\u003d\u003di\u0026\u0026Wn(a.tagName)\u0026\u0026t(a.innerHTML)){(ni\u003dni||document.createElement(\"div\")).innerHTML\u003d\"\u003csvg\u003e\"+o+\"\u003c/svg\u003e\";for(var l\u003dni.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!\u003d\u003ds[i])try{a[i]\u003do}catch(e){}}}}function oi(e,t){return!e.composing\u0026\u0026(\"OPTION\"\u003d\u003d\u003de.tagName||function(e,t){var n\u003d!0;try{n\u003ddocument.activeElement!\u003d\u003de}catch(e){}return n\u0026\u0026e.value!\u003d\u003dt}(e,t)||function(e,t){var r\u003de.value,i\u003de._vModifiers;if(n(i)){if(i.number)return f(r)!\u003d\u003df(t);if(i.trim)return r.trim()!\u003d\u003dt.trim()}return r!\u003d\u003dt}(e,t))}var ai\u003d{create:ii,update:ii},si\u003dg(function(e){var t\u003d{},n\u003d/:(.+)/;return e.split(/;(?![^(]*\\))/g).forEach(function(e){if(e){var r\u003de.split(n);r.length\u003e1\u0026\u0026(t[r[0].trim()]\u003dr[1].trim())}}),t});function ci(e){var t\u003dui(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ui(e){return Array.isArray(e)?O(e):\"string\"\u003d\u003dtypeof e?si(e):e}var li,fi\u003d/^--/,pi\u003d/\\s*!important$/,di\u003dfunction(e,t,n){if(fi.test(t))e.style.setProperty(t,n);else if(pi.test(n))e.style.setProperty(C(t),n.replace(pi,\"\"),\"important\");else{var r\u003dhi(t);if(Array.isArray(n))for(var i\u003d0,o\u003dn.length;i\u003co;i++)e.style[r]\u003dn[i];else e.style[r]\u003dn}},vi\u003d[\"Webkit\",\"Moz\",\"ms\"],hi\u003dg(function(e){if(li\u003dli||document.createElement(\"div\").style,\"filter\"!\u003d\u003d(e\u003db(e))\u0026\u0026e in li)return e;for(var t\u003de.charAt(0).toUpperCase()+e.slice(1),n\u003d0;n\u003cvi.length;n++){var r\u003dvi[n]+t;if(r in li)return r}});function mi(e,r){var i\u003dr.data,o\u003de.data;if(!(t(i.staticStyle)\u0026\u0026t(i.style)\u0026\u0026t(o.staticStyle)\u0026\u0026t(o.style))){var a,s,c\u003dr.elm,u\u003do.staticStyle,l\u003do.normalizedStyle||o.style||{},f\u003du||l,p\u003dui(r.data.style)||{};r.data.normalizedStyle\u003dn(p.__ob__)?A({},p):p;var d\u003dfunction(e,t){var n,r\u003d{};if(t)for(var i\u003de;i.componentInstance;)(i\u003di.componentInstance._vnode)\u0026\u0026i.data\u0026\u0026(n\u003dci(i.data))\u0026\u0026A(r,n);(n\u003dci(e.data))\u0026\u0026A(r,n);for(var o\u003de;o\u003do.parent;)o.data\u0026\u0026(n\u003dci(o.data))\u0026\u0026A(r,n);return r}(r,!0);for(s in f)t(d[s])\u0026\u0026di(c,s,\"\");for(s in d)(a\u003dd[s])!\u003d\u003df[s]\u0026\u0026di(c,s,null\u003d\u003da?\"\":a)}}var yi\u003d{create:mi,update:mi},gi\u003d/\\s+/;function _i(e,t){if(t\u0026\u0026(t\u003dt.trim()))if(e.classList)t.indexOf(\" \")\u003e-1?t.split(gi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n\u003d\" \"+(e.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+t+\" \")\u003c0\u0026\u0026e.setAttribute(\"class\",(n+t).trim())}}function bi(e,t){if(t\u0026\u0026(t\u003dt.trim()))if(e.classList)t.indexOf(\" \")\u003e-1?t.split(gi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute(\"class\");else{for(var n\u003d\" \"+(e.getAttribute(\"class\")||\"\")+\" \",r\u003d\" \"+t+\" \";n.indexOf(r)\u003e\u003d0;)n\u003dn.replace(r,\" \");(n\u003dn.trim())?e.setAttribute(\"class\",n):e.removeAttribute(\"class\")}}function $i(e){if(e){if(\"object\"\u003d\u003dtypeof e){var t\u003d{};return!1!\u003d\u003de.css\u0026\u0026A(t,wi(e.name||\"v\")),A(t,e),t}return\"string\"\u003d\u003dtypeof e?wi(e):void 0}}var wi\u003dg(function(e){return{enterClass:e+\"-enter\",enterToClass:e+\"-enter-to\",enterActiveClass:e+\"-enter-active\",leaveClass:e+\"-leave\",leaveToClass:e+\"-leave-to\",leaveActiveClass:e+\"-leave-active\"}}),Ci\u003dV\u0026\u0026!W,xi\u003d\"transition\",ki\u003d\"animation\",Ai\u003d\"transition\",Oi\u003d\"transitionend\",Si\u003d\"animation\",Ti\u003d\"animationend\";Ci\u0026\u0026(void 0\u003d\u003d\u003dwindow.ontransitionend\u0026\u0026void 0!\u003d\u003dwindow.onwebkittransitionend\u0026\u0026(Ai\u003d\"WebkitTransition\",Oi\u003d\"webkitTransitionEnd\"),void 0\u003d\u003d\u003dwindow.onanimationend\u0026\u0026void 0!\u003d\u003dwindow.onwebkitanimationend\u0026\u0026(Si\u003d\"WebkitAnimation\",Ti\u003d\"webkitAnimationEnd\"));var Ni\u003dV?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ni(function(){Ni(e)})}function ji(e,t){var n\u003de._transitionClasses||(e._transitionClasses\u003d[]);n.indexOf(t)\u003c0\u0026\u0026(n.push(t),_i(e,t))}function Di(e,t){e._transitionClasses\u0026\u0026h(e._transitionClasses,t),bi(e,t)}function Li(e,t,n){var r\u003dMi(e,t),i\u003dr.type,o\u003dr.timeout,a\u003dr.propCount;if(!i)return n();var s\u003di\u003d\u003d\u003dxi?Oi:Ti,c\u003d0,u\u003dfunction(){e.removeEventListener(s,l),n()},l\u003dfunction(t){t.target\u003d\u003d\u003de\u0026\u0026++c\u003e\u003da\u0026\u0026u()};setTimeout(function(){c\u003ca\u0026\u0026u()},o+1),e.addEventListener(s,l)}var Ii\u003d/\\b(transform|all)(,|$)/;function Mi(e,t){var n,r\u003dwindow.getComputedStyle(e),i\u003d(r[Ai+\"Delay\"]||\"\").split(\", \"),o\u003d(r[Ai+\"Duration\"]||\"\").split(\", \"),a\u003dFi(i,o),s\u003d(r[Si+\"Delay\"]||\"\").split(\", \"),c\u003d(r[Si+\"Duration\"]||\"\").split(\", \"),u\u003dFi(s,c),l\u003d0,f\u003d0;return t\u003d\u003d\u003dxi?a\u003e0\u0026\u0026(n\u003dxi,l\u003da,f\u003do.length):t\u003d\u003d\u003dki?u\u003e0\u0026\u0026(n\u003dki,l\u003du,f\u003dc.length):f\u003d(n\u003d(l\u003dMath.max(a,u))\u003e0?a\u003eu?xi:ki:null)?n\u003d\u003d\u003dxi?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n\u003d\u003d\u003dxi\u0026\u0026Ii.test(r[Ai+\"Property\"])}}function Fi(e,t){for(;e.length\u003ct.length;)e\u003de.concat(e);return Math.max.apply(null,t.map(function(t,n){return Pi(t)+Pi(e[n])}))}function Pi(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function Ri(e,r){var i\u003de.elm;n(i._leaveCb)\u0026\u0026(i._leaveCb.cancelled\u003d!0,i._leaveCb());var a\u003d$i(e.data.transition);if(!t(a)\u0026\u0026!n(i._enterCb)\u0026\u00261\u003d\u003d\u003di.nodeType){for(var s\u003da.css,c\u003da.type,u\u003da.enterClass,l\u003da.enterToClass,p\u003da.enterActiveClass,d\u003da.appearClass,v\u003da.appearToClass,h\u003da.appearActiveClass,m\u003da.beforeEnter,y\u003da.enter,g\u003da.afterEnter,_\u003da.enterCancelled,b\u003da.beforeAppear,$\u003da.appear,w\u003da.afterAppear,C\u003da.appearCancelled,x\u003da.duration,k\u003dZt,A\u003dZt.$vnode;A\u0026\u0026A.parent;)k\u003dA.context,A\u003dA.parent;var O\u003d!k._isMounted||!e.isRootInsert;if(!O||$||\"\"\u003d\u003d\u003d$){var S\u003dO\u0026\u0026d?d:u,T\u003dO\u0026\u0026h?h:p,N\u003dO\u0026\u0026v?v:l,E\u003dO\u0026\u0026b||m,j\u003dO\u0026\u0026\"function\"\u003d\u003dtypeof $?$:y,L\u003dO\u0026\u0026w||g,I\u003dO\u0026\u0026C||_,M\u003df(o(x)?x.enter:x),F\u003d!1!\u003d\u003ds\u0026\u0026!W,P\u003dUi(j),R\u003di._enterCb\u003dD(function(){F\u0026\u0026(Di(i,N),Di(i,T)),R.cancelled?(F\u0026\u0026Di(i,S),I\u0026\u0026I(i)):L\u0026\u0026L(i),i._enterCb\u003dnull});e.data.show||ot(e,\"insert\",function(){var t\u003di.parentNode,n\u003dt\u0026\u0026t._pending\u0026\u0026t._pending[e.key];n\u0026\u0026n.tag\u003d\u003d\u003de.tag\u0026\u0026n.elm._leaveCb\u0026\u0026n.elm._leaveCb(),j\u0026\u0026j(i,R)}),E\u0026\u0026E(i),F\u0026\u0026(ji(i,S),ji(i,T),Ei(function(){Di(i,S),R.cancelled||(ji(i,N),P||(Bi(M)?setTimeout(R,M):Li(i,c,R)))})),e.data.show\u0026\u0026(r\u0026\u0026r(),j\u0026\u0026j(i,R)),F||P||R()}}}function Hi(e,r){var i\u003de.elm;n(i._enterCb)\u0026\u0026(i._enterCb.cancelled\u003d!0,i._enterCb());var a\u003d$i(e.data.transition);if(t(a)||1!\u003d\u003di.nodeType)return r();if(!n(i._leaveCb)){var s\u003da.css,c\u003da.type,u\u003da.leaveClass,l\u003da.leaveToClass,p\u003da.leaveActiveClass,d\u003da.beforeLeave,v\u003da.leave,h\u003da.afterLeave,m\u003da.leaveCancelled,y\u003da.delayLeave,g\u003da.duration,_\u003d!1!\u003d\u003ds\u0026\u0026!W,b\u003dUi(v),$\u003df(o(g)?g.leave:g),w\u003di._leaveCb\u003dD(function(){i.parentNode\u0026\u0026i.parentNode._pending\u0026\u0026(i.parentNode._pending[e.key]\u003dnull),_\u0026\u0026(Di(i,l),Di(i,p)),w.cancelled?(_\u0026\u0026Di(i,u),m\u0026\u0026m(i)):(r(),h\u0026\u0026h(i)),i._leaveCb\u003dnull});y?y(C):C()}function C(){w.cancelled||(!e.data.show\u0026\u0026i.parentNode\u0026\u0026((i.parentNode._pending||(i.parentNode._pending\u003d{}))[e.key]\u003de),d\u0026\u0026d(i),_\u0026\u0026(ji(i,u),ji(i,p),Ei(function(){Di(i,u),w.cancelled||(ji(i,l),b||(Bi($)?setTimeout(w,$):Li(i,c,w)))})),v\u0026\u0026v(i,w),_||b||w())}}function Bi(e){return\"number\"\u003d\u003dtypeof e\u0026\u0026!isNaN(e)}function Ui(e){if(t(e))return!1;var r\u003de.fns;return n(r)?Ui(Array.isArray(r)?r[0]:r):(e._length||e.length)\u003e1}function Vi(e,t){!0!\u003d\u003dt.data.show\u0026\u0026Ri(t)}var zi\u003dfunction(e){var o,a,s\u003d{},c\u003de.modules,u\u003de.nodeOps;for(o\u003d0;o\u003cir.length;++o)for(s[ir[o]]\u003d[],a\u003d0;a\u003cc.length;++a)n(c[a][ir[o]])\u0026\u0026s[ir[o]].push(c[a][ir[o]]);function l(e){var t\u003du.parentNode(e);n(t)\u0026\u0026u.removeChild(t,e)}function f(e,t,i,o,a,c,l){if(n(e.elm)\u0026\u0026n(c)\u0026\u0026(e\u003dc[l]\u003dme(e)),e.isRootInsert\u003d!a,!function(e,t,i,o){var a\u003de.data;if(n(a)){var c\u003dn(e.componentInstance)\u0026\u0026a.keepAlive;if(n(a\u003da.hook)\u0026\u0026n(a\u003da.init)\u0026\u0026a(e,!1),n(e.componentInstance))return d(e,t),v(i,e.elm,o),r(c)\u0026\u0026function(e,t,r,i){for(var o,a\u003de;a.componentInstance;)if(a\u003da.componentInstance._vnode,n(o\u003da.data)\u0026\u0026n(o\u003do.transition)){for(o\u003d0;o\u003cs.activate.length;++o)s.activate[o](rr,a);t.push(a);break}v(r,e.elm,i)}(e,t,i,o),!0}}(e,t,i,o)){var f\u003de.data,p\u003de.children,m\u003de.tag;n(m)?(e.elm\u003de.ns?u.createElementNS(e.ns,m):u.createElement(m,e),g(e),h(e,p,t),n(f)\u0026\u0026y(e,t),v(i,e.elm,o)):r(e.isComment)?(e.elm\u003du.createComment(e.text),v(i,e.elm,o)):(e.elm\u003du.createTextNode(e.text),v(i,e.elm,o))}}function d(e,t){n(e.data.pendingInsert)\u0026\u0026(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert\u003dnull),e.elm\u003de.componentInstance.$el,m(e)?(y(e,t),g(e)):(nr(e),t.push(e))}function v(e,t,r){n(e)\u0026\u0026(n(r)?u.parentNode(r)\u003d\u003d\u003de\u0026\u0026u.insertBefore(e,t,r):u.appendChild(e,t))}function h(e,t,n){if(Array.isArray(t))for(var r\u003d0;r\u003ct.length;++r)f(t[r],n,e.elm,null,!0,t,r);else i(e.text)\u0026\u0026u.appendChild(e.elm,u.createTextNode(String(e.text)))}function m(e){for(;e.componentInstance;)e\u003de.componentInstance._vnode;return n(e.tag)}function y(e,t){for(var r\u003d0;r\u003cs.create.length;++r)s.create[r](rr,e);n(o\u003de.data.hook)\u0026\u0026(n(o.create)\u0026\u0026o.create(rr,e),n(o.insert)\u0026\u0026t.push(e))}function g(e){var t;if(n(t\u003de.fnScopeId))u.setStyleScope(e.elm,t);else for(var r\u003de;r;)n(t\u003dr.context)\u0026\u0026n(t\u003dt.$options._scopeId)\u0026\u0026u.setStyleScope(e.elm,t),r\u003dr.parent;n(t\u003dZt)\u0026\u0026t!\u003d\u003de.context\u0026\u0026t!\u003d\u003de.fnContext\u0026\u0026n(t\u003dt.$options._scopeId)\u0026\u0026u.setStyleScope(e.elm,t)}function _(e,t,n,r,i,o){for(;r\u003c\u003di;++r)f(n[r],o,e,t,!1,n,r)}function b(e){var t,r,i\u003de.data;if(n(i))for(n(t\u003di.hook)\u0026\u0026n(t\u003dt.destroy)\u0026\u0026t(e),t\u003d0;t\u003cs.destroy.length;++t)s.destroy[t](e);if(n(t\u003de.children))for(r\u003d0;r\u003ce.children.length;++r)b(e.children[r])}function $(e,t,r){for(;t\u003c\u003dr;++t){var i\u003de[t];n(i)\u0026\u0026(n(i.tag)?(w(i),b(i)):l(i.elm))}}function w(e,t){if(n(t)||n(e.data)){var r,i\u003ds.remove.length+1;for(n(t)?t.listeners+\u003di:t\u003dfunction(e,t){function n(){0\u003d\u003d--n.listeners\u0026\u0026l(e)}return n.listeners\u003dt,n}(e.elm,i),n(r\u003de.componentInstance)\u0026\u0026n(r\u003dr._vnode)\u0026\u0026n(r.data)\u0026\u0026w(r,t),r\u003d0;r\u003cs.remove.length;++r)s.remove[r](e,t);n(r\u003de.data.hook)\u0026\u0026n(r\u003dr.remove)?r(e,t):t()}else l(e.elm)}function C(e,t,r,i){for(var o\u003dr;o\u003ci;o++){var a\u003dt[o];if(n(a)\u0026\u0026or(e,a))return o}}function x(e,i,o,a,c,l){if(e!\u003d\u003di){n(i.elm)\u0026\u0026n(a)\u0026\u0026(i\u003da[c]\u003dme(i));var p\u003di.elm\u003de.elm;if(r(e.isAsyncPlaceholder))n(i.asyncFactory.resolved)?O(e.elm,i,o):i.isAsyncPlaceholder\u003d!0;else if(r(i.isStatic)\u0026\u0026r(e.isStatic)\u0026\u0026i.key\u003d\u003d\u003de.key\u0026\u0026(r(i.isCloned)||r(i.isOnce)))i.componentInstance\u003de.componentInstance;else{var d,v\u003di.data;n(v)\u0026\u0026n(d\u003dv.hook)\u0026\u0026n(d\u003dd.prepatch)\u0026\u0026d(e,i);var h\u003de.children,y\u003di.children;if(n(v)\u0026\u0026m(i)){for(d\u003d0;d\u003cs.update.length;++d)s.update[d](e,i);n(d\u003dv.hook)\u0026\u0026n(d\u003dd.update)\u0026\u0026d(e,i)}t(i.text)?n(h)\u0026\u0026n(y)?h!\u003d\u003dy\u0026\u0026function(e,r,i,o,a){for(var s,c,l,p\u003d0,d\u003d0,v\u003dr.length-1,h\u003dr[0],m\u003dr[v],y\u003di.length-1,g\u003di[0],b\u003di[y],w\u003d!a;p\u003c\u003dv\u0026\u0026d\u003c\u003dy;)t(h)?h\u003dr[++p]:t(m)?m\u003dr[--v]:or(h,g)?(x(h,g,o,i,d),h\u003dr[++p],g\u003di[++d]):or(m,b)?(x(m,b,o,i,y),m\u003dr[--v],b\u003di[--y]):or(h,b)?(x(h,b,o,i,y),w\u0026\u0026u.insertBefore(e,h.elm,u.nextSibling(m.elm)),h\u003dr[++p],b\u003di[--y]):or(m,g)?(x(m,g,o,i,d),w\u0026\u0026u.insertBefore(e,m.elm,h.elm),m\u003dr[--v],g\u003di[++d]):(t(s)\u0026\u0026(s\u003dar(r,p,v)),t(c\u003dn(g.key)?s[g.key]:C(g,r,p,v))?f(g,o,e,h.elm,!1,i,d):or(l\u003dr[c],g)?(x(l,g,o,i,d),r[c]\u003dvoid 0,w\u0026\u0026u.insertBefore(e,l.elm,h.elm)):f(g,o,e,h.elm,!1,i,d),g\u003di[++d]);p\u003ev?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d\u003ey\u0026\u0026$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)\u0026\u0026u.setTextContent(p,\"\"),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)\u0026\u0026u.setTextContent(p,\"\"):e.text!\u003d\u003di.text\u0026\u0026u.setTextContent(p,i.text),n(v)\u0026\u0026n(d\u003dv.hook)\u0026\u0026n(d\u003dd.postpatch)\u0026\u0026d(e,i)}}}function k(e,t,i){if(r(i)\u0026\u0026n(e.parent))e.parent.data.pendingInsert\u003dt;else for(var o\u003d0;o\u003ct.length;++o)t[o].data.hook.insert(t[o])}var A\u003dp(\"attrs,class,staticClass,staticStyle,key\");function O(e,t,i,o){var a,s\u003dt.tag,c\u003dt.data,u\u003dt.children;if(o\u003do||c\u0026\u0026c.pre,t.elm\u003de,r(t.isComment)\u0026\u0026n(t.asyncFactory))return t.isAsyncPlaceholder\u003d!0,!0;if(n(c)\u0026\u0026(n(a\u003dc.hook)\u0026\u0026n(a\u003da.init)\u0026\u0026a(t,!0),n(a\u003dt.componentInstance)))return d(t,i),!0;if(n(s)){if(n(u))if(e.hasChildNodes())if(n(a\u003dc)\u0026\u0026n(a\u003da.domProps)\u0026\u0026n(a\u003da.innerHTML)){if(a!\u003d\u003de.innerHTML)return!1}else{for(var l\u003d!0,f\u003de.firstChild,p\u003d0;p\u003cu.length;p++){if(!f||!O(f,u[p],i,o)){l\u003d!1;break}f\u003df.nextSibling}if(!l||f)return!1}else h(t,u,i);if(n(c)){var v\u003d!1;for(var m in c)if(!A(m)){v\u003d!0,y(t,i);break}!v\u0026\u0026c.class\u0026\u0026tt(c.class)}}else e.data!\u003d\u003dt.text\u0026\u0026(e.data\u003dt.text);return!0}return function(e,i,o,a){if(!t(i)){var c,l\u003d!1,p\u003d[];if(t(e))l\u003d!0,f(i,p);else{var d\u003dn(e.nodeType);if(!d\u0026\u0026or(e,i))x(e,i,p,null,null,a);else{if(d){if(1\u003d\u003d\u003de.nodeType\u0026\u0026e.hasAttribute(L)\u0026\u0026(e.removeAttribute(L),o\u003d!0),r(o)\u0026\u0026O(e,i,p))return k(i,p,!0),e;c\u003de,e\u003dnew pe(u.tagName(c).toLowerCase(),{},[],void 0,c)}var v\u003de.elm,h\u003du.parentNode(v);if(f(i,p,v._leaveCb?null:h,u.nextSibling(v)),n(i.parent))for(var y\u003di.parent,g\u003dm(i);y;){for(var _\u003d0;_\u003cs.destroy.length;++_)s.destroy[_](y);if(y.elm\u003di.elm,g){for(var w\u003d0;w\u003cs.create.length;++w)s.create[w](rr,y);var C\u003dy.data.hook.insert;if(C.merged)for(var A\u003d1;A\u003cC.fns.length;A++)C.fns[A]()}else nr(y);y\u003dy.parent}n(h)?$([e],0,0):n(e.tag)\u0026\u0026b(e)}}return k(i,p,l),i.elm}n(e)\u0026\u0026b(e)}}({nodeOps:er,modules:[yr,kr,ri,ai,yi,V?{create:Vi,activate:Vi,remove:function(e,t){!0!\u003d\u003de.data.show?Hi(e,t):t()}}:{}].concat(dr)});W\u0026\u0026document.addEventListener(\"selectionchange\",function(){var e\u003ddocument.activeElement;e\u0026\u0026e.vmodel\u0026\u0026Yi(e,\"input\")});var Ki\u003d{inserted:function(e,t,n,r){\"select\"\u003d\u003d\u003dn.tag?(r.elm\u0026\u0026!r.elm._vOptions?ot(n,\"postpatch\",function(){Ki.componentUpdated(e,t,n)}):Ji(e,t,n.context),e._vOptions\u003d[].map.call(e.options,Zi)):(\"textarea\"\u003d\u003d\u003dn.tag||Yn(e.type))\u0026\u0026(e._vModifiers\u003dt.modifiers,t.modifiers.lazy||(e.addEventListener(\"compositionstart\",Gi),e.addEventListener(\"compositionend\",Xi),e.addEventListener(\"change\",Xi),W\u0026\u0026(e.vmodel\u003d!0)))},componentUpdated:function(e,t,n){if(\"select\"\u003d\u003d\u003dn.tag){Ji(e,t,n.context);var r\u003de._vOptions,i\u003de._vOptions\u003d[].map.call(e.options,Zi);if(i.some(function(e,t){return!E(e,r[t])}))(e.multiple?t.value.some(function(e){return Wi(e,i)}):t.value!\u003d\u003dt.oldValue\u0026\u0026Wi(t.value,i))\u0026\u0026Yi(e,\"change\")}}};function Ji(e,t,n){qi(e,t,n),(q||Z)\u0026\u0026setTimeout(function(){qi(e,t,n)},0)}function qi(e,t,n){var r\u003dt.value,i\u003de.multiple;if(!i||Array.isArray(r)){for(var o,a,s\u003d0,c\u003de.options.length;s\u003cc;s++)if(a\u003de.options[s],i)o\u003dj(r,Zi(a))\u003e-1,a.selected!\u003d\u003do\u0026\u0026(a.selected\u003do);else if(E(Zi(a),r))return void(e.selectedIndex!\u003d\u003ds\u0026\u0026(e.selectedIndex\u003ds));i||(e.selectedIndex\u003d-1)}}function Wi(e,t){return t.every(function(t){return!E(t,e)})}function Zi(e){return\"_value\"in e?e._value:e.value}function Gi(e){e.target.composing\u003d!0}function Xi(e){e.target.composing\u0026\u0026(e.target.composing\u003d!1,Yi(e.target,\"input\"))}function Yi(e,t){var n\u003ddocument.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Qi(e){return!e.componentInstance||e.data\u0026\u0026e.data.transition?e:Qi(e.componentInstance._vnode)}var eo\u003d{model:Ki,show:{bind:function(e,t,n){var r\u003dt.value,i\u003d(n\u003dQi(n)).data\u0026\u0026n.data.transition,o\u003de.__vOriginalDisplay\u003d\"none\"\u003d\u003d\u003de.style.display?\"\":e.style.display;r\u0026\u0026i?(n.data.show\u003d!0,Ri(n,function(){e.style.display\u003do})):e.style.display\u003dr?o:\"none\"},update:function(e,t,n){var r\u003dt.value;!r!\u003d!t.oldValue\u0026\u0026((n\u003dQi(n)).data\u0026\u0026n.data.transition?(n.data.show\u003d!0,r?Ri(n,function(){e.style.display\u003de.__vOriginalDisplay}):Hi(n,function(){e.style.display\u003d\"none\"})):e.style.display\u003dr?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,r,i){i||(e.style.display\u003de.__vOriginalDisplay)}}},to\u003d{name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function no(e){var t\u003de\u0026\u0026e.componentOptions;return t\u0026\u0026t.Ctor.options.abstract?no(zt(t.children)):e}function ro(e){var t\u003d{},n\u003de.$options;for(var r in n.propsData)t[r]\u003de[r];var i\u003dn._parentListeners;for(var o in i)t[b(o)]\u003di[o];return t}function io(e,t){if(/\\d-keep-alive$/.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}var oo\u003dfunction(e){return e.tag||pt(e)},ao\u003dfunction(e){return\"show\"\u003d\u003d\u003de.name},so\u003d{name:\"transition\",props:to,abstract:!0,render:function(e){var t\u003dthis,n\u003dthis.$slots.default;if(n\u0026\u0026(n\u003dn.filter(oo)).length){var r\u003dthis.mode,o\u003dn[0];if(function(e){for(;e\u003de.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a\u003dno(o);if(!a)return o;if(this._leaving)return io(e,o);var s\u003d\"__transition-\"+this._uid+\"-\";a.key\u003dnull\u003d\u003da.key?a.isComment?s+\"comment\":s+a.tag:i(a.key)?0\u003d\u003d\u003dString(a.key).indexOf(s)?a.key:s+a.key:a.key;var c\u003d(a.data||(a.data\u003d{})).transition\u003dro(this),u\u003dthis._vnode,l\u003dno(u);if(a.data.directives\u0026\u0026a.data.directives.some(ao)\u0026\u0026(a.data.show\u003d!0),l\u0026\u0026l.data\u0026\u0026!function(e,t){return t.key\u003d\u003d\u003de.key\u0026\u0026t.tag\u003d\u003d\u003de.tag}(a,l)\u0026\u0026!pt(l)\u0026\u0026(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f\u003dl.data.transition\u003dA({},c);if(\"out-in\"\u003d\u003d\u003dr)return this._leaving\u003d!0,ot(f,\"afterLeave\",function(){t._leaving\u003d!1,t.$forceUpdate()}),io(e,o);if(\"in-out\"\u003d\u003d\u003dr){if(pt(a))return u;var p,d\u003dfunction(){p()};ot(c,\"afterEnter\",d),ot(c,\"enterCancelled\",d),ot(f,\"delayLeave\",function(e){p\u003de})}}return o}}},co\u003dA({tag:String,moveClass:String},to);function uo(e){e.elm._moveCb\u0026\u0026e.elm._moveCb(),e.elm._enterCb\u0026\u0026e.elm._enterCb()}function lo(e){e.data.newPos\u003de.elm.getBoundingClientRect()}function fo(e){var t\u003de.data.pos,n\u003de.data.newPos,r\u003dt.left-n.left,i\u003dt.top-n.top;if(r||i){e.data.moved\u003d!0;var o\u003de.elm.style;o.transform\u003do.WebkitTransform\u003d\"translate(\"+r+\"px,\"+i+\"px)\",o.transitionDuration\u003d\"0s\"}}delete co.mode;var po\u003d{Transition:so,TransitionGroup:{props:co,beforeMount:function(){var e\u003dthis,t\u003dthis._update;this._update\u003dfunction(n,r){var i\u003dGt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode\u003de.kept,i(),t.call(e,n,r)}},render:function(e){for(var t\u003dthis.tag||this.$vnode.data.tag||\"span\",n\u003dObject.create(null),r\u003dthis.prevChildren\u003dthis.children,i\u003dthis.$slots.default||[],o\u003dthis.children\u003d[],a\u003dro(this),s\u003d0;s\u003ci.length;s++){var c\u003di[s];c.tag\u0026\u0026null!\u003dc.key\u0026\u00260!\u003d\u003dString(c.key).indexOf(\"__vlist\")\u0026\u0026(o.push(c),n[c.key]\u003dc,(c.data||(c.data\u003d{})).transition\u003da)}if(r){for(var u\u003d[],l\u003d[],f\u003d0;f\u003cr.length;f++){var p\u003dr[f];p.data.transition\u003da,p.data.pos\u003dp.elm.getBoundingClientRect(),n[p.key]?u.push(p):l.push(p)}this.kept\u003de(t,null,u),this.removed\u003dl}return e(t,null,o)},updated:function(){var e\u003dthis.prevChildren,t\u003dthis.moveClass||(this.name||\"v\")+\"-move\";e.length\u0026\u0026this.hasMove(e[0].elm,t)\u0026\u0026(e.forEach(uo),e.forEach(lo),e.forEach(fo),this._reflow\u003ddocument.body.offsetHeight,e.forEach(function(e){if(e.data.moved){var n\u003de.elm,r\u003dn.style;ji(n,t),r.transform\u003dr.WebkitTransform\u003dr.transitionDuration\u003d\"\",n.addEventListener(Oi,n._moveCb\u003dfunction e(r){r\u0026\u0026r.target!\u003d\u003dn||r\u0026\u0026!/transform$/.test(r.propertyName)||(n.removeEventListener(Oi,e),n._moveCb\u003dnull,Di(n,t))})}}))},methods:{hasMove:function(e,t){if(!Ci)return!1;if(this._hasMove)return this._hasMove;var n\u003de.cloneNode();e._transitionClasses\u0026\u0026e._transitionClasses.forEach(function(e){bi(n,e)}),_i(n,t),n.style.display\u003d\"none\",this.$el.appendChild(n);var r\u003dMi(n);return this.$el.removeChild(n),this._hasMove\u003dr.hasTransform}}}};Cn.config.mustUseProp\u003dDn,Cn.config.isReservedTag\u003dZn,Cn.config.isReservedAttr\u003dEn,Cn.config.getTagNamespace\u003dGn,Cn.config.isUnknownElement\u003dfunction(e){if(!V)return!0;if(Zn(e))return!1;if(e\u003de.toLowerCase(),null!\u003dXn[e])return Xn[e];var t\u003ddocument.createElement(e);return e.indexOf(\"-\")\u003e-1?Xn[e]\u003dt.constructor\u003d\u003d\u003dwindow.HTMLUnknownElement||t.constructor\u003d\u003d\u003dwindow.HTMLElement:Xn[e]\u003d/HTMLUnknownElement/.test(t.toString())},A(Cn.options.directives,eo),A(Cn.options.components,po),Cn.prototype.__patch__\u003dV?zi:S,Cn.prototype.$mount\u003dfunction(e,t){return function(e,t,n){var r;return e.$el\u003dt,e.$options.render||(e.$options.render\u003dve),Qt(e,\"beforeMount\"),r\u003dfunction(){e._update(e._render(),n)},new pn(e,r,S,{before:function(){e._isMounted\u0026\u0026!e._isDestroyed\u0026\u0026Qt(e,\"beforeUpdate\")}},!0),n\u003d!1,null\u003d\u003de.$vnode\u0026\u0026(e._isMounted\u003d!0,Qt(e,\"mounted\")),e}(this,e\u003de\u0026\u0026V?Qn(e):void 0,t)},V\u0026\u0026setTimeout(function(){F.devtools\u0026\u0026ne\u0026\u0026ne.emit(\"init\",Cn)},0);var vo\u003d/\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,ho\u003d/[-.*+?^${}()|[\\]\\/\\\\]/g,mo\u003dg(function(e){var t\u003de[0].replace(ho,\"\\\\$\u0026\"),n\u003de[1].replace(ho,\"\\\\$\u0026\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+n,\"g\")});var yo\u003d{staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;var n\u003dPr(e,\"class\");n\u0026\u0026(e.staticClass\u003dJSON.stringify(n));var r\u003dFr(e,\"class\",!1);r\u0026\u0026(e.classBinding\u003dr)},genData:function(e){var t\u003d\"\";return e.staticClass\u0026\u0026(t+\u003d\"staticClass:\"+e.staticClass+\",\"),e.classBinding\u0026\u0026(t+\u003d\"class:\"+e.classBinding+\",\"),t}};var go,_o\u003d{staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;var n\u003dPr(e,\"style\");n\u0026\u0026(e.staticStyle\u003dJSON.stringify(si(n)));var r\u003dFr(e,\"style\",!1);r\u0026\u0026(e.styleBinding\u003dr)},genData:function(e){var t\u003d\"\";return e.staticStyle\u0026\u0026(t+\u003d\"staticStyle:\"+e.staticStyle+\",\"),e.styleBinding\u0026\u0026(t+\u003d\"style:(\"+e.styleBinding+\"),\"),t}},bo\u003dfunction(e){return(go\u003dgo||document.createElement(\"div\")).innerHTML\u003de,go.textContent},$o\u003dp(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),wo\u003dp(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),Co\u003dp(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),xo\u003d/^\\s*([^\\s\"\u0027\u003c\u003e\\/\u003d]+)(?:\\s*(\u003d)\\s*(?:\"([^\"]*)\"+|\u0027([^\u0027]*)\u0027+|([^\\s\"\u0027\u003d\u003c\u003e`]+)))?/,ko\u003d/^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^\u003d]+?\\][^\\s\"\u0027\u003c\u003e\\/\u003d]*)(?:\\s*(\u003d)\\s*(?:\"([^\"]*)\"+|\u0027([^\u0027]*)\u0027+|([^\\s\"\u0027\u003d\u003c\u003e`]+)))?/,Ao\u003d\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\"+P.source+\"]*\",Oo\u003d\"((?:\"+Ao+\"\\\\:)?\"+Ao+\")\",So\u003dnew RegExp(\"^\u003c\"+Oo),To\u003d/^\\s*(\\/?)\u003e/,No\u003dnew RegExp(\"^\u003c\\\\/\"+Oo+\"[^\u003e]*\u003e\"),Eo\u003d/^\u003c!DOCTYPE [^\u003e]+\u003e/i,jo\u003d/^\u003c!\\--/,Do\u003d/^\u003c!\\[/,Lo\u003dp(\"script,style,textarea\",!0),Io\u003d{},Mo\u003d{\"\u0026lt;\":\"\u003c\",\"\u0026gt;\":\"\u003e\",\"\u0026quot;\":\u0027\"\u0027,\"\u0026amp;\":\"\u0026\",\"\u0026#10;\":\"\\n\",\"\u0026#9;\":\"\\t\",\"\u0026#39;\":\"\u0027\"},Fo\u003d/\u0026(?:lt|gt|quot|amp|#39);/g,Po\u003d/\u0026(?:lt|gt|quot|amp|#39|#10|#9);/g,Ro\u003dp(\"pre,textarea\",!0),Ho\u003dfunction(e,t){return e\u0026\u0026Ro(e)\u0026\u0026\"\\n\"\u003d\u003d\u003dt[0]};function Bo(e,t){var n\u003dt?Po:Fo;return e.replace(n,function(e){return Mo[e]})}var Uo,Vo,zo,Ko,Jo,qo,Wo,Zo,Go\u003d/^@|^v-on:/,Xo\u003d/^v-|^@|^:|^#/,Yo\u003d/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,Qo\u003d/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,ea\u003d/^\\(|\\)$/g,ta\u003d/^\\[.*\\]$/,na\u003d/:(.*)$/,ra\u003d/^:|^\\.|^v-bind:/,ia\u003d/\\.[^.\\]]+(?\u003d[^\\]]*$)/g,oa\u003d/^v-slot(:|$)|^#/,aa\u003d/[\\r\\n]/,sa\u003d/[ \\f\\t\\r\\n]+/g,ca\u003dg(bo),ua\u003d\"_empty_\";function la(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ya(t),rawAttrsMap:{},parent:n,children:[]}}function fa(e,t){Uo\u003dt.warn||Tr,qo\u003dt.isPreTag||T,Wo\u003dt.mustUseProp||T,Zo\u003dt.getTagNamespace||T;t.isReservedTag;zo\u003dNr(t.modules,\"transformNode\"),Ko\u003dNr(t.modules,\"preTransformNode\"),Jo\u003dNr(t.modules,\"postTransformNode\"),Vo\u003dt.delimiters;var n,r,i\u003d[],o\u003d!1!\u003d\u003dt.preserveWhitespace,a\u003dt.whitespace,s\u003d!1,c\u003d!1;function u(e){if(l(e),s||e.processed||(e\u003dpa(e,t)),i.length||e\u003d\u003d\u003dn||n.if\u0026\u0026(e.elseif||e.else)\u0026\u0026va(n,{exp:e.elseif,block:e}),r\u0026\u0026!e.forbidden)if(e.elseif||e.else)a\u003de,(u\u003dfunction(e){var t\u003de.length;for(;t--;){if(1\u003d\u003d\u003de[t].type)return e[t];e.pop()}}(r.children))\u0026\u0026u.if\u0026\u0026va(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o\u003de.slotTarget||\u0027\"default\"\u0027;(r.scopedSlots||(r.scopedSlots\u003d{}))[o]\u003de}r.children.push(e),e.parent\u003dr}var a,u;e.children\u003de.children.filter(function(e){return!e.slotScope}),l(e),e.pre\u0026\u0026(s\u003d!1),qo(e.tag)\u0026\u0026(c\u003d!1);for(var f\u003d0;f\u003cJo.length;f++)Jo[f](e,t)}function l(e){if(!c)for(var t;(t\u003de.children[e.children.length-1])\u0026\u00263\u003d\u003d\u003dt.type\u0026\u0026\" \"\u003d\u003d\u003dt.text;)e.children.pop()}return function(e,t){for(var n,r,i\u003d[],o\u003dt.expectHTML,a\u003dt.isUnaryTag||T,s\u003dt.canBeLeftOpenTag||T,c\u003d0;e;){if(n\u003de,r\u0026\u0026Lo(r)){var u\u003d0,l\u003dr.toLowerCase(),f\u003dIo[l]||(Io[l]\u003dnew RegExp(\"([\\\\s\\\\S]*?)(\u003c/\"+l+\"[^\u003e]*\u003e)\",\"i\")),p\u003de.replace(f,function(e,n,r){return u\u003dr.length,Lo(l)||\"noscript\"\u003d\u003d\u003dl||(n\u003dn.replace(/\u003c!\\--([\\s\\S]*?)--\u003e/g,\"$1\").replace(/\u003c!\\[CDATA\\[([\\s\\S]*?)]]\u003e/g,\"$1\")),Ho(l,n)\u0026\u0026(n\u003dn.slice(1)),t.chars\u0026\u0026t.chars(n),\"\"});c+\u003de.length-p.length,e\u003dp,A(l,c-u,c)}else{var d\u003de.indexOf(\"\u003c\");if(0\u003d\u003d\u003dd){if(jo.test(e)){var v\u003de.indexOf(\"--\\x3e\");if(v\u003e\u003d0){t.shouldKeepComment\u0026\u0026t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(Do.test(e)){var h\u003de.indexOf(\"]\u003e\");if(h\u003e\u003d0){C(h+2);continue}}var m\u003de.match(Eo);if(m){C(m[0].length);continue}var y\u003de.match(No);if(y){var g\u003dc;C(y[0].length),A(y[1],g,c);continue}var _\u003dx();if(_){k(_),Ho(_.tagName,e)\u0026\u0026C(1);continue}}var b\u003dvoid 0,$\u003dvoid 0,w\u003dvoid 0;if(d\u003e\u003d0){for($\u003de.slice(d);!(No.test($)||So.test($)||jo.test($)||Do.test($)||(w\u003d$.indexOf(\"\u003c\",1))\u003c0);)d+\u003dw,$\u003de.slice(d);b\u003de.substring(0,d)}d\u003c0\u0026\u0026(b\u003de),b\u0026\u0026C(b.length),t.chars\u0026\u0026b\u0026\u0026t.chars(b,c-b.length,c)}if(e\u003d\u003d\u003dn){t.chars\u0026\u0026t.chars(e);break}}function C(t){c+\u003dt,e\u003de.substring(t)}function x(){var t\u003de.match(So);if(t){var n,r,i\u003d{tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n\u003de.match(To))\u0026\u0026(r\u003de.match(ko)||e.match(xo));)r.start\u003dc,C(r[0].length),r.end\u003dc,i.attrs.push(r);if(n)return i.unarySlash\u003dn[1],C(n[0].length),i.end\u003dc,i}}function k(e){var n\u003de.tagName,c\u003de.unarySlash;o\u0026\u0026(\"p\"\u003d\u003d\u003dr\u0026\u0026Co(n)\u0026\u0026A(r),s(n)\u0026\u0026r\u003d\u003d\u003dn\u0026\u0026A(n));for(var u\u003da(n)||!!c,l\u003de.attrs.length,f\u003dnew Array(l),p\u003d0;p\u003cl;p++){var d\u003de.attrs[p],v\u003dd[3]||d[4]||d[5]||\"\",h\u003d\"a\"\u003d\u003d\u003dn\u0026\u0026\"href\"\u003d\u003d\u003dd[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;f[p]\u003d{name:d[1],value:Bo(v,h)}}u||(i.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:f,start:e.start,end:e.end}),r\u003dn),t.start\u0026\u0026t.start(n,f,u,e.start,e.end)}function A(e,n,o){var a,s;if(null\u003d\u003dn\u0026\u0026(n\u003dc),null\u003d\u003do\u0026\u0026(o\u003dc),e)for(s\u003de.toLowerCase(),a\u003di.length-1;a\u003e\u003d0\u0026\u0026i[a].lowerCasedTag!\u003d\u003ds;a--);else a\u003d0;if(a\u003e\u003d0){for(var u\u003di.length-1;u\u003e\u003da;u--)t.end\u0026\u0026t.end(i[u].tag,n,o);i.length\u003da,r\u003da\u0026\u0026i[a-1].tag}else\"br\"\u003d\u003d\u003ds?t.start\u0026\u0026t.start(e,[],!0,n,o):\"p\"\u003d\u003d\u003ds\u0026\u0026(t.start\u0026\u0026t.start(e,[],!1,n,o),t.end\u0026\u0026t.end(e,n,o))}A()}(e,{warn:Uo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p\u003dr\u0026\u0026r.ns||Zo(e);q\u0026\u0026\"svg\"\u003d\u003d\u003dp\u0026\u0026(o\u003dfunction(e){for(var t\u003d[],n\u003d0;n\u003ce.length;n++){var r\u003de[n];ga.test(r.name)||(r.name\u003dr.name.replace(_a,\"\"),t.push(r))}return t}(o));var d,v\u003dla(e,o,r);p\u0026\u0026(v.ns\u003dp),\"style\"!\u003d\u003d(d\u003dv).tag\u0026\u0026(\"script\"!\u003d\u003dd.tag||d.attrsMap.type\u0026\u0026\"text/javascript\"!\u003d\u003dd.attrsMap.type)||te()||(v.forbidden\u003d!0);for(var h\u003d0;h\u003cKo.length;h++)v\u003dKo[h](v,t)||v;s||(!function(e){null!\u003dPr(e,\"v-pre\")\u0026\u0026(e.pre\u003d!0)}(v),v.pre\u0026\u0026(s\u003d!0)),qo(v.tag)\u0026\u0026(c\u003d!0),s?function(e){var t\u003de.attrsList,n\u003dt.length;if(n)for(var r\u003de.attrs\u003dnew Array(n),i\u003d0;i\u003cn;i++)r[i]\u003d{name:t[i].name,value:JSON.stringify(t[i].value)},null!\u003dt[i].start\u0026\u0026(r[i].start\u003dt[i].start,r[i].end\u003dt[i].end);else e.pre||(e.plain\u003d!0)}(v):v.processed||(da(v),function(e){var t\u003dPr(e,\"v-if\");if(t)e.if\u003dt,va(e,{exp:t,block:e});else{null!\u003dPr(e,\"v-else\")\u0026\u0026(e.else\u003d!0);var n\u003dPr(e,\"v-else-if\");n\u0026\u0026(e.elseif\u003dn)}}(v),function(e){null!\u003dPr(e,\"v-once\")\u0026\u0026(e.once\u003d!0)}(v)),n||(n\u003dv),a?u(v):(r\u003dv,i.push(v))},end:function(e,t,n){var o\u003di[i.length-1];i.length-\u003d1,r\u003di[i.length-1],u(o)},chars:function(e,t,n){if(r\u0026\u0026(!q||\"textarea\"!\u003d\u003dr.tag||r.attrsMap.placeholder!\u003d\u003de)){var i,u,l,f\u003dr.children;if(e\u003dc||e.trim()?\"script\"\u003d\u003d\u003d(i\u003dr).tag||\"style\"\u003d\u003d\u003di.tag?e:ca(e):f.length?a?\"condense\"\u003d\u003d\u003da\u0026\u0026aa.test(e)?\"\":\" \":o?\" \":\"\":\"\")c||\"condense\"!\u003d\u003da||(e\u003de.replace(sa,\" \")),!s\u0026\u0026\" \"!\u003d\u003de\u0026\u0026(u\u003dfunction(e,t){var n\u003dt?mo(t):vo;if(n.test(e)){for(var r,i,o,a\u003d[],s\u003d[],c\u003dn.lastIndex\u003d0;r\u003dn.exec(e);){(i\u003dr.index)\u003ec\u0026\u0026(s.push(o\u003de.slice(c,i)),a.push(JSON.stringify(o)));var u\u003dOr(r[1].trim());a.push(\"_s(\"+u+\")\"),s.push({\"@binding\":u}),c\u003di+r[0].length}return c\u003ce.length\u0026\u0026(s.push(o\u003de.slice(c)),a.push(JSON.stringify(o))),{expression:a.join(\"+\"),tokens:s}}}(e,Vo))?l\u003d{type:2,expression:u.expression,tokens:u.tokens,text:e}:\" \"\u003d\u003d\u003de\u0026\u0026f.length\u0026\u0026\" \"\u003d\u003d\u003df[f.length-1].text||(l\u003d{type:3,text:e}),l\u0026\u0026f.push(l)}},comment:function(e,t,n){if(r){var i\u003d{type:3,text:e,isComment:!0};r.children.push(i)}}}),n}function pa(e,t){var n,r;(r\u003dFr(n\u003de,\"key\"))\u0026\u0026(n.key\u003dr),e.plain\u003d!e.key\u0026\u0026!e.scopedSlots\u0026\u0026!e.attrsList.length,function(e){var t\u003dFr(e,\"ref\");t\u0026\u0026(e.ref\u003dt,e.refInFor\u003dfunction(e){var t\u003de;for(;t;){if(void 0!\u003d\u003dt.for)return!0;t\u003dt.parent}return!1}(e))}(e),function(e){var t;\"template\"\u003d\u003d\u003de.tag?(t\u003dPr(e,\"scope\"),e.slotScope\u003dt||Pr(e,\"slot-scope\")):(t\u003dPr(e,\"slot-scope\"))\u0026\u0026(e.slotScope\u003dt);var n\u003dFr(e,\"slot\");n\u0026\u0026(e.slotTarget\u003d\u0027\"\"\u0027\u003d\u003d\u003dn?\u0027\"default\"\u0027:n,e.slotTargetDynamic\u003d!(!e.attrsMap[\":slot\"]\u0026\u0026!e.attrsMap[\"v-bind:slot\"]),\"template\"\u003d\u003d\u003de.tag||e.slotScope||jr(e,\"slot\",n,function(e,t){return e.rawAttrsMap[\":\"+t]||e.rawAttrsMap[\"v-bind:\"+t]||e.rawAttrsMap[t]}(e,\"slot\")));if(\"template\"\u003d\u003d\u003de.tag){var r\u003dRr(e,oa);if(r){var i\u003dha(r),o\u003di.name,a\u003di.dynamic;e.slotTarget\u003do,e.slotTargetDynamic\u003da,e.slotScope\u003dr.value||ua}}else{var s\u003dRr(e,oa);if(s){var c\u003de.scopedSlots||(e.scopedSlots\u003d{}),u\u003dha(s),l\u003du.name,f\u003du.dynamic,p\u003dc[l]\u003dla(\"template\",[],e);p.slotTarget\u003dl,p.slotTargetDynamic\u003df,p.children\u003de.children.filter(function(e){if(!e.slotScope)return e.parent\u003dp,!0}),p.slotScope\u003ds.value||ua,e.children\u003d[],e.plain\u003d!1}}}(e),function(e){\"slot\"\u003d\u003d\u003de.tag\u0026\u0026(e.slotName\u003dFr(e,\"name\"))}(e),function(e){var t;(t\u003dFr(e,\"is\"))\u0026\u0026(e.component\u003dt);null!\u003dPr(e,\"inline-template\")\u0026\u0026(e.inlineTemplate\u003d!0)}(e);for(var i\u003d0;i\u003czo.length;i++)e\u003dzo[i](e,t)||e;return function(e){var t,n,r,i,o,a,s,c,u\u003de.attrsList;for(t\u003d0,n\u003du.length;t\u003cn;t++)if(r\u003di\u003du[t].name,o\u003du[t].value,Xo.test(r))if(e.hasBindings\u003d!0,(a\u003dma(r.replace(Xo,\"\")))\u0026\u0026(r\u003dr.replace(ia,\"\")),ra.test(r))r\u003dr.replace(ra,\"\"),o\u003dOr(o),(c\u003dta.test(r))\u0026\u0026(r\u003dr.slice(1,-1)),a\u0026\u0026(a.prop\u0026\u0026!c\u0026\u0026\"innerHtml\"\u003d\u003d\u003d(r\u003db(r))\u0026\u0026(r\u003d\"innerHTML\"),a.camel\u0026\u0026!c\u0026\u0026(r\u003db(r)),a.sync\u0026\u0026(s\u003dUr(o,\"$event\"),c?Mr(e,\u0027\"update:\"+(\u0027+r+\")\",s,null,!1,0,u[t],!0):(Mr(e,\"update:\"+b(r),s,null,!1,0,u[t]),C(r)!\u003d\u003db(r)\u0026\u0026Mr(e,\"update:\"+C(r),s,null,!1,0,u[t])))),a\u0026\u0026a.prop||!e.component\u0026\u0026Wo(e.tag,e.attrsMap.type,r)?Er(e,r,o,u[t],c):jr(e,r,o,u[t],c);else if(Go.test(r))r\u003dr.replace(Go,\"\"),(c\u003dta.test(r))\u0026\u0026(r\u003dr.slice(1,-1)),Mr(e,r,o,a,!1,0,u[t],c);else{var l\u003d(r\u003dr.replace(Xo,\"\")).match(na),f\u003dl\u0026\u0026l[1];c\u003d!1,f\u0026\u0026(r\u003dr.slice(0,-(f.length+1)),ta.test(f)\u0026\u0026(f\u003df.slice(1,-1),c\u003d!0)),Lr(e,r,i,o,f,c,a,u[t])}else jr(e,r,JSON.stringify(o),u[t]),!e.component\u0026\u0026\"muted\"\u003d\u003d\u003dr\u0026\u0026Wo(e.tag,e.attrsMap.type,r)\u0026\u0026Er(e,r,\"true\",u[t])}(e),e}function da(e){var t;if(t\u003dPr(e,\"v-for\")){var n\u003dfunction(e){var t\u003de.match(Yo);if(!t)return;var n\u003d{};n.for\u003dt[2].trim();var r\u003dt[1].trim().replace(ea,\"\"),i\u003dr.match(Qo);i?(n.alias\u003dr.replace(Qo,\"\").trim(),n.iterator1\u003di[1].trim(),i[2]\u0026\u0026(n.iterator2\u003di[2].trim())):n.alias\u003dr;return n}(t);n\u0026\u0026A(e,n)}}function va(e,t){e.ifConditions||(e.ifConditions\u003d[]),e.ifConditions.push(t)}function ha(e){var t\u003de.name.replace(oa,\"\");return t||\"#\"!\u003d\u003de.name[0]\u0026\u0026(t\u003d\"default\"),ta.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:\u0027\"\u0027+t+\u0027\"\u0027,dynamic:!1}}function ma(e){var t\u003de.match(ia);if(t){var n\u003d{};return t.forEach(function(e){n[e.slice(1)]\u003d!0}),n}}function ya(e){for(var t\u003d{},n\u003d0,r\u003de.length;n\u003cr;n++)t[e[n].name]\u003de[n].value;return t}var ga\u003d/^xmlns:NS\\d+/,_a\u003d/^NS\\d+:/;function ba(e){return la(e.tag,e.attrsList.slice(),e.parent)}var $a\u003d[yo,_o,{preTransformNode:function(e,t){if(\"input\"\u003d\u003d\u003de.tag){var n,r\u003de.attrsMap;if(!r[\"v-model\"])return;if((r[\":type\"]||r[\"v-bind:type\"])\u0026\u0026(n\u003dFr(e,\"type\")),r.type||n||!r[\"v-bind\"]||(n\u003d\"(\"+r[\"v-bind\"]+\").type\"),n){var i\u003dPr(e,\"v-if\",!0),o\u003di?\"\u0026\u0026(\"+i+\")\":\"\",a\u003dnull!\u003dPr(e,\"v-else\",!0),s\u003dPr(e,\"v-else-if\",!0),c\u003dba(e);da(c),Dr(c,\"type\",\"checkbox\"),pa(c,t),c.processed\u003d!0,c.if\u003d\"(\"+n+\")\u003d\u003d\u003d\u0027checkbox\u0027\"+o,va(c,{exp:c.if,block:c});var u\u003dba(e);Pr(u,\"v-for\",!0),Dr(u,\"type\",\"radio\"),pa(u,t),va(c,{exp:\"(\"+n+\")\u003d\u003d\u003d\u0027radio\u0027\"+o,block:u});var l\u003dba(e);return Pr(l,\"v-for\",!0),Dr(l,\":type\",n),pa(l,t),va(c,{exp:i,block:l}),a?c.else\u003d!0:s\u0026\u0026(c.elseif\u003ds),c}}}}];var wa,Ca,xa\u003d{expectHTML:!0,modules:$a,directives:{model:function(e,t,n){var r\u003dt.value,i\u003dt.modifiers,o\u003de.tag,a\u003de.attrsMap.type;if(e.component)return Br(e,r,i),!1;if(\"select\"\u003d\u003d\u003do)!function(e,t,n){var r\u003d\u0027var $$selectedVal \u003d Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val \u003d \"_value\" in o ? o._value : o.value;return \u0027+(n\u0026\u0026n.number?\"_n(val)\":\"val\")+\"});\";r\u003dr+\" \"+Ur(t,\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),Mr(e,\"change\",r,null,!0)}(e,r,i);else if(\"input\"\u003d\u003d\u003do\u0026\u0026\"checkbox\"\u003d\u003d\u003da)!function(e,t,n){var r\u003dn\u0026\u0026n.number,i\u003dFr(e,\"value\")||\"null\",o\u003dFr(e,\"true-value\")||\"true\",a\u003dFr(e,\"false-value\")||\"false\";Er(e,\"checked\",\"Array.isArray(\"+t+\")?_i(\"+t+\",\"+i+\")\u003e-1\"+(\"true\"\u003d\u003d\u003do?\":(\"+t+\")\":\":_q(\"+t+\",\"+o+\")\")),Mr(e,\"change\",\"var $$a\u003d\"+t+\",$$el\u003d$event.target,$$c\u003d$$el.checked?(\"+o+\"):(\"+a+\");if(Array.isArray($$a)){var $$v\u003d\"+(r?\"_n(\"+i+\")\":i)+\",$$i\u003d_i($$a,$$v);if($$el.checked){$$i\u003c0\u0026\u0026(\"+Ur(t,\"$$a.concat([$$v])\")+\")}else{$$i\u003e-1\u0026\u0026(\"+Ur(t,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\")+\")}}else{\"+Ur(t,\"$$c\")+\"}\",null,!0)}(e,r,i);else if(\"input\"\u003d\u003d\u003do\u0026\u0026\"radio\"\u003d\u003d\u003da)!function(e,t,n){var r\u003dn\u0026\u0026n.number,i\u003dFr(e,\"value\")||\"null\";Er(e,\"checked\",\"_q(\"+t+\",\"+(i\u003dr?\"_n(\"+i+\")\":i)+\")\"),Mr(e,\"change\",Ur(t,i),null,!0)}(e,r,i);else if(\"input\"\u003d\u003d\u003do||\"textarea\"\u003d\u003d\u003do)!function(e,t,n){var r\u003de.attrsMap.type,i\u003dn||{},o\u003di.lazy,a\u003di.number,s\u003di.trim,c\u003d!o\u0026\u0026\"range\"!\u003d\u003dr,u\u003do?\"change\":\"range\"\u003d\u003d\u003dr?Zr:\"input\",l\u003d\"$event.target.value\";s\u0026\u0026(l\u003d\"$event.target.value.trim()\"),a\u0026\u0026(l\u003d\"_n(\"+l+\")\");var f\u003dUr(t,l);c\u0026\u0026(f\u003d\"if($event.target.composing)return;\"+f),Er(e,\"value\",\"(\"+t+\")\"),Mr(e,u,f,null,!0),(s||a)\u0026\u0026Mr(e,\"blur\",\"$forceUpdate()\")}(e,r,i);else if(!F.isReservedTag(o))return Br(e,r,i),!1;return!0},text:function(e,t){t.value\u0026\u0026Er(e,\"textContent\",\"_s(\"+t.value+\")\",t)},html:function(e,t){t.value\u0026\u0026Er(e,\"innerHTML\",\"_s(\"+t.value+\")\",t)}},isPreTag:function(e){return\"pre\"\u003d\u003d\u003de},isUnaryTag:$o,mustUseProp:Dn,canBeLeftOpenTag:wo,isReservedTag:Zn,getTagNamespace:Gn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(\",\")}($a)},ka\u003dg(function(e){return p(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))});function Aa(e,t){e\u0026\u0026(wa\u003dka(t.staticKeys||\"\"),Ca\u003dt.isReservedTag||T,function e(t){t.static\u003dfunction(e){if(2\u003d\u003d\u003de.type)return!1;if(3\u003d\u003d\u003de.type)return!0;return!(!e.pre\u0026\u0026(e.hasBindings||e.if||e.for||d(e.tag)||!Ca(e.tag)||function(e){for(;e.parent;){if(\"template\"!\u003d\u003d(e\u003de.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(wa)))}(t);if(1\u003d\u003d\u003dt.type){if(!Ca(t.tag)\u0026\u0026\"slot\"!\u003d\u003dt.tag\u0026\u0026null\u003d\u003dt.attrsMap[\"inline-template\"])return;for(var n\u003d0,r\u003dt.children.length;n\u003cr;n++){var i\u003dt.children[n];e(i),i.static||(t.static\u003d!1)}if(t.ifConditions)for(var o\u003d1,a\u003dt.ifConditions.length;o\u003ca;o++){var s\u003dt.ifConditions[o].block;e(s),s.static||(t.static\u003d!1)}}}(e),function e(t,n){if(1\u003d\u003d\u003dt.type){if((t.static||t.once)\u0026\u0026(t.staticInFor\u003dn),t.static\u0026\u0026t.children.length\u0026\u0026(1!\u003d\u003dt.children.length||3!\u003d\u003dt.children[0].type))return void(t.staticRoot\u003d!0);if(t.staticRoot\u003d!1,t.children)for(var r\u003d0,i\u003dt.children.length;r\u003ci;r++)e(t.children[r],n||!!t.for);if(t.ifConditions)for(var o\u003d1,a\u003dt.ifConditions.length;o\u003ca;o++)e(t.ifConditions[o].block,n)}}(e,!1))}var Oa\u003d/^([\\w$_]+|\\([^)]*?\\))\\s*\u003d\u003e|^function(?:\\s+[\\w$]+)?\\s*\\(/,Sa\u003d/\\([^)]*?\\);*$/,Ta\u003d/^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\[\u0027[^\u0027]*?\u0027]|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,Na\u003d{esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea\u003d{esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},ja\u003dfunction(e){return\"if(\"+e+\")return null;\"},Da\u003d{stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:ja(\"$event.target !\u003d\u003d $event.currentTarget\"),ctrl:ja(\"!$event.ctrlKey\"),shift:ja(\"!$event.shiftKey\"),alt:ja(\"!$event.altKey\"),meta:ja(\"!$event.metaKey\"),left:ja(\"\u0027button\u0027 in $event \u0026\u0026 $event.button !\u003d\u003d 0\"),middle:ja(\"\u0027button\u0027 in $event \u0026\u0026 $event.button !\u003d\u003d 1\"),right:ja(\"\u0027button\u0027 in $event \u0026\u0026 $event.button !\u003d\u003d 2\")};function La(e,t){var n\u003dt?\"nativeOn:\":\"on:\",r\u003d\"\",i\u003d\"\";for(var o in e){var a\u003dIa(e[o]);e[o]\u0026\u0026e[o].dynamic?i+\u003do+\",\"+a+\",\":r+\u003d\u0027\"\u0027+o+\u0027\":\u0027+a+\",\"}return r\u003d\"{\"+r.slice(0,-1)+\"}\",i?n+\"_d(\"+r+\",[\"+i.slice(0,-1)+\"])\":n+r}function Ia(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return Ia(e)}).join(\",\")+\"]\";var t\u003dTa.test(e.value),n\u003dOa.test(e.value),r\u003dTa.test(e.value.replace(Sa,\"\"));if(e.modifiers){var i\u003d\"\",o\u003d\"\",a\u003d[];for(var s in e.modifiers)if(Da[s])o+\u003dDa[s],Na[s]\u0026\u0026a.push(s);else if(\"exact\"\u003d\u003d\u003ds){var c\u003de.modifiers;o+\u003dja([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter(function(e){return!c[e]}).map(function(e){return\"$event.\"+e+\"Key\"}).join(\"||\"))}else a.push(s);return a.length\u0026\u0026(i+\u003dfunction(e){return\"if(!$event.type.indexOf(\u0027key\u0027)\u0026\u0026\"+e.map(Ma).join(\"\u0026\u0026\")+\")return null;\"}(a)),o\u0026\u0026(i+\u003do),\"function($event){\"+i+(t?\"return \"+e.value+\".apply(null, arguments)\":n?\"return (\"+e.value+\").apply(null, arguments)\":r?\"return \"+e.value:e.value)+\"}\"}return t||n?e.value:\"function($event){\"+(r?\"return \"+e.value:e.value)+\"}\"}function Ma(e){var t\u003dparseInt(e,10);if(t)return\"$event.keyCode!\u003d\u003d\"+t;var n\u003dNa[e],r\u003dEa[e];return\"_k($event.keyCode,\"+JSON.stringify(e)+\",\"+JSON.stringify(n)+\",$event.key,\"+JSON.stringify(r)+\")\"}var Fa\u003d{on:function(e,t){e.wrapListeners\u003dfunction(e){return\"_g(\"+e+\",\"+t.value+\")\"}},bind:function(e,t){e.wrapData\u003dfunction(n){return\"_b(\"+n+\",\u0027\"+e.tag+\"\u0027,\"+t.value+\",\"+(t.modifiers\u0026\u0026t.modifiers.prop?\"true\":\"false\")+(t.modifiers\u0026\u0026t.modifiers.sync?\",true\":\"\")+\")\"}},cloak:S},Pa\u003dfunction(e){this.options\u003de,this.warn\u003de.warn||Tr,this.transforms\u003dNr(e.modules,\"transformCode\"),this.dataGenFns\u003dNr(e.modules,\"genData\"),this.directives\u003dA(A({},Fa),e.directives);var t\u003de.isReservedTag||T;this.maybeComponent\u003dfunction(e){return!!e.component||!t(e.tag)},this.onceId\u003d0,this.staticRenderFns\u003d[],this.pre\u003d!1};function Ra(e,t){var n\u003dnew Pa(t);return{render:\"with(this){return \"+(e?\"script\"\u003d\u003d\u003de.tag?\"null\":Ha(e,n):\u0027_c(\"div\")\u0027)+\"}\",staticRenderFns:n.staticRenderFns}}function Ha(e,t){if(e.parent\u0026\u0026(e.pre\u003de.pre||e.parent.pre),e.staticRoot\u0026\u0026!e.staticProcessed)return Ba(e,t);if(e.once\u0026\u0026!e.onceProcessed)return Ua(e,t);if(e.for\u0026\u0026!e.forProcessed)return za(e,t);if(e.if\u0026\u0026!e.ifProcessed)return Va(e,t);if(\"template\"!\u003d\u003de.tag||e.slotTarget||t.pre){if(\"slot\"\u003d\u003d\u003de.tag)return function(e,t){var n\u003de.slotName||\u0027\"default\"\u0027,r\u003dWa(e,t),i\u003d\"_t(\"+n+(r?\",function(){return \"+r+\"}\":\"\"),o\u003de.attrs||e.dynamicAttrs?Xa((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a\u003de.attrsMap[\"v-bind\"];!o\u0026\u0026!a||r||(i+\u003d\",null\");o\u0026\u0026(i+\u003d\",\"+o);a\u0026\u0026(i+\u003d(o?\"\":\",null\")+\",\"+a);return i+\")\"}(e,t);var n;if(e.component)n\u003dfunction(e,t,n){var r\u003dt.inlineTemplate?null:Wa(t,n,!0);return\"_c(\"+e+\",\"+Ka(t,n)+(r?\",\"+r:\"\")+\")\"}(e.component,e,t);else{var r;(!e.plain||e.pre\u0026\u0026t.maybeComponent(e))\u0026\u0026(r\u003dKa(e,t));var i\u003de.inlineTemplate?null:Wa(e,t,!0);n\u003d\"_c(\u0027\"+e.tag+\"\u0027\"+(r?\",\"+r:\"\")+(i?\",\"+i:\"\")+\")\"}for(var o\u003d0;o\u003ct.transforms.length;o++)n\u003dt.transforms[o](e,n);return n}return Wa(e,t)||\"void 0\"}function Ba(e,t){e.staticProcessed\u003d!0;var n\u003dt.pre;return e.pre\u0026\u0026(t.pre\u003de.pre),t.staticRenderFns.push(\"with(this){return \"+Ha(e,t)+\"}\"),t.pre\u003dn,\"_m(\"+(t.staticRenderFns.length-1)+(e.staticInFor?\",true\":\"\")+\")\"}function Ua(e,t){if(e.onceProcessed\u003d!0,e.if\u0026\u0026!e.ifProcessed)return Va(e,t);if(e.staticInFor){for(var n\u003d\"\",r\u003de.parent;r;){if(r.for){n\u003dr.key;break}r\u003dr.parent}return n?\"_o(\"+Ha(e,t)+\",\"+t.onceId+++\",\"+n+\")\":Ha(e,t)}return Ba(e,t)}function Va(e,t,n,r){return e.ifProcessed\u003d!0,function e(t,n,r,i){if(!t.length)return i||\"_e()\";var o\u003dt.shift();return o.exp?\"(\"+o.exp+\")?\"+a(o.block)+\":\"+e(t,n,r,i):\"\"+a(o.block);function a(e){return r?r(e,n):e.once?Ua(e,n):Ha(e,n)}}(e.ifConditions.slice(),t,n,r)}function za(e,t,n,r){var i\u003de.for,o\u003de.alias,a\u003de.iterator1?\",\"+e.iterator1:\"\",s\u003de.iterator2?\",\"+e.iterator2:\"\";return e.forProcessed\u003d!0,(r||\"_l\")+\"((\"+i+\"),function(\"+o+a+s+\"){return \"+(n||Ha)(e,t)+\"})\"}function Ka(e,t){var n\u003d\"{\",r\u003dfunction(e,t){var n\u003de.directives;if(!n)return;var r,i,o,a,s\u003d\"directives:[\",c\u003d!1;for(r\u003d0,i\u003dn.length;r\u003ci;r++){o\u003dn[r],a\u003d!0;var u\u003dt.directives[o.name];u\u0026\u0026(a\u003d!!u(e,o,t.warn)),a\u0026\u0026(c\u003d!0,s+\u003d\u0027{name:\"\u0027+o.name+\u0027\",rawName:\"\u0027+o.rawName+\u0027\"\u0027+(o.value?\",value:(\"+o.value+\"),expression:\"+JSON.stringify(o.value):\"\")+(o.arg?\",arg:\"+(o.isDynamicArg?o.arg:\u0027\"\u0027+o.arg+\u0027\"\u0027):\"\")+(o.modifiers?\",modifiers:\"+JSON.stringify(o.modifiers):\"\")+\"},\")}if(c)return s.slice(0,-1)+\"]\"}(e,t);r\u0026\u0026(n+\u003dr+\",\"),e.key\u0026\u0026(n+\u003d\"key:\"+e.key+\",\"),e.ref\u0026\u0026(n+\u003d\"ref:\"+e.ref+\",\"),e.refInFor\u0026\u0026(n+\u003d\"refInFor:true,\"),e.pre\u0026\u0026(n+\u003d\"pre:true,\"),e.component\u0026\u0026(n+\u003d\u0027tag:\"\u0027+e.tag+\u0027\",\u0027);for(var i\u003d0;i\u003ct.dataGenFns.length;i++)n+\u003dt.dataGenFns[i](e);if(e.attrs\u0026\u0026(n+\u003d\"attrs:\"+Xa(e.attrs)+\",\"),e.props\u0026\u0026(n+\u003d\"domProps:\"+Xa(e.props)+\",\"),e.events\u0026\u0026(n+\u003dLa(e.events,!1)+\",\"),e.nativeEvents\u0026\u0026(n+\u003dLa(e.nativeEvents,!0)+\",\"),e.slotTarget\u0026\u0026!e.slotScope\u0026\u0026(n+\u003d\"slot:\"+e.slotTarget+\",\"),e.scopedSlots\u0026\u0026(n+\u003dfunction(e,t,n){var r\u003de.for||Object.keys(t).some(function(e){var n\u003dt[e];return n.slotTargetDynamic||n.if||n.for||Ja(n)}),i\u003d!!e.if;if(!r)for(var o\u003de.parent;o;){if(o.slotScope\u0026\u0026o.slotScope!\u003d\u003dua||o.for){r\u003d!0;break}o.if\u0026\u0026(i\u003d!0),o\u003do.parent}var a\u003dObject.keys(t).map(function(e){return qa(t[e],n)}).join(\",\");return\"scopedSlots:_u([\"+a+\"]\"+(r?\",null,true\":\"\")+(!r\u0026\u0026i?\",null,false,\"+function(e){var t\u003d5381,n\u003de.length;for(;n;)t\u003d33*t^e.charCodeAt(--n);return t\u003e\u003e\u003e0}(a):\"\")+\")\"}(e,e.scopedSlots,t)+\",\"),e.model\u0026\u0026(n+\u003d\"model:{value:\"+e.model.value+\",callback:\"+e.model.callback+\",expression:\"+e.model.expression+\"},\"),e.inlineTemplate){var o\u003dfunction(e,t){var n\u003de.children[0];if(n\u0026\u00261\u003d\u003d\u003dn.type){var r\u003dRa(n,t.options);return\"inlineTemplate:{render:function(){\"+r.render+\"},staticRenderFns:[\"+r.staticRenderFns.map(function(e){return\"function(){\"+e+\"}\"}).join(\",\")+\"]}\"}}(e,t);o\u0026\u0026(n+\u003do+\",\")}return n\u003dn.replace(/,$/,\"\")+\"}\",e.dynamicAttrs\u0026\u0026(n\u003d\"_b(\"+n+\u0027,\"\u0027+e.tag+\u0027\",\u0027+Xa(e.dynamicAttrs)+\")\"),e.wrapData\u0026\u0026(n\u003de.wrapData(n)),e.wrapListeners\u0026\u0026(n\u003de.wrapListeners(n)),n}function Ja(e){return 1\u003d\u003d\u003de.type\u0026\u0026(\"slot\"\u003d\u003d\u003de.tag||e.children.some(Ja))}function qa(e,t){var n\u003de.attrsMap[\"slot-scope\"];if(e.if\u0026\u0026!e.ifProcessed\u0026\u0026!n)return Va(e,t,qa,\"null\");if(e.for\u0026\u0026!e.forProcessed)return za(e,t,qa);var r\u003de.slotScope\u003d\u003d\u003dua?\"\":String(e.slotScope),i\u003d\"function(\"+r+\"){return \"+(\"template\"\u003d\u003d\u003de.tag?e.if\u0026\u0026n?\"(\"+e.if+\")?\"+(Wa(e,t)||\"undefined\")+\":undefined\":Wa(e,t)||\"undefined\":Ha(e,t))+\"}\",o\u003dr?\"\":\",proxy:true\";return\"{key:\"+(e.slotTarget||\u0027\"default\"\u0027)+\",fn:\"+i+o+\"}\"}function Wa(e,t,n,r,i){var o\u003de.children;if(o.length){var a\u003do[0];if(1\u003d\u003d\u003do.length\u0026\u0026a.for\u0026\u0026\"template\"!\u003d\u003da.tag\u0026\u0026\"slot\"!\u003d\u003da.tag){var s\u003dn?t.maybeComponent(a)?\",1\":\",0\":\"\";return\"\"+(r||Ha)(a,t)+s}var c\u003dn?function(e,t){for(var n\u003d0,r\u003d0;r\u003ce.length;r++){var i\u003de[r];if(1\u003d\u003d\u003di.type){if(Za(i)||i.ifConditions\u0026\u0026i.ifConditions.some(function(e){return Za(e.block)})){n\u003d2;break}(t(i)||i.ifConditions\u0026\u0026i.ifConditions.some(function(e){return t(e.block)}))\u0026\u0026(n\u003d1)}}return n}(o,t.maybeComponent):0,u\u003di||Ga;return\"[\"+o.map(function(e){return u(e,t)}).join(\",\")+\"]\"+(c?\",\"+c:\"\")}}function Za(e){return void 0!\u003d\u003de.for||\"template\"\u003d\u003d\u003de.tag||\"slot\"\u003d\u003d\u003de.tag}function Ga(e,t){return 1\u003d\u003d\u003de.type?Ha(e,t):3\u003d\u003d\u003de.type\u0026\u0026e.isComment?(r\u003de,\"_e(\"+JSON.stringify(r.text)+\")\"):\"_v(\"+(2\u003d\u003d\u003d(n\u003de).type?n.expression:Ya(JSON.stringify(n.text)))+\")\";var n,r}function Xa(e){for(var t\u003d\"\",n\u003d\"\",r\u003d0;r\u003ce.length;r++){var i\u003de[r],o\u003dYa(i.value);i.dynamic?n+\u003di.name+\",\"+o+\",\":t+\u003d\u0027\"\u0027+i.name+\u0027\":\u0027+o+\",\"}return t\u003d\"{\"+t.slice(0,-1)+\"}\",n?\"_d(\"+t+\",[\"+n.slice(0,-1)+\"])\":t}function Ya(e){return e.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\");function Qa(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),S}}function es(e){var t\u003dObject.create(null);return function(n,r,i){(r\u003dA({},r)).warn;delete r.warn;var o\u003dr.delimiters?String(r.delimiters)+n:n;if(t[o])return t[o];var a\u003de(n,r),s\u003d{},c\u003d[];return s.render\u003dQa(a.render,c),s.staticRenderFns\u003da.staticRenderFns.map(function(e){return Qa(e,c)}),t[o]\u003ds}}var ts,ns,rs\u003d(ts\u003dfunction(e,t){var n\u003dfa(e.trim(),t);!1!\u003d\u003dt.optimize\u0026\u0026Aa(n,t);var r\u003dRa(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(e){function t(t,n){var r\u003dObject.create(e),i\u003d[],o\u003d[];if(n)for(var a in n.modules\u0026\u0026(r.modules\u003d(e.modules||[]).concat(n.modules)),n.directives\u0026\u0026(r.directives\u003dA(Object.create(e.directives||null),n.directives)),n)\"modules\"!\u003d\u003da\u0026\u0026\"directives\"!\u003d\u003da\u0026\u0026(r[a]\u003dn[a]);r.warn\u003dfunction(e,t,n){(n?o:i).push(e)};var s\u003dts(t.trim(),r);return s.errors\u003di,s.tips\u003do,s}return{compile:t,compileToFunctions:es(t)}})(xa),is\u003d(rs.compile,rs.compileToFunctions);function os(e){return(ns\u003dns||document.createElement(\"div\")).innerHTML\u003de?\u0027\u003ca href\u003d\"\\n\"/\u003e\u0027:\u0027\u003cdiv a\u003d\"\\n\"/\u003e\u0027,ns.innerHTML.indexOf(\"\u0026#10;\")\u003e0}var as\u003d!!V\u0026\u0026os(!1),ss\u003d!!V\u0026\u0026os(!0),cs\u003dg(function(e){var t\u003dQn(e);return t\u0026\u0026t.innerHTML}),us\u003dCn.prototype.$mount;return Cn.prototype.$mount\u003dfunction(e,t){if((e\u003de\u0026\u0026Qn(e))\u003d\u003d\u003ddocument.body||e\u003d\u003d\u003ddocument.documentElement)return this;var n\u003dthis.$options;if(!n.render){var r\u003dn.template;if(r)if(\"string\"\u003d\u003dtypeof r)\"#\"\u003d\u003d\u003dr.charAt(0)\u0026\u0026(r\u003dcs(r));else{if(!r.nodeType)return this;r\u003dr.innerHTML}else e\u0026\u0026(r\u003dfunction(e){if(e.outerHTML)return e.outerHTML;var t\u003ddocument.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i\u003dis(r,{outputSourceRange:!1,shouldDecodeNewlines:as,shouldDecodeNewlinesForHref:ss,delimiters:n.delimiters,comments:n.comments},this),o\u003di.render,a\u003di.staticRenderFns;n.render\u003do,n.staticRenderFns\u003da}}return us.call(this,e,t)},Cn.compile\u003dis,Cn});"}],"authorContributionMap":{"jingting1412":6}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/_mixins.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"// @see https://github.com/twbs/bootstrap/blob/main/scss/_functions.scss"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"@function material-icons-str-replace($string, $search, $replace: \u0027\u0027) {"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" $index: str-index($string, $search);"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" @if $index {"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" @return str-slice($string, 1, $index - 1) + $replace +"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" material-icons-str-replace("},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" str-slice($string, $index + str-length($search)),"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" $search,"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" $replace"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" );"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" @return $string;"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":"@mixin material-icons-font-class($font-family) {"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" font-family: $font-family;"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" font-size: $material-icons-font-size;"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased; // Support for all WebKit browsers"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale; // Support for Firefox"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility; // Support for Safari and Chrome"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \u0027liga\u0027; // Support for IE"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":"@mixin material-icons-font($font-family) {"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" $class-name: to-lower-case($font-family);"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":" $class-name: material-icons-str-replace($class-name, \u0027 \u0027, \u0027-\u0027);"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":" $font-file: $material-icons-font-path + $class-name;"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" @font-face {"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":" font-family: $font-family;"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" font-display: $material-icons-font-display;"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" src: url(\u0027#{$font-file}.woff2\u0027) format(\u0027woff2\u0027),"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":" url(\u0027#{$font-file}.woff\u0027) format(\u0027woff\u0027);"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" .#{$class-name} {"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" @include material-icons-font-class($font-family);"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":"@mixin material-icons() {"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":" @warn \"material-icons() Sass mixin has been deprecated as of 1.0. Use \u0027@extend .material-icons;\u0027 instead of \u0027@include material-icons();\u0027.\";"},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":" @include material-icons-font-class(\u0027Material Icons\u0027);"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":55}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/_variables.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"$material-icons-font-path: \u0027./\u0027 !default;"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"$material-icons-font-size: 24px !default;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"$material-icons-font-display: block !default;"}],"authorContributionMap":{"jingting1412":3}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/filled.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons\";"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons.woff2\") format(\"woff2\"), url(\"./material-icons.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":".material-icons {"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons\";"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":24}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/filled.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"@include material-icons-font(\u0027Material Icons\u0027);"}],"authorContributionMap":{"jingting1412":4}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/material-icons.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons\";"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons.woff2\") format(\"woff2\"), url(\"./material-icons.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":".material-icons {"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons\";"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons-outlined.woff2\") format(\"woff2\"), url(\"./material-icons-outlined.woff\") format(\"woff\");"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":".material-icons-outlined {"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons-round.woff2\") format(\"woff2\"), url(\"./material-icons-round.woff\") format(\"woff\");"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":".material-icons-round {"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":62,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":63,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":64,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":65,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":66,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":67,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":68,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":69,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":70,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":71,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":72,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":73,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":74,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":75,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":76,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":77,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":78,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":79,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":80,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":81,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons-sharp.woff2\") format(\"woff2\"), url(\"./material-icons-sharp.woff\") format(\"woff\");"},{"lineNumber":82,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":83,"author":{"gitId":"jingting1412"},"content":".material-icons-sharp {"},{"lineNumber":84,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":85,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":86,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":87,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":88,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":89,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":90,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":91,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":92,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":93,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":94,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":95,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":96,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":97,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":98,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":99,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":100,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":101,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":102,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":103,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":104,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":105,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":106,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons-two-tone.woff2\") format(\"woff2\"), url(\"./material-icons-two-tone.woff\") format(\"woff\");"},{"lineNumber":107,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":108,"author":{"gitId":"jingting1412"},"content":".material-icons-two-tone {"},{"lineNumber":109,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":110,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":111,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":112,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":113,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":114,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":115,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":116,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":117,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":118,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":119,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":120,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":121,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":122,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":123,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":124,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":124}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/material-icons.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@import \u0027filled\u0027;"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"@import \u0027outlined\u0027;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"@import \u0027round\u0027;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"@import \u0027sharp\u0027;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"@import \u0027two-tone\u0027;"}],"authorContributionMap":{"jingting1412":5}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/outlined.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons-outlined.woff2\") format(\"woff2\"), url(\"./material-icons-outlined.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":".material-icons-outlined {"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":24}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/outlined.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"@include material-icons-font(\u0027Material Icons Outlined\u0027);"}],"authorContributionMap":{"jingting1412":4}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/round.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons-round.woff2\") format(\"woff2\"), url(\"./material-icons-round.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":".material-icons-round {"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":24}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/round.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"@include material-icons-font(\u0027Material Icons Round\u0027);"}],"authorContributionMap":{"jingting1412":4}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/sharp.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons-sharp.woff2\") format(\"woff2\"), url(\"./material-icons-sharp.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":".material-icons-sharp {"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":24}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/sharp.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"@include material-icons-font(\u0027Material Icons Sharp\u0027);"}],"authorContributionMap":{"jingting1412":4}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/two-tone.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" src: url(\"./material-icons-two-tone.woff2\") format(\"woff2\"), url(\"./material-icons-two-tone.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":".material-icons-two-tone {"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":24}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/markbind/material-icons/two-tone.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"@include material-icons-font(\u0027Material Icons Two Tone\u0027);"}],"authorContributionMap":{"jingting1412":4}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/plugins/markbind-plugin-anchors/markbind-plugin-anchors.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":".fa.fa-anchor {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" color: #ccc;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" display: inline;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" font-size: 14px;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" margin-left: 10px;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" padding: 3px;"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" text-decoration: none;"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" visibility: hidden;"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":".fa.fa-anchor:hover {"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" color: #555;"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":"h1:hover \u003e .fa.fa-anchor,"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":"h2:hover \u003e .fa.fa-anchor,"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":"h3:hover \u003e .fa.fa-anchor,"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":"h4:hover \u003e .fa.fa-anchor,"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":"h5:hover \u003e .fa.fa-anchor,"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":"h6:hover \u003e .fa.fa-anchor,"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":".header-wrapper:hover \u003e .fa.fa-anchor {"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" visibility: visible;"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":23}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/plugins/markbind-plugin-tree/markbind-plugin-tree.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":".tree {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" white-space: pre;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" font-family: \"Fira Code\", \"Fira Mono\", monospace;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" font-size: 0.9375rem;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" line-height: 1.5;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" overflow-x: auto;"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":7}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"{"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \"baseUrl\": \"\","},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" \"titlePrefix\": \"\","},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" \"titleSuffix\": \"\","},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" \"ignore\": ["},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \"_markbind/layouts/*\","},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \"_markbind/logs/*\","},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \"_site/*\","},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \"site.json\","},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \"*.md\","},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \"*.njk\","},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \".git/*\","},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \".gitignore\","},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \"node_modules/*\""},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" ],"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \"pagesExclude\": [\"node_modules/*\"],"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \"pages\": ["},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" {"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \"src\": \"index.md\","},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \"title\": \"Portfolio\""},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" },"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" {"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \"glob\": [\"**/index.md\"]"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" ],"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":" \"deploy\": {"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" \"message\": \"Site Update.\""},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" },"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" \"style\": {"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" \"bootstrapTheme\": \"bootswatch-flatly\""},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":32}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/siteData.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"{"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \"enableSearch\": true,"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" \"pages\": ["},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" {"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" \"src\": \"index.md\","},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \"title\": \"Portfolio\","},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \"headings\": {"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \"about-me\": \"About me\","},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \"skills\": \"Skills\","},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \"experience\": \"Experience\","},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \"projects\": \"Projects\","},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \"example-project-ip-for-cs2103\": \"Example project: iP for CS2103\","},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \"project-2\": \"Project 2\","},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \"other-projects\": \"Other projects\""},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" },"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \"headingKeywords\": {}"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" ]"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":19}},{"path":"packages/cli/test/functional/test_site_templates/test_portfolio/expected/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":63,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":64,"author":{"gitId":"jingting1412"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"jingting1412"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"jingting1412"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"jingting1412"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"jingting1412"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"jingting1412"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"jingting1412"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"jingting1412"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"jingting1412"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"jingting1412"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":75,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":76,"author":{"gitId":"jingting1412"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"jingting1412"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"jingting1412"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"jingting1412"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":81,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":82,"author":{"gitId":"jingting1412"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"jingting1412"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"jingting1412"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":86,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":87,"author":{"gitId":"jingting1412"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"jingting1412"},"content":" overflow-y: auto;"},{"lineNumber":89,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":90,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":91,"author":{"gitId":"jingting1412"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"jingting1412"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":94,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":95,"author":{"gitId":"jingting1412"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"jingting1412"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":99,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":100,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":101,"author":{"gitId":"jingting1412"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"jingting1412"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"jingting1412"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":106,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":107,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":108,"author":{"gitId":"jingting1412"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"jingting1412"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"jingting1412"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"jingting1412"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":113,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":114,"author":{"gitId":"jingting1412"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"jingting1412"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":117,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":118,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":119,"author":{"gitId":"jingting1412"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"jingting1412"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"jingting1412"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":124,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":125,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":126,"author":{"gitId":"jingting1412"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"jingting1412"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"jingting1412"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":131,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":132,"author":{"gitId":"jingting1412"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":135,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":135}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Configuration.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to understand how to configure the application such as descriptions of the config file and how to change the configuration.\\n\")]),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"configuration-guide\"}},[_v(\"Configuration guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#configuration-guide\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"config.json\")]),_v(\").\")])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":16}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Design.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section describes the architecture of your app, explaining how the main components work and interact with each other. Using architecture diagrams is recommended.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/diagrams/example.png\",\"width\":\"300\"}}),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_c(\u0027p\u0027,[_v(\"Replace the above example diagram with an Architecture Diagram of your project created using \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams\"}},[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"puml\")]),_v(\" feature\")]),_v(\".\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Given below is a quick overview of main components and how they interact with each other.\")]),_v(\" \"),_m(3),_v(\" \"),_c(\u0027p\u0027,[_v(\"The bulk of the app\u0027s work is done by the following components:\")]),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_c(\u0027annotate\u0027,{attrs:{\"src\":\"../images/johndoe.png\",\"width\":\"300\",\"alt\":\"Sample Image\"}},[_c(\u0027a-point\u0027,{attrs:{\"x\":\"25%\",\"y\":\"25%\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 25% from the left and 25% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"50%\",\"y\":\"25%\",\"size\":\"60\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 50% from the left and 25% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"75%\",\"y\":\"25%\"},scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This has a header\")])]},proxy:true},{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 75% from the left and 25% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"33%\",\"y\":\"50%\",\"color\":\"red\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 33% from the left and 50% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"66%\",\"y\":\"50%\",\"opacity\":\"0.7\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 66% from the left and 50% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"25%\",\"y\":\"75%\"},scopedSlots:_u([{key:\"label\",fn:function(){return [_c(\u0027p\u0027,[_v(\"1\")])]},proxy:true},{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 25% from the left and 75% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"50%\",\"y\":\"75%\",\"textColor\":\"white\",\"color\":\"black\",\"opacity\":\"1\"},scopedSlots:_u([{key:\"label\",fn:function(){return [_c(\u0027p\u0027,[_v(\"2\")])]},proxy:true},{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 50% from the left and 75% from the top\")])]},proxy:true}])}),_v(\" \"),_c(\u0027a-point\u0027,{attrs:{\"x\":\"75%\",\"y\":\"75%\",\"fontSize\":\"30\"},scopedSlots:_u([{key:\"label\",fn:function(){return [_c(\u0027p\u0027,[_v(\"3\")])]},proxy:true},{key:\"content\",fn:function(){return [_c(\u0027p\u0027,[_v(\"This point is 75% from the left and 75% from the top\")])]},proxy:true}])})],1),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_c(\u0027p\u0027,[_v(\"For diagrams like your Sequence Diagram, it can also be created using \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#annotations\"}},[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"annotate\")]),_v(\" feature\")]),_v(\", that will allow you to annotate specific parts of your diagram.\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The sections below give more details of each component.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\" Describe in each section how each component works in detail, including its classes, methods, and how it interacts with other components.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"You can use a combination of Markbind\u0027s \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams\"}},[_c(\u0027strong\u0027,[_v(\"Diagrams\")]),_v(\" feature\")]),_v(\" to provide a visual representation of each component, such as architecture and sequence diagrams.\")])]),_v(\" \"),_m(7),_v(\" \"),_m(8),_v(\" \"),_c(\u0027pic\u0027,{staticStyle:{\"margin-bottom\":\"20px\"},attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}},[_v(\"\\nDiagram: Component 1\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Component 1,\")]),_v(\" \"),_m(9),_v(\" \"),_m(10),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Note:\")]),_v(\" You can use boxes to include details that you want to draw the reader\u0027s attention to. See \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/presentation.html#boxes\"}},[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"Boxes\")]),_v(\" feature\")]),_v(\".\")])]),_v(\" \"),_c(\u0027pic\u0027,{staticStyle:{\"margin-bottom\":\"20px\"},attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}},[_v(\"\\nDiagram: Component 2\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Component 2,\")]),_v(\" \"),_m(11)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#design\"}},[_v(\"Design‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#architecture\"}},[_v(\"Architecture‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#component-1\"}},[_v(\"Component 1‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#component-2\"}},[_v(\"Component 2‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(12)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"design\"}},[_v(\"Design\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#design\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"architecture\"}},[_v(\"Architecture\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#architecture\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"The \"),_c(\u0027em\u0027,[_c(\u0027strong\u0027,[_v(\"Architecture Diagram\")])]),_v(\" given below explains the high-level design of the ProjectEx App.\")])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Main components of the architecture\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"#component-1\"}},[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"Component 1\")])])]),_v(\": Does something.\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"#component-2\"}},[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"Component 2\")])])]),_v(\": Does something.\")])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Interactions between architecture components\")])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"The \"),_c(\u0027em\u0027,[_v(\"Sequence Diagram\")]),_v(\" below shows how the components interact with each other for a certain scenario.\")])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"component-1\"}},[_v(\"Component 1\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#component-1\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Component 1 is made up of parts e.g.\"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"A\")]),_v(\", \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"B\")]),_v(\", \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"C\")]),_v(\" etc.\")])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"works with Component 2 in this way.\")])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"component-2\"}},[_v(\"Component 2\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#component-2\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"works with Component 1 in this way.\")])])}"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":46}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/DevOps.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to understand the DevOps practices adopted by the project.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Example Commands for Typical Projects\")])])]},proxy:true}])},[_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_v(\"\\nThe following commands are examples. You can customize them according to your project\u0027s needs.\\n\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"clean\")])]),_v(\": Deletes the files created during the previous build tasks.\"),_c(\u0027br\u0027),_v(\"\\ne.g. \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run clean\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"run\")])]),_v(\": Builds and runs the application.\"),_c(\u0027br\u0027)])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"test\")])]),_v(\": Runs all tests.\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run test\")]),_v(\" — Runs all tests\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run cleantest\")]),_v(\" — Cleans the project and runs tests\")])])])])],1),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_c(\u0027p\u0027,[_v(\"As part of CI, this project tracks code coverage as well.\")]),_v(\" \"),_m(6),_v(\" \"),_c(\u0027p\u0027,[_v(\"Your CI can include some repository-wide checks. These repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements.\")]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_m(7),_v(\" \"),_c(\u0027p\u0027,[_v(\"Here are the steps to create a new release.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"warning\"}},[_v(\"\\nMake sure you have the necessary permissions to create a release.\\n\")]),_v(\" \"),_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:trigger_id\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"e.g. \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"v0.1\")])]},proxy:true}])}),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Update the version number.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Tag the repo with the \"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:trigger_id\"}},[_v(\"version number\")]),_v(\".\")],1),_v(\" \"),_m(8)])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#devops-guide\"}},[_v(\"DevOps guide‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#build-automation\"}},[_v(\"Build automation‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#continuous-integration-ci\"}},[_v(\"Continuous integration (CI)‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#code-coverage\"}},[_v(\"Code coverage‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#repository-wide-checks\"}},[_v(\"Repository-wide checks‎\")])]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#making-a-release\"}},[_v(\"Making a release‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(9)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"devops-guide\"}},[_v(\"DevOps guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#devops-guide\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"build-automation\"}},[_v(\"Build automation\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#build-automation\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"This example project includes features for \"),_c(\u0027strong\u0027,[_v(\"build automation and dependency management\")]),_v(\". You can walkthrough command scripts you have in your project, such as how to clean, test, and run the project.\")])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"continuous-integration-ci\"}},[_v(\"Continuous integration (CI)\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#continuous-integration-ci\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"This project uses \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/features/actions\"}},[_v(\"GitHub Actions\")]),_v(\" for CI. The project comes with the necessary GitHub Actions configurations files (in the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\".github/workflows\")]),_v(\" folder). No further setting up required.\")])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"code-coverage\"}},[_v(\"Code coverage\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#code-coverage\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"repository-wide-checks\"}},[_v(\"Repository-wide checks\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#repository-wide-checks\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"making-a-release\"}},[_v(\"Making a release\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#making-a-release\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"https://help.github.com/articles/creating-releases/\"}},[_v(\"Create a new release using GitHub\")]),_v(\".\")])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":37}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/DeveloperGuide.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_m(0),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#projectex-developer-guide\"}},[_v(\"ProjectEx Developer Guide‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#introduction\"}},[_v(\"Introduction‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#purpose-of-this-guide\"}},[_v(\"Purpose of this Guide‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#acknowledgements\"}},[_v(\"Acknowledgements‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027h1\u0027,{attrs:{\"id\":\"projectex-developer-guide\"}},[_v(\"ProjectEx Developer Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#projectex-developer-guide\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"introduction\"}},[_v(\"Introduction\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#introduction\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the Developer Guide. This guide helps developers understand the architecture, setup, and development workflows of our software, serving as your starting point and companion.\")]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"purpose-of-this-guide\"}},[_v(\"Purpose of this Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#purpose-of-this-guide\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The main objectives of this guide are to:\")]),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Orient new developers to the software\u0027s architecture and codebase structure.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Provide a comprehensive reference for the development practices, coding standards, and tools used.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Detail the setup process for a development environment.\")])]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"acknowledgements\"}},[_c(\u0027strong\u0027,[_v(\"Acknowledgements\")]),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#acknowledgements\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{ List and link sources of all reused/adapted ideas, code, documentation, and third-party libraries }\")])])])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":13}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Documentation.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to understand the documentation practices and link to relevant sources to help developers contribute to documentation.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"success\",\"seamless\":\"\"}},[_v(\"\\nUpdating documentation as changes are made to the project is ideal for any project.\\n\")]),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#documentation-guide\"}},[_v(\"Documentation Guide‎\")])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(6)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"documentation-guide\"}},[_v(\"Documentation Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#documentation-guide\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"We use \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_c(\u0027strong\u0027,[_v(\"MarkBind\")])]),_v(\" to manage documentation.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"The \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"docs/\")]),_v(\" folder contains the source files for the documentation website.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"To learn how set it up and maintain the project website, follow the guide \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://se-education.org/guides/tutorials/markbind-forked-sites.html\"}},[_v(\"[se-edu/guides] Working with Forked MarkBind sites\")]),_v(\" for project documentation.\")])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Style guidance:\")])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Follow the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://developers.google.com/style\"}},[_c(\u0027strong\u0027,[_c(\u0027em\u0027,[_v(\"Google developer documentation style guide\")])])]),_v(\".\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Also relevant is the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://se-education.org/guides/conventions/markdown.html\"}},[_c(\u0027em\u0027,[_v(\"se-edu/guides \"),_c(\u0027strong\u0027,[_v(\"Markdown coding standard\")])])]),_v(\".\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Converting to PDF\")])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"See the guide \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://se-education.org/guides/tutorials/savingPdf.html\"}},[_c(\u0027em\u0027,[_v(\"se-edu/guides \"),_c(\u0027strong\u0027,[_v(\"Saving web documents as PDF files\")])])]),_v(\".\")])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":28}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Implementation.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section can be used to describe some noteworthy details on how certain features are implemented.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_c(\u0027p\u0027,[_v(\"Given below is an example usage scenario and how FeatureX behaves at each step.\")]),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Alternative 1 (current choice):\")]),_v(\" Implementation 1\")])]},proxy:true}])},[_v(\"\\nPros: Easy to implement.\"),_c(\u0027br\u0027),_v(\"\\nCons: May have performance issues in terms of memory usage.\\n\")]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Alternative 2:\")]),_v(\" Implementation 2\")])]},proxy:true}])},[_v(\"\\nPros: Will use less memory.\"),_c(\u0027br\u0027),_v(\"\\nCons: We must add addtional test cases.\\n\")]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#implementation\"}},[_v(\"Implementation‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#proposed-featurex-implementation\"}},[_v(\"[Proposed] FeatureX Implementation‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#proposed-data-archiving\"}},[_v(\"[Proposed] Data archiving‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(8)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"implementation\"}},[_v(\"Implementation\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#implementation\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"proposed-featurex-implementation\"}},[_v(\"[Proposed] FeatureX Implementation\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#proposed-featurex-implementation\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Step 1\")]),_v(\": User does something\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Expected\")]),_v(\": FeatureX does something in response\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Step 2\")]),_v(\": User does something else\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Expected\")]),_v(\": FeatureX does something else in response\")])])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h4\u0027,{attrs:{\"id\":\"design-considerations\"}},[_v(\"Design considerations:\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#design-considerations\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Aspect: How FeatureX executes:\")])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{ More aspects and alternatives to be added }\")])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"proposed-data-archiving\"}},[_v(\"[Proposed] Data archiving\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#proposed-data-archiving\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{ Explain here how the data archiving feature will be implemented }\")])])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":34}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Requirements.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section can be used to describe the requirements of the app, through the use of user stories, use cases.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7),_v(\" \"),_m(8),_v(\" \"),_m(9),_m(10),_v(\" \"),_m(11),_v(\" \"),_m(12),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Use case 1: Do something\")])])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"MSS\")])]),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"User requests ProjectEx\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"ProjectEx provides response\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Use case ends.\")])])]),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Extensions\")])]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"2a. Requests fails.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Use case ends.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"2b. User request is invalid.\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"2b1. ProjectEx shows an error message.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Use case resumes at step 2.\")])])])])])]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_m(13),_v(\" \"),_m(14),_v(\" \"),_m(15),_v(\" \"),_m(16)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#requirements\"}},[_v(\"Requirements‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#product-scope\"}},[_v(\"Product scope‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#user-stories\"}},[_v(\"User stories‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#use-cases\"}},[_v(\"Use cases‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#non-functional-requirements\"}},[_v(\"Non-Functional Requirements‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(17)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"requirements\"}},[_v(\"Requirements\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#requirements\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"product-scope\"}},[_v(\"Product scope\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#product-scope\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Target user profile\")]),_v(\":\")])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"user needs\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"user preferences\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"user information\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Value proposition\")]),_v(\": Benefit compared to other similar products\")])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Non-Functional Requirements\")]),_v(\":\")])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"OS requirements\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Peformance\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Security\")])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"user-stories\"}},[_v(\"User stories\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#user-stories\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"Priorities: High (must have) - \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"* * *\")]),_v(\", Medium (nice to have) - \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"* *\")]),_v(\", Low (unlikely to have) - \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"*\")])])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{staticClass:\"table-responsive\"},[_c(\u0027table\u0027,{staticClass:\"markbind-table table table-bordered table-striped\"},[_c(\u0027thead\u0027,[_c(\u0027tr\u0027,[_c(\u0027th\u0027,[_v(\"Priority\")]),_v(\" \"),_c(\u0027th\u0027,[_v(\"As a …​\")]),_v(\" \"),_c(\u0027th\u0027,[_v(\"I want to …​\")]),_v(\" \"),_c(\u0027th\u0027,[_v(\"So that I can…​\")])])]),_v(\" \"),_c(\u0027tbody\u0027,[_c(\u0027tr\u0027,[_c(\u0027td\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"* * *\")])]),_v(\" \"),_c(\u0027td\u0027,[_v(\"new user\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"see something\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"visualise something\")])]),_v(\" \"),_c(\u0027tr\u0027,[_c(\u0027td\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"* *\")])]),_v(\" \"),_c(\u0027td\u0027,[_v(\"user\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"do something\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"complete something\")])]),_v(\" \"),_c(\u0027tr\u0027,[_c(\u0027td\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"*\")])]),_v(\" \"),_c(\u0027td\u0027,[_v(\"user with specific information\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"sort something\")]),_v(\" \"),_c(\u0027td\u0027,[_v(\"find something\")])])])])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{More to be added}\")])])}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"use-cases\"}},[_v(\"Use cases\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#use-cases\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"(For all use cases below, the \"),_c(\u0027strong\u0027,[_v(\"System\")]),_v(\" is the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"ProjectEx\")]),_v(\" and the \"),_c(\u0027strong\u0027,[_v(\"Actor\")]),_v(\" is the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"User\")]),_v(\", unless specified otherwise)\")])}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{More to be added}\")])])}"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"non-functional-requirements\"}},[_v(\"Non-Functional Requirements\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#non-functional-requirements\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Should work on any \"),_c(\u0027em\u0027,[_v(\"mainstream OS\")]),_v(\" as long as it has Java \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"11\")]),_v(\" or above installed.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.\")])])}"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{More to be added}\")])])}"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":61}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/SettingUp.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to help developers with setting up the project in their local environment.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"warning\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Caution:\")]),_v(\"\\nFollow the steps in the following guide precisely. Things will not work out if you deviate in some steps.\")])]),_v(\" \"),_m(2),_v(\" \"),_c(\u0027p\u0027,[_c(\u0027popover\u0027,{attrs:{\"id\":\"pop:trigger_id\"},scopedSlots:_u([{key:\"content\",fn:function(){return [_v(\"eg. \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"init\")]),_v(\" or \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"build\")]),_v(\" commands\")]},proxy:true}])}),_v(\"\\n(Example) Steps to setup the project environment:\")],1),_v(\" \"),_c(\u0027ol\u0027,[_m(3),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Run setup commands\")]),_v(\": Run \"),_c(\u0027trigger\u0027,{attrs:{\"for\":\"pop:trigger_id\"}},[_v(\"commands\")]),_v(\" needed to setup the project.\"),_c(\u0027box\u0027,{attrs:{\"type\":\"warning\",\"seamless\":\"\"}},[_v(\"\\nNote: Remember to run commands from the appropriate directory.\\n\")])],1),_v(\" \"),_m(4),_v(\" \"),_m(5)]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_m(6),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_m(7),_v(\" \"),_c(\u0027p\u0027,[_v(\"Configure your VSCode or IDEA checkstyle to allign with the project\u0027s coding style.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\"\\nYou can easily customize your IDE\u0027s coding style through settings.\")])])],1),_v(\" \"),_m(8),_v(\" \"),_m(9),_v(\" \"),_m(10)])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#setting-up-and-getting-started\"}},[_v(\"Setting up and getting started‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#setting-up-the-project-in-your-computer\"}},[_v(\"Setting up the project in your computer‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#before-writing-code\"}},[_v(\"Before writing code‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(11)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"setting-up-and-getting-started\"}},[_v(\"Setting up and getting started\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#setting-up-and-getting-started\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"setting-up-the-project-in-your-computer\"}},[_v(\"Setting up the project in your computer\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#setting-up-the-project-in-your-computer\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"First, \"),_c(\u0027strong\u0027,[_v(\"fork\")]),_v(\" the project repo, and \"),_c(\u0027strong\u0027,[_v(\"clone\")]),_v(\" the fork into your computer.\")])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Download packages\")]),_v(\": Run \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm install\")]),_v(\" to download the required packages.\")])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Configure files\")]),_v(\": Edit config files according to your needs. For example, changing the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"appTitle\")]),_v(\" in \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"config.js\")]),_v(\" to match your project name.\")])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Verify the setup (optional)\")]),_v(\":\\n\"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Run the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"build\")]),_v(\" and \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"serve\")]),_v(\" commands, ensuring that the site properly deploys on your local host.\")]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Run the tests\")]),_v(\" to ensure they all pass.\")])])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"before-writing-code\"}},[_v(\"Before writing code\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#before-writing-code\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Configure the coding style\")])])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Set up CI\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"This project comes with a GitHub Actions config files (in \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\".github/workflows\")]),_v(\" folder). When GitHub detects those files, it will run the CI for your project automatically at each push to the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"master\")]),_v(\" branch or to any PR. No set up required.\")])])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Learn the design\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"When you are ready to start coding, we recommend that you get some sense of the overall design by reading about \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html#Architecture\"}},[_v(\"ProjectEx’s architecture\")]),_v(\".\")])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Do the tutorial\")])]),_v(\" \"),_c(\u0027p\u0027,[_v(\"The \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tracing Code tutorial\")]),_v(\" can help you get acquainted with the codebase.\")])])}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":43}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/Testing.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be used to understand the testing processes.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_m(3),_v(\" \"),_c(\u0027p\u0027,[_v(\"This project has two types of tests:\")]),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"1. Unit tests\")])])]},proxy:true}])},[_v(\"\\nThese tests target the lowest level methods/classes.\"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"Example command (replace with your own): \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run test\")])])]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"2. Integration tests\")])])]},proxy:true}])},[_v(\"\\nThese tests are checking the integration of multiple code units (those code units are assumed to be working).\\n\")])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#testing-guide\"}},[_v(\"Testing guide‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#running-tests\"}},[_v(\"Running tests‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#types-of-tests\"}},[_v(\"Types of tests‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(4)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"testing-guide\"}},[_v(\"Testing guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#testing-guide\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"running-tests\"}},[_v(\"Running tests\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#running-tests\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027strong\u0027,[_v(\"Method 1: Using script\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Create script for running tests in package.json\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Open a console and run the command for the script, like \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run test\")])])])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"types-of-tests\"}},[_v(\"Types of tests\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#types-of-tests\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":22}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/developerGuide/TracingCode.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_m(1),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis page can be taken as a reference on a tutorial on how to trace the execution path of a user command through the codebase of the App.\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"To understand an unfamiliar codebase, one strategy is to trace some representative execution path through the codebase using a debugger.\")]),_v(\" \"),_m(2),_v(\" \"),_c(\u0027p\u0027,[_v(\"Before we jump into the code, it is useful to get an idea of the overall structure and the high-level behavior of the application.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_v(\"Architecture diagrams can be easily utilised with the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams\"}},[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"puml\")])]),_v(\" tag. The \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"src\")]),_v(\" attribute specifies the path to the PlantUML file.\")])]),_v(\" \"),_c(\u0027pic\u0027,{attrs:{\"src\":\"/diagrams/example.png\",\"width\":\"300\"}}),_v(\" \"),_c(\u0027p\u0027,[_v(\"Before we proceed, ensure that you have done the following:\")]),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_c(\u0027p\u0027,[_v(\"As you know, the first step of debugging is to put in a breakpoint where you want the debugger to pause the execution.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\" You can use a combination of Markbind\u0027s \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/components/imagesAndDiagrams.html\"}},[_c(\u0027strong\u0027,[_v(\"Images and Diagrams\")]),_v(\" features\")]),_v(\" such as \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"puml\")]),_v(\" and \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"pic\")]),_v(\" tags to provide a visual representation of the steps to be taken. \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/formattingContents.html#code\"}},[_c(\u0027strong\u0027,[_v(\"Code blocks\")])]),_v(\" can also be used as shown below.\")])]),_v(\" \"),_m(5),_m(6),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\" You can use a list of steps to guide the reader through the process of tracing the execution path. This can be done using Markbind\u0027s \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/userGuide/formattingContents.html#lists\"}},[_c(\u0027strong\u0027,[_v(\"Lists\")]),_v(\" feature\")]),_v(\".\")])]),_v(\" \"),_m(7)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#tutorial-tracing-code\"}},[_v(\"Tutorial: Tracing code‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#before-we-start\"}},[_v(\"Before we start‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#setting-a-breakpoint\"}},[_v(\"Setting a breakpoint‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#tracing-the-execution-path\"}},[_v(\"Tracing the execution path‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(8)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"tutorial-tracing-code\"}},[_v(\"Tutorial: Tracing code\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#tutorial-tracing-code\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027blockquote\u0027,[_c(\u0027p\u0027,[_v(\"Indeed, the ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. …​[Therefore,] making it easy to read makes it easier to write.\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"— Robert C. Martin Clean Code: A Handbook of Agile Software Craftsmanship\")])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"before-we-start\"}},[_v(\"Before we start\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#before-we-start\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Read the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html#architecture\"}},[_c(\u0027em\u0027,[_v(\"Architecture\")]),_v(\" section of the DG\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Set up the project in your preferred IDE\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"setting-a-breakpoint\"}},[_v(\"Setting a breakpoint\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#setting-a-breakpoint\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027pre\u0027,[_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs java\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-keyword\"}},[_v(\"public\")]),_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-class\"}},[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-keyword\"}},[_v(\"interface\")]),_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-title\"}},[_v(\"Example\")]),_v(\" \")]),_v(\"{\\n\")]),_c(\u0027span\u0027,[_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\"/**\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" * Executes returns the output.\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" * \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-doctag\"}},[_v(\"@param\")]),_v(\" exampleInput The input as entered by the user.\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" * \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-doctag\"}},[_v(\"@return\")]),_v(\" The example output.\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" * \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-doctag\"}},[_v(\"@throws\")]),_v(\" ExampleException If an error occurs.\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-comment\"}},[_v(\" */\")]),_v(\"\\n\")]),_c(\u0027span\u0027,[_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-function\"}},[_v(\"ExampleOutput \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-title\"}},[_v(\"execute\")]),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-params\"}},[_v(\"(String exampleInput)\")]),_v(\" \"),_c(\u0027span\u0027,{pre:true,attrs:{\"class\":\"hljs-keyword\"}},[_v(\"throws\")]),_v(\" ExampleException\")]),_v(\";\\n\")]),_c(\u0027span\u0027,[_v(\"...\\n\")]),_c(\u0027span\u0027,[_v(\"}\\n\")])])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"tracing-the-execution-path\"}},[_v(\"Tracing the execution path\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#tracing-the-execution-path\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Firstly, do this.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Next, do that.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Finally, do this.\")])])])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":34}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/index.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_m(1),_v(\" \"),_c(\u0027pic\u0027,{staticStyle:{\"margin-bottom\":\"20px\"},attrs:{\"src\":\"/images/SeEduLogo.png\",\"width\":\"200px\"}},[_v(\"\\nProject Onboarding Screen\\n\")]),_v(\" \"),_m(2),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_c(\u0027p\u0027,[_v(\"Take this template as a \"),_c(\u0027em\u0027,[_v(\"starting point\")]),_v(\" for your project documentation, taking reference of what would be in a typical project documentation site, replacing the content with your own.\")])]),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nRemember to replace the following with your own acknowledgements.\\n\")]),_v(\" \"),_m(5)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(6)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"projectex\"}},[_v(\"ProjectEx\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#projectex\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/MarkBind/markbind/actions\"}},[_c(\u0027img\u0027,{staticClass:\"img-fluid\",attrs:{\"src\":\"https://github.com/MarkBind/markbind/workflows/CI/badge.svg\",\"alt\":\"CI Status\"}})]),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://codecov.io/gh/MarkBind/markbind\"}},[_c(\u0027img\u0027,{staticClass:\"img-fluid\",attrs:{\"src\":\"https://codecov.io/gh/MarkBind/markbind/branch/master/graph/badge.svg\",\"alt\":\"codecov\"}})])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation.\")])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"If you are interested in using ProjectEx, head over to the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_c(\u0027em\u0027,[_v(\"Quick Start\")]),_v(\" section of the \"),_c(\u0027strong\u0027,[_v(\"User Guide\")])]),_v(\".\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"If you are interested about contributing to developing ProjectEx, the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_c(\u0027strong\u0027,[_v(\"Developer Guide\")])]),_v(\" is a good place to start.\")])])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Acknowledgements\")])])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Libraries used: \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://openjfx.io/\"}},[_v(\"JavaFX\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/FasterXML/jackson\"}},[_v(\"Jackson\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/junit-team/junit5\"}},[_v(\"JUnit5\")])])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":28}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/bootstrap.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@charset \"UTF-8\";/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Bootstrap v5.1.3 (https://getbootstrap.com/)"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2021 The Bootstrap Authors"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2021 Twitter, Inc."},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a\u003ecode{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role\u003dbutton]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type\u003dbutton],[type\u003dreset],[type\u003dsubmit],button{-webkit-appearance:button}[type\u003dbutton]:not(:disabled),[type\u003dreset]:not(:disabled),[type\u003dsubmit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type\u003dsearch]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote\u003e:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row\u003e*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-1\u003e*{flex:0 0 auto;width:100%}.row-cols-2\u003e*{flex:0 0 auto;width:50%}.row-cols-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-4\u003e*{flex:0 0 auto;width:25%}.row-cols-5\u003e*{flex:0 0 auto;width:20%}.row-cols-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-sm-1\u003e*{flex:0 0 auto;width:100%}.row-cols-sm-2\u003e*{flex:0 0 auto;width:50%}.row-cols-sm-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4\u003e*{flex:0 0 auto;width:25%}.row-cols-sm-5\u003e*{flex:0 0 auto;width:20%}.row-cols-sm-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-md-1\u003e*{flex:0 0 auto;width:100%}.row-cols-md-2\u003e*{flex:0 0 auto;width:50%}.row-cols-md-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4\u003e*{flex:0 0 auto;width:25%}.row-cols-md-5\u003e*{flex:0 0 auto;width:20%}.row-cols-md-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-lg-1\u003e*{flex:0 0 auto;width:100%}.row-cols-lg-2\u003e*{flex:0 0 auto;width:50%}.row-cols-lg-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4\u003e*{flex:0 0 auto;width:25%}.row-cols-lg-5\u003e*{flex:0 0 auto;width:20%}.row-cols-lg-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-xl-1\u003e*{flex:0 0 auto;width:100%}.row-cols-xl-2\u003e*{flex:0 0 auto;width:50%}.row-cols-xl-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4\u003e*{flex:0 0 auto;width:25%}.row-cols-xl-5\u003e*{flex:0 0 auto;width:20%}.row-cols-xl-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto\u003e*{flex:0 0 auto;width:auto}.row-cols-xxl-1\u003e*{flex:0 0 auto;width:100%}.row-cols-xxl-2\u003e*{flex:0 0 auto;width:50%}.row-cols-xxl-3\u003e*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4\u003e*{flex:0 0 auto;width:25%}.row-cols-xxl-5\u003e*{flex:0 0 auto;width:20%}.row-cols-xxl-6\u003e*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table\u003e:not(caption)\u003e*\u003e*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table\u003etbody{vertical-align:inherit}.table\u003ethead{vertical-align:bottom}.table\u003e:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm\u003e:not(caption)\u003e*\u003e*{padding:.25rem .25rem}.table-bordered\u003e:not(caption)\u003e*{border-width:1px 0}.table-bordered\u003e:not(caption)\u003e*\u003e*{border-width:0 1px}.table-borderless\u003e:not(caption)\u003e*\u003e*{border-bottom-width:0}.table-borderless\u003e:not(:first-child){border-top-width:0}.table-striped\u003etbody\u003etr:nth-of-type(odd)\u003e*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover\u003etbody\u003etr:hover\u003e*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type\u003dfile]{overflow:hidden}.form-control[type\u003dfile]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23343a40\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M2 5l6 6 6-6\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size\u003d\"1\"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type\u003dcheckbox]{border-radius:.25em}.form-check-input[type\u003dradio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type\u003dcheckbox]{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 20 20\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23fff\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00273\u0027 d\u003d\u0027M6 10l3 3l6-6\u0027/%3e%3c/svg%3e\")}.form-check-input:checked[type\u003dradio]{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00272\u0027 fill\u003d\u0027%23fff\u0027/%3e%3c/svg%3e\")}.form-check-input[type\u003dcheckbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 20 20\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23fff\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00273\u0027 d\u003d\u0027M6 10h8\u0027/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00273\u0027 fill\u003d\u0027rgba%280, 0, 0, 0.25%29\u0027/%3e%3c/svg%3e\");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00273\u0027 fill\u003d\u0027%2386b7fe\u0027/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u0027-4 -4 8 8\u0027%3e%3ccircle r\u003d\u00273\u0027 fill\u003d\u0027%23fff\u0027/%3e%3c/svg%3e\")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating\u003e.form-control,.form-floating\u003e.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating\u003elabel{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating\u003elabel{transition:none}}.form-floating\u003e.form-control{padding:1rem .75rem}.form-floating\u003e.form-control::-moz-placeholder{color:transparent}.form-floating\u003e.form-control::placeholder{color:transparent}.form-floating\u003e.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:focus,.form-floating\u003e.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating\u003e.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating\u003e.form-control:focus~label,.form-floating\u003e.form-control:not(:placeholder-shown)~label,.form-floating\u003e.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating\u003e.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group\u003e.form-control,.input-group\u003e.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group\u003e.form-control:focus,.input-group\u003e.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg\u003e.btn,.input-group-lg\u003e.form-control,.input-group-lg\u003e.form-select,.input-group-lg\u003e.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm\u003e.btn,.input-group-sm\u003e.form-control,.input-group-sm\u003e.form-select,.input-group-sm\u003e.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg\u003e.form-select,.input-group-sm\u003e.form-select{padding-right:3rem}.input-group:not(.has-validation)\u003e.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)\u003e:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation\u003e.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation\u003e:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group\u003e:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 8 8\u0027%3e%3cpath fill\u003d\u0027%23198754\u0027 d\u003d\u0027M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size\u003d\"1\"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size\u003d\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23343a40\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M2 5l6 6 6-6\u0027/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 8 8\u0027%3e%3cpath fill\u003d\u0027%23198754\u0027 d\u003d\u0027M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z\u0027/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 12 12\u0027 width\u003d\u002712\u0027 height\u003d\u002712\u0027 fill\u003d\u0027none\u0027 stroke\u003d\u0027%23dc3545\u0027%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00276\u0027 r\u003d\u00274.5\u0027/%3e%3cpath stroke-linejoin\u003d\u0027round\u0027 d\u003d\u0027M5.8 3.6h.4L6 6.5z\u0027/%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00278.2\u0027 r\u003d\u0027.6\u0027 fill\u003d\u0027%23dc3545\u0027 stroke\u003d\u0027none\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size\u003d\"1\"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size\u003d\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027%3e%3cpath fill\u003d\u0027none\u0027 stroke\u003d\u0027%23343a40\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-linejoin\u003d\u0027round\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M2 5l6 6 6-6\u0027/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 12 12\u0027 width\u003d\u002712\u0027 height\u003d\u002712\u0027 fill\u003d\u0027none\u0027 stroke\u003d\u0027%23dc3545\u0027%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00276\u0027 r\u003d\u00274.5\u0027/%3e%3cpath stroke-linejoin\u003d\u0027round\u0027 d\u003d\u0027M5.8 3.6h.4L6 6.5z\u0027/%3e%3ccircle cx\u003d\u00276\u0027 cy\u003d\u00278.2\u0027 r\u003d\u0027.6\u0027 fill\u003d\u0027%23dc3545\u0027 stroke\u003d\u0027none\u0027/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show\u003e.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show\u003e.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show\u003e.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show\u003e.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show\u003e.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show\u003e.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show\u003e.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show\u003e.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show\u003e.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show\u003e.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show\u003e.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show\u003e.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show\u003e.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show\u003e.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show\u003e.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show\u003e.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg\u003e.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm\u003e.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical\u003e.btn,.btn-group\u003e.btn{position:relative;flex:1 1 auto}.btn-group-vertical\u003e.btn-check:checked+.btn,.btn-group-vertical\u003e.btn-check:focus+.btn,.btn-group-vertical\u003e.btn.active,.btn-group-vertical\u003e.btn:active,.btn-group-vertical\u003e.btn:focus,.btn-group-vertical\u003e.btn:hover,.btn-group\u003e.btn-check:checked+.btn,.btn-group\u003e.btn-check:focus+.btn,.btn-group\u003e.btn.active,.btn-group\u003e.btn:active,.btn-group\u003e.btn:focus,.btn-group\u003e.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group\u003e.btn-group:not(:first-child),.btn-group\u003e.btn:not(:first-child){margin-left:-1px}.btn-group\u003e.btn-group:not(:last-child)\u003e.btn,.btn-group\u003e.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group\u003e.btn-group:not(:first-child)\u003e.btn,.btn-group\u003e.btn:nth-child(n+3),.btn-group\u003e:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm\u003e.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg\u003e.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical\u003e.btn,.btn-group-vertical\u003e.btn-group{width:100%}.btn-group-vertical\u003e.btn-group:not(:first-child),.btn-group-vertical\u003e.btn:not(:first-child){margin-top:-1px}.btn-group-vertical\u003e.btn-group:not(:last-child)\u003e.btn,.btn-group-vertical\u003e.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical\u003e.btn-group:not(:first-child)\u003e.btn,.btn-group-vertical\u003e.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show\u003e.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill\u003e.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified\u003e.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content\u003e.tab-pane{display:none}.tab-content\u003e.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar\u003e.container,.navbar\u003e.container-fluid,.navbar\u003e.container-lg,.navbar\u003e.container-md,.navbar\u003e.container-sm,.navbar\u003e.container-xl,.navbar\u003e.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show\u003e.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 30 30\u0027%3e%3cpath stroke\u003d\u0027rgba%280, 0, 0, 0.55%29\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-miterlimit\u003d\u002710\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M4 7h22M4 15h22M4 23h22\u0027/%3e%3c/svg%3e\")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show\u003e.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 30 30\u0027%3e%3cpath stroke\u003d\u0027rgba%28255, 255, 255, 0.55%29\u0027 stroke-linecap\u003d\u0027round\u0027 stroke-miterlimit\u003d\u002710\u0027 stroke-width\u003d\u00272\u0027 d\u003d\u0027M4 7h22M4 15h22M4 23h22\u0027/%3e%3c/svg%3e\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card\u003ehr{margin-right:0;margin-left:0}.card\u003e.list-group{border-top:inherit;border-bottom:inherit}.card\u003e.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card\u003e.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card\u003e.card-header+.list-group,.card\u003e.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group\u003e.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group\u003e.card{flex:1 0 0%;margin-bottom:0}.card-group\u003e.card+.card{margin-left:0;border-left:0}.card-group\u003e.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group\u003e.card:not(:last-child) .card-header,.card-group\u003e.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group\u003e.card:not(:last-child) .card-footer,.card-group\u003e.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group\u003e.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group\u003e.card:not(:first-child) .card-header,.card-group\u003e.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group\u003e.card:not(:first-child) .card-footer,.card-group\u003e.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%230c63e4\u0027%3e%3cpath fill-rule\u003d\u0027evenodd\u0027 d\u003d\u0027M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\u0027/%3e%3c/svg%3e\");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:\"\";background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23212529\u0027%3e%3cpath fill-rule\u003d\u0027evenodd\u0027 d\u003d\u0027M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\u0027/%3e%3c/svg%3e\");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, \"/\")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered\u003eli::before{content:counters(section, \".\") \". \";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal\u003e.list-group-item.active{margin-top:0}.list-group-horizontal\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-sm\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-md\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-lg\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-xl\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl\u003e.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl\u003e.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl\u003e.list-group-item.active{margin-top:0}.list-group-horizontal-xxl\u003e.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl\u003e.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush\u003e.list-group-item{border-width:0 0 1px}.list-group-flush\u003e.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23000\u0027%3e%3cpath d\u003d\u0027M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z\u0027/%3e%3c/svg%3e\") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container\u003e:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer\u003e*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^\u003dtop],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^\u003dtop] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^\u003dtop] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^\u003dright],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^\u003dright] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^\u003dright] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^\u003dbottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^\u003dbottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^\u003dbottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^\u003dleft],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^\u003dleft] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^\u003dleft] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^\u003dtop]\u003e.popover-arrow,.bs-popover-top\u003e.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^\u003dtop]\u003e.popover-arrow::before,.bs-popover-top\u003e.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dtop]\u003e.popover-arrow::after,.bs-popover-top\u003e.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^\u003dright]\u003e.popover-arrow,.bs-popover-end\u003e.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^\u003dright]\u003e.popover-arrow::before,.bs-popover-end\u003e.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dright]\u003e.popover-arrow::after,.bs-popover-end\u003e.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^\u003dbottom]\u003e.popover-arrow,.bs-popover-bottom\u003e.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^\u003dbottom]\u003e.popover-arrow::before,.bs-popover-bottom\u003e.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dbottom]\u003e.popover-arrow::after,.bs-popover-bottom\u003e.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^\u003dbottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^\u003dleft]\u003e.popover-arrow,.bs-popover-start\u003e.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^\u003dleft]\u003e.popover-arrow::before,.bs-popover-start\u003e.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^\u003dleft]\u003e.popover-arrow::after,.bs-popover-start\u003e.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23fff\u0027%3e%3cpath d\u003d\u0027M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\u0027/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 16 16\u0027 fill\u003d\u0027%23fff\u0027%3e%3cpath d\u003d\u0027M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\u0027/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:\"\"}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:\"\"}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio\u003e*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"/*# sourceMappingURL\u003dbootstrap.min.css.map */"}],"authorContributionMap":{"KevinEyo1":7}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"KevinEyo1":2}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/codeblock-light.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8ff}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#e6e6fa}.hljs.inline{background:#f8f8f8}.hljs.inline.no-lang{color:#e83e8c}.hljs:not(.inline){border:1px solid #c8c8c8;border:1px solid rgba(200,200,200,.3)}.code-block-heading{background:#f2f2ff;color:#8787a5}button.function-btn{background-color: #f8f8ff}"}],"authorContributionMap":{"KevinEyo1":2}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/markbind.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".resize-observer[data-v-8859cc6c]{background-color:transparent;border:none;opacity:0}.resize-observer[data-v-8859cc6c],.resize-observer[data-v-8859cc6c] object{display:block;height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.v-popper__popper{left:0;top:0;z-index:10000}.v-popper__popper.v-popper__popper--hidden{opacity:0;pointer-events:none;transition:opacity .15s,visibility .15s;visibility:hidden}.v-popper__popper.v-popper__popper--shown{opacity:1;transition:opacity .15s;visibility:visible}.v-popper__popper.v-popper__popper--skip-transition,.v-popper__popper.v-popper__popper--skip-transition\u003e.v-popper__wrapper{transition:none!important}.v-popper__backdrop{display:none;height:100%;left:0;position:absolute;top:0;width:100%}.v-popper__inner{box-sizing:border-box;overflow-y:auto;position:relative}.v-popper__inner\u003ediv{max-height:inherit;max-width:inherit;position:relative;z-index:1}.v-popper__arrow-container{height:10px;position:absolute;width:10px}.v-popper__popper--arrow-overflow .v-popper__arrow-container,.v-popper__popper--no-positioning .v-popper__arrow-container{display:none}.v-popper__arrow-inner,.v-popper__arrow-outer{border-style:solid;height:0;left:0;position:absolute;top:0;width:0}.v-popper__arrow-inner{border-width:7px;visibility:hidden}.v-popper__arrow-outer{border-width:6px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-inner{left:-2px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-outer{left:-1px}.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-bottom-width:0;border-left-color:transparent!important;border-right-color:transparent!important}.v-popper__popper[data-popper-placement^\u003dtop] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-container{top:0}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-outer{border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;border-top-width:0}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-inner{top:-4px}.v-popper__popper[data-popper-placement^\u003dbottom] .v-popper__arrow-outer{top:-6px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-outer{top:-1px}.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-left-color:transparent!important;border-left-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-inner{left:-4px}.v-popper__popper[data-popper-placement^\u003dright] .v-popper__arrow-outer{left:-6px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-container{right:-10px}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-right-color:transparent!important;border-right-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^\u003dleft] .v-popper__arrow-inner{left:-2px}.v-popper--theme-dropdown .v-popper__inner{background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 6px 30px #0000001a;color:#000}.v-popper--theme-dropdown .v-popper__arrow-inner{border-color:#fff;visibility:visible}.v-popper--theme-dropdown .v-popper__arrow-outer{border-color:#ddd}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.8);border-radius:6px;color:#fff;padding:7px 12px 6px}.v-popper--theme-tooltip .v-popper__arrow-outer{border-color:#000c}.box-container[data-v-0eabf1c4]{border-radius:6px;padding:0}.box-header-wrapper[data-v-0eabf1c4]{align-items:center;border-radius:6px 6px 0 0;display:flex;flex-direction:row;padding:.4rem 1.25rem .28rem;width:100%}.box-body-wrapper[data-v-0eabf1c4]{display:flex;flex-direction:row;padding:.75rem 1.25rem;width:100%}.box-container.seamless\u003e.header-and-body\u003e.box-body-wrapper[data-v-0eabf1c4]{padding:.75rem .5rem}.contents[data-v-0eabf1c4]{min-width:0;padding:0 6px;width:100%}.box-container.seamless\u003e.header-and-body\u003ediv.box-body-wrapper\u003e.contents[data-v-0eabf1c4]{padding-left:12px}.heading[data-v-0eabf1c4]{background-color:hsla(0,0%,94%,.6);border-radius:0 6px;border-width:0;color:inherit;display:inline;float:right;font-weight:400;margin:-13px -27px 0 15px;padding:3px 5px 4px;width:auto}.box-body-wrapper-with-heading[data-v-0eabf1c4]{padding-top:.5rem}.alert-dismissible[data-v-0eabf1c4]{padding-right:4rem}.box-header[data-v-0eabf1c4]{font-weight:500}.icon-wrapper[data-v-0eabf1c4]{display:inline;margin-right:.5em;min-width:1em;text-align:center}.close-with-heading[data-v-0eabf1c4]{padding:1rem;position:absolute;right:0;top:0}.close-with-heading\u003espan[data-v-0eabf1c4]{vertical-align:text-top}.alert-dismissible .btn-close[data-v-0eabf1c4]{padding:1rem}.contents[data-v-0eabf1c4]\u003e:last-child{margin-bottom:0}.alert-default[data-v-0eabf1c4]{background-color:#f6f8fa;border-color:#e8ebef;color:#24292e}.alert-border-left[data-v-0eabf1c4]{background-color:#f9f8f8;border-left:solid;border-width:0 0 0 5px}.vertical-divider[data-v-0eabf1c4]{width:4px}.horizontal-divider[data-v-0eabf1c4]{height:3px;margin:0 auto;width:calc(100% - 2.5rem)}.no-background[data-v-0eabf1c4]{background:none}.no-border[data-v-0eabf1c4]{border:none}@media screen and (width \u003c\u003d 768px){.box-header-wrapper[data-v-0eabf1c4]{padding:.75rem .75rem .1rem}.box-body-wrapper[data-v-0eabf1c4]{padding:.75rem}.contents[data-v-0eabf1c4]{padding:0}}div.box-header\u003e*{margin-bottom:0}.notlink[data-v-ef898034]{color:#6d757d}.breadcrumb-divider[data-v-ef898034]{--bs-breadcrumb-divider:\"›\"}.breadcrumb-item[data-v-ef898034]:before,.breadcrumb-marker[data-v-ef898034]{font-size:15px}.dropdown-submenu[data-v-3c82541c]{color:#212529!important;padding:0!important;position:relative}.dropdown-submenu ul.dropdown-menu[data-v-3c82541c]{margin-left:0}.btn-group\u003eul\u003e.dropdown-submenu:last-child\u003eul[data-v-3c82541c],.dropdown\u003eul\u003e.dropdown-submenu:last-child\u003eul[data-v-3c82541c]{margin-bottom:-.5rem}@media (width \u003e\u003d 768px){.submenu-toggle[data-v-3c82541c]:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:\"\";display:inline-block;float:right;height:0;margin-top:.5em;vertical-align:.255em;width:0}}@media (width \u003c\u003d 767px){.dropdown-submenu\u003eul[data-v-3c82541c]{border-radius:0;float:none;margin:-.05rem;padding-bottom:0;position:static}.submenu-toggle[data-v-3c82541c]:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:\"\";display:inline-block;float:right;height:0;margin-left:.255em;margin-top:.5em;vertical-align:.255em;width:0}.navbar-default .dropdown[data-v-ccda25c0]{position:static}.navbar-default .dropdown-menu[data-v-ccda25c0]{max-height:75vh;max-width:100%;overflow-y:auto;overscroll-behavior:contain;position:absolute}.navbar-default .dropdown-menu-end[data-v-ccda25c0]{right:auto}}.secret[data-v-ccda25c0]{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.btn-with-before[data-v-ccda25c0]{padding-left:.2rem;padding-right:.4rem}.dropdown-toggle[data-v-ccda25c0]{cursor:pointer;display:block;width:max-content}.navbar .dropdown-toggle[data-v-ccda25c0]{text-decoration:none}.nav-link\u003e.nav-link[data-v-ccda25c0]{padding:0}.toggle-site-nav-button[data-v-d6ffaa8e]{cursor:pointer;height:53px;left:0;padding:15px;position:absolute;transform:rotate(0deg);transition:all .25s ease-in-out;width:52px}.toggle-site-nav-button span[data-v-d6ffaa8e]{background-color:#000;display:block;height:3px;left:15px;position:absolute;top:50%;transition:all .25s ease-in-out;width:21px}.toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:first-child{transform:translateY(-8px)}.toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(2){transform-origin:100% 50%}.toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:first-child{transform:rotate(135deg)}.nav-menu-close-icon .toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(2){left:-60px;opacity:0}.nav-menu-close-icon .toggle-site-nav-button\u003espan[data-v-d6ffaa8e]:nth-child(3){transform:rotate(-135deg)}.toggle-page-nav-button[data-v-4b08b1df]{cursor:pointer;padding:15px;position:absolute;right:0;top:6px}.toggle-page-nav-button span[data-v-4b08b1df]{background-color:#000;border-radius:50%;display:block;height:5px;margin-top:2px;position:absolute;right:15px;transform:rotate(0deg);transition:all .25s ease-in-out;width:5px}.toggle-page-nav-button\u003espan[data-v-4b08b1df]:first-child{transform:translateY(-8px)}.toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(2){transform-origin:100% 50%}.toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(3){transform:translateY(8px)}.nav-menu-close-icon .toggle-page-nav-button\u003espan[data-v-4b08b1df]:first-child{border-radius:0;height:3px;transform:rotate(135deg);width:21px}.nav-menu-close-icon .toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(2){transform:scale(0)}.nav-menu-close-icon .toggle-page-nav-button\u003espan[data-v-4b08b1df]:nth-child(3){border-radius:0;height:3px;transform:rotate(-135deg);width:21px}@media (width \u003c\u003d 767px){.navbar[data-v-7c0fd418]{padding-bottom:0;padding-left:0;padding-right:0}.navbar-left[data-v-7c0fd418]{max-width:50%;order:1;padding-left:1rem}.navbar-left [data-v-7c0fd418]{white-space:normal}.navbar-right[data-v-7c0fd418]{max-width:50%;order:1;padding:0 16px}.navbar-default[data-v-7c0fd418]{-ms-overflow-style:none;display:block;margin-top:.3125rem;order:2;overflow-x:scroll;scrollbar-width:none;width:100%}.navbar-default[data-v-7c0fd418]::-webkit-scrollbar{display:none}.navbar-default ul[data-v-7c0fd418]{flex-direction:row;margin-top:0!important;width:100%}.navbar-default\u003eul\u003e[data-v-7c0fd418]{background:rgba(0,0,0,.2);flex-grow:1;padding:.3125rem .625rem}.navbar-light .navbar-default\u003eul\u003e[data-v-7c0fd418]{background:rgb(0 0 0/5%)}.navbar-default\u003eul\u003e.current[data-v-7c0fd418]{background:transparent}.navbar-default a[data-v-7c0fd418],[data-v-7c0fd418] .dropdown-toggle{margin:0 auto;width:max-content}[data-v-7c0fd418] .dropdown{align-items:center;display:flex}.container-fluid[data-v-7c0fd418]{padding:0}}.navbar-brand[data-v-7c0fd418]{display:inline-block}.navbar-brand\u003eimg[data-v-7c0fd418],.navbar-brand\u003esvg[data-v-7c0fd418]{display:block}.navbar-right[data-v-7c0fd418]{padding-right:1rem}.navbar-left[data-v-7c0fd418]{align-items:center;display:flex;font-size:1.25rem;line-height:inherit;padding:.3125rem 1rem;white-space:nowrap}.navbar-fixed[data-v-7c0fd418]{position:fixed;width:100%;z-index:1000}.navbar-default[data-v-7c0fd418]{align-items:center;display:flex;flex-basis:auto;flex-grow:1}[data-v-7c0fd418] .dropdown-current{background:#007bff;color:#fff!important}.lower-navbar-container[data-v-7c0fd418]{background-color:#fff;border-bottom:1px solid #c1c1c1;height:50px;position:relative;width:100%}.navbar.navbar-dark .navbar-nav[data-v-7c0fd418] .current:not(.dropdown) a,.navbar.navbar-dark .navbar-nav[data-v-7c0fd418] .dropdown.current\u003ea{color:#fff}.navbar.navbar-light .navbar-nav[data-v-7c0fd418] .current:not(.dropdown) a,.navbar.navbar-light .navbar-nav[data-v-7c0fd418] .dropdown.current\u003ea{color:#000}.collapse-button{float:right;font-size:10px!important;margin-left:3px;margin-top:2px;padding:3px 8px!important}.collapse-icon{transition:transform .4s ease-in-out}.collapse-icon.opened{transform:rotate(-180deg)}.card-container[data-v-3602e6fc]{scroll-margin-top:var(--sticky-header-height)}.card-collapse[data-v-3602e6fc]{overflow:hidden;transition:max-height .5s ease-in-out}.seamless-button[data-v-3602e6fc]{opacity:0;transition:opacity .3s}.card-header:hover .seamless-button[data-v-3602e6fc]{opacity:1}.card-peek-collapsed[data-v-3602e6fc]{position:relative}.card-peek-collapsed[data-v-3602e6fc]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:\"\";height:125px;position:absolute;width:100%}.peek-read-more[data-v-3602e6fc]{opacity:.2;transition:opacity .5s;z-index:1}.peek-read-more[data-v-3602e6fc]:before{bottom:10px;position:absolute;text-align:center;width:100%}.peek-read-more[data-v-3602e6fc]:hover{cursor:pointer;opacity:.4}.peek-read-more-fade-enter[data-v-3602e6fc],.peek-read-more-fade-leave-to[data-v-3602e6fc]{opacity:0}.card-heading{width:100%}.card-title{display:inline-block;font-size:1em;line-height:1.2em;margin:0;text-align:left;white-space:normal}.card-title *{margin-bottom:0!important}.caret-wrapper{float:left;width:32px}.minimal-caret-wrapper{display:inline-block;font-size:13px;margin-right:5px}.header-wrapper{display:inline-block;transition:opacity .5s;width:calc(100% - 128px)}.header-transparent{opacity:0}.button-wrapper{float:right;width:96px}.header-toggle{cursor:pointer}.expandable-card{margin-bottom:0!important;margin-top:5px}.card-collapse\u003ehr{margin-top:0}.card-group\u003e.card-container\u003e.expandable-card{margin-top:0!important}.bottom-button-wrapper{margin-bottom:13px;padding-bottom:13px}.bottom-button-wrapper\u003e.collapse-button{margin-top:5px;opacity:.2}.bottom-button-wrapper\u003e.collapse-button:hover{opacity:1}.close-button{margin-left:3px}.close-button,.popup-button{float:right;font-size:10px!important;margin-top:2px;padding:3px 8px!important}.morph{display:inline-block}.morph-display-wrapper{align-items:center;display:flex;margin-top:5px}@media (width \u003c\u003d 575.98px){.header-wrapper{display:inline-block;width:calc(100% - 64px)}.button-wrapper{float:right;width:32px}.card-body{padding:.5rem}.card-collapse\u003ehr{margin-top:.5rem}.card-header{padding:.5rem}}.card-peek-collapsed[data-v-6cec1f15]{position:relative}.card-peek-collapsed[data-v-6cec1f15]:after{background-image:linear-gradient(180deg,transparent,#fff 90%);bottom:0;content:\"\";height:125px;position:absolute;width:100%}.morph-title[data-v-6cec1f15]{background-color:transparent;border-color:#000;padding:0 .3em;vertical-align:top}.morph-title[data-v-6cec1f15]:active,.morph-title[data-v-6cec1f15]:focus,.morph-title[data-v-6cec1f15]:hover{background-color:#343a40;border-color:#343a40;color:#fff}.card-collapse[data-v-6cec1f15]{overflow:hidden;transition:max-height .5s ease-in-out}.card-flex[data-v-6cec1f15]{border:0;display:flex;flex-direction:column;margin:0}.header-fade-enter[data-v-6cec1f15]{opacity:0}.header-fade-leave-active[data-v-6cec1f15]{position:absolute}.header-fade-leave-to[data-v-6cec1f15]{opacity:0!important}.card-title-inline[data-v-6cec1f15]{display:inline-block}.card-body[data-v-6cec1f15]{padding:0}.header-wrapper[data-v-6cec1f15]{background-color:#fff;display:inline-block;width:100%}.header-wrapper-bottom[data-v-6cec1f15]{order:1}.ellipses[data-v-6cec1f15]:before{bottom:3px;content:\"...\";font-weight:900;margin-right:4px;position:relative}.button-wrapper[data-v-6cec1f15]{border:solid hsla(0,0%,59%,.2);border-width:0 0 0 1px;display:inline-block;float:none;margin-left:2px;opacity:0;padding-left:2px;transition:opacity .5s;vertical-align:text-top;width:auto}.button-wrapper-expanded[data-v-6cec1f15]{border:0;margin-left:0;padding-left:0}.card:hover .button-wrapper[data-v-6cec1f15]{opacity:1}.header-toggle[data-v-6cec1f15]{cursor:pointer}.glyphicon[data-v-6cec1f15]{font-size:12px}.minimal-button[data-v-6cec1f15]{background-color:transparent;border:0;color:#969696;cursor:pointer;padding:0 3px}.minimal-button[data-v-6cec1f15]:active,.minimal-button[data-v-6cec1f15]:focus,.minimal-button[data-v-6cec1f15]:hover{color:#1e1e1e}.minimal-popup-button[data-v-6cec1f15]{font-size:9px;top:1px}.minimal-menu-up[data-v-6cec1f15]{font-size:13px;top:2px}.minimal-menu-down[data-v-6cec1f15]{font-size:13px;top:1px}.minimal-close-button[data-v-6cec1f15]{font-size:11px;top:0}@media (width \u003c\u003d 575.98px){.button-wrapper-expanded[data-v-6cec1f15]{border:0;margin-left:0;opacity:.15;padding-left:0}.button-wrapper-visible[data-v-6cec1f15]{opacity:1}}.annotate-image-wrapper{display:inline-block;position:relative;text-align:left}.annotate-image{height:auto;max-width:100%}.annotate-point{bottom:0;left:0;pointer-events:none;top:0}.annotate-point,.popover-annotation{height:100%;position:absolute;width:100%}.hover-point{border-radius:50%;border-style:solid;border-width:1px;z-index:1}.hover-label{pointer-events:none;position:absolute;text-align:center;z-index:2}.hover-wrapper{align-items:center;background:transparent;display:inline-flex;justify-content:center;z-index:0}.legend-wrapper{height:100%;position:relative}.text-header{font-size:1.1em;font-weight:500;margin-top:1em}.image-wrapper{display:inline-block;padding:4px;text-align:center}.image-caption{display:block}.quiz-container[data-v-2b2275c0]{isolation:isolate;overflow:hidden}.intro-outro-card[data-v-2b2275c0]{transition:transform .35s ease-out,opacity .35s linear}.intro-outro-card-enter-active[data-v-2b2275c0],.intro-outro-card-leave-to[data-v-2b2275c0]{opacity:0}.intro-outro-card\u003e.card-body[data-v-2b2275c0]{align-items:center;display:flex;flex-direction:column;justify-content:center}.score[data-v-2b2275c0]{font-size:1.4rem;font-weight:700}.score-circle[data-v-2b2275c0]{stroke-dasharray:264;fill:none;stroke:rgba(132,215,255,.8);stroke-width:8;transition:stroke-dashoffset 1.5s ease-out,stroke 1.5s linear}.score-background-circle[data-v-2b2275c0]{fill:none;stroke:hsla(0,2%,89%,.5);stroke-width:8}.btn[data-v-2b2275c0]{border-radius:2em}.progress-bar-z[data-v-2b2275c0]{z-index:1}.result-icon[data-v-ae369d74]{align-items:center;border-radius:2em;border-style:solid;border-width:2px;display:inline-flex;height:2em;justify-content:center;width:2em}.question[data-v-ae369d74]{margin-bottom:1rem;transition:transform .35s ease-out,opacity .35s linear}.question-enter-active[data-v-ae369d74]{opacity:0;transform:translateY(-2%)}.question-leave-to[data-v-ae369d74]{opacity:0;transform:translateY(2%)}.q-btn[data-v-ae369d74]{border-radius:2.5em;transition:opacity .5s,transform .7s}.q-btn-enter[data-v-ae369d74]{opacity:0;transform:translateY(30px)}.q-btn-leave-to[data-v-ae369d74]{opacity:0;transform:translateX(calc(-100% - .25rem))}.q-btn-leave-active[data-v-ae369d74]{position:absolute}.card-header[data-v-ae369d74]{font-size:1.05em;font-weight:400}.answer[data-v-ae369d74]\u003e:last-child,.card-header[data-v-ae369d74]\u003e:last-child{margin-bottom:0}@keyframes shake-data-v-ae369d74{50%{transform:translate(-2px)}to{transform:translate(2px)}}.shake[data-v-ae369d74]{animation:shake-data-v-ae369d74 .15s;animation-iteration-count:1}textarea.form-control[data-v-ae369d74]{height:auto;margin-bottom:10px;min-height:75px}.fa-check[data-v-1074287c],.fa-times[data-v-1074287c]{font-size:1.2em}.content[data-v-1074287c] :last-child,.reason[data-v-1074287c] :last-child{margin-bottom:0}.reason[data-v-1074287c]{padding:0 .5rem}.checkbox-label[data-v-1074287c]{cursor:pointer}.form-control[data-v-1074287c]{cursor:pointer;height:auto;margin-bottom:10px}.form-control.danger\u003e.checkbox-label[data-v-1074287c],.form-control.danger[data-v-1074287c],.form-control.success\u003e.checkbox-label[data-v-1074287c],.form-control.success[data-v-1074287c]{cursor:default}.disabled[data-v-1074287c]{opacity:.9}.radio-svg[data-v-1074287c]{height:1em;vertical-align:text-top;width:1em}.checkbox[data-v-1074287c]{height:1em;margin-right:5px;vertical-align:middle;width:1em}.row[data-v-1074287c]{align-items:center;margin:.2rem 0 0}input.form-control[data-v-1074287c]{cursor:text;height:auto;margin-bottom:0;min-height:20px;width:50%}.blanks-keywords[data-v-1074287c],input.form-control[data-v-1074287c]:disabled{margin-bottom:.5rem}.blanks-form-control[data-v-1074287c]{border:none;cursor:default}.blanks-cross[data-v-1074287c]{margin-left:3px;margin-right:3px}.fa-hashtag[data-v-98afe086],.fa-key[data-v-98afe086]{padding-right:.2em}.mark[data-v-98afe086]{padding:0!important}.heading[data-v-98afe086]{padding:0 0 .1rem .2rem}.heading-text[data-v-98afe086]{display:inline-block;vertical-align:top;white-space:normal;width:92%;word-break:break-word}.keyword-text[data-v-98afe086]{font-size:smaller}.page-title[data-v-98afe086]{font-size:1.05rem;font-weight:700}.page-headings-separator[data-v-98afe086]{margin:.2rem 0}.dropdown[data-v-cea1a814]{display:block}.form-control[data-v-cea1a814]{max-width:25.4em;min-width:12.7em}@media screen and (width \u003c\u003d 878px) and (orientation:portrait){.form-control[data-v-cea1a814]{max-width:16em;min-width:8em}}@media screen and (width \u003e\u003d 768px) and (width \u003c\u003d 878px) and (orientation:landscape){.form-control[data-v-cea1a814]{max-width:18em;min-width:9em}}.table-active[data-v-cea1a814]{background-color:rgba(0,0,0,.075)}.dropdown-menu-end[data-v-cea1a814]{left:auto;right:0}.placeholder-div-hidden[data-v-cea1a814]{border-bottom:0;border-top:0;height:0;overflow:hidden;padding-bottom:0;padding-top:0;visibility:hidden}.search-dropdown-menu{max-height:30em;min-width:30em;overflow-y:scroll}.dropdown-menu\u003eli\u003ea{cursor:pointer}@media screen and (width \u003c\u003d 768px){.search-dropdown-menu{max-height:30em;min-width:90vw;overflow-y:scroll}.dropdown-menu.search-dropdown-menu{position:absolute}}.tab-pane\u003ehr[data-v-661c1b61]{margin:0}.printable-tab-header[data-v-661c1b61],.tab-pane-hide[data-v-661c1b61]{display:none}@media print{.printable-tab-header[data-v-661c1b61]{border-bottom:1px solid #dee2e6;display:flex;margin-bottom:15px}.printable-tab-header\u003ediv[data-v-661c1b61]{margin-bottom:-2px}.printable-tab-pane[data-v-661c1b61]{display:block;padding:10px}}.nav-tabs[data-v-a785351c]{margin-bottom:15px}.printable-tab-group-header[data-v-a785351c]{display:none}@media print{.printable-tab-group[data-v-a785351c]{border:1px solid #dee2e6;border-radius:5px;margin:10px 0;padding:10px}.printable-tab-group-header[data-v-a785351c]{display:block;margin-bottom:10px;text-decoration:underline}}.nav-tabs[data-v-70a68808]{margin-bottom:15px}.tab-content[data-v-70a68808]{margin-bottom:1.5rem}@media print{.printable-tabs[data-v-70a68808]{border:1px solid #dee2e6;border-radius:5px;padding:20px}}.thumb-wrapper{display:inline-block;overflow:hidden;position:relative;text-align:center;vertical-align:middle}.thumb-circle{border-radius:50%}.thumb-image{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.site-nav-root a.current{color:#0072ec}.site-nav-list{list-style-type:none;padding-left:0}.site-nav-default-list-item{cursor:pointer;display:flex;transition:background-color .08s}.site-nav-custom-list-item,.site-nav-default-list-item{color:#454545;padding:.5rem 0 0 2.8rem}.site-nav-list-item-0{font-size:1.2em;font-weight:500;padding:.5rem 0 .5rem .8rem}.site-nav-list-item-1{font-size:1.03em;padding:.4rem 0 .4rem 1.3rem}.site-nav-list-item-2{font-size:.89em;padding:.3rem 0 .3rem 1.8rem}.site-nav-list-item-3{font-size:.76em;padding:.2rem 0 .2rem 2.4rem}.site-nav-default-list-item:hover{background-color:rgba(214,233,255,.35)}.site-nav-default-list-item a{color:#454545;display:inline-block;height:100%}.site-nav-default-list-item:hover a{color:#000;text-decoration:none}.site-nav-dropdown-btn-container{display:flex;height:1.5em;margin:0 .75rem 0 auto;place-content:center center;width:2rem}.site-nav-dropdown-btn-icon{align-self:center;border-radius:1rem;display:inline-block;height:1.5em;padding:0;text-align:center;transform:rotate(0deg);transition:.4s;vertical-align:baseline;width:1.5em}.site-nav-dropdown-btn-icon:hover{background-color:#d8e3fb}.site-nav-rotate-icon{color:#4c7ff1;transform:rotate(-180deg)}.site-nav-dropdown-container{background:transparent;max-height:0;overflow:hidden;transition:max-height .15s ease-out}.site-nav-dropdown-container-open{max-height:1000px;transition:max-height .25s ease-in}.nav-menu[data-v-1a3e7aee]{display:none;overflow-y:auto;padding:0 10px 20px;position:absolute;top:100%}.nav-menu-open[data-v-1a3e7aee]{background:#fff;clear:both;display:block!important;width:100%!important}.mb-mobile-nav[data-v-e6005420]{border:none!important;display:block!important;margin:0!important;max-width:100%!important;padding:10px!important;width:100%!important}.popover-container{max-height:50vh;max-width:276px;overflow:auto}.popover-body{font-size:.875rem}.v-popper{display:inline}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.9);font-size:.875rem;max-width:200px;padding:4px 8px;text-align:center}.modal{display:block}.modal-zoom{opacity:0;transform:scale(.1);transition:all .3s}.modal-zoom-show{opacity:1;transform:scale(1);transition:all .3s}.scroll-top-button{bottom:20px;cursor:pointer;display:none;opacity:.4;position:fixed;right:30px;transition-duration:.25s;transition-property:opacity;z-index:99}.scroll-top-button.lighten{opacity:.15}@media (hover:hover){.scroll-top-button:hover{opacity:.7}}.scroll-top-button:active{opacity:1}@media print{.hljs{background:#f8f8ff;color:#333;display:block;overflow-x:auto;padding:.5em}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs span.highlighted{background:#e6e6fa}.hljs.inline{background:#f8f8f8}.hljs.inline.no-lang{color:#e83e8c}.hljs:not(.inline){border:1px solid #c8c8c8;border:1px solid hsla(0,0%,78%,.3)}.code-block-heading{background:#f2f2ff;color:#8787a5}button.function-btn{background-color:#f8f8ff}}:root{--sticky-header-height:0}a{text-decoration:none}blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;padding:0 1rem}code{background:#f8f8f8;border-radius:3px;padding:.2em .4em;word-break:normal}mark code{background:#ffffffd4}pre.hljs\u003ecode{background:none}pre\u003ecode.hljs{background-clip:padding-box;border-radius:5px;counter-reset:line;width:100%}pre\u003ecode.hljs[heading]{border-top-right-radius:0}.code-block{position:relative}.code-block-heading{border-radius:6px 6px 0 0;float:right;font-size:85%;line-height:1;margin-top:5px;max-width:85%;overflow-wrap:break-word;padding:.25em .4em;text-align:right}.inline-markdown-heading{line-height:1.5}.code-block-content{clear:both;display:block}@media print{pre\u003ecode.hljs{word-wrap:break-word;white-space:pre-wrap;word-break:break-all}.hljs:not(.inline).line-numbers-print\u003espan{padding:0 .5em 0 3.5em;position:relative}.hljs:not(.inline).line-numbers-print\u003espan:before{border-right:1px solid #ddd;color:#888;content:counter(line);counter-increment:line;display:inline-block;height:100%;left:0;margin-right:.5em;padding-right:.5em;position:absolute;text-align:right;top:0;width:3em}.hljs span.highlighted{background:#e6e6fa!important;-webkit-print-color-adjust:exact}}kbd{background-color:#fafbfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5;color:#444d56}.btn:active,.btn:focus{box-shadow:none!important;outline:none!important}code.hljs.inline{display:initial;padding:.2em .4em}.markbind-table{width:auto}.radio-list-item,.task-list-item{list-style-type:none;margin:0 0 0 -1.2em}.radio-list-item label{font-weight:inherit}.table-striped\u003etbody\u003etr:nth-of-type(2n),.table-striped\u003ethead{background-color:#fff}header[sticky]{position:sticky;top:0;transition:transform .3s ease-in-out;width:100%;z-index:1001}header[sticky].hide-header{transform:translateY(calc(var(--sticky-header-height)*-1))}span.anchor{position:relative;top:calc(var(--sticky-header-height)*-1 - 1rem)}#app{display:flex;flex-direction:column;min-height:100vh}footer{background-color:#f5f5f5;color:dimgrey;padding:10px 0}.dimmed{color:#777}.large{font-size:125%}.small{font-size:80%}.underline{text-decoration:underline}.mkb-text-red{color:red!important}.mkb-text-green{color:green!important}.mkb-text-blue{color:blue!important}.mkb-text-cyan{color:cyan!important}.mkb-text-magenta{color:#f0f!important}.mkb-text-yellow{color:#ff0!important}.mkb-text-black{color:#000!important}.mkb-text-white{color:#fff!important}@media (width \u003c\u003d 767.98px){.dropdown-menu\u003eli\u003ea{white-space:normal}.navbar-nav .open .dropdown-menu{background-color:#fff}}li.footnote-item:target{background-color:#eee}.hljs:not(.inline)\u003espan{display:block}.hljs:not(.inline).line-numbers\u003espan{padding:0 .5em 0 3.5em;position:relative}.hljs:not(.inline).line-numbers\u003espan:before{border-right:1px solid #ddd;color:#888;content:counter(line);counter-increment:line;display:inline-block;height:100%;left:0;margin-right:.5em;padding-right:.5em;position:absolute;text-align:right;top:0;width:3em}.trigger{border-bottom:1px dotted}.trigger-click{border-bottom:1px dashed;cursor:pointer}.trigger-click:focus{outline:none}pre{display:flex;position:relative}button.function-btn{border:1px solid #d7dadc;border-radius:5px;color:#a9a9a9;cursor:pointer;display:none;margin:.17rem;padding:.35rem;position:absolute;right:0;text-align:center;white-space:nowrap}button.function-btn+button.function-btn{right:36px}pre:hover\u003e.function-btn-container\u003ebutton.function-btn{display:block}.function-btn:hover{color:gray;transition:all .5s ease}.function-btn-body{align-items:center;display:flex}.function-btn svg{fill:currentcolor}code.wrap{word-wrap:break-word;white-space:pre-wrap;word-break:break-all}.octicon{height:1em;width:1em}hr{background-color:transparent;border-top:1px solid rgba(0,0,0,.1);opacity:1}hr.dotted{border-top-style:dotted;border-top-width:.1rem}hr.double{border-top-style:double;border-top-width:.2rem}hr.dashed{border-top-style:dashed;border-top-width:.1rem}hr.thick{border-top-width:.15rem}hr.thick-1{border-top-width:.25rem}hr.thick-2{border-top-width:.5rem}hr.thick-3{border-top-width:.75rem}ol,ul{padding-left:1.5rem}h1,h2,h3,h4,h5,h6{margin-bottom:1rem;scroll-margin-top:var(--sticky-header-height)}.block-embed{overflow-x:auto;position:relative;width:100%}.block-embed iframe{height:100%;left:0;position:absolute;top:0;width:100%}#mb-page-nav{padding:.8rem 12px 0}#mb-page-nav a:link,#mb-page-nav a:visited{color:#9b9b9b;text-decoration:none}#mb-page-nav a:hover{color:#000}#mb-page-nav a.active{background-color:transparent;color:#000}.page-nav-title{color:#000;display:block;padding-left:.5rem;white-space:inherit}.nested{margin-left:5%}.no-flex-wrap{flex-wrap:nowrap}@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_AMS-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_AMS-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_AMS-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Caligraphic-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_Caligraphic-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_Caligraphic-Bold.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Caligraphic-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Caligraphic-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Caligraphic-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Fraktur-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_Fraktur-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_Fraktur-Bold.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Fraktur-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Fraktur-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Fraktur-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(../fonts/KaTeX_Main-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_Main-Bold.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Main-BoldItalic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-BoldItalic.woff) format(\"woff\"),url(../fonts/KaTeX_Main-BoldItalic.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Main-Italic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-Italic.woff) format(\"woff\"),url(../fonts/KaTeX_Main-Italic.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Main-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Main-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Main-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(../fonts/KaTeX_Math-BoldItalic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Math-BoldItalic.woff) format(\"woff\"),url(../fonts/KaTeX_Math-BoldItalic.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(../fonts/KaTeX_Math-Italic.woff2) format(\"woff2\"),url(../fonts/KaTeX_Math-Italic.woff) format(\"woff\"),url(../fonts/KaTeX_Math-Italic.ttf) format(\"truetype\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:normal;font-weight:700;src:url(../fonts/KaTeX_SansSerif-Bold.woff2) format(\"woff2\"),url(../fonts/KaTeX_SansSerif-Bold.woff) format(\"woff\"),url(../fonts/KaTeX_SansSerif-Bold.ttf) format(\"truetype\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:italic;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Italic.woff2) format(\"woff2\"),url(../fonts/KaTeX_SansSerif-Italic.woff) format(\"woff\"),url(../fonts/KaTeX_SansSerif-Italic.ttf) format(\"truetype\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:normal;font-weight:400;src:url(../fonts/KaTeX_SansSerif-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_SansSerif-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_SansSerif-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Script-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Script-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Script-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size1-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size1-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size1-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size2-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size2-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size2-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size3-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size3-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size3-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Size4-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Size4-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Size4-Regular.ttf) format(\"truetype\")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(../fonts/KaTeX_Typewriter-Regular.woff2) format(\"woff2\"),url(../fonts/KaTeX_Typewriter-Regular.woff) format(\"woff\"),url(../fonts/KaTeX_Typewriter-Regular.ttf) format(\"truetype\")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:\"0.15.6\"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html\u003e.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist\u003espan{display:block;height:0;position:relative}.katex .vlist\u003espan\u003espan{display:inline-block}.katex .vlist\u003espan\u003e.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac\u003espan\u003espan{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap\u003e.inner,.katex .llap\u003e.inner,.katex .rlap\u003e.inner{position:absolute}.katex .clap\u003e.fix,.katex .llap\u003e.fix,.katex .rlap\u003e.fix{display:inline-block}.katex .llap\u003e.inner{right:0}.katex .clap\u003e.inner,.katex .rlap\u003e.inner{left:0}.katex .clap\u003e.inner\u003espan{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt\u003e.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1\u003espan{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4\u003espan{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent\u003e.vlist-t,.katex .op-limits\u003e.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c\u003e.vlist-t{text-align:center}.katex .mtable .col-align-l\u003e.vlist-t{text-align:left}.katex .mtable .col-align-r\u003e.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:\"\"}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:\"(\" counter(katexEqnNo) \")\";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:\"(\" counter(mmlEqnNo) \")\";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display\u003e.katex{display:block;text-align:center;white-space:nowrap}.katex-display\u003e.katex\u003e.katex-html{display:block;position:relative}.katex-display\u003e.katex\u003e.katex-html\u003e.tag{position:absolute;right:0}.katex-display.leqno\u003e.katex\u003e.katex-html\u003e.tag{left:0;right:auto}.katex-display.fleqn\u003e.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.katex{font-size:1em!important}eq{display:inline-block}eqn{display:block}section.eqno{align-content:space-between;align-items:center;display:flex;flex-direction:row}section.eqno\u003eeqn{margin-left:3em;width:100%}section.eqno\u003espan{text-align:right;width:3em}"}],"authorContributionMap":{"KevinEyo1":1}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/css/octicons.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".octicon {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" vertical-align: text-top;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" fill: currentColor;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" overflow: visible;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":6}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/fontawesome/css/all.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2023 Fonticons, Inc."},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":".fa{font-family:var(--fa-style-family,\"Font Awesome 6 Free\");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:\"Font Awesome 6 Free\"}.fa-brands,.fab{font-family:\"Font Awesome 6 Brands\"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul\u003eli{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".fa-0:before{content:\"\\30\"}.fa-1:before{content:\"\\31\"}.fa-2:before{content:\"\\32\"}.fa-3:before{content:\"\\33\"}.fa-4:before{content:\"\\34\"}.fa-5:before{content:\"\\35\"}.fa-6:before{content:\"\\36\"}.fa-7:before{content:\"\\37\"}.fa-8:before{content:\"\\38\"}.fa-9:before{content:\"\\39\"}.fa-fill-drip:before{content:\"\\f576\"}.fa-arrows-to-circle:before{content:\"\\e4bd\"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:\"\\f138\"}.fa-at:before{content:\"\\40\"}.fa-trash-alt:before,.fa-trash-can:before{content:\"\\f2ed\"}.fa-text-height:before{content:\"\\f034\"}.fa-user-times:before,.fa-user-xmark:before{content:\"\\f235\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-comment-alt:before,.fa-message:before{content:\"\\f27a\"}.fa-info:before{content:\"\\f129\"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:\"\\f422\"}.fa-explosion:before{content:\"\\e4e9\"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:\"\\f15c\"}.fa-wave-square:before{content:\"\\f83e\"}.fa-ring:before{content:\"\\f70b\"}.fa-building-un:before{content:\"\\e4d9\"}.fa-dice-three:before{content:\"\\f527\"}.fa-calendar-alt:before,.fa-calendar-days:before{content:\"\\f073\"}.fa-anchor-circle-check:before{content:\"\\e4aa\"}.fa-building-circle-arrow-right:before{content:\"\\e4d1\"}.fa-volleyball-ball:before,.fa-volleyball:before{content:\"\\f45f\"}.fa-arrows-up-to-line:before{content:\"\\e4c2\"}.fa-sort-desc:before,.fa-sort-down:before{content:\"\\f0dd\"}.fa-circle-minus:before,.fa-minus-circle:before{content:\"\\f056\"}.fa-door-open:before{content:\"\\f52b\"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:\"\\f2f5\"}.fa-atom:before{content:\"\\f5d2\"}.fa-soap:before{content:\"\\e06e\"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:\"\\f86d\"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:\"\\f539\"}.fa-bridge-circle-check:before{content:\"\\e4c9\"}.fa-pump-medical:before{content:\"\\e06a\"}.fa-fingerprint:before{content:\"\\f577\"}.fa-hand-point-right:before{content:\"\\f0a4\"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:\"\\f689\"}.fa-forward-step:before,.fa-step-forward:before{content:\"\\f051\"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:\"\\f5b8\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-football-ball:before,.fa-football:before{content:\"\\f44e\"}.fa-school-circle-exclamation:before{content:\"\\e56c\"}.fa-crop:before{content:\"\\f125\"}.fa-angle-double-down:before,.fa-angles-down:before{content:\"\\f103\"}.fa-users-rectangle:before{content:\"\\e594\"}.fa-people-roof:before{content:\"\\e537\"}.fa-people-line:before{content:\"\\e534\"}.fa-beer-mug-empty:before,.fa-beer:before{content:\"\\f0fc\"}.fa-diagram-predecessor:before{content:\"\\e477\"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:\"\\f176\"}.fa-burn:before,.fa-fire-flame-simple:before{content:\"\\f46a\"}.fa-male:before,.fa-person:before{content:\"\\f183\"}.fa-laptop:before{content:\"\\f109\"}.fa-file-csv:before{content:\"\\f6dd\"}.fa-menorah:before{content:\"\\f676\"}.fa-truck-plane:before{content:\"\\e58f\"}.fa-record-vinyl:before{content:\"\\f8d9\"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:\"\\f587\"}.fa-bong:before{content:\"\\f55c\"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:\"\\f67b\"}.fa-arrow-down-up-across-line:before{content:\"\\e4af\"}.fa-spoon:before,.fa-utensil-spoon:before{content:\"\\f2e5\"}.fa-jar-wheat:before{content:\"\\e517\"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:\"\\f674\"}.fa-file-circle-exclamation:before{content:\"\\e4eb\"}.fa-circle-h:before,.fa-hospital-symbol:before{content:\"\\f47e\"}.fa-pager:before{content:\"\\f815\"}.fa-address-book:before,.fa-contact-book:before{content:\"\\f2b9\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-k:before{content:\"\\4b\"}.fa-landmark-flag:before{content:\"\\e51c\"}.fa-pencil-alt:before,.fa-pencil:before{content:\"\\f303\"}.fa-backward:before{content:\"\\f04a\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-comments:before{content:\"\\f086\"}.fa-file-clipboard:before,.fa-paste:before{content:\"\\f0ea\"}.fa-code-pull-request:before{content:\"\\e13c\"}.fa-clipboard-list:before{content:\"\\f46d\"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:\"\\f4de\"}.fa-user-check:before{content:\"\\f4fc\"}.fa-vial-virus:before{content:\"\\e597\"}.fa-sheet-plastic:before{content:\"\\e571\"}.fa-blog:before{content:\"\\f781\"}.fa-user-ninja:before{content:\"\\f504\"}.fa-person-arrow-up-from-line:before{content:\"\\e539\"}.fa-scroll-torah:before,.fa-torah:before{content:\"\\f6a0\"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:\"\\f458\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-archive:before,.fa-box-archive:before{content:\"\\f187\"}.fa-person-drowning:before{content:\"\\e545\"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:\"\\f886\"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:\"\\f58a\"}.fa-spray-can:before{content:\"\\f5bd\"}.fa-truck-monster:before{content:\"\\f63b\"}.fa-w:before{content:\"\\57\"}.fa-earth-africa:before,.fa-globe-africa:before{content:\"\\f57c\"}.fa-rainbow:before{content:\"\\f75b\"}.fa-circle-notch:before{content:\"\\f1ce\"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:\"\\f3fa\"}.fa-paw:before{content:\"\\f1b0\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-trowel-bricks:before{content:\"\\e58a\"}.fa-face-flushed:before,.fa-flushed:before{content:\"\\f579\"}.fa-hospital-user:before{content:\"\\f80d\"}.fa-tent-arrow-left-right:before{content:\"\\e57f\"}.fa-gavel:before,.fa-legal:before{content:\"\\f0e3\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-box-tissue:before{content:\"\\e05b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:\"\\f562\"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:\"\\f5ae\"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:\"\\e068\"}.fa-mars-and-venus-burst:before{content:\"\\e523\"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:\"\\f152\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-sun-plant-wilt:before{content:\"\\e57a\"}.fa-toilets-portable:before{content:\"\\e584\"}.fa-hockey-puck:before{content:\"\\f453\"}.fa-table:before{content:\"\\f0ce\"}.fa-magnifying-glass-arrow-right:before{content:\"\\e521\"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:\"\\f566\"}.fa-users-slash:before{content:\"\\e073\"}.fa-clover:before{content:\"\\e139\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f3e5\"}.fa-star-and-crescent:before{content:\"\\f699\"}.fa-house-fire:before{content:\"\\e50c\"}.fa-minus-square:before,.fa-square-minus:before{content:\"\\f146\"}.fa-helicopter:before{content:\"\\f533\"}.fa-compass:before{content:\"\\f14e\"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:\"\\f150\"}.fa-file-circle-question:before{content:\"\\e4ef\"}.fa-laptop-code:before{content:\"\\f5fc\"}.fa-swatchbook:before{content:\"\\f5c3\"}.fa-prescription-bottle:before{content:\"\\f485\"}.fa-bars:before,.fa-navicon:before{content:\"\\f0c9\"}.fa-people-group:before{content:\"\\e533\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-heart-broken:before,.fa-heart-crack:before{content:\"\\f7a9\"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:\"\\f360\"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:\"\\f597\"}.fa-film:before{content:\"\\f008\"}.fa-ruler-horizontal:before{content:\"\\f547\"}.fa-people-robbery:before{content:\"\\e536\"}.fa-lightbulb:before{content:\"\\f0eb\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-school-circle-xmark:before{content:\"\\e56d\"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:\"\\f08b\"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:\"\\f13a\"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:\"\\f13e\"}.fa-cloud-showers-heavy:before{content:\"\\f740\"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:\"\\f58f\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:\"\\f4b9\"}.fa-memory:before{content:\"\\f538\"}.fa-road-spikes:before{content:\"\\e568\"}.fa-fire-burner:before{content:\"\\e4f1\"}.fa-flag:before{content:\"\\f024\"}.fa-hanukiah:before{content:\"\\f6e6\"}.fa-feather:before{content:\"\\f52d\"}.fa-volume-down:before,.fa-volume-low:before{content:\"\\f027\"}.fa-comment-slash:before{content:\"\\f4b3\"}.fa-cloud-sun-rain:before{content:\"\\f743\"}.fa-compress:before{content:\"\\f066\"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:\"\\e2cd\"}.fa-ankh:before{content:\"\\f644\"}.fa-hands-holding-child:before{content:\"\\e4fa\"}.fa-asterisk:before{content:\"\\2a\"}.fa-check-square:before,.fa-square-check:before{content:\"\\f14a\"}.fa-peseta-sign:before{content:\"\\e221\"}.fa-header:before,.fa-heading:before{content:\"\\f1dc\"}.fa-ghost:before{content:\"\\f6e2\"}.fa-list-squares:before,.fa-list:before{content:\"\\f03a\"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:\"\\f87b\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-circle-dot:before,.fa-dot-circle:before{content:\"\\f192\"}.fa-dizzy:before,.fa-face-dizzy:before{content:\"\\f567\"}.fa-egg:before{content:\"\\f7fb\"}.fa-house-medical-circle-xmark:before{content:\"\\e513\"}.fa-campground:before{content:\"\\f6bb\"}.fa-folder-plus:before{content:\"\\f65e\"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:\"\\f1e3\"}.fa-paint-brush:before,.fa-paintbrush:before{content:\"\\f1fc\"}.fa-lock:before{content:\"\\f023\"}.fa-gas-pump:before{content:\"\\f52f\"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:\"\\f593\"}.fa-map-location:before,.fa-map-marked:before{content:\"\\f59f\"}.fa-house-flood-water:before{content:\"\\e50e\"}.fa-tree:before{content:\"\\f1bb\"}.fa-bridge-lock:before{content:\"\\e4cc\"}.fa-sack-dollar:before{content:\"\\f81d\"}.fa-edit:before,.fa-pen-to-square:before{content:\"\\f044\"}.fa-car-side:before{content:\"\\f5e4\"}.fa-share-alt:before,.fa-share-nodes:before{content:\"\\f1e0\"}.fa-heart-circle-minus:before{content:\"\\e4ff\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-microscope:before{content:\"\\f610\"}.fa-sink:before{content:\"\\e06d\"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:\"\\f290\"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:\"\\f881\"}.fa-mitten:before{content:\"\\f7b5\"}.fa-person-rays:before{content:\"\\e54d\"}.fa-users:before{content:\"\\f0c0\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-flask-vial:before{content:\"\\e4f3\"}.fa-hand-paper:before,.fa-hand:before{content:\"\\f256\"}.fa-om:before{content:\"\\f679\"}.fa-worm:before{content:\"\\e599\"}.fa-house-circle-xmark:before{content:\"\\e50b\"}.fa-plug:before{content:\"\\f1e6\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-hand-spock:before{content:\"\\f259\"}.fa-stopwatch:before{content:\"\\f2f2\"}.fa-face-kiss:before,.fa-kiss:before{content:\"\\f596\"}.fa-bridge-circle-xmark:before{content:\"\\e4cb\"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:\"\\f589\"}.fa-chess-bishop:before{content:\"\\f43a\"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:\"\\f58c\"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:\"\\f2a4\"}.fa-road-circle-check:before{content:\"\\e564\"}.fa-dice-five:before{content:\"\\f523\"}.fa-rss-square:before,.fa-square-rss:before{content:\"\\f143\"}.fa-land-mine-on:before{content:\"\\e51b\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-stamp:before{content:\"\\f5bf\"}.fa-stairs:before{content:\"\\e289\"}.fa-i:before{content:\"\\49\"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:\"\\f6f2\"}.fa-pills:before{content:\"\\f484\"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:\"\\f581\"}.fa-tooth:before{content:\"\\f5c9\"}.fa-v:before{content:\"\\56\"}.fa-bangladeshi-taka-sign:before{content:\"\\e2e6\"}.fa-bicycle:before{content:\"\\f206\"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:\"\\e579\"}.fa-head-side-cough-slash:before{content:\"\\e062\"}.fa-ambulance:before,.fa-truck-medical:before{content:\"\\f0f9\"}.fa-wheat-awn-circle-exclamation:before{content:\"\\e598\"}.fa-snowman:before{content:\"\\f7d0\"}.fa-mortar-pestle:before{content:\"\\f5a7\"}.fa-road-barrier:before{content:\"\\e562\"}.fa-school:before{content:\"\\f549\"}.fa-igloo:before{content:\"\\f7ae\"}.fa-joint:before{content:\"\\f595\"}.fa-angle-right:before{content:\"\\f105\"}.fa-horse:before{content:\"\\f6f0\"}.fa-q:before{content:\"\\51\"}.fa-g:before{content:\"\\47\"}.fa-notes-medical:before{content:\"\\f481\"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-dong-sign:before{content:\"\\e169\"}.fa-capsules:before{content:\"\\f46b\"}.fa-poo-bolt:before,.fa-poo-storm:before{content:\"\\f75a\"}.fa-face-frown-open:before,.fa-frown-open:before{content:\"\\f57a\"}.fa-hand-point-up:before{content:\"\\f0a6\"}.fa-money-bill:before{content:\"\\f0d6\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-align-justify:before{content:\"\\f039\"}.fa-umbrella-beach:before{content:\"\\f5ca\"}.fa-helmet-un:before{content:\"\\e503\"}.fa-bullseye:before{content:\"\\f140\"}.fa-bacon:before{content:\"\\f7e5\"}.fa-hand-point-down:before{content:\"\\f0a7\"}.fa-arrow-up-from-bracket:before{content:\"\\e09a\"}.fa-folder-blank:before,.fa-folder:before{content:\"\\f07b\"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:\"\\f478\"}.fa-radiation:before{content:\"\\f7b9\"}.fa-chart-simple:before{content:\"\\e473\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-vial:before{content:\"\\f492\"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:\"\\f624\"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:\"\\e2ca\"}.fa-e:before{content:\"\\45\"}.fa-pen-alt:before,.fa-pen-clip:before{content:\"\\f305\"}.fa-bridge-circle-exclamation:before{content:\"\\e4ca\"}.fa-user:before{content:\"\\f007\"}.fa-school-circle-check:before{content:\"\\e56b\"}.fa-dumpster:before{content:\"\\f793\"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:\"\\f5b6\"}.fa-building-user:before{content:\"\\e4da\"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:\"\\f191\"}.fa-highlighter:before{content:\"\\f591\"}.fa-key:before{content:\"\\f084\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-globe:before{content:\"\\f0ac\"}.fa-synagogue:before{content:\"\\f69b\"}.fa-person-half-dress:before{content:\"\\e548\"}.fa-road-bridge:before{content:\"\\e563\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-c:before{content:\"\\43\"}.fa-tablet-button:before{content:\"\\f10a\"}.fa-building-lock:before{content:\"\\e4d6\"}.fa-pizza-slice:before{content:\"\\f818\"}.fa-money-bill-wave:before{content:\"\\f53a\"}.fa-area-chart:before,.fa-chart-area:before{content:\"\\f1fe\"}.fa-house-flag:before{content:\"\\e50d\"}.fa-person-circle-minus:before{content:\"\\e540\"}.fa-ban:before,.fa-cancel:before{content:\"\\f05e\"}.fa-camera-rotate:before{content:\"\\e0d8\"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:\"\\f5d0\"}.fa-star:before{content:\"\\f005\"}.fa-repeat:before{content:\"\\f363\"}.fa-cross:before{content:\"\\f654\"}.fa-box:before{content:\"\\f466\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:\"\\f245\"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:\"\\f31e\"}.fa-charging-station:before{content:\"\\f5e7\"}.fa-shapes:before,.fa-triangle-circle-square:before{content:\"\\f61f\"}.fa-random:before,.fa-shuffle:before{content:\"\\f074\"}.fa-person-running:before,.fa-running:before{content:\"\\f70c\"}.fa-mobile-retro:before{content:\"\\e527\"}.fa-grip-lines-vertical:before{content:\"\\f7a5\"}.fa-spider:before{content:\"\\f717\"}.fa-hands-bound:before{content:\"\\e4f9\"}.fa-file-invoice-dollar:before{content:\"\\f571\"}.fa-plane-circle-exclamation:before{content:\"\\e556\"}.fa-x-ray:before{content:\"\\f497\"}.fa-spell-check:before{content:\"\\f891\"}.fa-slash:before{content:\"\\f715\"}.fa-computer-mouse:before,.fa-mouse:before{content:\"\\f8cc\"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:\"\\f090\"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:\"\\e070\"}.fa-server:before{content:\"\\f233\"}.fa-virus-covid-slash:before{content:\"\\e4a9\"}.fa-shop-lock:before{content:\"\\e4a5\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-blender-phone:before{content:\"\\f6b6\"}.fa-building-wheat:before{content:\"\\e4db\"}.fa-person-breastfeeding:before{content:\"\\e53a\"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:\"\\f2f6\"}.fa-venus:before{content:\"\\f221\"}.fa-passport:before{content:\"\\f5ab\"}.fa-heart-pulse:before,.fa-heartbeat:before{content:\"\\f21e\"}.fa-people-carry-box:before,.fa-people-carry:before{content:\"\\f4ce\"}.fa-temperature-high:before{content:\"\\f769\"}.fa-microchip:before{content:\"\\f2db\"}.fa-crown:before{content:\"\\f521\"}.fa-weight-hanging:before{content:\"\\f5cd\"}.fa-xmarks-lines:before{content:\"\\e59a\"}.fa-file-prescription:before{content:\"\\f572\"}.fa-weight-scale:before,.fa-weight:before{content:\"\\f496\"}.fa-user-friends:before,.fa-user-group:before{content:\"\\f500\"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:\"\\f15e\"}.fa-chess-knight:before{content:\"\\f441\"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:\"\\f59b\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:\"\\f0aa\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-person-walking:before,.fa-walking:before{content:\"\\f554\"}.fa-l:before{content:\"\\4c\"}.fa-fire:before{content:\"\\f06d\"}.fa-bed-pulse:before,.fa-procedures:before{content:\"\\f487\"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:\"\\f197\"}.fa-face-laugh:before,.fa-laugh:before{content:\"\\f599\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-heart-circle-plus:before{content:\"\\e500\"}.fa-code-fork:before{content:\"\\e13b\"}.fa-city:before{content:\"\\f64f\"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:\"\\f3c9\"}.fa-pepper-hot:before{content:\"\\f816\"}.fa-unlock:before{content:\"\\f09c\"}.fa-colon-sign:before{content:\"\\e140\"}.fa-headset:before{content:\"\\f590\"}.fa-store-slash:before{content:\"\\e071\"}.fa-road-circle-xmark:before{content:\"\\e566\"}.fa-user-minus:before{content:\"\\f503\"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:\"\\f79f\"}.fa-clipboard:before{content:\"\\f328\"}.fa-house-circle-exclamation:before{content:\"\\e50a\"}.fa-file-arrow-up:before,.fa-file-upload:before{content:\"\\f574\"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:\"\\f1eb\"}.fa-bath:before,.fa-bathtub:before{content:\"\\f2cd\"}.fa-underline:before{content:\"\\f0cd\"}.fa-user-edit:before,.fa-user-pen:before{content:\"\\f4ff\"}.fa-signature:before{content:\"\\f5b7\"}.fa-stroopwafel:before{content:\"\\f551\"}.fa-bold:before{content:\"\\f032\"}.fa-anchor-lock:before{content:\"\\e4ad\"}.fa-building-ngo:before{content:\"\\e4d7\"}.fa-manat-sign:before{content:\"\\e1d5\"}.fa-not-equal:before{content:\"\\f53e\"}.fa-border-style:before,.fa-border-top-left:before{content:\"\\f853\"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:\"\\f5a0\"}.fa-jedi:before{content:\"\\f669\"}.fa-poll:before,.fa-square-poll-vertical:before{content:\"\\f681\"}.fa-mug-hot:before{content:\"\\f7b6\"}.fa-battery-car:before,.fa-car-battery:before{content:\"\\f5df\"}.fa-gift:before{content:\"\\f06b\"}.fa-dice-two:before{content:\"\\f528\"}.fa-chess-queen:before{content:\"\\f445\"}.fa-glasses:before{content:\"\\f530\"}.fa-chess-board:before{content:\"\\f43c\"}.fa-building-circle-check:before{content:\"\\e4d2\"}.fa-person-chalkboard:before{content:\"\\e53d\"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:\"\\f22b\"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:\"\\f255\"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:\"\\f151\"}.fa-cloud-showers-water:before{content:\"\\e4e4\"}.fa-bar-chart:before,.fa-chart-bar:before{content:\"\\f080\"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:\"\\e05e\"}.fa-less-than-equal:before{content:\"\\f537\"}.fa-train:before{content:\"\\f238\"}.fa-eye-low-vision:before,.fa-low-vision:before{content:\"\\f2a8\"}.fa-crow:before{content:\"\\f520\"}.fa-sailboat:before{content:\"\\e445\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-plus-square:before,.fa-square-plus:before{content:\"\\f0fe\"}.fa-torii-gate:before{content:\"\\f6a1\"}.fa-frog:before{content:\"\\f52e\"}.fa-bucket:before{content:\"\\e4cf\"}.fa-image:before{content:\"\\f03e\"}.fa-microphone:before{content:\"\\f130\"}.fa-cow:before{content:\"\\f6c8\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-screwdriver:before{content:\"\\f54a\"}.fa-folder-closed:before{content:\"\\e185\"}.fa-house-tsunami:before{content:\"\\e515\"}.fa-square-nfi:before{content:\"\\e576\"}.fa-arrow-up-from-ground-water:before{content:\"\\e4b5\"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:\"\\f57b\"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:\"\\f2ea\"}.fa-columns:before,.fa-table-columns:before{content:\"\\f0db\"}.fa-lemon:before{content:\"\\f094\"}.fa-head-side-mask:before{content:\"\\e063\"}.fa-handshake:before{content:\"\\f2b5\"}.fa-gem:before{content:\"\\f3a5\"}.fa-dolly-box:before,.fa-dolly:before{content:\"\\f472\"}.fa-smoking:before{content:\"\\f48d\"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:\"\\f78c\"}.fa-monument:before{content:\"\\f5a6\"}.fa-snowplow:before{content:\"\\f7d2\"}.fa-angle-double-right:before,.fa-angles-right:before{content:\"\\f101\"}.fa-cannabis:before{content:\"\\f55f\"}.fa-circle-play:before,.fa-play-circle:before{content:\"\\f144\"}.fa-tablets:before{content:\"\\f490\"}.fa-ethernet:before{content:\"\\f796\"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:\"\\f153\"}.fa-chair:before{content:\"\\f6c0\"}.fa-check-circle:before,.fa-circle-check:before{content:\"\\f058\"}.fa-circle-stop:before,.fa-stop-circle:before{content:\"\\f28d\"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:\"\\f568\"}.fa-plate-wheat:before{content:\"\\e55a\"}.fa-icicles:before{content:\"\\f7ad\"}.fa-person-shelter:before{content:\"\\e54f\"}.fa-neuter:before{content:\"\\f22c\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-marker:before{content:\"\\f5a1\"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:\"\\f59a\"}.fa-helicopter-symbol:before{content:\"\\e502\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:\"\\f139\"}.fa-lari-sign:before{content:\"\\e1c8\"}.fa-volcano:before{content:\"\\f770\"}.fa-person-walking-dashed-line-arrow-right:before{content:\"\\e553\"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:\"\\f154\"}.fa-viruses:before{content:\"\\e076\"}.fa-square-person-confined:before{content:\"\\e577\"}.fa-user-tie:before{content:\"\\f508\"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:\"\\f175\"}.fa-tent-arrow-down-to-line:before{content:\"\\e57e\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-person-skating:before,.fa-skating:before{content:\"\\f7c5\"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:\"\\f662\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:\"\\f0ab\"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:\"\\f56f\"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:\"\\f14c\"}.fa-box-open:before{content:\"\\f49e\"}.fa-scroll:before{content:\"\\f70e\"}.fa-spa:before{content:\"\\f5bb\"}.fa-location-pin-lock:before{content:\"\\e51f\"}.fa-pause:before{content:\"\\f04c\"}.fa-hill-avalanche:before{content:\"\\e507\"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-registered:before{content:\"\\f25d\"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:\"\\f2bb\"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:\"\\f516\"}.fa-subscript:before{content:\"\\f12c\"}.fa-diamond-turn-right:before,.fa-directions:before{content:\"\\f5eb\"}.fa-burst:before{content:\"\\e4dc\"}.fa-house-laptop:before,.fa-laptop-house:before{content:\"\\e066\"}.fa-face-tired:before,.fa-tired:before{content:\"\\f5c8\"}.fa-money-bills:before{content:\"\\e1f3\"}.fa-smog:before{content:\"\\f75f\"}.fa-crutch:before{content:\"\\f7f7\"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-palette:before{content:\"\\f53f\"}.fa-arrows-turn-right:before{content:\"\\e4c0\"}.fa-vest:before{content:\"\\e085\"}.fa-ferry:before{content:\"\\e4ea\"}.fa-arrows-down-to-people:before{content:\"\\e4b9\"}.fa-seedling:before,.fa-sprout:before{content:\"\\f4d8\"}.fa-arrows-alt-h:before,.fa-left-right:before{content:\"\\f337\"}.fa-boxes-packing:before{content:\"\\e4c7\"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:\"\\f0a8\"}.fa-group-arrows-rotate:before{content:\"\\e4f6\"}.fa-bowl-food:before{content:\"\\e4c6\"}.fa-candy-cane:before{content:\"\\f786\"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:\"\\f160\"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:\"\\f76c\"}.fa-remove-format:before,.fa-text-slash:before{content:\"\\f87d\"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:\"\\f4da\"}.fa-file-word:before{content:\"\\f1c2\"}.fa-file-powerpoint:before{content:\"\\f1c4\"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:\"\\f07e\"}.fa-house-lock:before{content:\"\\e510\"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:\"\\f0ed\"}.fa-children:before{content:\"\\e4e1\"}.fa-blackboard:before,.fa-chalkboard:before{content:\"\\f51b\"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:\"\\f4fa\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:\"\\e05f\"}.fa-mattress-pillow:before{content:\"\\e525\"}.fa-guarani-sign:before{content:\"\\e19a\"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:\"\\f021\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-cruzeiro-sign:before{content:\"\\e152\"}.fa-greater-than-equal:before{content:\"\\f532\"}.fa-shield-alt:before,.fa-shield-halved:before{content:\"\\f3ed\"}.fa-atlas:before,.fa-book-atlas:before{content:\"\\f558\"}.fa-virus:before{content:\"\\e074\"}.fa-envelope-circle-check:before{content:\"\\e4e8\"}.fa-layer-group:before{content:\"\\f5fd\"}.fa-arrows-to-dot:before{content:\"\\e4be\"}.fa-archway:before{content:\"\\f557\"}.fa-heart-circle-check:before{content:\"\\e4fd\"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:\"\\f6f1\"}.fa-file-archive:before,.fa-file-zipper:before{content:\"\\f1c6\"}.fa-square:before{content:\"\\f0c8\"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:\"\\f000\"}.fa-couch:before{content:\"\\f4b8\"}.fa-cedi-sign:before{content:\"\\e0df\"}.fa-italic:before{content:\"\\f033\"}.fa-church:before{content:\"\\f51d\"}.fa-comments-dollar:before{content:\"\\f653\"}.fa-democrat:before{content:\"\\f747\"}.fa-z:before{content:\"\\5a\"}.fa-person-skiing:before,.fa-skiing:before{content:\"\\f7c9\"}.fa-road-lock:before{content:\"\\e567\"}.fa-a:before{content:\"\\41\"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:\"\\e03f\"}.fa-feather-alt:before,.fa-feather-pointed:before{content:\"\\f56b\"}.fa-p:before{content:\"\\50\"}.fa-snowflake:before{content:\"\\f2dc\"}.fa-newspaper:before{content:\"\\f1ea\"}.fa-ad:before,.fa-rectangle-ad:before{content:\"\\f641\"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:\"\\f0a9\"}.fa-filter-circle-xmark:before{content:\"\\e17b\"}.fa-locust:before{content:\"\\e520\"}.fa-sort:before,.fa-unsorted:before{content:\"\\f0dc\"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:\"\\f0cb\"}.fa-person-dress-burst:before{content:\"\\e544\"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:\"\\f53d\"}.fa-vector-square:before{content:\"\\f5cb\"}.fa-bread-slice:before{content:\"\\f7ec\"}.fa-language:before{content:\"\\f1ab\"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:\"\\f598\"}.fa-filter:before{content:\"\\f0b0\"}.fa-question:before{content:\"\\3f\"}.fa-file-signature:before{content:\"\\f573\"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:\"\\f0b2\"}.fa-house-chimney-user:before{content:\"\\e065\"}.fa-hand-holding-heart:before{content:\"\\f4be\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-money-check:before{content:\"\\f53c\"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:\"\\f5c0\"}.fa-code:before{content:\"\\f121\"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:\"\\f7a0\"}.fa-building-circle-exclamation:before{content:\"\\e4d3\"}.fa-magnifying-glass-chart:before{content:\"\\e522\"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:\"\\f08e\"}.fa-cubes-stacked:before{content:\"\\e4e6\"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:\"\\f159\"}.fa-virus-covid:before{content:\"\\e4a8\"}.fa-austral-sign:before{content:\"\\e0a9\"}.fa-f:before{content:\"\\46\"}.fa-leaf:before{content:\"\\f06c\"}.fa-road:before{content:\"\\f018\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-person-circle-plus:before{content:\"\\e541\"}.fa-chart-pie:before,.fa-pie-chart:before{content:\"\\f200\"}.fa-bolt-lightning:before{content:\"\\e0b7\"}.fa-sack-xmark:before{content:\"\\e56a\"}.fa-file-excel:before{content:\"\\f1c3\"}.fa-file-contract:before{content:\"\\f56c\"}.fa-fish-fins:before{content:\"\\e4f2\"}.fa-building-flag:before{content:\"\\e4d5\"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:\"\\f582\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-poop:before{content:\"\\f619\"}.fa-location-pin:before,.fa-map-marker:before{content:\"\\f041\"}.fa-kaaba:before{content:\"\\f66b\"}.fa-toilet-paper:before{content:\"\\f71e\"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:\"\\f807\"}.fa-eject:before{content:\"\\f052\"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:\"\\f35a\"}.fa-plane-circle-check:before{content:\"\\e555\"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:\"\\f5a5\"}.fa-object-group:before{content:\"\\f247\"}.fa-chart-line:before,.fa-line-chart:before{content:\"\\f201\"}.fa-mask-ventilator:before{content:\"\\e524\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-map-signs:before,.fa-signs-post:before{content:\"\\f277\"}.fa-cash-register:before{content:\"\\f788\"}.fa-person-circle-question:before{content:\"\\e542\"}.fa-h:before{content:\"\\48\"}.fa-tarp:before{content:\"\\e57b\"}.fa-screwdriver-wrench:before,.fa-tools:before{content:\"\\f7d9\"}.fa-arrows-to-eye:before{content:\"\\e4bf\"}.fa-plug-circle-bolt:before{content:\"\\e55b\"}.fa-heart:before{content:\"\\f004\"}.fa-mars-and-venus:before{content:\"\\f224\"}.fa-home-user:before,.fa-house-user:before{content:\"\\e1b0\"}.fa-dumpster-fire:before{content:\"\\f794\"}.fa-house-crack:before{content:\"\\e3b1\"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:\"\\f561\"}.fa-face-surprise:before,.fa-surprise:before{content:\"\\f5c2\"}.fa-bottle-water:before{content:\"\\e4c5\"}.fa-circle-pause:before,.fa-pause-circle:before{content:\"\\f28b\"}.fa-toilet-paper-slash:before{content:\"\\e072\"}.fa-apple-alt:before,.fa-apple-whole:before{content:\"\\f5d1\"}.fa-kitchen-set:before{content:\"\\e51a\"}.fa-r:before{content:\"\\52\"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-cube:before{content:\"\\f1b2\"}.fa-bitcoin-sign:before{content:\"\\e0b4\"}.fa-shield-dog:before{content:\"\\e573\"}.fa-solar-panel:before{content:\"\\f5ba\"}.fa-lock-open:before{content:\"\\f3c1\"}.fa-elevator:before{content:\"\\e16d\"}.fa-money-bill-transfer:before{content:\"\\e528\"}.fa-money-bill-trend-up:before{content:\"\\e529\"}.fa-house-flood-water-circle-arrow-right:before{content:\"\\e50f\"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:\"\\f682\"}.fa-circle:before{content:\"\\f111\"}.fa-backward-fast:before,.fa-fast-backward:before{content:\"\\f049\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-user-astronaut:before{content:\"\\f4fb\"}.fa-plane-slash:before{content:\"\\e069\"}.fa-trademark:before{content:\"\\f25c\"}.fa-basketball-ball:before,.fa-basketball:before{content:\"\\f434\"}.fa-satellite-dish:before{content:\"\\f7c0\"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:\"\\f35b\"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:\"\\f3cd\"}.fa-volume-high:before,.fa-volume-up:before{content:\"\\f028\"}.fa-users-rays:before{content:\"\\e593\"}.fa-wallet:before{content:\"\\f555\"}.fa-clipboard-check:before{content:\"\\f46c\"}.fa-file-audio:before{content:\"\\f1c7\"}.fa-burger:before,.fa-hamburger:before{content:\"\\f805\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-bugs:before{content:\"\\e4d0\"}.fa-rupee-sign:before,.fa-rupee:before{content:\"\\f156\"}.fa-file-image:before{content:\"\\f1c5\"}.fa-circle-question:before,.fa-question-circle:before{content:\"\\f059\"}.fa-plane-departure:before{content:\"\\f5b0\"}.fa-handshake-slash:before{content:\"\\e060\"}.fa-book-bookmark:before{content:\"\\e0bb\"}.fa-code-branch:before{content:\"\\f126\"}.fa-hat-cowboy:before{content:\"\\f8c0\"}.fa-bridge:before{content:\"\\e4c8\"}.fa-phone-alt:before,.fa-phone-flip:before{content:\"\\f879\"}.fa-truck-front:before{content:\"\\e2b7\"}.fa-cat:before{content:\"\\f6be\"}.fa-anchor-circle-exclamation:before{content:\"\\e4ab\"}.fa-truck-field:before{content:\"\\e58d\"}.fa-route:before{content:\"\\f4d7\"}.fa-clipboard-question:before{content:\"\\e4e3\"}.fa-panorama:before{content:\"\\e209\"}.fa-comment-medical:before{content:\"\\f7f5\"}.fa-teeth-open:before{content:\"\\f62f\"}.fa-file-circle-minus:before{content:\"\\e4ed\"}.fa-tags:before{content:\"\\f02c\"}.fa-wine-glass:before{content:\"\\f4e3\"}.fa-fast-forward:before,.fa-forward-fast:before{content:\"\\f050\"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:\"\\f5a4\"}.fa-parking:before,.fa-square-parking:before{content:\"\\f540\"}.fa-house-signal:before{content:\"\\e012\"}.fa-bars-progress:before,.fa-tasks-alt:before{content:\"\\f828\"}.fa-faucet-drip:before{content:\"\\e006\"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:\"\\f474\"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:\"\\f54d\"}.fa-terminal:before{content:\"\\f120\"}.fa-mobile-button:before{content:\"\\f10b\"}.fa-house-medical-flag:before{content:\"\\e514\"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:\"\\f291\"}.fa-tape:before{content:\"\\f4db\"}.fa-bus-alt:before,.fa-bus-simple:before{content:\"\\f55e\"}.fa-eye:before{content:\"\\f06e\"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:\"\\f5b3\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-person-military-to-person:before{content:\"\\e54c\"}.fa-file-shield:before{content:\"\\e4f0\"}.fa-user-slash:before{content:\"\\f506\"}.fa-pen:before{content:\"\\f304\"}.fa-tower-observation:before{content:\"\\e586\"}.fa-file-code:before{content:\"\\f1c9\"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:\"\\f012\"}.fa-bus:before{content:\"\\f207\"}.fa-heart-circle-xmark:before{content:\"\\e501\"}.fa-home-lg:before,.fa-house-chimney:before{content:\"\\e3af\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-face-frown:before,.fa-frown:before{content:\"\\f119\"}.fa-prescription:before{content:\"\\f5b1\"}.fa-shop:before,.fa-store-alt:before{content:\"\\f54f\"}.fa-floppy-disk:before,.fa-save:before{content:\"\\f0c7\"}.fa-vihara:before{content:\"\\f6a7\"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:\"\\f515\"}.fa-sort-asc:before,.fa-sort-up:before{content:\"\\f0de\"}.fa-comment-dots:before,.fa-commenting:before{content:\"\\f4ad\"}.fa-plant-wilt:before{content:\"\\e5aa\"}.fa-diamond:before{content:\"\\f219\"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:\"\\f585\"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:\"\\f4c0\"}.fa-bacterium:before{content:\"\\e05a\"}.fa-hand-pointer:before{content:\"\\f25a\"}.fa-drum-steelpan:before{content:\"\\f56a\"}.fa-hand-scissors:before{content:\"\\f257\"}.fa-hands-praying:before,.fa-praying-hands:before{content:\"\\f684\"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:\"\\f01e\"}.fa-biohazard:before{content:\"\\f780\"}.fa-location-crosshairs:before,.fa-location:before{content:\"\\f601\"}.fa-mars-double:before{content:\"\\f227\"}.fa-child-dress:before{content:\"\\e59c\"}.fa-users-between-lines:before{content:\"\\e591\"}.fa-lungs-virus:before{content:\"\\e067\"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:\"\\f588\"}.fa-phone:before{content:\"\\f095\"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:\"\\f273\"}.fa-child-reaching:before{content:\"\\e59d\"}.fa-head-side-virus:before{content:\"\\e064\"}.fa-user-cog:before,.fa-user-gear:before{content:\"\\f4fe\"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:\"\\f163\"}.fa-door-closed:before{content:\"\\f52a\"}.fa-shield-virus:before{content:\"\\e06c\"}.fa-dice-six:before{content:\"\\f526\"}.fa-mosquito-net:before{content:\"\\e52c\"}.fa-bridge-water:before{content:\"\\e4ce\"}.fa-person-booth:before{content:\"\\f756\"}.fa-text-width:before{content:\"\\f035\"}.fa-hat-wizard:before{content:\"\\f6e8\"}.fa-pen-fancy:before{content:\"\\f5ac\"}.fa-digging:before,.fa-person-digging:before{content:\"\\f85e\"}.fa-trash:before{content:\"\\f1f8\"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:\"\\f629\"}.fa-book-medical:before{content:\"\\f7e6\"}.fa-poo:before{content:\"\\f2fe\"}.fa-quote-right-alt:before,.fa-quote-right:before{content:\"\\f10e\"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:\"\\f553\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-divide:before{content:\"\\f529\"}.fa-tenge-sign:before,.fa-tenge:before{content:\"\\f7d7\"}.fa-headphones:before{content:\"\\f025\"}.fa-hands-holding:before{content:\"\\f4c2\"}.fa-hands-clapping:before{content:\"\\e1a8\"}.fa-republican:before{content:\"\\f75e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-person-circle-xmark:before{content:\"\\e543\"}.fa-ruler:before{content:\"\\f545\"}.fa-align-left:before{content:\"\\f036\"}.fa-dice-d6:before{content:\"\\f6d1\"}.fa-restroom:before{content:\"\\f7bd\"}.fa-j:before{content:\"\\4a\"}.fa-users-viewfinder:before{content:\"\\e595\"}.fa-file-video:before{content:\"\\f1c8\"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:\"\\f35d\"}.fa-table-cells:before,.fa-th:before{content:\"\\f00a\"}.fa-file-pdf:before{content:\"\\f1c1\"}.fa-bible:before,.fa-book-bible:before{content:\"\\f647\"}.fa-o:before{content:\"\\4f\"}.fa-medkit:before,.fa-suitcase-medical:before{content:\"\\f0fa\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-otter:before{content:\"\\f700\"}.fa-female:before,.fa-person-dress:before{content:\"\\f182\"}.fa-comment-dollar:before{content:\"\\f651\"}.fa-briefcase-clock:before,.fa-business-time:before{content:\"\\f64a\"}.fa-table-cells-large:before,.fa-th-large:before{content:\"\\f009\"}.fa-book-tanakh:before,.fa-tanakh:before{content:\"\\f827\"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:\"\\f2a0\"}.fa-hat-cowboy-side:before{content:\"\\f8c1\"}.fa-clipboard-user:before{content:\"\\f7f3\"}.fa-child:before{content:\"\\f1ae\"}.fa-lira-sign:before{content:\"\\f195\"}.fa-satellite:before{content:\"\\f7bf\"}.fa-plane-lock:before{content:\"\\e558\"}.fa-tag:before{content:\"\\f02b\"}.fa-comment:before{content:\"\\f075\"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:\"\\f1fd\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-angle-double-up:before,.fa-angles-up:before{content:\"\\f102\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-arrow-right-to-city:before{content:\"\\e4b3\"}.fa-ribbon:before{content:\"\\f4d6\"}.fa-lungs:before{content:\"\\f604\"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:\"\\f887\"}.fa-litecoin-sign:before{content:\"\\e1d3\"}.fa-border-none:before{content:\"\\f850\"}.fa-circle-nodes:before{content:\"\\e4e2\"}.fa-parachute-box:before{content:\"\\f4cd\"}.fa-indent:before{content:\"\\f03c\"}.fa-truck-field-un:before{content:\"\\e58e\"}.fa-hourglass-empty:before,.fa-hourglass:before{content:\"\\f254\"}.fa-mountain:before{content:\"\\f6fc\"}.fa-user-doctor:before,.fa-user-md:before{content:\"\\f0f0\"}.fa-circle-info:before,.fa-info-circle:before{content:\"\\f05a\"}.fa-cloud-meatball:before{content:\"\\f73b\"}.fa-camera-alt:before,.fa-camera:before{content:\"\\f030\"}.fa-square-virus:before{content:\"\\e578\"}.fa-meteor:before{content:\"\\f753\"}.fa-car-on:before{content:\"\\e4dd\"}.fa-sleigh:before{content:\"\\f7cc\"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:\"\\f162\"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:\"\\f4c1\"}.fa-water:before{content:\"\\f773\"}.fa-calendar-check:before{content:\"\\f274\"}.fa-braille:before{content:\"\\f2a1\"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:\"\\f486\"}.fa-landmark:before{content:\"\\f66f\"}.fa-truck:before{content:\"\\f0d1\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-person-cane:before{content:\"\\e53c\"}.fa-tent:before{content:\"\\e57d\"}.fa-vest-patches:before{content:\"\\e086\"}.fa-check-double:before{content:\"\\f560\"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:\"\\f15d\"}.fa-money-bill-wheat:before{content:\"\\e52a\"}.fa-cookie:before{content:\"\\f563\"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-hard-drive:before,.fa-hdd:before{content:\"\\f0a0\"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:\"\\f586\"}.fa-dumbbell:before{content:\"\\f44b\"}.fa-list-alt:before,.fa-rectangle-list:before{content:\"\\f022\"}.fa-tarp-droplet:before{content:\"\\e57c\"}.fa-house-medical-circle-check:before{content:\"\\e511\"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:\"\\f7ca\"}.fa-calendar-plus:before{content:\"\\f271\"}.fa-plane-arrival:before{content:\"\\f5af\"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:\"\\f359\"}.fa-subway:before,.fa-train-subway:before{content:\"\\f239\"}.fa-chart-gantt:before{content:\"\\e0e4\"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:\"\\e1bc\"}.fa-crop-alt:before,.fa-crop-simple:before{content:\"\\f565\"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:\"\\f3d1\"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:\"\\f30a\"}.fa-dna:before{content:\"\\f471\"}.fa-virus-slash:before{content:\"\\e075\"}.fa-minus:before,.fa-subtract:before{content:\"\\f068\"}.fa-chess:before{content:\"\\f439\"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:\"\\f177\"}.fa-plug-circle-check:before{content:\"\\e55c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-franc-sign:before{content:\"\\e18f\"}.fa-volume-off:before{content:\"\\f026\"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:\"\\f2a3\"}.fa-cog:before,.fa-gear:before{content:\"\\f013\"}.fa-droplet-slash:before,.fa-tint-slash:before{content:\"\\f5c7\"}.fa-mosque:before{content:\"\\f678\"}.fa-mosquito:before{content:\"\\e52b\"}.fa-star-of-david:before{content:\"\\f69a\"}.fa-person-military-rifle:before{content:\"\\e54b\"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:\"\\f07a\"}.fa-vials:before{content:\"\\f493\"}.fa-plug-circle-plus:before{content:\"\\e55f\"}.fa-place-of-worship:before{content:\"\\f67f\"}.fa-grip-vertical:before{content:\"\\f58e\"}.fa-arrow-turn-up:before,.fa-level-up:before{content:\"\\f148\"}.fa-u:before{content:\"\\55\"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:\"\\f698\"}.fa-clock-four:before,.fa-clock:before{content:\"\\f017\"}.fa-backward-step:before,.fa-step-backward:before{content:\"\\f048\"}.fa-pallet:before{content:\"\\f482\"}.fa-faucet:before{content:\"\\e005\"}.fa-baseball-bat-ball:before{content:\"\\f432\"}.fa-s:before{content:\"\\53\"}.fa-timeline:before{content:\"\\e29c\"}.fa-keyboard:before{content:\"\\f11c\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:\"\\f7f2\"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:\"\\f3cf\"}.fa-plane-up:before{content:\"\\e22d\"}.fa-piggy-bank:before{content:\"\\f4d3\"}.fa-battery-3:before,.fa-battery-half:before{content:\"\\f242\"}.fa-mountain-city:before{content:\"\\e52e\"}.fa-coins:before{content:\"\\f51e\"}.fa-khanda:before{content:\"\\f66d\"}.fa-sliders-h:before,.fa-sliders:before{content:\"\\f1de\"}.fa-folder-tree:before{content:\"\\f802\"}.fa-network-wired:before{content:\"\\f6ff\"}.fa-map-pin:before{content:\"\\f276\"}.fa-hamsa:before{content:\"\\f665\"}.fa-cent-sign:before{content:\"\\e3f5\"}.fa-flask:before{content:\"\\f0c3\"}.fa-person-pregnant:before{content:\"\\e31e\"}.fa-wand-sparkles:before{content:\"\\f72b\"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:\"\\f142\"}.fa-ticket:before{content:\"\\f145\"}.fa-power-off:before{content:\"\\f011\"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:\"\\f30b\"}.fa-flag-usa:before{content:\"\\f74d\"}.fa-laptop-file:before{content:\"\\e51d\"}.fa-teletype:before,.fa-tty:before{content:\"\\f1e4\"}.fa-diagram-next:before{content:\"\\e476\"}.fa-person-rifle:before{content:\"\\e54e\"}.fa-house-medical-circle-exclamation:before{content:\"\\e512\"}.fa-closed-captioning:before{content:\"\\f20a\"}.fa-hiking:before,.fa-person-hiking:before{content:\"\\f6ec\"}.fa-venus-double:before{content:\"\\f226\"}.fa-images:before{content:\"\\f302\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-people-pulling:before{content:\"\\e535\"}.fa-n:before{content:\"\\4e\"}.fa-cable-car:before,.fa-tram:before{content:\"\\f7da\"}.fa-cloud-rain:before{content:\"\\f73d\"}.fa-building-circle-xmark:before{content:\"\\e4d4\"}.fa-ship:before{content:\"\\f21a\"}.fa-arrows-down-to-line:before{content:\"\\e4b8\"}.fa-download:before{content:\"\\f019\"}.fa-face-grin:before,.fa-grin:before{content:\"\\f580\"}.fa-backspace:before,.fa-delete-left:before{content:\"\\f55a\"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:\"\\f1fb\"}.fa-file-circle-check:before{content:\"\\e5a0\"}.fa-forward:before{content:\"\\f04e\"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f3ce\"}.fa-face-meh:before,.fa-meh:before{content:\"\\f11a\"}.fa-align-center:before{content:\"\\f037\"}.fa-book-dead:before,.fa-book-skull:before{content:\"\\f6b7\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\f2c2\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-heart-circle-exclamation:before{content:\"\\e4fe\"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:\"\\f015\"}.fa-calendar-week:before{content:\"\\f784\"}.fa-laptop-medical:before{content:\"\\f812\"}.fa-b:before{content:\"\\42\"}.fa-file-medical:before{content:\"\\f477\"}.fa-dice-one:before{content:\"\\f525\"}.fa-kiwi-bird:before{content:\"\\f535\"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:\"\\f0ec\"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:\"\\f2f9\"}.fa-cutlery:before,.fa-utensils:before{content:\"\\f2e7\"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:\"\\f161\"}.fa-mill-sign:before{content:\"\\e1ed\"}.fa-bowl-rice:before{content:\"\\e2eb\"}.fa-skull:before{content:\"\\f54c\"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:\"\\f519\"}.fa-truck-pickup:before{content:\"\\f63c\"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:\"\\f30c\"}.fa-stop:before{content:\"\\f04d\"}.fa-code-merge:before{content:\"\\f387\"}.fa-upload:before{content:\"\\f093\"}.fa-hurricane:before{content:\"\\f751\"}.fa-mound:before{content:\"\\e52d\"}.fa-toilet-portable:before{content:\"\\e583\"}.fa-compact-disc:before{content:\"\\f51f\"}.fa-file-arrow-down:before,.fa-file-download:before{content:\"\\f56d\"}.fa-caravan:before{content:\"\\f8ff\"}.fa-shield-cat:before{content:\"\\e572\"}.fa-bolt:before,.fa-zap:before{content:\"\\f0e7\"}.fa-glass-water:before{content:\"\\e4f4\"}.fa-oil-well:before{content:\"\\e532\"}.fa-vault:before{content:\"\\e2c5\"}.fa-mars:before{content:\"\\f222\"}.fa-toilet:before{content:\"\\f7d8\"}.fa-plane-circle-xmark:before{content:\"\\e557\"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:\"\\f157\"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:\"\\f158\"}.fa-sun:before{content:\"\\f185\"}.fa-guitar:before{content:\"\\f7a6\"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:\"\\f59c\"}.fa-horse-head:before{content:\"\\f7ab\"}.fa-bore-hole:before{content:\"\\e4c3\"}.fa-industry:before{content:\"\\f275\"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:\"\\f358\"}.fa-arrows-turn-to-dots:before{content:\"\\e4c1\"}.fa-florin-sign:before{content:\"\\e184\"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:\"\\f884\"}.fa-less-than:before{content:\"\\3c\"}.fa-angle-down:before{content:\"\\f107\"}.fa-car-tunnel:before{content:\"\\e4de\"}.fa-head-side-cough:before{content:\"\\e061\"}.fa-grip-lines:before{content:\"\\f7a4\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-user-lock:before{content:\"\\f502\"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:\"\\f178\"}.fa-anchor-circle-xmark:before{content:\"\\e4ac\"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:\"\\f141\"}.fa-chess-pawn:before{content:\"\\f443\"}.fa-first-aid:before,.fa-kit-medical:before{content:\"\\f479\"}.fa-person-through-window:before{content:\"\\e5a9\"}.fa-toolbox:before{content:\"\\f552\"}.fa-hands-holding-circle:before{content:\"\\e4fb\"}.fa-bug:before{content:\"\\f188\"}.fa-credit-card-alt:before,.fa-credit-card:before{content:\"\\f09d\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-hand-holding-hand:before{content:\"\\e4f7\"}.fa-book-open-reader:before,.fa-book-reader:before{content:\"\\f5da\"}.fa-mountain-sun:before{content:\"\\e52f\"}.fa-arrows-left-right-to-line:before{content:\"\\e4ba\"}.fa-dice-d20:before{content:\"\\f6cf\"}.fa-truck-droplet:before{content:\"\\e58c\"}.fa-file-circle-xmark:before{content:\"\\e5a1\"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:\"\\e040\"}.fa-medal:before{content:\"\\f5a2\"}.fa-bed:before{content:\"\\f236\"}.fa-h-square:before,.fa-square-h:before{content:\"\\f0fd\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:\"\\f2c7\"}.fa-bell:before{content:\"\\f0f3\"}.fa-superscript:before{content:\"\\f12b\"}.fa-plug-circle-xmark:before{content:\"\\e560\"}.fa-star-of-life:before{content:\"\\f621\"}.fa-phone-slash:before{content:\"\\f3dd\"}.fa-paint-roller:before{content:\"\\f5aa\"}.fa-hands-helping:before,.fa-handshake-angle:before{content:\"\\f4c4\"}.fa-location-dot:before,.fa-map-marker-alt:before{content:\"\\f3c5\"}.fa-file:before{content:\"\\f15b\"}.fa-greater-than:before{content:\"\\3e\"}.fa-person-swimming:before,.fa-swimmer:before{content:\"\\f5c4\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-droplet:before,.fa-tint:before{content:\"\\f043\"}.fa-eraser:before{content:\"\\f12d\"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:\"\\f57d\"}.fa-person-burst:before{content:\"\\e53b\"}.fa-dove:before{content:\"\\f4ba\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-socks:before{content:\"\\f696\"}.fa-inbox:before{content:\"\\f01c\"}.fa-section:before{content:\"\\e447\"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:\"\\f625\"}.fa-envelope-open-text:before{content:\"\\f658\"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:\"\\f0f8\"}.fa-wine-bottle:before{content:\"\\f72f\"}.fa-chess-rook:before{content:\"\\f447\"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:\"\\f550\"}.fa-dharmachakra:before{content:\"\\f655\"}.fa-hotdog:before{content:\"\\f80f\"}.fa-blind:before,.fa-person-walking-with-cane:before{content:\"\\f29d\"}.fa-drum:before{content:\"\\f569\"}.fa-ice-cream:before{content:\"\\f810\"}.fa-heart-circle-bolt:before{content:\"\\e4fc\"}.fa-fax:before{content:\"\\f1ac\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-check-to-slot:before,.fa-vote-yea:before{content:\"\\f772\"}.fa-star-half:before{content:\"\\f089\"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:\"\\f468\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:\"\\f2a2\"}.fa-tree-city:before{content:\"\\e587\"}.fa-play:before{content:\"\\f04b\"}.fa-font:before{content:\"\\f031\"}.fa-rupiah-sign:before{content:\"\\e23d\"}.fa-magnifying-glass:before,.fa-search:before{content:\"\\f002\"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:\"\\f45d\"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:\"\\f470\"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:\"\\f82a\"}.fa-naira-sign:before{content:\"\\e1f6\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-walkie-talkie:before{content:\"\\f8ef\"}.fa-file-edit:before,.fa-file-pen:before{content:\"\\f31c\"}.fa-receipt:before{content:\"\\f543\"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:\"\\f14b\"}.fa-suitcase-rolling:before{content:\"\\f5c1\"}.fa-person-circle-exclamation:before{content:\"\\e53f\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:\"\\f240\"}.fa-skull-crossbones:before{content:\"\\f714\"}.fa-code-compare:before{content:\"\\e13a\"}.fa-list-dots:before,.fa-list-ul:before{content:\"\\f0ca\"}.fa-school-lock:before{content:\"\\e56f\"}.fa-tower-cell:before{content:\"\\e585\"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:\"\\f309\"}.fa-ranking-star:before{content:\"\\e561\"}.fa-chess-king:before{content:\"\\f43f\"}.fa-person-harassing:before{content:\"\\e549\"}.fa-brazilian-real-sign:before{content:\"\\e46c\"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:\"\\f752\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:\"\\f26c\"}.fa-shrimp:before{content:\"\\e448\"}.fa-list-check:before,.fa-tasks:before{content:\"\\f0ae\"}.fa-jug-detergent:before{content:\"\\e519\"}.fa-circle-user:before,.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-shield:before{content:\"\\f505\"}.fa-wind:before{content:\"\\f72e\"}.fa-car-burst:before,.fa-car-crash:before{content:\"\\f5e1\"}.fa-y:before{content:\"\\59\"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:\"\\f7ce\"}.fa-shipping-fast:before,.fa-truck-fast:before{content:\"\\f48b\"}.fa-fish:before{content:\"\\f578\"}.fa-user-graduate:before{content:\"\\f501\"}.fa-adjust:before,.fa-circle-half-stroke:before{content:\"\\f042\"}.fa-clapperboard:before{content:\"\\e131\"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:\"\\f7ba\"}.fa-baseball-ball:before,.fa-baseball:before{content:\"\\f433\"}.fa-jet-fighter-up:before{content:\"\\e518\"}.fa-diagram-project:before,.fa-project-diagram:before{content:\"\\f542\"}.fa-copy:before{content:\"\\f0c5\"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:\"\\f6a9\"}.fa-hand-sparkles:before{content:\"\\e05d\"}.fa-grip-horizontal:before,.fa-grip:before{content:\"\\f58d\"}.fa-share-from-square:before,.fa-share-square:before{content:\"\\f14d\"}.fa-child-combatant:before,.fa-child-rifle:before{content:\"\\e4e0\"}.fa-gun:before{content:\"\\e19b\"}.fa-phone-square:before,.fa-square-phone:before{content:\"\\f098\"}.fa-add:before,.fa-plus:before{content:\"\\2b\"}.fa-expand:before{content:\"\\f065\"}.fa-computer:before{content:\"\\e4e5\"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:\"\\f00d\"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:\"\\f047\"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:\"\\f51c\"}.fa-peso-sign:before{content:\"\\e222\"}.fa-building-shield:before{content:\"\\e4d8\"}.fa-baby:before{content:\"\\f77c\"}.fa-users-line:before{content:\"\\e592\"}.fa-quote-left-alt:before,.fa-quote-left:before{content:\"\\f10d\"}.fa-tractor:before{content:\"\\f722\"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:\"\\f829\"}.fa-arrow-down-up-lock:before{content:\"\\e4b0\"}.fa-lines-leaning:before{content:\"\\e51e\"}.fa-ruler-combined:before{content:\"\\f546\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-equals:before{content:\"\\3d\"}.fa-blender:before{content:\"\\f517\"}.fa-teeth:before{content:\"\\f62e\"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:\"\\f20b\"}.fa-map:before{content:\"\\f279\"}.fa-rocket:before{content:\"\\f135\"}.fa-photo-film:before,.fa-photo-video:before{content:\"\\f87c\"}.fa-folder-minus:before{content:\"\\f65d\"}.fa-store:before{content:\"\\f54e\"}.fa-arrow-trend-up:before{content:\"\\e098\"}.fa-plug-circle-minus:before{content:\"\\e55e\"}.fa-sign-hanging:before,.fa-sign:before{content:\"\\f4d9\"}.fa-bezier-curve:before{content:\"\\f55b\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-tablet-android:before,.fa-tablet:before{content:\"\\f3fb\"}.fa-school-flag:before{content:\"\\e56e\"}.fa-fill:before{content:\"\\f575\"}.fa-angle-up:before{content:\"\\f106\"}.fa-drumstick-bite:before{content:\"\\f6d7\"}.fa-holly-berry:before{content:\"\\f7aa\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-bacteria:before{content:\"\\e059\"}.fa-hand-lizard:before{content:\"\\f258\"}.fa-notdef:before{content:\"\\e1fe\"}.fa-disease:before{content:\"\\f7fa\"}.fa-briefcase-medical:before{content:\"\\f469\"}.fa-genderless:before{content:\"\\f22d\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-retweet:before{content:\"\\f079\"}.fa-car-alt:before,.fa-car-rear:before{content:\"\\f5de\"}.fa-pump-soap:before{content:\"\\e06b\"}.fa-video-slash:before{content:\"\\f4e2\"}.fa-battery-2:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-radio:before{content:\"\\f8d7\"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:\"\\f77d\"}.fa-traffic-light:before{content:\"\\f637\"}.fa-thermometer:before{content:\"\\f491\"}.fa-vr-cardboard:before{content:\"\\f729\"}.fa-hand-middle-finger:before{content:\"\\f806\"}.fa-percent:before,.fa-percentage:before{content:\"\\25\"}.fa-truck-moving:before{content:\"\\f4df\"}.fa-glass-water-droplet:before{content:\"\\e4f5\"}.fa-display:before{content:\"\\e163\"}.fa-face-smile:before,.fa-smile:before{content:\"\\f118\"}.fa-thumb-tack:before,.fa-thumbtack:before{content:\"\\f08d\"}.fa-trophy:before{content:\"\\f091\"}.fa-person-praying:before,.fa-pray:before{content:\"\\f683\"}.fa-hammer:before{content:\"\\f6e3\"}.fa-hand-peace:before{content:\"\\f25b\"}.fa-rotate:before,.fa-sync-alt:before{content:\"\\f2f1\"}.fa-spinner:before{content:\"\\f110\"}.fa-robot:before{content:\"\\f544\"}.fa-peace:before{content:\"\\f67c\"}.fa-cogs:before,.fa-gears:before{content:\"\\f085\"}.fa-warehouse:before{content:\"\\f494\"}.fa-arrow-up-right-dots:before{content:\"\\e4b7\"}.fa-splotch:before{content:\"\\f5bc\"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:\"\\f584\"}.fa-dice-four:before{content:\"\\f524\"}.fa-sim-card:before{content:\"\\f7c4\"}.fa-transgender-alt:before,.fa-transgender:before{content:\"\\f225\"}.fa-mercury:before{content:\"\\f223\"}.fa-arrow-turn-down:before,.fa-level-down:before{content:\"\\f149\"}.fa-person-falling-burst:before{content:\"\\e547\"}.fa-award:before{content:\"\\f559\"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:\"\\f3ff\"}.fa-building:before{content:\"\\f1ad\"}.fa-angle-double-left:before,.fa-angles-left:before{content:\"\\f100\"}.fa-qrcode:before{content:\"\\f029\"}.fa-clock-rotate-left:before,.fa-history:before{content:\"\\f1da\"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:\"\\f583\"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:\"\\f56e\"}.fa-shield-blank:before,.fa-shield:before{content:\"\\f132\"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:\"\\f885\"}.fa-house-medical:before{content:\"\\e3b2\"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:\"\\f450\"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:\"\\f137\"}.fa-house-chimney-window:before{content:\"\\e00d\"}.fa-pen-nib:before{content:\"\\f5ad\"}.fa-tent-arrow-turn-left:before{content:\"\\e580\"}.fa-tents:before{content:\"\\e582\"}.fa-magic:before,.fa-wand-magic:before{content:\"\\f0d0\"}.fa-dog:before{content:\"\\f6d3\"}.fa-carrot:before{content:\"\\f787\"}.fa-moon:before{content:\"\\f186\"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:\"\\f5ce\"}.fa-cheese:before{content:\"\\f7ef\"}.fa-yin-yang:before{content:\"\\f6ad\"}.fa-music:before{content:\"\\f001\"}.fa-code-commit:before{content:\"\\f386\"}.fa-temperature-low:before{content:\"\\f76b\"}.fa-biking:before,.fa-person-biking:before{content:\"\\f84a\"}.fa-broom:before{content:\"\\f51a\"}.fa-shield-heart:before{content:\"\\e574\"}.fa-gopuram:before{content:\"\\f664\"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:\"\\e47b\"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:\"\\f2d3\"}.fa-hashtag:before{content:\"\\23\"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:\"\\f424\"}.fa-oil-can:before{content:\"\\f613\"}.fa-t:before{content:\"\\54\"}.fa-hippo:before{content:\"\\f6ed\"}.fa-chart-column:before{content:\"\\e0e3\"}.fa-infinity:before{content:\"\\f534\"}.fa-vial-circle-check:before{content:\"\\e596\"}.fa-person-arrow-down-to-line:before{content:\"\\e538\"}.fa-voicemail:before{content:\"\\f897\"}.fa-fan:before{content:\"\\f863\"}.fa-person-walking-luggage:before{content:\"\\e554\"}.fa-arrows-alt-v:before,.fa-up-down:before{content:\"\\f338\"}.fa-cloud-moon-rain:before{content:\"\\f73c\"}.fa-calendar:before{content:\"\\f133\"}.fa-trailer:before{content:\"\\e041\"}.fa-bahai:before,.fa-haykal:before{content:\"\\f666\"}.fa-sd-card:before{content:\"\\f7c2\"}.fa-dragon:before{content:\"\\f6d5\"}.fa-shoe-prints:before{content:\"\\f54b\"}.fa-circle-plus:before,.fa-plus-circle:before{content:\"\\f055\"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:\"\\f58b\"}.fa-hand-holding:before{content:\"\\f4bd\"}.fa-plug-circle-exclamation:before{content:\"\\e55d\"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:\"\\f127\"}.fa-clone:before{content:\"\\f24d\"}.fa-person-walking-arrow-loop-left:before{content:\"\\e551\"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:\"\\f882\"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:\"\\f7e4\"}.fa-tornado:before{content:\"\\f76f\"}.fa-file-circle-plus:before{content:\"\\e494\"}.fa-book-quran:before,.fa-quran:before{content:\"\\f687\"}.fa-anchor:before{content:\"\\f13d\"}.fa-border-all:before{content:\"\\f84c\"}.fa-angry:before,.fa-face-angry:before{content:\"\\f556\"}.fa-cookie-bite:before{content:\"\\f564\"}.fa-arrow-trend-down:before{content:\"\\e097\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-draw-polygon:before{content:\"\\f5ee\"}.fa-balance-scale:before,.fa-scale-balanced:before{content:\"\\f24e\"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:\"\\f62a\"}.fa-shower:before{content:\"\\f2cc\"}.fa-desktop-alt:before,.fa-desktop:before{content:\"\\f390\"}.fa-m:before{content:\"\\4d\"}.fa-table-list:before,.fa-th-list:before{content:\"\\f00b\"}.fa-comment-sms:before,.fa-sms:before{content:\"\\f7cd\"}.fa-book:before{content:\"\\f02d\"}.fa-user-plus:before{content:\"\\f234\"}.fa-check:before{content:\"\\f00c\"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-house-circle-check:before{content:\"\\e509\"}.fa-angle-left:before{content:\"\\f104\"}.fa-diagram-successor:before{content:\"\\e47a\"}.fa-truck-arrow-right:before{content:\"\\e58b\"}.fa-arrows-split-up-and-left:before{content:\"\\e4bc\"}.fa-fist-raised:before,.fa-hand-fist:before{content:\"\\f6de\"}.fa-cloud-moon:before{content:\"\\f6c3\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-person-falling:before{content:\"\\e546\"}.fa-image-portrait:before,.fa-portrait:before{content:\"\\f3e0\"}.fa-user-tag:before{content:\"\\f507\"}.fa-rug:before{content:\"\\e569\"}.fa-earth-europe:before,.fa-globe-europe:before{content:\"\\f7a2\"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:\"\\f59d\"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:\"\\f410\"}.fa-baht-sign:before{content:\"\\e0ac\"}.fa-book-open:before{content:\"\\f518\"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:\"\\f66a\"}.fa-handcuffs:before{content:\"\\e4f8\"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:\"\\f071\"}.fa-database:before{content:\"\\f1c0\"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-bottle-droplet:before{content:\"\\e4c4\"}.fa-mask-face:before{content:\"\\e1d7\"}.fa-hill-rockslide:before{content:\"\\e508\"}.fa-exchange-alt:before,.fa-right-left:before{content:\"\\f362\"}.fa-paper-plane:before{content:\"\\f1d8\"}.fa-road-circle-exclamation:before{content:\"\\e565\"}.fa-dungeon:before{content:\"\\f6d9\"}.fa-align-right:before{content:\"\\f038\"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:\"\\f53b\"}.fa-life-ring:before{content:\"\\f1cd\"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:\"\\f2a7\"}.fa-calendar-day:before{content:\"\\f783\"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:\"\\f5c5\"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:\"\\f07d\"}.fa-face-grimace:before,.fa-grimace:before{content:\"\\f57f\"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:\"\\e2ce\"}.fa-level-down-alt:before,.fa-turn-down:before{content:\"\\f3be\"}.fa-person-walking-arrow-right:before{content:\"\\e552\"}.fa-envelope-square:before,.fa-square-envelope:before{content:\"\\f199\"}.fa-dice:before{content:\"\\f522\"}.fa-bowling-ball:before{content:\"\\f436\"}.fa-brain:before{content:\"\\f5dc\"}.fa-band-aid:before,.fa-bandage:before{content:\"\\f462\"}.fa-calendar-minus:before{content:\"\\f272\"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:\"\\f057\"}.fa-gifts:before{content:\"\\f79c\"}.fa-hotel:before{content:\"\\f594\"}.fa-earth-asia:before,.fa-globe-asia:before{content:\"\\f57e\"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:\"\\f47f\"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:\"\\f00e\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-user-clock:before{content:\"\\f4fd\"}.fa-allergies:before,.fa-hand-dots:before{content:\"\\f461\"}.fa-file-invoice:before{content:\"\\f570\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-coffee:before,.fa-mug-saucer:before{content:\"\\f0f4\"}.fa-brush:before{content:\"\\f55d\"}.fa-mask:before{content:\"\\f6fa\"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:\"\\f010\"}.fa-ruler-vertical:before{content:\"\\f548\"}.fa-user-alt:before,.fa-user-large:before{content:\"\\f406\"}.fa-train-tram:before{content:\"\\e5b4\"}.fa-user-nurse:before{content:\"\\f82f\"}.fa-syringe:before{content:\"\\f48e\"}.fa-cloud-sun:before{content:\"\\f6c4\"}.fa-stopwatch-20:before{content:\"\\e06f\"}.fa-square-full:before{content:\"\\f45c\"}.fa-magnet:before{content:\"\\f076\"}.fa-jar:before{content:\"\\e516\"}.fa-note-sticky:before,.fa-sticky-note:before{content:\"\\f249\"}.fa-bug-slash:before{content:\"\\e490\"}.fa-arrow-up-from-water-pump:before{content:\"\\e4b6\"}.fa-bone:before{content:\"\\f5d7\"}.fa-user-injured:before{content:\"\\f728\"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:\"\\f5b4\"}.fa-plane:before{content:\"\\f072\"}.fa-tent-arrows-down:before{content:\"\\e581\"}.fa-exclamation:before{content:\"\\21\"}.fa-arrows-spin:before{content:\"\\e4bb\"}.fa-print:before{content:\"\\f02f\"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:\"\\e2bb\"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:\"\\24\"}.fa-x:before{content:\"\\58\"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:\"\\f688\"}.fa-users-cog:before,.fa-users-gear:before{content:\"\\f509\"}.fa-person-military-pointing:before{content:\"\\e54a\"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:\"\\f19c\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-trowel:before{content:\"\\e589\"}.fa-d:before{content:\"\\44\"}.fa-stapler:before{content:\"\\e5af\"}.fa-masks-theater:before,.fa-theater-masks:before{content:\"\\f630\"}.fa-kip-sign:before{content:\"\\e1c4\"}.fa-hand-point-left:before{content:\"\\f0a5\"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:\"\\f4c6\"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:\"\\f0fb\"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:\"\\f1e1\"}.fa-barcode:before{content:\"\\f02a\"}.fa-plus-minus:before{content:\"\\e43c\"}.fa-video-camera:before,.fa-video:before{content:\"\\f03d\"}.fa-graduation-cap:before,.fa-mortar-board:before{content:\"\\f19d\"}.fa-hand-holding-medical:before{content:\"\\e05c\"}.fa-person-circle-check:before{content:\"\\e53e\"}.fa-level-up-alt:before,.fa-turn-up:before{content:\"\\f3bf\"}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":".fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:\"Font Awesome 6 Brands\";--fa-font-brands:normal 400 1em/1 \"Font Awesome 6 Brands\"}@font-face{font-family:\"Font Awesome 6 Brands\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:\"\\f3d0\"}.fa-hooli:before{content:\"\\f427\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-lastfm:before{content:\"\\f202\"}.fa-shopware:before{content:\"\\f5b5\"}.fa-creative-commons-nc:before{content:\"\\f4e8\"}.fa-aws:before{content:\"\\f375\"}.fa-redhat:before{content:\"\\f7bc\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-cloudflare:before{content:\"\\e07d\"}.fa-ups:before{content:\"\\f7e0\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-dyalog:before{content:\"\\f399\"}.fa-bity:before{content:\"\\f37a\"}.fa-stackpath:before{content:\"\\f842\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-modx:before{content:\"\\f285\"}.fa-guilded:before{content:\"\\e07e\"}.fa-vnv:before{content:\"\\f40b\"}.fa-js-square:before,.fa-square-js:before{content:\"\\f3b9\"}.fa-microsoft:before{content:\"\\f3ca\"}.fa-qq:before{content:\"\\f1d6\"}.fa-orcid:before{content:\"\\f8d2\"}.fa-java:before{content:\"\\f4e4\"}.fa-invision:before{content:\"\\f7b0\"}.fa-creative-commons-pd-alt:before{content:\"\\f4ed\"}.fa-centercode:before{content:\"\\f380\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-hire-a-helper:before{content:\"\\f3b0\"}.fa-creative-commons-by:before{content:\"\\f4e7\"}.fa-unity:before{content:\"\\e049\"}.fa-whmcs:before{content:\"\\f40d\"}.fa-rocketchat:before{content:\"\\f3e8\"}.fa-vk:before{content:\"\\f189\"}.fa-untappd:before{content:\"\\f405\"}.fa-mailchimp:before{content:\"\\f59e\"}.fa-css3-alt:before{content:\"\\f38b\"}.fa-reddit-square:before,.fa-square-reddit:before{content:\"\\f1a2\"}.fa-vimeo-v:before{content:\"\\f27d\"}.fa-contao:before{content:\"\\f26d\"}.fa-square-font-awesome:before{content:\"\\e5ad\"}.fa-deskpro:before{content:\"\\f38f\"}.fa-sistrix:before{content:\"\\f3ee\"}.fa-instagram-square:before,.fa-square-instagram:before{content:\"\\e055\"}.fa-battle-net:before{content:\"\\f835\"}.fa-the-red-yeti:before{content:\"\\f69d\"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:\"\\f3af\"}.fa-edge:before{content:\"\\f282\"}.fa-napster:before{content:\"\\f3d2\"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:\"\\f2ad\"}.fa-google-plus-g:before{content:\"\\f0d5\"}.fa-artstation:before{content:\"\\f77a\"}.fa-markdown:before{content:\"\\f60f\"}.fa-sourcetree:before{content:\"\\f7d3\"}.fa-google-plus:before{content:\"\\f2b3\"}.fa-diaspora:before{content:\"\\f791\"}.fa-foursquare:before{content:\"\\f180\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-github-alt:before{content:\"\\f113\"}.fa-phoenix-squadron:before{content:\"\\f511\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-algolia:before{content:\"\\f36c\"}.fa-red-river:before{content:\"\\f3e3\"}.fa-creative-commons-sa:before{content:\"\\f4ef\"}.fa-safari:before{content:\"\\f267\"}.fa-google:before{content:\"\\f1a0\"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:\"\\f35c\"}.fa-atlassian:before{content:\"\\f77b\"}.fa-linkedin-in:before{content:\"\\f0e1\"}.fa-digital-ocean:before{content:\"\\f391\"}.fa-nimblr:before{content:\"\\f5a8\"}.fa-chromecast:before{content:\"\\f838\"}.fa-evernote:before{content:\"\\f839\"}.fa-hacker-news:before{content:\"\\f1d4\"}.fa-creative-commons-sampling:before{content:\"\\f4f0\"}.fa-adversal:before{content:\"\\f36a\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-watchman-monitoring:before{content:\"\\e087\"}.fa-fonticons:before{content:\"\\f280\"}.fa-weixin:before{content:\"\\f1d7\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-git-alt:before{content:\"\\f841\"}.fa-lyft:before{content:\"\\f3c3\"}.fa-rev:before{content:\"\\f5b2\"}.fa-windows:before{content:\"\\f17a\"}.fa-wizards-of-the-coast:before{content:\"\\f730\"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-meetup:before{content:\"\\f2e0\"}.fa-centos:before{content:\"\\f789\"}.fa-adn:before{content:\"\\f170\"}.fa-cloudsmith:before{content:\"\\f384\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:\"\\f397\"}.fa-codiepie:before{content:\"\\f284\"}.fa-node:before{content:\"\\f419\"}.fa-mix:before{content:\"\\f3cb\"}.fa-steam:before{content:\"\\f1b6\"}.fa-cc-apple-pay:before{content:\"\\f416\"}.fa-scribd:before{content:\"\\f28a\"}.fa-openid:before{content:\"\\f19b\"}.fa-instalod:before{content:\"\\e081\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-sellcast:before{content:\"\\f2da\"}.fa-square-twitter:before,.fa-twitter-square:before{content:\"\\f081\"}.fa-r-project:before{content:\"\\f4f7\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-freebsd:before{content:\"\\f3a4\"}.fa-vuejs:before{content:\"\\f41f\"}.fa-accusoft:before{content:\"\\f369\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-fonticons-fi:before{content:\"\\f3a2\"}.fa-app-store:before{content:\"\\f36f\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-itunes-note:before{content:\"\\f3b5\"}.fa-golang:before{content:\"\\e40f\"}.fa-kickstarter:before{content:\"\\f3bb\"}.fa-grav:before{content:\"\\f2d6\"}.fa-weibo:before{content:\"\\f18a\"}.fa-uncharted:before{content:\"\\e084\"}.fa-firstdraft:before{content:\"\\f3a1\"}.fa-square-youtube:before,.fa-youtube-square:before{content:\"\\f431\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-rendact:before,.fa-wpressr:before{content:\"\\f3e4\"}.fa-angellist:before{content:\"\\f209\"}.fa-galactic-republic:before{content:\"\\f50c\"}.fa-nfc-directional:before{content:\"\\e530\"}.fa-skype:before{content:\"\\f17e\"}.fa-joget:before{content:\"\\f3b7\"}.fa-fedora:before{content:\"\\f798\"}.fa-stripe-s:before{content:\"\\f42a\"}.fa-meta:before{content:\"\\e49b\"}.fa-laravel:before{content:\"\\f3bd\"}.fa-hotjar:before{content:\"\\f3b1\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-sticker-mule:before{content:\"\\f3f7\"}.fa-creative-commons-zero:before{content:\"\\f4f3\"}.fa-hips:before{content:\"\\f452\"}.fa-behance:before{content:\"\\f1b4\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-discord:before{content:\"\\f392\"}.fa-chrome:before{content:\"\\f268\"}.fa-app-store-ios:before{content:\"\\f370\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-confluence:before{content:\"\\f78d\"}.fa-mdb:before{content:\"\\f8ca\"}.fa-dochub:before{content:\"\\f394\"}.fa-accessible-icon:before{content:\"\\f368\"}.fa-ebay:before{content:\"\\f4f4\"}.fa-amazon:before{content:\"\\f270\"}.fa-unsplash:before{content:\"\\e07c\"}.fa-yarn:before{content:\"\\f7e3\"}.fa-square-steam:before,.fa-steam-square:before{content:\"\\f1b7\"}.fa-500px:before{content:\"\\f26e\"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:\"\\f194\"}.fa-asymmetrik:before{content:\"\\f372\"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:\"\\f2b4\"}.fa-gratipay:before{content:\"\\f184\"}.fa-apple:before{content:\"\\f179\"}.fa-hive:before{content:\"\\e07f\"}.fa-gitkraken:before{content:\"\\f3a6\"}.fa-keybase:before{content:\"\\f4f5\"}.fa-apple-pay:before{content:\"\\f415\"}.fa-padlet:before{content:\"\\e4a0\"}.fa-amazon-pay:before{content:\"\\f42c\"}.fa-github-square:before,.fa-square-github:before{content:\"\\f092\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-fedex:before{content:\"\\f797\"}.fa-phoenix-framework:before{content:\"\\f3dc\"}.fa-shopify:before{content:\"\\e057\"}.fa-neos:before{content:\"\\f612\"}.fa-hackerrank:before{content:\"\\f5f7\"}.fa-researchgate:before{content:\"\\f4f8\"}.fa-swift:before{content:\"\\f8e1\"}.fa-angular:before{content:\"\\f420\"}.fa-speakap:before{content:\"\\f3f3\"}.fa-angrycreative:before{content:\"\\f36e\"}.fa-y-combinator:before{content:\"\\f23b\"}.fa-empire:before{content:\"\\f1d1\"}.fa-envira:before{content:\"\\f299\"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:\"\\e5ae\"}.fa-studiovinari:before{content:\"\\f3f8\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-firefox:before{content:\"\\f269\"}.fa-linode:before{content:\"\\f2b8\"}.fa-goodreads:before{content:\"\\f3a8\"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:\"\\f264\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-sith:before{content:\"\\f512\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-page4:before{content:\"\\f3d7\"}.fa-hashnode:before{content:\"\\e499\"}.fa-react:before{content:\"\\f41b\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-squarespace:before{content:\"\\f5be\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-creative-commons-share:before{content:\"\\f4f2\"}.fa-bitcoin:before{content:\"\\f379\"}.fa-keycdn:before{content:\"\\f3ba\"}.fa-opera:before{content:\"\\f26a\"}.fa-itch-io:before{content:\"\\f83a\"}.fa-umbraco:before{content:\"\\f8e8\"}.fa-galactic-senate:before{content:\"\\f50d\"}.fa-ubuntu:before{content:\"\\f7df\"}.fa-draft2digital:before{content:\"\\f396\"}.fa-stripe:before{content:\"\\f429\"}.fa-houzz:before{content:\"\\f27c\"}.fa-gg:before{content:\"\\f260\"}.fa-dhl:before{content:\"\\f790\"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:\"\\f0d3\"}.fa-xing:before{content:\"\\f168\"}.fa-blackberry:before{content:\"\\f37b\"}.fa-creative-commons-pd:before{content:\"\\f4ec\"}.fa-playstation:before{content:\"\\f3df\"}.fa-quinscape:before{content:\"\\f459\"}.fa-less:before{content:\"\\f41d\"}.fa-blogger-b:before{content:\"\\f37d\"}.fa-opencart:before{content:\"\\f23d\"}.fa-vine:before{content:\"\\f1ca\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-gitlab:before{content:\"\\f296\"}.fa-typo3:before{content:\"\\f42b\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-dailymotion:before{content:\"\\e052\"}.fa-affiliatetheme:before{content:\"\\f36b\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-bootstrap:before{content:\"\\f836\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-nfc-symbol:before{content:\"\\e531\"}.fa-ethereum:before{content:\"\\f42e\"}.fa-speaker-deck:before{content:\"\\f83c\"}.fa-creative-commons-nc-eu:before{content:\"\\f4e9\"}.fa-patreon:before{content:\"\\f3d9\"}.fa-avianex:before{content:\"\\f374\"}.fa-ello:before{content:\"\\f5f1\"}.fa-gofore:before{content:\"\\f3a7\"}.fa-bimobject:before{content:\"\\f378\"}.fa-facebook-f:before{content:\"\\f39e\"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:\"\\f0d4\"}.fa-mandalorian:before{content:\"\\f50f\"}.fa-first-order-alt:before{content:\"\\f50a\"}.fa-osi:before{content:\"\\f41a\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-d-and-d-beyond:before{content:\"\\f6ca\"}.fa-periscope:before{content:\"\\f3da\"}.fa-fulcrum:before{content:\"\\f50b\"}.fa-cloudscale:before{content:\"\\f383\"}.fa-forumbee:before{content:\"\\f211\"}.fa-mizuni:before{content:\"\\f3cc\"}.fa-schlix:before{content:\"\\f3ea\"}.fa-square-xing:before,.fa-xing-square:before{content:\"\\f169\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-wpforms:before{content:\"\\f298\"}.fa-cloudversify:before{content:\"\\f385\"}.fa-usps:before{content:\"\\f7e1\"}.fa-megaport:before{content:\"\\f5a3\"}.fa-magento:before{content:\"\\f3c4\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-fly:before{content:\"\\f417\"}.fa-aviato:before{content:\"\\f421\"}.fa-itunes:before{content:\"\\f3b4\"}.fa-cuttlefish:before{content:\"\\f38c\"}.fa-blogger:before{content:\"\\f37c\"}.fa-flickr:before{content:\"\\f16e\"}.fa-viber:before{content:\"\\f409\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-digg:before{content:\"\\f1a6\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-symfony:before{content:\"\\f83d\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-facebook-messenger:before{content:\"\\f39f\"}.fa-audible:before{content:\"\\f373\"}.fa-think-peaks:before{content:\"\\f731\"}.fa-bilibili:before{content:\"\\e3d9\"}.fa-erlang:before{content:\"\\f39d\"}.fa-cotton-bureau:before{content:\"\\f89e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-42-group:before,.fa-innosoft:before{content:\"\\e080\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-elementor:before{content:\"\\f430\"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:\"\\e01e\"}.fa-creative-commons-nd:before{content:\"\\f4eb\"}.fa-palfed:before{content:\"\\f3d8\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-resolving:before{content:\"\\f3e7\"}.fa-xbox:before{content:\"\\f412\"}.fa-searchengin:before{content:\"\\f3eb\"}.fa-tiktok:before{content:\"\\e07b\"}.fa-facebook-square:before,.fa-square-facebook:before{content:\"\\f082\"}.fa-renren:before{content:\"\\f18b\"}.fa-linux:before{content:\"\\f17c\"}.fa-glide:before{content:\"\\f2a5\"}.fa-linkedin:before{content:\"\\f08c\"}.fa-hubspot:before{content:\"\\f3b2\"}.fa-deploydog:before{content:\"\\f38e\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-mixer:before{content:\"\\e056\"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:\"\\f203\"}.fa-vimeo:before{content:\"\\f40a\"}.fa-mendeley:before{content:\"\\f7b3\"}.fa-uniregistry:before{content:\"\\f404\"}.fa-figma:before{content:\"\\f799\"}.fa-creative-commons-remix:before{content:\"\\f4ee\"}.fa-cc-amazon-pay:before{content:\"\\f42d\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-instagram:before{content:\"\\f16d\"}.fa-cmplid:before{content:\"\\e360\"}.fa-facebook:before{content:\"\\f09a\"}.fa-gripfire:before{content:\"\\f3ac\"}.fa-jedi-order:before{content:\"\\f50e\"}.fa-uikit:before{content:\"\\f403\"}.fa-fort-awesome-alt:before{content:\"\\f3a3\"}.fa-phabricator:before{content:\"\\f3db\"}.fa-ussunnah:before{content:\"\\f407\"}.fa-earlybirds:before{content:\"\\f39a\"}.fa-trade-federation:before{content:\"\\f513\"}.fa-autoprefixer:before{content:\"\\f41c\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-google-play:before{content:\"\\f3ab\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-line:before{content:\"\\f3c0\"}.fa-google-drive:before{content:\"\\f3aa\"}.fa-servicestack:before{content:\"\\f3ec\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-deezer:before{content:\"\\e077\"}.fa-raspberry-pi:before{content:\"\\f7bb\"}.fa-jira:before{content:\"\\f7b1\"}.fa-docker:before{content:\"\\f395\"}.fa-screenpal:before{content:\"\\e570\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-gitter:before{content:\"\\f426\"}.fa-d-and-d:before{content:\"\\f38d\"}.fa-microblog:before{content:\"\\e01a\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-pied-piper-hat:before{content:\"\\f4e5\"}.fa-kickstarter-k:before{content:\"\\f3bc\"}.fa-yandex:before{content:\"\\f413\"}.fa-readme:before{content:\"\\f4d5\"}.fa-html5:before{content:\"\\f13b\"}.fa-sellsy:before{content:\"\\f213\"}.fa-sass:before{content:\"\\f41e\"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:\"\\e2d0\"}.fa-buromobelexperte:before{content:\"\\f37f\"}.fa-salesforce:before{content:\"\\f83b\"}.fa-octopus-deploy:before{content:\"\\e082\"}.fa-medapps:before{content:\"\\f3c6\"}.fa-ns8:before{content:\"\\f3d5\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-apper:before{content:\"\\f371\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-waze:before{content:\"\\f83f\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:\"\\f2ab\"}.fa-fantasy-flight-games:before{content:\"\\f6dc\"}.fa-rust:before{content:\"\\e07a\"}.fa-wix:before{content:\"\\f5cf\"}.fa-behance-square:before,.fa-square-behance:before{content:\"\\f1b5\"}.fa-supple:before{content:\"\\f3f9\"}.fa-rebel:before{content:\"\\f1d0\"}.fa-css3:before{content:\"\\f13c\"}.fa-staylinked:before{content:\"\\f3f5\"}.fa-kaggle:before{content:\"\\f5fa\"}.fa-space-awesome:before{content:\"\\e5ac\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-cpanel:before{content:\"\\f388\"}.fa-goodreads-g:before{content:\"\\f3a9\"}.fa-git-square:before,.fa-square-git:before{content:\"\\f1d2\"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:\"\\f174\"}.fa-trello:before{content:\"\\f181\"}.fa-creative-commons-nc-jp:before{content:\"\\f4ea\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-perbyte:before{content:\"\\e083\"}.fa-grunt:before{content:\"\\f3ad\"}.fa-weebly:before{content:\"\\f5cc\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-leanpub:before{content:\"\\f212\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-themeco:before{content:\"\\f5c6\"}.fa-python:before{content:\"\\f3e2\"}.fa-android:before{content:\"\\f17b\"}.fa-bots:before{content:\"\\e340\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-hornbill:before{content:\"\\f592\"}.fa-js:before{content:\"\\f3b8\"}.fa-ideal:before{content:\"\\e013\"}.fa-git:before{content:\"\\f1d3\"}.fa-dev:before{content:\"\\f6cc\"}.fa-sketch:before{content:\"\\f7c6\"}.fa-yandex-international:before{content:\"\\f414\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-uber:before{content:\"\\f402\"}.fa-github:before{content:\"\\f09b\"}.fa-php:before{content:\"\\f457\"}.fa-alipay:before{content:\"\\f642\"}.fa-youtube:before{content:\"\\f167\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-firefox-browser:before{content:\"\\e007\"}.fa-replyd:before{content:\"\\f3e6\"}.fa-suse:before{content:\"\\f7d6\"}.fa-jenkins:before{content:\"\\f3b6\"}.fa-twitter:before{content:\"\\f099\"}.fa-rockrms:before{content:\"\\f3e9\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-buffer:before{content:\"\\f837\"}.fa-npm:before{content:\"\\f3d4\"}.fa-yammer:before{content:\"\\f840\"}.fa-btc:before{content:\"\\f15a\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-stubber:before{content:\"\\e5c7\"}.fa-telegram-plane:before,.fa-telegram:before{content:\"\\f2c6\"}.fa-old-republic:before{content:\"\\f510\"}.fa-odysee:before{content:\"\\e5c6\"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:\"\\f40c\"}.fa-node-js:before{content:\"\\f3d3\"}.fa-edge-legacy:before{content:\"\\e078\"}.fa-slack-hash:before,.fa-slack:before{content:\"\\f198\"}.fa-medrt:before{content:\"\\f3c8\"}.fa-usb:before{content:\"\\f287\"}.fa-tumblr:before{content:\"\\f173\"}.fa-vaadin:before{content:\"\\f408\"}.fa-quora:before{content:\"\\f2c4\"}.fa-reacteurope:before{content:\"\\f75d\"}.fa-medium-m:before,.fa-medium:before{content:\"\\f23a\"}.fa-amilia:before{content:\"\\f36d\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-flipboard:before{content:\"\\f44d\"}.fa-viacoin:before{content:\"\\f237\"}.fa-critical-role:before{content:\"\\f6c9\"}.fa-sitrox:before{content:\"\\e44a\"}.fa-discourse:before{content:\"\\f393\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-mastodon:before{content:\"\\f4f6\"}.fa-airbnb:before{content:\"\\f834\"}.fa-wolf-pack-battalion:before{content:\"\\f514\"}.fa-buy-n-large:before{content:\"\\f8a6\"}.fa-gulp:before{content:\"\\f3ae\"}.fa-creative-commons-sampling-plus:before{content:\"\\f4f1\"}.fa-strava:before{content:\"\\f428\"}.fa-ember:before{content:\"\\f423\"}.fa-canadian-maple-leaf:before{content:\"\\f785\"}.fa-teamspeak:before{content:\"\\f4f9\"}.fa-pushed:before{content:\"\\f3e1\"}.fa-wordpress-simple:before{content:\"\\f411\"}.fa-nutritionix:before{content:\"\\f3d6\"}.fa-wodu:before{content:\"\\e088\"}.fa-google-pay:before{content:\"\\e079\"}.fa-intercom:before{content:\"\\f7af\"}.fa-zhihu:before{content:\"\\f63f\"}.fa-korvue:before{content:\"\\f42f\"}.fa-pix:before{content:\"\\e43a\"}.fa-steam-symbol:before{content:\"\\f3f6\"}:host,:root{--fa-font-regular:normal 400 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:\"Font Awesome 6 Free\";--fa-font-solid:normal 900 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}.fa-solid,.fas{font-weight:900}@font-face{font-family:\"Font Awesome 5 Brands\";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format(\"woff2\"),url(../webfonts/fa-v4compatibility.ttf) format(\"truetype\");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}"}],"authorContributionMap":{"KevinEyo1":9}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/glyphicons/css/bootstrap-glyphicons.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Bootstrap v3.3.7 (http://getbootstrap.com)"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2016 Twitter, Inc."},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id\u003d76290a4e23bf2c3f61a4e17625be4627)"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" * Config saved to config.json and https://gist.github.com/76290a4e23bf2c3f61a4e17625be4627"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" * Bootstrap v3.3.7 (http://getbootstrap.com)"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2016 Twitter, Inc."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"@font-face{font-family:\u0027Glyphicons Halflings\u0027;src:url(../fonts/glyphicons-halflings-regular.eot);src:url(\u0027../fonts/glyphicons-halflings-regular.eot?#iefix\u0027) format(\u0027embedded-opentype\u0027),url(../fonts/glyphicons-halflings-regular.woff2) format(\u0027woff2\u0027),url(../fonts/glyphicons-halflings-regular.woff) format(\u0027woff\u0027),url(../fonts/glyphicons-halflings-regular.ttf) format(\u0027truetype\u0027),url(\u0027../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\u0027) format(\u0027svg\u0027)}.glyphicon{position:relative;top:1px;display:inline-block;font-family:\u0027Glyphicons Halflings\u0027;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:\"\\002a\"}.glyphicon-plus:before{content:\"\\002b\"}.glyphicon-euro:before,.glyphicon-eur:before{content:\"\\20ac\"}.glyphicon-minus:before{content:\"\\2212\"}.glyphicon-cloud:before{content:\"\\2601\"}.glyphicon-envelope:before{content:\"\\2709\"}.glyphicon-pencil:before{content:\"\\270f\"}.glyphicon-glass:before{content:\"\\e001\"}.glyphicon-music:before{content:\"\\e002\"}.glyphicon-search:before{content:\"\\e003\"}.glyphicon-heart:before{content:\"\\e005\"}.glyphicon-star:before{content:\"\\e006\"}.glyphicon-star-empty:before{content:\"\\e007\"}.glyphicon-user:before{content:\"\\e008\"}.glyphicon-film:before{content:\"\\e009\"}.glyphicon-th-large:before{content:\"\\e010\"}.glyphicon-th:before{content:\"\\e011\"}.glyphicon-th-list:before{content:\"\\e012\"}.glyphicon-ok:before{content:\"\\e013\"}.glyphicon-remove:before{content:\"\\e014\"}.glyphicon-zoom-in:before{content:\"\\e015\"}.glyphicon-zoom-out:before{content:\"\\e016\"}.glyphicon-off:before{content:\"\\e017\"}.glyphicon-signal:before{content:\"\\e018\"}.glyphicon-cog:before{content:\"\\e019\"}.glyphicon-trash:before{content:\"\\e020\"}.glyphicon-home:before{content:\"\\e021\"}.glyphicon-file:before{content:\"\\e022\"}.glyphicon-time:before{content:\"\\e023\"}.glyphicon-road:before{content:\"\\e024\"}.glyphicon-download-alt:before{content:\"\\e025\"}.glyphicon-download:before{content:\"\\e026\"}.glyphicon-upload:before{content:\"\\e027\"}.glyphicon-inbox:before{content:\"\\e028\"}.glyphicon-play-circle:before{content:\"\\e029\"}.glyphicon-repeat:before{content:\"\\e030\"}.glyphicon-refresh:before{content:\"\\e031\"}.glyphicon-list-alt:before{content:\"\\e032\"}.glyphicon-lock:before{content:\"\\e033\"}.glyphicon-flag:before{content:\"\\e034\"}.glyphicon-headphones:before{content:\"\\e035\"}.glyphicon-volume-off:before{content:\"\\e036\"}.glyphicon-volume-down:before{content:\"\\e037\"}.glyphicon-volume-up:before{content:\"\\e038\"}.glyphicon-qrcode:before{content:\"\\e039\"}.glyphicon-barcode:before{content:\"\\e040\"}.glyphicon-tag:before{content:\"\\e041\"}.glyphicon-tags:before{content:\"\\e042\"}.glyphicon-book:before{content:\"\\e043\"}.glyphicon-bookmark:before{content:\"\\e044\"}.glyphicon-print:before{content:\"\\e045\"}.glyphicon-camera:before{content:\"\\e046\"}.glyphicon-font:before{content:\"\\e047\"}.glyphicon-bold:before{content:\"\\e048\"}.glyphicon-italic:before{content:\"\\e049\"}.glyphicon-text-height:before{content:\"\\e050\"}.glyphicon-text-width:before{content:\"\\e051\"}.glyphicon-align-left:before{content:\"\\e052\"}.glyphicon-align-center:before{content:\"\\e053\"}.glyphicon-align-right:before{content:\"\\e054\"}.glyphicon-align-justify:before{content:\"\\e055\"}.glyphicon-list:before{content:\"\\e056\"}.glyphicon-indent-left:before{content:\"\\e057\"}.glyphicon-indent-right:before{content:\"\\e058\"}.glyphicon-facetime-video:before{content:\"\\e059\"}.glyphicon-picture:before{content:\"\\e060\"}.glyphicon-map-marker:before{content:\"\\e062\"}.glyphicon-adjust:before{content:\"\\e063\"}.glyphicon-tint:before{content:\"\\e064\"}.glyphicon-edit:before{content:\"\\e065\"}.glyphicon-share:before{content:\"\\e066\"}.glyphicon-check:before{content:\"\\e067\"}.glyphicon-move:before{content:\"\\e068\"}.glyphicon-step-backward:before{content:\"\\e069\"}.glyphicon-fast-backward:before{content:\"\\e070\"}.glyphicon-backward:before{content:\"\\e071\"}.glyphicon-play:before{content:\"\\e072\"}.glyphicon-pause:before{content:\"\\e073\"}.glyphicon-stop:before{content:\"\\e074\"}.glyphicon-forward:before{content:\"\\e075\"}.glyphicon-fast-forward:before{content:\"\\e076\"}.glyphicon-step-forward:before{content:\"\\e077\"}.glyphicon-eject:before{content:\"\\e078\"}.glyphicon-chevron-left:before{content:\"\\e079\"}.glyphicon-chevron-right:before{content:\"\\e080\"}.glyphicon-plus-sign:before{content:\"\\e081\"}.glyphicon-minus-sign:before{content:\"\\e082\"}.glyphicon-remove-sign:before{content:\"\\e083\"}.glyphicon-ok-sign:before{content:\"\\e084\"}.glyphicon-question-sign:before{content:\"\\e085\"}.glyphicon-info-sign:before{content:\"\\e086\"}.glyphicon-screenshot:before{content:\"\\e087\"}.glyphicon-remove-circle:before{content:\"\\e088\"}.glyphicon-ok-circle:before{content:\"\\e089\"}.glyphicon-ban-circle:before{content:\"\\e090\"}.glyphicon-arrow-left:before{content:\"\\e091\"}.glyphicon-arrow-right:before{content:\"\\e092\"}.glyphicon-arrow-up:before{content:\"\\e093\"}.glyphicon-arrow-down:before{content:\"\\e094\"}.glyphicon-share-alt:before{content:\"\\e095\"}.glyphicon-resize-full:before{content:\"\\e096\"}.glyphicon-resize-small:before{content:\"\\e097\"}.glyphicon-exclamation-sign:before{content:\"\\e101\"}.glyphicon-gift:before{content:\"\\e102\"}.glyphicon-leaf:before{content:\"\\e103\"}.glyphicon-fire:before{content:\"\\e104\"}.glyphicon-eye-open:before{content:\"\\e105\"}.glyphicon-eye-close:before{content:\"\\e106\"}.glyphicon-warning-sign:before{content:\"\\e107\"}.glyphicon-plane:before{content:\"\\e108\"}.glyphicon-calendar:before{content:\"\\e109\"}.glyphicon-random:before{content:\"\\e110\"}.glyphicon-comment:before{content:\"\\e111\"}.glyphicon-magnet:before{content:\"\\e112\"}.glyphicon-chevron-up:before{content:\"\\e113\"}.glyphicon-chevron-down:before{content:\"\\e114\"}.glyphicon-retweet:before{content:\"\\e115\"}.glyphicon-shopping-cart:before{content:\"\\e116\"}.glyphicon-folder-close:before{content:\"\\e117\"}.glyphicon-folder-open:before{content:\"\\e118\"}.glyphicon-resize-vertical:before{content:\"\\e119\"}.glyphicon-resize-horizontal:before{content:\"\\e120\"}.glyphicon-hdd:before{content:\"\\e121\"}.glyphicon-bullhorn:before{content:\"\\e122\"}.glyphicon-bell:before{content:\"\\e123\"}.glyphicon-certificate:before{content:\"\\e124\"}.glyphicon-thumbs-up:before{content:\"\\e125\"}.glyphicon-thumbs-down:before{content:\"\\e126\"}.glyphicon-hand-right:before{content:\"\\e127\"}.glyphicon-hand-left:before{content:\"\\e128\"}.glyphicon-hand-up:before{content:\"\\e129\"}.glyphicon-hand-down:before{content:\"\\e130\"}.glyphicon-circle-arrow-right:before{content:\"\\e131\"}.glyphicon-circle-arrow-left:before{content:\"\\e132\"}.glyphicon-circle-arrow-up:before{content:\"\\e133\"}.glyphicon-circle-arrow-down:before{content:\"\\e134\"}.glyphicon-globe:before{content:\"\\e135\"}.glyphicon-wrench:before{content:\"\\e136\"}.glyphicon-tasks:before{content:\"\\e137\"}.glyphicon-filter:before{content:\"\\e138\"}.glyphicon-briefcase:before{content:\"\\e139\"}.glyphicon-fullscreen:before{content:\"\\e140\"}.glyphicon-dashboard:before{content:\"\\e141\"}.glyphicon-paperclip:before{content:\"\\e142\"}.glyphicon-heart-empty:before{content:\"\\e143\"}.glyphicon-link:before{content:\"\\e144\"}.glyphicon-phone:before{content:\"\\e145\"}.glyphicon-pushpin:before{content:\"\\e146\"}.glyphicon-usd:before{content:\"\\e148\"}.glyphicon-gbp:before{content:\"\\e149\"}.glyphicon-sort:before{content:\"\\e150\"}.glyphicon-sort-by-alphabet:before{content:\"\\e151\"}.glyphicon-sort-by-alphabet-alt:before{content:\"\\e152\"}.glyphicon-sort-by-order:before{content:\"\\e153\"}.glyphicon-sort-by-order-alt:before{content:\"\\e154\"}.glyphicon-sort-by-attributes:before{content:\"\\e155\"}.glyphicon-sort-by-attributes-alt:before{content:\"\\e156\"}.glyphicon-unchecked:before{content:\"\\e157\"}.glyphicon-expand:before{content:\"\\e158\"}.glyphicon-collapse-down:before{content:\"\\e159\"}.glyphicon-collapse-up:before{content:\"\\e160\"}.glyphicon-log-in:before{content:\"\\e161\"}.glyphicon-flash:before{content:\"\\e162\"}.glyphicon-log-out:before{content:\"\\e163\"}.glyphicon-new-window:before{content:\"\\e164\"}.glyphicon-record:before{content:\"\\e165\"}.glyphicon-save:before{content:\"\\e166\"}.glyphicon-open:before{content:\"\\e167\"}.glyphicon-saved:before{content:\"\\e168\"}.glyphicon-import:before{content:\"\\e169\"}.glyphicon-export:before{content:\"\\e170\"}.glyphicon-send:before{content:\"\\e171\"}.glyphicon-floppy-disk:before{content:\"\\e172\"}.glyphicon-floppy-saved:before{content:\"\\e173\"}.glyphicon-floppy-remove:before{content:\"\\e174\"}.glyphicon-floppy-save:before{content:\"\\e175\"}.glyphicon-floppy-open:before{content:\"\\e176\"}.glyphicon-credit-card:before{content:\"\\e177\"}.glyphicon-transfer:before{content:\"\\e178\"}.glyphicon-cutlery:before{content:\"\\e179\"}.glyphicon-header:before{content:\"\\e180\"}.glyphicon-compressed:before{content:\"\\e181\"}.glyphicon-earphone:before{content:\"\\e182\"}.glyphicon-phone-alt:before{content:\"\\e183\"}.glyphicon-tower:before{content:\"\\e184\"}.glyphicon-stats:before{content:\"\\e185\"}.glyphicon-sd-video:before{content:\"\\e186\"}.glyphicon-hd-video:before{content:\"\\e187\"}.glyphicon-subtitles:before{content:\"\\e188\"}.glyphicon-sound-stereo:before{content:\"\\e189\"}.glyphicon-sound-dolby:before{content:\"\\e190\"}.glyphicon-sound-5-1:before{content:\"\\e191\"}.glyphicon-sound-6-1:before{content:\"\\e192\"}.glyphicon-sound-7-1:before{content:\"\\e193\"}.glyphicon-copyright-mark:before{content:\"\\e194\"}.glyphicon-registration-mark:before{content:\"\\e195\"}.glyphicon-cloud-download:before{content:\"\\e197\"}.glyphicon-cloud-upload:before{content:\"\\e198\"}.glyphicon-tree-conifer:before{content:\"\\e199\"}.glyphicon-tree-deciduous:before{content:\"\\e200\"}.glyphicon-cd:before{content:\"\\e201\"}.glyphicon-save-file:before{content:\"\\e202\"}.glyphicon-open-file:before{content:\"\\e203\"}.glyphicon-level-up:before{content:\"\\e204\"}.glyphicon-copy:before{content:\"\\e205\"}.glyphicon-paste:before{content:\"\\e206\"}.glyphicon-alert:before{content:\"\\e209\"}.glyphicon-equalizer:before{content:\"\\e210\"}.glyphicon-king:before{content:\"\\e211\"}.glyphicon-queen:before{content:\"\\e212\"}.glyphicon-pawn:before{content:\"\\e213\"}.glyphicon-bishop:before{content:\"\\e214\"}.glyphicon-knight:before{content:\"\\e215\"}.glyphicon-baby-formula:before{content:\"\\e216\"}.glyphicon-tent:before{content:\"\\26fa\"}.glyphicon-blackboard:before{content:\"\\e218\"}.glyphicon-bed:before{content:\"\\e219\"}.glyphicon-apple:before{content:\"\\f8ff\"}.glyphicon-erase:before{content:\"\\e221\"}.glyphicon-hourglass:before{content:\"\\231b\"}.glyphicon-lamp:before{content:\"\\e223\"}.glyphicon-duplicate:before{content:\"\\e224\"}.glyphicon-piggy-bank:before{content:\"\\e225\"}.glyphicon-scissors:before{content:\"\\e226\"}.glyphicon-bitcoin:before{content:\"\\e227\"}.glyphicon-btc:before{content:\"\\e227\"}.glyphicon-xbt:before{content:\"\\e227\"}.glyphicon-yen:before{content:\"\\00a5\"}.glyphicon-jpy:before{content:\"\\00a5\"}.glyphicon-ruble:before{content:\"\\20bd\"}.glyphicon-rub:before{content:\"\\20bd\"}.glyphicon-scale:before{content:\"\\e230\"}.glyphicon-ice-lolly:before{content:\"\\e231\"}.glyphicon-ice-lolly-tasted:before{content:\"\\e232\"}.glyphicon-education:before{content:\"\\e233\"}.glyphicon-option-horizontal:before{content:\"\\e234\"}.glyphicon-option-vertical:before{content:\"\\e235\"}.glyphicon-menu-hamburger:before{content:\"\\e236\"}.glyphicon-modal-window:before{content:\"\\e237\"}.glyphicon-oil:before{content:\"\\e238\"}.glyphicon-grain:before{content:\"\\e239\"}.glyphicon-sunglasses:before{content:\"\\e240\"}.glyphicon-text-size:before{content:\"\\e241\"}.glyphicon-text-color:before{content:\"\\e242\"}.glyphicon-text-background:before{content:\"\\e243\"}.glyphicon-object-align-top:before{content:\"\\e244\"}.glyphicon-object-align-bottom:before{content:\"\\e245\"}.glyphicon-object-align-horizontal:before{content:\"\\e246\"}.glyphicon-object-align-left:before{content:\"\\e247\"}.glyphicon-object-align-vertical:before{content:\"\\e248\"}.glyphicon-object-align-right:before{content:\"\\e249\"}.glyphicon-triangle-right:before{content:\"\\e250\"}.glyphicon-triangle-left:before{content:\"\\e251\"}.glyphicon-triangle-bottom:before{content:\"\\e252\"}.glyphicon-triangle-top:before{content:\"\\e253\"}.glyphicon-console:before{content:\"\\e254\"}.glyphicon-superscript:before{content:\"\\e255\"}.glyphicon-subscript:before{content:\"\\e256\"}.glyphicon-menu-left:before{content:\"\\e257\"}.glyphicon-menu-right:before{content:\"\\e258\"}.glyphicon-menu-down:before{content:\"\\e259\"}.glyphicon-menu-up:before{content:\"\\e260\"}"}],"authorContributionMap":{"KevinEyo1":17}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/js/bootstrap-utility.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Bootstrap v5.1.3 (https://getbootstrap.com/)"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"!function(t,e){\"object\"\u003d\u003dtypeof exports\u0026\u0026\"undefined\"!\u003dtypeof module?module.exports\u003de():\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define(e):(t\u003d\"undefined\"!\u003dtypeof globalThis?globalThis:t||self).bootstrap\u003de()}(this,(function(){\"use strict\";const t\u003d\"transitionend\",e\u003dt\u003d\u003e{let e\u003dt.getAttribute(\"data-bs-target\");if(!e||\"#\"\u003d\u003d\u003de){let i\u003dt.getAttribute(\"href\");if(!i||!i.includes(\"#\")\u0026\u0026!i.startsWith(\".\"))return null;i.includes(\"#\")\u0026\u0026!i.startsWith(\"#\")\u0026\u0026(i\u003d`#${i.split(\"#\")[1]}`),e\u003di\u0026\u0026\"#\"!\u003d\u003di?i.trim():null}return e},i\u003dt\u003d\u003e{const i\u003de(t);return i\u0026\u0026document.querySelector(i)?i:null},n\u003dt\u003d\u003e{const i\u003de(t);return i?document.querySelector(i):null},s\u003de\u003d\u003e{e.dispatchEvent(new Event(t))},o\u003dt\u003d\u003e!(!t||\"object\"!\u003dtypeof t)\u0026\u0026(void 0!\u003d\u003dt.jquery\u0026\u0026(t\u003dt[0]),void 0!\u003d\u003dt.nodeType),r\u003dt\u003d\u003eo(t)?t.jquery?t[0]:t:\"string\"\u003d\u003dtypeof t\u0026\u0026t.length\u003e0?document.querySelector(t):null,a\u003d(t,e,i)\u003d\u003e{Object.keys(i).forEach((n\u003d\u003e{const s\u003di[n],r\u003de[n],a\u003dr\u0026\u0026o(r)?\"element\":null\u003d\u003d(l\u003dr)?`${l}`:{}.toString.call(l).match(/\\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option \"${n}\" provided type \"${a}\" but expected type \"${s}\".`)}))},l\u003dt\u003d\u003e!(!o(t)||0\u003d\u003d\u003dt.getClientRects().length)\u0026\u0026\"visible\"\u003d\u003d\u003dgetComputedStyle(t).getPropertyValue(\"visibility\"),c\u003dt\u003d\u003e!t||t.nodeType!\u003d\u003dNode.ELEMENT_NODE||!!t.classList.contains(\"disabled\")||(void 0!\u003d\u003dt.disabled?t.disabled:t.hasAttribute(\"disabled\")\u0026\u0026\"false\"!\u003d\u003dt.getAttribute(\"disabled\")),h\u003dt\u003d\u003e{if(!document.documentElement.attachShadow)return null;if(\"function\"\u003d\u003dtypeof t.getRootNode){const e\u003dt.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d\u003d()\u003d\u003e{},u\u003dt\u003d\u003e{t.offsetHeight},f\u003d()\u003d\u003e{const{jQuery:t}\u003dwindow;return t\u0026\u0026!document.body.hasAttribute(\"data-bs-no-jquery\")?t:null},p\u003d[],m\u003d()\u003d\u003e\"rtl\"\u003d\u003d\u003ddocument.documentElement.dir,g\u003dt\u003d\u003e{var e;e\u003d()\u003d\u003e{const e\u003df();if(e){const i\u003dt.NAME,n\u003de.fn[i];e.fn[i]\u003dt.jQueryInterface,e.fn[i].Constructor\u003dt,e.fn[i].noConflict\u003d()\u003d\u003e(e.fn[i]\u003dn,t.jQueryInterface)}},\"loading\"\u003d\u003d\u003ddocument.readyState?(p.length||document.addEventListener(\"DOMContentLoaded\",(()\u003d\u003e{p.forEach((t\u003d\u003et()))})),p.push(e)):e()},_\u003dt\u003d\u003e{\"function\"\u003d\u003dtypeof t\u0026\u0026t()},b\u003d(e,i,n\u003d!0)\u003d\u003e{if(!n)return void _(e);const o\u003d(t\u003d\u003e{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}\u003dwindow.getComputedStyle(t);const n\u003dNumber.parseFloat(e),s\u003dNumber.parseFloat(i);return n||s?(e\u003de.split(\",\")[0],i\u003di.split(\",\")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r\u003d!1;const a\u003d({target:n})\u003d\u003e{n\u003d\u003d\u003di\u0026\u0026(r\u003d!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()\u003d\u003e{r||s(i)}),o)},v\u003d(t,e,i,n)\u003d\u003e{let s\u003dt.indexOf(e);if(-1\u003d\u003d\u003ds)return t[!i\u0026\u0026n?t.length-1:0];const o\u003dt.length;return s+\u003di?1:-1,n\u0026\u0026(s\u003d(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y\u003d/[^.]*(?\u003d\\..*)\\.|.*/,w\u003d/\\..*/,E\u003d/::\\d+$/,A\u003d{};let T\u003d1;const O\u003d{mouseenter:\"mouseover\",mouseleave:\"mouseout\"},C\u003d/^(mouseenter|mouseleave)/i,k\u003dnew Set([\"click\",\"dblclick\",\"mouseup\",\"mousedown\",\"contextmenu\",\"mousewheel\",\"DOMMouseScroll\",\"mouseover\",\"mouseout\",\"mousemove\",\"selectstart\",\"selectend\",\"keydown\",\"keypress\",\"keyup\",\"orientationchange\",\"touchstart\",\"touchmove\",\"touchend\",\"touchcancel\",\"pointerdown\",\"pointermove\",\"pointerup\",\"pointerleave\",\"pointercancel\",\"gesturestart\",\"gesturechange\",\"gestureend\",\"focus\",\"blur\",\"change\",\"reset\",\"select\",\"submit\",\"focusin\",\"focusout\",\"load\",\"unload\",\"beforeunload\",\"resize\",\"move\",\"DOMContentLoaded\",\"readystatechange\",\"error\",\"abort\",\"scroll\"]);function L(t,e){return e\u0026\u0026`${e}::${T++}`||t.uidEvent||T++}function x(t){const e\u003dL(t);return t.uidEvent\u003de,A[e]\u003dA[e]||{},A[e]}function D(t,e,i\u003dnull){const n\u003dObject.keys(t);for(let s\u003d0,o\u003dn.length;s\u003co;s++){const o\u003dt[n[s]];if(o.originalHandler\u003d\u003d\u003de\u0026\u0026o.delegationSelector\u003d\u003d\u003di)return o}return null}function S(t,e,i){const n\u003d\"string\"\u003d\u003dtypeof e,s\u003dn?i:e;let o\u003dP(t);return k.has(o)||(o\u003dt),[n,s,o]}function N(t,e,i,n,s){if(\"string\"!\u003dtypeof e||!t)return;if(i||(i\u003dn,n\u003dnull),C.test(e)){const t\u003dt\u003d\u003efunction(e){if(!e.relatedTarget||e.relatedTarget!\u003d\u003de.delegateTarget\u0026\u0026!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n\u003dt(n):i\u003dt(i)}const[o,r,a]\u003dS(e,i,n),l\u003dx(t),c\u003dl[a]||(l[a]\u003d{}),h\u003dD(c,r,o?i:null);if(h)return void(h.oneOff\u003dh.oneOff\u0026\u0026s);const d\u003dL(r,e.replace(y,\"\")),u\u003do?function(t,e,i){return function n(s){const o\u003dt.querySelectorAll(e);for(let{target:r}\u003ds;r\u0026\u0026r!\u003d\u003dthis;r\u003dr.parentNode)for(let a\u003do.length;a--;)if(o[a]\u003d\u003d\u003dr)return s.delegateTarget\u003dr,n.oneOff\u0026\u0026j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget\u003dt,i.oneOff\u0026\u0026j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector\u003do?i:null,u.originalHandler\u003dr,u.oneOff\u003ds,u.uidEvent\u003dd,c[d]\u003du,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o\u003dD(e[i],n,s);o\u0026\u0026(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t\u003dt.replace(w,\"\"),O[t]||t}const j\u003d{on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if(\"string\"!\u003dtypeof e||!t)return;const[s,o,r]\u003dS(e,i,n),a\u003dr!\u003d\u003de,l\u003dx(t),c\u003de.startsWith(\".\");if(void 0!\u003d\u003do){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c\u0026\u0026Object.keys(l).forEach((i\u003d\u003e{!function(t,e,i,n){const s\u003de[i]||{};Object.keys(s).forEach((o\u003d\u003e{if(o.includes(n)){const n\u003ds[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h\u003dl[r]||{};Object.keys(h).forEach((i\u003d\u003e{const n\u003di.replace(E,\"\");if(!a||e.includes(n)){const e\u003dh[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if(\"string\"!\u003dtypeof e||!t)return null;const n\u003df(),s\u003dP(e),o\u003de!\u003d\u003ds,r\u003dk.has(s);let a,l\u003d!0,c\u003d!0,h\u003d!1,d\u003dnull;return o\u0026\u0026n\u0026\u0026(a\u003dn.Event(e,i),n(t).trigger(a),l\u003d!a.isPropagationStopped(),c\u003d!a.isImmediatePropagationStopped(),h\u003da.isDefaultPrevented()),r?(d\u003ddocument.createEvent(\"HTMLEvents\"),d.initEvent(s,l,!0)):d\u003dnew CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!\u003d\u003di\u0026\u0026Object.keys(i).forEach((t\u003d\u003e{Object.defineProperty(d,t,{get:()\u003d\u003ei[t]})})),h\u0026\u0026d.preventDefault(),c\u0026\u0026t.dispatchEvent(d),d.defaultPrevented\u0026\u0026void 0!\u003d\u003da\u0026\u0026a.preventDefault(),d}},M\u003dnew Map,H\u003d{set(t,e,i){M.has(t)||M.set(t,new Map);const n\u003dM.get(t);n.has(e)||0\u003d\u003d\u003dn.size?n.set(e,i):console.error(`Bootstrap doesn\u0027t allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)\u003d\u003eM.has(t)\u0026\u0026M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i\u003dM.get(t);i.delete(e),0\u003d\u003d\u003di.size\u0026\u0026M.delete(t)}};class B{constructor(t){(t\u003dr(t))\u0026\u0026(this._element\u003dt,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t\u003d\u003e{this[t]\u003dnull}))}_queueCallback(t,e,i\u003d!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e\u003d{}){return this.getInstance(t)||new this(t,\"object\"\u003d\u003dtypeof e?e:null)}static get VERSION(){return\"5.1.3\"}static get NAME(){throw new Error(\u0027You have to implement the static method \"NAME\", for each component!\u0027)}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R\u003d(t,e\u003d\"hide\")\u003d\u003e{const i\u003d`click.dismiss${t.EVENT_KEY}`,s\u003dt.NAME;j.on(document,i,`[data-bs-dismiss\u003d\"${s}\"]`,(function(i){if([\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026i.preventDefault(),c(this))return;const o\u003dn(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return\"alert\"}close(){if(j.trigger(this._element,\"close.bs.alert\").defaultPrevented)return;this._element.classList.remove(\"show\");const t\u003dthis._element.classList.contains(\"fade\");this._queueCallback((()\u003d\u003ethis._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,\"closed.bs.alert\"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e\u003dW.getOrCreateInstance(this);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t]||t.startsWith(\"_\")||\"constructor\"\u003d\u003d\u003dt)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}R(W,\"close\"),g(W);const $\u003d\u0027[data-bs-toggle\u003d\"button\"]\u0027;class z extends B{static get NAME(){return\"button\"}toggle(){this._element.setAttribute(\"aria-pressed\",this._element.classList.toggle(\"active\"))}static jQueryInterface(t){return this.each((function(){const e\u003dz.getOrCreateInstance(this);\"toggle\"\u003d\u003d\u003dt\u0026\u0026e[t]()}))}}function q(t){return\"true\"\u003d\u003d\u003dt||\"false\"!\u003d\u003dt\u0026\u0026(t\u003d\u003d\u003dNumber(t).toString()?Number(t):\"\"\u003d\u003d\u003dt||\"null\"\u003d\u003d\u003dt?null:t)}function F(t){return t.replace(/[A-Z]/g,(t\u003d\u003e`-${t.toLowerCase()}`))}j.on(document,\"click.bs.button.data-api\",$,(t\u003d\u003e{t.preventDefault();const e\u003dt.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U\u003d{setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e\u003d{};return Object.keys(t.dataset).filter((t\u003d\u003et.startsWith(\"bs\"))).forEach((i\u003d\u003e{let n\u003di.replace(/^bs/,\"\");n\u003dn.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]\u003dq(t.dataset[i])})),e},getDataAttribute:(t,e)\u003d\u003eq(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e\u003dt.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t\u003d\u003e({top:t.offsetTop,left:t.offsetLeft})},V\u003d{find:(t,e\u003ddocument.documentElement)\u003d\u003e[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e\u003ddocument.documentElement)\u003d\u003eElement.prototype.querySelector.call(e,t),children:(t,e)\u003d\u003e[].concat(...t.children).filter((t\u003d\u003et.matches(e))),parents(t,e){const i\u003d[];let n\u003dt.parentNode;for(;n\u0026\u0026n.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE\u0026\u00263!\u003d\u003dn.nodeType;)n.matches(e)\u0026\u0026i.push(n),n\u003dn.parentNode;return i},prev(t,e){let i\u003dt.previousElementSibling;for(;i;){if(i.matches(e))return[i];i\u003di.previousElementSibling}return[]},next(t,e){let i\u003dt.nextElementSibling;for(;i;){if(i.matches(e))return[i];i\u003di.nextElementSibling}return[]},focusableChildren(t){const e\u003d[\"a\",\"button\",\"input\",\"textarea\",\"select\",\"details\",\"[tabindex]\",\u0027[contenteditable\u003d\"true\"]\u0027].map((t\u003d\u003e`${t}:not([tabindex^\u003d\"-\"])`)).join(\", \");return this.find(e,t).filter((t\u003d\u003e!c(t)\u0026\u0026l(t)))}},K\u003d\"carousel\",X\u003d{interval:5e3,keyboard:!0,slide:!1,pause:\"hover\",wrap:!0,touch:!0},Y\u003d{interval:\"(number|boolean)\",keyboard:\"boolean\",slide:\"(boolean|string)\",pause:\"(string|boolean)\",wrap:\"boolean\",touch:\"boolean\"},Q\u003d\"next\",G\u003d\"prev\",Z\u003d\"left\",J\u003d\"right\",tt\u003d{ArrowLeft:J,ArrowRight:Z},et\u003d\"slid.bs.carousel\",it\u003d\"active\",nt\u003d\".active.carousel-item\";class st extends B{constructor(t,e){super(t),this._items\u003dnull,this._interval\u003dnull,this._activeElement\u003dnull,this._isPaused\u003d!1,this._isSliding\u003d!1,this.touchTimeout\u003dnull,this.touchStartX\u003d0,this.touchDeltaX\u003d0,this._config\u003dthis._getConfig(e),this._indicatorsElement\u003dV.findOne(\".carousel-indicators\",this._element),this._touchSupported\u003d\"ontouchstart\"in document.documentElement||navigator.maxTouchPoints\u003e0,this._pointerEvent\u003dBoolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden\u0026\u0026l(this._element)\u0026\u0026this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused\u003d!0),V.findOne(\".carousel-item-next, .carousel-item-prev\",this._element)\u0026\u0026(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval\u003dnull}cycle(t){t||(this._isPaused\u003d!1),this._interval\u0026\u0026(clearInterval(this._interval),this._interval\u003dnull),this._config\u0026\u0026this._config.interval\u0026\u0026!this._isPaused\u0026\u0026(this._updateInterval(),this._interval\u003dsetInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement\u003dV.findOne(nt,this._element);const e\u003dthis._getItemIndex(this._activeElement);if(t\u003ethis._items.length-1||t\u003c0)return;if(this._isSliding)return void j.one(this._element,et,(()\u003d\u003ethis.to(t)));if(e\u003d\u003d\u003dt)return this.pause(),void this.cycle();const i\u003dt\u003ee?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t\u003d{...X,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t\u003dMath.abs(this.touchDeltaX);if(t\u003c\u003d40)return;const e\u003dt/this.touchDeltaX;this.touchDeltaX\u003d0,e\u0026\u0026this._slide(e\u003e0?J:Z)}_addEventListeners(){this._config.keyboard\u0026\u0026j.on(this._element,\"keydown.bs.carousel\",(t\u003d\u003ethis._keydown(t))),\"hover\"\u003d\u003d\u003dthis._config.pause\u0026\u0026(j.on(this._element,\"mouseenter.bs.carousel\",(t\u003d\u003ethis.pause(t))),j.on(this._element,\"mouseleave.bs.carousel\",(t\u003d\u003ethis.cycle(t)))),this._config.touch\u0026\u0026this._touchSupported\u0026\u0026this._addTouchEventListeners()}_addTouchEventListeners(){const t\u003dt\u003d\u003ethis._pointerEvent\u0026\u0026(\"pen\"\u003d\u003d\u003dt.pointerType||\"touch\"\u003d\u003d\u003dt.pointerType),e\u003de\u003d\u003e{t(e)?this.touchStartX\u003de.clientX:this._pointerEvent||(this.touchStartX\u003de.touches[0].clientX)},i\u003dt\u003d\u003e{this.touchDeltaX\u003dt.touches\u0026\u0026t.touches.length\u003e1?0:t.touches[0].clientX-this.touchStartX},n\u003de\u003d\u003e{t(e)\u0026\u0026(this.touchDeltaX\u003de.clientX-this.touchStartX),this._handleSwipe(),\"hover\"\u003d\u003d\u003dthis._config.pause\u0026\u0026(this.pause(),this.touchTimeout\u0026\u0026clearTimeout(this.touchTimeout),this.touchTimeout\u003dsetTimeout((t\u003d\u003ethis.cycle(t)),500+this._config.interval))};V.find(\".carousel-item img\",this._element).forEach((t\u003d\u003e{j.on(t,\"dragstart.bs.carousel\",(t\u003d\u003et.preventDefault()))})),this._pointerEvent?(j.on(this._element,\"pointerdown.bs.carousel\",(t\u003d\u003ee(t))),j.on(this._element,\"pointerup.bs.carousel\",(t\u003d\u003en(t))),this._element.classList.add(\"pointer-event\")):(j.on(this._element,\"touchstart.bs.carousel\",(t\u003d\u003ee(t))),j.on(this._element,\"touchmove.bs.carousel\",(t\u003d\u003ei(t))),j.on(this._element,\"touchend.bs.carousel\",(t\u003d\u003en(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e\u003dtt[t.key];e\u0026\u0026(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items\u003dt\u0026\u0026t.parentNode?V.find(\".carousel-item\",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i\u003dt\u003d\u003d\u003dQ;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i\u003dthis._getItemIndex(t),n\u003dthis._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,\"slide.bs.carousel\",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e\u003dV.findOne(\".active\",this._indicatorsElement);e.classList.remove(it),e.removeAttribute(\"aria-current\");const i\u003dV.find(\"[data-bs-target]\",this._indicatorsElement);for(let e\u003d0;e\u003ci.length;e++)if(Number.parseInt(i[e].getAttribute(\"data-bs-slide-to\"),10)\u003d\u003d\u003dthis._getItemIndex(t)){i[e].classList.add(it),i[e].setAttribute(\"aria-current\",\"true\");break}}}_updateInterval(){const t\u003dthis._activeElement||V.findOne(nt,this._element);if(!t)return;const e\u003dNumber.parseInt(t.getAttribute(\"data-bs-interval\"),10);e?(this._config.defaultInterval\u003dthis._config.defaultInterval||this._config.interval,this._config.interval\u003de):this._config.interval\u003dthis._config.defaultInterval||this._config.interval}_slide(t,e){const i\u003dthis._directionToOrder(t),n\u003dV.findOne(nt,this._element),s\u003dthis._getItemIndex(n),o\u003de||this._getItemByOrder(i,n),r\u003dthis._getItemIndex(o),a\u003dBoolean(this._interval),l\u003di\u003d\u003d\u003dQ,c\u003dl?\"carousel-item-start\":\"carousel-item-end\",h\u003dl?\"carousel-item-next\":\"carousel-item-prev\",d\u003dthis._orderToDirection(i);if(o\u0026\u0026o.classList.contains(it))return void(this._isSliding\u003d!1);if(this._isSliding)return;if(this._triggerSlideEvent(o,d).defaultPrevented)return;if(!n||!o)return;this._isSliding\u003d!0,a\u0026\u0026this.pause(),this._setActiveIndicatorElement(o),this._activeElement\u003do;const f\u003d()\u003d\u003e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains(\"slide\")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t\u003d()\u003d\u003e{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding\u003d!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding\u003d!1,f();a\u0026\u0026this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t\u003d\u003d\u003dZ?G:Q:t\u003d\u003d\u003dZ?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t\u003d\u003d\u003dG?Z:J:t\u003d\u003d\u003dG?J:Z:t}static carouselInterface(t,e){const i\u003dst.getOrCreateInstance(t,e);let{_config:n}\u003di;\"object\"\u003d\u003dtypeof e\u0026\u0026(n\u003d{...n,...e});const s\u003d\"string\"\u003d\u003dtypeof e?e:n.slide;if(\"number\"\u003d\u003dtypeof e)i.to(e);else if(\"string\"\u003d\u003dtypeof s){if(void 0\u003d\u003d\u003di[s])throw new TypeError(`No method named \"${s}\"`);i[s]()}else n.interval\u0026\u0026n.ride\u0026\u0026(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e\u003dn(this);if(!e||!e.classList.contains(\"carousel\"))return;const i\u003d{...U.getDataAttributes(e),...U.getDataAttributes(this)},s\u003dthis.getAttribute(\"data-bs-slide-to\");s\u0026\u0026(i.interval\u003d!1),st.carouselInterface(e,i),s\u0026\u0026st.getInstance(e).to(s),t.preventDefault()}}j.on(document,\"click.bs.carousel.data-api\",\"[data-bs-slide], [data-bs-slide-to]\",st.dataApiClickHandler),j.on(window,\"load.bs.carousel.data-api\",(()\u003d\u003e{const t\u003dV.find(\u0027[data-bs-ride\u003d\"carousel\"]\u0027);for(let e\u003d0,i\u003dt.length;e\u003ci;e++)st.carouselInterface(t[e],st.getInstance(t[e]))})),g(st);const ot\u003d\"collapse\",rt\u003d{toggle:!0,parent:null},at\u003d{toggle:\"boolean\",parent:\"(null|element)\"},lt\u003d\"show\",ct\u003d\"collapse\",ht\u003d\"collapsing\",dt\u003d\"collapsed\",ut\u003d\":scope .collapse .collapse\",ft\u003d\u0027[data-bs-toggle\u003d\"collapse\"]\u0027;class pt extends B{constructor(t,e){super(t),this._isTransitioning\u003d!1,this._config\u003dthis._getConfig(e),this._triggerArray\u003d[];const n\u003dV.find(ft);for(let t\u003d0,e\u003dn.length;t\u003ce;t++){const e\u003dn[t],s\u003di(e),o\u003dV.find(s).filter((t\u003d\u003et\u003d\u003d\u003dthis._element));null!\u003d\u003ds\u0026\u0026o.length\u0026\u0026(this._selector\u003ds,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle\u0026\u0026this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e\u003d[];if(this._config.parent){const t\u003dV.find(ut,this._config.parent);e\u003dV.find(\".collapse.show, .collapse.collapsing\",this._config.parent).filter((e\u003d\u003e!t.includes(e)))}const i\u003dV.findOne(this._selector);if(e.length){const n\u003de.find((t\u003d\u003ei!\u003d\u003dt));if(t\u003dn?pt.getInstance(n):null,t\u0026\u0026t._isTransitioning)return}if(j.trigger(this._element,\"show.bs.collapse\").defaultPrevented)return;e.forEach((e\u003d\u003e{i!\u003d\u003de\u0026\u0026pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,\"bs.collapse\",null)}));const n\u003dthis._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]\u003d0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning\u003d!0;const s\u003d`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()\u003d\u003e{this._isTransitioning\u003d!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]\u003d\"\",j.trigger(this._element,\"shown.bs.collapse\")}),this._element,!0),this._element.style[n]\u003d`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,\"hide.bs.collapse\").defaultPrevented)return;const t\u003dthis._getDimension();this._element.style[t]\u003d`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e\u003dthis._triggerArray.length;for(let t\u003d0;t\u003ce;t++){const e\u003dthis._triggerArray[t],i\u003dn(e);i\u0026\u0026!this._isShown(i)\u0026\u0026this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning\u003d!0,this._element.style[t]\u003d\"\",this._queueCallback((()\u003d\u003e{this._isTransitioning\u003d!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,\"hidden.bs.collapse\")}),this._element,!0)}_isShown(t\u003dthis._element){return t.classList.contains(lt)}_getConfig(t){return(t\u003d{...rt,...U.getDataAttributes(this._element),...t}).toggle\u003dBoolean(t.toggle),t.parent\u003dr(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains(\"collapse-horizontal\")?\"width\":\"height\"}_initializeChildren(){if(!this._config.parent)return;const t\u003dV.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e\u003d\u003e!t.includes(e))).forEach((t\u003d\u003e{const e\u003dn(t);e\u0026\u0026this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length\u0026\u0026t.forEach((t\u003d\u003e{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute(\"aria-expanded\",e)}))}static jQueryInterface(t){return this.each((function(){const e\u003d{};\"string\"\u003d\u003dtypeof t\u0026\u0026/show|hide/.test(t)\u0026\u0026(e.toggle\u003d!1);const i\u003dpt.getOrCreateInstance(this,e);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003di[t])throw new TypeError(`No method named \"${t}\"`);i[t]()}}))}}j.on(document,\"click.bs.collapse.data-api\",ft,(function(t){(\"A\"\u003d\u003d\u003dt.target.tagName||t.delegateTarget\u0026\u0026\"A\"\u003d\u003d\u003dt.delegateTarget.tagName)\u0026\u0026t.preventDefault();const e\u003di(this);V.find(e).forEach((t\u003d\u003e{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt\u003d\"top\",gt\u003d\"bottom\",_t\u003d\"right\",bt\u003d\"left\",vt\u003d\"auto\",yt\u003d[mt,gt,_t,bt],wt\u003d\"start\",Et\u003d\"end\",At\u003d\"clippingParents\",Tt\u003d\"viewport\",Ot\u003d\"popper\",Ct\u003d\"reference\",kt\u003dyt.reduce((function(t,e){return t.concat([e+\"-\"+wt,e+\"-\"+Et])}),[]),Lt\u003d[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+\"-\"+wt,e+\"-\"+Et])}),[]),xt\u003d\"beforeRead\",Dt\u003d\"read\",St\u003d\"afterRead\",Nt\u003d\"beforeMain\",It\u003d\"main\",Pt\u003d\"afterMain\",jt\u003d\"beforeWrite\",Mt\u003d\"write\",Ht\u003d\"afterWrite\",Bt\u003d[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||\"\").toLowerCase():null}function Wt(t){if(null\u003d\u003dt)return window;if(\"[object Window]\"!\u003d\u003dt.toString()){var e\u003dt.ownerDocument;return e\u0026\u0026e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return\"undefined\"!\u003dtypeof ShadowRoot\u0026\u0026(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft\u003d{name:\"applyStyles\",enabled:!0,phase:\"write\",fn:function(t){var e\u003dt.state;Object.keys(e.elements).forEach((function(t){var i\u003de.styles[t]||{},n\u003de.attributes[t]||{},s\u003de.elements[t];zt(s)\u0026\u0026Rt(s)\u0026\u0026(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e\u003dn[t];!1\u003d\u003d\u003de?s.removeAttribute(t):s.setAttribute(t,!0\u003d\u003d\u003de?\"\":e)})))}))},effect:function(t){var e\u003dt.state,i\u003d{popper:{position:e.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles\u003di,e.elements.arrow\u0026\u0026Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n\u003de.elements[t],s\u003de.attributes[t]||{},o\u003dObject.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]\u003d\"\",t}),{});zt(n)\u0026\u0026Rt(n)\u0026\u0026(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:[\"computeStyles\"]};function Ut(t){return t.split(\"-\")[0]}function Vt(t,e){var i\u003dt.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e\u003dVt(t),i\u003dt.offsetWidth,n\u003dt.offsetHeight;return Math.abs(e.width-i)\u003c\u003d1\u0026\u0026(i\u003de.width),Math.abs(e.height-n)\u003c\u003d1\u0026\u0026(n\u003de.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i\u003de.getRootNode\u0026\u0026e.getRootNode();if(t.contains(e))return!0;if(i\u0026\u0026qt(i)){var n\u003de;do{if(n\u0026\u0026t.isSameNode(n))return!0;n\u003dn.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return[\"table\",\"td\",\"th\"].indexOf(Rt(t))\u003e\u003d0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return\"html\"\u003d\u003d\u003dRt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)\u0026\u0026\"fixed\"!\u003d\u003dYt(t).position?t.offsetParent:null}function te(t){for(var e\u003dWt(t),i\u003dJt(t);i\u0026\u0026Qt(i)\u0026\u0026\"static\"\u003d\u003d\u003dYt(i).position;)i\u003dJt(i);return i\u0026\u0026(\"html\"\u003d\u003d\u003dRt(i)||\"body\"\u003d\u003d\u003dRt(i)\u0026\u0026\"static\"\u003d\u003d\u003dYt(i).position)?e:i||function(t){var e\u003d-1!\u003d\u003dnavigator.userAgent.toLowerCase().indexOf(\"firefox\");if(-1!\u003d\u003dnavigator.userAgent.indexOf(\"Trident\")\u0026\u0026zt(t)\u0026\u0026\"fixed\"\u003d\u003d\u003dYt(t).position)return null;for(var i\u003dZt(t);zt(i)\u0026\u0026[\"html\",\"body\"].indexOf(Rt(i))\u003c0;){var n\u003dYt(i);if(\"none\"!\u003d\u003dn.transform||\"none\"!\u003d\u003dn.perspective||\"paint\"\u003d\u003d\u003dn.contain||-1!\u003d\u003d[\"transform\",\"perspective\"].indexOf(n.willChange)||e\u0026\u0026\"filter\"\u003d\u003d\u003dn.willChange||e\u0026\u0026n.filter\u0026\u0026\"none\"!\u003d\u003dn.filter)return i;i\u003di.parentNode}return null}(t)||e}function ee(t){return[\"top\",\"bottom\"].indexOf(t)\u003e\u003d0?\"x\":\"y\"}var ie\u003dMath.max,ne\u003dMath.min,se\u003dMath.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]\u003dt,e}),{})}const le\u003d{name:\"arrow\",enabled:!0,phase:\"main\",fn:function(t){var e,i\u003dt.state,n\u003dt.name,s\u003dt.options,o\u003di.elements.arrow,r\u003di.modifiersData.popperOffsets,a\u003dUt(i.placement),l\u003dee(a),c\u003d[bt,_t].indexOf(a)\u003e\u003d0?\"height\":\"width\";if(o\u0026\u0026r){var h\u003dfunction(t,e){return re(\"number\"!\u003dtypeof(t\u003d\"function\"\u003d\u003dtypeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d\u003dKt(o),u\u003d\"y\"\u003d\u003d\u003dl?mt:bt,f\u003d\"y\"\u003d\u003d\u003dl?gt:_t,p\u003di.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m\u003dr[l]-i.rects.reference[l],g\u003dte(o),_\u003dg?\"y\"\u003d\u003d\u003dl?g.clientHeight||0:g.clientWidth||0:0,b\u003dp/2-m/2,v\u003dh[u],y\u003d_-d[c]-h[f],w\u003d_/2-d[c]/2+b,E\u003doe(v,w,y),A\u003dl;i.modifiersData[n]\u003d((e\u003d{})[A]\u003dE,e.centerOffset\u003dE-w,e)}},effect:function(t){var e\u003dt.state,i\u003dt.options.element,n\u003dvoid 0\u003d\u003d\u003di?\"[data-popper-arrow]\":i;null!\u003dn\u0026\u0026(\"string\"!\u003dtypeof n||(n\u003de.elements.popper.querySelector(n)))\u0026\u0026Xt(e.elements.popper,n)\u0026\u0026(e.elements.arrow\u003dn)},requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function ce(t){return t.split(\"-\")[1]}var he\u003d{top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function de(t){var e,i\u003dt.popper,n\u003dt.popperRect,s\u003dt.placement,o\u003dt.variation,r\u003dt.offsets,a\u003dt.position,l\u003dt.gpuAcceleration,c\u003dt.adaptive,h\u003dt.roundOffsets,d\u003d!0\u003d\u003d\u003dh?function(t){var e\u003dt.x,i\u003dt.y,n\u003dwindow.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):\"function\"\u003d\u003dtypeof h?h(r):r,u\u003dd.x,f\u003dvoid 0\u003d\u003d\u003du?0:u,p\u003dd.y,m\u003dvoid 0\u003d\u003d\u003dp?0:p,g\u003dr.hasOwnProperty(\"x\"),_\u003dr.hasOwnProperty(\"y\"),b\u003dbt,v\u003dmt,y\u003dwindow;if(c){var w\u003dte(i),E\u003d\"clientHeight\",A\u003d\"clientWidth\";w\u003d\u003d\u003dWt(i)\u0026\u0026\"static\"!\u003d\u003dYt(w\u003dGt(i)).position\u0026\u0026\"absolute\"\u003d\u003d\u003da\u0026\u0026(E\u003d\"scrollHeight\",A\u003d\"scrollWidth\"),w\u003dw,s!\u003d\u003dmt\u0026\u0026(s!\u003d\u003dbt\u0026\u0026s!\u003d\u003d_t||o!\u003d\u003dEt)||(v\u003dgt,m-\u003dw[E]-n.height,m*\u003dl?1:-1),s!\u003d\u003dbt\u0026\u0026(s!\u003d\u003dmt\u0026\u0026s!\u003d\u003dgt||o!\u003d\u003dEt)||(b\u003d_t,f-\u003dw[A]-n.width,f*\u003dl?1:-1)}var T,O\u003dObject.assign({position:a},c\u0026\u0026he);return l?Object.assign({},O,((T\u003d{})[v]\u003d_?\"0\":\"\",T[b]\u003dg?\"0\":\"\",T.transform\u003d(y.devicePixelRatio||1)\u003c\u003d1?\"translate(\"+f+\"px, \"+m+\"px)\":\"translate3d(\"+f+\"px, \"+m+\"px, 0)\",T)):Object.assign({},O,((e\u003d{})[v]\u003d_?m+\"px\":\"\",e[b]\u003dg?f+\"px\":\"\",e.transform\u003d\"\",e))}const ue\u003d{name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003di.gpuAcceleration,s\u003dvoid 0\u003d\u003d\u003dn||n,o\u003di.adaptive,r\u003dvoid 0\u003d\u003d\u003do||o,a\u003di.roundOffsets,l\u003dvoid 0\u003d\u003d\u003da||a,c\u003d{placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!\u003de.modifiersData.popperOffsets\u0026\u0026(e.styles.popper\u003dObject.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!\u003de.modifiersData.arrow\u0026\u0026(e.styles.arrow\u003dObject.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:l})))),e.attributes.popper\u003dObject.assign({},e.attributes.popper,{\"data-popper-placement\":e.placement})},data:{}};var fe\u003d{passive:!0};const pe\u003d{name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:function(t){var e\u003dt.state,i\u003dt.instance,n\u003dt.options,s\u003dn.scroll,o\u003dvoid 0\u003d\u003d\u003ds||s,r\u003dn.resize,a\u003dvoid 0\u003d\u003d\u003dr||r,l\u003dWt(e.elements.popper),c\u003d[].concat(e.scrollParents.reference,e.scrollParents.popper);return o\u0026\u0026c.forEach((function(t){t.addEventListener(\"scroll\",i.update,fe)})),a\u0026\u0026l.addEventListener(\"resize\",i.update,fe),function(){o\u0026\u0026c.forEach((function(t){t.removeEventListener(\"scroll\",i.update,fe)})),a\u0026\u0026l.removeEventListener(\"resize\",i.update,fe)}},data:{}};var me\u003d{left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e\u003d{start:\"end\",end:\"start\"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e\u003dWt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e\u003dYt(t),i\u003de.overflow,n\u003de.overflowX,s\u003de.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return[\"html\",\"body\",\"#document\"].indexOf(Rt(t))\u003e\u003d0?t.ownerDocument.body:zt(t)\u0026\u0026we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[]);var n\u003dEe(t),s\u003dn\u003d\u003d\u003d(null\u003d\u003d(i\u003dt.ownerDocument)?void 0:i.body),o\u003dWt(n),r\u003ds?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a\u003de.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e\u003d\u003d\u003dTt?Te(function(t){var e\u003dWt(t),i\u003dGt(t),n\u003de.visualViewport,s\u003di.clientWidth,o\u003di.clientHeight,r\u003d0,a\u003d0;return n\u0026\u0026(s\u003dn.width,o\u003dn.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r\u003dn.offsetLeft,a\u003dn.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e\u003dVt(t);return e.top\u003de.top+t.clientTop,e.left\u003de.left+t.clientLeft,e.bottom\u003de.top+t.clientHeight,e.right\u003de.left+t.clientWidth,e.width\u003dt.clientWidth,e.height\u003dt.clientHeight,e.x\u003de.left,e.y\u003de.top,e}(e):Te(function(t){var e,i\u003dGt(t),n\u003dve(t),s\u003dnull\u003d\u003d(e\u003dt.ownerDocument)?void 0:e.body,o\u003die(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r\u003die(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a\u003d-n.scrollLeft+ye(t),l\u003d-n.scrollTop;return\"rtl\"\u003d\u003d\u003dYt(s||i).direction\u0026\u0026(a+\u003die(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i\u003dt.reference,n\u003dt.element,s\u003dt.placement,o\u003ds?Ut(s):null,r\u003ds?ce(s):null,a\u003di.x+i.width/2-n.width/2,l\u003di.y+i.height/2-n.height/2;switch(o){case mt:e\u003d{x:a,y:i.y-n.height};break;case gt:e\u003d{x:a,y:i.y+i.height};break;case _t:e\u003d{x:i.x+i.width,y:l};break;case bt:e\u003d{x:i.x-n.width,y:l};break;default:e\u003d{x:i.x,y:i.y}}var c\u003do?ee(o):null;if(null!\u003dc){var h\u003d\"y\"\u003d\u003d\u003dc?\"height\":\"width\";switch(r){case wt:e[c]\u003de[c]-(i[h]/2-n[h]/2);break;case Et:e[c]\u003de[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var i\u003de,n\u003di.placement,s\u003dvoid 0\u003d\u003d\u003dn?t.placement:n,o\u003di.boundary,r\u003dvoid 0\u003d\u003d\u003do?At:o,a\u003di.rootBoundary,l\u003dvoid 0\u003d\u003d\u003da?Tt:a,c\u003di.elementContext,h\u003dvoid 0\u003d\u003d\u003dc?Ot:c,d\u003di.altBoundary,u\u003dvoid 0!\u003d\u003dd\u0026\u0026d,f\u003di.padding,p\u003dvoid 0\u003d\u003d\u003df?0:f,m\u003dre(\"number\"!\u003dtypeof p?p:ae(p,yt)),g\u003dh\u003d\u003d\u003dOt?Ct:Ot,_\u003dt.rects.popper,b\u003dt.elements[u?g:h],v\u003dfunction(t,e,i){var n\u003d\"clippingParents\"\u003d\u003d\u003de?function(t){var e\u003dAe(Zt(t)),i\u003d[\"absolute\",\"fixed\"].indexOf(Yt(t).position)\u003e\u003d0\u0026\u0026zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)\u0026\u0026Xt(t,i)\u0026\u0026\"body\"!\u003d\u003dRt(t)})):[]}(t):[].concat(e),s\u003d[].concat(n,[i]),o\u003ds[0],r\u003ds.reduce((function(e,i){var n\u003dOe(t,i);return e.top\u003die(n.top,e.top),e.right\u003dne(n.right,e.right),e.bottom\u003dne(n.bottom,e.bottom),e.left\u003die(n.left,e.left),e}),Oe(t,o));return r.width\u003dr.right-r.left,r.height\u003dr.bottom-r.top,r.x\u003dr.left,r.y\u003dr.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y\u003dVt(t.elements.reference),w\u003dCe({reference:y,element:_,strategy:\"absolute\",placement:s}),E\u003dTe(Object.assign({},_,w)),A\u003dh\u003d\u003d\u003dOt?E:y,T\u003d{top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O\u003dt.modifiersData.offset;if(h\u003d\u003d\u003dOt\u0026\u0026O){var C\u003dO[s];Object.keys(T).forEach((function(t){var e\u003d[_t,gt].indexOf(t)\u003e\u003d0?1:-1,i\u003d[mt,gt].indexOf(t)\u003e\u003d0?\"y\":\"x\";T[t]+\u003dC[i]*e}))}return T}function Le(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var i\u003de,n\u003di.placement,s\u003di.boundary,o\u003di.rootBoundary,r\u003di.padding,a\u003di.flipVariations,l\u003di.allowedAutoPlacements,c\u003dvoid 0\u003d\u003d\u003dl?Lt:l,h\u003dce(n),d\u003dh?a?kt:kt.filter((function(t){return ce(t)\u003d\u003d\u003dh})):yt,u\u003dd.filter((function(t){return c.indexOf(t)\u003e\u003d0}));0\u003d\u003d\u003du.length\u0026\u0026(u\u003dd);var f\u003du.reduce((function(e,i){return e[i]\u003dke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe\u003d{name:\"flip\",enabled:!0,phase:\"main\",fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003dt.name;if(!e.modifiersData[n]._skip){for(var s\u003di.mainAxis,o\u003dvoid 0\u003d\u003d\u003ds||s,r\u003di.altAxis,a\u003dvoid 0\u003d\u003d\u003dr||r,l\u003di.fallbackPlacements,c\u003di.padding,h\u003di.boundary,d\u003di.rootBoundary,u\u003di.altBoundary,f\u003di.flipVariations,p\u003dvoid 0\u003d\u003d\u003df||f,m\u003di.allowedAutoPlacements,g\u003de.options.placement,_\u003dUt(g),b\u003dl||(_!\u003d\u003dg\u0026\u0026p?function(t){if(Ut(t)\u003d\u003d\u003dvt)return[];var e\u003dge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v\u003d[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)\u003d\u003d\u003dvt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y\u003de.rects.reference,w\u003de.rects.popper,E\u003dnew Map,A\u003d!0,T\u003dv[0],O\u003d0;O\u003cv.length;O++){var C\u003dv[O],k\u003dUt(C),L\u003dce(C)\u003d\u003d\u003dwt,x\u003d[mt,gt].indexOf(k)\u003e\u003d0,D\u003dx?\"width\":\"height\",S\u003dke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N\u003dx?L?_t:bt:L?gt:mt;y[D]\u003ew[D]\u0026\u0026(N\u003dge(N));var I\u003dge(N),P\u003d[];if(o\u0026\u0026P.push(S[k]\u003c\u003d0),a\u0026\u0026P.push(S[N]\u003c\u003d0,S[I]\u003c\u003d0),P.every((function(t){return t}))){T\u003dC,A\u003d!1;break}E.set(C,P)}if(A)for(var j\u003dfunction(t){var e\u003dv.find((function(e){var i\u003dE.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T\u003de,\"break\"},M\u003dp?3:1;M\u003e0\u0026\u0026\"break\"!\u003d\u003dj(M);M--);e.placement!\u003d\u003dT\u0026\u0026(e.modifiersData[n]._skip\u003d!0,e.placement\u003dT,e.reset\u003d!0)}},requiresIfExists:[\"offset\"],data:{_skip:!1}};function De(t,e,i){return void 0\u003d\u003d\u003di\u0026\u0026(i\u003d{x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]\u003e\u003d0}))}const Ne\u003d{name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:function(t){var e\u003dt.state,i\u003dt.name,n\u003de.rects.reference,s\u003de.rects.popper,o\u003de.modifiersData.preventOverflow,r\u003dke(e,{elementContext:\"reference\"}),a\u003dke(e,{altBoundary:!0}),l\u003dDe(r,n),c\u003dDe(a,s,o),h\u003dSe(l),d\u003dSe(c);e.modifiersData[i]\u003d{referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper\u003dObject.assign({},e.attributes.popper,{\"data-popper-reference-hidden\":h,\"data-popper-escaped\":d})}},Ie\u003d{name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003dt.name,s\u003di.offset,o\u003dvoid 0\u003d\u003d\u003ds?[0,0]:s,r\u003dLt.reduce((function(t,i){return t[i]\u003dfunction(t,e,i){var n\u003dUt(t),s\u003d[bt,mt].indexOf(n)\u003e\u003d0?-1:1,o\u003d\"function\"\u003d\u003dtypeof i?i(Object.assign({},e,{placement:t})):i,r\u003do[0],a\u003do[1];return r\u003dr||0,a\u003d(a||0)*s,[bt,_t].indexOf(n)\u003e\u003d0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a\u003dr[e.placement],l\u003da.x,c\u003da.y;null!\u003de.modifiersData.popperOffsets\u0026\u0026(e.modifiersData.popperOffsets.x+\u003dl,e.modifiersData.popperOffsets.y+\u003dc),e.modifiersData[n]\u003dr}},Pe\u003d{name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:function(t){var e\u003dt.state,i\u003dt.name;e.modifiersData[i]\u003dCe({reference:e.rects.reference,element:e.rects.popper,strategy:\"absolute\",placement:e.placement})},data:{}},je\u003d{name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:function(t){var e\u003dt.state,i\u003dt.options,n\u003dt.name,s\u003di.mainAxis,o\u003dvoid 0\u003d\u003d\u003ds||s,r\u003di.altAxis,a\u003dvoid 0!\u003d\u003dr\u0026\u0026r,l\u003di.boundary,c\u003di.rootBoundary,h\u003di.altBoundary,d\u003di.padding,u\u003di.tether,f\u003dvoid 0\u003d\u003d\u003du||u,p\u003di.tetherOffset,m\u003dvoid 0\u003d\u003d\u003dp?0:p,g\u003dke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_\u003dUt(e.placement),b\u003dce(e.placement),v\u003d!b,y\u003dee(_),w\u003d\"x\"\u003d\u003d\u003dy?\"y\":\"x\",E\u003de.modifiersData.popperOffsets,A\u003de.rects.reference,T\u003de.rects.popper,O\u003d\"function\"\u003d\u003dtypeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C\u003d{x:0,y:0};if(E){if(o||a){var k\u003d\"y\"\u003d\u003d\u003dy?mt:bt,L\u003d\"y\"\u003d\u003d\u003dy?gt:_t,x\u003d\"y\"\u003d\u003d\u003dy?\"height\":\"width\",D\u003dE[y],S\u003dE[y]+g[k],N\u003dE[y]-g[L],I\u003df?-T[x]/2:0,P\u003db\u003d\u003d\u003dwt?A[x]:T[x],j\u003db\u003d\u003d\u003dwt?-T[x]:-A[x],M\u003de.elements.arrow,H\u003df\u0026\u0026M?Kt(M):{width:0,height:0},B\u003de.modifiersData[\"arrow#persistent\"]?e.modifiersData[\"arrow#persistent\"].padding:{top:0,right:0,bottom:0,left:0},R\u003dB[k],W\u003dB[L],$\u003doe(0,A[x],H[x]),z\u003dv?A[x]/2-I-$-R-O:P-$-R-O,q\u003dv?-A[x]/2+I+$+W+O:j+$+W+O,F\u003de.elements.arrow\u0026\u0026te(e.elements.arrow),U\u003dF?\"y\"\u003d\u003d\u003dy?F.clientTop||0:F.clientLeft||0:0,V\u003de.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K\u003dE[y]+z-V-U,X\u003dE[y]+q-V;if(o){var Y\u003doe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]\u003dY,C[y]\u003dY-D}if(a){var Q\u003d\"x\"\u003d\u003d\u003dy?mt:bt,G\u003d\"x\"\u003d\u003d\u003dy?gt:_t,Z\u003dE[w],J\u003dZ+g[Q],tt\u003dZ-g[G],et\u003doe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]\u003det,C[w]\u003det-Z}}e.modifiersData[n]\u003dC}},requiresIfExists:[\"offset\"]};function Me(t,e,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003d!1);var n\u003dzt(e);zt(e)\u0026\u0026function(t){var e\u003dt.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r\u003dGt(e),a\u003dVt(t),l\u003d{scrollLeft:0,scrollTop:0},c\u003d{x:0,y:0};return(n||!n\u0026\u0026!i)\u0026\u0026((\"body\"!\u003d\u003dRt(e)||we(r))\u0026\u0026(l\u003d(s\u003de)!\u003d\u003dWt(s)\u0026\u0026zt(s)?{scrollLeft:(o\u003ds).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c\u003dVt(e)).x+\u003de.clientLeft,c.y+\u003de.clientTop):r\u0026\u0026(c.x\u003dye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e\u003dnew Map,i\u003dnew Set,n\u003d[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n\u003de.get(t);n\u0026\u0026s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be\u003d{placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function Re(){for(var t\u003darguments.length,e\u003dnew Array(t),i\u003d0;i\u003ct;i++)e[i]\u003darguments[i];return!e.some((function(t){return!(t\u0026\u0026\"function\"\u003d\u003dtypeof t.getBoundingClientRect)}))}function We(t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{});var e\u003dt,i\u003de.defaultModifiers,n\u003dvoid 0\u003d\u003d\u003di?[]:i,s\u003de.defaultOptions,o\u003dvoid 0\u003d\u003d\u003ds?Be:s;return function(t,e,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003do);var s,r,a\u003d{placement:\"bottom\",orderedModifiers:[],options:Object.assign({},Be,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l\u003d[],c\u003d!1,h\u003d{state:a,setOptions:function(i){var s\u003d\"function\"\u003d\u003dtypeof i?i(a.options):i;d(),a.options\u003dObject.assign({},o,a.options,s),a.scrollParents\u003d{reference:$t(t)?Ae(t):t.contextElement?Ae(t.contextElement):[],popper:Ae(e)};var r,c,u\u003dfunction(t){var e\u003dHe(t);return Bt.reduce((function(t,i){return t.concat(e.filter((function(t){return t.phase\u003d\u003d\u003di})))}),[])}((r\u003d[].concat(n,a.options.modifiers),c\u003dr.reduce((function(t,e){var i\u003dt[e.name];return t[e.name]\u003di?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t}),{}),Object.keys(c).map((function(t){return c[t]}))));return a.orderedModifiers\u003du.filter((function(t){return t.enabled})),a.orderedModifiers.forEach((function(t){var e\u003dt.name,i\u003dt.options,n\u003dvoid 0\u003d\u003d\u003di?{}:i,s\u003dt.effect;if(\"function\"\u003d\u003dtypeof s){var o\u003ds({state:a,name:e,instance:h,options:n});l.push(o||function(){})}})),h.update()},forceUpdate:function(){if(!c){var t\u003da.elements,e\u003dt.reference,i\u003dt.popper;if(Re(e,i)){a.rects\u003d{reference:Me(e,te(i),\"fixed\"\u003d\u003d\u003da.options.strategy),popper:Kt(i)},a.reset\u003d!1,a.placement\u003da.options.placement,a.orderedModifiers.forEach((function(t){return a.modifiersData[t.name]\u003dObject.assign({},t.data)}));for(var n\u003d0;n\u003ca.orderedModifiers.length;n++)if(!0!\u003d\u003da.reset){var s\u003da.orderedModifiers[n],o\u003ds.fn,r\u003ds.options,l\u003dvoid 0\u003d\u003d\u003dr?{}:r,d\u003ds.name;\"function\"\u003d\u003dtypeof o\u0026\u0026(a\u003do({state:a,options:l,name:d,instance:h})||a)}else a.reset\u003d!1,n\u003d-1}}},update:(s\u003dfunction(){return new Promise((function(t){h.forceUpdate(),t(a)}))},function(){return r||(r\u003dnew Promise((function(t){Promise.resolve().then((function(){r\u003dvoid 0,t(s())}))}))),r}),destroy:function(){d(),c\u003d!0}};if(!Re(t,e))return h;function d(){l.forEach((function(t){return t()})),l\u003d[]}return h.setOptions(i).then((function(t){!c\u0026\u0026i.onFirstUpdate\u0026\u0026i.onFirstUpdate(t)})),h}}var $e\u003dWe(),ze\u003dWe({defaultModifiers:[pe,Pe,ue,Ft]}),qe\u003dWe({defaultModifiers:[pe,Pe,ue,Ft,Ie,xe,je,le,Ne]});const Fe\u003dObject.freeze({__proto__:null,popperGenerator:We,detectOverflow:ke,createPopperBase:$e,createPopper:qe,createPopperLite:ze,top:mt,bottom:gt,right:_t,left:bt,auto:vt,basePlacements:yt,start:wt,end:Et,clippingParents:At,viewport:Tt,popper:Ot,reference:Ct,variationPlacements:kt,placements:Lt,beforeRead:xt,read:Dt,afterRead:St,beforeMain:Nt,main:It,afterMain:Pt,beforeWrite:jt,write:Mt,afterWrite:Ht,modifierPhases:Bt,applyStyles:Ft,arrow:le,computeStyles:ue,eventListeners:pe,flip:xe,hide:Ne,offset:Ie,popperOffsets:Pe,preventOverflow:je}),Ue\u003d\"dropdown\",Ve\u003d\"Escape\",Ke\u003d\"Space\",Xe\u003d\"ArrowUp\",Ye\u003d\"ArrowDown\",Qe\u003dnew RegExp(\"ArrowUp|ArrowDown|Escape\"),Ge\u003d\"click.bs.dropdown.data-api\",Ze\u003d\"keydown.bs.dropdown.data-api\",Je\u003d\"show\",ti\u003d\u0027[data-bs-toggle\u003d\"dropdown\"]\u0027,ei\u003d\".dropdown-menu\",ii\u003dm()?\"top-end\":\"top-start\",ni\u003dm()?\"top-start\":\"top-end\",si\u003dm()?\"bottom-end\":\"bottom-start\",oi\u003dm()?\"bottom-start\":\"bottom-end\",ri\u003dm()?\"left-start\":\"right-start\",ai\u003dm()?\"right-start\":\"left-start\",li\u003d{offset:[0,2],boundary:\"clippingParents\",reference:\"toggle\",display:\"dynamic\",popperConfig:null,autoClose:!0},ci\u003d{offset:\"(array|string|function)\",boundary:\"(string|element)\",reference:\"(string|element|object)\",display:\"string\",popperConfig:\"(null|object|function)\",autoClose:\"(boolean|string)\"};class hi extends B{constructor(t,e){super(t),this._popper\u003dnull,this._config\u003dthis._getConfig(e),this._menu\u003dthis._getMenuElement(),this._inNavbar\u003dthis._detectNavbar()}static get Default(){return li}static get DefaultType(){return ci}static get NAME(){return Ue}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown(this._menu))return;const t\u003d{relatedTarget:this._element};if(j.trigger(this._element,\"show.bs.dropdown\",t).defaultPrevented)return;const e\u003dhi.getParentFromElement(this._element);this._inNavbar?U.setDataAttribute(this._menu,\"popper\",\"none\"):this._createPopper(e),\"ontouchstart\"in document.documentElement\u0026\u0026!e.closest(\".navbar-nav\")\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003ej.on(t,\"mouseover\",d))),this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,\"shown.bs.dropdown\",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t\u003d{relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper\u0026\u0026this._popper.destroy(),super.dispose()}update(){this._inNavbar\u003dthis._detectNavbar(),this._popper\u0026\u0026this._popper.update()}_completeHide(t){j.trigger(this._element,\"hide.bs.dropdown\",t).defaultPrevented||(\"ontouchstart\"in document.documentElement\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003ej.off(t,\"mouseover\",d))),this._popper\u0026\u0026this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute(\"aria-expanded\",\"false\"),U.removeDataAttribute(this._menu,\"popper\"),j.trigger(this._element,\"hidden.bs.dropdown\",t))}_getConfig(t){if(t\u003d{...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),\"object\"\u003d\u003dtypeof t.reference\u0026\u0026!o(t.reference)\u0026\u0026\"function\"!\u003dtypeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);return t}_createPopper(t){if(void 0\u003d\u003d\u003dFe)throw new TypeError(\"Bootstrap\u0027s dropdowns require Popper (https://popper.js.org)\");let e\u003dthis._element;\"parent\"\u003d\u003d\u003dthis._config.reference?e\u003dt:o(this._config.reference)?e\u003dr(this._config.reference):\"object\"\u003d\u003dtypeof this._config.reference\u0026\u0026(e\u003dthis._config.reference);const i\u003dthis._getPopperConfig(),n\u003di.modifiers.find((t\u003d\u003e\"applyStyles\"\u003d\u003d\u003dt.name\u0026\u0026!1\u003d\u003d\u003dt.enabled));this._popper\u003dqe(e,this._menu,i),n\u0026\u0026U.setDataAttribute(this._menu,\"popper\",\"static\")}_isShown(t\u003dthis._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t\u003dthis._element.parentNode;if(t.classList.contains(\"dropend\"))return ri;if(t.classList.contains(\"dropstart\"))return ai;const e\u003d\"end\"\u003d\u003d\u003dgetComputedStyle(this._menu).getPropertyValue(\"--bs-position\").trim();return t.classList.contains(\"dropup\")?e?ni:ii:e?oi:si}_detectNavbar(){return null!\u003d\u003dthis._element.closest(\".navbar\")}_getOffset(){const{offset:t}\u003dthis._config;return\"string\"\u003d\u003dtypeof t?t.split(\",\").map((t\u003d\u003eNumber.parseInt(t,10))):\"function\"\u003d\u003dtypeof t?e\u003d\u003et(e,this._element):t}_getPopperConfig(){const t\u003d{placement:this._getPlacement(),modifiers:[{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"offset\",options:{offset:this._getOffset()}}]};return\"static\"\u003d\u003d\u003dthis._config.display\u0026\u0026(t.modifiers\u003d[{name:\"applyStyles\",enabled:!1}]),{...t,...\"function\"\u003d\u003dtypeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i\u003dV.find(\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",this._menu).filter(l);i.length\u0026\u0026v(i,e,t\u003d\u003d\u003dYe,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e\u003dhi.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}static clearMenus(t){if(t\u0026\u0026(2\u003d\u003d\u003dt.button||\"keyup\"\u003d\u003d\u003dt.type\u0026\u0026\"Tab\"!\u003d\u003dt.key))return;const e\u003dV.find(ti);for(let i\u003d0,n\u003de.length;i\u003cn;i++){const n\u003dhi.getInstance(e[i]);if(!n||!1\u003d\u003d\u003dn._config.autoClose)continue;if(!n._isShown())continue;const s\u003d{relatedTarget:n._element};if(t){const e\u003dt.composedPath(),i\u003de.includes(n._menu);if(e.includes(n._element)||\"inside\"\u003d\u003d\u003dn._config.autoClose\u0026\u0026!i||\"outside\"\u003d\u003d\u003dn._config.autoClose\u0026\u0026i)continue;if(n._menu.contains(t.target)\u0026\u0026(\"keyup\"\u003d\u003d\u003dt.type\u0026\u0026\"Tab\"\u003d\u003d\u003dt.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;\"click\"\u003d\u003d\u003dt.type\u0026\u0026(s.clickEvent\u003dt)}n._completeHide(s)}}static getParentFromElement(t){return n(t)||t.parentNode}static dataApiKeydownHandler(t){if(/input|textarea/i.test(t.target.tagName)?t.key\u003d\u003d\u003dKe||t.key!\u003d\u003dVe\u0026\u0026(t.key!\u003d\u003dYe\u0026\u0026t.key!\u003d\u003dXe||t.target.closest(ei)):!Qe.test(t.key))return;const e\u003dthis.classList.contains(Je);if(!e\u0026\u0026t.key\u003d\u003d\u003dVe)return;if(t.preventDefault(),t.stopPropagation(),c(this))return;const i\u003dthis.matches(ti)?this:V.prev(this,ti)[0],n\u003dhi.getOrCreateInstance(i);if(t.key!\u003d\u003dVe)return t.key\u003d\u003d\u003dXe||t.key\u003d\u003d\u003dYe?(e||n.show(),void n._selectMenuItem(t)):void(e\u0026\u0026t.key!\u003d\u003dKe||hi.clearMenus());n.hide()}}j.on(document,Ze,ti,hi.dataApiKeydownHandler),j.on(document,Ze,ei,hi.dataApiKeydownHandler),j.on(document,Ge,hi.clearMenus),j.on(document,\"keyup.bs.dropdown.data-api\",hi.clearMenus),j.on(document,Ge,ti,(function(t){t.preventDefault(),hi.getOrCreateInstance(this).toggle()})),g(hi);const di\u003d\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",ui\u003d\".sticky-top\";class fi{constructor(){this._element\u003ddocument.body}getWidth(){const t\u003ddocument.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t\u003dthis.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,\"paddingRight\",(e\u003d\u003ee+t)),this._setElementAttributes(di,\"paddingRight\",(e\u003d\u003ee+t)),this._setElementAttributes(ui,\"marginRight\",(e\u003d\u003ee-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,\"overflow\"),this._element.style.overflow\u003d\"hidden\"}_setElementAttributes(t,e,i){const n\u003dthis.getWidth();this._applyManipulationCallback(t,(t\u003d\u003e{if(t!\u003d\u003dthis._element\u0026\u0026window.innerWidth\u003et.clientWidth+n)return;this._saveInitialAttribute(t,e);const s\u003dwindow.getComputedStyle(t)[e];t.style[e]\u003d`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,\"overflow\"),this._resetElementAttributes(this._element,\"paddingRight\"),this._resetElementAttributes(di,\"paddingRight\"),this._resetElementAttributes(ui,\"marginRight\")}_saveInitialAttribute(t,e){const i\u003dt.style[e];i\u0026\u0026U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t\u003d\u003e{const i\u003dU.getDataAttribute(t,e);void 0\u003d\u003d\u003di?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]\u003di)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()\u003e0}}const pi\u003d{className:\"modal-backdrop\",isVisible:!0,isAnimated:!1,rootElement:\"body\",clickCallback:null},mi\u003d{className:\"string\",isVisible:\"boolean\",isAnimated:\"boolean\",rootElement:\"(element|string)\",clickCallback:\"(function|null)\"},gi\u003d\"show\",_i\u003d\"mousedown.bs.backdrop\";class bi{constructor(t){this._config\u003dthis._getConfig(t),this._isAppended\u003d!1,this._element\u003dnull}show(t){this._config.isVisible?(this._append(),this._config.isAnimated\u0026\u0026u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()\u003d\u003e{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()\u003d\u003e{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t\u003ddocument.createElement(\"div\");t.className\u003dthis._config.className,this._config.isAnimated\u0026\u0026t.classList.add(\"fade\"),this._element\u003dt}return this._element}_getConfig(t){return(t\u003d{...pi,...\"object\"\u003d\u003dtypeof t?t:{}}).rootElement\u003dr(t.rootElement),a(\"backdrop\",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()\u003d\u003e{_(this._config.clickCallback)})),this._isAppended\u003d!0)}dispose(){this._isAppended\u0026\u0026(j.off(this._element,_i),this._element.remove(),this._isAppended\u003d!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi\u003d{trapElement:null,autofocus:!0},yi\u003d{trapElement:\"element\",autofocus:\"boolean\"},wi\u003d\".bs.focustrap\",Ei\u003d\"backward\";class Ai{constructor(t){this._config\u003dthis._getConfig(t),this._isActive\u003d!1,this._lastTabNavDirection\u003dnull}activate(){const{trapElement:t,autofocus:e}\u003dthis._config;this._isActive||(e\u0026\u0026t.focus(),j.off(document,wi),j.on(document,\"focusin.bs.focustrap\",(t\u003d\u003ethis._handleFocusin(t))),j.on(document,\"keydown.tab.bs.focustrap\",(t\u003d\u003ethis._handleKeydown(t))),this._isActive\u003d!0)}deactivate(){this._isActive\u0026\u0026(this._isActive\u003d!1,j.off(document,wi))}_handleFocusin(t){const{target:e}\u003dt,{trapElement:i}\u003dthis._config;if(e\u003d\u003d\u003ddocument||e\u003d\u003d\u003di||i.contains(e))return;const n\u003dV.focusableChildren(i);0\u003d\u003d\u003dn.length?i.focus():this._lastTabNavDirection\u003d\u003d\u003dEi?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){\"Tab\"\u003d\u003d\u003dt.key\u0026\u0026(this._lastTabNavDirection\u003dt.shiftKey?Ei:\"forward\")}_getConfig(t){return t\u003d{...vi,...\"object\"\u003d\u003dtypeof t?t:{}},a(\"focustrap\",t,yi),t}}const Ti\u003d\"modal\",Oi\u003d\"Escape\",Ci\u003d{backdrop:!0,keyboard:!0,focus:!0},ki\u003d{backdrop:\"(boolean|string)\",keyboard:\"boolean\",focus:\"boolean\"},Li\u003d\"hidden.bs.modal\",xi\u003d\"show.bs.modal\",Di\u003d\"resize.bs.modal\",Si\u003d\"click.dismiss.bs.modal\",Ni\u003d\"keydown.dismiss.bs.modal\",Ii\u003d\"mousedown.dismiss.bs.modal\",Pi\u003d\"modal-open\",ji\u003d\"show\",Mi\u003d\"modal-static\";class Hi extends B{constructor(t,e){super(t),this._config\u003dthis._getConfig(e),this._dialog\u003dV.findOne(\".modal-dialog\",this._element),this._backdrop\u003dthis._initializeBackDrop(),this._focustrap\u003dthis._initializeFocusTrap(),this._isShown\u003d!1,this._ignoreBackdropClick\u003d!1,this._isTransitioning\u003d!1,this._scrollBar\u003dnew fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown\u003d!0,this._isAnimated()\u0026\u0026(this._isTransitioning\u003d!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()\u003d\u003e{j.one(this._element,\"mouseup.dismiss.bs.modal\",(t\u003d\u003e{t.target\u003d\u003d\u003dthis._element\u0026\u0026(this._ignoreBackdropClick\u003d!0)}))})),this._showBackdrop((()\u003d\u003ethis._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,\"hide.bs.modal\").defaultPrevented)return;this._isShown\u003d!1;const t\u003dthis._isAnimated();t\u0026\u0026(this._isTransitioning\u003d!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()\u003d\u003ethis._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t\u003d\u003ej.off(t,\".bs.modal\"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t\u003d{...Ci,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e\u003dthis._isAnimated(),i\u003dV.findOne(\".modal-body\",this._dialog);this._element.parentNode\u0026\u0026this._element.parentNode.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE||document.body.append(this._element),this._element.style.display\u003d\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.scrollTop\u003d0,i\u0026\u0026(i.scrollTop\u003d0),e\u0026\u0026u(this._element),this._element.classList.add(ji),this._queueCallback((()\u003d\u003e{this._config.focus\u0026\u0026this._focustrap.activate(),this._isTransitioning\u003d!1,j.trigger(this._element,\"shown.bs.modal\",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t\u003d\u003e{this._config.keyboard\u0026\u0026t.key\u003d\u003d\u003dOi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!\u003d\u003dOi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()\u003d\u003ethis._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display\u003d\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._isTransitioning\u003d!1,this._backdrop.hide((()\u003d\u003e{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t\u003d\u003e{this._ignoreBackdropClick?this._ignoreBackdropClick\u003d!1:t.target\u003d\u003d\u003dt.currentTarget\u0026\u0026(!0\u003d\u003d\u003dthis._config.backdrop?this.hide():\"static\"\u003d\u003d\u003dthis._config.backdrop\u0026\u0026this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains(\"fade\")}_triggerBackdropTransition(){if(j.trigger(this._element,\"hidePrevented.bs.modal\").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}\u003dthis._element,n\u003de\u003edocument.documentElement.clientHeight;!n\u0026\u0026\"hidden\"\u003d\u003d\u003di.overflowY||t.contains(Mi)||(n||(i.overflowY\u003d\"hidden\"),t.add(Mi),this._queueCallback((()\u003d\u003e{t.remove(Mi),n||this._queueCallback((()\u003d\u003e{i.overflowY\u003d\"\"}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t\u003dthis._element.scrollHeight\u003edocument.documentElement.clientHeight,e\u003dthis._scrollBar.getWidth(),i\u003de\u003e0;(!i\u0026\u0026t\u0026\u0026!m()||i\u0026\u0026!t\u0026\u0026m())\u0026\u0026(this._element.style.paddingLeft\u003d`${e}px`),(i\u0026\u0026!t\u0026\u0026!m()||!i\u0026\u0026t\u0026\u0026m())\u0026\u0026(this._element.style.paddingRight\u003d`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft\u003d\"\",this._element.style.paddingRight\u003d\"\"}static jQueryInterface(t,e){return this.each((function(){const i\u003dHi.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003di[t])throw new TypeError(`No method named \"${t}\"`);i[t](e)}}))}}j.on(document,\"click.bs.modal.data-api\",\u0027[data-bs-toggle\u003d\"modal\"]\u0027,(function(t){const e\u003dn(this);[\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026t.preventDefault(),j.one(e,xi,(t\u003d\u003e{t.defaultPrevented||j.one(e,Li,(()\u003d\u003e{l(this)\u0026\u0026this.focus()}))}));const i\u003dV.findOne(\".modal.show\");i\u0026\u0026Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi\u003d\"offcanvas\",Ri\u003d{backdrop:!0,keyboard:!0,scroll:!1},Wi\u003d{backdrop:\"boolean\",keyboard:\"boolean\",scroll:\"boolean\"},$i\u003d\"show\",zi\u003d\".offcanvas.show\",qi\u003d\"hidden.bs.offcanvas\";class Fi extends B{constructor(t,e){super(t),this._config\u003dthis._getConfig(e),this._isShown\u003d!1,this._backdrop\u003dthis._initializeBackDrop(),this._focustrap\u003dthis._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,\"show.bs.offcanvas\",{relatedTarget:t}).defaultPrevented||(this._isShown\u003d!0,this._element.style.visibility\u003d\"visible\",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.classList.add($i),this._queueCallback((()\u003d\u003e{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,\"shown.bs.offcanvas\",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown\u0026\u0026(j.trigger(this._element,\"hide.bs.offcanvas\").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown\u003d!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()\u003d\u003e{this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._element.style.visibility\u003d\"hidden\",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t\u003d{...Ri,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:\"offcanvas-backdrop\",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()\u003d\u003ethis.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,\"keydown.dismiss.bs.offcanvas\",(t\u003d\u003e{this._config.keyboard\u0026\u0026\"Escape\"\u003d\u003d\u003dt.key\u0026\u0026this.hide()}))}static jQueryInterface(t){return this.each((function(){const e\u003dFi.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t]||t.startsWith(\"_\")||\"constructor\"\u003d\u003d\u003dt)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}j.on(document,\"click.bs.offcanvas.data-api\",\u0027[data-bs-toggle\u003d\"offcanvas\"]\u0027,(function(t){const e\u003dn(this);if([\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026t.preventDefault(),c(this))return;j.one(e,qi,(()\u003d\u003e{l(this)\u0026\u0026this.focus()}));const i\u003dV.findOne(zi);i\u0026\u0026i!\u003d\u003de\u0026\u0026Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,\"load.bs.offcanvas.data-api\",(()\u003d\u003eV.find(zi).forEach((t\u003d\u003eFi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui\u003dnew Set([\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"]),Vi\u003d/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#\u0026/:?]*(?:[#/?]|$))/i,Ki\u003d/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+\u003d*$/i,Xi\u003d(t,e)\u003d\u003e{const i\u003dt.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n\u003de.filter((t\u003d\u003et instanceof RegExp));for(let t\u003d0,e\u003dn.length;t\u003ce;t++)if(n[t].test(i))return!0;return!1};function Yi(t,e,i){if(!t.length)return t;if(i\u0026\u0026\"function\"\u003d\u003dtypeof i)return i(t);const n\u003d(new window.DOMParser).parseFromString(t,\"text/html\"),s\u003d[].concat(...n.body.querySelectorAll(\"*\"));for(let t\u003d0,i\u003ds.length;t\u003ci;t++){const i\u003ds[t],n\u003di.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){i.remove();continue}const o\u003d[].concat(...i.attributes),r\u003d[].concat(e[\"*\"]||[],e[n]||[]);o.forEach((t\u003d\u003e{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi\u003d\"tooltip\",Gi\u003dnew Set([\"sanitize\",\"allowList\",\"sanitizeFn\"]),Zi\u003d{animation:\"boolean\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\",delay:\"(number|object)\",html:\"boolean\",selector:\"(string|boolean)\",placement:\"(string|function)\",offset:\"(array|string|function)\",container:\"(string|element|boolean)\",fallbackPlacements:\"array\",boundary:\"(string|element)\",customClass:\"(string|function)\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",allowList:\"object\",popperConfig:\"(null|object|function)\"},Ji\u003d{AUTO:\"auto\",TOP:\"top\",RIGHT:m()?\"left\":\"right\",BOTTOM:\"bottom\",LEFT:m()?\"right\":\"left\"},tn\u003d{animation:!0,template:\u0027\u003cdiv class\u003d\"tooltip\" role\u003d\"tooltip\"\u003e\u003cdiv class\u003d\"tooltip-arrow\"\u003e\u003c/div\u003e\u003cdiv class\u003d\"tooltip-inner\"\u003e\u003c/div\u003e\u003c/div\u003e\u0027,trigger:\"hover focus\",title:\"\",delay:0,html:!1,selector:!1,placement:\"top\",offset:[0,0],container:!1,fallbackPlacements:[\"top\",\"right\",\"bottom\",\"left\"],boundary:\"clippingParents\",customClass:\"\",sanitize:!0,sanitizeFn:null,allowList:{\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en\u003d{HIDE:\"hide.bs.tooltip\",HIDDEN:\"hidden.bs.tooltip\",SHOW:\"show.bs.tooltip\",SHOWN:\"shown.bs.tooltip\",INSERTED:\"inserted.bs.tooltip\",CLICK:\"click.bs.tooltip\",FOCUSIN:\"focusin.bs.tooltip\",FOCUSOUT:\"focusout.bs.tooltip\",MOUSEENTER:\"mouseenter.bs.tooltip\",MOUSELEAVE:\"mouseleave.bs.tooltip\"},nn\u003d\"fade\",sn\u003d\"show\",on\u003d\"show\",rn\u003d\"out\",an\u003d\".tooltip-inner\",ln\u003d\".modal\",cn\u003d\"hide.bs.modal\",hn\u003d\"hover\",dn\u003d\"focus\";class un extends B{constructor(t,e){if(void 0\u003d\u003d\u003dFe)throw new TypeError(\"Bootstrap\u0027s tooltips require Popper (https://popper.js.org)\");super(t),this._isEnabled\u003d!0,this._timeout\u003d0,this._hoverState\u003d\"\",this._activeTrigger\u003d{},this._popper\u003dnull,this._config\u003dthis._getConfig(e),this.tip\u003dnull,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled\u003d!0}disable(){this._isEnabled\u003d!1}toggleEnabled(){this._isEnabled\u003d!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e\u003dthis._initializeOnDelegatedTarget(t);e._activeTrigger.click\u003d!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip\u0026\u0026this.tip.remove(),this._disposePopper(),super.dispose()}show(){if(\"none\"\u003d\u003d\u003dthis._element.style.display)throw new Error(\"Please use show on visible elements\");if(!this.isWithContent()||!this._isEnabled)return;const t\u003dj.trigger(this._element,this.constructor.Event.SHOW),e\u003dh(this._element),i\u003dnull\u003d\u003d\u003de?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;\"tooltip\"\u003d\u003d\u003dthis.constructor.NAME\u0026\u0026this.tip\u0026\u0026this.getTitle()!\u003d\u003dthis.tip.querySelector(an).innerHTML\u0026\u0026(this._disposePopper(),this.tip.remove(),this.tip\u003dnull);const n\u003dthis.getTipElement(),s\u003d(t\u003d\u003e{do{t+\u003dMath.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute(\"id\",s),this._element.setAttribute(\"aria-describedby\",s),this._config.animation\u0026\u0026n.classList.add(nn);const o\u003d\"function\"\u003d\u003dtypeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r\u003dthis._getAttachment(o);this._addAttachmentClass(r);const{container:a}\u003dthis._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper\u003dqe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l\u003dthis._resolvePossibleFunction(this._config.customClass);l\u0026\u0026n.classList.add(...l.split(\" \")),\"ontouchstart\"in document.documentElement\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003e{j.on(t,\"mouseover\",d)}));const c\u003dthis.tip.classList.contains(nn);this._queueCallback((()\u003d\u003e{const t\u003dthis._hoverState;this._hoverState\u003dnull,j.trigger(this._element,this.constructor.Event.SHOWN),t\u003d\u003d\u003drn\u0026\u0026this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t\u003dthis.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),\"ontouchstart\"in document.documentElement\u0026\u0026[].concat(...document.body.children).forEach((t\u003d\u003ej.off(t,\"mouseover\",d))),this._activeTrigger.click\u003d!1,this._activeTrigger.focus\u003d!1,this._activeTrigger.hover\u003d!1;const e\u003dthis.tip.classList.contains(nn);this._queueCallback((()\u003d\u003e{this._isWithActiveTrigger()||(this._hoverState!\u003d\u003don\u0026\u0026t.remove(),this._cleanTipClass(),this._element.removeAttribute(\"aria-describedby\"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState\u003d\"\"}update(){null!\u003d\u003dthis._popper\u0026\u0026this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t\u003ddocument.createElement(\"div\");t.innerHTML\u003dthis._config.template;const e\u003dt.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip\u003de,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n\u003dV.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!\u003d\u003dt)return o(e)?(e\u003dr(e),void(this._config.html?e.parentNode!\u003d\u003dt\u0026\u0026(t.innerHTML\u003d\"\",t.append(e)):t.textContent\u003de.textContent)):void(this._config.html?(this._config.sanitize\u0026\u0026(e\u003dYi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML\u003de):t.textContent\u003de)}getTitle(){const t\u003dthis._element.getAttribute(\"data-bs-original-title\")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return\"right\"\u003d\u003d\u003dt?\"end\":\"left\"\u003d\u003d\u003dt?\"start\":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}\u003dthis._config;return\"string\"\u003d\u003dtypeof t?t.split(\",\").map((t\u003d\u003eNumber.parseInt(t,10))):\"function\"\u003d\u003dtypeof t?e\u003d\u003et(e,this._element):t}_resolvePossibleFunction(t){return\"function\"\u003d\u003dtypeof t?t.call(this._element):t}_getPopperConfig(t){const e\u003d{placement:t,modifiers:[{name:\"flip\",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:\"offset\",options:{offset:this._getOffset()}},{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"arrow\",options:{element:`.${this.constructor.NAME}-arrow`}},{name:\"onChange\",enabled:!0,phase:\"afterWrite\",fn:t\u003d\u003ethis._handlePopperPlacementChange(t)}],onFirstUpdate:t\u003d\u003e{t.options.placement!\u003d\u003dt.placement\u0026\u0026this._handlePopperPlacementChange(t)}};return{...e,...\"function\"\u003d\u003dtypeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(\" \").forEach((t\u003d\u003e{if(\"click\"\u003d\u003d\u003dt)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t\u003d\u003ethis.toggle(t)));else if(\"manual\"!\u003d\u003dt){const e\u003dt\u003d\u003d\u003dhn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i\u003dt\u003d\u003d\u003dhn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t\u003d\u003ethis._enter(t))),j.on(this._element,i,this._config.selector,(t\u003d\u003ethis._leave(t)))}})),this._hideModalHandler\u003d()\u003d\u003e{this._element\u0026\u0026this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config\u003d{...this._config,trigger:\"manual\",selector:\"\"}:this._fixTitle()}_fixTitle(){const t\u003dthis._element.getAttribute(\"title\"),e\u003dtypeof this._element.getAttribute(\"data-bs-original-title\");(t||\"string\"!\u003d\u003de)\u0026\u0026(this._element.setAttribute(\"data-bs-original-title\",t||\"\"),!t||this._element.getAttribute(\"aria-label\")||this._element.textContent||this._element.setAttribute(\"aria-label\",t),this._element.setAttribute(\"title\",\"\"))}_enter(t,e){e\u003dthis._initializeOnDelegatedTarget(t,e),t\u0026\u0026(e._activeTrigger[\"focusin\"\u003d\u003d\u003dt.type?dn:hn]\u003d!0),e.getTipElement().classList.contains(sn)||e._hoverState\u003d\u003d\u003don?e._hoverState\u003don:(clearTimeout(e._timeout),e._hoverState\u003don,e._config.delay\u0026\u0026e._config.delay.show?e._timeout\u003dsetTimeout((()\u003d\u003e{e._hoverState\u003d\u003d\u003don\u0026\u0026e.show()}),e._config.delay.show):e.show())}_leave(t,e){e\u003dthis._initializeOnDelegatedTarget(t,e),t\u0026\u0026(e._activeTrigger[\"focusout\"\u003d\u003d\u003dt.type?dn:hn]\u003de._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState\u003drn,e._config.delay\u0026\u0026e._config.delay.hide?e._timeout\u003dsetTimeout((()\u003d\u003e{e._hoverState\u003d\u003d\u003drn\u0026\u0026e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e\u003dU.getDataAttributes(this._element);return Object.keys(e).forEach((t\u003d\u003e{Gi.has(t)\u0026\u0026delete e[t]})),(t\u003d{...this.constructor.Default,...e,...\"object\"\u003d\u003dtypeof t\u0026\u0026t?t:{}}).container\u003d!1\u003d\u003d\u003dt.container?document.body:r(t.container),\"number\"\u003d\u003dtypeof t.delay\u0026\u0026(t.delay\u003d{show:t.delay,hide:t.delay}),\"number\"\u003d\u003dtypeof t.title\u0026\u0026(t.title\u003dt.title.toString()),\"number\"\u003d\u003dtypeof t.content\u0026\u0026(t.content\u003dt.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize\u0026\u0026(t.template\u003dYi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t\u003d{};for(const e in this._config)this.constructor.Default[e]!\u003d\u003dthis._config[e]\u0026\u0026(t[e]\u003dthis._config[e]);return t}_cleanTipClass(){const t\u003dthis.getTipElement(),e\u003dnew RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`,\"g\"),i\u003dt.getAttribute(\"class\").match(e);null!\u003d\u003di\u0026\u0026i.length\u003e0\u0026\u0026i.map((t\u003d\u003et.trim())).forEach((e\u003d\u003et.classList.remove(e)))}_getBasicClassPrefix(){return\"bs-tooltip\"}_handlePopperPlacementChange(t){const{state:e}\u003dt;e\u0026\u0026(this.tip\u003de.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper\u0026\u0026(this._popper.destroy(),this._popper\u003dnull)}static jQueryInterface(t){return this.each((function(){const e\u003dun.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}g(un);const fn\u003d{...un.Default,placement:\"right\",offset:[0,8],trigger:\"click\",content:\"\",template:\u0027\u003cdiv class\u003d\"popover\" role\u003d\"tooltip\"\u003e\u003cdiv class\u003d\"popover-arrow\"\u003e\u003c/div\u003e\u003ch3 class\u003d\"popover-header\"\u003e\u003c/h3\u003e\u003cdiv class\u003d\"popover-body\"\u003e\u003c/div\u003e\u003c/div\u003e\u0027},pn\u003d{...un.DefaultType,content:\"(string|element|function)\"},mn\u003d{HIDE:\"hide.bs.popover\",HIDDEN:\"hidden.bs.popover\",SHOW:\"show.bs.popover\",SHOWN:\"shown.bs.popover\",INSERTED:\"inserted.bs.popover\",CLICK:\"click.bs.popover\",FOCUSIN:\"focusin.bs.popover\",FOCUSOUT:\"focusout.bs.popover\",MOUSEENTER:\"mouseenter.bs.popover\",MOUSELEAVE:\"mouseleave.bs.popover\"};class gn extends un{static get Default(){return fn}static get NAME(){return\"popover\"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),\".popover-header\"),this._sanitizeAndSetContent(t,this._getContent(),\".popover-body\")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return\"bs-popover\"}static jQueryInterface(t){return this.each((function(){const e\u003dgn.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}g(gn);const _n\u003d\"scrollspy\",bn\u003d{offset:10,method:\"auto\",target:\"\"},vn\u003d{offset:\"number\",method:\"string\",target:\"(string|element)\"},yn\u003d\"active\",wn\u003d\".nav-link, .list-group-item, .dropdown-item\",En\u003d\"position\";class An extends B{constructor(t,e){super(t),this._scrollElement\u003d\"BODY\"\u003d\u003d\u003dthis._element.tagName?window:this._element,this._config\u003dthis._getConfig(e),this._offsets\u003d[],this._targets\u003d[],this._activeTarget\u003dnull,this._scrollHeight\u003d0,j.on(this._scrollElement,\"scroll.bs.scrollspy\",(()\u003d\u003ethis._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t\u003dthis._scrollElement\u003d\u003d\u003dthis._scrollElement.window?\"offset\":En,e\u003d\"auto\"\u003d\u003d\u003dthis._config.method?t:this._config.method,n\u003de\u003d\u003d\u003dEn?this._getScrollTop():0;this._offsets\u003d[],this._targets\u003d[],this._scrollHeight\u003dthis._getScrollHeight(),V.find(wn,this._config.target).map((t\u003d\u003e{const s\u003di(t),o\u003ds?V.findOne(s):null;if(o){const t\u003do.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t\u003d\u003et)).sort(((t,e)\u003d\u003et[0]-e[0])).forEach((t\u003d\u003e{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,\".bs.scrollspy\"),super.dispose()}_getConfig(t){return(t\u003d{...bn,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t\u0026\u0026t?t:{}}).target\u003dr(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement\u003d\u003d\u003dwindow?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement\u003d\u003d\u003dwindow?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t\u003dthis._getScrollTop()+this._config.offset,e\u003dthis._getScrollHeight(),i\u003dthis._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!\u003d\u003de\u0026\u0026this.refresh(),t\u003e\u003di){const t\u003dthis._targets[this._targets.length-1];this._activeTarget!\u003d\u003dt\u0026\u0026this._activate(t)}else{if(this._activeTarget\u0026\u0026t\u003cthis._offsets[0]\u0026\u0026this._offsets[0]\u003e0)return this._activeTarget\u003dnull,void this._clear();for(let e\u003dthis._offsets.length;e--;)this._activeTarget!\u003d\u003dthis._targets[e]\u0026\u0026t\u003e\u003dthis._offsets[e]\u0026\u0026(void 0\u003d\u003d\u003dthis._offsets[e+1]||t\u003cthis._offsets[e+1])\u0026\u0026this._activate(this._targets[e])}}_activate(t){this._activeTarget\u003dt,this._clear();const e\u003dwn.split(\",\").map((e\u003d\u003e`${e}[data-bs-target\u003d\"${t}\"],${e}[href\u003d\"${t}\"]`)),i\u003dV.findOne(e.join(\",\"),this._config.target);i.classList.add(yn),i.classList.contains(\"dropdown-item\")?V.findOne(\".dropdown-toggle\",i.closest(\".dropdown\")).classList.add(yn):V.parents(i,\".nav, .list-group\").forEach((t\u003d\u003e{V.prev(t,\".nav-link, .list-group-item\").forEach((t\u003d\u003et.classList.add(yn))),V.prev(t,\".nav-item\").forEach((t\u003d\u003e{V.children(t,\".nav-link\").forEach((t\u003d\u003et.classList.add(yn)))}))})),j.trigger(this._scrollElement,\"activate.bs.scrollspy\",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t\u003d\u003et.classList.contains(yn))).forEach((t\u003d\u003et.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e\u003dAn.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}j.on(window,\"load.bs.scrollspy.data-api\",(()\u003d\u003e{V.find(\u0027[data-bs-spy\u003d\"scroll\"]\u0027).forEach((t\u003d\u003enew An(t)))})),g(An);const Tn\u003d\"active\",On\u003d\"fade\",Cn\u003d\"show\",kn\u003d\".active\",Ln\u003d\":scope \u003e li \u003e .active\";class xn extends B{static get NAME(){return\"tab\"}show(){if(this._element.parentNode\u0026\u0026this._element.parentNode.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE\u0026\u0026this._element.classList.contains(Tn))return;let t;const e\u003dn(this._element),i\u003dthis._element.closest(\".nav, .list-group\");if(i){const e\u003d\"UL\"\u003d\u003d\u003di.nodeName||\"OL\"\u003d\u003d\u003di.nodeName?Ln:kn;t\u003dV.find(e,i),t\u003dt[t.length-1]}const s\u003dt?j.trigger(t,\"hide.bs.tab\",{relatedTarget:this._element}):null;if(j.trigger(this._element,\"show.bs.tab\",{relatedTarget:t}).defaultPrevented||null!\u003d\u003ds\u0026\u0026s.defaultPrevented)return;this._activate(this._element,i);const o\u003d()\u003d\u003e{j.trigger(t,\"hidden.bs.tab\",{relatedTarget:this._element}),j.trigger(this._element,\"shown.bs.tab\",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n\u003d(!e||\"UL\"!\u003d\u003de.nodeName\u0026\u0026\"OL\"!\u003d\u003de.nodeName?V.children(e,kn):V.find(Ln,e))[0],s\u003di\u0026\u0026n\u0026\u0026n.classList.contains(On),o\u003d()\u003d\u003ethis._transitionComplete(t,n,i);n\u0026\u0026s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t\u003dV.findOne(\":scope \u003e .dropdown-menu .active\",e.parentNode);t\u0026\u0026t.classList.remove(Tn),\"tab\"\u003d\u003d\u003de.getAttribute(\"role\")\u0026\u0026e.setAttribute(\"aria-selected\",!1)}t.classList.add(Tn),\"tab\"\u003d\u003d\u003dt.getAttribute(\"role\")\u0026\u0026t.setAttribute(\"aria-selected\",!0),u(t),t.classList.contains(On)\u0026\u0026t.classList.add(Cn);let n\u003dt.parentNode;if(n\u0026\u0026\"LI\"\u003d\u003d\u003dn.nodeName\u0026\u0026(n\u003dn.parentNode),n\u0026\u0026n.classList.contains(\"dropdown-menu\")){const e\u003dt.closest(\".dropdown\");e\u0026\u0026V.find(\".dropdown-toggle\",e).forEach((t\u003d\u003et.classList.add(Tn))),t.setAttribute(\"aria-expanded\",!0)}i\u0026\u0026i()}static jQueryInterface(t){return this.each((function(){const e\u003dxn.getOrCreateInstance(this);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}j.on(document,\"click.bs.tab.data-api\",\u0027[data-bs-toggle\u003d\"tab\"], [data-bs-toggle\u003d\"pill\"], [data-bs-toggle\u003d\"list\"]\u0027,(function(t){[\"A\",\"AREA\"].includes(this.tagName)\u0026\u0026t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn\u003d\"toast\",Sn\u003d\"hide\",Nn\u003d\"show\",In\u003d\"showing\",Pn\u003d{animation:\"boolean\",autohide:\"boolean\",delay:\"number\"},jn\u003d{animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config\u003dthis._getConfig(e),this._timeout\u003dnull,this._hasMouseInteraction\u003d!1,this._hasKeyboardInteraction\u003d!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,\"show.bs.toast\").defaultPrevented||(this._clearTimeout(),this._config.animation\u0026\u0026this._element.classList.add(\"fade\"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()\u003d\u003e{this._element.classList.remove(In),j.trigger(this._element,\"shown.bs.toast\"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)\u0026\u0026(j.trigger(this._element,\"hide.bs.toast\").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()\u003d\u003e{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,\"hidden.bs.toast\")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)\u0026\u0026this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t\u003d{...jn,...U.getDataAttributes(this._element),...\"object\"\u003d\u003dtypeof t\u0026\u0026t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide\u0026\u0026(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout\u003dsetTimeout((()\u003d\u003e{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case\"mouseover\":case\"mouseout\":this._hasMouseInteraction\u003de;break;case\"focusin\":case\"focusout\":this._hasKeyboardInteraction\u003de}if(e)return void this._clearTimeout();const i\u003dt.relatedTarget;this._element\u003d\u003d\u003di||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,\"mouseover.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!0))),j.on(this._element,\"mouseout.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!1))),j.on(this._element,\"focusin.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!0))),j.on(this._element,\"focusout.bs.toast\",(t\u003d\u003ethis._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout\u003dnull}static jQueryInterface(t){return this.each((function(){const e\u003dMn.getOrCreateInstance(this,t);if(\"string\"\u003d\u003dtypeof t){if(void 0\u003d\u003d\u003de[t])throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}}));"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"//# sourceMappingURL\u003dbootstrap.bundle.min.js.map"}],"authorContributionMap":{"KevinEyo1":7}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/js/markbind.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"!function(t,e){\"object\"\u003d\u003dtypeof exports\u0026\u0026\"object\"\u003d\u003dtypeof module?module.exports\u003de(require(\"Vue\")):\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define([\"Vue\"],e):\"object\"\u003d\u003dtypeof exports?exports.MarkBind\u003de(require(\"Vue\")):t.MarkBind\u003de(t.Vue)}(self,t\u003d\u003e(()\u003d\u003e{var e\u003d{605:()\u003d\u003e{function t(){document.querySelectorAll(\".\".concat(\"page-nav-clone\")).forEach((function(t){t.remove()}))}window.addEventListener(\"beforeprint\",(function(){var e\u003ddocument.querySelector(\"#\".concat(\"mb-page-nav\")),n\u003ddocument.querySelectorAll(\".\".concat(\"page-nav-print\"));e\u0026\u0026n.length\u003e\u003d1\u0026\u0026(t(),n.forEach((function(t){t.appendChild(function(t){var e\u003dt.cloneNode(!0);return e.removeAttribute(\"id\"),e.querySelectorAll(\"a.active\").forEach((function(t){t.classList.remove(\"active\")})),e.classList.add(\"page-nav-clone\"),e}(e))})))})),window.addEventListener(\"afterprint\",(function(){t()})),window.addEventListener(\"beforeprint\",(function(){document.querySelectorAll(\"pre \u003e code.hljs\").forEach((function(t){Array.from(t.querySelectorAll(\"span\")).some((function(t){return t.scrollWidth\u003et.clientWidth}))\u0026\u0026t.classList.add(\"line-numbers-print\")}))}))},3:t\u003d\u003e{t.exports\u003d{bind:function(t){function e(){t.dataset.isShown\u003d\"false\",r.style.display\u003d\"\",o.style.display\u003d\"none\",i.style.display\u003d\"none\"}function n(){t.dataset.isShown\u003d\"true\",r.style.display\u003d\"none\",i.style.display\u003d\"\"}t.dataset.isShown\u003d\"true\",t.style.position\u003d\"relative\";var i\u003ddocument.createElement(\"div\");i.classList.add(\"content\"),Array.from(t.children).forEach((function(t){return i.append(t)})),t.replaceChildren(),t.append(i),t.classList.add(\"closeable-wrapper\");var o\u003dfunction(){var t\u003ddocument.createElement(\"span\");return t.classList.add(\"closeable-button\",\"label\",\"label-default\",\"hidden-print\"),t.style.cssText+\u003d\"display: none; position: absolute; top: 0; left: 0; cursor: pointer;background: #d9534f\",t.innerHTML\u003d\u0027\u003cspan class\u003d\"glyphicon glyphicon-remove\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e\u0027,t.addEventListener(\"click\",e),t}();t.append(o);var r\u003dfunction(t){var e\u003ddocument.createElement(\"a\");return e.classList.add(\"closeable-show\",\"hidden-print\"),e.style.cssText+\u003d\"display: none; cursor: pointer;text-decoration: underline\",e.innerHTML\u003dt,e.addEventListener(\"click\",n),e}(t.getAttribute(\"alt\")||\"Expand Content\");t.append(r),t.addEventListener(\"mouseover\",(function(){\"false\"!\u003d\u003dt.dataset.isShown\u0026\u0026(o.style.display\u003d\"\")})),t.addEventListener(\"mouseout\",(function(){\"false\"!\u003d\u003dt.dataset.isShown\u0026\u0026(o.style.display\u003d\"none\")}))}}},383:(t,e,n)\u003d\u003e{\"use strict\";var i,o\u003d(i\u003dn(740))\u0026\u0026\"object\"\u003d\u003dtypeof i\u0026\u0026\"default\"in i?i.default:i;function r(t){return(r\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t})(t)}function s(t){return function(t){if(Array.isArray(t)){for(var e\u003d0,n\u003dnew Array(t.length);e\u003ct.length;e++)n[e]\u003dt[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||\"[object Arguments]\"\u003d\u003d\u003dObject.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}var a\u003d\"undefined\"!\u003dtypeof window;function l(t,e){return e.reduce((function(e,n){return t.hasOwnProperty(n)\u0026\u0026(e[n]\u003dt[n]),e}),{})}var c\u003d{},u\u003d{},d\u003d{},h\u003dnew(o.extend({data:function(){return{transports:c,targets:u,sources:d,trackInstances:a}},methods:{open:function(t){if(a){var e\u003dt.to,n\u003dt.from,i\u003dt.passengers,s\u003dt.order,l\u003dvoid 0\u003d\u003d\u003ds?1/0:s;if(e\u0026\u0026n\u0026\u0026i){var c,u\u003d{to:e,from:n,passengers:(c\u003di,Array.isArray(c)||\"object\"\u003d\u003d\u003dr(c)?Object.freeze(c):c),order:l};-1\u003d\u003d\u003dObject.keys(this.transports).indexOf(e)\u0026\u0026o.set(this.transports,e,[]);var d,h\u003dthis.$_getTransportIndex(u),p\u003dthis.transports[e].slice(0);-1\u003d\u003d\u003dh?p.push(u):p[h]\u003du,this.transports[e]\u003d(d\u003dfunction(t,e){return t.order-e.order},p.map((function(t,e){return[e,t]})).sort((function(t,e){return d(t[1],e[1])||t[0]-e[0]})).map((function(t){return t[1]})))}}},close:function(t){var e\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]\u0026\u0026arguments[1],n\u003dt.to,i\u003dt.from;if(n\u0026\u0026(i||!1!\u003d\u003de)\u0026\u0026this.transports[n])if(e)this.transports[n]\u003d[];else{var o\u003dthis.$_getTransportIndex(t);if(o\u003e\u003d0){var r\u003dthis.transports[n].slice(0);r.splice(o,1),this.transports[n]\u003dr}}},registerTarget:function(t,e,n){a\u0026\u0026(this.trackInstances\u0026\u0026!n\u0026\u0026this.targets[t]\u0026\u0026console.warn(\"[portal-vue]: Target \".concat(t,\" already exists\")),this.$set(this.targets,t,Object.freeze([e])))},unregisterTarget:function(t){this.$delete(this.targets,t)},registerSource:function(t,e,n){a\u0026\u0026(this.trackInstances\u0026\u0026!n\u0026\u0026this.sources[t]\u0026\u0026console.warn(\"[portal-vue]: source \".concat(t,\" already exists\")),this.$set(this.sources,t,Object.freeze([e])))},unregisterSource:function(t){this.$delete(this.sources,t)},hasTarget:function(t){return!(!this.targets[t]||!this.targets[t][0])},hasSource:function(t){return!(!this.sources[t]||!this.sources[t][0])},hasContentFor:function(t){return!!this.transports[t]\u0026\u0026!!this.transports[t].length},$_getTransportIndex:function(t){var e\u003dt.to,n\u003dt.from;for(var i in this.transports[e])if(this.transports[e][i].from\u003d\u003d\u003dn)return+i;return-1}}}))(c),p\u003d1,f\u003do.extend({name:\"portal\",props:{disabled:{type:Boolean},name:{type:String,default:function(){return String(p++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:\"DIV\"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}}},created:function(){var t\u003dthis;this.$nextTick((function(){h.registerSource(t.name,t)}))},mounted:function(){this.disabled||this.sendUpdate()},updated:function(){this.disabled?this.clear():this.sendUpdate()},beforeDestroy:function(){h.unregisterSource(this.name),this.clear()},watch:{to:function(t,e){e\u0026\u0026e!\u003d\u003dt\u0026\u0026this.clear(e),this.sendUpdate()}},methods:{clear:function(t){var e\u003d{from:this.name,to:t||this.to};h.close(e)},normalizeSlots:function(){return this.$scopedSlots.default?[this.$scopedSlots.default]:this.$slots.default},normalizeOwnChildren:function(t){return\"function\"\u003d\u003dtypeof t?t(this.slotProps):t},sendUpdate:function(){var t\u003dthis.normalizeSlots();if(t){var e\u003d{from:this.name,to:this.to,passengers:s(t),order:this.order};h.open(e)}else this.clear()}},render:function(t){var e\u003dthis.$slots.default||this.$scopedSlots.default||[],n\u003dthis.tag;return e\u0026\u0026this.disabled?e.length\u003c\u003d1\u0026\u0026this.slim?this.normalizeOwnChildren(e)[0]:t(n,[this.normalizeOwnChildren(e)]):this.slim?t():t(n,{class:{\"v-portal\":!0},style:{display:\"none\"},key:\"v-portal-placeholder\"})}}),m\u003do.extend({name:\"portalTarget\",props:{multiple:{type:Boolean,default:!1},name:{type:String,required:!0},slim:{type:Boolean,default:!1},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:\"div\"},transition:{type:[String,Object,Function]}},data:function(){return{transports:h.transports,firstRender:!0}},created:function(){var t\u003dthis;this.$nextTick((function(){h.registerTarget(t.name,t)}))},watch:{ownTransports:function(){this.$emit(\"change\",this.children().length\u003e0)},name:function(t,e){h.unregisterTarget(e),h.registerTarget(t,this)}},mounted:function(){var t\u003dthis;this.transition\u0026\u0026this.$nextTick((function(){t.firstRender\u003d!1}))},beforeDestroy:function(){h.unregisterTarget(this.name)},computed:{ownTransports:function(){var t\u003dthis.transports[this.name]||[];return this.multiple?t:0\u003d\u003d\u003dt.length?[]:[t[t.length-1]]},passengers:function(){return function(t){var e\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]?arguments[1]:{};return t.reduce((function(t,n){var i\u003dn.passengers[0],o\u003d\"function\"\u003d\u003dtypeof i?i(e):n.passengers;return t.concat(o)}),[])}(this.ownTransports,this.slotProps)}},methods:{children:function(){return 0!\u003d\u003dthis.passengers.length?this.passengers:this.$scopedSlots.default?this.$scopedSlots.default(this.slotProps):this.$slots.default||[]},noWrapper:function(){var t\u003dthis.slim\u0026\u0026!this.transition;return t\u0026\u0026this.children().length\u003e1\u0026\u0026console.warn(\"[portal-vue]: PortalTarget with `slim` option received more than one child element.\"),t}},render:function(t){var e\u003dthis.noWrapper(),n\u003dthis.children(),i\u003dthis.transition||this.tag;return e?n[0]:this.slim\u0026\u0026!i?t():t(i,{props:{tag:this.transition\u0026\u0026this.tag?this.tag:void 0},class:{\"vue-portal-target\":!0}},n)}}),v\u003d0,g\u003d[\"disabled\",\"name\",\"order\",\"slim\",\"slotProps\",\"tag\",\"to\"],y\u003d[\"multiple\",\"transition\"],w\u003do.extend({name:\"MountingPortal\",inheritAttrs:!1,props:{append:{type:[Boolean,String]},bail:{type:Boolean},mountTo:{type:String,required:!0},disabled:{type:Boolean},name:{type:String,default:function(){return\"mounted_\"+String(v++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:\"DIV\"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}},multiple:{type:Boolean,default:!1},targetSlim:{type:Boolean},targetSlotProps:{type:Object,default:function(){return{}}},targetTag:{type:String,default:\"div\"},transition:{type:[String,Object,Function]}},created:function(){if(\"undefined\"!\u003dtypeof document){var t\u003ddocument.querySelector(this.mountTo);if(t){var e\u003dthis.$props;if(h.targets[e.name])e.bail?console.warn(\"[portal-vue]: Target \".concat(e.name,\" is already mounted.\\n Aborting because \u0027bail: true\u0027 is set\")):this.portalTarget\u003dh.targets[e.name];else{var n\u003de.append;if(n){var i\u003d\"string\"\u003d\u003dtypeof n?n:\"DIV\",o\u003ddocument.createElement(i);t.appendChild(o),t\u003do}var r\u003dl(this.$props,y);r.slim\u003dthis.targetSlim,r.tag\u003dthis.targetTag,r.slotProps\u003dthis.targetSlotProps,r.name\u003dthis.to,this.portalTarget\u003dnew m({el:t,parent:this.$parent||this,propsData:r})}}else console.error(\"[portal-vue]: Mount Point \u0027\".concat(this.mountTo,\"\u0027 not found in document\"))}},beforeDestroy:function(){var t\u003dthis.portalTarget;if(this.append){var e\u003dt.$el;e.parentNode.removeChild(e)}t.$destroy()},render:function(t){if(!this.portalTarget)return console.warn(\"[portal-vue] Target wasn\u0027t mounted\"),t();if(!this.$scopedSlots.manual){var e\u003dl(this.$props,g);return t(f,{props:e,attrs:this.$attrs,on:this.$listeners,scopedSlots:this.$scopedSlots},this.$slots.default)}var n\u003dthis.$scopedSlots.manual({to:this.to});return Array.isArray(n)\u0026\u0026(n\u003dn[0]),n||t()}});e.h_\u003df,e.YC\u003dm},740:e\u003d\u003e{\"use strict\";e.exports\u003dt}},n\u003d{};function i(t){var o\u003dn[t];if(void 0!\u003d\u003do)return o.exports;var r\u003dn[t]\u003d{exports:{}};return e[t](r,r.exports,i),r.exports}i.n\u003dt\u003d\u003e{var e\u003dt\u0026\u0026t.__esModule?()\u003d\u003et.default:()\u003d\u003et;return i.d(e,{a:e}),e},i.d\u003d(t,e)\u003d\u003e{for(var n in e)i.o(e,n)\u0026\u0026!i.o(t,n)\u0026\u0026Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g\u003dfunction(){if(\"object\"\u003d\u003dtypeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"\u003d\u003dtypeof window)return window}}(),i.o\u003d(t,e)\u003d\u003eObject.prototype.hasOwnProperty.call(t,e);var o\u003d{};return(()\u003d\u003e{\"use strict\";function t(e){return(t\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t})(e)}function e(e){var n\u003dfunction(e,n){if(\"object\"!\u003d\u003dt(e)||null\u003d\u003d\u003de)return e;var i\u003de[Symbol.toPrimitive];if(void 0!\u003d\u003di){var o\u003di.call(e,n||\"default\");if(\"object\"!\u003d\u003dt(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"\u003d\u003d\u003dn?String:Number)(e)}(e,\"string\");return\"symbol\"\u003d\u003d\u003dt(n)?n:String(n)}function n(t,n,i){return(n\u003de(n))in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]\u003di,t}function r(t){return t.split(\"-\")[0]}function s(t){return t.split(\"-\")[1]}function a(t){return[\"top\",\"bottom\"].includes(r(t))?\"x\":\"y\"}function l(t){return\"y\"\u003d\u003d\u003dt?\"height\":\"width\"}function c(t){let{reference:e,floating:n,placement:i}\u003dt;const o\u003de.x+e.width/2-n.width/2,c\u003de.y+e.height/2-n.height/2;let u;switch(r(i)){case\"top\":u\u003d{x:o,y:e.y-n.height};break;case\"bottom\":u\u003d{x:o,y:e.y+e.height};break;case\"right\":u\u003d{x:e.x+e.width,y:c};break;case\"left\":u\u003d{x:e.x-n.width,y:c};break;default:u\u003d{x:e.x,y:e.y}}const d\u003da(i),h\u003dl(d);switch(s(i)){case\"start\":u[d]\u003du[d]-(e[h]/2-n[h]/2);break;case\"end\":u[d]\u003du[d]+(e[h]/2-n[h]/2)}return u}i.d(o,{default:()\u003d\u003eMo});function u(t){return\"number\"!\u003dtypeof t?function(t){return{top:0,right:0,bottom:0,left:0,...t}}(t):{top:t,right:t,bottom:t,left:t}}function d(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}async function h(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});const{x:n,y:i,platform:o,rects:r,elements:s,strategy:a}\u003dt,{boundary:l\u003d\"clippingParents\",rootBoundary:c\u003d\"viewport\",elementContext:h\u003d\"floating\",altBoundary:p\u003d!1,padding:f\u003d0}\u003de,m\u003du(f),v\u003ds[p?\"floating\"\u003d\u003d\u003dh?\"reference\":\"floating\":h],g\u003dawait o.getClippingClientRect({element:await o.isElement(v)?v:v.contextElement||await o.getDocumentElement({element:s.floating}),boundary:l,rootBoundary:c}),y\u003dd(await o.convertOffsetParentRelativeRectToViewportRelativeRect({rect:\"floating\"\u003d\u003d\u003dh?{...r.floating,x:n,y:i}:r.reference,offsetParent:await o.getOffsetParent({element:s.floating}),strategy:a}));return{top:g.top-y.top+m.top,bottom:y.bottom-g.bottom+m.bottom,left:g.left-y.left+m.left,right:y.right-g.right+m.right}}const p\u003dMath.min,f\u003dMath.max;function m(t,e,n){return f(t,p(e,n))}const v\u003d{left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function g(t){return t.replace(/left|right|bottom|top/g,t\u003d\u003ev[t])}function y(t,e){const n\u003d\"start\"\u003d\u003d\u003ds(t),i\u003da(t),o\u003dl(i);let r\u003d\"x\"\u003d\u003d\u003di?n?\"right\":\"left\":n?\"bottom\":\"top\";return e.reference[o]\u003ee.floating[o]\u0026\u0026(r\u003dg(r)),{main:r,cross:g(r)}}const w\u003d{start:\"end\",end:\"start\"};function b(t){return t.replace(/start|end/g,t\u003d\u003ew[t])}const _\u003d[\"top\",\"right\",\"bottom\",\"left\"],S\u003d_.reduce((t,e)\u003d\u003et.concat(e,e+\"-start\",e+\"-end\"),[]);const x\u003dfunction(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"autoPlacement\",options:t,async fn(e){var n,i,o,a,l,c;const{x:u,y:d,rects:p,middlewareData:f,placement:m}\u003de,{alignment:v\u003dnull,allowedPlacements:g\u003dS,autoAlignment:w\u003d!0,..._}\u003dt;if(null!\u003d(n\u003df.autoPlacement)\u0026\u0026n.skip)return{};const x\u003dfunction(t,e,n){return(t?[...n.filter(e\u003d\u003es(e)\u003d\u003d\u003dt),...n.filter(e\u003d\u003es(e)!\u003d\u003dt)]:n.filter(t\u003d\u003er(t)\u003d\u003d\u003dt)).filter(n\u003d\u003e!t||(s(n)\u003d\u003d\u003dt||!!e\u0026\u0026b(n)!\u003d\u003dn))}(v,w,g),C\u003dawait h(e,_),$\u003dnull!\u003d(i\u003dnull\u003d\u003d(o\u003df.autoPlacement)?void 0:o.index)?i:0,k\u003dx[$],{main:T,cross:E}\u003dy(k,p);if(m!\u003d\u003dk)return{x:u,y:d,reset:{placement:x[0]}};const O\u003d[C[r(k)],C[T],C[E]],B\u003d[...null!\u003d(a\u003dnull\u003d\u003d(l\u003df.autoPlacement)?void 0:l.overflows)?a:[],{placement:k,overflows:O}],P\u003dx[$+1];if(P)return{data:{index:$+1,overflows:B},reset:{placement:P}};const L\u003dB.slice().sort((t,e)\u003d\u003et.overflows[0]-e.overflows[0]),N\u003dnull\u003d\u003d(c\u003dL.find(t\u003d\u003e{let{overflows:e}\u003dt;return e.every(t\u003d\u003et\u003c\u003d0)}))?void 0:c.placement;return{data:{skip:!0},reset:{placement:null!\u003dN?N:L[0].placement}}}}};const C\u003dfunction(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"flip\",options:t,async fn(e){var n,i;const{placement:o,middlewareData:s,rects:a,initialPlacement:l}\u003de;if(null!\u003d(n\u003ds.flip)\u0026\u0026n.skip)return{};const{mainAxis:c\u003d!0,crossAxis:u\u003d!0,fallbackPlacements:d,fallbackStrategy:p\u003d\"bestFit\",flipAlignment:f\u003d!0,...m}\u003dt,v\u003dr(o),w\u003d[l,...d||(v\u003d\u003d\u003dl||!f?[g(l)]:function(t){const e\u003dg(t);return[b(t),e,b(e)]}(l))],_\u003dawait h(e,m),S\u003d[];let x\u003d(null\u003d\u003d(i\u003ds.flip)?void 0:i.overflows)||[];if(c\u0026\u0026S.push(_[v]),u){const{main:t,cross:e}\u003dy(o,a);S.push(_[t],_[e])}if(x\u003d[...x,{placement:o,overflows:S}],!S.every(t\u003d\u003et\u003c\u003d0)){var C,$;const t\u003d(null!\u003d(C\u003dnull\u003d\u003d($\u003ds.flip)?void 0:$.index)?C:0)+1,e\u003dw[t];if(e)return{data:{index:t,overflows:x},reset:{placement:e}};let n\u003d\"bottom\";switch(p){case\"bestFit\":{var k;const t\u003dnull\u003d\u003d(k\u003dx.slice().sort((t,e)\u003d\u003et.overflows.filter(t\u003d\u003et\u003e0).reduce((t,e)\u003d\u003et+e,0)-e.overflows.filter(t\u003d\u003et\u003e0).reduce((t,e)\u003d\u003et+e,0))[0])?void 0:k.placement;t\u0026\u0026(n\u003dt);break}case\"initialPlacement\":n\u003dl}return{data:{skip:!0},reset:{placement:n}}}return{}}}};const $\u003dfunction(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d0),{name:\"offset\",options:t,fn(e){const{x:n,y:i,placement:o,rects:s}\u003de,l\u003dfunction(t){let{placement:e,rects:n,value:i}\u003dt;const o\u003dr(e),s\u003d[\"left\",\"top\"].includes(o)?-1:1,l\u003d\"function\"\u003d\u003dtypeof i?i({...n,placement:e}):i,{mainAxis:c,crossAxis:u}\u003d\"number\"\u003d\u003dtypeof l?{mainAxis:l,crossAxis:0}:{mainAxis:0,crossAxis:0,...l};return\"x\"\u003d\u003d\u003da(o)?{x:u,y:c*s}:{x:c*s,y:u}}({placement:o,rects:s,value:t});return{x:n+l.x,y:i+l.y,data:l}}}};function k(t){return\"x\"\u003d\u003d\u003dt?\"y\":\"x\"}function T(t){return\"[object Window]\"\u003d\u003d\u003d(null\u003d\u003dt?void 0:t.toString())}function E(t){if(null\u003d\u003dt)return window;if(!T(t)){const e\u003dt.ownerDocument;return e\u0026\u0026e.defaultView||window}return t}function O(t){return E(t).getComputedStyle(t)}function B(t){return T(t)?\"\":t?(t.nodeName||\"\").toLowerCase():\"\"}function P(t){return t instanceof E(t).HTMLElement}function L(t){return t instanceof E(t).Element}function N(t){return t instanceof E(t).ShadowRoot||t instanceof ShadowRoot}function A(t){const{overflow:e,overflowX:n,overflowY:i}\u003dO(t);return/auto|scroll|overlay|hidden/.test(e+i+n)}function z(t){return[\"table\",\"td\",\"th\"].includes(B(t))}function M(t){const e\u003dnavigator.userAgent.toLowerCase().includes(\"firefox\"),n\u003dO(t);return\"none\"!\u003d\u003dn.transform||\"none\"!\u003d\u003dn.perspective||\"paint\"\u003d\u003d\u003dn.contain||[\"transform\",\"perspective\"].includes(n.willChange)||e\u0026\u0026\"filter\"\u003d\u003d\u003dn.willChange||e\u0026\u0026!!n.filter\u0026\u0026\"none\"!\u003d\u003dn.filter}const H\u003dMath.min,D\u003dMath.max,R\u003dMath.round;function j(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!1);const n\u003dt.getBoundingClientRect();let i\u003d1,o\u003d1;return e\u0026\u0026P(t)\u0026\u0026(i\u003dt.offsetWidth\u003e0\u0026\u0026R(n.width)/t.offsetWidth||1,o\u003dt.offsetHeight\u003e0\u0026\u0026R(n.height)/t.offsetHeight||1),{width:n.width/i,height:n.height/o,top:n.top/o,right:n.right/i,bottom:n.bottom/o,left:n.left/i,x:n.left/i,y:n.top/o}}function I(t){return(e\u003dt,(e instanceof E(e).Node?t.ownerDocument:t.document)||window.document).documentElement;var e}function q(t){return T(t)?{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}:{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function W(t){return j(I(t)).left+q(t).scrollLeft}function F(t,e,n){const i\u003dP(e),o\u003dI(e),r\u003dj(t,i\u0026\u0026function(t){const e\u003dj(t);return R(e.width)!\u003d\u003dt.offsetWidth||R(e.height)!\u003d\u003dt.offsetHeight}(e));let s\u003d{scrollLeft:0,scrollTop:0};const a\u003d{x:0,y:0};if(i||!i\u0026\u0026\"fixed\"!\u003d\u003dn)if((\"body\"!\u003d\u003dB(e)||A(o))\u0026\u0026(s\u003dq(e)),P(e)){const t\u003dj(e,!0);a.x\u003dt.x+e.clientLeft,a.y\u003dt.y+e.clientTop}else o\u0026\u0026(a.x\u003dW(o));return{x:r.left+s.scrollLeft-a.x,y:r.top+s.scrollTop-a.y,width:r.width,height:r.height}}function V(t){return\"html\"\u003d\u003d\u003dB(t)?t:t.assignedSlot||t.parentNode||(N(t)?t.host:null)||I(t)}function U(t){return P(t)\u0026\u0026\"fixed\"!\u003d\u003dgetComputedStyle(t).position?t.offsetParent:null}function Q(t){const e\u003dE(t);let n\u003dU(t);for(;n\u0026\u0026z(n)\u0026\u0026\"static\"\u003d\u003d\u003dgetComputedStyle(n).position;)n\u003dU(n);return n\u0026\u0026(\"html\"\u003d\u003d\u003dB(n)||\"body\"\u003d\u003d\u003dB(n)\u0026\u0026\"static\"\u003d\u003d\u003dgetComputedStyle(n).position\u0026\u0026!M(n))?e:n||function(t){let e\u003dV(t);for(;P(e)\u0026\u0026![\"html\",\"body\"].includes(B(e));){if(M(e))return e;e\u003de.parentNode}return null}(t)||e}function X(t){return{width:t.offsetWidth,height:t.offsetHeight}}function Y(t,e){var n;void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[]);const i\u003dfunction t(e){return[\"html\",\"body\",\"#document\"].includes(B(e))?e.ownerDocument.body:P(e)\u0026\u0026A(e)?e:t(V(e))}(t),o\u003di\u003d\u003d\u003d(null\u003d\u003d(n\u003dt.ownerDocument)?void 0:n.body),r\u003dE(i),s\u003do?[r].concat(r.visualViewport||[],A(i)?i:[]):i,a\u003de.concat(s);return o?a:a.concat(Y(V(s)))}function K(t,e){return\"viewport\"\u003d\u003d\u003de?d(function(t){const e\u003dE(t),n\u003dI(t),i\u003de.visualViewport;let o\u003dn.clientWidth,r\u003dn.clientHeight,s\u003d0,a\u003d0;return i\u0026\u0026(o\u003di.width,r\u003di.height,Math.abs(e.innerWidth/i.scale-i.width)\u003c.01\u0026\u0026(s\u003di.offsetLeft,a\u003di.offsetTop)),{width:o,height:r,x:s,y:a}}(t)):L(e)?function(t){const e\u003dj(t),n\u003de.top+t.clientTop,i\u003de.left+t.clientLeft;return{top:n,left:i,x:i,y:n,right:i+t.clientWidth,bottom:n+t.clientHeight,width:t.clientWidth,height:t.clientHeight}}(e):d(function(t){var e;const n\u003dI(t),i\u003dq(t),o\u003dnull\u003d\u003d(e\u003dt.ownerDocument)?void 0:e.body,r\u003dD(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s\u003dD(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0);let a\u003d-i.scrollLeft+W(t);const l\u003d-i.scrollTop;return\"rtl\"\u003d\u003d\u003dO(o||n).direction\u0026\u0026(a+\u003dD(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(I(t)))}function G(t){const e\u003dY(V(t)),n\u003d[\"absolute\",\"fixed\"].includes(O(t).position)\u0026\u0026P(t)?Q(t):t;return L(n)?e.filter(t\u003d\u003eL(t)\u0026\u0026function(t,e){const n\u003dnull\u003d\u003de.getRootNode?void 0:e.getRootNode();if(t.contains(e))return!0;if(n\u0026\u0026N(n)){let n\u003de;do{if(n\u0026\u0026t\u003d\u003d\u003dn)return!0;n\u003dn.parentNode||n.host}while(n)}return!1}(t,n)\u0026\u0026\"body\"!\u003d\u003dB(t)):[]}const Z\u003d{getElementRects:t\u003d\u003e{let{reference:e,floating:n,strategy:i}\u003dt;return{reference:F(e,Q(n),i),floating:{...X(n),x:0,y:0}}},convertOffsetParentRelativeRectToViewportRelativeRect:t\u003d\u003efunction(t){let{rect:e,offsetParent:n,strategy:i}\u003dt;const o\u003dP(n),r\u003dI(n);if(n\u003d\u003d\u003dr)return e;let s\u003d{scrollLeft:0,scrollTop:0};const a\u003d{x:0,y:0};if((o||!o\u0026\u0026\"fixed\"!\u003d\u003di)\u0026\u0026((\"body\"!\u003d\u003dB(n)||A(r))\u0026\u0026(s\u003dq(n)),P(n))){const t\u003dj(n,!0);a.x\u003dt.x+n.clientLeft,a.y\u003dt.y+n.clientTop}return{...e,x:e.x-s.scrollLeft+a.x,y:e.y-s.scrollTop+a.y}}(t),getOffsetParent:t\u003d\u003e{let{element:e}\u003dt;return Q(e)},isElement:t\u003d\u003eL(t),getDocumentElement:t\u003d\u003e{let{element:e}\u003dt;return I(e)},getClippingClientRect:t\u003d\u003efunction(t){let{element:e,boundary:n,rootBoundary:i}\u003dt;const o\u003d[...\"clippingParents\"\u003d\u003d\u003dn?G(e):[].concat(n),i],r\u003do[0],s\u003do.reduce((t,n)\u003d\u003e{const i\u003dK(e,n);return t.top\u003dD(i.top,t.top),t.right\u003dH(i.right,t.right),t.bottom\u003dH(i.bottom,t.bottom),t.left\u003dD(i.left,t.left),t},K(e,r));return s.width\u003ds.right-s.left,s.height\u003ds.bottom-s.top,s.x\u003ds.left,s.y\u003ds.top,s}(t),getDimensions:t\u003d\u003e{let{element:e}\u003dt;return X(e)},getClientRects:t\u003d\u003e{let{element:e}\u003dt;return e.getClientRects()}},J\u003d(t,e,n)\u003d\u003e(async(t,e,n)\u003d\u003e{const{placement:i\u003d\"bottom\",strategy:o\u003d\"absolute\",middleware:r\u003d[],platform:s}\u003dn;let a\u003dawait s.getElementRects({reference:t,floating:e,strategy:o}),{x:l,y:u}\u003dc({...a,placement:i}),d\u003di,h\u003d{};for(let n\u003d0;n\u003cr.length;n++){0;const{name:p,fn:f}\u003dr[n],{x:m,y:v,data:g,reset:y}\u003dawait f({x:l,y:u,initialPlacement:i,placement:d,strategy:o,middlewareData:h,rects:a,platform:s,elements:{reference:t,floating:e}});l\u003dnull!\u003dm?m:l,u\u003dnull!\u003dv?v:u,h\u003d{...h,[p]:null!\u003dg?g:{}},y\u0026\u0026(\"object\"\u003d\u003dtypeof y\u0026\u0026(y.placement\u0026\u0026(d\u003dy.placement),y.rects\u0026\u0026(a\u003d!0\u003d\u003d\u003dy.rects?await s.getElementRects({reference:t,floating:e,strategy:o}):y.rects),({x:l,y:u}\u003dc({...a,placement:d}))),n\u003d-1)}return{x:l,y:u,placement:d,strategy:o,middlewareData:h}})(t,e,{platform:Z,...n});var tt\u003di(740),et\u003di.n(tt),nt\u003dObject.defineProperty,it\u003dObject.defineProperties,ot\u003dObject.getOwnPropertyDescriptors,rt\u003dObject.getOwnPropertySymbols,st\u003dObject.prototype.hasOwnProperty,at\u003dObject.prototype.propertyIsEnumerable,lt\u003d(t,e,n)\u003d\u003ee in t?nt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]\u003dn,ct\u003d(t,e)\u003d\u003e{for(var n in e||(e\u003d{}))st.call(e,n)\u0026\u0026lt(t,n,e[n]);if(rt)for(var n of rt(e))at.call(e,n)\u0026\u0026lt(t,n,e[n]);return t},ut\u003d(t,e)\u003d\u003eit(t,ot(e));const dt\u003d{disabled:!1,distance:5,skidding:0,container:\"body\",boundary:void 0,instantMove:!1,disposeTimeout:5e3,popperTriggers:[],strategy:\"absolute\",preventOverflow:!0,flip:!0,shift:!0,overflowPadding:0,arrowPadding:0,arrowOverflow:!0,themes:{tooltip:{placement:\"top\",triggers:[\"hover\",\"focus\",\"touch\"],hideTriggers:t\u003d\u003e[...t,\"click\"],delay:{show:200,hide:0},handleResize:!1,html:!1,loadingContent:\"...\"},dropdown:{placement:\"bottom\",triggers:[\"click\"],delay:0,handleResize:!0,autoHide:!0},menu:{$extend:\"dropdown\",triggers:[\"hover\",\"focus\"],popperTriggers:[\"hover\",\"focus\"],delay:{show:0,hide:400}}}};function ht(t,e){let n,i\u003ddt.themes[t]||{};do{n\u003di[e],void 0\u003d\u003d\u003dn?i.$extend?i\u003ddt.themes[i.$extend]||{}:(i\u003dnull,n\u003ddt[e]):i\u003dnull}while(i);return n}let pt\u003d!1;if(\"undefined\"!\u003dtypeof window){pt\u003d!1;try{const t\u003dObject.defineProperty({},\"passive\",{get(){pt\u003d!0}});window.addEventListener(\"test\",null,t)}catch(t){}}let ft\u003d!1;\"undefined\"!\u003dtypeof window\u0026\u0026\"undefined\"!\u003dtypeof navigator\u0026\u0026(ft\u003d/iPad|iPhone|iPod/.test(navigator.userAgent)\u0026\u0026!window.MSStream);const mt\u003d[\"auto\",\"top\",\"bottom\",\"left\",\"right\"].reduce((t,e)\u003d\u003et.concat([e,e+\"-start\",e+\"-end\"]),[]),vt\u003d{hover:\"mouseenter\",focus:\"focus\",click:\"click\",touch:\"touchstart\"},gt\u003d{hover:\"mouseleave\",focus:\"blur\",click:\"click\",touch:\"touchend\"};function yt(){return new Promise(t\u003d\u003erequestAnimationFrame(()\u003d\u003e{requestAnimationFrame(t)}))}const wt\u003d[];let bt\u003dnull,_t\u003dfunction(){};function St(t){return function(){return ht(this.$props.theme,t)}}\"undefined\"!\u003dtypeof window\u0026\u0026(_t\u003dwindow.Element);const xt\u003d\"__floating-vue__popper\";var Ct\u003d()\u003d\u003e({name:\"VPopper\",props:{theme:{type:String,required:!0},targetNodes:{type:Function,required:!0},referenceNode:{type:Function,required:!0},popperNode:{type:Function,required:!0},shown:{type:Boolean,default:!1},showGroup:{type:String,default:null},ariaId:{default:null},disabled:{type:Boolean,default:St(\"disabled\")},positioningDisabled:{type:Boolean,default:St(\"positioningDisabled\")},placement:{type:String,default:St(\"placement\"),validator:t\u003d\u003emt.includes(t)},delay:{type:[String,Number,Object],default:St(\"delay\")},distance:{type:[Number,String],default:St(\"distance\")},skidding:{type:[Number,String],default:St(\"skidding\")},triggers:{type:Array,default:St(\"triggers\")},showTriggers:{type:[Array,Function],default:St(\"showTriggers\")},hideTriggers:{type:[Array,Function],default:St(\"hideTriggers\")},popperTriggers:{type:Array,default:St(\"popperTriggers\")},popperShowTriggers:{type:[Array,Function],default:St(\"popperShowTriggers\")},popperHideTriggers:{type:[Array,Function],default:St(\"popperHideTriggers\")},container:{type:[String,Object,_t,Boolean],default:St(\"container\")},boundary:{type:[String,_t],default:St(\"boundary\")},strategy:{type:String,validator:t\u003d\u003e[\"absolute\",\"fixed\"].includes(t),default:St(\"strategy\")},autoHide:{type:Boolean,default:St(\"autoHide\")},handleResize:{type:Boolean,default:St(\"handleResize\")},instantMove:{type:Boolean,default:St(\"instantMove\")},eagerMount:{type:Boolean,default:St(\"eagerMount\")},popperClass:{type:[String,Array,Object],default:St(\"popperClass\")},computeTransformOrigin:{type:Boolean,default:St(\"computeTransformOrigin\")},autoMinSize:{type:Boolean,default:St(\"autoMinSize\")},autoSize:{type:[Boolean,String],default:St(\"autoSize\")},autoMaxSize:{type:Boolean,default:St(\"autoMaxSize\")},autoBoundaryMaxSize:{type:Boolean,default:St(\"autoBoundaryMaxSize\")},preventOverflow:{type:Boolean,default:St(\"preventOverflow\")},overflowPadding:{type:[Number,String],default:St(\"overflowPadding\")},arrowPadding:{type:[Number,String],default:St(\"arrowPadding\")},arrowOverflow:{type:Boolean,default:St(\"arrowOverflow\")},flip:{type:Boolean,default:St(\"flip\")},shift:{type:Boolean,default:St(\"shift\")},shiftCrossAxis:{type:Boolean,default:St(\"shiftCrossAxis\")}},provide(){return{[xt]:{parentPopper:this}}},inject:{[xt]:{default:null}},data(){return{isShown:!1,isMounted:!1,skipTransition:!1,classes:{showFrom:!1,showTo:!1,hideFrom:!1,hideTo:!0},result:{x:0,y:0,placement:\"\",strategy:this.strategy,arrow:{x:0,y:0,centerOffset:0},transformOrigin:null},shownChildren:new Set}},computed:{popperId(){return null!\u003dthis.ariaId?this.ariaId:this.randomId},shouldMountContent(){return this.eagerMount||this.isMounted},slotData(){return{popperId:this.popperId,isShown:this.isShown,shouldMountContent:this.shouldMountContent,skipTransition:this.skipTransition,autoHide:this.autoHide,show:this.show,hide:this.hide,handleResize:this.handleResize,onResize:this.onResize,classes:ut(ct({},this.classes),{popperClass:this.popperClass}),result:this.positioningDisabled?null:this.result}},parentPopper(){var t;return null\u003d\u003d(t\u003dthis[xt])?void 0:t.parentPopper}},watch:ct(ct({shown:\"$_autoShowHide\",disabled(t){t?this.dispose():this.init()},async container(){this.isShown\u0026\u0026(this.$_ensureTeleport(),await this.$_computePosition())}},[\"triggers\",\"positioningDisabled\"].reduce((t,e)\u003d\u003e(t[e]\u003d\"$_refreshListeners\",t),{})),[\"placement\",\"distance\",\"skidding\",\"boundary\",\"strategy\",\"overflowPadding\",\"arrowPadding\",\"preventOverflow\",\"shift\",\"shiftCrossAxis\",\"flip\"].reduce((t,e)\u003d\u003e(t[e]\u003d\"$_computePosition\",t),{})),created(){this.$_isDisposed\u003d!0,this.randomId\u003d\"popper_\"+[Math.random(),Date.now()].map(t\u003d\u003et.toString(36).substring(2,10)).join(\"_\"),this.autoMinSize\u0026\u0026console.warn(\u0027[floating-vue] `autoMinSize` option is deprecated. Use `autoSize\u003d\"min\"` instead.\u0027),this.autoMaxSize\u0026\u0026console.warn(\"[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead.\")},mounted(){this.init(),this.$_detachPopperNode()},activated(){this.$_autoShowHide()},deactivated(){this.hide()},beforeDestroy(){this.dispose()},methods:{show({event:t\u003dnull,skipDelay:e\u003d!1,force:n\u003d!1}\u003d{}){var i,o;(null\u003d\u003d(i\u003dthis.parentPopper)?void 0:i.lockedChild)\u0026\u0026this.parentPopper.lockedChild!\u003d\u003dthis||(this.$_pendingHide\u003d!1,!n\u0026\u0026this.disabled||((null\u003d\u003d(o\u003dthis.parentPopper)?void 0:o.lockedChild)\u003d\u003d\u003dthis\u0026\u0026(this.parentPopper.lockedChild\u003dnull),this.$_scheduleShow(t,e),this.$emit(\"show\"),this.$_showFrameLocked\u003d!0,requestAnimationFrame(()\u003d\u003e{this.$_showFrameLocked\u003d!1})),this.$emit(\"update:shown\",!0))},hide({event:t\u003dnull,skipDelay:e\u003d!1}\u003d{}){var n;this.$_hideInProgress||(this.shownChildren.size\u003e0?this.$_pendingHide\u003d!0:this.$_isAimingPopper()?this.parentPopper\u0026\u0026(this.parentPopper.lockedChild\u003dthis,clearTimeout(this.parentPopper.lockedChildTimer),this.parentPopper.lockedChildTimer\u003dsetTimeout(()\u003d\u003e{this.parentPopper.lockedChild\u003d\u003d\u003dthis\u0026\u0026(this.parentPopper.lockedChild.hide({skipDelay:e}),this.parentPopper.lockedChild\u003dnull)},1e3)):((null\u003d\u003d(n\u003dthis.parentPopper)?void 0:n.lockedChild)\u003d\u003d\u003dthis\u0026\u0026(this.parentPopper.lockedChild\u003dnull),this.$_pendingHide\u003d!1,this.$_scheduleHide(t,e),this.$emit(\"hide\"),this.$emit(\"update:shown\",!1)))},init(){this.$_isDisposed\u0026\u0026(this.$_isDisposed\u003d!1,this.isMounted\u003d!1,this.$_events\u003d[],this.$_preventShow\u003d!1,this.$_referenceNode\u003dthis.referenceNode(),this.$_targetNodes\u003dthis.targetNodes().filter(t\u003d\u003et.nodeType\u003d\u003d\u003dt.ELEMENT_NODE),this.$_popperNode\u003dthis.popperNode(),this.$_innerNode\u003dthis.$_popperNode.querySelector(\".v-popper__inner\"),this.$_arrowNode\u003dthis.$_popperNode.querySelector(\".v-popper__arrow-container\"),this.$_swapTargetAttrs(\"title\",\"data-original-title\"),this.$_detachPopperNode(),this.triggers.length\u0026\u0026this.$_addEventListeners(),this.shown\u0026\u0026this.show())},dispose(){this.$_isDisposed||(this.$_isDisposed\u003d!0,this.$_removeEventListeners(),this.hide({skipDelay:!0}),this.$_detachPopperNode(),this.isMounted\u003d!1,this.isShown\u003d!1,this.$_updateParentShownChildren(!1),this.$_swapTargetAttrs(\"data-original-title\",\"title\"),this.$emit(\"dispose\"))},async onResize(){this.isShown\u0026\u0026(await this.$_computePosition(),this.$emit(\"resize\"))},async $_computePosition(){var t;if(this.$_isDisposed||this.positioningDisabled)return;const e\u003d{strategy:this.strategy,middleware:[]};(this.distance||this.skidding)\u0026\u0026e.middleware.push($({mainAxis:this.distance,crossAxis:this.skidding}));const n\u003dthis.placement.startsWith(\"auto\");if(n?e.middleware.push(x({alignment:null!\u003d(t\u003dthis.placement.split(\"-\")[1])?t:\"\"})):e.placement\u003dthis.placement,this.preventOverflow\u0026\u0026(this.shift\u0026\u0026e.middleware.push(function(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"shift\",options:t,async fn(e){const{x:n,y:i,placement:o}\u003de,{mainAxis:s\u003d!0,crossAxis:l\u003d!1,limiter:c\u003d{fn:t\u003d\u003e{let{x:e,y:n}\u003dt;return{x:e,y:n}}},...u}\u003dt,d\u003d{x:n,y:i},p\u003dawait h(e,u),f\u003da(r(o)),v\u003dk(f);let g\u003dd[f],y\u003dd[v];if(s){const t\u003d\"y\"\u003d\u003d\u003df?\"bottom\":\"right\";g\u003dm(g+p[\"y\"\u003d\u003d\u003df?\"top\":\"left\"],g,g-p[t])}if(l){const t\u003d\"y\"\u003d\u003d\u003dv?\"bottom\":\"right\";y\u003dm(y+p[\"y\"\u003d\u003d\u003dv?\"top\":\"left\"],y,y-p[t])}const w\u003dc.fn({...e,[f]:g,[v]:y});return{...w,data:{x:w.x-n,y:w.y-i}}}}}({padding:this.overflowPadding,boundary:this.boundary,crossAxis:this.shiftCrossAxis})),!n\u0026\u0026this.flip\u0026\u0026e.middleware.push(C({padding:this.overflowPadding,boundary:this.boundary}))),e.middleware.push((t\u003d\u003e({name:\"arrow\",options:t,async fn(e){const{element:n,padding:i\u003d0}\u003dnull!\u003dt?t:{},{x:o,y:s,placement:c,rects:d,platform:h}\u003de;if(null\u003d\u003dn)return{};const p\u003du(i),f\u003d{x:o,y:s},v\u003da(r(c)),g\u003dl(v),y\u003dawait h.getDimensions({element:n}),w\u003d\"y\"\u003d\u003d\u003dv?\"top\":\"left\",b\u003d\"y\"\u003d\u003d\u003dv?\"bottom\":\"right\",_\u003dd.reference[g]+d.reference[v]-f[v]-d.floating[g],S\u003df[v]-d.reference[v],x\u003dawait h.getOffsetParent({element:n}),C\u003dx?\"y\"\u003d\u003d\u003dv?x.clientHeight||0:x.clientWidth||0:0,$\u003d_/2-S/2,k\u003dp[w],T\u003dC-y[g]-p[b],E\u003dC/2-y[g]/2+$,O\u003dm(k,E,T);return{data:{[v]:O,centerOffset:E-O}}}}))({element:this.$_arrowNode,padding:this.arrowPadding})),this.arrowOverflow\u0026\u0026e.middleware.push({name:\"arrowOverflow\",fn:({placement:t,rects:e,middlewareData:n})\u003d\u003e{let i;const{centerOffset:o}\u003dn.arrow;return i\u003dt.startsWith(\"top\")||t.startsWith(\"bottom\")?Math.abs(o)\u003ee.reference.width/2:Math.abs(o)\u003ee.reference.height/2,{data:{overflow:i}}}}),this.autoMinSize||this.autoSize){const t\u003dthis.autoSize?this.autoSize:this.autoMinSize?\"min\":null;e.middleware.push({name:\"autoSize\",fn:({rects:e,placement:n,middlewareData:i})\u003d\u003e{var o;if(null\u003d\u003d(o\u003di.autoSize)?void 0:o.skip)return{};let r,s;return n.startsWith(\"top\")||n.startsWith(\"bottom\")?r\u003de.reference.width:s\u003de.reference.height,this.$_innerNode.style[\"min\"\u003d\u003d\u003dt?\"minWidth\":\"max\"\u003d\u003d\u003dt?\"maxWidth\":\"width\"]\u003dnull!\u003dr?r+\"px\":null,this.$_innerNode.style[\"min\"\u003d\u003d\u003dt?\"minHeight\":\"max\"\u003d\u003d\u003dt?\"maxHeight\":\"height\"]\u003dnull!\u003ds?s+\"px\":null,{data:{skip:!0},reset:{rects:!0}}}})}(this.autoMaxSize||this.autoBoundaryMaxSize)\u0026\u0026(this.$_innerNode.style.maxWidth\u003dnull,this.$_innerNode.style.maxHeight\u003dnull,e.middleware.push(function(t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),{name:\"size\",options:t,async fn(e){var n;const{placement:i,rects:o,middlewareData:a}\u003de,{apply:l,...c}\u003dt;if(null!\u003d(n\u003da.size)\u0026\u0026n.skip)return{};const u\u003dawait h(e,c),d\u003dr(i),p\u003d\"end\"\u003d\u003d\u003ds(i);let m,v;\"top\"\u003d\u003d\u003dd||\"bottom\"\u003d\u003d\u003dd?(m\u003dd,v\u003dp?\"left\":\"right\"):(v\u003dd,m\u003dp?\"top\":\"bottom\");const g\u003df(u.left,0),y\u003df(u.right,0),w\u003df(u.top,0),b\u003df(u.bottom,0),_\u003d{height:o.floating.height-([\"left\",\"right\"].includes(i)?2*(0!\u003d\u003dw||0!\u003d\u003db?w+b:f(u.top,u.bottom)):u[m]),width:o.floating.width-([\"top\",\"bottom\"].includes(i)?2*(0!\u003d\u003dg||0!\u003d\u003dy?g+y:f(u.left,u.right)):u[v])};return null\u003d\u003dl||l({..._,...o}),{data:{skip:!0},reset:{rects:!0}}}}}({boundary:this.boundary,padding:this.overflowPadding,apply:({width:t,height:e})\u003d\u003e{this.$_innerNode.style.maxWidth\u003dnull!\u003dt?t+\"px\":null,this.$_innerNode.style.maxHeight\u003dnull!\u003de?e+\"px\":null}})));const i\u003dawait J(this.$_referenceNode,this.$_popperNode,e);Object.assign(this.result,{x:i.x,y:i.y,placement:i.placement,strategy:i.strategy,arrow:ct(ct({},i.middlewareData.arrow),i.middlewareData.arrowOverflow)})},$_scheduleShow(t\u003dnull,e\u003d!1){if(this.$_updateParentShownChildren(!0),this.$_hideInProgress\u003d!1,clearTimeout(this.$_scheduleTimer),bt\u0026\u0026this.instantMove\u0026\u0026bt.instantMove\u0026\u0026bt!\u003d\u003dthis.parentPopper)return bt.$_applyHide(!0),void this.$_applyShow(!0);e?this.$_applyShow():this.$_scheduleTimer\u003dsetTimeout(this.$_applyShow.bind(this),this.$_computeDelay(\"show\"))},$_scheduleHide(t\u003dnull,e\u003d!1){this.shownChildren.size\u003e0?this.$_pendingHide\u003d!0:(this.$_updateParentShownChildren(!1),this.$_hideInProgress\u003d!0,clearTimeout(this.$_scheduleTimer),this.isShown\u0026\u0026(bt\u003dthis),e?this.$_applyHide():this.$_scheduleTimer\u003dsetTimeout(this.$_applyHide.bind(this),this.$_computeDelay(\"hide\")))},$_computeDelay(t){const e\u003dthis.delay;return parseInt(e\u0026\u0026e[t]||e||0)},async $_applyShow(t\u003d!1){clearTimeout(this.$_disposeTimer),clearTimeout(this.$_scheduleTimer),this.skipTransition\u003dt,this.isShown||(this.$_ensureTeleport(),await yt(),await this.$_computePosition(),await this.$_applyShowEffect(),this.positioningDisabled||this.$_registerEventListeners([...Y(this.$_referenceNode),...Y(this.$_popperNode)],\"scroll\",()\u003d\u003e{this.$_computePosition()}))},async $_applyShowEffect(){if(this.$_hideInProgress)return;if(this.computeTransformOrigin){const t\u003dthis.$_referenceNode.getBoundingClientRect(),e\u003dthis.$_popperNode.querySelector(\".v-popper__wrapper\"),n\u003de.parentNode.getBoundingClientRect(),i\u003dt.x+t.width/2-(n.left+e.offsetLeft),o\u003dt.y+t.height/2-(n.top+e.offsetTop);this.result.transformOrigin\u003d`${i}px ${o}px`}this.isShown\u003d!0,this.$_applyAttrsToTarget({\"aria-describedby\":this.popperId,\"data-popper-shown\":\"\"});const t\u003dthis.showGroup;if(t){let e;for(let n\u003d0;n\u003cwt.length;n++)e\u003dwt[n],e.showGroup!\u003d\u003dt\u0026\u0026(e.hide(),e.$emit(\"close-group\"))}wt.push(this),this.$emit(\"apply-show\"),this.classes.showFrom\u003d!0,this.classes.showTo\u003d!1,this.classes.hideFrom\u003d!1,this.classes.hideTo\u003d!1,await yt(),this.classes.showFrom\u003d!1,this.classes.showTo\u003d!0},async $_applyHide(t\u003d!1){if(this.shownChildren.size\u003e0)return this.$_pendingHide\u003d!0,void(this.$_hideInProgress\u003d!1);if(clearTimeout(this.$_scheduleTimer),!this.isShown)return;this.skipTransition\u003dt,function(t,e){const n\u003dt.indexOf(e);-1!\u003d\u003dn\u0026\u0026t.splice(n,1)}(wt,this),bt\u003d\u003d\u003dthis\u0026\u0026(bt\u003dnull),this.isShown\u003d!1,this.$_applyAttrsToTarget({\"aria-describedby\":void 0,\"data-popper-shown\":void 0}),clearTimeout(this.$_disposeTimer);const e\u003dht(this.theme,\"disposeTimeout\");null!\u003d\u003de\u0026\u0026(this.$_disposeTimer\u003dsetTimeout(()\u003d\u003e{this.$_popperNode\u0026\u0026(this.$_detachPopperNode(),this.isMounted\u003d!1)},e)),this.$_removeEventListeners(\"scroll\"),this.$emit(\"apply-hide\"),this.classes.showFrom\u003d!1,this.classes.showTo\u003d!1,this.classes.hideFrom\u003d!0,this.classes.hideTo\u003d!1,await yt(),this.classes.hideFrom\u003d!1,this.classes.hideTo\u003d!0},$_autoShowHide(){this.shown?this.show():this.hide()},$_ensureTeleport(){if(this.$_isDisposed)return;let t\u003dthis.container;if(\"string\"\u003d\u003dtypeof t?t\u003dwindow.document.querySelector(t):!1\u003d\u003d\u003dt\u0026\u0026(t\u003dthis.$_targetNodes[0].parentNode),!t)throw new Error(\"No container for popover: \"+this.container);t.appendChild(this.$_popperNode),this.isMounted\u003d!0},$_addEventListeners(){const t\u003dt\u003d\u003e{this.isShown\u0026\u0026!this.$_hideInProgress||(t.usedByTooltip\u003d!0,!this.$_preventShow\u0026\u0026this.show({event:t}))};this.$_registerTriggerListeners(this.$_targetNodes,vt,this.triggers,this.showTriggers,t),this.$_registerTriggerListeners([this.$_popperNode],vt,this.popperTriggers,this.popperShowTriggers,t);const e\u003dt\u003d\u003e{t.usedByTooltip||this.hide({event:t})};this.$_registerTriggerListeners(this.$_targetNodes,gt,this.triggers,this.hideTriggers,e),this.$_registerTriggerListeners([this.$_popperNode],gt,this.popperTriggers,this.popperHideTriggers,e)},$_registerEventListeners(t,e,n){this.$_events.push({targetNodes:t,eventType:e,handler:n}),t.forEach(t\u003d\u003et.addEventListener(e,n,pt?{passive:!0}:void 0))},$_registerTriggerListeners(t,e,n,i,o){let r\u003dn;null!\u003di\u0026\u0026(r\u003d\"function\"\u003d\u003dtypeof i?i(r):i),r.forEach(n\u003d\u003e{const i\u003de[n];i\u0026\u0026this.$_registerEventListeners(t,i,o)})},$_removeEventListeners(t){const e\u003d[];this.$_events.forEach(n\u003d\u003e{const{targetNodes:i,eventType:o,handler:r}\u003dn;t\u0026\u0026t!\u003d\u003do?e.push(n):i.forEach(t\u003d\u003et.removeEventListener(o,r))}),this.$_events\u003de},$_refreshListeners(){this.$_isDisposed||(this.$_removeEventListeners(),this.$_addEventListeners())},$_handleGlobalClose(t,e\u003d!1){this.$_showFrameLocked||(this.hide({event:t}),t.closePopover?this.$emit(\"close-directive\"):this.$emit(\"auto-hide\"),e\u0026\u0026(this.$_preventShow\u003d!0,setTimeout(()\u003d\u003e{this.$_preventShow\u003d!1},300)))},$_detachPopperNode(){this.$_popperNode.parentNode\u0026\u0026this.$_popperNode.parentNode.removeChild(this.$_popperNode)},$_swapTargetAttrs(t,e){for(const n of this.$_targetNodes){const i\u003dn.getAttribute(t);i\u0026\u0026(n.removeAttribute(t),n.setAttribute(e,i))}},$_applyAttrsToTarget(t){for(const e of this.$_targetNodes)for(const n in t){const i\u003dt[n];null\u003d\u003di?e.removeAttribute(n):e.setAttribute(n,i)}},$_updateParentShownChildren(t){let e\u003dthis.parentPopper;for(;e;)t?e.shownChildren.add(this.randomId):(e.shownChildren.delete(this.randomId),e.$_pendingHide\u0026\u0026e.hide()),e\u003de.parentPopper},$_isAimingPopper(){const t\u003dthis.$el.getBoundingClientRect();if(Pt\u003e\u003dt.left\u0026\u0026Pt\u003c\u003dt.right\u0026\u0026Lt\u003e\u003dt.top\u0026\u0026Lt\u003c\u003dt.bottom){const t\u003dthis.$_popperNode.getBoundingClientRect(),e\u003dPt-Ot,n\u003dLt-Bt,i\u003dt.left+t.width/2-Ot+(t.top+t.height/2)-Bt+t.width+t.height,o\u003dOt+e*i,r\u003dBt+n*i;return Nt(Ot,Bt,o,r,t.left,t.top,t.left,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.top,t.right,t.top)||Nt(Ot,Bt,o,r,t.right,t.top,t.right,t.bottom)||Nt(Ot,Bt,o,r,t.left,t.bottom,t.right,t.bottom)}return!1}},render(){return this.$scopedSlots.default(this.slotData)[0]}});function $t(t){for(let e\u003d0;e\u003cwt.length;e++){const n\u003dwt[e];try{const e\u003dn.popperNode();n.$_mouseDownContains\u003de.contains(t.target)}catch(t){}}}function kt(t,e\u003d!1){const n\u003d{};for(let i\u003dwt.length-1;i\u003e\u003d0;i--){const o\u003dwt[i];try{const i\u003do.$_containsGlobalTarget\u003dTt(o,t);o.$_pendingHide\u003d!1,requestAnimationFrame(()\u003d\u003e{if(o.$_pendingHide\u003d!1,!n[o.randomId]\u0026\u0026Et(o,i,t)){if(o.$_handleGlobalClose(t,e),!t.closeAllPopover\u0026\u0026t.closePopover\u0026\u0026i){let t\u003do.parentPopper;for(;t;)n[t.randomId]\u003d!0,t\u003dt.parentPopper;return}let r\u003do.parentPopper;for(;r\u0026\u0026Et(r,r.$_containsGlobalTarget,t);)r.$_handleGlobalClose(t,e),r\u003dr.parentPopper}})}catch(t){}}}function Tt(t,e){const n\u003dt.popperNode();return t.$_mouseDownContains||n.contains(e.target)}function Et(t,e,n){return n.closeAllPopover||n.closePopover\u0026\u0026e||t.autoHide\u0026\u0026!e}\"undefined\"!\u003dtypeof document\u0026\u0026\"undefined\"!\u003dtypeof window\u0026\u0026(ft?(document.addEventListener(\"touchstart\",$t,!pt||{passive:!0,capture:!0}),document.addEventListener(\"touchend\",(function(t){kt(t,!0)}),!pt||{passive:!0,capture:!0})):(window.addEventListener(\"mousedown\",$t,!0),window.addEventListener(\"click\",(function(t){kt(t)}),!0)),window.addEventListener(\"resize\",(function(t){for(let e\u003d0;e\u003cwt.length;e++){wt[e].$_computePosition(t)}})));let Ot\u003d0,Bt\u003d0,Pt\u003d0,Lt\u003d0;function Nt(t,e,n,i,o,r,s,a){const l\u003d((s-o)*(e-r)-(a-r)*(t-o))/((a-r)*(n-t)-(s-o)*(i-e)),c\u003d((n-t)*(e-r)-(i-e)*(t-o))/((a-r)*(n-t)-(s-o)*(i-e));return l\u003e\u003d0\u0026\u0026l\u003c\u003d1\u0026\u0026c\u003e\u003d0\u0026\u0026c\u003c\u003d1}var At;function zt(){zt.init||(zt.init\u003d!0,At\u003d-1!\u003d\u003dfunction(){var t\u003dwindow.navigator.userAgent,e\u003dt.indexOf(\"MSIE \");if(e\u003e0)return parseInt(t.substring(e+5,t.indexOf(\".\",e)),10);if(t.indexOf(\"Trident/\")\u003e0){var n\u003dt.indexOf(\"rv:\");return parseInt(t.substring(n+3,t.indexOf(\".\",n)),10)}var i\u003dt.indexOf(\"Edge/\");return i\u003e0?parseInt(t.substring(i+5,t.indexOf(\".\",i)),10):-1}())}function Mt(t,e,n,i,o,r,s,a,l,c){\"boolean\"!\u003dtypeof s\u0026\u0026(l\u003da,a\u003ds,s\u003d!1);var u,d\u003d\"function\"\u003d\u003dtypeof n?n.options:n;if(t\u0026\u0026t.render\u0026\u0026(d.render\u003dt.render,d.staticRenderFns\u003dt.staticRenderFns,d._compiled\u003d!0,o\u0026\u0026(d.functional\u003d!0)),i\u0026\u0026(d._scopeId\u003di),r?(u\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),e\u0026\u0026e.call(this,l(t)),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(r)},d._ssrRegister\u003du):e\u0026\u0026(u\u003ds?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h\u003dd.render;d.render\u003dfunction(t,e){return u.call(e),h(t,e)}}else{var p\u003dd.beforeCreate;d.beforeCreate\u003dp?[].concat(p,u):[u]}return n}\"undefined\"!\u003dtypeof window\u0026\u0026window.addEventListener(\"mousemove\",t\u003d\u003e{Ot\u003dPt,Bt\u003dLt,Pt\u003dt.clientX,Lt\u003dt.clientY},pt?{passive:!0}:void 0);var Ht\u003d{name:\"ResizeObserver\",props:{emitOnMount:{type:Boolean,default:!1},ignoreWidth:{type:Boolean,default:!1},ignoreHeight:{type:Boolean,default:!1}},mounted:function(){var t\u003dthis;zt(),this.$nextTick((function(){t._w\u003dt.$el.offsetWidth,t._h\u003dt.$el.offsetHeight,t.emitOnMount\u0026\u0026t.emitSize()}));var e\u003ddocument.createElement(\"object\");this._resizeObject\u003de,e.setAttribute(\"aria-hidden\",\"true\"),e.setAttribute(\"tabindex\",-1),e.onload\u003dthis.addResizeHandlers,e.type\u003d\"text/html\",At\u0026\u0026this.$el.appendChild(e),e.data\u003d\"about:blank\",At||this.$el.appendChild(e)},beforeDestroy:function(){this.removeResizeHandlers()},methods:{compareAndNotify:function(){(!this.ignoreWidth\u0026\u0026this._w!\u003d\u003dthis.$el.offsetWidth||!this.ignoreHeight\u0026\u0026this._h!\u003d\u003dthis.$el.offsetHeight)\u0026\u0026(this._w\u003dthis.$el.offsetWidth,this._h\u003dthis.$el.offsetHeight,this.emitSize())},emitSize:function(){this.$emit(\"notify\",{width:this._w,height:this._h})},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener(\"resize\",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject\u0026\u0026this._resizeObject.onload\u0026\u0026(!At\u0026\u0026this._resizeObject.contentDocument\u0026\u0026this._resizeObject.contentDocument.defaultView.removeEventListener(\"resize\",this.compareAndNotify),this.$el.removeChild(this._resizeObject),this._resizeObject.onload\u003dnull,this._resizeObject\u003dnull)}}},Dt\u003dfunction(){var t\u003dthis.$createElement;return(this._self._c||t)(\"div\",{staticClass:\"resize-observer\",attrs:{tabindex:\"-1\"}})};Dt._withStripped\u003d!0;var Rt\u003dMt({render:Dt,staticRenderFns:[]},void 0,Ht,\"data-v-8859cc6c\",!1,void 0,!1,void 0,void 0,void 0);var jt\u003d{version:\"1.0.1\",install:function(t){t.component(\"resize-observer\",Rt),t.component(\"ResizeObserver\",Rt)}},It\u003dnull;\"undefined\"!\u003dtypeof window?It\u003dwindow.Vue:void 0!\u003d\u003di.g\u0026\u0026(It\u003di.g.Vue),It\u0026\u0026It.use(jt);var qt\u003d{computed:{themeClass(){return function(t){const e\u003d[t];let n\u003ddt.themes[t]||{};do{n.$extend\u0026\u0026!n.$resetCss?(e.push(n.$extend),n\u003ddt.themes[n.$extend]||{}):n\u003dnull}while(n);return e.map(t\u003d\u003e\"v-popper--theme-\"+t)}(this.theme)}}},Wt\u003d{name:\"VPopperContent\",components:{ResizeObserver:Rt},mixins:[qt],props:{popperId:String,theme:String,shown:Boolean,mounted:Boolean,skipTransition:Boolean,autoHide:Boolean,handleResize:Boolean,classes:Object,result:Object},methods:{toPx:t\u003d\u003enull\u003d\u003dt||isNaN(t)?null:t+\"px\"}};function Ft(t,e,n,i,o,r,s,a){var l,c\u003d\"function\"\u003d\u003dtypeof t?t.options:t;if(e\u0026\u0026(c.render\u003de,c.staticRenderFns\u003dn,c._compiled\u003d!0),i\u0026\u0026(c.functional\u003d!0),r\u0026\u0026(c._scopeId\u003d\"data-v-\"+r),s?(l\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),o\u0026\u0026o.call(this,t),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(s)},c._ssrRegister\u003dl):o\u0026\u0026(l\u003da?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles\u003dl;var u\u003dc.render;c.render\u003dfunction(t,e){return l.call(e),u(t,e)}}else{var d\u003dc.beforeCreate;c.beforeCreate\u003dd?[].concat(d,l):[l]}return{exports:t,options:c}}const Vt\u003d{};var Ut\u003dFt(Wt,(function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{ref:\"popover\",staticClass:\"v-popper__popper\",class:[t.themeClass,t.classes.popperClass,{\"v-popper__popper--shown\":t.shown,\"v-popper__popper--hidden\":!t.shown,\"v-popper__popper--show-from\":t.classes.showFrom,\"v-popper__popper--show-to\":t.classes.showTo,\"v-popper__popper--hide-from\":t.classes.hideFrom,\"v-popper__popper--hide-to\":t.classes.hideTo,\"v-popper__popper--skip-transition\":t.skipTransition,\"v-popper__popper--arrow-overflow\":t.result\u0026\u0026t.result.arrow.overflow,\"v-popper__popper--no-positioning\":!t.result}],style:t.result?{position:t.result.strategy,transform:\"translate3d(\"+Math.round(t.result.x)+\"px,\"+Math.round(t.result.y)+\"px,0)\"}:void 0,attrs:{id:t.popperId,\"aria-hidden\":t.shown?\"false\":\"true\",tabindex:t.autoHide?0:void 0,\"data-popper-placement\":t.result?t.result.placement:void 0},on:{keyup:function(e){if(!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"]))return null;t.autoHide\u0026\u0026t.$emit(\"hide\")}}},[n(\"div\",{staticClass:\"v-popper__backdrop\",on:{click:function(e){t.autoHide\u0026\u0026t.$emit(\"hide\")}}}),n(\"div\",{staticClass:\"v-popper__wrapper\",style:t.result?{transformOrigin:t.result.transformOrigin}:void 0},[n(\"div\",{ref:\"inner\",staticClass:\"v-popper__inner\"},[t.mounted?[n(\"div\",[t._t(\"default\")],2),t.handleResize?n(\"ResizeObserver\",{on:{notify:function(e){return t.$emit(\"resize\",e)}}}):t._e()]:t._e()],2),n(\"div\",{ref:\"arrow\",staticClass:\"v-popper__arrow-container\",style:t.result?{left:t.toPx(t.result.arrow.x),top:t.toPx(t.result.arrow.y)}:void 0},[n(\"div\",{staticClass:\"v-popper__arrow-outer\"}),n(\"div\",{staticClass:\"v-popper__arrow-inner\"})])])])}),[],!1,Qt,null,null,null);function Qt(t){for(let t in Vt)this[t]\u003dVt[t]}var Xt\u003dfunction(){return Ut.exports}(),Yt\u003d{methods:{show(...t){return this.$refs.popper.show(...t)},hide(...t){return this.$refs.popper.hide(...t)},dispose(...t){return this.$refs.popper.dispose(...t)},onResize(...t){return this.$refs.popper.onResize(...t)}}},Kt\u003d{name:\"VPopperWrapper\",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt,qt],inheritAttrs:!1,props:{theme:{type:String,default(){return this.$options.vPopperTheme}}},methods:{getTargetNodes(){return Array.from(this.$refs.reference.children).filter(t\u003d\u003et!\u003d\u003dthis.$refs.popperContent.$el)}}};const Gt\u003d{};var Zt\u003dFt(Kt,(function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"Popper\",t._g(t._b({ref:\"popper\",attrs:{theme:t.theme,\"target-nodes\":t.getTargetNodes,\"reference-node\":function(){return t.$refs.reference},\"popper-node\":function(){return t.$refs.popperContent.$el}},scopedSlots:t._u([{key:\"default\",fn:function(e){var i\u003de.popperId,o\u003de.isShown,r\u003de.shouldMountContent,s\u003de.skipTransition,a\u003de.autoHide,l\u003de.show,c\u003de.hide,u\u003de.handleResize,d\u003de.onResize,h\u003de.classes,p\u003de.result;return[n(\"div\",{ref:\"reference\",staticClass:\"v-popper\",class:[t.themeClass,{\"v-popper--shown\":o}]},[t._t(\"default\",null,{shown:o,show:l,hide:c}),n(\"PopperContent\",{ref:\"popperContent\",attrs:{\"popper-id\":i,theme:t.theme,shown:o,mounted:r,\"skip-transition\":s,\"auto-hide\":a,\"handle-resize\":u,classes:h,result:p},on:{hide:c,resize:d}},[t._t(\"popper\",null,{shown:o,hide:c})],2)],2)]}}],null,!0)},\"Popper\",t.$attrs,!1),t.$listeners))}),[],!1,Jt,null,null,null);function Jt(t){for(let t in Gt)this[t]\u003dGt[t]}var te\u003dfunction(){return Zt.exports}(),ee\u003dut(ct({},te),{name:\"VDropdown\",vPopperTheme:\"dropdown\"});const ne\u003d{};var ie\u003dFt(ee,void 0,void 0,!1,oe,null,null,null);function oe(t){for(let t in ne)this[t]\u003dne[t]}var re\u003dfunction(){return ie.exports}(),se\u003dut(ct({},te),{name:\"VMenu\",vPopperTheme:\"menu\"});const ae\u003d{};var le\u003dFt(se,void 0,void 0,!1,ce,null,null,null);function ce(t){for(let t in ae)this[t]\u003dae[t]}var ue\u003dfunction(){return le.exports}(),de\u003dut(ct({},te),{name:\"VTooltip\",vPopperTheme:\"tooltip\"});const he\u003d{};var pe\u003dFt(de,void 0,void 0,!1,fe,null,null,null);function fe(t){for(let t in he)this[t]\u003dhe[t]}var me\u003dfunction(){return pe.exports}(),ve\u003d{name:\"VTooltipDirective\",components:{Popper:Ct(),PopperContent:Xt},mixins:[Yt],inheritAttrs:!1,props:{theme:{type:String,default:\"tooltip\"},html:{type:Boolean,default(){return ht(this.theme,\"html\")}},content:{type:[String,Number,Function],default:null},loadingContent:{type:String,default(){return ht(this.theme,\"loadingContent\")}}},data:()\u003d\u003e({asyncContent:null}),computed:{isContentAsync(){return\"function\"\u003d\u003dtypeof this.content},loading(){return this.isContentAsync\u0026\u0026null\u003d\u003dthis.asyncContent},finalContent(){return this.isContentAsync?this.loading?this.loadingContent:this.asyncContent:this.content}},watch:{content:{handler(){this.fetchContent(!0)},immediate:!0},async finalContent(t){await this.$nextTick(),this.$refs.popper.onResize()}},created(){this.$_fetchId\u003d0},methods:{fetchContent(t){if(\"function\"\u003d\u003dtypeof this.content\u0026\u0026this.$_isShown\u0026\u0026(t||!this.$_loading\u0026\u0026null\u003d\u003dthis.asyncContent)){this.asyncContent\u003dnull,this.$_loading\u003d!0;const t\u003d++this.$_fetchId,e\u003dthis.content(this);e.then?e.then(e\u003d\u003ethis.onResult(t,e)):this.onResult(t,e)}},onResult(t,e){t\u003d\u003d\u003dthis.$_fetchId\u0026\u0026(this.$_loading\u003d!1,this.asyncContent\u003de)},onShow(){this.$_isShown\u003d!0,this.fetchContent()},onHide(){this.$_isShown\u003d!1}}};const ge\u003d{};var ye\u003dFt(ve,(function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"Popper\",t._g(t._b({ref:\"popper\",attrs:{theme:t.theme,\"popper-node\":function(){return t.$refs.popperContent.$el}},on:{\"apply-show\":t.onShow,\"apply-hide\":t.onHide},scopedSlots:t._u([{key:\"default\",fn:function(e){var i\u003de.popperId,o\u003de.isShown,r\u003de.shouldMountContent,s\u003de.skipTransition,a\u003de.autoHide,l\u003de.hide,c\u003de.handleResize,u\u003de.onResize,d\u003de.classes,h\u003de.result;return[n(\"PopperContent\",{ref:\"popperContent\",class:{\"v-popper--tooltip-loading\":t.loading},attrs:{\"popper-id\":i,theme:t.theme,shown:o,mounted:r,\"skip-transition\":s,\"auto-hide\":a,\"handle-resize\":c,classes:d,result:h},on:{hide:l,resize:u}},[t.html?n(\"div\",{domProps:{innerHTML:t._s(t.finalContent)}}):n(\"div\",{domProps:{textContent:t._s(t.finalContent)}})])]}}])},\"Popper\",t.$attrs,!1),t.$listeners))}),[],!1,we,null,null,null);function we(t){for(let t in ge)this[t]\u003dge[t]}var be\u003dfunction(){return ye.exports}();function _e(t,e,n){let i;const o\u003dtypeof e;return i\u003d\"string\"\u003d\u003d\u003do?{content:e}:e\u0026\u0026\"object\"\u003d\u003d\u003do?e:{content:!1},i.placement\u003dfunction(t,e){let n\u003dt.placement;if(!n\u0026\u0026e)for(const t of mt)e[t]\u0026\u0026(n\u003dt);return n||(n\u003dht(t.theme||\"tooltip\",\"placement\")),n}(i,n),i.targetNodes\u003d()\u003d\u003e[t],i.referenceNode\u003d()\u003d\u003et,i}function Se(t,e,n){const i\u003d_e(t,e,n),o\u003dt.$_popper\u003dnew(et())({mixins:[Yt],data:()\u003d\u003e({options:i}),render(t){const e\u003dthis.options,{theme:n,html:i,content:o,loadingContent:r}\u003de,s\u003d((t,e)\u003d\u003e{var n\u003d{};for(var i in t)st.call(t,i)\u0026\u0026e.indexOf(i)\u003c0\u0026\u0026(n[i]\u003dt[i]);if(null!\u003dt\u0026\u0026rt)for(var i of rt(t))e.indexOf(i)\u003c0\u0026\u0026at.call(t,i)\u0026\u0026(n[i]\u003dt[i]);return n})(e,[\"theme\",\"html\",\"content\",\"loadingContent\"]);return t(be,{props:{theme:n,html:i,content:o,loadingContent:r},attrs:s,ref:\"popper\"})},devtools:{hide:!0}}),r\u003ddocument.createElement(\"div\");return document.body.appendChild(r),o.$mount(r),t.classList\u0026\u0026t.classList.add(\"v-popper--has-tooltip\"),o}function xe(t){t.$_popper\u0026\u0026(t.$_popper.$destroy(),delete t.$_popper,delete t.$_popperOldShown),t.classList\u0026\u0026t.classList.remove(\"v-popper--has-tooltip\")}function Ce(t,{value:e,oldValue:n,modifiers:i}){const o\u003d_e(t,e,i);if(!o.content||ht(o.theme||\"tooltip\",\"disabled\"))xe(t);else{let n;t.$_popper?(n\u003dt.$_popper,n.options\u003do):n\u003dSe(t,e,i),void 0!\u003d\u003de.shown\u0026\u0026e.shown!\u003d\u003dt.$_popperOldShown\u0026\u0026(t.$_popperOldShown\u003de.shown,e.shown?n.show():n.hide())}}var $e\u003d{bind:Ce,update:Ce,unbind(t){xe(t)}};function ke(t){t.addEventListener(\"click\",Ee),t.addEventListener(\"touchstart\",Oe,!!pt\u0026\u0026{passive:!0})}function Te(t){t.removeEventListener(\"click\",Ee),t.removeEventListener(\"touchstart\",Oe),t.removeEventListener(\"touchend\",Be),t.removeEventListener(\"touchcancel\",Pe)}function Ee(t){const e\u003dt.currentTarget;t.closePopover\u003d!e.$_vclosepopover_touch,t.closeAllPopover\u003de.$_closePopoverModifiers\u0026\u0026!!e.$_closePopoverModifiers.all}function Oe(t){if(1\u003d\u003d\u003dt.changedTouches.length){const e\u003dt.currentTarget;e.$_vclosepopover_touch\u003d!0;const n\u003dt.changedTouches[0];e.$_vclosepopover_touchPoint\u003dn,e.addEventListener(\"touchend\",Be),e.addEventListener(\"touchcancel\",Pe)}}function Be(t){const e\u003dt.currentTarget;if(e.$_vclosepopover_touch\u003d!1,1\u003d\u003d\u003dt.changedTouches.length){const n\u003dt.changedTouches[0],i\u003de.$_vclosepopover_touchPoint;t.closePopover\u003dMath.abs(n.screenY-i.screenY)\u003c20\u0026\u0026Math.abs(n.screenX-i.screenX)\u003c20,t.closeAllPopover\u003de.$_closePopoverModifiers\u0026\u0026!!e.$_closePopoverModifiers.all}}function Pe(t){t.currentTarget.$_vclosepopover_touch\u003d!1}var Le\u003d{bind(t,{value:e,modifiers:n}){t.$_closePopoverModifiers\u003dn,(void 0\u003d\u003d\u003de||e)\u0026\u0026ke(t)},update(t,{value:e,oldValue:n,modifiers:i}){t.$_closePopoverModifiers\u003di,e!\u003d\u003dn\u0026\u0026(void 0\u003d\u003d\u003de||e?ke(t):Te(t))},unbind(t){Te(t)}};const Ne\u003dre,Ae\u003dme;const ze\u003d{version:\"1.0.0-beta.14\",install:function(t,e\u003d{}){t.$_vTooltipInstalled||(t.$_vTooltipInstalled\u003d!0,function t(e,n){for(const i in n)Object.prototype.hasOwnProperty.call(n,i)\u0026\u0026(\"object\"\u003d\u003dtypeof n[i]\u0026\u0026e[i]?t(e[i],n[i]):e[i]\u003dn[i])}(dt,e),t.directive(\"tooltip\",$e),t.directive(\"close-popper\",Le),t.component(\"v-tooltip\",me),t.component(\"VTooltip\",me),t.component(\"v-dropdown\",re),t.component(\"VDropdown\",re),t.component(\"v-menu\",ue),t.component(\"VMenu\",ue))},options:dt};let Me\u003dnull;\"undefined\"!\u003dtypeof window?Me\u003dwindow.Vue:void 0!\u003d\u003di.g\u0026\u0026(Me\u003di.g.Vue),Me\u0026\u0026Me.use(ze);var He\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"alert box-container\",t.containerStyle(),t.addClass,{\"d-flex\":t.seamlessHeaderBool()}],style:t.customStyle()},[t.seamlessHeaderBool()?n(\"div\",{staticClass:\"d-flex\"},[t.iconBool()?n(\"div\",{class:[\"icon-wrapper\",t.iconStyle()],style:t.customIconColorStyle()},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas\",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"vertical-divider\",class:t.getBootstrapAlertStyle(),attrs:{\"aria-hidden\":\"true\"}})]):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"header-and-body\"},[t.headerBool()?n(\"div\",{class:[\"box-header-wrapper\",{\"alert-dismissible\":t.dismissible}]},[t.iconBool()\u0026\u0026!t.seamlessHeaderBool()?n(\"div\",{class:[\"icon-wrapper\",t.iconStyle()],style:t.customIconColorStyle()},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas\",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"box-header\"},[t._t(\"header\")],2),t._v(\" \"),t.dismissible?n(\"button\",{staticClass:\"btn-close close-with-heading\",attrs:{type:\"button\",\"data-bs-dismiss\":\"alert\",\"aria-label\":\"Close\"}}):t._e()]):t._e(),t._v(\" \"),n(\"div\",{class:[\"box-body-wrapper\",{\"alert-dismissible\":t.dismissible\u0026\u0026!t.headerBool(),\"box-body-wrapper-with-heading\":t.headerBool()}]},[t.iconBool()\u0026\u0026!t.headerBool()?n(\"div\",{class:[\"icon-wrapper\",t.iconStyle()],style:t.customIconColorStyle()},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas\",t.getFontAwesomeIconStyle()]})]}))],2):t._e(),t._v(\" \"),t.seamlessNoHeaderBool()?n(\"div\",{staticClass:\"vertical-divider\",class:t.getBootstrapAlertStyle(),attrs:{\"aria-hidden\":\"true\"}}):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"contents\",style:t.customColorStyle()},[t._t(\"default\")],2),t._v(\" \"),t.dismissible\u0026\u0026!t.headerBool()?n(\"button\",{staticClass:\"btn-close\",attrs:{type:\"button\",\"data-bs-dismiss\":\"alert\",\"aria-label\":\"Close\"}}):t._e()])])])};He._withStripped\u003d!0;var De\u003dfunction(t){return\"string\"\u003d\u003dtypeof t?\"\"\u003d\u003d\u003dt||\"true\"\u003d\u003d\u003dt||\"false\"!\u003d\u003dt\u0026\u0026\"null\"!\u003d\u003dt\u0026\u0026\"undefined\"!\u003d\u003dt\u0026\u0026t:t};function Re(t){return\"string\"\u003d\u003dtypeof t?\"\"\u003d\u003d\u003dt||\"true\"\u003d\u003d\u003dt||\"false\"!\u003d\u003dt\u0026\u0026\"null\"!\u003d\u003dt\u0026\u0026\"undefined\"!\u003d\u003dt\u0026\u0026t:t}function je(t){return\"number\"\u003d\u003dtypeof t?t:null\u003d\u003dt||isNaN(Number(t))?null:Number(t)}function Ie(t){var e\u003dt.split(\"#\"),n\u003d\"\";return e.length\u003e1\u0026\u0026(n\u003de[1]),n}function qe(t,e,n,i,o,r,s,a){var l,c\u003d\"function\"\u003d\u003dtypeof t?t.options:t;if(e\u0026\u0026(c.render\u003de,c.staticRenderFns\u003dn,c._compiled\u003d!0),i\u0026\u0026(c.functional\u003d!0),r\u0026\u0026(c._scopeId\u003d\"data-v-\"+r),s?(l\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),o\u0026\u0026o.call(this,t),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(s)},c._ssrRegister\u003dl):o\u0026\u0026(l\u003da?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles\u003dl;var u\u003dc.render;c.render\u003dfunction(t,e){return l.call(e),u(t,e)}}else{var d\u003dc.beforeCreate;c.beforeCreate\u003dd?[].concat(d,l):[l]}return{exports:t,options:c}}const We\u003dqe({props:{dismissible:{type:Boolean,default:!1},backgroundColor:{type:String,default:null},borderColor:{type:String,default:null},borderLeftColor:{type:String,default:null},color:{type:String,default:null},icon:{type:String,default:null},iconSize:{type:String,default:null},iconColor:{type:String,default:null},type:{type:String,default:\"\"},addClass:{type:String,default:\"\"},light:{type:Boolean,default:!1},seamless:{type:Boolean,default:!1},noIcon:{type:Boolean,default:!1},noBackground:{type:Boolean,default:!1},noBorder:{type:Boolean,default:!1},theme:{type:String,default:\"\"}},computed:{bootStrapStyle:function(){return function(t,e){var n,i,o\u003d[\"warning\",\"info\",\"definition\",\"success\",\"danger\",\"tip\",\"important\",\"wrong\"].includes(t)?t:\"\",r\u003d[\"primary\",\"secondary\",\"success\",\"danger\",\"warning\",\"info\",\"light\",\"dark\"].includes(e)?e:\"\";if(r)n\u003dr;else switch(o){case\"warning\":n\u003d\"warning\";break;case\"info\":n\u003d\"info\";break;case\"definition\":n\u003d\"primary\";break;case\"success\":case\"tip\":n\u003d\"success\";break;case\"important\":case\"wrong\":n\u003d\"danger\";break;default:n\u003d\"default\"}switch(o){case\"wrong\":i\u003d\"fa-times\";break;case\"warning\":i\u003d\"fa-exclamation\";break;case\"info\":i\u003d\"fa-info\";break;case\"success\":i\u003d\"fa-check\";break;case\"important\":i\u003d\"fa-flag\";break;case\"tip\":i\u003d\"fa-lightbulb\";break;case\"definition\":i\u003d\"fa-atlas\";break;default:i\u003d\"\"}return{style:n,icon:i}}(this.type,this.theme)}},methods:{isSeamless:function(){return!this.light\u0026\u0026this.seamless},seamlessNoHeaderBool:function(){return this.isSeamless()\u0026\u0026!this.headerBool()},seamlessHeaderBool:function(){return this.isSeamless()\u0026\u0026this.headerBool()},headerBool:function(){return!!this.$scopedSlots.header},iconBool:function(){var t\u003d!!this.$scopedSlots.icon;return!this.noIcon\u0026\u0026this.type||t},containerStyle:function(){var t;return t\u003dthis.light?\"\".concat(this.getBootstrapBorderStyle(),\" alert-border-left\"):this.seamless?\"seamless\":this.getBootstrapAlertStyle(),this.noBackground\u0026\u0026(t+\u003d\" no-background\"),this.noBorder\u0026\u0026(t+\u003d\" no-border\"),t},customStyle:function(){var t\u003d{};return this.backgroundColor\u0026\u0026(t.backgroundColor\u003dthis.backgroundColor,t.borderColor\u003dthis.backgroundColor),this.borderColor\u0026\u0026(t.border\u003d\"1px solid \".concat(this.borderColor)),this.borderLeftColor\u0026\u0026(t.borderLeft\u003d\"5px solid \".concat(this.borderLeftColor)),t},customColorStyle:function(){return this.color?{color:this.color}:{}},iconStyle:function(){var t\u003d\"\";return this.iconSize\u0026\u0026(t+\u003d\"fa-\".concat(this.iconSize)),(this.light||this.seamless)\u0026\u0026(t+\u003d\" \".concat(this.getBootstrapTextStyle())),t},customIconColorStyle:function(){return this.iconColor?{color:\"\".concat(this.iconColor,\"!important\")}:{}},getBootstrapAlertStyle:function(){return\"alert-\".concat(this.bootStrapStyle.style)},getBootstrapTextStyle:function(){return\"text-\".concat(this.bootStrapStyle.style)},getBootstrapBorderStyle:function(){return\"border-\".concat(this.bootStrapStyle.style)},getFontAwesomeIconStyle:function(){return this.bootStrapStyle.icon}}},He,[],!1,null,\"0eabf1c4\",null).exports;var Fe\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[n(\"nav\",{staticClass:\"breadcrumb-divider\",attrs:{\"aria-label\":\"breadcrumb\"}},[n(\"ol\",{staticClass:\"breadcrumb\"},[n(\"li\",{staticClass:\"notlink breadcrumb-marker\"},[t._v(\"\\n ››  \\n \")]),t._v(\" \"),t._l(t.items,(function(e,i){return n(\"li\",{key:i,class:[\"breadcrumb-item\",{notlink:null\u003d\u003d\u003de.link}],attrs:{\"aria-current\":{page:t.isLast(i,t.items.length)}}},[null\u003d\u003d\u003de.link?n(\"a\",[t._v(\"\\n \"+t._s(e.title)+\"\\n \")]):n(\"a\",{attrs:{href:e.link}},[t._v(\"\\n \"+t._s(e.title)+\"\\n \")])])}))],2)])])};Fe._withStripped\u003d!0;const Ve\u003dqe({data:function(){return{items:[]}},methods:{isLast:function(t,e){return t\u003d\u003d\u003de-1}},mounted:function(){var t\u003dArray.from(document.querySelectorAll(\"ul\")).find((function(t){return t.classList.contains(\"site-nav-list-root\")}));if(t){var e\u003dt.querySelector(\".current\");if(e){this.items.unshift({title:e.textContent,link:null});for(var n\u003de.parentElement;n!\u003d\u003dt;){if(\"ul\"\u003d\u003d\u003dn.tagName.toLowerCase()){var i\u003dn.parentElement.querySelector(\"div\"),o\u003di.querySelector(\"a[href]\");null\u003d\u003d\u003do?this.items.unshift({title:i.textContent,link:null}):this.items.unshift({title:o.textContent,link:o.getAttribute(\"href\")})}n\u003dn.parentElement}}}}},Fe,[],!1,null,\"ef898034\",null).exports;var Ue\u003di(3),Qe\u003di.n(Ue),Xe\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.isLi?n(\"li\",{ref:\"dropdown\",class:[{disabled:t.disabledBool},\"dropdown\",t.addClass]},[t._t(\"button\",(function(){return[n(\"a\",{staticClass:\"dropdown-toggle nav-link\",class:{disabled:t.disabledBool},attrs:{role:\"button\",\"data-bs-toggle\":\"dropdown\"}},[t._t(\"header\")],2)]})),t._v(\" \"),t._t(\"dropdown-menu\",(function(){return[n(\"ul\",{staticClass:\"dropdown-menu\",class:[{show:t.show},{\"dropdown-menu-end\":t.menuAlignRight}]},[t._t(\"default\")],2)]}))],2):t.isSubmenu?n(\"submenu\",{ref:\"submenu\",scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)}):n(\"div\",{ref:\"dropdown\",class:[{disabled:t.disabledBool},\"btn-group\",t.addClass]},[t._t(\"before\"),t._v(\" \"),t._t(\"button\",(function(){return[n(\"button\",{staticClass:\"btn dropdown-toggle\",class:[t.btnType,t.btnWithBefore,{\"dropdown-toggle-split\":t.hasBefore}],attrs:{type:\"button\",disabled:t.disabledBool,\"data-bs-reference\":\"parent\",\"data-bs-toggle\":\"dropdown\"}},[t._t(\"header\")],2)]})),t._v(\" \"),t._t(\"dropdown-menu\",(function(){return[n(\"ul\",{staticClass:\"dropdown-menu\",class:[{show:t.show},{\"dropdown-menu-end\":t.menuAlignRight}]},[t._t(\"default\")],2)]}))],2)};Xe._withStripped\u003d!0;var Ye\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"li\",{ref:\"submenu\",class:[t.addClass,\"dropdown-submenu\",{dropend:t.dropright,dropstart:t.dropleft}]},[t._t(\"button\",(function(){return[n(\"a\",{staticClass:\"dropdown-item submenu-toggle\",class:{disabled:t.disabled},attrs:{role:\"button\",\"data-bs-toggle\":\"dropdown\"}},[t._t(\"header\")],2)]})),t._v(\" \"),t._t(\"dropdown-menu\",(function(){return[n(\"ul\",{staticClass:\"dropdown-menu\"},[t._t(\"default\")],2)]}))],2)};function Ke(t,n){for(var i\u003d0;i\u003cn.length;i++){var o\u003dn[i];o.enumerable\u003do.enumerable||!1,o.configurable\u003d!0,\"value\"in o\u0026\u0026(o.writable\u003d!0),Object.defineProperty(t,e(o.key),o)}}Ye._withStripped\u003d!0;var Ge,Ze\u003dArray.prototype,Je\u003dnew Error(\"Passed arguments must be of Node\"),tn\u003d[],en\u003d[];function nn(t){return t instanceof window.Node}function on(t){return t instanceof window.NodeList||t instanceof sn||t instanceof window.HTMLCollection||t instanceof Array}function rn(t){return(t\u003dt.trim()).length?t.replace(/\\s+/,\" \").split(\" \"):[]}var sn\u003dfunction(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n\u003de;if(e[0]\u003d\u003d\u003dwindow?n\u003d[window]:\"string\"\u003d\u003dtypeof e[0]?(n\u003d(e[1]||document).querySelectorAll(e[0]),e[1]\u0026\u0026(this.owner\u003de[1])):0 in e\u0026\u0026!nn(e[0])\u0026\u0026e[0]\u0026\u0026\"length\"in e[0]\u0026\u0026(n\u003de[0],e[1]\u0026\u0026(this.owner\u003de[1])),n){for(var i in n)this[i]\u003dn[i];this.length\u003dn.length}else this.length\u003d0}var e,n,i;return e\u003dt,(n\u003d[{key:\"concat\",value:function(){var t\u003dZe.slice.call(this);function e(n){Ze.forEach.call(n,(function(n){nn(n)?~t.indexOf(n)||t.push(n):on(n)\u0026\u0026e(n)}))}for(var n\u003darguments.length,i\u003dnew Array(n),o\u003d0;o\u003cn;o++)i[o]\u003darguments[o];return Ze.forEach.call(i,(function(n){if(nn(n))~t.indexOf(n)||t.push(n);else{if(!on(n))throw Error(\"Concat arguments must be of a Node, NodeList, HTMLCollection, or Array of (Node, NodeList, HTMLCollection, Array)\");e(n)}})),hn(t,this)}},{key:\"delete\",value:function(){var t\u003dln(this).filter((function(t){return t.remove?t.remove():t.parentNode\u0026\u0026t.parentNode.removeChild(t),document.body.contains(t)}));return t.length\u0026\u0026console.warn(\"NodeList: Some nodes could not be deleted.\"),t}},{key:\"each\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return Ze.forEach.apply(this,e),this}},{key:\"filter\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return hn(Ze.filter.apply(this,e),this)}},{key:\"find\",value:function(t){var e\u003d[];return ln(this).forEach((function(n){Ze.push.apply(e,n.querySelectorAll(t))})),ln(e,this.owner)}},{key:\"findChildren\",value:function(t){var e\u003dthis;return t?this.find(t).filter((function(t){return e.includes(t.parentElement)})):ln(this.map((function(t){return t.children})))}},{key:\"forEach\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return Ze.forEach.apply(this,e),this}},{key:\"includes\",value:function(t,e){return~this.indexOf(t,e)}},{key:\"map\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];var i\u003dZe.map.apply(this,e);return i.some((function(t){return nn(t)||on(t)}))?ln(i,this):i}},{key:\"parent\",value:function(){return ln(this.map((function(t){return t.parentNode})),this)}},{key:\"pop\",value:function(t){\"number\"!\u003dtypeof t\u0026\u0026(t\u003d1);for(var e\u003d[],n\u003dZe.pop.bind(this);t--;)e.push(n());return hn(e,this)}},{key:\"push\",value:function(){for(var t\u003dthis,e\u003darguments.length,n\u003dnew Array(e),i\u003d0;i\u003ce;i++)n[i]\u003darguments[i];return Ze.forEach.call(n,(function(e){if(!nn(e))throw Je;~t.indexOf(e)||Ze.push.call(t,e)})),this}},{key:\"shift\",value:function(t){\"number\"!\u003dtypeof t\u0026\u0026(t\u003d1);for(var e\u003d[];t--;)e.push(Ze.shift.call(this));return 1\u003d\u003de.length?e[0]:hn(e,this)}},{key:\"slice\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return hn(Ze.slice.apply(this,e),this)}},{key:\"splice\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];for(var i\u003d2,o\u003de.length;i\u003co;i++)if(!nn(e[i]))throw Je;return Ze.splice.apply(this,e),this}},{key:\"unshift\",value:function(){for(var t\u003dthis,e\u003dZe.unshift.bind(this),n\u003darguments.length,i\u003dnew Array(n),o\u003d0;o\u003cn;o++)i[o]\u003darguments[o];return Ze.forEach.call(i,(function(n){if(!nn(n))throw Je;~t.indexOf(n)||e(n)})),this}},{key:\"addClass\",value:function(t){return this.toggleClass(t,!0)}},{key:\"removeClass\",value:function(t){return this.toggleClass(t,!1)}},{key:\"toggleClass\",value:function(t,e){var n\u003dnull\u003d\u003de?\"toggle\":e?\"add\":\"remove\";return\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003drn(t)),this.each((function(e){var i,o\u003drn(e.className);t.forEach((function(t){var e\u003d~o.indexOf(t);e||\"remove\"\u003d\u003d\u003dn||o.push(t),e\u0026\u0026\"add\"!\u003d\u003dn\u0026\u0026(o\u003do.filter((function(e){return e!\u003d\u003dt})))})),(o\u003d(i\u003do).length?i.join(\" \"):\"\")?e.className\u003do:e.removeAttribute(\"class\")})),this}},{key:\"get\",value:function(t){var e\u003d[];return this.each((function(n){null!\u003d\u003dn\u0026\u0026(n\u003dn[t]),e.push(n)})),ln(e,this)}},{key:\"set\",value:function(t,e){return t.constructor\u003d\u003d\u003dObject?this.each((function(e){if(e)for(var n in t)n in e\u0026\u0026(e[n]\u003dt[n])})):this.each((function(n){t in n\u0026\u0026(n[t]\u003de)})),this}},{key:\"call\",value:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];var i\u003dZe.shift.call(e),o\u003d[],r\u003d!0;return this.each((function(t){t\u0026\u0026t[i]instanceof Function?(t\u003dt[i].apply(t,e),o.push(t),r\u0026\u0026void 0!\u003d\u003dt\u0026\u0026(r\u003d!1)):o.push(void 0)})),r?this:ln(o,this)}},{key:\"item\",value:function(t){return hn([this[t]],this)}},{key:\"asArray\",get:function(){return Ze.slice.call(this)}},{key:\"on\",value:function(t,e,n){if(\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003drn(t)),!this||!this.length)return this;if(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003de,e\u003dnull),!n)return this;var i\u003dn;return n\u003de?function(t){var n\u003dhn(e,this);n.length\u0026\u0026n.some((function(e){var n\u003de.contains(t.target);return n\u0026\u0026i.call(e,t,e),n}))}:function(t){i.apply(this,[t,this])},this.each((function(e){t.forEach((function(t){(e\u003d\u003d\u003dwindow||nn(e))\u0026\u0026(e.addEventListener(t,n,!1),en.push({el:e,event:t,callback:n}))}))})),this}},{key:\"off\",value:function(t,e){return t instanceof Function\u0026\u0026(e\u003dt,t\u003dnull),t\u003dt instanceof Array?t:\"string\"\u003d\u003dtypeof t?rn(t):null,this.each((function(n){en\u003den.filter((function(i){return!!(!i||i.el!\u003d\u003dn||e\u0026\u0026e!\u003d\u003di.callback||t\u0026\u0026!~t.indexOf(i.event))||(i.el.removeEventListener(i.event,i.callback),!1)}))})),this}},{key:\"onBlur\",value:function(t){var e\u003d!(arguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1])||arguments[1];return this\u0026\u0026this.length\u0026\u0026t?(this.each((function(e){tn.push({el:e,callback:t})})),Ge||(Ge\u003dfunction(t){tn.forEach((function(e){e.el\u0026\u0026(e.el.contains(t.target)||e.el\u003d\u003d\u003dt.target||e.callback.call(e.el,t,e.el))}))},document.addEventListener(\"click\",Ge,!1),e\u0026\u0026document.addEventListener(\"touchstart\",Ge,!1)),this):this}},{key:\"offBlur\",value:function(t){return this.each((function(e){tn\u003dtn.filter((function(n){return!(n\u0026\u0026n.el\u003d\u003d\u003de\u0026\u0026(!t||n.callback\u003d\u003d\u003dt))\u0026\u0026e}))})),this}}])\u0026\u0026Ke(e.prototype,n),i\u0026\u0026Ke(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),t}(),an\u003dsn.prototype;function ln(t,e){var n\u003d[];return Ze.forEach.call(t,(function(i){if(nn(i))~n.indexOf(i)||n.push(i);else if(on(i))for(var o in i)n.push(i[o]);else if(null!\u003d\u003di)return t.get\u003dan.get,t.set\u003dan.set,t.call\u003dan.call,t.owner\u003de,t})),hn(n,e)}Object.getOwnPropertyNames(Ze).forEach((function(t){\"join\"!\u003d\u003dt\u0026\u0026\"copyWithin\"!\u003d\u003dt\u0026\u0026\"fill\"!\u003d\u003dt\u0026\u0026void 0\u003d\u003d\u003dan[t]\u0026\u0026(an[t]\u003dZe[t])})),window\u0026\u0026window.Symbol\u0026\u0026Symbol.iterator\u0026\u0026(an[Symbol.iterator]\u003dan.values\u003dZe[Symbol.iterator]);var cn\u003ddocument\u0026\u0026document.createElement(\"div\");function un(t){var e\u003dthis;an[t]||(cn[t]instanceof Function?an[t]\u003dfunction(){for(var n\u003d[],i\u003d!0,o\u003darguments.length,r\u003dnew Array(o),s\u003d0;s\u003co;s++)r[s]\u003darguments[s];for(var a in an){var l\u003dan[a];l\u0026\u0026l[t]instanceof Function?(l\u003dl[t].apply(l,r),n.push(l),i\u0026\u0026void 0!\u003d\u003dl\u0026\u0026(i\u003d!1)):n.push(void 0)}return i?e:ln(n,e)}:Object.defineProperty(an,t,{get:function(){var e\u003d[];return this.each((function(n){null!\u003d\u003dn\u0026\u0026(n\u003dn[t]),e.push(n)})),ln(e,this)},set:function(e){this.each((function(n){n\u0026\u0026t in n\u0026\u0026(n[t]\u003de)}))}}))}for(var dn in cn)un(dn);function hn(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return new sn(e)}window\u0026\u0026(window.NL\u003dhn);const pn\u003dhn;const fn\u003d{isRightAlign:function(t){var e\u003d0,n\u003dwindow.innerWidth,i\u003d(window.innerHeight,t.getBoundingClientRect());if(void 0\u003d\u003d\u003di)return!0;i.y;var o\u003di.x,r\u003di.x+t.offsetWidth;return i.y,t.offsetHeight,!(o\u003c0)\u0026\u0026(o\u003ce||!(r\u003en))},preventOverflow:function(t){t.removeAttribute(\"style\");var e\u003d0,n\u003d(window.innerWidth,window.innerHeight),i\u003dt.getBoundingClientRect();if(void 0!\u003d\u003di){var o\u003di.y,r\u003d(i.x,i.x,t.offsetWidth,i.y+t.offsetHeight);r\u003en?t.setAttribute(\"style\",\"bottom: auto; top: \".concat(-(r-n),\"px;\")):o\u003ce\u0026\u0026t.setAttribute(\"style\",\"top: auto; bottom: \".concat(-(e-o),\"px;\"))}}};function mn(t){for(var e\u003dt,n\u003dt;n;)n.classList\u0026\u0026n.classList.contains(\"dropdown-menu\")\u0026\u0026(e\u003dn),n\u003dn.parentNode;if(e.offsetWidth\u003ewindow.innerWidth)e.setAttribute(\"style\",\"left: 0px;\");else{var i\u003de.parentNode.getBoundingClientRect(),o\u003di.left+e.offsetWidth-window.innerWidth,r\u003do\u003c0?i.left:i.left-o;e.setAttribute(\"style\",\"left: \".concat(r,\"px;\"))}}const vn\u003dqe({props:{addClass:{type:String,default:\"\"},disabled:{type:[Boolean,String],default:!1}},data:function(){return{show:!1,dropright:!0,dropleft:!1}},inject:{isParentNavbar:{default:!1}},computed:{disabledBool:function(){return Re(this.disabled)}},methods:{hideSubmenu:function(){this.show\u003d!1,pn(this.$refs.submenu).find(\"ul.dropdown-menu\").each((function(t){return t.classList.toggle(\"show\",!1)})),this.alignMenuRight()},showSubmenu:function(){var t\u003dthis;this.show\u003d!0,pn(this.$refs.submenu).findChildren(\"ul\").each((function(e){e.classList.toggle(\"show\",!0),window.innerWidth\u003c768\u0026\u0026t.isParentNavbar?mn(e):(fn.isRightAlign(e)?t.alignMenuRight():t.alignMenuLeft(),fn.preventOverflow(e))}))},alignMenuRight:function(){this.dropright\u003d!0,this.dropleft\u003d!1},alignMenuLeft:function(){this.dropright\u003d!1,this.dropleft\u003d!0}},mounted:function(){var t\u003dthis,e\u003dpn(this.$refs.submenu);this.show\u0026\u0026this.showSubmenu(),e.onBlur((function(){t.hideSubmenu()}),!1),e.findChildren(\"a,button\").on(\"click\",(function(e){return e.preventDefault(),e.stopPropagation(),t.disabledBool||(t.show?t.hideSubmenu():t.showSubmenu()),!1})),e.findChildren(\"a,button\").on(\"mouseover\",(function(n){if(n.preventDefault(),window.innerWidth\u003e767){if(e.findChildren(\"ul.show\").length\u003e0||t.disabledBool)return!1;n.currentTarget.click(),t.$parent.$parent.$children.forEach((function(e){e.$el\u003d\u003d\u003dt.$el?e.$refs.submenu.showSubmenu():e.$refs.submenu.hideSubmenu()}))}return!1}))},beforeDestroy:function(){var t\u003dpn(this.$refs.submenu);t.offBlur(),t.findChildren(\"a,button\").off(),t.findChildren(\"ul\").off()}},Ye,[],!1,null,\"3c82541c\",null).exports;const gn\u003dqe({components:{Submenu:vn},props:{disabled:{type:[Boolean,String],default:!1},type:{type:String,default:\"light\"},menuAlignRight:{type:Boolean,default:!1},addClass:{type:String,default:\"\"}},provide:{hasParentDropdown:!0},inject:{hasParentDropdown:{default:void 0},isParentNavbar:{default:!1}},data:function(){return{show:!1}},computed:{btnType:function(){return\"btn-\".concat(this.type)},disabledBool:function(){return Re(this.disabled)},isLi:function(){return this.$parent._navbar||this.$parent.menu||this.$parent._tabset},isSubmenu:function(){return this.hasParentDropdown},menu:function(){return!this.$parent||this.$parent.navbar},submenu:function(){return this.$parent\u0026\u0026(this.$parent.menu||this.$parent.submenu)},slots:function(){return this.$scopedSlots.default},hasBefore:function(){return!!this.$scopedSlots.before},btnWithBefore:function(){return this.hasBefore?\"btn-with-before\":\"\"}},methods:{blur:function(){var t\u003dthis;this.unblur(),this._hide\u003dsetTimeout((function(){t._hide\u003dnull,t.hideDropdownMenu()}),100)},unblur:function(){this._hide\u0026\u0026(clearTimeout(this._hide),this._hide\u003dnull)},hideDropdownMenu:function(){var t\u003dthis;this.show\u003d!1,pn(this.$refs.dropdown).findChildren(\"ul\").each((function(e){e.classList.toggle(\"show\",!1),window.innerWidth\u003c768\u0026\u0026t.isParentNavbar\u0026\u0026e.style.removeProperty(\"left\")}))},showDropdownMenu:function(){var t\u003dthis;this.show\u003d!0,pn(this.$refs.dropdown).findChildren(\"ul\").each((function(e){e.classList.toggle(\"show\",!0),window.innerWidth\u003c768\u0026\u0026t.isParentNavbar\u0026\u0026mn(e)}))}},mounted:function(){var t\u003dthis,e\u003dpn(this.$refs.dropdown);this.$slots.button\u0026\u0026e.findChildren(\".dropdown-toggle\").forEach((function(t){return t.setAttribute(\"data-bs-toggle\",\"dropdown\")})),this.show\u0026\u0026this.showDropdownMenu(),e.onBlur((function(){t.hideDropdownMenu()}),!1),e.findChildren(\"a,button.dropdown-toggle\").on(\"click\",(function(e){return e.preventDefault(),t.disabledBool||(t.show?t.hideDropdownMenu():t.showDropdownMenu()),!1})),e.findChildren(\"ul\").on(\"click\",\"li\u003ea\",(function(e){e.target.classList.contains(\"submenu-toggle\")||t.hideDropdownMenu()}))},beforeDestroy:function(){var t\u003dpn(this.$refs.dropdown);t.offBlur(),t.findChildren(\"a,button\").off(),t.findChildren(\"ul\").off()}},Xe,[],!1,null,\"ccda25c0\",null).exports;var yn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[n(\"nav\",{ref:\"navbar\",class:[\"navbar\",\"navbar-expand-md\",\"d-print-none\",t.themeOptions,t.addClass,t.fixedOptions]},[n(\"div\",{staticClass:\"container-fluid\"},[n(\"div\",{staticClass:\"navbar-left\"},[t._t(\"brand\")],2),t._v(\" \"),n(\"div\",{ref:\"navbarDefault\",staticClass:\"navbar-default\"},[n(\"ul\",{staticClass:\"navbar-nav me-auto mt-2 mt-lg-0\"},[t._t(\"default\")],2)]),t._v(\" \"),t.slots.right?n(\"ul\",{staticClass:\"navbar-nav navbar-right\"},[t._t(\"right\")],2):t._e()])]),t._v(\" \"),n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isLowerNavbarShowing,expression:\"isLowerNavbarShowing\"}],ref:\"lowerNavbar\",staticClass:\"lower-navbar-container\"},[t._t(\"lower-navbar\",(function(){return[n(\"site-nav-button\"),t._v(\" \"),n(\"page-nav-button\")]}))],2)])};function wn(t,e){(null\u003d\u003de||e\u003et.length)\u0026\u0026(e\u003dt.length);for(var n\u003d0,i\u003dnew Array(e);n\u003ce;n++)i[n]\u003dt[n];return i}function bn(t,e){if(t){if(\"string\"\u003d\u003dtypeof t)return wn(t,e);var n\u003dObject.prototype.toString.call(t).slice(8,-1);return\"Object\"\u003d\u003d\u003dn\u0026\u0026t.constructor\u0026\u0026(n\u003dt.constructor.name),\"Map\"\u003d\u003d\u003dn||\"Set\"\u003d\u003d\u003dn?Array.from(t):\"Arguments\"\u003d\u003d\u003dn||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?wn(t,e):void 0}}function _n(t){return function(t){if(Array.isArray(t))return wn(t)}(t)||function(t){if(\"undefined\"!\u003dtypeof Symbol\u0026\u0026null!\u003dt[Symbol.iterator]||null!\u003dt[\"@@iterator\"])return Array.from(t)}(t)||bn(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function Sn(t){return t.endsWith(\".html\")?t.toLowerCase():t.endsWith(\"/\")?\"\".concat(t,\"index.html\").toLowerCase():t.endsWith(\"/\")?t.toLowerCase():\"\".concat(t,\".html\").toLowerCase()}yn._withStripped\u003d!0;var xn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.showSiteNav?n(\"overlay\",{attrs:{type:\"siteNav\",\"portal-name\":t.portalName},scopedSlots:t._u([{key:\"navMenuIcon\",fn:function(){return[n(\"div\",{class:[\"toggle-site-nav-button\"]},[n(\"span\"),t._v(\" \"),n(\"span\"),t._v(\" \"),n(\"span\")])]},proxy:!0}],null,!1,3920804522)}):t._e()};xn._withStripped\u003d!0;const Cn\u003dqe({data:function(){return{portalName:void 0,show:!1}},computed:{showSiteNav:function(){return this.show\u0026\u0026this.portalName}},methods:{toggleSiteNavButton:function(){window.innerWidth\u003c992?this.show\u003d!0:this.show\u003d!1}},mounted:function(){null!\u003d\u003ddocument.querySelector(\"#site-nav a\")?this.portalName\u003d\"site-nav\":null!\u003d\u003ddocument.querySelector(\".site-nav-root a\")\u0026\u0026(this.portalName\u003d\"mb-site-nav\"),this.toggleSiteNavButton(),pn(window).on(\"resize\",this.toggleSiteNavButton)},beforeDestroy:function(){pn(window).off(\"resize\",this.toggleSiteNavButton)}},xn,[],!1,null,\"d6ffaa8e\",null).exports;var $n\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.showPageNav?n(\"overlay\",{attrs:{type:\"pageNav\",\"portal-name\":t.portalName},scopedSlots:t._u([{key:\"navMenuIcon\",fn:function(){return[n(\"div\",{class:[\"toggle-page-nav-button\"]},[n(\"span\"),t._v(\" \"),n(\"span\"),t._v(\" \"),n(\"span\")])]},proxy:!0}],null,!1,171840498)}):t._e()};$n._withStripped\u003d!0;const kn\u003dqe({data:function(){return{portalName:void 0,show:!1}},computed:{showPageNav:function(){return this.show\u0026\u0026this.portalName}},methods:{togglePageNavButton:function(){window.innerWidth\u003c1300?this.show\u003d!0:this.show\u003d!1}},mounted:function(){null!\u003d\u003ddocument.querySelector(\"#page-nav a\")?this.portalName\u003d\"page-nav\":null!\u003d\u003ddocument.querySelector(\"#mb-page-nav a\")\u0026\u0026(this.portalName\u003d\"mb-page-nav\"),this.togglePageNavButton(),pn(window).on(\"resize\",this.togglePageNavButton)},beforeDestroy:function(){pn(window).off(\"resize\",this.togglePageNavButton)}},$n,[],!1,null,\"4b08b1df\",null).exports;const Tn\u003dqe({components:{SiteNavButton:Cn,PageNavButton:kn},props:{type:{type:String,default:\"primary\"},addClass:{type:String,default:\"\"},fixed:{type:[Boolean,String],default:!1},defaultHighlightOn:{type:String,default:\"sibling-or-child\"}},provide:function(){return{toggleLowerNavbar:this.toggleLowerNavbar,isParentNavbar:!0}},data:function(){return{id:\"bs-example-navbar-collapse-1\",styles:{},isLowerNavbarShowing:!1}},computed:{fixedBool:function(){return Re(this.fixed)},fixedOptions:function(){return this.fixedBool?\"navbar-fixed\":\"\"},slots:function(){return this.$scopedSlots},themeOptions:function(){switch(this.type){case\"none\":return\"\";case\"light\":return\"navbar-light bg-light\";case\"dark\":return\"navbar-dark bg-dark\";case\"primary\":default:return\"navbar-dark bg-primary\"}}},methods:{splitUrl:function(t){var e\u003dnew URL(Sn(t));return\"\".concat(e.pathname).substr(1).split(\"/\")},isEqualExceptLast:function(t,e){for(var n\u003d0;n\u003ct.length-1;n+\u003d1)if(t[n]!\u003d\u003de[n])return!1;return!0},isSibling:function(t,e){var n\u003dthis.splitUrl(e),i\u003dthis.splitUrl(t);return n.length\u003d\u003d\u003di.length\u0026\u0026this.isEqualExceptLast(n,i)},isChild:function(t,e){var n\u003dthis.splitUrl(e),i\u003dthis.splitUrl(t);return!(i.length\u003c\u003dn.length)\u0026\u0026this.isEqualExceptLast(n,i)},isExact:function(t,e){return Sn(t)\u003d\u003d\u003dSn(e)},addClassIfDropdown:function(t,e,n){t.includes(e)\u0026\u0026(e.classList.add(\"dropdown-current\"),this.addClassIfSubmenu(e,n))},addClassIfSubmenu:function(t,e){for(var n\u003dt.parentElement;n!\u003d\u003de;)n.classList.contains(\"dropdown-submenu\")\u0026\u0026pn(n).findChildren(\"a\").each((function(t){return t.classList.add(\"dropdown-current\")})),n\u003dn.parentElement},highlightLink:function(t){var e\u003dthis.defaultHighlightOn,n\u003d[];this.$el.querySelectorAll(\".navbar-nav\").forEach((function(t){return n.push.apply(n,_n(Array.from(t.children)))}));for(var i\u003d0;i\u003cn.length;i+\u003d1)for(var o\u003dn[i],r\u003d[o],s\u003dArray.from(o.querySelectorAll(\"a.nav-link\")),a\u003dArray.from(o.querySelectorAll(\"a.dropdown-item\")),l\u003dr.concat(s).concat(a).filter((function(t){return t.href})),c\u003d0;c\u003cl.length;c+\u003d1){var u\u003dl[c];if(\"none\"!\u003d\u003d(u.getAttribute(\"highlight-on\")||e)\u0026\u0026this.isExact(t,u.href))return o.classList.add(\"current\"),void this.addClassIfDropdown(a,u,o)}for(var d\u003d0;d\u003cn.length;d+\u003d1)for(var h\u003dn[d],p\u003d[h],f\u003dArray.from(h.querySelectorAll(\"a.nav-link\")),m\u003dArray.from(h.querySelectorAll(\"a.dropdown-item\")),v\u003dp.concat(f).concat(m).filter((function(t){return t.href})),g\u003d0;g\u003cv.length;g+\u003d1){var y\u003dv[g],w\u003dy.getAttribute(\"highlight-on\")||e;if(\"none\"!\u003d\u003dw)if(\"sibling-or-child\"\u003d\u003d\u003dw){if(this.isSibling(t,y.href)||this.isChild(t,y.href))return h.classList.add(\"current\"),void this.addClassIfDropdown(m,y,h)}else if(\"sibling\"\u003d\u003d\u003dw){if(this.isSibling(t,y.href))return h.classList.add(\"current\"),void this.addClassIfDropdown(m,y,h)}else if(\"child\"\u003d\u003d\u003dw\u0026\u0026this.isChild(t,y.href))return h.classList.add(\"current\"),void this.addClassIfDropdown(m,y,h)}},toggleLowerNavbar:function(){this.$refs.lowerNavbar.childElementCount\u003e0?this.isLowerNavbarShowing\u003d!0:this.isLowerNavbarShowing\u003d!1}},created:function(){this._navbar\u003d!0},mounted:function(){var t\u003dthis,e\u003dpn(\u0027.dropdown\u003e[data-bs-toggle\u003d\"dropdown\"]\u0027,this.$el).parent();e.on(\"click\",\".dropdown-toggle\",(function(t){t.preventDefault(),e.each((function(e){e.contains(t.target)\u0026\u0026e.classList.toggle(\"open\")}))})).on(\"click\",\".dropdown-menu\u003eli\u003ea\",(function(t){e.each((function(e){e.contains(t.target)\u0026\u0026e.classList.remove(\"open\")}))})).onBlur((function(t){e.each((function(e){e.contains(t.target)||e.classList.remove(\"open\")}))})),this.highlightLink(window.location.href);var n\u003dpn(this.$refs.navbarDefault).find(\".current\")[0];n\u0026\u0026window.innerWidth\u003c768\u0026\u0026n.offsetLeft+n.offsetWidth\u003ewindow.innerWidth\u0026\u0026(this.$refs.navbarDefault.scrollLeft\u003dn.offsetLeft+n.offsetWidth-window.innerWidth),this.toggleLowerNavbar(),pn(window).on(\"resize\",this.toggleLowerNavbar),pn(this.$refs.navbarDefault).on(\"wheel\",(function(e){window.innerWidth\u003c768\u0026\u0026!function(t){for(var e\u003d0;e\u003ct.length;e+\u003d1)if(t[e].classList\u0026\u0026t[e].classList.contains(\"dropdown-menu\"))return!0;return!1}(e.path)\u0026\u0026(e.preventDefault(),t.$refs.navbarDefault.scrollLeft+\u003de.deltaY)}))},beforeDestroy:function(){pn(\".dropdown\",this.$el).off(\"click\").offBlur(),pn(window).off(\"resize\",this.toggleLowerNavbar),pn(this.$refs.navbarDefault).off(\"wheel\")}},yn,[],!1,null,\"7c0fd418\",null).exports;var En\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.isMinimal?n(\"minimal-panel\",t._b({attrs:{\"panel-id\":t.panelId},scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)},\"minimal-panel\",t.$attrs,!1)):n(\"nested-panel\",t._b({attrs:{\"panel-id\":t.panelId,type:t.type},scopedSlots:t._u([t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(){return[t._t(n)]},proxy:!0}}))],null,!0)},\"nested-panel\",t.$attrs,!1))};En._withStripped\u003d!0;var On\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.localMinimized?n(\"span\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[n(\"span\",{staticClass:\"morph\"},[n(\"button\",{class:[\"morph-display-wrapper\",\"btn\",t.btnType],on:{click:function(e){return t.open()}}},[t.noMinimizedSwitch?t._e():n(\"div\",{staticClass:\"minimal-caret-wrapper\"},[n(\"span\",{class:[\"glyphicon\",\"glyphicon-chevron-right\"]})]),t._v(\" \"),n(\"span\",{staticClass:\"card-title\"},[t._t(\"_alt\",(function(){return[t._t(\"header\")]}))],2)])])]):n(\"div\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[n(\"div\",{class:[\"card\",{\"expandable-card\":t.isExpandableCard},t.borderType]},[n(\"div\",{class:[\"card-header\",{\"header-toggle\":t.isExpandableCard},t.cardType,t.borderType],on:{click:function(e){e.preventDefault(),e.stopPropagation(),t.isExpandableCard\u0026\u0026t.toggle()}}},[n(\"div\",{staticClass:\"caret-wrapper\"},[t.showCaret?n(\"span\",{class:[\"glyphicon\",t.localExpanded?\"glyphicon-chevron-down\":\"glyphicon-chevron-right\"]}):t._e()]),t._v(\" \"),n(\"div\",{ref:\"headerWrapper\",class:[\"header-wrapper card-title\",t.cardType,{\"text-white\":!t.isLightBg,\"header-transparent\":!t.shouldShowHeader}]},[t._t(\"header\")],2),t._v(\" \"),n(\"div\",{staticClass:\"button-wrapper\"},[t._t(\"button\",(function(){return[n(\"panel-switch\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isExpandableCard\u0026\u0026!t.noSwitchBool\u0026\u0026!t.showCaret,expression:\"isExpandableCard \u0026\u0026 !noSwitchBool \u0026\u0026 !showCaret\"}],attrs:{\"is-open\":t.localExpanded,\"is-light-bg\":t.isLightBg}}),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.noCloseBool,expression:\"!noCloseBool\"}],staticClass:\"close-button btn\",class:[t.isLightBg?\"btn-outline-secondary\":\"btn-outline-light\",{\"seamless-button\":t.isSeamless}],attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.close()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-remove\",attrs:{\"aria-hidden\":\"true\"}})]),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.popupUrl,expression:\"popupUrl\"}],staticClass:\"popup-button btn\",class:[t.isLightBg?\"btn-outline-secondary\":\"btn-outline-light\",{\"seamless-button\":t.isSeamless}],attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.openPopup()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-new-window\",attrs:{\"aria-hidden\":\"true\"}})])]}))],2)]),t._v(\" \"),n(\"div\",{ref:\"panel\",staticClass:\"card-collapse\",class:{\"card-peek-collapsed\":t.shouldShowPeek}},[t.wasRetrieverLoaded||t.preloadBool?n(\"div\",{staticClass:\"card-body\"},[t._t(\"default\"),t._v(\" \"),t.hasSrc?n(\"retriever\",{ref:\"retriever\",attrs:{src:t.srcWithoutFragment,fragment:t.fragment},on:{\"src-loaded\":t.retrieverUpdateMaxHeight}}):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"bottom-button-wrapper\"},[n(\"panel-switch\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isExpandableCard\u0026\u0026t.bottomSwitchBool,expression:\"isExpandableCard \u0026\u0026 bottomSwitchBool\"}],attrs:{\"is-open\":t.localExpanded},nativeOn:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggle(!0)}}})],1)],2):t._e(),t._v(\" \"),n(\"hr\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isSeamless,expression:\"isSeamless\"}]})]),t._v(\" \"),n(\"transition\",{attrs:{name:\"peek-read-more-fade\"}},[t.shouldShowPeek?n(\"div\",{staticClass:\"peek-read-more glyphicon glyphicon-chevron-down\",on:{click:function(e){return t.toggle()}}}):t._e()])],1)])};On._withStripped\u003d!0;const Bn\u003d{props:{type:{type:String,default:null},expandable:{type:[Boolean,String],default:!0},isOpen:{type:[Boolean,String],default:null},expanded:{type:[Boolean,String],default:null},minimized:{type:[Boolean,String],default:!1},noMinimizedSwitch:{type:[Boolean,String],default:!1},noSwitch:{type:[Boolean,String],default:!1},noClose:{type:[Boolean,String],default:!1},popupUrl:{type:String,default:null},src:{type:String},bottomSwitch:{type:[Boolean,String],default:!0},preload:{type:[Boolean,String],default:!1},addClass:{type:String,default:\"\"},expandHeaderless:{type:Boolean,default:!1},peek:{type:Boolean,default:!1},panelId:{type:String,default:null}},computed:{expandableBool:function(){return Re(this.expandable)},isOpenBool:function(){return Re(this.isOpen)},expandedBool:function(){return Re(this.expanded)},minimizedBool:function(){return Re(this.minimized)},noSwitchBool:function(){return Re(this.noSwitch)},noCloseBool:function(){return Re(this.noClose)},bottomSwitchBool:function(){return Re(this.bottomSwitch)},preloadBool:function(){return Re(this.preload)},hasHeaderBool:function(){return this.$scopedSlots.header},isExpandableCard:function(){return this.expandableBool},hasId:function(){return this.panelId},hasSrc:function(){return this.src\u0026\u0026this.src.length\u003e0},srcWithoutFragment:function(){return this.src.split(\"#\")[0]},shouldShowHeader:function(){return!this.localExpanded||!this.expandHeaderless},shouldShowPeek:function(){return this.peek\u0026\u0026!this.localExpanded},collapsedPanelHeight:function(){return this.peek?125:0}},data:function(){return{localExpanded:!1,localMinimized:!1,wasRetrieverLoaded:!1,isRetrieverLoadDone:!this.src,fragment:\"\"}},methods:{toggle:function(t){var e\u003dthis;this.wasRetrieverLoaded?(this.localExpanded?(t\u0026\u0026(this.$refs.panel.style.maxHeight\u003d\"\".concat(this.$refs.panel.scrollHeight,\"px\")),requestAnimationFrame((function(){if(e.$el.getBoundingClientRect().top\u003c0){var n,i\u003ddocument.querySelector(\"header[sticky]\");if(null\u003d\u003di)n\u003d0;else{var o\u003dwindow.getComputedStyle(i,null);n\u003di.clientHeight-parseFloat(o.paddingTop)-parseFloat(o.paddingBottom)||0}window.scrollTo({top:window.scrollY+e.$el.getBoundingClientRect().top-n-3,left:0,behavior:t?\"smooth\":\"instant\"})}e.$refs.panel.style.maxHeight\u003d\"\".concat(e.collapsedPanelHeight,\"px\")}))):(this.$refs.panel.style.transition\u003d\"max-height 0.5s ease-in-out\",this.$refs.panel.style.maxHeight\u003d\"\".concat(this.$refs.panel.scrollHeight,\"px\")),this.localExpanded\u003d!this.localExpanded):this.open()},close:function(){this.localMinimized\u003d!0,this.localExpanded\u003d!1},open:function(){var t\u003dthis;this.localMinimized\u003d!1,this.$nextTick((function(){t.initPanel(),t.localExpanded\u003d!0,t.wasRetrieverLoaded\u003d!0,t.$nextTick((function(){t.$refs.panel.style.maxHeight\u003d\"\".concat(t.$refs.panel.scrollHeight,\"px\")}))}))},openPopup:function(){window.open(this.popupUrl)},retrieverUpdateMaxHeight:function(){this.isRetrieverLoadDone\u003d!0,this.localExpanded\u0026\u0026(this.expandedBool?this.$refs.panel.style.maxHeight\u003d\"none\":this.$refs.panel.style.maxHeight\u003d\"\".concat(this.$refs.panel.scrollHeight,\"px\"))},initPanel:function(){var t\u003dthis;this.$refs.panel.addEventListener(\"transitionend\",(function(e){t.localExpanded\u0026\u0026t.isRetrieverLoadDone\u0026\u0026e.target\u003d\u003d\u003dt.$refs.panel\u0026\u0026(t.$refs.panel.style.maxHeight\u003d\"none\")})),this.localExpanded?this.$refs.panel.style.maxHeight\u003d\"none\":this.$refs.panel.style.maxHeight\u003d\"\".concat(this.collapsedPanelHeight,\"px\")}},created:function(){if(this.src){var t\u003dIe(this.src);t\u0026\u0026(this.fragment\u003dt)}var e\u003d!this.expandableBool\u0026\u0026\"false\"!\u003d\u003dthis.expanded;this.localExpanded\u003de||this.expandedBool,null\u003d\u003d\u003dthis.localExpanded\u0026\u0026(this.localExpanded\u003d!1),this.wasRetrieverLoaded\u003dthis.localExpanded||this.peek,this.localMinimized\u003dthis.minimizedBool},mounted:function(){this.localMinimized||this.initPanel()}};var Pn\u003dfunction(){var t\u003dthis.$createElement,e\u003dthis._self._c||t;return e(\"button\",{class:[\"collapse-button\",\"btn\",this.isLightBg?\"btn-outline-secondary\":\"btn-outline-light\"],attrs:{type:\"button\"}},[e(\"span\",{class:[\"collapse-icon\",\"glyphicon\",\"glyphicon-menu-down\",{opened:this.isOpenBool}],attrs:{\"aria-hidden\":\"true\"}})])};Pn._withStripped\u003d!0;const Ln\u003dqe({props:{isOpen:{type:[Boolean,String],default:!1},isLightBg:{type:Boolean,default:!0}},computed:{isOpenBool:function(){return Re(this.isOpen)}}},Pn,[],!1,null,null,null).exports;var Nn\u003dfunction(){var t\u003dthis.$createElement;return(this._self._c||t)(\"div\",[this._v(\"\\n Loading...\\n\")])};function An(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}Nn._withStripped\u003d!0;const zn\u003dqe({props:{src:{type:String,default:null},fragment:{type:String,default:null},delay:{type:[Boolean,String],default:!1},hasFetched:{type:Boolean,default:!1}},data:function(){return{hasFetchedCopy:this.hasFetched}},computed:{delayBool:function(){return Re(this.delay)},hash:function(){return Ie(this.src)||this.fragment},srcWithoutHash:function(){return this.src.split(\"#\")[0]}},methods:{fetch:function(t){function e(){return t.apply(this,arguments)}return e.toString\u003dfunction(){return t.toString()},e}((function(){var t\u003dthis;this.srcWithoutHash\u0026\u0026(this.hasFetchedCopy||fetch(this.srcWithoutHash).then((function(t){return t.text()})).then((function(e){var i\u003de;if(t.hash){var o\u003ddocument.implementation.createHTMLDocument(\"\");o.body.innerHTML\u003di,o.querySelectorAll(\"svg \u003e script\").forEach((function(t){return t.remove()})),i\u003do.querySelector(\"#\".concat(t.hash)).innerHTML}if(t.hasFetchedCopy\u003d!0,void 0\u003d\u003d\u003di\u0026\u0026t.hash)t.$el.innerHTML\u003d\"\u003cstrong\u003eError\u003c/strong\u003e: Failed to retrieve page fragment:\"+\" \".concat(t.srcWithoutHash,\"#\").concat(t.hash);else{var r\u003dfunction(t){for(var e\u003d1;e\u003carguments.length;e++){var i\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?An(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):An(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}({},t.$root.$data);(new(Vue.extend({template:\"\u003cdiv\u003e\\n\".concat(i,\"\\n\u003c/div\u003e\"),data:function(){return r}}))).$mount(t.$el),t.$emit(\"src-loaded\")}})).catch((function(e){console.error(e),t.$el.innerHTML\u003d\"\u003cstrong\u003eError\u003c/strong\u003e: Failed to retrieve content from source: \"+\"\u003cem\u003e\".concat(t.srcWithoutHash,\"\u003c/em\u003e\"),t.$emit(\"src-loaded\")})))}))},mounted:function(){this.$nextTick((function(){this.srcWithoutHash||(this.$el.innerHTML\u003d\"\"),this.delayBool||this.fetch()}))}},Nn,[],!1,null,null,null).exports;const Mn\u003dqe({mixins:[Bn],components:{panelSwitch:Ln,retriever:zn},computed:{showCaret:function(){return this.isSeamless\u0026\u0026this.expandableBool},isSeamless:function(){return\"seamless\"\u003d\u003d\u003dthis.type},btnType:function(){return this.isSeamless||\"light\"\u003d\u003d\u003dthis.type?\"btn-outline-secondary\":\"btn-outline-\".concat(this.type||\"secondary\")},borderType:function(){return this.isSeamless?\"border-0\":this.type?\"light\"\u003d\u003d\u003dthis.type?\"\":\"border-\".concat(this.type):\"\"},cardType:function(){return this.isSeamless?\"bg-white\":\"bg-\".concat(this.type||\"light\")},isLightBg:function(){return\"bg-light\"\u003d\u003d\u003dthis.cardType||\"bg-white\"\u003d\u003d\u003dthis.cardType||\"bg-warning\"\u003d\u003d\u003dthis.cardType}}},On,[],!1,null,\"3602e6fc\",null).exports;var Hn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.localMinimized?n(\"span\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[t.hasId?n(\"span\",{staticClass:\"anchor\",attrs:{id:t.panelId}}):t._e(),t._v(\" \"),n(\"span\",{staticClass:\"morph\"},[n(\"button\",{staticClass:\"morph-display-wrapper btn card-title morph-title\",on:{click:function(e){return t.minimalOpen()}}},[t.noMinimizedSwitch?t._e():n(\"div\",{class:[\"glyphicon\",\"glyphicon-chevron-right\"]}),t._v(\" \"),t._t(\"_alt\",(function(){return[n(\"span\",{staticClass:\"card-title\"},[t._t(\"header\")],2)]}))],2)])]):n(\"div\",{ref:\"cardContainer\",class:[\"card-container\",t.addClass]},[t.hasId?n(\"span\",{staticClass:\"anchor\",attrs:{id:t.panelId}}):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"card card-flex\"},[n(\"div\",{class:[\"header-wrapper\",{\"header-wrapper-bottom\":t.isHeaderAtBottom,\"header-toggle\":t.isExpandableCard}],on:{click:function(e){e.preventDefault(),e.stopPropagation(),t.isExpandableCard\u0026\u0026t.minimalToggle()}}},[n(\"transition\",{attrs:{name:\"header-fade\"}},[n(\"span\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.isHeaderAtBottom,expression:\"!isHeaderAtBottom\"}],ref:\"headerWrapper\",class:[\"card-title\",{ellipses:!t.hasHeaderBool}]},[n(\"span\",{staticClass:\"card-title-inline\"},[t._t(\"header\")],2),t._v(\" \"),n(\"span\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.showDownSwitch,expression:\"showDownSwitch\"}],staticClass:\"minimal-button glyphicon glyphicon-menu-down minimal-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])]),t._v(\" \"),n(\"div\",{class:[\"button-wrapper\",{\"button-wrapper-expanded\":t.isHeaderAtBottom}]},[t._t(\"button\",(function(){return[n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.noCloseBool,expression:\"!noCloseBool\"}],staticClass:\"minimal-button\",attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.minimalClose()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-remove minimal-close-button\",attrs:{\"aria-hidden\":\"true\"}})]),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:null!\u003d\u003dt.popupUrl,expression:\"popupUrl !\u003d\u003d null\"}],staticClass:\"minimal-button\",attrs:{type:\"button\"},on:{click:function(e){return e.stopPropagation(),t.openPopup()}}},[n(\"span\",{staticClass:\"glyphicon glyphicon-new-window minimal-popup-button\",attrs:{\"aria-hidden\":\"true\"}})]),t._v(\" \"),n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isHeaderAtBottom\u0026\u0026t.isExpandableCard\u0026\u0026t.bottomSwitchBool,expression:\"isHeaderAtBottom \u0026\u0026 isExpandableCard \u0026\u0026 bottomSwitchBool\"}],staticClass:\"minimal-button\",attrs:{type:\"button\"}},[n(\"span\",{staticClass:\"glyphicon glyphicon-menu-up minimal-menu-up\",attrs:{\"aria-hidden\":\"true\"}})])]}))],2)],1),t._v(\" \"),n(\"div\",{ref:\"panel\",staticClass:\"card-collapse\",class:{\"card-peek-collapsed\":t.shouldShowPeek}},[t.wasRetrieverLoaded||t.preloadBool?n(\"div\",{staticClass:\"card-body\"},[t._t(\"default\"),t._v(\" \"),t.hasSrc?n(\"retriever\",{ref:\"retriever\",attrs:{src:t.srcWithoutFragment,fragment:t.fragment},on:{\"src-loaded\":t.retrieverUpdateMaxHeight}}):t._e()],2):t._e()])])])};Hn._withStripped\u003d!0;var Dn\u003dqe({mixins:[Bn],components:{retriever:zn},data:function(){return{isHeaderAtBottom:!1}},computed:{showDownSwitch:function(){return this.hasHeaderBool\u0026\u0026this.isExpandableCard\u0026\u0026!this.noSwitchBool}},methods:{minimalToggle:function(){var t\u003dthis;if(this.localExpanded){this.$refs.panel.addEventListener(\"transitionend\",(function e(n){n.target\u003d\u003d\u003dt.$refs.panel\u0026\u0026(t.isHeaderAtBottom\u003d!1,t.$refs.panel.removeEventListener(\"transitionend\",e))}))}else this.isHeaderAtBottom\u003d!0;this.toggle(!0)},minimalOpen:function(){this.open(),this.isHeaderAtBottom\u003d!0},minimalClose:function(){this.close(),this.isHeaderAtBottom\u003d!1}},created:function(){this.isHeaderAtBottom\u003dthis.localExpanded}},Hn,[],!1,null,\"6cec1f15\",null);const Rn\u003dqe({components:{nestedPanel:Mn,minimalPanel:Dn.exports},props:{panelId:{type:String,default:null},type:{type:String,default:null}},computed:{isMinimal:function(){return\"minimal\"\u003d\u003d\u003dthis.type}}},En,[],!1,null,null,null).exports;var jn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"annotate-image-wrapper\",t.addClass]},[n(\"img\",{ref:\"pic\",staticClass:\"annotate-image\",attrs:{src:t.src,alt:t.alt,width:t.computedWidth,height:t.computedHeight,loading:t.computedLoadType},on:{\"~load\":function(e){return t.computeWidthAndHeight.apply(null,arguments)}}}),t._v(\" \"),n(\"div\",{staticStyle:{top:\"0\",left:\"0\",height:\"0\"}},[t._t(\"default\")],2)])};jn._withStripped\u003d!0;const In\u003dqe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:\"\"},width:{type:String,default:\"\"},lazy:{type:Boolean,default:!1},addClass:{type:String,default:\"\"}},computed:{hasWidth:function(){return\"\"!\u003d\u003dthis.width},hasHeight:function(){return\"\"!\u003d\u003dthis.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight},computedHeight:function(){return this.heightFromWidth},computedLoadType:function(){return this.lazy?\"lazy\":\"eager\"}},data:function(){return{widthFromHeight:\"\",heightFromWidth:\"\"}},methods:{computeWidthAndHeight:function(){var t\u003dthis.$refs.pic,e\u003dt.naturalHeight,n\u003dt.naturalWidth/e;this.hasWidth?this.heightFromWidth\u003dMath.round(je(this.width)/n).toString():this.hasHeight\u0026\u0026(this.widthFromHeight\u003dMath.round(je(this.height)*n).toString(),this.heightFromWidth\u003dthis.height)}},provide:function(){return{width:this.width,height:this.height,src:this.src}}},jn,[],!1,null,null,null).exports;var qn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[t.hasBottomText\u0026\u0026t.hasLabel?n(\"div\",{staticClass:\"legend-wrapper\"},[n(\"div\",{staticClass:\"text-header\"},[t._v(\"\\n \"+t._s(t.computedBottomHeader)+\"\\n \")]),t._v(\" \"),t.hasContent?n(\"div\",[t._t(\"content\")],2):t._e()]):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"annotate-point\"},[t.isMounted?n(\"div\",{staticClass:\"popover-annotation\"},[n(\"div\",{style:t.pointPosition},[t.isMounted?n(\"v-popover\",{attrs:{placement:t.placement,delay:0,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,distance:t.computeDistance,disabled:!t.hasPopover,skidding:t.computeSkidding,\"arrow-padding\":t.computeArrowPadding,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[t.hasContent||t.hasHeader?n(\"div\",{staticClass:\"popover-container\"},[t.hasHeader?n(\"h3\",{staticClass:\"popover-header\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),t.hasContent?n(\"div\",{staticClass:\"popover-body\"},[t._t(\"content\")],2):t._e()]):t._e()]},proxy:!0}],null,!0)},[n(\"div\",{staticClass:\"hover-wrapper\"},[t._t(\"default\",(function(){return[n(\"button\",{staticClass:\"hover-point\",style:t.pointStyle})]})),t._v(\" \"),n(\"div\",{staticClass:\"hover-label\",style:t.labelStyle},[t._t(\"label\")],2)],2)]):t._e()],1)]):t._e()])])};qn._withStripped\u003d!0;const Wn\u003dqe({props:{content:{type:String,default:\"\"},header:{type:String,default:\"\"},placement:{type:String,default:\"top\"},x:{type:String,default:null},y:{type:String,default:null},color:{type:String,default:\"green\"},textColor:{type:String,default:\"black\"},fontSize:{type:String,default:\"14\"},opacity:{type:String,default:\"0.3\"},size:{type:String,default:\"40\"},label:{type:String,default:\"\"},legend:{type:String,default:\"popover\"},trigger:{type:String,default:\"click\"}},data:function(){return{targetEl:{},isMounted:!1,width:this.width,height:this.height,src:this.src}},inject:[\"width\",\"height\",\"src\"],computed:{pointPosition:function(){var t\u003dthis;this.computeImage((function(){t.width\u003dt.parentEl.offsetWidth,t.height\u003dt.parentEl.offsetHeight}));var e\u003d100*(this.toDecimal(this.x)-this.size/2/this.width),n\u003d100*(this.toDecimal(this.y)-this.size/2/this.height);return{left:\"\".concat(e,\"%\"),top:\"\".concat(n,\"%\"),position:\"absolute\",pointerEvents:\"all\"}},pointStyle:function(){var t\u003dthis.hasPopover?\"pointer\":\"default\";return{backgroundColor:this.color,opacity:this.opacity,width:\"\".concat(this.size,\"px\"),height:\"\".concat(this.size,\"px\"),cursor:t}},labelStyle:function(){return{fontSize:\"\".concat(Math.min(this.fontSize,this.size),\"px\"),color:this.textColor}},triggers:function(){return this.trigger.split(\" \")},computeDistance:function(){return\"top\"\u003d\u003d\u003dthis.placement?je(this.size*(2/3)):je(this.size/10)},computeSkidding:function(){return\"left\"\u003d\u003d\u003dthis.placement||\"right\"\u003d\u003d\u003dthis.placement?-je(this.size/4):0},computeArrowPadding:function(){return\"left\"\u003d\u003d\u003dthis.placement||\"right\"\u003d\u003d\u003dthis.placement?je(this.size/2):0},hasHeader:function(){return!!this.$scopedSlots.header},hasContent:function(){return!!this.$scopedSlots.content},hasWidth:function(){return\"\"!\u003d\u003dthis.width},hasHeight:function(){return\"\"!\u003d\u003dthis.height},hasLabel:function(){return!!this.$scopedSlots.label},hasBottomText:function(){return\"bottom\"\u003d\u003d\u003dthis.legend||\"both\"\u003d\u003d\u003dthis.legend},hasPopover:function(){return(this.hasContent||this.hasHeader)\u0026\u0026(\"popover\"\u003d\u003d\u003dthis.legend||\"both\"\u003d\u003d\u003dthis.legend)},computedBottomHeader:function(){return\"\"!\u003d\u003dthis.label\u0026\u0026\"\"\u003d\u003d\u003dthis.header?this.label:\"\"\u003d\u003d\u003dthis.label\u0026\u0026\"\"!\u003d\u003dthis.header?this.header:\"\".concat(this.label,\": \").concat(this.header)}},methods:{computeImage:function(t){var e\u003dnew Image;e.onload\u003dfunction(){t()},e.src\u003dthis.src},toDecimal:function(t){return parseFloat(t)/100}},mounted:function(){this.targetEl\u003dthis.$el,this.isMounted\u003d!0,this.parentEl\u003dthis.$el.parentElement.parentElement.querySelector(\".annotate-image\")}},qn,[],!1,null,null,null).exports;var Fn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:[\"image-wrapper\",t.addClass]},[n(\"img\",{ref:\"pic\",staticClass:\"img-fluid rounded\",attrs:{src:t.src,alt:t.alt,width:t.computedWidth,height:t.computedHeight,loading:t.computedLoadType},on:{\"~load\":function(e){return t.computeWidthAndHeight.apply(null,arguments)}}}),t._v(\" \"),n(\"span\",{staticClass:\"image-caption\"},[t._t(\"default\")],2)])};Fn._withStripped\u003d!0;const Vn\u003dqe({props:{src:{type:String,default:null},alt:{type:String,default:null},height:{type:String,default:\"\"},width:{type:String,default:\"\"},lazy:{type:Boolean,default:!1},addClass:{type:String,default:\"\"}},computed:{hasWidth:function(){return\"\"!\u003d\u003dthis.width},hasHeight:function(){return\"\"!\u003d\u003dthis.height},computedWidth:function(){return this.hasWidth?this.width:this.widthFromHeight},computedHeight:function(){return this.heightFromWidth},computedLoadType:function(){return this.lazy?\"lazy\":\"eager\"}},data:function(){return{widthFromHeight:\"\",heightFromWidth:\"\"}},methods:{computeWidthAndHeight:function(){var t\u003dthis.$refs.pic,e\u003dt.naturalHeight,n\u003dt.naturalWidth/e;this.hasWidth?this.heightFromWidth\u003dMath.round(je(this.width)/n).toString():this.hasHeight\u0026\u0026(this.widthFromHeight\u003dMath.round(je(this.height)*n).toString(),this.heightFromWidth\u003dthis.height)}}},Fn,[],!1,null,null,null).exports;var Un\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"quiz-container\",t.addClass]},[n(\"transition\",{attrs:{name:\"intro-outro-card\"},on:{\"after-leave\":t.showFirstQuestion}},[3\u003d\u003d\u003dt.state?n(\"div\",{staticClass:\"card intro-outro-card\"},[n(\"div\",{staticClass:\"card-body\"},[t._t(\"intro\",(function(){return[n(\"h4\",[t._v(\"\\n Click start to begin\\n \")])]})),t._v(\" \"),n(\"h5\",[t._v(t._s(t.questions.length)+\" questions\")]),t._v(\" \"),n(\"hr\"),t._v(\" \"),n(\"button\",{staticClass:\"btn btn-primary d-inline-block\",attrs:{type:\"button\"},on:{click:t.begin}},[t._v(\"\\n Start\\n \")])],2)]):t._e()]),t._v(\" \"),n(\"transition\",{attrs:{name:\"intro-outro-card\"}},[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:4\u003d\u003d\u003dt.state,expression:\"state \u003d\u003d\u003d 4\"}],staticClass:\"progress intro-outro-card\",staticStyle:{height:\"1px\"}},[n(\"div\",{staticClass:\"progress-bar progress-bar-z\",style:{width:t.currentQuestion/t.questions.length*100+\"%\"},attrs:{role:\"progressbar\",\"aria-valuemin\":\"0\",\"aria-valuemax\":t.questions.length,\"aria-valuenow\":t.currentQuestion}})])]),t._v(\" \"),t._t(\"default\"),t._v(\" \"),n(\"transition\",{attrs:{name:\"intro-outro-card\"},on:{\"after-enter\":t.setScoreCircleStyles,\"after-leave\":t.showFirstQuestion}},[5\u003d\u003d\u003dt.state?n(\"div\",{staticClass:\"card intro-outro-card\"},[n(\"div\",{staticClass:\"card-body\"},[n(\"h4\",{staticClass:\"mb-3\"},[t._v(\"\\n \"+t._s(t.scoreText)+\"\\n \")]),t._v(\" \"),n(\"svg\",{attrs:{viewBox:\"0 0 100 100\",width:\"120px\",height:\"120px\"}},[n(\"circle\",{staticClass:\"score-background-circle\",attrs:{cx:\"50\",cy:\"50\",r:\"42\"}}),t._v(\" \"),n(\"circle\",{ref:\"score\",staticClass:\"score-circle\",attrs:{cx:\"50\",cy:\"50\",r:\"42\",transform:\"rotate(-90, 50, 50)\",\"stroke-dashoffset\":\"264\"}}),t._v(\" \"),n(\"text\",{staticClass:\"score\",attrs:{x:\"22\",y:\"57\",textLength:\"56\"}},[t._v(t._s(t.score)+\" / \"+t._s(t.questions.length))])]),t._v(\" \"),n(\"hr\"),t._v(\" \"),n(\"button\",{staticClass:\"btn btn-outline-primary\",attrs:{type:\"button\"},on:{click:t.begin}},[t._v(\"\\n Retry\\n \")])])]):t._e()])],2)};Un._withStripped\u003d!0;const Qn\u003dqe({name:\"Quiz\",props:{addClass:{type:String,default:null}},data:function(){return{currentQuestion:0,questions:[],score:0,state:3}},provide:function(){return{questions:this.questions,gotoNextQuestion:this.gotoNextQuestion,showNextQuestion:this.showNextQuestion}},computed:{scoreText:function(){return this.score/this.questions.length\u003e.5?\"Well done!\":\"Try again?\"}},methods:{gotoNextQuestion:function(){this.questions[this.currentQuestion-1].hide(),this.currentQuestion+\u003d1},showNextQuestion:function(){this.currentQuestion\u003c\u003dthis.questions.length?this.questions[this.currentQuestion-1].show():this.complete()},begin:function(){this.currentQuestion\u003d1,this.score\u003d0,this.state\u003d4},showFirstQuestion:function(){this.questions.length\u0026\u0026this.questions[0].show()},reset:function(){this.questions.forEach((function(t){return t.reset()}))},complete:function(){this.score\u003dthis.questions.filter((function(t){return 2\u003d\u003d\u003dt.qState.state})).length,this.state\u003d5,this.reset()},setScoreCircleStyles:function(){var t\u003dthis.score/this.questions.length;this.$refs.score.style.strokeDashoffset\u003d264*(1-t),this.$refs.score.style.stroke\u003d\"#51c2f8\"}}},Un,[],!1,null,\"2b2275c0\",null).exports;var Xn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"transition\",{attrs:{name:t.questions?\"question\":null},on:{\"after-leave\":t.showNextQuestion}},[t.active?n(\"div\",{class:[\"card\",\"question\",t.shakeClass,t.addClass]},[t.$scopedSlots.header?n(\"div\",{staticClass:\"card-header alert-light border-bottom border-light text-dark\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"card-body\"},[t._t(\"default\"),t._v(\" \"),t.isTextQuestion()?n(\"div\",{staticClass:\"mb-2\"},[n(\"textarea\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.textareaText,expression:\"textareaText\"}],staticClass:\"form-control\",attrs:{disabled:t.qState.answered},domProps:{value:t.textareaText},on:{input:function(e){e.target.composing||(t.textareaText\u003de.target.value)}}}),t._v(\" \"),t.qState.answered?n(\"div\",[n(\"hr\"),t._v(\" \"),t.keywordsSplitTrimmed().length?n(\"strong\",[t._v(\"\\n Keywords: \\n \"),t._l(t.keywordsSplitTrimmed(),(function(e){return n(\"span\",{key:e,staticClass:\"badge rounded-pill bg-light text-dark fw-normal\"},[t._v(\"\\n \"+t._s(e)+\"\\n \")])}))],2):t._e()]):t._e()]):t._e(),t._v(\" \"),t.qState.answered\u0026\u0026t.isTextQuestion()?n(\"div\",{staticClass:\"answer\"},[t._t(\"answer\")],2):t._e(),t._v(\" \"),t.showHint?n(\"box\",{staticClass:\"mb-0 mt-3\",attrs:{type:\"tip\"}},[t._t(\"hint\")],2):t._e()],2),t._v(\" \"),t.showCardFooter?n(\"div\",{staticClass:\"card-footer alert-light border-top border-light text-dark\"},[1\u003d\u003d\u003dt.qState.state?n(\"i\",{staticClass:\"fa fa-times text-danger border-danger result-icon\"}):2\u003d\u003d\u003dt.qState.state?n(\"i\",{staticClass:\"fa fa-check text-success border-success result-icon\"}):t._e(),t._v(\" \"),n(\"transition-group\",{staticClass:\"float-end\",attrs:{name:\"q-btn\",tag:\"div\"}},[t.$scopedSlots.hint\u0026\u0026!t.showHint?n(\"button\",{key:\"hint\",staticClass:\"btn btn-success q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){t.showHint\u003d!0}}},[t._v(\"\\n Hint\\n \")]):t._e(),t._v(\" \"),0!\u003d\u003dt.qState.state||t.isTextWithoutKeywords()\u0026\u0026!t.$scopedSlots.answer?t._e():n(\"button\",{key:\"check\",staticClass:\"btn btn-primary q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){return t.checkAnswer(!!t.questions)}}},[t._v(\"\\n Check\\n \")]),t._v(\" \"),0!\u003d\u003dt.qState.state\u0026\u0026t.questions?n(\"button\",{key:\"active\",staticClass:\"btn btn-primary q-btn ms-1\",attrs:{type:\"button\"},on:{\"~click\":function(e){return t.gotoNextQuestion.apply(null,arguments)}}},[t._v(\"\\n Next\\n \")]):t._e(),t._v(\" \"),t.retryState?n(\"button\",{key:\"show\",staticClass:\"btn btn-info q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){return t.checkAnswer(!0)}}},[t._v(\"\\n Show\\n \")]):t._e(),t._v(\" \"),t.retryState?n(\"button\",{key:\"retry\",staticClass:\"btn btn-primary q-btn ms-1\",attrs:{type:\"button\"},on:{click:function(e){return t.checkAnswer(!1)}}},[t._v(\"\\n Retry\\n \")]):t._e()])],1):t._e()]):t._e()])};Xn._withStripped\u003d!0;function Yn(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Kn(t){for(var e\u003d1;e\u003carguments.length;e++){var i\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?Yn(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Yn(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}const Gn\u003dqe({name:\"Question\",mixins:[{data:function(){return{active:!0}},inject:{questions:{default:void 0},gotoNextQuestion:{default:void 0},showNextQuestion:{default:\"\"}},methods:{show:function(){this.active\u003d!0},hide:function(){this.active\u003d!1},reset:function(){this.active\u003d!1,this.qState.answered\u003d!1,this.qState.state\u003d0,this.showHint\u003d!1,this.textareaText\u0026\u0026(this.textareaText\u003d\"\"),this.answers\u0026\u0026this.answers.splice(0,this.answers.length)}},created:function(){this.questions\u0026\u0026(this.active\u003d!1,this.questions.push(this))}}],props:{type:{type:String,default:\"\"},addClass:{type:String,default:null},keywords:{type:String,default:\"\"},threshold:{type:[String,Number],default:1},noIntermediateResult:{type:Boolean}},computed:{retryState:function(){return 1\u003d\u003d\u003dthis.qState.state\u0026\u0026!this.qState.answered\u0026\u0026!this.questions},showCardFooter:function(){var t\u003d!this.$scopedSlots.hint||this.showHint;return!(this.isTextWithoutKeywords()\u0026\u0026t\u0026\u0026this.qState.answered\u0026\u0026!this.questions)}},data:function(){var t\u003d{qState:{state:0,answered:!1},showHint:!1,shakeClass:null};return this.isMcqOrCheckboxQuestion()||this.isBlanksQuestion()?Kn({answers:[]},t):this.isTextQuestion()?Kn({textareaText:\"\"},t):t},provide:function(){return this.isMcqOrCheckboxQuestion()?{answers:this.answers,qOptionType:this.type,qState:this.qState}:this.isBlanksQuestion()?{answers:this.answers,qOptionType:this.type,qState:this.qState,noIntermediateResult:this.noIntermediateResult}:void 0},methods:{keywordsSplitTrimmed:function(){return this.keywords.split(\",\").filter((function(t){return\"\"!\u003d\u003dt.trim()}))},isMcqOrCheckboxQuestion:function(){return\"mcq\"\u003d\u003d\u003dthis.type||\"checkbox\"\u003d\u003d\u003dthis.type},isBlanksQuestion:function(){return\"blanks\"\u003d\u003d\u003dthis.type},isTextQuestion:function(){return\"text\"\u003d\u003d\u003dthis.type},isTextWithoutKeywords:function(){return this.isTextQuestion()\u0026\u0026!this.keywords},shakeCard:function(){var t\u003dthis;this.shakeClass\u003d\"shake\",setTimeout((function(){t.shakeClass\u003dnull}),800)},markAsCorrect:function(){this.qState.state\u003d2,this.qState.answered\u003d!0},markAsWrong:function(t){this.qState.state\u003d1,t?this.qState.answered\u003d!0:this.shakeCard()},checkMcqAnswer:function(t){var e\u003dthis.answers.find((function(t){return t.selected}));e?e.$props.correct?this.markAsCorrect():this.markAsWrong(t):this.shakeCard()},checkCheckboxAnswer:function(t){this.answers.filter((function(t){return t.answeredCorrectly})).length\u003d\u003d\u003dthis.answers.length?this.markAsCorrect():this.markAsWrong(t)},checkBlanksAnswer:function(t){for(var e\u003d0,n\u003d0;n\u003cthis.answers.length;n+\u003d1)this.answers[n].checkAnswer(),this.answers[n].ansIsCorrect\u0026\u0026(e+\u003d1);e/this.answers.length\u003e\u003dthis.threshold?this.markAsCorrect():this.markAsWrong(t)},checkTextAnswer:function(t){for(var e\u003dthis.textareaText.toLowerCase(),n\u003dthis.keywordsSplitTrimmed(),i\u003d0,o\u003d0;o\u003cn.length;o+\u003d1)e.includes(n[o].toLowerCase())\u0026\u0026(i+\u003d1);i/n.length\u003e\u003dthis.threshold?this.markAsCorrect():this.markAsWrong(t)},checkAnswer:function(t){\"mcq\"\u003d\u003d\u003dthis.type?this.checkMcqAnswer(t):\"checkbox\"\u003d\u003d\u003dthis.type?this.checkCheckboxAnswer(t):\"blanks\"\u003d\u003d\u003dthis.type?this.checkBlanksAnswer(t):this.isTextQuestion()?this.checkTextAnswer(t):this.markAsCorrect()}}},Xn,[],!1,null,\"ae369d74\",null).exports;var Zn\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return\"mcq\"\u003d\u003d\u003dt.qOptionType?n(\"div\",{class:[\"form-control\",t.hintClass],on:{click:t.toggleRadioOn,mouseover:function(e){t.hover\u003d!0},mouseleave:function(e){t.hover\u003d!1}}},[n(\"div\",{class:[\"row\",{disabled:t.qState.answered}]},[n(\"div\",{staticClass:\"col-auto p-0\"},[n(\"svg\",{staticClass:\"radio-svg\",attrs:{viewBox:\"0 0 100 100\"}},[n(\"circle\",{attrs:{cx:\"50\",cy:\"50\",r:\"47\",fill:\"none\",stroke:\"black\",\"stroke-width\":\"4\"}}),t._v(\" \"),n(\"circle\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.selected,expression:\"selected\"}],attrs:{cx:\"50\",cy:\"50\",r:\"25\",fill:\"dodgerblue\"}})])]),t._v(\" \"),n(\"div\",{staticClass:\"col content\"},[t._t(\"default\")],2),t._v(\" \"),n(\"div\",{staticClass:\"col-1\"},[t.qState.answered?n(\"div\",[t.correct?n(\"i\",{staticClass:\"fa fa-check text-success\",class:{\"align-bottom\":t.$scopedSlots.reason}}):n(\"i\",{staticClass:\"fa fa-times text-danger\",class:{\"align-bottom\":t.$scopedSlots.reason}})]):t._e()])]),t._v(\" \"),t.qState.answered\u0026\u0026t.$scopedSlots.reason?n(\"div\",[n(\"hr\"),t._v(\" \"),n(\"div\",{staticClass:\"reason\"},[t._t(\"reason\")],2)]):t._e()]):\"checkbox\"\u003d\u003d\u003dt.qOptionType?n(\"div\",{class:[\"form-control\",t.hintClass],on:{click:t.toggleCheckbox,mouseover:function(e){t.hover\u003d!0},mouseleave:function(e){t.hover\u003d!1}}},[n(\"label\",{class:[\"row\",\"checkbox-label\",\"m-0\",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.selected,expression:\"selected\"}],staticClass:\"checkbox\",attrs:{disabled:t.qState.answered,type:\"checkbox\",onclick:\"event.stopPropagation()\"},domProps:{checked:Array.isArray(t.selected)?t._i(t.selected,null)\u003e-1:t.selected},on:{change:function(e){var n\u003dt.selected,i\u003de.target,o\u003d!!i.checked;if(Array.isArray(n)){var r\u003dt._i(n,null);i.checked?r\u003c0\u0026\u0026(t.selected\u003dn.concat([null])):r\u003e-1\u0026\u0026(t.selected\u003dn.slice(0,r).concat(n.slice(r+1)))}else t.selected\u003do}}}),t._v(\" \"),n(\"div\",{staticClass:\"col content\"},[t._t(\"default\")],2),t._v(\" \"),n(\"div\",{staticClass:\"col-auto\"},[t.qState.answered?n(\"div\",[t.correct?n(\"i\",{staticClass:\"fa fa-check text-success\",class:{\"align-bottom\":t.$scopedSlots.reason}}):n(\"i\",{staticClass:\"fa fa-times text-danger\",class:{\"align-bottom\":t.$scopedSlots.reason}})]):t._e()])]),t._v(\" \"),t.qState.answered\u0026\u0026t.$scopedSlots.reason?n(\"div\",[n(\"hr\"),t._v(\" \"),n(\"div\",{staticClass:\"reason\"},[t._t(\"reason\")],2)]):t._e()]):\"blanks\"\u003d\u003d\u003dt.qOptionType?n(\"div\",{class:[\"form-control\",\"blanks-form-control\",t.hintClass]},[n(\"label\",{class:[\"row\",\"m-0\",{disabled:t.qState.answered}],on:{click:function(t){t.stopPropagation()}}},[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.inputText,expression:\"inputText\"}],staticClass:\"form-control\",attrs:{disabled:t.qState.answered},domProps:{value:t.inputText},on:{input:function(e){e.target.composing||(t.inputText\u003de.target.value)}}}),t._v(\" \"),n(\"div\",{staticClass:\"col-auto\"},[t.qState.answered?n(\"div\",[t.ansIsCorrect?n(\"i\",{staticClass:\"fa fa-check text-success\"}):n(\"i\",{staticClass:\"fa fa-times text-danger blanks-cross\"})]):t._e(),t._v(\" \"),t.isIntermediateResult()?n(\"div\",[t.ansIsCorrect?n(\"i\",{staticClass:\"fa fa-check text-success\"}):n(\"i\",{staticClass:\"fa fa-times text-danger blanks-cross\"})]):t._e()]),t._v(\" \"),t.qState.answered?n(\"div\",{staticClass:\"col-auto blanks-keywords\"},[t.keywordsSplitTrimmed().length?n(\"strong\",[t._v(\"\\n Keywords: \\n \"),t._l(t.keywordsSplitTrimmed(),(function(e){return n(\"span\",{key:e,staticClass:\"badge rounded-pill bg-light text-dark fw-normal\"},[t._v(\"\\n \"+t._s(e)+\"\\n \")])}))],2):n(\"strong\",[t._v(\"No answer checking keywords provided\")])]):t._e()]),t._v(\" \"),t.qState.answered\u0026\u0026t.$scopedSlots.reason?n(\"div\",[n(\"div\",{staticClass:\"reason blanks-reason\"},[t._t(\"reason\")],2)]):t._e()]):t._e()};Zn._withStripped\u003d!0;const Jn\u003dqe({name:\"McqOption\",props:{correct:{type:Boolean,default:!1},keywords:{type:String,default:\"\"}},data:function(){return{selected:!1,hover:!1,inputText:\"\",ansIsCorrect:!1}},inject:{answers:{default:void 0},qOptionType:{default:void 0},qState:{default:void 0},noIntermediateResult:{default:void 0}},computed:{hintClass:function(){return this.qState.answered?this.correct?\"success\":\"danger\":this.selected||this.hover?\"alert-light text-dark border border-secondary\":\"\"},answeredCorrectly:function(){return this.correct\u0026\u0026this.selected||!this.correct\u0026\u0026!this.selected}},methods:{checkAnswer:function(){var t\u003d!1,e\u003dthis.inputText.toLowerCase().trim(),n\u003dthis.keywords.toLowerCase().split(\",\").filter((function(t){return\"\"!\u003d\u003dt.trim()}));this.keywords.length||(t\u003d!0);for(var i\u003d0;i\u003cn.length;i+\u003d1)if(e\u003d\u003d\u003dn[i].trim()){t\u003d!0;break}this.ansIsCorrect\u003dt},isIntermediateResult:function(){return!this.noIntermediateResult\u0026\u00261\u003d\u003d\u003dthis.qState.state\u0026\u0026!this.qState.answered},isBlanksQuestion:function(){return\"blanks\"\u003d\u003d\u003dthis.type},keywordsSplitTrimmed:function(){return this.keywords.split(\",\").filter((function(t){return\"\"!\u003d\u003dt.trim()}))},toggleRadioOn:function(){this.qState.answered||this.selected||(this.answers.forEach((function(t){t.selected\u003d!1})),this.selected\u003d!0)},toggleCheckbox:function(){this.qState.answered||(this.selected\u003d!this.selected)}},created:function(){this.answers.push(this)}},Zn,[],!1,null,\"1074287c\",null).exports;var ti\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{staticClass:\"dropdown\",staticStyle:{position:\"relative\"}},[t.algolia?n(\"div\",{attrs:{id:\"algolia-search-input\"}}):[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:t.value,expression:\"value\"}],staticClass:\"form-control\",attrs:{\"data-bs-toggle\":\"dropdown\",type:\"text\",placeholder:t.placeholder,autocomplete:\"off\"},domProps:{value:t.value},on:{input:[function(e){e.target.composing||(t.value\u003de.target.value)},t.update],keyup:[function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"up\",38,e.key,[\"Up\",\"ArrowUp\"])?null:t.up.apply(null,arguments)},function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"down\",40,e.key,[\"Down\",\"ArrowDown\"])?null:t.down.apply(null,arguments)}],keydown:[function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"enter\",13,e.key,\"Enter\")?null:t.hit.apply(null,arguments)},function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"])?null:t.reset.apply(null,arguments)}],blur:function(e){t.showDropdown\u003d!1}}}),t._v(\" \"),n(\"div\",{staticClass:\"form-control placeholder-div-hidden\"},[t._v(\"\\n \"+t._s(t.placeholder)+\"\\n \")])],t._v(\" \"),n(\"ul\",{ref:\"dropdown\",class:t.dropdownMenuClasses},t._l(t.items,(function(e,i){return n(\"li\",{key:i,class:{\"table-active\":t.isActive(i)}},[n(\"a\",{staticClass:\"dropdown-item\",on:{mousedown:function(e){return e.preventDefault(),t.hit.apply(null,arguments)},mousemove:function(e){return t.setActive(i)}}},[n(\"searchbar-page-item\",{attrs:{item:e,value:t.value}})],1)])})),0)],2)};function ei(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n\u003dnull\u003d\u003dt?null:\"undefined\"!\u003dtypeof Symbol\u0026\u0026t[Symbol.iterator]||t[\"@@iterator\"];if(null!\u003dn){var i,o,r,s,a\u003d[],l\u003d!0,c\u003d!1;try{if(r\u003d(n\u003dn.call(t)).next,0\u003d\u003d\u003de){if(Object(n)!\u003d\u003dn)return;l\u003d!1}else for(;!(l\u003d(i\u003dr.call(n)).done)\u0026\u0026(a.push(i.value),a.length!\u003d\u003de);l\u003d!0);}catch(t){c\u003d!0,o\u003dt}finally{try{if(!l\u0026\u0026null!\u003dn.return\u0026\u0026(s\u003dn.return(),Object(s)!\u003d\u003ds))return}finally{if(c)throw o}}return a}}(t,e)||bn(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}ti._withStripped\u003d!0;var ni\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.item.heading?n(\"div\",{staticClass:\"heading\"},[n(\"i\",{staticClass:\"fa fa-hashtag\"}),t._v(\" \"),n(\"div\",{staticClass:\"heading-text\"},[n(\"span\",{domProps:{innerHTML:t._s(t.highlight(t.item.heading.text,t.value))}}),t._v(\" \"),t._l(t.item.keywords,(function(e,i){return n(\"div\",{key:i,staticClass:\"keyword-text\",domProps:{innerHTML:t._s(t.highlight(e,t.value))}})}))],2)]):n(\"div\",[n(\"span\",{staticClass:\"page-title\",domProps:{innerHTML:t._s(t.highlight(t.item.title,t.value))}}),t._v(\" \"),t.item.keywords?n(\"br\"):t._e(),t._v(\" \"),t.item.keywords?n(\"small\",{domProps:{innerHTML:t._s(t.highlight(t.item.keywords,t.value))}}):t._e(),t._v(\" \"),n(\"hr\",{staticClass:\"page-headings-separator\"})])};ni._withStripped\u003d!0;const ii\u003dqe({props:{item:{type:Object,default:null},value:{type:String,default:\"\"}},methods:{highlight:function(t,e){for(var n,i\u003d(n\u003dfunction(){var n\u003de.split(\" \").filter((function(t){return\"\"!\u003d\u003dt})).map((function(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$\u0026\")})).map((function(t){return new RegExp(\"(\".concat(t,\")\"),\"gi\")})),i\u003d[];return n.forEach((function(e){for(var n\u003de.exec(t);null!\u003d\u003dn\u0026\u0026n.index!\u003d\u003de.lastIndex;)i.push({start:n.index,end:e.lastIndex}),n\u003de.exec(t)})),i}()).length\u003c\u003d1?n:n.sort((function(t,e){return t.start-e.start})).reduce((function(t,e){var n\u003dt[t.length-1];return!n||n.end\u003ce.start?t.push(e):n.end\u003ce.end\u0026\u0026(n.end\u003de.end),t}),[]),o\u003dt,r\u003di.length-1;r\u003e\u003d0;r-\u003d1)o\u003d\"\".concat(o.slice(0,i[r].start),\"\u003cmark\u003e\")+\"\".concat(o.slice(i[r].start,i[r].end),\"\u003c/mark\u003e\")+\"\".concat(o.slice(i[r].end));return o}}},ni,[],!1,null,\"98afe086\",null).exports;const oi\u003dqe({created:function(){this.items\u003dthis.primitiveData},props:{data:{type:Array,default:function(){return[]}},limit:{type:Number,default:8},async:{type:String,default:\"\"},keyProp:{type:String,default:null},onHit:{type:Function,default:function(t){this.reset(),this.value\u003dt}},placeholder:{type:String,default:\"Search\"},delay:{type:Number,default:200},menuAlignRight:{type:Boolean,default:!1},algolia:{type:Boolean,default:!1}},data:function(){return{value:\"\",showDropdown:!1,noResults:!0,current:0,items:[]}},computed:{primitiveData:function(){function t(t,e){var n\u003dt.join(\" \");return e.reduce((function(t,e){var i\u003dn.match(e);return t+(i?i.length:0)}),0)}if(this.value.length\u003c2||!this.data)return[];var e\u003d[],n\u003dthis.value.split(\" \").filter((function(t){return\"\"!\u003d\u003dt})).map((function(t){return t.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$\u0026\")})).map((function(t){return new RegExp(t,\"ig\")}));return this.data.forEach((function(i){var o\u003di.headings,r\u003di.src,s\u003di.title,a\u003di.headingKeywords,l\u003di.frontmatterKeywords||\"\",c\u003ds||r.substring(0,r.lastIndexOf(\".\")),u\u003dt([c,l].concat(_n(Object.values(o)),_n(Object.values(a))),n);if(u\u003e0){var d\u003d[];Object.entries(o).forEach((function(e,i){var o\u003dei(e,2),s\u003do[0],u\u003do[1],h\u003dn.some((function(t){return t.test(u)})),p\u003da[s]\u0026\u0026a[s].some((function(t){return n.some((function(e){return e.test(t)}))}));if(h||p){var f\u003dt([u].concat(_n(a[s]||[])),n);(0!\u003d\u003di||u!\u003d\u003dc||l.length)\u0026\u0026d.push({heading:{id:s,text:u},keywords:a[s],src:r,totalMatches:f})}})),d.sort((function(t,e){return e.totalMatches-t.totalMatches})),e.push({headings:d,keywords:l,src:r,title:c,totalMatches:u})}})),e.sort((function(t,e){return e.totalMatches-t.totalMatches})).flatMap((function(t){return t.headings?[t].concat(_n(t.headings)):t}))},dropdownMenuClasses:function(){return[\"dropdown-menu\",\"search-dropdown-menu\",{show:this.showDropdown},{\"d-none\":!this.showDropdown},{\"dropdown-menu-end\":this.menuAlignRight}]}},methods:{update:function(){return this.value?(this.data\u0026\u0026(this.items\u003dthis.primitiveData,this.showDropdown\u003dthis.items.length\u003e0),this.async\u0026\u0026this.query(),!0):(this.reset(),!1)},query:function(t,e){var n,i\u003darguments.length\u003e2\u0026\u0026void 0!\u003d\u003darguments[2]?arguments[2]:100;function o(t){return/^[0-9]+$/.test(t)?Number(t)||1:null}return function(){for(var r\u003dthis,s\u003darguments.length,a\u003dnew Array(s),l\u003d0;l\u003cs;l++)a[l]\u003darguments[l];n\u0026\u0026clearTimeout(n),n\u003dsetTimeout((function(){t.apply(r,a)}),o(e)||o(this[e])||i)}}((function(){var t\u003dthis;(function(t){var e\u003dnew window.XMLHttpRequest,n\u003d{},i\u003d{then:function(t,e){return i.done(t).fail(e)},catch:function(t){return i.fail(t)},always:function(t){return i.done(t).fail(t)}};return[\"done\",\"fail\"].forEach((function(t){n[t]\u003d[],i[t]\u003dfunction(e){return e instanceof Function\u0026\u0026n[t].push(e),i}})),i.done(JSON.parse),e.onreadystatechange\u003dfunction(){if(4\u003d\u003d\u003de.readyState){var t\u003d{status:e.status};if(200\u003d\u003d\u003de.status)try{var i\u003de.responseText;for(var o in n.done){var r\u003dn.done[o](i);void 0!\u003d\u003dr\u0026\u0026(i\u003dr)}}catch(t){n.fail.forEach((function(e){return e(t)}))}else n.fail.forEach((function(e){return e(t)}))}},e.open(\"GET\",t),e.setRequestHeader(\"Accept\",\"application/json\"),e.send(),i})(this.async+this.value).then((function(e){t.items\u003d(t.keyProp?e[t.keyProp]:e).slice(0,t.limit),t.showDropdown\u003dt.items.length}))}),\"delay\",200),reset:function(){this.items\u003d[],this.value\u003d\"\",this.loading\u003d!1,this.showDropdown\u003d!1},setActive:function(t){this.current\u003dt},isActive:function(t){return this.current\u003d\u003d\u003dt},hit:function(t){t.preventDefault(),this.onHit(this.items[this.current],this)},down:function(){this.current\u003cthis.items.length-1\u0026\u0026(this.current+\u003d1,this.scrollListView())},up:function(){this.current\u003e0\u0026\u0026(this.current-\u003d1,this.scrollListView())},scrollListView:function(){var t\u003dthis.$refs.dropdown,e\u003dt.children[this.current],n\u003dt.scrollTop,i\u003dn+t.clientHeight,o\u003de.offsetTop+e.offsetHeight;e.offsetTop\u003cn?t.scrollTop\u003de.offsetTop:o\u003ei\u0026\u0026(t.scrollTop\u003do-t.clientHeight)}},components:{searchbarPageItem:ii}},ti,[],!1,null,\"cea1a814\",null).exports;var ri\u003dfunction(){var t\u003dthis.$createElement,e\u003dthis._self._c||t;return e(\"div\",{staticClass:\"tab-pane active printable-tab-pane\",class:{\"tab-pane-hide\":!this.show},attrs:{role:\"tabpanel\"}},[e(\"div\",{staticClass:\"nav-tabs printable-tab-header\"},[e(\"div\",{ref:\"header\",staticClass:\"nav-link active\"},[this._t(\"header\")],2)]),this._v(\" \"),this._t(\"default\"),this._v(\" \"),e(\"hr\")],2)};ri._withStripped\u003d!0;const si\u003dqe({props:{header:{type:String,default:\"\"},disabled:{type:[Boolean,String],default:!1}},computed:{headerRendered:function(){return this.$refs.header.innerHTML},active:function(){return this._tabset.show\u003d\u003d\u003dthis},index:function(){return this._tabset.tabs.indexOf(this)},show:function(){return this._tabset\u0026\u0026this._tabset.show\u003d\u003d\u003dthis},disabledBool:function(){return Re(this.disabled)}},created:function(){this._ingroup\u003dthis.$parent\u0026\u0026this.$parent._tabgroup;for(var t\u003dthis;t\u0026\u0026!0!\u003d\u003dt._tabset\u0026\u0026t.$parent;)t\u003dt.$parent;t._tabset?(t.tabs.push(this),this._ingroup?~t.headers.indexOf(this.$parent)||t.headers.push(this.$parent):t.headers.push(this),this._tabset\u003dt):this._tabset\u003d{},this._ingroup\u0026\u0026this.$parent.tabs.push(this)},beforeDestroy:function(){if(this._tabset.activeNumber\u003d\u003d\u003dthis.index\u0026\u0026(this._tabset.activeNumber\u003d0),this._ingroup){var t\u003dthis.$parent.tabs.indexOf(this);this.$parent.tabs.splice(t,1)}this._tabset.tabs.splice(this.index,1)}},ri,[],!1,null,\"661c1b61\",null).exports;var ai\u003dfunction(){var t\u003dthis.$createElement,e\u003dthis._self._c||t;return e(\"div\",{staticClass:\"printable-tab-group\"},[e(\"div\",{ref:\"header\",staticClass:\"printable-tab-group-header\"},[this._t(\"header\")],2),this._v(\" \"),this._t(\"default\")],2)};ai._withStripped\u003d!0;const li\u003dqe({props:{disabled:{type:[Boolean,String],default:!1},header:{type:String,default:\"\"}},data:function(){return{tabs:[],show:!1}},computed:{active:function(){return~this.tabs.indexOf(this._tabset.show)},headerRendered:function(){return this.$refs.header.innerHTML},disabledBool:function(){return De(this.disabled)}},created:function(){this._tabgroup\u003d!0;for(var t\u003dthis.$parent\u0026\u0026!0\u003d\u003d\u003dthis.$parent._tabset?this.$parent:{};t\u0026\u0026!t._tabset\u0026\u0026t.$parent;)t\u003dt.$parent;t._tabset?this._tabset\u003dt:(this._tabset\u003d{},this.show\u003d!0)},methods:{blur:function(){this.show\u003d!1},toggle:function(){this.show\u003d!this.show}}},ai,[],!1,null,\"a785351c\",null).exports;var ci\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[t.addClass,\"printable-tabs\"]},[n(\"ul\",{staticClass:\"nav nav-tabs d-print-none\",class:t.getNavStyleClass,attrs:{role:\"tablist\"}},[t._l(t.headers,(function(e,i){return[e._tabgroup?n(\"dropdown\",{key:i,staticClass:\"nav-item\",class:{active:e.active},attrs:{header:e.headerRendered,disabled:e.disabled}},t._l(e.tabs,(function(e,i){return n(\"li\",{key:i},[n(\"a\",{staticClass:\"nav-link\",class:{disabled:e.disabled},attrs:{href:\"#\"},domProps:{innerHTML:t._s(e.headerRendered)},on:{click:function(n){return n.preventDefault(),t.select(e)}}})])})),0):n(\"li\",{key:i,staticClass:\"nav-item\",on:{click:function(n){return n.preventDefault(),t.select(e)}}},[n(\"a\",{staticClass:\"nav-link\",class:{active:e.active,disabled:e.disabledBool},attrs:{href:\"#\"}},[n(\"span\",{domProps:{innerHTML:t._s(e.headerRendered)}})])])]}))],2),t._v(\" \"),n(\"div\",{ref:\"tab-content\",staticClass:\"tab-content\"},[t._t(\"default\")],2)])};ci._withStripped\u003d!0;const ui\u003dqe({components:{dropdown:gn},props:{navStyle:{type:String,default:\"tabs\"},active:{type:String,default:\"0\"},addClass:{type:String,default:\"\"}},data:function(){return{show:null,headers:[],activeNumber:je(this.active),tabs:[]}},created:function(){this._tabset\u003d!0},computed:{getNavStyleClass:function(){return\"nav-\".concat(this.navStyle)}},watch:{activeNumber:function(t){this.show\u003dthis.tabs[t]}},mounted:function(){this.show\u003dthis.tabs[this.activeNumber]},methods:{select:function(t){t.disabled||(this.activeNumber\u003dt.index)}}},ci,[],!1,null,\"70a68808\",null).exports;var di\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:[\"thumb-wrapper\",{\"thumb-circle\":t.circle},t.addClass],style:[t.getBorder,t.getFontSize,t.getFontColor,t.getBgColor]},[t.hasSrc?n(\"img\",{ref:\"pic\",staticClass:\"thumb-image\",attrs:{src:t.src,width:t.computedWidth,height:t.computedHeight,alt:t.alt},on:{\"~load\":function(e){return t.computeImgSize.apply(null,arguments)}}}):t._e(),t._v(\" \"),t._t(\"default\")],2)};di._withStripped\u003d!0;const hi\u003dqe({props:{circle:{type:Boolean,default:!1},addClass:{type:String,default:\"\"},alt:{type:String,default:\"\"},background:{type:String,default:\"\"},border:{type:String,default:\"\"},fontColor:{type:String,default:\"\"},fontSize:{type:String,default:\"\"},size:{type:String,default:\"\"},src:{type:String,default:null},text:{type:String,default:\"\"}},computed:{getBorder:function(){return\"\"\u003d\u003d\u003dthis.border?{}:{border:this.border}},getFontSize:function(){var t\u003dthis.imageSize/2,e\u003dthis.fontSize;return{\"font-size\":\"\".concat(void 0\u003d\u003d\u003de||\"\"\u003d\u003d\u003de?t:e,\"px\")}},getFontColor:function(){return\"\"\u003d\u003d\u003dthis.fontColor?{}:{color:this.fontColor}},getBgColor:function(){return\"\"\u003d\u003d\u003dthis.background?{}:{background:this.background}},hasSrc:function(){return void 0!\u003d\u003dthis.src\u0026\u0026\"\"!\u003d\u003dthis.src},imageSize:function(){return this.size||100}},data:function(){return{computedWidth:\"\",computedHeight:\"\"}},mounted:function(){var t\u003dthis.$el;t.style.width\u003d\"\".concat(this.imageSize,\"px\"),t.style.height\u003d\"\".concat(this.imageSize,\"px\"),t.style.lineHeight\u003d\"\".concat(this.imageSize,\"px\")},methods:{computeImgSize:function(){var t\u003dthis.$refs.pic,e\u003dt.naturalHeight,n\u003dt.naturalWidth,i\u003dMath.min(e,n),o\u003dthis.imageSize/i;this.computedWidth\u003dn*o,this.computedHeight\u003de*o}}},di,[],!1,null,null,null).exports;var pi\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:\"click\"\u003d\u003d\u003dt.trigger?\"trigger-click\":\"trigger\",attrs:{tabindex:\"0\"},on:t._d({},[t.triggerEventType,function(e){return e.stopPropagation(),t.toggle()}])},[\"popover\"\u003d\u003d\u003dt.popoverOrTooltipType?n(\"v-popover\",{attrs:{\"auto-hide\":!t.isInput,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,placement:t.placement,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[n(\"div\",{staticClass:\"popover-container\"},[n(\"portal-target\",{attrs:{name:\"popover:\"+t.target}})],1)]},proxy:!0}],null,!1,1583262462)},[t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):\"tooltip\"\u003d\u003d\u003dt.popoverOrTooltipType?n(\"v-tooltip\",{attrs:{\"auto-hide\":!t.isInput,placement:t.placement,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[n(\"portal-target\",{attrs:{name:\"tooltip:\"+t.target}})]},proxy:!0}])},[t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):n(\"span\",[t._t(\"default\")],2)],1)};pi._withStripped\u003d!0;var fi\u003di(383);function mi(t){return(mi\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t})(t)}function vi(t,e){for(var n\u003d0;n\u003ce.length;n++){var i\u003de[n];i.enumerable\u003di.enumerable||!1,i.configurable\u003d!0,\"value\"in i\u0026\u0026(i.writable\u003d!0),Object.defineProperty(t,i.key,i)}}function gi(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]\u003dn,t}function yi(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function wi(t){for(var e\u003d1;e\u003carguments.length;e++){var n\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?yi(Object(n),!0).forEach((function(e){gi(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):yi(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function bi(t){return function(t){if(Array.isArray(t))return _i(t)}(t)||function(t){if(\"undefined\"!\u003dtypeof Symbol\u0026\u0026Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"\u003d\u003dtypeof t)return _i(t,e);var n\u003dObject.prototype.toString.call(t).slice(8,-1);return\"Object\"\u003d\u003d\u003dn\u0026\u0026t.constructor\u0026\u0026(n\u003dt.constructor.name),\"Map\"\u003d\u003d\u003dn||\"Set\"\u003d\u003d\u003dn?Array.from(t):\"Arguments\"\u003d\u003d\u003dn||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_i(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function _i(t,e){(null\u003d\u003de||e\u003et.length)\u0026\u0026(e\u003dt.length);for(var n\u003d0,i\u003dnew Array(e);n\u003ce;n++)i[n]\u003dt[n];return i}var Si\u003dfunction(t){return t\u003d\u003ddocument.activeElement},xi\u003dfunction(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.root\u003dnull,this.elements\u003d[],this.onKeyDown\u003dthis.onKeyDown.bind(this),this.enable\u003dthis.enable.bind(this),this.disable\u003dthis.disable.bind(this),this.firstElement\u003dthis.firstElement.bind(this),this.lastElement\u003dthis.lastElement.bind(this)}var e,n;return e\u003dt,(n\u003d[{key:\"lastElement\",value:function(){return this.elements[this.elements.length-1]||null}},{key:\"firstElement\",value:function(){return this.elements[0]||null}},{key:\"onKeyDown\",value:function(t){if(function(t){return\"Tab\"\u003d\u003d\u003dt.key||9\u003d\u003d\u003dt.keyCode}(t)){if(!t.shiftKey)return!document.activeElement||Si(this.lastElement())?(this.firstElement().focus(),void t.preventDefault()):void 0;Si(this.firstElement())\u0026\u0026(this.lastElement().focus(),t.preventDefault())}}},{key:\"enabled\",value:function(){return!!this.root}},{key:\"enable\",value:function(t){t\u0026\u0026(this.root\u003dt,this.elements\u003dfunction(t){return function(t,e){return bi(t.querySelectorAll(\u0027button:not([disabled]), select:not([disabled]), a[href]:not([disabled]), area[href]:not([disabled]), [contentEditable\u003d\"\"]:not([disabled]), [contentEditable\u003d\"true\"]:not([disabled]), [contentEditable\u003d\"TRUE\"]:not([disabled]), textarea:not([disabled]), iframe:not([disabled]), input:not([disabled]), summary:not([disabled]), [tabindex]:not([tabindex\u003d\"-1\"])\u0027)||[])}(t)}(this.root),this.root.addEventListener(\"keydown\",this.onKeyDown))}},{key:\"disable\",value:function(){this.root.removeEventListener(\"keydown\",this.onKeyDown),this.root\u003dnull}}])\u0026\u0026vi(e.prototype,n),t}(),Ci\u003dfunction(t){var e\u003dt.targetTouches?t.targetTouches[0]:t;return{x:e.clientX,y:e.clientY}},$i\u003dfunction(t,e,n){return\"number\"!\u003dtypeof t\u0026\u0026(t\u003dMath.min(e,n)||e),\"number\"!\u003dtypeof n\u0026\u0026(n\u003dMath.max(e,t)),Math.min(Math.max(e,t),n)},ki\u003dfunction(t){return t\u0026\u0026Number(t.replace(/px$/,\"\"))||0},Ti\u003d{down:{pc:\"mousedown\",m:\"touchstart\"},move:{pc:\"mousemove\",m:\"touchmove\"},up:{pc:\"mouseup\",m:\"touchend\"}},Ei\u003dfunction(t,e,n){e\u0026\u0026e.addEventListener(Ti[t].pc,n),e\u0026\u0026e.addEventListener(Ti[t].m,n,{passive:!1})},Oi\u003dfunction(t,e,n){e\u0026\u0026e.removeEventListener(Ti[t].pc,n),e\u0026\u0026e.removeEventListener(Ti[t].m,n)},Bi\u003d!1;if(\"undefined\"!\u003dtypeof window){var Pi\u003d{get passive(){Bi\u003d!0}};window.addEventListener(\"testPassive\",null,Pi),window.removeEventListener(\"testPassive\",null,Pi)}var Li,Ni,Ai,zi\u003d\"undefined\"!\u003dtypeof window\u0026\u0026window.navigator\u0026\u0026window.navigator.platform\u0026\u0026(/iP(ad|hone|od)/.test(window.navigator.platform)||\"MacIntel\"\u003d\u003d\u003dwindow.navigator.platform\u0026\u0026window.navigator.maxTouchPoints\u003e1),Mi\u003d[],Hi\u003d!1,Di\u003d0,Ri\u003d-1,ji\u003dfunction(t){return Mi.some((function(){return function(t,e){var n\u003d!1;return function(t){for(var e\u003d[];t;){if(e.push(t),t.classList.contains(\"vfm\"))return e;t\u003dt.parentElement}return e}(t).forEach((function(t){(function(t){if(!t||t.nodeType!\u003d\u003dNode.ELEMENT_NODE)return!1;var e\u003dwindow.getComputedStyle(t);return[\"auto\",\"scroll\"].includes(e.overflowY)\u0026\u0026t.scrollHeight\u003et.clientHeight})(t)\u0026\u0026function(t,e){return!(0\u003d\u003d\u003dt.scrollTop\u0026\u0026e\u003c0||t.scrollTop+t.clientHeight+e\u003e\u003dt.scrollHeight\u0026\u0026e\u003e0)}(t,e)\u0026\u0026(n\u003d!0)})),n}(t,-Di)}))},Ii\u003dfunction(t){var e\u003dt||window.event;return!!ji(e.target)||e.touches.length\u003e1||(e.preventDefault\u0026\u0026e.preventDefault(),!1)},qi\u003dfunction(t){t?(Mi\u003dMi.filter((function(e){return e.targetElement!\u003d\u003dt})),zi?(t.ontouchstart\u003dnull,t.ontouchmove\u003dnull,Hi\u0026\u00260\u003d\u003d\u003dMi.length\u0026\u0026(document.removeEventListener(\"touchmove\",Ii,Bi?{passive:!1}:void 0),Hi\u003d!1)):Mi.length||(void 0!\u003d\u003dNi\u0026\u0026(document.body.style.paddingRight\u003dNi,Ni\u003dvoid 0),void 0!\u003d\u003dLi\u0026\u0026(document.body.style.overflow\u003dLi,Li\u003dvoid 0))):console.error(\"enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.\")},Wi\u003dfunction(){},Fi\u003d\"enter\",Vi\u003d\"entering\",Ui\u003d\"leave\",Qi\u003d\"leavng\",Xi\u003d{type:[String,Object,Array],default:\"\"},Yi\u003d{type:[Object,Array],default:function(){return{}}},Ki\u003d{t:\"ns-resize\",tr:\"nesw-resize\",r:\"ew-resize\",br:\"nwse-resize\",b:\"ns-resize\",bl:\"nesw-resize\",l:\"ew-resize\",tl:\"nwse-resize\"},Gi\u003d{props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:Xi,overlayClass:Xi,contentClass:Xi,styles:Yi,overlayStyle:Yi,contentStyle:Yi,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var e\u003dmi(t);return\"boolean\"\u003d\u003d\u003de||\"string\"\u003d\u003d\u003de||t.nodeType\u003d\u003d\u003dNode.ELEMENT_NODE}},transition:{type:[String,Object],default:\"vfm\"},overlayTransition:{type:[String,Object],default:\"vfm\"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1},fitParent:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},dragSelector:{type:String,default:\"\"},keepChangedStyle:{type:Boolean,default:!1},resize:{type:Boolean,default:!1},resizeDirections:{type:Array,default:function(){return[\"t\",\"tr\",\"r\",\"br\",\"b\",\"bl\",\"l\",\"tl\"]},validator:function(t){return[\"t\",\"tr\",\"r\",\"br\",\"b\",\"bl\",\"l\",\"tl\"].filter((function(e){return-1!\u003d\u003dt.indexOf(e)})).length\u003d\u003d\u003dt.length}},minWidth:{type:Number,default:0},minHeight:{type:Number,default:0},maxWidth:{type:Number,default:1/0},maxHeight:{type:Number,default:1/0}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1,resize:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{},dragResizeStyle:{},resolveToggle:Wi,rejectToggle:Wi,state:null,lastMousedownEl:null}},computed:{isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState\u003d\u003d\u003dUi)\u0026\u0026this.modalTransitionState\u003d\u003d\u003dUi},calculateZIndex:function(){return!1\u003d\u003d\u003dthis.zIndex?!!this.zIndexAuto\u0026\u0026+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return wi({},!1!\u003d\u003dthis.calculateZIndex\u0026\u0026{zIndex:this.calculateZIndex})},bindContentStyle:function(){var t\u003d[this.dragResizeStyle];return Array.isArray(this.contentStyle)?t.push.apply(t,bi(this.contentStyle)):t.push(this.contentStyle),t},computedTransition:function(){return\"string\"\u003d\u003dtypeof this.transition?{name:this.transition}:wi({},this.transition)},computedOverlayTransition:function(){return\"string\"\u003d\u003dtypeof this.overlayTransition?{name:this.overlayTransition}:wi({},this.overlayTransition)}},watch:{value:function(t){if(this.stopEvent)this.stopEvent\u003d!1;else if(this.mounted(),!t){if(this.emitEvent(\"before-close\",!0))return void this.rejectToggle(\"hide\");this.close()}},lockScroll:\"handleLockScroll\",hideOverlay:function(t){this.value\u0026\u0026!t\u0026\u0026(this.visibility.overlay\u003d!0)},attach:\"mounted\",isComponentReadyToBeDestroyed:function(t){t\u0026\u0026(this.visible\u003d!1)},drag:function(t){this.visible\u0026\u0026(t?this.addDragDown():this.removeDragDown())},resize:function(t){this.visible\u0026\u0026(t?this.addResizeDown():this.removeResizeDown())},keepChangedStyle:function(t){t||(this.dragResizeStyle\u003d{})}},mounted:function(){this.api.modals.push(this),this.$focusTrap\u003dnew xi,this.mounted()},beforeDestroy:function(){var t,e\u003dthis;this.close(),this.lockScroll\u0026\u0026this.$refs.vfmContainer\u0026\u0026qi(this.$refs.vfmContainer),null\u003d\u003dthis||null\u003d\u003d\u003d(t\u003dthis.$el)||void 0\u003d\u003d\u003dt||t.remove();var n\u003dthis.api.modals.findIndex((function(t){return t\u003d\u003d\u003de}));this.api.modals.splice(n,1)},methods:{mounted:function(){var t\u003dthis;if(this.value){if(this.emitEvent(\"before-open\",!1))return void this.rejectToggle(\"show\");var e\u003dthis.getAttachElement();if(e||!1\u003d\u003d\u003dthis.attach){!1!\u003d\u003dthis.attach\u0026\u0026e.appendChild(this.$el);var n\u003dthis.api.openedModals.findIndex((function(e){return e\u003d\u003d\u003dt}));-1!\u003d\u003dn\u0026\u0026this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex\u003dthis.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(e){return e!\u003d\u003dt})).forEach((function(t,n){t.getAttachElement()\u003d\u003d\u003de\u0026\u0026(t.modalStackIndex\u003dn,t.visibility.overlay\u003d!1)})),this.visible\u003d!0,this.$nextTick((function(){t.startTransitionEnter()}))}else!1!\u003d\u003de\u0026\u0026console.warn(\"Unable to locate target \".concat(this.attach))}},close:function(){var t\u003dthis,e\u003dthis.api.openedModals.findIndex((function(e){return e\u003d\u003d\u003dt}));if(-1!\u003d\u003de\u0026\u0026this.api.openedModals.splice(e,1),this.api.openedModals.length\u003e0){var n\u003dthis.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)\u0026\u0026n.$refs.vfmContainer.focus(),!n.hideOverlay\u0026\u0026(n.visibility.overlay\u003d!0)}this.drag\u0026\u0026this.removeDragDown(),this.resize\u0026\u0026this.removeResizeDown(),this.state\u003dnull,this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay\u003d!0,this.visibility.modal\u003d!0},startTransitionLeave:function(){this.visibility.overlay\u003d!1,this.visibility.modal\u003d!1},handleLockScroll:function(){var t\u003dthis;this.value\u0026\u0026this.$nextTick((function(){t.lockScroll?function(t,e){if(t){if(!Mi.some((function(e){return e.targetElement\u003d\u003d\u003dt}))){var n\u003d{targetElement:t,options:e||{}};Mi\u003d[].concat(bi(Mi),[n]),zi?(t.ontouchstart\u003dfunction(t){1\u003d\u003d\u003dt.targetTouches.length\u0026\u0026(Ri\u003dt.targetTouches[0].clientY)},t.ontouchmove\u003dfunction(e){1\u003d\u003d\u003de.targetTouches.length\u0026\u0026function(t,e){Di\u003dt.targetTouches[0].clientY-Ri,!ji(t.target)\u0026\u0026(e\u0026\u00260\u003d\u003d\u003de.scrollTop\u0026\u0026Di\u003e0||function(t){return!!t\u0026\u0026t.scrollHeight-t.scrollTop\u003c\u003dt.clientHeight}(e)\u0026\u0026Di\u003c0?Ii(t):t.stopPropagation())}(e,t)},Hi||(document.addEventListener(\"touchmove\",Ii,Bi?{passive:!1}:void 0),Hi\u003d!0)):function(t){if(void 0\u003d\u003d\u003dNi){var e\u003d!!t\u0026\u0026!0\u003d\u003d\u003dt.reserveScrollBarGap,n\u003dwindow.innerWidth-document.documentElement.clientWidth;if(e\u0026\u0026n\u003e0){var i\u003dparseInt(getComputedStyle(document.body).getPropertyValue(\"padding-right\"),10);Ni\u003ddocument.body.style.paddingRight,document.body.style.paddingRight\u003d\"\".concat(i+n,\"px\")}}void 0\u003d\u003d\u003dLi\u0026\u0026(Li\u003ddocument.body.style.overflow,document.body.style.overflow\u003d\"hidden\")}(e)}}else console.error(\"disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.\")}(t.$refs.vfmContainer,{reserveScrollBarGap:!0}):qi(t.$refs.vfmContainer)}))},getAttachElement:function(){return!1!\u003d\u003dthis.attach\u0026\u0026(\"string\"\u003d\u003dtypeof this.attach?!!window\u0026\u0026window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState\u003dVi},afterOverlayEnter:function(){this.overlayTransitionState\u003dFi},beforeOverlayLeave:function(){this.overlayTransitionState\u003dQi},afterOverlayLeave:function(){this.overlayTransitionState\u003dUi},beforeModalEnter:function(){this.modalTransitionState\u003dVi},afterModalEnter:function(){this.modalTransitionState\u003dFi,(this.focusRetain||this.focusTrap)\u0026\u0026this.$refs.vfmContainer.focus(),this.focusTrap\u0026\u0026this.$focusTrap.enable(this.$refs.vfmContainer),this.drag\u0026\u0026this.addDragDown(),this.resize\u0026\u0026this.addResizeDown(),this.$emit(\"opened\",this.createModalEvent({type:\"opened\"})),this.resolveToggle(\"show\")},beforeModalLeave:function(){this.modalTransitionState\u003dQi,this.$focusTrap.enabled()\u0026\u0026this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState\u003dUi,this.modalStackIndex\u003dnull,this.lockScroll\u0026\u0026qi(this.$refs.vfmContainer),this.keepChangedStyle||(this.dragResizeStyle\u003d{});var t\u003d!1,e\u003dthis.createModalEvent({type:\"closed\",stop:function(){t\u003d!0}});this.$emit(\"closed\",e),this.resolveToggle(\"hide\"),t||(this.params\u003d{})},onMousedown:function(t){this.lastMousedownEl\u003dnull\u003d\u003dt?void 0:t.target},onMouseupContainer:function(){this.lastMousedownEl\u003d\u003d\u003dthis.$refs.vfmContainer\u0026\u0026\"resize:move\"!\u003d\u003dthis.state\u0026\u0026(this.$emit(\"click-outside\",this.createModalEvent({type:\"click-outside\"})),this.clickToClose\u0026\u0026this.$emit(\"input\",!1))},onEsc:function(){this.visible\u0026\u0026this.escToClose\u0026\u0026this.$emit(\"input\",!1)},createModalEvent:function(){var t\u003darguments.length\u003e0\u0026\u0026void 0!\u003d\u003darguments[0]?arguments[0]:{};return wi({ref:this},t)},emitEvent:function(t,e){var n\u003d!1,i\u003dthis.createModalEvent({type:t,stop:function(){n\u003d!0}});return this.$emit(t,i),!!n\u0026\u0026(this.stopEvent\u003d!0,this.$emit(\"input\",e),!0)},emitState:function(t,e,n){this.state\u003d\"\".concat(e,\":\").concat(n),this.$emit(this.state,t)},toggle:function(t,e){var n\u003darguments,i\u003dthis;return new Promise((function(o,r){i.resolveToggle\u003dfunction(t){o(t),i.resolveToggle\u003dWi},i.rejectToggle\u003dfunction(t){r(t),i.rejectToggle\u003dWi};var s\u003d\"boolean\"\u003d\u003dtypeof t?t:!i.value;s\u0026\u00262\u003d\u003d\u003dn.length\u0026\u0026(i.params\u003de),i.$emit(\"input\",s)}))},pointerDown:function(t){var e\u003dthis;t.stopPropagation();var n,i\u003d\"resize\",o\u003d\"drag\",r\u003dthis.$refs,s\u003dr.vfmContainer,a\u003dr.vfmContent,l\u003dt.target.getAttribute(\"direction\");if(l)n\u003di;else{if(!function(t,e,n){return\"\"\u003d\u003d\u003dn||bi(e.querySelectorAll(n)).includes(t.target)}(t,a,this.dragSelector))return;n\u003do}this.emitState(t,n,\"start\");var c,u,d,h,p\u003dCi(t),f\u003ds.getBoundingClientRect(),m\u003da.getBoundingClientRect(),v\u003d\"absolute\"\u003d\u003d\u003dwindow.getComputedStyle(a).position,g\u003dki(this.dragResizeStyle.top),y\u003dki(this.dragResizeStyle.left),w\u003dfunction(){if(e.fitParent){var t\u003d{absolute:function(){return{minTop:0,minLeft:0,maxTop:f.height-m.height,maxLeft:f.width-m.width}},relative:function(){return{minTop:g+f.top-m.top,minLeft:y+f.left-m.left,maxTop:g+f.bottom-m.bottom,maxLeft:y+f.right-m.right}}};return v?t.absolute():t.relative()}return{}}(),b\u003dn\u003d\u003d\u003di\u0026\u0026(c\u003ddocument.body,u\u003d\"cursor\",d\u003dKi[l],h\u003dc.style[u],c.style[u]\u003dd,function(){c.style[u]\u003dh}),_\u003dfunction(t){t.stopPropagation(),e.emitState(t,n,\"move\");var r,s,a\u003dCi(t),c\u003d{x:a.x-p.x,y:a.y-p.y};n\u003d\u003d\u003di\u0026\u0026(c\u003de.getResizeOffset(l,c,f,m,v)),v?(r\u003dm.top-f.top+c.y,s\u003dm.left-f.left+c.x):(r\u003dg+c.y,s\u003dy+c.x),n\u003d\u003d\u003do\u0026\u0026e.fitParent\u0026\u0026(r\u003d$i(w.minTop,r,w.maxTop),s\u003d$i(w.minLeft,s,w.maxLeft));var u\u003dwi(wi(wi({position:\"relative\",top:r+\"px\",left:s+\"px\",margin:\"unset\",touchAction:\"none\"},v\u0026\u0026{position:\"absolute\",transform:\"unset\",width:m.width+\"px\",height:m.height+\"px\"}),c.width\u0026\u0026{width:c.width+\"px\"}),c.height\u0026\u0026{height:c.height+\"px\"});e.dragResizeStyle\u003dwi(wi({},e.dragResizeStyle),u)};Ei(\"move\",document,_),Ei(\"up\",document,(function t(o){o.stopPropagation(),n\u003d\u003d\u003di\u0026\u0026b\u0026\u0026b(),setTimeout((function(){e.emitState(o,n,\"end\")})),Oi(\"move\",document,_),Oi(\"up\",document,t)}))},addDragDown:function(){Ei(\"down\",this.$refs.vfmContent,this.pointerDown),this.dragResizeStyle.touchAction\u003d\"none\"},removeDragDown:function(){Oi(\"down\",this.$refs.vfmContent,this.pointerDown)},addResizeDown:function(){var t\u003dthis;this.visibility.resize\u003d!0,this.$nextTick((function(){Ei(\"down\",t.$refs.vfmResize,t.pointerDown)}))},removeResizeDown:function(){Oi(\"down\",this.$refs.vfmResize,this.pointerDown),this.visibility.resize\u003d!1},getResizeOffset:function(t,e,n,i,o){var r\u003dthis,s\u003dfunction(t,e,o,s){var a,l\u003di[e],c\u003dn[t]-i[t],u\u003d(a\u003de).charAt(0).toUpperCase()+a.slice(1);return{axis:o,edgeName:e,min:s?c:-l,max:s?l:c,minEdge:r[\"min\".concat(u)],maxEdge:r[\"max\".concat(u)],getEdge:function(t){return i[e]-t*(s?1:-1)},getOffsetAxis:function(t,n){var o\u003di[e]-t;return n?s?o:0:(s?1:-1)*o/2}}},a\u003d{t:[\"top\",\"height\",\"y\",!0],b:[\"bottom\",\"height\",\"y\",!1],l:[\"left\",\"width\",\"x\",!0],r:[\"right\",\"width\",\"x\",!1]},l\u003d{x:0,y:0};return t.split(\"\").forEach((function(t){var n\u003ds.apply(void 0,bi(a[t]));l\u003dwi(wi({},l),function(t){var n,i\u003de[t.axis];i\u003dr.fitParent?$i(t.min,i,t.max):i;var s\u003d$i(t.minEdge,t.getEdge(i),t.maxEdge);return i\u003dt.getOffsetAxis(s,o),gi(n\u003d{},t.edgeName,s),gi(n,t.axis,i),n}(n))})),l}}},Zi\u003dfunction(t,e,n,i,o,r,s,a,l,c){\"boolean\"!\u003dtypeof s\u0026\u0026(l\u003da,a\u003ds,s\u003d!1);var u,d\u003d\"function\"\u003d\u003dtypeof n?n.options:n;if(t\u0026\u0026t.render\u0026\u0026(d.render\u003dt.render,d.staticRenderFns\u003dt.staticRenderFns,d._compiled\u003d!0,o\u0026\u0026(d.functional\u003d!0)),i\u0026\u0026(d._scopeId\u003di),r?(u\u003dfunction(t){(t\u003dt||this.$vnode\u0026\u0026this.$vnode.ssrContext||this.parent\u0026\u0026this.parent.$vnode\u0026\u0026this.parent.$vnode.ssrContext)||\"undefined\"\u003d\u003dtypeof __VUE_SSR_CONTEXT__||(t\u003d__VUE_SSR_CONTEXT__),e\u0026\u0026e.call(this,l(t)),t\u0026\u0026t._registeredComponents\u0026\u0026t._registeredComponents.add(r)},d._ssrRegister\u003du):e\u0026\u0026(u\u003ds?function(t){e.call(this,c(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),u)if(d.functional){var h\u003dd.render;d.render\u003dfunction(t,e){return u.call(e),h(t,e)}}else{var p\u003dd.beforeCreate;d.beforeCreate\u003dp?[].concat(p,u):[u]}return n},Ji\u003d\"undefined\"!\u003dtypeof navigator\u0026\u0026/msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase()),to\u003d{},eo\u003dZi({render:function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.ssr||t.visible?n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.ssr||t.visible,expression:\"!ssr || visible\"}],staticClass:\"vfm vfm--inset\",class:[!1\u003d\u003d\u003dt.attach?\"vfm--fixed\":\"vfm--absolute\",{\"vfm--prevent-none\":t.preventClick}],style:t.bindStyle,on:{keydown:function(e){return!e.type.indexOf(\"key\")\u0026\u0026t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"])?null:t.onEsc.apply(null,arguments)}}},[n(\"transition\",t._b({ref:\"vfmOverlayTransition\",on:{\"before-enter\":t.beforeOverlayEnter,\"after-enter\":t.afterOverlayEnter,\"before-leave\":t.beforeOverlayLeave,\"after-leave\":t.afterOverlayLeave}},\"transition\",t.computedOverlayTransition,!1),[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:!t.hideOverlay\u0026\u0026t.visibility.overlay,expression:\"!hideOverlay \u0026\u0026 visibility.overlay\"}],staticClass:\"vfm__overlay vfm--overlay vfm--absolute vfm--inset\",class:t.overlayClass,style:t.overlayStyle})]),t._v(\" \"),n(\"transition\",t._b({ref:\"vfmTransition\",on:{\"before-enter\":t.beforeModalEnter,\"after-enter\":t.afterModalEnter,\"before-leave\":t.beforeModalLeave,\"after-leave\":t.afterModalLeave}},\"transition\",t.computedTransition,!1),[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.visibility.modal,expression:\"visibility.modal\"}],ref:\"vfmContainer\",staticClass:\"vfm__container vfm--absolute vfm--inset vfm--outline-none\",class:t.classes,style:t.styles,attrs:{\"aria-expanded\":t.visibility.modal.toString(),role:\"dialog\",\"aria-modal\":\"true\",tabindex:\"-1\"},on:{mouseup:function(e){return e.target!\u003d\u003de.currentTarget?null:t.onMouseupContainer.apply(null,arguments)},mousedown:function(e){return e.target!\u003d\u003de.currentTarget?null:t.onMousedown.apply(null,arguments)}}},[n(\"div\",{ref:\"vfmContent\",staticClass:\"vfm__content\",class:[t.contentClass,{\"vfm--prevent-auto\":t.preventClick}],style:t.bindContentStyle,on:{mousedown:function(e){return t.onMousedown(null)}}},[t._t(\"default\",null,{params:t.params,close:function(){return t.$emit(\"input\",!1)}}),t._v(\" \"),t.visibility.resize\u0026\u0026t.visibility.modal?n(\"div\",{ref:\"vfmResize\",staticClass:\"vfm__resize vfm--absolute vfm--inset vfm--prevent-none vfm--select-none vfm--touch-none\"},t._l(t.resizeDirections,(function(t){return n(\"div\",{key:t,staticClass:\"vfm--absolute vfm--prevent-auto\",class:\"vfm--resize-\"+t,attrs:{direction:t}})})),0):t._e()],2)])])],1):t._e()},staticRenderFns:[]},(function(t){t\u0026\u0026t(\"data-v-1cd72822_0\",{source:\".vfm--fixed[data-v-1cd72822]{position:fixed}.vfm--absolute[data-v-1cd72822]{position:absolute}.vfm--inset[data-v-1cd72822]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-1cd72822]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-1cd72822]{pointer-events:none}.vfm--prevent-auto[data-v-1cd72822]{pointer-events:auto}.vfm--outline-none[data-v-1cd72822]:focus{outline:0}.vfm-enter-active[data-v-1cd72822],.vfm-leave-active[data-v-1cd72822]{transition:opacity .2s}.vfm-enter[data-v-1cd72822],.vfm-leave-to[data-v-1cd72822]{opacity:0}.vfm--touch-none[data-v-1cd72822]{touch-action:none}.vfm--select-none[data-v-1cd72822]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vfm--resize-bl[data-v-1cd72822],.vfm--resize-br[data-v-1cd72822],.vfm--resize-tl[data-v-1cd72822],.vfm--resize-tr[data-v-1cd72822]{width:12px;height:12px;z-index:10}.vfm--resize-t[data-v-1cd72822]{top:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-tr[data-v-1cd72822]{top:-6px;right:-6px;cursor:nesw-resize}.vfm--resize-r[data-v-1cd72822]{top:0;right:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-br[data-v-1cd72822]{bottom:-6px;right:-6px;cursor:nwse-resize}.vfm--resize-b[data-v-1cd72822]{bottom:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-bl[data-v-1cd72822]{bottom:-6px;left:-6px;cursor:nesw-resize}.vfm--resize-l[data-v-1cd72822]{top:0;left:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-tl[data-v-1cd72822]{top:-6px;left:-6px;cursor:nwse-resize}\",map:void 0,media:void 0})}),Gi,\"data-v-1cd72822\",!1,void 0,!1,(function(t){return function(t,e){return function(t,e){var n\u003dJi?e.media||\"default\":t,i\u003dto[n]||(to[n]\u003d{ids:new Set,styles:[]});if(!i.ids.has(t)){i.ids.add(t);var o\u003de.source;if(e.map\u0026\u0026(o+\u003d\"\\n/*# sourceURL\u003d\"+e.map.sources[0]+\" */\",o+\u003d\"\\n/*# sourceMappingURL\u003ddata:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(e.map))))+\" */\"),i.element||(i.element\u003ddocument.createElement(\"style\"),i.element.type\u003d\"text/css\",e.media\u0026\u0026i.element.setAttribute(\"media\",e.media),void 0\u003d\u003d\u003dAi\u0026\u0026(Ai\u003ddocument.head||document.getElementsByTagName(\"head\")[0]),Ai.appendChild(i.element)),\"styleSheet\"in i.element)i.styles.push(o),i.element.styleSheet.cssText\u003di.styles.filter(Boolean).join(\"\\n\");else{var r\u003di.ids.size-1,s\u003ddocument.createTextNode(o),a\u003di.element.childNodes;a[r]\u0026\u0026i.element.removeChild(a[r]),a.length?i.element.insertBefore(s,a[r]):i.element.appendChild(s)}}}(t,e)}}),void 0,void 0),no\u003dZi({render:function(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{staticClass:\"modals-container\"},t._l(t.api.dynamicModals,(function(e,i){return n(e.component,t._g(t._b({key:e.id,tag:\"component\",on:{closed:function(e){return t.slice(i)},\"before-open\":function(n){return t.beforeOpen(n,e,i)},opened:e.opened},scopedSlots:t._u([t._l(e.slots,(function(e,i){return{key:i,fn:function(){return[t.isString(e)?n(\"div\",{key:i,domProps:{innerHTML:t._s(e)}}):n(e.component,t._g(t._b({key:i,tag:\"component\"},\"component\",e.bind,!1),e.on))]},proxy:!0}}))],null,!0),model:{value:e.value,callback:function(n){t.$set(e,\"value\",n)},expression:\"modal.value\"}},\"component\",e.bind,!1),e.on))})),1)},staticRenderFns:[]},void 0,{props:{},methods:{slice:function(t){this.api.dynamicModals.splice(t,1)},beforeOpen:function(t,e,n){var i\u003dthis;t.ref.params\u003de.params,this.$nextTick((function(){e.value||(i.slice(n),e.reject(\"show\"))}))},isString:function(t){return\"string\"\u003d\u003dtypeof t}}},void 0,!1,void 0,!1,void 0,void 0,void 0);function io(t,e){var n\u003dwi(wi({},t),{},{props:wi({},t.props)});return Object.assign(n.props,{api:{type:Object,default:function(){return e}}}),n}var oo\u003d0,ro\u003dfunction(){var t,e,n\u003d(e\u003dnull,et().observable({show:function(t){for(var n\u003dthis,i\u003darguments.length,o\u003dnew Array(i\u003e1?i-1:0),r\u003d1;r\u003ci;r++)o[r-1]\u003darguments[r];switch(mi(t)){case\"string\":return this.toggle.apply(this,[t,!0].concat(o));case\"object\":return Promise.allSettled([new Promise((function(i,r){var s\u003d{value:!0,id:Symbol(\"dynamicModal\"),component:e,bind:{},slots:{},on:{},params:o[0],reject:r,opened:function(){i(\"show\")}};n.dynamicModals.push(Object.assign(s,t))}))])}},hide:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return this.toggle(e,!1)},hideAll:function(){return this.hide.apply(this,bi(this.openedModals.map((function(t){return t.name}))))},toggle:function(t){for(var e\u003darguments.length,n\u003dnew Array(e\u003e1?e-1:0),i\u003d1;i\u003ce;i++)n[i-1]\u003darguments[i];var o\u003dArray.isArray(t)?this.get.apply(this,bi(t)):this.get(t);return Promise.allSettled(o.map((function(t){return t.toggle.apply(t,n)})))},get:function(){for(var t\u003darguments.length,e\u003dnew Array(t),n\u003d0;n\u003ct;n++)e[n]\u003darguments[n];return this.modals.filter((function(t){return e.includes(t.name)}))},dynamicModals:[],openedModals:[],modals:[],_setDefaultModal:function(t){e\u003dt}}));return gi(t\u003d{},\"$vfm\",n),gi(t,\"VueFinalModal\",function(t){var e\u003dio(eo,t);return t._setDefaultModal(e),e}(n)),gi(t,\"ModalsContainer\",io(no,n)),t},so\u003dro(),ao\u003dso.$vfm,lo\u003dso.VueFinalModal,co\u003d(so.ModalsContainer,function(t){var e\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]?arguments[1]:{},n\u003d0\u003d\u003d\u003doo?so:ro(),i\u003dn.$vfm,o\u003dn.VueFinalModal,r\u003dn.ModalsContainer;oo+\u003d1;var s\u003de.key||\"$vfm\",a\u003de.componentName||\"VueFinalModal\",l\u003de.dynamicContainerName||\"ModalsContainer\";t.prototype[s]\u003di,t.component(a,o),t.component(l,r)}),uo\u003dfunction(t){return{install:function(e,n){var i\u003dObject.assign({},t,n);co(e,i)}}};uo.install\u003dco;const ho\u003dqe({name:\"Trigger\",components:{PortalTarget:fi.YC},props:{for:{type:String,default:\"\"},trigger:{type:String,default:\"hover focus\"},placement:{type:String,default:\"top\"}},data:function(){return{popoverOrTooltipType:void 0,isInput:!1}},methods:{toggle:function(){this.for\u0026\u0026ao.show(this.for)}},computed:{triggerEventType:function(){return\"click\"\u003d\u003d\u003dthis.trigger||\"focus\"\u003d\u003d\u003dthis.trigger?this.trigger:\"mouseenter\"},triggers:function(){return this.trigger.split(\" \")},target:function(){return this.for}},mounted:function(){if(this.isInput\u003dthis.$slots.default\u0026\u0026this.$slots.default.some((function(t){return\"input\"\u003d\u003d\u003dt.tag})),this.for\u0026\u0026void 0\u003d\u003d\u003dthis.popoverOrTooltipType){var t\u003ddocument.getElementById(this.for);if(!t)return;this.popoverOrTooltipType\u003dt.dataset.mbComponentType}}},pi,[],!1,null,null,null).exports;var po\u003dfunction(){var t\u003dthis.$createElement;return(this._self._c||t)(\"div\",{staticClass:\"site-nav-root\"},[this._t(\"default\")],2)};po._withStripped\u003d!0;const fo\u003dqe({name:\"SiteNav\",mounted:function(){var t\u003dthis,e\u003dSn(new URL(window.location.href).pathname);this.$el.querySelectorAll(\"a[href]\").forEach((function(n){var i\u003dSn(n.getAttribute(\"href\"));if(e\u003d\u003d\u003di){n.classList.add(\"current\");for(var o\u003dn.parentElement;o\u0026\u0026o!\u003d\u003dt.$el;)\"ul\"\u003d\u003d\u003do.tagName.toLowerCase()\u0026\u0026o.classList.contains(\"site-nav-dropdown-container\")\u0026\u0026o.classList.add(\"site-nav-dropdown-container-open\"),o\u003do.parentElement}}))}},po,[],!1,null,null,null).exports;var mo\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",[n(\"span\",{class:[{\"nav-menu-close-icon\":t.show}],on:{click:function(e){return t.toggleNavMenu(void 0)}}},[t._t(\"navMenuIcon\")],2),t._v(\" \"),n(\"div\",{ref:\"navMenuContainer\",class:[\"nav-menu\",{\"nav-menu-open\":t.show}],style:t.navbarHeight,on:{click:t.toggleNavMenu}},[n(\"portal-target\",{attrs:{name:t.portalName,multiple:\"\"}})],1)])};mo._withStripped\u003d!0;var vo\u003d{};const go\u003dqe({components:{PortalTarget:fi.YC},props:{type:{type:String,default:null},portalName:{type:String,default:null}},inject:{toggleLowerNavbar:{default:void 0}},data:function(){return{show:!1,navbarHeight:\"\"}},methods:{toggleNavMenu:function(t){var e,n\u003dthis;t\u0026\u0026\"a\"\u003d\u003d\u003dt.target.tagName.toLowerCase()||!t\u0026\u0026this.show?(document.body.style.removeProperty(\"overflow\"),this.show\u003d!1):(vo[e\u003d\"closeOverlay\"]\u0026\u0026vo[e].forEach((function(t){return t()})),document.body.style.overflow\u003d\"hidden\",this.show\u003d!0,this.$nextTick((function(){var t\u003dn.$refs.navMenuContainer,e\u003dwindow.innerHeight-t.getBoundingClientRect().top;n.navbarHeight\u003d\"height: \".concat(e,\"px\")})))}},mounted:function(){var t,e,n\u003dthis;this.toggleLowerNavbar\u0026\u0026this.toggleLowerNavbar(),e\u003dfunction(){n.show\u003d!1},vo[t\u003d\"closeOverlay\"]||(vo[t]\u003d[]),vo[t].push(e)}},mo,[],!1,null,\"1a3e7aee\",null).exports;var yo\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(t.tagName,t._b({tag:\"component\"},\"component\",t.$attrs,!1),[t._t(\"default\"),t._v(\" \"),t.enablePortal?n(\"portal\",{attrs:{to:t.to}},[n(t.tagName,t._b({tag:\"component\",class:[t.$vnode.data.staticClass||\"\",\"mb-mobile-nav\"],style:t.$vnode.data.staticStyle},\"component\",t.$attrs,!1),[t._t(\"default\")],2)],1):t._e()],2)};yo._withStripped\u003d!0;const wo\u003dqe({name:\"OverlaySource\",components:{Portal:fi.h_},props:{to:{type:String,default:void 0},tagName:{type:String,default:void 0}},data:function(){return{enablePortal:!1}},mounted:function(){this.enablePortal\u003d!0}},yo,[],!1,null,\"e6005420\",null).exports;var bo\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:\"click\"\u003d\u003d\u003dt.trigger?\"trigger-click\":\"trigger\",attrs:{\"data-mb-component-type\":\"popover\",tabindex:\"0\"}},[t.targetEl.id?n(\"portal\",{attrs:{to:\"popover:\"+t.targetEl.id}},[t.hasHeader?n(\"h3\",{staticClass:\"popover-header\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"popover-body\"},[t._t(\"content\")],2)]):t._e(),t._v(\" \"),t.isMounted?n(\"v-popover\",{attrs:{\"auto-hide\":!t.isInput,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,placement:t.placement,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[n(\"div\",{staticClass:\"popover-container\"},[t.hasHeader?n(\"h3\",{staticClass:\"popover-header\"},[t._t(\"header\")],2):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"popover-body\"},[t._t(\"content\")],2)])]},proxy:!0}],null,!0)},[t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):t._e()],1)};bo._withStripped\u003d!0;const _o\u003dqe({name:\"Popover\",components:{Portal:fi.h_},props:{trigger:{type:String,default:\"hover focus\"},placement:{type:String,default:\"top\"}},data:function(){return{targetEl:{},isMounted:!1}},computed:{triggers:function(){return this.trigger.split(\" \")},hasHeader:function(){return!!this.$slots.header}},mounted:function(){this.targetEl\u003dthis.$el,this.isInput\u003dthis.$slots.default\u0026\u0026this.$slots.default.some((function(t){return\"input\"\u003d\u003d\u003dt.tag})),this.isMounted\u003d!0}},bo,[],!1,null,null,null).exports;var So\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"span\",{class:\"click\"\u003d\u003d\u003dt.trigger?\"trigger-click\":\"trigger\",attrs:{\"data-mb-component-type\":\"tooltip\",tabindex:\"0\"}},[t.targetEl.id?n(\"portal\",{attrs:{to:\"tooltip:\"+t.targetEl.id}},[t._t(\"content\")],2):t._e(),t._v(\" \"),t.isMounted?n(\"v-tooltip\",{attrs:{\"auto-hide\":!t.isInput,triggers:t.triggers,\"popper-triggers\":t.triggers,\"hide-triggers\":t.triggers,placement:t.placement,delay:0,\"shift-cross-axis\":\"\"},scopedSlots:t._u([{key:\"popper\",fn:function(){return[t._t(\"content\")]},proxy:!0}],null,!0)},[t._v(\" \"),t.isInput?t._t(\"default\"):n(\"span\",{on:{click:function(t){t.stopPropagation()}}},[t._t(\"default\")],2)],2):t._e()],1)};So._withStripped\u003d!0;const xo\u003dqe({name:\"Tooltip\",components:{Portal:fi.h_},props:{trigger:{type:String,default:\"hover focus\"},placement:{type:String,default:\"top\"}},data:function(){return{targetEl:{},isInput:!1,isMounted:!1}},computed:{triggers:function(){return this.trigger.split(\" \")}},mounted:function(){this.targetEl\u003dthis.$el,this.isInput\u003dthis.$slots.default\u0026\u0026this.$slots.default.some((function(t){return\"input\"\u003d\u003d\u003dt.tag})),this.isMounted\u003d!0}},So,[],!1,null,null,null).exports;var Co\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return t.isMounted?n(\"vue-final-modal\",{attrs:{ssr:\"\",name:t.id,classes:[\"modal\"],\"content-class\":[\"modal-dialog\",\"modal-dialog-scrollable\",t.optionalModalSize,t.optionalCentering],\"overlay-transition\":\"none\",transition:t.effectClass,\"click-to-close\":\"false\"!\u003d\u003dt.backdrop,\"esc-to-close\":\"\",\"z-index-base\":\"2000\"},model:{value:t.show,callback:function(e){t.show\u003de},expression:\"show\"}},[n(\"div\",{staticClass:\"modal-content\"},[t.hasHeader?n(\"div\",{staticClass:\"modal-header\"},[n(\"h5\",{staticClass:\"modal-title\"},[t._t(\"header\")],2),t._v(\" \"),n(\"button\",{staticClass:\"btn-close\",attrs:{type:\"button\",\"aria-label\":\"Close\"},on:{click:function(e){return t.close()}}})]):t._e(),t._v(\" \"),n(\"div\",{staticClass:\"modal-body\"},[t._t(\"default\")],2),t._v(\" \"),t.hasFooter||t.hasOk?n(\"div\",{staticClass:\"modal-footer\"},[t.hasFooter?t._t(\"footer\"):n(\"button\",{staticClass:\"btn btn-primary\",on:{click:function(e){return t.close()}}},[t._v(\"\\n \"+t._s(t.okText)+\"\\n \")])],2):t._e()])]):t._e()};Co._withStripped\u003d!0;const $o\u003dqe({name:\"Modal\",components:{VueFinalModal:lo},data:function(){return{show:!1,isMounted:!1,zoomEffect:{\"enter-class\":\"modal-zoom\",\"enter-to-class\":\"modal-zoom-show\",\"leave-to-class\":\"modal-zoom\",\"leave-class\":\"modal-zoom-show\"}}},props:{okText:{type:String,default:\"\"},effect:{type:String,default:\"zoom\"},id:{type:String,default:\"\"},small:{type:Boolean,default:!1},large:{type:Boolean,default:!1},center:{type:Boolean,default:!1},backdrop:{type:String,default:\"\"}},computed:{hasHeader:function(){return!!this.$slots.header},hasFooter:function(){return!!this.$slots.footer},hasOk:function(){return\"\"!\u003d\u003dthis.okText},optionalModalSize:function(){return this.small||this.large?this.small?\"modal-sm\":\"modal-lg\":\"\"},optionalCentering:function(){return this.center?\"modal-dialog-centered\":\"\"},effectClass:function(){return\"zoom\"\u003d\u003d\u003dthis.effect?this.zoomEffect:\"vfm\"}},methods:{close:function(){this.show\u003d!1}},mounted:function(){this.isMounted\u003d!0}},Co,[],!1,null,null,null).exports;var ko\u003dfunction(){var t\u003dthis,e\u003dt.$createElement,n\u003dt._self._c||e;return n(\"div\",{class:[\"scroll-top-button\",t.getIconSize(),\"d-print-none\",{lighten:t.$data.isLighten}],style:t.iconStyle(),attrs:{\"aria-hidden\":\"true\"},on:{click:function(e){return t.handleScrollTop()}}},[t._t(\"icon\",(function(){return[n(\"i\",{class:[\"fas fa-arrow-circle-up\"]})]}))],2)};ko._withStripped\u003d!0;var To\u003d{box:We,breadcrumb:Ve,dropdown:gn,navbar:Tn,panel:Rn,annotate:In,aPoint:Wn,pic:Vn,quiz:Qn,question:Gn,qOption:Jn,retriever:zn,searchbar:oi,tab:si,tabGroup:li,tabs:ui,thumbnail:hi,trigger:ho,siteNav:fo,submenu:vn,siteNavButton:Cn,pageNavButton:kn,overlay:go,overlaySource:wo,popover:_o,tooltip:xo,modal:$o,VPopover:Ne,VTooltip:Ae,scrollTopButton:qe({name:\"ScrollTopButton\",props:{icon:{type:String,default:null},iconSize:{type:String,default:\"lg\"},iconColor:{type:String,default:null},bottom:{type:String,default:null},right:{type:String,default:null}},data:function(){return{isVisible:!1,isLighten:!1,timers:{showOrHideButtonTimer:0,lightenButtonTimer:0}}},methods:{initScrollTopButton:function(){window.addEventListener(\"scroll\",this.promptScrollTopButton)},destroyScrollTopButton:function(){window.removeEventListener(\"scroll\",this.promptScrollTopButton)},promptScrollTopButton:function(){this.resetScrollTopButton(),this.showOrHideScrollTopButton()},resetScrollTopButton:function(){clearTimeout(this.timers.showOrHideButtonTimer),clearTimeout(this.timers.lightenButtonTimer),this.isLighten\u003d!1},showOrHideScrollTopButton:function(){var t\u003dthis;this.timers.showOrHideButtonTimer\u003dsetTimeout((function(){document.body.scrollTop\u003e20||document.documentElement.scrollTop\u003e20?(t.isVisible\u003d!0,t.lightenScrollTopButton()):t.isVisible\u003d!1}),100)},lightenScrollTopButton:function(){var t\u003dthis;this.timers.lightenButtonTimer\u003dsetTimeout((function(){t.isLighten||(t.isLighten\u003d!0)}),1e3)},iconStyle:function(){var t\u003d{};return t.display\u003dthis.isVisible?\"block\":\"none\",this.iconColor\u0026\u0026(t.color\u003dthis.iconColor),t.bottom\u003dthis.bottom?this.bottom:\"2%\",t.right\u003dthis.right?this.right:\"2%\",t.position\u003d\"fixed\",t},handleScrollTop:function(){document.body.scrollIntoView({block:\"start\",behavior:\"smooth\"})},getIconSize:function(){return this.iconSize?\"fa-\".concat(this.iconSize):\"\"}},mounted:function(){this.initScrollTopButton()},beforeDestroy:function(){this.destroyScrollTopButton()}},ko,[],!1,null,null,null).exports},Eo\u003d{closeable:Qe()};const Oo\u003d{MarkBindVue:{plugin:{install:function(t){Object.keys(Eo).forEach((function(e){t.directive(e,Eo[e])})),Object.keys(To).forEach((function(e){t.component(e,To[e])}))}},components:To,directives:Eo},appFactory:function(){return{data:function(){return{searchData:[]}},methods:{searchCallback:function(t){var e\u003d\"\".concat(baseUrl,\"/\").concat(t.src.replace(/.md$/,\".html\")),n\u003dt.heading?\"#\".concat(t.heading.id):\"\";window.location\u003d\"\".concat(e).concat(n)}}}}};i(605);function Bo(t,e){var n\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var i\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(i\u003di.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Po(t){for(var e\u003d1;e\u003carguments.length;e++){var i\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?Bo(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Bo(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var Lo\u003dOo.MarkBindVue,No\u003dOo.appFactory;function Ao(){var t\u003ddocument.querySelector(\"header[sticky]\");if(null!\u003d\u003dt){var e\u003da(),n\u003d!1;t.addEventListener(\"transitionend\",(function(){n||(t.style.overflow\u003d\"\")})),new ResizeObserver((function(){e\u003da(),document.documentElement.style.setProperty(\"--sticky-header-height\",\"\".concat(e,\"px\")),window.innerWidth\u003e767\u0026\u0026n\u0026\u0026l()})).observe(t);var i,o\u003d0,r\u003dwindow.location.hash,s\u003dfunction(){if(!(window.innerWidth\u003e767)){if(r!\u003d\u003dwindow.location.hash)return r\u003dwindow.location.hash,void l();r\u003dwindow.location.hash;var i\u003dwindow.pageYOffset;if(!(window.innerHeight+i\u003e\u003ddocument.body.offsetHeight)){if(i\u003eo){t.style.position\u003d\"static\";var s\u003dt.getBoundingClientRect().top+e;if(t.style.position\u003d\"sticky\",s\u003e0)return;n\u003d!0,t.style.overflow\u003d\"hidden\",t.classList.add(\"hide-header\")}else l();o\u003di}}};window.addEventListener(\"scroll\",(function(){i\u0026\u0026clearTimeout(i),i\u003dsetTimeout(s,20)}))}function a(){var e\u003dwindow.getComputedStyle(t,null);return t.clientHeight-parseFloat(e.paddingTop)-parseFloat(e.paddingBottom)}function l(){n\u003d!1,t.classList.remove(\"hide-header\")}}function zo(){document.querySelectorAll(\"script[style-bypass-vue-compilation]\").forEach((function(t){var e\u003ddocument.createElement(\"style\");e.innerHTML\u003dt.innerHTML,t.parentNode.replaceChild(e,t)})),Ao()}Vue.use(Lo.plugin),window.onload\u003dfunction(){if(window.location.hash){var t\u003ddocument.getElementById(window.location.hash.slice(1));t\u0026\u0026t.scrollIntoView({behavior:\"smooth\",block:\"start\",inline:\"nearest\"})}},window.handleSiteNavClick\u003dfunction(t){var e\u003d!(arguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1])||arguments[1];if(e){var n\u003dt.getElementsByTagName(\"a\");if(n.length)return void(window.location.href\u003dn[0].href)}var i\u003dt.nextElementSibling,o\u003dt.lastElementChild.lastElementChild;i.classList.toggle(\"site-nav-dropdown-container-open\"),o.classList.toggle(\"site-nav-rotate-icon\")};const Mo\u003d{setup:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo()}})).$mount(\"#app\",!0)},setupWithSearch:function(){new Vue(Po(Po({render:function(t){return pageVueRenderFn.call(this,t)},staticRenderFns:pageVueStaticRenderFns},No()),{},{mounted:function(){zo(),function(t){fetch(\"\".concat(baseUrl,\"/siteData.json\")).then((function(t){return t.json()})).then((function(e){t.searchData\u003de.pages}))}(this)}})).$mount(\"#app\",!0)}}})(),o\u003do.default})());"}],"authorContributionMap":{"KevinEyo1":1}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/js/polyfill.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var c\u003d\"function\"\u003d\u003dtypeof require\u0026\u0026require;if(!u\u0026\u0026c)return c(o,!0);if(i)return i(o,!0);var a\u003dnew Error(\"Cannot find module \u0027\"+o+\"\u0027\");throw a.code\u003d\"MODULE_NOT_FOUND\",a}var f\u003dn[o]\u003d{exports:{}};t[o][0].call(f.exports,function(n){var r\u003dt[o][1][n];return s(r||n)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i\u003d\"function\"\u003d\u003dtypeof require\u0026\u0026require,o\u003d0;o\u003cr.length;o++)s(r[o]);return s}({1:[function(t,n,r){(function(n){\"use strict\";function define(t,n,e){t[n]||Object[r](t,n,{writable:!0,configurable:!0,value:e})}if(t(327),t(328),t(2),n._babelPolyfill)throw new Error(\"only one instance of babel-polyfill is allowed\");n._babelPolyfill\u003d!0;var r\u003d\"defineProperty\";define(String.prototype,\"padLeft\",\"\".padStart),define(String.prototype,\"padRight\",\"\".padEnd),\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function(t){[][t]\u0026\u0026define(Array,t,Function.call.bind([][t]))})}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{2:2,327:327,328:328}],2:[function(t,n,r){t(130),n.exports\u003dt(23).RegExp.escape},{130:130,23:23}],3:[function(t,n,r){n.exports\u003dfunction(t){if(\"function\"!\u003dtypeof t)throw TypeError(t+\" is not a function!\");return t}},{}],4:[function(t,n,r){var e\u003dt(18);n.exports\u003dfunction(t,n){if(\"number\"!\u003dtypeof t\u0026\u0026\"Number\"!\u003de(t))throw TypeError(n);return+t}},{18:18}],5:[function(t,n,r){var e\u003dt(128)(\"unscopables\"),i\u003dArray.prototype;void 0\u003d\u003di[e]\u0026\u0026t(42)(i,e,{}),n.exports\u003dfunction(t){i[e][t]\u003d!0}},{128:128,42:42}],6:[function(t,n,r){n.exports\u003dfunction(t,n,r,e){if(!(t instanceof n)||void 0!\u003d\u003de\u0026\u0026e in t)throw TypeError(r+\": incorrect invocation!\");return t}},{}],7:[function(t,n,r){var e\u003dt(51);n.exports\u003dfunction(t){if(!e(t))throw TypeError(t+\" is not an object!\");return t}},{51:51}],8:[function(t,n,r){\"use strict\";var e\u003dt(119),i\u003dt(114),o\u003dt(118);n.exports\u003d[].copyWithin||function copyWithin(t,n){var r\u003de(this),u\u003do(r.length),c\u003di(t,u),a\u003di(n,u),f\u003darguments.length\u003e2?arguments[2]:void 0,s\u003dMath.min((void 0\u003d\u003d\u003df?u:i(f,u))-a,u-c),l\u003d1;for(a\u003cc\u0026\u0026c\u003ca+s\u0026\u0026(l\u003d-1,a+\u003ds-1,c+\u003ds-1);s-- \u003e0;)a in r?r[c]\u003dr[a]:delete r[c],c+\u003dl,a+\u003dl;return r}},{114:114,118:118,119:119}],9:[function(t,n,r){\"use strict\";var e\u003dt(119),i\u003dt(114),o\u003dt(118);n.exports\u003dfunction fill(t){for(var n\u003de(this),r\u003do(n.length),u\u003darguments.length,c\u003di(u\u003e1?arguments[1]:void 0,r),a\u003du\u003e2?arguments[2]:void 0,f\u003dvoid 0\u003d\u003d\u003da?r:i(a,r);f\u003ec;)n[c++]\u003dt;return n}},{114:114,118:118,119:119}],10:[function(t,n,r){var e\u003dt(39);n.exports\u003dfunction(t,n){var r\u003d[];return e(t,!1,r.push,r,n),r}},{39:39}],11:[function(t,n,r){var e\u003dt(117),i\u003dt(118),o\u003dt(114);n.exports\u003dfunction(t){return function(n,r,u){var c,a\u003de(n),f\u003di(a.length),s\u003do(u,f);if(t\u0026\u0026r!\u003dr){for(;f\u003es;)if((c\u003da[s++])!\u003dc)return!0}else for(;f\u003es;s++)if((t||s in a)\u0026\u0026a[s]\u003d\u003d\u003dr)return t||s||0;return!t\u0026\u0026-1}}},{114:114,117:117,118:118}],12:[function(t,n,r){var e\u003dt(25),i\u003dt(47),o\u003dt(119),u\u003dt(118),c\u003dt(15);n.exports\u003dfunction(t,n){var r\u003d1\u003d\u003dt,a\u003d2\u003d\u003dt,f\u003d3\u003d\u003dt,s\u003d4\u003d\u003dt,l\u003d6\u003d\u003dt,h\u003d5\u003d\u003dt||l,v\u003dn||c;return function(n,c,p){for(var d,y,g\u003do(n),m\u003di(g),b\u003de(c,p,3),x\u003du(m.length),S\u003d0,w\u003dr?v(n,x):a?v(n,0):void 0;x\u003eS;S++)if((h||S in m)\u0026\u0026(d\u003dm[S],y\u003db(d,S,g),t))if(r)w[S]\u003dy;else if(y)switch(t){case 3:return!0;case 5:return d;case 6:return S;case 2:w.push(d)}else if(s)return!1;return l?-1:f||s?s:w}}},{118:118,119:119,15:15,25:25,47:47}],13:[function(t,n,r){var e\u003dt(3),i\u003dt(119),o\u003dt(47),u\u003dt(118);n.exports\u003dfunction(t,n,r,c,a){e(n);var f\u003di(t),s\u003do(f),l\u003du(f.length),h\u003da?l-1:0,v\u003da?-1:1;if(r\u003c2)for(;;){if(h in s){c\u003ds[h],h+\u003dv;break}if(h+\u003dv,a?h\u003c0:l\u003c\u003dh)throw TypeError(\"Reduce of empty array with no initial value\")}for(;a?h\u003e\u003d0:l\u003eh;h+\u003dv)h in s\u0026\u0026(c\u003dn(c,s[h],h,f));return c}},{118:118,119:119,3:3,47:47}],14:[function(t,n,r){var e\u003dt(51),i\u003dt(49),o\u003dt(128)(\"species\");n.exports\u003dfunction(t){var n;return i(t)\u0026\u0026(n\u003dt.constructor,\"function\"!\u003dtypeof n||n!\u003d\u003dArray\u0026\u0026!i(n.prototype)||(n\u003dvoid 0),e(n)\u0026\u0026null\u003d\u003d\u003d(n\u003dn[o])\u0026\u0026(n\u003dvoid 0)),void 0\u003d\u003d\u003dn?Array:n}},{128:128,49:49,51:51}],15:[function(t,n,r){var e\u003dt(14);n.exports\u003dfunction(t,n){return new(e(t))(n)}},{14:14}],16:[function(t,n,r){\"use strict\";var e\u003dt(3),i\u003dt(51),o\u003dt(46),u\u003d[].slice,c\u003d{},a\u003dfunction(t,n,r){if(!(n in c)){for(var e\u003d[],i\u003d0;i\u003cn;i++)e[i]\u003d\"a[\"+i+\"]\";c[n]\u003dFunction(\"F,a\",\"return new F(\"+e.join(\",\")+\")\")}return c[n](t,r)};n.exports\u003dFunction.bind||function bind(t){var n\u003de(this),r\u003du.call(arguments,1),c\u003dfunction(){var e\u003dr.concat(u.call(arguments));return this instanceof c?a(n,e.length,e):o(n,e,t)};return i(n.prototype)\u0026\u0026(c.prototype\u003dn.prototype),c}},{3:3,46:46,51:51}],17:[function(t,n,r){var e\u003dt(18),i\u003dt(128)(\"toStringTag\"),o\u003d\"Arguments\"\u003d\u003de(function(){return arguments}()),u\u003dfunction(t,n){try{return t[n]}catch(t){}};n.exports\u003dfunction(t){var n,r,c;return void 0\u003d\u003d\u003dt?\"Undefined\":null\u003d\u003d\u003dt?\"Null\":\"string\"\u003d\u003dtypeof(r\u003du(n\u003dObject(t),i))?r:o?e(n):\"Object\"\u003d\u003d(c\u003de(n))\u0026\u0026\"function\"\u003d\u003dtypeof n.callee?\"Arguments\":c}},{128:128,18:18}],18:[function(t,n,r){var e\u003d{}.toString;n.exports\u003dfunction(t){return e.call(t).slice(8,-1)}},{}],19:[function(t,n,r){\"use strict\";var e\u003dt(72).f,i\u003dt(71),o\u003dt(93),u\u003dt(25),c\u003dt(6),a\u003dt(39),f\u003dt(55),s\u003dt(57),l\u003dt(100),h\u003dt(29),v\u003dt(66).fastKey,p\u003dt(125),d\u003dh?\"_s\":\"size\",y\u003dfunction(t,n){var r,e\u003dv(n);if(\"F\"!\u003d\u003de)return t._i[e];for(r\u003dt._f;r;r\u003dr.n)if(r.k\u003d\u003dn)return r};n.exports\u003d{getConstructor:function(t,n,r,f){var s\u003dt(function(t,e){c(t,s,n,\"_i\"),t._t\u003dn,t._i\u003di(null),t._f\u003dvoid 0,t._l\u003dvoid 0,t[d]\u003d0,void 0!\u003de\u0026\u0026a(e,r,t[f],t)});return o(s.prototype,{clear:function clear(){for(var t\u003dp(this,n),r\u003dt._i,e\u003dt._f;e;e\u003de.n)e.r\u003d!0,e.p\u0026\u0026(e.p\u003de.p.n\u003dvoid 0),delete r[e.i];t._f\u003dt._l\u003dvoid 0,t[d]\u003d0},delete:function(t){var r\u003dp(this,n),e\u003dy(r,t);if(e){var i\u003de.n,o\u003de.p;delete r._i[e.i],e.r\u003d!0,o\u0026\u0026(o.n\u003di),i\u0026\u0026(i.p\u003do),r._f\u003d\u003de\u0026\u0026(r._f\u003di),r._l\u003d\u003de\u0026\u0026(r._l\u003do),r[d]--}return!!e},forEach:function forEach(t){p(this,n);for(var r,e\u003du(t,arguments.length\u003e1?arguments[1]:void 0,3);r\u003dr?r.n:this._f;)for(e(r.v,r.k,this);r\u0026\u0026r.r;)r\u003dr.p},has:function has(t){return!!y(p(this,n),t)}}),h\u0026\u0026e(s.prototype,\"size\",{get:function(){return p(this,n)[d]}}),s},def:function(t,n,r){var e,i,o\u003dy(t,n);return o?o.v\u003dr:(t._l\u003do\u003d{i:i\u003dv(n,!0),k:n,v:r,p:e\u003dt._l,n:void 0,r:!1},t._f||(t._f\u003do),e\u0026\u0026(e.n\u003do),t[d]++,\"F\"!\u003d\u003di\u0026\u0026(t._i[i]\u003do)),t},getEntry:y,setStrong:function(t,n,r){f(t,n,function(t,r){this._t\u003dp(t,n),this._k\u003dr,this._l\u003dvoid 0},function(){for(var t\u003dthis,n\u003dt._k,r\u003dt._l;r\u0026\u0026r.r;)r\u003dr.p;return t._t\u0026\u0026(t._l\u003dr\u003dr?r.n:t._t._f)?\"keys\"\u003d\u003dn?s(0,r.k):\"values\"\u003d\u003dn?s(0,r.v):s(0,[r.k,r.v]):(t._t\u003dvoid 0,s(1))},r?\"entries\":\"values\",!r,!0),l(n)}}},{100:100,125:125,25:25,29:29,39:39,55:55,57:57,6:6,66:66,71:71,72:72,93:93}],20:[function(t,n,r){var e\u003dt(17),i\u003dt(10);n.exports\u003dfunction(t){return function toJSON(){if(e(this)!\u003dt)throw TypeError(t+\"#toJSON isn\u0027t generic\");return i(this)}}},{10:10,17:17}],21:[function(t,n,r){\"use strict\";var e\u003dt(93),i\u003dt(66).getWeak,o\u003dt(7),u\u003dt(51),c\u003dt(6),a\u003dt(39),f\u003dt(12),s\u003dt(41),l\u003dt(125),h\u003df(5),v\u003df(6),p\u003d0,d\u003dfunction(t){return t._l||(t._l\u003dnew y)},y\u003dfunction(){this.a\u003d[]},g\u003dfunction(t,n){return h(t.a,function(t){return t[0]\u003d\u003d\u003dn})};y.prototype\u003d{get:function(t){var n\u003dg(this,t);if(n)return n[1]},has:function(t){return!!g(this,t)},set:function(t,n){var r\u003dg(this,t);r?r[1]\u003dn:this.a.push([t,n])},delete:function(t){var n\u003dv(this.a,function(n){return n[0]\u003d\u003d\u003dt});return~n\u0026\u0026this.a.splice(n,1),!!~n}},n.exports\u003d{getConstructor:function(t,n,r,o){var f\u003dt(function(t,e){c(t,f,n,\"_i\"),t._t\u003dn,t._i\u003dp++,t._l\u003dvoid 0,void 0!\u003de\u0026\u0026a(e,r,t[o],t)});return e(f.prototype,{delete:function(t){if(!u(t))return!1;var r\u003di(t);return!0\u003d\u003d\u003dr?d(l(this,n)).delete(t):r\u0026\u0026s(r,this._i)\u0026\u0026delete r[this._i]},has:function has(t){if(!u(t))return!1;var r\u003di(t);return!0\u003d\u003d\u003dr?d(l(this,n)).has(t):r\u0026\u0026s(r,this._i)}}),f},def:function(t,n,r){var e\u003di(o(n),!0);return!0\u003d\u003d\u003de?d(t).set(n,r):e[t._i]\u003dr,t},ufstore:d}},{12:12,125:125,39:39,41:41,51:51,6:6,66:66,7:7,93:93}],22:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(33),o\u003dt(94),u\u003dt(93),c\u003dt(66),a\u003dt(39),f\u003dt(6),s\u003dt(51),l\u003dt(35),h\u003dt(56),v\u003dt(101),p\u003dt(45);n.exports\u003dfunction(t,n,r,d,y,g){var m\u003de[t],b\u003dm,x\u003dy?\"set\":\"add\",S\u003db\u0026\u0026b.prototype,w\u003d{},_\u003dfunction(t){var n\u003dS[t];o(S,t,\"delete\"\u003d\u003dt?function(t){return!(g\u0026\u0026!s(t))\u0026\u0026n.call(this,0\u003d\u003d\u003dt?0:t)}:\"has\"\u003d\u003dt?function has(t){return!(g\u0026\u0026!s(t))\u0026\u0026n.call(this,0\u003d\u003d\u003dt?0:t)}:\"get\"\u003d\u003dt?function get(t){return g\u0026\u0026!s(t)?void 0:n.call(this,0\u003d\u003d\u003dt?0:t)}:\"add\"\u003d\u003dt?function add(t){return n.call(this,0\u003d\u003d\u003dt?0:t),this}:function set(t,r){return n.call(this,0\u003d\u003d\u003dt?0:t,r),this})};if(\"function\"\u003d\u003dtypeof b\u0026\u0026(g||S.forEach\u0026\u0026!l(function(){(new b).entries().next()}))){var E\u003dnew b,O\u003dE[x](g?{}:-0,1)!\u003dE,P\u003dl(function(){E.has(1)}),M\u003dh(function(t){new b(t)}),F\u003d!g\u0026\u0026l(function(){for(var t\u003dnew b,n\u003d5;n--;)t[x](n,n);return!t.has(-0)});M||(b\u003dn(function(n,r){f(n,b,t);var e\u003dp(new m,n,b);return void 0!\u003dr\u0026\u0026a(r,y,e[x],e),e}),b.prototype\u003dS,S.constructor\u003db),(P||F)\u0026\u0026(_(\"delete\"),_(\"has\"),y\u0026\u0026_(\"get\")),(F||O)\u0026\u0026_(x),g\u0026\u0026S.clear\u0026\u0026delete S.clear}else b\u003dd.getConstructor(n,t,y,x),u(b.prototype,r),c.NEED\u003d!0;return v(b,t),w[t]\u003db,i(i.G+i.W+i.F*(b!\u003dm),w),g||d.setStrong(b,t,y),b}},{101:101,33:33,35:35,39:39,40:40,45:45,51:51,56:56,6:6,66:66,93:93,94:94}],23:[function(t,n,r){var e\u003dn.exports\u003d{version:\"2.5.0\"};\"number\"\u003d\u003dtypeof __e\u0026\u0026(__e\u003de)},{}],24:[function(t,n,r){\"use strict\";var e\u003dt(72),i\u003dt(92);n.exports\u003dfunction(t,n,r){n in t?e.f(t,n,i(0,r)):t[n]\u003dr}},{72:72,92:92}],25:[function(t,n,r){var e\u003dt(3);n.exports\u003dfunction(t,n,r){if(e(t),void 0\u003d\u003d\u003dn)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,i){return t.call(n,r,e,i)}}return function(){return t.apply(n,arguments)}}},{3:3}],26:[function(t,n,r){\"use strict\";var e\u003dt(35),i\u003dDate.prototype.getTime,o\u003dDate.prototype.toISOString,u\u003dfunction(t){return t\u003e9?t:\"0\"+t};n.exports\u003de(function(){return\"0385-07-25T07:06:39.999Z\"!\u003do.call(new Date(-5e13-1))})||!e(function(){o.call(new Date(NaN))})?function toISOString(){if(!isFinite(i.call(this)))throw RangeError(\"Invalid time value\");var t\u003dthis,n\u003dt.getUTCFullYear(),r\u003dt.getUTCMilliseconds(),e\u003dn\u003c0?\"-\":n\u003e9999?\"+\":\"\";return e+(\"00000\"+Math.abs(n)).slice(e?-6:-4)+\"-\"+u(t.getUTCMonth()+1)+\"-\"+u(t.getUTCDate())+\"T\"+u(t.getUTCHours())+\":\"+u(t.getUTCMinutes())+\":\"+u(t.getUTCSeconds())+\".\"+(r\u003e99?r:\"0\"+u(r))+\"Z\"}:o},{35:35}],27:[function(t,n,r){\"use strict\";var e\u003dt(7),i\u003dt(120);n.exports\u003dfunction(t){if(\"string\"!\u003d\u003dt\u0026\u0026\"number\"!\u003d\u003dt\u0026\u0026\"default\"!\u003d\u003dt)throw TypeError(\"Incorrect hint\");return i(e(this),\"number\"!\u003dt)}},{120:120,7:7}],28:[function(t,n,r){n.exports\u003dfunction(t){if(void 0\u003d\u003dt)throw TypeError(\"Can\u0027t call method on \"+t);return t}},{}],29:[function(t,n,r){n.exports\u003d!t(35)(function(){return 7!\u003dObject.defineProperty({},\"a\",{get:function(){return 7}}).a})},{35:35}],30:[function(t,n,r){var e\u003dt(51),i\u003dt(40).document,o\u003de(i)\u0026\u0026e(i.createElement);n.exports\u003dfunction(t){return o?i.createElement(t):{}}},{40:40,51:51}],31:[function(t,n,r){n.exports\u003d\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},{}],32:[function(t,n,r){var e\u003dt(81),i\u003dt(78),o\u003dt(82);n.exports\u003dfunction(t){var n\u003de(t),r\u003di.f;if(r)for(var u,c\u003dr(t),a\u003do.f,f\u003d0;c.length\u003ef;)a.call(t,u\u003dc[f++])\u0026\u0026n.push(u);return n}},{78:78,81:81,82:82}],33:[function(t,n,r){var e\u003dt(40),i\u003dt(23),o\u003dt(42),u\u003dt(94),c\u003dt(25),a\u003dfunction(t,n,r){var f,s,l,h,v\u003dt\u0026a.F,p\u003dt\u0026a.G,d\u003dt\u0026a.S,y\u003dt\u0026a.P,g\u003dt\u0026a.B,m\u003dp?e:d?e[n]||(e[n]\u003d{}):(e[n]||{}).prototype,b\u003dp?i:i[n]||(i[n]\u003d{}),x\u003db.prototype||(b.prototype\u003d{});p\u0026\u0026(r\u003dn);for(f in r)s\u003d!v\u0026\u0026m\u0026\u0026void 0!\u003d\u003dm[f],l\u003d(s?m:r)[f],h\u003dg\u0026\u0026s?c(l,e):y\u0026\u0026\"function\"\u003d\u003dtypeof l?c(Function.call,l):l,m\u0026\u0026u(m,f,l,t\u0026a.U),b[f]!\u003dl\u0026\u0026o(b,f,h),y\u0026\u0026x[f]!\u003dl\u0026\u0026(x[f]\u003dl)};e.core\u003di,a.F\u003d1,a.G\u003d2,a.S\u003d4,a.P\u003d8,a.B\u003d16,a.W\u003d32,a.U\u003d64,a.R\u003d128,n.exports\u003da},{23:23,25:25,40:40,42:42,94:94}],34:[function(t,n,r){var e\u003dt(128)(\"match\");n.exports\u003dfunction(t){var n\u003d/./;try{\"/./\"[t](n)}catch(r){try{return n[e]\u003d!1,!\"/./\"[t](n)}catch(t){}}return!0}},{128:128}],35:[function(t,n,r){n.exports\u003dfunction(t){try{return!!t()}catch(t){return!0}}},{}],36:[function(t,n,r){\"use strict\";var e\u003dt(42),i\u003dt(94),o\u003dt(35),u\u003dt(28),c\u003dt(128);n.exports\u003dfunction(t,n,r){var a\u003dc(t),f\u003dr(u,a,\"\"[t]),s\u003df[0],l\u003df[1];o(function(){var n\u003d{};return n[a]\u003dfunction(){return 7},7!\u003d\"\"[t](n)})\u0026\u0026(i(String.prototype,t,s),e(RegExp.prototype,a,2\u003d\u003dn?function(t,n){return l.call(t,this,n)}:function(t){return l.call(t,this)}))}},{128:128,28:28,35:35,42:42,94:94}],37:[function(t,n,r){\"use strict\";var e\u003dt(7);n.exports\u003dfunction(){var t\u003de(this),n\u003d\"\";return t.global\u0026\u0026(n+\u003d\"g\"),t.ignoreCase\u0026\u0026(n+\u003d\"i\"),t.multiline\u0026\u0026(n+\u003d\"m\"),t.unicode\u0026\u0026(n+\u003d\"u\"),t.sticky\u0026\u0026(n+\u003d\"y\"),n}},{7:7}],38:[function(t,n,r){\"use strict\";function flattenIntoArray(t,n,r,a,f,s,l,h){for(var v,p,d\u003df,y\u003d0,g\u003d!!l\u0026\u0026u(l,h,3);y\u003ca;){if(y in r){if(v\u003dg?g(r[y],y,n):r[y],p\u003d!1,i(v)\u0026\u0026(p\u003dv[c],p\u003dvoid 0!\u003d\u003dp?!!p:e(v)),p\u0026\u0026s\u003e0)d\u003dflattenIntoArray(t,n,v,o(v.length),d,s-1)-1;else{if(d\u003e\u003d9007199254740991)throw TypeError();t[d]\u003dv}d++}y++}return d}var e\u003dt(49),i\u003dt(51),o\u003dt(118),u\u003dt(25),c\u003dt(128)(\"isConcatSpreadable\");n.exports\u003dflattenIntoArray},{118:118,128:128,25:25,49:49,51:51}],39:[function(t,n,r){var e\u003dt(25),i\u003dt(53),o\u003dt(48),u\u003dt(7),c\u003dt(118),a\u003dt(129),f\u003d{},s\u003d{},r\u003dn.exports\u003dfunction(t,n,r,l,h){var v,p,d,y,g\u003dh?function(){return t}:a(t),m\u003de(r,l,n?2:1),b\u003d0;if(\"function\"!\u003dtypeof g)throw TypeError(t+\" is not iterable!\");if(o(g)){for(v\u003dc(t.length);v\u003eb;b++)if((y\u003dn?m(u(p\u003dt[b])[0],p[1]):m(t[b]))\u003d\u003d\u003df||y\u003d\u003d\u003ds)return y}else for(d\u003dg.call(t);!(p\u003dd.next()).done;)if((y\u003di(d,m,p.value,n))\u003d\u003d\u003df||y\u003d\u003d\u003ds)return y};r.BREAK\u003df,r.RETURN\u003ds},{118:118,129:129,25:25,48:48,53:53,7:7}],40:[function(t,n,r){var e\u003dn.exports\u003d\"undefined\"!\u003dtypeof window\u0026\u0026window.Math\u003d\u003dMath?window:\"undefined\"!\u003dtypeof self\u0026\u0026self.Math\u003d\u003dMath?self:Function(\"return this\")();\"number\"\u003d\u003dtypeof __g\u0026\u0026(__g\u003de)},{}],41:[function(t,n,r){var e\u003d{}.hasOwnProperty;n.exports\u003dfunction(t,n){return e.call(t,n)}},{}],42:[function(t,n,r){var e\u003dt(72),i\u003dt(92);n.exports\u003dt(29)?function(t,n,r){return e.f(t,n,i(1,r))}:function(t,n,r){return t[n]\u003dr,t}},{29:29,72:72,92:92}],43:[function(t,n,r){var e\u003dt(40).document;n.exports\u003de\u0026\u0026e.documentElement},{40:40}],44:[function(t,n,r){n.exports\u003d!t(29)\u0026\u0026!t(35)(function(){return 7!\u003dObject.defineProperty(t(30)(\"div\"),\"a\",{get:function(){return 7}}).a})},{29:29,30:30,35:35}],45:[function(t,n,r){var e\u003dt(51),i\u003dt(99).set;n.exports\u003dfunction(t,n,r){var o,u\u003dn.constructor;return u!\u003d\u003dr\u0026\u0026\"function\"\u003d\u003dtypeof u\u0026\u0026(o\u003du.prototype)!\u003d\u003dr.prototype\u0026\u0026e(o)\u0026\u0026i\u0026\u0026i(t,o),t}},{51:51,99:99}],46:[function(t,n,r){n.exports\u003dfunction(t,n,r){var e\u003dvoid 0\u003d\u003d\u003dr;switch(n.length){case 0:return e?t():t.call(r);case 1:return e?t(n[0]):t.call(r,n[0]);case 2:return e?t(n[0],n[1]):t.call(r,n[0],n[1]);case 3:return e?t(n[0],n[1],n[2]):t.call(r,n[0],n[1],n[2]);case 4:return e?t(n[0],n[1],n[2],n[3]):t.call(r,n[0],n[1],n[2],n[3])}return t.apply(r,n)}},{}],47:[function(t,n,r){var e\u003dt(18);n.exports\u003dObject(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"\u003d\u003de(t)?t.split(\"\"):Object(t)}},{18:18}],48:[function(t,n,r){var e\u003dt(58),i\u003dt(128)(\"iterator\"),o\u003dArray.prototype;n.exports\u003dfunction(t){return void 0!\u003d\u003dt\u0026\u0026(e.Array\u003d\u003d\u003dt||o[i]\u003d\u003d\u003dt)}},{128:128,58:58}],49:[function(t,n,r){var e\u003dt(18);n.exports\u003dArray.isArray||function isArray(t){return\"Array\"\u003d\u003de(t)}},{18:18}],50:[function(t,n,r){var e\u003dt(51),i\u003dMath.floor;n.exports\u003dfunction isInteger(t){return!e(t)\u0026\u0026isFinite(t)\u0026\u0026i(t)\u003d\u003d\u003dt}},{51:51}],51:[function(t,n,r){n.exports\u003dfunction(t){return\"object\"\u003d\u003dtypeof t?null!\u003d\u003dt:\"function\"\u003d\u003dtypeof t}},{}],52:[function(t,n,r){var e\u003dt(51),i\u003dt(18),o\u003dt(128)(\"match\");n.exports\u003dfunction(t){var n;return e(t)\u0026\u0026(void 0!\u003d\u003d(n\u003dt[o])?!!n:\"RegExp\"\u003d\u003di(t))}},{128:128,18:18,51:51}],53:[function(t,n,r){var e\u003dt(7);n.exports\u003dfunction(t,n,r,i){try{return i?n(e(r)[0],r[1]):n(r)}catch(n){var o\u003dt.return;throw void 0!\u003d\u003do\u0026\u0026e(o.call(t)),n}}},{7:7}],54:[function(t,n,r){\"use strict\";var e\u003dt(71),i\u003dt(92),o\u003dt(101),u\u003d{};t(42)(u,t(128)(\"iterator\"),function(){return this}),n.exports\u003dfunction(t,n,r){t.prototype\u003de(u,{next:i(1,r)}),o(t,n+\" Iterator\")}},{101:101,128:128,42:42,71:71,92:92}],55:[function(t,n,r){\"use strict\";var e\u003dt(60),i\u003dt(33),o\u003dt(94),u\u003dt(42),c\u003dt(41),a\u003dt(58),f\u003dt(54),s\u003dt(101),l\u003dt(79),h\u003dt(128)(\"iterator\"),v\u003d!([].keys\u0026\u0026\"next\"in[].keys()),p\u003dfunction(){return this};n.exports\u003dfunction(t,n,r,d,y,g,m){f(r,n,d);var b,x,S,w\u003dfunction(t){if(!v\u0026\u0026t in P)return P[t];switch(t){case\"keys\":return function keys(){return new r(this,t)};case\"values\":return function values(){return new r(this,t)}}return function entries(){return new r(this,t)}},_\u003dn+\" Iterator\",E\u003d\"values\"\u003d\u003dy,O\u003d!1,P\u003dt.prototype,M\u003dP[h]||P[\"@@iterator\"]||y\u0026\u0026P[y],F\u003dM||w(y),I\u003dy?E?w(\"entries\"):F:void 0,A\u003d\"Array\"\u003d\u003dn?P.entries||M:M;if(A\u0026\u0026(S\u003dl(A.call(new t)))!\u003d\u003dObject.prototype\u0026\u0026S.next\u0026\u0026(s(S,_,!0),e||c(S,h)||u(S,h,p)),E\u0026\u0026M\u0026\u0026\"values\"!\u003d\u003dM.name\u0026\u0026(O\u003d!0,F\u003dfunction values(){return M.call(this)}),e\u0026\u0026!m||!v\u0026\u0026!O\u0026\u0026P[h]||u(P,h,F),a[n]\u003dF,a[_]\u003dp,y)if(b\u003d{values:E?F:w(\"values\"),keys:g?F:w(\"keys\"),entries:I},m)for(x in b)x in P||o(P,x,b[x]);else i(i.P+i.F*(v||O),n,b);return b}},{101:101,128:128,33:33,41:41,42:42,54:54,58:58,60:60,79:79,94:94}],56:[function(t,n,r){var e\u003dt(128)(\"iterator\"),i\u003d!1;try{var o\u003d[7][e]();o.return\u003dfunction(){i\u003d!0},Array.from(o,function(){throw 2})}catch(t){}n.exports\u003dfunction(t,n){if(!n\u0026\u0026!i)return!1;var r\u003d!1;try{var o\u003d[7],u\u003do[e]();u.next\u003dfunction(){return{done:r\u003d!0}},o[e]\u003dfunction(){return u},t(o)}catch(t){}return r}},{128:128}],57:[function(t,n,r){n.exports\u003dfunction(t,n){return{value:n,done:!!t}}},{}],58:[function(t,n,r){n.exports\u003d{}},{}],59:[function(t,n,r){var e\u003dt(81),i\u003dt(117);n.exports\u003dfunction(t,n){for(var r,o\u003di(t),u\u003de(o),c\u003du.length,a\u003d0;c\u003ea;)if(o[r\u003du[a++]]\u003d\u003d\u003dn)return r}},{117:117,81:81}],60:[function(t,n,r){n.exports\u003d!1},{}],61:[function(t,n,r){var e\u003dMath.expm1;n.exports\u003d!e||e(10)\u003e22025.465794806718||e(10)\u003c22025.465794806718||-2e-17!\u003de(-2e-17)?function expm1(t){return 0\u003d\u003d(t\u003d+t)?t:t\u003e-1e-6\u0026\u0026t\u003c1e-6?t+t*t/2:Math.exp(t)-1}:e},{}],62:[function(t,n,r){var e\u003dt(65),i\u003dMath.pow,o\u003di(2,-52),u\u003di(2,-23),c\u003di(2,127)*(2-u),a\u003di(2,-126),f\u003dfunction(t){return t+1/o-1/o};n.exports\u003dMath.fround||function fround(t){var n,r,i\u003dMath.abs(t),s\u003de(t);return i\u003ca?s*f(i/a/u)*a*u:(n\u003d(1+u/o)*i,r\u003dn-(n-i),r\u003ec||r!\u003dr?s*(1/0):s*r)}},{65:65}],63:[function(t,n,r){n.exports\u003dMath.log1p||function log1p(t){return(t\u003d+t)\u003e-1e-8\u0026\u0026t\u003c1e-8?t-t*t/2:Math.log(1+t)}},{}],64:[function(t,n,r){n.exports\u003dMath.scale||function scale(t,n,r,e,i){return 0\u003d\u003d\u003darguments.length||t!\u003dt||n!\u003dn||r!\u003dr||e!\u003de||i!\u003di?NaN:t\u003d\u003d\u003d1/0||t\u003d\u003d\u003d-1/0?t:(t-n)*(i-e)/(r-n)+e}},{}],65:[function(t,n,r){n.exports\u003dMath.sign||function sign(t){return 0\u003d\u003d(t\u003d+t)||t!\u003dt?t:t\u003c0?-1:1}},{}],66:[function(t,n,r){var e\u003dt(124)(\"meta\"),i\u003dt(51),o\u003dt(41),u\u003dt(72).f,c\u003d0,a\u003dObject.isExtensible||function(){return!0},f\u003d!t(35)(function(){return a(Object.preventExtensions({}))}),s\u003dfunction(t){u(t,e,{value:{i:\"O\"+ ++c,w:{}}})},l\u003dfunction(t,n){if(!i(t))return\"symbol\"\u003d\u003dtypeof t?t:(\"string\"\u003d\u003dtypeof t?\"S\":\"P\")+t;if(!o(t,e)){if(!a(t))return\"F\";if(!n)return\"E\";s(t)}return t[e].i},h\u003dfunction(t,n){if(!o(t,e)){if(!a(t))return!0;if(!n)return!1;s(t)}return t[e].w},v\u003dfunction(t){return f\u0026\u0026p.NEED\u0026\u0026a(t)\u0026\u0026!o(t,e)\u0026\u0026s(t),t},p\u003dn.exports\u003d{KEY:e,NEED:!1,fastKey:l,getWeak:h,onFreeze:v}},{124:124,35:35,41:41,51:51,72:72}],67:[function(t,n,r){var e\u003dt(160),i\u003dt(33),o\u003dt(103)(\"metadata\"),u\u003do.store||(o.store\u003dnew(t(266))),c\u003dfunction(t,n,r){var i\u003du.get(t);if(!i){if(!r)return;u.set(t,i\u003dnew e)}var o\u003di.get(n);if(!o){if(!r)return;i.set(n,o\u003dnew e)}return o},a\u003dfunction(t,n,r){var e\u003dc(n,r,!1);return void 0!\u003d\u003de\u0026\u0026e.has(t)},f\u003dfunction(t,n,r){var e\u003dc(n,r,!1);return void 0\u003d\u003d\u003de?void 0:e.get(t)},s\u003dfunction(t,n,r,e){c(r,e,!0).set(t,n)},l\u003dfunction(t,n){var r\u003dc(t,n,!1),e\u003d[];return r\u0026\u0026r.forEach(function(t,n){e.push(n)}),e},h\u003dfunction(t){return void 0\u003d\u003d\u003dt||\"symbol\"\u003d\u003dtypeof t?t:String(t)},v\u003dfunction(t){i(i.S,\"Reflect\",t)};n.exports\u003d{store:u,map:c,has:a,get:f,set:s,keys:l,key:h,exp:v}},{103:103,160:160,266:266,33:33}],68:[function(t,n,r){var e\u003dt(40),i\u003dt(113).set,o\u003de.MutationObserver||e.WebKitMutationObserver,u\u003de.process,c\u003de.Promise,a\u003d\"process\"\u003d\u003dt(18)(u);n.exports\u003dfunction(){var t,n,r,f\u003dfunction(){var e,i;for(a\u0026\u0026(e\u003du.domain)\u0026\u0026e.exit();t;){i\u003dt.fn,t\u003dt.next;try{i()}catch(e){throw t?r():n\u003dvoid 0,e}}n\u003dvoid 0,e\u0026\u0026e.enter()};if(a)r\u003dfunction(){u.nextTick(f)};else if(o){var s\u003d!0,l\u003ddocument.createTextNode(\"\");new o(f).observe(l,{characterData:!0}),r\u003dfunction(){l.data\u003ds\u003d!s}}else if(c\u0026\u0026c.resolve){var h\u003dc.resolve();r\u003dfunction(){h.then(f)}}else r\u003dfunction(){i.call(e,f)};return function(e){var i\u003d{fn:e,next:void 0};n\u0026\u0026(n.next\u003di),t||(t\u003di,r()),n\u003di}}},{113:113,18:18,40:40}],69:[function(t,n,r){\"use strict\";function PromiseCapability(t){var n,r;this.promise\u003dnew t(function(t,e){if(void 0!\u003d\u003dn||void 0!\u003d\u003dr)throw TypeError(\"Bad Promise constructor\");n\u003dt,r\u003de}),this.resolve\u003de(n),this.reject\u003de(r)}var e\u003dt(3);n.exports.f\u003dfunction(t){return new PromiseCapability(t)}},{3:3}],70:[function(t,n,r){\"use strict\";var e\u003dt(81),i\u003dt(78),o\u003dt(82),u\u003dt(119),c\u003dt(47),a\u003dObject.assign;n.exports\u003d!a||t(35)(function(){var t\u003d{},n\u003d{},r\u003dSymbol(),e\u003d\"abcdefghijklmnopqrst\";return t[r]\u003d7,e.split(\"\").forEach(function(t){n[t]\u003dt}),7!\u003da({},t)[r]||Object.keys(a({},n)).join(\"\")!\u003de})?function assign(t,n){for(var r\u003du(t),a\u003darguments.length,f\u003d1,s\u003di.f,l\u003do.f;a\u003ef;)for(var h,v\u003dc(arguments[f++]),p\u003ds?e(v).concat(s(v)):e(v),d\u003dp.length,y\u003d0;d\u003ey;)l.call(v,h\u003dp[y++])\u0026\u0026(r[h]\u003dv[h]);return r}:a},{119:119,35:35,47:47,78:78,81:81,82:82}],71:[function(t,n,r){var e\u003dt(7),i\u003dt(73),o\u003dt(31),u\u003dt(102)(\"IE_PROTO\"),c\u003dfunction(){},a\u003dfunction(){var n,r\u003dt(30)(\"iframe\"),e\u003do.length;for(r.style.display\u003d\"none\",t(43).appendChild(r),r.src\u003d\"javascript:\",n\u003dr.contentWindow.document,n.open(),n.write(\"\u003cscript\u003edocument.F\u003dObject\u003c\\/script\u003e\"),n.close(),a\u003dn.F;e--;)delete a.prototype[o[e]];return a()};n.exports\u003dObject.create||function create(t,n){var r;return null!\u003d\u003dt?(c.prototype\u003de(t),r\u003dnew c,c.prototype\u003dnull,r[u]\u003dt):r\u003da(),void 0\u003d\u003d\u003dn?r:i(r,n)}},{102:102,30:30,31:31,43:43,7:7,73:73}],72:[function(t,n,r){var e\u003dt(7),i\u003dt(44),o\u003dt(120),u\u003dObject.defineProperty;r.f\u003dt(29)?Object.defineProperty:function defineProperty(t,n,r){if(e(t),n\u003do(n,!0),e(r),i)try{return u(t,n,r)}catch(t){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported!\");return\"value\"in r\u0026\u0026(t[n]\u003dr.value),t}},{120:120,29:29,44:44,7:7}],73:[function(t,n,r){var e\u003dt(72),i\u003dt(7),o\u003dt(81);n.exports\u003dt(29)?Object.defineProperties:function defineProperties(t,n){i(t);for(var r,u\u003do(n),c\u003du.length,a\u003d0;c\u003ea;)e.f(t,r\u003du[a++],n[r]);return t}},{29:29,7:7,72:72,81:81}],74:[function(t,n,r){\"use strict\";n.exports\u003dt(60)||!t(35)(function(){var n\u003dMath.random();__defineSetter__.call(null,n,function(){}),delete t(40)[n]})},{35:35,40:40,60:60}],75:[function(t,n,r){var e\u003dt(82),i\u003dt(92),o\u003dt(117),u\u003dt(120),c\u003dt(41),a\u003dt(44),f\u003dObject.getOwnPropertyDescriptor;r.f\u003dt(29)?f:function getOwnPropertyDescriptor(t,n){if(t\u003do(t),n\u003du(n,!0),a)try{return f(t,n)}catch(t){}if(c(t,n))return i(!e.f.call(t,n),t[n])}},{117:117,120:120,29:29,41:41,44:44,82:82,92:92}],76:[function(t,n,r){var e\u003dt(117),i\u003dt(77).f,o\u003d{}.toString,u\u003d\"object\"\u003d\u003dtypeof window\u0026\u0026window\u0026\u0026Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c\u003dfunction(t){try{return i(t)}catch(t){return u.slice()}};n.exports.f\u003dfunction getOwnPropertyNames(t){return u\u0026\u0026\"[object Window]\"\u003d\u003do.call(t)?c(t):i(e(t))}},{117:117,77:77}],77:[function(t,n,r){var e\u003dt(80),i\u003dt(31).concat(\"length\",\"prototype\");r.f\u003dObject.getOwnPropertyNames||function getOwnPropertyNames(t){return e(t,i)}},{31:31,80:80}],78:[function(t,n,r){r.f\u003dObject.getOwnPropertySymbols},{}],79:[function(t,n,r){var e\u003dt(41),i\u003dt(119),o\u003dt(102)(\"IE_PROTO\"),u\u003dObject.prototype;n.exports\u003dObject.getPrototypeOf||function(t){return t\u003di(t),e(t,o)?t[o]:\"function\"\u003d\u003dtypeof t.constructor\u0026\u0026t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},{102:102,119:119,41:41}],80:[function(t,n,r){var e\u003dt(41),i\u003dt(117),o\u003dt(11)(!1),u\u003dt(102)(\"IE_PROTO\");n.exports\u003dfunction(t,n){var r,c\u003di(t),a\u003d0,f\u003d[];for(r in c)r!\u003du\u0026\u0026e(c,r)\u0026\u0026f.push(r);for(;n.length\u003ea;)e(c,r\u003dn[a++])\u0026\u0026(~o(f,r)||f.push(r));return f}},{102:102,11:11,117:117,41:41}],81:[function(t,n,r){var e\u003dt(80),i\u003dt(31);n.exports\u003dObject.keys||function keys(t){return e(t,i)}},{31:31,80:80}],82:[function(t,n,r){r.f\u003d{}.propertyIsEnumerable},{}],83:[function(t,n,r){var e\u003dt(33),i\u003dt(23),o\u003dt(35);n.exports\u003dfunction(t,n){var r\u003d(i.Object||{})[t]||Object[t],u\u003d{};u[t]\u003dn(r),e(e.S+e.F*o(function(){r(1)}),\"Object\",u)}},{23:23,33:33,35:35}],84:[function(t,n,r){var e\u003dt(81),i\u003dt(117),o\u003dt(82).f;n.exports\u003dfunction(t){return function(n){for(var r,u\u003di(n),c\u003de(u),a\u003dc.length,f\u003d0,s\u003d[];a\u003ef;)o.call(u,r\u003dc[f++])\u0026\u0026s.push(t?[r,u[r]]:u[r]);return s}}},{117:117,81:81,82:82}],85:[function(t,n,r){var e\u003dt(77),i\u003dt(78),o\u003dt(7),u\u003dt(40).Reflect;n.exports\u003du\u0026\u0026u.ownKeys||function ownKeys(t){var n\u003de.f(o(t)),r\u003di.f;return r?n.concat(r(t)):n}},{40:40,7:7,77:77,78:78}],86:[function(t,n,r){var e\u003dt(40).parseFloat,i\u003dt(111).trim;n.exports\u003d1/e(t(112)+\"-0\")!\u003d-1/0?function parseFloat(t){var n\u003di(String(t),3),r\u003de(n);return 0\u003d\u003d\u003dr\u0026\u0026\"-\"\u003d\u003dn.charAt(0)?-0:r}:e},{111:111,112:112,40:40}],87:[function(t,n,r){var e\u003dt(40).parseInt,i\u003dt(111).trim,o\u003dt(112),u\u003d/^[-+]?0[xX]/;n.exports\u003d8!\u003d\u003de(o+\"08\")||22!\u003d\u003de(o+\"0x16\")?function parseInt(t,n){var r\u003di(String(t),3);return e(r,n\u003e\u003e\u003e0||(u.test(r)?16:10))}:e},{111:111,112:112,40:40}],88:[function(t,n,r){\"use strict\";var e\u003dt(89),i\u003dt(46),o\u003dt(3);n.exports\u003dfunction(){for(var t\u003do(this),n\u003darguments.length,r\u003dArray(n),u\u003d0,c\u003de._,a\u003d!1;n\u003eu;)(r[u]\u003darguments[u++])\u003d\u003d\u003dc\u0026\u0026(a\u003d!0);return function(){var e,o\u003dthis,u\u003darguments.length,f\u003d0,s\u003d0;if(!a\u0026\u0026!u)return i(t,r,o);if(e\u003dr.slice(),a)for(;n\u003ef;f++)e[f]\u003d\u003d\u003dc\u0026\u0026(e[f]\u003darguments[s++]);for(;u\u003es;)e.push(arguments[s++]);return i(t,e,o)}}},{3:3,46:46,89:89}],89:[function(t,n,r){n.exports\u003dt(40)},{40:40}],90:[function(t,n,r){n.exports\u003dfunction(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},{}],91:[function(t,n,r){var e\u003dt(69);n.exports\u003dfunction(t,n){var r\u003de.f(t);return(0,r.resolve)(n),r.promise}},{69:69}],92:[function(t,n,r){n.exports\u003dfunction(t,n){return{enumerable:!(1\u0026t),configurable:!(2\u0026t),writable:!(4\u0026t),value:n}}},{}],93:[function(t,n,r){var e\u003dt(94);n.exports\u003dfunction(t,n,r){for(var i in n)e(t,i,n[i],r);return t}},{94:94}],94:[function(t,n,r){var e\u003dt(40),i\u003dt(42),o\u003dt(41),u\u003dt(124)(\"src\"),c\u003dFunction.toString,a\u003d(\"\"+c).split(\"toString\");t(23).inspectSource\u003dfunction(t){return c.call(t)},(n.exports\u003dfunction(t,n,r,c){var f\u003d\"function\"\u003d\u003dtypeof r;f\u0026\u0026(o(r,\"name\")||i(r,\"name\",n)),t[n]!\u003d\u003dr\u0026\u0026(f\u0026\u0026(o(r,u)||i(r,u,t[n]?\"\"+t[n]:a.join(String(n)))),t\u003d\u003d\u003de?t[n]\u003dr:c?t[n]?t[n]\u003dr:i(t,n,r):(delete t[n],i(t,n,r)))})(Function.prototype,\"toString\",function toString(){return\"function\"\u003d\u003dtypeof this\u0026\u0026this[u]||c.call(this)})},{124:124,23:23,40:40,41:41,42:42}],95:[function(t,n,r){n.exports\u003dfunction(t,n){var r\u003dn\u003d\u003d\u003dObject(n)?function(t){return n[t]}:n;return function(n){return String(n).replace(t,r)}}},{}],96:[function(t,n,r){n.exports\u003dObject.is||function is(t,n){return t\u003d\u003d\u003dn?0!\u003d\u003dt||1/t\u003d\u003d1/n:t!\u003dt\u0026\u0026n!\u003dn}},{}],97:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(3),o\u003dt(25),u\u003dt(39);n.exports\u003dfunction(t){e(e.S,t,{from:function from(t){var n,r,e,c,a\u003darguments[1];return i(this),n\u003dvoid 0!\u003d\u003da,n\u0026\u0026i(a),void 0\u003d\u003dt?new this:(r\u003d[],n?(e\u003d0,c\u003do(a,arguments[2],2),u(t,!1,function(t){r.push(c(t,e++))})):u(t,!1,r.push,r),new this(r))}})}},{25:25,3:3,33:33,39:39}],98:[function(t,n,r){\"use strict\";var e\u003dt(33);n.exports\u003dfunction(t){e(e.S,t,{of:function of(){for(var t\u003darguments.length,n\u003dArray(t);t--;)n[t]\u003darguments[t];return new this(n)}})}},{33:33}],99:[function(t,n,r){var e\u003dt(51),i\u003dt(7),o\u003dfunction(t,n){if(i(t),!e(n)\u0026\u0026null!\u003d\u003dn)throw TypeError(n+\": can\u0027t set as prototype!\")};n.exports\u003d{set:Object.setPrototypeOf||(\"__proto__\"in{}?function(n,r,e){try{e\u003dt(25)(Function.call,t(75).f(Object.prototype,\"__proto__\").set,2),e(n,[]),r\u003d!(n instanceof Array)}catch(t){r\u003d!0}return function setPrototypeOf(t,n){return o(t,n),r?t.__proto__\u003dn:e(t,n),t}}({},!1):void 0),check:o}},{25:25,51:51,7:7,75:75}],100:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(72),o\u003dt(29),u\u003dt(128)(\"species\");n.exports\u003dfunction(t){var n\u003de[t];o\u0026\u0026n\u0026\u0026!n[u]\u0026\u0026i.f(n,u,{configurable:!0,get:function(){return this}})}},{128:128,29:29,40:40,72:72}],101:[function(t,n,r){var e\u003dt(72).f,i\u003dt(41),o\u003dt(128)(\"toStringTag\");n.exports\u003dfunction(t,n,r){t\u0026\u0026!i(t\u003dr?t:t.prototype,o)\u0026\u0026e(t,o,{configurable:!0,value:n})}},{128:128,41:41,72:72}],102:[function(t,n,r){var e\u003dt(103)(\"keys\"),i\u003dt(124);n.exports\u003dfunction(t){return e[t]||(e[t]\u003di(t))}},{103:103,124:124}],103:[function(t,n,r){var e\u003dt(40),i\u003de[\"__core-js_shared__\"]||(e[\"__core-js_shared__\"]\u003d{});n.exports\u003dfunction(t){return i[t]||(i[t]\u003d{})}},{40:40}],104:[function(t,n,r){var e\u003dt(7),i\u003dt(3),o\u003dt(128)(\"species\");n.exports\u003dfunction(t,n){var r,u\u003de(t).constructor;return void 0\u003d\u003d\u003du||void 0\u003d\u003d(r\u003de(u)[o])?n:i(r)}},{128:128,3:3,7:7}],105:[function(t,n,r){\"use strict\";var e\u003dt(35);n.exports\u003dfunction(t,n){return!!t\u0026\u0026e(function(){n?t.call(null,function(){},1):t.call(null)})}},{35:35}],106:[function(t,n,r){var e\u003dt(116),i\u003dt(28);n.exports\u003dfunction(t){return function(n,r){var o,u,c\u003dString(i(n)),a\u003de(r),f\u003dc.length;return a\u003c0||a\u003e\u003df?t?\"\":void 0:(o\u003dc.charCodeAt(a),o\u003c55296||o\u003e56319||a+1\u003d\u003d\u003df||(u\u003dc.charCodeAt(a+1))\u003c56320||u\u003e57343?t?c.charAt(a):o:t?c.slice(a,a+2):u-56320+(o-55296\u003c\u003c10)+65536)}}},{116:116,28:28}],107:[function(t,n,r){var e\u003dt(52),i\u003dt(28);n.exports\u003dfunction(t,n,r){if(e(n))throw TypeError(\"String#\"+r+\" doesn\u0027t accept regex!\");return String(i(t))}},{28:28,52:52}],108:[function(t,n,r){var e\u003dt(33),i\u003dt(35),o\u003dt(28),u\u003d/\"/g,c\u003dfunction(t,n,r,e){var i\u003dString(o(t)),c\u003d\"\u003c\"+n;return\"\"!\u003d\u003dr\u0026\u0026(c+\u003d\" \"+r+\u0027\u003d\"\u0027+String(e).replace(u,\"\u0026quot;\")+\u0027\"\u0027),c+\"\u003e\"+i+\"\u003c/\"+n+\"\u003e\"};n.exports\u003dfunction(t,n){var r\u003d{};r[t]\u003dn(c),e(e.P+e.F*i(function(){var n\u003d\"\"[t](\u0027\"\u0027);return n!\u003d\u003dn.toLowerCase()||n.split(\u0027\"\u0027).length\u003e3}),\"String\",r)}},{28:28,33:33,35:35}],109:[function(t,n,r){var e\u003dt(118),i\u003dt(110),o\u003dt(28);n.exports\u003dfunction(t,n,r,u){var c\u003dString(o(t)),a\u003dc.length,f\u003dvoid 0\u003d\u003d\u003dr?\" \":String(r),s\u003de(n);if(s\u003c\u003da||\"\"\u003d\u003df)return c;var l\u003ds-a,h\u003di.call(f,Math.ceil(l/f.length));return h.length\u003el\u0026\u0026(h\u003dh.slice(0,l)),u?h+c:c+h}},{110:110,118:118,28:28}],110:[function(t,n,r){\"use strict\";var e\u003dt(116),i\u003dt(28);n.exports\u003dfunction repeat(t){var n\u003dString(i(this)),r\u003d\"\",o\u003de(t);if(o\u003c0||o\u003d\u003d1/0)throw RangeError(\"Count can\u0027t be negative\");for(;o\u003e0;(o\u003e\u003e\u003e\u003d1)\u0026\u0026(n+\u003dn))1\u0026o\u0026\u0026(r+\u003dn);return r}},{116:116,28:28}],111:[function(t,n,r){var e\u003dt(33),i\u003dt(28),o\u003dt(35),u\u003dt(112),c\u003d\"[\"+u+\"]\",a\u003d\"​…\",f\u003dRegExp(\"^\"+c+c+\"*\"),s\u003dRegExp(c+c+\"*$\"),l\u003dfunction(t,n,r){var i\u003d{},c\u003do(function(){return!!u[t]()||a[t]()!\u003da}),f\u003di[t]\u003dc?n(h):u[t];r\u0026\u0026(i[r]\u003df),e(e.P+e.F*c,\"String\",i)},h\u003dl.trim\u003dfunction(t,n){return t\u003dString(i(t)),1\u0026n\u0026\u0026(t\u003dt.replace(f,\"\")),2\u0026n\u0026\u0026(t\u003dt.replace(s,\"\")),t};n.exports\u003dl},{112:112,28:28,33:33,35:35}],112:[function(t,n,r){n.exports\u003d\"\\t\\n\\v\\f\\r   ᠎              \\u2028\\u2029\\ufeff\"},{}],113:[function(t,n,r){var e,i,o,u\u003dt(25),c\u003dt(46),a\u003dt(43),f\u003dt(30),s\u003dt(40),l\u003ds.process,h\u003ds.setImmediate,v\u003ds.clearImmediate,p\u003ds.MessageChannel,d\u003ds.Dispatch,y\u003d0,g\u003d{},m\u003dfunction(){var t\u003d+this;if(g.hasOwnProperty(t)){var n\u003dg[t];delete g[t],n()}},b\u003dfunction(t){m.call(t.data)};h\u0026\u0026v||(h\u003dfunction setImmediate(t){for(var n\u003d[],r\u003d1;arguments.length\u003er;)n.push(arguments[r++]);return g[++y]\u003dfunction(){c(\"function\"\u003d\u003dtypeof t?t:Function(t),n)},e(y),y},v\u003dfunction clearImmediate(t){delete g[t]},\"process\"\u003d\u003dt(18)(l)?e\u003dfunction(t){l.nextTick(u(m,t,1))}:d\u0026\u0026d.now?e\u003dfunction(t){d.now(u(m,t,1))}:p?(i\u003dnew p,o\u003di.port2,i.port1.onmessage\u003db,e\u003du(o.postMessage,o,1)):s.addEventListener\u0026\u0026\"function\"\u003d\u003dtypeof postMessage\u0026\u0026!s.importScripts?(e\u003dfunction(t){s.postMessage(t+\"\",\"*\")},s.addEventListener(\"message\",b,!1)):e\u003d\"onreadystatechange\"in f(\"script\")?function(t){a.appendChild(f(\"script\")).onreadystatechange\u003dfunction(){a.removeChild(this),m.call(t)}}:function(t){setTimeout(u(m,t,1),0)}),n.exports\u003d{set:h,clear:v}},{18:18,25:25,30:30,40:40,43:43,46:46}],114:[function(t,n,r){var e\u003dt(116),i\u003dMath.max,o\u003dMath.min;n.exports\u003dfunction(t,n){return t\u003de(t),t\u003c0?i(t+n,0):o(t,n)}},{116:116}],115:[function(t,n,r){var e\u003dt(116),i\u003dt(118);n.exports\u003dfunction(t){if(void 0\u003d\u003d\u003dt)return 0;var n\u003de(t),r\u003di(n);if(n!\u003d\u003dr)throw RangeError(\"Wrong length!\");return r}},{116:116,118:118}],116:[function(t,n,r){var e\u003dMath.ceil,i\u003dMath.floor;n.exports\u003dfunction(t){return isNaN(t\u003d+t)?0:(t\u003e0?i:e)(t)}},{}],117:[function(t,n,r){var e\u003dt(47),i\u003dt(28);n.exports\u003dfunction(t){return e(i(t))}},{28:28,47:47}],118:[function(t,n,r){var e\u003dt(116),i\u003dMath.min;n.exports\u003dfunction(t){return t\u003e0?i(e(t),9007199254740991):0}},{116:116}],"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"119:[function(t,n,r){var e\u003dt(28);n.exports\u003dfunction(t){return Object(e(t))}},{28:28}],120:[function(t,n,r){var e\u003dt(51);n.exports\u003dfunction(t,n){if(!e(t))return t;var r,i;if(n\u0026\u0026\"function\"\u003d\u003dtypeof(r\u003dt.toString)\u0026\u0026!e(i\u003dr.call(t)))return i;if(\"function\"\u003d\u003dtypeof(r\u003dt.valueOf)\u0026\u0026!e(i\u003dr.call(t)))return i;if(!n\u0026\u0026\"function\"\u003d\u003dtypeof(r\u003dt.toString)\u0026\u0026!e(i\u003dr.call(t)))return i;throw TypeError(\"Can\u0027t convert object to primitive value\")}},{51:51}],121:[function(t,n,r){\"use strict\";if(t(29)){var e\u003dt(60),i\u003dt(40),o\u003dt(35),u\u003dt(33),c\u003dt(123),a\u003dt(122),f\u003dt(25),s\u003dt(6),l\u003dt(92),h\u003dt(42),v\u003dt(93),p\u003dt(116),d\u003dt(118),y\u003dt(115),g\u003dt(114),m\u003dt(120),b\u003dt(41),x\u003dt(17),S\u003dt(51),w\u003dt(119),_\u003dt(48),E\u003dt(71),O\u003dt(79),P\u003dt(77).f,M\u003dt(129),F\u003dt(124),I\u003dt(128),A\u003dt(12),k\u003dt(11),N\u003dt(104),j\u003dt(141),T\u003dt(58),R\u003dt(56),L\u003dt(100),G\u003dt(9),D\u003dt(8),C\u003dt(72),W\u003dt(75),U\u003dC.f,B\u003dW.f,V\u003di.RangeError,z\u003di.TypeError,q\u003di.Uint8Array,K\u003dArray.prototype,Y\u003da.ArrayBuffer,J\u003da.DataView,H\u003dA(0),X\u003dA(2),$\u003dA(3),Z\u003dA(4),Q\u003dA(5),tt\u003dA(6),nt\u003dk(!0),rt\u003dk(!1),et\u003dj.values,it\u003dj.keys,ot\u003dj.entries,ut\u003dK.lastIndexOf,ct\u003dK.reduce,at\u003dK.reduceRight,ft\u003dK.join,st\u003dK.sort,lt\u003dK.slice,ht\u003dK.toString,vt\u003dK.toLocaleString,pt\u003dI(\"iterator\"),dt\u003dI(\"toStringTag\"),yt\u003dF(\"typed_constructor\"),gt\u003dF(\"def_constructor\"),mt\u003dc.CONSTR,bt\u003dc.TYPED,xt\u003dc.VIEW,St\u003dA(1,function(t,n){return Pt(N(t,t[gt]),n)}),wt\u003do(function(){return 1\u003d\u003d\u003dnew q(new Uint16Array([1]).buffer)[0]}),_t\u003d!!q\u0026\u0026!!q.prototype.set\u0026\u0026o(function(){new q(1).set({})}),Et\u003dfunction(t,n){var r\u003dp(t);if(r\u003c0||r%n)throw V(\"Wrong offset!\");return r},Ot\u003dfunction(t){if(S(t)\u0026\u0026bt in t)return t;throw z(t+\" is not a typed array!\")},Pt\u003dfunction(t,n){if(!(S(t)\u0026\u0026yt in t))throw z(\"It is not a typed array constructor!\");return new t(n)},Mt\u003dfunction(t,n){return Ft(N(t,t[gt]),n)},Ft\u003dfunction(t,n){for(var r\u003d0,e\u003dn.length,i\u003dPt(t,e);e\u003er;)i[r]\u003dn[r++];return i},It\u003dfunction(t,n,r){U(t,n,{get:function(){return this._d[r]}})},At\u003dfunction from(t){var n,r,e,i,o,u,c\u003dw(t),a\u003darguments.length,s\u003da\u003e1?arguments[1]:void 0,l\u003dvoid 0!\u003d\u003ds,h\u003dM(c);if(void 0!\u003dh\u0026\u0026!_(h)){for(u\u003dh.call(c),e\u003d[],n\u003d0;!(o\u003du.next()).done;n++)e.push(o.value);c\u003de}for(l\u0026\u0026a\u003e2\u0026\u0026(s\u003df(s,arguments[2],2)),n\u003d0,r\u003dd(c.length),i\u003dPt(this,r);r\u003en;n++)i[n]\u003dl?s(c[n],n):c[n];return i},kt\u003dfunction of(){for(var t\u003d0,n\u003darguments.length,r\u003dPt(this,n);n\u003et;)r[t]\u003darguments[t++];return r},Nt\u003d!!q\u0026\u0026o(function(){vt.call(new q(1))}),jt\u003dfunction toLocaleString(){return vt.apply(Nt?lt.call(Ot(this)):Ot(this),arguments)},Tt\u003d{copyWithin:function copyWithin(t,n){return D.call(Ot(this),t,n,arguments.length\u003e2?arguments[2]:void 0)},every:function every(t){return Z(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},fill:function fill(t){return G.apply(Ot(this),arguments)},filter:function filter(t){return Mt(this,X(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0))},find:function find(t){return Q(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},findIndex:function findIndex(t){return tt(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},forEach:function forEach(t){H(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},indexOf:function indexOf(t){return rt(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},includes:function includes(t){return nt(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},join:function join(t){return ft.apply(Ot(this),arguments)},lastIndexOf:function lastIndexOf(t){return ut.apply(Ot(this),arguments)},map:function map(t){return St(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},reduce:function reduce(t){return ct.apply(Ot(this),arguments)},reduceRight:function reduceRight(t){return at.apply(Ot(this),arguments)},reverse:function reverse(){for(var t,n\u003dthis,r\u003dOt(n).length,e\u003dMath.floor(r/2),i\u003d0;i\u003ce;)t\u003dn[i],n[i++]\u003dn[--r],n[r]\u003dt;return n},some:function some(t){return $(Ot(this),t,arguments.length\u003e1?arguments[1]:void 0)},sort:function sort(t){return st.call(Ot(this),t)},subarray:function subarray(t,n){var r\u003dOt(this),e\u003dr.length,i\u003dg(t,e);return new(N(r,r[gt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,d((void 0\u003d\u003d\u003dn?e:g(n,e))-i))}},Rt\u003dfunction slice(t,n){return Mt(this,lt.call(Ot(this),t,n))},Lt\u003dfunction set(t){Ot(this);var n\u003dEt(arguments[1],1),r\u003dthis.length,e\u003dw(t),i\u003dd(e.length),o\u003d0;if(i+n\u003er)throw V(\"Wrong length!\");for(;o\u003ci;)this[n+o]\u003de[o++]},Gt\u003d{entries:function entries(){return ot.call(Ot(this))},keys:function keys(){return it.call(Ot(this))},values:function values(){return et.call(Ot(this))}},Dt\u003dfunction(t,n){return S(t)\u0026\u0026t[bt]\u0026\u0026\"symbol\"!\u003dtypeof n\u0026\u0026n in t\u0026\u0026String(+n)\u003d\u003dString(n)},Ct\u003dfunction getOwnPropertyDescriptor(t,n){return Dt(t,n\u003dm(n,!0))?l(2,t[n]):B(t,n)},Wt\u003dfunction defineProperty(t,n,r){return!(Dt(t,n\u003dm(n,!0))\u0026\u0026S(r)\u0026\u0026b(r,\"value\"))||b(r,\"get\")||b(r,\"set\")||r.configurable||b(r,\"writable\")\u0026\u0026!r.writable||b(r,\"enumerable\")\u0026\u0026!r.enumerable?U(t,n,r):(t[n]\u003dr.value,t)};mt||(W.f\u003dCt,C.f\u003dWt),u(u.S+u.F*!mt,\"Object\",{getOwnPropertyDescriptor:Ct,defineProperty:Wt}),o(function(){ht.call({})})\u0026\u0026(ht\u003dvt\u003dfunction toString(){return ft.call(this)});var Ut\u003dv({},Tt);v(Ut,Gt),h(Ut,pt,Gt.values),v(Ut,{slice:Rt,set:Lt,constructor:function(){},toString:ht,toLocaleString:jt}),It(Ut,\"buffer\",\"b\"),It(Ut,\"byteOffset\",\"o\"),It(Ut,\"byteLength\",\"l\"),It(Ut,\"length\",\"e\"),U(Ut,dt,{get:function(){return this[bt]}}),n.exports\u003dfunction(t,n,r,a){a\u003d!!a;var f\u003dt+(a?\"Clamped\":\"\")+\"Array\",l\u003d\"get\"+t,v\u003d\"set\"+t,p\u003di[f],g\u003dp||{},m\u003dp\u0026\u0026O(p),b\u003d!p||!c.ABV,w\u003d{},_\u003dp\u0026\u0026p.prototype,M\u003dfunction(t,r){var e\u003dt._d;return e.v[l](r*n+e.o,wt)},F\u003dfunction(t,r,e){var i\u003dt._d;a\u0026\u0026(e\u003d(e\u003dMath.round(e))\u003c0?0:e\u003e255?255:255\u0026e),i.v[v](r*n+i.o,e,wt)},I\u003dfunction(t,n){U(t,n,{get:function(){return M(this,n)},set:function(t){return F(this,n,t)},enumerable:!0})};b?(p\u003dr(function(t,r,e,i){s(t,p,f,\"_d\");var o,u,c,a,l\u003d0,v\u003d0;if(S(r)){if(!(r instanceof Y||\"ArrayBuffer\"\u003d\u003d(a\u003dx(r))||\"SharedArrayBuffer\"\u003d\u003da))return bt in r?Ft(p,r):At.call(p,r);o\u003dr,v\u003dEt(e,n);var g\u003dr.byteLength;if(void 0\u003d\u003d\u003di){if(g%n)throw V(\"Wrong length!\");if((u\u003dg-v)\u003c0)throw V(\"Wrong length!\")}else if((u\u003dd(i)*n)+v\u003eg)throw V(\"Wrong length!\");c\u003du/n}else c\u003dy(r),u\u003dc*n,o\u003dnew Y(u);for(h(t,\"_d\",{b:o,o:v,l:u,e:c,v:new J(o)});l\u003cc;)I(t,l++)}),_\u003dp.prototype\u003dE(Ut),h(_,\"constructor\",p)):o(function(){p(1)})\u0026\u0026o(function(){new p(-1)})\u0026\u0026R(function(t){new p,new p(null),new p(1.5),new p(t)},!0)||(p\u003dr(function(t,r,e,i){s(t,p,f);var o;return S(r)?r instanceof Y||\"ArrayBuffer\"\u003d\u003d(o\u003dx(r))||\"SharedArrayBuffer\"\u003d\u003do?void 0!\u003d\u003di?new g(r,Et(e,n),i):void 0!\u003d\u003de?new g(r,Et(e,n)):new g(r):bt in r?Ft(p,r):At.call(p,r):new g(y(r))}),H(m!\u003d\u003dFunction.prototype?P(g).concat(P(m)):P(g),function(t){t in p||h(p,t,g[t])}),p.prototype\u003d_,e||(_.constructor\u003dp));var A\u003d_[pt],k\u003d!!A\u0026\u0026(\"values\"\u003d\u003dA.name||void 0\u003d\u003dA.name),N\u003dGt.values;h(p,yt,!0),h(_,bt,f),h(_,xt,!0),h(_,gt,p),(a?new p(1)[dt]\u003d\u003df:dt in _)||U(_,dt,{get:function(){return f}}),w[f]\u003dp,u(u.G+u.W+u.F*(p!\u003dg),w),u(u.S,f,{BYTES_PER_ELEMENT:n}),u(u.S+u.F*o(function(){g.of.call(p,1)}),f,{from:At,of:kt}),\"BYTES_PER_ELEMENT\"in _||h(_,\"BYTES_PER_ELEMENT\",n),u(u.P,f,Tt),L(f),u(u.P+u.F*_t,f,{set:Lt}),u(u.P+u.F*!k,f,Gt),e||_.toString\u003d\u003dht||(_.toString\u003dht),u(u.P+u.F*o(function(){new p(1).slice()}),f,{slice:Rt}),u(u.P+u.F*(o(function(){return[1,2].toLocaleString()!\u003dnew p([1,2]).toLocaleString()})||!o(function(){_.toLocaleString.call([1,2])})),f,{toLocaleString:jt}),T[f]\u003dk?A:N,e||k||h(_,pt,N)}}else n.exports\u003dfunction(){}},{100:100,104:104,11:11,114:114,115:115,116:116,118:118,119:119,12:12,120:120,122:122,123:123,124:124,128:128,129:129,141:141,17:17,25:25,29:29,33:33,35:35,40:40,41:41,42:42,48:48,51:51,56:56,58:58,6:6,60:60,71:71,72:72,75:75,77:77,79:79,8:8,9:9,92:92,93:93}],122:[function(t,n,r){\"use strict\";function packIEEE754(t,n,r){var e,i,o,u\u003dArray(r),c\u003d8*r-n-1,a\u003d(1\u003c\u003cc)-1,f\u003da\u003e\u003e1,s\u003d23\u003d\u003d\u003dn?M(2,-24)-M(2,-77):0,l\u003d0,h\u003dt\u003c0||0\u003d\u003d\u003dt\u0026\u00261/t\u003c0?1:0;for(t\u003dP(t),t!\u003dt||t\u003d\u003d\u003dE?(i\u003dt!\u003dt?1:0,e\u003da):(e\u003dF(I(t)/A),t*(o\u003dM(2,-e))\u003c1\u0026\u0026(e--,o*\u003d2),t+\u003de+f\u003e\u003d1?s/o:s*M(2,1-f),t*o\u003e\u003d2\u0026\u0026(e++,o/\u003d2),e+f\u003e\u003da?(i\u003d0,e\u003da):e+f\u003e\u003d1?(i\u003d(t*o-1)*M(2,n),e+\u003df):(i\u003dt*M(2,f-1)*M(2,n),e\u003d0));n\u003e\u003d8;u[l++]\u003d255\u0026i,i/\u003d256,n-\u003d8);for(e\u003de\u003c\u003cn|i,c+\u003dn;c\u003e0;u[l++]\u003d255\u0026e,e/\u003d256,c-\u003d8);return u[--l]|\u003d128*h,u}function unpackIEEE754(t,n,r){var e,i\u003d8*r-n-1,o\u003d(1\u003c\u003ci)-1,u\u003do\u003e\u003e1,c\u003di-7,a\u003dr-1,f\u003dt[a--],s\u003d127\u0026f;for(f\u003e\u003e\u003d7;c\u003e0;s\u003d256*s+t[a],a--,c-\u003d8);for(e\u003ds\u0026(1\u003c\u003c-c)-1,s\u003e\u003e\u003d-c,c+\u003dn;c\u003e0;e\u003d256*e+t[a],a--,c-\u003d8);if(0\u003d\u003d\u003ds)s\u003d1-u;else{if(s\u003d\u003d\u003do)return e?NaN:f?-E:E;e+\u003dM(2,n),s-\u003du}return(f?-1:1)*e*M(2,s-n)}function unpackI32(t){return t[3]\u003c\u003c24|t[2]\u003c\u003c16|t[1]\u003c\u003c8|t[0]}function packI8(t){return[255\u0026t]}function packI16(t){return[255\u0026t,t\u003e\u003e8\u0026255]}function packI32(t){return[255\u0026t,t\u003e\u003e8\u0026255,t\u003e\u003e16\u0026255,t\u003e\u003e24\u0026255]}function packF64(t){return packIEEE754(t,52,8)}function packF32(t){return packIEEE754(t,23,4)}function addGetter(t,n,r){d(t[m],n,{get:function(){return this[r]}})}function get(t,n,r,e){var i\u003d+r,o\u003dv(i);if(o+n\u003et[N])throw _(b);var u\u003dt[k]._b,c\u003do+t[j],a\u003du.slice(c,c+n);return e?a:a.reverse()}function set(t,n,r,e,i,o){var u\u003d+r,c\u003dv(u);if(c+n\u003et[N])throw _(b);for(var a\u003dt[k]._b,f\u003dc+t[j],s\u003de(+i),l\u003d0;l\u003cn;l++)a[f+l]\u003ds[o?l:n-l-1]}var e\u003dt(40),i\u003dt(29),o\u003dt(60),u\u003dt(123),c\u003dt(42),a\u003dt(93),f\u003dt(35),s\u003dt(6),l\u003dt(116),h\u003dt(118),v\u003dt(115),p\u003dt(77).f,d\u003dt(72).f,y\u003dt(9),g\u003dt(101),m\u003d\"prototype\",b\u003d\"Wrong index!\",x\u003de.ArrayBuffer,S\u003de.DataView,w\u003de.Math,_\u003de.RangeError,E\u003de.Infinity,O\u003dx,P\u003dw.abs,M\u003dw.pow,F\u003dw.floor,I\u003dw.log,A\u003dw.LN2,k\u003di?\"_b\":\"buffer\",N\u003di?\"_l\":\"byteLength\",j\u003di?\"_o\":\"byteOffset\";if(u.ABV){if(!f(function(){x(1)})||!f(function(){new x(-1)})||f(function(){return new x,new x(1.5),new x(NaN),\"ArrayBuffer\"!\u003dx.name})){x\u003dfunction ArrayBuffer(t){return s(this,x),new O(v(t))};for(var T,R\u003dx[m]\u003dO[m],L\u003dp(O),G\u003d0;L.length\u003eG;)(T\u003dL[G++])in x||c(x,T,O[T]);o||(R.constructor\u003dx)}var D\u003dnew S(new x(2)),C\u003dS[m].setInt8;D.setInt8(0,2147483648),D.setInt8(1,2147483649),!D.getInt8(0)\u0026\u0026D.getInt8(1)||a(S[m],{setInt8:function setInt8(t,n){C.call(this,t,n\u003c\u003c24\u003e\u003e24)},setUint8:function setUint8(t,n){C.call(this,t,n\u003c\u003c24\u003e\u003e24)}},!0)}else x\u003dfunction ArrayBuffer(t){s(this,x,\"ArrayBuffer\");var n\u003dv(t);this._b\u003dy.call(Array(n),0),this[N]\u003dn},S\u003dfunction DataView(t,n,r){s(this,S,\"DataView\"),s(t,x,\"DataView\");var e\u003dt[N],i\u003dl(n);if(i\u003c0||i\u003ee)throw _(\"Wrong offset!\");if(r\u003dvoid 0\u003d\u003d\u003dr?e-i:h(r),i+r\u003ee)throw _(\"Wrong length!\");this[k]\u003dt,this[j]\u003di,this[N]\u003dr},i\u0026\u0026(addGetter(x,\"byteLength\",\"_l\"),addGetter(S,\"buffer\",\"_b\"),addGetter(S,\"byteLength\",\"_l\"),addGetter(S,\"byteOffset\",\"_o\")),a(S[m],{getInt8:function getInt8(t){return get(this,1,t)[0]\u003c\u003c24\u003e\u003e24},getUint8:function getUint8(t){return get(this,1,t)[0]},getInt16:function getInt16(t){var n\u003dget(this,2,t,arguments[1]);return(n[1]\u003c\u003c8|n[0])\u003c\u003c16\u003e\u003e16},getUint16:function getUint16(t){var n\u003dget(this,2,t,arguments[1]);return n[1]\u003c\u003c8|n[0]},getInt32:function getInt32(t){return unpackI32(get(this,4,t,arguments[1]))},getUint32:function getUint32(t){return unpackI32(get(this,4,t,arguments[1]))\u003e\u003e\u003e0},getFloat32:function getFloat32(t){return unpackIEEE754(get(this,4,t,arguments[1]),23,4)},getFloat64:function getFloat64(t){return unpackIEEE754(get(this,8,t,arguments[1]),52,8)},setInt8:function setInt8(t,n){set(this,1,t,packI8,n)},setUint8:function setUint8(t,n){set(this,1,t,packI8,n)},setInt16:function setInt16(t,n){set(this,2,t,packI16,n,arguments[2])},setUint16:function setUint16(t,n){set(this,2,t,packI16,n,arguments[2])},setInt32:function setInt32(t,n){set(this,4,t,packI32,n,arguments[2])},setUint32:function setUint32(t,n){set(this,4,t,packI32,n,arguments[2])},setFloat32:function setFloat32(t,n){set(this,4,t,packF32,n,arguments[2])},setFloat64:function setFloat64(t,n){set(this,8,t,packF64,n,arguments[2])}});g(x,\"ArrayBuffer\"),g(S,\"DataView\"),c(S[m],u.VIEW,!0),r.ArrayBuffer\u003dx,r.DataView\u003dS},{101:101,115:115,116:116,118:118,123:123,29:29,35:35,40:40,42:42,6:6,60:60,72:72,77:77,9:9,93:93}],123:[function(t,n,r){for(var e,i\u003dt(40),o\u003dt(42),u\u003dt(124),c\u003du(\"typed_array\"),a\u003du(\"view\"),f\u003d!(!i.ArrayBuffer||!i.DataView),s\u003df,l\u003d0,h\u003d\"Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array\".split(\",\");l\u003c9;)(e\u003di[h[l++]])?(o(e.prototype,c,!0),o(e.prototype,a,!0)):s\u003d!1;n.exports\u003d{ABV:f,CONSTR:s,TYPED:c,VIEW:a}},{124:124,40:40,42:42}],124:[function(t,n,r){var e\u003d0,i\u003dMath.random();n.exports\u003dfunction(t){return\"Symbol(\".concat(void 0\u003d\u003d\u003dt?\"\":t,\")_\",(++e+i).toString(36))}},{}],125:[function(t,n,r){var e\u003dt(51);n.exports\u003dfunction(t,n){if(!e(t)||t._t!\u003d\u003dn)throw TypeError(\"Incompatible receiver, \"+n+\" required!\");return t}},{51:51}],126:[function(t,n,r){var e\u003dt(40),i\u003dt(23),o\u003dt(60),u\u003dt(127),c\u003dt(72).f;n.exports\u003dfunction(t){var n\u003di.Symbol||(i.Symbol\u003do?{}:e.Symbol||{});\"_\"\u003d\u003dt.charAt(0)||t in n||c(n,t,{value:u.f(t)})}},{127:127,23:23,40:40,60:60,72:72}],127:[function(t,n,r){r.f\u003dt(128)},{128:128}],128:[function(t,n,r){var e\u003dt(103)(\"wks\"),i\u003dt(124),o\u003dt(40).Symbol,u\u003d\"function\"\u003d\u003dtypeof o;(n.exports\u003dfunction(t){return e[t]||(e[t]\u003du\u0026\u0026o[t]||(u?o:i)(\"Symbol.\"+t))}).store\u003de},{103:103,124:124,40:40}],129:[function(t,n,r){var e\u003dt(17),i\u003dt(128)(\"iterator\"),o\u003dt(58);n.exports\u003dt(23).getIteratorMethod\u003dfunction(t){if(void 0!\u003dt)return t[i]||t[\"@@iterator\"]||o[e(t)]}},{128:128,17:17,23:23,58:58}],130:[function(t,n,r){var e\u003dt(33),i\u003dt(95)(/[\\\\^$*+?.()|[\\]{}]/g,\"\\\\$\u0026\");e(e.S,\"RegExp\",{escape:function escape(t){return i(t)}})},{33:33,95:95}],131:[function(t,n,r){var e\u003dt(33);e(e.P,\"Array\",{copyWithin:t(8)}),t(5)(\"copyWithin\")},{33:33,5:5,8:8}],132:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(4);e(e.P+e.F*!t(105)([].every,!0),\"Array\",{every:function every(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],133:[function(t,n,r){var e\u003dt(33);e(e.P,\"Array\",{fill:t(9)}),t(5)(\"fill\")},{33:33,5:5,9:9}],134:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(2);e(e.P+e.F*!t(105)([].filter,!0),\"Array\",{filter:function filter(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],135:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(6),o\u003d\"findIndex\",u\u003d!0;o in[]\u0026\u0026Array(1)[o](function(){u\u003d!1}),e(e.P+e.F*u,\"Array\",{findIndex:function findIndex(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0)}}),t(5)(o)},{12:12,33:33,5:5}],136:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(5),o\u003d!0;\"find\"in[]\u0026\u0026Array(1).find(function(){o\u003d!1}),e(e.P+e.F*o,\"Array\",{find:function find(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0)}}),t(5)(\"find\")},{12:12,33:33,5:5}],137:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(0),o\u003dt(105)([].forEach,!0);e(e.P+e.F*!o,\"Array\",{forEach:function forEach(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],138:[function(t,n,r){\"use strict\";var e\u003dt(25),i\u003dt(33),o\u003dt(119),u\u003dt(53),c\u003dt(48),a\u003dt(118),f\u003dt(24),s\u003dt(129);i(i.S+i.F*!t(56)(function(t){Array.from(t)}),\"Array\",{from:function from(t){var n,r,i,l,h\u003do(t),v\u003d\"function\"\u003d\u003dtypeof this?this:Array,p\u003darguments.length,d\u003dp\u003e1?arguments[1]:void 0,y\u003dvoid 0!\u003d\u003dd,g\u003d0,m\u003ds(h);if(y\u0026\u0026(d\u003de(d,p\u003e2?arguments[2]:void 0,2)),void 0\u003d\u003dm||v\u003d\u003dArray\u0026\u0026c(m))for(n\u003da(h.length),r\u003dnew v(n);n\u003eg;g++)f(r,g,y?d(h[g],g):h[g]);else for(l\u003dm.call(h),r\u003dnew v;!(i\u003dl.next()).done;g++)f(r,g,y?u(l,d,[i.value,g],!0):i.value);return r.length\u003dg,r}})},{118:118,119:119,129:129,24:24,25:25,33:33,48:48,53:53,56:56}],139:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(11)(!1),o\u003d[].indexOf,u\u003d!!o\u0026\u00261/[1].indexOf(1,-0)\u003c0;e(e.P+e.F*(u||!t(105)(o)),\"Array\",{indexOf:function indexOf(t){return u?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},{105:105,11:11,33:33}],140:[function(t,n,r){var e\u003dt(33);e(e.S,\"Array\",{isArray:t(49)})},{33:33,49:49}],141:[function(t,n,r){\"use strict\";var e\u003dt(5),i\u003dt(57),o\u003dt(58),u\u003dt(117);n.exports\u003dt(55)(Array,\"Array\",function(t,n){this._t\u003du(t),this._i\u003d0,this._k\u003dn},function(){var t\u003dthis._t,n\u003dthis._k,r\u003dthis._i++;return!t||r\u003e\u003dt.length?(this._t\u003dvoid 0,i(1)):\"keys\"\u003d\u003dn?i(0,r):\"values\"\u003d\u003dn?i(0,t[r]):i(0,[r,t[r]])},\"values\"),o.Arguments\u003do.Array,e(\"keys\"),e(\"values\"),e(\"entries\")},{117:117,5:5,55:55,57:57,58:58}],142:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(117),o\u003d[].join;e(e.P+e.F*(t(47)!\u003dObject||!t(105)(o)),\"Array\",{join:function join(t){return o.call(i(this),void 0\u003d\u003d\u003dt?\",\":t)}})},{105:105,117:117,33:33,47:47}],143:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(117),o\u003dt(116),u\u003dt(118),c\u003d[].lastIndexOf,a\u003d!!c\u0026\u00261/[1].lastIndexOf(1,-0)\u003c0;e(e.P+e.F*(a||!t(105)(c)),\"Array\",{lastIndexOf:function lastIndexOf(t){if(a)return c.apply(this,arguments)||0;var n\u003di(this),r\u003du(n.length),e\u003dr-1;for(arguments.length\u003e1\u0026\u0026(e\u003dMath.min(e,o(arguments[1]))),e\u003c0\u0026\u0026(e\u003dr+e);e\u003e\u003d0;e--)if(e in n\u0026\u0026n[e]\u003d\u003d\u003dt)return e||0;return-1}})},{105:105,116:116,117:117,118:118,33:33}],144:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(1);e(e.P+e.F*!t(105)([].map,!0),\"Array\",{map:function map(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],145:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(24);e(e.S+e.F*t(35)(function(){function F(){}return!(Array.of.call(F)instanceof F)}),\"Array\",{of:function of(){for(var t\u003d0,n\u003darguments.length,r\u003dnew(\"function\"\u003d\u003dtypeof this?this:Array)(n);n\u003et;)i(r,t,arguments[t++]);return r.length\u003dn,r}})},{24:24,33:33,35:35}],146:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(13);e(e.P+e.F*!t(105)([].reduceRight,!0),\"Array\",{reduceRight:function reduceRight(t){return i(this,t,arguments.length,arguments[1],!0)}})},{105:105,13:13,33:33}],147:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(13);e(e.P+e.F*!t(105)([].reduce,!0),\"Array\",{reduce:function reduce(t){return i(this,t,arguments.length,arguments[1],!1)}})},{105:105,13:13,33:33}],148:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(43),o\u003dt(18),u\u003dt(114),c\u003dt(118),a\u003d[].slice;e(e.P+e.F*t(35)(function(){i\u0026\u0026a.call(i)}),\"Array\",{slice:function slice(t,n){var r\u003dc(this.length),e\u003do(this);if(n\u003dvoid 0\u003d\u003d\u003dn?r:n,\"Array\"\u003d\u003de)return a.call(this,t,n);for(var i\u003du(t,r),f\u003du(n,r),s\u003dc(f-i),l\u003dArray(s),h\u003d0;h\u003cs;h++)l[h]\u003d\"String\"\u003d\u003de?this.charAt(i+h):this[i+h];return l}})},{114:114,118:118,18:18,33:33,35:35,43:43}],149:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(12)(3);e(e.P+e.F*!t(105)([].some,!0),\"Array\",{some:function some(t){return i(this,t,arguments[1])}})},{105:105,12:12,33:33}],150:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(3),o\u003dt(119),u\u003dt(35),c\u003d[].sort,a\u003d[1,2,3];e(e.P+e.F*(u(function(){a.sort(void 0)})||!u(function(){a.sort(null)})||!t(105)(c)),\"Array\",{sort:function sort(t){return void 0\u003d\u003d\u003dt?c.call(o(this)):c.call(o(this),i(t))}})},{105:105,119:119,3:3,33:33,35:35}],151:[function(t,n,r){t(100)(\"Array\")},{100:100}],152:[function(t,n,r){var e\u003dt(33);e(e.S,\"Date\",{now:function(){return(new Date).getTime()}})},{33:33}],153:[function(t,n,r){var e\u003dt(33),i\u003dt(26);e(e.P+e.F*(Date.prototype.toISOString!\u003d\u003di),\"Date\",{toISOString:i})},{26:26,33:33}],154:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(120);e(e.P+e.F*t(35)(function(){return null!\u003d\u003dnew Date(NaN).toJSON()||1!\u003d\u003dDate.prototype.toJSON.call({toISOString:function(){return 1}})}),\"Date\",{toJSON:function toJSON(t){var n\u003di(this),r\u003do(n);return\"number\"!\u003dtypeof r||isFinite(r)?n.toISOString():null}})},{119:119,120:120,33:33,35:35}],155:[function(t,n,r){var e\u003dt(128)(\"toPrimitive\"),i\u003dDate.prototype;e in i||t(42)(i,e,t(27))},{128:128,27:27,42:42}],156:[function(t,n,r){var e\u003dDate.prototype,i\u003de.toString,o\u003de.getTime;new Date(NaN)+\"\"!\u003d\"Invalid Date\"\u0026\u0026t(94)(e,\"toString\",function toString(){var t\u003do.call(this);return t\u003d\u003d\u003dt?i.call(this):\"Invalid Date\"})},{94:94}],157:[function(t,n,r){var e\u003dt(33);e(e.P,\"Function\",{bind:t(16)})},{16:16,33:33}],158:[function(t,n,r){\"use strict\";var e\u003dt(51),i\u003dt(79),o\u003dt(128)(\"hasInstance\"),u\u003dFunction.prototype;o in u||t(72).f(u,o,{value:function(t){if(\"function\"!\u003dtypeof this||!e(t))return!1;if(!e(this.prototype))return t instanceof this;for(;t\u003di(t);)if(this.prototype\u003d\u003d\u003dt)return!0;return!1}})},{128:128,51:51,72:72,79:79}],159:[function(t,n,r){var e\u003dt(72).f,i\u003dFunction.prototype,o\u003d/^\\s*function ([^ (]*)/;\"name\"in i||t(29)\u0026\u0026e(i,\"name\",{configurable:!0,get:function(){try{return(\"\"+this).match(o)[1]}catch(t){return\"\"}}})},{29:29,72:72}],160:[function(t,n,r){\"use strict\";var e\u003dt(19),i\u003dt(125);n.exports\u003dt(22)(\"Map\",function(t){return function Map(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},{get:function get(t){var n\u003de.getEntry(i(this,\"Map\"),t);return n\u0026\u0026n.v},set:function set(t,n){return e.def(i(this,\"Map\"),0\u003d\u003d\u003dt?0:t,n)}},e,!0)},{125:125,19:19,22:22}],161:[function(t,n,r){var e\u003dt(33),i\u003dt(63),o\u003dMath.sqrt,u\u003dMath.acosh;e(e.S+e.F*!(u\u0026\u0026710\u003d\u003dMath.floor(u(Number.MAX_VALUE))\u0026\u0026u(1/0)\u003d\u003d1/0),\"Math\",{acosh:function acosh(t){return(t\u003d+t)\u003c1?NaN:t\u003e94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},{33:33,63:63}],162:[function(t,n,r){function asinh(t){return isFinite(t\u003d+t)\u0026\u00260!\u003dt?t\u003c0?-asinh(-t):Math.log(t+Math.sqrt(t*t+1)):t}var e\u003dt(33),i\u003dMath.asinh;e(e.S+e.F*!(i\u0026\u00261/i(0)\u003e0),\"Math\",{asinh:asinh})},{33:33}],163:[function(t,n,r){var e\u003dt(33),i\u003dMath.atanh;e(e.S+e.F*!(i\u0026\u00261/i(-0)\u003c0),\"Math\",{atanh:function atanh(t){return 0\u003d\u003d(t\u003d+t)?t:Math.log((1+t)/(1-t))/2}})},{33:33}],164:[function(t,n,r){var e\u003dt(33),i\u003dt(65);e(e.S,\"Math\",{cbrt:function cbrt(t){return i(t\u003d+t)*Math.pow(Math.abs(t),1/3)}})},{33:33,65:65}],165:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{clz32:function clz32(t){return(t\u003e\u003e\u003e\u003d0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{33:33}],166:[function(t,n,r){var e\u003dt(33),i\u003dMath.exp;e(e.S,\"Math\",{cosh:function cosh(t){return(i(t\u003d+t)+i(-t))/2}})},{33:33}],167:[function(t,n,r){var e\u003dt(33),i\u003dt(61);e(e.S+e.F*(i!\u003dMath.expm1),\"Math\",{expm1:i})},{33:33,61:61}],168:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{fround:t(62)})},{33:33,62:62}],169:[function(t,n,r){var e\u003dt(33),i\u003dMath.abs;e(e.S,\"Math\",{hypot:function hypot(t,n){for(var r,e,o\u003d0,u\u003d0,c\u003darguments.length,a\u003d0;u\u003cc;)r\u003di(arguments[u++]),a\u003cr?(e\u003da/r,o\u003do*e*e+1,a\u003dr):r\u003e0?(e\u003dr/a,o+\u003de*e):o+\u003dr;return a\u003d\u003d\u003d1/0?1/0:a*Math.sqrt(o)}})},{33:33}],170:[function(t,n,r){var e\u003dt(33),i\u003dMath.imul;e(e.S+e.F*t(35)(function(){return-5!\u003di(4294967295,5)||2!\u003di.length}),\"Math\",{imul:function imul(t,n){var r\u003d+t,e\u003d+n,i\u003d65535\u0026r,o\u003d65535\u0026e;return 0|i*o+((65535\u0026r\u003e\u003e\u003e16)*o+i*(65535\u0026e\u003e\u003e\u003e16)\u003c\u003c16\u003e\u003e\u003e0)}})},{33:33,35:35}],171:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{log10:function log10(t){return Math.log(t)*Math.LOG10E}})},{33:33}],172:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{log1p:t(63)})},{33:33,63:63}],173:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{log2:function log2(t){return Math.log(t)/Math.LN2}})},{33:33}],174:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{sign:t(65)})},{33:33,65:65}],175:[function(t,n,r){var e\u003dt(33),i\u003dt(61),o\u003dMath.exp;e(e.S+e.F*t(35)(function(){return-2e-17!\u003d!Math.sinh(-2e-17)}),\"Math\",{sinh:function sinh(t){return Math.abs(t\u003d+t)\u003c1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},{33:33,35:35,61:61}],176:[function(t,n,r){var e\u003dt(33),i\u003dt(61),o\u003dMath.exp;e(e.S,\"Math\",{tanh:function tanh(t){var n\u003di(t\u003d+t),r\u003di(-t);return n\u003d\u003d1/0?1:r\u003d\u003d1/0?-1:(n-r)/(o(t)+o(-t))}})},{33:33,61:61}],177:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{trunc:function trunc(t){return(t\u003e0?Math.floor:Math.ceil)(t)}})},{33:33}],178:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(41),o\u003dt(18),u\u003dt(45),c\u003dt(120),a\u003dt(35),f\u003dt(77).f,s\u003dt(75).f,l\u003dt(72).f,h\u003dt(111).trim,v\u003de.Number,p\u003dv,d\u003dv.prototype,y\u003d\"Number\"\u003d\u003do(t(71)(d)),g\u003d\"trim\"in String.prototype,m\u003dfunction(t){var n\u003dc(t,!1);if(\"string\"\u003d\u003dtypeof n\u0026\u0026n.length\u003e2){n\u003dg?n.trim():h(n,3);var r,e,i,o\u003dn.charCodeAt(0);if(43\u003d\u003d\u003do||45\u003d\u003d\u003do){if(88\u003d\u003d\u003d(r\u003dn.charCodeAt(2))||120\u003d\u003d\u003dr)return NaN}else if(48\u003d\u003d\u003do){switch(n.charCodeAt(1)){case 66:case 98:e\u003d2,i\u003d49;break;case 79:case 111:e\u003d8,i\u003d55;break;default:return+n}for(var u,a\u003dn.slice(2),f\u003d0,s\u003da.length;f\u003cs;f++)if((u\u003da.charCodeAt(f))\u003c48||u\u003ei)return NaN;return parseInt(a,e)}}return+n};if(!v(\" 0o1\")||!v(\"0b1\")||v(\"+0x1\")){v\u003dfunction Number(t){var n\u003darguments.length\u003c1?0:t,r\u003dthis;return r instanceof v\u0026\u0026(y?a(function(){d.valueOf.call(r)}):\"Number\"!\u003do(r))?u(new p(m(n)),r,v):m(n)};for(var b,x\u003dt(29)?f(p):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger\".split(\",\"),S\u003d0;x.length\u003eS;S++)i(p,b\u003dx[S])\u0026\u0026!i(v,b)\u0026\u0026l(v,b,s(p,b));v.prototype\u003dd,d.constructor\u003dv,t(94)(e,\"Number\",v)}},{111:111,120:120,18:18,29:29,35:35,40:40,41:41,45:45,71:71,72:72,75:75,77:77,94:94}],179:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{EPSILON:Math.pow(2,-52)})},{33:33}],180:[function(t,n,r){var e\u003dt(33),i\u003dt(40).isFinite;e(e.S,\"Number\",{isFinite:function isFinite(t){return\"number\"\u003d\u003dtypeof t\u0026\u0026i(t)}})},{33:33,40:40}],181:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{isInteger:t(50)})},{33:33,50:50}],182:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{isNaN:function isNaN(t){return t!\u003dt}})},{33:33}],183:[function(t,n,r){var e\u003dt(33),i\u003dt(50),o\u003dMath.abs;e(e.S,\"Number\",{isSafeInteger:function isSafeInteger(t){return i(t)\u0026\u0026o(t)\u003c\u003d9007199254740991}})},{33:33,50:50}],184:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{MAX_SAFE_INTEGER:9007199254740991})},{33:33}],185:[function(t,n,r){var e\u003dt(33);e(e.S,\"Number\",{MIN_SAFE_INTEGER:-9007199254740991})},{33:33}],186:[function(t,n,r){var e\u003dt(33),i\u003dt(86);e(e.S+e.F*(Number.parseFloat!\u003di),\"Number\",{parseFloat:i})},{33:33,86:86}],187:[function(t,n,r){var e\u003dt(33),i\u003dt(87);e(e.S+e.F*(Number.parseInt!\u003di),\"Number\",{parseInt:i})},{33:33,87:87}],188:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(116),o\u003dt(4),u\u003dt(110),c\u003d1..toFixed,a\u003dMath.floor,f\u003d[0,0,0,0,0,0],s\u003d\"Number.toFixed: incorrect invocation!\",l\u003dfunction(t,n){for(var r\u003d-1,e\u003dn;++r\u003c6;)e+\u003dt*f[r],f[r]\u003de%1e7,e\u003da(e/1e7)},h\u003dfunction(t){for(var n\u003d6,r\u003d0;--n\u003e\u003d0;)r+\u003df[n],f[n]\u003da(r/t),r\u003dr%t*1e7},v\u003dfunction(){for(var t\u003d6,n\u003d\"\";--t\u003e\u003d0;)if(\"\"!\u003d\u003dn||0\u003d\u003d\u003dt||0!\u003d\u003df[t]){var r\u003dString(f[t]);n\u003d\"\"\u003d\u003d\u003dn?r:n+u.call(\"0\",7-r.length)+r}return n},p\u003dfunction(t,n,r){return 0\u003d\u003d\u003dn?r:n%2\u003d\u003d1?p(t,n-1,r*t):p(t*t,n/2,r)},d\u003dfunction(t){for(var n\u003d0,r\u003dt;r\u003e\u003d4096;)n+\u003d12,r/\u003d4096;for(;r\u003e\u003d2;)n+\u003d1,r/\u003d2;return n};e(e.P+e.F*(!!c\u0026\u0026(\"0.000\"!\u003d\u003d8e-5.toFixed(3)||\"1\"!\u003d\u003d.9.toFixed(0)||\"1.25\"!\u003d\u003d1.255.toFixed(2)||\"1000000000000000128\"!\u003d\u003d(0xde0b6b3a7640080).toFixed(0))||!t(35)(function(){c.call({})})),\"Number\",{toFixed:function toFixed(t){var n,r,e,c,a\u003do(this,s),f\u003di(t),y\u003d\"\",g\u003d\"0\";if(f\u003c0||f\u003e20)throw RangeError(s);if(a!\u003da)return\"NaN\";if(a\u003c\u003d-1e21||a\u003e\u003d1e21)return String(a);if(a\u003c0\u0026\u0026(y\u003d\"-\",a\u003d-a),a\u003e1e-21)if(n\u003dd(a*p(2,69,1))-69,r\u003dn\u003c0?a*p(2,-n,1):a/p(2,n,1),r*\u003d4503599627370496,(n\u003d52-n)\u003e0){for(l(0,r),e\u003df;e\u003e\u003d7;)l(1e7,0),e-\u003d7;for(l(p(10,e,1),0),e\u003dn-1;e\u003e\u003d23;)h(1\u003c\u003c23),e-\u003d23;h(1\u003c\u003ce),l(1,1),h(2),g\u003dv()}else l(0,r),l(1\u003c\u003c-n,0),g\u003dv()+u.call(\"0\",f);return f\u003e0?(c\u003dg.length,g\u003dy+(c\u003c\u003df?\"0.\"+u.call(\"0\",f-c)+g:g.slice(0,c-f)+\".\"+g.slice(c-f))):g\u003dy+g,g}})},{110:110,116:116,33:33,35:35,4:4}],189:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(35),o\u003dt(4),u\u003d1..toPrecision;e(e.P+e.F*(i(function(){return\"1\"!\u003d\u003du.call(1,void 0)})||!i(function(){u.call({})})),\"Number\",{toPrecision:function toPrecision(t){var n\u003do(this,\"Number#toPrecision: incorrect invocation!\");return void 0\u003d\u003d\u003dt?u.call(n):u.call(n,t)}})},{33:33,35:35,4:4}],190:[function(t,n,r){var e\u003dt(33);e(e.S+e.F,\"Object\",{assign:t(70)})},{33:33,70:70}],191:[function(t,n,r){var e\u003dt(33);e(e.S,\"Object\",{create:t(71)})},{33:33,71:71}],192:[function(t,n,r){var e\u003dt(33);e(e.S+e.F*!t(29),\"Object\",{defineProperties:t(73)})},{29:29,33:33,73:73}],193:[function(t,n,r){var e\u003dt(33);e(e.S+e.F*!t(29),\"Object\",{defineProperty:t(72).f})},{29:29,33:33,72:72}],194:[function(t,n,r){var e\u003dt(51),i\u003dt(66).onFreeze;t(83)(\"freeze\",function(t){return function freeze(n){return t\u0026\u0026e(n)?t(i(n)):n}})},{51:51,66:66,83:83}],195:[function(t,n,r){var e\u003dt(117),i\u003dt(75).f;t(83)(\"getOwnPropertyDescriptor\",function(){return function getOwnPropertyDescriptor(t,n){return i(e(t),n)}})},{117:117,75:75,83:83}],196:[function(t,n,r){t(83)(\"getOwnPropertyNames\",function(){return t(76).f})},{76:76,83:83}],197:[function(t,n,r){var e\u003dt(119),i\u003dt(79);t(83)(\"getPrototypeOf\",function(){return function getPrototypeOf(t){return i(e(t))}})},{119:119,79:79,83:83}],198:[function(t,n,r){var e\u003dt(51);t(83)(\"isExtensible\",function(t){return function isExtensible(n){return!!e(n)\u0026\u0026(!t||t(n))}})},{51:51,83:83}],199:[function(t,n,r){var e\u003dt(51);t(83)(\"isFrozen\",function(t){return function isFrozen(n){return!e(n)||!!t\u0026\u0026t(n)}})},{51:51,83:83}],200:[function(t,n,r){var e\u003dt(51);t(83)(\"isSealed\",function(t){return function isSealed(n){return!e(n)||!!t\u0026\u0026t(n)}})},{51:51,83:83}],201:[function(t,n,r){var e\u003dt(33);e(e.S,\"Object\",{is:t(96)})},{33:33,96:96}],202:[function(t,n,r){var e\u003dt(119),i\u003dt(81);t(83)(\"keys\",function(){return function keys(t){return i(e(t))}})},{119:119,81:81,83:83}],203:[function(t,n,r){var e\u003dt(51),i\u003dt(66).onFreeze;t(83)(\"preventExtensions\",function(t){return function preventExtensions(n){return t\u0026\u0026e(n)?t(i(n)):n}})},{51:51,66:66,83:83}],204:[function(t,n,r){var e\u003dt(51),i\u003dt(66).onFreeze;t(83)(\"seal\",function(t){return function seal(n){return t\u0026\u0026e(n)?t(i(n)):n}})},{51:51,66:66,83:83}],205:[function(t,n,r){var e\u003dt(33);e(e.S,\"Object\",{setPrototypeOf:t(99).set})},{33:33,99:99}],206:[function(t,n,r){\"use strict\";var e\u003dt(17),i\u003d{};i[t(128)(\"toStringTag\")]\u003d\"z\",i+\"\"!\u003d\"[object z]\"\u0026\u0026t(94)(Object.prototype,\"toString\",function toString(){return\"[object \"+e(this)+\"]\"},!0)},{128:128,17:17,94:94}],207:[function(t,n,r){var e\u003dt(33),i\u003dt(86);e(e.G+e.F*(parseFloat!\u003di),{parseFloat:i})},{33:33,86:86}],208:[function(t,n,r){var e\u003dt(33),i\u003dt(87);e(e.G+e.F*(parseInt!\u003di),{parseInt:i})},{33:33,87:87}],209:[function(t,n,r){\"use strict\";var e,i,o,u,c\u003dt(60),a\u003dt(40),f\u003dt(25),s\u003dt(17),l\u003dt(33),h\u003dt(51),v\u003dt(3),p\u003dt(6),d\u003dt(39),y\u003dt(104),g\u003dt(113).set,m\u003dt(68)(),b\u003dt(69),x\u003dt(90),S\u003dt(91),w\u003da.TypeError,_\u003da.process,E\u003da.Promise,O\u003d\"process\"\u003d\u003ds(_),P\u003dfunction(){},M\u003di\u003db.f,F\u003d!!function(){try{var n\u003dE.resolve(1),r\u003d(n.constructor\u003d{})[t(128)(\"species\")]\u003dfunction(t){t(P,P)};return(O||\"function\"\u003d\u003dtypeof PromiseRejectionEvent)\u0026\u0026n.then(P)instanceof r}catch(t){}}(),I\u003dc?function(t,n){return t\u003d\u003d\u003dn||t\u003d\u003d\u003dE\u0026\u0026n\u003d\u003d\u003du}:function(t,n){return t\u003d\u003d\u003dn},A\u003dfunction(t){var n;return!(!h(t)||\"function\"!\u003dtypeof(n\u003dt.then))\u0026\u0026n},k\u003dfunction(t,n){if(!t._n){t._n\u003d!0;var r\u003dt._c;m(function(){for(var e\u003dt._v,i\u003d1\u003d\u003dt._s,o\u003d0;r.length\u003eo;)!function(n){var r,o,u\u003di?n.ok:n.fail,c\u003dn.resolve,a\u003dn.reject,f\u003dn.domain;try{u?(i||(2\u003d\u003dt._h\u0026\u0026T(t),t._h\u003d1),!0\u003d\u003d\u003du?r\u003de:(f\u0026\u0026f.enter(),r\u003du(e),f\u0026\u0026f.exit()),r\u003d\u003d\u003dn.promise?a(w(\"Promise-chain cycle\")):(o\u003dA(r))?o.call(r,c,a):c(r)):a(e)}catch(t){a(t)}}(r[o++]);t._c\u003d[],t._n\u003d!1,n\u0026\u0026!t._h\u0026\u0026N(t)})}},N\u003dfunction(t){g.call(a,function(){var n,r,e,i\u003dt._v,o\u003dj(t);if(o\u0026\u0026(n\u003dx(function(){O?_.emit(\"unhandledRejection\",i,t):(r\u003da.onunhandledrejection)?r({promise:t,reason:i}):(e\u003da.console)\u0026\u0026e.error\u0026\u0026e.error(\"Unhandled promise rejection\",i)}),t._h\u003dO||j(t)?2:1),t._a\u003dvoid 0,o\u0026\u0026n.e)throw n.v})},j\u003dfunction(t){if(1\u003d\u003dt._h)return!1;for(var n,r\u003dt._a||t._c,e\u003d0;r.length\u003ee;)if(n\u003dr[e++],n.fail||!j(n.promise))return!1;return!0},T\u003dfunction(t){g.call(a,function(){var n;O?_.emit(\"rejectionHandled\",t):(n\u003da.onrejectionhandled)\u0026\u0026n({promise:t,reason:t._v})})},R\u003dfunction(t){var n\u003dthis;n._d||(n._d\u003d!0,n\u003dn._w||n,n._v\u003dt,n._s\u003d2,n._a||(n._a\u003dn._c.slice()),k(n,!0))},L\u003dfunction(t){var n,r\u003dthis;if(!r._d){r._d\u003d!0,r\u003dr._w||r;try{if(r\u003d\u003d\u003dt)throw w(\"Promise can\u0027t be resolved itself\");(n\u003dA(t))?m(function(){var e\u003d{_w:r,_d:!1};try{n.call(t,f(L,e,1),f(R,e,1))}catch(t){R.call(e,t)}}):(r._v\u003dt,r._s\u003d1,k(r,!1))}catch(t){R.call({_w:r,_d:!1},t)}}};F||(E\u003dfunction Promise(t){p(this,E,\"Promise\",\"_h\"),v(t),e.call(this);try{t(f(L,this,1),f(R,this,1))}catch(t){R.call(this,t)}},e\u003dfunction Promise(t){this._c\u003d[],this._a\u003dvoid 0,this._s\u003d0,this._d\u003d!1,this._v\u003dvoid 0,this._h\u003d0,this._n\u003d!1},e.prototype\u003dt(93)(E.prototype,{then:function then(t,n){var r\u003dM(y(this,E));return r.ok\u003d\"function\"!\u003dtypeof t||t,r.fail\u003d\"function\"\u003d\u003dtypeof n\u0026\u0026n,r.domain\u003dO?_.domain:void 0,this._c.push(r),this._a\u0026\u0026this._a.push(r),this._s\u0026\u0026k(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o\u003dfunction(){var t\u003dnew e;this.promise\u003dt,this.resolve\u003df(L,t,1),this.reject\u003df(R,t,1)},b.f\u003dM\u003dfunction(t){return I(E,t)?new o(t):i(t)}),l(l.G+l.W+l.F*!F,{Promise:E}),t(101)(E,\"Promise\"),t(100)(\"Promise\"),u\u003dt(23).Promise,l(l.S+l.F*!F,\"Promise\",{reject:function reject(t){var n\u003dM(this);return(0,n.reject)(t),n.promise}}),l(l.S+l.F*(c||!F),\"Promise\",{resolve:function resolve(t){return t instanceof E\u0026\u0026I(t.constructor,this)?t:S(this,t)}}),l(l.S+l.F*!(F\u0026\u0026t(56)(function(t){E.all(t).catch(P)})),\"Promise\",{all:function all(t){var n\u003dthis,r\u003dM(n),e\u003dr.resolve,i\u003dr.reject,o\u003dx(function(){var r\u003d[],o\u003d0,u\u003d1;d(t,!1,function(t){var c\u003do++,a\u003d!1;r.push(void 0),u++,n.resolve(t).then(function(t){a||(a\u003d!0,r[c]\u003dt,--u||e(r))},i)}),--u||e(r)});return o.e\u0026\u0026i(o.v),r.promise},race:function race(t){var n\u003dthis,r\u003dM(n),e\u003dr.reject,i\u003dx(function(){d(t,!1,function(t){n.resolve(t).then(r.resolve,e)})});return i.e\u0026\u0026e(i.v),r.promise}})},{100:100,101:101,104:104,113:113,128:128,17:17,23:23,25:25,"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"3:3,33:33,39:39,40:40,51:51,56:56,6:6,60:60,68:68,69:69,90:90,91:91,93:93}],210:[function(t,n,r){var e\u003dt(33),i\u003dt(3),o\u003dt(7),u\u003d(t(40).Reflect||{}).apply,c\u003dFunction.apply;e(e.S+e.F*!t(35)(function(){u(function(){})}),\"Reflect\",{apply:function apply(t,n,r){var e\u003di(t),a\u003do(r);return u?u(e,n,a):c.call(e,n,a)}})},{3:3,33:33,35:35,40:40,7:7}],211:[function(t,n,r){var e\u003dt(33),i\u003dt(71),o\u003dt(3),u\u003dt(7),c\u003dt(51),a\u003dt(35),f\u003dt(16),s\u003d(t(40).Reflect||{}).construct,l\u003da(function(){function F(){}return!(s(function(){},[],F)instanceof F)}),h\u003d!a(function(){s(function(){})});e(e.S+e.F*(l||h),\"Reflect\",{construct:function construct(t,n){o(t),u(n);var r\u003darguments.length\u003c3?t:o(arguments[2]);if(h\u0026\u0026!l)return s(t,n,r);if(t\u003d\u003dr){switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3])}var e\u003d[null];return e.push.apply(e,n),new(f.apply(t,e))}var a\u003dr.prototype,v\u003di(c(a)?a:Object.prototype),p\u003dFunction.apply.call(t,v,n);return c(p)?p:v}})},{16:16,3:3,33:33,35:35,40:40,51:51,7:7,71:71}],212:[function(t,n,r){var e\u003dt(72),i\u003dt(33),o\u003dt(7),u\u003dt(120);i(i.S+i.F*t(35)(function(){Reflect.defineProperty(e.f({},1,{value:1}),1,{value:2})}),\"Reflect\",{defineProperty:function defineProperty(t,n,r){o(t),n\u003du(n,!0),o(r);try{return e.f(t,n,r),!0}catch(t){return!1}}})},{120:120,33:33,35:35,7:7,72:72}],213:[function(t,n,r){var e\u003dt(33),i\u003dt(75).f,o\u003dt(7);e(e.S,\"Reflect\",{deleteProperty:function deleteProperty(t,n){var r\u003di(o(t),n);return!(r\u0026\u0026!r.configurable)\u0026\u0026delete t[n]}})},{33:33,7:7,75:75}],214:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(7),o\u003dfunction(t){this._t\u003di(t),this._i\u003d0;var n,r\u003dthis._k\u003d[];for(n in t)r.push(n)};t(54)(o,\"Object\",function(){var t,n\u003dthis,r\u003dn._k;do{if(n._i\u003e\u003dr.length)return{value:void 0,done:!0}}while(!((t\u003dr[n._i++])in n._t));return{value:t,done:!1}}),e(e.S,\"Reflect\",{enumerate:function enumerate(t){return new o(t)}})},{33:33,54:54,7:7}],215:[function(t,n,r){var e\u003dt(75),i\u003dt(33),o\u003dt(7);i(i.S,\"Reflect\",{getOwnPropertyDescriptor:function getOwnPropertyDescriptor(t,n){return e.f(o(t),n)}})},{33:33,7:7,75:75}],216:[function(t,n,r){var e\u003dt(33),i\u003dt(79),o\u003dt(7);e(e.S,\"Reflect\",{getPrototypeOf:function getPrototypeOf(t){return i(o(t))}})},{33:33,7:7,79:79}],217:[function(t,n,r){function get(t,n){var r,u,f\u003darguments.length\u003c3?t:arguments[2];return a(t)\u003d\u003d\u003df?t[n]:(r\u003de.f(t,n))?o(r,\"value\")?r.value:void 0!\u003d\u003dr.get?r.get.call(f):void 0:c(u\u003di(t))?get(u,n,f):void 0}var e\u003dt(75),i\u003dt(79),o\u003dt(41),u\u003dt(33),c\u003dt(51),a\u003dt(7);u(u.S,\"Reflect\",{get:get})},{33:33,41:41,51:51,7:7,75:75,79:79}],218:[function(t,n,r){var e\u003dt(33);e(e.S,\"Reflect\",{has:function has(t,n){return n in t}})},{33:33}],219:[function(t,n,r){var e\u003dt(33),i\u003dt(7),o\u003dObject.isExtensible;e(e.S,\"Reflect\",{isExtensible:function isExtensible(t){return i(t),!o||o(t)}})},{33:33,7:7}],220:[function(t,n,r){var e\u003dt(33);e(e.S,\"Reflect\",{ownKeys:t(85)})},{33:33,85:85}],221:[function(t,n,r){var e\u003dt(33),i\u003dt(7),o\u003dObject.preventExtensions;e(e.S,\"Reflect\",{preventExtensions:function preventExtensions(t){i(t);try{return o\u0026\u0026o(t),!0}catch(t){return!1}}})},{33:33,7:7}],222:[function(t,n,r){var e\u003dt(33),i\u003dt(99);i\u0026\u0026e(e.S,\"Reflect\",{setPrototypeOf:function setPrototypeOf(t,n){i.check(t,n);try{return i.set(t,n),!0}catch(t){return!1}}})},{33:33,99:99}],223:[function(t,n,r){function set(t,n,r){var c,l,h\u003darguments.length\u003c4?t:arguments[3],v\u003di.f(f(t),n);if(!v){if(s(l\u003do(t)))return set(l,n,r,h);v\u003da(0)}return u(v,\"value\")?!(!1\u003d\u003d\u003dv.writable||!s(h))\u0026\u0026(c\u003di.f(h,n)||a(0),c.value\u003dr,e.f(h,n,c),!0):void 0!\u003d\u003dv.set\u0026\u0026(v.set.call(h,r),!0)}var e\u003dt(72),i\u003dt(75),o\u003dt(79),u\u003dt(41),c\u003dt(33),a\u003dt(92),f\u003dt(7),s\u003dt(51);c(c.S,\"Reflect\",{set:set})},{33:33,41:41,51:51,7:7,72:72,75:75,79:79,92:92}],224:[function(t,n,r){var e\u003dt(40),i\u003dt(45),o\u003dt(72).f,u\u003dt(77).f,c\u003dt(52),a\u003dt(37),f\u003de.RegExp,s\u003df,l\u003df.prototype,h\u003d/a/g,v\u003d/a/g,p\u003dnew f(h)!\u003d\u003dh;if(t(29)\u0026\u0026(!p||t(35)(function(){return v[t(128)(\"match\")]\u003d!1,f(h)!\u003dh||f(v)\u003d\u003dv||\"/a/i\"!\u003df(h,\"i\")}))){f\u003dfunction RegExp(t,n){var r\u003dthis instanceof f,e\u003dc(t),o\u003dvoid 0\u003d\u003d\u003dn;return!r\u0026\u0026e\u0026\u0026t.constructor\u003d\u003d\u003df\u0026\u0026o?t:i(p?new s(e\u0026\u0026!o?t.source:t,n):s((e\u003dt instanceof f)?t.source:t,e\u0026\u0026o?a.call(t):n),r?this:l,f)};for(var d\u003du(s),y\u003d0;d.length\u003ey;)!function(t){t in f||o(f,t,{configurable:!0,get:function(){return s[t]},set:function(n){s[t]\u003dn}})}(d[y++]);l.constructor\u003df,f.prototype\u003dl,t(94)(e,\"RegExp\",f)}t(100)(\"RegExp\")},{100:100,128:128,29:29,35:35,37:37,40:40,45:45,52:52,72:72,77:77,94:94}],225:[function(t,n,r){t(29)\u0026\u0026\"g\"!\u003d/./g.flags\u0026\u0026t(72).f(RegExp.prototype,\"flags\",{configurable:!0,get:t(37)})},{29:29,37:37,72:72}],226:[function(t,n,r){t(36)(\"match\",1,function(t,n,r){return[function match(r){\"use strict\";var e\u003dt(this),i\u003dvoid 0\u003d\u003dr?void 0:r[n];return void 0!\u003d\u003di?i.call(r,e):new RegExp(r)[n](String(e))},r]})},{36:36}],227:[function(t,n,r){t(36)(\"replace\",2,function(t,n,r){return[function replace(e,i){\"use strict\";var o\u003dt(this),u\u003dvoid 0\u003d\u003de?void 0:e[n];return void 0!\u003d\u003du?u.call(e,o,i):r.call(String(o),e,i)},r]})},{36:36}],228:[function(t,n,r){t(36)(\"search\",1,function(t,n,r){return[function search(r){\"use strict\";var e\u003dt(this),i\u003dvoid 0\u003d\u003dr?void 0:r[n];return void 0!\u003d\u003di?i.call(r,e):new RegExp(r)[n](String(e))},r]})},{36:36}],229:[function(t,n,r){t(36)(\"split\",2,function(n,r,e){\"use strict\";var i\u003dt(52),o\u003de,u\u003d[].push,c\u003d\"length\";if(\"c\"\u003d\u003d\"abbc\".split(/(b)*/)[1]||4!\u003d\"test\".split(/(?:)/,-1)[c]||2!\u003d\"ab\".split(/(?:ab)*/)[c]||4!\u003d\".\".split(/(.?)(.?)/)[c]||\".\".split(/()()/)[c]\u003e1||\"\".split(/.?/)[c]){var a\u003dvoid 0\u003d\u003d\u003d/()??/.exec(\"\")[1];e\u003dfunction(t,n){var r\u003dString(this);if(void 0\u003d\u003d\u003dt\u0026\u00260\u003d\u003d\u003dn)return[];if(!i(t))return o.call(r,t,n);var e,f,s,l,h,v\u003d[],p\u003d(t.ignoreCase?\"i\":\"\")+(t.multiline?\"m\":\"\")+(t.unicode?\"u\":\"\")+(t.sticky?\"y\":\"\"),d\u003d0,y\u003dvoid 0\u003d\u003d\u003dn?4294967295:n\u003e\u003e\u003e0,g\u003dnew RegExp(t.source,p+\"g\");for(a||(e\u003dnew RegExp(\"^\"+g.source+\"$(?!\\\\s)\",p));(f\u003dg.exec(r))\u0026\u0026!((s\u003df.index+f[0][c])\u003ed\u0026\u0026(v.push(r.slice(d,f.index)),!a\u0026\u0026f[c]\u003e1\u0026\u0026f[0].replace(e,function(){for(h\u003d1;h\u003carguments[c]-2;h++)void 0\u003d\u003d\u003darguments[h]\u0026\u0026(f[h]\u003dvoid 0)}),f[c]\u003e1\u0026\u0026f.index\u003cr[c]\u0026\u0026u.apply(v,f.slice(1)),l\u003df[0][c],d\u003ds,v[c]\u003e\u003dy));)g.lastIndex\u003d\u003d\u003df.index\u0026\u0026g.lastIndex++;return d\u003d\u003d\u003dr[c]?!l\u0026\u0026g.test(\"\")||v.push(\"\"):v.push(r.slice(d)),v[c]\u003ey?v.slice(0,y):v}}else\"0\".split(void 0,0)[c]\u0026\u0026(e\u003dfunction(t,n){return void 0\u003d\u003d\u003dt\u0026\u00260\u003d\u003d\u003dn?[]:o.call(this,t,n)});return[function split(t,i){var o\u003dn(this),u\u003dvoid 0\u003d\u003dt?void 0:t[r];return void 0!\u003d\u003du?u.call(t,o,i):e.call(String(o),t,i)},e]})},{36:36,52:52}],230:[function(t,n,r){\"use strict\";t(225);var e\u003dt(7),i\u003dt(37),o\u003dt(29),u\u003d/./.toString,c\u003dfunction(n){t(94)(RegExp.prototype,\"toString\",n,!0)};t(35)(function(){return\"/a/b\"!\u003du.call({source:\"a\",flags:\"b\"})})?c(function toString(){var t\u003de(this);return\"/\".concat(t.source,\"/\",\"flags\"in t?t.flags:!o\u0026\u0026t instanceof RegExp?i.call(t):void 0)}):\"toString\"!\u003du.name\u0026\u0026c(function toString(){return u.call(this)})},{225:225,29:29,35:35,37:37,7:7,94:94}],231:[function(t,n,r){\"use strict\";var e\u003dt(19),i\u003dt(125);n.exports\u003dt(22)(\"Set\",function(t){return function Set(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},{add:function add(t){return e.def(i(this,\"Set\"),t\u003d0\u003d\u003d\u003dt?0:t,t)}},e)},{125:125,19:19,22:22}],232:[function(t,n,r){\"use strict\";t(108)(\"anchor\",function(t){return function anchor(n){return t(this,\"a\",\"name\",n)}})},{108:108}],233:[function(t,n,r){\"use strict\";t(108)(\"big\",function(t){return function big(){return t(this,\"big\",\"\",\"\")}})},{108:108}],234:[function(t,n,r){\"use strict\";t(108)(\"blink\",function(t){return function blink(){return t(this,\"blink\",\"\",\"\")}})},{108:108}],235:[function(t,n,r){\"use strict\";t(108)(\"bold\",function(t){return function bold(){return t(this,\"b\",\"\",\"\")}})},{108:108}],236:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(106)(!1);e(e.P,\"String\",{codePointAt:function codePointAt(t){return i(this,t)}})},{106:106,33:33}],237:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(118),o\u003dt(107),u\u003d\"\".endsWith;e(e.P+e.F*t(34)(\"endsWith\"),\"String\",{endsWith:function endsWith(t){var n\u003do(this,t,\"endsWith\"),r\u003darguments.length\u003e1?arguments[1]:void 0,e\u003di(n.length),c\u003dvoid 0\u003d\u003d\u003dr?e:Math.min(i(r),e),a\u003dString(t);return u?u.call(n,a,c):n.slice(c-a.length,c)\u003d\u003d\u003da}})},{107:107,118:118,33:33,34:34}],238:[function(t,n,r){\"use strict\";t(108)(\"fixed\",function(t){return function fixed(){return t(this,\"tt\",\"\",\"\")}})},{108:108}],239:[function(t,n,r){\"use strict\";t(108)(\"fontcolor\",function(t){return function fontcolor(n){return t(this,\"font\",\"color\",n)}})},{108:108}],240:[function(t,n,r){\"use strict\";t(108)(\"fontsize\",function(t){return function fontsize(n){return t(this,\"font\",\"size\",n)}})},{108:108}],241:[function(t,n,r){var e\u003dt(33),i\u003dt(114),o\u003dString.fromCharCode,u\u003dString.fromCodePoint;e(e.S+e.F*(!!u\u0026\u00261!\u003du.length),\"String\",{fromCodePoint:function fromCodePoint(t){for(var n,r\u003d[],e\u003darguments.length,u\u003d0;e\u003eu;){if(n\u003d+arguments[u++],i(n,1114111)!\u003d\u003dn)throw RangeError(n+\" is not a valid code point\");r.push(n\u003c65536?o(n):o(55296+((n-\u003d65536)\u003e\u003e10),n%1024+56320))}return r.join(\"\")}})},{114:114,33:33}],242:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(107);e(e.P+e.F*t(34)(\"includes\"),\"String\",{includes:function includes(t){return!!~i(this,t,\"includes\").indexOf(t,arguments.length\u003e1?arguments[1]:void 0)}})},{107:107,33:33,34:34}],243:[function(t,n,r){\"use strict\";t(108)(\"italics\",function(t){return function italics(){return t(this,\"i\",\"\",\"\")}})},{108:108}],244:[function(t,n,r){\"use strict\";var e\u003dt(106)(!0);t(55)(String,\"String\",function(t){this._t\u003dString(t),this._i\u003d0},function(){var t,n\u003dthis._t,r\u003dthis._i;return r\u003e\u003dn.length?{value:void 0,done:!0}:(t\u003de(n,r),this._i+\u003dt.length,{value:t,done:!1})})},{106:106,55:55}],245:[function(t,n,r){\"use strict\";t(108)(\"link\",function(t){return function link(n){return t(this,\"a\",\"href\",n)}})},{108:108}],246:[function(t,n,r){var e\u003dt(33),i\u003dt(117),o\u003dt(118);e(e.S,\"String\",{raw:function raw(t){for(var n\u003di(t.raw),r\u003do(n.length),e\u003darguments.length,u\u003d[],c\u003d0;r\u003ec;)u.push(String(n[c++])),c\u003ce\u0026\u0026u.push(String(arguments[c]));return u.join(\"\")}})},{117:117,118:118,33:33}],247:[function(t,n,r){var e\u003dt(33);e(e.P,\"String\",{repeat:t(110)})},{110:110,33:33}],248:[function(t,n,r){\"use strict\";t(108)(\"small\",function(t){return function small(){return t(this,\"small\",\"\",\"\")}})},{108:108}],249:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(118),o\u003dt(107),u\u003d\"\".startsWith;e(e.P+e.F*t(34)(\"startsWith\"),\"String\",{startsWith:function startsWith(t){var n\u003do(this,t,\"startsWith\"),r\u003di(Math.min(arguments.length\u003e1?arguments[1]:void 0,n.length)),e\u003dString(t);return u?u.call(n,e,r):n.slice(r,r+e.length)\u003d\u003d\u003de}})},{107:107,118:118,33:33,34:34}],250:[function(t,n,r){\"use strict\";t(108)(\"strike\",function(t){return function strike(){return t(this,\"strike\",\"\",\"\")}})},{108:108}],251:[function(t,n,r){\"use strict\";t(108)(\"sub\",function(t){return function sub(){return t(this,\"sub\",\"\",\"\")}})},{108:108}],252:[function(t,n,r){\"use strict\";t(108)(\"sup\",function(t){return function sup(){return t(this,\"sup\",\"\",\"\")}})},{108:108}],253:[function(t,n,r){\"use strict\";t(111)(\"trim\",function(t){return function trim(){return t(this,3)}})},{111:111}],254:[function(t,n,r){\"use strict\";var e\u003dt(40),i\u003dt(41),o\u003dt(29),u\u003dt(33),c\u003dt(94),a\u003dt(66).KEY,f\u003dt(35),s\u003dt(103),l\u003dt(101),h\u003dt(124),v\u003dt(128),p\u003dt(127),d\u003dt(126),y\u003dt(59),g\u003dt(32),m\u003dt(49),b\u003dt(7),x\u003dt(117),S\u003dt(120),w\u003dt(92),_\u003dt(71),E\u003dt(76),O\u003dt(75),P\u003dt(72),M\u003dt(81),F\u003dO.f,I\u003dP.f,A\u003dE.f,k\u003de.Symbol,N\u003de.JSON,j\u003dN\u0026\u0026N.stringify,T\u003dv(\"_hidden\"),R\u003dv(\"toPrimitive\"),L\u003d{}.propertyIsEnumerable,G\u003ds(\"symbol-registry\"),D\u003ds(\"symbols\"),C\u003ds(\"op-symbols\"),W\u003dObject.prototype,U\u003d\"function\"\u003d\u003dtypeof k,B\u003de.QObject,V\u003d!B||!B.prototype||!B.prototype.findChild,z\u003do\u0026\u0026f(function(){return 7!\u003d_(I({},\"a\",{get:function(){return I(this,\"a\",{value:7}).a}})).a})?function(t,n,r){var e\u003dF(W,n);e\u0026\u0026delete W[n],I(t,n,r),e\u0026\u0026t!\u003d\u003dW\u0026\u0026I(W,n,e)}:I,q\u003dfunction(t){var n\u003dD[t]\u003d_(k.prototype);return n._k\u003dt,n},K\u003dU\u0026\u0026\"symbol\"\u003d\u003dtypeof k.iterator?function(t){return\"symbol\"\u003d\u003dtypeof t}:function(t){return t instanceof k},Y\u003dfunction defineProperty(t,n,r){return t\u003d\u003d\u003dW\u0026\u0026Y(C,n,r),b(t),n\u003dS(n,!0),b(r),i(D,n)?(r.enumerable?(i(t,T)\u0026\u0026t[T][n]\u0026\u0026(t[T][n]\u003d!1),r\u003d_(r,{enumerable:w(0,!1)})):(i(t,T)||I(t,T,w(1,{})),t[T][n]\u003d!0),z(t,n,r)):I(t,n,r)},J\u003dfunction defineProperties(t,n){b(t);for(var r,e\u003dg(n\u003dx(n)),i\u003d0,o\u003de.length;o\u003ei;)Y(t,r\u003de[i++],n[r]);return t},H\u003dfunction create(t,n){return void 0\u003d\u003d\u003dn?_(t):J(_(t),n)},X\u003dfunction propertyIsEnumerable(t){var n\u003dL.call(this,t\u003dS(t,!0));return!(this\u003d\u003d\u003dW\u0026\u0026i(D,t)\u0026\u0026!i(C,t))\u0026\u0026(!(n||!i(this,t)||!i(D,t)||i(this,T)\u0026\u0026this[T][t])||n)},$\u003dfunction getOwnPropertyDescriptor(t,n){if(t\u003dx(t),n\u003dS(n,!0),t!\u003d\u003dW||!i(D,n)||i(C,n)){var r\u003dF(t,n);return!r||!i(D,n)||i(t,T)\u0026\u0026t[T][n]||(r.enumerable\u003d!0),r}},Z\u003dfunction getOwnPropertyNames(t){for(var n,r\u003dA(x(t)),e\u003d[],o\u003d0;r.length\u003eo;)i(D,n\u003dr[o++])||n\u003d\u003dT||n\u003d\u003da||e.push(n);return e},Q\u003dfunction getOwnPropertySymbols(t){for(var n,r\u003dt\u003d\u003d\u003dW,e\u003dA(r?C:x(t)),o\u003d[],u\u003d0;e.length\u003eu;)!i(D,n\u003de[u++])||r\u0026\u0026!i(W,n)||o.push(D[n]);return o};U||(k\u003dfunction Symbol(){if(this instanceof k)throw TypeError(\"Symbol is not a constructor!\");var t\u003dh(arguments.length\u003e0?arguments[0]:void 0),n\u003dfunction(r){this\u003d\u003d\u003dW\u0026\u0026n.call(C,r),i(this,T)\u0026\u0026i(this[T],t)\u0026\u0026(this[T][t]\u003d!1),z(this,t,w(1,r))};return o\u0026\u0026V\u0026\u0026z(W,t,{configurable:!0,set:n}),q(t)},c(k.prototype,\"toString\",function toString(){return this._k}),O.f\u003d$,P.f\u003dY,t(77).f\u003dE.f\u003dZ,t(82).f\u003dX,t(78).f\u003dQ,o\u0026\u0026!t(60)\u0026\u0026c(W,\"propertyIsEnumerable\",X,!0),p.f\u003dfunction(t){return q(v(t))}),u(u.G+u.W+u.F*!U,{Symbol:k});for(var tt\u003d\"hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables\".split(\",\"),nt\u003d0;tt.length\u003ent;)v(tt[nt++]);for(var rt\u003dM(v.store),et\u003d0;rt.length\u003eet;)d(rt[et++]);u(u.S+u.F*!U,\"Symbol\",{for:function(t){return i(G,t+\u003d\"\")?G[t]:G[t]\u003dk(t)},keyFor:function keyFor(t){if(K(t))return y(G,t);throw TypeError(t+\" is not a symbol!\")},useSetter:function(){V\u003d!0},useSimple:function(){V\u003d!1}}),u(u.S+u.F*!U,\"Object\",{create:H,defineProperty:Y,defineProperties:J,getOwnPropertyDescriptor:$,getOwnPropertyNames:Z,getOwnPropertySymbols:Q}),N\u0026\u0026u(u.S+u.F*(!U||f(function(){var t\u003dk();return\"[null]\"!\u003dj([t])||\"{}\"!\u003dj({a:t})||\"{}\"!\u003dj(Object(t))})),\"JSON\",{stringify:function stringify(t){if(void 0!\u003d\u003dt\u0026\u0026!K(t)){for(var n,r,e\u003d[t],i\u003d1;arguments.length\u003ei;)e.push(arguments[i++]);return n\u003de[1],\"function\"\u003d\u003dtypeof n\u0026\u0026(r\u003dn),!r\u0026\u0026m(n)||(n\u003dfunction(t,n){if(r\u0026\u0026(n\u003dr.call(this,t,n)),!K(n))return n}),e[1]\u003dn,j.apply(N,e)}}}),k.prototype[R]||t(42)(k.prototype,R,k.prototype.valueOf),l(k,\"Symbol\"),l(Math,\"Math\",!0),l(e.JSON,\"JSON\",!0)},{101:101,103:103,117:117,120:120,124:124,126:126,127:127,128:128,29:29,32:32,33:33,35:35,40:40,41:41,42:42,49:49,59:59,60:60,66:66,7:7,71:71,72:72,75:75,76:76,77:77,78:78,81:81,82:82,92:92,94:94}],255:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(123),o\u003dt(122),u\u003dt(7),c\u003dt(114),a\u003dt(118),f\u003dt(51),s\u003dt(40).ArrayBuffer,l\u003dt(104),h\u003do.ArrayBuffer,v\u003do.DataView,p\u003di.ABV\u0026\u0026s.isView,d\u003dh.prototype.slice,y\u003di.VIEW;e(e.G+e.W+e.F*(s!\u003d\u003dh),{ArrayBuffer:h}),e(e.S+e.F*!i.CONSTR,\"ArrayBuffer\",{isView:function isView(t){return p\u0026\u0026p(t)||f(t)\u0026\u0026y in t}}),e(e.P+e.U+e.F*t(35)(function(){return!new h(2).slice(1,void 0).byteLength}),\"ArrayBuffer\",{slice:function slice(t,n){if(void 0!\u003d\u003dd\u0026\u0026void 0\u003d\u003d\u003dn)return d.call(u(this),t);for(var r\u003du(this).byteLength,e\u003dc(t,r),i\u003dc(void 0\u003d\u003d\u003dn?r:n,r),o\u003dnew(l(this,h))(a(i-e)),f\u003dnew v(this),s\u003dnew v(o),p\u003d0;e\u003ci;)s.setUint8(p++,f.getUint8(e++));return o}}),t(100)(\"ArrayBuffer\")},{100:100,104:104,114:114,118:118,122:122,123:123,33:33,35:35,40:40,51:51,7:7}],256:[function(t,n,r){var e\u003dt(33);e(e.G+e.W+e.F*!t(123).ABV,{DataView:t(122).DataView})},{122:122,123:123,33:33}],257:[function(t,n,r){t(121)(\"Float32\",4,function(t){return function Float32Array(n,r,e){return t(this,n,r,e)}})},{121:121}],258:[function(t,n,r){t(121)(\"Float64\",8,function(t){return function Float64Array(n,r,e){return t(this,n,r,e)}})},{121:121}],259:[function(t,n,r){t(121)(\"Int16\",2,function(t){return function Int16Array(n,r,e){return t(this,n,r,e)}})},{121:121}],260:[function(t,n,r){t(121)(\"Int32\",4,function(t){return function Int32Array(n,r,e){return t(this,n,r,e)}})},{121:121}],261:[function(t,n,r){t(121)(\"Int8\",1,function(t){return function Int8Array(n,r,e){return t(this,n,r,e)}})},{121:121}],262:[function(t,n,r){t(121)(\"Uint16\",2,function(t){return function Uint16Array(n,r,e){return t(this,n,r,e)}})},{121:121}],263:[function(t,n,r){t(121)(\"Uint32\",4,function(t){return function Uint32Array(n,r,e){return t(this,n,r,e)}})},{121:121}],264:[function(t,n,r){t(121)(\"Uint8\",1,function(t){return function Uint8Array(n,r,e){return t(this,n,r,e)}})},{121:121}],265:[function(t,n,r){t(121)(\"Uint8\",1,function(t){return function Uint8ClampedArray(n,r,e){return t(this,n,r,e)}},!0)},{121:121}],266:[function(t,n,r){\"use strict\";var e,i\u003dt(12)(0),o\u003dt(94),u\u003dt(66),c\u003dt(70),a\u003dt(21),f\u003dt(51),s\u003dt(35),l\u003dt(125),h\u003du.getWeak,v\u003dObject.isExtensible,p\u003da.ufstore,d\u003d{},y\u003dfunction(t){return function WeakMap(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},g\u003d{get:function get(t){if(f(t)){var n\u003dh(t);return!0\u003d\u003d\u003dn?p(l(this,\"WeakMap\")).get(t):n?n[this._i]:void 0}},set:function set(t,n){return a.def(l(this,\"WeakMap\"),t,n)}},m\u003dn.exports\u003dt(22)(\"WeakMap\",y,g,a,!0,!0);s(function(){return 7!\u003d(new m).set((Object.freeze||Object)(d),7).get(d)})\u0026\u0026(e\u003da.getConstructor(y,\"WeakMap\"),c(e.prototype,g),u.NEED\u003d!0,i([\"delete\",\"has\",\"get\",\"set\"],function(t){var n\u003dm.prototype,r\u003dn[t];o(n,t,function(n,i){if(f(n)\u0026\u0026!v(n)){this._f||(this._f\u003dnew e);var o\u003dthis._f[t](n,i);return\"set\"\u003d\u003dt?this:o}return r.call(this,n,i)})}))},{12:12,125:125,21:21,22:22,35:35,51:51,66:66,70:70,94:94}],267:[function(t,n,r){\"use strict\";var e\u003dt(21),i\u003dt(125);t(22)(\"WeakSet\",function(t){return function WeakSet(){return t(this,arguments.length\u003e0?arguments[0]:void 0)}},{add:function add(t){return e.def(i(this,\"WeakSet\"),t,!0)}},e,!1,!0)},{125:125,21:21,22:22}],268:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(38),o\u003dt(119),u\u003dt(118),c\u003dt(3),a\u003dt(15);e(e.P,\"Array\",{flatMap:function flatMap(t){var n,r,e\u003do(this);return c(t),n\u003du(e.length),r\u003da(e,0),i(r,e,e,n,0,1,t,arguments[1]),r}}),t(5)(\"flatMap\")},{118:118,119:119,15:15,3:3,33:33,38:38,5:5}],269:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(38),o\u003dt(119),u\u003dt(118),c\u003dt(116),a\u003dt(15);e(e.P,\"Array\",{flatten:function flatten(){var t\u003darguments[0],n\u003do(this),r\u003du(n.length),e\u003da(n,0);return i(e,n,n,r,0,void 0\u003d\u003d\u003dt?1:c(t)),e}}),t(5)(\"flatten\")},{116:116,118:118,119:119,15:15,33:33,38:38,5:5}],270:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(11)(!0);e(e.P,\"Array\",{includes:function includes(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0)}}),t(5)(\"includes\")},{11:11,33:33,5:5}],271:[function(t,n,r){var e\u003dt(33),i\u003dt(68)(),o\u003dt(40).process,u\u003d\"process\"\u003d\u003dt(18)(o);e(e.G,{asap:function asap(t){var n\u003du\u0026\u0026o.domain;i(n?n.bind(t):t)}})},{18:18,33:33,40:40,68:68}],272:[function(t,n,r){var e\u003dt(33),i\u003dt(18);e(e.S,\"Error\",{isError:function isError(t){return\"Error\"\u003d\u003d\u003di(t)}})},{18:18,33:33}],273:[function(t,n,r){var e\u003dt(33);e(e.G,{global:t(40)})},{33:33,40:40}],274:[function(t,n,r){t(97)(\"Map\")},{97:97}],275:[function(t,n,r){t(98)(\"Map\")},{98:98}],276:[function(t,n,r){var e\u003dt(33);e(e.P+e.R,\"Map\",{toJSON:t(20)(\"Map\")})},{20:20,33:33}],277:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{clamp:function clamp(t,n,r){return Math.min(r,Math.max(n,t))}})},{33:33}],278:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{DEG_PER_RAD:Math.PI/180})},{33:33}],279:[function(t,n,r){var e\u003dt(33),i\u003d180/Math.PI;e(e.S,\"Math\",{degrees:function degrees(t){return t*i}})},{33:33}],280:[function(t,n,r){var e\u003dt(33),i\u003dt(64),o\u003dt(62);e(e.S,\"Math\",{fscale:function fscale(t,n,r,e,u){return o(i(t,n,r,e,u))}})},{33:33,62:62,64:64}],281:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{iaddh:function iaddh(t,n,r,e){var i\u003dt\u003e\u003e\u003e0,o\u003dn\u003e\u003e\u003e0,u\u003dr\u003e\u003e\u003e0;return o+(e\u003e\u003e\u003e0)+((i\u0026u|(i|u)\u0026~(i+u\u003e\u003e\u003e0))\u003e\u003e\u003e31)|0}})},{33:33}],282:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{imulh:function imulh(t,n){var r\u003d+t,e\u003d+n,i\u003d65535\u0026r,o\u003d65535\u0026e,u\u003dr\u003e\u003e16,c\u003de\u003e\u003e16,a\u003d(u*o\u003e\u003e\u003e0)+(i*o\u003e\u003e\u003e16);return u*c+(a\u003e\u003e16)+((i*c\u003e\u003e\u003e0)+(65535\u0026a)\u003e\u003e16)}})},{33:33}],283:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{isubh:function isubh(t,n,r,e){var i\u003dt\u003e\u003e\u003e0,o\u003dn\u003e\u003e\u003e0,u\u003dr\u003e\u003e\u003e0;return o-(e\u003e\u003e\u003e0)-((~i\u0026u|~(i^u)\u0026i-u\u003e\u003e\u003e0)\u003e\u003e\u003e31)|0}})},{33:33}],284:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{RAD_PER_DEG:180/Math.PI})},{33:33}],285:[function(t,n,r){var e\u003dt(33),i\u003dMath.PI/180;e(e.S,\"Math\",{radians:function radians(t){return t*i}})},{33:33}],286:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{scale:t(64)})},{33:33,64:64}],287:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{signbit:function signbit(t){return(t\u003d+t)!\u003dt?t:0\u003d\u003dt?1/t\u003d\u003d1/0:t\u003e0}})},{33:33}],288:[function(t,n,r){var e\u003dt(33);e(e.S,\"Math\",{umulh:function umulh(t,n){var r\u003d+t,e\u003d+n,i\u003d65535\u0026r,o\u003d65535\u0026e,u\u003dr\u003e\u003e\u003e16,c\u003de\u003e\u003e\u003e16,a\u003d(u*o\u003e\u003e\u003e0)+(i*o\u003e\u003e\u003e16);return u*c+(a\u003e\u003e\u003e16)+((i*c\u003e\u003e\u003e0)+(65535\u0026a)\u003e\u003e\u003e16)}})},{33:33}],289:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(3),u\u003dt(72);t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__defineGetter__:function __defineGetter__(t,n){u.f(i(this),t,{get:o(n),enumerable:!0,configurable:!0})}})},{119:119,29:29,3:3,33:33,72:72,74:74}],290:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(3),u\u003dt(72);t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__defineSetter__:function __defineSetter__(t,n){u.f(i(this),t,{set:o(n),enumerable:!0,configurable:!0})}})},{119:119,29:29,3:3,33:33,72:72,74:74}],291:[function(t,n,r){var e\u003dt(33),i\u003dt(84)(!0);e(e.S,\"Object\",{entries:function entries(t){return i(t)}})},{33:33,84:84}],292:[function(t,n,r){var e\u003dt(33),i\u003dt(85),o\u003dt(117),u\u003dt(75),c\u003dt(24);e(e.S,\"Object\",{getOwnPropertyDescriptors:function getOwnPropertyDescriptors(t){for(var n,r,e\u003do(t),a\u003du.f,f\u003di(e),s\u003d{},l\u003d0;f.length\u003el;)void 0!\u003d\u003d(r\u003da(e,n\u003df[l++]))\u0026\u0026c(s,n,r);return s}})},{117:117,24:24,33:33,75:75,85:85}],293:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(120),u\u003dt(79),c\u003dt(75).f;t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__lookupGetter__:function __lookupGetter__(t){var n,r\u003di(this),e\u003do(t,!0);do{if(n\u003dc(r,e))return n.get}while(r\u003du(r))}})},{119:119,120:120,29:29,33:33,74:74,75:75,79:79}],294:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(119),o\u003dt(120),u\u003dt(79),c\u003dt(75).f;t(29)\u0026\u0026e(e.P+t(74),\"Object\",{__lookupSetter__:function __lookupSetter__(t){var n,r\u003di(this),e\u003do(t,!0);do{if(n\u003dc(r,e))return n.set}while(r\u003du(r))}})},{119:119,120:120,29:29,33:33,74:74,75:75,79:79}],295:[function(t,n,r){var e\u003dt(33),i\u003dt(84)(!1);e(e.S,\"Object\",{values:function values(t){return i(t)}})},{33:33,84:84}],296:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(40),o\u003dt(23),u\u003dt(68)(),c\u003dt(128)(\"observable\"),a\u003dt(3),f\u003dt(7),s\u003dt(6),l\u003dt(93),h\u003dt(42),v\u003dt(39),p\u003dv.RETURN,d\u003dfunction(t){return null\u003d\u003dt?void 0:a(t)},y\u003dfunction(t){var n\u003dt._c;n\u0026\u0026(t._c\u003dvoid 0,n())},g\u003dfunction(t){return void 0\u003d\u003d\u003dt._o},m\u003dfunction(t){g(t)||(t._o\u003dvoid 0,y(t))},b\u003dfunction(t,n){f(t),this._c\u003dvoid 0,this._o\u003dt,t\u003dnew x(this);try{var r\u003dn(t),e\u003dr;null!\u003dr\u0026\u0026(\"function\"\u003d\u003dtypeof r.unsubscribe?r\u003dfunction(){e.unsubscribe()}:a(r),this._c\u003dr)}catch(n){return void t.error(n)}g(this)\u0026\u0026y(this)};b.prototype\u003dl({},{unsubscribe:function unsubscribe(){m(this)}});var x\u003dfunction(t){this._s\u003dt};x.prototype\u003dl({},{next:function next(t){var n\u003dthis._s;if(!g(n)){var r\u003dn._o;try{var e\u003dd(r.next);if(e)return e.call(r,t)}catch(t){try{m(n)}finally{throw t}}}},error:function error(t){var n\u003dthis._s;if(g(n))throw t;var r\u003dn._o;n._o\u003dvoid 0;try{var e\u003dd(r.error);if(!e)throw t;t\u003de.call(r,t)}catch(t){try{y(n)}finally{throw t}}return y(n),t},complete:function complete(t){var n\u003dthis._s;if(!g(n)){var r\u003dn._o;n._o\u003dvoid 0;try{var e\u003dd(r.complete);t\u003de?e.call(r,t):void 0}catch(t){try{y(n)}finally{throw t}}return y(n),t}}});var S\u003dfunction Observable(t){s(this,S,\"Observable\",\"_f\")._f\u003da(t)};l(S.prototype,{subscribe:function subscribe(t){return new b(t,this._f)},forEach:function forEach(t){var n\u003dthis;return new(o.Promise||i.Promise)(function(r,e){a(t);var i\u003dn.subscribe({next:function(n){try{return t(n)}catch(t){e(t),i.unsubscribe()}},error:e,complete:r})})}}),l(S,{from:function from(t){var n\u003d\"function\"\u003d\u003dtypeof this?this:S,r\u003dd(f(t)[c]);if(r){var e\u003df(r.call(t));return e.constructor\u003d\u003d\u003dn?e:new n(function(t){return e.subscribe(t)})}return new n(function(n){var r\u003d!1;return u(function(){if(!r){try{if(v(t,!1,function(t){if(n.next(t),r)return p})\u003d\u003d\u003dp)return}catch(t){if(r)throw t;return void n.error(t)}n.complete()}}),function(){r\u003d!0}})},of:function of(){for(var t\u003d0,n\u003darguments.length,r\u003dArray(n);t\u003cn;)r[t]\u003darguments[t++];return new(\"function\"\u003d\u003dtypeof this?this:S)(function(t){var n\u003d!1;return u(function(){if(!n){for(var e\u003d0;e\u003cr.length;++e)if(t.next(r[e]),n)return;t.complete()}}),function(){n\u003d!0}})}}),h(S.prototype,c,function(){return this}),e(e.G,{Observable:S}),t(100)(\"Observable\")},{100:100,128:128,23:23,3:3,33:33,39:39,40:40,42:42,6:6,68:68,7:7,93:93}],297:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(23),o\u003dt(40),u\u003dt(104),c\u003dt(91);e(e.P+e.R,\"Promise\",{finally:function(t){var n\u003du(this,i.Promise||o.Promise),r\u003d\"function\"\u003d\u003dtypeof t;return this.then(r?function(r){return c(n,t()).then(function(){return r})}:t,r?function(r){return c(n,t()).then(function(){throw r})}:t)}})},{104:104,23:23,33:33,40:40,91:91}],298:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(69),o\u003dt(90);e(e.S,\"Promise\",{try:function(t){var n\u003di.f(this),r\u003do(t);return(r.e?n.reject:n.resolve)(r.v),n.promise}})},{33:33,69:69,90:90}],299:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.key,u\u003de.set;e.exp({defineMetadata:function defineMetadata(t,n,r,e){u(t,n,i(r),o(e))}})},{67:67,7:7}],300:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.key,u\u003de.map,c\u003de.store;e.exp({deleteMetadata:function deleteMetadata(t,n){var r\u003darguments.length\u003c3?void 0:o(arguments[2]),e\u003du(i(n),r,!1);if(void 0\u003d\u003d\u003de||!e.delete(t))return!1;if(e.size)return!0;var a\u003dc.get(n);return a.delete(r),!!a.size||c.delete(n)}})},{67:67,7:7}],301:[function(t,n,r){var e\u003dt(231),i\u003dt(10),o\u003dt(67),u\u003dt(7),c\u003dt(79),a\u003do.keys,f\u003do.key,s\u003dfunction(t,n){var r\u003da(t,n),o\u003dc(t);if(null\u003d\u003d\u003do)return r;var u\u003ds(o,n);return u.length?r.length?i(new e(r.concat(u))):u:r};o.exp({getMetadataKeys:function getMetadataKeys(t){return s(u(t),arguments.length\u003c2?void 0:f(arguments[1]))}})},{10:10,231:231,67:67,7:7,79:79}],302:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003dt(79),u\u003de.has,c\u003de.get,a\u003de.key,f\u003dfunction(t,n,r){if(u(t,n,r))return c(t,n,r);var e\u003do(n);return null!\u003d\u003de?f(t,e,r):void 0};e.exp({getMetadata:function getMetadata(t,n){return f(t,i(n),arguments.length\u003c3?void 0:a(arguments[2]))}})},{67:67,7:7,79:79}],303:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.keys,u\u003de.key;e.exp({getOwnMetadataKeys:function getOwnMetadataKeys(t){return o(i(t),arguments.length\u003c2?void 0:u(arguments[1]))}})},{67:67,7:7}],304:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.get,u\u003de.key;e.exp({getOwnMetadata:function getOwnMetadata(t,n){return o(t,i(n),arguments.length\u003c3?void 0:u(arguments[2]))}})},{67:67,7:7}],305:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003dt(79),u\u003de.has,c\u003de.key,a\u003dfunction(t,n,r){if(u(t,n,r))return!0;var e\u003do(n);return null!\u003d\u003de\u0026\u0026a(t,e,r)};e.exp({hasMetadata:function hasMetadata(t,n){return a(t,i(n),arguments.length\u003c3?void 0:c(arguments[2]))}})},{67:67,7:7,79:79}],306:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003de.has,u\u003de.key;e.exp({hasOwnMetadata:function hasOwnMetadata(t,n){return o(t,i(n),arguments.length\u003c3?void 0:u(arguments[2]))}})},{67:67,7:7}],307:[function(t,n,r){var e\u003dt(67),i\u003dt(7),o\u003dt(3),u\u003de.key,c\u003de.set;e.exp({metadata:function metadata(t,n){return function decorator(r,e){c(t,n,(void 0!\u003d\u003de?i:o)(r),u(e))}}})},{3:3,67:67,7:7}],308:[function(t,n,r){t(97)(\"Set\")},{97:97}],309:[function(t,n,r){t(98)(\"Set\")},{98:98}],310:[function(t,n,r){var e\u003dt(33);e(e.P+e.R,\"Set\",{toJSON:t(20)(\"Set\")})},{20:20,33:33}],311:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(106)(!0);e(e.P,\"String\",{at:function at(t){return i(this,t)}})},{106:106,33:33}],312:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(28),o\u003dt(118),u\u003dt(52),c\u003dt(37),a\u003dRegExp.prototype,f\u003dfunction(t,n){this._r\u003dt,this._s\u003dn};t(54)(f,\"RegExp String\",function next(){var t\u003dthis._r.exec(this._s);return{value:t,done:null\u003d\u003d\u003dt}}),e(e.P,\"String\",{matchAll:function matchAll(t){if(i(this),!u(t))throw TypeError(t+\" is not a regexp!\");var n\u003dString(this),r\u003d\"flags\"in a?String(t.flags):c.call(t),e\u003dnew RegExp(t.source,~r.indexOf(\"g\")?r:\"g\"+r);return e.lastIndex\u003do(t.lastIndex),new f(e,n)}})},{118:118,28:28,33:33,37:37,52:52,54:54}],313:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(109);e(e.P,\"String\",{padEnd:function padEnd(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0,!1)}})},{109:109,33:33}],314:[function(t,n,r){\"use strict\";var e\u003dt(33),i\u003dt(109);e(e.P,\"String\",{padStart:function padStart(t){return i(this,t,arguments.length\u003e1?arguments[1]:void 0,!0)}})},{109:109,33:33}],315:[function(t,n,r){\"use strict\";t(111)(\"trimLeft\",function(t){return function trimLeft(){return t(this,1)}},\"trimStart\")},{111:111}],316:[function(t,n,r){\"use strict\";t(111)(\"trimRight\",function(t){return function trimRight(){return t(this,2)}},\"trimEnd\")},{111:111}],317:[function(t,n,r){t(126)(\"asyncIterator\")},{126:126}],318:[function(t,n,r){t(126)(\"observable\")},{126:126}],319:[function(t,n,r){var e\u003dt(33);e(e.S,\"System\",{global:t(40)})},{33:33,40:40}],320:[function(t,n,r){t(97)(\"WeakMap\")},{97:97}],321:[function(t,n,r){t(98)(\"WeakMap\")},{98:98}],322:[function(t,n,r){t(97)(\"WeakSet\")},{97:97}],323:[function(t,n,r){t(98)(\"WeakSet\")},{98:98}],324:[function(t,n,r){for(var e\u003dt(141),i\u003dt(81),o\u003dt(94),u\u003dt(40),c\u003dt(42),a\u003dt(58),f\u003dt(128),s\u003df(\"iterator\"),l\u003df(\"toStringTag\"),h\u003da.Array,v\u003d{CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},p\u003di(v),d\u003d0;d\u003cp.length;d++){var y,g\u003dp[d],m\u003dv[g],b\u003du[g],x\u003db\u0026\u0026b.prototype;if(x\u0026\u0026(x[s]||c(x,s,h),x[l]||c(x,l,g),a[g]\u003dh,m))for(y in e)x[y]||o(x,y,e[y],!0)}},{128:128,141:141,40:40,42:42,58:58,81:81,94:94}],325:[function(t,n,r){var e\u003dt(33),i\u003dt(113);e(e.G+e.B,{setImmediate:i.set,clearImmediate:i.clear})},{113:113,33:33}],326:[function(t,n,r){var e\u003dt(40),i\u003dt(33),o\u003dt(46),u\u003dt(88),c\u003de.navigator,a\u003d!!c\u0026\u0026/MSIE .\\./.test(c.userAgent),f\u003dfunction(t){return a?function(n,r){return t(o(u,[].slice.call(arguments,2),\"function\"\u003d\u003dtypeof n?n:Function(n)),r)}:t};i(i.G+i.B+i.F*a,{setTimeout:f(e.setTimeout),setInterval:f(e.setInterval)})},{33:33,40:40,46:46,88:88}],327:[function(t,n,r){t(254),t(191),t(193),t(192),t(195),t(197),t(202),t(196),t(194),t(204),t(203),t(199),t(200),t(198),t(190),t(201),t(205),t(206),t(157),t(159),t(158),t(208),t(207),t(178),t(188),t(189),t(179),t(180),t(181),t(182),t(183),t(184),t(185),t(186),t(187),t(161),t(162),t(163),t(164),t(165),t(166),t(167),t(168),t(169),t(170),t(171),t(172),t(173),t(174),t(175),t(176),t(177),t(241),t(246),t(253),t(244),t(236),t(237),t(242),t(247),t(249),t(232),t(233),t(234),t(235),t(238),t(239),t(240),t(243),t(245),t(248),t(250),t(251),t(252),t(152),t(154),t(153),t(156),t(155),t(140),t(138),t(145),t(142),t(148),t(150),t(137),t(144),t(134),t(149),t(132),t(147),t(146),t(139),t(143),t(131),t(133),t(136),t(135),t(151),t(141),t(224),t(230),t(225),t(226),t(227),t(228),t(229),t(209),t(160),t(231),t(266),t(267),t(255),t(256),t(261),t(264),t(265),t(259),t(262),t(260),t(263),t(257),t(258),t(210),t(211),t(212),t(213),t(214),t(217),t(215),t(216),t(218),t(219),t(220),t(221),t(223),t(222),t(270),t(268),t(269),t(311),t(314),t(313),t(315),t(316),t(312),t(317),t(318),t(292),t(295),t(291),t(289),t(290),t(293),t(294),t(276),t(310),t(275),t(309),t(321),t(323),t(274),t(308),t(320),t(322),t(273),t(319),t(272),t(277),t(278),t(279),t(280),t(281),t(283),t(282),t(284),t(285),t(286),t(288),t(287),t(297),t(298),t(299),t(300),t(302),t(301),t(304),t(303),t(305),t(306),t(307),t(271),t(296),t(326),t(325),t(324),n.exports\u003dt(23)},{131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"186:186,187:187,188:188,189:189,190:190,191:191,192:192,193:193,194:194,195:195,196:196,197:197,198:198,199:199,200:200,201:201,202:202,203:203,204:204,205:205,206:206,207:207,208:208,209:209,210:210,211:211,212:212,213:213,214:214,215:215,216:216,217:217,218:218,219:219,220:220,221:221,222:222,223:223,224:224,225:225,226:226,227:227,228:228,229:229,23:23,230:230,231:231,232:232,233:233,234:234,235:235,236:236,237:237,238:238,239:239,240:240,241:241,242:242,243:243,244:244,245:245,246:246,247:247,248:248,249:249,250:250,251:251,252:252,253:253,254:254,255:255,256:256,257:257,258:258,259:259,260:260,261:261,262:262,263:263,264:264,265:265,266:266,267:267,268:268,269:269,270:270,271:271,272:272,273:273,274:274,275:275,276:276,277:277,278:278,279:279,280:280,281:281,282:282,283:283,284:284,285:285,286:286,287:287,288:288,289:289,290:290,291:291,292:292,293:293,294:294,295:295,296:296,297:297,298:298,299:299,300:300,301:301,302:302,303:303,304:304,305:305,306:306,307:307,308:308,309:309,310:310,311:311,312:312,313:313,314:314,315:315,316:316,317:317,318:318,319:319,320:320,321:321,322:322,323:323,324:324,325:325,326:326}],328:[function(t,n,r){(function(t){!function(t){\"use strict\";function wrap(t,n,r,e){var i\u003dn\u0026\u0026n.prototype instanceof Generator?n:Generator,o\u003dObject.create(i.prototype),u\u003dnew Context(e||[]);return o._invoke\u003dmakeInvokeMethod(t,r,u),o}function tryCatch(t,n,r){try{return{type:\"normal\",arg:t.call(n,r)}}catch(t){return{type:\"throw\",arg:t}}}function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}function defineIteratorMethods(t){[\"next\",\"throw\",\"return\"].forEach(function(n){t[n]\u003dfunction(t){return this._invoke(n,t)}})}function AsyncIterator(n){function invoke(t,r,e,o){var u\u003dtryCatch(n[t],n,r);if(\"throw\"!\u003d\u003du.type){var c\u003du.arg,a\u003dc.value;return a\u0026\u0026\"object\"\u003d\u003dtypeof a\u0026\u0026i.call(a,\"__await\")?Promise.resolve(a.__await).then(function(t){invoke(\"next\",t,e,o)},function(t){invoke(\"throw\",t,e,o)}):Promise.resolve(a).then(function(t){c.value\u003dt,e(c)},o)}o(u.arg)}function enqueue(t,n){function callInvokeWithMethodAndArg(){return new Promise(function(r,e){invoke(t,n,r,e)})}return r\u003dr?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}\"object\"\u003d\u003dtypeof t.process\u0026\u0026t.process.domain\u0026\u0026(invoke\u003dt.process.domain.bind(invoke));var r;this._invoke\u003denqueue}function makeInvokeMethod(t,n,r){var e\u003dl;return function invoke(i,o){if(e\u003d\u003d\u003dv)throw new Error(\"Generator is already running\");if(e\u003d\u003d\u003dp){if(\"throw\"\u003d\u003d\u003di)throw o;return doneResult()}for(r.method\u003di,r.arg\u003do;;){var u\u003dr.delegate;if(u){var c\u003dmaybeInvokeDelegate(u,r);if(c){if(c\u003d\u003d\u003dd)continue;return c}}if(\"next\"\u003d\u003d\u003dr.method)r.sent\u003dr._sent\u003dr.arg;else if(\"throw\"\u003d\u003d\u003dr.method){if(e\u003d\u003d\u003dl)throw e\u003dp,r.arg;r.dispatchException(r.arg)}else\"return\"\u003d\u003d\u003dr.method\u0026\u0026r.abrupt(\"return\",r.arg);e\u003dv;var a\u003dtryCatch(t,n,r);if(\"normal\"\u003d\u003d\u003da.type){if(e\u003dr.done?p:h,a.arg\u003d\u003d\u003dd)continue;return{value:a.arg,done:r.done}}\"throw\"\u003d\u003d\u003da.type\u0026\u0026(e\u003dp,r.method\u003d\"throw\",r.arg\u003da.arg)}}}function maybeInvokeDelegate(t,n){var e\u003dt.iterator[n.method];if(e\u003d\u003d\u003dr){if(n.delegate\u003dnull,\"throw\"\u003d\u003d\u003dn.method){if(t.iterator.return\u0026\u0026(n.method\u003d\"return\",n.arg\u003dr,maybeInvokeDelegate(t,n),\"throw\"\u003d\u003d\u003dn.method))return d;n.method\u003d\"throw\",n.arg\u003dnew TypeError(\"The iterator does not provide a \u0027throw\u0027 method\")}return d}var i\u003dtryCatch(e,t.iterator,n.arg);if(\"throw\"\u003d\u003d\u003di.type)return n.method\u003d\"throw\",n.arg\u003di.arg,n.delegate\u003dnull,d;var o\u003di.arg;return o?o.done?(n[t.resultName]\u003do.value,n.next\u003dt.nextLoc,\"return\"!\u003d\u003dn.method\u0026\u0026(n.method\u003d\"next\",n.arg\u003dr),n.delegate\u003dnull,d):o:(n.method\u003d\"throw\",n.arg\u003dnew TypeError(\"iterator result is not an object\"),n.delegate\u003dnull,d)}function pushTryEntry(t){var n\u003d{tryLoc:t[0]};1 in t\u0026\u0026(n.catchLoc\u003dt[1]),2 in t\u0026\u0026(n.finallyLoc\u003dt[2],n.afterLoc\u003dt[3]),this.tryEntries.push(n)}function resetTryEntry(t){var n\u003dt.completion||{};n.type\u003d\"normal\",delete n.arg,t.completion\u003dn}function Context(t){this.tryEntries\u003d[{tryLoc:\"root\"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(t){if(t){var n\u003dt[u];if(n)return n.call(t);if(\"function\"\u003d\u003dtypeof t.next)return t;if(!isNaN(t.length)){var e\u003d-1,o\u003dfunction next(){for(;++e\u003ct.length;)if(i.call(t,e))return next.value\u003dt[e],next.done\u003d!1,next;return next.value\u003dr,next.done\u003d!0,next};return o.next\u003do}}return{next:doneResult}}function doneResult(){return{value:r,done:!0}}var r,e\u003dObject.prototype,i\u003de.hasOwnProperty,o\u003d\"function\"\u003d\u003dtypeof Symbol?Symbol:{},u\u003do.iterator||\"@@iterator\",c\u003do.asyncIterator||\"@@asyncIterator\",a\u003do.toStringTag||\"@@toStringTag\",f\u003d\"object\"\u003d\u003dtypeof n,s\u003dt.regeneratorRuntime;if(s)return void(f\u0026\u0026(n.exports\u003ds));s\u003dt.regeneratorRuntime\u003df?n.exports:{},s.wrap\u003dwrap;var l\u003d\"suspendedStart\",h\u003d\"suspendedYield\",v\u003d\"executing\",p\u003d\"completed\",d\u003d{},y\u003d{};y[u]\u003dfunction(){return this};var g\u003dObject.getPrototypeOf,m\u003dg\u0026\u0026g(g(values([])));m\u0026\u0026m!\u003d\u003de\u0026\u0026i.call(m,u)\u0026\u0026(y\u003dm);var b\u003dGeneratorFunctionPrototype.prototype\u003dGenerator.prototype\u003dObject.create(y);GeneratorFunction.prototype\u003db.constructor\u003dGeneratorFunctionPrototype,GeneratorFunctionPrototype.constructor\u003dGeneratorFunction,GeneratorFunctionPrototype[a]\u003dGeneratorFunction.displayName\u003d\"GeneratorFunction\",s.isGeneratorFunction\u003dfunction(t){var n\u003d\"function\"\u003d\u003dtypeof t\u0026\u0026t.constructor;return!!n\u0026\u0026(n\u003d\u003d\u003dGeneratorFunction||\"GeneratorFunction\"\u003d\u003d\u003d(n.displayName||n.name))},s.mark\u003dfunction(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,GeneratorFunctionPrototype):(t.__proto__\u003dGeneratorFunctionPrototype,a in t||(t[a]\u003d\"GeneratorFunction\")),t.prototype\u003dObject.create(b),t},s.awrap\u003dfunction(t){return{__await:t}},defineIteratorMethods(AsyncIterator.prototype),AsyncIterator.prototype[c]\u003dfunction(){return this},s.AsyncIterator\u003dAsyncIterator,s.async\u003dfunction(t,n,r,e){var i\u003dnew AsyncIterator(wrap(t,n,r,e));return s.isGeneratorFunction(n)?i:i.next().then(function(t){return t.done?t.value:i.next()})},defineIteratorMethods(b),b[a]\u003d\"Generator\",b[u]\u003dfunction(){return this},b.toString\u003dfunction(){return\"[object Generator]\"},s.keys\u003dfunction(t){var n\u003d[];for(var r in t)n.push(r);return n.reverse(),function next(){for(;n.length;){var r\u003dn.pop();if(r in t)return next.value\u003dr,next.done\u003d!1,next}return next.done\u003d!0,next}},s.values\u003dvalues,Context.prototype\u003d{constructor:Context,reset:function(t){if(this.prev\u003d0,this.next\u003d0,this.sent\u003dthis._sent\u003dr,this.done\u003d!1,this.delegate\u003dnull,this.method\u003d\"next\",this.arg\u003dr,this.tryEntries.forEach(resetTryEntry),!t)for(var n in this)\"t\"\u003d\u003d\u003dn.charAt(0)\u0026\u0026i.call(this,n)\u0026\u0026!isNaN(+n.slice(1))\u0026\u0026(this[n]\u003dr)},stop:function(){this.done\u003d!0;var t\u003dthis.tryEntries[0],n\u003dt.completion;if(\"throw\"\u003d\u003d\u003dn.type)throw n.arg;return this.rval},dispatchException:function(t){function handle(e,i){return u.type\u003d\"throw\",u.arg\u003dt,n.next\u003de,i\u0026\u0026(n.method\u003d\"next\",n.arg\u003dr),!!i}if(this.done)throw t;for(var n\u003dthis,e\u003dthis.tryEntries.length-1;e\u003e\u003d0;--e){var o\u003dthis.tryEntries[e],u\u003do.completion;if(\"root\"\u003d\u003d\u003do.tryLoc)return handle(\"end\");if(o.tryLoc\u003c\u003dthis.prev){var c\u003di.call(o,\"catchLoc\"),a\u003di.call(o,\"finallyLoc\");if(c\u0026\u0026a){if(this.prev\u003co.catchLoc)return handle(o.catchLoc,!0);if(this.prev\u003co.finallyLoc)return handle(o.finallyLoc)}else if(c){if(this.prev\u003co.catchLoc)return handle(o.catchLoc,!0)}else{if(!a)throw new Error(\"try statement without catch or finally\");if(this.prev\u003co.finallyLoc)return handle(o.finallyLoc)}}}},abrupt:function(t,n){for(var r\u003dthis.tryEntries.length-1;r\u003e\u003d0;--r){var e\u003dthis.tryEntries[r];if(e.tryLoc\u003c\u003dthis.prev\u0026\u0026i.call(e,\"finallyLoc\")\u0026\u0026this.prev\u003ce.finallyLoc){var o\u003de;break}}o\u0026\u0026(\"break\"\u003d\u003d\u003dt||\"continue\"\u003d\u003d\u003dt)\u0026\u0026o.tryLoc\u003c\u003dn\u0026\u0026n\u003c\u003do.finallyLoc\u0026\u0026(o\u003dnull);var u\u003do?o.completion:{};return u.type\u003dt,u.arg\u003dn,o?(this.method\u003d\"next\",this.next\u003do.finallyLoc,d):this.complete(u)},complete:function(t,n){if(\"throw\"\u003d\u003d\u003dt.type)throw t.arg;return\"break\"\u003d\u003d\u003dt.type||\"continue\"\u003d\u003d\u003dt.type?this.next\u003dt.arg:\"return\"\u003d\u003d\u003dt.type?(this.rval\u003dthis.arg\u003dt.arg,this.method\u003d\"return\",this.next\u003d\"end\"):\"normal\"\u003d\u003d\u003dt.type\u0026\u0026n\u0026\u0026(this.next\u003dn),d},finish:function(t){for(var n\u003dthis.tryEntries.length-1;n\u003e\u003d0;--n){var r\u003dthis.tryEntries[n];if(r.finallyLoc\u003d\u003d\u003dt)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),d}},catch:function(t){for(var n\u003dthis.tryEntries.length-1;n\u003e\u003d0;--n){var r\u003dthis.tryEntries[n];if(r.tryLoc\u003d\u003d\u003dt){var e\u003dr.completion;if(\"throw\"\u003d\u003d\u003de.type){var i\u003de.arg;resetTryEntry(r)}return i}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,n,e){return this.delegate\u003d{iterator:values(t),resultName:n,nextLoc:e},\"next\"\u003d\u003d\u003dthis.method\u0026\u0026(this.arg\u003dr),d}}}(\"object\"\u003d\u003dtypeof t?t:\"object\"\u003d\u003dtypeof window?window:\"object\"\u003d\u003dtypeof self?self:this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{}]},{},[1]);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/js/vue.min.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"/*!"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" * Vue.js v2.6.14"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" * (c) 2014-2021 Evan You"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" * Released under the MIT License."},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"!function(e,t){\"object\"\u003d\u003dtypeof exports\u0026\u0026\"undefined\"!\u003dtypeof module?module.exports\u003dt():\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define(t):(e\u003de||self).Vue\u003dt()}(this,function(){\"use strict\";var e\u003dObject.freeze({});function t(e){return null\u003d\u003de}function n(e){return null!\u003de}function r(e){return!0\u003d\u003d\u003de}function i(e){return\"string\"\u003d\u003dtypeof e||\"number\"\u003d\u003dtypeof e||\"symbol\"\u003d\u003dtypeof e||\"boolean\"\u003d\u003dtypeof e}function o(e){return null!\u003d\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e}var a\u003dObject.prototype.toString;function s(e){return\"[object Object]\"\u003d\u003d\u003da.call(e)}function c(e){var t\u003dparseFloat(String(e));return t\u003e\u003d0\u0026\u0026Math.floor(t)\u003d\u003d\u003dt\u0026\u0026isFinite(e)}function u(e){return n(e)\u0026\u0026\"function\"\u003d\u003dtypeof e.then\u0026\u0026\"function\"\u003d\u003dtypeof e.catch}function l(e){return null\u003d\u003de?\"\":Array.isArray(e)||s(e)\u0026\u0026e.toString\u003d\u003d\u003da?JSON.stringify(e,null,2):String(e)}function f(e){var t\u003dparseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n\u003dObject.create(null),r\u003de.split(\",\"),i\u003d0;i\u003cr.length;i++)n[r[i]]\u003d!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var d\u003dp(\"slot,component\",!0),v\u003dp(\"key,ref,slot,slot-scope,is\");function h(e,t){if(e.length){var n\u003de.indexOf(t);if(n\u003e-1)return e.splice(n,1)}}var m\u003dObject.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t\u003dObject.create(null);return function(n){return t[n]||(t[n]\u003de(n))}}var _\u003d/-(\\w)/g,b\u003dg(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():\"\"})}),$\u003dg(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w\u003d/\\B([A-Z])/g,C\u003dg(function(e){return e.replace(w,\"-$1\").toLowerCase()});var x\u003dFunction.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r\u003darguments.length;return r?r\u003e1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length\u003de.length,n};function k(e,t){t\u003dt||0;for(var n\u003de.length-t,r\u003dnew Array(n);n--;)r[n]\u003de[n+t];return r}function A(e,t){for(var n in t)e[n]\u003dt[n];return e}function O(e){for(var t\u003d{},n\u003d0;n\u003ce.length;n++)e[n]\u0026\u0026A(t,e[n]);return t}function S(e,t,n){}var T\u003dfunction(e,t,n){return!1},N\u003dfunction(e){return e};function E(e,t){if(e\u003d\u003d\u003dt)return!0;var n\u003do(e),r\u003do(t);if(!n||!r)return!n\u0026\u0026!r\u0026\u0026String(e)\u003d\u003d\u003dString(t);try{var i\u003dArray.isArray(e),a\u003dArray.isArray(t);if(i\u0026\u0026a)return e.length\u003d\u003d\u003dt.length\u0026\u0026e.every(function(e,n){return E(e,t[n])});if(e instanceof Date\u0026\u0026t instanceof Date)return e.getTime()\u003d\u003d\u003dt.getTime();if(i||a)return!1;var s\u003dObject.keys(e),c\u003dObject.keys(t);return s.length\u003d\u003d\u003dc.length\u0026\u0026s.every(function(n){return E(e[n],t[n])})}catch(e){return!1}}function j(e,t){for(var n\u003d0;n\u003ce.length;n++)if(E(e[n],t))return n;return-1}function D(e){var t\u003d!1;return function(){t||(t\u003d!0,e.apply(this,arguments))}}var L\u003d\"data-server-rendered\",I\u003d[\"component\",\"directive\",\"filter\"],M\u003d[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\",\"errorCaptured\",\"serverPrefetch\"],F\u003d{optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:T,isReservedAttr:T,isUnknownElement:T,getTagNamespace:S,parsePlatformTagName:N,mustUseProp:T,async:!0,_lifecycleHooks:M},P\u003d/a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;function R(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var H\u003dnew RegExp(\"[^\"+P.source+\".$_\\\\d]\");var B,U\u003d\"__proto__\"in{},V\u003d\"undefined\"!\u003dtypeof window,z\u003d\"undefined\"!\u003dtypeof WXEnvironment\u0026\u0026!!WXEnvironment.platform,K\u003dz\u0026\u0026WXEnvironment.platform.toLowerCase(),J\u003dV\u0026\u0026window.navigator.userAgent.toLowerCase(),q\u003dJ\u0026\u0026/msie|trident/.test(J),W\u003dJ\u0026\u0026J.indexOf(\"msie 9.0\")\u003e0,Z\u003dJ\u0026\u0026J.indexOf(\"edge/\")\u003e0,G\u003d(J\u0026\u0026J.indexOf(\"android\"),J\u0026\u0026/iphone|ipad|ipod|ios/.test(J)||\"ios\"\u003d\u003d\u003dK),X\u003d(J\u0026\u0026/chrome\\/\\d+/.test(J),J\u0026\u0026/phantomjs/.test(J),J\u0026\u0026J.match(/firefox\\/(\\d+)/)),Y\u003d{}.watch,Q\u003d!1;if(V)try{var ee\u003d{};Object.defineProperty(ee,\"passive\",{get:function(){Q\u003d!0}}),window.addEventListener(\"test-passive\",null,ee)}catch(e){}var te\u003dfunction(){return void 0\u003d\u003d\u003dB\u0026\u0026(B\u003d!V\u0026\u0026!z\u0026\u0026\"undefined\"!\u003dtypeof global\u0026\u0026(global.process\u0026\u0026\"server\"\u003d\u003d\u003dglobal.process.env.VUE_ENV)),B},ne\u003dV\u0026\u0026window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return\"function\"\u003d\u003dtypeof e\u0026\u0026/native code/.test(e.toString())}var ie,oe\u003d\"undefined\"!\u003dtypeof Symbol\u0026\u0026re(Symbol)\u0026\u0026\"undefined\"!\u003dtypeof Reflect\u0026\u0026re(Reflect.ownKeys);ie\u003d\"undefined\"!\u003dtypeof Set\u0026\u0026re(Set)?Set:function(){function e(){this.set\u003dObject.create(null)}return e.prototype.has\u003dfunction(e){return!0\u003d\u003d\u003dthis.set[e]},e.prototype.add\u003dfunction(e){this.set[e]\u003d!0},e.prototype.clear\u003dfunction(){this.set\u003dObject.create(null)},e}();var ae\u003dS,se\u003d0,ce\u003dfunction(){this.id\u003dse++,this.subs\u003d[]};ce.prototype.addSub\u003dfunction(e){this.subs.push(e)},ce.prototype.removeSub\u003dfunction(e){h(this.subs,e)},ce.prototype.depend\u003dfunction(){ce.target\u0026\u0026ce.target.addDep(this)},ce.prototype.notify\u003dfunction(){for(var e\u003dthis.subs.slice(),t\u003d0,n\u003de.length;t\u003cn;t++)e[t].update()},ce.target\u003dnull;var ue\u003d[];function le(e){ue.push(e),ce.target\u003de}function fe(){ue.pop(),ce.target\u003due[ue.length-1]}var pe\u003dfunction(e,t,n,r,i,o,a,s){this.tag\u003de,this.data\u003dt,this.children\u003dn,this.text\u003dr,this.elm\u003di,this.ns\u003dvoid 0,this.context\u003do,this.fnContext\u003dvoid 0,this.fnOptions\u003dvoid 0,this.fnScopeId\u003dvoid 0,this.key\u003dt\u0026\u0026t.key,this.componentOptions\u003da,this.componentInstance\u003dvoid 0,this.parent\u003dvoid 0,this.raw\u003d!1,this.isStatic\u003d!1,this.isRootInsert\u003d!0,this.isComment\u003d!1,this.isCloned\u003d!1,this.isOnce\u003d!1,this.asyncFactory\u003ds,this.asyncMeta\u003dvoid 0,this.isAsyncPlaceholder\u003d!1},de\u003d{child:{configurable:!0}};de.child.get\u003dfunction(){return this.componentInstance},Object.defineProperties(pe.prototype,de);var ve\u003dfunction(e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"\");var t\u003dnew pe;return t.text\u003de,t.isComment\u003d!0,t};function he(e){return new pe(void 0,void 0,void 0,String(e))}function me(e){var t\u003dnew pe(e.tag,e.data,e.children\u0026\u0026e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns\u003de.ns,t.isStatic\u003de.isStatic,t.key\u003de.key,t.isComment\u003de.isComment,t.fnContext\u003de.fnContext,t.fnOptions\u003de.fnOptions,t.fnScopeId\u003de.fnScopeId,t.asyncMeta\u003de.asyncMeta,t.isCloned\u003d!0,t}var ye\u003dArray.prototype,ge\u003dObject.create(ye);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach(function(e){var t\u003dye[e];R(ge,e,function(){for(var n\u003d[],r\u003darguments.length;r--;)n[r]\u003darguments[r];var i,o\u003dt.apply(this,n),a\u003dthis.__ob__;switch(e){case\"push\":case\"unshift\":i\u003dn;break;case\"splice\":i\u003dn.slice(2)}return i\u0026\u0026a.observeArray(i),a.dep.notify(),o})});var _e\u003dObject.getOwnPropertyNames(ge),be\u003d!0;function $e(e){be\u003de}var we\u003dfunction(e){var t;this.value\u003de,this.dep\u003dnew ce,this.vmCount\u003d0,R(e,\"__ob__\",this),Array.isArray(e)?(U?(t\u003dge,e.__proto__\u003dt):function(e,t,n){for(var r\u003d0,i\u003dn.length;r\u003ci;r++){var o\u003dn[r];R(e,o,t[o])}}(e,ge,_e),this.observeArray(e)):this.walk(e)};function Ce(e,t){var n;if(o(e)\u0026\u0026!(e instanceof pe))return y(e,\"__ob__\")\u0026\u0026e.__ob__ instanceof we?n\u003de.__ob__:be\u0026\u0026!te()\u0026\u0026(Array.isArray(e)||s(e))\u0026\u0026Object.isExtensible(e)\u0026\u0026!e._isVue\u0026\u0026(n\u003dnew we(e)),t\u0026\u0026n\u0026\u0026n.vmCount++,n}function xe(e,t,n,r,i){var o\u003dnew ce,a\u003dObject.getOwnPropertyDescriptor(e,t);if(!a||!1!\u003d\u003da.configurable){var s\u003da\u0026\u0026a.get,c\u003da\u0026\u0026a.set;s\u0026\u0026!c||2!\u003d\u003darguments.length||(n\u003de[t]);var u\u003d!i\u0026\u0026Ce(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t\u003ds?s.call(e):n;return ce.target\u0026\u0026(o.depend(),u\u0026\u0026(u.dep.depend(),Array.isArray(t)\u0026\u0026function e(t){for(var n\u003dvoid 0,r\u003d0,i\u003dt.length;r\u003ci;r++)(n\u003dt[r])\u0026\u0026n.__ob__\u0026\u0026n.__ob__.dep.depend(),Array.isArray(n)\u0026\u0026e(n)}(t))),t},set:function(t){var r\u003ds?s.call(e):n;t\u003d\u003d\u003dr||t!\u003dt\u0026\u0026r!\u003dr||s\u0026\u0026!c||(c?c.call(e,t):n\u003dt,u\u003d!i\u0026\u0026Ce(t),o.notify())}})}}function ke(e,t,n){if(Array.isArray(e)\u0026\u0026c(t))return e.length\u003dMath.max(e.length,t),e.splice(t,1,n),n;if(t in e\u0026\u0026!(t in Object.prototype))return e[t]\u003dn,n;var r\u003de.__ob__;return e._isVue||r\u0026\u0026r.vmCount?n:r?(xe(r.value,t,n),r.dep.notify(),n):(e[t]\u003dn,n)}function Ae(e,t){if(Array.isArray(e)\u0026\u0026c(t))e.splice(t,1);else{var n\u003de.__ob__;e._isVue||n\u0026\u0026n.vmCount||y(e,t)\u0026\u0026(delete e[t],n\u0026\u0026n.dep.notify())}}we.prototype.walk\u003dfunction(e){for(var t\u003dObject.keys(e),n\u003d0;n\u003ct.length;n++)xe(e,t[n])},we.prototype.observeArray\u003dfunction(e){for(var t\u003d0,n\u003de.length;t\u003cn;t++)Ce(e[t])};var Oe\u003dF.optionMergeStrategies;function Se(e,t){if(!t)return e;for(var n,r,i,o\u003doe?Reflect.ownKeys(t):Object.keys(t),a\u003d0;a\u003co.length;a++)\"__ob__\"!\u003d\u003d(n\u003do[a])\u0026\u0026(r\u003de[n],i\u003dt[n],y(e,n)?r!\u003d\u003di\u0026\u0026s(r)\u0026\u0026s(i)\u0026\u0026Se(r,i):ke(e,n,i));return e}function Te(e,t,n){return n?function(){var r\u003d\"function\"\u003d\u003dtypeof t?t.call(n,n):t,i\u003d\"function\"\u003d\u003dtypeof e?e.call(n,n):e;return r?Se(r,i):i}:t?e?function(){return Se(\"function\"\u003d\u003dtypeof t?t.call(this,this):t,\"function\"\u003d\u003dtypeof e?e.call(this,this):e)}:t:e}function Ne(e,t){var n\u003dt?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n?function(e){for(var t\u003d[],n\u003d0;n\u003ce.length;n++)-1\u003d\u003d\u003dt.indexOf(e[n])\u0026\u0026t.push(e[n]);return t}(n):n}function Ee(e,t,n,r){var i\u003dObject.create(e||null);return t?A(i,t):i}Oe.data\u003dfunction(e,t,n){return n?Te(e,t,n):t\u0026\u0026\"function\"!\u003dtypeof t?e:Te(e,t)},M.forEach(function(e){Oe[e]\u003dNe}),I.forEach(function(e){Oe[e+\"s\"]\u003dEe}),Oe.watch\u003dfunction(e,t,n,r){if(e\u003d\u003d\u003dY\u0026\u0026(e\u003dvoid 0),t\u003d\u003d\u003dY\u0026\u0026(t\u003dvoid 0),!t)return Object.create(e||null);if(!e)return t;var i\u003d{};for(var o in A(i,e),t){var a\u003di[o],s\u003dt[o];a\u0026\u0026!Array.isArray(a)\u0026\u0026(a\u003d[a]),i[o]\u003da?a.concat(s):Array.isArray(s)?s:[s]}return i},Oe.props\u003dOe.methods\u003dOe.inject\u003dOe.computed\u003dfunction(e,t,n,r){if(!e)return t;var i\u003dObject.create(null);return A(i,e),t\u0026\u0026A(i,t),i},Oe.provide\u003dTe;var je\u003dfunction(e,t){return void 0\u003d\u003d\u003dt?e:t};function De(e,t,n){if(\"function\"\u003d\u003dtypeof t\u0026\u0026(t\u003dt.options),function(e,t){var n\u003de.props;if(n){var r,i,o\u003d{};if(Array.isArray(n))for(r\u003dn.length;r--;)\"string\"\u003d\u003dtypeof(i\u003dn[r])\u0026\u0026(o[b(i)]\u003d{type:null});else if(s(n))for(var a in n)i\u003dn[a],o[b(a)]\u003ds(i)?i:{type:i};e.props\u003do}}(t),function(e,t){var n\u003de.inject;if(n){var r\u003de.inject\u003d{};if(Array.isArray(n))for(var i\u003d0;i\u003cn.length;i++)r[n[i]]\u003d{from:n[i]};else if(s(n))for(var o in n){var a\u003dn[o];r[o]\u003ds(a)?A({from:o},a):{from:a}}}}(t),function(e){var t\u003de.directives;if(t)for(var n in t){var r\u003dt[n];\"function\"\u003d\u003dtypeof r\u0026\u0026(t[n]\u003d{bind:r,update:r})}}(t),!t._base\u0026\u0026(t.extends\u0026\u0026(e\u003dDe(e,t.extends,n)),t.mixins))for(var r\u003d0,i\u003dt.mixins.length;r\u003ci;r++)e\u003dDe(e,t.mixins[r],n);var o,a\u003d{};for(o in e)c(o);for(o in t)y(e,o)||c(o);function c(r){var i\u003dOe[r]||je;a[r]\u003di(e[r],t[r],n,r)}return a}function Le(e,t,n,r){if(\"string\"\u003d\u003dtypeof n){var i\u003de[t];if(y(i,n))return i[n];var o\u003db(n);if(y(i,o))return i[o];var a\u003d$(o);return y(i,a)?i[a]:i[n]||i[o]||i[a]}}function Ie(e,t,n,r){var i\u003dt[e],o\u003d!y(n,e),a\u003dn[e],s\u003dRe(Boolean,i.type);if(s\u003e-1)if(o\u0026\u0026!y(i,\"default\"))a\u003d!1;else if(\"\"\u003d\u003d\u003da||a\u003d\u003d\u003dC(e)){var c\u003dRe(String,i.type);(c\u003c0||s\u003cc)\u0026\u0026(a\u003d!0)}if(void 0\u003d\u003d\u003da){a\u003dfunction(e,t,n){if(!y(t,\"default\"))return;var r\u003dt.default;if(e\u0026\u0026e.$options.propsData\u0026\u0026void 0\u003d\u003d\u003de.$options.propsData[n]\u0026\u0026void 0!\u003d\u003de._props[n])return e._props[n];return\"function\"\u003d\u003dtypeof r\u0026\u0026\"Function\"!\u003d\u003dFe(t.type)?r.call(e):r}(r,i,e);var u\u003dbe;$e(!0),Ce(a),$e(u)}return a}var Me\u003d/^\\s*function (\\w+)/;function Fe(e){var t\u003de\u0026\u0026e.toString().match(Me);return t?t[1]:\"\"}function Pe(e,t){return Fe(e)\u003d\u003d\u003dFe(t)}function Re(e,t){if(!Array.isArray(t))return Pe(t,e)?0:-1;for(var n\u003d0,r\u003dt.length;n\u003cr;n++)if(Pe(t[n],e))return n;return-1}function He(e,t,n){le();try{if(t)for(var r\u003dt;r\u003dr.$parent;){var i\u003dr.$options.errorCaptured;if(i)for(var o\u003d0;o\u003ci.length;o++)try{if(!1\u003d\u003d\u003di[o].call(r,e,t,n))return}catch(e){Ue(e,r,\"errorCaptured hook\")}}Ue(e,t,n)}finally{fe()}}function Be(e,t,n,r,i){var o;try{(o\u003dn?e.apply(t,n):e.call(t))\u0026\u0026!o._isVue\u0026\u0026u(o)\u0026\u0026!o._handled\u0026\u0026(o.catch(function(e){return He(e,r,i+\" (Promise/async)\")}),o._handled\u003d!0)}catch(e){He(e,r,i)}return o}function Ue(e,t,n){if(F.errorHandler)try{return F.errorHandler.call(null,e,t,n)}catch(t){t!\u003d\u003de\u0026\u0026Ve(t,null,\"config.errorHandler\")}Ve(e,t,n)}function Ve(e,t,n){if(!V\u0026\u0026!z||\"undefined\"\u003d\u003dtypeof console)throw e;console.error(e)}var ze,Ke\u003d!1,Je\u003d[],qe\u003d!1;function We(){qe\u003d!1;var e\u003dJe.slice(0);Je.length\u003d0;for(var t\u003d0;t\u003ce.length;t++)e[t]()}if(\"undefined\"!\u003dtypeof Promise\u0026\u0026re(Promise)){var Ze\u003dPromise.resolve();ze\u003dfunction(){Ze.then(We),G\u0026\u0026setTimeout(S)},Ke\u003d!0}else if(q||\"undefined\"\u003d\u003dtypeof MutationObserver||!re(MutationObserver)\u0026\u0026\"[object MutationObserverConstructor]\"!\u003d\u003dMutationObserver.toString())ze\u003d\"undefined\"!\u003dtypeof setImmediate\u0026\u0026re(setImmediate)?function(){setImmediate(We)}:function(){setTimeout(We,0)};else{var Ge\u003d1,Xe\u003dnew MutationObserver(We),Ye\u003ddocument.createTextNode(String(Ge));Xe.observe(Ye,{characterData:!0}),ze\u003dfunction(){Ge\u003d(Ge+1)%2,Ye.data\u003dString(Ge)},Ke\u003d!0}function Qe(e,t){var n;if(Je.push(function(){if(e)try{e.call(t)}catch(e){He(e,t,\"nextTick\")}else n\u0026\u0026n(t)}),qe||(qe\u003d!0,ze()),!e\u0026\u0026\"undefined\"!\u003dtypeof Promise)return new Promise(function(e){n\u003de})}var et\u003dnew ie;function tt(e){!function e(t,n){var r,i;var a\u003dArray.isArray(t);if(!a\u0026\u0026!o(t)||Object.isFrozen(t)||t instanceof pe)return;if(t.__ob__){var s\u003dt.__ob__.dep.id;if(n.has(s))return;n.add(s)}if(a)for(r\u003dt.length;r--;)e(t[r],n);else for(i\u003dObject.keys(t),r\u003di.length;r--;)e(t[i[r]],n)}(e,et),et.clear()}var nt\u003dg(function(e){var t\u003d\"\u0026\"\u003d\u003d\u003de.charAt(0),n\u003d\"~\"\u003d\u003d\u003d(e\u003dt?e.slice(1):e).charAt(0),r\u003d\"!\"\u003d\u003d\u003d(e\u003dn?e.slice(1):e).charAt(0);return{name:e\u003dr?e.slice(1):e,once:n,capture:r,passive:t}});function rt(e,t){function n(){var e\u003darguments,r\u003dn.fns;if(!Array.isArray(r))return Be(r,null,arguments,t,\"v-on handler\");for(var i\u003dr.slice(),o\u003d0;o\u003ci.length;o++)Be(i[o],null,e,t,\"v-on handler\")}return n.fns\u003de,n}function it(e,n,i,o,a,s){var c,u,l,f;for(c in e)u\u003de[c],l\u003dn[c],f\u003dnt(c),t(u)||(t(l)?(t(u.fns)\u0026\u0026(u\u003de[c]\u003drt(u,s)),r(f.once)\u0026\u0026(u\u003de[c]\u003da(f.name,u,f.capture)),i(f.name,u,f.capture,f.passive,f.params)):u!\u003d\u003dl\u0026\u0026(l.fns\u003du,e[c]\u003dl));for(c in n)t(e[c])\u0026\u0026o((f\u003dnt(c)).name,n[c],f.capture)}function ot(e,i,o){var a;e instanceof pe\u0026\u0026(e\u003de.data.hook||(e.data.hook\u003d{}));var s\u003de[i];function c(){o.apply(this,arguments),h(a.fns,c)}t(s)?a\u003drt([c]):n(s.fns)\u0026\u0026r(s.merged)?(a\u003ds).fns.push(c):a\u003drt([s,c]),a.merged\u003d!0,e[i]\u003da}function at(e,t,r,i,o){if(n(t)){if(y(t,r))return e[r]\u003dt[r],o||delete t[r],!0;if(y(t,i))return e[r]\u003dt[i],o||delete t[i],!0}return!1}function st(e){return i(e)?[he(e)]:Array.isArray(e)?function e(o,a){var s\u003d[];var c,u,l,f;for(c\u003d0;c\u003co.length;c++)t(u\u003do[c])||\"boolean\"\u003d\u003dtypeof u||(l\u003ds.length-1,f\u003ds[l],Array.isArray(u)?u.length\u003e0\u0026\u0026(ct((u\u003de(u,(a||\"\")+\"_\"+c))[0])\u0026\u0026ct(f)\u0026\u0026(s[l]\u003dhe(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?ct(f)?s[l]\u003dhe(f.text+u):\"\"!\u003d\u003du\u0026\u0026s.push(he(u)):ct(u)\u0026\u0026ct(f)?s[l]\u003dhe(f.text+u.text):(r(o._isVList)\u0026\u0026n(u.tag)\u0026\u0026t(u.key)\u0026\u0026n(a)\u0026\u0026(u.key\u003d\"__vlist\"+a+\"_\"+c+\"__\"),s.push(u)));return s}(e):void 0}function ct(e){return n(e)\u0026\u0026n(e.text)\u0026\u0026!1\u003d\u003d\u003de.isComment}function ut(e,t){if(e){for(var n\u003dObject.create(null),r\u003doe?Reflect.ownKeys(e):Object.keys(e),i\u003d0;i\u003cr.length;i++){var o\u003dr[i];if(\"__ob__\"!\u003d\u003do){for(var a\u003de[o].from,s\u003dt;s;){if(s._provided\u0026\u0026y(s._provided,a)){n[o]\u003ds._provided[a];break}s\u003ds.$parent}if(!s\u0026\u0026\"default\"in e[o]){var c\u003de[o].default;n[o]\u003d\"function\"\u003d\u003dtypeof c?c.call(t):c}}}return n}}function lt(e,t){if(!e||!e.length)return{};for(var n\u003d{},r\u003d0,i\u003de.length;r\u003ci;r++){var o\u003de[r],a\u003do.data;if(a\u0026\u0026a.attrs\u0026\u0026a.attrs.slot\u0026\u0026delete a.attrs.slot,o.context!\u003d\u003dt\u0026\u0026o.fnContext!\u003d\u003dt||!a||null\u003d\u003da.slot)(n.default||(n.default\u003d[])).push(o);else{var s\u003da.slot,c\u003dn[s]||(n[s]\u003d[]);\"template\"\u003d\u003d\u003do.tag?c.push.apply(c,o.children||[]):c.push(o)}}for(var u in n)n[u].every(ft)\u0026\u0026delete n[u];return n}function ft(e){return e.isComment\u0026\u0026!e.asyncFactory||\" \"\u003d\u003d\u003de.text}function pt(e){return e.isComment\u0026\u0026e.asyncFactory}function dt(t,n,r){var i,o\u003dObject.keys(n).length\u003e0,a\u003dt?!!t.$stable:!o,s\u003dt\u0026\u0026t.$key;if(t){if(t._normalized)return t._normalized;if(a\u0026\u0026r\u0026\u0026r!\u003d\u003de\u0026\u0026s\u003d\u003d\u003dr.$key\u0026\u0026!o\u0026\u0026!r.$hasNormal)return r;for(var c in i\u003d{},t)t[c]\u0026\u0026\"$\"!\u003d\u003dc[0]\u0026\u0026(i[c]\u003dvt(n,c,t[c]))}else i\u003d{};for(var u in n)u in i||(i[u]\u003dht(n,u));return t\u0026\u0026Object.isExtensible(t)\u0026\u0026(t._normalized\u003di),R(i,\"$stable\",a),R(i,\"$key\",s),R(i,\"$hasNormal\",o),i}function vt(e,t,n){var r\u003dfunction(){var e\u003darguments.length?n.apply(null,arguments):n({}),t\u003d(e\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e\u0026\u0026!Array.isArray(e)?[e]:st(e))\u0026\u0026e[0];return e\u0026\u0026(!t||1\u003d\u003d\u003de.length\u0026\u0026t.isComment\u0026\u0026!pt(t))?void 0:e};return n.proxy\u0026\u0026Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function ht(e,t){return function(){return e[t]}}function mt(e,t){var r,i,a,s,c;if(Array.isArray(e)||\"string\"\u003d\u003dtypeof e)for(r\u003dnew Array(e.length),i\u003d0,a\u003de.length;i\u003ca;i++)r[i]\u003dt(e[i],i);else if(\"number\"\u003d\u003dtypeof e)for(r\u003dnew Array(e),i\u003d0;i\u003ce;i++)r[i]\u003dt(i+1,i);else if(o(e))if(oe\u0026\u0026e[Symbol.iterator]){r\u003d[];for(var u\u003de[Symbol.iterator](),l\u003du.next();!l.done;)r.push(t(l.value,r.length)),l\u003du.next()}else for(s\u003dObject.keys(e),r\u003dnew Array(s.length),i\u003d0,a\u003ds.length;i\u003ca;i++)c\u003ds[i],r[i]\u003dt(e[c],c,i);return n(r)||(r\u003d[]),r._isVList\u003d!0,r}function yt(e,t,n,r){var i,o\u003dthis.$scopedSlots[e];o?(n\u003dn||{},r\u0026\u0026(n\u003dA(A({},r),n)),i\u003do(n)||(\"function\"\u003d\u003dtypeof t?t():t)):i\u003dthis.$slots[e]||(\"function\"\u003d\u003dtypeof t?t():t);var a\u003dn\u0026\u0026n.slot;return a?this.$createElement(\"template\",{slot:a},i):i}function gt(e){return Le(this.$options,\"filters\",e)||N}function _t(e,t){return Array.isArray(e)?-1\u003d\u003d\u003de.indexOf(t):e!\u003d\u003dt}function bt(e,t,n,r,i){var o\u003dF.keyCodes[t]||n;return i\u0026\u0026r\u0026\u0026!F.keyCodes[t]?_t(i,r):o?_t(o,e):r?C(r)!\u003d\u003dt:void 0\u003d\u003d\u003de}function $t(e,t,n,r,i){if(n)if(o(n)){var a;Array.isArray(n)\u0026\u0026(n\u003dO(n));var s\u003dfunction(o){if(\"class\"\u003d\u003d\u003do||\"style\"\u003d\u003d\u003do||v(o))a\u003de;else{var s\u003de.attrs\u0026\u0026e.attrs.type;a\u003dr||F.mustUseProp(t,s,o)?e.domProps||(e.domProps\u003d{}):e.attrs||(e.attrs\u003d{})}var c\u003db(o),u\u003dC(o);c in a||u in a||(a[o]\u003dn[o],i\u0026\u0026((e.on||(e.on\u003d{}))[\"update:\"+o]\u003dfunction(e){n[o]\u003de}))};for(var c in n)s(c)}else;return e}function wt(e,t){var n\u003dthis._staticTrees||(this._staticTrees\u003d[]),r\u003dn[e];return r\u0026\u0026!t?r:(xt(r\u003dn[e]\u003dthis.$options.staticRenderFns[e].call(this._renderProxy,null,this),\"__static__\"+e,!1),r)}function Ct(e,t,n){return xt(e,\"__once__\"+t+(n?\"_\"+n:\"\"),!0),e}function xt(e,t,n){if(Array.isArray(e))for(var r\u003d0;r\u003ce.length;r++)e[r]\u0026\u0026\"string\"!\u003dtypeof e[r]\u0026\u0026kt(e[r],t+\"_\"+r,n);else kt(e,t,n)}function kt(e,t,n){e.isStatic\u003d!0,e.key\u003dt,e.isOnce\u003dn}function At(e,t){if(t)if(s(t)){var n\u003de.on\u003de.on?A({},e.on):{};for(var r in t){var i\u003dn[r],o\u003dt[r];n[r]\u003di?[].concat(i,o):o}}else;return e}function Ot(e,t,n,r){t\u003dt||{$stable:!n};for(var i\u003d0;i\u003ce.length;i++){var o\u003de[i];Array.isArray(o)?Ot(o,t,n):o\u0026\u0026(o.proxy\u0026\u0026(o.fn.proxy\u003d!0),t[o.key]\u003do.fn)}return r\u0026\u0026(t.$key\u003dr),t}function St(e,t){for(var n\u003d0;n\u003ct.length;n+\u003d2){var r\u003dt[n];\"string\"\u003d\u003dtypeof r\u0026\u0026r\u0026\u0026(e[t[n]]\u003dt[n+1])}return e}function Tt(e,t){return\"string\"\u003d\u003dtypeof e?t+e:e}function Nt(e){e._o\u003dCt,e._n\u003df,e._s\u003dl,e._l\u003dmt,e._t\u003dyt,e._q\u003dE,e._i\u003dj,e._m\u003dwt,e._f\u003dgt,e._k\u003dbt,e._b\u003d$t,e._v\u003dhe,e._e\u003dve,e._u\u003dOt,e._g\u003dAt,e._d\u003dSt,e._p\u003dTt}function Et(t,n,i,o,a){var s,c\u003dthis,u\u003da.options;y(o,\"_uid\")?(s\u003dObject.create(o))._original\u003do:(s\u003do,o\u003do._original);var l\u003dr(u._compiled),f\u003d!l;this.data\u003dt,this.props\u003dn,this.children\u003di,this.parent\u003do,this.listeners\u003dt.on||e,this.injections\u003dut(u.inject,o),this.slots\u003dfunction(){return c.$slots||dt(t.scopedSlots,c.$slots\u003dlt(i,o)),c.$slots},Object.defineProperty(this,\"scopedSlots\",{enumerable:!0,get:function(){return dt(t.scopedSlots,this.slots())}}),l\u0026\u0026(this.$options\u003du,this.$slots\u003dthis.slots(),this.$scopedSlots\u003ddt(t.scopedSlots,this.$slots)),u._scopeId?this._c\u003dfunction(e,t,n,r){var i\u003dHt(s,e,t,n,r,f);return i\u0026\u0026!Array.isArray(i)\u0026\u0026(i.fnScopeId\u003du._scopeId,i.fnContext\u003do),i}:this._c\u003dfunction(e,t,n,r){return Ht(s,e,t,n,r,f)}}function jt(e,t,n,r,i){var o\u003dme(e);return o.fnContext\u003dn,o.fnOptions\u003dr,t.slot\u0026\u0026((o.data||(o.data\u003d{})).slot\u003dt.slot),o}function Dt(e,t){for(var n in t)e[b(n)]\u003dt[n]}Nt(Et.prototype);var Lt\u003d{init:function(e,t){if(e.componentInstance\u0026\u0026!e.componentInstance._isDestroyed\u0026\u0026e.data.keepAlive){var r\u003de;Lt.prepatch(r,r)}else{(e.componentInstance\u003dfunction(e,t){var r\u003d{_isComponent:!0,_parentVnode:e,parent:t},i\u003de.data.inlineTemplate;n(i)\u0026\u0026(r.render\u003di.render,r.staticRenderFns\u003di.staticRenderFns);return new e.componentOptions.Ctor(r)}(e,Zt)).$mount(t?e.elm:void 0,t)}},prepatch:function(t,n){var r\u003dn.componentOptions;!function(t,n,r,i,o){var a\u003di.data.scopedSlots,s\u003dt.$scopedSlots,c\u003d!!(a\u0026\u0026!a.$stable||s!\u003d\u003de\u0026\u0026!s.$stable||a\u0026\u0026t.$scopedSlots.$key!\u003d\u003da.$key||!a\u0026\u0026t.$scopedSlots.$key),u\u003d!!(o||t.$options._renderChildren||c);t.$options._parentVnode\u003di,t.$vnode\u003di,t._vnode\u0026\u0026(t._vnode.parent\u003di);if(t.$options._renderChildren\u003do,t.$attrs\u003di.data.attrs||e,t.$listeners\u003dr||e,n\u0026\u0026t.$options.props){$e(!1);for(var l\u003dt._props,f\u003dt.$options._propKeys||[],p\u003d0;p\u003cf.length;p++){var d\u003df[p],v\u003dt.$options.props;l[d]\u003dIe(d,v,n,t)}$e(!0),t.$options.propsData\u003dn}r\u003dr||e;var h\u003dt.$options._parentListeners;t.$options._parentListeners\u003dr,Wt(t,r,h),u\u0026\u0026(t.$slots\u003dlt(o,i.context),t.$forceUpdate())}(n.componentInstance\u003dt.componentInstance,r.propsData,r.listeners,n,r.children)},insert:function(e){var t,n\u003de.context,r\u003de.componentInstance;r._isMounted||(r._isMounted\u003d!0,Qt(r,\"mounted\")),e.data.keepAlive\u0026\u0026(n._isMounted?((t\u003dr)._inactive\u003d!1,tn.push(t)):Yt(r,!0))},destroy:function(e){var t\u003de.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(n\u0026\u0026(t._directInactive\u003d!0,Xt(t)))return;if(!t._inactive){t._inactive\u003d!0;for(var r\u003d0;r\u003ct.$children.length;r++)e(t.$children[r]);Qt(t,\"deactivated\")}}(t,!0):t.$destroy())}},It\u003dObject.keys(Lt);function Mt(i,a,s,c,l){if(!t(i)){var f\u003ds.$options._base;if(o(i)\u0026\u0026(i\u003df.extend(i)),\"function\"\u003d\u003dtypeof i){var p;if(t(i.cid)\u0026\u0026void 0\u003d\u003d\u003d(i\u003dfunction(e,i){if(r(e.error)\u0026\u0026n(e.errorComp))return e.errorComp;if(n(e.resolved))return e.resolved;var a\u003dUt;a\u0026\u0026n(e.owners)\u0026\u0026-1\u003d\u003d\u003de.owners.indexOf(a)\u0026\u0026e.owners.push(a);if(r(e.loading)\u0026\u0026n(e.loadingComp))return e.loadingComp;if(a\u0026\u0026!n(e.owners)){var s\u003de.owners\u003d[a],c\u003d!0,l\u003dnull,f\u003dnull;a.$on(\"hook:destroyed\",function(){return h(s,a)});var p\u003dfunction(e){for(var t\u003d0,n\u003ds.length;t\u003cn;t++)s[t].$forceUpdate();e\u0026\u0026(s.length\u003d0,null!\u003d\u003dl\u0026\u0026(clearTimeout(l),l\u003dnull),null!\u003d\u003df\u0026\u0026(clearTimeout(f),f\u003dnull))},d\u003dD(function(t){e.resolved\u003dVt(t,i),c?s.length\u003d0:p(!0)}),v\u003dD(function(t){n(e.errorComp)\u0026\u0026(e.error\u003d!0,p(!0))}),m\u003de(d,v);return o(m)\u0026\u0026(u(m)?t(e.resolved)\u0026\u0026m.then(d,v):u(m.component)\u0026\u0026(m.component.then(d,v),n(m.error)\u0026\u0026(e.errorComp\u003dVt(m.error,i)),n(m.loading)\u0026\u0026(e.loadingComp\u003dVt(m.loading,i),0\u003d\u003d\u003dm.delay?e.loading\u003d!0:l\u003dsetTimeout(function(){l\u003dnull,t(e.resolved)\u0026\u0026t(e.error)\u0026\u0026(e.loading\u003d!0,p(!1))},m.delay||200)),n(m.timeout)\u0026\u0026(f\u003dsetTimeout(function(){f\u003dnull,t(e.resolved)\u0026\u0026v(null)},m.timeout)))),c\u003d!1,e.loading?e.loadingComp:e.resolved}}(p\u003di,f)))return function(e,t,n,r,i){var o\u003dve();return o.asyncFactory\u003de,o.asyncMeta\u003d{data:t,context:n,children:r,tag:i},o}(p,a,s,c,l);a\u003da||{},wn(i),n(a.model)\u0026\u0026function(e,t){var r\u003de.model\u0026\u0026e.model.prop||\"value\",i\u003de.model\u0026\u0026e.model.event||\"input\";(t.attrs||(t.attrs\u003d{}))[r]\u003dt.model.value;var o\u003dt.on||(t.on\u003d{}),a\u003do[i],s\u003dt.model.callback;n(a)?(Array.isArray(a)?-1\u003d\u003d\u003da.indexOf(s):a!\u003d\u003ds)\u0026\u0026(o[i]\u003d[s].concat(a)):o[i]\u003ds}(i.options,a);var d\u003dfunction(e,r,i){var o\u003dr.options.props;if(!t(o)){var a\u003d{},s\u003de.attrs,c\u003de.props;if(n(s)||n(c))for(var u in o){var l\u003dC(u);at(a,c,u,l,!0)||at(a,s,u,l,!1)}return a}}(a,i);if(r(i.options.functional))return function(t,r,i,o,a){var s\u003dt.options,c\u003d{},u\u003ds.props;if(n(u))for(var l in u)c[l]\u003dIe(l,u,r||e);else n(i.attrs)\u0026\u0026Dt(c,i.attrs),n(i.props)\u0026\u0026Dt(c,i.props);var f\u003dnew Et(i,c,a,o,t),p\u003ds.render.call(null,f._c,f);if(p instanceof pe)return jt(p,i,f.parent,s);if(Array.isArray(p)){for(var d\u003dst(p)||[],v\u003dnew Array(d.length),h\u003d0;h\u003cd.length;h++)v[h]\u003djt(d[h],i,f.parent,s);return v}}(i,d,a,s,c);var v\u003da.on;if(a.on\u003da.nativeOn,r(i.options.abstract)){var m\u003da.slot;a\u003d{},m\u0026\u0026(a.slot\u003dm)}!function(e){for(var t\u003de.hook||(e.hook\u003d{}),n\u003d0;n\u003cIt.length;n++){var r\u003dIt[n],i\u003dt[r],o\u003dLt[r];i\u003d\u003d\u003do||i\u0026\u0026i._merged||(t[r]\u003di?Ft(o,i):o)}}(a);var y\u003di.options.name||l;return new pe(\"vue-component-\"+i.cid+(y?\"-\"+y:\"\"),a,void 0,void 0,void 0,s,{Ctor:i,propsData:d,listeners:v,tag:l,children:c},p)}}}function Ft(e,t){var n\u003dfunction(n,r){e(n,r),t(n,r)};return n._merged\u003d!0,n}var Pt\u003d1,Rt\u003d2;function Ht(e,a,s,c,u,l){return(Array.isArray(s)||i(s))\u0026\u0026(u\u003dc,c\u003ds,s\u003dvoid 0),r(l)\u0026\u0026(u\u003dRt),function(e,i,a,s,c){if(n(a)\u0026\u0026n(a.__ob__))return ve();n(a)\u0026\u0026n(a.is)\u0026\u0026(i\u003da.is);if(!i)return ve();Array.isArray(s)\u0026\u0026\"function\"\u003d\u003dtypeof s[0]\u0026\u0026((a\u003da||{}).scopedSlots\u003d{default:s[0]},s.length\u003d0);c\u003d\u003d\u003dRt?s\u003dst(s):c\u003d\u003d\u003dPt\u0026\u0026(s\u003dfunction(e){for(var t\u003d0;t\u003ce.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(s));var u,l;if(\"string\"\u003d\u003dtypeof i){var f;l\u003de.$vnode\u0026\u0026e.$vnode.ns||F.getTagNamespace(i),u\u003dF.isReservedTag(i)?new pe(F.parsePlatformTagName(i),a,s,void 0,void 0,e):a\u0026\u0026a.pre||!n(f\u003dLe(e.$options,\"components\",i))?new pe(i,a,s,void 0,void 0,e):Mt(f,a,e,s,i)}else u\u003dMt(i,a,e,s);return Array.isArray(u)?u:n(u)?(n(l)\u0026\u0026function e(i,o,a){i.ns\u003do;\"foreignObject\"\u003d\u003d\u003di.tag\u0026\u0026(o\u003dvoid 0,a\u003d!0);if(n(i.children))for(var s\u003d0,c\u003di.children.length;s\u003cc;s++){var u\u003di.children[s];n(u.tag)\u0026\u0026(t(u.ns)||r(a)\u0026\u0026\"svg\"!\u003d\u003du.tag)\u0026\u0026e(u,o,a)}}(u,l),n(a)\u0026\u0026function(e){o(e.style)\u0026\u0026tt(e.style);o(e.class)\u0026\u0026tt(e.class)}(a),u):ve()}(e,a,s,c,u)}var Bt,Ut\u003dnull;function Vt(e,t){return(e.__esModule||oe\u0026\u0026\"Module\"\u003d\u003d\u003de[Symbol.toStringTag])\u0026\u0026(e\u003de.default),o(e)?t.extend(e):e}function zt(e){if(Array.isArray(e))for(var t\u003d0;t\u003ce.length;t++){var r\u003de[t];if(n(r)\u0026\u0026(n(r.componentOptions)||pt(r)))return r}}function Kt(e,t){Bt.$on(e,t)}function Jt(e,t){Bt.$off(e,t)}function qt(e,t){var n\u003dBt;return function r(){null!\u003d\u003dt.apply(null,arguments)\u0026\u0026n.$off(e,r)}}function Wt(e,t,n){Bt\u003de,it(t,n||{},Kt,Jt,qt,e),Bt\u003dvoid 0}var Zt\u003dnull;function Gt(e){var t\u003dZt;return Zt\u003de,function(){Zt\u003dt}}function Xt(e){for(;e\u0026\u0026(e\u003de.$parent);)if(e._inactive)return!0;return!1}function Yt(e,t){if(t){if(e._directInactive\u003d!1,Xt(e))return}else if(e._directInactive)return;if(e._inactive||null\u003d\u003d\u003de._inactive){e._inactive\u003d!1;for(var n\u003d0;n\u003ce.$children.length;n++)Yt(e.$children[n]);Qt(e,\"activated\")}}function Qt(e,t){le();var n\u003de.$options[t],r\u003dt+\" hook\";if(n)for(var i\u003d0,o\u003dn.length;i\u003co;i++)Be(n[i],e,null,e,r);e._hasHookEvent\u0026\u0026e.$emit(\"hook:\"+t),fe()}var en\u003d[],tn\u003d[],nn\u003d{},rn\u003d!1,on\u003d!1,an\u003d0;var sn\u003d0,cn\u003dDate.now;if(V\u0026\u0026!q){var un\u003dwindow.performance;un\u0026\u0026\"function\"\u003d\u003dtypeof un.now\u0026\u0026cn()\u003edocument.createEvent(\"Event\").timeStamp\u0026\u0026(cn\u003dfunction(){return un.now()})}function ln(){var e,t;for(sn\u003dcn(),on\u003d!0,en.sort(function(e,t){return e.id-t.id}),an\u003d0;an\u003cen.length;an++)(e\u003den[an]).before\u0026\u0026e.before(),t\u003de.id,nn[t]\u003dnull,e.run();var n\u003dtn.slice(),r\u003den.slice();an\u003den.length\u003dtn.length\u003d0,nn\u003d{},rn\u003don\u003d!1,function(e){for(var t\u003d0;t\u003ce.length;t++)e[t]._inactive\u003d!0,Yt(e[t],!0)}(n),function(e){var t\u003de.length;for(;t--;){var n\u003de[t],r\u003dn.vm;r._watcher\u003d\u003d\u003dn\u0026\u0026r._isMounted\u0026\u0026!r._isDestroyed\u0026\u0026Qt(r,\"updated\")}}(r),ne\u0026\u0026F.devtools\u0026\u0026ne.emit(\"flush\")}var fn\u003d0,pn\u003dfunction(e,t,n,r,i){this.vm\u003de,i\u0026\u0026(e._watcher\u003dthis),e._watchers.push(this),r?(this.deep\u003d!!r.deep,this.user\u003d!!r.user,this.lazy\u003d!!r.lazy,this.sync\u003d!!r.sync,this.before\u003dr.before):this.deep\u003dthis.user\u003dthis.lazy\u003dthis.sync\u003d!1,this.cb\u003dn,this.id\u003d++fn,this.active\u003d!0,this.dirty\u003dthis.lazy,this.deps\u003d[],this.newDeps\u003d[],this.depIds\u003dnew ie,this.newDepIds\u003dnew ie,this.expression\u003d\"\",\"function\"\u003d\u003dtypeof t?this.getter\u003dt:(this.getter\u003dfunction(e){if(!H.test(e)){var t\u003de.split(\".\");return function(e){for(var n\u003d0;n\u003ct.length;n++){if(!e)return;e\u003de[t[n]]}return e}}}(t),this.getter||(this.getter\u003dS)),this.value\u003dthis.lazy?void 0:this.get()};pn.prototype.get\u003dfunction(){var e;le(this);var t\u003dthis.vm;try{e\u003dthis.getter.call(t,t)}catch(e){if(!this.user)throw e;He(e,t,\u0027getter for watcher \"\u0027+this.expression+\u0027\"\u0027)}finally{this.deep\u0026\u0026tt(e),fe(),this.cleanupDeps()}return e},pn.prototype.addDep\u003dfunction(e){var t\u003de.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},pn.prototype.cleanupDeps\u003dfunction(){for(var e\u003dthis.deps.length;e--;){var t\u003dthis.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n\u003dthis.depIds;this.depIds\u003dthis.newDepIds,this.newDepIds\u003dn,this.newDepIds.clear(),n\u003dthis.deps,this.deps\u003dthis.newDeps,this.newDeps\u003dn,this.newDeps.length\u003d0},pn.prototype.update\u003dfunction(){this.lazy?this.dirty\u003d!0:this.sync?this.run():function(e){var t\u003de.id;if(null\u003d\u003dnn[t]){if(nn[t]\u003d!0,on){for(var n\u003den.length-1;n\u003ean\u0026\u0026en[n].id\u003ee.id;)n--;en.splice(n+1,0,e)}else en.push(e);rn||(rn\u003d!0,Qe(ln))}}(this)},pn.prototype.run\u003dfunction(){if(this.active){var e\u003dthis.get();if(e!\u003d\u003dthis.value||o(e)||this.deep){var t\u003dthis.value;if(this.value\u003de,this.user){var n\u003d\u0027callback for watcher \"\u0027+this.expression+\u0027\"\u0027;Be(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},pn.prototype.evaluate\u003dfunction(){this.value\u003dthis.get(),this.dirty\u003d!1},pn.prototype.depend\u003dfunction(){for(var e\u003dthis.deps.length;e--;)this.deps[e].depend()},pn.prototype.teardown\u003dfunction(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e\u003dthis.deps.length;e--;)this.deps[e].removeSub(this);this.active\u003d!1}};var dn\u003d{enumerable:!0,configurable:!0,get:S,set:S};function vn(e,t,n){dn.get\u003dfunction(){return this[t][n]},dn.set\u003dfunction(e){this[t][n]\u003de},Object.defineProperty(e,n,dn)}function hn(e){e._watchers\u003d[];var t\u003de.$options;t.props\u0026\u0026function(e,t){var n\u003de.$options.propsData||{},r\u003de._props\u003d{},i\u003de.$options._propKeys\u003d[];e.$parent\u0026\u0026$e(!1);var o\u003dfunction(o){i.push(o);var a\u003dIe(o,t,n,e);xe(r,o,a),o in e||vn(e,\"_props\",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods\u0026\u0026function(e,t){e.$options.props;for(var n in t)e[n]\u003d\"function\"!\u003dtypeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t\u003de.$options.data;s(t\u003de._data\u003d\"function\"\u003d\u003dtypeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return He(e,t,\"data()\"),{}}finally{fe()}}(t,e):t||{})||(t\u003d{});var n\u003dObject.keys(t),r\u003de.$options.props,i\u003d(e.$options.methods,n.length);for(;i--;){var o\u003dn[i];r\u0026\u0026y(r,o)||(a\u003dvoid 0,36!\u003d\u003d(a\u003d(o+\"\").charCodeAt(0))\u0026\u002695!\u003d\u003da\u0026\u0026vn(e,\"_data\",o))}var a;Ce(t,!0)}(e):Ce(e._data\u003d{},!0),t.computed\u0026\u0026function(e,t){var n\u003de._computedWatchers\u003dObject.create(null),r\u003dte();for(var i in t){var o\u003dt[i],a\u003d\"function\"\u003d\u003dtypeof o?o:o.get;r||(n[i]\u003dnew pn(e,a||S,S,mn)),i in e||yn(e,i,o)}}(e,t.computed),t.watch\u0026\u0026t.watch!\u003d\u003dY\u0026\u0026function(e,t){for(var n in t){var r\u003dt[n];if(Array.isArray(r))for(var i\u003d0;i\u003cr.length;i++)bn(e,n,r[i]);else bn(e,n,r)}}(e,t.watch)}var mn\u003d{lazy:!0};function yn(e,t,n){var r\u003d!te();\"function\"\u003d\u003dtypeof n?(dn.get\u003dr?gn(t):_n(n),dn.set\u003dS):(dn.get\u003dn.get?r\u0026\u0026!1!\u003d\u003dn.cache?gn(t):_n(n.get):S,dn.set\u003dn.set||S),Object.defineProperty(e,t,dn)}function gn(e){return function(){var t\u003dthis._computedWatchers\u0026\u0026this._computedWatchers[e];if(t)return t.dirty\u0026\u0026t.evaluate(),ce.target\u0026\u0026t.depend(),t.value}}function _n(e){return function(){return e.call(this,this)}}function bn(e,t,n,r){return s(n)\u0026\u0026(r\u003dn,n\u003dn.handler),\"string\"\u003d\u003dtypeof n\u0026\u0026(n\u003de[n]),e.$watch(t,n,r)}var $n\u003d0;function wn(e){var t\u003de.options;if(e.super){var n\u003dwn(e.super);if(n!\u003d\u003de.superOptions){e.superOptions\u003dn;var r\u003dfunction(e){var t,n\u003de.options,r\u003de.sealedOptions;for(var i in n)n[i]!\u003d\u003dr[i]\u0026\u0026(t||(t\u003d{}),t[i]\u003dn[i]);return t}(e);r\u0026\u0026A(e.extendOptions,r),(t\u003de.options\u003dDe(n,e.extendOptions)).name\u0026\u0026(t.components[t.name]\u003de)}}return t}function Cn(e){this._init(e)}function xn(e){e.cid\u003d0;var t\u003d1;e.extend\u003dfunction(e){e\u003de||{};var n\u003dthis,r\u003dn.cid,i\u003de._Ctor||(e._Ctor\u003d{});if(i[r])return i[r];var o\u003de.name||n.options.name,a\u003dfunction(e){this._init(e)};return(a.prototype\u003dObject.create(n.prototype)).constructor\u003da,a.cid\u003dt++,a.options\u003dDe(n.options,e),a.super\u003dn,a.options.props\u0026\u0026function(e){var t\u003de.options.props;for(var n in t)vn(e.prototype,\"_props\",n)}(a),a.options.computed\u0026\u0026function(e){var t\u003de.options.computed;for(var n in t)yn(e.prototype,n,t[n])}(a),a.extend\u003dn.extend,a.mixin\u003dn.mixin,a.use\u003dn.use,I.forEach(function(e){a[e]\u003dn[e]}),o\u0026\u0026(a.options.components[o]\u003da),a.superOptions\u003dn.options,a.extendOptions\u003de,a.sealedOptions\u003dA({},a.options),i[r]\u003da,a}}function kn(e){return e\u0026\u0026(e.Ctor.options.name||e.tag)}function An(e,t){return Array.isArray(e)?e.indexOf(t)\u003e-1:\"string\"\u003d\u003dtypeof e?e.split(\",\").indexOf(t)\u003e-1:(n\u003de,\"[object RegExp]\"\u003d\u003d\u003da.call(n)\u0026\u0026e.test(t));var n}function On(e,t){var n\u003de.cache,r\u003de.keys,i\u003de._vnode;for(var o in n){var a\u003dn[o];if(a){var s\u003da.name;s\u0026\u0026!t(s)\u0026\u0026Sn(n,o,r,i)}}}function Sn(e,t,n,r){var i\u003de[t];!i||r\u0026\u0026i.tag\u003d\u003d\u003dr.tag||i.componentInstance.$destroy(),e[t]\u003dnull,h(n,t)}!function(t){t.prototype._init\u003dfunction(t){var n\u003dthis;n._uid\u003d$n++,n._isVue\u003d!0,t\u0026\u0026t._isComponent?function(e,t){var n\u003de.$options\u003dObject.create(e.constructor.options),r\u003dt._parentVnode;n.parent\u003dt.parent,n._parentVnode\u003dr;var i\u003dr.componentOptions;n.propsData\u003di.propsData,n._parentListeners\u003di.listeners,n._renderChildren\u003di.children,n._componentTag\u003di.tag,t.render\u0026\u0026(n.render\u003dt.render,n.staticRenderFns\u003dt.staticRenderFns)}(n,t):n.$options\u003dDe(wn(n.constructor),t||{},n),n._renderProxy\u003dn,n._self\u003dn,function(e){var t\u003de.$options,n\u003dt.parent;if(n\u0026\u0026!t.abstract){for(;n.$options.abstract\u0026\u0026n.$parent;)n\u003dn.$parent;n.$children.push(e)}e.$parent\u003dn,e.$root\u003dn?n.$root:e,e.$children\u003d[],e.$refs\u003d{},e._watcher\u003dnull,e._inactive\u003dnull,e._directInactive\u003d!1,e._isMounted\u003d!1,e._isDestroyed\u003d!1,e._isBeingDestroyed\u003d!1}(n),function(e){e._events\u003dObject.create(null),e._hasHookEvent\u003d!1;var t\u003de.$options._parentListeners;t\u0026\u0026Wt(e,t)}(n),function(t){t._vnode\u003dnull,t._staticTrees\u003dnull;var n\u003dt.$options,r\u003dt.$vnode\u003dn._parentVnode,i\u003dr\u0026\u0026r.context;t.$slots\u003dlt(n._renderChildren,i),t.$scopedSlots\u003de,t._c\u003dfunction(e,n,r,i){return Ht(t,e,n,r,i,!1)},t.$createElement\u003dfunction(e,n,r,i){return Ht(t,e,n,r,i,!0)};var o\u003dr\u0026\u0026r.data;xe(t,\"$attrs\",o\u0026\u0026o.attrs||e,null,!0),xe(t,\"$listeners\",n._parentListeners||e,null,!0)}(n),Qt(n,\"beforeCreate\"),function(e){var t\u003dut(e.$options.inject,e);t\u0026\u0026($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),hn(n),function(e){var t\u003de.$options.provide;t\u0026\u0026(e._provided\u003d\"function\"\u003d\u003dtypeof t?t.call(e):t)}(n),Qt(n,\"created\"),n.$options.el\u0026\u0026n.$mount(n.$options.el)}}(Cn),function(e){var t\u003d{get:function(){return this._data}},n\u003d{get:function(){return this._props}};Object.defineProperty(e.prototype,\"$data\",t),Object.defineProperty(e.prototype,\"$props\",n),e.prototype.$set\u003dke,e.prototype.$delete\u003dAe,e.prototype.$watch\u003dfunction(e,t,n){if(s(t))return bn(this,e,t,n);(n\u003dn||{}).user\u003d!0;var r\u003dnew pn(this,e,t,n);if(n.immediate){var i\u003d\u0027callback for immediate watcher \"\u0027+r.expression+\u0027\"\u0027;le(),Be(t,this,[r.value],this,i),fe()}return function(){r.teardown()}}}(Cn),function(e){var t\u003d/^hook:/;e.prototype.$on\u003dfunction(e,n){var r\u003dthis;if(Array.isArray(e))for(var i\u003d0,o\u003de.length;i\u003co;i++)r.$on(e[i],n);else(r._events[e]||(r._events[e]\u003d[])).push(n),t.test(e)\u0026\u0026(r._hasHookEvent\u003d!0);return r},e.prototype.$once\u003dfunction(e,t){var n\u003dthis;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn\u003dt,n.$on(e,r),n},e.prototype.$off\u003dfunction(e,t){var n\u003dthis;if(!arguments.length)return n._events\u003dObject.create(null),n;if(Array.isArray(e)){for(var r\u003d0,i\u003de.length;r\u003ci;r++)n.$off(e[r],t);return n}var o,a\u003dn._events[e];if(!a)return n;if(!t)return n._events[e]\u003dnull,n;for(var s\u003da.length;s--;)if((o\u003da[s])\u003d\u003d\u003dt||o.fn\u003d\u003d\u003dt){a.splice(s,1);break}return n},e.prototype.$emit\u003dfunction(e){var t\u003dthis._events[e];if(t){t\u003dt.length\u003e1?k(t):t;for(var n\u003dk(arguments,1),r\u003d\u0027event handler for \"\u0027+e+\u0027\"\u0027,i\u003d0,o\u003dt.length;i\u003co;i++)Be(t[i],this,n,this,r)}return this}}(Cn),function(e){e.prototype._update\u003dfunction(e,t){var n\u003dthis,r\u003dn.$el,i\u003dn._vnode,o\u003dGt(n);n._vnode\u003de,n.$el\u003di?n.__patch__(i,e):n.__patch__(n.$el,e,t,!1),o(),r\u0026\u0026(r.__vue__\u003dnull),n.$el\u0026\u0026(n.$el.__vue__\u003dn),n.$vnode\u0026\u0026n.$parent\u0026\u0026n.$vnode\u003d\u003d\u003dn.$parent._vnode\u0026\u0026(n.$parent.$el\u003dn.$el)},e.prototype.$forceUpdate\u003dfunction(){this._watcher\u0026\u0026this._watcher.update()},e.prototype.$destroy\u003dfunction(){var e\u003dthis;if(!e._isBeingDestroyed){Qt(e,\"beforeDestroy\"),e._isBeingDestroyed\u003d!0;var t\u003de.$parent;!t||t._isBeingDestroyed||e.$options.abstract||h(t.$children,e),e._watcher\u0026\u0026e._watcher.teardown();for(var n\u003de._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__\u0026\u0026e._data.__ob__.vmCount--,e._isDestroyed\u003d!0,e.__patch__(e._vnode,null),Qt(e,\"destroyed\"),e.$off(),e.$el\u0026\u0026(e.$el.__vue__\u003dnull),e.$vnode\u0026\u0026(e.$vnode.parent\u003dnull)}}}(Cn),function(e){Nt(e.prototype),e.prototype.$nextTick\u003dfunction(e){return Qe(e,this)},e.prototype._render\u003dfunction(){var e,t\u003dthis,n\u003dt.$options,r\u003dn.render,i\u003dn._parentVnode;i\u0026\u0026(t.$scopedSlots\u003ddt(i.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode\u003di;try{Ut\u003dt,e\u003dr.call(t._renderProxy,t.$createElement)}catch(n){He(n,t,\"render\"),e\u003dt._vnode}finally{Ut\u003dnull}return Array.isArray(e)\u0026\u00261\u003d\u003d\u003de.length\u0026\u0026(e\u003de[0]),e instanceof pe||(e\u003dve()),e.parent\u003di,e}}(Cn);var Tn\u003d[String,RegExp,Array],Nn\u003d{KeepAlive:{name:\"keep-alive\",abstract:!0,props:{include:Tn,exclude:Tn,max:[String,Number]},methods:{cacheVNode:function(){var e\u003dthis.cache,t\u003dthis.keys,n\u003dthis.vnodeToCache,r\u003dthis.keyToCache;if(n){var i\u003dn.tag,o\u003dn.componentInstance,a\u003dn.componentOptions;e[r]\u003d{name:kn(a),tag:i,componentInstance:o},t.push(r),this.max\u0026\u0026t.length\u003eparseInt(this.max)\u0026\u0026Sn(e,t[0],t,this._vnode),this.vnodeToCache\u003dnull}}},created:function(){this.cache\u003dObject.create(null),this.keys\u003d[]},destroyed:function(){for(var e in this.cache)Sn(this.cache,e,this.keys)},mounted:function(){var e\u003dthis;this.cacheVNode(),this.$watch(\"include\",function(t){On(e,function(e){return An(t,e)})}),this.$watch(\"exclude\",function(t){On(e,function(e){return!An(t,e)})})},updated:function(){this.cacheVNode()},render:function(){var e\u003dthis.$slots.default,t\u003dzt(e),n\u003dt\u0026\u0026t.componentOptions;if(n){var r\u003dkn(n),i\u003dthis.include,o\u003dthis.exclude;if(i\u0026\u0026(!r||!An(i,r))||o\u0026\u0026r\u0026\u0026An(o,r))return t;var a\u003dthis.cache,s\u003dthis.keys,c\u003dnull\u003d\u003dt.key?n.Ctor.cid+(n.tag?\"::\"+n.tag:\"\"):t.key;a[c]?(t.componentInstance\u003da[c].componentInstance,h(s,c),s.push(c)):(this.vnodeToCache\u003dt,this.keyToCache\u003dc),t.data.keepAlive\u003d!0}return t||e\u0026\u0026e[0]}}};!function(e){var t\u003d{get:function(){return F}};Object.defineProperty(e,\"config\",t),e.util\u003d{warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set\u003dke,e.delete\u003dAe,e.nextTick\u003dQe,e.observable\u003dfunction(e){return Ce(e),e},e.options\u003dObject.create(null),I.forEach(function(t){e.options[t+\"s\"]\u003dObject.create(null)}),e.options._base\u003de,A(e.options.components,Nn),function(e){e.use\u003dfunction(e){var t\u003dthis._installedPlugins||(this._installedPlugins\u003d[]);if(t.indexOf(e)\u003e-1)return this;var n\u003dk(arguments,1);return n.unshift(this),\"function\"\u003d\u003dtypeof e.install?e.install.apply(e,n):\"function\"\u003d\u003dtypeof e\u0026\u0026e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin\u003dfunction(e){return this.options\u003dDe(this.options,e),this}}(e),xn(e),function(e){I.forEach(function(t){e[t]\u003dfunction(e,n){return n?(\"component\"\u003d\u003d\u003dt\u0026\u0026s(n)\u0026\u0026(n.name\u003dn.name||e,n\u003dthis.options._base.extend(n)),\"directive\"\u003d\u003d\u003dt\u0026\u0026\"function\"\u003d\u003dtypeof n\u0026\u0026(n\u003d{bind:n,update:n}),this.options[t+\"s\"][e]\u003dn,n):this.options[t+\"s\"][e]}})}(e)}(Cn),Object.defineProperty(Cn.prototype,\"$isServer\",{get:te}),Object.defineProperty(Cn.prototype,\"$ssrContext\",{get:function(){return this.$vnode\u0026\u0026this.$vnode.ssrContext}}),Object.defineProperty(Cn,\"FunctionalRenderContext\",{value:Et}),Cn.version\u003d\"2.6.14\";var En\u003dp(\"style,class\"),jn\u003dp(\"input,textarea,option,select,progress\"),Dn\u003dfunction(e,t,n){return\"value\"\u003d\u003d\u003dn\u0026\u0026jn(e)\u0026\u0026\"button\"!\u003d\u003dt||\"selected\"\u003d\u003d\u003dn\u0026\u0026\"option\"\u003d\u003d\u003de||\"checked\"\u003d\u003d\u003dn\u0026\u0026\"input\"\u003d\u003d\u003de||\"muted\"\u003d\u003d\u003dn\u0026\u0026\"video\"\u003d\u003d\u003de},Ln\u003dp(\"contenteditable,draggable,spellcheck\"),In\u003dp(\"events,caret,typing,plaintext-only\"),Mn\u003dfunction(e,t){return Bn(t)||\"false\"\u003d\u003d\u003dt?\"false\":\"contenteditable\"\u003d\u003d\u003de\u0026\u0026In(t)?t:\"true\"},Fn\u003dp(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible\"),Pn\u003d\"http://www.w3.org/1999/xlink\",Rn\u003dfunction(e){return\":\"\u003d\u003d\u003de.charAt(5)\u0026\u0026\"xlink\"\u003d\u003d\u003de.slice(0,5)},Hn\u003dfunction(e){return Rn(e)?e.slice(6,e.length):\"\"},Bn\u003dfunction(e){return null\u003d\u003de||!1\u003d\u003d\u003de};function Un(e){for(var t\u003de.data,r\u003de,i\u003de;n(i.componentInstance);)(i\u003di.componentInstance._vnode)\u0026\u0026i.data\u0026\u0026(t\u003dVn(i.data,t));for(;n(r\u003dr.parent);)r\u0026\u0026r.data\u0026\u0026(t\u003dVn(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Kn(t));return\"\"}(t.staticClass,t.class)}function Vn(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Kn(e){return Array.isArray(e)?function(e){for(var t,r\u003d\"\",i\u003d0,o\u003de.length;i\u003co;i++)n(t\u003dKn(e[i]))\u0026\u0026\"\"!\u003d\u003dt\u0026\u0026(r\u0026\u0026(r+\u003d\" \"),r+\u003dt);return r}(e):o(e)?function(e){var t\u003d\"\";for(var n in e)e[n]\u0026\u0026(t\u0026\u0026(t+\u003d\" \"),t+\u003dn);return t}(e):\"string\"\u003d\u003dtypeof e?e:\"\"}var Jn\u003d{svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},qn\u003dp(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),Wn\u003dp(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),Zn\u003dfunction(e){return qn(e)||Wn(e)};function Gn(e){return Wn(e)?\"svg\":\"math\"\u003d\u003d\u003de?\"math\":void 0}var Xn\u003dObject.create(null);var Yn\u003dp(\"text,number,password,search,email,tel,url\");function Qn(e){if(\"string\"\u003d\u003dtypeof e){var t\u003ddocument.querySelector(e);return t||document.createElement(\"div\")}return e}var er\u003dObject.freeze({createElement:function(e,t){var n\u003ddocument.createElement(e);return\"select\"!\u003d\u003de?n:(t.data\u0026\u0026t.data.attrs\u0026\u0026void 0!\u003d\u003dt.data.attrs.multiple\u0026\u0026n.setAttribute(\"multiple\",\"multiple\"),n)},createElementNS:function(e,t){return document.createElementNS(Jn[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent\u003dt},setStyleScope:function(e,t){e.setAttribute(t,\"\")}}),tr\u003d{create:function(e,t){nr(t)},update:function(e,t){e.data.ref!\u003d\u003dt.data.ref\u0026\u0026(nr(e,!0),nr(t))},destroy:function(e){nr(e,!0)}};function nr(e,t){var r\u003de.data.ref;if(n(r)){var i\u003de.context,o\u003de.componentInstance||e.elm,a\u003di.$refs;t?Array.isArray(a[r])?h(a[r],o):a[r]\u003d\u003d\u003do\u0026\u0026(a[r]\u003dvoid 0):e.data.refInFor?Array.isArray(a[r])?a[r].indexOf(o)\u003c0\u0026\u0026a[r].push(o):a[r]\u003d[o]:a[r]\u003do}}var rr\u003dnew pe(\"\",{},[]),ir\u003d[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"];function or(e,i){return e.key\u003d\u003d\u003di.key\u0026\u0026e.asyncFactory\u003d\u003d\u003di.asyncFactory\u0026\u0026(e.tag\u003d\u003d\u003di.tag\u0026\u0026e.isComment\u003d\u003d\u003di.isComment\u0026\u0026n(e.data)\u003d\u003d\u003dn(i.data)\u0026\u0026function(e,t){if(\"input\"!\u003d\u003de.tag)return!0;var r,i\u003dn(r\u003de.data)\u0026\u0026n(r\u003dr.attrs)\u0026\u0026r.type,o\u003dn(r\u003dt.data)\u0026\u0026n(r\u003dr.attrs)\u0026\u0026r.type;return i\u003d\u003d\u003do||Yn(i)\u0026\u0026Yn(o)}(e,i)||r(e.isAsyncPlaceholder)\u0026\u0026t(i.asyncFactory.error))}function ar(e,t,r){var i,o,a\u003d{};for(i\u003dt;i\u003c\u003dr;++i)n(o\u003de[i].key)\u0026\u0026(a[o]\u003di);return a}var sr\u003d{create:cr,update:cr,destroy:function(e){cr(e,rr)}};function cr(e,t){(e.data.directives||t.data.directives)\u0026\u0026function(e,t){var n,r,i,o\u003de\u003d\u003d\u003drr,a\u003dt\u003d\u003d\u003drr,s\u003dlr(e.data.directives,e.context),c\u003dlr(t.data.directives,t.context),u\u003d[],l\u003d[];for(n in c)r\u003ds[n],i\u003dc[n],r?(i.oldValue\u003dr.value,i.oldArg\u003dr.arg,pr(i,\"update\",t,e),i.def\u0026\u0026i.def.componentUpdated\u0026\u0026l.push(i)):(pr(i,\"bind\",t,e),i.def\u0026\u0026i.def.inserted\u0026\u0026u.push(i));if(u.length){var f\u003dfunction(){for(var n\u003d0;n\u003cu.length;n++)pr(u[n],\"inserted\",t,e)};o?ot(t,\"insert\",f):f()}l.length\u0026\u0026ot(t,\"postpatch\",function(){for(var n\u003d0;n\u003cl.length;n++)pr(l[n],\"componentUpdated\",t,e)});if(!o)for(n in s)c[n]||pr(s[n],\"unbind\",e,e,a)}(e,t)}var ur\u003dObject.create(null);function lr(e,t){var n,r,i\u003dObject.create(null);if(!e)return i;for(n\u003d0;n\u003ce.length;n++)(r\u003de[n]).modifiers||(r.modifiers\u003dur),i[fr(r)]\u003dr,r.def\u003dLe(t.$options,\"directives\",r.name);return i}function fr(e){return e.rawName||e.name+\".\"+Object.keys(e.modifiers||{}).join(\".\")}function pr(e,t,n,r,i){var o\u003de.def\u0026\u0026e.def[t];if(o)try{o(n.elm,e,n,r,i)}catch(r){He(r,n.context,\"directive \"+e.name+\" \"+t+\" hook\")}}var dr\u003d[tr,sr];function vr(e,r){var i\u003dr.componentOptions;if(!(n(i)\u0026\u0026!1\u003d\u003d\u003di.Ctor.options.inheritAttrs||t(e.data.attrs)\u0026\u0026t(r.data.attrs))){var o,a,s\u003dr.elm,c\u003de.data.attrs||{},u\u003dr.data.attrs||{};for(o in n(u.__ob__)\u0026\u0026(u\u003dr.data.attrs\u003dA({},u)),u)a\u003du[o],c[o]!\u003d\u003da\u0026\u0026hr(s,o,a,r.data.pre);for(o in(q||Z)\u0026\u0026u.value!\u003d\u003dc.value\u0026\u0026hr(s,\"value\",u.value),c)t(u[o])\u0026\u0026(Rn(o)?s.removeAttributeNS(Pn,Hn(o)):Ln(o)||s.removeAttribute(o))}}function hr(e,t,n,r){r||e.tagName.indexOf(\"-\")\u003e-1?mr(e,t,n):Fn(t)?Bn(n)?e.removeAttribute(t):(n\u003d\"allowfullscreen\"\u003d\u003d\u003dt\u0026\u0026\"EMBED\"\u003d\u003d\u003de.tagName?\"true\":t,e.setAttribute(t,n)):Ln(t)?e.setAttribute(t,Mn(t,n)):Rn(t)?Bn(n)?e.removeAttributeNS(Pn,Hn(t)):e.setAttributeNS(Pn,t,n):mr(e,t,n)}function mr(e,t,n){if(Bn(n))e.removeAttribute(t);else{if(q\u0026\u0026!W\u0026\u0026\"TEXTAREA\"\u003d\u003d\u003de.tagName\u0026\u0026\"placeholder\"\u003d\u003d\u003dt\u0026\u0026\"\"!\u003d\u003dn\u0026\u0026!e.__ieph){var r\u003dfunction(t){t.stopImmediatePropagation(),e.removeEventListener(\"input\",r)};e.addEventListener(\"input\",r),e.__ieph\u003d!0}e.setAttribute(t,n)}}var yr\u003d{create:vr,update:vr};function gr(e,r){var i\u003dr.elm,o\u003dr.data,a\u003de.data;if(!(t(o.staticClass)\u0026\u0026t(o.class)\u0026\u0026(t(a)||t(a.staticClass)\u0026\u0026t(a.class)))){var s\u003dUn(r),c\u003di._transitionClasses;n(c)\u0026\u0026(s\u003dzn(s,Kn(c))),s!\u003d\u003di._prevClass\u0026\u0026(i.setAttribute(\"class\",s),i._prevClass\u003ds)}}var _r,br,$r,wr,Cr,xr,kr\u003d{create:gr,update:gr},Ar\u003d/[\\w).+\\-_$\\]]/;function Or(e){var t,n,r,i,o,a\u003d!1,s\u003d!1,c\u003d!1,u\u003d!1,l\u003d0,f\u003d0,p\u003d0,d\u003d0;for(r\u003d0;r\u003ce.length;r++)if(n\u003dt,t\u003de.charCodeAt(r),a)39\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(a\u003d!1);else if(s)34\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(s\u003d!1);else if(c)96\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(c\u003d!1);else if(u)47\u003d\u003d\u003dt\u0026\u002692!\u003d\u003dn\u0026\u0026(u\u003d!1);else if(124!\u003d\u003dt||124\u003d\u003d\u003de.charCodeAt(r+1)||124\u003d\u003d\u003de.charCodeAt(r-1)||l||f||p){switch(t){case 34:s\u003d!0;break;case 39:a\u003d!0;break;case 96:c\u003d!0;break;case 40:p++;break;case 41:p--;break;case 91:f++;break;case 93:f--;break;case 123:l++;break;case 125:l--}if(47\u003d\u003d\u003dt){for(var v\u003dr-1,h\u003dvoid 0;v\u003e\u003d0\u0026\u0026\" \"\u003d\u003d\u003d(h\u003de.charAt(v));v--);h\u0026\u0026Ar.test(h)||(u\u003d!0)}}else void 0\u003d\u003d\u003di?(d\u003dr+1,i\u003de.slice(0,r).trim()):m();function m(){(o||(o\u003d[])).push(e.slice(d,r).trim()),d\u003dr+1}if(void 0\u003d\u003d\u003di?i\u003de.slice(0,r).trim():0!\u003d\u003dd\u0026\u0026m(),o)for(r\u003d0;r\u003co.length;r++)i\u003dSr(i,o[r]);return i}function Sr(e,t){var n\u003dt.indexOf(\"(\");if(n\u003c0)return\u0027_f(\"\u0027+t+\u0027\")(\u0027+e+\")\";var r\u003dt.slice(0,n),i\u003dt.slice(n+1);return\u0027_f(\"\u0027+r+\u0027\")(\u0027+e+(\")\"!\u003d\u003di?\",\"+i:i)}function Tr(e,t){console.error(\"[Vue compiler]: \"+e)}function Nr(e,t){return e?e.map(function(e){return e[t]}).filter(function(e){return e}):[]}function Er(e,t,n,r,i){(e.props||(e.props\u003d[])).push(Hr({name:t,value:n,dynamic:i},r)),e.plain\u003d!1}function jr(e,t,n,r,i){(i?e.dynamicAttrs||(e.dynamicAttrs\u003d[]):e.attrs||(e.attrs\u003d[])).push(Hr({name:t,value:n,dynamic:i},r)),e.plain\u003d!1}function Dr(e,t,n,r){e.attrsMap[t]\u003dn,e.attrsList.push(Hr({name:t,value:n},r))}function Lr(e,t,n,r,i,o,a,s){(e.directives||(e.directives\u003d[])).push(Hr({name:t,rawName:n,value:r,arg:i,isDynamicArg:o,modifiers:a},s)),e.plain\u003d!1}function Ir(e,t,n){return n?\"_p(\"+t+\u0027,\"\u0027+e+\u0027\")\u0027:e+t}function Mr(t,n,r,i,o,a,s,c){var u;(i\u003di||e).right?c?n\u003d\"(\"+n+\")\u003d\u003d\u003d\u0027click\u0027?\u0027contextmenu\u0027:(\"+n+\")\":\"click\"\u003d\u003d\u003dn\u0026\u0026(n\u003d\"contextmenu\",delete i.right):i.middle\u0026\u0026(c?n\u003d\"(\"+n+\")\u003d\u003d\u003d\u0027click\u0027?\u0027mouseup\u0027:(\"+n+\")\":\"click\"\u003d\u003d\u003dn\u0026\u0026(n\u003d\"mouseup\")),i.capture\u0026\u0026(delete i.capture,n\u003dIr(\"!\",n,c)),i.once\u0026\u0026(delete i.once,n\u003dIr(\"~\",n,c)),i.passive\u0026\u0026(delete i.passive,n\u003dIr(\"\u0026\",n,c)),i.native?(delete i.native,u\u003dt.nativeEvents||(t.nativeEvents\u003d{})):u\u003dt.events||(t.events\u003d{});var l\u003dHr({value:r.trim(),dynamic:c},s);i!\u003d\u003de\u0026\u0026(l.modifiers\u003di);var f\u003du[n];Array.isArray(f)?o?f.unshift(l):f.push(l):u[n]\u003df?o?[l,f]:[f,l]:l,t.plain\u003d!1}function Fr(e,t,n){var r\u003dPr(e,\":\"+t)||Pr(e,\"v-bind:\"+t);if(null!\u003dr)return Or(r);if(!1!\u003d\u003dn){var i\u003dPr(e,t);if(null!\u003di)return JSON.stringify(i)}}function Pr(e,t,n){var r;if(null!\u003d(r\u003de.attrsMap[t]))for(var i\u003de.attrsList,o\u003d0,a\u003di.length;o\u003ca;o++)if(i[o].name\u003d\u003d\u003dt){i.splice(o,1);break}return n\u0026\u0026delete e.attrsMap[t],r}function Rr(e,t){for(var n\u003de.attrsList,r\u003d0,i\u003dn.length;r\u003ci;r++){var o\u003dn[r];if(t.test(o.name))return n.splice(r,1),o}}function Hr(e,t){return t\u0026\u0026(null!\u003dt.start\u0026\u0026(e.start\u003dt.start),null!\u003dt.end\u0026\u0026(e.end\u003dt.end)),e}function Br(e,t,n){var r\u003dn||{},i\u003dr.number,o\u003d\"$$v\";r.trim\u0026\u0026(o\u003d\"(typeof $$v \u003d\u003d\u003d \u0027string\u0027? $$v.trim(): $$v)\"),i\u0026\u0026(o\u003d\"_n(\"+o+\")\");var a\u003dUr(t,o);e.model\u003d{value:\"(\"+t+\")\",expression:JSON.stringify(t),callback:\"function ($$v) {\"+a+\"}\"}}function Ur(e,t){var n\u003dfunction(e){if(e\u003de.trim(),_r\u003de.length,e.indexOf(\"[\")\u003c0||e.lastIndexOf(\"]\")\u003c_r-1)return(wr\u003de.lastIndexOf(\".\"))\u003e-1?{exp:e.slice(0,wr),key:\u0027\"\u0027+e.slice(wr+1)+\u0027\"\u0027}:{exp:e,key:null};br\u003de,wr\u003dCr\u003dxr\u003d0;for(;!zr();)Kr($r\u003dVr())?qr($r):91\u003d\u003d\u003d$r\u0026\u0026Jr($r);return{exp:e.slice(0,Cr),key:e.slice(Cr+1,xr)}}(e);return null\u003d\u003d\u003dn.key?e+\"\u003d\"+t:\"$set(\"+n.exp+\", \"+n.key+\", \"+t+\")\"}function Vr(){return br.charCodeAt(++wr)}function zr(){return wr\u003e\u003d_r}function Kr(e){return 34\u003d\u003d\u003de||39\u003d\u003d\u003de}function Jr(e){var t\u003d1;for(Cr\u003dwr;!zr();)if(Kr(e\u003dVr()))qr(e);else if(91\u003d\u003d\u003de\u0026\u0026t++,93\u003d\u003d\u003de\u0026\u0026t--,0\u003d\u003d\u003dt){xr\u003dwr;break}}function qr(e){for(var t\u003de;!zr()\u0026\u0026(e\u003dVr())!\u003d\u003dt;);}var Wr,Zr\u003d\"__r\",Gr\u003d\"__c\";function Xr(e,t,n){var r\u003dWr;return function i(){null!\u003d\u003dt.apply(null,arguments)\u0026\u0026ei(e,i,n,r)}}var Yr\u003dKe\u0026\u0026!(X\u0026\u0026Number(X[1])\u003c\u003d53);function Qr(e,t,n,r){if(Yr){var i\u003dsn,o\u003dt;t\u003do._wrapper\u003dfunction(e){if(e.target\u003d\u003d\u003de.currentTarget||e.timeStamp\u003e\u003di||e.timeStamp\u003c\u003d0||e.target.ownerDocument!\u003d\u003ddocument)return o.apply(this,arguments)}}Wr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function ei(e,t,n,r){(r||Wr).removeEventListener(e,t._wrapper||t,n)}function ti(e,r){if(!t(e.data.on)||!t(r.data.on)){var i\u003dr.data.on||{},o\u003de.data.on||{};Wr\u003dr.elm,function(e){if(n(e[Zr])){var t\u003dq?\"change\":\"input\";e[t]\u003d[].concat(e[Zr],e[t]||[]),delete e[Zr]}n(e[Gr])\u0026\u0026(e.change\u003d[].concat(e[Gr],e.change||[]),delete e[Gr])}(i),it(i,o,Qr,ei,Xr,r.context),Wr\u003dvoid 0}}var ni,ri\u003d{create:ti,update:ti};function ii(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a\u003dr.elm,s\u003de.data.domProps||{},c\u003dr.data.domProps||{};for(i in n(c.__ob__)\u0026\u0026(c\u003dr.data.domProps\u003dA({},c)),s)i in c||(a[i]\u003d\"\");for(i in c){if(o\u003dc[i],\"textContent\"\u003d\u003d\u003di||\"innerHTML\"\u003d\u003d\u003di){if(r.children\u0026\u0026(r.children.length\u003d0),o\u003d\u003d\u003ds[i])continue;1\u003d\u003d\u003da.childNodes.length\u0026\u0026a.removeChild(a.childNodes[0])}if(\"value\"\u003d\u003d\u003di\u0026\u0026\"PROGRESS\"!\u003d\u003da.tagName){a._value\u003do;var u\u003dt(o)?\"\":String(o);oi(a,u)\u0026\u0026(a.value\u003du)}else if(\"innerHTML\"\u003d\u003d\u003di\u0026\u0026Wn(a.tagName)\u0026\u0026t(a.innerHTML)){(ni\u003dni||document.createElement(\"div\")).innerHTML\u003d\"\u003csvg\u003e\"+o+\"\u003c/svg\u003e\";for(var l\u003dni.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!\u003d\u003ds[i])try{a[i]\u003do}catch(e){}}}}function oi(e,t){return!e.composing\u0026\u0026(\"OPTION\"\u003d\u003d\u003de.tagName||function(e,t){var n\u003d!0;try{n\u003ddocument.activeElement!\u003d\u003de}catch(e){}return n\u0026\u0026e.value!\u003d\u003dt}(e,t)||function(e,t){var r\u003de.value,i\u003de._vModifiers;if(n(i)){if(i.number)return f(r)!\u003d\u003df(t);if(i.trim)return r.trim()!\u003d\u003dt.trim()}return r!\u003d\u003dt}(e,t))}var ai\u003d{create:ii,update:ii},si\u003dg(function(e){var t\u003d{},n\u003d/:(.+)/;return e.split(/;(?![^(]*\\))/g).forEach(function(e){if(e){var r\u003de.split(n);r.length\u003e1\u0026\u0026(t[r[0].trim()]\u003dr[1].trim())}}),t});function ci(e){var t\u003dui(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ui(e){return Array.isArray(e)?O(e):\"string\"\u003d\u003dtypeof e?si(e):e}var li,fi\u003d/^--/,pi\u003d/\\s*!important$/,di\u003dfunction(e,t,n){if(fi.test(t))e.style.setProperty(t,n);else if(pi.test(n))e.style.setProperty(C(t),n.replace(pi,\"\"),\"important\");else{var r\u003dhi(t);if(Array.isArray(n))for(var i\u003d0,o\u003dn.length;i\u003co;i++)e.style[r]\u003dn[i];else e.style[r]\u003dn}},vi\u003d[\"Webkit\",\"Moz\",\"ms\"],hi\u003dg(function(e){if(li\u003dli||document.createElement(\"div\").style,\"filter\"!\u003d\u003d(e\u003db(e))\u0026\u0026e in li)return e;for(var t\u003de.charAt(0).toUpperCase()+e.slice(1),n\u003d0;n\u003cvi.length;n++){var r\u003dvi[n]+t;if(r in li)return r}});function mi(e,r){var i\u003dr.data,o\u003de.data;if(!(t(i.staticStyle)\u0026\u0026t(i.style)\u0026\u0026t(o.staticStyle)\u0026\u0026t(o.style))){var a,s,c\u003dr.elm,u\u003do.staticStyle,l\u003do.normalizedStyle||o.style||{},f\u003du||l,p\u003dui(r.data.style)||{};r.data.normalizedStyle\u003dn(p.__ob__)?A({},p):p;var d\u003dfunction(e,t){var n,r\u003d{};if(t)for(var i\u003de;i.componentInstance;)(i\u003di.componentInstance._vnode)\u0026\u0026i.data\u0026\u0026(n\u003dci(i.data))\u0026\u0026A(r,n);(n\u003dci(e.data))\u0026\u0026A(r,n);for(var o\u003de;o\u003do.parent;)o.data\u0026\u0026(n\u003dci(o.data))\u0026\u0026A(r,n);return r}(r,!0);for(s in f)t(d[s])\u0026\u0026di(c,s,\"\");for(s in d)(a\u003dd[s])!\u003d\u003df[s]\u0026\u0026di(c,s,null\u003d\u003da?\"\":a)}}var yi\u003d{create:mi,update:mi},gi\u003d/\\s+/;function _i(e,t){if(t\u0026\u0026(t\u003dt.trim()))if(e.classList)t.indexOf(\" \")\u003e-1?t.split(gi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n\u003d\" \"+(e.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+t+\" \")\u003c0\u0026\u0026e.setAttribute(\"class\",(n+t).trim())}}function bi(e,t){if(t\u0026\u0026(t\u003dt.trim()))if(e.classList)t.indexOf(\" \")\u003e-1?t.split(gi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute(\"class\");else{for(var n\u003d\" \"+(e.getAttribute(\"class\")||\"\")+\" \",r\u003d\" \"+t+\" \";n.indexOf(r)\u003e\u003d0;)n\u003dn.replace(r,\" \");(n\u003dn.trim())?e.setAttribute(\"class\",n):e.removeAttribute(\"class\")}}function $i(e){if(e){if(\"object\"\u003d\u003dtypeof e){var t\u003d{};return!1!\u003d\u003de.css\u0026\u0026A(t,wi(e.name||\"v\")),A(t,e),t}return\"string\"\u003d\u003dtypeof e?wi(e):void 0}}var wi\u003dg(function(e){return{enterClass:e+\"-enter\",enterToClass:e+\"-enter-to\",enterActiveClass:e+\"-enter-active\",leaveClass:e+\"-leave\",leaveToClass:e+\"-leave-to\",leaveActiveClass:e+\"-leave-active\"}}),Ci\u003dV\u0026\u0026!W,xi\u003d\"transition\",ki\u003d\"animation\",Ai\u003d\"transition\",Oi\u003d\"transitionend\",Si\u003d\"animation\",Ti\u003d\"animationend\";Ci\u0026\u0026(void 0\u003d\u003d\u003dwindow.ontransitionend\u0026\u0026void 0!\u003d\u003dwindow.onwebkittransitionend\u0026\u0026(Ai\u003d\"WebkitTransition\",Oi\u003d\"webkitTransitionEnd\"),void 0\u003d\u003d\u003dwindow.onanimationend\u0026\u0026void 0!\u003d\u003dwindow.onwebkitanimationend\u0026\u0026(Si\u003d\"WebkitAnimation\",Ti\u003d\"webkitAnimationEnd\"));var Ni\u003dV?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ni(function(){Ni(e)})}function ji(e,t){var n\u003de._transitionClasses||(e._transitionClasses\u003d[]);n.indexOf(t)\u003c0\u0026\u0026(n.push(t),_i(e,t))}function Di(e,t){e._transitionClasses\u0026\u0026h(e._transitionClasses,t),bi(e,t)}function Li(e,t,n){var r\u003dMi(e,t),i\u003dr.type,o\u003dr.timeout,a\u003dr.propCount;if(!i)return n();var s\u003di\u003d\u003d\u003dxi?Oi:Ti,c\u003d0,u\u003dfunction(){e.removeEventListener(s,l),n()},l\u003dfunction(t){t.target\u003d\u003d\u003de\u0026\u0026++c\u003e\u003da\u0026\u0026u()};setTimeout(function(){c\u003ca\u0026\u0026u()},o+1),e.addEventListener(s,l)}var Ii\u003d/\\b(transform|all)(,|$)/;function Mi(e,t){var n,r\u003dwindow.getComputedStyle(e),i\u003d(r[Ai+\"Delay\"]||\"\").split(\", \"),o\u003d(r[Ai+\"Duration\"]||\"\").split(\", \"),a\u003dFi(i,o),s\u003d(r[Si+\"Delay\"]||\"\").split(\", \"),c\u003d(r[Si+\"Duration\"]||\"\").split(\", \"),u\u003dFi(s,c),l\u003d0,f\u003d0;return t\u003d\u003d\u003dxi?a\u003e0\u0026\u0026(n\u003dxi,l\u003da,f\u003do.length):t\u003d\u003d\u003dki?u\u003e0\u0026\u0026(n\u003dki,l\u003du,f\u003dc.length):f\u003d(n\u003d(l\u003dMath.max(a,u))\u003e0?a\u003eu?xi:ki:null)?n\u003d\u003d\u003dxi?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n\u003d\u003d\u003dxi\u0026\u0026Ii.test(r[Ai+\"Property\"])}}function Fi(e,t){for(;e.length\u003ct.length;)e\u003de.concat(e);return Math.max.apply(null,t.map(function(t,n){return Pi(t)+Pi(e[n])}))}function Pi(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function Ri(e,r){var i\u003de.elm;n(i._leaveCb)\u0026\u0026(i._leaveCb.cancelled\u003d!0,i._leaveCb());var a\u003d$i(e.data.transition);if(!t(a)\u0026\u0026!n(i._enterCb)\u0026\u00261\u003d\u003d\u003di.nodeType){for(var s\u003da.css,c\u003da.type,u\u003da.enterClass,l\u003da.enterToClass,p\u003da.enterActiveClass,d\u003da.appearClass,v\u003da.appearToClass,h\u003da.appearActiveClass,m\u003da.beforeEnter,y\u003da.enter,g\u003da.afterEnter,_\u003da.enterCancelled,b\u003da.beforeAppear,$\u003da.appear,w\u003da.afterAppear,C\u003da.appearCancelled,x\u003da.duration,k\u003dZt,A\u003dZt.$vnode;A\u0026\u0026A.parent;)k\u003dA.context,A\u003dA.parent;var O\u003d!k._isMounted||!e.isRootInsert;if(!O||$||\"\"\u003d\u003d\u003d$){var S\u003dO\u0026\u0026d?d:u,T\u003dO\u0026\u0026h?h:p,N\u003dO\u0026\u0026v?v:l,E\u003dO\u0026\u0026b||m,j\u003dO\u0026\u0026\"function\"\u003d\u003dtypeof $?$:y,L\u003dO\u0026\u0026w||g,I\u003dO\u0026\u0026C||_,M\u003df(o(x)?x.enter:x),F\u003d!1!\u003d\u003ds\u0026\u0026!W,P\u003dUi(j),R\u003di._enterCb\u003dD(function(){F\u0026\u0026(Di(i,N),Di(i,T)),R.cancelled?(F\u0026\u0026Di(i,S),I\u0026\u0026I(i)):L\u0026\u0026L(i),i._enterCb\u003dnull});e.data.show||ot(e,\"insert\",function(){var t\u003di.parentNode,n\u003dt\u0026\u0026t._pending\u0026\u0026t._pending[e.key];n\u0026\u0026n.tag\u003d\u003d\u003de.tag\u0026\u0026n.elm._leaveCb\u0026\u0026n.elm._leaveCb(),j\u0026\u0026j(i,R)}),E\u0026\u0026E(i),F\u0026\u0026(ji(i,S),ji(i,T),Ei(function(){Di(i,S),R.cancelled||(ji(i,N),P||(Bi(M)?setTimeout(R,M):Li(i,c,R)))})),e.data.show\u0026\u0026(r\u0026\u0026r(),j\u0026\u0026j(i,R)),F||P||R()}}}function Hi(e,r){var i\u003de.elm;n(i._enterCb)\u0026\u0026(i._enterCb.cancelled\u003d!0,i._enterCb());var a\u003d$i(e.data.transition);if(t(a)||1!\u003d\u003di.nodeType)return r();if(!n(i._leaveCb)){var s\u003da.css,c\u003da.type,u\u003da.leaveClass,l\u003da.leaveToClass,p\u003da.leaveActiveClass,d\u003da.beforeLeave,v\u003da.leave,h\u003da.afterLeave,m\u003da.leaveCancelled,y\u003da.delayLeave,g\u003da.duration,_\u003d!1!\u003d\u003ds\u0026\u0026!W,b\u003dUi(v),$\u003df(o(g)?g.leave:g),w\u003di._leaveCb\u003dD(function(){i.parentNode\u0026\u0026i.parentNode._pending\u0026\u0026(i.parentNode._pending[e.key]\u003dnull),_\u0026\u0026(Di(i,l),Di(i,p)),w.cancelled?(_\u0026\u0026Di(i,u),m\u0026\u0026m(i)):(r(),h\u0026\u0026h(i)),i._leaveCb\u003dnull});y?y(C):C()}function C(){w.cancelled||(!e.data.show\u0026\u0026i.parentNode\u0026\u0026((i.parentNode._pending||(i.parentNode._pending\u003d{}))[e.key]\u003de),d\u0026\u0026d(i),_\u0026\u0026(ji(i,u),ji(i,p),Ei(function(){Di(i,u),w.cancelled||(ji(i,l),b||(Bi($)?setTimeout(w,$):Li(i,c,w)))})),v\u0026\u0026v(i,w),_||b||w())}}function Bi(e){return\"number\"\u003d\u003dtypeof e\u0026\u0026!isNaN(e)}function Ui(e){if(t(e))return!1;var r\u003de.fns;return n(r)?Ui(Array.isArray(r)?r[0]:r):(e._length||e.length)\u003e1}function Vi(e,t){!0!\u003d\u003dt.data.show\u0026\u0026Ri(t)}var zi\u003dfunction(e){var o,a,s\u003d{},c\u003de.modules,u\u003de.nodeOps;for(o\u003d0;o\u003cir.length;++o)for(s[ir[o]]\u003d[],a\u003d0;a\u003cc.length;++a)n(c[a][ir[o]])\u0026\u0026s[ir[o]].push(c[a][ir[o]]);function l(e){var t\u003du.parentNode(e);n(t)\u0026\u0026u.removeChild(t,e)}function f(e,t,i,o,a,c,l){if(n(e.elm)\u0026\u0026n(c)\u0026\u0026(e\u003dc[l]\u003dme(e)),e.isRootInsert\u003d!a,!function(e,t,i,o){var a\u003de.data;if(n(a)){var c\u003dn(e.componentInstance)\u0026\u0026a.keepAlive;if(n(a\u003da.hook)\u0026\u0026n(a\u003da.init)\u0026\u0026a(e,!1),n(e.componentInstance))return d(e,t),v(i,e.elm,o),r(c)\u0026\u0026function(e,t,r,i){for(var o,a\u003de;a.componentInstance;)if(a\u003da.componentInstance._vnode,n(o\u003da.data)\u0026\u0026n(o\u003do.transition)){for(o\u003d0;o\u003cs.activate.length;++o)s.activate[o](rr,a);t.push(a);break}v(r,e.elm,i)}(e,t,i,o),!0}}(e,t,i,o)){var f\u003de.data,p\u003de.children,m\u003de.tag;n(m)?(e.elm\u003de.ns?u.createElementNS(e.ns,m):u.createElement(m,e),g(e),h(e,p,t),n(f)\u0026\u0026y(e,t),v(i,e.elm,o)):r(e.isComment)?(e.elm\u003du.createComment(e.text),v(i,e.elm,o)):(e.elm\u003du.createTextNode(e.text),v(i,e.elm,o))}}function d(e,t){n(e.data.pendingInsert)\u0026\u0026(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert\u003dnull),e.elm\u003de.componentInstance.$el,m(e)?(y(e,t),g(e)):(nr(e),t.push(e))}function v(e,t,r){n(e)\u0026\u0026(n(r)?u.parentNode(r)\u003d\u003d\u003de\u0026\u0026u.insertBefore(e,t,r):u.appendChild(e,t))}function h(e,t,n){if(Array.isArray(t))for(var r\u003d0;r\u003ct.length;++r)f(t[r],n,e.elm,null,!0,t,r);else i(e.text)\u0026\u0026u.appendChild(e.elm,u.createTextNode(String(e.text)))}function m(e){for(;e.componentInstance;)e\u003de.componentInstance._vnode;return n(e.tag)}function y(e,t){for(var r\u003d0;r\u003cs.create.length;++r)s.create[r](rr,e);n(o\u003de.data.hook)\u0026\u0026(n(o.create)\u0026\u0026o.create(rr,e),n(o.insert)\u0026\u0026t.push(e))}function g(e){var t;if(n(t\u003de.fnScopeId))u.setStyleScope(e.elm,t);else for(var r\u003de;r;)n(t\u003dr.context)\u0026\u0026n(t\u003dt.$options._scopeId)\u0026\u0026u.setStyleScope(e.elm,t),r\u003dr.parent;n(t\u003dZt)\u0026\u0026t!\u003d\u003de.context\u0026\u0026t!\u003d\u003de.fnContext\u0026\u0026n(t\u003dt.$options._scopeId)\u0026\u0026u.setStyleScope(e.elm,t)}function _(e,t,n,r,i,o){for(;r\u003c\u003di;++r)f(n[r],o,e,t,!1,n,r)}function b(e){var t,r,i\u003de.data;if(n(i))for(n(t\u003di.hook)\u0026\u0026n(t\u003dt.destroy)\u0026\u0026t(e),t\u003d0;t\u003cs.destroy.length;++t)s.destroy[t](e);if(n(t\u003de.children))for(r\u003d0;r\u003ce.children.length;++r)b(e.children[r])}function $(e,t,r){for(;t\u003c\u003dr;++t){var i\u003de[t];n(i)\u0026\u0026(n(i.tag)?(w(i),b(i)):l(i.elm))}}function w(e,t){if(n(t)||n(e.data)){var r,i\u003ds.remove.length+1;for(n(t)?t.listeners+\u003di:t\u003dfunction(e,t){function n(){0\u003d\u003d--n.listeners\u0026\u0026l(e)}return n.listeners\u003dt,n}(e.elm,i),n(r\u003de.componentInstance)\u0026\u0026n(r\u003dr._vnode)\u0026\u0026n(r.data)\u0026\u0026w(r,t),r\u003d0;r\u003cs.remove.length;++r)s.remove[r](e,t);n(r\u003de.data.hook)\u0026\u0026n(r\u003dr.remove)?r(e,t):t()}else l(e.elm)}function C(e,t,r,i){for(var o\u003dr;o\u003ci;o++){var a\u003dt[o];if(n(a)\u0026\u0026or(e,a))return o}}function x(e,i,o,a,c,l){if(e!\u003d\u003di){n(i.elm)\u0026\u0026n(a)\u0026\u0026(i\u003da[c]\u003dme(i));var p\u003di.elm\u003de.elm;if(r(e.isAsyncPlaceholder))n(i.asyncFactory.resolved)?O(e.elm,i,o):i.isAsyncPlaceholder\u003d!0;else if(r(i.isStatic)\u0026\u0026r(e.isStatic)\u0026\u0026i.key\u003d\u003d\u003de.key\u0026\u0026(r(i.isCloned)||r(i.isOnce)))i.componentInstance\u003de.componentInstance;else{var d,v\u003di.data;n(v)\u0026\u0026n(d\u003dv.hook)\u0026\u0026n(d\u003dd.prepatch)\u0026\u0026d(e,i);var h\u003de.children,y\u003di.children;if(n(v)\u0026\u0026m(i)){for(d\u003d0;d\u003cs.update.length;++d)s.update[d](e,i);n(d\u003dv.hook)\u0026\u0026n(d\u003dd.update)\u0026\u0026d(e,i)}t(i.text)?n(h)\u0026\u0026n(y)?h!\u003d\u003dy\u0026\u0026function(e,r,i,o,a){for(var s,c,l,p\u003d0,d\u003d0,v\u003dr.length-1,h\u003dr[0],m\u003dr[v],y\u003di.length-1,g\u003di[0],b\u003di[y],w\u003d!a;p\u003c\u003dv\u0026\u0026d\u003c\u003dy;)t(h)?h\u003dr[++p]:t(m)?m\u003dr[--v]:or(h,g)?(x(h,g,o,i,d),h\u003dr[++p],g\u003di[++d]):or(m,b)?(x(m,b,o,i,y),m\u003dr[--v],b\u003di[--y]):or(h,b)?(x(h,b,o,i,y),w\u0026\u0026u.insertBefore(e,h.elm,u.nextSibling(m.elm)),h\u003dr[++p],b\u003di[--y]):or(m,g)?(x(m,g,o,i,d),w\u0026\u0026u.insertBefore(e,m.elm,h.elm),m\u003dr[--v],g\u003di[++d]):(t(s)\u0026\u0026(s\u003dar(r,p,v)),t(c\u003dn(g.key)?s[g.key]:C(g,r,p,v))?f(g,o,e,h.elm,!1,i,d):or(l\u003dr[c],g)?(x(l,g,o,i,d),r[c]\u003dvoid 0,w\u0026\u0026u.insertBefore(e,l.elm,h.elm)):f(g,o,e,h.elm,!1,i,d),g\u003di[++d]);p\u003ev?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d\u003ey\u0026\u0026$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)\u0026\u0026u.setTextContent(p,\"\"),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)\u0026\u0026u.setTextContent(p,\"\"):e.text!\u003d\u003di.text\u0026\u0026u.setTextContent(p,i.text),n(v)\u0026\u0026n(d\u003dv.hook)\u0026\u0026n(d\u003dd.postpatch)\u0026\u0026d(e,i)}}}function k(e,t,i){if(r(i)\u0026\u0026n(e.parent))e.parent.data.pendingInsert\u003dt;else for(var o\u003d0;o\u003ct.length;++o)t[o].data.hook.insert(t[o])}var A\u003dp(\"attrs,class,staticClass,staticStyle,key\");function O(e,t,i,o){var a,s\u003dt.tag,c\u003dt.data,u\u003dt.children;if(o\u003do||c\u0026\u0026c.pre,t.elm\u003de,r(t.isComment)\u0026\u0026n(t.asyncFactory))return t.isAsyncPlaceholder\u003d!0,!0;if(n(c)\u0026\u0026(n(a\u003dc.hook)\u0026\u0026n(a\u003da.init)\u0026\u0026a(t,!0),n(a\u003dt.componentInstance)))return d(t,i),!0;if(n(s)){if(n(u))if(e.hasChildNodes())if(n(a\u003dc)\u0026\u0026n(a\u003da.domProps)\u0026\u0026n(a\u003da.innerHTML)){if(a!\u003d\u003de.innerHTML)return!1}else{for(var l\u003d!0,f\u003de.firstChild,p\u003d0;p\u003cu.length;p++){if(!f||!O(f,u[p],i,o)){l\u003d!1;break}f\u003df.nextSibling}if(!l||f)return!1}else h(t,u,i);if(n(c)){var v\u003d!1;for(var m in c)if(!A(m)){v\u003d!0,y(t,i);break}!v\u0026\u0026c.class\u0026\u0026tt(c.class)}}else e.data!\u003d\u003dt.text\u0026\u0026(e.data\u003dt.text);return!0}return function(e,i,o,a){if(!t(i)){var c,l\u003d!1,p\u003d[];if(t(e))l\u003d!0,f(i,p);else{var d\u003dn(e.nodeType);if(!d\u0026\u0026or(e,i))x(e,i,p,null,null,a);else{if(d){if(1\u003d\u003d\u003de.nodeType\u0026\u0026e.hasAttribute(L)\u0026\u0026(e.removeAttribute(L),o\u003d!0),r(o)\u0026\u0026O(e,i,p))return k(i,p,!0),e;c\u003de,e\u003dnew pe(u.tagName(c).toLowerCase(),{},[],void 0,c)}var v\u003de.elm,h\u003du.parentNode(v);if(f(i,p,v._leaveCb?null:h,u.nextSibling(v)),n(i.parent))for(var y\u003di.parent,g\u003dm(i);y;){for(var _\u003d0;_\u003cs.destroy.length;++_)s.destroy[_](y);if(y.elm\u003di.elm,g){for(var w\u003d0;w\u003cs.create.length;++w)s.create[w](rr,y);var C\u003dy.data.hook.insert;if(C.merged)for(var A\u003d1;A\u003cC.fns.length;A++)C.fns[A]()}else nr(y);y\u003dy.parent}n(h)?$([e],0,0):n(e.tag)\u0026\u0026b(e)}}return k(i,p,l),i.elm}n(e)\u0026\u0026b(e)}}({nodeOps:er,modules:[yr,kr,ri,ai,yi,V?{create:Vi,activate:Vi,remove:function(e,t){!0!\u003d\u003de.data.show?Hi(e,t):t()}}:{}].concat(dr)});W\u0026\u0026document.addEventListener(\"selectionchange\",function(){var e\u003ddocument.activeElement;e\u0026\u0026e.vmodel\u0026\u0026Yi(e,\"input\")});var Ki\u003d{inserted:function(e,t,n,r){\"select\"\u003d\u003d\u003dn.tag?(r.elm\u0026\u0026!r.elm._vOptions?ot(n,\"postpatch\",function(){Ki.componentUpdated(e,t,n)}):Ji(e,t,n.context),e._vOptions\u003d[].map.call(e.options,Zi)):(\"textarea\"\u003d\u003d\u003dn.tag||Yn(e.type))\u0026\u0026(e._vModifiers\u003dt.modifiers,t.modifiers.lazy||(e.addEventListener(\"compositionstart\",Gi),e.addEventListener(\"compositionend\",Xi),e.addEventListener(\"change\",Xi),W\u0026\u0026(e.vmodel\u003d!0)))},componentUpdated:function(e,t,n){if(\"select\"\u003d\u003d\u003dn.tag){Ji(e,t,n.context);var r\u003de._vOptions,i\u003de._vOptions\u003d[].map.call(e.options,Zi);if(i.some(function(e,t){return!E(e,r[t])}))(e.multiple?t.value.some(function(e){return Wi(e,i)}):t.value!\u003d\u003dt.oldValue\u0026\u0026Wi(t.value,i))\u0026\u0026Yi(e,\"change\")}}};function Ji(e,t,n){qi(e,t,n),(q||Z)\u0026\u0026setTimeout(function(){qi(e,t,n)},0)}function qi(e,t,n){var r\u003dt.value,i\u003de.multiple;if(!i||Array.isArray(r)){for(var o,a,s\u003d0,c\u003de.options.length;s\u003cc;s++)if(a\u003de.options[s],i)o\u003dj(r,Zi(a))\u003e-1,a.selected!\u003d\u003do\u0026\u0026(a.selected\u003do);else if(E(Zi(a),r))return void(e.selectedIndex!\u003d\u003ds\u0026\u0026(e.selectedIndex\u003ds));i||(e.selectedIndex\u003d-1)}}function Wi(e,t){return t.every(function(t){return!E(t,e)})}function Zi(e){return\"_value\"in e?e._value:e.value}function Gi(e){e.target.composing\u003d!0}function Xi(e){e.target.composing\u0026\u0026(e.target.composing\u003d!1,Yi(e.target,\"input\"))}function Yi(e,t){var n\u003ddocument.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Qi(e){return!e.componentInstance||e.data\u0026\u0026e.data.transition?e:Qi(e.componentInstance._vnode)}var eo\u003d{model:Ki,show:{bind:function(e,t,n){var r\u003dt.value,i\u003d(n\u003dQi(n)).data\u0026\u0026n.data.transition,o\u003de.__vOriginalDisplay\u003d\"none\"\u003d\u003d\u003de.style.display?\"\":e.style.display;r\u0026\u0026i?(n.data.show\u003d!0,Ri(n,function(){e.style.display\u003do})):e.style.display\u003dr?o:\"none\"},update:function(e,t,n){var r\u003dt.value;!r!\u003d!t.oldValue\u0026\u0026((n\u003dQi(n)).data\u0026\u0026n.data.transition?(n.data.show\u003d!0,r?Ri(n,function(){e.style.display\u003de.__vOriginalDisplay}):Hi(n,function(){e.style.display\u003d\"none\"})):e.style.display\u003dr?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,r,i){i||(e.style.display\u003de.__vOriginalDisplay)}}},to\u003d{name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function no(e){var t\u003de\u0026\u0026e.componentOptions;return t\u0026\u0026t.Ctor.options.abstract?no(zt(t.children)):e}function ro(e){var t\u003d{},n\u003de.$options;for(var r in n.propsData)t[r]\u003de[r];var i\u003dn._parentListeners;for(var o in i)t[b(o)]\u003di[o];return t}function io(e,t){if(/\\d-keep-alive$/.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}var oo\u003dfunction(e){return e.tag||pt(e)},ao\u003dfunction(e){return\"show\"\u003d\u003d\u003de.name},so\u003d{name:\"transition\",props:to,abstract:!0,render:function(e){var t\u003dthis,n\u003dthis.$slots.default;if(n\u0026\u0026(n\u003dn.filter(oo)).length){var r\u003dthis.mode,o\u003dn[0];if(function(e){for(;e\u003de.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a\u003dno(o);if(!a)return o;if(this._leaving)return io(e,o);var s\u003d\"__transition-\"+this._uid+\"-\";a.key\u003dnull\u003d\u003da.key?a.isComment?s+\"comment\":s+a.tag:i(a.key)?0\u003d\u003d\u003dString(a.key).indexOf(s)?a.key:s+a.key:a.key;var c\u003d(a.data||(a.data\u003d{})).transition\u003dro(this),u\u003dthis._vnode,l\u003dno(u);if(a.data.directives\u0026\u0026a.data.directives.some(ao)\u0026\u0026(a.data.show\u003d!0),l\u0026\u0026l.data\u0026\u0026!function(e,t){return t.key\u003d\u003d\u003de.key\u0026\u0026t.tag\u003d\u003d\u003de.tag}(a,l)\u0026\u0026!pt(l)\u0026\u0026(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f\u003dl.data.transition\u003dA({},c);if(\"out-in\"\u003d\u003d\u003dr)return this._leaving\u003d!0,ot(f,\"afterLeave\",function(){t._leaving\u003d!1,t.$forceUpdate()}),io(e,o);if(\"in-out\"\u003d\u003d\u003dr){if(pt(a))return u;var p,d\u003dfunction(){p()};ot(c,\"afterEnter\",d),ot(c,\"enterCancelled\",d),ot(f,\"delayLeave\",function(e){p\u003de})}}return o}}},co\u003dA({tag:String,moveClass:String},to);function uo(e){e.elm._moveCb\u0026\u0026e.elm._moveCb(),e.elm._enterCb\u0026\u0026e.elm._enterCb()}function lo(e){e.data.newPos\u003de.elm.getBoundingClientRect()}function fo(e){var t\u003de.data.pos,n\u003de.data.newPos,r\u003dt.left-n.left,i\u003dt.top-n.top;if(r||i){e.data.moved\u003d!0;var o\u003de.elm.style;o.transform\u003do.WebkitTransform\u003d\"translate(\"+r+\"px,\"+i+\"px)\",o.transitionDuration\u003d\"0s\"}}delete co.mode;var po\u003d{Transition:so,TransitionGroup:{props:co,beforeMount:function(){var e\u003dthis,t\u003dthis._update;this._update\u003dfunction(n,r){var i\u003dGt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode\u003de.kept,i(),t.call(e,n,r)}},render:function(e){for(var t\u003dthis.tag||this.$vnode.data.tag||\"span\",n\u003dObject.create(null),r\u003dthis.prevChildren\u003dthis.children,i\u003dthis.$slots.default||[],o\u003dthis.children\u003d[],a\u003dro(this),s\u003d0;s\u003ci.length;s++){var c\u003di[s];c.tag\u0026\u0026null!\u003dc.key\u0026\u00260!\u003d\u003dString(c.key).indexOf(\"__vlist\")\u0026\u0026(o.push(c),n[c.key]\u003dc,(c.data||(c.data\u003d{})).transition\u003da)}if(r){for(var u\u003d[],l\u003d[],f\u003d0;f\u003cr.length;f++){var p\u003dr[f];p.data.transition\u003da,p.data.pos\u003dp.elm.getBoundingClientRect(),n[p.key]?u.push(p):l.push(p)}this.kept\u003de(t,null,u),this.removed\u003dl}return e(t,null,o)},updated:function(){var e\u003dthis.prevChildren,t\u003dthis.moveClass||(this.name||\"v\")+\"-move\";e.length\u0026\u0026this.hasMove(e[0].elm,t)\u0026\u0026(e.forEach(uo),e.forEach(lo),e.forEach(fo),this._reflow\u003ddocument.body.offsetHeight,e.forEach(function(e){if(e.data.moved){var n\u003de.elm,r\u003dn.style;ji(n,t),r.transform\u003dr.WebkitTransform\u003dr.transitionDuration\u003d\"\",n.addEventListener(Oi,n._moveCb\u003dfunction e(r){r\u0026\u0026r.target!\u003d\u003dn||r\u0026\u0026!/transform$/.test(r.propertyName)||(n.removeEventListener(Oi,e),n._moveCb\u003dnull,Di(n,t))})}}))},methods:{hasMove:function(e,t){if(!Ci)return!1;if(this._hasMove)return this._hasMove;var n\u003de.cloneNode();e._transitionClasses\u0026\u0026e._transitionClasses.forEach(function(e){bi(n,e)}),_i(n,t),n.style.display\u003d\"none\",this.$el.appendChild(n);var r\u003dMi(n);return this.$el.removeChild(n),this._hasMove\u003dr.hasTransform}}}};Cn.config.mustUseProp\u003dDn,Cn.config.isReservedTag\u003dZn,Cn.config.isReservedAttr\u003dEn,Cn.config.getTagNamespace\u003dGn,Cn.config.isUnknownElement\u003dfunction(e){if(!V)return!0;if(Zn(e))return!1;if(e\u003de.toLowerCase(),null!\u003dXn[e])return Xn[e];var t\u003ddocument.createElement(e);return e.indexOf(\"-\")\u003e-1?Xn[e]\u003dt.constructor\u003d\u003d\u003dwindow.HTMLUnknownElement||t.constructor\u003d\u003d\u003dwindow.HTMLElement:Xn[e]\u003d/HTMLUnknownElement/.test(t.toString())},A(Cn.options.directives,eo),A(Cn.options.components,po),Cn.prototype.__patch__\u003dV?zi:S,Cn.prototype.$mount\u003dfunction(e,t){return function(e,t,n){var r;return e.$el\u003dt,e.$options.render||(e.$options.render\u003dve),Qt(e,\"beforeMount\"),r\u003dfunction(){e._update(e._render(),n)},new pn(e,r,S,{before:function(){e._isMounted\u0026\u0026!e._isDestroyed\u0026\u0026Qt(e,\"beforeUpdate\")}},!0),n\u003d!1,null\u003d\u003de.$vnode\u0026\u0026(e._isMounted\u003d!0,Qt(e,\"mounted\")),e}(this,e\u003de\u0026\u0026V?Qn(e):void 0,t)},V\u0026\u0026setTimeout(function(){F.devtools\u0026\u0026ne\u0026\u0026ne.emit(\"init\",Cn)},0);var vo\u003d/\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,ho\u003d/[-.*+?^${}()|[\\]\\/\\\\]/g,mo\u003dg(function(e){var t\u003de[0].replace(ho,\"\\\\$\u0026\"),n\u003de[1].replace(ho,\"\\\\$\u0026\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+n,\"g\")});var yo\u003d{staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;var n\u003dPr(e,\"class\");n\u0026\u0026(e.staticClass\u003dJSON.stringify(n));var r\u003dFr(e,\"class\",!1);r\u0026\u0026(e.classBinding\u003dr)},genData:function(e){var t\u003d\"\";return e.staticClass\u0026\u0026(t+\u003d\"staticClass:\"+e.staticClass+\",\"),e.classBinding\u0026\u0026(t+\u003d\"class:\"+e.classBinding+\",\"),t}};var go,_o\u003d{staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;var n\u003dPr(e,\"style\");n\u0026\u0026(e.staticStyle\u003dJSON.stringify(si(n)));var r\u003dFr(e,\"style\",!1);r\u0026\u0026(e.styleBinding\u003dr)},genData:function(e){var t\u003d\"\";return e.staticStyle\u0026\u0026(t+\u003d\"staticStyle:\"+e.staticStyle+\",\"),e.styleBinding\u0026\u0026(t+\u003d\"style:(\"+e.styleBinding+\"),\"),t}},bo\u003dfunction(e){return(go\u003dgo||document.createElement(\"div\")).innerHTML\u003de,go.textContent},$o\u003dp(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),wo\u003dp(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),Co\u003dp(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),xo\u003d/^\\s*([^\\s\"\u0027\u003c\u003e\\/\u003d]+)(?:\\s*(\u003d)\\s*(?:\"([^\"]*)\"+|\u0027([^\u0027]*)\u0027+|([^\\s\"\u0027\u003d\u003c\u003e`]+)))?/,ko\u003d/^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^\u003d]+?\\][^\\s\"\u0027\u003c\u003e\\/\u003d]*)(?:\\s*(\u003d)\\s*(?:\"([^\"]*)\"+|\u0027([^\u0027]*)\u0027+|([^\\s\"\u0027\u003d\u003c\u003e`]+)))?/,Ao\u003d\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\"+P.source+\"]*\",Oo\u003d\"((?:\"+Ao+\"\\\\:)?\"+Ao+\")\",So\u003dnew RegExp(\"^\u003c\"+Oo),To\u003d/^\\s*(\\/?)\u003e/,No\u003dnew RegExp(\"^\u003c\\\\/\"+Oo+\"[^\u003e]*\u003e\"),Eo\u003d/^\u003c!DOCTYPE [^\u003e]+\u003e/i,jo\u003d/^\u003c!\\--/,Do\u003d/^\u003c!\\[/,Lo\u003dp(\"script,style,textarea\",!0),Io\u003d{},Mo\u003d{\"\u0026lt;\":\"\u003c\",\"\u0026gt;\":\"\u003e\",\"\u0026quot;\":\u0027\"\u0027,\"\u0026amp;\":\"\u0026\",\"\u0026#10;\":\"\\n\",\"\u0026#9;\":\"\\t\",\"\u0026#39;\":\"\u0027\"},Fo\u003d/\u0026(?:lt|gt|quot|amp|#39);/g,Po\u003d/\u0026(?:lt|gt|quot|amp|#39|#10|#9);/g,Ro\u003dp(\"pre,textarea\",!0),Ho\u003dfunction(e,t){return e\u0026\u0026Ro(e)\u0026\u0026\"\\n\"\u003d\u003d\u003dt[0]};function Bo(e,t){var n\u003dt?Po:Fo;return e.replace(n,function(e){return Mo[e]})}var Uo,Vo,zo,Ko,Jo,qo,Wo,Zo,Go\u003d/^@|^v-on:/,Xo\u003d/^v-|^@|^:|^#/,Yo\u003d/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,Qo\u003d/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,ea\u003d/^\\(|\\)$/g,ta\u003d/^\\[.*\\]$/,na\u003d/:(.*)$/,ra\u003d/^:|^\\.|^v-bind:/,ia\u003d/\\.[^.\\]]+(?\u003d[^\\]]*$)/g,oa\u003d/^v-slot(:|$)|^#/,aa\u003d/[\\r\\n]/,sa\u003d/[ \\f\\t\\r\\n]+/g,ca\u003dg(bo),ua\u003d\"_empty_\";function la(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ya(t),rawAttrsMap:{},parent:n,children:[]}}function fa(e,t){Uo\u003dt.warn||Tr,qo\u003dt.isPreTag||T,Wo\u003dt.mustUseProp||T,Zo\u003dt.getTagNamespace||T;t.isReservedTag;zo\u003dNr(t.modules,\"transformNode\"),Ko\u003dNr(t.modules,\"preTransformNode\"),Jo\u003dNr(t.modules,\"postTransformNode\"),Vo\u003dt.delimiters;var n,r,i\u003d[],o\u003d!1!\u003d\u003dt.preserveWhitespace,a\u003dt.whitespace,s\u003d!1,c\u003d!1;function u(e){if(l(e),s||e.processed||(e\u003dpa(e,t)),i.length||e\u003d\u003d\u003dn||n.if\u0026\u0026(e.elseif||e.else)\u0026\u0026va(n,{exp:e.elseif,block:e}),r\u0026\u0026!e.forbidden)if(e.elseif||e.else)a\u003de,(u\u003dfunction(e){var t\u003de.length;for(;t--;){if(1\u003d\u003d\u003de[t].type)return e[t];e.pop()}}(r.children))\u0026\u0026u.if\u0026\u0026va(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o\u003de.slotTarget||\u0027\"default\"\u0027;(r.scopedSlots||(r.scopedSlots\u003d{}))[o]\u003de}r.children.push(e),e.parent\u003dr}var a,u;e.children\u003de.children.filter(function(e){return!e.slotScope}),l(e),e.pre\u0026\u0026(s\u003d!1),qo(e.tag)\u0026\u0026(c\u003d!1);for(var f\u003d0;f\u003cJo.length;f++)Jo[f](e,t)}function l(e){if(!c)for(var t;(t\u003de.children[e.children.length-1])\u0026\u00263\u003d\u003d\u003dt.type\u0026\u0026\" \"\u003d\u003d\u003dt.text;)e.children.pop()}return function(e,t){for(var n,r,i\u003d[],o\u003dt.expectHTML,a\u003dt.isUnaryTag||T,s\u003dt.canBeLeftOpenTag||T,c\u003d0;e;){if(n\u003de,r\u0026\u0026Lo(r)){var u\u003d0,l\u003dr.toLowerCase(),f\u003dIo[l]||(Io[l]\u003dnew RegExp(\"([\\\\s\\\\S]*?)(\u003c/\"+l+\"[^\u003e]*\u003e)\",\"i\")),p\u003de.replace(f,function(e,n,r){return u\u003dr.length,Lo(l)||\"noscript\"\u003d\u003d\u003dl||(n\u003dn.replace(/\u003c!\\--([\\s\\S]*?)--\u003e/g,\"$1\").replace(/\u003c!\\[CDATA\\[([\\s\\S]*?)]]\u003e/g,\"$1\")),Ho(l,n)\u0026\u0026(n\u003dn.slice(1)),t.chars\u0026\u0026t.chars(n),\"\"});c+\u003de.length-p.length,e\u003dp,A(l,c-u,c)}else{var d\u003de.indexOf(\"\u003c\");if(0\u003d\u003d\u003dd){if(jo.test(e)){var v\u003de.indexOf(\"--\\x3e\");if(v\u003e\u003d0){t.shouldKeepComment\u0026\u0026t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(Do.test(e)){var h\u003de.indexOf(\"]\u003e\");if(h\u003e\u003d0){C(h+2);continue}}var m\u003de.match(Eo);if(m){C(m[0].length);continue}var y\u003de.match(No);if(y){var g\u003dc;C(y[0].length),A(y[1],g,c);continue}var _\u003dx();if(_){k(_),Ho(_.tagName,e)\u0026\u0026C(1);continue}}var b\u003dvoid 0,$\u003dvoid 0,w\u003dvoid 0;if(d\u003e\u003d0){for($\u003de.slice(d);!(No.test($)||So.test($)||jo.test($)||Do.test($)||(w\u003d$.indexOf(\"\u003c\",1))\u003c0);)d+\u003dw,$\u003de.slice(d);b\u003de.substring(0,d)}d\u003c0\u0026\u0026(b\u003de),b\u0026\u0026C(b.length),t.chars\u0026\u0026b\u0026\u0026t.chars(b,c-b.length,c)}if(e\u003d\u003d\u003dn){t.chars\u0026\u0026t.chars(e);break}}function C(t){c+\u003dt,e\u003de.substring(t)}function x(){var t\u003de.match(So);if(t){var n,r,i\u003d{tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n\u003de.match(To))\u0026\u0026(r\u003de.match(ko)||e.match(xo));)r.start\u003dc,C(r[0].length),r.end\u003dc,i.attrs.push(r);if(n)return i.unarySlash\u003dn[1],C(n[0].length),i.end\u003dc,i}}function k(e){var n\u003de.tagName,c\u003de.unarySlash;o\u0026\u0026(\"p\"\u003d\u003d\u003dr\u0026\u0026Co(n)\u0026\u0026A(r),s(n)\u0026\u0026r\u003d\u003d\u003dn\u0026\u0026A(n));for(var u\u003da(n)||!!c,l\u003de.attrs.length,f\u003dnew Array(l),p\u003d0;p\u003cl;p++){var d\u003de.attrs[p],v\u003dd[3]||d[4]||d[5]||\"\",h\u003d\"a\"\u003d\u003d\u003dn\u0026\u0026\"href\"\u003d\u003d\u003dd[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;f[p]\u003d{name:d[1],value:Bo(v,h)}}u||(i.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:f,start:e.start,end:e.end}),r\u003dn),t.start\u0026\u0026t.start(n,f,u,e.start,e.end)}function A(e,n,o){var a,s;if(null\u003d\u003dn\u0026\u0026(n\u003dc),null\u003d\u003do\u0026\u0026(o\u003dc),e)for(s\u003de.toLowerCase(),a\u003di.length-1;a\u003e\u003d0\u0026\u0026i[a].lowerCasedTag!\u003d\u003ds;a--);else a\u003d0;if(a\u003e\u003d0){for(var u\u003di.length-1;u\u003e\u003da;u--)t.end\u0026\u0026t.end(i[u].tag,n,o);i.length\u003da,r\u003da\u0026\u0026i[a-1].tag}else\"br\"\u003d\u003d\u003ds?t.start\u0026\u0026t.start(e,[],!0,n,o):\"p\"\u003d\u003d\u003ds\u0026\u0026(t.start\u0026\u0026t.start(e,[],!1,n,o),t.end\u0026\u0026t.end(e,n,o))}A()}(e,{warn:Uo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p\u003dr\u0026\u0026r.ns||Zo(e);q\u0026\u0026\"svg\"\u003d\u003d\u003dp\u0026\u0026(o\u003dfunction(e){for(var t\u003d[],n\u003d0;n\u003ce.length;n++){var r\u003de[n];ga.test(r.name)||(r.name\u003dr.name.replace(_a,\"\"),t.push(r))}return t}(o));var d,v\u003dla(e,o,r);p\u0026\u0026(v.ns\u003dp),\"style\"!\u003d\u003d(d\u003dv).tag\u0026\u0026(\"script\"!\u003d\u003dd.tag||d.attrsMap.type\u0026\u0026\"text/javascript\"!\u003d\u003dd.attrsMap.type)||te()||(v.forbidden\u003d!0);for(var h\u003d0;h\u003cKo.length;h++)v\u003dKo[h](v,t)||v;s||(!function(e){null!\u003dPr(e,\"v-pre\")\u0026\u0026(e.pre\u003d!0)}(v),v.pre\u0026\u0026(s\u003d!0)),qo(v.tag)\u0026\u0026(c\u003d!0),s?function(e){var t\u003de.attrsList,n\u003dt.length;if(n)for(var r\u003de.attrs\u003dnew Array(n),i\u003d0;i\u003cn;i++)r[i]\u003d{name:t[i].name,value:JSON.stringify(t[i].value)},null!\u003dt[i].start\u0026\u0026(r[i].start\u003dt[i].start,r[i].end\u003dt[i].end);else e.pre||(e.plain\u003d!0)}(v):v.processed||(da(v),function(e){var t\u003dPr(e,\"v-if\");if(t)e.if\u003dt,va(e,{exp:t,block:e});else{null!\u003dPr(e,\"v-else\")\u0026\u0026(e.else\u003d!0);var n\u003dPr(e,\"v-else-if\");n\u0026\u0026(e.elseif\u003dn)}}(v),function(e){null!\u003dPr(e,\"v-once\")\u0026\u0026(e.once\u003d!0)}(v)),n||(n\u003dv),a?u(v):(r\u003dv,i.push(v))},end:function(e,t,n){var o\u003di[i.length-1];i.length-\u003d1,r\u003di[i.length-1],u(o)},chars:function(e,t,n){if(r\u0026\u0026(!q||\"textarea\"!\u003d\u003dr.tag||r.attrsMap.placeholder!\u003d\u003de)){var i,u,l,f\u003dr.children;if(e\u003dc||e.trim()?\"script\"\u003d\u003d\u003d(i\u003dr).tag||\"style\"\u003d\u003d\u003di.tag?e:ca(e):f.length?a?\"condense\"\u003d\u003d\u003da\u0026\u0026aa.test(e)?\"\":\" \":o?\" \":\"\":\"\")c||\"condense\"!\u003d\u003da||(e\u003de.replace(sa,\" \")),!s\u0026\u0026\" \"!\u003d\u003de\u0026\u0026(u\u003dfunction(e,t){var n\u003dt?mo(t):vo;if(n.test(e)){for(var r,i,o,a\u003d[],s\u003d[],c\u003dn.lastIndex\u003d0;r\u003dn.exec(e);){(i\u003dr.index)\u003ec\u0026\u0026(s.push(o\u003de.slice(c,i)),a.push(JSON.stringify(o)));var u\u003dOr(r[1].trim());a.push(\"_s(\"+u+\")\"),s.push({\"@binding\":u}),c\u003di+r[0].length}return c\u003ce.length\u0026\u0026(s.push(o\u003de.slice(c)),a.push(JSON.stringify(o))),{expression:a.join(\"+\"),tokens:s}}}(e,Vo))?l\u003d{type:2,expression:u.expression,tokens:u.tokens,text:e}:\" \"\u003d\u003d\u003de\u0026\u0026f.length\u0026\u0026\" \"\u003d\u003d\u003df[f.length-1].text||(l\u003d{type:3,text:e}),l\u0026\u0026f.push(l)}},comment:function(e,t,n){if(r){var i\u003d{type:3,text:e,isComment:!0};r.children.push(i)}}}),n}function pa(e,t){var n,r;(r\u003dFr(n\u003de,\"key\"))\u0026\u0026(n.key\u003dr),e.plain\u003d!e.key\u0026\u0026!e.scopedSlots\u0026\u0026!e.attrsList.length,function(e){var t\u003dFr(e,\"ref\");t\u0026\u0026(e.ref\u003dt,e.refInFor\u003dfunction(e){var t\u003de;for(;t;){if(void 0!\u003d\u003dt.for)return!0;t\u003dt.parent}return!1}(e))}(e),function(e){var t;\"template\"\u003d\u003d\u003de.tag?(t\u003dPr(e,\"scope\"),e.slotScope\u003dt||Pr(e,\"slot-scope\")):(t\u003dPr(e,\"slot-scope\"))\u0026\u0026(e.slotScope\u003dt);var n\u003dFr(e,\"slot\");n\u0026\u0026(e.slotTarget\u003d\u0027\"\"\u0027\u003d\u003d\u003dn?\u0027\"default\"\u0027:n,e.slotTargetDynamic\u003d!(!e.attrsMap[\":slot\"]\u0026\u0026!e.attrsMap[\"v-bind:slot\"]),\"template\"\u003d\u003d\u003de.tag||e.slotScope||jr(e,\"slot\",n,function(e,t){return e.rawAttrsMap[\":\"+t]||e.rawAttrsMap[\"v-bind:\"+t]||e.rawAttrsMap[t]}(e,\"slot\")));if(\"template\"\u003d\u003d\u003de.tag){var r\u003dRr(e,oa);if(r){var i\u003dha(r),o\u003di.name,a\u003di.dynamic;e.slotTarget\u003do,e.slotTargetDynamic\u003da,e.slotScope\u003dr.value||ua}}else{var s\u003dRr(e,oa);if(s){var c\u003de.scopedSlots||(e.scopedSlots\u003d{}),u\u003dha(s),l\u003du.name,f\u003du.dynamic,p\u003dc[l]\u003dla(\"template\",[],e);p.slotTarget\u003dl,p.slotTargetDynamic\u003df,p.children\u003de.children.filter(function(e){if(!e.slotScope)return e.parent\u003dp,!0}),p.slotScope\u003ds.value||ua,e.children\u003d[],e.plain\u003d!1}}}(e),function(e){\"slot\"\u003d\u003d\u003de.tag\u0026\u0026(e.slotName\u003dFr(e,\"name\"))}(e),function(e){var t;(t\u003dFr(e,\"is\"))\u0026\u0026(e.component\u003dt);null!\u003dPr(e,\"inline-template\")\u0026\u0026(e.inlineTemplate\u003d!0)}(e);for(var i\u003d0;i\u003czo.length;i++)e\u003dzo[i](e,t)||e;return function(e){var t,n,r,i,o,a,s,c,u\u003de.attrsList;for(t\u003d0,n\u003du.length;t\u003cn;t++)if(r\u003di\u003du[t].name,o\u003du[t].value,Xo.test(r))if(e.hasBindings\u003d!0,(a\u003dma(r.replace(Xo,\"\")))\u0026\u0026(r\u003dr.replace(ia,\"\")),ra.test(r))r\u003dr.replace(ra,\"\"),o\u003dOr(o),(c\u003dta.test(r))\u0026\u0026(r\u003dr.slice(1,-1)),a\u0026\u0026(a.prop\u0026\u0026!c\u0026\u0026\"innerHtml\"\u003d\u003d\u003d(r\u003db(r))\u0026\u0026(r\u003d\"innerHTML\"),a.camel\u0026\u0026!c\u0026\u0026(r\u003db(r)),a.sync\u0026\u0026(s\u003dUr(o,\"$event\"),c?Mr(e,\u0027\"update:\"+(\u0027+r+\")\",s,null,!1,0,u[t],!0):(Mr(e,\"update:\"+b(r),s,null,!1,0,u[t]),C(r)!\u003d\u003db(r)\u0026\u0026Mr(e,\"update:\"+C(r),s,null,!1,0,u[t])))),a\u0026\u0026a.prop||!e.component\u0026\u0026Wo(e.tag,e.attrsMap.type,r)?Er(e,r,o,u[t],c):jr(e,r,o,u[t],c);else if(Go.test(r))r\u003dr.replace(Go,\"\"),(c\u003dta.test(r))\u0026\u0026(r\u003dr.slice(1,-1)),Mr(e,r,o,a,!1,0,u[t],c);else{var l\u003d(r\u003dr.replace(Xo,\"\")).match(na),f\u003dl\u0026\u0026l[1];c\u003d!1,f\u0026\u0026(r\u003dr.slice(0,-(f.length+1)),ta.test(f)\u0026\u0026(f\u003df.slice(1,-1),c\u003d!0)),Lr(e,r,i,o,f,c,a,u[t])}else jr(e,r,JSON.stringify(o),u[t]),!e.component\u0026\u0026\"muted\"\u003d\u003d\u003dr\u0026\u0026Wo(e.tag,e.attrsMap.type,r)\u0026\u0026Er(e,r,\"true\",u[t])}(e),e}function da(e){var t;if(t\u003dPr(e,\"v-for\")){var n\u003dfunction(e){var t\u003de.match(Yo);if(!t)return;var n\u003d{};n.for\u003dt[2].trim();var r\u003dt[1].trim().replace(ea,\"\"),i\u003dr.match(Qo);i?(n.alias\u003dr.replace(Qo,\"\").trim(),n.iterator1\u003di[1].trim(),i[2]\u0026\u0026(n.iterator2\u003di[2].trim())):n.alias\u003dr;return n}(t);n\u0026\u0026A(e,n)}}function va(e,t){e.ifConditions||(e.ifConditions\u003d[]),e.ifConditions.push(t)}function ha(e){var t\u003de.name.replace(oa,\"\");return t||\"#\"!\u003d\u003de.name[0]\u0026\u0026(t\u003d\"default\"),ta.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:\u0027\"\u0027+t+\u0027\"\u0027,dynamic:!1}}function ma(e){var t\u003de.match(ia);if(t){var n\u003d{};return t.forEach(function(e){n[e.slice(1)]\u003d!0}),n}}function ya(e){for(var t\u003d{},n\u003d0,r\u003de.length;n\u003cr;n++)t[e[n].name]\u003de[n].value;return t}var ga\u003d/^xmlns:NS\\d+/,_a\u003d/^NS\\d+:/;function ba(e){return la(e.tag,e.attrsList.slice(),e.parent)}var $a\u003d[yo,_o,{preTransformNode:function(e,t){if(\"input\"\u003d\u003d\u003de.tag){var n,r\u003de.attrsMap;if(!r[\"v-model\"])return;if((r[\":type\"]||r[\"v-bind:type\"])\u0026\u0026(n\u003dFr(e,\"type\")),r.type||n||!r[\"v-bind\"]||(n\u003d\"(\"+r[\"v-bind\"]+\").type\"),n){var i\u003dPr(e,\"v-if\",!0),o\u003di?\"\u0026\u0026(\"+i+\")\":\"\",a\u003dnull!\u003dPr(e,\"v-else\",!0),s\u003dPr(e,\"v-else-if\",!0),c\u003dba(e);da(c),Dr(c,\"type\",\"checkbox\"),pa(c,t),c.processed\u003d!0,c.if\u003d\"(\"+n+\")\u003d\u003d\u003d\u0027checkbox\u0027\"+o,va(c,{exp:c.if,block:c});var u\u003dba(e);Pr(u,\"v-for\",!0),Dr(u,\"type\",\"radio\"),pa(u,t),va(c,{exp:\"(\"+n+\")\u003d\u003d\u003d\u0027radio\u0027\"+o,block:u});var l\u003dba(e);return Pr(l,\"v-for\",!0),Dr(l,\":type\",n),pa(l,t),va(c,{exp:i,block:l}),a?c.else\u003d!0:s\u0026\u0026(c.elseif\u003ds),c}}}}];var wa,Ca,xa\u003d{expectHTML:!0,modules:$a,directives:{model:function(e,t,n){var r\u003dt.value,i\u003dt.modifiers,o\u003de.tag,a\u003de.attrsMap.type;if(e.component)return Br(e,r,i),!1;if(\"select\"\u003d\u003d\u003do)!function(e,t,n){var r\u003d\u0027var $$selectedVal \u003d Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val \u003d \"_value\" in o ? o._value : o.value;return \u0027+(n\u0026\u0026n.number?\"_n(val)\":\"val\")+\"});\";r\u003dr+\" \"+Ur(t,\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),Mr(e,\"change\",r,null,!0)}(e,r,i);else if(\"input\"\u003d\u003d\u003do\u0026\u0026\"checkbox\"\u003d\u003d\u003da)!function(e,t,n){var r\u003dn\u0026\u0026n.number,i\u003dFr(e,\"value\")||\"null\",o\u003dFr(e,\"true-value\")||\"true\",a\u003dFr(e,\"false-value\")||\"false\";Er(e,\"checked\",\"Array.isArray(\"+t+\")?_i(\"+t+\",\"+i+\")\u003e-1\"+(\"true\"\u003d\u003d\u003do?\":(\"+t+\")\":\":_q(\"+t+\",\"+o+\")\")),Mr(e,\"change\",\"var $$a\u003d\"+t+\",$$el\u003d$event.target,$$c\u003d$$el.checked?(\"+o+\"):(\"+a+\");if(Array.isArray($$a)){var $$v\u003d\"+(r?\"_n(\"+i+\")\":i)+\",$$i\u003d_i($$a,$$v);if($$el.checked){$$i\u003c0\u0026\u0026(\"+Ur(t,\"$$a.concat([$$v])\")+\")}else{$$i\u003e-1\u0026\u0026(\"+Ur(t,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\")+\")}}else{\"+Ur(t,\"$$c\")+\"}\",null,!0)}(e,r,i);else if(\"input\"\u003d\u003d\u003do\u0026\u0026\"radio\"\u003d\u003d\u003da)!function(e,t,n){var r\u003dn\u0026\u0026n.number,i\u003dFr(e,\"value\")||\"null\";Er(e,\"checked\",\"_q(\"+t+\",\"+(i\u003dr?\"_n(\"+i+\")\":i)+\")\"),Mr(e,\"change\",Ur(t,i),null,!0)}(e,r,i);else if(\"input\"\u003d\u003d\u003do||\"textarea\"\u003d\u003d\u003do)!function(e,t,n){var r\u003de.attrsMap.type,i\u003dn||{},o\u003di.lazy,a\u003di.number,s\u003di.trim,c\u003d!o\u0026\u0026\"range\"!\u003d\u003dr,u\u003do?\"change\":\"range\"\u003d\u003d\u003dr?Zr:\"input\",l\u003d\"$event.target.value\";s\u0026\u0026(l\u003d\"$event.target.value.trim()\"),a\u0026\u0026(l\u003d\"_n(\"+l+\")\");var f\u003dUr(t,l);c\u0026\u0026(f\u003d\"if($event.target.composing)return;\"+f),Er(e,\"value\",\"(\"+t+\")\"),Mr(e,u,f,null,!0),(s||a)\u0026\u0026Mr(e,\"blur\",\"$forceUpdate()\")}(e,r,i);else if(!F.isReservedTag(o))return Br(e,r,i),!1;return!0},text:function(e,t){t.value\u0026\u0026Er(e,\"textContent\",\"_s(\"+t.value+\")\",t)},html:function(e,t){t.value\u0026\u0026Er(e,\"innerHTML\",\"_s(\"+t.value+\")\",t)}},isPreTag:function(e){return\"pre\"\u003d\u003d\u003de},isUnaryTag:$o,mustUseProp:Dn,canBeLeftOpenTag:wo,isReservedTag:Zn,getTagNamespace:Gn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(\",\")}($a)},ka\u003dg(function(e){return p(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))});function Aa(e,t){e\u0026\u0026(wa\u003dka(t.staticKeys||\"\"),Ca\u003dt.isReservedTag||T,function e(t){t.static\u003dfunction(e){if(2\u003d\u003d\u003de.type)return!1;if(3\u003d\u003d\u003de.type)return!0;return!(!e.pre\u0026\u0026(e.hasBindings||e.if||e.for||d(e.tag)||!Ca(e.tag)||function(e){for(;e.parent;){if(\"template\"!\u003d\u003d(e\u003de.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(wa)))}(t);if(1\u003d\u003d\u003dt.type){if(!Ca(t.tag)\u0026\u0026\"slot\"!\u003d\u003dt.tag\u0026\u0026null\u003d\u003dt.attrsMap[\"inline-template\"])return;for(var n\u003d0,r\u003dt.children.length;n\u003cr;n++){var i\u003dt.children[n];e(i),i.static||(t.static\u003d!1)}if(t.ifConditions)for(var o\u003d1,a\u003dt.ifConditions.length;o\u003ca;o++){var s\u003dt.ifConditions[o].block;e(s),s.static||(t.static\u003d!1)}}}(e),function e(t,n){if(1\u003d\u003d\u003dt.type){if((t.static||t.once)\u0026\u0026(t.staticInFor\u003dn),t.static\u0026\u0026t.children.length\u0026\u0026(1!\u003d\u003dt.children.length||3!\u003d\u003dt.children[0].type))return void(t.staticRoot\u003d!0);if(t.staticRoot\u003d!1,t.children)for(var r\u003d0,i\u003dt.children.length;r\u003ci;r++)e(t.children[r],n||!!t.for);if(t.ifConditions)for(var o\u003d1,a\u003dt.ifConditions.length;o\u003ca;o++)e(t.ifConditions[o].block,n)}}(e,!1))}var Oa\u003d/^([\\w$_]+|\\([^)]*?\\))\\s*\u003d\u003e|^function(?:\\s+[\\w$]+)?\\s*\\(/,Sa\u003d/\\([^)]*?\\);*$/,Ta\u003d/^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\[\u0027[^\u0027]*?\u0027]|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,Na\u003d{esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea\u003d{esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},ja\u003dfunction(e){return\"if(\"+e+\")return null;\"},Da\u003d{stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:ja(\"$event.target !\u003d\u003d $event.currentTarget\"),ctrl:ja(\"!$event.ctrlKey\"),shift:ja(\"!$event.shiftKey\"),alt:ja(\"!$event.altKey\"),meta:ja(\"!$event.metaKey\"),left:ja(\"\u0027button\u0027 in $event \u0026\u0026 $event.button !\u003d\u003d 0\"),middle:ja(\"\u0027button\u0027 in $event \u0026\u0026 $event.button !\u003d\u003d 1\"),right:ja(\"\u0027button\u0027 in $event \u0026\u0026 $event.button !\u003d\u003d 2\")};function La(e,t){var n\u003dt?\"nativeOn:\":\"on:\",r\u003d\"\",i\u003d\"\";for(var o in e){var a\u003dIa(e[o]);e[o]\u0026\u0026e[o].dynamic?i+\u003do+\",\"+a+\",\":r+\u003d\u0027\"\u0027+o+\u0027\":\u0027+a+\",\"}return r\u003d\"{\"+r.slice(0,-1)+\"}\",i?n+\"_d(\"+r+\",[\"+i.slice(0,-1)+\"])\":n+r}function Ia(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return Ia(e)}).join(\",\")+\"]\";var t\u003dTa.test(e.value),n\u003dOa.test(e.value),r\u003dTa.test(e.value.replace(Sa,\"\"));if(e.modifiers){var i\u003d\"\",o\u003d\"\",a\u003d[];for(var s in e.modifiers)if(Da[s])o+\u003dDa[s],Na[s]\u0026\u0026a.push(s);else if(\"exact\"\u003d\u003d\u003ds){var c\u003de.modifiers;o+\u003dja([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter(function(e){return!c[e]}).map(function(e){return\"$event.\"+e+\"Key\"}).join(\"||\"))}else a.push(s);return a.length\u0026\u0026(i+\u003dfunction(e){return\"if(!$event.type.indexOf(\u0027key\u0027)\u0026\u0026\"+e.map(Ma).join(\"\u0026\u0026\")+\")return null;\"}(a)),o\u0026\u0026(i+\u003do),\"function($event){\"+i+(t?\"return \"+e.value+\".apply(null, arguments)\":n?\"return (\"+e.value+\").apply(null, arguments)\":r?\"return \"+e.value:e.value)+\"}\"}return t||n?e.value:\"function($event){\"+(r?\"return \"+e.value:e.value)+\"}\"}function Ma(e){var t\u003dparseInt(e,10);if(t)return\"$event.keyCode!\u003d\u003d\"+t;var n\u003dNa[e],r\u003dEa[e];return\"_k($event.keyCode,\"+JSON.stringify(e)+\",\"+JSON.stringify(n)+\",$event.key,\"+JSON.stringify(r)+\")\"}var Fa\u003d{on:function(e,t){e.wrapListeners\u003dfunction(e){return\"_g(\"+e+\",\"+t.value+\")\"}},bind:function(e,t){e.wrapData\u003dfunction(n){return\"_b(\"+n+\",\u0027\"+e.tag+\"\u0027,\"+t.value+\",\"+(t.modifiers\u0026\u0026t.modifiers.prop?\"true\":\"false\")+(t.modifiers\u0026\u0026t.modifiers.sync?\",true\":\"\")+\")\"}},cloak:S},Pa\u003dfunction(e){this.options\u003de,this.warn\u003de.warn||Tr,this.transforms\u003dNr(e.modules,\"transformCode\"),this.dataGenFns\u003dNr(e.modules,\"genData\"),this.directives\u003dA(A({},Fa),e.directives);var t\u003de.isReservedTag||T;this.maybeComponent\u003dfunction(e){return!!e.component||!t(e.tag)},this.onceId\u003d0,this.staticRenderFns\u003d[],this.pre\u003d!1};function Ra(e,t){var n\u003dnew Pa(t);return{render:\"with(this){return \"+(e?\"script\"\u003d\u003d\u003de.tag?\"null\":Ha(e,n):\u0027_c(\"div\")\u0027)+\"}\",staticRenderFns:n.staticRenderFns}}function Ha(e,t){if(e.parent\u0026\u0026(e.pre\u003de.pre||e.parent.pre),e.staticRoot\u0026\u0026!e.staticProcessed)return Ba(e,t);if(e.once\u0026\u0026!e.onceProcessed)return Ua(e,t);if(e.for\u0026\u0026!e.forProcessed)return za(e,t);if(e.if\u0026\u0026!e.ifProcessed)return Va(e,t);if(\"template\"!\u003d\u003de.tag||e.slotTarget||t.pre){if(\"slot\"\u003d\u003d\u003de.tag)return function(e,t){var n\u003de.slotName||\u0027\"default\"\u0027,r\u003dWa(e,t),i\u003d\"_t(\"+n+(r?\",function(){return \"+r+\"}\":\"\"),o\u003de.attrs||e.dynamicAttrs?Xa((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a\u003de.attrsMap[\"v-bind\"];!o\u0026\u0026!a||r||(i+\u003d\",null\");o\u0026\u0026(i+\u003d\",\"+o);a\u0026\u0026(i+\u003d(o?\"\":\",null\")+\",\"+a);return i+\")\"}(e,t);var n;if(e.component)n\u003dfunction(e,t,n){var r\u003dt.inlineTemplate?null:Wa(t,n,!0);return\"_c(\"+e+\",\"+Ka(t,n)+(r?\",\"+r:\"\")+\")\"}(e.component,e,t);else{var r;(!e.plain||e.pre\u0026\u0026t.maybeComponent(e))\u0026\u0026(r\u003dKa(e,t));var i\u003de.inlineTemplate?null:Wa(e,t,!0);n\u003d\"_c(\u0027\"+e.tag+\"\u0027\"+(r?\",\"+r:\"\")+(i?\",\"+i:\"\")+\")\"}for(var o\u003d0;o\u003ct.transforms.length;o++)n\u003dt.transforms[o](e,n);return n}return Wa(e,t)||\"void 0\"}function Ba(e,t){e.staticProcessed\u003d!0;var n\u003dt.pre;return e.pre\u0026\u0026(t.pre\u003de.pre),t.staticRenderFns.push(\"with(this){return \"+Ha(e,t)+\"}\"),t.pre\u003dn,\"_m(\"+(t.staticRenderFns.length-1)+(e.staticInFor?\",true\":\"\")+\")\"}function Ua(e,t){if(e.onceProcessed\u003d!0,e.if\u0026\u0026!e.ifProcessed)return Va(e,t);if(e.staticInFor){for(var n\u003d\"\",r\u003de.parent;r;){if(r.for){n\u003dr.key;break}r\u003dr.parent}return n?\"_o(\"+Ha(e,t)+\",\"+t.onceId+++\",\"+n+\")\":Ha(e,t)}return Ba(e,t)}function Va(e,t,n,r){return e.ifProcessed\u003d!0,function e(t,n,r,i){if(!t.length)return i||\"_e()\";var o\u003dt.shift();return o.exp?\"(\"+o.exp+\")?\"+a(o.block)+\":\"+e(t,n,r,i):\"\"+a(o.block);function a(e){return r?r(e,n):e.once?Ua(e,n):Ha(e,n)}}(e.ifConditions.slice(),t,n,r)}function za(e,t,n,r){var i\u003de.for,o\u003de.alias,a\u003de.iterator1?\",\"+e.iterator1:\"\",s\u003de.iterator2?\",\"+e.iterator2:\"\";return e.forProcessed\u003d!0,(r||\"_l\")+\"((\"+i+\"),function(\"+o+a+s+\"){return \"+(n||Ha)(e,t)+\"})\"}function Ka(e,t){var n\u003d\"{\",r\u003dfunction(e,t){var n\u003de.directives;if(!n)return;var r,i,o,a,s\u003d\"directives:[\",c\u003d!1;for(r\u003d0,i\u003dn.length;r\u003ci;r++){o\u003dn[r],a\u003d!0;var u\u003dt.directives[o.name];u\u0026\u0026(a\u003d!!u(e,o,t.warn)),a\u0026\u0026(c\u003d!0,s+\u003d\u0027{name:\"\u0027+o.name+\u0027\",rawName:\"\u0027+o.rawName+\u0027\"\u0027+(o.value?\",value:(\"+o.value+\"),expression:\"+JSON.stringify(o.value):\"\")+(o.arg?\",arg:\"+(o.isDynamicArg?o.arg:\u0027\"\u0027+o.arg+\u0027\"\u0027):\"\")+(o.modifiers?\",modifiers:\"+JSON.stringify(o.modifiers):\"\")+\"},\")}if(c)return s.slice(0,-1)+\"]\"}(e,t);r\u0026\u0026(n+\u003dr+\",\"),e.key\u0026\u0026(n+\u003d\"key:\"+e.key+\",\"),e.ref\u0026\u0026(n+\u003d\"ref:\"+e.ref+\",\"),e.refInFor\u0026\u0026(n+\u003d\"refInFor:true,\"),e.pre\u0026\u0026(n+\u003d\"pre:true,\"),e.component\u0026\u0026(n+\u003d\u0027tag:\"\u0027+e.tag+\u0027\",\u0027);for(var i\u003d0;i\u003ct.dataGenFns.length;i++)n+\u003dt.dataGenFns[i](e);if(e.attrs\u0026\u0026(n+\u003d\"attrs:\"+Xa(e.attrs)+\",\"),e.props\u0026\u0026(n+\u003d\"domProps:\"+Xa(e.props)+\",\"),e.events\u0026\u0026(n+\u003dLa(e.events,!1)+\",\"),e.nativeEvents\u0026\u0026(n+\u003dLa(e.nativeEvents,!0)+\",\"),e.slotTarget\u0026\u0026!e.slotScope\u0026\u0026(n+\u003d\"slot:\"+e.slotTarget+\",\"),e.scopedSlots\u0026\u0026(n+\u003dfunction(e,t,n){var r\u003de.for||Object.keys(t).some(function(e){var n\u003dt[e];return n.slotTargetDynamic||n.if||n.for||Ja(n)}),i\u003d!!e.if;if(!r)for(var o\u003de.parent;o;){if(o.slotScope\u0026\u0026o.slotScope!\u003d\u003dua||o.for){r\u003d!0;break}o.if\u0026\u0026(i\u003d!0),o\u003do.parent}var a\u003dObject.keys(t).map(function(e){return qa(t[e],n)}).join(\",\");return\"scopedSlots:_u([\"+a+\"]\"+(r?\",null,true\":\"\")+(!r\u0026\u0026i?\",null,false,\"+function(e){var t\u003d5381,n\u003de.length;for(;n;)t\u003d33*t^e.charCodeAt(--n);return t\u003e\u003e\u003e0}(a):\"\")+\")\"}(e,e.scopedSlots,t)+\",\"),e.model\u0026\u0026(n+\u003d\"model:{value:\"+e.model.value+\",callback:\"+e.model.callback+\",expression:\"+e.model.expression+\"},\"),e.inlineTemplate){var o\u003dfunction(e,t){var n\u003de.children[0];if(n\u0026\u00261\u003d\u003d\u003dn.type){var r\u003dRa(n,t.options);return\"inlineTemplate:{render:function(){\"+r.render+\"},staticRenderFns:[\"+r.staticRenderFns.map(function(e){return\"function(){\"+e+\"}\"}).join(\",\")+\"]}\"}}(e,t);o\u0026\u0026(n+\u003do+\",\")}return n\u003dn.replace(/,$/,\"\")+\"}\",e.dynamicAttrs\u0026\u0026(n\u003d\"_b(\"+n+\u0027,\"\u0027+e.tag+\u0027\",\u0027+Xa(e.dynamicAttrs)+\")\"),e.wrapData\u0026\u0026(n\u003de.wrapData(n)),e.wrapListeners\u0026\u0026(n\u003de.wrapListeners(n)),n}function Ja(e){return 1\u003d\u003d\u003de.type\u0026\u0026(\"slot\"\u003d\u003d\u003de.tag||e.children.some(Ja))}function qa(e,t){var n\u003de.attrsMap[\"slot-scope\"];if(e.if\u0026\u0026!e.ifProcessed\u0026\u0026!n)return Va(e,t,qa,\"null\");if(e.for\u0026\u0026!e.forProcessed)return za(e,t,qa);var r\u003de.slotScope\u003d\u003d\u003dua?\"\":String(e.slotScope),i\u003d\"function(\"+r+\"){return \"+(\"template\"\u003d\u003d\u003de.tag?e.if\u0026\u0026n?\"(\"+e.if+\")?\"+(Wa(e,t)||\"undefined\")+\":undefined\":Wa(e,t)||\"undefined\":Ha(e,t))+\"}\",o\u003dr?\"\":\",proxy:true\";return\"{key:\"+(e.slotTarget||\u0027\"default\"\u0027)+\",fn:\"+i+o+\"}\"}function Wa(e,t,n,r,i){var o\u003de.children;if(o.length){var a\u003do[0];if(1\u003d\u003d\u003do.length\u0026\u0026a.for\u0026\u0026\"template\"!\u003d\u003da.tag\u0026\u0026\"slot\"!\u003d\u003da.tag){var s\u003dn?t.maybeComponent(a)?\",1\":\",0\":\"\";return\"\"+(r||Ha)(a,t)+s}var c\u003dn?function(e,t){for(var n\u003d0,r\u003d0;r\u003ce.length;r++){var i\u003de[r];if(1\u003d\u003d\u003di.type){if(Za(i)||i.ifConditions\u0026\u0026i.ifConditions.some(function(e){return Za(e.block)})){n\u003d2;break}(t(i)||i.ifConditions\u0026\u0026i.ifConditions.some(function(e){return t(e.block)}))\u0026\u0026(n\u003d1)}}return n}(o,t.maybeComponent):0,u\u003di||Ga;return\"[\"+o.map(function(e){return u(e,t)}).join(\",\")+\"]\"+(c?\",\"+c:\"\")}}function Za(e){return void 0!\u003d\u003de.for||\"template\"\u003d\u003d\u003de.tag||\"slot\"\u003d\u003d\u003de.tag}function Ga(e,t){return 1\u003d\u003d\u003de.type?Ha(e,t):3\u003d\u003d\u003de.type\u0026\u0026e.isComment?(r\u003de,\"_e(\"+JSON.stringify(r.text)+\")\"):\"_v(\"+(2\u003d\u003d\u003d(n\u003de).type?n.expression:Ya(JSON.stringify(n.text)))+\")\";var n,r}function Xa(e){for(var t\u003d\"\",n\u003d\"\",r\u003d0;r\u003ce.length;r++){var i\u003de[r],o\u003dYa(i.value);i.dynamic?n+\u003di.name+\",\"+o+\",\":t+\u003d\u0027\"\u0027+i.name+\u0027\":\u0027+o+\",\"}return t\u003d\"{\"+t.slice(0,-1)+\"}\",n?\"_d(\"+t+\",[\"+n.slice(0,-1)+\"])\":t}function Ya(e){return e.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\");function Qa(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),S}}function es(e){var t\u003dObject.create(null);return function(n,r,i){(r\u003dA({},r)).warn;delete r.warn;var o\u003dr.delimiters?String(r.delimiters)+n:n;if(t[o])return t[o];var a\u003de(n,r),s\u003d{},c\u003d[];return s.render\u003dQa(a.render,c),s.staticRenderFns\u003da.staticRenderFns.map(function(e){return Qa(e,c)}),t[o]\u003ds}}var ts,ns,rs\u003d(ts\u003dfunction(e,t){var n\u003dfa(e.trim(),t);!1!\u003d\u003dt.optimize\u0026\u0026Aa(n,t);var r\u003dRa(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(e){function t(t,n){var r\u003dObject.create(e),i\u003d[],o\u003d[];if(n)for(var a in n.modules\u0026\u0026(r.modules\u003d(e.modules||[]).concat(n.modules)),n.directives\u0026\u0026(r.directives\u003dA(Object.create(e.directives||null),n.directives)),n)\"modules\"!\u003d\u003da\u0026\u0026\"directives\"!\u003d\u003da\u0026\u0026(r[a]\u003dn[a]);r.warn\u003dfunction(e,t,n){(n?o:i).push(e)};var s\u003dts(t.trim(),r);return s.errors\u003di,s.tips\u003do,s}return{compile:t,compileToFunctions:es(t)}})(xa),is\u003d(rs.compile,rs.compileToFunctions);function os(e){return(ns\u003dns||document.createElement(\"div\")).innerHTML\u003de?\u0027\u003ca href\u003d\"\\n\"/\u003e\u0027:\u0027\u003cdiv a\u003d\"\\n\"/\u003e\u0027,ns.innerHTML.indexOf(\"\u0026#10;\")\u003e0}var as\u003d!!V\u0026\u0026os(!1),ss\u003d!!V\u0026\u0026os(!0),cs\u003dg(function(e){var t\u003dQn(e);return t\u0026\u0026t.innerHTML}),us\u003dCn.prototype.$mount;return Cn.prototype.$mount\u003dfunction(e,t){if((e\u003de\u0026\u0026Qn(e))\u003d\u003d\u003ddocument.body||e\u003d\u003d\u003ddocument.documentElement)return this;var n\u003dthis.$options;if(!n.render){var r\u003dn.template;if(r)if(\"string\"\u003d\u003dtypeof r)\"#\"\u003d\u003d\u003dr.charAt(0)\u0026\u0026(r\u003dcs(r));else{if(!r.nodeType)return this;r\u003dr.innerHTML}else e\u0026\u0026(r\u003dfunction(e){if(e.outerHTML)return e.outerHTML;var t\u003ddocument.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i\u003dis(r,{outputSourceRange:!1,shouldDecodeNewlines:as,shouldDecodeNewlinesForHref:ss,delimiters:n.delimiters,comments:n.comments},this),o\u003di.render,a\u003di.staticRenderFns;n.render\u003do,n.staticRenderFns\u003da}}return us.call(this,e,t)},Cn.compile\u003dis,Cn});"}],"authorContributionMap":{"KevinEyo1":6}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/_mixins.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"// @see https://github.com/twbs/bootstrap/blob/main/scss/_functions.scss"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@function material-icons-str-replace($string, $search, $replace: \u0027\u0027) {"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" $index: str-index($string, $search);"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" @if $index {"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" @return str-slice($string, 1, $index - 1) + $replace +"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" material-icons-str-replace("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" str-slice($string, $index + str-length($search)),"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" $search,"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" $replace"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" );"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" @return $string;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"@mixin material-icons-font-class($font-family) {"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" font-family: $font-family;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" font-size: $material-icons-font-size;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased; // Support for all WebKit browsers"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale; // Support for Firefox"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility; // Support for Safari and Chrome"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \u0027liga\u0027; // Support for IE"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"@mixin material-icons-font($font-family) {"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" $class-name: to-lower-case($font-family);"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" $class-name: material-icons-str-replace($class-name, \u0027 \u0027, \u0027-\u0027);"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" $font-file: $material-icons-font-path + $class-name;"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" @font-face {"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" font-family: $font-family;"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" font-display: $material-icons-font-display;"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" src: url(\u0027#{$font-file}.woff2\u0027) format(\u0027woff2\u0027),"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" url(\u0027#{$font-file}.woff\u0027) format(\u0027woff\u0027);"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" .#{$class-name} {"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" @include material-icons-font-class($font-family);"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"@mixin material-icons() {"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" @warn \"material-icons() Sass mixin has been deprecated as of 1.0. Use \u0027@extend .material-icons;\u0027 instead of \u0027@include material-icons();\u0027.\";"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" @include material-icons-font-class(\u0027Material Icons\u0027);"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":55}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/_variables.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"$material-icons-font-path: \u0027./\u0027 !default;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"$material-icons-font-size: 24px !default;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"$material-icons-font-display: block !default;"}],"authorContributionMap":{"KevinEyo1":3}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/filled.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons.woff2\") format(\"woff2\"), url(\"./material-icons.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/filled.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/material-icons.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons.woff2\") format(\"woff2\"), url(\"./material-icons.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-outlined.woff2\") format(\"woff2\"), url(\"./material-icons-outlined.woff\") format(\"woff\");"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":".material-icons-outlined {"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-round.woff2\") format(\"woff2\"), url(\"./material-icons-round.woff\") format(\"woff\");"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":".material-icons-round {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-sharp.woff2\") format(\"woff2\"), url(\"./material-icons-sharp.woff\") format(\"woff\");"},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":83,"author":{"gitId":"KevinEyo1"},"content":".material-icons-sharp {"},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":102,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":103,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":104,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":105,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":106,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-two-tone.woff2\") format(\"woff2\"), url(\"./material-icons-two-tone.woff\") format(\"woff\");"},{"lineNumber":107,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":108,"author":{"gitId":"KevinEyo1"},"content":".material-icons-two-tone {"},{"lineNumber":109,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":110,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":111,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":112,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":113,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":114,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":115,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":116,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":117,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":118,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":119,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":120,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":121,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":122,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":123,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":124,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":124}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/material-icons.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027filled\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027outlined\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027round\u0027;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027sharp\u0027;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027two-tone\u0027;"}],"authorContributionMap":{"KevinEyo1":5}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/outlined.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-outlined.woff2\") format(\"woff2\"), url(\"./material-icons-outlined.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons-outlined {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Outlined\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/outlined.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons Outlined\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/round.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-round.woff2\") format(\"woff2\"), url(\"./material-icons-round.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons-round {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Round\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/round.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons Round\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/sharp.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-sharp.woff2\") format(\"woff2\"), url(\"./material-icons-sharp.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons-sharp {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Sharp\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/sharp.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons Sharp\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/two-tone.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@font-face {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-weight: 400;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" font-display: block;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" src: url(\"./material-icons-two-tone.woff2\") format(\"woff2\"), url(\"./material-icons-two-tone.woff\") format(\"woff\");"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".material-icons-two-tone {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Material Icons Two Tone\";"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" font-weight: normal;"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" font-style: normal;"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" font-size: 24px;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" letter-spacing: normal;"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" text-transform: none;"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" display: inline-block;"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" white-space: nowrap;"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" word-wrap: normal;"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" direction: ltr;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" -webkit-font-smoothing: antialiased;"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" -moz-osx-font-smoothing: grayscale;"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" text-rendering: optimizeLegibility;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" font-feature-settings: \"liga\";"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":24}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/markbind/material-icons/two-tone.scss","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027variables\u0027;"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"@import \u0027mixins\u0027;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"@include material-icons-font(\u0027Material Icons Two Tone\u0027);"}],"authorContributionMap":{"KevinEyo1":4}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/plugins/markbind-plugin-anchors/markbind-plugin-anchors.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".fa.fa-anchor {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" color: #ccc;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" display: inline;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-size: 14px;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" margin-left: 10px;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" padding: 3px;"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" text-decoration: none;"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" visibility: hidden;"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":".fa.fa-anchor:hover {"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" color: #555;"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"h1:hover \u003e .fa.fa-anchor,"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"h2:hover \u003e .fa.fa-anchor,"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"h3:hover \u003e .fa.fa-anchor,"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"h4:hover \u003e .fa.fa-anchor,"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"h5:hover \u003e .fa.fa-anchor,"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"h6:hover \u003e .fa.fa-anchor,"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":".header-wrapper:hover \u003e .fa.fa-anchor {"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" visibility: visible;"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":23}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/plugins/markbind-plugin-tree/markbind-plugin-tree.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":".tree {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" white-space: pre;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" font-family: \"Fira Code\", \"Fira Mono\", monospace;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" font-size: 0.9375rem;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" line-height: 1.5;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" overflow-x: auto;"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":7}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/siteData.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"{"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" \"enableSearch\": true,"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" \"pages\": ["},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Configuration.md\","},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Configuration guide\","},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" \"configuration-guide\": \"Configuration guide\""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Design.md\","},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Design\","},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" \"design\": \"Design\","},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" \"architecture\": \"Architecture\","},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" \"component-1\": \"Component 1\","},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" \"component-2\": \"Component 2\""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/DevOps.md\","},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"DevOps guide\","},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" \"devops-guide\": \"DevOps guide\","},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" \"build-automation\": \"Build automation\","},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" \"continuous-integration-ci\": \"Continuous integration (CI)\","},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" \"code-coverage\": \"Code coverage\","},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" \"repository-wide-checks\": \"Repository-wide checks\","},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":" \"making-a-release\": \"Making a release\""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/DeveloperGuide.md\","},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Developer Guide\","},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" \"projectex-developer-guide\": \"ProjectEx Developer Guide\","},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" \"introduction\": \"Introduction\","},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" \"purpose-of-this-guide\": \"Purpose of this Guide\","},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" \"acknowledgements\": \"Acknowledgements\""},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Documentation.md\","},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Documentation guide\","},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" \"documentation-guide\": \"Documentation Guide\""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Implementation.md\","},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Implementation\","},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" \"implementation\": \"Implementation\","},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" \"proposed-featurex-implementation\": \"[Proposed] FeatureX Implementation\","},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" \"proposed-data-archiving\": \"[Proposed] Data archiving\""},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Requirements.md\","},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Requirements\","},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" \"requirements\": \"Requirements\","},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":" \"product-scope\": \"Product scope\","},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":" \"user-stories\": \"User stories\","},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":" \"use-cases\": \"Use cases\","},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":" \"non-functional-requirements\": \"Non-Functional Requirements\""},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/SettingUp.md\","},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Setting up and getting started\","},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":" \"setting-up-and-getting-started\": \"Setting up and getting started\","},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":" \"setting-up-the-project-in-your-computer\": \"Setting up the project in your computer\","},{"lineNumber":83,"author":{"gitId":"KevinEyo1"},"content":" \"before-writing-code\": \"Before writing code\""},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/Testing.md\","},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Testing guide\","},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":" \"testing-guide\": \"Testing guide\","},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":" \"running-tests\": \"Running tests\","},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":" \"types-of-tests\": \"Types of tests\""},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"developerGuide/TracingCode.md\","},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Tutorial: Tracing code\","},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":" \"tutorial-tracing-code\": \"Tutorial: Tracing code\","},{"lineNumber":102,"author":{"gitId":"KevinEyo1"},"content":" \"before-we-start\": \"Before we start\","},{"lineNumber":103,"author":{"gitId":"KevinEyo1"},"content":" \"setting-a-breakpoint\": \"Setting a breakpoint\","},{"lineNumber":104,"author":{"gitId":"KevinEyo1"},"content":" \"tracing-the-execution-path\": \"Tracing the execution path\""},{"lineNumber":105,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":106,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":107,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":108,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":109,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"index.md\","},{"lineNumber":110,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"\","},{"lineNumber":111,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":112,"author":{"gitId":"KevinEyo1"},"content":" \"projectex\": \"ProjectEx\""},{"lineNumber":113,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":114,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":115,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":116,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":117,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"team/AboutUs.md\","},{"lineNumber":118,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"About Us\","},{"lineNumber":119,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":120,"author":{"gitId":"KevinEyo1"},"content":" \"about-us\": \"About Us\","},{"lineNumber":121,"author":{"gitId":"KevinEyo1"},"content":" \"project-team\": \"Project team\","},{"lineNumber":122,"author":{"gitId":"KevinEyo1"},"content":" \"john-doe\": \"John Doe\","},{"lineNumber":123,"author":{"gitId":"KevinEyo1"},"content":" \"jane-doe\": \"Jane Doe\","},{"lineNumber":124,"author":{"gitId":"KevinEyo1"},"content":" \"johnny-doe\": \"Johnny Doe\","},{"lineNumber":125,"author":{"gitId":"KevinEyo1"},"content":" \"jean-doe\": \"Jean Doe\","},{"lineNumber":126,"author":{"gitId":"KevinEyo1"},"content":" \"james-doe\": \"James Doe\""},{"lineNumber":127,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":128,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":129,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":130,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":131,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"team/johndoe.md\","},{"lineNumber":132,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Portfolio Page\","},{"lineNumber":133,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":134,"author":{"gitId":"KevinEyo1"},"content":" \"project-projectex\": \"Project: ProjectEx\""},{"lineNumber":135,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":136,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":137,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":138,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":139,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"userGuide/FAQ.md\","},{"lineNumber":140,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"FAQ\","},{"lineNumber":141,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":142,"author":{"gitId":"KevinEyo1"},"content":" \"faq\": \"FAQ\""},{"lineNumber":143,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":144,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":145,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":146,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":147,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"userGuide/Features.md\","},{"lineNumber":148,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Features\","},{"lineNumber":149,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":150,"author":{"gitId":"KevinEyo1"},"content":" \"features\": \"Features\","},{"lineNumber":151,"author":{"gitId":"KevinEyo1"},"content":" \"featurex\": \"FeatureX\","},{"lineNumber":152,"author":{"gitId":"KevinEyo1"},"content":" \"y-feature\": \"Y Feature\","},{"lineNumber":153,"author":{"gitId":"KevinEyo1"},"content":" \"future-feature-z-coming-in-v2-0\": \"Future Feature Z [coming in v2.0]\""},{"lineNumber":154,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":155,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":156,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":157,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":158,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"userGuide/QuickStart.md\","},{"lineNumber":159,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"Quick Start\","},{"lineNumber":160,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":161,"author":{"gitId":"KevinEyo1"},"content":" \"quick-start\": \"Quick start\""},{"lineNumber":162,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":163,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":164,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":165,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":166,"author":{"gitId":"KevinEyo1"},"content":" \"src\": \"userGuide/UserGuide.md\","},{"lineNumber":167,"author":{"gitId":"KevinEyo1"},"content":" \"title\": \"User Guide\","},{"lineNumber":168,"author":{"gitId":"KevinEyo1"},"content":" \"headings\": {"},{"lineNumber":169,"author":{"gitId":"KevinEyo1"},"content":" \"projectex-user-guide\": \"ProjectEx User Guide\","},{"lineNumber":170,"author":{"gitId":"KevinEyo1"},"content":" \"introduction\": \"Introduction\","},{"lineNumber":171,"author":{"gitId":"KevinEyo1"},"content":" \"purpose-of-this-guide\": \"Purpose of this Guide\""},{"lineNumber":172,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":173,"author":{"gitId":"KevinEyo1"},"content":" \"headingKeywords\": {}"},{"lineNumber":174,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":175,"author":{"gitId":"KevinEyo1"},"content":" ]"},{"lineNumber":176,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":176}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":".nav-component {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":"#page-nav {"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":" #page-nav {"},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":102,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":103,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":104,"author":{"gitId":"KevinEyo1"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":105,"author":{"gitId":"KevinEyo1"},"content":" .indented {"},{"lineNumber":106,"author":{"gitId":"KevinEyo1"},"content":" padding-left: 10px;"},{"lineNumber":107,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":108,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":109,"author":{"gitId":"KevinEyo1"},"content":" #content-wrapper {"},{"lineNumber":110,"author":{"gitId":"KevinEyo1"},"content":" padding: 0 10px;"},{"lineNumber":111,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":112,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":113,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":114,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":115,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":116,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":117,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":118,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":119,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":120,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":121,"author":{"gitId":"KevinEyo1"},"content":"/* Hide site navigation when printing */"},{"lineNumber":122,"author":{"gitId":"KevinEyo1"},"content":"@media print {"},{"lineNumber":123,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":124,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":125,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":126,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":127,"author":{"gitId":"KevinEyo1"},"content":" #page-nav {"},{"lineNumber":128,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":129,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":130,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":131,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":132,"author":{"gitId":"KevinEyo1"},"content":"h2,"},{"lineNumber":133,"author":{"gitId":"KevinEyo1"},"content":"h3,"},{"lineNumber":134,"author":{"gitId":"KevinEyo1"},"content":"h4,"},{"lineNumber":135,"author":{"gitId":"KevinEyo1"},"content":"h5,"},{"lineNumber":136,"author":{"gitId":"KevinEyo1"},"content":"h6 {"},{"lineNumber":137,"author":{"gitId":"KevinEyo1"},"content":" color: #e46c0a;"},{"lineNumber":138,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":137,"-":1}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/team/AboutUs.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\"}},[_v(\"\\nThis section describes the contributors of your app.\\n\")]),_v(\" \"),_m(1),_v(\" \"),_m(2),_v(\" \"),_m(3),_v(\" \"),_m(4),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_c(\u0027p\u0027,[_v(\"This img uses the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"placeholderImage\")]),_v(\" defined in the \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"_markbind/variables.md\")]),_v(\" file.\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(5),_v(\" \"),_m(6),_v(\" \"),_m(7),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(8),_v(\" \"),_m(9),_v(\" \"),_m(10),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(11),_v(\" \"),_m(12),_v(\" \"),_m(13),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(14),_v(\" \"),_m(15),_v(\" \"),_m(16),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"/images/johndoe.png\",\"width\":\"200px\"}}),_v(\" \"),_m(17),_v(\" \"),_m(18)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(19)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"about-us\"}},[_v(\"About Us\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#about-us\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"We are a team based in \"),_c(\u0027a\u0027,{attrs:{\"href\":\"#project-team\"}},[_v(\"Organisation A\")]),_v(\".\")])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"You can reach us at the email \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"organisationa@gmail.sg\")])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h2\u0027,{attrs:{\"id\":\"project-team\"}},[_v(\"Project team\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#project-team\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"john-doe\"}},[_v(\"John Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#john-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://www.comp.nus.edu.sg/~damithch\"}},[_v(\"homepage\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Project Advisor\")])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"jane-doe\"}},[_v(\"Jane Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#jane-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Team Lead\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Responsibilities: UI\")])])}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"johnny-doe\"}},[_v(\"Johnny Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#johnny-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Developer\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Responsibilities: Data\")])])}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"jean-doe\"}},[_v(\"Jean Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#jean-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Developer\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Responsibilities: Dev Ops + Threading\")])])}"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"james-doe\"}},[_v(\"James Doe\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#james-doe\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_v(\"[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"http://github.com/johndoe\"}},[_v(\"github\")]),_v(\"]\\n[\"),_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"contributions\")]),_v(\"]\")])}"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Role: Developer\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Responsibilities: UI\")])])}"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":67}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/team/johndoe.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027p\u0027,[_v(\"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation. It can be taken as a reference for users to base their own MarkBind sites off of.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\n Content can be easily be replaced by the user\u0027s project information and context.\\n\")]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Given below are my contributions to the project.\")]),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"})]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"project-projectex\"}},[_v(\"Project: ProjectEx\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#project-projectex\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"New Feature\")]),_v(\": Feature X\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"What it does: This feature does a thing\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Justification: This feature is important because...\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Highlights:\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Point 1\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Point 2\")])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Credits: \"),_c(\u0027em\u0027,[_v(\"{mention here for reused code/ideas or use of a third-party library}\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Code contributed\")]),_v(\": \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"Github Repo\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Project management\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Managed releases \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"v1.3\")]),_v(\" - \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"v1.5rc\")]),_v(\" (3 releases) on GitHub\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Enhancements to existing features\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Wrote additional tests, increasing coverage to 92% (Pull requests \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#36\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#38\")]),_v(\")\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Documentation\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"User Guide:\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Added documentation for feature \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#72\")])])])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Developer Guide:\\n\"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Added implementation details of feature.\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Community\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"PRs reviewed (with non-trivial review comments): \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#12\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#32\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#19\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#42\")])]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Contributed to forum discussions (examples: \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"1\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"2\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"3\")]),_v(\", \"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"4\")]),_v(\")\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tools\")]),_v(\":\")]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"Integrated a third party library (Natty) to the project (\"),_c(\u0027a\u0027,{attrs:{\"href\":\"\"}},[_v(\"#42\")]),_v(\")\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"{ You can add/remove categories in the list above }\")])])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":16}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/userGuide/FAQ.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section answers common questions about the app or specific features.\\n\")]),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Question:\")]),_v(\" How do I learn to use this project?\")])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Answer:\")]),_v(\" Refer to the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\".\")])]),_v(\" \"),_c(\u0027br\u0027),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Question:\")]),_v(\" How do I contribute to this project?\")])]},proxy:true}])},[_v(\" \"),_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Answer:\")]),_v(\" Refer to the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\".\")])])],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#faq\"}},[_v(\"FAQ‎\")])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"faq\"}},[_v(\"FAQ\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#faq\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":13}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/userGuide/Features.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"info\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Notes about the app usage\")]),_c(\u0027br\u0027)]),_v(\" \"),_c(\u0027ul\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"General information about the app\u0027s features.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"General tips about how to use the app efficiently.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Warnings that may lead to issues and how to avoid them.\")])])])]),_v(\" \"),_m(1),_v(\" \"),_c(\u0027p\u0027,[_v(\"Description of feature.\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nA visual representation of the feature can be shown here.\\n\")]),_v(\" \"),_m(2),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"warning\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Caution:\")]),_v(\"\\nThings to avoid when using the feature.\")])]),_v(\" \"),_m(3),_v(\" \"),_c(\u0027p\u0027,[_v(\"Description of feature.\")]),_v(\" \"),_c(\u0027panel\u0027,{scopedSlots:_u([{key:\"header\",fn:function(){return [_c(\u0027p\u0027,[_v(\"Feature Examples\")])]},proxy:true}])},[_v(\"\\nExamples of how to use the feature.\\n\")]),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\",\"seamless\":\"\"}},[_c(\u0027p\u0027,[_c(\u0027strong\u0027,[_v(\"Tip:\")]),_v(\" Secondary information about feature usage.\")])]),_v(\" \"),_m(4),_v(\" \"),_m(5)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#features\"}},[_v(\"Features‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#featurex\"}},[_v(\"FeatureX‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#y-feature\"}},[_v(\"Y Feature‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#future-feature-z-coming-in-v2-0\"}},[_v(\"Future Feature Z [coming in v2.0]‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(6)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"features\"}},[_v(\"Features\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#features\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"featurex\"}},[_v(\"FeatureX\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#featurex\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ul\u0027,[_c(\u0027li\u0027,[_v(\"List of primary information about the feature\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"How to use the feature\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"How the feature works\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Limitations of feature\")])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"y-feature\"}},[_v(\"Y Feature\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#y-feature\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h3\u0027,{attrs:{\"id\":\"future-feature-z-coming-in-v2-0\"}},[_v(\"Future Feature Z \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"[coming in v2.0]\")]),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#future-feature-z-coming-in-v2-0\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027p\u0027,[_c(\u0027em\u0027,[_v(\"Details coming soon ...\")])])}"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":28}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/userGuide/QuickStart.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_m(0),_v(\" \"),_c(\u0027box\u0027,{attrs:{\"type\":\"tip\"}},[_v(\"\\nThis section can be used to help users get started with the application quickly.\\n\")]),_v(\" \"),_m(1)],1),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#quick-start\"}},[_v(\"Quick start‎\")])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(2)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027h1\u0027,{attrs:{\"id\":\"quick-start\"}},[_v(\"Quick start\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#quick-start\",\"onclick\":\"event.stopPropagation()\"}})])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027ol\u0027,[_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Ensure you have Java \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"11\")]),_v(\" and Node.js \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"v16\")]),_v(\" and above installed in your Computer.\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Open a command terminal and run necessary setup commands like \"),_c(\u0027code\u0027,{pre:true,attrs:{\"class\":\"hljs inline no-lang\"}},[_v(\"npm run setup\")]),_v(\".\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027p\u0027,[_v(\"Refer to the \"),_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")]),_v(\" section for details of the app\u0027s features.\")])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":16}},{"path":"packages/cli/test/functional/test_site_templates/test_project/expected/userGuide/UserGuide.page-vue-render.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" var pageVueRenderFn \u003d function anonymous("},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"app\"}},[_c(\u0027header\u0027,{attrs:{\"sticky\":\"\"}},[_c(\u0027navbar\u0027,{attrs:{\"type\":\"dark\"},scopedSlots:_u([{key:\"brand\",fn:function(){return [_c(\u0027a\u0027,{staticClass:\"navbar-brand\",attrs:{\"href\":\"/index.html\",\"title\":\"Home\"}},[_v(\"ProjectEx\")])]},proxy:true},{key:\"right\",fn:function(){return [_c(\u0027li\u0027,[_c(\u0027form\u0027,{staticClass:\"navbar-form\"},[_c(\u0027searchbar\u0027,{attrs:{\"data\":searchData,\"placeholder\":\"Search\",\"on-hit\":searchCallback,\"menu-align-right\":\"\"}})],1)])]},proxy:true}])},[_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"highlight-on\":\"sibling-or-child\",\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027a\u0027,{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/se-edu\",\"target\":\"_blank\"}},[_c(\u0027span\u0027,[_c(\u0027span\u0027,{staticClass:\"fab fa-github\",attrs:{\"aria-hidden\":\"true\"}})])])])])],1),_v(\" \"),_c(\u0027div\u0027,{attrs:{\"id\":\"flex-body\"}},[_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"site-nav\",\"tag-name\":\"nav\",\"to\":\"site-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027site-nav\u0027,[_c(\u0027overlay-source\u0027,{staticClass:\"site-nav-list site-nav-list-root\",attrs:{\"tag-name\":\"ul\",\"to\":\"mb-site-nav\"}},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/index.html\"}},[_v(\"Home\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/UserGuide.html\"}},[_v(\"User Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/QuickStart.html\"}},[_v(\"Quick Start\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/Features.html\"}},[_v(\"Features\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/userGuide/FAQ.html\"}},[_v(\"FAQ\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DeveloperGuide.html\"}},[_v(\"Developer Guide\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/SettingUp.html\"}},[_v(\"Setting Up\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/TracingCode.html\"}},[_v(\"Tutorial: Tracing code\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Design.html\"}},[_v(\"Design\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Implementation.html\"}},[_v(\"Implementation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Project Guides\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Documentation.html\"}},[_v(\"Documentation\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Testing.html\"}},[_v(\"Testing\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Configuration.html\"}},[_v(\"Configuration\")])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/DevOps.html\"}},[_v(\"DevOps\")])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_v(\"Appendix\\n\\n\"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-2\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/developerGuide/Requirements.html\"}},[_v(\"Requirements\")])])])])])])]),_v(\" \"),_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-0\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/AboutUs.html\"}},[_v(\"About Us\")]),_v(\" \"),_c(\u0027div\u0027,{staticClass:\"site-nav-dropdown-btn-container\"},[_c(\u0027i\u0027,{staticClass:\"site-nav-dropdown-btn-icon site-nav-rotate-icon\",attrs:{\"onclick\":\"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();\"}},[_c(\u0027span\u0027,{staticClass:\"glyphicon glyphicon-menu-down\",attrs:{\"aria-hidden\":\"true\"}})])])]),_c(\u0027ul\u0027,{staticClass:\"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list\"},[_c(\u0027li\u0027,[_c(\u0027div\u0027,{staticClass:\"site-nav-default-list-item site-nav-list-item-1\",attrs:{\"onclick\":\"handleSiteNavClick(this)\"}},[_c(\u0027a\u0027,{attrs:{\"href\":\"/team/johndoe.html\"}},[_v(\"Contributor Portfolio Template\")])])])])])])],1)],1)]),_v(\" \"),_m(0),_v(\" \"),_c(\u0027overlay-source\u0027,{attrs:{\"id\":\"page-nav\",\"tag-name\":\"nav\",\"to\":\"page-nav\"}},[_c(\u0027div\u0027,{staticClass:\"nav-component slim-scroll\"},[_c(\u0027overlay-source\u0027,{staticClass:\"nav nav-pills flex-column my-0 small no-flex-wrap\",attrs:{\"id\":\"mb-page-nav\",\"tag-name\":\"nav\",\"to\":\"mb-page-nav\"}},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#projectex-user-guide\"}},[_v(\"ProjectEx User Guide‎\")]),_v(\" \"),_c(\u0027nav\u0027,{staticClass:\"nav nav-pills flex-column my-0 nested no-flex-wrap\"},[_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#introduction\"}},[_v(\"Introduction‎\")]),_v(\" \"),_c(\u0027a\u0027,{pre:true,attrs:{\"class\":\"nav-link py-1\",\"href\":\"#purpose-of-this-guide\"}},[_v(\"Purpose of this Guide‎\")])])])],1)]),_v(\" \"),_c(\u0027scroll-top-button\u0027)],1),_v(\" \"),_m(1)])}"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"};"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" var pageVueStaticRenderFns \u003d [function anonymous("},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027div\u0027,{attrs:{\"id\":\"content-wrapper\"}},[_c(\u0027h1\u0027,{attrs:{\"id\":\"projectex-user-guide\"}},[_v(\"ProjectEx User Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#projectex-user-guide\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027hr\u0027),_v(\" \"),_c(\u0027p\u0027,[_v(\"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation. It can be taken as a reference for users to base their own MarkBind sites off of.\")]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"introduction\"}},[_v(\"Introduction\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#introduction\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"Welcome to the User Guide. This comprehensive resource is designed to assist you in navigating and utilizing our software to its fullest potential.\")]),_v(\" \"),_c(\u0027h2\u0027,{attrs:{\"id\":\"purpose-of-this-guide\"}},[_v(\"Purpose of this Guide\"),_c(\u0027a\u0027,{staticClass:\"fa fa-anchor\",attrs:{\"href\":\"#purpose-of-this-guide\",\"onclick\":\"event.stopPropagation()\"}})]),_v(\" \"),_c(\u0027p\u0027,[_v(\"This guide aims to:\")]),_v(\" \"),_c(\u0027ol\u0027,[_c(\u0027li\u0027,[_v(\"Equip users with the necessary knowledge.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Offer step-by-step instructions for common tasks and operations.\")]),_v(\" \"),_c(\u0027li\u0027,[_v(\"Provide tips and tricks to streamline the user experience.\")])])])}"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"},function anonymous("},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":") {"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"with(this){return _c(\u0027footer\u0027,[_c(\u0027div\u0027,{staticClass:\"text-center\"},[_c(\u0027small\u0027,[_v(\"[\"),_c(\u0027span\u0027,[_c(\u0027strong\u0027,[_v(\"Powered by\")])]),_v(\" \"),_c(\u0027img\u0027,{attrs:{\"src\":\"https://markbind.org/favicon.ico\",\"width\":\"30\"}}),_v(\" \"),_c(\u0027a\u0027,{attrs:{\"href\":\"https://markbind.org/\"}},[_v(\"MarkBind 5.4.0\")]),_v(\"]\")])])])}"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"}];"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":13}},{"path":"packages/core-web/asset/css/codeblock-dark.min.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".hljs{display:block;overflow-x:auto;padding:.5em;background:#2b2b2b;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}"},{"lineNumber":2,"author":{"gitId":"Tim-Siu"},"content":"/* MarkBind-customized styles */.hljs span.highlighted{background:#000000}.hljs.inline{background:#444}.hljs:not(.inline){border:1px solid #1e1e1e}.code-block-heading{background:#3f3f3f;color:#dcdcdc}button.function-btn{background-color:#2b2b2b}"}],"authorContributionMap":{"-":1,"Tim-Siu":1}},{"path":"packages/core-web/src/print.js","fileType":"js","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"// This file manipulates the content of the printed page by defining print event listeners."},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"const PAGE_NAV_ID \u003d \u0027mb-page-nav\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"const PAGE_NAV_CLONE_CLASS \u003d \u0027page-nav-clone\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"const PAGE_NAV_PRINT_CONTAINER \u003d \u0027page-nav-print\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * Remove the active style to prevent item highlighting."},{"lineNumber":9,"author":{"gitId":"-"},"content":" * @param {HTMLElement} node"},{"lineNumber":10,"author":{"gitId":"-"},"content":" */"},{"lineNumber":11,"author":{"gitId":"-"},"content":"function removeActiveStyle(container) {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" const activeElements \u003d container.querySelectorAll(\u0027a.active\u0027);"},{"lineNumber":13,"author":{"gitId":"-"},"content":" activeElements.forEach((activeElement) \u003d\u003e {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" activeElement.classList.remove(\u0027active\u0027);"},{"lineNumber":15,"author":{"gitId":"-"},"content":" });"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Create deep copies of the page navigation."},{"lineNumber":20,"author":{"gitId":"-"},"content":" * @param {HTMLElement} node"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * @returns {HTMLElement} node"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */"},{"lineNumber":23,"author":{"gitId":"-"},"content":"function clonePageNav(node) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" const pageNav \u003d node.cloneNode(true);"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" pageNav.removeAttribute(\u0027id\u0027); // avoid duplicate"},{"lineNumber":27,"author":{"gitId":"-"},"content":" removeActiveStyle(pageNav);"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" pageNav.classList.add(PAGE_NAV_CLONE_CLASS);"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" return pageNav;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":"function removePageNavPrint() {"},{"lineNumber":35,"author":{"gitId":"-"},"content":" const tocElements \u003d document.querySelectorAll(`.${PAGE_NAV_CLONE_CLASS}`);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" tocElements.forEach((tocElement) \u003d\u003e {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" tocElement.remove();"},{"lineNumber":38,"author":{"gitId":"-"},"content":" });"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"// Insert page navigation into the \u003cpage-nav-print\u003e containers."},{"lineNumber":42,"author":{"gitId":"-"},"content":"window.addEventListener(\u0027beforeprint\u0027, () \u003d\u003e {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" const pageNav \u003d document.querySelector(`#${PAGE_NAV_ID}`);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" const pageNavPrintContainers \u003d document.querySelectorAll(`.${PAGE_NAV_PRINT_CONTAINER}`);"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" if (pageNav \u0026\u0026 pageNavPrintContainers.length \u003e\u003d 1) {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" removePageNavPrint(); // remove any existing clones"},{"lineNumber":48,"author":{"gitId":"-"},"content":" pageNavPrintContainers.forEach((container) \u003d\u003e {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" container.appendChild(clonePageNav(pageNav));"},{"lineNumber":50,"author":{"gitId":"-"},"content":" });"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }"},{"lineNumber":52,"author":{"gitId":"-"},"content":"});"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"// Remove page navigation clones."},{"lineNumber":55,"author":{"gitId":"-"},"content":"window.addEventListener(\u0027afterprint\u0027, () \u003d\u003e {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" removePageNavPrint();"},{"lineNumber":57,"author":{"gitId":"-"},"content":"});"},{"lineNumber":58,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":59,"author":{"gitId":"Tim-Siu"},"content":"// Check for wrapping in code blocks and adds line numbers if necessary"},{"lineNumber":60,"author":{"gitId":"Tim-Siu"},"content":"function checkForWrappingAndAddLineNumbers() {"},{"lineNumber":61,"author":{"gitId":"Tim-Siu"},"content":" document.querySelectorAll(\u0027pre \u003e code.hljs\u0027).forEach((block) \u003d\u003e {"},{"lineNumber":62,"author":{"gitId":"Tim-Siu"},"content":" // Check if any line within the block is wrapped"},{"lineNumber":63,"author":{"gitId":"Tim-Siu"},"content":" const isWrapped \u003d Array.from(block.querySelectorAll(\u0027span\u0027))"},{"lineNumber":64,"author":{"gitId":"Tim-Siu"},"content":" .some(line \u003d\u003e line.scrollWidth \u003e line.clientWidth);"},{"lineNumber":65,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":66,"author":{"gitId":"Tim-Siu"},"content":" if (isWrapped) {"},{"lineNumber":67,"author":{"gitId":"Tim-Siu"},"content":" // Add .line-numbers class to enable line numbering for wrapped lines"},{"lineNumber":68,"author":{"gitId":"Tim-Siu"},"content":" block.classList.add(\u0027line-numbers-print\u0027);"},{"lineNumber":69,"author":{"gitId":"Tim-Siu"},"content":" }"},{"lineNumber":70,"author":{"gitId":"Tim-Siu"},"content":" });"},{"lineNumber":71,"author":{"gitId":"Tim-Siu"},"content":"}"},{"lineNumber":72,"author":{"gitId":"Tim-Siu"},"content":""},{"lineNumber":73,"author":{"gitId":"Tim-Siu"},"content":"window.addEventListener(\u0027beforeprint\u0027, () \u003d\u003e {"},{"lineNumber":74,"author":{"gitId":"Tim-Siu"},"content":" checkForWrappingAndAddLineNumbers();"},{"lineNumber":75,"author":{"gitId":"Tim-Siu"},"content":"});"}],"authorContributionMap":{"-":57,"Tim-Siu":18}},{"path":"packages/core-web/src/styles/index.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"LamJiuFong"},"content":"@import url(\"markbind.css\");"},{"lineNumber":2,"author":{"gitId":"LamJiuFong"},"content":"@import url(\"page-nav.css\");"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":"@import url(\"~katex/dist/katex.css\");"},{"lineNumber":4,"author":{"gitId":"LamJiuFong"},"content":"@import url(\"~markdown-it-texmath/css/texmath.css\");"}],"authorContributionMap":{"LamJiuFong":4}},{"path":"packages/core-web/src/styles/markbind.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@import url(\"../../asset/css/codeblock-light.min.css\") print;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":":root {"},{"lineNumber":4,"author":{"gitId":"-"},"content":" --sticky-header-height: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"a {"},{"lineNumber":8,"author":{"gitId":"-"},"content":" text-decoration: none;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"blockquote {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" border-left: 0.25em solid #dfe2e5;"},{"lineNumber":13,"author":{"gitId":"-"},"content":" color: #6a737d;"},{"lineNumber":14,"author":{"gitId":"-"},"content":" padding: 0 1rem;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"code {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" background: #f8f8f8;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" border-radius: 3px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" padding: 0.2em 0.4em;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" word-break: normal;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"}"},{"lineNumber":23,"author":{"gitId":"-"},"content":""},{"lineNumber":24,"author":{"gitId":"-"},"content":"mark code {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" background: #ffffffd4;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"}"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"pre.hljs \u003e code {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" background: none;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"pre \u003e code.hljs {"},{"lineNumber":33,"author":{"gitId":"LamJiuFong"},"content":" background-clip: padding-box;"},{"lineNumber":34,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" counter-reset: line;"},{"lineNumber":36,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"}"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":"pre \u003e code.hljs[heading] {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" border-top-right-radius: 0;"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":".code-block {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":".code-block-heading {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" border-radius: 6px 6px 0 0;"},{"lineNumber":49,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" font-size: 85%;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" line-height: 1;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" margin-top: 5px;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" max-width: 85%;"},{"lineNumber":54,"author":{"gitId":"-"},"content":" overflow-wrap: break-word;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" padding: 0.25em 0.4em;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" text-align: right;"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}"},{"lineNumber":58,"author":{"gitId":"-"},"content":""},{"lineNumber":59,"author":{"gitId":"-"},"content":".inline-markdown-heading {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" line-height: 1.5;"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":".code-block-content {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" clear: both;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":69,"author":{"gitId":"Tim-Siu"},"content":" pre \u003e code.hljs {"},{"lineNumber":70,"author":{"gitId":"Tim-Siu"},"content":" white-space: pre-wrap;"},{"lineNumber":71,"author":{"gitId":"Tim-Siu"},"content":" word-wrap: break-word;"},{"lineNumber":72,"author":{"gitId":"Tim-Siu"},"content":" word-break: break-all;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"Tim-Siu"},"content":" .hljs:not(.inline).line-numbers-print \u003e span {"},{"lineNumber":76,"author":{"gitId":"Tim-Siu"},"content":" padding: 0 0.5em 0 3.5em;"},{"lineNumber":77,"author":{"gitId":"Tim-Siu"},"content":" position: relative;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"Tim-Siu"},"content":" /* display line numbers beside each span */"},{"lineNumber":81,"author":{"gitId":"Tim-Siu"},"content":" .hljs:not(.inline).line-numbers-print \u003e span::before {"},{"lineNumber":82,"author":{"gitId":"Tim-Siu"},"content":" border-right: 1px solid #ddd;"},{"lineNumber":83,"author":{"gitId":"Tim-Siu"},"content":" display: inline-block;"},{"lineNumber":84,"author":{"gitId":"Tim-Siu"},"content":" color: #888;"},{"lineNumber":85,"author":{"gitId":"Tim-Siu"},"content":" content: counter(line);"},{"lineNumber":86,"author":{"gitId":"Tim-Siu"},"content":" counter-increment: line;"},{"lineNumber":87,"author":{"gitId":"Tim-Siu"},"content":" left: 0;"},{"lineNumber":88,"author":{"gitId":"Tim-Siu"},"content":" margin-right: 0.5em;"},{"lineNumber":89,"author":{"gitId":"Tim-Siu"},"content":" padding-right: 0.5em;"},{"lineNumber":90,"author":{"gitId":"Tim-Siu"},"content":" position: absolute;"},{"lineNumber":91,"author":{"gitId":"Tim-Siu"},"content":" text-align: right;"},{"lineNumber":92,"author":{"gitId":"Tim-Siu"},"content":" top: 0;"},{"lineNumber":93,"author":{"gitId":"Tim-Siu"},"content":" width: 3em;"},{"lineNumber":94,"author":{"gitId":"Tim-Siu"},"content":" height: 100%;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }"},{"lineNumber":96,"author":{"gitId":"-"},"content":""},{"lineNumber":97,"author":{"gitId":"-"},"content":" /* force printing the highlighting colour */"},{"lineNumber":98,"author":{"gitId":"-"},"content":" .hljs span.highlighted{"},{"lineNumber":99,"author":{"gitId":"-"},"content":" -webkit-print-color-adjust:exact;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" background:#e6e6fa !important;"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":"}"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"kbd {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" background-color: #fafbfc;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" border: 1px solid #c6cbd1;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" border-bottom-color: #959da5;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" box-shadow: inset 0 -1px 0 #959da5;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" color: #444d56;"},{"lineNumber":110,"author":{"gitId":"-"},"content":"}"},{"lineNumber":111,"author":{"gitId":"-"},"content":""},{"lineNumber":112,"author":{"gitId":"-"},"content":".btn:active,"},{"lineNumber":113,"author":{"gitId":"-"},"content":".btn:focus {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" box-shadow: none !important;"},{"lineNumber":115,"author":{"gitId":"-"},"content":" outline: none !important;"},{"lineNumber":116,"author":{"gitId":"-"},"content":"}"},{"lineNumber":117,"author":{"gitId":"-"},"content":""},{"lineNumber":118,"author":{"gitId":"-"},"content":"code.hljs.inline {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" display: initial;"},{"lineNumber":120,"author":{"gitId":"-"},"content":" padding: 0.2em 0.4em;"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}"},{"lineNumber":122,"author":{"gitId":"-"},"content":""},{"lineNumber":123,"author":{"gitId":"-"},"content":".markbind-table {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" width: auto;"},{"lineNumber":125,"author":{"gitId":"-"},"content":"}"},{"lineNumber":126,"author":{"gitId":"-"},"content":""},{"lineNumber":127,"author":{"gitId":"-"},"content":".radio-list-item,"},{"lineNumber":128,"author":{"gitId":"-"},"content":".task-list-item {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" list-style-type: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" margin: 0 0 0 -1.2em;"},{"lineNumber":131,"author":{"gitId":"-"},"content":"}"},{"lineNumber":132,"author":{"gitId":"-"},"content":""},{"lineNumber":133,"author":{"gitId":"-"},"content":".radio-list-item label {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" font-weight: inherit;"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":".table-striped \u003e thead,"},{"lineNumber":138,"author":{"gitId":"-"},"content":".table-striped \u003e tbody \u003e tr:nth-of-type(even) {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" background-color: #fff;"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}"},{"lineNumber":141,"author":{"gitId":"-"},"content":""},{"lineNumber":142,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * Holy Grail Layout"},{"lineNumber":144,"author":{"gitId":"-"},"content":" *"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * This section covers the common styles used within Header, Footer and Side Navigation bars"},{"lineNumber":146,"author":{"gitId":"-"},"content":" */"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":"/* Header */"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":"header[sticky] {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" transition: transform 0.3s ease-in-out;"},{"lineNumber":154,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" z-index: 1001;"},{"lineNumber":156,"author":{"gitId":"-"},"content":"}"},{"lineNumber":157,"author":{"gitId":"-"},"content":""},{"lineNumber":158,"author":{"gitId":"-"},"content":"header[sticky].hide-header {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" transform: translateY(calc(-1 * var(--sticky-header-height)));"},{"lineNumber":160,"author":{"gitId":"-"},"content":"}"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"span.anchor {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":164,"author":{"gitId":"-"},"content":" top: calc(-1 * var(--sticky-header-height) - 1rem);"},{"lineNumber":165,"author":{"gitId":"-"},"content":"}"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":"/* #app is treated as the main container */"},{"lineNumber":168,"author":{"gitId":"-"},"content":"#app {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":170,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" min-height: 100vh;"},{"lineNumber":172,"author":{"gitId":"-"},"content":"}"},{"lineNumber":173,"author":{"gitId":"-"},"content":""},{"lineNumber":174,"author":{"gitId":"-"},"content":"/* Footer */"},{"lineNumber":175,"author":{"gitId":"-"},"content":"footer {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" background-color: #f5f5f5;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" color: dimgrey;"},{"lineNumber":178,"author":{"gitId":"-"},"content":" padding: 10px 0;"},{"lineNumber":179,"author":{"gitId":"-"},"content":"}"},{"lineNumber":180,"author":{"gitId":"-"},"content":""},{"lineNumber":181,"author":{"gitId":"-"},"content":"/* TODO move this back to markdown-it-attr if bundling is implemented */"},{"lineNumber":182,"author":{"gitId":"-"},"content":".dimmed {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" color: #777;"},{"lineNumber":184,"author":{"gitId":"-"},"content":"}"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":".large {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" font-size: 125%;"},{"lineNumber":188,"author":{"gitId":"-"},"content":"}"},{"lineNumber":189,"author":{"gitId":"-"},"content":""},{"lineNumber":190,"author":{"gitId":"-"},"content":".small {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" font-size: 80%;"},{"lineNumber":192,"author":{"gitId":"-"},"content":"}"},{"lineNumber":193,"author":{"gitId":"-"},"content":""},{"lineNumber":194,"author":{"gitId":"-"},"content":".underline {"},{"lineNumber":195,"author":{"gitId":"-"},"content":" text-decoration: underline;"},{"lineNumber":196,"author":{"gitId":"-"},"content":"}"},{"lineNumber":197,"author":{"gitId":"-"},"content":""},{"lineNumber":198,"author":{"gitId":"-"},"content":".mkb-text-red {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" color: red !important;"},{"lineNumber":200,"author":{"gitId":"-"},"content":"}"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":".mkb-text-green {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" color: green !important;"},{"lineNumber":204,"author":{"gitId":"-"},"content":"}"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":".mkb-text-blue {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" color: blue !important;"},{"lineNumber":208,"author":{"gitId":"-"},"content":"}"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":".mkb-text-cyan {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" color: cyan !important;"},{"lineNumber":212,"author":{"gitId":"-"},"content":"}"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":".mkb-text-magenta {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" color: magenta !important;"},{"lineNumber":216,"author":{"gitId":"-"},"content":"}"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":".mkb-text-yellow {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" color: yellow !important;"},{"lineNumber":220,"author":{"gitId":"-"},"content":"}"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":".mkb-text-black {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" color: black !important;"},{"lineNumber":224,"author":{"gitId":"-"},"content":"}"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":".mkb-text-white {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" color: white !important;"},{"lineNumber":228,"author":{"gitId":"-"},"content":"}"},{"lineNumber":229,"author":{"gitId":"-"},"content":""},{"lineNumber":230,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":231,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":232,"author":{"gitId":"-"},"content":" .dropdown-menu \u003e li \u003e a {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" white-space: normal;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" .navbar-nav .open .dropdown-menu {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" background-color: #fff;"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":"}"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":"/* Footnote anchor */"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":"li.footnote-item:target {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" background-color: #eee;"},{"lineNumber":245,"author":{"gitId":"-"},"content":"}"},{"lineNumber":246,"author":{"gitId":"-"},"content":""},{"lineNumber":247,"author":{"gitId":"-"},"content":".hljs:not(.inline) \u003e span {"},{"lineNumber":248,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":249,"author":{"gitId":"-"},"content":"}"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":".hljs:not(.inline).line-numbers \u003e span {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" padding: 0 0.5em 0 3.5em;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":254,"author":{"gitId":"-"},"content":"}"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":"/* display line numbers beside each span */"},{"lineNumber":257,"author":{"gitId":"-"},"content":".hljs:not(.inline).line-numbers \u003e span::before {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" border-right: 1px solid #ddd;"},{"lineNumber":259,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" color: #888;"},{"lineNumber":261,"author":{"gitId":"-"},"content":" content: counter(line);"},{"lineNumber":262,"author":{"gitId":"-"},"content":" counter-increment: line;"},{"lineNumber":263,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" margin-right: 0.5em;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" padding-right: 0.5em;"},{"lineNumber":266,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" text-align: right;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" width: 3em;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" height: 100%;"},{"lineNumber":271,"author":{"gitId":"-"},"content":"}"},{"lineNumber":272,"author":{"gitId":"-"},"content":""},{"lineNumber":273,"author":{"gitId":"-"},"content":"/* styles for triggers and tooltips */"},{"lineNumber":274,"author":{"gitId":"-"},"content":".trigger {"},{"lineNumber":275,"author":{"gitId":"LamJiuFong"},"content":" border-bottom: 1px dotted currentcolor;"},{"lineNumber":276,"author":{"gitId":"-"},"content":"}"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":".trigger-click {"},{"lineNumber":279,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":280,"author":{"gitId":"LamJiuFong"},"content":" border-bottom: 1px dashed currentcolor;"},{"lineNumber":281,"author":{"gitId":"-"},"content":"}"},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":".trigger-click:focus {"},{"lineNumber":284,"author":{"gitId":"-"},"content":" outline: none;"},{"lineNumber":285,"author":{"gitId":"-"},"content":"}"},{"lineNumber":286,"author":{"gitId":"-"},"content":""},{"lineNumber":287,"author":{"gitId":"-"},"content":"/* \"Copy\" and \"wrap text\" code block buttons */"},{"lineNumber":288,"author":{"gitId":"-"},"content":"pre {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":291,"author":{"gitId":"-"},"content":"}"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":"button.function-btn {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" border: 1px solid #d7dadc;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" color: darkgray;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":298,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":299,"author":{"gitId":"-"},"content":" margin: 0.17rem;"},{"lineNumber":300,"author":{"gitId":"-"},"content":" padding: 0.35rem;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":303,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" white-space: nowrap;"},{"lineNumber":305,"author":{"gitId":"-"},"content":"}"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":"button.function-btn + button.function-btn {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" right: 36px;"},{"lineNumber":309,"author":{"gitId":"-"},"content":"}"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":"pre:hover \u003e .function-btn-container \u003e button.function-btn {"},{"lineNumber":312,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":313,"author":{"gitId":"-"},"content":"}"},{"lineNumber":314,"author":{"gitId":"-"},"content":""},{"lineNumber":315,"author":{"gitId":"-"},"content":".function-btn:hover {"},{"lineNumber":316,"author":{"gitId":"-"},"content":" transition: all 0.5s ease;"},{"lineNumber":317,"author":{"gitId":"-"},"content":" color: gray;"},{"lineNumber":318,"author":{"gitId":"-"},"content":"}"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":".function-btn-body {"},{"lineNumber":321,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":323,"author":{"gitId":"-"},"content":"}"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":".function-btn svg {"},{"lineNumber":326,"author":{"gitId":"LamJiuFong"},"content":" fill: currentcolor;"},{"lineNumber":327,"author":{"gitId":"-"},"content":"}"},{"lineNumber":328,"author":{"gitId":"-"},"content":""},{"lineNumber":329,"author":{"gitId":"-"},"content":"/* Wrap class used for \"wrap text\" button. */"},{"lineNumber":330,"author":{"gitId":"-"},"content":"code.wrap {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" white-space: pre-wrap;"},{"lineNumber":332,"author":{"gitId":"-"},"content":" word-wrap: break-word;"},{"lineNumber":333,"author":{"gitId":"Tim-Siu"},"content":" word-break: break-all;"},{"lineNumber":334,"author":{"gitId":"-"},"content":"}"},{"lineNumber":335,"author":{"gitId":"-"},"content":""},{"lineNumber":336,"author":{"gitId":"-"},"content":"/* Octicon sizing */"},{"lineNumber":337,"author":{"gitId":"-"},"content":".octicon {"},{"lineNumber":338,"author":{"gitId":"-"},"content":" height: 1em;"},{"lineNumber":339,"author":{"gitId":"-"},"content":" width: 1em;"},{"lineNumber":340,"author":{"gitId":"-"},"content":"}"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":"/* styles for \u003chr\u003e */"},{"lineNumber":343,"author":{"gitId":"-"},"content":"hr {"},{"lineNumber":344,"author":{"gitId":"LamJiuFong"},"content":" border-top: solid 1px rgb(0 0 0 / 10%);"},{"lineNumber":345,"author":{"gitId":"-"},"content":" background-color: transparent;"},{"lineNumber":346,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":347,"author":{"gitId":"-"},"content":"}"},{"lineNumber":348,"author":{"gitId":"-"},"content":""},{"lineNumber":349,"author":{"gitId":"-"},"content":"hr.dotted {"},{"lineNumber":350,"author":{"gitId":"-"},"content":" border-top-width: 0.1rem;"},{"lineNumber":351,"author":{"gitId":"-"},"content":" border-top-style: dotted;"},{"lineNumber":352,"author":{"gitId":"-"},"content":"}"},{"lineNumber":353,"author":{"gitId":"-"},"content":""},{"lineNumber":354,"author":{"gitId":"-"},"content":"hr.double {"},{"lineNumber":355,"author":{"gitId":"-"},"content":" border-top-width: 0.2rem;"},{"lineNumber":356,"author":{"gitId":"-"},"content":" border-top-style: double;"},{"lineNumber":357,"author":{"gitId":"-"},"content":"}"},{"lineNumber":358,"author":{"gitId":"-"},"content":""},{"lineNumber":359,"author":{"gitId":"-"},"content":"hr.dashed {"},{"lineNumber":360,"author":{"gitId":"-"},"content":" border-top-width: 0.1rem;"},{"lineNumber":361,"author":{"gitId":"-"},"content":" border-top-style: dashed;"},{"lineNumber":362,"author":{"gitId":"-"},"content":"}"},{"lineNumber":363,"author":{"gitId":"-"},"content":""},{"lineNumber":364,"author":{"gitId":"-"},"content":"hr.thick {"},{"lineNumber":365,"author":{"gitId":"-"},"content":" border-top-width: 0.15rem;"},{"lineNumber":366,"author":{"gitId":"-"},"content":"}"},{"lineNumber":367,"author":{"gitId":"-"},"content":""},{"lineNumber":368,"author":{"gitId":"-"},"content":"hr.thick-1 {"},{"lineNumber":369,"author":{"gitId":"-"},"content":" border-top-width: 0.25rem;"},{"lineNumber":370,"author":{"gitId":"-"},"content":"}"},{"lineNumber":371,"author":{"gitId":"-"},"content":""},{"lineNumber":372,"author":{"gitId":"-"},"content":"hr.thick-2 {"},{"lineNumber":373,"author":{"gitId":"-"},"content":" border-top-width: 0.5rem;"},{"lineNumber":374,"author":{"gitId":"-"},"content":"}"},{"lineNumber":375,"author":{"gitId":"-"},"content":""},{"lineNumber":376,"author":{"gitId":"-"},"content":"hr.thick-3 {"},{"lineNumber":377,"author":{"gitId":"-"},"content":" border-top-width: 0.75rem;"},{"lineNumber":378,"author":{"gitId":"-"},"content":"}"},{"lineNumber":379,"author":{"gitId":"-"},"content":""},{"lineNumber":380,"author":{"gitId":"-"},"content":"ol,"},{"lineNumber":381,"author":{"gitId":"-"},"content":"ul {"},{"lineNumber":382,"author":{"gitId":"-"},"content":" padding-left: 1.5rem;"},{"lineNumber":383,"author":{"gitId":"-"},"content":"}"},{"lineNumber":384,"author":{"gitId":"-"},"content":""},{"lineNumber":385,"author":{"gitId":"-"},"content":"h1,"},{"lineNumber":386,"author":{"gitId":"-"},"content":"h2,"},{"lineNumber":387,"author":{"gitId":"-"},"content":"h3,"},{"lineNumber":388,"author":{"gitId":"-"},"content":"h4,"},{"lineNumber":389,"author":{"gitId":"-"},"content":"h5,"},{"lineNumber":390,"author":{"gitId":"-"},"content":"h6 {"},{"lineNumber":391,"author":{"gitId":"-"},"content":" margin-bottom: 1rem;"},{"lineNumber":392,"author":{"gitId":"-"},"content":" scroll-margin-top: var(--sticky-header-height);"},{"lineNumber":393,"author":{"gitId":"-"},"content":"}"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"-"},"content":".block-embed {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":397,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":398,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":399,"author":{"gitId":"-"},"content":"}"},{"lineNumber":400,"author":{"gitId":"-"},"content":""},{"lineNumber":401,"author":{"gitId":"-"},"content":".block-embed iframe {"},{"lineNumber":402,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":403,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" left: 0;"},{"lineNumber":405,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":406,"author":{"gitId":"-"},"content":" height: 100%;"},{"lineNumber":407,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":378,"Tim-Siu":23}},{"path":"packages/core-web/src/styles/page-nav.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"/* Page navigation */"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"#mb-page-nav {"},{"lineNumber":4,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 12px 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"#mb-page-nav a:link,"},{"lineNumber":8,"author":{"gitId":"-"},"content":"#mb-page-nav a:visited {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" color: #9b9b9b;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" text-decoration: none;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"#mb-page-nav a:hover {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" color: black;"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"#mb-page-nav a.active {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" background-color: transparent;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" color: black;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".page-nav-title {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" color: black;"},{"lineNumber":25,"author":{"gitId":"-"},"content":" white-space: inherit;"},{"lineNumber":26,"author":{"gitId":"-"},"content":" padding-left: 0.5rem;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"}"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":".nested {"},{"lineNumber":30,"author":{"gitId":"-"},"content":" margin-left: 5%;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":".no-flex-wrap {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" flex-wrap: nowrap;"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":1,"-":34}},{"path":"packages/core/package.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"{"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \"name\": \"@markbind/core\","},{"lineNumber":3,"author":{"gitId":"-"},"content":" \"version\": \"5.4.0\","},{"lineNumber":4,"author":{"gitId":"-"},"content":" \"description\": \"MarkBind core module\","},{"lineNumber":5,"author":{"gitId":"-"},"content":" \"keywords\": ["},{"lineNumber":6,"author":{"gitId":"-"},"content":" \"mark\","},{"lineNumber":7,"author":{"gitId":"-"},"content":" \"markdown\","},{"lineNumber":8,"author":{"gitId":"-"},"content":" \"markbind\","},{"lineNumber":9,"author":{"gitId":"-"},"content":" \"fragment\","},{"lineNumber":10,"author":{"gitId":"-"},"content":" \"reusable\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \"homepage\": \"https://markbind.org\","},{"lineNumber":13,"author":{"gitId":"-"},"content":" \"license\": \"MIT\","},{"lineNumber":14,"author":{"gitId":"-"},"content":" \"main\": \"index.js\","},{"lineNumber":15,"author":{"gitId":"-"},"content":" \"types\": \"index.d.ts\","},{"lineNumber":16,"author":{"gitId":"-"},"content":" \"repository\": {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \"type\": \"git\","},{"lineNumber":18,"author":{"gitId":"-"},"content":" \"url\": \"https://github.com/MarkBind/markbind.git\","},{"lineNumber":19,"author":{"gitId":"-"},"content":" \"directory\": \"packages/core\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" },"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \"publishConfig\": {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \"access\": \"public\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" },"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \"scripts\": {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \"compile\": \"tsc\","},{"lineNumber":26,"author":{"gitId":"-"},"content":" \"build\": \"tsc --noEmitOnError\","},{"lineNumber":27,"author":{"gitId":"-"},"content":" \"prepare\": \"npm run build\","},{"lineNumber":28,"author":{"gitId":"-"},"content":" \"test\": \"jest --colors\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" },"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \"dependencies\": {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \"@fortawesome/fontawesome-free\": \"^6.4.0\","},{"lineNumber":32,"author":{"gitId":"-"},"content":" \"@markbind/core-web\": \"5.4.0\","},{"lineNumber":33,"author":{"gitId":"-"},"content":" \"@primer/octicons\": \"^15.0.1\","},{"lineNumber":34,"author":{"gitId":"-"},"content":" \"@sindresorhus/slugify\": \"^0.9.1\","},{"lineNumber":35,"author":{"gitId":"-"},"content":" \"@tlylt/markdown-it-imsize\": \"^3.0.0\","},{"lineNumber":36,"author":{"gitId":"-"},"content":" \"bluebird\": \"^3.7.2\","},{"lineNumber":37,"author":{"gitId":"-"},"content":" \"bootswatch\": \"5.1.3\","},{"lineNumber":38,"author":{"gitId":"-"},"content":" \"cheerio\": \"^0.22.0\","},{"lineNumber":39,"author":{"gitId":"-"},"content":" \"crypto-js\": \"^4.0.0\","},{"lineNumber":40,"author":{"gitId":"-"},"content":" \"csv-parse\": \"^4.14.2\","},{"lineNumber":41,"author":{"gitId":"-"},"content":" \"ensure-posix-path\": \"^1.1.1\","},{"lineNumber":42,"author":{"gitId":"-"},"content":" \"fastmatter\": \"^2.1.1\","},{"lineNumber":43,"author":{"gitId":"-"},"content":" \"fs-extra\": \"^9.0.1\","},{"lineNumber":44,"author":{"gitId":"-"},"content":" \"gh-pages\": \"^2.1.1\","},{"lineNumber":45,"author":{"gitId":"-"},"content":" \"highlight.js\": \"^10.4.1\","},{"lineNumber":46,"author":{"gitId":"-"},"content":" \"htmlparser2\": \"^3.10.1\","},{"lineNumber":47,"author":{"gitId":"-"},"content":" \"ignore\": \"^5.1.4\","},{"lineNumber":48,"author":{"gitId":"-"},"content":" \"js-beautify\": \"1.14.3\","},{"lineNumber":49,"author":{"gitId":"-"},"content":" \"katex\": \"^0.15.6\","},{"lineNumber":50,"author":{"gitId":"-"},"content":" \"lodash\": \"^4.17.15\","},{"lineNumber":51,"author":{"gitId":"-"},"content":" \"markdown-it\": \"^12.3.2\","},{"lineNumber":52,"author":{"gitId":"-"},"content":" \"markdown-it-attrs\": \"^4.1.3\","},{"lineNumber":53,"author":{"gitId":"-"},"content":" \"markdown-it-emoji\": \"^1.4.0\","},{"lineNumber":54,"author":{"gitId":"-"},"content":" \"markdown-it-linkify-images\": \"^3.0.0\","},{"lineNumber":55,"author":{"gitId":"-"},"content":" \"markdown-it-mark\": \"^3.0.0\","},{"lineNumber":56,"author":{"gitId":"-"},"content":" \"markdown-it-regexp\": \"^0.4.0\","},{"lineNumber":57,"author":{"gitId":"-"},"content":" \"markdown-it-sub\": \"^1.0.0\","},{"lineNumber":58,"author":{"gitId":"-"},"content":" \"markdown-it-sup\": \"^1.0.0\","},{"lineNumber":59,"author":{"gitId":"-"},"content":" \"markdown-it-table-of-contents\": \"^0.4.4\","},{"lineNumber":60,"author":{"gitId":"-"},"content":" \"markdown-it-task-lists\": \"^2.1.1\","},{"lineNumber":61,"author":{"gitId":"-"},"content":" \"markdown-it-texmath\": \"^1.0.0\","},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"markdown-it-video\": \"^0.6.3\","},{"lineNumber":63,"author":{"gitId":"-"},"content":" \"material-icons\": \"^1.9.1\","},{"lineNumber":64,"author":{"gitId":"-"},"content":" \"moment\": \"^2.29.4\","},{"lineNumber":65,"author":{"gitId":"-"},"content":" \"nunjucks\": \"3.2.4\","},{"lineNumber":66,"author":{"gitId":"-"},"content":" \"path-is-inside\": \"^1.0.2\","},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" \"simple-git\": \"^3.22.0\","},{"lineNumber":68,"author":{"gitId":"-"},"content":" \"url-parse\": \"^1.5.10\","},{"lineNumber":69,"author":{"gitId":"-"},"content":" \"uuid\": \"^8.3.1\","},{"lineNumber":70,"author":{"gitId":"-"},"content":" \"vue\": \"2.6.14\","},{"lineNumber":71,"author":{"gitId":"-"},"content":" \"vue-server-renderer\": \"2.6.14\","},{"lineNumber":72,"author":{"gitId":"-"},"content":" \"vue-template-compiler\": \"2.6.14\","},{"lineNumber":73,"author":{"gitId":"-"},"content":" \"walk-sync\": \"^2.0.2\","},{"lineNumber":74,"author":{"gitId":"-"},"content":" \"winston\": \"^2.4.4\""},{"lineNumber":75,"author":{"gitId":"-"},"content":" },"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \"devDependencies\": {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \"@jest/globals\": \"^29.5.0\","},{"lineNumber":78,"author":{"gitId":"-"},"content":" \"@types/bluebird\": \"^3.5.36\","},{"lineNumber":79,"author":{"gitId":"-"},"content":" \"@types/cheerio\": \"^0.22.31\","},{"lineNumber":80,"author":{"gitId":"-"},"content":" \"@types/crypto-js\": \"^4.1.1\","},{"lineNumber":81,"author":{"gitId":"-"},"content":" \"@types/domhandler\": \"^2.4.2\","},{"lineNumber":82,"author":{"gitId":"-"},"content":" \"@types/fs-extra\": \"^9.0.13\","},{"lineNumber":83,"author":{"gitId":"-"},"content":" \"@types/gh-pages\": \"^3.2.1\","},{"lineNumber":84,"author":{"gitId":"-"},"content":" \"@types/htmlparser2\": \"^3.10.3\","},{"lineNumber":85,"author":{"gitId":"-"},"content":" \"@types/jest\": \"^27.4.1\","},{"lineNumber":86,"author":{"gitId":"-"},"content":" \"@types/js-beautify\": \"^1.13.3\","},{"lineNumber":87,"author":{"gitId":"-"},"content":" \"@types/katex\": \"^0.16.0\","},{"lineNumber":88,"author":{"gitId":"-"},"content":" \"@types/lodash\": \"^4.14.181\","},{"lineNumber":89,"author":{"gitId":"-"},"content":" \"@types/markdown-it\": \"^12.2.3\","},{"lineNumber":90,"author":{"gitId":"-"},"content":" \"@types/node\": \"^18.15.0\","},{"lineNumber":91,"author":{"gitId":"-"},"content":" \"@types/nunjucks\": \"^3.2.1\","},{"lineNumber":92,"author":{"gitId":"-"},"content":" \"@types/path-is-inside\": \"^1.0.0\","},{"lineNumber":93,"author":{"gitId":"-"},"content":" \"@types/primer__octicons\": \"^17.11.0\","},{"lineNumber":94,"author":{"gitId":"-"},"content":" \"@types/url-parse\": \"^1.4.8\","},{"lineNumber":95,"author":{"gitId":"-"},"content":" \"@types/uuid\": \"^9.0.0\","},{"lineNumber":96,"author":{"gitId":"-"},"content":" \"jest\": \"^27.5.1\","},{"lineNumber":97,"author":{"gitId":"-"},"content":" \"memfs\": \"^3.0.1\","},{"lineNumber":98,"author":{"gitId":"-"},"content":" \"ts-jest\": \"^27.1.4\""},{"lineNumber":99,"author":{"gitId":"-"},"content":" }"},{"lineNumber":100,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"KevinEyo1":1,"-":99}},{"path":"packages/core/src/Site/siteConvertLayout.njk","fileType":"njk","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{% raw %}{{baseUrl}}{% endraw %}/stylesheets/main.css\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar placement\u003d\"top\" type\u003d\"dark\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{% raw %}{{baseUrl}}{% endraw %}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-solid fa-house\"\u003e\u003c/i\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{% raw %}{{baseUrl}}{% endraw %}/index.html\" class\u003d\"nav-link\"\u003eHOME\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{% raw %}{{baseUrl}}{% endraw %}/about.html\" class\u003d\"nav-link\"\u003eABOUT\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/form\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":"\u003c/header\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eContents\u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":"{{ siteNav }}"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cbreadcrumb /\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" {% raw %}{{ content }}{% endraw %}"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cfooter\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":"{%- set defaultFooter -%}"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003csmall\u003e[Generated by {% raw %}{{MarkBind}}{% endraw %}]\u003c/small\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":"{%- endset -%}"},{"lineNumber":50,"author":{"gitId":"-"},"content":"{{ footer or defaultFooter }}"},{"lineNumber":51,"author":{"gitId":"-"},"content":"\u003c/footer\u003e"}],"authorContributionMap":{"jingting1412":1,"-":50}},{"path":"packages/core/src/plugins/web3FormAssets/web-3-form.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"LamJiuFong"},"content":".web-3-form input,"},{"lineNumber":2,"author":{"gitId":"LamJiuFong"},"content":".web-3-form select,"},{"lineNumber":3,"author":{"gitId":"LamJiuFong"},"content":".web-3-form textarea {"},{"lineNumber":4,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding: 12px;"},{"lineNumber":6,"author":{"gitId":"-"},"content":" border: 1px solid #ccc;"},{"lineNumber":7,"author":{"gitId":"-"},"content":" border-radius: 4px;"},{"lineNumber":8,"author":{"gitId":"-"},"content":" box-sizing: border-box;"},{"lineNumber":9,"author":{"gitId":"-"},"content":" margin-top: 6px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":" margin-bottom: 16px;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" resize: vertical;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":3,"-":9}},{"path":"packages/core/template/default/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"-"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"-"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"-"},"content":""},{"lineNumber":48,"author":{"gitId":"-"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}"},{"lineNumber":63,"author":{"gitId":"-"},"content":""},{"lineNumber":64,"author":{"gitId":"-"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"-"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"-"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"-"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"-"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"-"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":89,"author":{"gitId":"-"},"content":"}"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}"},{"lineNumber":94,"author":{"gitId":"-"},"content":""},{"lineNumber":95,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }"},{"lineNumber":99,"author":{"gitId":"-"},"content":"}"},{"lineNumber":100,"author":{"gitId":"-"},"content":""},{"lineNumber":101,"author":{"gitId":"-"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }"},{"lineNumber":106,"author":{"gitId":"-"},"content":"}"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"LamJiuFong"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"-"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }"},{"lineNumber":113,"author":{"gitId":"-"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}"},{"lineNumber":118,"author":{"gitId":"-"},"content":""},{"lineNumber":119,"author":{"gitId":"-"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"LamJiuFong"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}"},{"lineNumber":125,"author":{"gitId":"-"},"content":""},{"lineNumber":126,"author":{"gitId":"-"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"-"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" }"},{"lineNumber":135,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"LamJiuFong":6,"-":129}},{"path":"packages/core/template/portfolio/404.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" title: Page not found"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" layout: 404.md"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"-\u003e\u003cp style\u003d\"font-size: 10rem\"\u003e404\u003c/p\u003e\u003c-"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":"-\u003e\u003cp style\u003d\"font-size: 1.5rem\"\u003eFile not found\u003cbr\u003eClick \u003ca href\u003d\"/\"\u003ehere\u003c/a\u003e to go back to the home page.\u003c/p\u003e\u003c-"}],"authorContributionMap":{"jingting1412":7}},{"path":"packages/core/template/portfolio/_markbind/layouts/404.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cdiv\u003e{{ content }}\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":1}},{"path":"packages/core/template/portfolio/_markbind/layouts/default.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003chead-bottom\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003c/head-bottom\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003cheader sticky\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cnavbar type\u003d\"dark\"\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eYour Name\u003c/a\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#skills\" class\u003d\"nav-link\"\u003eSkills\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#experience\" class\u003d\"nav-link\"\u003eExperience\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003cdropdown header\u003d\"Projects\" class\u003d\"nav-link\"\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#project-1\" class\u003d\"dropdown-item\"\u003eProject 1\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#project-2\" class\u003d\"dropdown-item\"\u003eProject 2\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html#other-projects\" class\u003d\"dropdown-item\"\u003eOther projects\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003c/dropdown\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003c/form\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003c/li\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003c/navbar\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":"\u003c/header\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" {{ content }}"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":"\u003cfooter\u003e"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"text-center\"\u003e"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" \u003csmall\u003e[Generated by {{MarkBind}}]\u003c/small\u003e"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":"\u003c/footer\u003e"}],"authorContributionMap":{"jingting1412":35}},{"path":"packages/core/template/portfolio/_markbind/variables.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"name\"\u003e[NAME]\u003c/variable\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"javascript\"\u003e\u003cthumbnail src\u003d\u0027../contents/assets/JavaScript.svg\u0027 size\u003d\"50\"/\u003e\u003c/variable\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"typescript\"\u003e\u003cthumbnail src\u003d\u0027../contents/assets/Typescript.svg\u0027 size\u003d\"50\"/\u003e\u003c/variable\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"vue\"\u003e\u003cthumbnail src\u003d\u0027../contents/assets/Vue.svg\u0027 size\u003d\"50\"/\u003e\u003c/variable\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003cvariable name\u003d\"java\"\u003e\u003cthumbnail src\u003d\"../contents/assets/java-icon.svg\" size\u003d\"50\"/\u003e\u003c/variable\u003e"}],"authorContributionMap":{"jingting1412":5}},{"path":"packages/core/template/portfolio/contents/experience.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"# Experience"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cul class\u003d\"nav nav-tabs\" role\u003d\"tablist\"\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" \u003cli class\u003d\"nav-item\" role\u003d\"presentation\"\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" \u003ca class\u003d\"nav-link active\" data-bs-toggle\u003d\"tab\" href\u003d\"#NUS\" aria-selected\u003d\"false\" role\u003d\"tab\" tabindex\u003d\"-1\"\u003eNUS\u003c/a\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003c/li\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003cli class\u003d\"nav-item\" role\u003d\"presentation\"\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003ca class\u003d\"nav-link\" data-bs-toggle\u003d\"tab\" href\u003d\"#another-company\" aria-selected\u003d\"true\" role\u003d\"tab\"\u003eAnother Company\u003c/a\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003c/li\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":"\u003c/ul\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"\u003cdiv id\u003d\"myTabContent\" class\u003d\"tab-content\" style\u003d\"margin-top:15px;\"\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"tab-pane fade active show\" id\u003d\"NUS\" role\u003d\"tabpanel\"\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003ch4\u003eSoftware Engineering Intern @ \u003cmd\u003e[NUS](https://nus.edu.sg/)\u003c/md\u003e\u003c/h4\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003ch6\u003eMay 2024 - Aug 2024\u003c/h6\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003cp\u003eSome description of your role in the company and the technologies you\u0027ve used.\u003c/p\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"tab-pane fade\" id\u003d\"another-company\" role\u003d\"tabpanel\"\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003ch4\u003eAnother role @ \u003cmd\u003e[Another company](https://markbind.org/)\u003c/md\u003e\u003c/h4\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003ch6\u003eMay 2022 - Aug 2022\u003c/h6\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003cp\u003eSome description of your role in the company and the technologies you\u0027ve used.\u003c/p\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" {{ javascript }}"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":24}},{"path":"packages/core/template/portfolio/contents/project1.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"card mb-3\"\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \u003ch3 class\u003d\"card-header\" id\u003d\"project-1\"\u003eExample project: iP for CS2103\u003c/h3\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" \u003cmd\u003eThis would be a good place to add images and embeds showcasing your contributions to a project. In this case, an `\u003ciframe\u003e` containing the [RepoSense](https://reposense.org/index.html) report of a student\u0027s contributions to their iP is embedded. For more information on embeds, refer to our user guide [here.](https://markbind.org/userGuide/formattingContents.html#embeds)\u003c/md\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cdiv\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003ciframe src\u003d\"https://nus-cs3281.github.io/2024-dashboard/#/widget/?search\u003dReposense\u0026sort\u003dgroupTitle\u0026sortWithin\u003dtitle\u0026timeframe\u003dcommit\u0026mergegroup\u003d\u0026groupSelect\u003dgroupByAuthors\u0026breakdown\u003dfalse\u0026since\u003d2023-12-01\u0026tabOpen\u003dtrue\u0026tabType\u003dauthorship\u0026tabAuthor\u003dasdfghjkxd\u0026tabRepo\u003dreposense%2Freposense%5Bmaster%5D\u0026authorshipIsMergeGroup\u003dfalse\u0026authorshipFileTypes\u003djava~md\u0026authorshipIsBinaryFileTypeChecked\u003dfalse\u0026authorshipIsIgnoredFilesChecked\u003dfalse\u0026chartGroupIndex\u003d5\u0026chartIndex\u003d0\" width\u003d\"100%\"\u003e\u003c/iframe\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration of the project can be added here\u003c/p\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" {{ java }}"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":17}},{"path":"packages/core/template/portfolio/contents/project2.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"card mb-3\"\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \u003ch3 class\u003d\"card-header\" id\u003d\"project-2\"\u003eProject 2\u003c/h3\u003e"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" This is another project. "},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" alt\u003d\"markbind-logo\" width\u003d\"90%\" height\u003d\"200\"\u003e\u003c/pic\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration on the project.\u003c/p\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" {{javascript}}"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":16}},{"path":"packages/core/template/portfolio/contents/projects.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"# Projects"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"project1.md\"/\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"project2.md\"/\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"### Other projects"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"row row-cols-1 row-cols-md-3 g-3\"\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col\"\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card\"\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003ch4 class\u003d\"card-header\"\u003eProject title\u003c/h4\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" This is another project. "},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" alt\u003d\"markbind-logo\" width\u003d\"90%\" height\u003d\"200\"\u003e\u003c/pic\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration on the project.\u003c/p\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" {{javascript}}"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col\"\u003e"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card\"\u003e"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" \u003ch4 class\u003d\"card-header\"\u003eProject title\u003c/h4\u003e"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" This is another project. "},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" alt\u003d\"markbind-logo\" width\u003d\"90%\" height\u003d\"200\"\u003e\u003c/pic\u003e"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration on the project.\u003c/p\u003e"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":" {{ java }}"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col\"\u003e"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card\"\u003e"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" \u003ch4 class\u003d\"card-header\"\u003eProject title\u003c/h4\u003e"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" This is another project. "},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":" \u003cpic src\u003d\"https://markbind.org/images/logo-lightbackground.png\" alt\u003d\"markbind-logo\" width\u003d\"90%\" height\u003d\"200\"\u003e\u003c/pic\u003e"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"card-text\"\u003eSome further elaboration on the project.\u003c/p\u003e"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" class\u003d\"btn btn-primary\"\u003eView on Github\u003c/a\u003e"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://markbind.org/\" class\u003d\"btn btn-primary\"\u003eView Devpost\u003c/a\u003e"},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"jingting1412":61}},{"path":"packages/core/template/portfolio/contents/skills.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"# Skills"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":"\u003cp\u003eThis is where you can give a quick overview of the technologies and frameworks you know using our \u003ca href\u003d\"https://markbind.org/userGuide/components/imagesAndDiagrams.html#thumbnails\" target\u003d\"_blank\"\u003ethumbnail feature\u003c/a\u003e or our \u003ca href\u003d\"https://markbind.org/userGuide/formattingContents.html#icons\" target\u003d\"_blank\"\u003eicons\u003c/a\u003e.\u003c/p\u003e"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":"\u003cpanel header\u003d\"Example using thumbnails\" expanded\u003e"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \u003cbox type\u003d\"info\"\u003eThese thumbnails are available as variables to use anywhere in this page!\u003c/box\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" {{ javascript }}"},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" {{ typescript }}"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" {{ vue }}"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" {{ java }}"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":"\u003c/panel\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":"\u003cbr/\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":"\u003cpanel header\u003d\"Example using icons\" expanded\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" Some icons are not available in the libraries that MarkBind supports! Please ensure that "},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" the desired icons are available before choosing this option. For more information regarding"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" icons, please refer to \u003ca href\u003d\"https://markbind.org/userGuide/formattingContents.html#icons\" target\u003d\"_blank\"\u003ethis section of our User Guide.\u003c/a\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003c/box\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-square-js fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-vuejs fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-java fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":"\u003c/panel\u003e"}],"authorContributionMap":{"jingting1412":22}},{"path":"packages/core/template/portfolio/index.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"\u003cfrontmatter\u003e"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" title: Portfolio"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" layout: default.md"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":"\u003c/frontmatter\u003e"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"\u003cbr\u003e"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"bg-light text-black px-2 py-5 mb-4\"\u003e"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"container\"\u003e"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \u003ch1 class\u003d\"display-5 no-index\"\u003e\u003cmd\u003e:wave:\u003c/md\u003e Hello!\u003cbr\u003eI\u0027m {{ name }}\u003c/h1\u003e"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \u003cp class\u003d\"lead\"\u003eWelcome to my portfolio!\u003c/p\u003e"},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \u003cdiv style\u003d\"margin-bottom:20px;\"\u003e"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \u003cspan style\u003d\"margin-right:10px;\"\u003e"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://github.com/MarkBind/markbind\" target\u003d\"_blank\" class\u003d\"icon\"\u003e"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-github fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \u003c/a\u003e"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \u003c/span\u003e"},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" \u003cspan style\u003d\"margin-right:10px;\"\u003e"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"https://www.linkedin.com/school/national-university-of-singapore/\" target\u003d\"_blank\" class\u003d\"icon\"\u003e"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-brands fa-linkedin fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" \u003c/a\u003e"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" \u003c/span\u003e"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \u003cspan style\u003d\"margin-right:10px;\"\u003e"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" \u003ca href\u003d\"mailto:secretary_cs@comp.nus.edu.sg\" target\u003d\"_blank\" class\u003d\"icon\"\u003e"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" \u003ci class\u003d\"fa-solid fa-envelope fa-2xl\"\u003e\u003c/i\u003e"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":" \u003c/a\u003e"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" \u003c/span\u003e"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" \u003ca class\u003d\"btn btn-primary\" href\u003d\"./contents/assets/UG-template-resume.pdf\" target\u003d\"_blank\" rel\u003d\"noopener noreferrer\"\u003eResume\u003c/a\u003e"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":" Want to change the theme? Explore more themes and other components offered by MarkBind in our \u003ca href\u003d\"https://markbind.org/userGuide/authoringContents.html\" target\u003d\"_blank\"\u003euser guide here\u003c/a\u003e."},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":"\u003c/box\u003e"},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":"\u003cbox type\u003d\"info\" header\u003d\"##### Deploying this site\"\u003e"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" \u003cmd\u003eMarkBind makes it easy to deploy this site to GitHub Pages using the `markbind deploy` command. To allow `http://[username].github.io` to go straight to this portfolio, it is best to set your repository name as `[username].github.io` Read more about [deploying the site here](https://markbind.org/userGuide/deployingTheSite.html#deploying-to-github-pages)\u003c/md\u003e"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":"\u003c/box\u003e"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":"## About me"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":"\u003cdiv class\u003d\"container text-left\"\u003e"},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"row\" \u003e"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col-md-3 col-md-push-9\"\u003e"},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":" \u003cimg src\u003d\u0027./contents/assets/default_profile_pic.png\u0027 class\u003d\"img-fluid\" alt\u003d\u0027default-profile-pic\u0027/\u003e"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":" \u003cdiv class\u003d\"col-md-9 col-md-pull-3\"\u003e"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":" This is where you can add a picture of yourself and a brief introduction. This can be a good place to use \u003ctooltip content\u003d\"Add more information here\" placement\u003d\"top\"\u003etooltips\u003c/tooltip\u003e, or \u003cmd\u003e[add relevant links](https://markbind.org/userGuide/formattingContents.html#links).\u003c/md\u003e"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":" \u003c/div\u003e"},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":"\u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"contents/skills.md\"/\u003e"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":62,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"contents/experience.md\"/\u003e"},{"lineNumber":63,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":64,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":65,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":66,"author":{"gitId":"jingting1412"},"content":"\u003cinclude src\u003d\"contents/projects.md\"/\u003e"},{"lineNumber":67,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":68,"author":{"gitId":"jingting1412"},"content":"---"},{"lineNumber":69,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":70,"author":{"gitId":"jingting1412"},"content":""}],"authorContributionMap":{"jingting1412":70}},{"path":"packages/core/template/portfolio/site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"{"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" \"baseUrl\": \"\","},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" \"titlePrefix\": \"\","},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" \"titleSuffix\": \"\","},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" \"ignore\": ["},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":" \"_markbind/layouts/*\","},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":" \"_markbind/logs/*\","},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":" \"_site/*\","},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" \"site.json\","},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":" \"*.md\","},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":" \"*.njk\","},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":" \".git/*\","},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" \".gitignore\","},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":" \"node_modules/*\""},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":" ],"},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":" \"pagesExclude\": [\"node_modules/*\"],"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":" \"pages\": ["},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":" {"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" \"src\": \"index.md\","},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":" \"title\": \"Portfolio\""},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":" },"},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":" {"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" \"glob\": [\"**/index.md\"]"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":" ],"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":" \"deploy\": {"},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":" \"message\": \"Site Update.\""},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" },"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" \"style\": {"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":" \"bootstrapTheme\": \"bootswatch-flatly\""},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":32}},{"path":"packages/core/template/portfolio/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"jingting1412"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"jingting1412"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"jingting1412"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"jingting1412"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"jingting1412"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":7,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":8,"author":{"gitId":"jingting1412"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"jingting1412"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":11,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":12,"author":{"gitId":"jingting1412"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"jingting1412"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":15,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":16,"author":{"gitId":"jingting1412"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":18,"author":{"gitId":"jingting1412"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"jingting1412"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":21,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":22,"author":{"gitId":"jingting1412"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"jingting1412"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"jingting1412"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":26,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":27,"author":{"gitId":"jingting1412"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"jingting1412"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"jingting1412"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":31,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":32,"author":{"gitId":"jingting1412"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"jingting1412"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":35,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":36,"author":{"gitId":"jingting1412"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"jingting1412"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"jingting1412"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":40,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":41,"author":{"gitId":"jingting1412"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"jingting1412"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"jingting1412"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":45,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":46,"author":{"gitId":"jingting1412"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":48,"author":{"gitId":"jingting1412"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"jingting1412"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"jingting1412"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"jingting1412"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":53,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":54,"author":{"gitId":"jingting1412"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"jingting1412"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"jingting1412"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"jingting1412"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"jingting1412"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"jingting1412"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"jingting1412"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"jingting1412"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":63,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":64,"author":{"gitId":"jingting1412"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"jingting1412"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"jingting1412"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"jingting1412"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"jingting1412"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"jingting1412"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"jingting1412"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"jingting1412"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"jingting1412"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"jingting1412"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":75,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":76,"author":{"gitId":"jingting1412"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"jingting1412"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"jingting1412"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"jingting1412"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":81,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":82,"author":{"gitId":"jingting1412"},"content":".site-nav-top {"},{"lineNumber":83,"author":{"gitId":"jingting1412"},"content":" margin: 0.8rem 0;"},{"lineNumber":84,"author":{"gitId":"jingting1412"},"content":" padding: 0 12px 12px;"},{"lineNumber":85,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":86,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":87,"author":{"gitId":"jingting1412"},"content":".nav-component {"},{"lineNumber":88,"author":{"gitId":"jingting1412"},"content":" overflow-y: auto;"},{"lineNumber":89,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":90,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":91,"author":{"gitId":"jingting1412"},"content":"#page-nav {"},{"lineNumber":92,"author":{"gitId":"jingting1412"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":93,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":94,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":95,"author":{"gitId":"jingting1412"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":96,"author":{"gitId":"jingting1412"},"content":" #page-nav {"},{"lineNumber":97,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":98,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":99,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":100,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":101,"author":{"gitId":"jingting1412"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":102,"author":{"gitId":"jingting1412"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":103,"author":{"gitId":"jingting1412"},"content":" #site-nav {"},{"lineNumber":104,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":105,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":106,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":107,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":108,"author":{"gitId":"jingting1412"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":109,"author":{"gitId":"jingting1412"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":110,"author":{"gitId":"jingting1412"},"content":" .indented {"},{"lineNumber":111,"author":{"gitId":"jingting1412"},"content":" padding-left: 10px;"},{"lineNumber":112,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":113,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":114,"author":{"gitId":"jingting1412"},"content":" #content-wrapper {"},{"lineNumber":115,"author":{"gitId":"jingting1412"},"content":" padding: 0 10px;"},{"lineNumber":116,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":117,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":118,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":119,"author":{"gitId":"jingting1412"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":120,"author":{"gitId":"jingting1412"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":121,"author":{"gitId":"jingting1412"},"content":" #site-nav {"},{"lineNumber":122,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":123,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":124,"author":{"gitId":"jingting1412"},"content":"}"},{"lineNumber":125,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":126,"author":{"gitId":"jingting1412"},"content":"/* Hide site navigation when printing */"},{"lineNumber":127,"author":{"gitId":"jingting1412"},"content":"@media print {"},{"lineNumber":128,"author":{"gitId":"jingting1412"},"content":" #site-nav {"},{"lineNumber":129,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":130,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":131,"author":{"gitId":"jingting1412"},"content":""},{"lineNumber":132,"author":{"gitId":"jingting1412"},"content":" #page-nav {"},{"lineNumber":133,"author":{"gitId":"jingting1412"},"content":" display: none;"},{"lineNumber":134,"author":{"gitId":"jingting1412"},"content":" }"},{"lineNumber":135,"author":{"gitId":"jingting1412"},"content":"}"}],"authorContributionMap":{"jingting1412":135}},{"path":"packages/core/template/project/_markbind/layouts/default.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"\u003chead-bottom\u003e"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"\u003c/head-bottom\u003e"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"\u003cheader sticky\u003e"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" \u003cnavbar type\u003d\"dark\"\u003e"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eProjectEx\u003c/a\u003e"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" \u003cli\u003e\u003ca highlight-on\u003d\"sibling-or-child\" href\u003d\"{{baseUrl}}/userGuide/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" \u003cli\u003e\u003ca highlight-on\u003d\"sibling-or-child\" href\u003d\"{{baseUrl}}/developerGuide/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" \u003cli\u003e\u003ca highlight-on\u003d\"sibling-or-child\" href\u003d\"{{baseUrl}}/team/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" \u003c/li\u003e"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" \u003cli slot\u003d\"right\"\u003e"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" \u003cform class\u003d\"navbar-form\"\u003e"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" \u003c/form\u003e"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" \u003c/li\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" \u003c/navbar\u003e"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"\u003c/header\u003e"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" \u003cnav id\u003d\"site-nav\"\u003e"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" \u003csite-nav\u003e"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"* [Home]({{ baseUrl }}/index.html)"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"* [User Guide]({{ baseUrl }}/userGuide/UserGuide.html) :expanded:"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" * [Quick Start]({{ baseUrl }}/userGuide/QuickStart.html)"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" * [Features]({{ baseUrl }}/userGuide/Features.html)"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" * [FAQ]({{ baseUrl }}/userGuide/FAQ.html)"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"* [Developer Guide]({{ baseUrl }}/developerGuide/DeveloperGuide.html) :expanded:"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" * [Setting Up]({{ baseUrl }}/developerGuide/SettingUp.html)"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":" * [Tutorial: Tracing code]({{ baseUrl }}/developerGuide/TracingCode.html)"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" * [Design]({{ baseUrl }}/developerGuide/Design.html)"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" * [Implementation]({{ baseUrl }}/developerGuide/Implementation.html)"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" * Project Guides"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" * [Documentation]({{ baseUrl }}/developerGuide/Documentation.html)"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" * [Testing]({{ baseUrl }}/developerGuide/Testing.html)"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" * [Configuration]({{ baseUrl }}/developerGuide/Configuration.html)"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" * [DevOps]({{ baseUrl }}/developerGuide/DevOps.html)"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" * Appendix"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" * [Requirements]({{ baseUrl }}/developerGuide/Requirements.html)"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"* [About Us]({{ baseUrl }}/team/AboutUs.html) :expanded:"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" * [Contributor Portfolio Template]({{ baseUrl }}/team/johndoe.html)"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" \u003c/site-nav\u003e"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" \u003c/div\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" \u003c/nav\u003e"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" {{ content }}"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" \u003cnav id\u003d\"page-nav\"\u003e"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" \u003cpage-nav /\u003e"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" \u003c/div\u003e"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" \u003c/nav\u003e"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"\u003c/div\u003e"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":"\u003cfooter\u003e"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" \u003cdiv class\u003d\"text-center\"\u003e"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}]\u003c/small\u003e"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" \u003c/div\u003e"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":"\u003c/footer\u003e"}],"authorContributionMap":{"KevinEyo1":63}},{"path":"packages/core/template/project/_markbind/variables.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"example\"\u003e"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"To inject this HTML segment in your markbind files, use {{ example }} where you want to place it."},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"More generally, surround the segment\u0027s id with double curly braces."},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"\u003c/variable\u003e"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"\u003cvariable name\u003d\"placeholderImage\"\u003e"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"\u003cimg src\u003d\"../images/johndoe.png\" width\u003d\"200px\"\u003e"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"\u003c/variable\u003e"}],"authorContributionMap":{"KevinEyo1":8}},{"path":"packages/core/template/project/developerGuide/Configuration.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Configuration guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"# Configuration guide"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to understand how to configure the application such as descriptions of the config file and how to change the configuration."},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: `config.json`)."}],"authorContributionMap":{"KevinEyo1":12}},{"path":"packages/core/template/project/developerGuide/Design.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Design\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Design"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section describes the architecture of your app, explaining how the main components work and interact with each other. Using architecture diagrams is recommended."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"### Architecture"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"The ***Architecture Diagram*** given below explains the high-level design of the ProjectEx App."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cpuml src\u003d\"../diagrams/example.puml\" width\u003d300 /\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"Replace the above example diagram with an Architecture Diagram of your project created using [`puml` feature](https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams)."},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"Given below is a quick overview of main components and how they interact with each other."},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"**Main components of the architecture**"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"The bulk of the app\u0027s work is done by the following components:"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"* [**`Component 1`**](#component-1): Does something."},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"* [**`Component 2`**](#component-2): Does something."},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"**Interactions between architecture components**"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"The *Sequence Diagram* below shows how the components interact with each other for a certain scenario."},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"\u003cannotate src\u003d\"../images/johndoe.png\" width\u003d\"300\" alt\u003d\"Sample Image\"\u003e"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Minimal Point --\u003e"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"25%\" content\u003d\"This point is 25% from the left and 25% from the top\" /\u003e"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Size (default size is 40px) --\u003e"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"25%\" content\u003d\"This point is 50% from the left and 25% from the top\" size\u003d\"60\"/\u003e"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Header (default is empty) --\u003e"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"25%\" content\u003d\"This point is 75% from the left and 25% from the top\" header\u003d\"This has a header\"/\u003e"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Color (default color is green) --\u003e"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"33%\" y\u003d\"50%\" content\u003d\"This point is 33% from the left and 50% from the top\" color\u003d\"red\"/\u003e"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Opacity (default opacity is 0.3) --\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"66%\" y\u003d\"50%\" content\u003d\"This point is 66% from the left and 50% from the top\" opacity\u003d\"0.7\"/\u003e"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Point Label (default is empty) --\u003e"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"25%\" y\u003d\"75%\" content\u003d\"This point is 25% from the left and 75% from the top\" label\u003d\"1\"/\u003e"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Text Color (default color is black) --\u003e"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"50%\" y\u003d\"75%\" content\u003d\"This point is 50% from the left and 75% from the top\" textColor\u003d\"white\" color\u003d\"black\" label\u003d\"2\" opacity\u003d\"1\"/\u003e"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" \u003c!-- Customize Font Size (default font size is 14) --\u003e"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" \u003ca-point x\u003d\"75%\" y\u003d\"75%\" content\u003d\"This point is 75% from the left and 75% from the top\" fontSize\u003d\"30\" label\u003d\"3\"/\u003e"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"\u003c/annotate\u003e"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"For diagrams like your Sequence Diagram, it can also be created using [`annotate` feature](https://markbind.org/userGuide/components/imagesAndDiagrams.html#annotations), that will allow you to annotate specific parts of your diagram."},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"The sections below give more details of each component."},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":"**Tip:** Describe in each section how each component works in detail, including its classes, methods, and how it interacts with other components."},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"You can use a combination of Markbind\u0027s [**Diagrams** feature](https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams) to provide a visual representation of each component, such as architecture and sequence diagrams."},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":"### Component 1"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":"Component 1 is made up of parts e.g.`A`, `B`, `C` etc."},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":"\u003cpic src\u003d\"../images/johndoe.png\" width\u003d\"200px\" style\u003d\"margin-bottom: 20px;\"\u003e"},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":"Diagram: Component 1"},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":"\u003c/pic\u003e"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":"Component 1,"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":"* works with Component 2 in this way."},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":"### Component 2"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":83,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":"**Note:** You can use boxes to include details that you want to draw the reader\u0027s attention to. See [`Boxes` feature](https://markbind.org/userGuide/components/presentation.html#boxes)."},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":"\u003cpic src\u003d\"../images/johndoe.png\" width\u003d\"200px\" style\u003d\"margin-bottom: 20px;\"\u003e"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":"Diagram: Component 2"},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":"\u003c/pic\u003e"},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":"Component 2,"},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":"* works with Component 1 in this way."}],"authorContributionMap":{"KevinEyo1":93}},{"path":"packages/core/template/project/developerGuide/DevOps.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"DevOps guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# DevOps guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to understand the DevOps practices adopted by the project."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"## Build automation"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"This example project includes features for **build automation and dependency management**. You can walkthrough command scripts you have in your project, such as how to clean, test, and run the project."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Example Commands for Typical Projects**\"\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"The following commands are examples. You can customize them according to your project\u0027s needs."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"* **`clean`**: Deletes the files created during the previous build tasks.\u003cbr\u003e"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" e.g. `npm run clean`"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"* **`run`**: Builds and runs the application.\u003cbr\u003e"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"* **`test`**: Runs all tests."},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" * `npm run test` — Runs all tests"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" * `npm run cleantest` — Cleans the project and runs tests"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"## Continuous integration (CI)"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"This project uses [GitHub Actions](https://github.com/features/actions) for CI. The project comes with the necessary GitHub Actions configurations files (in the `.github/workflows` folder). No further setting up required."},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"### Code coverage"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":"As part of CI, this project tracks code coverage as well."},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"### Repository-wide checks"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"Your CI can include some repository-wide checks. These repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements."},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"## Making a release"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"Here are the steps to create a new release."},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"warning\"\u003e"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"Make sure you have the necessary permissions to create a release."},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":"\u003cpopover id\u003d\"pop:trigger_id\" content\u003d\"e.g. `v0.1`\"\u003e\u003c/popover\u003e"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"1. Update the version number."},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":"1. Tag the repo with the \u003ctrigger for\u003d\"pop:trigger_id\"\u003eversion number\u003c/trigger\u003e. "},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"1. [Create a new release using GitHub](https://help.github.com/articles/creating-releases/)."}],"authorContributionMap":{"KevinEyo1":59}},{"path":"packages/core/template/project/developerGuide/DeveloperGuide.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Developer Guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# ProjectEx Developer Guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"## Introduction"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"Welcome to the Developer Guide. This guide helps developers understand the architecture, setup, and development workflows of our software, serving as your starting point and companion."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"## Purpose of this Guide"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"The main objectives of this guide are to:"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"1. Orient new developers to the software\u0027s architecture and codebase structure."},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"1. Provide a comprehensive reference for the development practices, coding standards, and tools used."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"1. Detail the setup process for a development environment."},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"## **Acknowledgements**"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"_{ List and link sources of all reused/adapted ideas, code, documentation, and third-party libraries }_"}],"authorContributionMap":{"KevinEyo1":26}},{"path":"packages/core/template/project/developerGuide/Documentation.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Documentation guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Documentation Guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to understand the documentation practices and link to relevant sources to help developers contribute to documentation."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"* We use [**MarkBind**](https://markbind.org/) to manage documentation."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"* The `docs/` folder contains the source files for the documentation website."},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"* To learn how set it up and maintain the project website, follow the guide [[se-edu/guides] Working with Forked MarkBind sites](https://se-education.org/guides/tutorials/markbind-forked-sites.html) for project documentation."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"success\" seamless\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"Updating documentation as changes are made to the project is ideal for any project."},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"**Style guidance:**"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"* Follow the [**_Google developer documentation style guide_**](https://developers.google.com/style)."},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"* Also relevant is the [_se-edu/guides **Markdown coding standard**_](https://se-education.org/guides/conventions/markdown.html)."},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"**Converting to PDF**"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"* See the guide [_se-edu/guides **Saving web documents as PDF files**_](https://se-education.org/guides/tutorials/savingPdf.html)."}],"authorContributionMap":{"KevinEyo1":29}},{"path":"packages/core/template/project/developerGuide/Implementation.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Implementation\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Implementation"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section can be used to describe some noteworthy details on how certain features are implemented."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"### \\[Proposed\\] FeatureX Implementation"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"Given below is an example usage scenario and how FeatureX behaves at each step."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"1. **Step 1**: User does something"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" * **Expected**: FeatureX does something in response"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"1. **Step 2**: User does something else"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" "},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" * **Expected**: FeatureX does something else in response"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"#### Design considerations:"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"**Aspect: How FeatureX executes:**"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Alternative 1 (current choice):** Implementation 1\"\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"Pros: Easy to implement.\u003cbr\u003e"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"Cons: May have performance issues in terms of memory usage."},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Alternative 2:** Implementation 2\"\u003e"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"Pros: Will use less memory.\u003cbr\u003e"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"Cons: We must add addtional test cases."},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":"_{ More aspects and alternatives to be added }_"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"### \\[Proposed\\] Data archiving"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"_{ Explain here how the data archiving feature will be implemented }_"}],"authorContributionMap":{"KevinEyo1":44}},{"path":"packages/core/template/project/developerGuide/Requirements.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Requirements\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Requirements"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section can be used to describe the requirements of the app, through the use of user stories, use cases."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"### Product scope"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"**Target user profile**:"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"* user needs"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"* user preferences"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"* user information"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"**Value proposition**: Benefit compared to other similar products"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"**Non-Functional Requirements**:"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"* OS requirements"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"* Peformance"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"* Security"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"### User stories"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"|----------|--------------------------------|----------------|---------------------|"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"| `* * *` | new user | see something | visualise something |"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"| `* *` | user | do something | complete something |"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"| `*` | user with specific information | sort something | find something |"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"*{More to be added}*"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"### Use cases"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":"(For all use cases below, the **System** is the `ProjectEx` and the **Actor** is the `User`, unless specified otherwise)"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Use case 1: Do something**\"\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":" "},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"**MSS**"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":"1. User requests ProjectEx"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"1. ProjectEx provides response"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" Use case ends."},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"**Extensions**"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"* 2a. Requests fails."},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" Use case ends."},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"* 2b. User request is invalid."},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":" * 2b1. ProjectEx shows an error message."},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":" Use case resumes at step 2."},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":"*{More to be added}*"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":"### Non-Functional Requirements"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed."},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage."},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":"*{More to be added}*"}],"authorContributionMap":{"KevinEyo1":75}},{"path":"packages/core/template/project/developerGuide/SettingUp.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Setting up and getting started\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Setting up and getting started"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to help developers with setting up the project in their local environment."},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"## Setting up the project in your computer"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"**Caution:**"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"Follow the steps in the following guide precisely. Things will not work out if you deviate in some steps."},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"First, **fork** the project repo, and **clone** the fork into your computer."},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"\u003cpopover id\u003d\"pop:trigger_id\" content\u003d\"eg. `init` or `build` commands\"\u003e\u003c/popover\u003e"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"(Example) Steps to setup the project environment:"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"1. **Download packages**: Run `npm install` to download the required packages."},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"1. **Run setup commands**: Run \u003ctrigger for\u003d\"pop:trigger_id\"\u003ecommands\u003c/trigger\u003e needed to setup the project."},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" \u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" Note: Remember to run commands from the appropriate directory."},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":" \u003c/box\u003e"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"1. **Configure files**: Edit config files according to your needs. For example, changing the `appTitle` in `config.js` to match your project name."},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"1. **Verify the setup (optional)**:"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" 1. Run the `build` and `serve` commands, ensuring that the site properly deploys on your local host."},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" 1. [Run the tests](Testing.md) to ensure they all pass."},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"## Before writing code"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"1. **Configure the coding style**"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" Configure your VSCode or IDEA checkstyle to allign with the project\u0027s coding style."},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":" \u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":" **Tip:**"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":" You can easily customize your IDE\u0027s coding style through settings."},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" \u003c/box\u003e"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"1. **Set up CI**"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" This project comes with a GitHub Actions config files (in `.github/workflows` folder). When GitHub detects those files, it will run the CI for your project automatically at each push to the `master` branch or to any PR. No set up required."},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":"1. **Learn the design**"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" When you are ready to start coding, we recommend that you get some sense of the overall design by reading about [ProjectEx’s architecture](Design.md#Architecture)."},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":"1. **Do the tutorial**"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" The [Tracing Code tutorial](TracingCode.md) can help you get acquainted with the codebase."},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":" "}],"authorContributionMap":{"KevinEyo1":63}},{"path":"packages/core/template/project/developerGuide/Testing.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Testing guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Testing guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This page can be used to understand the testing processes."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"## Running tests"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"* **Method 1: Using script**"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" * Create script for running tests in package.json"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" * Open a console and run the command for the script, like `npm run test`"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"## Types of tests"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"This project has two types of tests:"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**1. Unit tests**\"\u003e"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"These tests target the lowest level methods/classes.\u003cbr\u003e"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"Example command (replace with your own): `npm run test`"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**2. Integration tests**\"\u003e"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"These tests are checking the integration of multiple code units (those code units are assumed to be working)."},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"}],"authorContributionMap":{"KevinEyo1":33}},{"path":"packages/core/template/project/developerGuide/TracingCode.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Tutorial: Tracing code\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Tutorial: Tracing code"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"\u003e Indeed, the ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. …​\\[Therefore,\\] making it easy to read makes it easier to write."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"\u003e — Robert C. Martin Clean Code: A Handbook of Agile Software Craftsmanship"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"This page can be taken as a reference on a tutorial on how to trace the execution path of a user command through the codebase of the App."},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"To understand an unfamiliar codebase, one strategy is to trace some representative execution path through the codebase using a debugger."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"## Before we start"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"Before we jump into the code, it is useful to get an idea of the overall structure and the high-level behavior of the application."},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"Architecture diagrams can be easily utilised with the [`puml`](https://markbind.org/userGuide/components/imagesAndDiagrams.html#diagrams) tag. The `src` attribute specifies the path to the PlantUML file."},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"\u003cpuml src\u003d\"../diagrams/example.puml\" width\u003d300 /\u003e"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"Before we proceed, ensure that you have done the following:"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"1. Read the [*Architecture* section of the DG](Design.html#architecture)"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"1. Set up the project in your preferred IDE"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"## Setting a breakpoint"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"As you know, the first step of debugging is to put in a breakpoint where you want the debugger to pause the execution."},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":"**Tip:** You can use a combination of Markbind\u0027s [**Images and Diagrams** features](https://markbind.org/userGuide/components/imagesAndDiagrams.html) such as `puml` and `pic` tags to provide a visual representation of the steps to be taken. [**Code blocks**](https://markbind.org/userGuide/formattingContents.html#code) can also be used as shown below."},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"```java"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"public interface Example {"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" /**"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" * Executes returns the output."},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" * @param exampleInput The input as entered by the user."},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":" * @return The example output."},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":" * @throws ExampleException If an error occurs."},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":" */"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" ExampleOutput execute(String exampleInput) throws ExampleException;"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":"..."},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":"```"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"## Tracing the execution path"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":"**Tip:** You can use a list of steps to guide the reader through the process of tracing the execution path. This can be done using Markbind\u0027s [**Lists** feature](https://markbind.org/userGuide/formattingContents.html#lists)."},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":"1. Firstly, do this."},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":"1. Next, do that."},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":"1. Finally, do this."}],"authorContributionMap":{"KevinEyo1":71}},{"path":"packages/core/template/project/index.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"# ProjectEx"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"[![CI Status](https://github.com/MarkBind/markbind/workflows/CI/badge.svg)](https://github.com/MarkBind/markbind/actions)"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"[![codecov](https://codecov.io/gh/MarkBind/markbind/branch/master/graph/badge.svg)](https://codecov.io/gh/MarkBind/markbind)"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003cpic src\u003d\"images/SeEduLogo.png\" width\u003d\"200px\" style\u003d\"margin-bottom: 20px;\"\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"Project Onboarding Screen"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"\u003c/pic\u003e"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"**ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation.** "},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"Take this template as a _starting point_ for your project documentation, taking reference of what would be in a typical project documentation site, replacing the content with your own."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"* If you are interested in using ProjectEx, head over to the [_Quick Start_ section of the **User Guide**](userGuide/QuickStart.html)."},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"* If you are interested about contributing to developing ProjectEx, the [**Developer Guide**](developerGuide/DeveloperGuide.html) is a good place to start."},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"**Acknowledgements**"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"Remember to replace the following with your own acknowledgements."},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)"}],"authorContributionMap":{"KevinEyo1":31}},{"path":"packages/core/template/project/site.json","fileType":"json","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"{"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" \"baseUrl\": \"\","},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" \"titlePrefix\": \"\","},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" \"titleSuffix\": \"ProjectEx\","},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" \"faviconPath\": \"images/SeEduLogo.png\","},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":" \"style\": {"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":" \"codeTheme\": \"light\""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" \"ignore\": ["},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":" \"_markbind/layouts/*\","},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" \"_markbind/logs/*\","},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":" \"_site/*\","},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" \"site.json\","},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":" \"*.md\","},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":" \"*.njk\","},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":" \".git/*\","},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" \"node_modules/*\""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" ],"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" \"pagesExclude\": [\"node_modules/*\"],"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" \"pages\": ["},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" {"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" \"glob\": [\"**/index.md\", \"**/*.md\"]"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" ],"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":" \"deploy\": {"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":" \"message\": \"Site Update.\""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" },"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" \"timeZone\": \"Asia/Singapore\""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":29}},{"path":"packages/core/template/project/stylesheets/main.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"mark {"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" background-color: #ff0;"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 5px;"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" padding-top: 0;"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":" padding-bottom: 0;"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":".indented {"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":" padding-left: 20px;"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":".theme-card img {"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":" width: 100%;"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"/* Scrollbar */"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar {"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" width: 5px;"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar-thumb {"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":" background: #808080;"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll::-webkit-scrollbar-track {"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":" background: transparent;"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar {"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" width: 5px;"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar-thumb {"},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":" background: #00b0ef;"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":".slim-scroll-blue::-webkit-scrollbar-track {"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":" background: transparent;"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" border-radius: 20px;"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":"/* Layout containers */"},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"#flex-body {"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":" display: flex;"},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":" flex: 1;"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":" align-items: start;"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"#content-wrapper {"},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":" flex: 1;"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":" margin: 0 auto;"},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":" min-width: 0;"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":" max-width: 1000px;"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":" overflow-x: auto;"},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":" padding: 0.8rem 20px 0;"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":" transition: 0.4s;"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":"#site-nav,"},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"#page-nav {"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":" display: flex;"},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":" flex-direction: column;"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":" position: sticky;"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":" top: var(--sticky-header-height);"},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":" flex: 0 0 auto;"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":" max-width: 300px;"},{"lineNumber":72,"author":{"gitId":"KevinEyo1"},"content":" max-height: calc(100vh - var(--sticky-header-height));"},{"lineNumber":73,"author":{"gitId":"KevinEyo1"},"content":" width: 300px;"},{"lineNumber":74,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":75,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":76,"author":{"gitId":"KevinEyo1"},"content":"#site-nav {"},{"lineNumber":77,"author":{"gitId":"KevinEyo1"},"content":" border-right: 1px solid lightgrey;"},{"lineNumber":78,"author":{"gitId":"KevinEyo1"},"content":" padding-bottom: 20px;"},{"lineNumber":79,"author":{"gitId":"KevinEyo1"},"content":" z-index: 999;"},{"lineNumber":80,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":81,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":82,"author":{"gitId":"KevinEyo1"},"content":".nav-component {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":84,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":85,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":86,"author":{"gitId":"KevinEyo1"},"content":"#page-nav {"},{"lineNumber":87,"author":{"gitId":"KevinEyo1"},"content":" border-left: 1px solid lightgrey;"},{"lineNumber":88,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":89,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":90,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 1299.98px) {"},{"lineNumber":91,"author":{"gitId":"KevinEyo1"},"content":" #page-nav {"},{"lineNumber":92,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":93,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":94,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":95,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":96,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap medium(md) responsive breakpoint */"},{"lineNumber":97,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 991.98px) {"},{"lineNumber":98,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":99,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":100,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":101,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":102,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":103,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap small(sm) responsive breakpoint */"},{"lineNumber":104,"author":{"gitId":"KevinEyo1"},"content":"@media (width \u003c\u003d 767.98px) {"},{"lineNumber":105,"author":{"gitId":"KevinEyo1"},"content":" .indented {"},{"lineNumber":106,"author":{"gitId":"KevinEyo1"},"content":" padding-left: 10px;"},{"lineNumber":107,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":108,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":109,"author":{"gitId":"KevinEyo1"},"content":" #content-wrapper {"},{"lineNumber":110,"author":{"gitId":"KevinEyo1"},"content":" padding: 0 10px;"},{"lineNumber":111,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":112,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":113,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":114,"author":{"gitId":"KevinEyo1"},"content":"/* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":115,"author":{"gitId":"KevinEyo1"},"content":"@media screen and (width \u003c\u003d 575.98px) {"},{"lineNumber":116,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":117,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":118,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":119,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":120,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":121,"author":{"gitId":"KevinEyo1"},"content":"/* Hide site navigation when printing */"},{"lineNumber":122,"author":{"gitId":"KevinEyo1"},"content":"@media print {"},{"lineNumber":123,"author":{"gitId":"KevinEyo1"},"content":" #site-nav {"},{"lineNumber":124,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":125,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":126,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":127,"author":{"gitId":"KevinEyo1"},"content":" #page-nav {"},{"lineNumber":128,"author":{"gitId":"KevinEyo1"},"content":" display: none;"},{"lineNumber":129,"author":{"gitId":"KevinEyo1"},"content":" }"},{"lineNumber":130,"author":{"gitId":"KevinEyo1"},"content":"}"},{"lineNumber":131,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":132,"author":{"gitId":"KevinEyo1"},"content":"h2,"},{"lineNumber":133,"author":{"gitId":"KevinEyo1"},"content":"h3,"},{"lineNumber":134,"author":{"gitId":"KevinEyo1"},"content":"h4,"},{"lineNumber":135,"author":{"gitId":"KevinEyo1"},"content":"h5,"},{"lineNumber":136,"author":{"gitId":"KevinEyo1"},"content":"h6 {"},{"lineNumber":137,"author":{"gitId":"KevinEyo1"},"content":" color: #e46c0a;"},{"lineNumber":138,"author":{"gitId":"KevinEyo1"},"content":"}"}],"authorContributionMap":{"KevinEyo1":137,"-":1}},{"path":"packages/core/template/project/team/AboutUs.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"About Us\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"# About Us"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\"\u003e"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"This section describes the contributors of your app."},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"We are a team based in [Organisation A](#project-team)."},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"You can reach us at the email `organisationa@gmail.sg`"},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"## Project team"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"### John Doe"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"This img uses the `placeholderImage` defined in the `_markbind/variables.md` file."},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":"[[homepage](http://www.comp.nus.edu.sg/~damithch)]"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"[[github](https://github.com/johndoe)]"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"* Role: Project Advisor"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"### Jane Doe"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"[[github](http://github.com/johndoe)]"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":"* Role: Team Lead"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"* Responsibilities: UI"},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":"### Johnny Doe"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"[[github](http://github.com/johndoe)]"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"* Role: Developer"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":"* Responsibilities: Data"},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":"### Jean Doe"},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":55,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":56,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":57,"author":{"gitId":"KevinEyo1"},"content":"[[github](http://github.com/johndoe)]"},{"lineNumber":58,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":59,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":60,"author":{"gitId":"KevinEyo1"},"content":"* Role: Developer"},{"lineNumber":61,"author":{"gitId":"KevinEyo1"},"content":"* Responsibilities: Dev Ops + Threading"},{"lineNumber":62,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":63,"author":{"gitId":"KevinEyo1"},"content":"### James Doe"},{"lineNumber":64,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":65,"author":{"gitId":"KevinEyo1"},"content":"{{ placeholderImage }}"},{"lineNumber":66,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":67,"author":{"gitId":"KevinEyo1"},"content":"[[github](http://github.com/johndoe)]"},{"lineNumber":68,"author":{"gitId":"KevinEyo1"},"content":"[[contributions](johndoe.md)]"},{"lineNumber":69,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":70,"author":{"gitId":"KevinEyo1"},"content":"* Role: Developer"},{"lineNumber":71,"author":{"gitId":"KevinEyo1"},"content":"* Responsibilities: UI"}],"authorContributionMap":{"KevinEyo1":71}},{"path":"packages/core/template/project/team/johndoe.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Portfolio Page\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":"### Project: ProjectEx"},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation. It can be taken as a reference for users to base their own MarkBind sites off of."},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":" Content can be easily be replaced by the user\u0027s project information and context."},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"Given below are my contributions to the project."},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"* **New Feature**: Feature X"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":" * What it does: This feature does a thing"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":" * Justification: This feature is important because..."},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":" * Highlights:"},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":" * Point 1"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":" * Point 2"},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":" * Credits: *{mention here for reused code/ideas or use of a third-party library}*"},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"* **Code contributed**: [Github Repo]()"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"* **Project management**:"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub"},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"* **Enhancements to existing features**:"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":" * Wrote additional tests, increasing coverage to 92% (Pull requests [\\#36](), [\\#38]())"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":"* **Documentation**:"},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":" * User Guide:"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":" * Added documentation for feature [\\#72]()"},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":" * Developer Guide:"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":" * Added implementation details of feature."},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":"* **Community**:"},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())"},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":"* **Tools**:"},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"* _{ You can add/remove categories in the list above }_"}],"authorContributionMap":{"KevinEyo1":45}},{"path":"packages/core/template/project/userGuide/FAQ.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"FAQ\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# FAQ"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section answers common questions about the app or specific features."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Question:** How do I learn to use this project?\"\u003e"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":"**Answer:** Refer to the [User Guide](../userGuide/UserGuide.md)."},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":"\u003cbr\u003e"},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"**Question:** How do I contribute to this project?\"\u003e"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":"**Answer:** Refer to the [Developer Guide](../developerGuide/DeveloperGuide.md)."},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"}],"authorContributionMap":{"KevinEyo1":20}},{"path":"packages/core/template/project/userGuide/Features.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Features\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Features"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"info\" seamless\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"**Notes about the app usage**\u003cbr\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"* General information about the app\u0027s features."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"* General tips about how to use the app efficiently."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"* Warnings that may lead to issues and how to avoid them."},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"### FeatureX"},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"Description of feature."},{"lineNumber":23,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":24,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":25,"author":{"gitId":"KevinEyo1"},"content":"A visual representation of the feature can be shown here."},{"lineNumber":26,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":27,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":28,"author":{"gitId":"KevinEyo1"},"content":"* List of primary information about the feature"},{"lineNumber":29,"author":{"gitId":"KevinEyo1"},"content":"* How to use the feature"},{"lineNumber":30,"author":{"gitId":"KevinEyo1"},"content":"* How the feature works"},{"lineNumber":31,"author":{"gitId":"KevinEyo1"},"content":"* Limitations of feature"},{"lineNumber":32,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":33,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e"},{"lineNumber":34,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":35,"author":{"gitId":"KevinEyo1"},"content":"**Caution:**"},{"lineNumber":36,"author":{"gitId":"KevinEyo1"},"content":"Things to avoid when using the feature."},{"lineNumber":37,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":38,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":39,"author":{"gitId":"KevinEyo1"},"content":"### Y Feature"},{"lineNumber":40,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":41,"author":{"gitId":"KevinEyo1"},"content":"Description of feature."},{"lineNumber":42,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":43,"author":{"gitId":"KevinEyo1"},"content":"\u003cpanel header\u003d\"Feature Examples\"\u003e"},{"lineNumber":44,"author":{"gitId":"KevinEyo1"},"content":"Examples of how to use the feature."},{"lineNumber":45,"author":{"gitId":"KevinEyo1"},"content":"\u003c/panel\u003e"},{"lineNumber":46,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":47,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e"},{"lineNumber":48,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":49,"author":{"gitId":"KevinEyo1"},"content":"**Tip:** Secondary information about feature usage."},{"lineNumber":50,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":51,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":52,"author":{"gitId":"KevinEyo1"},"content":"### Future Feature Z `[coming in v2.0]`"},{"lineNumber":53,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":54,"author":{"gitId":"KevinEyo1"},"content":"_Details coming soon ..._"}],"authorContributionMap":{"KevinEyo1":54}},{"path":"packages/core/template/project/userGuide/QuickStart.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"Quick Start\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Quick start"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"\u003cbox type\u003d\"tip\"\u003e"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"This section can be used to help users get started with the application quickly."},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"\u003c/box\u003e"},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"1. Ensure you have Java `11` and Node.js `v16` and above installed in your Computer."},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"1. Open a command terminal and run necessary setup commands like `npm run setup`."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"1. Refer to the [Features](Features.html) section for details of the app\u0027s features."}],"authorContributionMap":{"KevinEyo1":17}},{"path":"packages/core/template/project/userGuide/UserGuide.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":" layout: default.md"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":" title: \"User Guide\""},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":" pageNav: 3"},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"---"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# ProjectEx User Guide"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"--------------------------------------------------------------------------------------------------------------------"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":"ProjectEx is an example project application used for showcasing a default MarkBind template specifically for project documentation. It can be taken as a reference for users to base their own MarkBind sites off of."},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":"## Introduction"},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":"Welcome to the User Guide. This comprehensive resource is designed to assist you in navigating and utilizing our software to its fullest potential."},{"lineNumber":16,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":17,"author":{"gitId":"KevinEyo1"},"content":"## Purpose of this Guide"},{"lineNumber":18,"author":{"gitId":"KevinEyo1"},"content":"This guide aims to:"},{"lineNumber":19,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":20,"author":{"gitId":"KevinEyo1"},"content":"1. Equip users with the necessary knowledge."},{"lineNumber":21,"author":{"gitId":"KevinEyo1"},"content":"1. Offer step-by-step instructions for common tasks and operations."},{"lineNumber":22,"author":{"gitId":"KevinEyo1"},"content":"1. Provide tips and tricks to streamline the user experience."}],"authorContributionMap":{"KevinEyo1":22}},{"path":"packages/vue-components/src/Box.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":3,"author":{"gitId":"-"},"content":" :class\u003d\"["},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u0027alert box-container\u0027,"},{"lineNumber":5,"author":{"gitId":"-"},"content":" containerStyle(),"},{"lineNumber":6,"author":{"gitId":"-"},"content":" addClass,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" { \u0027d-flex\u0027: seamlessHeaderBool() },"},{"lineNumber":8,"author":{"gitId":"-"},"content":" ]\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" :style\u003d\"customStyle()\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003c!--Icon and vertical divider for seamless header box--\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"seamlessHeaderBool()\" class\u003d\"d-flex\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":14,"author":{"gitId":"-"},"content":" v-if\u003d\"iconBool()\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027icon-wrapper\u0027, iconStyle()]\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" :style\u003d\"customIconColorStyle()\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"icon\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003ci :class\u003d\"[\u0027fas\u0027, getFontAwesomeIconStyle()]\"\u003e\u003c/i\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":23,"author":{"gitId":"-"},"content":" class\u003d\"vertical-divider\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" :class\u003d\"getBootstrapAlertStyle()\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" aria-hidden\u003d\"true\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"header-and-body\"\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c!-- Header wrapper, not rendered if there is no header attribute --\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":32,"author":{"gitId":"-"},"content":" v-if\u003d\"headerBool()\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027box-header-wrapper\u0027, { \u0027alert-dismissible\u0027: dismissible }]\""},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c!-- icon on the left of the header --\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":37,"author":{"gitId":"-"},"content":" v-if\u003d\"iconBool() \u0026\u0026 !seamlessHeaderBool()\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027icon-wrapper\u0027, iconStyle()]\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" :style\u003d\"customIconColorStyle()\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"icon\"\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003ci :class\u003d\"[\u0027fas\u0027, getFontAwesomeIconStyle()]\"\u003e\u003c/i\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003c!-- header --\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"box-header\"\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003c!-- dismiss button to the right of the header --\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":53,"author":{"gitId":"-"},"content":" v-if\u003d\"dismissible\""},{"lineNumber":54,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" class\u003d\"btn-close close-with-heading\""},{"lineNumber":56,"author":{"gitId":"-"},"content":" data-bs-dismiss\u003d\"alert\""},{"lineNumber":57,"author":{"gitId":"-"},"content":" aria-label\u003d\"Close\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c!-- Body wrapper --\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":64,"author":{"gitId":"-"},"content":" :class\u003d\"["},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u0027box-body-wrapper\u0027,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u0027alert-dismissible\u0027: dismissible \u0026\u0026 !headerBool(),"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u0027box-body-wrapper-with-heading\u0027: headerBool(),"},{"lineNumber":69,"author":{"gitId":"-"},"content":" },"},{"lineNumber":70,"author":{"gitId":"-"},"content":" ]\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003c!-- icon on the left, not shown if there is a header --\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":74,"author":{"gitId":"-"},"content":" v-if\u003d\"iconBool() \u0026\u0026 !headerBool()\""},{"lineNumber":75,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027icon-wrapper\u0027, iconStyle()]\""},{"lineNumber":76,"author":{"gitId":"-"},"content":" :style\u003d\"customIconColorStyle()\""},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"icon\"\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003ci :class\u003d\"[\u0027fas\u0027, getFontAwesomeIconStyle()]\"\u003e\u003c/i\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003c!-- Icon -- content divider for seamless boxes without the header attribute --\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":85,"author":{"gitId":"-"},"content":" v-if\u003d\"seamlessNoHeaderBool()\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" class\u003d\"vertical-divider\""},{"lineNumber":87,"author":{"gitId":"-"},"content":" :class\u003d\"getBootstrapAlertStyle()\""},{"lineNumber":88,"author":{"gitId":"-"},"content":" aria-hidden\u003d\"true\""},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":""},{"lineNumber":91,"author":{"gitId":"-"},"content":" \u003c!-- Content wrapper --\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"contents\" :style\u003d\"customColorStyle()\"\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":""},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003c!-- dismiss button on the right, not shown if there is a header --\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":98,"author":{"gitId":"-"},"content":" v-if\u003d\"dismissible \u0026\u0026 !headerBool()\""},{"lineNumber":99,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":100,"author":{"gitId":"-"},"content":" class\u003d\"btn-close\""},{"lineNumber":101,"author":{"gitId":"-"},"content":" data-bs-dismiss\u003d\"alert\""},{"lineNumber":102,"author":{"gitId":"-"},"content":" aria-label\u003d\"Close\""},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":""},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":"import { classifyBootstrapStyle } from \u0027./utils/utils\u0027;"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" dismissible: {"},{"lineNumber":116,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":117,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":118,"author":{"gitId":"-"},"content":" },"},{"lineNumber":119,"author":{"gitId":"-"},"content":" backgroundColor: {"},{"lineNumber":120,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":121,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":122,"author":{"gitId":"-"},"content":" },"},{"lineNumber":123,"author":{"gitId":"-"},"content":" borderColor: {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" },"},{"lineNumber":127,"author":{"gitId":"-"},"content":" borderLeftColor: {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":129,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":130,"author":{"gitId":"-"},"content":" },"},{"lineNumber":131,"author":{"gitId":"-"},"content":" color: {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":133,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":134,"author":{"gitId":"-"},"content":" },"},{"lineNumber":135,"author":{"gitId":"-"},"content":" icon: {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":137,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":138,"author":{"gitId":"-"},"content":" },"},{"lineNumber":139,"author":{"gitId":"-"},"content":" iconSize: {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":141,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":142,"author":{"gitId":"-"},"content":" },"},{"lineNumber":143,"author":{"gitId":"-"},"content":" iconColor: {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":145,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":146,"author":{"gitId":"-"},"content":" },"},{"lineNumber":147,"author":{"gitId":"-"},"content":" type: {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":149,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":150,"author":{"gitId":"-"},"content":" },"},{"lineNumber":151,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":153,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":154,"author":{"gitId":"-"},"content":" },"},{"lineNumber":155,"author":{"gitId":"-"},"content":" light: {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":157,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":158,"author":{"gitId":"-"},"content":" },"},{"lineNumber":159,"author":{"gitId":"-"},"content":" seamless: {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":161,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":162,"author":{"gitId":"-"},"content":" },"},{"lineNumber":163,"author":{"gitId":"-"},"content":" noIcon: {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":165,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":166,"author":{"gitId":"-"},"content":" },"},{"lineNumber":167,"author":{"gitId":"-"},"content":" noBackground: {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":169,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":170,"author":{"gitId":"-"},"content":" },"},{"lineNumber":171,"author":{"gitId":"-"},"content":" noBorder: {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":173,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":174,"author":{"gitId":"-"},"content":" },"},{"lineNumber":175,"author":{"gitId":"-"},"content":" theme: {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":177,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":178,"author":{"gitId":"-"},"content":" },"},{"lineNumber":179,"author":{"gitId":"-"},"content":" },"},{"lineNumber":180,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" bootStrapStyle() {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" return classifyBootstrapStyle(this.type, this.theme);"},{"lineNumber":183,"author":{"gitId":"-"},"content":" },"},{"lineNumber":184,"author":{"gitId":"-"},"content":" },"},{"lineNumber":185,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" isSeamless() {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return !this.light \u0026\u0026 this.seamless;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" },"},{"lineNumber":189,"author":{"gitId":"-"},"content":" seamlessNoHeaderBool() {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" return this.isSeamless() \u0026\u0026 !this.headerBool();"},{"lineNumber":191,"author":{"gitId":"-"},"content":" },"},{"lineNumber":192,"author":{"gitId":"-"},"content":" seamlessHeaderBool() {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" return this.isSeamless() \u0026\u0026 this.headerBool();"},{"lineNumber":194,"author":{"gitId":"-"},"content":" },"},{"lineNumber":195,"author":{"gitId":"-"},"content":" headerBool() {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" return !!this.$scopedSlots.header;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" },"},{"lineNumber":198,"author":{"gitId":"-"},"content":" iconBool() {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" // this.$scopedSlots.icon is either undefined or an object"},{"lineNumber":200,"author":{"gitId":"-"},"content":" const isIconSlotFilled \u003d !!this.$scopedSlots.icon;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" return (!this.noIcon \u0026\u0026 this.type) || isIconSlotFilled;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" },"},{"lineNumber":203,"author":{"gitId":"-"},"content":" containerStyle() {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" let containerStyle;"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" if (this.light) {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" containerStyle \u003d `${this.getBootstrapBorderStyle()} alert-border-left`;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" } else if (this.seamless) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" containerStyle \u003d \u0027seamless\u0027;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" containerStyle \u003d this.getBootstrapAlertStyle();"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":""},{"lineNumber":214,"author":{"gitId":"-"},"content":" if (this.noBackground) {"},{"lineNumber":215,"author":{"gitId":"-"},"content":" containerStyle +\u003d \u0027 no-background\u0027;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" if (this.noBorder) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" containerStyle +\u003d \u0027 no-border\u0027;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" return containerStyle;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" },"},{"lineNumber":224,"author":{"gitId":"-"},"content":" customStyle() {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" const style \u003d {};"},{"lineNumber":226,"author":{"gitId":"-"},"content":" if (this.backgroundColor) {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" style.backgroundColor \u003d this.backgroundColor;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" style.borderColor \u003d this.backgroundColor;"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }"},{"lineNumber":230,"author":{"gitId":"-"},"content":" if (this.borderColor) {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" style.border \u003d `1px solid ${this.borderColor}`;"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }"},{"lineNumber":233,"author":{"gitId":"-"},"content":" if (this.borderLeftColor) {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" style.borderLeft \u003d `5px solid ${this.borderLeftColor}`;"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":" return style;"},{"lineNumber":237,"author":{"gitId":"-"},"content":" },"},{"lineNumber":238,"author":{"gitId":"-"},"content":" customColorStyle() {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" if (this.color) {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" return { color: this.color };"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":" return {};"},{"lineNumber":243,"author":{"gitId":"-"},"content":" },"},{"lineNumber":244,"author":{"gitId":"-"},"content":" iconStyle() {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" let iconStyle \u003d \u0027\u0027;"},{"lineNumber":246,"author":{"gitId":"-"},"content":" if (this.iconSize) {"},{"lineNumber":247,"author":{"gitId":"-"},"content":" iconStyle +\u003d `fa-${this.iconSize}`;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" if (this.light || this.seamless) {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" iconStyle +\u003d ` ${this.getBootstrapTextStyle()}`;"},{"lineNumber":252,"author":{"gitId":"-"},"content":" }"},{"lineNumber":253,"author":{"gitId":"-"},"content":""},{"lineNumber":254,"author":{"gitId":"-"},"content":" return iconStyle;"},{"lineNumber":255,"author":{"gitId":"-"},"content":" },"},{"lineNumber":256,"author":{"gitId":"-"},"content":" customIconColorStyle() {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" if (this.iconColor) {"},{"lineNumber":258,"author":{"gitId":"-"},"content":" return { color: `${this.iconColor}!important` };"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }"},{"lineNumber":260,"author":{"gitId":"-"},"content":" return {};"},{"lineNumber":261,"author":{"gitId":"-"},"content":" },"},{"lineNumber":262,"author":{"gitId":"-"},"content":" getBootstrapAlertStyle() {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" return `alert-${this.bootStrapStyle.style}`;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" },"},{"lineNumber":265,"author":{"gitId":"-"},"content":" getBootstrapTextStyle() {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" return `text-${this.bootStrapStyle.style}`;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" },"},{"lineNumber":268,"author":{"gitId":"-"},"content":" getBootstrapBorderStyle() {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" return `border-${this.bootStrapStyle.style}`;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" },"},{"lineNumber":271,"author":{"gitId":"-"},"content":" getFontAwesomeIconStyle() {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" return this.bootStrapStyle.icon;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" },"},{"lineNumber":274,"author":{"gitId":"-"},"content":" },"},{"lineNumber":275,"author":{"gitId":"-"},"content":"};"},{"lineNumber":276,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":""},{"lineNumber":278,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":279,"author":{"gitId":"-"},"content":" .box-container {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":281,"author":{"gitId":"-"},"content":" border-radius: 6px;"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" .box-header-wrapper {"},{"lineNumber":285,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":286,"author":{"gitId":"-"},"content":" flex-direction: row;"},{"lineNumber":287,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":288,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":289,"author":{"gitId":"LamJiuFong"},"content":" padding: 0.4rem 1.25rem 0.28rem;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" border-radius: 6px 6px 0 0;"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" .box-body-wrapper {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" flex-direction: row;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" padding: 0.75rem 1.25rem;"},{"lineNumber":298,"author":{"gitId":"-"},"content":" }"},{"lineNumber":299,"author":{"gitId":"-"},"content":""},{"lineNumber":300,"author":{"gitId":"-"},"content":" .box-container.seamless \u003e .header-and-body \u003e .box-body-wrapper {"},{"lineNumber":301,"author":{"gitId":"-"},"content":" padding: 0.75rem 0.5rem;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" }"},{"lineNumber":303,"author":{"gitId":"-"},"content":""},{"lineNumber":304,"author":{"gitId":"-"},"content":" .contents {"},{"lineNumber":305,"author":{"gitId":"-"},"content":" padding: 0 6px;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":307,"author":{"gitId":"-"},"content":" min-width: 0;"},{"lineNumber":308,"author":{"gitId":"-"},"content":" }"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" .box-container.seamless \u003e .header-and-body \u003e div.box-body-wrapper \u003e .contents {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" padding-left: 12px;"},{"lineNumber":312,"author":{"gitId":"-"},"content":" }"},{"lineNumber":313,"author":{"gitId":"-"},"content":""},{"lineNumber":314,"author":{"gitId":"-"},"content":" .heading {"},{"lineNumber":315,"author":{"gitId":"-"},"content":" display: inline;"},{"lineNumber":316,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":317,"author":{"gitId":"-"},"content":" font-weight: normal;"},{"lineNumber":318,"author":{"gitId":"-"},"content":" color: inherit;"},{"lineNumber":319,"author":{"gitId":"LamJiuFong"},"content":" background-color: rgb(240 240 240 / 60%);"},{"lineNumber":320,"author":{"gitId":"-"},"content":" width: auto;"},{"lineNumber":321,"author":{"gitId":"LamJiuFong"},"content":" padding: 3px 5px 4px;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" border-width: 0;"},{"lineNumber":323,"author":{"gitId":"LamJiuFong"},"content":" border-radius: 0 6px;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" margin: -13px -27px 0 15px;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":" .box-body-wrapper-with-heading {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" padding-top: 0.5rem;"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":""},{"lineNumber":331,"author":{"gitId":"-"},"content":" .alert-dismissible {"},{"lineNumber":332,"author":{"gitId":"-"},"content":" padding-right: 4rem;"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":""},{"lineNumber":335,"author":{"gitId":"-"},"content":" .box-header {"},{"lineNumber":336,"author":{"gitId":"-"},"content":" font-weight: 500;"},{"lineNumber":337,"author":{"gitId":"-"},"content":" }"},{"lineNumber":338,"author":{"gitId":"-"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":" .icon-wrapper {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" display: inline;"},{"lineNumber":341,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":342,"author":{"gitId":"-"},"content":" margin-right: 0.5em;"},{"lineNumber":343,"author":{"gitId":"-"},"content":" min-width: 1em;"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" .close-with-heading {"},{"lineNumber":347,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":348,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":349,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":350,"author":{"gitId":"-"},"content":" padding: 1rem;"},{"lineNumber":351,"author":{"gitId":"-"},"content":" }"},{"lineNumber":352,"author":{"gitId":"-"},"content":""},{"lineNumber":353,"author":{"gitId":"-"},"content":" .close-with-heading \u003e span {"},{"lineNumber":354,"author":{"gitId":"-"},"content":" vertical-align: text-top;"},{"lineNumber":355,"author":{"gitId":"-"},"content":" }"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":" .alert-dismissible .btn-close {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" padding: 1rem;"},{"lineNumber":359,"author":{"gitId":"-"},"content":" }"},{"lineNumber":360,"author":{"gitId":"-"},"content":""},{"lineNumber":361,"author":{"gitId":"-"},"content":" .contents \u003e :last-child {"},{"lineNumber":362,"author":{"gitId":"-"},"content":" margin-bottom: 0;"},{"lineNumber":363,"author":{"gitId":"-"},"content":" }"},{"lineNumber":364,"author":{"gitId":"-"},"content":""},{"lineNumber":365,"author":{"gitId":"-"},"content":" .alert-default {"},{"lineNumber":366,"author":{"gitId":"-"},"content":" color: #24292e;"},{"lineNumber":367,"author":{"gitId":"-"},"content":" background-color: #f6f8fa;"},{"lineNumber":368,"author":{"gitId":"-"},"content":" border-color: #e8ebef;"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":""},{"lineNumber":371,"author":{"gitId":"-"},"content":" .alert-border-left {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" background-color: #f9f8f8;"},{"lineNumber":373,"author":{"gitId":"-"},"content":" border-left: solid;"},{"lineNumber":374,"author":{"gitId":"-"},"content":" border-width: 0 0 0 5px;"},{"lineNumber":375,"author":{"gitId":"-"},"content":" }"},{"lineNumber":376,"author":{"gitId":"-"},"content":""},{"lineNumber":377,"author":{"gitId":"-"},"content":" .vertical-divider {"},{"lineNumber":378,"author":{"gitId":"-"},"content":" width: 4px;"},{"lineNumber":379,"author":{"gitId":"-"},"content":" }"},{"lineNumber":380,"author":{"gitId":"-"},"content":""},{"lineNumber":381,"author":{"gitId":"-"},"content":" .horizontal-divider {"},{"lineNumber":382,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":383,"author":{"gitId":"-"},"content":" width: calc(100% - 2.5rem);"},{"lineNumber":384,"author":{"gitId":"-"},"content":" height: 3px;"},{"lineNumber":385,"author":{"gitId":"-"},"content":" }"},{"lineNumber":386,"author":{"gitId":"-"},"content":""},{"lineNumber":387,"author":{"gitId":"-"},"content":" .no-background {"},{"lineNumber":388,"author":{"gitId":"-"},"content":" background: none;"},{"lineNumber":389,"author":{"gitId":"-"},"content":" }"},{"lineNumber":390,"author":{"gitId":"-"},"content":""},{"lineNumber":391,"author":{"gitId":"-"},"content":" .no-border {"},{"lineNumber":392,"author":{"gitId":"-"},"content":" border: none;"},{"lineNumber":393,"author":{"gitId":"-"},"content":" }"},{"lineNumber":394,"author":{"gitId":"-"},"content":""},{"lineNumber":395,"author":{"gitId":"LamJiuFong"},"content":" @media screen and (width \u003c\u003d 768px) {"},{"lineNumber":396,"author":{"gitId":"-"},"content":" .box-header-wrapper {"},{"lineNumber":397,"author":{"gitId":"-"},"content":" padding: 0.75rem 0.75rem 0.1rem;"},{"lineNumber":398,"author":{"gitId":"-"},"content":" }"},{"lineNumber":399,"author":{"gitId":"-"},"content":""},{"lineNumber":400,"author":{"gitId":"-"},"content":" .box-body-wrapper {"},{"lineNumber":401,"author":{"gitId":"-"},"content":" padding: 0.75rem;"},{"lineNumber":402,"author":{"gitId":"-"},"content":" }"},{"lineNumber":403,"author":{"gitId":"-"},"content":""},{"lineNumber":404,"author":{"gitId":"-"},"content":" .contents {"},{"lineNumber":405,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":406,"author":{"gitId":"-"},"content":" }"},{"lineNumber":407,"author":{"gitId":"-"},"content":" }"},{"lineNumber":408,"author":{"gitId":"-"},"content":"\u003c/style\u003e"},{"lineNumber":409,"author":{"gitId":"-"},"content":""},{"lineNumber":410,"author":{"gitId":"-"},"content":"\u003c!-- TODO move this once we upgrade vue-loader version for scoped deep selectors --\u003e"},{"lineNumber":411,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":412,"author":{"gitId":"-"},"content":" div.box-header \u003e * {"},{"lineNumber":413,"author":{"gitId":"-"},"content":" margin-bottom: 0;"},{"lineNumber":414,"author":{"gitId":"-"},"content":" }"},{"lineNumber":415,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":5,"-":410}},{"path":"packages/vue-components/src/Dropdown.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cli"},{"lineNumber":3,"author":{"gitId":"-"},"content":" v-if\u003d\"isLi\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"dropdown\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[{ \u0027disabled\u0027: disabledBool }, \u0027dropdown\u0027, addClass]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003ca"},{"lineNumber":9,"author":{"gitId":"-"},"content":" class\u003d\"dropdown-toggle nav-link\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" role\u003d\"button\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" :class\u003d\"{\u0027disabled\u0027: disabledBool}\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" data-bs-toggle\u003d\"dropdown\""},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"dropdown-menu\" :class\u003d\"[{ \u0027show\u0027: show }, { \u0027dropdown-menu-end\u0027: menuAlignRight }]\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cul class\u003d\"dropdown-menu\" :class\u003d\"[{ \u0027show\u0027: show }, { \u0027dropdown-menu-end\u0027: menuAlignRight }]\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003csubmenu v-else-if\u003d\"isSubmenu\" ref\u003d\"submenu\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003ctemplate v-for\u003d\"(node, name) in $scopedSlots\" #[name]\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cslot :name\u003d\"name\"\u003e\u003c/slot\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/template\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/submenu\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":29,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":30,"author":{"gitId":"-"},"content":" ref\u003d\"dropdown\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" :class\u003d\"[{ \u0027disabled\u0027: disabledBool }, \u0027btn-group\u0027, addClass]\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"before\"\u003e\u003c/slot\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":36,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" class\u003d\"btn dropdown-toggle\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"[btnType, btnWithBefore, { \u0027dropdown-toggle-split\u0027: hasBefore }]\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" :disabled\u003d\"disabledBool\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" data-bs-reference\u003d\"parent\""},{"lineNumber":41,"author":{"gitId":"-"},"content":" data-bs-toggle\u003d\"dropdown\""},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"dropdown-menu\" :class\u003d\"[{ \u0027show\u0027: show }, { \u0027dropdown-menu-end\u0027: menuAlignRight }]\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cul class\u003d\"dropdown-menu\" :class\u003d\"[{ \u0027show\u0027: show }, { \u0027dropdown-menu-end\u0027: menuAlignRight }]\"\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":"import Submenu from \u0027./Submenu.vue\u0027;"},{"lineNumber":56,"author":{"gitId":"-"},"content":"import { toBoolean } from \u0027./utils/utils\u0027;"},{"lineNumber":57,"author":{"gitId":"-"},"content":"import $ from \u0027./utils/NodeList\u0027;"},{"lineNumber":58,"author":{"gitId":"-"},"content":"import preventOverflowOnMobile from \u0027./utils/dropdown\u0027;"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Submenu,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" },"},{"lineNumber":64,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" disabled: {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" type: [Boolean, String],"},{"lineNumber":67,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" },"},{"lineNumber":69,"author":{"gitId":"-"},"content":" type: {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":71,"author":{"gitId":"-"},"content":" default: \u0027light\u0027,"},{"lineNumber":72,"author":{"gitId":"-"},"content":" },"},{"lineNumber":73,"author":{"gitId":"-"},"content":" menuAlignRight: {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":75,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" },"},{"lineNumber":77,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":79,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":80,"author":{"gitId":"-"},"content":" },"},{"lineNumber":81,"author":{"gitId":"-"},"content":" },"},{"lineNumber":82,"author":{"gitId":"-"},"content":" provide: { hasParentDropdown: true },"},{"lineNumber":83,"author":{"gitId":"-"},"content":" inject: {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" hasParentDropdown: {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":86,"author":{"gitId":"-"},"content":" },"},{"lineNumber":87,"author":{"gitId":"-"},"content":" isParentNavbar: {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":89,"author":{"gitId":"-"},"content":" },"},{"lineNumber":90,"author":{"gitId":"-"},"content":" },"},{"lineNumber":91,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" show: false,"},{"lineNumber":94,"author":{"gitId":"-"},"content":" };"},{"lineNumber":95,"author":{"gitId":"-"},"content":" },"},{"lineNumber":96,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":97,"author":{"gitId":"-"},"content":" btnType() {"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return `btn-${this.type}`;"},{"lineNumber":99,"author":{"gitId":"-"},"content":" },"},{"lineNumber":100,"author":{"gitId":"-"},"content":" disabledBool() {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return toBoolean(this.disabled);"},{"lineNumber":102,"author":{"gitId":"-"},"content":" },"},{"lineNumber":103,"author":{"gitId":"-"},"content":" isLi() { return this.$parent._navbar || this.$parent.menu || this.$parent._tabset; },"},{"lineNumber":104,"author":{"gitId":"-"},"content":" isSubmenu() { return this.hasParentDropdown; },"},{"lineNumber":105,"author":{"gitId":"-"},"content":" menu() {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" return !this.$parent || this.$parent.navbar;"},{"lineNumber":107,"author":{"gitId":"-"},"content":" },"},{"lineNumber":108,"author":{"gitId":"-"},"content":" submenu() {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return this.$parent \u0026\u0026 (this.$parent.menu || this.$parent.submenu);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" },"},{"lineNumber":111,"author":{"gitId":"-"},"content":" slots() {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" return this.$scopedSlots.default;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" },"},{"lineNumber":114,"author":{"gitId":"-"},"content":" hasBefore() {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" return !!this.$scopedSlots.before;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" },"},{"lineNumber":117,"author":{"gitId":"-"},"content":" btnWithBefore() {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" return this.hasBefore ? \u0027btn-with-before\u0027 : \u0027\u0027;"},{"lineNumber":119,"author":{"gitId":"-"},"content":" },"},{"lineNumber":120,"author":{"gitId":"-"},"content":" },"},{"lineNumber":121,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" blur() {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" this.unblur();"},{"lineNumber":124,"author":{"gitId":"-"},"content":" this._hide \u003d setTimeout(() \u003d\u003e {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" this._hide \u003d null;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" this.hideDropdownMenu();"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }, 100);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" },"},{"lineNumber":129,"author":{"gitId":"-"},"content":" unblur() {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" if (this._hide) {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" clearTimeout(this._hide);"},{"lineNumber":132,"author":{"gitId":"-"},"content":" this._hide \u003d null;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":" },"},{"lineNumber":135,"author":{"gitId":"-"},"content":" hideDropdownMenu() {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" this.show \u003d false;"},{"lineNumber":137,"author":{"gitId":"-"},"content":" $(this.$refs.dropdown).findChildren(\u0027ul\u0027).each((ul) \u003d\u003e {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" ul.classList.toggle(\u0027show\u0027, false);"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003c 768 \u0026\u0026 this.isParentNavbar) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" ul.style.removeProperty(\u0027left\u0027);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":" });"},{"lineNumber":144,"author":{"gitId":"-"},"content":" },"},{"lineNumber":145,"author":{"gitId":"-"},"content":" showDropdownMenu() {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" this.show \u003d true;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" $(this.$refs.dropdown).findChildren(\u0027ul\u0027).each((ul) \u003d\u003e {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" ul.classList.toggle(\u0027show\u0027, true);"},{"lineNumber":149,"author":{"gitId":"-"},"content":""},{"lineNumber":150,"author":{"gitId":"-"},"content":" // check if the dropdown is part of the sliding menu on mobile"},{"lineNumber":151,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003c 768 \u0026\u0026 this.isParentNavbar) {"},{"lineNumber":152,"author":{"gitId":"-"},"content":" preventOverflowOnMobile(ul);"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }"},{"lineNumber":154,"author":{"gitId":"-"},"content":" });"},{"lineNumber":155,"author":{"gitId":"-"},"content":" },"},{"lineNumber":156,"author":{"gitId":"-"},"content":" },"},{"lineNumber":157,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":158,"author":{"gitId":"-"},"content":" const $el \u003d $(this.$refs.dropdown);"},{"lineNumber":159,"author":{"gitId":"-"},"content":" if (this.$slots.button) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" // If the button is passed via props, manually add a data-bs-toggle"},{"lineNumber":161,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027.dropdown-toggle\u0027).forEach(child \u003d\u003e child.setAttribute(\u0027data-bs-toggle\u0027, \u0027dropdown\u0027));"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":" if (this.show) {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" this.showDropdownMenu();"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }"},{"lineNumber":166,"author":{"gitId":"-"},"content":" $el.onBlur(() \u003d\u003e { this.hideDropdownMenu(); }, false);"},{"lineNumber":167,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button.dropdown-toggle\u0027).on(\u0027click\u0027, (e) \u003d\u003e {"},{"lineNumber":168,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":169,"author":{"gitId":"-"},"content":" if (this.disabledBool) { return false; }"},{"lineNumber":170,"author":{"gitId":"-"},"content":" if (this.show) {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" this.hideDropdownMenu();"},{"lineNumber":172,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":173,"author":{"gitId":"-"},"content":" this.showDropdownMenu();"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" });"},{"lineNumber":177,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027ul\u0027).on(\u0027click\u0027, \u0027li\u003ea\u0027, (e) \u003d\u003e {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" if (e.target.classList.contains(\u0027submenu-toggle\u0027)) { return; }"},{"lineNumber":179,"author":{"gitId":"-"},"content":" this.hideDropdownMenu();"},{"lineNumber":180,"author":{"gitId":"-"},"content":" });"},{"lineNumber":181,"author":{"gitId":"-"},"content":" },"},{"lineNumber":182,"author":{"gitId":"-"},"content":" beforeDestroy() {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" const $el \u003d $(this.$refs.dropdown);"},{"lineNumber":184,"author":{"gitId":"-"},"content":" $el.offBlur();"},{"lineNumber":185,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button\u0027).off();"},{"lineNumber":186,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027ul\u0027).off();"},{"lineNumber":187,"author":{"gitId":"-"},"content":" },"},{"lineNumber":188,"author":{"gitId":"-"},"content":"};"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":""},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":192,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 767px) {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" .navbar-default .dropdown {"},{"lineNumber":194,"author":{"gitId":"-"},"content":" position: static;"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" .navbar-default .dropdown-menu {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":199,"author":{"gitId":"-"},"content":" max-width: 100%;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" max-height: 75vh;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" overflow-y: auto;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" overscroll-behavior: contain;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }"},{"lineNumber":204,"author":{"gitId":"-"},"content":""},{"lineNumber":205,"author":{"gitId":"-"},"content":" .navbar-default .dropdown-menu-end {"},{"lineNumber":206,"author":{"gitId":"-"},"content":" right: auto;"},{"lineNumber":207,"author":{"gitId":"-"},"content":" }"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }"},{"lineNumber":209,"author":{"gitId":"-"},"content":""},{"lineNumber":210,"author":{"gitId":"-"},"content":" .secret {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" clip: rect(0 0 0 0);"},{"lineNumber":213,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":214,"author":{"gitId":"-"},"content":" margin: -1px;"},{"lineNumber":215,"author":{"gitId":"-"},"content":" height: 1px;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" width: 1px;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" .btn-with-before {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" padding-left: 0.2rem;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" padding-right: 0.4rem;"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":" .dropdown-toggle {"},{"lineNumber":227,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":228,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":229,"author":{"gitId":"-"},"content":" width: max-content;"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" .navbar .dropdown-toggle {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" text-decoration: none;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }"},{"lineNumber":235,"author":{"gitId":"-"},"content":""},{"lineNumber":236,"author":{"gitId":"-"},"content":" .nav-link \u003e .nav-link {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":238,"author":{"gitId":"-"},"content":" }"},{"lineNumber":239,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":1,"-":238}},{"path":"packages/vue-components/src/Navbar.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cnav"},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"navbar\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027navbar\u0027, \u0027navbar-expand-md\u0027, \u0027d-print-none\u0027, themeOptions, addClass, fixedOptions]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"container-fluid\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"navbar-left\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"brand\"\u003e\u003c/slot\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cdiv ref\u003d\"navbarDefault\" class\u003d\"navbar-default\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cul class\u003d\"navbar-nav me-auto mt-2 mt-lg-0\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cul v-if\u003d\"slots.right\" class\u003d\"navbar-nav navbar-right\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"right\"\u003e\u003c/slot\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/nav\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":23,"author":{"gitId":"-"},"content":" v-show\u003d\"isLowerNavbarShowing\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" ref\u003d\"lowerNavbar\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" class\u003d\"lower-navbar-container\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"lower-navbar\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav-button /\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cpage-nav-button /\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import $ from \u0027./utils/NodeList\u0027;"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import { toBoolean } from \u0027./utils/utils\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import normalizeUrl from \u0027./utils/urls\u0027;"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import SiteNavButton from \u0027./SiteNavButton.vue\u0027;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import PageNavButton from \u0027./PageNavButton.vue\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" SiteNavButton,"},{"lineNumber":45,"author":{"gitId":"-"},"content":" PageNavButton,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" },"},{"lineNumber":47,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" type: {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":50,"author":{"gitId":"-"},"content":" default: \u0027primary\u0027,"},{"lineNumber":51,"author":{"gitId":"-"},"content":" },"},{"lineNumber":52,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" fixed: {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" type: [Boolean, String],"},{"lineNumber":58,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":59,"author":{"gitId":"-"},"content":" },"},{"lineNumber":60,"author":{"gitId":"-"},"content":" defaultHighlightOn: {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" default: \u0027sibling-or-child\u0027,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" },"},{"lineNumber":64,"author":{"gitId":"-"},"content":" },"},{"lineNumber":65,"author":{"gitId":"-"},"content":" provide() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":67,"author":{"gitId":"-"},"content":" toggleLowerNavbar: this.toggleLowerNavbar,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" isParentNavbar: true,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" };"},{"lineNumber":70,"author":{"gitId":"-"},"content":" },"},{"lineNumber":71,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" id: \u0027bs-example-navbar-collapse-1\u0027,"},{"lineNumber":74,"author":{"gitId":"-"},"content":" styles: {},"},{"lineNumber":75,"author":{"gitId":"-"},"content":" isLowerNavbarShowing: false,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" };"},{"lineNumber":77,"author":{"gitId":"-"},"content":" },"},{"lineNumber":78,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" fixedBool() {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" return toBoolean(this.fixed);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" },"},{"lineNumber":82,"author":{"gitId":"-"},"content":" fixedOptions() {"},{"lineNumber":83,"author":{"gitId":"-"},"content":" if (this.fixedBool) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return \u0027navbar-fixed\u0027;"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":" return \u0027\u0027;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" },"},{"lineNumber":88,"author":{"gitId":"-"},"content":" slots() {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" return this.$scopedSlots;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" },"},{"lineNumber":91,"author":{"gitId":"-"},"content":" themeOptions() {"},{"lineNumber":92,"author":{"gitId":"-"},"content":" switch (this.type) {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" case \u0027none\u0027:"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return \u0027\u0027;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" case \u0027light\u0027:"},{"lineNumber":96,"author":{"gitId":"-"},"content":" return \u0027navbar-light bg-light\u0027;"},{"lineNumber":97,"author":{"gitId":"-"},"content":" case \u0027dark\u0027:"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return \u0027navbar-dark bg-dark\u0027;"},{"lineNumber":99,"author":{"gitId":"-"},"content":" case \u0027primary\u0027:"},{"lineNumber":100,"author":{"gitId":"-"},"content":" default:"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return \u0027navbar-dark bg-primary\u0027;"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"-"},"content":" },"},{"lineNumber":104,"author":{"gitId":"-"},"content":" },"},{"lineNumber":105,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" // Splits a normalised URL into its parts,"},{"lineNumber":107,"author":{"gitId":"-"},"content":" // e.g http://site.org/foo/bar/index.html -\u003e [\u0027foo\u0027,\u0027bar\u0027,\u0027index.html\u0027]"},{"lineNumber":108,"author":{"gitId":"-"},"content":" splitUrl(url) {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" const u \u003d new URL(normalizeUrl(url));"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return `${u.pathname}`.substr(1).split(\u0027/\u0027);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" },"},{"lineNumber":112,"author":{"gitId":"-"},"content":" isEqualExceptLast(hParts, uParts) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c hParts.length - 1; i +\u003d 1) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" if (hParts[i] !\u003d\u003d uParts[i]) {"},{"lineNumber":115,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }"},{"lineNumber":118,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":119,"author":{"gitId":"-"},"content":" },"},{"lineNumber":120,"author":{"gitId":"-"},"content":" isSibling(url, href) {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" const hParts \u003d this.splitUrl(href);"},{"lineNumber":122,"author":{"gitId":"-"},"content":" const uParts \u003d this.splitUrl(url);"},{"lineNumber":123,"author":{"gitId":"-"},"content":" if (hParts.length !\u003d\u003d uParts.length) {"},{"lineNumber":124,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return this.isEqualExceptLast(hParts, uParts);"},{"lineNumber":127,"author":{"gitId":"-"},"content":" },"},{"lineNumber":128,"author":{"gitId":"-"},"content":" isChild(url, href) {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const hParts \u003d this.splitUrl(href);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" const uParts \u003d this.splitUrl(url);"},{"lineNumber":131,"author":{"gitId":"-"},"content":" if (uParts.length \u003c\u003d hParts.length) {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }"},{"lineNumber":134,"author":{"gitId":"-"},"content":" return this.isEqualExceptLast(hParts, uParts);"},{"lineNumber":135,"author":{"gitId":"-"},"content":" },"},{"lineNumber":136,"author":{"gitId":"-"},"content":" isExact(url, href) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return normalizeUrl(url) \u003d\u003d\u003d normalizeUrl(href);"},{"lineNumber":138,"author":{"gitId":"-"},"content":" },"},{"lineNumber":139,"author":{"gitId":"-"},"content":" addClassIfDropdown(dropdownLinks, a, li) {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (dropdownLinks.includes(a)) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" a.classList.add(\u0027dropdown-current\u0027);"},{"lineNumber":142,"author":{"gitId":"-"},"content":" this.addClassIfSubmenu(a, li);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":" },"},{"lineNumber":145,"author":{"gitId":"-"},"content":" addClassIfSubmenu(a, li) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" let el \u003d a.parentElement;"},{"lineNumber":147,"author":{"gitId":"-"},"content":" while (el !\u003d\u003d li) {"},{"lineNumber":148,"author":{"gitId":"-"},"content":" if (el.classList.contains(\u0027dropdown-submenu\u0027)) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" $(el).findChildren(\u0027a\u0027).each(aChild \u003d\u003e aChild.classList.add(\u0027dropdown-current\u0027));"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }"},{"lineNumber":151,"author":{"gitId":"-"},"content":" el \u003d el.parentElement;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }"},{"lineNumber":153,"author":{"gitId":"-"},"content":" },"},{"lineNumber":154,"author":{"gitId":"-"},"content":" highlightLink(url) {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" const defHlMode \u003d this.defaultHighlightOn;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" const navLis \u003d [];"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.$el.querySelectorAll(\u0027.navbar-nav\u0027).forEach(nav \u003d\u003e navLis.push(...Array.from(nav.children)));"},{"lineNumber":158,"author":{"gitId":"-"},"content":" // attempt an exact match first"},{"lineNumber":159,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c navLis.length; i +\u003d 1) {"},{"lineNumber":160,"author":{"gitId":"-"},"content":" const li \u003d navLis[i];"},{"lineNumber":161,"author":{"gitId":"-"},"content":" const standardLinks \u003d [li];"},{"lineNumber":162,"author":{"gitId":"-"},"content":" const navLinks \u003d Array.from(li.querySelectorAll(\u0027a.nav-link\u0027));"},{"lineNumber":163,"author":{"gitId":"-"},"content":" const dropdownLinks \u003d Array.from(li.querySelectorAll(\u0027a.dropdown-item\u0027));"},{"lineNumber":164,"author":{"gitId":"-"},"content":" const allNavLinks \u003d standardLinks.concat(navLinks).concat(dropdownLinks).filter(a \u003d\u003e a.href);"},{"lineNumber":165,"author":{"gitId":"-"},"content":" for (let j \u003d 0; j \u003c allNavLinks.length; j +\u003d 1) {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" const a \u003d allNavLinks[j];"},{"lineNumber":167,"author":{"gitId":"-"},"content":" const hlMode \u003d a.getAttribute(\u0027highlight-on\u0027) || defHlMode;"},{"lineNumber":168,"author":{"gitId":"-"},"content":" if (hlMode \u003d\u003d\u003d \u0027none\u0027) {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" // eslint-disable-next-line no-continue"},{"lineNumber":170,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":" // terminate early on an exact match"},{"lineNumber":173,"author":{"gitId":"-"},"content":" if (this.isExact(url, a.href)) {"},{"lineNumber":174,"author":{"gitId":"-"},"content":" li.classList.add(\u0027current\u0027);"},{"lineNumber":175,"author":{"gitId":"-"},"content":" this.addClassIfDropdown(dropdownLinks, a, li);"},{"lineNumber":176,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }"},{"lineNumber":180,"author":{"gitId":"-"},"content":" // fallback to user preference, otherwise"},{"lineNumber":181,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c navLis.length; i +\u003d 1) {"},{"lineNumber":182,"author":{"gitId":"-"},"content":" const li \u003d navLis[i];"},{"lineNumber":183,"author":{"gitId":"-"},"content":" const standardLinks \u003d [li];"},{"lineNumber":184,"author":{"gitId":"-"},"content":" const navLinks \u003d Array.from(li.querySelectorAll(\u0027a.nav-link\u0027));"},{"lineNumber":185,"author":{"gitId":"-"},"content":" const dropdownLinks \u003d Array.from(li.querySelectorAll(\u0027a.dropdown-item\u0027));"},{"lineNumber":186,"author":{"gitId":"-"},"content":" const allNavLinks \u003d standardLinks.concat(navLinks).concat(dropdownLinks).filter(a \u003d\u003e a.href);"},{"lineNumber":187,"author":{"gitId":"-"},"content":" for (let j \u003d 0; j \u003c allNavLinks.length; j +\u003d 1) {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" const a \u003d allNavLinks[j];"},{"lineNumber":189,"author":{"gitId":"-"},"content":" const hlMode \u003d a.getAttribute(\u0027highlight-on\u0027) || defHlMode;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" if (hlMode \u003d\u003d\u003d \u0027none\u0027) {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" // eslint-disable-next-line no-continue"},{"lineNumber":192,"author":{"gitId":"-"},"content":" continue;"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }"},{"lineNumber":194,"author":{"gitId":"-"},"content":" // Ignores invalid navbar highlight rule"},{"lineNumber":195,"author":{"gitId":"-"},"content":" if (hlMode \u003d\u003d\u003d \u0027sibling-or-child\u0027) {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" if (this.isSibling(url, a.href) || this.isChild(url, a.href)) {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" li.classList.add(\u0027current\u0027);"},{"lineNumber":198,"author":{"gitId":"-"},"content":" this.addClassIfDropdown(dropdownLinks, a, li);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":" } else if (hlMode \u003d\u003d\u003d \u0027sibling\u0027) {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" if (this.isSibling(url, a.href)) {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" li.classList.add(\u0027current\u0027);"},{"lineNumber":204,"author":{"gitId":"-"},"content":" this.addClassIfDropdown(dropdownLinks, a, li);"},{"lineNumber":205,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }"},{"lineNumber":207,"author":{"gitId":"-"},"content":" } else if (hlMode \u003d\u003d\u003d \u0027child\u0027) {"},{"lineNumber":208,"author":{"gitId":"-"},"content":" if (this.isChild(url, a.href)) {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" li.classList.add(\u0027current\u0027);"},{"lineNumber":210,"author":{"gitId":"-"},"content":" this.addClassIfDropdown(dropdownLinks, a, li);"},{"lineNumber":211,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":" },"},{"lineNumber":217,"author":{"gitId":"-"},"content":" toggleLowerNavbar() {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" if (this.$refs.lowerNavbar.childElementCount \u003e 0) {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" this.isLowerNavbarShowing \u003d true;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":221,"author":{"gitId":"-"},"content":" this.isLowerNavbarShowing \u003d false;"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }"},{"lineNumber":223,"author":{"gitId":"-"},"content":" },"},{"lineNumber":224,"author":{"gitId":"-"},"content":" },"},{"lineNumber":225,"author":{"gitId":"-"},"content":" created() {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" this._navbar \u003d true;"},{"lineNumber":227,"author":{"gitId":"-"},"content":" },"},{"lineNumber":228,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" const $dropdown \u003d $(\u0027.dropdown\u003e[data-bs-toggle\u003d\"dropdown\"]\u0027, this.$el).parent();"},{"lineNumber":230,"author":{"gitId":"-"},"content":" $dropdown.on(\u0027click\u0027, \u0027.dropdown-toggle\u0027, (e) \u003d\u003e {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":232,"author":{"gitId":"-"},"content":" $dropdown.each((content) \u003d\u003e {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" if (content.contains(e.target)) content.classList.toggle(\u0027open\u0027);"},{"lineNumber":234,"author":{"gitId":"-"},"content":" });"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }).on(\u0027click\u0027, \u0027.dropdown-menu\u003eli\u003ea\u0027, (e) \u003d\u003e {"},{"lineNumber":236,"author":{"gitId":"-"},"content":" $dropdown.each((content) \u003d\u003e {"},{"lineNumber":237,"author":{"gitId":"-"},"content":" if (content.contains(e.target)) content.classList.remove(\u0027open\u0027);"},{"lineNumber":238,"author":{"gitId":"-"},"content":" });"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }).onBlur((e) \u003d\u003e {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" $dropdown.each((content) \u003d\u003e {"},{"lineNumber":241,"author":{"gitId":"-"},"content":" if (!content.contains(e.target)) content.classList.remove(\u0027open\u0027);"},{"lineNumber":242,"author":{"gitId":"-"},"content":" });"},{"lineNumber":243,"author":{"gitId":"-"},"content":" });"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":" // highlight current nav link"},{"lineNumber":246,"author":{"gitId":"-"},"content":" this.highlightLink(window.location.href);"},{"lineNumber":247,"author":{"gitId":"-"},"content":""},{"lineNumber":248,"author":{"gitId":"-"},"content":" // scroll default navbar horizontally to current link if it is beyond the current scroll"},{"lineNumber":249,"author":{"gitId":"-"},"content":" const currentNavlink \u003d $(this.$refs.navbarDefault).find(\u0027.current\u0027)[0];"},{"lineNumber":250,"author":{"gitId":"-"},"content":" if (currentNavlink \u0026\u0026 window.innerWidth \u003c 768"},{"lineNumber":251,"author":{"gitId":"-"},"content":" \u0026\u0026 currentNavlink.offsetLeft + currentNavlink.offsetWidth \u003e window.innerWidth) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" this.$refs.navbarDefault.scrollLeft \u003d currentNavlink.offsetLeft + currentNavlink.offsetWidth"},{"lineNumber":253,"author":{"gitId":"-"},"content":" - window.innerWidth;"},{"lineNumber":254,"author":{"gitId":"-"},"content":" }"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" this.toggleLowerNavbar();"},{"lineNumber":257,"author":{"gitId":"-"},"content":" $(window).on(\u0027resize\u0027, this.toggleLowerNavbar);"},{"lineNumber":258,"author":{"gitId":"-"},"content":""},{"lineNumber":259,"author":{"gitId":"-"},"content":" // scroll default navbar horizontally when mousewheel is scrolled"},{"lineNumber":260,"author":{"gitId":"-"},"content":" $(this.$refs.navbarDefault).on(\u0027wheel\u0027, (e) \u003d\u003e {"},{"lineNumber":261,"author":{"gitId":"-"},"content":" const isDropdown \u003d (nodes) \u003d\u003e {"},{"lineNumber":262,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c nodes.length; i +\u003d 1) {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" if (nodes[i].classList \u0026\u0026 nodes[i].classList.contains(\u0027dropdown-menu\u0027)) {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" };"},{"lineNumber":269,"author":{"gitId":"-"},"content":""},{"lineNumber":270,"author":{"gitId":"-"},"content":" // prevent horizontal scrolling if the scroll is on dropdown menu"},{"lineNumber":271,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003c 768 \u0026\u0026 !isDropdown(e.path)) {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":273,"author":{"gitId":"-"},"content":" this.$refs.navbarDefault.scrollLeft +\u003d e.deltaY;"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":" });"},{"lineNumber":276,"author":{"gitId":"-"},"content":" },"},{"lineNumber":277,"author":{"gitId":"-"},"content":" beforeDestroy() {"},{"lineNumber":278,"author":{"gitId":"-"},"content":" $(\u0027.dropdown\u0027, this.$el).off(\u0027click\u0027).offBlur();"},{"lineNumber":279,"author":{"gitId":"-"},"content":" $(window).off(\u0027resize\u0027, this.toggleLowerNavbar);"},{"lineNumber":280,"author":{"gitId":"-"},"content":" $(this.$refs.navbarDefault).off(\u0027wheel\u0027);"},{"lineNumber":281,"author":{"gitId":"-"},"content":" },"},{"lineNumber":282,"author":{"gitId":"-"},"content":"};"},{"lineNumber":283,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":284,"author":{"gitId":"-"},"content":""},{"lineNumber":285,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":286,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 767px) {"},{"lineNumber":287,"author":{"gitId":"-"},"content":" .navbar {"},{"lineNumber":288,"author":{"gitId":"-"},"content":" padding-left: 0;"},{"lineNumber":289,"author":{"gitId":"-"},"content":" padding-right: 0;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" .navbar-left {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" max-width: 50%;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" order: 1;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" padding-left: 1rem;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" .navbar-left * {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" white-space: normal;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":""},{"lineNumber":303,"author":{"gitId":"-"},"content":" .navbar-right {"},{"lineNumber":304,"author":{"gitId":"-"},"content":" order: 1;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" max-width: 50%;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" padding: 0 16px;"},{"lineNumber":307,"author":{"gitId":"-"},"content":" }"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":" .navbar-default {"},{"lineNumber":310,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":311,"author":{"gitId":"-"},"content":" margin-top: 0.3125rem;"},{"lineNumber":312,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":313,"author":{"gitId":"-"},"content":" order: 2;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" overflow-x: scroll;"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" /* Hide overflow scroll bar */"},{"lineNumber":317,"author":{"gitId":"-"},"content":" -ms-overflow-style: none; /* IE and Edge */"},{"lineNumber":318,"author":{"gitId":"-"},"content":" scrollbar-width: none; /* Firefox */"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" /* Hide overflow scroll bar for Chrome and Safari */"},{"lineNumber":322,"author":{"gitId":"-"},"content":" .navbar-default::-webkit-scrollbar {"},{"lineNumber":323,"author":{"gitId":"-"},"content":" display: none;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" .navbar-default ul {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" flex-direction: row;"},{"lineNumber":328,"author":{"gitId":"-"},"content":" margin-top: 0 !important;"},{"lineNumber":329,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }"},{"lineNumber":331,"author":{"gitId":"-"},"content":""},{"lineNumber":332,"author":{"gitId":"-"},"content":" .navbar-default \u003e ul \u003e * {"},{"lineNumber":333,"author":{"gitId":"LamJiuFong"},"content":" background: rgb(0 0 0 / 20%);"},{"lineNumber":334,"author":{"gitId":"-"},"content":" padding: 0.3125rem 0.625rem;"},{"lineNumber":335,"author":{"gitId":"-"},"content":" flex-grow: 1;"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }"},{"lineNumber":337,"author":{"gitId":"-"},"content":""},{"lineNumber":338,"author":{"gitId":"-"},"content":" .navbar-light .navbar-default \u003e ul \u003e * {"},{"lineNumber":339,"author":{"gitId":"LamJiuFong"},"content":" background: rgb(0 0 0 / 5%);"},{"lineNumber":340,"author":{"gitId":"-"},"content":" }"},{"lineNumber":341,"author":{"gitId":"-"},"content":""},{"lineNumber":342,"author":{"gitId":"-"},"content":" .navbar-default \u003e ul \u003e .current {"},{"lineNumber":343,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":344,"author":{"gitId":"-"},"content":" }"},{"lineNumber":345,"author":{"gitId":"-"},"content":""},{"lineNumber":346,"author":{"gitId":"-"},"content":" .navbar-default a,"},{"lineNumber":347,"author":{"gitId":"-"},"content":" \u003e\u003e\u003e .dropdown-toggle {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" margin: 0 auto;"},{"lineNumber":349,"author":{"gitId":"-"},"content":" width: max-content;"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":""},{"lineNumber":352,"author":{"gitId":"-"},"content":" \u003e\u003e\u003e .dropdown {"},{"lineNumber":353,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":354,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":355,"author":{"gitId":"-"},"content":" }"},{"lineNumber":356,"author":{"gitId":"-"},"content":""},{"lineNumber":357,"author":{"gitId":"-"},"content":" .container-fluid {"},{"lineNumber":358,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":359,"author":{"gitId":"-"},"content":" }"},{"lineNumber":360,"author":{"gitId":"-"},"content":" }"},{"lineNumber":361,"author":{"gitId":"-"},"content":""},{"lineNumber":362,"author":{"gitId":"-"},"content":" .navbar-brand {"},{"lineNumber":363,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }"},{"lineNumber":365,"author":{"gitId":"-"},"content":""},{"lineNumber":366,"author":{"gitId":"-"},"content":" .navbar-brand \u003e img,"},{"lineNumber":367,"author":{"gitId":"-"},"content":" .navbar-brand \u003e svg {"},{"lineNumber":368,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":369,"author":{"gitId":"-"},"content":" }"},{"lineNumber":370,"author":{"gitId":"-"},"content":""},{"lineNumber":371,"author":{"gitId":"-"},"content":" .navbar-right {"},{"lineNumber":372,"author":{"gitId":"-"},"content":" padding-right: 1rem;"},{"lineNumber":373,"author":{"gitId":"-"},"content":" }"},{"lineNumber":374,"author":{"gitId":"-"},"content":""},{"lineNumber":375,"author":{"gitId":"-"},"content":" .navbar-left {"},{"lineNumber":376,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":377,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":378,"author":{"gitId":"-"},"content":" font-size: 1.25rem;"},{"lineNumber":379,"author":{"gitId":"-"},"content":" line-height: inherit;"},{"lineNumber":380,"author":{"gitId":"-"},"content":" padding: 0.3125rem 1rem;"},{"lineNumber":381,"author":{"gitId":"-"},"content":" white-space: nowrap;"},{"lineNumber":382,"author":{"gitId":"-"},"content":" }"},{"lineNumber":383,"author":{"gitId":"-"},"content":""},{"lineNumber":384,"author":{"gitId":"-"},"content":" .navbar-fixed {"},{"lineNumber":385,"author":{"gitId":"-"},"content":" position: fixed;"},{"lineNumber":386,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":387,"author":{"gitId":"-"},"content":" z-index: 1000;"},{"lineNumber":388,"author":{"gitId":"-"},"content":" }"},{"lineNumber":389,"author":{"gitId":"-"},"content":""},{"lineNumber":390,"author":{"gitId":"-"},"content":" .navbar-default {"},{"lineNumber":391,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":392,"author":{"gitId":"-"},"content":" flex-basis: auto;"},{"lineNumber":393,"author":{"gitId":"-"},"content":" flex-grow: 1;"},{"lineNumber":394,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":395,"author":{"gitId":"-"},"content":" }"},{"lineNumber":396,"author":{"gitId":"-"},"content":""},{"lineNumber":397,"author":{"gitId":"-"},"content":" \u003e\u003e\u003e .dropdown-current {"},{"lineNumber":398,"author":{"gitId":"-"},"content":" color: #fff !important;"},{"lineNumber":399,"author":{"gitId":"-"},"content":" background: #007bff;"},{"lineNumber":400,"author":{"gitId":"-"},"content":" }"},{"lineNumber":401,"author":{"gitId":"-"},"content":""},{"lineNumber":402,"author":{"gitId":"-"},"content":" .lower-navbar-container {"},{"lineNumber":403,"author":{"gitId":"-"},"content":" background-color: #fff;"},{"lineNumber":404,"author":{"gitId":"-"},"content":" border-bottom: 1px solid #c1c1c1;"},{"lineNumber":405,"author":{"gitId":"-"},"content":" height: 50px;"},{"lineNumber":406,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":407,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":408,"author":{"gitId":"-"},"content":" }"},{"lineNumber":409,"author":{"gitId":"-"},"content":""},{"lineNumber":410,"author":{"gitId":"-"},"content":" /* Navbar link highlight for current page */"},{"lineNumber":411,"author":{"gitId":"-"},"content":" .navbar.navbar-dark .navbar-nav \u003e\u003e\u003e .current:not(.dropdown) a,"},{"lineNumber":412,"author":{"gitId":"-"},"content":" .navbar.navbar-dark .navbar-nav \u003e\u003e\u003e .dropdown.current \u003e a {"},{"lineNumber":413,"author":{"gitId":"-"},"content":" color: #fff;"},{"lineNumber":414,"author":{"gitId":"-"},"content":" }"},{"lineNumber":415,"author":{"gitId":"-"},"content":""},{"lineNumber":416,"author":{"gitId":"-"},"content":" .navbar.navbar-light .navbar-nav \u003e\u003e\u003e .current:not(.dropdown) a,"},{"lineNumber":417,"author":{"gitId":"-"},"content":" .navbar.navbar-light .navbar-nav \u003e\u003e\u003e .dropdown.current \u003e a {"},{"lineNumber":418,"author":{"gitId":"-"},"content":" color: #000;"},{"lineNumber":419,"author":{"gitId":"-"},"content":" }"},{"lineNumber":420,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":417}},{"path":"packages/vue-components/src/Pic.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan :class\u003d\"[\u0027image-wrapper\u0027, addClass]\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cimg"},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"pic\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :src\u003d\"src\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" :alt\u003d\"alt\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" :width\u003d\"computedWidth\""},{"lineNumber":8,"author":{"gitId":"LamJiuFong"},"content":" :height\u003d\"computedHeight\""},{"lineNumber":9,"author":{"gitId":"LamJiuFong"},"content":" :loading\u003d\"computedLoadType\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" class\u003d\"img-fluid rounded\""},{"lineNumber":11,"author":{"gitId":"LamJiuFong"},"content":" @load.once\u003d\"computeWidthAndHeight\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"image-caption\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { toNumber } from \u0027./utils/utils\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" src: {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" },"},{"lineNumber":28,"author":{"gitId":"-"},"content":" alt: {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":31,"author":{"gitId":"-"},"content":" },"},{"lineNumber":32,"author":{"gitId":"-"},"content":" height: {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" },"},{"lineNumber":36,"author":{"gitId":"-"},"content":" width: {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" },"},{"lineNumber":40,"author":{"gitId":"LamJiuFong"},"content":" lazy: {"},{"lineNumber":41,"author":{"gitId":"LamJiuFong"},"content":" type: Boolean,"},{"lineNumber":42,"author":{"gitId":"LamJiuFong"},"content":" default: false,"},{"lineNumber":43,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":44,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" },"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" hasWidth() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return this.width !\u003d\u003d \u0027\u0027;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" },"},{"lineNumber":53,"author":{"gitId":"-"},"content":" hasHeight() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return this.height !\u003d\u003d \u0027\u0027;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" computedWidth() {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" if (this.hasWidth) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return this.width;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return this.widthFromHeight;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" },"},{"lineNumber":62,"author":{"gitId":"LamJiuFong"},"content":" computedHeight() {"},{"lineNumber":63,"author":{"gitId":"LamJiuFong"},"content":" return this.heightFromWidth;"},{"lineNumber":64,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":65,"author":{"gitId":"LamJiuFong"},"content":" computedLoadType() {"},{"lineNumber":66,"author":{"gitId":"LamJiuFong"},"content":" return this.lazy ? \u0027lazy\u0027 : \u0027eager\u0027;"},{"lineNumber":67,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":68,"author":{"gitId":"-"},"content":" },"},{"lineNumber":69,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" widthFromHeight: \u0027\u0027,"},{"lineNumber":72,"author":{"gitId":"LamJiuFong"},"content":" heightFromWidth: \u0027\u0027,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" };"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":76,"author":{"gitId":"LamJiuFong"},"content":" computeWidthAndHeight() {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" const renderedImg \u003d this.$refs.pic;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" const imgHeight \u003d renderedImg.naturalHeight;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" const imgWidth \u003d renderedImg.naturalWidth;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" const aspectRatio \u003d imgWidth / imgHeight;"},{"lineNumber":81,"author":{"gitId":"LamJiuFong"},"content":" if (this.hasWidth) { // if width is present, overwrite the height (if any) to maintain aspect ratio"},{"lineNumber":82,"author":{"gitId":"LamJiuFong"},"content":" this.heightFromWidth \u003d Math.round(toNumber(this.width) / aspectRatio).toString();"},{"lineNumber":83,"author":{"gitId":"LamJiuFong"},"content":" } else if (this.hasHeight) {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" this.widthFromHeight \u003d Math.round(toNumber(this.height) * aspectRatio).toString();"},{"lineNumber":85,"author":{"gitId":"LamJiuFong"},"content":" this.heightFromWidth \u003d this.height;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" },"},{"lineNumber":88,"author":{"gitId":"-"},"content":" },"},{"lineNumber":89,"author":{"gitId":"-"},"content":"};"},{"lineNumber":90,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" .image-wrapper {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" padding: 4px;"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":" .image-caption {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }"},{"lineNumber":102,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":19,"-":83}},{"path":"packages/vue-components/src/Popover.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":3,"author":{"gitId":"-"},"content":" :class\u003d\"trigger \u003d\u003d\u003d \u0027click\u0027 ? \u0027trigger-click\u0027 : \u0027trigger\u0027\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" data-mb-component-type\u003d\"popover\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" tabindex\u003d\"0\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cportal v-if\u003d\"targetEl.id\" :to\u003d\"\u0027popover:\u0027 + targetEl.id\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003ch3 v-if\u003d\"hasHeader\" class\u003d\"popover-header\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/h3\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"popover-body\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"content\"\u003e\u003c/slot\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":14,"author":{"gitId":"yiwen101"},"content":" \u003c/portal\u003e\u003c!-- do not delete this comment, it is for the stray space issue (#2419)"},{"lineNumber":15,"author":{"gitId":"yiwen101"},"content":" --\u003e\u003cv-popover"},{"lineNumber":16,"author":{"gitId":"-"},"content":" v-if\u003d\"isMounted\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" :auto-hide\u003d\"!isInput\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" :triggers\u003d\"triggers\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" :popper-triggers\u003d\"triggers\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" :hide-triggers\u003d\"triggers\""},{"lineNumber":21,"author":{"gitId":"-"},"content":" :placement\u003d\"placement\""},{"lineNumber":22,"author":{"gitId":"-"},"content":" :delay\u003d\"0\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" shift-cross-axis"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c!-- floating-vue triggers must be elements that receive mouse events, hence an empty @click --\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003cspan v-if\u003d\"!isInput\" @click.stop\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c!-- However, input elements are handled separately as they will lose focus when wrapped in a span --\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cslot v-else\u003e\u003c/slot\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003ctemplate #popper\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"popover-container\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003ch3 v-if\u003d\"hasHeader\" class\u003d\"popover-header\"\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/h3\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"popover-body\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"content\"\u003e\u003c/slot\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/template\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/v-popover\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":"// eslint-disable-next-line import/no-extraneous-dependencies"},{"lineNumber":47,"author":{"gitId":"-"},"content":"import { Portal } from \u0027portal-vue\u0027;"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" name: \u0027Popover\u0027,"},{"lineNumber":51,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" Portal,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" },"},{"lineNumber":54,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" trigger: {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":57,"author":{"gitId":"-"},"content":" default: \u0027hover focus\u0027,"},{"lineNumber":58,"author":{"gitId":"-"},"content":" },"},{"lineNumber":59,"author":{"gitId":"-"},"content":" placement: {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":61,"author":{"gitId":"-"},"content":" default: \u0027top\u0027,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" },"},{"lineNumber":63,"author":{"gitId":"-"},"content":" },"},{"lineNumber":64,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" targetEl: {},"},{"lineNumber":67,"author":{"gitId":"-"},"content":" isMounted: false,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" };"},{"lineNumber":69,"author":{"gitId":"-"},"content":" },"},{"lineNumber":70,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" triggers() {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return this.trigger.split(\u0027 \u0027);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" },"},{"lineNumber":74,"author":{"gitId":"-"},"content":" hasHeader() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return !!this.$slots.header;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" },"},{"lineNumber":77,"author":{"gitId":"-"},"content":" },"},{"lineNumber":78,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.targetEl \u003d this.$el;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" // \u003cinput\u003e tags need to be handled separately as they need to retain focus on inputs"},{"lineNumber":81,"author":{"gitId":"-"},"content":" this.isInput \u003d this.$slots.default \u0026\u0026 this.$slots.default.some(node \u003d\u003e node.tag \u003d\u003d\u003d \u0027input\u0027);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.isMounted \u003d true;"},{"lineNumber":83,"author":{"gitId":"-"},"content":" },"},{"lineNumber":84,"author":{"gitId":"-"},"content":"};"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" .popover-container {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" overflow: auto;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" max-height: 50vh;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" max-width: 276px; /* following bootstrap */"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" .popover-body {"},{"lineNumber":95,"author":{"gitId":"-"},"content":" font-size: 0.875rem; /* following bootstrap */"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" .v-popper {"},{"lineNumber":99,"author":{"gitId":"-"},"content":" display: inline;"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }"},{"lineNumber":101,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"-":99,"yiwen101":2}},{"path":"packages/vue-components/src/Searchbar.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv style\u003d\"position: relative;\" class\u003d\"dropdown\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"algolia\" id\u003d\"algolia-search-input\"\u003e\u003c/div\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003ctemplate v-else\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cinput"},{"lineNumber":6,"author":{"gitId":"-"},"content":" v-model\u003d\"value\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" data-bs-toggle\u003d\"dropdown\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" type\u003d\"text\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" class\u003d\"form-control\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" :placeholder\u003d\"placeholder\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" autocomplete\u003d\"off\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" @input\u003d\"update\""},{"lineNumber":13,"author":{"gitId":"-"},"content":" @keyup.up\u003d\"up\""},{"lineNumber":14,"author":{"gitId":"-"},"content":" @keyup.down\u003d\"down\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" @keydown.enter\u003d\"hit\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" @keydown.esc\u003d\"reset\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" @blur\u003d\"showDropdown \u003d false\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form-control placeholder-div-hidden\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" {{ placeholder }}"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/template\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cul ref\u003d\"dropdown\" :class\u003d\"dropdownMenuClasses\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cli"},{"lineNumber":25,"author":{"gitId":"-"},"content":" v-for\u003d\"(item, index) in items\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" :key\u003d\"index\""},{"lineNumber":27,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027table-active\u0027: isActive(index) }\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003ca"},{"lineNumber":30,"author":{"gitId":"-"},"content":" class\u003d\"dropdown-item\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" @mousedown.prevent\u003d\"hit\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" @mousemove\u003d\"setActive(index)\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003csearchbar-page-item :item\u003d\"item\" :value\u003d\"value\" /\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import searchbarPageItem from \u0027./SearchbarPageItem.vue\u0027;"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import { delayer, getJSON } from \u0027./utils/utils\u0027;"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":"const _DELAY_ \u003d 200;"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":48,"author":{"gitId":"-"},"content":" created() {"},{"lineNumber":49,"author":{"gitId":"-"},"content":" this.items \u003d this.primitiveData;"},{"lineNumber":50,"author":{"gitId":"-"},"content":" },"},{"lineNumber":51,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" data: {"},{"lineNumber":53,"author":{"gitId":"-"},"content":" type: Array,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" default: () \u003d\u003e [],"},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" limit: {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" type: Number,"},{"lineNumber":58,"author":{"gitId":"-"},"content":" default: 8,"},{"lineNumber":59,"author":{"gitId":"-"},"content":" },"},{"lineNumber":60,"author":{"gitId":"-"},"content":" async: {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":62,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":63,"author":{"gitId":"-"},"content":" },"},{"lineNumber":64,"author":{"gitId":"-"},"content":" keyProp: {"},{"lineNumber":65,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":66,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":67,"author":{"gitId":"-"},"content":" },"},{"lineNumber":68,"author":{"gitId":"-"},"content":" onHit: {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" type: Function,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" default(items) {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" this.reset();"},{"lineNumber":72,"author":{"gitId":"-"},"content":" this.value \u003d items;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" },"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" placeholder: {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":77,"author":{"gitId":"-"},"content":" default: \u0027Search\u0027,"},{"lineNumber":78,"author":{"gitId":"-"},"content":" },"},{"lineNumber":79,"author":{"gitId":"-"},"content":" delay: {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" type: Number,"},{"lineNumber":81,"author":{"gitId":"-"},"content":" default: _DELAY_,"},{"lineNumber":82,"author":{"gitId":"-"},"content":" },"},{"lineNumber":83,"author":{"gitId":"-"},"content":" menuAlignRight: {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":85,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":86,"author":{"gitId":"-"},"content":" },"},{"lineNumber":87,"author":{"gitId":"-"},"content":" algolia: {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":89,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":90,"author":{"gitId":"-"},"content":" },"},{"lineNumber":91,"author":{"gitId":"-"},"content":" },"},{"lineNumber":92,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":93,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" value: \u0027\u0027,"},{"lineNumber":95,"author":{"gitId":"-"},"content":" showDropdown: false,"},{"lineNumber":96,"author":{"gitId":"-"},"content":" noResults: true,"},{"lineNumber":97,"author":{"gitId":"-"},"content":" current: 0,"},{"lineNumber":98,"author":{"gitId":"-"},"content":" items: [],"},{"lineNumber":99,"author":{"gitId":"-"},"content":" };"},{"lineNumber":100,"author":{"gitId":"-"},"content":" },"},{"lineNumber":101,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":102,"author":{"gitId":"-"},"content":" primitiveData() {"},{"lineNumber":103,"author":{"gitId":"-"},"content":" // Returns the total number of matches between an array of regex patterns and string search targets."},{"lineNumber":104,"author":{"gitId":"-"},"content":" function getTotalMatches(searchTargets, regexes) {"},{"lineNumber":105,"author":{"gitId":"-"},"content":" const searchTarget \u003d searchTargets.join(\u0027 \u0027);"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":" return regexes.reduce((total, regex) \u003d\u003e {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" const matches \u003d searchTarget.match(regex);"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return total + (matches ? matches.length : 0);"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }, 0);"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }"},{"lineNumber":112,"author":{"gitId":"-"},"content":""},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (this.value.length \u003c 2 || !this.data) {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" return [];"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":" const pages \u003d [];"},{"lineNumber":117,"author":{"gitId":"-"},"content":" const regexes \u003d this.value.split(\u0027 \u0027)"},{"lineNumber":118,"author":{"gitId":"-"},"content":" .filter(searchKeyword \u003d\u003e searchKeyword !\u003d\u003d \u0027\u0027)"},{"lineNumber":119,"author":{"gitId":"-"},"content":" .map(searchKeyword \u003d\u003e searchKeyword.replace(/[.*+?^${}()|[\\]\\\\]/g, \u0027\\\\$\u0026\u0027))"},{"lineNumber":120,"author":{"gitId":"-"},"content":" .map(searchKeyword \u003d\u003e new RegExp(searchKeyword, \u0027ig\u0027));"},{"lineNumber":121,"author":{"gitId":"-"},"content":" this.data.forEach((entry) \u003d\u003e {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" const {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" headings,"},{"lineNumber":124,"author":{"gitId":"-"},"content":" src,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" title,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" headingKeywords,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" frontmatterKeywords,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" } \u003d entry;"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const keywords \u003d frontmatterKeywords || \u0027\u0027;"},{"lineNumber":130,"author":{"gitId":"-"},"content":" const displayTitle \u003d title || src.substring(0, src.lastIndexOf(\u0027.\u0027));"},{"lineNumber":131,"author":{"gitId":"-"},"content":""},{"lineNumber":132,"author":{"gitId":"-"},"content":" const pageSearchTargets \u003d ["},{"lineNumber":133,"author":{"gitId":"-"},"content":" displayTitle,"},{"lineNumber":134,"author":{"gitId":"-"},"content":" keywords,"},{"lineNumber":135,"author":{"gitId":"-"},"content":" ...Object.values(headings),"},{"lineNumber":136,"author":{"gitId":"-"},"content":" ...Object.values(headingKeywords),"},{"lineNumber":137,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":138,"author":{"gitId":"-"},"content":" const totalPageMatches \u003d getTotalMatches(pageSearchTargets, regexes);"},{"lineNumber":139,"author":{"gitId":"-"},"content":""},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (totalPageMatches \u003e 0) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" const pageHeadings \u003d [];"},{"lineNumber":142,"author":{"gitId":"-"},"content":""},{"lineNumber":143,"author":{"gitId":"-"},"content":" Object.entries(headings).forEach(([id, text], idx) \u003d\u003e {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" const matchesHeading \u003d regexes.some(regex \u003d\u003e regex.test(text));"},{"lineNumber":145,"author":{"gitId":"-"},"content":" const matchesKeywords \u003d headingKeywords[id] \u0026\u0026 headingKeywords[id]"},{"lineNumber":146,"author":{"gitId":"-"},"content":" .some(keyword \u003d\u003e regexes.some(regex \u003d\u003e regex.test(keyword)));"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" if (matchesHeading || matchesKeywords) {"},{"lineNumber":149,"author":{"gitId":"-"},"content":" const headingSearchTargets \u003d ["},{"lineNumber":150,"author":{"gitId":"-"},"content":" text,"},{"lineNumber":151,"author":{"gitId":"-"},"content":" ...(headingKeywords[id] || []),"},{"lineNumber":152,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":153,"author":{"gitId":"-"},"content":" const totalHeadingMatches \u003d getTotalMatches(headingSearchTargets, regexes);"},{"lineNumber":154,"author":{"gitId":"-"},"content":""},{"lineNumber":155,"author":{"gitId":"-"},"content":" if (!(idx \u003d\u003d\u003d 0 \u0026\u0026 text \u003d\u003d\u003d displayTitle \u0026\u0026 !keywords.length)) {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" pageHeadings.push({"},{"lineNumber":157,"author":{"gitId":"-"},"content":" heading: { id, text },"},{"lineNumber":158,"author":{"gitId":"-"},"content":" keywords: headingKeywords[id],"},{"lineNumber":159,"author":{"gitId":"-"},"content":" src,"},{"lineNumber":160,"author":{"gitId":"-"},"content":" totalMatches: totalHeadingMatches,"},{"lineNumber":161,"author":{"gitId":"-"},"content":" });"},{"lineNumber":162,"author":{"gitId":"-"},"content":" }"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }"},{"lineNumber":164,"author":{"gitId":"-"},"content":" });"},{"lineNumber":165,"author":{"gitId":"-"},"content":" pageHeadings.sort((a, b) \u003d\u003e b.totalMatches - a.totalMatches);"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":" pages.push({"},{"lineNumber":168,"author":{"gitId":"-"},"content":" headings: pageHeadings,"},{"lineNumber":169,"author":{"gitId":"-"},"content":" keywords,"},{"lineNumber":170,"author":{"gitId":"-"},"content":" src,"},{"lineNumber":171,"author":{"gitId":"-"},"content":" title: displayTitle,"},{"lineNumber":172,"author":{"gitId":"-"},"content":" totalMatches: totalPageMatches,"},{"lineNumber":173,"author":{"gitId":"-"},"content":" });"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }"},{"lineNumber":175,"author":{"gitId":"-"},"content":" });"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":" return pages"},{"lineNumber":178,"author":{"gitId":"-"},"content":" .sort((a, b) \u003d\u003e b.totalMatches - a.totalMatches)"},{"lineNumber":179,"author":{"gitId":"-"},"content":" .flatMap((page) \u003d\u003e {"},{"lineNumber":180,"author":{"gitId":"-"},"content":" if (page.headings) {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" return [page, ...page.headings];"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":" return page;"},{"lineNumber":184,"author":{"gitId":"-"},"content":" });"},{"lineNumber":185,"author":{"gitId":"-"},"content":" },"},{"lineNumber":186,"author":{"gitId":"-"},"content":" dropdownMenuClasses() {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return ["},{"lineNumber":188,"author":{"gitId":"-"},"content":" \u0027dropdown-menu\u0027,"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \u0027search-dropdown-menu\u0027,"},{"lineNumber":190,"author":{"gitId":"-"},"content":" { show: this.showDropdown },"},{"lineNumber":191,"author":{"gitId":"-"},"content":" { \u0027d-none\u0027: !this.showDropdown },"},{"lineNumber":192,"author":{"gitId":"-"},"content":" { \u0027dropdown-menu-end\u0027: this.menuAlignRight },"},{"lineNumber":193,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":194,"author":{"gitId":"-"},"content":" },"},{"lineNumber":195,"author":{"gitId":"-"},"content":" },"},{"lineNumber":196,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" update() {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" if (!this.value) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" this.reset();"},{"lineNumber":200,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }"},{"lineNumber":202,"author":{"gitId":"-"},"content":" if (this.data) {"},{"lineNumber":203,"author":{"gitId":"-"},"content":" this.items \u003d this.primitiveData;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" this.showDropdown \u003d this.items.length \u003e 0;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":" if (this.async) this.query();"},{"lineNumber":207,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" },"},{"lineNumber":209,"author":{"gitId":"-"},"content":" query: delayer(function () {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" getJSON(this.async + this.value).then((data) \u003d\u003e {"},{"lineNumber":211,"author":{"gitId":"-"},"content":" this.items \u003d (this.keyProp ? data[this.keyProp] : data).slice(0, this.limit);"},{"lineNumber":212,"author":{"gitId":"-"},"content":" this.showDropdown \u003d this.items.length;"},{"lineNumber":213,"author":{"gitId":"-"},"content":" });"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }, \u0027delay\u0027, _DELAY_),"},{"lineNumber":215,"author":{"gitId":"-"},"content":" reset() {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" this.items \u003d [];"},{"lineNumber":217,"author":{"gitId":"-"},"content":" this.value \u003d \u0027\u0027;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" this.loading \u003d false;"},{"lineNumber":219,"author":{"gitId":"-"},"content":" this.showDropdown \u003d false;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" },"},{"lineNumber":221,"author":{"gitId":"-"},"content":" setActive(index) {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" this.current \u003d index;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" },"},{"lineNumber":224,"author":{"gitId":"-"},"content":" isActive(index) {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" return this.current \u003d\u003d\u003d index;"},{"lineNumber":226,"author":{"gitId":"-"},"content":" },"},{"lineNumber":227,"author":{"gitId":"-"},"content":" hit(e) {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":229,"author":{"gitId":"-"},"content":" this.onHit(this.items[this.current], this);"},{"lineNumber":230,"author":{"gitId":"-"},"content":" },"},{"lineNumber":231,"author":{"gitId":"-"},"content":" down() {"},{"lineNumber":232,"author":{"gitId":"-"},"content":" if (this.current \u003c this.items.length - 1) {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" this.current +\u003d 1;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" this.scrollListView();"},{"lineNumber":235,"author":{"gitId":"-"},"content":" }"},{"lineNumber":236,"author":{"gitId":"-"},"content":" },"},{"lineNumber":237,"author":{"gitId":"-"},"content":" up() {"},{"lineNumber":238,"author":{"gitId":"-"},"content":" if (this.current \u003e 0) {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" this.current -\u003d 1;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" this.scrollListView();"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":" },"},{"lineNumber":243,"author":{"gitId":"-"},"content":" scrollListView() {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" const { dropdown } \u003d this.$refs;"},{"lineNumber":245,"author":{"gitId":"-"},"content":" const currentEntry \u003d dropdown.children[this.current];"},{"lineNumber":246,"author":{"gitId":"-"},"content":" const upperBound \u003d dropdown.scrollTop;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" const lowerBound \u003d upperBound + dropdown.clientHeight;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" const currentEntryOffsetBottom \u003d currentEntry.offsetTop + currentEntry.offsetHeight;"},{"lineNumber":249,"author":{"gitId":"-"},"content":" if (currentEntry.offsetTop \u003c upperBound) {"},{"lineNumber":250,"author":{"gitId":"-"},"content":" dropdown.scrollTop \u003d currentEntry.offsetTop;"},{"lineNumber":251,"author":{"gitId":"-"},"content":" } else if (currentEntryOffsetBottom \u003e lowerBound) {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" dropdown.scrollTop \u003d currentEntryOffsetBottom - dropdown.clientHeight;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" }"},{"lineNumber":254,"author":{"gitId":"-"},"content":" },"},{"lineNumber":255,"author":{"gitId":"-"},"content":" },"},{"lineNumber":256,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" searchbarPageItem,"},{"lineNumber":258,"author":{"gitId":"-"},"content":" },"},{"lineNumber":259,"author":{"gitId":"-"},"content":"};"},{"lineNumber":260,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":" .dropdown {"},{"lineNumber":264,"author":{"gitId":"-"},"content":" display: block;"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }"},{"lineNumber":266,"author":{"gitId":"-"},"content":""},{"lineNumber":267,"author":{"gitId":"-"},"content":" .form-control {"},{"lineNumber":268,"author":{"gitId":"-"},"content":" min-width: 12.7em;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" max-width: 25.4em; /* twice of min-width, to accommodate a range of lengths */"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" /* For mobile devices and general tablets in portrait e.g. iPad */"},{"lineNumber":273,"author":{"gitId":"LamJiuFong"},"content":" @media screen and (width \u003c\u003d 878px) and (orientation: portrait) {"},{"lineNumber":274,"author":{"gitId":"-"},"content":" .form-control {"},{"lineNumber":275,"author":{"gitId":"-"},"content":" min-width: 8em;"},{"lineNumber":276,"author":{"gitId":"-"},"content":" max-width: 16em; /* twice of min-width, to accommodate a range of lengths */"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" /* For general tablets in landscape e.g. iPad */"},{"lineNumber":281,"author":{"gitId":"LamJiuFong"},"content":" @media screen and (width \u003e\u003d 768px) and (width \u003c\u003d 878px) and (orientation: landscape) {"},{"lineNumber":282,"author":{"gitId":"-"},"content":" .form-control {"},{"lineNumber":283,"author":{"gitId":"-"},"content":" min-width: 9em;"},{"lineNumber":284,"author":{"gitId":"-"},"content":" max-width: 18em; /* twice of min-width, to accommodate a range of lengths */"},{"lineNumber":285,"author":{"gitId":"-"},"content":" }"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" .table-active {"},{"lineNumber":289,"author":{"gitId":"LamJiuFong"},"content":" background-color: rgb(0 0 0 / 7.5%); /* follows Bootstrap\u0027s table-active */"},{"lineNumber":290,"author":{"gitId":"-"},"content":" }"},{"lineNumber":291,"author":{"gitId":"-"},"content":""},{"lineNumber":292,"author":{"gitId":"-"},"content":" .dropdown-menu-end {"},{"lineNumber":293,"author":{"gitId":"-"},"content":" right: 0;"},{"lineNumber":294,"author":{"gitId":"-"},"content":" left: auto;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":" .placeholder-div-hidden {"},{"lineNumber":298,"author":{"gitId":"-"},"content":" /* prevents placeholderDiv from taking up space on the navbar to resolve FOUC */"},{"lineNumber":299,"author":{"gitId":"-"},"content":" height: 0;"},{"lineNumber":300,"author":{"gitId":"-"},"content":" padding-top: 0;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" border-top: 0;"},{"lineNumber":303,"author":{"gitId":"-"},"content":" border-bottom: 0;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" visibility: hidden;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" }"},{"lineNumber":307,"author":{"gitId":"-"},"content":"\u003c/style\u003e"},{"lineNumber":308,"author":{"gitId":"-"},"content":""},{"lineNumber":309,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":310,"author":{"gitId":"-"},"content":" .search-dropdown-menu {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" min-width: 30em;"},{"lineNumber":312,"author":{"gitId":"-"},"content":" max-height: 30em;"},{"lineNumber":313,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" }"},{"lineNumber":315,"author":{"gitId":"-"},"content":""},{"lineNumber":316,"author":{"gitId":"-"},"content":" .dropdown-menu \u003e li \u003e a {"},{"lineNumber":317,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"LamJiuFong"},"content":" @media screen and (width \u003c\u003d 768px) {"},{"lineNumber":321,"author":{"gitId":"-"},"content":" .search-dropdown-menu {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" min-width: 90vw;"},{"lineNumber":323,"author":{"gitId":"-"},"content":" max-height: 30em;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" overflow-y: scroll;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":" .dropdown-menu.search-dropdown-menu {"},{"lineNumber":328,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":" }"},{"lineNumber":331,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":4,"-":327}},{"path":"packages/vue-components/src/SiteNav.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-root\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import normalizeUrl from \u0027./utils/urls\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":11,"author":{"gitId":"-"},"content":" name: \u0027SiteNav\u0027,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" const currentUrl \u003d normalizeUrl(new URL(window.location.href).pathname);"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" this.$el.querySelectorAll(\u0027a[href]\u0027).forEach((el) \u003d\u003e {"},{"lineNumber":16,"author":{"gitId":"-"},"content":" const linkUrl \u003d normalizeUrl(el.getAttribute(\u0027href\u0027));"},{"lineNumber":17,"author":{"gitId":"-"},"content":" if (currentUrl !\u003d\u003d linkUrl) {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" }"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" el.classList.add(\u0027current\u0027);"},{"lineNumber":22,"author":{"gitId":"-"},"content":" let currentEl \u003d el.parentElement;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" while (currentEl \u0026\u0026 currentEl !\u003d\u003d this.$el) {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" if (currentEl.tagName.toLowerCase() \u003d\u003d\u003d \u0027ul\u0027"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u0026\u0026 currentEl.classList.contains(\u0027site-nav-dropdown-container\u0027)) {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" currentEl.classList.add(\u0027site-nav-dropdown-container-open\u0027);"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }"},{"lineNumber":28,"author":{"gitId":"-"},"content":" currentEl \u003d currentEl.parentElement;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }"},{"lineNumber":30,"author":{"gitId":"-"},"content":" });"},{"lineNumber":31,"author":{"gitId":"-"},"content":" },"},{"lineNumber":32,"author":{"gitId":"-"},"content":"};"},{"lineNumber":33,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" /* Site navigation */"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" .site-nav-root a.current {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" color: #0072ec;"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" /* Navigation list */"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" .site-nav-list {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" list-style-type: none;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" padding-left: 0;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" .site-nav-default-list-item {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":51,"author":{"gitId":"-"},"content":" padding: 0.5rem 0 0 2.8rem;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" transition: background-color 0.08s;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" color: #454545;"},{"lineNumber":54,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" .site-nav-custom-list-item {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" padding: 0.5rem 0 0 2.8rem;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" color: #454545;"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" .site-nav-list-item-0 {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" padding: 0.5rem 0 0.5rem 0.8rem;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" font-weight: 500;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" font-size: 1.2em;"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" .site-nav-list-item-1 {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" padding: 0.4rem 0 0.4rem 1.3rem;"},{"lineNumber":70,"author":{"gitId":"-"},"content":" font-size: 1.03em;"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":""},{"lineNumber":73,"author":{"gitId":"-"},"content":" .site-nav-list-item-2 {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" padding: 0.3rem 0 0.3rem 1.8rem;"},{"lineNumber":75,"author":{"gitId":"-"},"content":" font-size: 0.89em;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" .site-nav-list-item-3 {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" padding: 0.2rem 0 0.2rem 2.4rem;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" font-size: 0.76em;"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" .site-nav-default-list-item:hover {"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" background-color: rgb(214 233 255 / 35%);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" .site-nav-default-list-item a {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":89,"author":{"gitId":"-"},"content":" height: 100%;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" color: #454545;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" .site-nav-default-list-item:hover a {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" color: black;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" text-decoration: none;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" /* Navigation dropdown menu */"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" .site-nav-dropdown-btn-container {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":102,"author":{"gitId":"LamJiuFong"},"content":" place-content: center center;"},{"lineNumber":103,"author":{"gitId":"-"},"content":" width: 2rem;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" height: 1.5em;"},{"lineNumber":105,"author":{"gitId":"-"},"content":" margin: 0 0.75rem 0 auto;"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":" .site-nav-dropdown-btn-icon {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" vertical-align: baseline;"},{"lineNumber":111,"author":{"gitId":"-"},"content":" align-self: center;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" width: 1.5em;"},{"lineNumber":113,"author":{"gitId":"-"},"content":" height: 1.5em;"},{"lineNumber":114,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":115,"author":{"gitId":"-"},"content":" border-radius: 1rem;"},{"lineNumber":116,"author":{"gitId":"LamJiuFong"},"content":" padding: 0;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" transition: 0.4s;"},{"lineNumber":118,"author":{"gitId":"-"},"content":" transform: rotate(0deg);"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }"},{"lineNumber":120,"author":{"gitId":"-"},"content":""},{"lineNumber":121,"author":{"gitId":"-"},"content":" .site-nav-dropdown-btn-icon:hover {"},{"lineNumber":122,"author":{"gitId":"-"},"content":" background-color: #d8e3fb;"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }"},{"lineNumber":124,"author":{"gitId":"-"},"content":""},{"lineNumber":125,"author":{"gitId":"-"},"content":" .site-nav-rotate-icon {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" color: #4c7ff1;"},{"lineNumber":127,"author":{"gitId":"-"},"content":" transform: rotate(-180deg);"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":" .site-nav-dropdown-container {"},{"lineNumber":131,"author":{"gitId":"-"},"content":" background: transparent;"},{"lineNumber":132,"author":{"gitId":"-"},"content":" max-height: 0;"},{"lineNumber":133,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" transition: max-height 0.15s ease-out;"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":" .site-nav-dropdown-container-open {"},{"lineNumber":138,"author":{"gitId":"-"},"content":" max-height: 1000px;"},{"lineNumber":139,"author":{"gitId":"-"},"content":" transition: max-height 0.25s ease-in;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }"},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":138}},{"path":"packages/vue-components/src/Submenu.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cli"},{"lineNumber":3,"author":{"gitId":"-"},"content":" ref\u003d\"submenu\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" :class\u003d\"[addClass, \u0027dropdown-submenu\u0027,"},{"lineNumber":5,"author":{"gitId":"-"},"content":" { \u0027dropend\u0027: dropright, \u0027dropstart\u0027: dropleft }]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003ca"},{"lineNumber":9,"author":{"gitId":"-"},"content":" class\u003d\"dropdown-item submenu-toggle\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" role\u003d\"button\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" :class\u003d\"{disabled: disabled}\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" data-bs-toggle\u003d\"dropdown\""},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"dropdown-menu\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cul class\u003d\"dropdown-menu\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/ul\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/li\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import { toBoolean } from \u0027./utils/utils\u0027;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import $ from \u0027./utils/NodeList\u0027;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import positionSubmenu from \u0027./utils/submenu\u0027;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import preventOverflowOnMobile from \u0027./utils/dropdown\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":36,"author":{"gitId":"-"},"content":" },"},{"lineNumber":37,"author":{"gitId":"-"},"content":" disabled: {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" type: [Boolean, String],"},{"lineNumber":39,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":40,"author":{"gitId":"-"},"content":" },"},{"lineNumber":41,"author":{"gitId":"-"},"content":" },"},{"lineNumber":42,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":44,"author":{"gitId":"-"},"content":" show: false,"},{"lineNumber":45,"author":{"gitId":"-"},"content":" dropright: true,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" dropleft: false,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" };"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" inject: {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" isParentNavbar: {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":52,"author":{"gitId":"-"},"content":" },"},{"lineNumber":53,"author":{"gitId":"-"},"content":" },"},{"lineNumber":54,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":55,"author":{"gitId":"-"},"content":" disabledBool() {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return toBoolean(this.disabled);"},{"lineNumber":57,"author":{"gitId":"-"},"content":" },"},{"lineNumber":58,"author":{"gitId":"-"},"content":" },"},{"lineNumber":59,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":60,"author":{"gitId":"-"},"content":" hideSubmenu() {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" this.show \u003d false;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" $(this.$refs.submenu).find(\u0027ul.dropdown-menu\u0027).each(ul \u003d\u003e ul.classList.toggle(\u0027show\u0027, false));"},{"lineNumber":63,"author":{"gitId":"-"},"content":" this.alignMenuRight();"},{"lineNumber":64,"author":{"gitId":"-"},"content":" },"},{"lineNumber":65,"author":{"gitId":"-"},"content":" showSubmenu() {"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.show \u003d true;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" $(this.$refs.submenu).findChildren(\u0027ul\u0027).each((ul) \u003d\u003e {"},{"lineNumber":68,"author":{"gitId":"-"},"content":" ul.classList.toggle(\u0027show\u0027, true);"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" // check if submenu is part of the navbar sliding menu on mobile"},{"lineNumber":71,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003c 768 \u0026\u0026 this.isParentNavbar) {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" preventOverflowOnMobile(ul);"},{"lineNumber":73,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":" if (positionSubmenu.isRightAlign(ul)) {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" this.alignMenuRight();"},{"lineNumber":78,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.alignMenuLeft();"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":" positionSubmenu.preventOverflow(ul);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" });"},{"lineNumber":83,"author":{"gitId":"-"},"content":" },"},{"lineNumber":84,"author":{"gitId":"-"},"content":" alignMenuRight() {"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.dropright \u003d true;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" this.dropleft \u003d false;"},{"lineNumber":87,"author":{"gitId":"-"},"content":" },"},{"lineNumber":88,"author":{"gitId":"-"},"content":" alignMenuLeft() {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" this.dropright \u003d false;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" this.dropleft \u003d true;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" },"},{"lineNumber":92,"author":{"gitId":"-"},"content":" },"},{"lineNumber":93,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" const $el \u003d $(this.$refs.submenu);"},{"lineNumber":95,"author":{"gitId":"-"},"content":" if (this.show) {"},{"lineNumber":96,"author":{"gitId":"-"},"content":" this.showSubmenu();"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"-"},"content":" $el.onBlur(() \u003d\u003e { this.hideSubmenu(); }, false);"},{"lineNumber":99,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button\u0027).on(\u0027click\u0027, (e) \u003d\u003e {"},{"lineNumber":100,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":101,"author":{"gitId":"-"},"content":" e.stopPropagation();"},{"lineNumber":102,"author":{"gitId":"-"},"content":" if (this.disabledBool) { return false; }"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (this.show) {"},{"lineNumber":104,"author":{"gitId":"-"},"content":" this.hideSubmenu();"},{"lineNumber":105,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":106,"author":{"gitId":"-"},"content":" this.showSubmenu();"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }"},{"lineNumber":108,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" });"},{"lineNumber":110,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button\u0027).on(\u0027mouseover\u0027, (e) \u003d\u003e {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" e.preventDefault();"},{"lineNumber":112,"author":{"gitId":"-"},"content":" if (window.innerWidth \u003e 767) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" const isShowing \u003d $el.findChildren(\u0027ul.show\u0027).length \u003e 0;"},{"lineNumber":114,"author":{"gitId":"-"},"content":" if (isShowing || this.disabledBool) { return false; }"},{"lineNumber":115,"author":{"gitId":"-"},"content":" e.currentTarget.click();"},{"lineNumber":116,"author":{"gitId":"-"},"content":" const fullMenu \u003d this.$parent.$parent;"},{"lineNumber":117,"author":{"gitId":"-"},"content":" fullMenu.$children.forEach((menuItem) \u003d\u003e {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" if (menuItem.$el \u003d\u003d\u003d this.$el) {"},{"lineNumber":119,"author":{"gitId":"-"},"content":" menuItem.$refs.submenu.showSubmenu();"},{"lineNumber":120,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":121,"author":{"gitId":"-"},"content":" menuItem.$refs.submenu.hideSubmenu();"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }"},{"lineNumber":123,"author":{"gitId":"-"},"content":" });"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return false;"},{"lineNumber":126,"author":{"gitId":"-"},"content":" });"},{"lineNumber":127,"author":{"gitId":"-"},"content":" },"},{"lineNumber":128,"author":{"gitId":"-"},"content":" beforeDestroy() {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" const $el \u003d $(this.$refs.submenu);"},{"lineNumber":130,"author":{"gitId":"-"},"content":" $el.offBlur();"},{"lineNumber":131,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027a,button\u0027).off();"},{"lineNumber":132,"author":{"gitId":"-"},"content":" $el.findChildren(\u0027ul\u0027).off();"},{"lineNumber":133,"author":{"gitId":"-"},"content":" },"},{"lineNumber":134,"author":{"gitId":"-"},"content":"};"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":""},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":" .dropdown-submenu {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" color: #212529 !important;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" padding: 0 !important;"},{"lineNumber":141,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }"},{"lineNumber":143,"author":{"gitId":"-"},"content":""},{"lineNumber":144,"author":{"gitId":"-"},"content":" .dropdown-submenu ul.dropdown-menu {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }"},{"lineNumber":147,"author":{"gitId":"-"},"content":""},{"lineNumber":148,"author":{"gitId":"-"},"content":" .dropdown \u003e ul \u003e .dropdown-submenu:last-child \u003e ul,"},{"lineNumber":149,"author":{"gitId":"-"},"content":" .btn-group \u003e ul \u003e .dropdown-submenu:last-child \u003e ul {"},{"lineNumber":150,"author":{"gitId":"-"},"content":" margin-bottom: -0.5rem;"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }"},{"lineNumber":152,"author":{"gitId":"-"},"content":""},{"lineNumber":153,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003e\u003d 768px) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" .submenu-toggle::after {"},{"lineNumber":155,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":156,"author":{"gitId":"-"},"content":" width: 0;"},{"lineNumber":157,"author":{"gitId":"-"},"content":" height: 0;"},{"lineNumber":158,"author":{"gitId":"-"},"content":" vertical-align: 0.255em;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" content: \"\";"},{"lineNumber":160,"author":{"gitId":"-"},"content":" border-top: 0.3em solid transparent;"},{"lineNumber":161,"author":{"gitId":"-"},"content":" border-right: 0;"},{"lineNumber":162,"author":{"gitId":"-"},"content":" border-bottom: 0.3em solid transparent;"},{"lineNumber":163,"author":{"gitId":"-"},"content":" border-left: 0.3em solid;"},{"lineNumber":164,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":165,"author":{"gitId":"-"},"content":" margin-top: 0.5em;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" }"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 767px) {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" .dropdown-submenu \u003e ul {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" padding-bottom: 0;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" border-radius: 0;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" margin: -0.05rem;"},{"lineNumber":174,"author":{"gitId":"-"},"content":" position: static;"},{"lineNumber":175,"author":{"gitId":"-"},"content":" float: none;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" }"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":" .submenu-toggle::after {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" width: 0;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" height: 0;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" margin-left: 0.255em;"},{"lineNumber":183,"author":{"gitId":"-"},"content":" vertical-align: 0.255em;"},{"lineNumber":184,"author":{"gitId":"-"},"content":" content: \"\";"},{"lineNumber":185,"author":{"gitId":"-"},"content":" border-top: 0.3em solid;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" border-right: 0.3em solid transparent;"},{"lineNumber":187,"author":{"gitId":"-"},"content":" border-bottom: 0;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" border-left: 0.3em solid transparent;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" margin-top: 0.5em;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }"},{"lineNumber":193,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":2,"-":191}},{"path":"packages/vue-components/src/Tooltip.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":3,"author":{"gitId":"-"},"content":" :class\u003d\"trigger \u003d\u003d\u003d \u0027click\u0027 ? \u0027trigger-click\u0027 : \u0027trigger\u0027\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" data-mb-component-type\u003d\"tooltip\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" tabindex\u003d\"0\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cportal v-if\u003d\"targetEl.id\" :to\u003d\"\u0027tooltip:\u0027 + targetEl.id\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"content\"\u003e\u003c/slot\u003e"},{"lineNumber":9,"author":{"gitId":"yiwen101"},"content":" \u003c/portal\u003e\u003c!-- do not delete this comment, it is for the stray space issue (#2419)"},{"lineNumber":10,"author":{"gitId":"yiwen101"},"content":" --\u003e\u003cv-tooltip"},{"lineNumber":11,"author":{"gitId":"-"},"content":" v-if\u003d\"isMounted\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" :auto-hide\u003d\"!isInput\""},{"lineNumber":13,"author":{"gitId":"-"},"content":" :triggers\u003d\"triggers\""},{"lineNumber":14,"author":{"gitId":"-"},"content":" :popper-triggers\u003d\"triggers\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" :hide-triggers\u003d\"triggers\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" :placement\u003d\"placement\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" :delay\u003d\"0\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" shift-cross-axis"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003ctemplate #popper\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"content\"\u003e\u003c/slot\u003e"},{"lineNumber":22,"author":{"gitId":"yiwen101"},"content":" \u003c/template\u003e\u003c!-- do not delete this comment, it is for the stray space issue (#2419)"},{"lineNumber":23,"author":{"gitId":"yiwen101"},"content":" --\u003e\u003cspan v-if\u003d\"!isInput\" @click.stop\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003cslot v-else\u003e\u003c/slot\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/v-tooltip\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":"// eslint-disable-next-line import/no-extraneous-dependencies"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import { Portal } from \u0027portal-vue\u0027;"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" name: \u0027Tooltip\u0027,"},{"lineNumber":37,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":38,"author":{"gitId":"-"},"content":" Portal,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" },"},{"lineNumber":40,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" trigger: {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":43,"author":{"gitId":"-"},"content":" default: \u0027hover focus\u0027,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" },"},{"lineNumber":45,"author":{"gitId":"-"},"content":" placement: {"},{"lineNumber":46,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" default: \u0027top\u0027,"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" },"},{"lineNumber":50,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" targetEl: {},"},{"lineNumber":53,"author":{"gitId":"-"},"content":" isInput: false,"},{"lineNumber":54,"author":{"gitId":"-"},"content":" isMounted: false,"},{"lineNumber":55,"author":{"gitId":"-"},"content":" };"},{"lineNumber":56,"author":{"gitId":"-"},"content":" },"},{"lineNumber":57,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" triggers() {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return this.trigger.split(\u0027 \u0027);"},{"lineNumber":60,"author":{"gitId":"-"},"content":" },"},{"lineNumber":61,"author":{"gitId":"-"},"content":" },"},{"lineNumber":62,"author":{"gitId":"-"},"content":" mounted() {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" this.targetEl \u003d this.$el;"},{"lineNumber":64,"author":{"gitId":"-"},"content":" // \u003cinput\u003e tags need to be handled separately as they need to retain focus on inputs"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.isInput \u003d this.$slots.default \u0026\u0026 this.$slots.default.some(node \u003d\u003e node.tag \u003d\u003d\u003d \u0027input\u0027);"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.isMounted \u003d true;"},{"lineNumber":67,"author":{"gitId":"-"},"content":" },"},{"lineNumber":68,"author":{"gitId":"-"},"content":"};"},{"lineNumber":69,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":72,"author":{"gitId":"LamJiuFong"},"content":" /* stylelint-disable selector-class-pattern */"},{"lineNumber":73,"author":{"gitId":"-"},"content":" .v-popper--theme-tooltip .v-popper__inner {"},{"lineNumber":74,"author":{"gitId":"-"},"content":" /* following bootstrap */"},{"lineNumber":75,"author":{"gitId":"LamJiuFong"},"content":" background: rgb(0 0 0 / 90%);"},{"lineNumber":76,"author":{"gitId":"-"},"content":" padding: 4px 8px;"},{"lineNumber":77,"author":{"gitId":"-"},"content":" font-size: 0.875rem;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" max-width: 200px;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"LamJiuFong"},"content":" /* stylelint-enable selector-class-pattern */"},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":3,"-":75,"yiwen101":4}},{"path":"packages/vue-components/src/annotations/Annotate.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027annotate-image-wrapper\u0027, addClass]\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cimg"},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"pic\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :src\u003d\"src\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" :alt\u003d\"alt\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" :width\u003d\"computedWidth\""},{"lineNumber":8,"author":{"gitId":"LamJiuFong"},"content":" :height\u003d\"computedHeight\""},{"lineNumber":9,"author":{"gitId":"LamJiuFong"},"content":" :loading\u003d\"computedLoadType\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" class\u003d\"annotate-image\""},{"lineNumber":11,"author":{"gitId":"LamJiuFong"},"content":" @load.once\u003d\"computeWidthAndHeight\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cdiv style\u003d\"top: 0; left: 0; height: 0;\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { toNumber } from \u0027../utils/utils\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":23,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":24,"author":{"gitId":"-"},"content":" src: {"},{"lineNumber":25,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" },"},{"lineNumber":28,"author":{"gitId":"-"},"content":" alt: {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":30,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":31,"author":{"gitId":"-"},"content":" },"},{"lineNumber":32,"author":{"gitId":"-"},"content":" height: {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" },"},{"lineNumber":36,"author":{"gitId":"-"},"content":" width: {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":38,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" },"},{"lineNumber":40,"author":{"gitId":"LamJiuFong"},"content":" lazy: {"},{"lineNumber":41,"author":{"gitId":"LamJiuFong"},"content":" type: Boolean,"},{"lineNumber":42,"author":{"gitId":"LamJiuFong"},"content":" default: false,"},{"lineNumber":43,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":44,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" },"},{"lineNumber":48,"author":{"gitId":"-"},"content":" },"},{"lineNumber":49,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":50,"author":{"gitId":"-"},"content":" hasWidth() {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return this.width !\u003d\u003d \u0027\u0027;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" },"},{"lineNumber":53,"author":{"gitId":"-"},"content":" hasHeight() {"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return this.height !\u003d\u003d \u0027\u0027;"},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" computedWidth() {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" if (this.hasWidth) {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return this.width;"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return this.widthFromHeight;"},{"lineNumber":61,"author":{"gitId":"-"},"content":" },"},{"lineNumber":62,"author":{"gitId":"LamJiuFong"},"content":" computedHeight() {"},{"lineNumber":63,"author":{"gitId":"LamJiuFong"},"content":" return this.heightFromWidth;"},{"lineNumber":64,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":65,"author":{"gitId":"LamJiuFong"},"content":" computedLoadType() {"},{"lineNumber":66,"author":{"gitId":"LamJiuFong"},"content":" return this.lazy ? \u0027lazy\u0027 : \u0027eager\u0027;"},{"lineNumber":67,"author":{"gitId":"LamJiuFong"},"content":" },"},{"lineNumber":68,"author":{"gitId":"-"},"content":" },"},{"lineNumber":69,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":71,"author":{"gitId":"-"},"content":" widthFromHeight: \u0027\u0027,"},{"lineNumber":72,"author":{"gitId":"LamJiuFong"},"content":" heightFromWidth: \u0027\u0027,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" };"},{"lineNumber":74,"author":{"gitId":"-"},"content":" },"},{"lineNumber":75,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":76,"author":{"gitId":"LamJiuFong"},"content":" computeWidthAndHeight() {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" const renderedImg \u003d this.$refs.pic;"},{"lineNumber":78,"author":{"gitId":"-"},"content":" const imgHeight \u003d renderedImg.naturalHeight;"},{"lineNumber":79,"author":{"gitId":"-"},"content":" const imgWidth \u003d renderedImg.naturalWidth;"},{"lineNumber":80,"author":{"gitId":"LamJiuFong"},"content":" const aspectRatio \u003d imgWidth / imgHeight;"},{"lineNumber":81,"author":{"gitId":"LamJiuFong"},"content":" if (this.hasWidth) { // if width is present, overwrite the height (if any) to maintain aspect ratio"},{"lineNumber":82,"author":{"gitId":"LamJiuFong"},"content":" this.heightFromWidth \u003d Math.round(toNumber(this.width) / aspectRatio).toString();"},{"lineNumber":83,"author":{"gitId":"LamJiuFong"},"content":" } else if (this.hasHeight) {"},{"lineNumber":84,"author":{"gitId":"LamJiuFong"},"content":" this.widthFromHeight \u003d Math.round(toNumber(this.height) * aspectRatio).toString();"},{"lineNumber":85,"author":{"gitId":"LamJiuFong"},"content":" this.heightFromWidth \u003d this.height;"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":" },"},{"lineNumber":88,"author":{"gitId":"-"},"content":" },"},{"lineNumber":89,"author":{"gitId":"-"},"content":" provide() {"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":91,"author":{"gitId":"-"},"content":" width: this.width,"},{"lineNumber":92,"author":{"gitId":"-"},"content":" height: this.height,"},{"lineNumber":93,"author":{"gitId":"-"},"content":" src: this.src,"},{"lineNumber":94,"author":{"gitId":"-"},"content":" };"},{"lineNumber":95,"author":{"gitId":"-"},"content":" },"},{"lineNumber":96,"author":{"gitId":"-"},"content":"};"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" .annotate-image-wrapper {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":102,"author":{"gitId":"-"},"content":" text-align: left;"},{"lineNumber":103,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" .annotate-image {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" max-width: 100%;"},{"lineNumber":108,"author":{"gitId":"-"},"content":" height: auto;"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }"},{"lineNumber":110,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":21,"-":89}},{"path":"packages/vue-components/src/panels/MinimalPanel.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":3,"author":{"gitId":"-"},"content":" v-if\u003d\"localMinimized\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"cardContainer\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-container\u0027, addClass]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":8,"author":{"gitId":"-"},"content":" v-if\u003d\"hasId\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" :id\u003d\"panelId\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" class\u003d\"anchor\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"morph\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cbutton class\u003d\"morph-display-wrapper btn card-title morph-title\" @click\u003d\"minimalOpen()\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":15,"author":{"gitId":"-"},"content":" v-if\u003d\"!noMinimizedSwitch\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027glyphicon\u0027, \u0027glyphicon-chevron-right\u0027]\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"_alt\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"card-title\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":27,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":28,"author":{"gitId":"-"},"content":" ref\u003d\"cardContainer\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-container\u0027, addClass]\""},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":32,"author":{"gitId":"-"},"content":" v-if\u003d\"hasId\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" :id\u003d\"panelId\""},{"lineNumber":34,"author":{"gitId":"-"},"content":" class\u003d\"anchor\""},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card card-flex\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027header-wrapper\u0027,"},{"lineNumber":39,"author":{"gitId":"-"},"content":" { \u0027header-wrapper-bottom\u0027: isHeaderAtBottom, \u0027header-toggle\u0027: isExpandableCard }]\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" @click.prevent.stop\u003d\"isExpandableCard \u0026\u0026 minimalToggle()\""},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003ctransition name\u003d\"header-fade\"\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":44,"author":{"gitId":"-"},"content":" v-show\u003d\"!isHeaderAtBottom\""},{"lineNumber":45,"author":{"gitId":"-"},"content":" ref\u003d\"headerWrapper\""},{"lineNumber":46,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-title\u0027, { \u0027ellipses\u0027: !hasHeaderBool }]\""},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"card-title-inline\"\u003e\u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e\u003c/span\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":50,"author":{"gitId":"-"},"content":" v-show\u003d\"showDownSwitch\""},{"lineNumber":51,"author":{"gitId":"-"},"content":" aria-hidden\u003d\"true\""},{"lineNumber":52,"author":{"gitId":"-"},"content":" class\u003d\"minimal-button glyphicon glyphicon-menu-down minimal-menu-down\""},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027button-wrapper\u0027, { \u0027button-wrapper-expanded\u0027: isHeaderAtBottom }]\"\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":59,"author":{"gitId":"-"},"content":" v-show\u003d\"!noCloseBool\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" class\u003d\"minimal-button\""},{"lineNumber":61,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @click.stop\u003d\"minimalClose()\""},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-remove minimal-close-button\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":67,"author":{"gitId":"-"},"content":" v-show\u003d\"popupUrl !\u003d\u003d null\""},{"lineNumber":68,"author":{"gitId":"-"},"content":" class\u003d\"minimal-button\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" @click.stop\u003d\"openPopup()\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-new-window minimal-popup-button\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":75,"author":{"gitId":"-"},"content":" v-show\u003d\"isHeaderAtBottom \u0026\u0026 isExpandableCard \u0026\u0026 bottomSwitchBool\""},{"lineNumber":76,"author":{"gitId":"-"},"content":" class\u003d\"minimal-button\""},{"lineNumber":77,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-menu-up minimal-menu-up\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":80,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":85,"author":{"gitId":"-"},"content":" ref\u003d\"panel\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" class\u003d\"card-collapse\""},{"lineNumber":87,"author":{"gitId":"-"},"content":" :class\u003d\"{\u0027card-peek-collapsed\u0027: shouldShowPeek}\""},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":90,"author":{"gitId":"-"},"content":" v-if\u003d\"wasRetrieverLoaded || preloadBool\""},{"lineNumber":91,"author":{"gitId":"-"},"content":" class\u003d\"card-body\""},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003cretriever"},{"lineNumber":95,"author":{"gitId":"-"},"content":" v-if\u003d\"hasSrc\""},{"lineNumber":96,"author":{"gitId":"-"},"content":" ref\u003d\"retriever\""},{"lineNumber":97,"author":{"gitId":"-"},"content":" :src\u003d\"srcWithoutFragment\""},{"lineNumber":98,"author":{"gitId":"-"},"content":" :fragment\u003d\"fragment\""},{"lineNumber":99,"author":{"gitId":"-"},"content":" @src-loaded\u003d\"retrieverUpdateMaxHeight\""},{"lineNumber":100,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":""},{"lineNumber":107,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":"import retriever from \u0027../Retriever.vue\u0027;"},{"lineNumber":109,"author":{"gitId":"-"},"content":"import panelBase from \u0027./PanelBase\u0027;"},{"lineNumber":110,"author":{"gitId":"-"},"content":""},{"lineNumber":111,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" mixins: [panelBase],"},{"lineNumber":113,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" retriever,"},{"lineNumber":115,"author":{"gitId":"-"},"content":" },"},{"lineNumber":116,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":119,"author":{"gitId":"-"},"content":" \u0027Copy\u0027 of localExpanded that is updated on certain animation events."},{"lineNumber":120,"author":{"gitId":"-"},"content":" It is minimal-panel specific due to its design (the header can shift to the bottom)."},{"lineNumber":121,"author":{"gitId":"-"},"content":" Its purpose is to show the header text only once the collapse animation has finished."},{"lineNumber":122,"author":{"gitId":"-"},"content":" */"},{"lineNumber":123,"author":{"gitId":"-"},"content":" isHeaderAtBottom: false,"},{"lineNumber":124,"author":{"gitId":"-"},"content":" };"},{"lineNumber":125,"author":{"gitId":"-"},"content":" },"},{"lineNumber":126,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":127,"author":{"gitId":"-"},"content":" showDownSwitch() {"},{"lineNumber":128,"author":{"gitId":"-"},"content":" return this.hasHeaderBool \u0026\u0026 this.isExpandableCard \u0026\u0026 !this.noSwitchBool;"},{"lineNumber":129,"author":{"gitId":"-"},"content":" },"},{"lineNumber":130,"author":{"gitId":"-"},"content":" },"},{"lineNumber":131,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" minimalToggle() {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" if (this.localExpanded) {"},{"lineNumber":134,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":135,"author":{"gitId":"-"},"content":" This is a collapse."},{"lineNumber":136,"author":{"gitId":"-"},"content":" Set isHeaderAtBottom to true only at the end of transition."},{"lineNumber":137,"author":{"gitId":"-"},"content":" So that we can achieve the correct collapse transition effect of minimal panel."},{"lineNumber":138,"author":{"gitId":"-"},"content":" */"},{"lineNumber":139,"author":{"gitId":"-"},"content":" const onCollapseDone \u003d (event) \u003d\u003e {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (event.target \u003d\u003d\u003d this.$refs.panel) {"},{"lineNumber":141,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d false;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" this.$refs.panel.removeEventListener(\u0027transitionend\u0027, onCollapseDone);"},{"lineNumber":143,"author":{"gitId":"-"},"content":" }"},{"lineNumber":144,"author":{"gitId":"-"},"content":" };"},{"lineNumber":145,"author":{"gitId":"-"},"content":" this.$refs.panel.addEventListener(\u0027transitionend\u0027, onCollapseDone);"},{"lineNumber":146,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" // This is an expansion. Set isHeaderAtBottom to true *immediately*."},{"lineNumber":148,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d true;"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":" this.toggle(true);"},{"lineNumber":151,"author":{"gitId":"-"},"content":" },"},{"lineNumber":152,"author":{"gitId":"-"},"content":" minimalOpen() {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" this.open();"},{"lineNumber":154,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d true;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" },"},{"lineNumber":156,"author":{"gitId":"-"},"content":" minimalClose() {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.close();"},{"lineNumber":158,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d false;"},{"lineNumber":159,"author":{"gitId":"-"},"content":" },"},{"lineNumber":160,"author":{"gitId":"-"},"content":" },"},{"lineNumber":161,"author":{"gitId":"-"},"content":" created() {"},{"lineNumber":162,"author":{"gitId":"-"},"content":" this.isHeaderAtBottom \u003d this.localExpanded;"},{"lineNumber":163,"author":{"gitId":"-"},"content":" },"},{"lineNumber":164,"author":{"gitId":"-"},"content":"};"},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":""},{"lineNumber":167,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":168,"author":{"gitId":"-"},"content":""},{"lineNumber":169,"author":{"gitId":"-"},"content":" .card-peek-collapsed {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }"},{"lineNumber":172,"author":{"gitId":"-"},"content":""},{"lineNumber":173,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * Gives the faded content effect for peek."},{"lineNumber":175,"author":{"gitId":"-"},"content":" * Ensure that height has the same value as collapsedPanelHeight in PanelBase.js."},{"lineNumber":176,"author":{"gitId":"-"},"content":" */"},{"lineNumber":177,"author":{"gitId":"-"},"content":" .card-peek-collapsed::after {"},{"lineNumber":178,"author":{"gitId":"-"},"content":" content: \"\";"},{"lineNumber":179,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" bottom: 0;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" height: 125px;"},{"lineNumber":183,"author":{"gitId":"-"},"content":" background-image: linear-gradient(180deg, transparent, white 90%);"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }"},{"lineNumber":185,"author":{"gitId":"-"},"content":""},{"lineNumber":186,"author":{"gitId":"-"},"content":" .morph-title {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" padding: 0 0.3em;"},{"lineNumber":188,"author":{"gitId":"-"},"content":" border-color: black;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" background-color: transparent;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" vertical-align: top;"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }"},{"lineNumber":192,"author":{"gitId":"-"},"content":""},{"lineNumber":193,"author":{"gitId":"-"},"content":" .morph-title:hover,"},{"lineNumber":194,"author":{"gitId":"-"},"content":" .morph-title:active,"},{"lineNumber":195,"author":{"gitId":"-"},"content":" .morph-title:focus {"},{"lineNumber":196,"author":{"gitId":"-"},"content":" color: white;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" border-color: #343a40;"},{"lineNumber":198,"author":{"gitId":"-"},"content":" background-color: #343a40;"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" .card-collapse {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" transition: max-height 0.5s ease-in-out;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }"},{"lineNumber":205,"author":{"gitId":"-"},"content":""},{"lineNumber":206,"author":{"gitId":"-"},"content":" .card-flex {"},{"lineNumber":207,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":208,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" margin: 0;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" .header-fade-enter {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":""},{"lineNumber":217,"author":{"gitId":"-"},"content":" .header-fade-leave-active {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":219,"author":{"gitId":"-"},"content":" }"},{"lineNumber":220,"author":{"gitId":"-"},"content":""},{"lineNumber":221,"author":{"gitId":"-"},"content":" .header-fade-leave-to {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" opacity: 0 !important;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":" .card-title-inline {"},{"lineNumber":226,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":227,"author":{"gitId":"-"},"content":" }"},{"lineNumber":228,"author":{"gitId":"-"},"content":""},{"lineNumber":229,"author":{"gitId":"-"},"content":" .card-body {"},{"lineNumber":230,"author":{"gitId":"-"},"content":" padding: 0;"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }"},{"lineNumber":232,"author":{"gitId":"-"},"content":""},{"lineNumber":233,"author":{"gitId":"-"},"content":" .header-wrapper {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":235,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":236,"author":{"gitId":"-"},"content":" background-color: white;"},{"lineNumber":237,"author":{"gitId":"-"},"content":" }"},{"lineNumber":238,"author":{"gitId":"-"},"content":""},{"lineNumber":239,"author":{"gitId":"-"},"content":" .header-wrapper-bottom {"},{"lineNumber":240,"author":{"gitId":"-"},"content":" order: 1;"},{"lineNumber":241,"author":{"gitId":"-"},"content":" }"},{"lineNumber":242,"author":{"gitId":"-"},"content":""},{"lineNumber":243,"author":{"gitId":"-"},"content":" .ellipses::before {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":245,"author":{"gitId":"-"},"content":" bottom: 3px;"},{"lineNumber":246,"author":{"gitId":"-"},"content":" content: \u0027...\u0027;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" font-weight: 900;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" margin-right: 4px;"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }"},{"lineNumber":250,"author":{"gitId":"-"},"content":""},{"lineNumber":251,"author":{"gitId":"-"},"content":" .button-wrapper {"},{"lineNumber":252,"author":{"gitId":"-"},"content":" padding-left: 2px;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" border-width: 0 0 0 1px;"},{"lineNumber":254,"author":{"gitId":"LamJiuFong"},"content":" border-color: rgb(150 150 150 / 20%);"},{"lineNumber":255,"author":{"gitId":"-"},"content":" border-style: solid;"},{"lineNumber":256,"author":{"gitId":"-"},"content":" margin-left: 2px;"},{"lineNumber":257,"author":{"gitId":"-"},"content":" width: auto;"},{"lineNumber":258,"author":{"gitId":"-"},"content":" float: none;"},{"lineNumber":259,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" transition: opacity 0.5s;"},{"lineNumber":261,"author":{"gitId":"-"},"content":" vertical-align: text-top;"},{"lineNumber":262,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":263,"author":{"gitId":"-"},"content":" }"},{"lineNumber":264,"author":{"gitId":"-"},"content":""},{"lineNumber":265,"author":{"gitId":"-"},"content":" .button-wrapper-expanded {"},{"lineNumber":266,"author":{"gitId":"-"},"content":" padding-left: 0;"},{"lineNumber":267,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" .card:hover .button-wrapper {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" .header-toggle {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }"},{"lineNumber":278,"author":{"gitId":"-"},"content":""},{"lineNumber":279,"author":{"gitId":"-"},"content":" .glyphicon {"},{"lineNumber":280,"author":{"gitId":"-"},"content":" font-size: 12px;"},{"lineNumber":281,"author":{"gitId":"-"},"content":" }"},{"lineNumber":282,"author":{"gitId":"-"},"content":""},{"lineNumber":283,"author":{"gitId":"-"},"content":" .minimal-button {"},{"lineNumber":284,"author":{"gitId":"-"},"content":" padding: 0 3px;"},{"lineNumber":285,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":286,"author":{"gitId":"LamJiuFong"},"content":" color: rgb(150 150 150);"},{"lineNumber":287,"author":{"gitId":"-"},"content":" background-color: transparent;"},{"lineNumber":288,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":289,"author":{"gitId":"-"},"content":" }"},{"lineNumber":290,"author":{"gitId":"-"},"content":""},{"lineNumber":291,"author":{"gitId":"-"},"content":" .minimal-button:hover,"},{"lineNumber":292,"author":{"gitId":"-"},"content":" .minimal-button:active,"},{"lineNumber":293,"author":{"gitId":"-"},"content":" .minimal-button:focus {"},{"lineNumber":294,"author":{"gitId":"LamJiuFong"},"content":" color: rgb(30 30 30);"},{"lineNumber":295,"author":{"gitId":"-"},"content":" }"},{"lineNumber":296,"author":{"gitId":"-"},"content":""},{"lineNumber":297,"author":{"gitId":"-"},"content":" .minimal-popup-button {"},{"lineNumber":298,"author":{"gitId":"-"},"content":" top: 1px;"},{"lineNumber":299,"author":{"gitId":"-"},"content":" font-size: 9px;"},{"lineNumber":300,"author":{"gitId":"-"},"content":" }"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":" .minimal-menu-up {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" top: 2px;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" font-size: 13px;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" }"},{"lineNumber":306,"author":{"gitId":"-"},"content":""},{"lineNumber":307,"author":{"gitId":"-"},"content":" .minimal-menu-down {"},{"lineNumber":308,"author":{"gitId":"-"},"content":" top: 1px;"},{"lineNumber":309,"author":{"gitId":"-"},"content":" font-size: 13px;"},{"lineNumber":310,"author":{"gitId":"-"},"content":" }"},{"lineNumber":311,"author":{"gitId":"-"},"content":""},{"lineNumber":312,"author":{"gitId":"-"},"content":" .minimal-close-button {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" top: 0;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" font-size: 11px;"},{"lineNumber":315,"author":{"gitId":"-"},"content":" }"},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":" /* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":318,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 575.98px) {"},{"lineNumber":319,"author":{"gitId":"-"},"content":" .button-wrapper-expanded {"},{"lineNumber":320,"author":{"gitId":"-"},"content":" padding-left: 0;"},{"lineNumber":321,"author":{"gitId":"-"},"content":" border: 0;"},{"lineNumber":322,"author":{"gitId":"-"},"content":" margin-left: 0;"},{"lineNumber":323,"author":{"gitId":"-"},"content":" opacity: 0.15;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" }"},{"lineNumber":325,"author":{"gitId":"-"},"content":""},{"lineNumber":326,"author":{"gitId":"-"},"content":" .button-wrapper-visible {"},{"lineNumber":327,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":328,"author":{"gitId":"-"},"content":" }"},{"lineNumber":329,"author":{"gitId":"-"},"content":" }"},{"lineNumber":330,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":4,"-":326}},{"path":"packages/vue-components/src/panels/NestedPanel.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":3,"author":{"gitId":"-"},"content":" v-if\u003d\"localMinimized\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" ref\u003d\"cardContainer\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-container\u0027, addClass]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"morph\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cbutton :class\u003d\"[\u0027morph-display-wrapper\u0027, \u0027btn\u0027, btnType]\" @click\u003d\"open()\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":10,"author":{"gitId":"-"},"content":" v-if\u003d\"!noMinimizedSwitch\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" class\u003d\"minimal-caret-wrapper\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":14,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027glyphicon\u0027, \u0027glyphicon-chevron-right\u0027]\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"card-title\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"_alt\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":26,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":27,"author":{"gitId":"-"},"content":" ref\u003d\"cardContainer\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-container\u0027, addClass]\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027card\u0027, { \u0027expandable-card\u0027: isExpandableCard }, borderType]\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":32,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027card-header\u0027,{\u0027header-toggle\u0027:isExpandableCard}, cardType, borderType]\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" @click.prevent.stop\u003d\"isExpandableCard \u0026\u0026 toggle()\""},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"caret-wrapper\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":37,"author":{"gitId":"-"},"content":" v-if\u003d\"showCaret\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027glyphicon\u0027, localExpanded ? \u0027glyphicon-chevron-down\u0027 : \u0027glyphicon-chevron-right\u0027]\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003e\u003c/span\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":42,"author":{"gitId":"-"},"content":" ref\u003d\"headerWrapper\""},{"lineNumber":43,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027header-wrapper card-title\u0027, cardType,"},{"lineNumber":44,"author":{"gitId":"-"},"content":" {\u0027text-white\u0027:!isLightBg, \u0027header-transparent\u0027:!shouldShowHeader}]\""},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"header\"\u003e\u003c/slot\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"button-wrapper\"\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"button\"\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003cpanel-switch"},{"lineNumber":51,"author":{"gitId":"-"},"content":" v-show\u003d\"isExpandableCard \u0026\u0026 !noSwitchBool \u0026\u0026 !showCaret\""},{"lineNumber":52,"author":{"gitId":"-"},"content":" :is-open\u003d\"localExpanded\""},{"lineNumber":53,"author":{"gitId":"-"},"content":" :is-light-bg\u003d\"isLightBg\""},{"lineNumber":54,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":56,"author":{"gitId":"-"},"content":" v-show\u003d\"!noCloseBool\""},{"lineNumber":57,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" class\u003d\"close-button btn\""},{"lineNumber":59,"author":{"gitId":"-"},"content":" :class\u003d\"[isLightBg ? \u0027btn-outline-secondary\u0027 : \u0027btn-outline-light\u0027,"},{"lineNumber":60,"author":{"gitId":"-"},"content":" { \u0027seamless-button\u0027: isSeamless }]\""},{"lineNumber":61,"author":{"gitId":"-"},"content":" @click.stop\u003d\"close()\""},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-remove\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":66,"author":{"gitId":"-"},"content":" v-show\u003d\"popupUrl\""},{"lineNumber":67,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":68,"author":{"gitId":"-"},"content":" class\u003d\"popup-button btn\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" :class\u003d\"[isLightBg ? \u0027btn-outline-secondary\u0027 : \u0027btn-outline-light\u0027,"},{"lineNumber":70,"author":{"gitId":"-"},"content":" { \u0027seamless-button\u0027: isSeamless }]\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" @click.stop\u003d\"openPopup()\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"glyphicon glyphicon-new-window\" aria-hidden\u003d\"true\"\u003e\u003c/span\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":79,"author":{"gitId":"-"},"content":" ref\u003d\"panel\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" class\u003d\"card-collapse\""},{"lineNumber":81,"author":{"gitId":"-"},"content":" :class\u003d\"{\u0027card-peek-collapsed\u0027: shouldShowPeek}\""},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":84,"author":{"gitId":"-"},"content":" v-if\u003d\"wasRetrieverLoaded || preloadBool\""},{"lineNumber":85,"author":{"gitId":"-"},"content":" class\u003d\"card-body\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003cretriever"},{"lineNumber":89,"author":{"gitId":"-"},"content":" v-if\u003d\"hasSrc\""},{"lineNumber":90,"author":{"gitId":"-"},"content":" ref\u003d\"retriever\""},{"lineNumber":91,"author":{"gitId":"-"},"content":" :src\u003d\"srcWithoutFragment\""},{"lineNumber":92,"author":{"gitId":"-"},"content":" :fragment\u003d\"fragment\""},{"lineNumber":93,"author":{"gitId":"-"},"content":" @src-loaded\u003d\"retrieverUpdateMaxHeight\""},{"lineNumber":94,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"bottom-button-wrapper\"\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003cpanel-switch"},{"lineNumber":97,"author":{"gitId":"-"},"content":" v-show\u003d\"isExpandableCard \u0026\u0026 bottomSwitchBool\""},{"lineNumber":98,"author":{"gitId":"-"},"content":" :is-open\u003d\"localExpanded\""},{"lineNumber":99,"author":{"gitId":"-"},"content":" @click.native.stop.prevent\u003d\"toggle(true)\""},{"lineNumber":100,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003chr v-show\u003d\"isSeamless\" /\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003ctransition name\u003d\"peek-read-more-fade\"\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":107,"author":{"gitId":"-"},"content":" v-if\u003d\"shouldShowPeek\""},{"lineNumber":108,"author":{"gitId":"-"},"content":" class\u003d\"peek-read-more glyphicon glyphicon-chevron-down\""},{"lineNumber":109,"author":{"gitId":"-"},"content":" @click\u003d\"toggle()\""},{"lineNumber":110,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":115,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":""},{"lineNumber":117,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":"import panelBase from \u0027./PanelBase\u0027;"},{"lineNumber":119,"author":{"gitId":"-"},"content":"import panelSwitch from \u0027./PanelSwitch.vue\u0027;"},{"lineNumber":120,"author":{"gitId":"-"},"content":"import retriever from \u0027../Retriever.vue\u0027;"},{"lineNumber":121,"author":{"gitId":"-"},"content":""},{"lineNumber":122,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":123,"author":{"gitId":"-"},"content":" mixins: [panelBase],"},{"lineNumber":124,"author":{"gitId":"-"},"content":" components: {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" panelSwitch,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" retriever,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" },"},{"lineNumber":128,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":129,"author":{"gitId":"-"},"content":" showCaret() {"},{"lineNumber":130,"author":{"gitId":"-"},"content":" return this.isSeamless \u0026\u0026 this.expandableBool;"},{"lineNumber":131,"author":{"gitId":"-"},"content":" },"},{"lineNumber":132,"author":{"gitId":"-"},"content":" isSeamless() {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" return this.type \u003d\u003d\u003d \u0027seamless\u0027;"},{"lineNumber":134,"author":{"gitId":"-"},"content":" },"},{"lineNumber":135,"author":{"gitId":"-"},"content":" btnType() {"},{"lineNumber":136,"author":{"gitId":"-"},"content":" if (this.isSeamless || this.type \u003d\u003d\u003d \u0027light\u0027) {"},{"lineNumber":137,"author":{"gitId":"-"},"content":" return \u0027btn-outline-secondary\u0027;"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return `btn-outline-${this.type || \u0027secondary\u0027}`;"},{"lineNumber":140,"author":{"gitId":"-"},"content":" },"},{"lineNumber":141,"author":{"gitId":"-"},"content":" borderType() {"},{"lineNumber":142,"author":{"gitId":"-"},"content":" if (this.isSeamless) {"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return \u0027border-0\u0027;"},{"lineNumber":144,"author":{"gitId":"-"},"content":" } else if (this.type) {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" if (this.type \u003d\u003d\u003d \u0027light\u0027) {"},{"lineNumber":146,"author":{"gitId":"-"},"content":" return \u0027\u0027; // Bootstrap 4.x light border is almost invisible on a white page"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":" return `border-${this.type}`;"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }"},{"lineNumber":150,"author":{"gitId":"-"},"content":" return \u0027\u0027;"},{"lineNumber":151,"author":{"gitId":"-"},"content":" },"},{"lineNumber":152,"author":{"gitId":"-"},"content":" cardType() {"},{"lineNumber":153,"author":{"gitId":"-"},"content":" if (this.isSeamless) {"},{"lineNumber":154,"author":{"gitId":"-"},"content":" return \u0027bg-white\u0027;"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }"},{"lineNumber":156,"author":{"gitId":"-"},"content":" return `bg-${this.type || \u0027light\u0027}`;"},{"lineNumber":157,"author":{"gitId":"-"},"content":" },"},{"lineNumber":158,"author":{"gitId":"-"},"content":" isLightBg() {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" return this.cardType \u003d\u003d\u003d \u0027bg-light\u0027 || this.cardType \u003d\u003d\u003d \u0027bg-white\u0027 || this.cardType \u003d\u003d\u003d \u0027bg-warning\u0027;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" },"},{"lineNumber":161,"author":{"gitId":"-"},"content":" },"},{"lineNumber":162,"author":{"gitId":"-"},"content":"};"},{"lineNumber":163,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":""},{"lineNumber":165,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":166,"author":{"gitId":"-"},"content":" .card-container {"},{"lineNumber":167,"author":{"gitId":"-"},"content":" scroll-margin-top: var(--sticky-header-height);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }"},{"lineNumber":169,"author":{"gitId":"-"},"content":""},{"lineNumber":170,"author":{"gitId":"-"},"content":" .card-collapse {"},{"lineNumber":171,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" transition: max-height 0.5s ease-in-out;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }"},{"lineNumber":174,"author":{"gitId":"-"},"content":""},{"lineNumber":175,"author":{"gitId":"-"},"content":" .seamless-button {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":177,"author":{"gitId":"-"},"content":" transition: 0.3s opacity;"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" .card-header:hover .seamless-button {"},{"lineNumber":181,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }"},{"lineNumber":183,"author":{"gitId":"-"},"content":""},{"lineNumber":184,"author":{"gitId":"-"},"content":" .card-peek-collapsed {"},{"lineNumber":185,"author":{"gitId":"-"},"content":" position: relative;"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }"},{"lineNumber":187,"author":{"gitId":"-"},"content":""},{"lineNumber":188,"author":{"gitId":"-"},"content":" /*"},{"lineNumber":189,"author":{"gitId":"-"},"content":" * Gives the faded content effect for peek."},{"lineNumber":190,"author":{"gitId":"-"},"content":" * Ensure that height has the same value as collapsedPanelHeight in PanelBase.js."},{"lineNumber":191,"author":{"gitId":"-"},"content":" */"},{"lineNumber":192,"author":{"gitId":"-"},"content":" .card-peek-collapsed::after {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" content: \"\";"},{"lineNumber":194,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":195,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":196,"author":{"gitId":"-"},"content":" bottom: 0;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" height: 125px;"},{"lineNumber":198,"author":{"gitId":"-"},"content":" background-image: linear-gradient(180deg, transparent, white 90%);"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }"},{"lineNumber":200,"author":{"gitId":"-"},"content":""},{"lineNumber":201,"author":{"gitId":"-"},"content":" .peek-read-more {"},{"lineNumber":202,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" opacity: 0.2;"},{"lineNumber":204,"author":{"gitId":"-"},"content":" transition: opacity 0.5s;"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"-"},"content":" /* Targets the before pseudoelement of glyphicon-chevron-down. */"},{"lineNumber":208,"author":{"gitId":"-"},"content":" .peek-read-more::before {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" position: absolute;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" text-align: center;"},{"lineNumber":212,"author":{"gitId":"-"},"content":" bottom: 10px;"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }"},{"lineNumber":214,"author":{"gitId":"-"},"content":""},{"lineNumber":215,"author":{"gitId":"-"},"content":" .peek-read-more:hover {"},{"lineNumber":216,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":217,"author":{"gitId":"-"},"content":" opacity: 0.4;"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }"},{"lineNumber":219,"author":{"gitId":"-"},"content":""},{"lineNumber":220,"author":{"gitId":"-"},"content":" .peek-read-more-fade-enter,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" .peek-read-more-fade-leave-to {"},{"lineNumber":222,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }"},{"lineNumber":224,"author":{"gitId":"-"},"content":""},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/style\u003e"},{"lineNumber":226,"author":{"gitId":"-"},"content":""},{"lineNumber":227,"author":{"gitId":"-"},"content":"\u003cstyle\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":" .card-heading {"},{"lineNumber":229,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":230,"author":{"gitId":"-"},"content":" }"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":" .card-title {"},{"lineNumber":233,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":234,"author":{"gitId":"-"},"content":" font-size: 1em;"},{"lineNumber":235,"author":{"gitId":"-"},"content":" line-height: 1.2em;"},{"lineNumber":236,"author":{"gitId":"-"},"content":" margin: 0;"},{"lineNumber":237,"author":{"gitId":"-"},"content":" white-space: normal;"},{"lineNumber":238,"author":{"gitId":"-"},"content":" text-align: left;"},{"lineNumber":239,"author":{"gitId":"-"},"content":" }"},{"lineNumber":240,"author":{"gitId":"-"},"content":""},{"lineNumber":241,"author":{"gitId":"-"},"content":" .card-title * {"},{"lineNumber":242,"author":{"gitId":"-"},"content":" margin-bottom: 0 !important;"},{"lineNumber":243,"author":{"gitId":"-"},"content":" }"},{"lineNumber":244,"author":{"gitId":"-"},"content":""},{"lineNumber":245,"author":{"gitId":"-"},"content":" .caret-wrapper {"},{"lineNumber":246,"author":{"gitId":"-"},"content":" float: left;"},{"lineNumber":247,"author":{"gitId":"-"},"content":" width: 32px;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" }"},{"lineNumber":249,"author":{"gitId":"-"},"content":""},{"lineNumber":250,"author":{"gitId":"-"},"content":" .minimal-caret-wrapper {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":252,"author":{"gitId":"-"},"content":" font-size: 13px;"},{"lineNumber":253,"author":{"gitId":"-"},"content":" margin-right: 5px;"},{"lineNumber":254,"author":{"gitId":"-"},"content":" }"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":" .header-wrapper {"},{"lineNumber":257,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":258,"author":{"gitId":"-"},"content":" width: calc(100% - 32px - 96px);"},{"lineNumber":259,"author":{"gitId":"-"},"content":" transition: 0.5s opacity;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" .header-transparent {"},{"lineNumber":263,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }"},{"lineNumber":265,"author":{"gitId":"-"},"content":""},{"lineNumber":266,"author":{"gitId":"-"},"content":" .button-wrapper {"},{"lineNumber":267,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":268,"author":{"gitId":"-"},"content":" width: 96px;"},{"lineNumber":269,"author":{"gitId":"-"},"content":" }"},{"lineNumber":270,"author":{"gitId":"-"},"content":""},{"lineNumber":271,"author":{"gitId":"-"},"content":" .header-toggle {"},{"lineNumber":272,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":273,"author":{"gitId":"-"},"content":" }"},{"lineNumber":274,"author":{"gitId":"-"},"content":""},{"lineNumber":275,"author":{"gitId":"-"},"content":" .expandable-card {"},{"lineNumber":276,"author":{"gitId":"-"},"content":" margin-bottom: 0 !important;"},{"lineNumber":277,"author":{"gitId":"-"},"content":" margin-top: 5px;"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }"},{"lineNumber":279,"author":{"gitId":"-"},"content":""},{"lineNumber":280,"author":{"gitId":"-"},"content":" .card-collapse \u003e hr {"},{"lineNumber":281,"author":{"gitId":"-"},"content":" margin-top: 0;"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }"},{"lineNumber":283,"author":{"gitId":"-"},"content":""},{"lineNumber":284,"author":{"gitId":"-"},"content":" .card-group \u003e .card-container \u003e .expandable-card {"},{"lineNumber":285,"author":{"gitId":"-"},"content":" margin-top: 0 !important;"},{"lineNumber":286,"author":{"gitId":"-"},"content":" }"},{"lineNumber":287,"author":{"gitId":"-"},"content":""},{"lineNumber":288,"author":{"gitId":"-"},"content":" .bottom-button-wrapper {"},{"lineNumber":289,"author":{"gitId":"-"},"content":" padding-bottom: 13px;"},{"lineNumber":290,"author":{"gitId":"-"},"content":" margin-bottom: 13px;"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" .bottom-button-wrapper \u003e .collapse-button {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" margin-top: 5px;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" opacity: 0.2;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" }"},{"lineNumber":297,"author":{"gitId":"-"},"content":""},{"lineNumber":298,"author":{"gitId":"-"},"content":" .bottom-button-wrapper \u003e .collapse-button:hover {"},{"lineNumber":299,"author":{"gitId":"-"},"content":" opacity: 1;"},{"lineNumber":300,"author":{"gitId":"-"},"content":" }"},{"lineNumber":301,"author":{"gitId":"-"},"content":""},{"lineNumber":302,"author":{"gitId":"-"},"content":" .close-button {"},{"lineNumber":303,"author":{"gitId":"-"},"content":" font-size: 10px !important;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":305,"author":{"gitId":"-"},"content":" padding: 3px 8px !important;"},{"lineNumber":306,"author":{"gitId":"-"},"content":" margin-left: 3px;"},{"lineNumber":307,"author":{"gitId":"-"},"content":" margin-top: 2px;"},{"lineNumber":308,"author":{"gitId":"-"},"content":" }"},{"lineNumber":309,"author":{"gitId":"-"},"content":""},{"lineNumber":310,"author":{"gitId":"-"},"content":" .popup-button {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" font-size: 10px !important;"},{"lineNumber":312,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":313,"author":{"gitId":"-"},"content":" margin-top: 2px;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" padding: 3px 8px !important;"},{"lineNumber":315,"author":{"gitId":"-"},"content":" }"},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":" .morph {"},{"lineNumber":318,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":319,"author":{"gitId":"-"},"content":" }"},{"lineNumber":320,"author":{"gitId":"-"},"content":""},{"lineNumber":321,"author":{"gitId":"-"},"content":" .morph-display-wrapper {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" margin-top: 5px;"},{"lineNumber":323,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":324,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":325,"author":{"gitId":"-"},"content":" }"},{"lineNumber":326,"author":{"gitId":"-"},"content":""},{"lineNumber":327,"author":{"gitId":"-"},"content":" /* Bootstrap extra small(xs) responsive breakpoint */"},{"lineNumber":328,"author":{"gitId":"LamJiuFong"},"content":" @media (width \u003c\u003d 575.98px) {"},{"lineNumber":329,"author":{"gitId":"-"},"content":" .header-wrapper {"},{"lineNumber":330,"author":{"gitId":"-"},"content":" display: inline-block;"},{"lineNumber":331,"author":{"gitId":"-"},"content":" width: calc(100% - 32px - 32px);"},{"lineNumber":332,"author":{"gitId":"-"},"content":" }"},{"lineNumber":333,"author":{"gitId":"-"},"content":""},{"lineNumber":334,"author":{"gitId":"-"},"content":" .button-wrapper {"},{"lineNumber":335,"author":{"gitId":"-"},"content":" float: right;"},{"lineNumber":336,"author":{"gitId":"-"},"content":" width: 32px;"},{"lineNumber":337,"author":{"gitId":"-"},"content":" }"},{"lineNumber":338,"author":{"gitId":"-"},"content":""},{"lineNumber":339,"author":{"gitId":"-"},"content":" .card-body {"},{"lineNumber":340,"author":{"gitId":"-"},"content":" padding: 0.5rem;"},{"lineNumber":341,"author":{"gitId":"-"},"content":" }"},{"lineNumber":342,"author":{"gitId":"-"},"content":""},{"lineNumber":343,"author":{"gitId":"-"},"content":" .card-collapse \u003e hr {"},{"lineNumber":344,"author":{"gitId":"-"},"content":" margin-top: 0.5rem;"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }"},{"lineNumber":346,"author":{"gitId":"-"},"content":""},{"lineNumber":347,"author":{"gitId":"-"},"content":" .card-header {"},{"lineNumber":348,"author":{"gitId":"-"},"content":" padding: 0.5rem;"},{"lineNumber":349,"author":{"gitId":"-"},"content":" }"},{"lineNumber":350,"author":{"gitId":"-"},"content":" }"},{"lineNumber":351,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":1,"-":350}},{"path":"packages/vue-components/src/questions/QOption.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003c!-- Mcq (radio) option --\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":4,"author":{"gitId":"-"},"content":" v-if\u003d\"qOptionType \u003d\u003d\u003d \u0027mcq\u0027\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027form-control\u0027, hintClass]\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" @click\u003d\"toggleRadioOn\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" @mouseover\u003d\"hover \u003d true\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" @mouseleave\u003d\"hover \u003d false\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027row\u0027, { \u0027disabled\u0027: qState.answered }]\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-auto p-0\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003csvg viewBox\u003d\"0 0 100 100\" class\u003d\"radio-svg\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003ccircle"},{"lineNumber":14,"author":{"gitId":"-"},"content":" cx\u003d\"50\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" cy\u003d\"50\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" r\u003d\"47\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" fill\u003d\"none\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" stroke\u003d\"black\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" stroke-width\u003d\"4\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003ccircle"},{"lineNumber":22,"author":{"gitId":"-"},"content":" v-show\u003d\"selected\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" cx\u003d\"50\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" cy\u003d\"50\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" r\u003d\"25\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" fill\u003d\"dodgerblue\""},{"lineNumber":27,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/svg\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col content\"\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-1\"\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":36,"author":{"gitId":"-"},"content":" v-if\u003d\"correct\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-check text-success\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027align-bottom\u0027: $scopedSlots.reason }\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":41,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":42,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-times text-danger\""},{"lineNumber":43,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027align-bottom\u0027: $scopedSlots.reason }\""},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003e\u003c/i\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":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered \u0026\u0026 $scopedSlots.reason\"\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003chr /\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"reason\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"reason\"\u003e\u003c/slot\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c!-- Checkbox option --\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":59,"author":{"gitId":"-"},"content":" v-else-if\u003d\"qOptionType \u003d\u003d\u003d \u0027checkbox\u0027\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027form-control\u0027, hintClass]\""},{"lineNumber":61,"author":{"gitId":"-"},"content":" @click\u003d\"toggleCheckbox\""},{"lineNumber":62,"author":{"gitId":"-"},"content":" @mouseover\u003d\"hover \u003d true\""},{"lineNumber":63,"author":{"gitId":"-"},"content":" @mouseleave\u003d\"hover \u003d false\""},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003clabel :class\u003d\"[\u0027row\u0027, \u0027checkbox-label\u0027, \u0027m-0\u0027, { \u0027disabled\u0027: qState.answered }]\" @click.stop\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cinput"},{"lineNumber":67,"author":{"gitId":"-"},"content":" v-model\u003d\"selected\""},{"lineNumber":68,"author":{"gitId":"-"},"content":" class\u003d\"checkbox\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" :disabled\u003d\"qState.answered\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" type\u003d\"checkbox\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" onclick\u003d\"event.stopPropagation()\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col content\"\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-auto\"\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered\"\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":79,"author":{"gitId":"-"},"content":" v-if\u003d\"correct\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-check text-success\""},{"lineNumber":81,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027align-bottom\u0027: $scopedSlots.reason }\""},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":84,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":85,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-times text-danger\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" :class\u003d\"{ \u0027align-bottom\u0027: $scopedSlots.reason }\""},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered \u0026\u0026 $scopedSlots.reason\"\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003chr /\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"reason\"\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"reason\"\u003e\u003c/slot\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":""},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003c!-- blanks option --\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":102,"author":{"gitId":"-"},"content":" v-else-if\u003d\"qOptionType \u003d\u003d\u003d \u0027blanks\u0027\""},{"lineNumber":103,"author":{"gitId":"-"},"content":" :class\u003d\"[\u0027form-control\u0027, \u0027blanks-form-control\u0027, hintClass]\""},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003clabel :class\u003d\"[\u0027row\u0027, \u0027m-0\u0027, { \u0027disabled\u0027: qState.answered }]\" @click.stop\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003cinput"},{"lineNumber":107,"author":{"gitId":"-"},"content":" v-model\u003d\"inputText\""},{"lineNumber":108,"author":{"gitId":"-"},"content":" class\u003d\"form-control\""},{"lineNumber":109,"author":{"gitId":"-"},"content":" :disabled\u003d\"qState.answered\""},{"lineNumber":110,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-auto\"\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u003c!-- for when question is answered --\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered\"\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":115,"author":{"gitId":"-"},"content":" v-if\u003d\"ansIsCorrect\""},{"lineNumber":116,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-check text-success\""},{"lineNumber":117,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":118,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":119,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":120,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-times text-danger blanks-cross\""},{"lineNumber":121,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":""},{"lineNumber":124,"author":{"gitId":"-"},"content":" \u003c!-- for when question is not answered and intermediate result is enabled --\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"isIntermediateResult()\"\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":127,"author":{"gitId":"-"},"content":" v-if\u003d\"ansIsCorrect\""},{"lineNumber":128,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-check text-success\""},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \u003ci"},{"lineNumber":131,"author":{"gitId":"-"},"content":" v-else"},{"lineNumber":132,"author":{"gitId":"-"},"content":" class\u003d\"fa fa-times text-danger blanks-cross\""},{"lineNumber":133,"author":{"gitId":"-"},"content":" \u003e\u003c/i\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered\" class\u003d\"col-auto blanks-keywords\"\u003e"},{"lineNumber":137,"author":{"gitId":"-"},"content":" \u003cstrong v-if\u003d\"keywordsSplitTrimmed().length\"\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":" Keywords:\u0026nbsp;"},{"lineNumber":139,"author":{"gitId":"-"},"content":" \u003cspan"},{"lineNumber":140,"author":{"gitId":"-"},"content":" v-for\u003d\"keyword in keywordsSplitTrimmed()\""},{"lineNumber":141,"author":{"gitId":"-"},"content":" :key\u003d\"keyword\""},{"lineNumber":142,"author":{"gitId":"-"},"content":" class\u003d\"badge rounded-pill bg-light text-dark fw-normal\""},{"lineNumber":143,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":144,"author":{"gitId":"-"},"content":" {{ keyword }}"},{"lineNumber":145,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":" \u003c/strong\u003e"},{"lineNumber":147,"author":{"gitId":"-"},"content":" \u003cstrong v-else\u003eNo answer checking keywords provided\u003c/strong\u003e"},{"lineNumber":148,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":149,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":150,"author":{"gitId":"-"},"content":""},{"lineNumber":151,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"qState.answered \u0026\u0026 $scopedSlots.reason\"\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"reason blanks-reason\"\u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"reason\"\u003e\u003c/slot\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":""},{"lineNumber":159,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":160,"author":{"gitId":"-"},"content":"import { STATE_WRONG } from \u0027./QuestionConstants\u0027;"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" name: \u0027McqOption\u0027,"},{"lineNumber":164,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" correct: {"},{"lineNumber":166,"author":{"gitId":"-"},"content":" type: Boolean,"},{"lineNumber":167,"author":{"gitId":"-"},"content":" default: false,"},{"lineNumber":168,"author":{"gitId":"-"},"content":" },"},{"lineNumber":169,"author":{"gitId":"-"},"content":" keywords: {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":171,"author":{"gitId":"-"},"content":" default: \u0027\u0027,"},{"lineNumber":172,"author":{"gitId":"-"},"content":" },"},{"lineNumber":173,"author":{"gitId":"-"},"content":" },"},{"lineNumber":174,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":176,"author":{"gitId":"-"},"content":" selected: false,"},{"lineNumber":177,"author":{"gitId":"-"},"content":" hover: false,"},{"lineNumber":178,"author":{"gitId":"-"},"content":" inputText: \u0027\u0027,"},{"lineNumber":179,"author":{"gitId":"-"},"content":" ansIsCorrect: false,"},{"lineNumber":180,"author":{"gitId":"-"},"content":" };"},{"lineNumber":181,"author":{"gitId":"-"},"content":" },"},{"lineNumber":182,"author":{"gitId":"-"},"content":" inject: {"},{"lineNumber":183,"author":{"gitId":"-"},"content":" answers: {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":185,"author":{"gitId":"-"},"content":" },"},{"lineNumber":186,"author":{"gitId":"-"},"content":" qOptionType: {"},{"lineNumber":187,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":188,"author":{"gitId":"-"},"content":" },"},{"lineNumber":189,"author":{"gitId":"-"},"content":" qState: {"},{"lineNumber":190,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":191,"author":{"gitId":"-"},"content":" },"},{"lineNumber":192,"author":{"gitId":"-"},"content":" noIntermediateResult: {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" default: undefined,"},{"lineNumber":194,"author":{"gitId":"-"},"content":" },"},{"lineNumber":195,"author":{"gitId":"-"},"content":" },"},{"lineNumber":196,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":197,"author":{"gitId":"-"},"content":" hintClass() {"},{"lineNumber":198,"author":{"gitId":"-"},"content":" if (this.qState.answered) {"},{"lineNumber":199,"author":{"gitId":"-"},"content":" return this.correct ? \u0027success\u0027 : \u0027danger\u0027;"},{"lineNumber":200,"author":{"gitId":"-"},"content":" }"},{"lineNumber":201,"author":{"gitId":"-"},"content":""},{"lineNumber":202,"author":{"gitId":"-"},"content":" return (this.selected || this.hover) ? \u0027alert-light text-dark border border-secondary\u0027 : \u0027\u0027;"},{"lineNumber":203,"author":{"gitId":"-"},"content":" },"},{"lineNumber":204,"author":{"gitId":"-"},"content":" answeredCorrectly() {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" return (this.correct \u0026\u0026 this.selected) || (!this.correct \u0026\u0026 !this.selected);"},{"lineNumber":206,"author":{"gitId":"-"},"content":" },"},{"lineNumber":207,"author":{"gitId":"-"},"content":" },"},{"lineNumber":208,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":209,"author":{"gitId":"-"},"content":" checkAnswer() {"},{"lineNumber":210,"author":{"gitId":"-"},"content":" let ansIsCorrect \u003d false;"},{"lineNumber":211,"author":{"gitId":"-"},"content":" const lowerCasedText \u003d this.inputText.toLowerCase().trim();"},{"lineNumber":212,"author":{"gitId":"-"},"content":" const keywords \u003d this.keywords.toLowerCase().split(\u0027,\u0027).filter(keyword \u003d\u003e keyword.trim() !\u003d\u003d \u0027\u0027);"},{"lineNumber":213,"author":{"gitId":"-"},"content":" if (!this.keywords.length) {"},{"lineNumber":214,"author":{"gitId":"-"},"content":" ansIsCorrect \u003d true;"},{"lineNumber":215,"author":{"gitId":"-"},"content":" }"},{"lineNumber":216,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c keywords.length; i +\u003d 1) {"},{"lineNumber":217,"author":{"gitId":"-"},"content":" if (lowerCasedText \u003d\u003d\u003d keywords[i].trim()) {"},{"lineNumber":218,"author":{"gitId":"-"},"content":" ansIsCorrect \u003d true;"},{"lineNumber":219,"author":{"gitId":"-"},"content":" break;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }"},{"lineNumber":222,"author":{"gitId":"-"},"content":" this.ansIsCorrect \u003d ansIsCorrect;"},{"lineNumber":223,"author":{"gitId":"-"},"content":" },"},{"lineNumber":224,"author":{"gitId":"-"},"content":" isIntermediateResult() {"},{"lineNumber":225,"author":{"gitId":"-"},"content":" return !this.noIntermediateResult \u0026\u0026 this.qState.state \u003d\u003d\u003d STATE_WRONG \u0026\u0026 !this.qState.answered;"},{"lineNumber":226,"author":{"gitId":"-"},"content":" },"},{"lineNumber":227,"author":{"gitId":"-"},"content":" isBlanksQuestion() {"},{"lineNumber":228,"author":{"gitId":"-"},"content":" return this.type \u003d\u003d\u003d \u0027blanks\u0027;"},{"lineNumber":229,"author":{"gitId":"-"},"content":" },"},{"lineNumber":230,"author":{"gitId":"-"},"content":" keywordsSplitTrimmed() {"},{"lineNumber":231,"author":{"gitId":"-"},"content":" return this.keywords.split(\u0027,\u0027).filter(keyword \u003d\u003e keyword.trim() !\u003d\u003d \u0027\u0027);"},{"lineNumber":232,"author":{"gitId":"-"},"content":" },"},{"lineNumber":233,"author":{"gitId":"-"},"content":" toggleRadioOn() {"},{"lineNumber":234,"author":{"gitId":"-"},"content":" if (this.qState.answered || this.selected) {"},{"lineNumber":235,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":236,"author":{"gitId":"-"},"content":" }"},{"lineNumber":237,"author":{"gitId":"-"},"content":""},{"lineNumber":238,"author":{"gitId":"-"},"content":" this.answers.forEach((answer) \u003d\u003e {"},{"lineNumber":239,"author":{"gitId":"-"},"content":" answer.selected \u003d false;"},{"lineNumber":240,"author":{"gitId":"-"},"content":" });"},{"lineNumber":241,"author":{"gitId":"-"},"content":" this.selected \u003d true;"},{"lineNumber":242,"author":{"gitId":"-"},"content":" },"},{"lineNumber":243,"author":{"gitId":"-"},"content":" toggleCheckbox() {"},{"lineNumber":244,"author":{"gitId":"-"},"content":" if (this.qState.answered) {"},{"lineNumber":245,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":246,"author":{"gitId":"-"},"content":" }"},{"lineNumber":247,"author":{"gitId":"-"},"content":" this.selected \u003d !this.selected;"},{"lineNumber":248,"author":{"gitId":"-"},"content":" },"},{"lineNumber":249,"author":{"gitId":"-"},"content":" },"},{"lineNumber":250,"author":{"gitId":"-"},"content":" created() {"},{"lineNumber":251,"author":{"gitId":"-"},"content":" this.answers.push(this);"},{"lineNumber":252,"author":{"gitId":"-"},"content":" },"},{"lineNumber":253,"author":{"gitId":"-"},"content":"};"},{"lineNumber":254,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":""},{"lineNumber":256,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":" .fa-check,"},{"lineNumber":258,"author":{"gitId":"-"},"content":" .fa-times {"},{"lineNumber":259,"author":{"gitId":"-"},"content":" font-size: 1.2em;"},{"lineNumber":260,"author":{"gitId":"-"},"content":" }"},{"lineNumber":261,"author":{"gitId":"-"},"content":""},{"lineNumber":262,"author":{"gitId":"-"},"content":" /* For accomodating block markdown nicely */"},{"lineNumber":263,"author":{"gitId":"-"},"content":" .reason :last-child,"},{"lineNumber":264,"author":{"gitId":"-"},"content":" .content :last-child {"},{"lineNumber":265,"author":{"gitId":"-"},"content":" margin-bottom: 0;"},{"lineNumber":266,"author":{"gitId":"-"},"content":" }"},{"lineNumber":267,"author":{"gitId":"-"},"content":""},{"lineNumber":268,"author":{"gitId":"-"},"content":" .reason {"},{"lineNumber":269,"author":{"gitId":"-"},"content":" padding: 0 0.5rem;"},{"lineNumber":270,"author":{"gitId":"-"},"content":" }"},{"lineNumber":271,"author":{"gitId":"-"},"content":""},{"lineNumber":272,"author":{"gitId":"-"},"content":" .checkbox-label {"},{"lineNumber":273,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":274,"author":{"gitId":"-"},"content":" }"},{"lineNumber":275,"author":{"gitId":"-"},"content":""},{"lineNumber":276,"author":{"gitId":"-"},"content":" .form-control {"},{"lineNumber":277,"author":{"gitId":"-"},"content":" height: auto;"},{"lineNumber":278,"author":{"gitId":"-"},"content":" margin-bottom: 10px;"},{"lineNumber":279,"author":{"gitId":"-"},"content":" cursor: pointer;"},{"lineNumber":280,"author":{"gitId":"-"},"content":" }"},{"lineNumber":281,"author":{"gitId":"-"},"content":""},{"lineNumber":282,"author":{"gitId":"-"},"content":" .form-control.success,"},{"lineNumber":283,"author":{"gitId":"-"},"content":" .form-control.success \u003e .checkbox-label,"},{"lineNumber":284,"author":{"gitId":"-"},"content":" .form-control.danger,"},{"lineNumber":285,"author":{"gitId":"-"},"content":" .form-control.danger \u003e .checkbox-label {"},{"lineNumber":286,"author":{"gitId":"-"},"content":" cursor: default;"},{"lineNumber":287,"author":{"gitId":"-"},"content":" }"},{"lineNumber":288,"author":{"gitId":"-"},"content":""},{"lineNumber":289,"author":{"gitId":"-"},"content":" .disabled {"},{"lineNumber":290,"author":{"gitId":"-"},"content":" opacity: 0.9;"},{"lineNumber":291,"author":{"gitId":"-"},"content":" }"},{"lineNumber":292,"author":{"gitId":"-"},"content":""},{"lineNumber":293,"author":{"gitId":"-"},"content":" .radio-svg {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" width: 1em;"},{"lineNumber":295,"author":{"gitId":"-"},"content":" height: 1em;"},{"lineNumber":296,"author":{"gitId":"-"},"content":" vertical-align: text-top;"},{"lineNumber":297,"author":{"gitId":"-"},"content":" }"},{"lineNumber":298,"author":{"gitId":"-"},"content":""},{"lineNumber":299,"author":{"gitId":"-"},"content":" .checkbox {"},{"lineNumber":300,"author":{"gitId":"-"},"content":" width: 1em;"},{"lineNumber":301,"author":{"gitId":"-"},"content":" height: 1em;"},{"lineNumber":302,"author":{"gitId":"-"},"content":" margin-right: 5px;"},{"lineNumber":303,"author":{"gitId":"-"},"content":" vertical-align: middle;"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" .row {"},{"lineNumber":307,"author":{"gitId":"LamJiuFong"},"content":" margin: 0.2rem 0 0;"},{"lineNumber":308,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":309,"author":{"gitId":"-"},"content":" }"},{"lineNumber":310,"author":{"gitId":"-"},"content":""},{"lineNumber":311,"author":{"gitId":"-"},"content":" /* for blanks question type */"},{"lineNumber":312,"author":{"gitId":"-"},"content":" input.form-control {"},{"lineNumber":313,"author":{"gitId":"-"},"content":" height: auto;"},{"lineNumber":314,"author":{"gitId":"-"},"content":" min-height: 20px;"},{"lineNumber":315,"author":{"gitId":"-"},"content":" margin-bottom: 0;"},{"lineNumber":316,"author":{"gitId":"-"},"content":" width: 50%;"},{"lineNumber":317,"author":{"gitId":"-"},"content":" cursor: text;"},{"lineNumber":318,"author":{"gitId":"-"},"content":" }"},{"lineNumber":319,"author":{"gitId":"-"},"content":""},{"lineNumber":320,"author":{"gitId":"-"},"content":" input.form-control:disabled,"},{"lineNumber":321,"author":{"gitId":"-"},"content":" .blanks-keywords {"},{"lineNumber":322,"author":{"gitId":"-"},"content":" margin-bottom: 0.5rem;"},{"lineNumber":323,"author":{"gitId":"-"},"content":" }"},{"lineNumber":324,"author":{"gitId":"-"},"content":""},{"lineNumber":325,"author":{"gitId":"-"},"content":" .blanks-form-control {"},{"lineNumber":326,"author":{"gitId":"-"},"content":" border: none;"},{"lineNumber":327,"author":{"gitId":"-"},"content":" cursor: default;"},{"lineNumber":328,"author":{"gitId":"-"},"content":" }"},{"lineNumber":329,"author":{"gitId":"-"},"content":""},{"lineNumber":330,"author":{"gitId":"-"},"content":" .blanks-cross {"},{"lineNumber":331,"author":{"gitId":"-"},"content":" margin-right: 3px;"},{"lineNumber":332,"author":{"gitId":"-"},"content":" margin-left: 3px;"},{"lineNumber":333,"author":{"gitId":"-"},"content":" }"},{"lineNumber":334,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":1,"-":333}},{"path":"packages/vue-components/src/questions/Quiz.vue","fileType":"vue","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctemplate\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv :class\u003d\"[\u0027quiz-container\u0027, addClass]\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003ctransition name\u003d\"intro-outro-card\" @after-leave\u003d\"showFirstQuestion\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"state \u003d\u003d\u003d 3\" class\u003d\"card intro-outro-card\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cslot name\u003d\"intro\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003ch4\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" Click start to begin"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003c/h4\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/slot\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003ch5\u003e{{ questions.length }} questions\u003c/h5\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003chr /\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":17,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" class\u003d\"btn btn-primary d-inline-block\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" @click\u003d\"begin\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" Start"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003ctransition name\u003d\"intro-outro-card\"\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":29,"author":{"gitId":"-"},"content":" v-show\u003d\"state \u003d\u003d\u003d 4\""},{"lineNumber":30,"author":{"gitId":"-"},"content":" class\u003d\"progress intro-outro-card\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" style\u003d\"height: 1px;\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":34,"author":{"gitId":"-"},"content":" class\u003d\"progress-bar progress-bar-z\""},{"lineNumber":35,"author":{"gitId":"-"},"content":" role\u003d\"progressbar\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" :style\u003d\"{ width: `${currentQuestion / questions.length * 100}%` }\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" aria-valuemin\u003d\"0\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" :aria-valuemax\u003d\"questions.length\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" :aria-valuenow\u003d\"currentQuestion\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003cslot\u003e\u003c/slot\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003ctransition"},{"lineNumber":47,"author":{"gitId":"-"},"content":" name\u003d\"intro-outro-card\""},{"lineNumber":48,"author":{"gitId":"-"},"content":" @after-enter\u003d\"setScoreCircleStyles\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" @after-leave\u003d\"showFirstQuestion\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv v-if\u003d\"state \u003d\u003d\u003d 5\" class\u003d\"card intro-outro-card\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003ch4 class\u003d\"mb-3\"\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" {{ scoreText }}"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/h4\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003csvg"},{"lineNumber":57,"author":{"gitId":"-"},"content":" viewBox\u003d\"0 0 100 100\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" width\u003d\"120px\""},{"lineNumber":59,"author":{"gitId":"-"},"content":" height\u003d\"120px\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003ccircle"},{"lineNumber":62,"author":{"gitId":"-"},"content":" cx\u003d\"50\""},{"lineNumber":63,"author":{"gitId":"-"},"content":" cy\u003d\"50\""},{"lineNumber":64,"author":{"gitId":"-"},"content":" r\u003d\"42\""},{"lineNumber":65,"author":{"gitId":"-"},"content":" class\u003d\"score-background-circle\""},{"lineNumber":66,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003ccircle"},{"lineNumber":68,"author":{"gitId":"-"},"content":" ref\u003d\"score\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" cx\u003d\"50\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" cy\u003d\"50\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" r\u003d\"42\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" transform\u003d\"rotate(-90, 50, 50)\""},{"lineNumber":73,"author":{"gitId":"-"},"content":" class\u003d\"score-circle\""},{"lineNumber":74,"author":{"gitId":"-"},"content":" stroke-dashoffset\u003d\"264\""},{"lineNumber":75,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003ctext"},{"lineNumber":77,"author":{"gitId":"-"},"content":" class\u003d\"score\""},{"lineNumber":78,"author":{"gitId":"-"},"content":" x\u003d\"22\""},{"lineNumber":79,"author":{"gitId":"-"},"content":" y\u003d\"57\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" textLength\u003d\"56\""},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003e{{ score }} / {{ questions.length }}\u003c/text\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003c/svg\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":""},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003chr /\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":87,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":88,"author":{"gitId":"-"},"content":" class\u003d\"btn btn-outline-primary\""},{"lineNumber":89,"author":{"gitId":"-"},"content":" @click\u003d\"begin\""},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":" Retry"},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":" \u003c/transition\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003c/template\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":""},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003cscript\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":"import {"},{"lineNumber":101,"author":{"gitId":"-"},"content":" STATE_CORRECT,"},{"lineNumber":102,"author":{"gitId":"-"},"content":"} from \u0027./QuestionConstants\u0027;"},{"lineNumber":103,"author":{"gitId":"-"},"content":""},{"lineNumber":104,"author":{"gitId":"-"},"content":"const STATE_QUIZ_FRESH \u003d 3;"},{"lineNumber":105,"author":{"gitId":"-"},"content":"const STATE_QUIZ_IN_PROGRESS \u003d 4;"},{"lineNumber":106,"author":{"gitId":"-"},"content":"const STATE_QUIZ_DONE \u003d 5;"},{"lineNumber":107,"author":{"gitId":"-"},"content":""},{"lineNumber":108,"author":{"gitId":"-"},"content":"export default {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" name: \u0027Quiz\u0027,"},{"lineNumber":110,"author":{"gitId":"-"},"content":" props: {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" addClass: {"},{"lineNumber":112,"author":{"gitId":"-"},"content":" type: String,"},{"lineNumber":113,"author":{"gitId":"-"},"content":" default: null,"},{"lineNumber":114,"author":{"gitId":"-"},"content":" },"},{"lineNumber":115,"author":{"gitId":"-"},"content":" },"},{"lineNumber":116,"author":{"gitId":"-"},"content":" data() {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":118,"author":{"gitId":"-"},"content":" currentQuestion: 0,"},{"lineNumber":119,"author":{"gitId":"-"},"content":" questions: [],"},{"lineNumber":120,"author":{"gitId":"-"},"content":" score: 0,"},{"lineNumber":121,"author":{"gitId":"-"},"content":" state: STATE_QUIZ_FRESH,"},{"lineNumber":122,"author":{"gitId":"-"},"content":" };"},{"lineNumber":123,"author":{"gitId":"-"},"content":" },"},{"lineNumber":124,"author":{"gitId":"-"},"content":" provide() {"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":126,"author":{"gitId":"-"},"content":" questions: this.questions,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" gotoNextQuestion: this.gotoNextQuestion,"},{"lineNumber":128,"author":{"gitId":"-"},"content":" showNextQuestion: this.showNextQuestion,"},{"lineNumber":129,"author":{"gitId":"-"},"content":" };"},{"lineNumber":130,"author":{"gitId":"-"},"content":" },"},{"lineNumber":131,"author":{"gitId":"-"},"content":" computed: {"},{"lineNumber":132,"author":{"gitId":"-"},"content":" scoreText() {"},{"lineNumber":133,"author":{"gitId":"-"},"content":" return (this.score / this.questions.length) \u003e 0.5"},{"lineNumber":134,"author":{"gitId":"-"},"content":" ? \u0027Well done!\u0027"},{"lineNumber":135,"author":{"gitId":"-"},"content":" : \u0027Try again?\u0027;"},{"lineNumber":136,"author":{"gitId":"-"},"content":" },"},{"lineNumber":137,"author":{"gitId":"-"},"content":" },"},{"lineNumber":138,"author":{"gitId":"-"},"content":" methods: {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" gotoNextQuestion() {"},{"lineNumber":140,"author":{"gitId":"-"},"content":" this.questions[this.currentQuestion - 1].hide();"},{"lineNumber":141,"author":{"gitId":"-"},"content":" this.currentQuestion +\u003d 1;"},{"lineNumber":142,"author":{"gitId":"-"},"content":" },"},{"lineNumber":143,"author":{"gitId":"-"},"content":" showNextQuestion() {"},{"lineNumber":144,"author":{"gitId":"-"},"content":" if (this.currentQuestion \u003c\u003d this.questions.length) {"},{"lineNumber":145,"author":{"gitId":"-"},"content":" this.questions[this.currentQuestion - 1].show();"},{"lineNumber":146,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":147,"author":{"gitId":"-"},"content":" this.complete();"},{"lineNumber":148,"author":{"gitId":"-"},"content":" }"},{"lineNumber":149,"author":{"gitId":"-"},"content":" },"},{"lineNumber":150,"author":{"gitId":"-"},"content":" begin() {"},{"lineNumber":151,"author":{"gitId":"-"},"content":" this.currentQuestion \u003d 1;"},{"lineNumber":152,"author":{"gitId":"-"},"content":" this.score \u003d 0;"},{"lineNumber":153,"author":{"gitId":"-"},"content":" this.state \u003d STATE_QUIZ_IN_PROGRESS;"},{"lineNumber":154,"author":{"gitId":"-"},"content":" },"},{"lineNumber":155,"author":{"gitId":"-"},"content":" showFirstQuestion() {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" if (this.questions.length) {"},{"lineNumber":157,"author":{"gitId":"-"},"content":" this.questions[0].show();"},{"lineNumber":158,"author":{"gitId":"-"},"content":" }"},{"lineNumber":159,"author":{"gitId":"-"},"content":" },"},{"lineNumber":160,"author":{"gitId":"-"},"content":" reset() {"},{"lineNumber":161,"author":{"gitId":"-"},"content":" this.questions.forEach(question \u003d\u003e question.reset());"},{"lineNumber":162,"author":{"gitId":"-"},"content":" },"},{"lineNumber":163,"author":{"gitId":"-"},"content":" complete() {"},{"lineNumber":164,"author":{"gitId":"-"},"content":" this.score \u003d this.questions.filter(q \u003d\u003e q.qState.state \u003d\u003d\u003d STATE_CORRECT).length;"},{"lineNumber":165,"author":{"gitId":"-"},"content":" this.state \u003d STATE_QUIZ_DONE;"},{"lineNumber":166,"author":{"gitId":"-"},"content":" this.reset();"},{"lineNumber":167,"author":{"gitId":"-"},"content":" },"},{"lineNumber":168,"author":{"gitId":"-"},"content":" setScoreCircleStyles() {"},{"lineNumber":169,"author":{"gitId":"-"},"content":" const scoreFactor \u003d this.score / this.questions.length;"},{"lineNumber":170,"author":{"gitId":"-"},"content":" this.$refs.score.style.strokeDashoffset \u003d (1 - scoreFactor) * 264;"},{"lineNumber":171,"author":{"gitId":"-"},"content":" this.$refs.score.style.stroke \u003d \u0027#51c2f8\u0027;"},{"lineNumber":172,"author":{"gitId":"-"},"content":" },"},{"lineNumber":173,"author":{"gitId":"-"},"content":" },"},{"lineNumber":174,"author":{"gitId":"-"},"content":"};"},{"lineNumber":175,"author":{"gitId":"-"},"content":"\u003c/script\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":""},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cstyle scoped\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":" .quiz-container {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":180,"author":{"gitId":"-"},"content":" isolation: isolate;"},{"lineNumber":181,"author":{"gitId":"-"},"content":" }"},{"lineNumber":182,"author":{"gitId":"-"},"content":""},{"lineNumber":183,"author":{"gitId":"-"},"content":" .intro-outro-card {"},{"lineNumber":184,"author":{"gitId":"-"},"content":" transition: transform 0.35s ease-out, opacity 0.35s linear;"},{"lineNumber":185,"author":{"gitId":"-"},"content":" }"},{"lineNumber":186,"author":{"gitId":"-"},"content":""},{"lineNumber":187,"author":{"gitId":"-"},"content":" .intro-outro-card-enter-active,"},{"lineNumber":188,"author":{"gitId":"-"},"content":" .intro-outro-card-leave-to {"},{"lineNumber":189,"author":{"gitId":"-"},"content":" opacity: 0;"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }"},{"lineNumber":191,"author":{"gitId":"-"},"content":""},{"lineNumber":192,"author":{"gitId":"-"},"content":" .intro-outro-card \u003e .card-body {"},{"lineNumber":193,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":194,"author":{"gitId":"-"},"content":" flex-direction: column;"},{"lineNumber":195,"author":{"gitId":"-"},"content":" align-items: center;"},{"lineNumber":196,"author":{"gitId":"-"},"content":" justify-content: center;"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }"},{"lineNumber":198,"author":{"gitId":"-"},"content":""},{"lineNumber":199,"author":{"gitId":"-"},"content":" .score {"},{"lineNumber":200,"author":{"gitId":"-"},"content":" font-size: 1.4rem;"},{"lineNumber":201,"author":{"gitId":"-"},"content":" font-weight: bold;"},{"lineNumber":202,"author":{"gitId":"-"},"content":" }"},{"lineNumber":203,"author":{"gitId":"-"},"content":""},{"lineNumber":204,"author":{"gitId":"-"},"content":" .score-circle {"},{"lineNumber":205,"author":{"gitId":"-"},"content":" stroke-dasharray: 264;"},{"lineNumber":206,"author":{"gitId":"-"},"content":" fill: none;"},{"lineNumber":207,"author":{"gitId":"LamJiuFong"},"content":" stroke: rgb(132 215 255 / 80%);"},{"lineNumber":208,"author":{"gitId":"-"},"content":" stroke-width: 8;"},{"lineNumber":209,"author":{"gitId":"-"},"content":" transition: stroke-dashoffset 1.5s ease-out, stroke 1.5s linear;"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }"},{"lineNumber":211,"author":{"gitId":"-"},"content":""},{"lineNumber":212,"author":{"gitId":"-"},"content":" .score-background-circle {"},{"lineNumber":213,"author":{"gitId":"-"},"content":" fill: none;"},{"lineNumber":214,"author":{"gitId":"LamJiuFong"},"content":" stroke: rgb(227 226 226 / 50%);"},{"lineNumber":215,"author":{"gitId":"-"},"content":" stroke-width: 8;"},{"lineNumber":216,"author":{"gitId":"-"},"content":" }"},{"lineNumber":217,"author":{"gitId":"-"},"content":""},{"lineNumber":218,"author":{"gitId":"-"},"content":" .btn {"},{"lineNumber":219,"author":{"gitId":"-"},"content":" border-radius: 2em;"},{"lineNumber":220,"author":{"gitId":"-"},"content":" }"},{"lineNumber":221,"author":{"gitId":"-"},"content":""},{"lineNumber":222,"author":{"gitId":"-"},"content":" .progress-bar-z {"},{"lineNumber":223,"author":{"gitId":"-"},"content":" z-index: 1;"},{"lineNumber":224,"author":{"gitId":"-"},"content":" }"},{"lineNumber":225,"author":{"gitId":"-"},"content":""},{"lineNumber":226,"author":{"gitId":"-"},"content":"\u003c/style\u003e"}],"authorContributionMap":{"LamJiuFong":2,"-":224}},{"path":"scripts/process_message.py","fileType":"py","lines":[{"lineNumber":1,"author":{"gitId":"KevinEyo1"},"content":"import json"},{"lineNumber":2,"author":{"gitId":"KevinEyo1"},"content":"import re"},{"lineNumber":3,"author":{"gitId":"KevinEyo1"},"content":"import sys"},{"lineNumber":4,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":5,"author":{"gitId":"KevinEyo1"},"content":"markdown_content \u003d sys.argv[1]"},{"lineNumber":6,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":7,"author":{"gitId":"KevinEyo1"},"content":"# Preprocessing the markdown content"},{"lineNumber":8,"author":{"gitId":"KevinEyo1"},"content":"markdown_content \u003d markdown_content.replace(\u0027`\u0027, \u0027\\\\`\u0027)"},{"lineNumber":9,"author":{"gitId":"KevinEyo1"},"content":"markdown_content \u003d markdown_content.replace(\u0027(\u0027, \u0027\\\\(\u0027).replace(\u0027)\u0027, \u0027\\\\)\u0027)"},{"lineNumber":10,"author":{"gitId":"KevinEyo1"},"content":"markdown_content \u003d re.sub(r\u0027\u003c!--.*?--\u003e\u0027, \u0027\u0027, markdown_content, flags\u003dre.DOTALL) # Remove HTML comments"},{"lineNumber":11,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":12,"author":{"gitId":"KevinEyo1"},"content":"print(markdown_content)"},{"lineNumber":13,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":14,"author":{"gitId":"KevinEyo1"},"content":""},{"lineNumber":15,"author":{"gitId":"KevinEyo1"},"content":""}],"authorContributionMap":{"KevinEyo1":15}}] diff --git a/markbind_markbind_master/commits.json b/markbind_markbind_master/commits.json index e89fa47..7f60d49 100644 --- a/markbind_markbind_master/commits.json +++ b/markbind_markbind_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"xenosf":[],"sopa301":[],"mingyuanc":[],"jingting1412":[{"date":"2024-01-25","commitResults":[{"hash":"613461c0ed23970046e1b17a2099ac5b2df71200","isMergeCommit":false,"messageTitle":"Replacing default icon for conversion (#2389)","messageBody":"Change default favicon for conversions","fileTypesAndContributionMap":{"js":{"insertions":24,"deletions":24},"njk":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-04","commitResults":[{"hash":"a44bdaa163ab457753e8e737711b2843dbcc9512","isMergeCommit":false,"messageTitle":"Combining syntax cheat sheet and full syntax reference pages (#2426)","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":91,"deletions":142},"json":{"insertions":2,"deletions":4},"njk":{"insertions":71,"deletions":0}}}]},{"date":"2024-03-08","commitResults":[{"hash":"7d10b69845d4c3bdcaa862fd4bb1d053128d0c21","isMergeCommit":false,"messageTitle":"Add pageNav and info box to readerFacingFeatures page","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":7,"deletions":3}}}]}],"KevinEyo1":[{"date":"2024-02-24","commitResults":[{"hash":"8bac97a3f0143e39c601e34a4761a4a0669eba97","isMergeCommit":false,"messageTitle":"GitHub Actions: add check for empty commit message","messageBody":"There is no checking of proposed commit message presence.\r\n\r\nPR authors may forget to include proposed commit message.\r\n\r\nAdding a check using GitHub Actions will help remind and ensure\r\nthat authors don\u0027t miss out on filling in the commit message.\r\n\r\nLet\u0027s add a job to the a new workflow, pr-message-reminder.yml\r\nfile to help automate checking and reminding of filling in the\r\nproposed commit message for each PR.\r\n\r\nThis approach automates the process, without having to have\r\nother users check and remind PR authors themselves. Adding the\r\nnew job to a new workflow will allow greater control of job triggers\r\nwhile maintaining clean code.","fileTypesAndContributionMap":{"yml":{"insertions":39,"deletions":0},"py":{"insertions":15,"deletions":0}}}]},{"date":"2024-03-04","commitResults":[{"hash":"e6e639d23136709d0b1784d22fdc4148485252ec","isMergeCommit":false,"messageTitle":"Upgrade simple-git version (#2439)","messageBody":"simple-git version: update to latest version\r\n\r\nsimple-git was not updated. Currently used version should no\r\nlonger be used due to security advisory.\r\n\r\nUpdating it avoids newly found vulnerabilities.\r\n\r\nLet\u0027s update it to the current latest version.","fileTypesAndContributionMap":{"json":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-10","commitResults":[{"hash":"1c01cfb9351a6696b2dafafab545a868a897211e","isMergeCommit":false,"messageTitle":"UG: update wording of UG (#2440)","messageBody":"Wording might mislead readers into thinking that PageNavs\r\ncannot be used in normal pages.\r\n\r\nUpdating the wording will allow readers to know that\r\nindividual pages can also use PageNavs.\r\n\r\nLet\u0027s update the wording to be clearer and more explicit.\r\n\r\nCo-authored-by: david \u003c71922282+itsyme@users.noreply.github.com\u003e\r\n\r\n---------\r\n\r\nCo-authored-by: david \u003c71922282+itsyme@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-30","commitResults":[{"hash":"e95e5885ef9306e92adc1bc7f6228c27ed76c86c","isMergeCommit":false,"messageTitle":"Utilize GitHub Actions to check for SEMVER impact label (#2470)","messageBody":"It is easy to forget to label PRs with their SEMVER impact when\r\nmerging.\r\n\r\nAdding a workflow to automate labelling will help prevent\r\nusers from missing labels when merging.\r\n\r\nLet\u0027s check the PR body description for user selected impact,\r\nand automatically add the label to the PR when merging.\r\n\r\nThis approach allows the user to not even have to add the label\r\nthemselves.","fileTypesAndContributionMap":{"yml":{"insertions":69,"deletions":0}}},{"hash":"011808d72db7321d00db0ea2765c35999ac7525e","isMergeCommit":false,"messageTitle":"MarkBind templates: add a project-specific template (#2400)","messageBody":"MarkBind has default and minimal templates.\r\n\r\nMarkBind lacks a specific template for project documentation,\r\nlimiting its appeal to users seeking specialized starting points.\r\n\r\nCreating a new template for such users enhances MarkBind\u0027s\r\nusability by providing a tailored starting point for creating\r\nproject documentation, encouraging more users to choose\r\nMarkBind for their documentation needs.\r\n\r\nLet\u0027s add a project template option during MarkBind\r\ninitialization that generates a template specifically to project\r\ndocumentation needs, with a User Guide and Developer Guide.\r\n\r\nThis approach directly addresses the gap for specialized\r\ndocumentation templates, making MarkBind a more attractive\r\noption for project maintainers.","fileTypesAndContributionMap":{"css":{"insertions":594,"deletions":0},"md":{"insertions":838,"deletions":1},"js":{"insertions":534,"deletions":0},"json":{"insertions":205,"deletions":0}}}]},{"date":"2024-04-07","commitResults":[{"hash":"fa483439e7057b002287d4b96d017cecf99481a3","isMergeCommit":false,"messageTitle":"Add `once` attribute to custom lists so attributes only apply to current item","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":169,"deletions":1},"js":{"insertions":91,"deletions":1}}}]}],"LamJiuFong":[{"date":"2024-02-17","commitResults":[{"hash":"2647090c14283e8f108f478495c5cba4514023c4","isMergeCommit":false,"messageTitle":"Allow `markbind serve` to specify custom host #2382 (#2395)","messageBody":"Allow markbind serve to specify custom host\r\n\r\nCo-authored-by: Jiu Fong Lam \u003c\u003e","fileTypesAndContributionMap":{"md":{"insertions":5,"deletions":3},"js":{"insertions":48,"deletions":8}}}]},{"date":"2024-02-29","commitResults":[{"hash":"933655950dc65c079f911f6867b0a4d02e49f54d","isMergeCommit":false,"messageTitle":"Migrate stylelint to latest version #2292 (#2425)","messageBody":"Migrate stylelint to latest version ^16.0.0\r\nAdd devdependency \"stylelint-config-recommended-vue\"\r\nAdd plugin @stylistic/stylelint-plugin\r\nAdd dependency postcss@^8.4.35\r\nFix syntax to obey new rules\r\n\r\n---------\r\n\r\nCo-authored-by: Jiu Fong Lam \u003c\u003e","fileTypesAndContributionMap":{"css":{"insertions":72,"deletions":82},"vue":{"insertions":29,"deletions":47},"js":{"insertions":4,"deletions":3},"json":{"insertions":8,"deletions":3}}}]},{"date":"2024-03-17","commitResults":[{"hash":"371228d0a255d8b34fe24045a32692b79932fd7f","isMergeCommit":false,"messageTitle":"Add lazy property to pic and annotate","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":6,"deletions":4},"vue":{"insertions":47,"deletions":15}}}]},{"date":"2024-04-07","commitResults":[{"hash":"8ad1b0c7e1b5bc42635a83398701f256ada274f2","isMergeCommit":false,"messageTitle":"Add defer attribute to scripts in page template (#2492)","messageBody":"","fileTypesAndContributionMap":{"njk":{"insertions":4,"deletions":4}}}]}],"yiwen101":[{"date":"2024-02-12","commitResults":[{"hash":"7d9cf5a1aff00079400f020a71ad03332dc6d8f8","isMergeCommit":false,"messageTitle":"Add documentation on troubleshooting rendering markdown","messageBody":"* Update trouble shooting\r\n\r\n* Update code examples in affected presentation components\r\n\r\n* Update message for presentation component\r\n\r\n* Revert unrelated changes\r\n\r\n* Fix links\r\n\r\n* Update docs/userGuide/components/presentation.md\r\n\r\nCo-authored-by: Chan Yu Cheng \u003c77204346+yucheng11122017@users.noreply.github.com\u003e\r\n\r\n* Revert distracting changes made by formatter\r\n\r\n* Revert distracting changes by formatter2\r\n\r\n* Migrate to codeAndOutput\r\n\r\n* Updade doc\r\n\r\n* Update presentation.md\r\n\r\n* Update ug\r\n\r\n* Clean formatting error\r\n\r\n* Proof read\r\n\r\n* Improve formatting\r\n\r\n* Improve format\r\n\r\n* Improve format\r\n\r\n* Update troubleshooting.md\r\n\r\n* Update troubleshooting.md\r\n\r\n---------\r\n\r\nCo-authored-by: Chan Yu Cheng \u003c77204346+yucheng11122017@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":81,"deletions":10}}}]},{"date":"2024-02-25","commitResults":[{"hash":"ef502dbf57d5b798ec535c4d4a62f62b5dd2588f","isMergeCommit":false,"messageTitle":" Fix external styles and script not hoisted by externals (#2414)","messageBody":"Also add warning in documentation that styles in hoisted\r\nexternal will also affect the rest of the page","fileTypesAndContributionMap":{"md":{"insertions":27,"deletions":0},"json":{"insertions":13,"deletions":0},"js":{"insertions":16,"deletions":0}}}]},{"date":"2024-03-18","commitResults":[{"hash":"dd4bfd3288e02174d39005654a4891fa5d88698f","isMergeCommit":false,"messageTitle":"Fix issue of cannot import footnote from hash","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":9,"deletions":0},"js":{"insertions":10,"deletions":1}}}]},{"date":"2024-03-29","commitResults":[{"hash":"66591c50686edbeb4d1ea33d7365ea4fc363dab5","isMergeCommit":false,"messageTitle":"Implement efficient validation for hash intra-link (#2465)","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":12,"deletions":12}}}]},{"date":"2024-04-04","commitResults":[{"hash":"c268733678094626ac4df26c0091d99df58c16ef","isMergeCommit":false,"messageTitle":"Fix stray space before popover and tooltip (#2486)","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":5,"deletions":0},"vue":{"insertions":6,"deletions":9},"js":{"insertions":1,"deletions":1}}}]}],"jonasongg":[],"domoberzin":[],"asdfghjkxd":[],"yuanxi1":[],"supermii2":[],"marquestye":[],"nknguyenhc":[],"Arif-Khalid":[],"NereusWB922":[],"dishenggg":[],"MadLamprey":[],"Tim-Siu":[{"date":"2024-01-28","commitResults":[{"hash":"25326afde09843a79c4c6efb8bf0d8733844d415","isMergeCommit":false,"messageTitle":"Correct broken UG external link (#2392)","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":2}}}]},{"date":"2024-02-01","commitResults":[{"hash":"67ae4b134ce35eacad680850b7233e39a516b71e","isMergeCommit":false,"messageTitle":"Use a more noticeable color for highlight words in fenced code under dark theme","messageBody":"","fileTypesAndContributionMap":{"css":{"insertions":8,"deletions":8}}}]},{"date":"2024-02-28","commitResults":[{"hash":"990d6136d1103ceae3005f1fe72be920cc7a6448","isMergeCommit":false,"messageTitle":"Automatically enforce soft-wrapping and add line-numbers when code is cut off for printing","messageBody":"","fileTypesAndContributionMap":{"css":{"insertions":29,"deletions":4},"md":{"insertions":10,"deletions":0},"js":{"insertions":18,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"xenosf":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"sopa301":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"mingyuanc":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"jingting1412":{"java":0,"js":24,"css":0,"json":2,"md":98,"mbd":0,"mbdf":0,"njk":72,"py":0,"vue":0,"yml":0},"KevinEyo1":{"java":0,"js":625,"css":675,"json":206,"md":1006,"mbd":0,"mbdf":0,"njk":0,"py":15,"vue":0,"yml":108},"LamJiuFong":{"java":0,"js":52,"css":71,"json":7,"md":11,"mbd":0,"mbdf":0,"njk":4,"py":0,"vue":69,"yml":0},"yiwen101":{"java":0,"js":26,"css":0,"json":13,"md":133,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":6,"yml":0},"jonasongg":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"domoberzin":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"asdfghjkxd":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"yuanxi1":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"supermii2":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"marquestye":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"nknguyenhc":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"Arif-Khalid":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"NereusWB922":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"dishenggg":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"MadLamprey":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"Tim-Siu":{"java":0,"js":18,"css":31,"json":0,"md":10,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0}},"authorContributionVariance":{"xenosf":0.0,"sopa301":0.0,"mingyuanc":0.0,"jingting1412":756.88947,"KevinEyo1":39091.51,"LamJiuFong":539.97534,"yiwen101":97.09545,"jonasongg":0.0,"domoberzin":0.0,"asdfghjkxd":0.0,"yuanxi1":0.0,"supermii2":0.0,"marquestye":0.0,"nknguyenhc":0.0,"Arif-Khalid":0.0,"NereusWB922":0.0,"dishenggg":0.0,"MadLamprey":0.0,"Tim-Siu":30.559225},"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"}} +{"authorDailyContributionsMap":{"xenosf":[],"sopa301":[],"mingyuanc":[],"jingting1412":[{"date":"2024-01-25","commitResults":[{"hash":"613461c0ed23970046e1b17a2099ac5b2df71200","isMergeCommit":false,"messageTitle":"Replacing default icon for conversion (#2389)","messageBody":"Change default favicon for conversions","fileTypesAndContributionMap":{"js":{"insertions":24,"deletions":24},"njk":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-04","commitResults":[{"hash":"a44bdaa163ab457753e8e737711b2843dbcc9512","isMergeCommit":false,"messageTitle":"Combining syntax cheat sheet and full syntax reference pages (#2426)","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":91,"deletions":142},"json":{"insertions":2,"deletions":4},"njk":{"insertions":71,"deletions":0}}}]},{"date":"2024-03-08","commitResults":[{"hash":"7d10b69845d4c3bdcaa862fd4bb1d053128d0c21","isMergeCommit":false,"messageTitle":"Add pageNav and info box to readerFacingFeatures page","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":7,"deletions":3}}}]},{"date":"2024-04-08","commitResults":[{"hash":"147899a56e5731aa08b10277cf9d9047cecb2d90","isMergeCommit":false,"messageTitle":"Add portfolio template for init command","messageBody":"","fileTypesAndContributionMap":{"css":{"insertions":593,"deletions":0},"md":{"insertions":517,"deletions":0},"js":{"insertions":91,"deletions":0},"json":{"insertions":83,"deletions":0}}}]}],"KevinEyo1":[{"date":"2024-02-24","commitResults":[{"hash":"8bac97a3f0143e39c601e34a4761a4a0669eba97","isMergeCommit":false,"messageTitle":"GitHub Actions: add check for empty commit message","messageBody":"There is no checking of proposed commit message presence.\r\n\r\nPR authors may forget to include proposed commit message.\r\n\r\nAdding a check using GitHub Actions will help remind and ensure\r\nthat authors don\u0027t miss out on filling in the commit message.\r\n\r\nLet\u0027s add a job to the a new workflow, pr-message-reminder.yml\r\nfile to help automate checking and reminding of filling in the\r\nproposed commit message for each PR.\r\n\r\nThis approach automates the process, without having to have\r\nother users check and remind PR authors themselves. Adding the\r\nnew job to a new workflow will allow greater control of job triggers\r\nwhile maintaining clean code.","fileTypesAndContributionMap":{"yml":{"insertions":39,"deletions":0},"py":{"insertions":15,"deletions":0}}}]},{"date":"2024-03-04","commitResults":[{"hash":"e6e639d23136709d0b1784d22fdc4148485252ec","isMergeCommit":false,"messageTitle":"Upgrade simple-git version (#2439)","messageBody":"simple-git version: update to latest version\r\n\r\nsimple-git was not updated. Currently used version should no\r\nlonger be used due to security advisory.\r\n\r\nUpdating it avoids newly found vulnerabilities.\r\n\r\nLet\u0027s update it to the current latest version.","fileTypesAndContributionMap":{"json":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-10","commitResults":[{"hash":"1c01cfb9351a6696b2dafafab545a868a897211e","isMergeCommit":false,"messageTitle":"UG: update wording of UG (#2440)","messageBody":"Wording might mislead readers into thinking that PageNavs\r\ncannot be used in normal pages.\r\n\r\nUpdating the wording will allow readers to know that\r\nindividual pages can also use PageNavs.\r\n\r\nLet\u0027s update the wording to be clearer and more explicit.\r\n\r\nCo-authored-by: david \u003c71922282+itsyme@users.noreply.github.com\u003e\r\n\r\n---------\r\n\r\nCo-authored-by: david \u003c71922282+itsyme@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-30","commitResults":[{"hash":"e95e5885ef9306e92adc1bc7f6228c27ed76c86c","isMergeCommit":false,"messageTitle":"Utilize GitHub Actions to check for SEMVER impact label (#2470)","messageBody":"It is easy to forget to label PRs with their SEMVER impact when\r\nmerging.\r\n\r\nAdding a workflow to automate labelling will help prevent\r\nusers from missing labels when merging.\r\n\r\nLet\u0027s check the PR body description for user selected impact,\r\nand automatically add the label to the PR when merging.\r\n\r\nThis approach allows the user to not even have to add the label\r\nthemselves.","fileTypesAndContributionMap":{"yml":{"insertions":69,"deletions":0}}},{"hash":"011808d72db7321d00db0ea2765c35999ac7525e","isMergeCommit":false,"messageTitle":"MarkBind templates: add a project-specific template (#2400)","messageBody":"MarkBind has default and minimal templates.\r\n\r\nMarkBind lacks a specific template for project documentation,\r\nlimiting its appeal to users seeking specialized starting points.\r\n\r\nCreating a new template for such users enhances MarkBind\u0027s\r\nusability by providing a tailored starting point for creating\r\nproject documentation, encouraging more users to choose\r\nMarkBind for their documentation needs.\r\n\r\nLet\u0027s add a project template option during MarkBind\r\ninitialization that generates a template specifically to project\r\ndocumentation needs, with a User Guide and Developer Guide.\r\n\r\nThis approach directly addresses the gap for specialized\r\ndocumentation templates, making MarkBind a more attractive\r\noption for project maintainers.","fileTypesAndContributionMap":{"css":{"insertions":594,"deletions":0},"md":{"insertions":838,"deletions":1},"js":{"insertions":534,"deletions":0},"json":{"insertions":205,"deletions":0}}}]},{"date":"2024-04-07","commitResults":[{"hash":"fa483439e7057b002287d4b96d017cecf99481a3","isMergeCommit":false,"messageTitle":"Add `once` attribute to custom lists so attributes only apply to current item","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":169,"deletions":1},"js":{"insertions":91,"deletions":1}}}]}],"LamJiuFong":[{"date":"2024-02-17","commitResults":[{"hash":"2647090c14283e8f108f478495c5cba4514023c4","isMergeCommit":false,"messageTitle":"Allow `markbind serve` to specify custom host #2382 (#2395)","messageBody":"Allow markbind serve to specify custom host\r\n\r\nCo-authored-by: Jiu Fong Lam \u003c\u003e","fileTypesAndContributionMap":{"md":{"insertions":5,"deletions":3},"js":{"insertions":48,"deletions":8}}}]},{"date":"2024-02-29","commitResults":[{"hash":"933655950dc65c079f911f6867b0a4d02e49f54d","isMergeCommit":false,"messageTitle":"Migrate stylelint to latest version #2292 (#2425)","messageBody":"Migrate stylelint to latest version ^16.0.0\r\nAdd devdependency \"stylelint-config-recommended-vue\"\r\nAdd plugin @stylistic/stylelint-plugin\r\nAdd dependency postcss@^8.4.35\r\nFix syntax to obey new rules\r\n\r\n---------\r\n\r\nCo-authored-by: Jiu Fong Lam \u003c\u003e","fileTypesAndContributionMap":{"css":{"insertions":72,"deletions":82},"vue":{"insertions":29,"deletions":47},"js":{"insertions":4,"deletions":3},"json":{"insertions":8,"deletions":3}}}]},{"date":"2024-03-17","commitResults":[{"hash":"371228d0a255d8b34fe24045a32692b79932fd7f","isMergeCommit":false,"messageTitle":"Add lazy property to pic and annotate","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":6,"deletions":4},"vue":{"insertions":47,"deletions":15}}}]},{"date":"2024-04-07","commitResults":[{"hash":"8ad1b0c7e1b5bc42635a83398701f256ada274f2","isMergeCommit":false,"messageTitle":"Add defer attribute to scripts in page template (#2492)","messageBody":"","fileTypesAndContributionMap":{"njk":{"insertions":4,"deletions":4}}}]}],"yiwen101":[{"date":"2024-02-12","commitResults":[{"hash":"7d9cf5a1aff00079400f020a71ad03332dc6d8f8","isMergeCommit":false,"messageTitle":"Add documentation on troubleshooting rendering markdown","messageBody":"* Update trouble shooting\r\n\r\n* Update code examples in affected presentation components\r\n\r\n* Update message for presentation component\r\n\r\n* Revert unrelated changes\r\n\r\n* Fix links\r\n\r\n* Update docs/userGuide/components/presentation.md\r\n\r\nCo-authored-by: Chan Yu Cheng \u003c77204346+yucheng11122017@users.noreply.github.com\u003e\r\n\r\n* Revert distracting changes made by formatter\r\n\r\n* Revert distracting changes by formatter2\r\n\r\n* Migrate to codeAndOutput\r\n\r\n* Updade doc\r\n\r\n* Update presentation.md\r\n\r\n* Update ug\r\n\r\n* Clean formatting error\r\n\r\n* Proof read\r\n\r\n* Improve formatting\r\n\r\n* Improve format\r\n\r\n* Improve format\r\n\r\n* Update troubleshooting.md\r\n\r\n* Update troubleshooting.md\r\n\r\n---------\r\n\r\nCo-authored-by: Chan Yu Cheng \u003c77204346+yucheng11122017@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"md":{"insertions":81,"deletions":10}}}]},{"date":"2024-02-25","commitResults":[{"hash":"ef502dbf57d5b798ec535c4d4a62f62b5dd2588f","isMergeCommit":false,"messageTitle":" Fix external styles and script not hoisted by externals (#2414)","messageBody":"Also add warning in documentation that styles in hoisted\r\nexternal will also affect the rest of the page","fileTypesAndContributionMap":{"md":{"insertions":27,"deletions":0},"json":{"insertions":13,"deletions":0},"js":{"insertions":16,"deletions":0}}}]},{"date":"2024-03-18","commitResults":[{"hash":"dd4bfd3288e02174d39005654a4891fa5d88698f","isMergeCommit":false,"messageTitle":"Fix issue of cannot import footnote from hash","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":9,"deletions":0},"js":{"insertions":10,"deletions":1}}}]},{"date":"2024-03-29","commitResults":[{"hash":"66591c50686edbeb4d1ea33d7365ea4fc363dab5","isMergeCommit":false,"messageTitle":"Implement efficient validation for hash intra-link (#2465)","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":12,"deletions":12}}}]},{"date":"2024-04-04","commitResults":[{"hash":"c268733678094626ac4df26c0091d99df58c16ef","isMergeCommit":false,"messageTitle":"Fix stray space before popover and tooltip (#2486)","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":5,"deletions":0},"vue":{"insertions":6,"deletions":9},"js":{"insertions":1,"deletions":1}}}]}],"jonasongg":[],"domoberzin":[],"asdfghjkxd":[],"yuanxi1":[],"supermii2":[],"marquestye":[],"nknguyenhc":[],"Arif-Khalid":[],"NereusWB922":[],"dishenggg":[],"MadLamprey":[],"Tim-Siu":[{"date":"2024-01-28","commitResults":[{"hash":"25326afde09843a79c4c6efb8bf0d8733844d415","isMergeCommit":false,"messageTitle":"Correct broken UG external link (#2392)","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":2}}}]},{"date":"2024-02-01","commitResults":[{"hash":"67ae4b134ce35eacad680850b7233e39a516b71e","isMergeCommit":false,"messageTitle":"Use a more noticeable color for highlight words in fenced code under dark theme","messageBody":"","fileTypesAndContributionMap":{"css":{"insertions":8,"deletions":8}}}]},{"date":"2024-02-28","commitResults":[{"hash":"990d6136d1103ceae3005f1fe72be920cc7a6448","isMergeCommit":false,"messageTitle":"Automatically enforce soft-wrapping and add line-numbers when code is cut off for printing","messageBody":"","fileTypesAndContributionMap":{"css":{"insertions":29,"deletions":4},"md":{"insertions":10,"deletions":0},"js":{"insertions":18,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"xenosf":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"sopa301":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"mingyuanc":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"jingting1412":{"java":0,"js":115,"css":676,"json":85,"md":615,"mbd":0,"mbdf":0,"njk":72,"py":0,"vue":0,"yml":0},"KevinEyo1":{"java":0,"js":625,"css":675,"json":206,"md":1006,"mbd":0,"mbdf":0,"njk":0,"py":15,"vue":0,"yml":108},"LamJiuFong":{"java":0,"js":52,"css":71,"json":7,"md":11,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":69,"yml":0},"yiwen101":{"java":0,"js":26,"css":0,"json":13,"md":133,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":6,"yml":0},"jonasongg":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"domoberzin":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"asdfghjkxd":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"yuanxi1":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"supermii2":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"marquestye":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"nknguyenhc":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"Arif-Khalid":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"NereusWB922":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"dishenggg":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"MadLamprey":{"java":0,"js":0,"css":0,"json":0,"md":0,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0},"Tim-Siu":{"java":0,"js":18,"css":31,"json":0,"md":10,"mbd":0,"mbdf":0,"njk":0,"py":0,"vue":0,"yml":0}},"authorContributionVariance":{"xenosf":0.0,"sopa301":0.0,"mingyuanc":0.0,"jingting1412":13279.324,"KevinEyo1":38793.824,"LamJiuFong":535.89246,"yiwen101":96.36929,"jonasongg":0.0,"domoberzin":0.0,"asdfghjkxd":0.0,"yuanxi1":0.0,"supermii2":0.0,"marquestye":0.0,"nknguyenhc":0.0,"Arif-Khalid":0.0,"NereusWB922":0.0,"dishenggg":0.0,"MadLamprey":0.0,"Tim-Siu":30.327145},"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/reposense-logs/reposense.log.0 b/reposense-logs/reposense.log.0 index 278e35d..6313d0e 100644 --- a/reposense-logs/reposense.log.0 +++ b/reposense-logs/reposense.log.0 @@ -1,1546 +1,1546 @@ -Apr 08, 2024 12:02:20 AM reposense.system.LogsManager addFileHandler +Apr 09, 2024 12:02:39 AM reposense.system.LogsManager addFileHandler INFO: Log temp folder has been successfully created -Apr 08, 2024 12:02:21 AM reposense.parser.CsvParser validateHeader +Apr 09, 2024 12:02:41 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, repo-config.csv, and recognized columns: Ignore Standalone Config, Repository's Location, Branch, Shallow Cloning, File formats, Ignore Glob List, Ignore Authors List, Find Previous Authors, Ignore Commits List -Apr 08, 2024 12:02:21 AM reposense.parser.CsvParser validateHeader +Apr 09, 2024 12:02:42 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, author-config.csv, and recognized columns: Author's Emails, Repository's Location, Author's GitHub ID, Branch, Author's Display Name, Ignore Glob List, Author's Git Author Name -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias marquestye found. The alias will belong to the last author - marquestye -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias arif-khalid found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Arif-Khalid -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias kevineyo1 found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - KevinEyo1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias domoberzin found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - domoberzin -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yuanxi1 found. The alias will belong to the last author - yuanxi1 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias dishenggg found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - dishenggg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - asdfghjkxd -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias supermii2 found. The alias will belong to the last author - supermii2 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jonasongg found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jonasongg -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nereuswb922 found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - NereusWB922 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lamjiufong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - LamJiuFong -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - xenosf -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias yiwen101 found. The alias will belong to the last author - yiwen101 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sopa301 found. The alias will belong to the last author - sopa301 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias mingyuanc found. The alias will belong to the last author - mingyuanc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias nknguyenhc found. The alias will belong to the last author - nknguyenhc -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jingting1412 found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - jingting1412 -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias tim-siu found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - Tim-Siu -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias sean leong found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jiachen found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Apr 09, 2024 12:02:42 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias lzq found. The alias will belong to the last author - MadLamprey -Apr 08, 2024 12:02:21 AM reposense.git.GitConfig getGlobalGitLfsConfig +Apr 09, 2024 12:02:42 AM reposense.git.GitConfig getGlobalGitLfsConfig WARNING: Could not get global git lfs config java.lang.RuntimeException: reposense.system.CommandRunnerProcessException: Error returned from command git config --global --list on path . : fatal: unable to read config file '/home/runner/.gitconfig': No such file or directory @@ -1556,115 +1556,115 @@ fatal: unable to read config file '/home/runner/.gitconfig': No such file or dir at reposense.system.CommandRunner.runCommand(CommandRunner.java:21) ... 3 more -Apr 08, 2024 12:02:21 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/CATcher-org/WATcher.git... -Apr 08, 2024 12:02:21 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/TEAMMATES/teammates.git... -Apr 08, 2024 12:02:21 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/reposense/reposense.git... -Apr 08, 2024 12:02:21 AM reposense.report.RepoCloner spawnCloneProcess +Apr 09, 2024 12:02:43 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/markbind/markbind.git... -Apr 08, 2024 12:02:21 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/reposense/reposense.git... +Apr 09, 2024 12:02:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/TEAMMATES/teammates.git... +Apr 09, 2024 12:02:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/CATcher-org/WATcher.git... +Apr 09, 2024 12:02:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/CATcher-org/WATcher.git to complete... +Apr 09, 2024 12:02:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/TEAMMATES/teammates.git to complete... -Apr 08, 2024 12:02:21 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/reposense/reposense.git to complete... -Apr 08, 2024 12:02:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/CATcher-org/WATcher.git to complete... -Apr 08, 2024 12:02:21 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/markbind/markbind.git to complete... -Apr 08, 2024 12:02:22 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/CATcher-org/WATcher.git completed! -Apr 08, 2024 12:02:22 AM reposense.report.RepoCloner spawnCloneProcess +Apr 09, 2024 12:02:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/CATcher-org/CATcher.git... -Apr 08, 2024 12:02:22 AM reposense.report.ReportGenerator analyzeRepos +Apr 09, 2024 12:02:44 AM reposense.report.ReportGenerator analyzeRepos INFO: [1/6] Analyzing https://github.com/CATcher-org/WATcher.git (main)... -Apr 08, 2024 12:02:22 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/CATcher-org/CATcher.git to complete... -Apr 08, 2024 12:02:23 AM reposense.report.ReportGenerator updateRepoConfig +Apr 09, 2024 12:02:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/CATcher-org/WATcher.git (main) does not contain a standalone config file. -Apr 08, 2024 12:02:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Apr 09, 2024 12:02:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/CATcher-org/WATcher.git (main)... -Apr 08, 2024 12:02:25 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/CATcher-org/CATcher.git completed! -Apr 08, 2024 12:02:25 AM reposense.report.RepoCloner spawnCloneProcess +Apr 09, 2024 12:02:46 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/se-edu/addressbook-level3.git... -Apr 08, 2024 12:02:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [2/6] Analyzing https://github.com/CATcher-org/CATcher.git (master)... -Apr 08, 2024 12:02:25 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/se-edu/addressbook-level3.git to complete... -Apr 08, 2024 12:02:25 AM reposense.report.ReportGenerator updateRepoConfig +Apr 09, 2024 12:02:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [2/6] Analyzing https://github.com/CATcher-org/CATcher.git (master)... +Apr 09, 2024 12:02:46 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/CATcher-org/CATcher.git (master) does not contain a standalone config file. -Apr 08, 2024 12:02:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Apr 09, 2024 12:02:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/CATcher-org/CATcher.git (master)... -Apr 08, 2024 12:02:26 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/markbind/markbind.git completed! -Apr 08, 2024 12:02:26 AM reposense.report.ReportGenerator analyzeRepos +Apr 09, 2024 12:02:47 AM reposense.report.ReportGenerator analyzeRepos INFO: [3/6] Analyzing https://github.com/markbind/markbind.git (master)... -Apr 08, 2024 12:02:26 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/se-edu/addressbook-level3.git completed! -Apr 08, 2024 12:02:26 AM reposense.report.ReportGenerator analyzeRepos +Apr 09, 2024 12:02:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [4/6] Analyzing https://github.com/se-edu/addressbook-level3.git (master)... -Apr 08, 2024 12:02:26 AM reposense.report.ReportGenerator updateRepoConfig +Apr 09, 2024 12:02:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/se-edu/addressbook-level3.git (master) does not contain a standalone config file. -Apr 08, 2024 12:02:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Apr 09, 2024 12:02:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/se-edu/addressbook-level3.git (master)... -Apr 08, 2024 12:02:26 AM reposense.report.ReportGenerator updateRepoConfig +Apr 09, 2024 12:02:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/markbind/markbind.git (master) does not contain a standalone config file. -Apr 08, 2024 12:02:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Apr 09, 2024 12:02:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/markbind/markbind.git (master)... -Apr 08, 2024 12:02:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Apr 09, 2024 12:02:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/se-edu/addressbook-level3.git (master)... -Apr 08, 2024 12:02:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Apr 09, 2024 12:02:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/CATcher-org/CATcher.git (master)... -Apr 08, 2024 12:02:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Apr 09, 2024 12:02:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/CATcher-org/WATcher.git (main)... -Apr 08, 2024 12:02:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/CATcher-org/CATcher.git (master)... -Apr 08, 2024 12:02:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Apr 09, 2024 12:02:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/se-edu/addressbook-level3.git (master)... -Apr 08, 2024 12:02:28 AM reposense.report.ReportGenerator analyzeRepo +Apr 09, 2024 12:02:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/CATcher-org/CATcher.git (master)... +Apr 09, 2024 12:02:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/CATcher-org/WATcher.git (main)... +Apr 09, 2024 12:02:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/se-edu/addressbook-level3.git (master) completed! -Apr 08, 2024 12:02:28 AM reposense.report.ReportGenerator analyzeRepo +Apr 09, 2024 12:02:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/CATcher-org/CATcher.git (master) completed! -Apr 08, 2024 12:02:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/CATcher-org/WATcher.git (main)... -Apr 08, 2024 12:02:28 AM reposense.report.ReportGenerator analyzeRepo +Apr 09, 2024 12:02:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/CATcher-org/WATcher.git (main) completed! -Apr 08, 2024 12:02:32 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:02:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/reposense/reposense.git completed! -Apr 08, 2024 12:02:32 AM reposense.report.ReportGenerator analyzeRepos +Apr 09, 2024 12:02:53 AM reposense.report.ReportGenerator analyzeRepos INFO: [5/6] Analyzing https://github.com/reposense/reposense.git (master)... -Apr 08, 2024 12:02:32 AM reposense.report.ReportGenerator updateRepoConfig +Apr 09, 2024 12:02:53 AM reposense.report.ReportGenerator updateRepoConfig INFO: Ignoring standalone config file in https://github.com/reposense/reposense.git (master). -Apr 08, 2024 12:02:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Apr 09, 2024 12:02:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/reposense/reposense.git (master)... -Apr 08, 2024 12:02:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Apr 09, 2024 12:02:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/markbind/markbind.git (master)... -Apr 08, 2024 12:02:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Apr 09, 2024 12:02:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/markbind/markbind.git (master)... -Apr 08, 2024 12:02:35 AM reposense.report.ReportGenerator analyzeRepo +Apr 09, 2024 12:02:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/markbind/markbind.git (master) completed! -Apr 08, 2024 12:02:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Apr 09, 2024 12:02:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/reposense/reposense.git (master)... -Apr 08, 2024 12:02:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Apr 09, 2024 12:02:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/reposense/reposense.git (master)... -Apr 08, 2024 12:02:38 AM reposense.report.ReportGenerator analyzeRepo +Apr 09, 2024 12:02:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/reposense/reposense.git (master) completed! -Apr 08, 2024 12:02:43 AM reposense.report.RepoCloner waitForCloneProcess +Apr 09, 2024 12:03:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/TEAMMATES/teammates.git completed! -Apr 08, 2024 12:02:43 AM reposense.report.ReportGenerator analyzeRepos +Apr 09, 2024 12:03:04 AM reposense.report.ReportGenerator analyzeRepos INFO: [6/6] Analyzing https://github.com/TEAMMATES/teammates.git (master)... -Apr 08, 2024 12:02:43 AM reposense.report.ReportGenerator updateRepoConfig +Apr 09, 2024 12:03:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/TEAMMATES/teammates.git (master) does not contain a standalone config file. -Apr 08, 2024 12:02:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Apr 09, 2024 12:03:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/TEAMMATES/teammates.git (master)... -Apr 08, 2024 12:03:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Apr 09, 2024 12:03:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/TEAMMATES/teammates.git (master)... -Apr 08, 2024 12:03:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Apr 09, 2024 12:03:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/TEAMMATES/teammates.git (master)... -Apr 08, 2024 12:03:20 AM reposense.report.ReportGenerator analyzeRepo +Apr 09, 2024 12:03:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/TEAMMATES/teammates.git (master) completed! -Apr 08, 2024 12:03:21 AM reposense.report.ReportGenerator generateReposReport +Apr 09, 2024 12:03:41 AM reposense.report.ReportGenerator generateReposReport INFO: The report is generated at /home/runner/work/2024-dashboard/2024-dashboard/reposense-report -Apr 08, 2024 12:03:21 AM reposense.RepoSense main -INFO: Elapsed processing time: 1 minute(s) 0.36 second(s) +Apr 09, 2024 12:03:42 AM reposense.RepoSense main +INFO: Elapsed processing time: 1 minute(s) 1.82 second(s) diff --git a/summary.json b/summary.json index a9d0b6f..ef8f663 100644 --- a/summary.json +++ b/summary.json @@ -1 +1 @@ -{"repoSenseVersion":"5cd529fb46","reportGeneratedTime":"Mon Apr 8 08:02:21 2024 UTC+08:00","reportGenerationTime":" 1 minute(s) 0.15 second(s)","zoneId":"UTC+08:00","reportTitle":"RepoSense Report","repos":[{"location":{"location":"https://github.com/markbind/markbind.git","repoName":"markbind","organization":"markbind","domainName":"github"},"branch":"master","displayName":"markbind/markbind[master]","outputFolderName":"markbind_markbind_master"},{"location":{"location":"https://github.com/reposense/reposense.git","repoName":"reposense","organization":"reposense","domainName":"github"},"branch":"master","displayName":"reposense/reposense[master]","outputFolderName":"reposense_reposense_master"},{"location":{"location":"https://github.com/se-edu/addressbook-level3.git","repoName":"addressbook-level3","organization":"se-edu","domainName":"github"},"branch":"master","displayName":"se-edu/addressbook-level3[master]","outputFolderName":"se-edu_addressbook-level3_master"},{"location":{"location":"https://github.com/TEAMMATES/teammates.git","repoName":"teammates","organization":"TEAMMATES","domainName":"github"},"branch":"master","displayName":"TEAMMATES/teammates[master]","outputFolderName":"TEAMMATES_teammates_master"},{"location":{"location":"https://github.com/CATcher-org/CATcher.git","repoName":"CATcher","organization":"CATcher-org","domainName":"github"},"branch":"master","displayName":"CATcher-org/CATcher[master]","outputFolderName":"CATcher-org_CATcher_master"},{"location":{"location":"https://github.com/CATcher-org/WATcher.git","repoName":"WATcher","organization":"CATcher-org","domainName":"github"},"branch":"main","displayName":"CATcher-org/WATcher[main]","outputFolderName":"CATcher-org_WATcher_main"}],"errorSet":[],"sinceDate":"2023-12-01","untilDate":"2024-04-08","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}} +{"repoSenseVersion":"5cd529fb46","reportGeneratedTime":"Tue Apr 9 08:02:42 2024 UTC+08:00","reportGenerationTime":" 1 minute(s) 1.51 second(s)","zoneId":"UTC+08:00","reportTitle":"RepoSense Report","repos":[{"location":{"location":"https://github.com/markbind/markbind.git","repoName":"markbind","organization":"markbind","domainName":"github"},"branch":"master","displayName":"markbind/markbind[master]","outputFolderName":"markbind_markbind_master"},{"location":{"location":"https://github.com/reposense/reposense.git","repoName":"reposense","organization":"reposense","domainName":"github"},"branch":"master","displayName":"reposense/reposense[master]","outputFolderName":"reposense_reposense_master"},{"location":{"location":"https://github.com/se-edu/addressbook-level3.git","repoName":"addressbook-level3","organization":"se-edu","domainName":"github"},"branch":"master","displayName":"se-edu/addressbook-level3[master]","outputFolderName":"se-edu_addressbook-level3_master"},{"location":{"location":"https://github.com/TEAMMATES/teammates.git","repoName":"teammates","organization":"TEAMMATES","domainName":"github"},"branch":"master","displayName":"TEAMMATES/teammates[master]","outputFolderName":"TEAMMATES_teammates_master"},{"location":{"location":"https://github.com/CATcher-org/CATcher.git","repoName":"CATcher","organization":"CATcher-org","domainName":"github"},"branch":"master","displayName":"CATcher-org/CATcher[master]","outputFolderName":"CATcher-org_CATcher_master"},{"location":{"location":"https://github.com/CATcher-org/WATcher.git","repoName":"WATcher","organization":"CATcher-org","domainName":"github"},"branch":"main","displayName":"CATcher-org/WATcher[main]","outputFolderName":"CATcher-org_WATcher_main"}],"errorSet":[],"sinceDate":"2023-12-01","untilDate":"2024-04-09","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}}

_YH+qewRkv}{nt5;~si?OLD zDIX!n4YA#d(kYFM@DeLe;=M@SD(Kxig@?-yC+&V36GxsrJdlxulX$TQ^J?I-b5JiB zgu%d^+V^%JD%<(%NPlq#wNpi5QHx+~jc=2OP&zzGL1+fbAV!AouoUdsc|<^79;Tgv zR_FusI+~NP7sGNbXoysFXur1)#+#orz0y3dcYlGpdKjy|4D<`a3}1FnWO3}+prdM_ zyQ^q*B6)h8402njdK}Yn&A}Qc1fBCcYm90rPTNZ-vYdyvXMZ|&9P9%O2fN{qrSSu9 z_qsF#lg&N7DNY6<{SE92WvuEz}u?mH)mRc|>g^o;2wCsJ+Gfg0Q5hI)?DTt&P(lm2{ zyC}z$$G0|82!A58D{T(Ze`;u^k;NueLkvR80-S8GqZ>Q{OOnq@P*+0)Kqmnk7WDY<0!t|Au3kg$#VF zvJBX5?FdBv*6SC4JOAOuci$h|fJ=-DmKF;S;&FM86aEiG22J zm^M?hRezFN=YwifwyUTbu5C^x+T-^~WN}oup{Zw64~SDdqpF3)X4^=LvBF%ev9g3n z|9K+)GGG;0J&oUm^smi6_MgB$iW&gP-BSaj;k2rNAF{#5Th^s^q*E3Uqc9!j_>l12 z@u3&p=Rt`P?(YkgVy}vxVZl`mXBS-Dz&l$k(|>h(Mm4(0K0BgIE)e9>^PhL@snrYn z#C`SmabH{>(3M&KgPQ`=ZDnoL1dD6Cla7DHRwBD{2f92T# zw7gn#Yf+chH1Eb{;?$4iBN!w$l0H{nI!VK>-nGvsAtgw$MUIjm_Q~?G|A_dYm9{Pj zLVpUFvVOqN-hi0&1*zW0CsdZ##i~-s)!j|TCMMmMz`H%oQM46pZ!6iosyS177x5-y z1?ea{X6Ia^id4Qk%XOTm=(%=j&7Q^2;-;0mK>hCXIxxp(jcD?G|3xn3`KX@9xpkwLGax}qDv9@8HLqn_6T*)dQLWH)a3 zyu!@cQ8ChVhtx6&A zH8H4iSM66{XM{F+^xwP0pO~H4riXcAn z2XX;4#Hu8AhSFVYDG;Y&*kPM-GW%tPx1&H*M`}w59l^65Wsm^B?lZBG9X}7MbJGy< z!4o#H9eu%?V{!8idt%szP=_^hZTn)X!xL2vmd`-f-*%eP?OCyq+RWAsRngkiP59z# z0dmm8TkX>?ByZ-_@4FO;RavUVEg`ii8?;+xbauk?hc*2RywJ0k~E*=N+|3y*B#4d$0T~QAG$9aoq6ANxhCc zR@_0NQ3ZK4`8Ji?tpPvE9v-^Anq*Sr42RVx%4gWhKR{qT7|H7Exl-eRNT)FsyEXYj ziL1{Eswb?Rfg;?`BKQngR)6{(4OPs@K+U!8Xnc{!(Wf!JFc^s!G48QK15$7Hdh$(> z)uZ*Y2u0lH;lZlZh@pQMEoc`+T!oAiI?^2Wi_omBhFVm)>rU2=Ky|xzQjEmy z-MS(EX@C_jO!%>2#PH}Ws&LhsG-w=X`N{BV4J^5)gao0AVedGFqy zp4chJ?@mv?d;7*yGJie%0lghx0)?R9jPUPiw1`z27IpgK6=v|^_}k<6RHBtY14iC; zo*FxoXUWq}fdI6}U#um4IzGjz6FkT28IGaENLac;c}D`|---U>fLfX1@cbMDQn zkP)|@QH!e)fnFC87|}e@H^_4$WNFn8Q=rH7!ftOXHk?*|4}TsZ5b5npSLj|2Qm6&* zz&q-3kqh%4KFKi$U98lY*OaIpF|J-KeT<$ot=S%wMw<^!*-1w`OAVjGQuEr$`2=iX zug%%QUOViGoS(un^PCCg$~2ndlN!aVQf-x3g5i^nA$x6`@#0c1uL@guyh<#&HjrQmTHCiJj9?mS)OBT(tjkq&1MnSx?v#PZByz}=(ZzY z$8H-pB`nLVKXw&VUGZ!&&Ck4rj;j*?lOGQ>0;3Z@hg;~ut8!VDnD2eX546WeM;5+f zd+g>4pAkcYEp!xv$jP4@0V)5d;u(}yiPK)S4eTr1Ks=O!;)+sn#5bGsU(x=0FiuFd zURxmWF@IOl$P-{nAG2bsd6C6bb1fJeV7g$421m+{&~4@$6S3x|I&>y##a3&qe+qb# zKe@s0V1)B$g&W@Bae<}QaNBgWcQpspyO2Q{eZo! z-wjN39&TDvvV_J?YPH+#(nt;Cqn?`mPKQvq{eRLct&x7AEna8^z0y0FWbz5bYi;{K zKNyz2a@t?!ar>fw(TN8AZo55fyR0Z-mQ+%Q%vdB0n+mBV%nS-dPFBRinW7NF7|B~{ zDFSydBX&ZLTC!{lh%_lwv>zTM{ASRuMmHDcevxdZvI&QJMsGwe5#JGy{5bF*9ylcK z9DkFP6e8C{d|c^Ey%zf%enBmru>y>_QJ8uf!gXVC7B`kuAihAVR8Gi(wv3q61mLeE}$_pNsp2n^RC1S2uC_Bp0 zy>%oCnXK)ygoK)69n8Bn#aU<-lbjLli6ck$QtA5Tw|7nXL_S|ka6N*AXlHmdbDNjp zr4(`7-t1_B<~8`DO2j1B4RyYk-lZ}@0xNZJQG(6Wg|ZVo!{TZQC{{wmq?(%$Iv#z54#W zs$F$f@9tgI=hXSrU2Cl!T-TLL=SkL!0?a~XISAR@oy>N+ zFmZh^3ZGXM>6>tyX8bHqGyMg*rQrj{V`8)*mHLO}XP2)uNrzX>?Kz=idyCZ`yBd8Z zy5d`C6Esz$n_N-gqrkYO`YBsX3V`*?TA^srx~E6EC-#U!3QW>h-ri6(`ZeiLz{~p2 zHnDY+gYG7~H8tB_b{o(A0I~g^fK_J>#}*NTo7QMsT2Tf6fU@U5YihHZPcP7(z_j|3 zt>^J&^#|&9YStn(4F3MV>`o|RzZL3~xNwwE6kPI+JH|fDGG)`c+L4t6#DLUZTFaI^ zKq%zZ~c!>s?t<(i48HjSGZW zTBDH5H1+>v|Cn_2lD`w8zi(v!x}YG#-|y5_$UNBXgOO%$-|M;!AQCenS=fT;*Jk|^ z<)b@Np;?~ZiNjIoXY#_s5T~ewb={H+v*9z=n8^y@b7fJ+2LS@7PELeV)ww884IS7J z@2;Zg5q}}@on>0`@g4%~xCR=T0t2V;Vo!Q!#;Ez&9W*1loSa;llHpvnS^tyt!@ zo7Mx-O`sL|T?D*V>2w{+J00si(&G>f&eF&@Hp~W8ljLiyvNZD>YcVHmrjwOUK9&Cl zOS==Ewid_o^P&MEAHYxuoGCHkHYS&dUWBof>Dw+4g+31xRPVs$sqSp7j;=^tTJbiU zk^q0@neVHVK4TMW+s5nA=7Ms0C@E;!NHZv0LXQ)-2^s$)z zt`8;KI@~e;#}~oQ`$n0rF|3wHlk=z@*Y~6Z4`HcX|JH~)aq1cU{;6&=!|H7W$v#-( zeq~;lXpdee&lG-m;o9gDh>)YkvkCf^ia8Yrr~_xD8z*BqR^I5~@2CY;F7}MB@f5s5 zo8`n$haa|6lPETENJjaczRA`^<0-8czc-OO`o-vmnkD?;Fbr!U zSH!?lDMVjXx7OfTe@5;`%V;c26v7|$wP^BNYS*lxl7c={p?8lcoTH`v9H*RR1NWUk zrw7(O*v4Ij8>pd9$yMP3^CzXFR-LZIjT<~Fb;K+|$FUVGogl{X9JY1~6Jw>WlNGk+ z6Mwnq#pTfwPrI@!WEz)ZLzIexB{QKsN6DDO^e@#vkm}TAv+H?2IVFUS1eZi872#Ru zg{uS-8(6Lhffyzv`v;`ult;g4bzn~IJOi{I`Xrq-^#9DEpsQ`VW!BXAIqI?V$;=@; zW@uY<@LZ`F6`)CNu-Y{9hO%r#qlSPwrzV!L*P=kMMeS z50u0GNgKfF(%FjpI=#p(jOnnpMf@P5P?yYPkQ>pN&#A|Z70gZys8!$k|_EvOZ|mAG(Nc$Dztx^-QM>ID+m$s_}?Em-!TS;wAk zjDBDNPq^y26V#rU$#g=6Yhgy@^DuDVB>K%qqb;ipA#Ivq;5($7#$-j-6@dea@Kcjt zhKoNkm80Re#)1@am&M)AiO6)5|B<<$g1GCSFa=KR7|%K#4vtWV!8eaYWJ*NCGaG@voRZA&{-4JUhiSIP099xBNn z$)b)g>l%5@hzN*ZyB{csmcaw%DT<8DkSp+<$-wy z2TB9%hKG-V)QYGyTnxSJ+kLoQQt`Kde`KOoyKjR$3F2`Ewz|XOw%VRv;;mA6vo`A1 zjPzBoQayO?gWvDOr=fr$Hvat-ss%;9=#o%B1lfh$@fA#Ro87`ldcNxL8ypJ{F9{l~ zU{3)moiWM0eHi4s>NAt~$_hFe5B5n}Snk+kY}kKg<^D&uWO?5=X^uM3&)yw5<1@nqreJPT2pd%QQf9Q+G{IhCQ8q! zKk5@H43f{8FdqP|TWSccKAibDL`?4!#Y!AIn|x30sz6YslF;!iJ7J|)3LK>MMWr<) zZD*r=VaVC{^~vCg1cK-iA(7g^>U{Jd>u|LtK6J8Sw;Y&v${jI>Q%X*6JNKXJ#GjeG zb4=Fw>#@VuCP+x8EJQFu*J!`J)FRHEUsInE=@mj#NZ){3OhijpNCo4;i7dsswbBZ) zL-Kii)e5AAwf!`x^+Wn5!T1dPjIK@F*ji%~!vZG%F#1xpwfZ#?A2sql(XimERaL$> zG0sl@A2J|n7xv-J+ocGlqteGy8EGEG4<_Z-@nzF#W)=aU^kiTn)zvP+^~%gl;n7w% z-^O*6XHj z%_IXTtXa*~SnK*1?L@}-`NoS{Yn+?vNhg?fD_UGSy!@%cyro}5vjsb5XEnUO)c(_BJg^;;2;=Q2L zvnnZICUUt2N%2Kai5;Wv89GX+e@#9Uch0TmOCbo!XI)kADi8(p$e_c0YOt&f!l?79 zXLDRFRJMtHqRz0ho!YC41vt8X#(K=VOT+)xJ}!0Nhyf{r-pIvl{rK|#Iv{Wm7Y`^N zO8W&KPJu#;Zy8T_nfY=b6LXikD4^pJb(;pvB)piN`TNgsRXwRkq>L*I*Rlv+OcR~M zC$(_ASUv^TVy>V#CtGUiPR@;!JbQSQmHfS1x|>)s!q(L);e>@(S(s(1LcOxK%+JhB=T`Vx0$6N7N^5*7{`Z;Q}xAjqe)S z^URGlSMg^hB%O1ak$);mik9E}xmk?|`83wH_fY zS+YzV{q8&(s~}19Z4X-DO)ft-k%@n_T4QBK_9S)(Q>StouS}tbYfAOzlv@)O!-L@q zji$Zw<9qLL;45U@`4HqvgoFepb=zv$>~!4evW$*Xjl`TYOzpX1j9|oxT91s@1P01T zPB|ItcKb1ewZNzNU*h5L+DzMPnNVlt?TnL9#VuuqQ^xs}hT56F|2aRW%I(EmZ(r^7 zG7b4~!QfF2bIjv-=1t{)TutCcImSlar3=Cx@Y9?^;;tn|dKO30&sb`!w^?kw}GHW8S}+Qlr2 z;Ia%mPUcF6RD?x199T^OM0?@+=U6EzL}Y8_UVkL!{;*E!|=b8vefb^;$ZbAJSffpO~H=AXU>?4wn6 zW?iWA=}ep(F`EQ@BvL$)?uEks0X_8}M%L}Zor7K7D#@hjrYsWvj}f*(9xDXOs*hnm z7F64$7@iiuwn_o`u-BMtx^OXd+PZ&eGb*4f=?ZV<0apvEVtySJG;g9OY2_vpzTH{R z(z@c0Dti@s6HRYuWa^SgvxV0Lnmz8C2^frYX9!susQ%LG)kw*#0TO{Va2vnEbLebZ zxL+w#1muq^2ov|l5ntzBsb9-Hf+ylyWQ*>M<>HlNdlUf=H@%KZm1eQrrDiD#iz6G( zicEz)MadD_nH~0}aanRb2W^Uw17uIuI2!i*P?6uk3pfHwzm~rZSD9Q{-;pv;O;;_HuApoP8pRL+knFB&GK{@!cbgM&Z|8eZcG%f9~d+Tc{T zKYV5ampIP4RPFe&Hjn%W>ukKc+Ze+B^*_{}>iN8E}c=`!4s(CEA>`0<`_ zcz?+IUy`lS4MrSy17LwP#RXxzXR(M-^q& zl;^4RVy8PstpB@qUnZ7HfYPYR*j4E7m~nBpmukN_Q*6R%>1BmxPDbCAdchUU%(B2?SC#$#%VOMwM!O_lJ%p}! z;&|Ff>7Wq1vmgFzeSAUh@Wu$P%O@d3fqUg?28-c$QG#Sn8^YT$jz7N!1-(bV=v#6@ zon3*W5QKT;+SqQ!ugxYR5huUGd29k)Y6fG#Y|QnsLZ`;WCvb^WvPAO zi1F^3BIf!YGJu($k16pEl`D3U{aWyChT%FZeX**0v#Gy_X6?)l0|VSG&a8#0?#M8W zD1&k`PPD|<-1Gvk>2I+aM^69p>5mHY3x+MWP`&w1%ge(V#TUK>83H6RRcXXP z+^r?y9l2h42I=V;eqtfR?b*^=CF7&2sjrfH>;r*kEknxrqx5-H9+drp+MbyLIYARA z*wbMt7c{RmF$r2y`Rr_PgyKlq3gzX%`hYBWfvs6k0RtHsg40f z$r<8U@igdmcz1AmA^6*HLU^plaKd{4`&r6MQ$af`?-AFD+0M@1bYR4a{^+!V6w}htA=vuQq}RZCBkDXXz0@4z`oH zSjVK(tuegSvUdY}EU0=+70ZZ9g}Be+y`7Zvo%DUK(2P^^yf3!?uPImV6}qqbeBF}F zW8#zKA}WBc=^+>%JWNPPfCI2$uen!2T+cJsBphzMg%w_P-eIu2Nzh>YX>$&=LkeVU zui=#A-t9~@IfgtLg@8l+=Sm6iKEA0>$9j-hI^xZ>|C0pw5Kt08YW@{R9{Mp#m}L-J zN`j!!sXyo}PrE|#^ot{#+g*Se!1%>k`RgeU7WayA@9N6a&}!iRp@B#RRQ;kvcpwdN2YmyOk?vg@lN^v4#HWSJGq()vs6(!)7}6mq>$f=d^pX` zmEM9nQ)&F|$CX&R@#-H{lvk8~L^^G#-@~~Yl9R>pYHW`@BX;n9?a#Us^t5`@S1bPtj_}?g@Us z?y1P^G=(apQbyX_T|kel2Gb*R&7 z{1SNh5K2SCg6@HCrF~{&>3&%=sCsp6@Z48c;YBvNP3OGY)rL#5?s1veQHQDT-y@hv zWhUmCttV!-0IFR?OPbg1v#tG{&o2jP5MMpx^2npozrzoH!jg#g!|t;qBzOc;jNGG# zRiG`;K~M4@FNu^>jYAi8ulxE$zE~&sJ-gPTzHjQd{AGY}E5K(8c|pw83A-CS{`m`f zM6SXFY07O+KU3SOUPS-E^=$p9{eLcXx}PqGHem9Ey{xGhV0VeHx=bDt5HA(%4OoAp z)|5R%#GXs?Tb}R31c@r-A9$M7?J_eg88ans@#s#~<4)SC#y}*O&mTG}X(Y1K4>L5D z{w{_9(vZ&hmHe)8e4%sonB&N@B<+q-L#_aWEmG zz`+w$ZkBCt_}aP+5#`Uhxy4h`bpnX~C92;7u%BZULSg?_*H5dTp=!+jLH`@7C|cOn z&l5?BHnBQp>y~`-uZPueZKz{F5ja>o+BcUxpCv@P;-tF~fQ^!4*JRVLL{$;byQV-> zQdZvgqDmthsT+bQ+J>N_$nb>P@nnY2N8enPw`sY>4Wg}{z~@5(8P*u;(8g+jun&h8cz z4NI`w(E@+v2PDO3MEx@qY})qt%U@+H6$*dJNRID$sgPq;g|hzbwI7+6HbCE{Kk2u} z^n1Hr57YM`fFBot5MF_?VgfP2Yb81dAobkQ+$8nv(H&^Nu4=O5LHer%acXIcWy}j6mY^O&#}D8vEODQZ z-RLTI56j)uo3(9=ze2*JXk!pUPiD^R<#Fn7*b|faigv#z+F9?W#7(v>0%zwmC%8kq zgN?+oJa?CuH09?TN0hQZ>&Y)g< za+Bswp=<@=BFZcL=qW5dLXX0n(a8o|#ug}k(~#|kO?&i@Z6+J$iZELnvXBU}n7U+n zLJV}|sBeA&qu{)Kq88kOd%e|cb+|_O`&KuXizKi^PD@eJ`L+uSA<{tAL*)&avLR}u z8>K(Y;%3=M%9Rol^%J~y8U1(kTPWmhA*yC;d|i*f9}GzX8~R>7Z@khq54`b3U(|+e zMs9S~iQ<-QJ*S={pRm;TaDkE*Kglt6bMDRq!?A|a=AGRus+OZ?iPR|TE0ipHy*GT* z<;*n=Q^EX>A?u!k^K_s9x8nQ*U*7&BCc%0WGe_@s!qmkV^$(#E$gg|*(`zYG`RUYF z`3y%2QUdGxZS%}Af6@b}PmXSIg=%=lz@3)_Oij|of6Org)B=T&A|kc~O4eOOZOY6< zPq;&l=cj^`AFe9=mOlBe&3u>*^6cQ?u(ro=3CzF0KaAu3TowlWOA>LLlKuFSRK+YV zQ$|^2DgUah^_FVc*u?5V*ygUI$N%z>EACG-E|9-#UTHmh>f*hci!vbCRl%uo%Y0Jw zIJb^e+$k+ZCn=pD2x=Xwz26dQv_j0!BJZ>~u<>}EqngU(?RaDj+nx7HWkT1skBRM3 zs&7u^`eLE)p-BP1_r+*myP}J@Nk6kyiD(bGbQ?O8r68Slxdui}H@2DM_iaWHtv2#A z$uCMVh+4*a;Qyg^q^MVTz>_PcXn7P%Yq1nu6aI-F%0{_S?(f}bHOd>{c}nsXtbFao zeEdil+f`Df;!2O#eN|w~LVU090MFrl^Cdgb{)g~E=F$Z?Ah4aBVfFE#|EhGsah+Hm zJh{+V;`$tgo#Q=-!_vt=!zQI5xhZ_nl7OiEW;Q_c9qU``-ZAUMpJM~F-2qEpEL-i% zL97vGVM;?JN9q9Y$KMxZpa^?k{gyWQ>*+BdWJ0x>mskW6kbGD6TYUy+v zXa@I;I}-K)lB=u9KroF7aP5pC%1m=?&N_d1Rc#)qeIqL|^}yG`K1=WQ0kYR!+050X z_BNt7uv0UX7AF~Z^$xGvZ7s`Glr$#ns{3_gc;}|5;h$6Xssm~Cj7@krG}@(Wk7Nzb zC?q5PE&-X%uuc20 z(FH8bsDYG*N6L5E!9#;nB0prl2u#-saB?yhwZC8jeA;;MQA>&wRO&`TvxBGGb<8kl zSqeXo6!}+F#w${w2oW4WE%sP&f=LqwpqhN{EG&BX;U)9I2x*%N%8$D!8+zl)O5=ig zplnkBW^TOZ0e|c$L;~wjFDsRtC)R`2G;h?clyka9U6acQ!2(7!rev@zr5A+&zn_PI z^ZUh1$NtmtmA(&Yr|(u4-&5Fy^0b1#S5R!uL^Msv)V_?tJ62X4%m&G!rn1%2^^e?{ z4+ibUkKDDLAy^HvVh7YG662MVrFIJJw5U=*1x^)F?7(j)pm&85!}2*PJhYqu=9+BM zF2zpObI*B^LYU~KXU(Y)qfcnArt>ImDV05|^{8&$1utT!+0P*%?5lI*zr`QvXYEg$ zRz@T4glmVyJ}!JZTf)m{P2i&#K=he!;Vntyq^MA}9ul_AV? zA7H2X{`_Y>FVj02;mQtR0kA2(ruBY1>q*nW?4!nLahPAdBj+CDq z!;72#gu+zgmZOywLoa+&b{5?PAc`Qzg4LWnP>m{DYW;!XBve=(p#xf}CN56$4d0HS z18-D#5WX**klf(fzoatOG{skIdtnyg4d&r%E^d|7W z<;dJlJQ^MB>QPm)_V3H`*kj)J?0t}*UA&DkJ1YvGay%{%_G@_xJ1b;{!0j0Z-zt0E zBK;+ycuF@Ub)ysx~78E3fO#}~*(|C^g zR@*MY&+Csj&ePl~iL%&cKaK)Qlx`{&o6R=7*oF`ke_LxVRAn_!fXAcLv8@SI+qI(V zPL|O1=89nq4H~XqF|3OhVBt~OvTg3#?B^O-Z$h=Sn&iXiy@G>78q-j$3`C^l7~ZmG z`c!rwAb{)dY?2o)9FRLAQ4g#%UnME)H16>IX2WUCp8gorsLRWd@wD#!K6qAc62?xB7C5iZs({y zZ3~%fyc|rrYeSlu2>a)wb$wF`6`3^I6yCqnvvKwY^v!p88?xxwaCkJEd>Ppl1yt4G zs>=BZFf23C%gwjb{QLxs5m>^e#tN}b?y0Ei7*`LOibgf zzUye%zdZ`hjj zH@LX7u0qX6=DjH348u?b3y}Pq((twA2DVXck18CHApQ11x7+QshcbSq>ur~sKl$EL%Ne=t)M7m z4(Y4BZ~aQgd&5RdTL>^Y@P>T zj02)D80Z@S@?j7KeBuIVc9AjXayQn|Gg21+vy0!mNo`P3{YzuP-Ou?L4H%WVPZjRr zUl~(a`ze@4c(;~5p>~NRBaU@l|CF}?tht$dIM#}aUuOx8T%SuFoP`v8hmh5o;ESMt zf4cm6oyqK9$qIB*=92FpRsrFX)DKEDUoCTQ8x#%&4k3GbTmGzS+-v=)7@!}Zicant zoZ*x^ylF@JC-v%o_7{IMOGOeL@whu%-7iHObn zQnXUaMx}3THFxZ^6HcwAQ3H0fy0nkQGt6Q;8a;%=f{BW*&b_c}qbt?ZWK4%^+7R&} zO~39ARIePjc0fK++4)9ZE!;;cN#l)J)EtdsMbzw*q)Upc#Kf1*O&N})f0DTjL=#<= z)qe=D5K38J$$M|V?C;Zf;%{1n)L#3rx=QRRshel(&8pi+D@BjHH$ z(kb_D8Md$ws}W|Ayh3!im;|*X`Q6{b9~_1}1geQdGi>Rx-c%_nZ6b~zvgLJ@~>km%D3c1`&fLWDShBK#K4x0x|XZ1OaeR{^TgUk*ZZ;9i!|})fa&3-z76p`Bi6ad{xc2NK7Q0rpKd8k+QHKfiP-!H| zgr}2b0XB*d$wQEKqx&)%#yHX90iU%((z1gKj!gLxUZTMR4g+a(?9?e83`sLRM>ugB zgJ|go#2>ShX_4ha#l@&%H8ew7gZM?XpnV%W$z4n z=XbeEHL5xmwXFQ{2u;#ybF}y4^178bx?ct>I(q!Y9QS%fJOO2hvdLDa&Ck3)YuhYb zQ>W$0nt#2k5DCqcXlEt^Z^_QHbMCRV&KwpK?iD266mW5yY8P4UC-YXzYz#I&$CYrj zRc`Wca82GzAy!AGD(=Va;iH|=r--_k6fK3kA$pfiyFMrOcgW%pd0U0;eDZd&r0U2F zWeL+TlDe^Nh);)D2BkK1A%*UT?a8wrEf4n494+&!`8A<{2L7iV)-R9WOcqhG9V8fg4?!2_jstwCe?Y`j$7HuObV@-6~%Hq!P+p~SsXfX-$tl?)w86W&ViBie`c-mqd*9*3K zOTzD1fy61}d;9^w`}t?rJA-s>Q%~i7vfXaS;Va9JDSe)TdBSe=Qj}9UDUXKk?r`Un zYX+KX`F)w}z<9Wou1()KA}_eLvU!Vbv|L0U1gNWfnix3MC!}7_-jW6d#;NPSY*}$t z=H=bE2qt?Q=~RKnHzVf~_}?ZoOgRq3ue5RP%8*gI~bJ$7|q(?zt?U zs-&6)_wj^_>*F<(bGHX{`mS#p!{NnuT}{%_p9da?x*ZG*+@O>Zn~d`vtkJJ;LmhWU z&)V&bTNOdyG@|ojp*dwAwsAxGL(~d7`FLGXT--G=nf;>#6YzJ(9@wW_Nf4>|Iykk5 zm8Matg>R_={M;MJ)%>5BMDD!OP9r>KC#(r9Y@dFPw7={UWkduLgNtT=-v|JoulEPf zxeqs_61D>;J`ET)E-z6s8bWr-tQ_BKXP>nVO689#yZ)vL0Vs62N8kn(>u_&uKL*r~ z4v=GCISlKtDdj=CG8;dkmn+Os9v+}HrdM%R(87WNQO~pd{ih#VJ4ekbe-?aA^>5oh zYS*7a2OOv@yf5rNUyhGN?!UY43YTZI*=r(0i&iwPT2ngPx`7)0vX65yJA{V`BzXP z@L$Y`{0_2CmSUvN!>@R5d1rI*XU*|%%+y^x)l-P{{zj^M?P)43e4RLI{KO8$r{1&i zNN3UFOBi8qJ6M!_DC-}+Z_#JXfqcX6(h|nC9rpvMTXdzs(k908Gk38Tw}UJn@gz#C zi-{O`6U=Z7i2SsGlTjfTT_PO((FkhT(Lib$oeMsEk}k-h@_2lQYh+yM;+I7wUuK*WmrXE5_BT>dir z)Xl_osQx6pXcLA0w3K5MHZl;BMd?0D<0C-h>MQybmt;-oQ+$b*zU+wq8>JFNUqhHx zsb;l>pU4$4xquzMa1oEKrmj*$v(0Y{TkR!T6_L0Bc_LsigNwQ183%t2m$%l?-3Lhx z^d0gV&YOJ3MuYNtJ!G5U{c#5~I7Ob&59*rNUw`GAw|3WEsQWzHVBdaVczX%{8=d%b z$a{O7KIZM2h@b9g4cv<>vET~gPN4q(;2s7RWb3bK{&C`-FOQ9&cds~oq}wxLKmO4g zsFw$#|0G41o&WzJ=-vO!AI|T;tHa)3B`;p=+e;p<$hVg=|C(N*{;zWVuLLCgl)(%cAJ&g` zSojaPRDs#S)?x=GMWt4%YDyh66;y^uYZy$3*x;ys3JNY{z4oW73Kr2-eybjtR1Vdy2C}s#tK$KBbuee2m0}4F8 z4mdm%rf_4QxPheuiVL<5I2j}+hqXWtyj85<$5X=C{ zUU4Bf2NV(z9q@18FuAV=#O+=j;s^M34lt20UrGkVw+(Eor5$`Om3B4alda4@$3RRCimc& ztE;`@YSa$#yHGkNvEMMW+y}&u8ysfiDRf-WpfT}HT@|~KDhh-8_6(AH#Yc$nRbKjN z{u($?YmnoE*Z8Y~VwM^6QX%%y0Dlc^_`j0DSN};;_wSHYsX+x`{-?^S2r=8fmnI-e zMF?N)KH%?`ur|rp%KN2&uayy+_<6^$R`m01R+5&d`%bNnqAnkN=eP9Cz-Q{ z+794@ac7g37PUaaI1R8Rxig0J6{2}J)}8UEVEggOHoWtQ6k5ie^ou|wg2GH`Xsr>> z{0Q;_8kkN07V}*C%9W>la~JR}X&>;C`^`n2Rcb+xf2fcLGNWKpRY~)BqX^=c*_5PI zXL?<+Z@3WN``rnM_DYVUQf#R@y9ul?V`lsi^HV}D6rm`N{=T({MO2x>v@a!9LwRaF z0@%;0_K=a6#AFO-XWwh?=%x!x~}@2lc8ow-I`*#}dX9j3Ax)Ss%0f zU1MqGOcZWtuh+oFXuMPEn9&KcIF?p!smMg6I_zgYY6zQ_w1rs|enbjwFP?q&I= z*|87?>_iw+seBSLUkYeUV)ShkXpv;+Zsb6p&*ZYd3U>qphp(Qf*LZo=VXKc02`_u! zLqM_HV#5re?HLmRR*)}a@jYN9ZT9=@zbnLB*YvrulxvN$BNtKelQwl<;&^e>@^lZe zHvzq>R0w#GQ{peaR+C)!)gjl_f#sox4gF1K^e00=zOn1l(rZ`DC4-5+FR8xMQUdg3 zX-b3D#SugO%nz%SSDS`B$Os7a50S;CDeVf45QZE7K^GK-l9)VkhCw&PH*33QZwZErFHU)7WQ)NbI)Fo79niyS@ zh6QG@%n0#`C+a9uxEU$5o|e7@13>B&R?A{3Ze$iIV;YpeovharYqH!x^$8h|!6 zN5MQ})iz>BKU>KJ58M#<@X8xf$;g9`Dv5Fi4>kHWW4{Gg=v%Sg%wETwbBmZ=q)l`IPKUr^1Ra{XgQ|N-^p?*}&Ombi8DS&zyFf2f_$+ALV11@B&ZWYDW zB$j2G409Sk=;}ACS^Gb}RJ8}wX_dg2wR5Hj)b8Q^{iyn_&MFH$Hv7V4qFGNUt&pA7l^NORYGHiEm+GhI!y zhdf#@!;v5wFf-KDgxK{gF35}K-jJeVKhs8M6rXU(vCPxGjP5gmPjh3&ycj^DA;pxB zRF8Ib9!nj@OoMo(tm-y#thePdl>=II-IEzI&DT=jxfK~qu#Rh5T~LN_R+ zkEESbyWG9{3Tp+170n>&dz3{d3k#o4l{%**Pwep=ne=K*Eu|p&&G*Y>?6DD1He(&k zeyei{avDYgprE%9A;si>LMTIud!( zxhq*-N9a40?s!~ELG2;6_Ms=kw_K{#g;H|sS+-9hT#?S=b=Mhdcpnm9lyvvz@5EQ# z$eD_%DVbeOi49NHmq25enF<`2VZvpikZ0e_hE=!&j=CD$aNyjgbIi5pC9sW5w?xF53CS8M|rglF3F%Le@_3k&52 zCHyomtiHJj3&!oKu*(7E$zU-OUbu|oPR}Y>@#c7u_K*%8d)dy;lPT+>7*CP>Oy;IO zIk;)~&8g~ap{18#4Up!OnYXUZJ1u6f#YiNR4K8u{H7>2H%{1?nxO7#JEbW^rysW=~ zKuA{;1rJ(J2 z{pw!~w^=v~c5>FJPyoGrp&8dli@}Fw+f~AnuKN|CZ&yqsr9nN(Jfx?Tm7c$@Z%Szm&VCyYqd~$x1gNjc#d^Ly!-kJw_Tu}l*;IZTo0(10;oOEZVNXtPeT1kWasBF>V05HVpAadf zF14#RP`&Fk;Wp2lIfXQ3;a8=o^ab6jKN=bBuJ1*JuN01rmq*R zC#Ss>$oW`+69O@jna=K-Zf{^wLj@P&tAGtD*WYBnRyo?5EzwCV#l4R>uZDxAPURBF z!^ow)s-!wY%AR+S+-_1~>NqRTKik9<>kTl>QnfO(2AfxIP9;7*WexA!EbIGY=^ko< z0^D3yTDWuYADXrvv1hoR6)0Jw)^LgaNlRDsTs4R_ASXtD>scjjVlCLRuv+wKdsZr) z@GT+UAHsiJhHW|Y+AO&_#Df@WQ*@2~?c8KwPeCh^AWymCz@w$7zw&N_ZkhJ81_ywP zQeClFQ9qsCmzsa)C|u`6&tm>0 z?-Gwx}LXzkgIpIrtdi)*`b#taR81OH)lB4QN?=-ANQJkKVX%Vf5z zzktfoby=D|y5IY+LcZKP@dgRb$G(Wq3S>@Cgq$jb2wA@pB>4sfYYN_qIZT`*Q3jqR1{+`(DtH8V>>S}5m zRus~~{T#n2`%yvy7xP7xUwb+V=3j(dZ~Vw++0(xCLkX8@lKvFMmt5_~Dz5d;ee2)3 zStxhcghK1BrBm6qRa>6$rQf|N_rrkh-k9lmLye6=In}xvqvXCbd`K^#!Yz|?=h1;) zbCHKF3{sMBx&7XqY;m8lm9xlR`DfQs(Y8G7jnWngb4WMJqNuw|h)&?EbRsqas=Fz#|bg{4)8 zX4G!treTYj1UEf*7o2ih6-c{%!>z6MUGLx_%SdO@m+PD^H?4hD8VQK|j{Ss@K*T{O z<|_8)kf1GOG|sQq!B7PA*kNXo%~jB8{^B(pHdEJ^OPsqY8ARxMtNU&x6mKNy=K*bz zRbc3NoH!?Q$)Sq?2FdSiHnnOof=lv|5zfB@aAz4l@$jP+Nn0baDL#zIp4>9koOR!vARKU*lH! zY=QbtkVPXKpQbxhto4Te7>{eFa9pwISGmHmn#$IObOe0{Tf3~NGIkabe2$Os_MvCM zEH6Dc<=wj)P*X@B84%(8N4N*?H@%oEaF=9!2cw&G$#8Ft5?JuP^xCS)v@U(1Vx{Wa z`1Xze=Q3So9MX3pG9EK2wI7lynn(p+GnPqKs9yF-Iclu=13r7c_=w|;IcsGZ6LMfo_*niN z1pc{iGoHMldkD&_dtz*B8;iqa$~|{>~J-Z%MH9G z7^s;Ixk4RBrs!cH>}Bk@^-5Yzw74YCAVa6O0b?07QdEpIC+D(4dTZw=gT3tnmFBoO z%FXt0r!(iie(_!Ee_}hT^MZ5AV^w{BYHs{~f_&2Q3!tfT1L5QFHkX3*W&OizQ`I@) z$D}^d{05`ve*iW#+V~AbL;m>ClesHvI?Dd+)%gDbUO=J0o4s0_H^Slby+47!ALG-L zf6<@A{XP1B`}Cju=YR3zbAEizk6-=kDgSwnj|b16KZie$pzt35eM*16dd`o3-={zS zqM9Ea{4dIUxX+KzpW)+I`}+s@`1D^?)$_0U?enLH^!W5SKR$o{^r2@AZ<(W@`-TiP zAGfXKN3X>KunNMdZ8hemDZ9-n=F#lf+E?%&7TyKe+AZufY5v~zk4|C^my zgt{l@C%av}G0b*Z0hj$?U)-Z@Gk@Nj@#kNjRo7)xS66aB?>O03@M^S>HDbQ!@_*{g z!&yVQ&3wlNKj?zoPLJl|L0Y21e{kXNbm50rZCR{Csun_Mm~fv&E~MLvUnYWSyaUDHuB z0nbB6{O?oq%g{$3PA{AKsyIFd5qq}l2O-R~xXi1rzWTl0km0)#AuA>i&ww>YQ&~gW_7NGrmz7`^#MWL88?KrE~@0$#5LPUR}$0K8YoDO`&y7cdJ)|B~|4p5ImRyf09Mz6(tz9i$vPO)Xo@W<7lywv#uN( z#fj+`4*1*R90AgzIwW-jED&+8LBRZi#uRZakdjW`g=^J2URtA_w%B~mUpqlK&@4nN z^iDmg{RXO4jIIZENWUJH+ij|#6rpv0^>)bp9Wli^VeXX6P`)#*)f<{=f74Nwr8KcE zc6Y@%Yl2h?^Sc5s)^)k2xT>#L^BI3tm>{jk7M8UkrZ8bSX+`BXFeC5?|nF(j?U2C$%titZ2VBz;q_a6PFsCh*a3_StJD2Cu4~MR7K(AcWpT80%7=p!+UbjU>P4P1rKwGB zTI&>(ixRaEi$6Gr$arwV^s=1Kn!>u*h*h7v*%vdvVlE21Qp^dgiK7b4H)R_}eo=GU zd3C5$b@ub>H5~y4YC5mpp&Igk#jO7d1axV>UM6%PHSVIH&QU?_dGzvy9Gv?f0P)<} zP3rU}zp-4H6Uz2o2NZc4r@pOgtR5J!r3CiPVSRPw>h=W==QWbWDD|~#olT=N!SfvL zMP&?H^#XC&`>ifpGCY2R`n}6~4#!SgC*ItP_&`e_`y5Ns>oLZ&!*?Tpw-Sd9g8SpT zHbW8#1{>B64$uUqZP&fU49DnO+ABGMs91-PRxfFg@ZB?L?Ep=Tl+rmA6o6heo#>?*wQ{fZPkuKcYg-@WD!S*YB0=*2jci|J@Wwe+J zpTG^$n+2zhKtyE~u*S|WuZv+%8CY~jAQuBoCLINkT-H@wmglT4Syuix-(2v|y6FV! zgRIX7u|C4dzb!x_7{5&}3R9Q?-sEiF%|`V%YL%;_rWe(%IpJ`BgATh>E21h7|4X*u zr}Y`gpzTd5BKtJQ=JOC_{NOsBS+@nYLmcyKI}YxxtkFl_a7eG^e8jNO43V3Z&>m#` z!mAU+i?R0#r{OGxvAs!i0>hV@GjF2pHrozuHv5JzeQ$Fkc zyuLal?U_gjZ^^WOlZR1E>QWOcjwi`a6RR1-36EWBx-<*9ba3|KaeQ4lf232A5oO^V|ZAwB9)dSnMOy~v0I@Q zdf^>OZ-Y^Z?r=F-m%J$^PSWDH*;zo%w>r^SJMun!Ssdhlk!4f1&pyG4wJpy`>I$lb z&y}s%Y{V{HIO#W7Lgc|gd&kPI2N0)~2lA)FOI_jQ@Jb5p4>kp@r{Sktj(oM+ItVNt z@{#7s{0%G8gxd|H`b-DkV7Qau{JS+>tsaG+iKxzMWrqi)-@v+eE7<0TcuTrT`+yoe zt-0$d>rAA7kWhrPowU}(BD0$M2ZKk1q?Qv!B4AeT#gZtFdl}#7=)CH9*}qc|ZXfT_ zZg7v%n}R+ z39-foojE{0NHnb@c<+#^QCe((;J@Sosa8;h8dyuad{hx8E~`~=6WLgjF{!dJ-GPhc>y+yE{1eu{AK(Vlx z?hDL+@r^#6Bgg4;p`3>`-%n9;7T;8!|e!tlNb?Fb%JlZg6% zVa(Zy!wiIt)7h@vr%kot&8bx34NGj>%XQXGib?;B`>wbb%EPvZW7(j12<`gP2B|^? zqSR+<%zn_~nG~N;Nsej>OD1M)lP-g$>w8#D?$`%MCwH5W>>c!3N9XQc$e2X0gHCjR zU7?W)Fs)3cz-C?sd=$6*Df5H;DE?^pJCqD1z+b3HCsXw4j9S&8f@S|VdXTK zoAY;JeovD&j5X4&!XwhC$@#o?RIEmS#)*@GM-84q>kSDf5eH5JzsG?nx)ma!KA_LN_X@2en^n(#o@$xuuV7x-h0+OsgKN{s zb}^75Xowm1h^e+`YOqXta!SP^R-6~U)@x^OHKoTRd~@%}sAc8sg)40@ z+#FTjUikBQQ(tA6upaJi&E3_18?(aA*tlKQLf?U$a!vKx=}NBM44;Mso`oL4NZ zA1PJmQ5Fb4FOA7>$~S-wJI)GHVVkG)?M%)IWDA%3O7d zQHg40YCTONo>)N5tJUwtICnb0GQmXC(Kn6v+{-`wQNDs&D6(E(@n76?}5 zPD3S5rBZO5;jv$G)hbtgqTw-juxn0NRKhZwl(6}-l5DLpH~yQSs8ivKVbOpf%H-Qy zuy2ev(?r8}%X8iq$rJW}GckfLKcpGo93-hLj- zcl_^jI2H3GOd6*eY1SzFnu@v9davoy9{%_5+d;M-^a)8-`w&= z2Z7yG*||NBuY;nY_68hc5cH~05-;L5vUh;1@J$g&2G6asGn@%%l zJVL(Z-jx{5Hxa1vhja~>QY2^-R>`!=jg2ksHjIi4@ROELpO3VSZt9~1JP6;&p`Fam zcu-xCfG#8@x`Q7Gxt9TiS?wHDiXHjjXUR73gKl7Ki-yL6%8Y4%5Fw-!upbLmJ(g$w zGG4pjO#fMbnD717{&&u9#Qfn>J^lC@?LyQGWzh1S_50aR$KQpDQSZ89wOv-b<+WX6 z+LELU@x9SLOBR40il(s3Lb%;;(xez;KOO(sw@~_x-3*hTfro#itM#Gxl6P++o6Yl=sJnGNt{)i;@M8$>A~+KJVryS zU!__brC;Fat+Vi@9lW0l0~^w7f4`CD9GG8J1nsy3G#|f8hFLwO3n4k*V#rSnX=*)L zzd={lU!2A@`L!^g(K{`lc144HpDeM>z~tMuKoz?O>HqTxzNmCLzWQML-ER0XzN`FB zY^&6N7f_rbV&c8PLfX^`p2YidO4OPbSE$g&LMiOW)hcm&Zy&k?b8EIDFXa0+jt7|= zi2DF-vd2iVTrZT_NLeWVaB>iLj`R-{+&U0jEp-q1Ep3I081$=Jt=!G&^QQi@s3@(A zu6jjqBz$#NHV2oGoxZ>-i2+w=X_>T6=B&_vbPt}9%;Z`T&;^PBlppvEMe~9ALQRX+ zh)e0RSGt7qSOH#y7kClWvDIb518XnyFE-g~Fgd{~9g=OG^QBdn9&i8eK`>8iZaDF7 znOTvl@=nLSbyxXnQ+XQ(05L){iw6^AHZ}UdRA$O@37n$EdK(cm)mgLYdcK$e%8Uk=K?>Y3khFpt7tw-Ywp6(Rdpmx$QI$5Asv3K}9 zceY3R#=h+MdcxXB(oxMU&D@+*o2GnLmvaE(gxa9k75)}<=Bi7k7tU}vbD8AWYcoyPs8F8dZeFmHS(UWCS!@!2L>Ou= ziWy9^Oq ziL6&Exr(L7t^Ki-COeuK60r|2~|5kR>bz*^VA*%Wlf{XnqozPAt>OQp?3ffV7cJyTold z*q2F;-v=TB=bqE!?Oj;eNBiN*hZ5)Emc_4f6);-oWUaZogktn7HOmnh)uG(L%SF~@ zYnHG(OKc(4IT@^nkpaS3U4g*NEASH46KOU@g4Ap6aLwGjENK!xL!!HXPiU`5&-i#Elr?2NwGYn>K2NnOKv6zepw%ofBuTdq#N+JcU5d7j8_#_O6UF4{|eT}z}0;bUfmb>Ab@CVF~kC46t}_a{Mxt78pWc90`>Lo zu5H|osTVD&&hT<6IPKqm>KCwOLF)8(0shTVej?bDHadXSzo7886**Bk^&+xNG(psg zPimsoF#3<(qsVjSMX)xf>$T(NN^>&zQ?>>2`IbW@5wU0;>#jbpdzM?pz1EeaV0SSa zkp18UMTT{G*EQ`x(g=}Mbh;2<{o2&lm^+y3pjhoqs>4js?VN9aY;|%@6{i$MiN+nR z`0Q^>o`GA_wyTwOP^-&ZBf{#aMLZPzc-gQRPhaxmuS0=7LEg8oid@*Kp(fQY24-{>C%}Nz=rNb0QK}`C!&K> zV50s_JvG_87Lg%{6zBsas3kI31EK~EA z?v`W{F$9cD!hzd{bAWwz;{>TS8VR^Hblq8fq*9MZHdFCwO_tQ8l06t6$56-x`PrI| zIEgzP`@5jkf?4hfheyRpMzUmRwhD9S48nr3+X6B*$gcaiA>D?(y+A9dbi#5&Rye$2 zf++fQJ207lLzc>Di`}3&Bjo@szc^=UU`KwKO8{Kv~LqokQjUy z9A98f;Sh)%BXoj?r6!Kui6D}TO@Td<;1Lgw1!b!4Jnw@0+wlFq#8dP>RPG+=@1Uyz zUCM^HVn^(Y>>@9LXwg_E;-+#+{&zWCcZAyGpHp#^)}F2D`#uV}7mFarCqn6PD>bZwHY& zY9^Ss^I@rUwYr8ntYt^hlY5K4ATLQ|Eiks)oz?33NTKwAaMuF2o)j3>7!z7nRmp=D zKk)LFDx}DAc;MbG%+^7Qwp89P z&WT>qwojdPcdMoa73y}AYQlPric~d!DFJM%LHg9G`{bA|^sLY9dDNdz>5{gI1Y;{3 zgx5`RzK@-liHYW=ad#^pyWYLGOZx0Rf*orql-Io}0^f9X414Sk=3PoAiCr2QO4jPv zgcu6`N;4&-H_D7qnSVMChF*`}8@8Mromlf=RHA0}ded@!t(c<6c>L_nSk*dzzLfA{ z%qGPR>7Bz_1%mJz=_#3QgaJJ2zBr0OPLz~NmK5mDi39Ee;htAvAb54`*l`onpg)** zL$NnI8^H0DKMlWmG-SAWhYT7X9D`PY)CA@jW;)6ILzgN@vj5P>!TP13CqoUAQc9C17 z?eQ%IB060X4%Q?RTt$%ytPlpSDKF46N!D0qv)0Zz$>&LRe9tCXj!w~kYQCHov()O| zx8~zvbP;7oT@B%llzq?*K@OP<0F}FFM)oGo*=$zr;RTkcndU@1KQqz`%9jztbEJGK z^5<%WN}7?9h>d+E3yA4T>XL_nEpBaS2UQcwnc-eH%Zw9=HWvcM<1_D9Rpo7rt4{clY}+MAPm)NhoF4s z^5Oy~?X6MPa!+F_Zjpk~`dWbnuYn#u(>|=UVP9Im1B8f=(3c5+$$JnCM=4Bu@A1(2 z)WLxU;xb*(ek_W`<9T^qgkBKim)N#~;@c$+%2*_UZ)!p80;8(>d`b!+E<@;;OgKJN zaH`1)!%tba_KJRLSXp7Regm0kv_o)ztO;6(6!WXh;`P9aG|#s$Tu$EuGn3Cu^@P9tFMA9aY^4 zXrEB?tx!w6m0MNxYSnI55^uFWTTnjy3JEO{$N?tdrN%v_+yMz%2*nFTouqUXp?#N!%FuA(sr zOzP9mXqSHA?PqLAFtM1o{5a@3yuceuyneC4wfD#TV|s1{!G#rVtt;Ho;>1P@h+8q9 zAI*gPyeN{HxrS8-t5;0s7?Mx$naMlq=|moffB z7qjvj7>L||x=}k}6sLlOjI1`PHc_Om|H3rBd#FXUjlv!1gq##85kY|k5gW+n%)6gk zP^ZQxMBf^dzV8)-IHM*|J<5jIH$TETSwlUisfp=wFglg0WRh41zy^dv5c-?z;j=>i_&ZF^i3wQ-4mJvUeJmSi8a7hyB^%`bEhpiCCg zS7PLrL#b zI4K9XMx-&T)ua7=>1xN{4r@5St7+$7(zI&}^6S5Vz)l`g)HQMvjBDoW16H%J670ES zeh=b9aCELE*Bp1O?E{MzrjCIaKO>)i&M=x3Nh@exE_^V9LvMbOm1{V=CJV>C?7c}& zw~9A-=z_7#M^_+DhcMF{&wB-D4v8`)k?e)nJ`Cr#?GJn#OB4uePI&LtVu^A2fS22g znJ&7RNxl87l&0@!4`^0MC7r%+aTa5ErQ3!T;ElvtKK(dGi^)lJ7myF%5$2A6Gqq`! z2UIVzG_T$L@loqE;yH+G{zbb6rfx4YbEf@$+>3anG^0@TXOW~%g99eaZ+Mqx9K5K9 zihw?>Ru$Td2L?HERF$oKm@Hx8K+_GI5CfTn!z4bp{CuGNaMzGr3R`wv8`;j}^Zst= zEIxAN#A1hK>iV;^98Yy%>6<=($EGjSsk5zxgU}pWh$kDlWq}3HgAvTs(=M4B`@&!z zKG+T9;TK~i`cXt)ln|$|%WA|ES=eUs2~@dCo{vtasDOi(F9v;jQ0ujT(Kwg0t!dM~ zF$zdBP8zT)4~nI9n7sC_;@mT50pa`*`N!108DE0HaD8+sqXtcw!9&!43JZDy6I_}Z z6BNM-w)=v^9_McJj?{;gN5K%H8SPTAXl!q@q$vFCK)1rmVg z5!vuU-~9-o>&9v|*BY#U1)^PDFN-}VFYFy}@6v%_H@Tf0Z{y>w+;`??5E;2OpHb_T zmBt;Cvzc*+DnxyonHC*ynnsyCW5rO1^qD{{ZTewr;+PLMYrs4WX2B6 zTlw|KpSr%qZ!zCm;<=0KinaohuM+**LeY#Xn_AN0RBIM;sY&L4gC*XEm@;ze6E~1N zI$Y$|_s;HJV&Fsh%69M|NH2(Zmq8VA7j@Zt&Wmkqj+tnNpN@Lh4WGpnIm42`F+$lo z9S=l3f7?y0B|70h4Pe>flJbaNWbpLuD(f`uGqDMt@AOZT|!s@DT{t(GK8s01&6Q|XOtMLQ5kSQse1lFvy6 z^1Xda416BD)GXx7xV3Cx8D|9nZan0DLoS9DQlTc=_prjQFJeETUU_tJ!hr#1fJDy3 z)I)EX8fKUbs=||0=aR>mgAB6zIXD?vj#;J|l9{z9uWa-5q%%M102&^DA+QQa5U{jp zUr})H)vAtvjFdTj(2U<2g<7Y4Sn&~rnD;bfs+1ZuMx9uoDD>x176*Tl#lc-RJaC9hmJ!hyJzBf?l!6?`5!_bfo$Tqv3w1U!I>wZ~y3X*C)<`(mM#l zLAIxF>4we914d*&+2~u=pPh}-6Bml1Bnt;RA%5R~neRID2V&3|n?YQ`2x4Mzy?oO} zO6T8PFMe|$(byCAwpF$3m(FsD@djs9ae_+6DP5d;owAEx+V`jYRhvWch3l~1`oK^F zEXIsAjqYVvdTrH&z8jEjw9bqjqcM*n!)U*Ag^q+u! z0xK|o%Q_H8*cu!m)C{BNFpOSoie-i3Dzc=m$tLRw$bxv}F05yGlOn|NW!_@YM2cq? zG1TIUB6X9l6b<=67ApiNz~0{hTkrhON_mr2ZsuzLGj{_?oWKDmP30HHXB}1b4TW&i zt=alR7=dJzU}7qq<#_p5VzMtQ{ERLztt1YAY!ShF(8$0r@Caep=kls}*X69a^E%a7 z{&tFF{uV}vRt|d3FU54U%IsKRGyI5wEKrRwqDB&`f4r~NY_EfVP^;pGHn)q^t%DpF zr`xI3Q4T9}#8FJcDd#jF^$9-!v+6OoY2}QXWfiX1&Ie<$1l*C%usv?rtA$&$)rm6NN0)pe^BjMIs`w0DSurT9m zN#zQ*$#O(4EnNs&luppeAeg-8BOB*6U^2x>cJcX~;+XLEJ$E~A5ieV%3zZljjtzx$ zKk6_W4Et2M5#r=#l1LO08%AVntDz@dpam|nO0T`E~rSQ|GV)+5fA0y;fj zRO%Qz6xNF<_ju0UFF{Bx*)xPwr$5E*5tDnP;g(2QY?q`1MYAAGxY_>2h0)FGf$T2v z%YF2(-DuKxIoZDU*m}Vx&_@w}=IXM_5mjQjz=fD7dt?&~2nQMLFNt6cl(TWTQVH;= zOYQvlbOb)Kb10j@g#uKYz?HYL7uk zl#lW#p%-I!5AMRax2MB8hxc}rYT=qpRDT;27CoQ?B&G^SJYdDqm@?yk=?$mfLNT%1 zlI?_KlwXp>u-OJiK(Qhrodge7_IVKmXlq^dXo!<7_6~%a6nPjn4#jaxwhQ`VTETpy zoWj9Cs@(&Fx)(lN6qQ|s;|8y=8ZVOlSS0f*CHobQvl$Flv+N6kc)amEB5+9dWQWcy z;UUt|EI8Ja%d6YO{bkC3cW?Gf{QzD>U9dff*jj#=d#Ovjhk>NbDYB%{1ATrrZdu3f#;^$(A&5BUtfW+7X^|litS6qkm9 z)K@E-oa1e2A3`R7c;Bs@ZRBgb@M441HKDZgWh%n8`+yL`V-ydJ*OXZE`)UBpCW<5i zc_#0&PZkrI+aRCDR-iG(WFyaT4Ito|HgPXbz5Bqua&Ooxhqvs`*8}pJ#{VU&M)+ES zn7`)pIzlogtmv$xs~!}5>@o??&cn!!@c`SErEV4MP#MdA`udALV0=ea7c- z7$uA)rKb)y6B|nF=p$dSVNY%Tp96Am2Tm2);yGQKa;J~5Fwt2+&Uhjnnocm?+c1iO%ly^n#lzk z7-pvxYIQW5d6#BEPWm|sov6crk`?TGSUajlERq6$3)J<}PngeiBd6*@PIaO2!=uxr z7Uc$)uv-9wIq-l&N_2;4$4>V-Ty({bMJ=VOKHbpxh*Y{DU8?9=-_5Lz z0S>G#%^qtIAeSM}&E0W1f?Aw*t~xoa3 zA=7#KMBCU$BEwUUF8LVEL+Q%T2B?O4N#gP1$ERp>5@i?o)37oA9uFixdT(XF)PdS5 zKi@+qC!$stF>2M;`XoZ&)GFrowe)u|w(aSE54k-hA(IYN+PIRvJ6SpNvfU|K?T|ea z{qkHLBP*c8gNyXi1o2=BF(j%2!y?OCVrkg-QYI$J{gGpksp$ZnXnkQ(*@Y*Y+z$`N z=*|1{=2jd=j^TxC_hla1I1aO%;e9kLBBEHJ!jLObwc>km|HZpSfDIqDh2rnthTpA! zBuXZKQLmCpo)D-O!x!09dVs`bYw;cM=Y}YExr5_CV2-t5H!Cwb-CWrWF07lIgphi8 z1J!Vs$p~N}O(!^+kR);+xvccj(oL=-&T2XzUG>XtHARBmbc$;X~BSy&HBmCsT^8GK#$GEO}zU zLP%b%$^pM-@1$jl@Ivr1A=gIbVT*obUOhsDEFyA!Oq_8wB1{HK*r_mxxQg6=!j~$c zw4xoICtq-eA0nECCX{}6IP`t(6bmiX9aw}g)?ci;*KsAF7-d)eZdriwAtD^A+zH(EM*Qgt3 z5IsnXf`O+4>>(!vj!xTRZVkGBH{a1Z1G_4ml5y-1xz%|yXSQPT&2(>cfyxI}a)jTe zRLc58l*H>mse^5Xgr>F@($%Em#|*(vc0za$G>wF}#kp4_#h0sc?;hP|+tdvfGezG4 zRuY3-W}h6YB<;K2EjdEBT$3f^kPt#A>jAqG7nrB7!0Ed)>zQDSsOYkPo+!+za!qF+ zq5%voGKJEl#xEMT(zTC!xS1_QkD``~f6ut*Jl)%s=*!g&z>44rc>s(hN1le*u*>RB zqY$l>Lp1QH2}Ou3{sjui&IQ@)f|21_Mq>}7C{^gRRauaXAP4GS4mbDV^Dw{;pEz(0 ztk;&B-kFuS)p|YNp!*0U`yEmJbsJSBVRnBIFgkSoj#IsSEW#ImjD0PFZuD+rIBCX$ zSHbO0rU!+(?Q-@|b*pmluDRYdALlIHF*1C9+AW9(fv zSZvr}7qzbf%7>VL4$OKO6IDN2UTU%1E2O((pAziRW{@|zkUWFYh>$e*_o)Gk&Ysw7bf0x-6ktxy6+$&!Zso*crrc?kPJO0r-RlaL(A1`*LI4zZC)i( zoo(ee9R^W#IW);P&>0&t-@z>zA_CDj8m+ zGO`N9gswc0_|lJP1s4M=Sk7wwMVvTyy5LYtI1B^(AE8E-@;O{WE{bH2P6|=sc$I8Q z6;Kj?t&WJ-o>2tWY&_aom4>1&TAveIG!Grq5RJbN3}=sh(aA1NW4tsnCa_LiaAc8# zm)wn$&YB!l6p^zcTLT#poN3!-UK7snKzod>H|St>ufH&=gmWIiU|%K*PKQ?^ z{Q8=Le?~xXrr;$*`})0AdPu}~R?>1vvJ>-vgFShCZ=tR-4&ivbjo?>%IRSKS8@tib zHi-@k+2^vF&X=Co&`H;; z?JsE#-q(j(C2Vs_GP~>qkj5!lckr(*RN+=+J$^ z0Hu3ekwwrNl@4J&vSh!ko-I|++K5|!$nd~QtJj7p$6d>uNt*TawCkOGI^9|i7fo+j z`Xw%V;3H{MbVv&suprombe^tH1ERBqfvKUh7=s}NiCw=8@29JzRFtzm50s z)UVOt5P)w%uB7WOLUf?LIyv6X&=HOv7}_DDtmFJ>dNN4{01)jVWO_2NzY$@7Z0chC zP196-F8Z6OGZ8i6+#lKQx84gtm$!~<5|H|jFw#~ zqxtzJZ>lVZeMi@n*<(Yn6S7>gr-k9l-ZC&?k$oyq1PIkUJ>5x!dJC zPnN`o=ksFrX1=^AD<4ZDeqqU{pt9O4)WTh%rs{|{-gx}<2qMdhgLabOcAtY0Uiwmd zChnIgMNoH?-B&u4pp|DeDS5QB2-=>-BdIR$2i64*SA1cm6HQPx8JYxtAK0*1+!bl4 zCbQ!=Nfai;&=qw+YkTHWm9wWo`9N;s1Cb5*m_8p>oG>9#a)T}GkUs|+n8w*}8 zg*T|b`$r~~Jo447@Ax!-eDJx{p3nIjRehY4x!JQ0Du7l(ceG32qtQP{2Y)}_rj7bc zk{5{t_%RX$C^f&USA^(huzC>AbHih8+5!W#q7Z$7dS)#2bkHT#2cZx&x&G1#mc#FH z5ZdGIvt`#QGjLf-6qkrvQOxeG^>~}xJ&0$4H34s&e*B_}1mSLfLp@i^FKZ6o_0)s4 ztj$X``gCK6(q>8E-)7e27Z>!aT@>>f{D9b;2~x)&r4b(dv!G@ zP0Fi*>2izpNku+$u#fY3JG|c~?q$|%=3vM40KCBZCmodR8e9}>^IUZR$b5Zs4urY| z=2%pQ&=O6)?CSG>db(`s7j)>>$gI)X1w;YDPi*RW3-ST1<%Z-0l1k;T%`cBMS@yxM zC47dH|Ez4WCo@x2{1*WOsu~t?iS)@_ma`dN)57-aislNA(U1rmwdqXRUgZl@cEuGP z^3A-i7v>5+Q7&NK_@h;Q*%asS2X;^SCy?N}z06TZ7jgRj5-`r)T}S;3++Z#QyBS`!0HfII;ncga7Z z9WFHvm0&b~fPM21IE;L|nH|5a*hq}C|I@gDjU;cc&6CYVV<{f-n1<9F%KH4LVZ6E- z!IfK)&0cqm3C}2&;?r?z@xz9!rsQ<2hpBY&ExhW9EBH`}w#lFo8k?zD%jjn0@Kpvb z?l;s1i;P~U1Af?oyHb&3VWqA?|HPNyQ_9#b0~q>$#9I6uB6mSQ1%@#4utWjr`K&T$ zf0D&?P+C2u%&@Y`;UZ0rT0``D?gN;Dj(Den-#7X{}g`JK31W9_`N2ZykGIN-&w)1y~a~>pBO#b-`{^o=v)Sf*yUgzAXxwF z;VXDc|GavMwBQfLYA(C0xjCz6w+7{1a|yK7ATdH^Uv5||>dFrO&1W-|bWGmB`orh8 zMEIk+2J%nk@Xvv{d}J=aGM9fhm;W%A|1_6>7frofm@2;pVoW0qoaNfgfX&PeoX_F> zJIz_7BG1XfEXrwze=i$TUR^+ApmSwq>bY591QWBIo7|k4{OqhTXR{LiUmN&21%3nk z51K@TV0K=a;>wif&dS;#e?vv;M?-Q9eCZ503fs?OpqTs$IL@+}LW}b1 zI)^V!n{v@1m*XEZytzY6Sn2x|x(EN~!4ghIbJ5Yx5k3>3NA_M48X)3#g=8(m%-4 zVQ8*kKyQu6Jf>j1yFmtC-xwPT)tt@i>Bm2oHOd9&4O;AXxLR;?{H#Uq>kE@t{ z)Cv|l`24CypZdb_m|+as_NH!sNPcRdy9I1K?Csnvn>k{Vc>FDkWpYm}X-!fcJk%e{ zqPcxXD-H;(N4EsV6GKS3__{zd5QE1dYmgGQ3A%X>qVk_b@;N9Pg{D&anGK&RJn!aB z5%Ha3Qe{cklN~x0e@CbDtV9rZKI_Oz#kvgn$32GECG2*D%XOL1jNdq_P~u<_X<&XYt{g z^j_{YMQuT)Jo@RAsc6*SVx-QS`HE*F zDpxf$8ls4b>!j5SXSbn64atE_1T_^z52?xxQGINtwW5ZU7UT8XPgsD<&|SlYI;wp_ zbgDq3hhlzZoa+EtkB_@a1elM$Xp>9&i*a9bcWbEsjU19(9>HdR&U|}cRL|>X@EiEA z(<#@iQ=abYiYbSH7^sFE)hFtyUK2rVv}Gj{4%COO4MsyQZG3lYAxpHxqASva*dJ}v zbvf=K`e_YWwom-zAk|jJ(kg=!;|L6nNuXenvQU`-NCgF@ZV6-aCi5eI7|Hh zPBlUJ%pMB-uW=y5UlCDbO*4-u!8p{9alYQnLH@d|=OF(_p;5vKl{hKt;G5GXcWzh4 znK??xW_$l>4~o*E@$PO3$3+z;8CP1U=l9{vODA9Cv`N~3i1bYxOX#M}AbFZ%E1M=D zPg5aJHo};@8EDbiDoVO19Ek)~l-~5`qG{}~46JE*X`LvVeq)RyiZ1R8Wa~AMuoEPk zAVwdZ*uY3fCo~sy2A-xec&!R6FvZ`^1Op??XCFM!kl0llN`Ks3xaHVfz`-LaHOV1d z-V#;)daNja!Bg>{1jkY3m@{cC@d{Y##9NemYGjEbtZC_LLhiD(+A|#+ZNO?GM&es) zBtB@+62}JVgM5(NwI0`#nnSzs8#G@?v-2cf&j)OXBo&!SU9F&K%SD%!j4j%OZSv3Bk{I8h+ky66kkB7luCU zu%~3_O(4)U`OOdFeQ3dFlO!`0%ot(0aF|&e12b8B#LcukW$v`94%P@*iJf#OqYZ_!4-NnZiGRo1uR$VbdWy6g4ykNl0BAl0R0f--53% znbZdLO+DyaP^*t>C8dBhq+NoI3VZYx`TeAo1C={Qz@hO?WxmCiY4#HTtX92D_)=+{ zFWowZO(L%ExIvugOJQG}NyX$!@~7Ezx+i;r=1`NO_mwVn4(z>4voE-#fA;Fhv!}y< zw=UAaiM^l8I@3E%RXhM4UAu&@URCn`?OpA6Ly4hJ!#emC4S^dBKb|fL#ZRg{9U2_+ z{lP4M1iS6$a1`D@`{n)Px6dBmIS^ryg%|n0V3;GpIP@<@L+!FyTn0zI&|S6d>ctD| z>xFgz`9;pm&)8m*N0RlL^a44>?jhV>)6E%-Z2^CJYkxg3(MOc=YQ4(@kC!d4HHm@8xq9)j)J)qOv5;!Kj9hLM-w^in!IXD z>;hF%v||jY7JN-g{#lnGhzJ#bt0l%31~E0FLKuOLhy1ib-TqEvZW?pgm`{!Q7)`>3 zn}myIZ63?pheyZ9H|c2i_;~Mh=lJ;KQXzy9ZcQsuN?wjj`q4dA+XN%q4Amt!i?Ck|*53=(x z&(~jN=V6|MM_*<0Fw?<*qkm-cy}dOI)Zobb6UMcWue}2sfsa*PV}2pWzCe3LQe?l< z6N`F6n%PYuqsvKR568O)-sjTVQ8eiYXwX#x zEcYr=#}jz?oYe3kq0-(X)|Q>Avc`V`M{aXlHh(`0uLXkB=oJQkvq*;sNgWUpe)$eh zzBNS*?;lOxHNC5kPRU&f-s?DmG~Jg|7d7KwrEGEF22PYJ0Q(>YC)?WeL| zm$Yiv*}?X!Z-%N*sQ!?@Oh_%cTV|yah~7&l5i6yhOGsWQee_{jJitRpIWL-%jLtWz z*bhx)2?58le31-)De2*C1*bH=b{x#GPP3yEU-h%#=$1&VQUX6y$hUrxecL4LlF}Kr zV64pS781%S#=dRXI|yyqEPeBz`aS$q3B8b_a$HKn1o!Eza4~8NePsC`Y1LCD^Gofo z@`VRLGLncw*`|-tCw!GJRY&P`)UpOnDc^#}J9;B0bm$L%e+qB+(Fv$*pUOzVV{P0a zJu_PuJ7pqCiAk<=_>XEBA5U`I`P zaoJ6#6L$o{uT{JDBsGiwee|#CT9F%YA8zuY?R6sl)ST$gYcl_rlwgrf4VAXv+%kz`Oi9VRWI9Ox%eMxysc{+QD#SIo3RWd{UokK^3s}) zzd&lUh0q%?SyklNUc6EICFNyM*z#Fd1Ba@e_)?r;W!O%h=|IHM zsdWNp!XVX|D^U2XMVN^wzlg-RxnwU1gL9-}x~A~I;q^$+f5myMrYnQc#HdD%qKTfT zlX`OQyeZ~scFvm|ek~n{_Bmuanw#^J?C9LgPcno$+OUD2yA7<^*_(#^bU2FFY9)`? zdt|Cli8lU%bgr>l%h#x3q*Gl4ksF)~-!KD;DsfR%zkB!khY=fCl;^iesdXxE!uCd0 z_zNaQd3!)2e~JX#!|A@i92G%>Urh6H%}1B=s6J6%6p^r4S`di34+5d5T$X3hKGXQ_ zy=@{O=6;J~T#afFS0e=UZWu~}<;t4%xgIk^n%*E@M6Jg9+fYsj?f%rLlXYejLmRm? zmmxJlAwkYmMI4qUy+pp_8}npnp>mW%r)>~}p4t+&f1RCckkfc$2A^^{60zBVoDcdF z`+&)-*!nQ}#jIA8#oq+wUJloOin{IHnhA3N#{U!Yx*A>oDU!XA7A7Rj4>~SoJfcq) z?F+o!5?~Gw^tBQHKcLOS^a6VmMK0locBV2b-4 zWfY-5>dT?@#iktMaqSbspnHG0!T6IE`I+MJf5R@YU38^DoGTIl5d8^Wng{d%dF_L& zC1rcvcn77kMjz~VcVV!V(X`4aqb4ilR8g((^*zv#x}{jHh7>z$dw#y$1w6|vlPPVXjKKUjwomUZHn<4)IZh1)R ze^m2BCCxY;lLqkT#{A~2$xlzwJMA0wJViTg``KTHNaN2uc7|9t(@bx#B7|^qf>N`S!@V0 zr*Z0g>Z@hb5Vk31pz9bNnbWT8vj0XJf4N`PP^WxQ6a@HV9@Szk{8 zTJ~nKu0Y<~a<_@_7%B86nfR{1mGz0^pPc~?>i(nYK_7?Tnv*aB;2#t8!^^7+fA%Sp zJBqP)i9I@z;P70U@Pt<@wC}Rw6eh2+@^6|rB=tzD?$z`S)+BGE+OU>2MshDZihTZK zV~W!Jf>-9wV#M}S43Ig7TWJ~@DXXXNN~@>uN_AOM4h{aSzIsC;b@UXt#Gbhjk8m4I zg3V3yGYuw9zhXNhzSx}(UhEE+f8|8F+r?v7n^GN9j11#~1CX_)|G<XWi*x2`txUS@93@%_B6>v>Rch$g(O)7gxDetv% zPkl+Zkcj%CHvki8mZdrMp-OfxOBVI49G#a<+tH+qbN!IU6XxHE3*9`*uC1l@J3n-F zFkQ5w&=kdQiQ0#QT5AaQf4bBMtSvF!ZS7&hPTBGH>o@OTy#C?NtLoKiqs{-;J^@R` z9smrYA=40QDO7uhPO-&+;YG)WQA5peBEMM1*~ioCS62POw#{Wq`?{2aoMoY~(?cl< zQ4tCLg-$6pn^nL>;teM{1kIsFON6P2beE2Fm*v{D^7bN7gKH=he+Pv7FiS?e>BF%z zjN)(v568)5>*(Lf$={BT)AZrR0NAhyG10JbarCGQ5g>y_(j7HGaiq7_#tURGdv!zh z?`tJ`P0JWIxujG3?cAS3tQRKP+D{%Q!84+_EA{QNyvtwm^%pn+wpc^PUM};}oXdzm z{P*78L$k0?$H(p8f3`~4Cry`E-OfWZD`Qd68Ht>iE=YrP4X@)Js6uCvVsRHQByTmG z_Ylw92oOhBAds8g3ecF*wgvef*`BD`yDVj`h9gpKMz^g7{Y0fn&i0*xv~lRs_|1B4 zuBB2qp#NN)eJne=J$hCD$-XoQmSHXj7c{hVE-&Wy(`^1Uf5N%Y4N=6n>@nvIabW}c zfr7!@>HB=(i@+>^!p4od`X`iL5A(K2Qg`G(a3E98H1fLCwvl=cuFIq9WS3C>oAArc zTJMOfa=?Oxj8+0k*BY&qdNcHFz}tb;`i>H{ln^rDus$^m1#0klNi!@tsOwj)BbJnhw zGBS{DtcD#Ac)Ay zjt5==54=z`cvqPgotDlkBytW9nQ)rY5uHq+@Qj-3EBOc76tWYhcTo;-Np*GY>yp6W zYrNi#6FpUScV4I#ODJ0VfN@sJSO6)T1COh)m24jDRiB|`w87jfsdl^6^I|u2Xa9c~ zI+lq0f1~HpjZS4Mi^`DL_R+M+u$7~{}*@G%G|H%OisunP{7bVd7^ z&>TUSa~`{Q2~{^FRB0{6%^>5q%4#^3H;lr8e~RWkdd6!A{QJI+-|Tg@efgM<6TJ)) zWoFyVi#&Ku&o(`%nNqlB`q`_QGuWC@vOSbOebD2#^|Se8y}Y))nI}~H(IvABKBqn& z&ir~Hxgd{_cZ1cu@267s@nLvPw8?tv29|hzGeS%w{W(>1z`fcPx*>UQW6{KSk|o3U zf5Tn9iC#Xd2r>HJHV0k)OHJNXGIO0{aX@(BVh)6 zi$Rh)GX;B{;|^4I6!f)b7uvUKd&M`XpV@_f3y$uksMi~<&^jo-`kUNnfBL)py@S+A zo1|GWV#uHjdipvA0%IU_xKoyi&O!~nPajS3)QhmZTyksQ_?Jlf}>8`NUJ7eM-%9 z8MpAH7RKBC*}UQ8pUUL-)V#GD$8IrxeyX|r^I*e2Mb`I2YUuBKIN`nZ8-J1nc`3`g zlzZanDj@;9)JZStfA%_R0+~Uf%^55HE^8Q+n#00)hkV~ib!06S2G9m{|5Lmri*Bxb z>Jg!(oQ#8Oq-q%6q=?~7$fMiQz0Gful-G=X`#X%)TLf2srcQ}D_W>HbTEUmz zCP4`2Z|`I-Llj=64>K2e`K8Q-{V>Dbp;(4hawg1)0-hHIvc7|tc+G+5C0c9Xc}c7; z@VtbH_Dg*4c?o4#JOoKLXSoW$?FhExA2XCoIj>_Pj)Y~w(U=>dG1mcmg;zJwjMWOt z--K%CCrY+G-sbD}`-3TLmF*At4~h0A`^l<7Q3kiTPY2pJt{9zHtut&*nsfqX!rM?t z!^`Wefkjc^>{|u1oOr0BLU}EGkTb&8AjV)k_is_gr!(@Oy{qCLP=>dgBHQfcyl5>Y zDu}SXe_phVNx_Nx)>ELgxAWuOU3Ow@kILq#K5MP5GJtXyG)0BDks2(KMp&1q7w%nI zmEkDm2+@ak&4VAb>}|#hE!=Mmv{$F5iN+@ADtRort3?NiFwTeWL!tSuftzkbjl%`Y zhcMCHrKRHD+<MYe3C&pGJXOhgFg~~a z=}R+4dK28dum#H)%yYyRpB|LWMP!UC*XM#v+r7qzGqkD7M^)XI~67 zrMPbPmGvJO4@^U#^%|xFp3O22qp$fk^ecrJ)hbz(Trke2wY2vk*G32>bQLEKQfA01j4$U9SBfL|uk48hg}zZ_pi5 zOn3Y4g2kS;^0{!jhreu`5xnSNT#dg)U5;;nC8EzAS~e@NyDkYnWn?jhq{lAf&Msrg>eq3X zy2PXI1Vy269a*-M4&qJ}u`N0E{Veh6h(DpM0xaF5Ve9m;HPo2ktd7WaF)ADm4(;7Z za)YOcGde5HArZwd%_MGAP>zm*a#%yA&jIYJg(;IB?6PMSN8%aH2jbne`0Ij8SOR+W_w2_kwL5Z>jN*!Vc6y(hHaLr z59hENX9WF=kFQDYPX}xhH!fgrd^WS1CpJrj<#ip6yfo%|Xr)>Ie=AK#&lM zX-*W%kVw?G_OmvHS5o+OQp(VZoY}oHvwMYY0R3K>r8ezocEVr&!p3u{fu^s~XqGtf zq)INM;>}ec}htRZ343zZ4Ny!Tu*#%&MaH z^*?qcUAppJy8B~PF@G}dO4R$LOCrQTt7rxu568f348EQ?e|5qIL1|CgBl>ZY9VQn> zvQ5sD3zBlUry%KIL$UdD+kokbbY$*3(l~0#mQVNeY_58SkjMj{jJhamthk<#z?Q%Y z+&wsf%>xIOj30!S&de>+Q(k!?k=v2MSSJf}iP?ZrWVGE#;WKc&31c-tG4_HugvnT5Hj#hbWffwI5l> z!ET9>M28)fU~H-VwedXOg@=|{KhtTo49WyvFp(vdU@B`n%Tfz-f%r+5t1L5enDhR)q^Y_9cu6j-0skYio$)W2!6hM1&Kz$|0>f0R!HLZun(!6PNls7*t_8LnzwC#_*` zAOA9TxsMI#UplKm+(nIqe6a;ybIaWR`H20b{Z@?aRgAH2NF3v3X}w-yZH&75Wqo5k z#5nSc*eRPS6T)lT8Dg^h5U3!pY2avp&9%FJWL|n1NjE4uRPJ`rYZINE$S*9rMzMMf ze}bOdYNvKH@sA;$#i`O+oSpzX#@5|>f=S0MkU3nPH@40jTW74!yYcG08&c=p@?k+t zlWu!_1V4E=x+rqg%vIHce@AkY-Es zVPajIK0uP(YT$2Pvr*Wm=zdY%El<8J{Xu`7eO^0ciCKeTB?7c@?{eLTaEC%PC!!43v{N32${Wkqn&e{4ngeQ)Dn zZwrKobB5`3+%oK89_2e~LB30coBs~S$KT2%_sDGqsG|fQ55_u*8s{>}TknPcETIY! z0aqpwSvlHVO9_IE+iX`A=aeiM--tHpz)Lucs*~K$0Vc--0{?7o2RtZYRdNU+U-q}a zsz#t%wo8Us=EqD>FnpnJf2fc{mI@$1C@_P^`MM*g>i>p{4$QBmd#gBtYX7f&H>4N< z;F{h4@hBnCsoU&!RCfFhPf9Gjjb>#_G@oB+?5Q8sKy3}^OwslycB}3gAWn)5>)Grk z&f!vJt$rrDn0;RwWZ&6m!ZM8s;pUBIoh{&tRhsr1SH+FE^SvhkJ$S=kyUvB_T@%;DZOlP~Ju&Ds9`wKYG9@D?T=8T zFKaTg8`IgvOnBaGe@9^0sUUk&*KlsB%(QLYZ(Q>>8#(gGZ{_7HDat!n=dpgdI#-m| zbNSN0_uRZ}dTHW}6+cLynPj4m5V6!>QJhRa_)3_u_O7A>DRiNUr>>#SrM- z1S=~S}Z5&9vH?-aI%`0nndHnGBc(#Yua(g+N%k4ZA$Q%;-97GGye4hsctWsOE zt~Z9h6Kf{GwXE48Pgxei7aR~d-Gp*2?ifA?soo!1?n%FlBUxLoK6uUfRTBe4?d8VH+?rr4;;a9cXKpQC+J_UMMN z1(5Bbb@UnD0=L1Yv_#hp!>pm?d}ezn{|?#dFU&+K#=*M$y@Uwd2J|F z22N@Ae***1dAyi8SGVcOH$ushT%cHAf6XJYLNP?4G?)sq#3DzjKt^>S5U%^a>rS(}I+fVXE$ zSe*EZ?+s*J=W8b~OSU?-C+FE68!cF6!LDjF2sfx&^&`Dwul10+Ixi2Fh)9zdrEzB1>*hxW zc~C+h+U&&RBnDW_qRSesE8%}T z(%fw~@&!VN-;vLGn!&<&TUC8WetQ>h|1Z4Z!L2>1u;t z!YUG}!)M=Rgn61HbGA`Go?O^%U;p(m8-=;3M=B!Af7a3WVa|FdSmyIc}E)3lyo3bTQ0L_SDn9aPbKBANghp`+oo3>sy(*oDd^rN{sYp_>0 z>O)ZX1u7}bY-WJN%}ZkqL>8u-neM!T=4t0BHGYpq!@&+biUYNWs zp@-aoe|bIq_{XyD;3u3{3`SYPn_BEu@O5Z(Id9FZ%;)t5{JA!>IkxG%Eao#{1MuU* z7KWb~4;5QiGzK??xjZnJkIdy)=JN06@*n2%pN5)@|3H>Y{tgV?Wp_0<^8yBIhTX;3 zv1M0W@t{HHIU|pP3}Uk|O=pLavG?2M)m7fyf0~Z^G%!+ShoKr89(f$DPnMDV8$&51 zNBGBv&Er!yOL53nDC5a)3S^x!b3#hLCm5*^N^hV14GH~CYdobBD$Aep`ohY<#1B9i$-^TS=mk8#Yf4)~UgasjR5;e@60%vVeWww}H| zeE;j4XAfNFUHMLFevk9QFzh`vPy5M7e-F(|wT0VhQ!YAL-rk0f?}7f1}~70;{8uX~+eEqpBH*xRlxc6J!`z7xEC+>Zzkm$4b z|GjkMXtdw^mwI;TzQ^aI_y7H5zxQwXxO0XyeE#zFrzljX4`3~W=zTonKh(?ae(xW$ zNe>9W#{}@#oQD)2bf4Vc@A+O%YaNh$yZ2!mGVS46|5NxJzKrCcy_6Gyz&yX2G_xHQdQS9ZDM&)y7^!|RA&D)c2U}gzy-Ru2c zsvbG#=QBi7{^kJynuvE7oiQ+wl_#0e8-KCPZr1S`iFfr>KEVnif6T5uf&*A6K1XM-HAlRe#}VmgsX}Lx<@@)q62JrbC`f-y z{8y;ge+8%^pK970eDNRkqNI0$m#0}#n{)cR`1pH_NszYsFG^>33Pc_!59|mx1LaTz9;;XgjY%Htxo-t zDND3c8eEps_A=t}Mz)y;ID}|U{AaWuqq@(aPugz1oe;Iup>qeumQ5&svL!pMrUW^wWdCpn#msC(72%9wNb%%!$a9ljx=y=VCmfLoZJ<^Vo?-(TR(|#; z8D8pgdPfy9+zbSFR8b5QFZ#Rxtv}0tSo)E8DKq4s`W*S?z7|RD+nD*2Yqq-sX}U{F z8fLL4FXFTCe>Gqq`>$XLy4=}e(s7FaV&^iK&nGB@hJ*;(Wl~kZRCy|Im=q>vnlQlw zSfnq89HOXT4$}x(t(hq1q9(OFA=+rfh*cN+N@R6iU7T=TK0Y`{&-d;RFzj2KIg7N3;cS4dRF28m$%a51ZAV|d7~RXE}^TM zoIdN^Xb@nNZq5d;dl%>!Re&b!4c9!w?wjtrx9~4Sp*J!_vR6D|p8@ierXlQ%Lh*gS z@aszdgfB#bZ`&aGn&$YihqNn==&h-XeSrafxW$BZ5W#ya ze^PBU;YFfh1Ue?)Q%8dU{wgj-&Lze7Z{sdXWc*y)qGNi}7xjPe zUC?Kv;sQy+!@-q@YJY{t+sn{P1vN)Fjc1)m2Nx8;6*D%J+z%wZsL-e!{%J9O31oND z53qnmai_?`pTY!sY3U(h)r^Xb&^S@@f0zLo8B2uUQ-R~YSSEpgv;3sxQD9-W62c$y z*!=>tXFxE3UvTZ|*&!U>)3YP??}wtMiVUDW-=hO7i=xjw@n_U$Q`oB~lG%UmPvH9V zy?+%3k)M7MCtpFU5&iab1|t;s%bdLtQjf=0{XOnn_U0gpuXz4u#2V)I81+Iaf1KbY zZxofp6^{Eef%-m2&>mn8UPGektumIPD?yIFIR&#vsL$xFda5}#)yVTHlS}e!8Vs9D z)=ko>eA2C0L5uhptM7cCcvzuyahCjXp2nz0(zd%lf6#e_!lDCpcTZW+_J^=8Ib>>h8&n@k)bt2doVfY0me? z35A2{lQnzkV;X^b2dvXk4Z)Wzcbk9>7_eT=G&yo~Z=ZHp{@iz{?HK(W_j1vGRFLy? z@qVPs`n|GzKdOrSJ&Leu=#Bh#J&B69y^16^QsP_Mi&xolmAzy-@SiZEe->U=o(Y1~ z1bYl(4STbqFJOVA_9M9O{s+~Ur@s|>5mt;Rc5zA3(i#s_*vfM4VWmSTmmbEdLZ=s= z^a6{7_ZR<5jGq0iE(~uxky0s>r=GeIX1ASK7(!JlIi`$@F)3|v8kc<;b-nE7rqW`0 zW|;x0TXrN>O88QXDR-frfA*zfkGSjNrFQ>U@6xM*P-qHkfv)zjBA2-~hkq$+;%d_R z!KtVN^^LmW&tbjAN_-Qa&0hom$5fb?r>OI|r*ER>^CT?Nmo91__R8*%LM6dQaEqlG zE^DBg z9F!USX1FF!%aWa)y=HIF-zQ%!_PoN`I!WQN{#lQ`QesyoesyKJa#&5~t_1iVM1`du zT^3Z0An3sI*Q}n}#9$__Y+2VAiZ+y$FOe{qk}b7`2b4yf#AtaooBspJL=J~ve z$ydbHJpd6alrnBoNH`|z58#c1m->B@bFwPqmzhnIt_ls{e{8b)DND)w#2-yObP=10 zrFeqXv*9icOe-au6{Hf+lR5|<(arRNqxcE`uXqHTKf#gYPz#IT$Vfd=>A2gw zR}e|q)8Zl)cBY~juNdwYF_6{hlEn!|xe7&bCZ5qsor@~bhrC2ZeYielTCxS1fEV8Q z*Zu@g>FztVe-ZrdFKpF?q;VZ_3DmUUc;%m9l8&Co-<23zEWL)rG=E5dX`xuii$I@> zR_A+fQuMr8ar-(jY;kco-}`JVymt0Rt6NoVGI*d}SmoI~DGCB6Lti^^#=6jx1w(nf z{;zQm;UJk{5WfY?7^SzYvcf;%>nGxFz%6mZp4N2Lf6sr&ma9JhgIR}xEskn5)CFXj z5i_f4H#?iT`WcW`@Jwra4n zjle$hYniZQN#)3CCwDSaYH$pG#^i`4rEDH@nJ{C9cA!<_F46u`w7_U@lpvt4@bsZ4 z9N*ZTf4X~GPDO{0#p%a>yokPt%TB%}5kwfhxYnPj(VU@JmOGiNjO-$jm&)45lJ=uX zr_#|Wvi`*~WbVBLj`2iN#Y3GflyIJtHY3sV`}gu2c;U(qG2v?wLg8&`oysr^C;JyU z0Mc7g8Q=0*FxQc)bCA5!Kat;*jC7-@r^EaFe+Fc;Knji>i4|}po?(168_#PBZ}=C& zbwGTFGXKV9$752h#ryZa>ND@@z8SicNMEz!pRptBLG~IU6`zaYkZ-fsxB41)MS$(b z@fL1YKjCO&kF_oGgSm&AHYwe3iC3vUrhJu8t2-Ij?}k@J#Dt5=@87Sy+uUxFR>zhW ze**XXl3BLG6qs37MxVn>QdOmR#b+{;zr;+WW-l+g1Xn_RF;VpZr|hya;jp)?oA3-? z*_e3ImZ}@96|(5|W6bFYb6b{|GR>E=SGFwU*b97hz)rm)pOKhUgEj;Of3I%eg5244 ze6N;=b&C8qNC~c@qC*r{sS5Z(gbETjf8U%k5dOg{`F^Ejem}nrmv4K&tJ^T%`b4AO zW4LxP$_45>t(cT$agIo4Oz&Z$bXDg}oky%wS!F}sQdRm_QQsmu&3Ljfc~=mhp}Pdb z*;sqPvnu^dSbmZ`C$4aLR(I>3%ssXMdRDUTzhbT)p{)-2cY#o&px2S=s`6DLf0Zq< z5)tEWPu||Myd~Y4FvemXXrW!z5<4tK?3iNL1$h>60o|~(MMz#vL?7e2&SiUaO#o@RscOC0d>ne!8d}{IxbMCeE*AZ zGwJz7)l@I(K6#$7h^Ls(XVM-0T6&<;)_ob*BiWY%WgFtvcd}1UTic122RJOE3_&Zx z{1$o2F{7Ab1a3vA%CV+5TQ{hKp4*Yq{R8HPASP3+sn${1p0&C3a;;dmfA?*o$~DY@ z^>}>yc-C04%#~}Az?HhKJl|WaSfp2#o)W_?*FO`xkG_AH#!n28`7LRc+Pp%6s>)6vg%+Y3|(?7d-^V#J- zkK6(MzSM2qU~n8}e?2R@_g2I1RbtI56Vfg*QLm`f2NuMrK4DiUp2Bxe#%1H14!#*N zbITrFsFM7OC7zM~VnSZ!pLAIog&Vx;MQ|SGAQ(j1j0w4rA@8$)7cvWoAcNBlNweeby*0z*+rv1_ zeVLN@pI+$jx7@O)r4Ha%Zk`K?i{>)RuMCn@eZ`8+f5j@<@hwV#%Z~mHbI!~=%(E3^ z4$0Vg0TPu$H2TXJP04^Ju zx@^c9$%NK0hT__ciofxw-4o)mmJ>aZrCOO61#XrS($}!&ffKA%S{@uVx-HL;W-M1eW=^ToafDOCWc?S4<0zYB^*f zPu>Lb@1A1N*oW^9*cDIoOe`2|^hm*Bdp&ydn+{CGD|V|}ge!oEuY!ztoBJxkMFAn; zx#08oL0?SjNk?|UM&UgWM&RN+p${Q^-@kvUe|qZ(EY*&rpvy-fHVT#nn!;~h7)0;5 z`%ZpU@+Q^r`MxKML7V}I*IiBm!oONJ$0e?BFK=7$byot*pTkqUd`Y+*unu4%s18~8 z_T(VWqYpz16!sP|OPLGlZR}EPfvrr?ZMGUk`?W2vFW)j{BH#D#K{!@wYAhp>tEt6W zf2Hy_UYpeQxw1QKibb=!)a4v*Cp8O{nsWp%~=Q3{=yLDPT+}C|9E__T! zMK|I*7>bQM)gpS>o`v1hqM}NPX-Jrb4pqi`DK`V$S-1DRfN4E0L1hI*S@mWLGkP7k zOL~;RQg_Sy)5U_xGbkm7jx0lHE{Z17Hsjo z(8pl{8%!}^3{+Dn)`Pt5$&kxJ5)GNBnR!%IvCF^J-4*Z0JuO0W^m$bES-gsSh4mZ# zC+d}gH%DJaJuOWMnO-{ar>hBFRK)QmTh0187|hw&#R^hgX>#we?S*sXw)a-Wf5;M@ zVK@^bZzfeL$1X|wJ!ZrZF|R7(mA~#OcVj(778#xYgmXNfdxl^Vo!p&RszD0WaV5t1 z)+^16>wlhU(P7&1Vhos;_Ku+mZ_Gb0*?NY=4(oxDTskI#Roe^)bTf2-8l?@9*7q90@_(>C)4DyC5@SiuWcZ>)RAGl;&0 zWrhc$UdWY)rFT%7MaPozFhP;1&lB0!i+r6MwaOLfswqEf88lA_?;RIU|M6~k+9WVnfHTI5Ml`C)%`cGAG|+5@0|U& z`})%-=jUCP7DiiB|NVazPht6E94` z?(c8zzvk^(>Y4L?kGy8@_IS3MC#bN)-{;c@f9#J6q}N>>!S_m~ zl1@g$6F8a1qsP2n$7pcan=q3IfdkHp! zVZigBm-4 z-sCOM#)%(&&YsIZ;mh0JuU_>qlyVO{Umh?yNm??1GoNCvm(S&TrCE&nJ0Y{;FBE^g z3y-G~JY|(C*vtGY@!)fAJ>VauemEQbicTH{@z*J^14q1@f2VpD0&izh|*YGs6GDQQSu-kxn^*R zmBC4vqGSW<{Hg|uIta~DJdiqw;0bE1-%MrF``#H|+Djjzo@5j~NOFtP3r{&0btR=~ zxiZrspI$-pnak@8_H9AT$1wm%&3g4pf4XdozzCHzzWh8PzgHH-m(m-B zOOr|$U682QKF8YM%CB1Oc*=HMYmcGr-dXy(8;h-Dzku_@zxC}Gj>f63@9?iZT6JA^ zSySDe%3gpxU~!Rgu$5yxg8k)%{J%*2u$pVqflOGIr<&bStW7Xg#z*qa!rM$&_zL7R z6C3MMf5Mc+_!{0Vc@|T)tN3$<>(Y()q$HgS%=*q#qbk1d5@!Jx2}a!GjL+2dR6aDLiHlc6$(ODk!bJV zM^EG@^td}l@D!LI7~~qBg?sUnSmB74xb`(>E7V z#ORe3GngE-Tx3o{{#;dM$jfwSK*!RYs64zLu>14_EgPQJ8B@P%#`crFoC_nzKGn{f@!3lAWnEV!Tv{ zH0O&3-zS_wm-Bu-6A8LlBP?O?r5}9}(Tzl!+5GcDi6|__!-^bz;qfY&@?}>)di;up zhF4x$csFDJS<%;&V6VE56x_Trp(VNHe*?l>>x-$p(6LA263CK%f0297^kjJoc{S8T znV+hn42C8Ch{@grmAw-MTh8~cf^5#qoV?4q0#k6+2Wau&0BIN)edRG%AR&ajnW&t$ zf9{{{xjv zn&*nx>z>krhA_@{Pd)N=Czip95{|qhC;>|t+ip3!u^O2Y!-WhK7ae<>G)7sLKW zq&?Ita+baJ)l_iSI2Gktg>#`#St&5-Q|bibK~R`uNmX_rwPBfdlqp5og9mai^w)3~ zWSlhjx|9XeJrObh2*-lKbP?_E%I~to+QiXtpvzs1DdZVn%i8^{#8-0#sp8TyI+Hv& z1mETa&2lA3a9D5P&7#BQf0Qyv8I=f&>+5RT8fimK{b&7{C~#;w_ntMAEet?Q@TXk> zl>u4UF%oXcNSGG&oh(_&%3bozQOa4n5TEB%eFJc1+tP46vF%K3V`5{XiEZ1)j_pjW ziIa(K+qTV_*!pwtd+)3It4{Ul)vA5=sp{&rx>xtM%eL$~bva(jSu^qFw!b?v3{UIh zd851O!P%93JecZOty*fOW>TJ`&QCt^3)8e;QrGCBEu7=2zn7NLPK#rDfqCpcjU0P4 zhL;SF8e*^0e(keJC!>)^l~8Nx1|&yNaW`1mY%=ZEZM@fgGZJg)TyXXgF`as6?1Qnm zs)>u$RrF>E>vY%SUpG#ZCrL&PY>x->&27e-?~dwEj$Aa0jMIf+4J7L8$f}x5_c4yy z!}2nRYI}U$sA!N12+N0RfUa7+jz52A>GuE`9OY7GCB7@CtCVlu;;n0K5wZ!y>{x(m~WaTL|1dXe2Yi+MQ5n!DKz)K*>2_a|W!WBi?# zhKpd=C`kSA>~8zP%~1~u=sgSa(tPt3IEJ3$6@_Hbv2XpMCc=l>4tR=S5V;fz)@zEj31eVykK&!nGe@Xm2)I{qvS#;};3^zu%(6A_h zh&P-Kmn?TrSlXe2G%k}@x96djqlMilx@${EN7(9dH}CcW1kNn(x;f+I{cdBGPZP=$rK{48fNg zZ+XR`b*Obc4|%*%V7dN_IoI!tqI2Vts6UVrC;OD60TMC*=AmGtx`^pLa z%1(jXuHshiB~!3t0BaIhfvRB0kk^0v+dLNTVH9KC(2!w)EP~uAo`T^BDJ6fz2*Hs0 zuX#w^Y~DOJsBhpI#Oas(1aiR*{`w7^4vpN|j1_)eT8}K9W!OB@@)-V2L7xFF(Gv)%MtTYLKS z*y6h`V5ho(u_-#hV{*Y+&-{HOwjmEW9V<_g7KSn6Je@XN6h)TrMx-)sjuBnziNzoR zy{H{CzWHIt$>YzNIc_8d@&bH`^Ju(B!5iUB&WKlKzfX?=Y9SbS%ignT|4Q2~>)VyZsDHuyU13$-HB#<;MZyRgmFk{K!pINbxikuYPG+oiFe7u zwWkTA$Sl^(SU!%4TrVXCdwOWwJl^F3FS1#Irj%>MwN+v0&=1eDm8^V9F*&`XIx5zP z11YY=gt9y&wT|>)SjVQ$5BDq(WU>+nl(NKj=MTm)4X}=n!1EX@T-&zq(yZvaGL&nw z0At!F%mCa>7cZ-a(|U z_Eo~HT{M}RWEi)QZnZo9My~4?_U~rH>wCC9SiUA;;^Q$xM|mB|r_eI#CF3TR>Zftd z>aiZpG#o=s0rO$u5_BcGMj20m75)APNK)z-!*^8cPR0nhUipZG9W+fR6Yen=7f#^o zH3!T6#-#$2lr0%fio6Ps0X~=~X)%=dtK=zeQ_NweO%maqKuJTjBQn*~>G#(lN` zCaSTNqb+XnXU&F~n}tjL$FQWm?%!nROCGt|U%c*{F9(c7AA}9iyje}3oJm7%aGZRfJx@}0xc%mt4R~lFG_hY zv;`#gTx{sGf8Xf}%X7&z?$Gaf?>kzM24(O=`GV>VZaBmCr)TGj@RO`OroSK3U|A#_ zogQ^^aWTHg{9;S9eR*24duJD{>2HD;0A*(EwCQKK+(Kmv}6Pl5vmCZ!k6t&+6aK~gG z8=BOR<`~V{&{7h>q7QQP@=j)MUsfjAtIzMO8TCB|1%vbHDz5d(dG>bo3II=a0u9MC zaowlGIQaqo0>vAR!aa0Kxv=;r)|+3X-p~7jJ}JsF_w1khi#Txg+b#UttqP^QA!b7|gL8{-P3b0rq3&mha)tymsr*bhnz}_A})E9S5(KNng;Db_3$H-%)f&7zRylD6F~DM zV`G6hn)N8YMtGI#KV1A+fO)m~dDpL3WjMk%8y~xxxwd9|v>I6P^96`2@VT;K{7|wg zsww1J7^RT*>^)~*G)XkklyJ58oYXeiLQi7xIG~h6q9lDY@}qhJzoVZv+0-b-jiKYC z$*V_d9+f_nX?u|O;W7BFEiPh`b-DeiGCekb`Ly(UQMflFf75(JQYg*2%g!1BK5TdX+TWASKWCfSO{0en0nA-e zOu9RhK1cKq;upYu=M`h%@slj?G9E!+&7-Z|iOEd|%B$J+V%z21n-unWzS48&x+9}; z*H!`38z*X@(mVVy+SD(f?4W_1zl`ns^qz!0MAhp4SgoM21uu4(JuZF^b5iMl@9s^9 z?LkR$jo$s}-#3rX30}^;Fef`XafidVhZzIT2hef%S(|}B2AfV%mLWqgFOz1a7d$s~ zT1B6e;~u>`araRFn5peK1NcKY$Qe!Rp+(K~py6vRjJna8nHNa%t&?q|`iS&Udt47I7EF%SZue$|cA_bY zSQ4r_-k89+C}+Ppk)}VG{`GO_Rm3=kV|!rs`JfAw&XK<+>yc35n$ehTmP?z8zpo*} zMlJ=J>5X5<-qLZ*`cK=c*|U78j_Qq|*Nt9$&}*}%@AIO_j$HK~AbIH%{Q zFC!TWaukTe4~0biuCSpxVja{P{tbmF%u3g@j7PI8_IqjUnceY;NzpEmav(TaXKJb?!C1Ix?h(g5cr_ zfO&(5IyLO4`Q`Pd2>)jodLg3n8eOa!h25pi2u>77pWRRUD=8?_bd_)ePpLYeQ_2_g zKCT(yR-(I}r?zs}`1ET5JDjD2_UDp)3g7$|%67F1gI804^^Q{$WNPss7& z>6~nCV(t!YdIb#V5`>37CTHKPp)H6sR=M3W^q|dCrt`3Ao&K&i2TvWGA+gD*I?Qtc -*!U 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